[an error occurred while processing this directive]
'021B' - устанавливает размер экранного окна в полную экранную страницу. Кроме того устанавливаются стандартные векторы ввода/выводы (ячейки ¤10-¤13) и включается текущая текстовая страница. В зависимости от значения старшего бита в ячейке 'COLOR' включается режим 64*32 символа (страший бит 1) или 32*32 символа, с установкой зеленого цвета.
'021E' - дизассемблирует одну команду процессора. Адрес команды должен находиться в ячейках PC и PC+1. Команда выводиться в формате директивы 'L' отладчика. После выхода из подпрограммы в ячейках PC и PC+1 будет находиться адрес следующей команды.
'0221' - делает почти тоже самое что и предыдущая с той лишь разницей, что выдает не одну команду, а бесконечный листинг, также как директива 'L' отладчика. Начальный адрес тоже должен находиться в ячейках PC и PC+1.
'0224' - выделяет из входной строки числовой параметр. Входной строкой является буфер ввода 'IN' текущую позицию в котором индексирует регистр 'Y', указывающий на очередной символ строки. Подпрограмма считывает все цифры числа (незначащие нули опускаются) вплоть до символа не являющегося цифрой. При выходе из подпрограммы в аккумуляторе будет находиться символ преобразованный из входного следующей подпрограммой:
========================================= D2D7: 49 B0 433 ПРОВЦИФ EOR #¤B0 D2D9: C9 0A 434 CMP #¤A D2DB: 90 07 435 BCC ПРОВЦИФ1 D2DD: 69 88 436 ADC #¤88 D2DF: C9 FA 437 CMP #¤FA D2E1: B0 01 438 BCS ПРОВЦИФ1 D2E3: 60 439 RTS D2E4: 29 0F 440 ПРОВЦИФ1 AND #¤F D2E6: 38 441 SEC D2E7: 60 442 RTS =========================================
Эта подпрограмма проверяет является ли очередной символ строки цифрой. Именно она преобразовывает символы не являющиеся цифрами в некоторые коды, значения которых можно всегда определить воспользовавшись этой подпрограммой.
Подпрограмма выделения числа помещает прочитанное число в ячейки A2, A2+1. Кроме того если ячейка MODE имеет нулевое значение полученное число копируется в ячейки A1, A1+1 и A3, A3+1.
'0227' - выводит на устройство значение аккумулятора в виде байта, состоящего из двух шестнадцатиричных цифр.
'022A' - выводит на устройство значение аккумулятора в виде одной шестнадцатиричной цифры.
'022D' - вводит с клавиатуры один символ, без формирования на экране курсора.
'0230' - устанавливает вертикальную позицию курсора. Новая вертикальная позиция помещается в аккумулятор, после чего вызывается подпрограмма 0230.
'0233' - точка входа в отладчик. Предназначена для окончания работы с внешней программой и передачи управления отладчику.
8.5. Структура системного файла.
Как уже упоминалось выше, системой обрабатываются внешние программы расположенные в файле типа 'S'. Структура этого файла проста. В первом секторе располагаются начальные данные программы. Это ¤100 байт, которые после выполнения команды '[BOOT' разместятся в области ¤500-¤5FF. Начиная со второго сектора идет уже сама программа, и эти сектора будут расположены последовательно с адреса ¤D000-¤FFFF в странице псевдо-ПЗУ. Максимальный размер программы может быть соответственно 12 Кбайт, если не считать одной оговорки. В старших адресах памяти ¤FFFA-¤FFFF размещены системные векторы процессора, для реакции на различные прерывания. После загрузки эти векторы устанавливаются системой, и при возникновении прерывания (например сброса) сбоя в работе системы не произойдет, она лишь инициализирует некоторые переменные и выйдет в диалог с отладчиком. Но если Ваша программа будет занимать все 12 Кбайт и в конце не будут установлены требуемые адреса реакции на прерывания, может произойти зависание системы. Поэтому в случае максимального размера внешней программы при ее запуске скопируйте значения векторов из страницы псевдо-ПЗУ, или установите требуемые адреса непосредственно в своей программе.
8.6. Структура загрузочного диска системы.
Думается, что некоторым пользователям захочется поглубже закопаться в систему, поэтому чтобы облегчить их труд я привожу информацию о расположении системы на диске и после загрузки в память. На нулевом треке системного диска находится загрузчик, который выдает на экран заставку, и загружает всю систему. Кроме того загрузчик обеспечивает запуск системы, подготавливая все нужные для этого данные, и производит вход в отладчик. Загрузчик считывает информацию сразу со всего трека, т.е. заполняет за один шаг область объемом 4 Кбайт. Это справедливо и для MFM накопителей - у них также задействованы только 16 секторов, а оставшиеся пять на каждом треке системы объявлены во VTOCе свободными и поэтому в них может производиться запись информации. Загружается система в следующем порядке:
========================== Трек | Банк | Адрес -----+-------+------------ 1 | ¤C166 | ¤D000-¤DFFF 2 | ¤C177 | ¤E000-¤EFFF 3 | ¤C177 | ¤F000-¤FFFF 4 | ¤C166 | ¤D000-¤DFFF 5 | ¤C16E | ¤D000-¤DFFF 6 | ¤C16E | ¤D000-¤DFFF 7 | ¤C17F | ¤E000-¤EFFF 8 | ¤C17F | ¤F000-¤FFFF ==========================
Приблизительное расположение модулей системы будет приведено ниже. Точных адресов Вы там не найдете (делать распечатки с каждой версии системы автор не имеет возможности, т.к. это занимает более 200 страниц), но приблизительно оценить что где будет намного легче( в приложении мы дадим список переключателей, которые позволят вам обращатся к подпрограммам системы).
=============================================================== Банк | Адрес | Содержимое ------+-------+------------------------------------------------ ¤C166 | ¤D000 | Подпрограммы ввода/вывода: Драйвер НГМД ЕС 5088 ¤C177 | | -//- : Работа с клавиатурой | | -//- : Работа с экраном | | -//- : Работа с принтером | | Отладчик | | Командный процессор ДОС | | Подпрограммы файловой системы | | ¤C166 | ¤D000 | Экранный редактор памяти | | Экранный секторный редактор | | Драйвер MFM накопителей | | ¤C16E | ¤D000 | Хранится программа работы с подкаталогами | ¤DD00 | Подпрограмма вывода сообщений | | Текстовые сообщения системы | | ¤C16E | ¤D000 | Внешняя резидентная программа ¤C17F | | ===============================================================
8.7. Устройство диска для MFM накопителей.
В связи со значительно большей емкостью дисков MFM накопителя, в новой версии штатной ДОС был введен несколько другой, усовершествованный формат диска. Этот же принцип использован и в предлагаемой системе.
Количество дорожек на MFM НГМД может достигать 160. Поместить информацию о занятости секторов на стольких треках в один сектор не представляется возможным. Поэтому так называемая битовая карта (BIT MAP) была разбита на 3 части, и размещена в разных местах на диске. Первая часть карты находящаяся непосредственно во VTOCе содержит информацию о первых 50 треках (с 0 по ¤31). Начиная с трека ¤32 информация хранится в отдельном секторе, который располагается по адресу: трек ¤32, сектор 0. В этом секторе располагается информация о 64 очередных треках (с ¤32 по ¤71). Третья часть располагается на треке ¤72, сектор 0 и хранит информацию об оставшейся части секторов (с 72 по ¤9F трек).
Никаких других принципиальных отличий MFM диск не имеет. Между тем хочется заметить, что несмотря на кажущуюся простоту изменений в ДОС, в реальной обстановке могут возникнуть непредвиденные трудности. Автору (А.А.ГОЛОВу) пришлось немало попыхтеть прежде чем были выловлены все (дай бог!) ошибки и неточности в файловой системе. Соавторам (Кобозеву Андрею и Николаичеву Никите ) пришлось немало попыхтеть, чтобы отловить все (дай Бог!) ошибки и неточности А.А.ГОЛОВа.
[an error occurred while processing this directive]