TR-DOS ДЛЯ НАЧИНАЮЩИХ
В редакцию ZX РЕВЮ приходит довольно много писем с просьбами от начинающих пользователей о публикации начальных сведении по дисковой операционной системе для ZX SPECTRUM. Это письма не только от тех, кто совсем недавно приобрёл компьютер, но и от тех, кто решил заменить свой магнитофон на дисковод.
Несмотря на то, что подобных публикаций было уже довольно много как в изданиях ИНФОРКОМА, так и других, мы решили дать наиболее полный методический материал из неопубликованной книги В.О.Сироткина из г. Краснокаменск, Читинской области. Начальные сведения мы приведём в нескольких номерах ZX РЕВЮ, а наиболее интересные для опытных пользователей сведения по программированию контроллера - в готовящемся сборнике ZX FORUM 4 (этот уникальный материал имеет такой объём, что опубликовать его в ZXРЕВЮ не представляется возможным).
При редактировании мы не стали менять русифицированную терминологию автора (ТРДОС, СПЕКТРУМ и т.п.).
ГЛАВА 1
ОБЩИЕ СВЕДЕНИЯ ПО ДИСКОВОЙ СИСТЕМЕ ТР ДОС 5.01 -5.03.
(коммерческое название БЕТА ДИСК ИНТЕРФЕЙС).
© В. Сироткин, г. Краснокаменск.
Дисковая система ТР ДОС (в дальнейшем просто ДОС) СПЕКТРУМА, в отличие от других компьютеров, построена довольно необычно и оригинально.
Вся система ДОС записана на ПЗУ ёмкостью 16 КБ и при работе почти не занимает ОЗУ пользователя, за исключением 112 байт для своих системных нужд и 257 байт для буфера информации, считанной с диска или информации для записи на диск.
Буфер начинается с адреса #5D26 и является перемещаемым. Область системных переменных ДОС начинается с адреса # 5CB6 и необходима для работы ДОС. ПЗУ ТР ДОС находится по тем же адресам, что и основное ПЗУ СПЕКТРУМА и включается в работу только во время обращений к диску, отключая на это время основное ПЗУ.
В этом одно из преимуществ и одновременно один из недостатков дисковой системы ТР
ДОС.
Преимущество - в экономии ОЗУ пользователя, а недостаток - в невозможности вызова отдельных подпрограмм ДОС обычными способами (так, Вы не сможете напрямую из БЕЙСИКА дать команду контроллеру ДИСКА - например, "найти на диске 5-ю дорожку").
Отдельные подпрограммы ДОС нельзя проследить ОТЛАДЧИКОМ в пошаговом режиме -всё по той же причине. Единственное, него можно добиться, так это отслеживание работы всей подпрограммы в целом, да и то не всегда!!
Не верите? Тогда попытайтесь исполнить, например, из ОТЛАДЧИКА подпрограмму ДОС по адресу # 1AA0. Ничего не выйдет. Вы будете приходить к одному и тому же результату, у Вас будет исполняться подпрограмма по этому адресу, но из ОСНОВНОГО ПЗУ.
Как Вы, наверное, догадались, попытки считать информацию командой типа PEEK приведут к тому же результату - будет считываться информация из основного ПЗУ.
Как же тогда включить ПЗУ ТР ДОС? Вспомним из описания команд ТР ДОС адреса 15616 и 15619. Первый адрес - это включение ТР ДОС, второй - исполнение команды ТР ДОС с возвратом в БЕЙСИК. Дело в том, что аппаратно перехватываются все команды процессора JP, CALL на интервал адресов с 15600 по 15699, и происходит переключение с ОСНОВНОГО ПЗУ на ПЗУ ДОС.
Если Вы, к примеру, даёте команду CALL 15606, процессор, перейдя на этот адрес, одновременно включит ПЗУ ДОС, и вместо кода #FF основного ПЗУ по этому адресу встретит точку входа в подпрограмму ПЗУ ДОС. Выход из ПЗУ ДОС происходит сразу же, как только
процессор покинет адресное пространство ПЗУ ДОС, т.е. выйдет за пределы АДРЕСА #3FFF командами RET, JP, CALL и др.
Мало того, во время своей работы ТР ДОС забирает для своих нужд все адреса портов ВВОДА-ВЫВОДА, блокируя все порты компьютера, т.е. запирает опрос клавиатуры, джойстиков, входа магнитофона, порт бордюра и абсолютно все порты стандартного СПЕКТРУМА. Это надо, иметь в виду, когда Вы подключаете свои устройства к портам СИНКЛЕРА. Все порты начальной конфигурации компьютера должны быть блокированы на время работы ПЗУ ТР ДОС!
Блокирование портов в стандартных схемах СИНКЛЕРА происходит прерыванием сигнала IORQ процессора к микросхемам, ответственным за адресацию портов компьютера.
Стандартная система ТР ДОС включает в себя достаточно много команд для обращения к файлам, и может возникнуть закономерный вопрос: "А зачем вообще эта книга, с её подробным копанием по всей структуре ТР ДОС?"
Кто уже сталкивался с этим вопросом, тот уже знает, что если программа, которую адаптируют на диск, не использует системную область ДОС, не затирает область системных переменных СПЕКТРУМА и расположена выше адреса 24500, то всё довольно просто. Но если это происходит.?
Тогда простыми методами не обойтись. Надо резать программу на куски, загружать куски в свободные места ОЗУ и потом перебрасывать туда, где эти куски должны работать.
Если же программа в процессе своей работы может сохранять своё состояние, уровни игры или загружать их в определённый момент, то, как тогда поступать?
Тут простыми приёмами и стандартными командами ДОС не обойтись. Вот тут то и потребуются все те подробные знания, которые помещены в этой книге. Система ТР ДОС может работать с дисками различной ёмкости : требование только одно, чтобы они имели размер сектора 256 байт и были размечены (отформатированы) в системе ТР ДОС или в программе "DCU" Н.Родионова или аналогичной, что, если разобраться, почти одно и то же.
Диски, размеченные в ТР ДОС, имеют 2544 свободных секторов. Это то самое число, которое появляется после команды FORMAT "filename". Если разобраться и заняться подсчётом, то нетрудно заметить, что: 1 сектор - 256 байт; в одной дорожке 16 секторов на одной стороне; 32 сектора на двух сторонах; значит 256*16=4096 байт на одной стороне 256*16*2=8192 байт на двух сторонах.
В других системах, например в MS DOS, нижнюю и верхнюю дорожки в совокупности называют ЦИЛИНДРОМ; почему же и нам не воспользоваться этой терминологией.
Значит, две стороны одной дорожки (или цилиндр) равны 8192 байт (это справедливо для дисководов двойной плотности, но поскольку сейчас именно только такие и применяются, будем считать это утверждение верным).
Считаем дальше: стандарт ТР ДОС - на одной стороне диска 80 дорожек (треков), на двух сторожах - 160 дорожек ЗНАЧИТ, на всём, диске 160 дорожек * 4096 байт на одной стороне, получаем 655 360 байт на весь диск.
Из них: вся НУЛЕВАЯ ДОРОЖКА ЗАНЯТА системой под каталог диска, системную информацию, а часть секторов пустует вообще!
В системных программах форматирования можно разметить диск она большее количество дорожек или сделать диск быстрым (т.н. FAST DISK), но об этом чуть позже. Главным сектором диска (пока на нём нет никаких файлов) является 8-й СЕКТОР - там записана системная информация о диске: какой это диск, сколько секторов свободно, имя диска. Если в 8-ом секторе с помощью какого-нибудь ДИСК-ДОКТОРА произвести изменения, то можно нарваться на ситуацию, когда диск откажется загружаться, и система выдаст нечто вроде *DISK ERROR*. То же самое может произойти, если бездумно изменять содержимое с 1-ого по 7-й сектор!
Так что этого делать не рекомендую - диск может оказаться набором абракадабры, хотя некоторые системы защиты, которые ставят на диски, как раз основаны на изменении информации в этих секторах!!!
Ещё к более плачевным результатам может привести нарушение специальной области (она находится в каждом секторе на диске, и обычными методами её "достать" невозможно). Если это происходит, то - портится диск, если сбой в первых секторах нулевой дорожки, или испортится часть диска - если сбой в секторах, занятых под сами программы.
Самой главной единицей обмена диска с компьютером является СЕКТОР. Следует запомнить, что при записи на диск файла длиной в 2 байта или же в 255 байт - ВСЕ РАВНО, НА ДИСКЕ ОБРАЗУЕТСЯ ФАЙЛ ДЛИННОЙ В 1 СЕКТОР, 256 БАЙТ!!! Это связано с организацией самой главной микросхемы в контроллере, с микросхемой 1818 ВГ 93 и с первоначальной разметкой диска.
Вообще, все достоинства и недостатки контроллера ТР ДОС во многом определяются свойствами этой микросхемы, ну и, конечно, программным обеспечением, зашитым в ПЗУ, а ЭТО просто "шедевр"!
Как писал в свое время в журнале 'КОМПЬЮТЕР' господин Тадеуш Радюш: "... интерпретатор ТР ДОС написан крайне сложно и невразумительно".
Работая стандартными командами ТР ДОС, этого не замечаешь, но когда начинаешь использовать подпрограммы, то нередко вспомнишь тех, кто это писал, самими нелестными словами!
Самый нелепый парадокс системы: в ПЗУ почти половина микросхемы пустует, но зато на оставшейся половине - чёрт ногу сломит. Наверное, люди, ЭТО писавшие, не думали, что кому-то может не хватить того набора команд, которые заложены изначально.
Но копаться во внутренностях ТР ДОС нам предстоит чуть позже, а в следующей главе мы подробно рассмотрим, из чего же складывается структура диска.
(Продолжение следует...)