Из журнала ZX-Guide#1, Рязань, 28.11.1998 TR-DOS Level 1: 15635  Alone Coder Функции TR-DOS, вызываемые из Бейсика, обеспечивают использование далеко не всех возможностей системы. Разработчики предус- мотрели ряд специальных функций работы с дисководом, обращение к которым может про- исходить исключительно из программ в ма- шинных кодах. Это так называемая <работа с диском на высоком уровне>, в отличие от файлового уровня и низкого, т.е. прямого указания контроллеру. Все вышеупомянутые функции выполняются одной программой,переход к которой осущес- твляется по адресу 15635. На самом деле в ячейке памяти с указанным адресом содержи- тся NOP/JR, но есть данные, что переход к адресу 15636 срабатывает не на всех видах Speccy. Параметром для этой программы яв- ляется регистр C процессора,в котором дол- жен содержаться номер команды согласно ни- жеследующего списка: #5 - чтение секторов. Считать с текущего дискодава подряд B секторов по 256 байт и запомнить их по ад- ресу HL. Начальная дорожка(трек)должна со- держаться в D,начальный сектор на этой до- рожке - в E. Обычно эта функция используе- тся в загрузчиках моноблочных программ. В этом случае следует сделать LD DE,(23796), то есть вспомнить номер сектора вслед за последним считанным/записанным блоком дан- ных,т.е. в данном случае сектор аккурат за бейсиковой частью. Как сделать моноблочный загрузчик? пи- шете сначала вот такую бейсик-программу: 10 REM 16 штук пробелов 20 CLEAR 24575:RANDOMIZE USR 23872 Потом с адреса 23872 (если обращения к TR- DOS со времени последнего сброса не было, то с 23760) любым приятным вам способом заносите кодовую программу: LD DE,(23796) LD BC,#NN05;где NN=длина кодовой части, LD HL,ADDR;а это - адрес загрузки. CALL 15635 JP START;адрес запуска кодовой части. Она, очевидно,занимает весь REM. Это самый простой случай - когда кодовый блок один и запускается без распаковки.В более сложных случаях добавьте пробелов после REM и вставляйте всё, что вам заблагорассудится. Запишем нашу бейсиковую прогу на диск: RANDOMIZE USR 15619:REM:SAVE"IGRA"LINE 10 За ней впритык спишем кодовый блок, после этого загрузим Disk Doctor и исправим дли- ну бейсик-файла в секторах с 01 на суммар- ную длину бейсика и кодов,в первом символе кодового файла запишем код 00,а в 8-м сек- торе уменьшим на число кодовых файлов байт номер #E4. Загрузчик готов,и он даже копи- руется.Конечно,лучше был бы загрузчик типа 0 INK USR .<а дальше бред> #6 - запись секторов. Записать B секторов подряд по тем же правилам.Следует заметить,что эти процеду- ры останавливаются по Break и выдают сооб- щение Disk error и т.д. с очисткой экрана. Если вам угодно это предупредить, запишите предварительно по адресу 23746 вместо RET команду вызова обработчика ошибок. #7 - показ каталога. Эквивалентно команде CAT с тем исключе- нием,что вывод производится в любой поток. Номер потока задается в A(стандартно - 2). Желательно записать номер дисковода(23798) также по адресам(23800)и(23801). Абсолютно бесполезная команда. #0 - команда восстановления. Головка дисковода возвращается на нуле- вую дорожку. #1 - смена дисковода и тестирование. В регистре A должен быть номер дисково- да:0="A",1="B",2="C",3="D". Тестирование - определение количества дорожек (40 или 80) и скорости перемещения магнитной головки - не производится, если дисковод уже был от- тестирован. Следует отметить, что перед использова- нием этих команд нужно открыть область си- стемных переменных TR-DOS.Сама по себе она после сброса не открывается, отчего виснут все известные мне ассемблеры.Можно войти и сразу же выйти из DOS, можно также вызвать процедуру 15649. Еще неприятной особенностью этих проце- дур является то,что при чтении/записи сек- торов подряд они всякий раз делают лишний оборот диска при переходе на следующую фи- зическую дорожку.Этот недостаток исправля- ют многочисленные TURBO-LOADER'ы,использу- ющие непосредственное обращение к контрол- леру дисковода КР1818ВГ93. Программа 15635 имеет и другие функции, но они мало относятся к нашей теме.Коснусь напоследок только одной: #13 - копирование дескриптора. Копирует 16 байт из адреса HL по адресу 23773 (область дескриптора в системных пе- ременных TR-DOS). Этой командой можно про- сматривать коды TR-DOS из программы вне зависимости от версии системы, не включая дисковода.