ZX-Ревю 1996 №6 1996 г.

TR-DOS для начинающих - продолжение (начало см. ZX РЕВЮ 96/1-2, 4-5).


TR-DOS ДЛЯ НАЧИНАЮЩИХ

Подолжение (начало см. ZX РЕВЮ 96/1-2, 4-5) (c) В.Сироткин, г.Краснокаменск.

ГЛАВА 3

СИСТЕМНЫЕ ПЕРЕМЕННЫЕ ТР ДОС

По анлогии с БЕЙСИКОМ, во время своей работы ТР ДОС создает в ОЗУ область системных переменных, в которых хранятся параметры настройки диска, команды, точки вызовов подпрограмм, флаги состояний и т.д. Единственное различие области ТРДОС от системной области БЕЙСИКА заключается в том, что системные переменные SOS привязаны к регистру IY процессора. У системных переменных ТР ДОС такой привязки нет, как нет и своих имен, как это сделано в системных переменных БЕЙСИКА.

Область системных ТР ДОС занимает всего 112 байт в области ОЗУ с адреса #5ССВ по адрес #5D3B.

Область инициализируется при первом же обращении к ТР ДОС (т.е. при любой команде, обращенной к диску) и сдвигает область начала БЕЙСИК - программы на адрес 23867, оставляя этот адрес активным до сброса компьютера!

При первом включении компьютера, если он выходит в SOS, область системных ТР ДОС не определена, и программа БЕЙСИКА начинается, как обычно, с адреса 23755, но при любой команде, обращенной к ТР ДОС, происходит настройка адресов системной области ТР ДОС, сдвиг начала программы БЕЙСИКА и инсталирование значений переменных операционной системы.

Во время своей работы, система ТР ДОС может резервировать дополнительный буфер для своих нужд размером 257 байт с адреса 23846. Этот буфер является динамическим, т.е. создается только на время операций считывания/записи, сдвигая программу Бейсика вверх по адресам. После операции буфер уничтожается, программа Бейсика возвращается на свое место, и все встает на свои места. Эта операция происходит незаметно для пользователя и независимо от него, если, конечно, он работает стандартным набором команд ТР ДОС.

Если буфер не может образоваться из-за низкого RAMTOP (а такая ситуация встречается очень часто), то возникает надпись, которая вывела из себя многих, кто занимается адаптацией кассетных версий программ на диск, а именно : " OUT OF MEMORY".

В дальнейшем будет показано как решить эту проблему и обходиться без этого буфера. Еще больше места требуют для себя команды 'LIST' и 'MOVE'; командe 'MOVE' необходимо аж 4 килобайта, но я думаю, что эта команда должна интересовать Вас в последнюю очередь.

На Рис. 9 показан дамп ОЗУ системных переменных ТР ДОС после инициализации.

Подробное описание переменных представленно в таблице 2.

Если Вы в своих разработках будете использовать переменные ТР ДОС, то нужно понять одну вещь: если Вы работаете с программой, которая не будет своими рабочими кодами затирать эту область, то система сама позаботится обо всех переменных сама. Вы, конечно, можете изменять некоторые из переменных или использовать их значения, но, в данном случае, это не слишком и нужно. Работая в такой программе на макроуровне (см. главу "Функции ТР ДОС"), Вы не будете испытывать никаких трудностей.

Но если коды Вашей программы затерли область системных переменных, то работать в этой ситуации становится затруднительно, и Вам потребуется инициализировать несколько переменных ТР ДОС, чтобы система сработала правильно.

Вам будет необходимо инсталировать 2-3 переменные + область описателя файла.

Если Вы попытаетесь инициализировать все переменные и работать всеми функциями ТР ДОС, то, скорее всего, у Вас ничего не получится из-за отсутствия свободного места ОЗУ в Вашей программе.

Если Вам все же удался этот трюк, то что же Вам мешает пойти дальше и, инициализировав переменные БЕЙСИКА, работать в нем, используя стандартные команды ТР ДОС ??.

Короче говоря, если это так, то у Вас достаточно свободного места в ОЗУ, и не занимайте, просто-напросто, область системных переменных.

Хотя некоторые программы составляются именно этим путем, т.е. сохраняют всю область переменных ТР ДОС в свободном месте, а во время работы с диском пересылают ее на родное место.

Конечно, можно наворочать в программе ( ради ее секретности и трудности "взлома") все ,что угодно, но поверьте - что все тайное всегда становится явным, а простота - залог успеха !!

В главе "Функции ТРДОС" мы рассмотрим вопрос о том, какие именно переменные необходимо вводить, чтобы при затертой области системных ТР ДОС нормально исполнялись команды чтения/записи на диск. В конечном итоге, ведь это нам и надо.

Забегая вперед, скажу, что составляя программы на самом низком уровне, используя отдельные подпрограммы ТР ДОС ПЗУ, можно вообще избавиться от такой проблемы, как 112 байт системной области.

ТАБЛИЦА 2 . СИСТЕМНЫЕ ПЕРЕМЕННЫЕ ТР ДОС.

АДР16 ! АДР10 ! ДЛИНА ! НАЗНАЧЕНИЕ

#5СВ6 ! 23734 ! 1* ! Если = #F4 то INTERFACE 1 ! ! ! не подключен. ! ! ! Если =00,то область пере! ! ! менных сдвигается для под! ! ! ключения ИНТЕРФЕЙСА 1 ! ! ! и проверяется адрес 23832

#5СС2 ! 23746 ! 1* ! Содержит код #С9 . При вы! ! ! зове подпрограмм ПЗУ SOS! ! ! из ТР ДОС

#5СС8 ! 23752 ! 1 ! Содержит код #83 дла диско! ! !вода 'А'

#5СС9 ! 23753 ! 1 ! Тоже самое для диска В

#5ССА ! 23754 ! 1 ! Тоже самое для диска С

#5ССВ ! 23755 ! 1 ! Тоже самое для диска D

#5ССС ! 23756 ! 1* ! Текущий сектор при чтении ! ! ! каталога

#5CCD ! 23757 ! 1* ! При готовности дисковода ! ! ! = #80

#5ССЕ ! 23758 ! 1* ! При 0 - чтение ,при # FF

запись СЕКТОРА

#5CD6 ! 23766 ! 1* ! = #FF если комманда ! ! ! не выполнена

#5CD7 ! 23767 ! 2* ! 1.После проверки диска ! ! ! содержит ! ! ! количество цилиндров. ! ! ! 2.Промежуточный адрес в ! ! ! озу, файлов типа <В и С>

#5CD9 ! 23769 ! 2* ! 1.Адрес обрабатываемого ! ! ! символа команды ДОС ! ! ! 2.Промежуточная длина ! ! ! в ОЗУ файла типа <В и С>

#5CDB ! 23771 ! 2* ! Промежуточная длина прог-! ! ! раммы

Область заголовка (индификатора) файла

#5CDD ! 23773 ! 8 ! Имя файла , 8 знаков

#5СЕ5 ! 23781 ! 1 ! Тип файла < B,C,D,# >

#5СЕ6 ! 23782 ! 2 ! При <С> типе - начало файла ! ! ! в озу.

! ! ! При <В> типе - длина прог-! ! ! раммы.

#5СЕ8 ! ------!---

23783 ! ----!-----

2 ! Рабочая длина файла --!---------------------------

#5СЕА ------!---

! 23786 ----!-----

! 1 ! Объем файла в секторах --!---------------------------

#5СЕВ

! 23787

! 1 ! Номер первого сектора файла

!

------!---

! ! ----!-----

(0-15)

—1...........................

#5СЕС ! 23788 ! 1 ! Номер первой дорожки файла

#5CEF ! 23791 ! 1* ! = 1 если подключен ! ! ! ИНТЕРФЕЙС 1

#5CF4 1 .

! 23796 i

! 1* ---!--

! Номер сектора в текущий момент

#5CF5 !23797

! ! ! 1 1

! 1* i .

! Номер дорожки в текущий момент

#5CF6 ! !

! 23798 ! ! ! !

! 1 ! Номер активного дисковода, (0-3),

для временной операции

#5CF7 !

------!--

! 23799

! ! -----!----

! 2 ---!--

! При выходе из 15616 содержит 0000

#5CF8 l 23800 l 1 l Номер дисковода при l l l операции с 2_мя файлами. l l l Равен #FF, если канал l l l открыт.

#5CF9 l 23801 l 1 l 1 .Номер дисковода при

l l l работе с 2мя файлами

l l l (0-3)

l l l 2.Признак операции = #00

l l l LOAD FILE

l l l VERIFY = #FF

l l l З.Номер канала в который

l l l подается листинг каталога

l l l (экран=2 ,принтер=3)

#5CFA l

------l---

l23802 l l ----l----

l 1 l Время перемещения головки дисковода 'А' = #08 ---l---------------------------

#5CFB ------l---

23803 ----l----

l 1 l То же самое для диска В: ---l---------------------------

#5CFC ------l---

23804 ----l----

l 1 l То же самое для диска С: ---l---------------------------

#5CFD ------l---

l 23805 ----l----

l 1 l То же самое для диска D: ---l---------------------------

#5CFE l

------l---

23806 l l ----l----

l 1* l Текущая команда для

1818ВГ93 ---l---------------------------

#5CFF l l

------l---

23807 l l l l ----l----

l 1* l Номер сектора для подпрограммы чтение / запись секторов ---l---------------------------

#5D00 l l

------l---

23808 l l ----l----

2* l Текущий адрес буфера = ( #5D25 ) ---l---------------------------

#5D02 l ------l---

23810 ----l----

2* l Сохранение регистра HL ---l---------------------------

#5D04 l

23812

2* l Сохранение регистра DE

#5D06 l l l l

------l---

23814 l l l l l l ----l----

1 1 l Количество знаков на поиск

файла изначально = 09 ; имя файла + тип ---l---------------------------

#5D07 l ------l---

23815 ----l----

1 1* l Счетчик удаленных файлов ---l---------------------------

#5D08 l ------l---

23816 ----l----

1 1* l Первый символ в имени ---l---------------------------

#5D0C l 23820 l 2* l Состояние буфера ТРДОС l l l для перекачки информации. l l l (257 байт с адреса 23846 ) l l l 1. #FF - Буфера нет l l l 2. #00 - Буфер включен

#5D0E l 23822 l 1* l Принадлежность комманды.

! ! ! #FF - BASIC ! ! ! ИНАЧЕ - ТРДОС

#5D0F ! 23823 ! 1* ! Код ошибки ТРДОС ! ! ! 1. #00 - вводит пустую ! ! ! строку ! ! ! ИНАЧЕ - RETURN

#5D10 ! 23824 ! 1* ! Старший байт кода ошибки ! ! ! при вызове п/п 15616 ! ! ! Обнулять принудительно ! ! ! при вызове п/п 15616 !!

#5D11 ! 23825 ! 2* ! Адрес командной строки

! ! ! ТРДОС.

! ! ! При вызове 15616 повторяет

! ! ! адрес командной строки SOS

! ! ! (23641)

! ! ! При вызове по 15619 равен

! ! ! 23645

#5D13 ! 23827 ! 2* ! Копия стека ошибок.

! ! ! При равенстве старшего

! ! ! байта #АА -

! ! ! происходит запуск 'boot'

! ! ! файла,

! ! ! а в 23833 записывается

! ! ! код #FE

#5D15 ! 23829 ! 1* ! При равенстве 0 печатает ! ! ! сообщения ТРДОС . ! ! ! Иначе не печатает.

#5D16 ! 23830 ! 1 ! Копия системного регистра ! ! ! ВГ-93 - порт #FF TRDOS

#5D17 ! 23831 ! 1 ! Вспомогательный байт.

! ! ! Если при вызове 15616

! ! ! байт НЕ РАВЕН #АА,

! ! ! то рисуется заставка ТРДОС

! ! ! и запускается файл 'воот'.

! ! ! Если байт равен #FF ,

! ! ! то система не попадает на

! ! ! подпрограмму'ОШИБКА' при

! ! ! чтении неверного АДРЕСНОГО

! ! ! МАРКЕРА. ------!-------!-------!---------------------------

#5D18 ! 23832 ! 1* ! Если байт равен #FF , ! ! ! то подключается ! ! ! ИНТЕРФЕЙС 1

#5D19 ! 23833 ! 1 ! Дисковод для работы ! ! ! (0-3)

#5D1A ! 23834 ! 2* ! Внутренний адрес окончания

l подпрограмм ТРДОС .

#5D1C l 23836 l 2* l Сохраняется SP

#5D1E l 23838 l 1 l Системный номер файла в l l l каталоге диска . l l l ЕСЛИ ФАЙЛ ОБНАРУЖЕН!

#5D20 l 23840 l 3 l Первые три символа введен-l l l ной коммандной строки.

ВНИМАНИЕ! СИМВОЛОМ '*' В ТАБЛИЦЕ ОТМЕЧЕНЫ БАЙТЫ, КОТОРЫЕ НЕ РЕКОМЕНДУЕТСЯ

МЕНЯТЬ В ПРОЦЕССЕ СТАНДАРТНОЙ РАБОТЫ С КОМАНДАМИ ТР ДОС l




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Примьера - новые игр и программы: Sprite Generator v2.0, EDAS v3.3, Mazics, Block, Super Copy Utilite v1.11.
Всё о спектрумовских играх - о том, как НЕ НАДО писать адвентюрные программы "Island of darkness".
Сплошные приколы - Я - неoднoкратный o6ладатель сo6ственнoй жены.
Handling global variables in Evo SDK - we shall expand Evo SDK possibilities again
Новости - новости Ковроского спектрума.

В этот день...   19 апреля