Закрыть окно         Список других документов библиотеки Серкова

.шп8
.цв
Программная логика DOS.

.шп0
.лв
             ЗАГРУЗЧИК 0 - ПЗУ на плате КНГМД.

C600-C65B  Эта программа получает управление при включении
           питания, по командам PR#6, C600G или 6 УПР-P.
           Динамически создает в яч.¤356-3FF таблицу трансляции
           дисковых байт. Вызывает команду RTS и извлекает
           адрес возврата из стека, для того чтобы определить
           номер разъема, в котором она установлена.
           Сохраняет номер разъема, умноженный на 16 в регистре
           X, очищает дисковые регистры в/в, устанавливает
           режим чтения, выбирает НГМД 1, запускает двигатель.
           Устанавливает головку на трек 0, устанавливает
           параметры для считывания сектора 0 трека 0.
C65C-C6FA  Считывает сектор, номер которого в яч.¤3D, номер
           трека в яч.¤41, адрес буфера данных в яч.¤26-27.
           Ищет адресное поле сектора.
   C683    Обрабатывает адресное поле сектора. Сохраняет 
           прочитанный номер трека в яч.¤40 и сравнивает с
           содержимым яч.¤41.
   C6A6    Обрабатывает поле данных сектора.
           Читает 85 байт вторичных данных в яч.¤300-355.
           Читает 256 байт первичных данных в буфер с адресом
           в яч.¤26-27. Проверяет контрольную сумму.
           "Складывает" вторичные и первичные данные в буфере 
           первичных данных. Ваполняет инкремент яч.¤27 и ¤3D,
           сравнивает с содержимым яч.¤0800, чтобы определить,
           нужно ли считывать другие сектора. Если да, то вновь
           загрузить в регистр X номер разъема и вернуться по
           адресу ¤C65C для чтения следующего сектора.
           Передает управление на ЗАГРУЗЧИК 1 по адресу ¤0801.

                     ЗАГРУЗЧИК 1.(Сектор 0, Трек 0).

0801-084C  Она загружает программу загрузки ОЗУ, ЗАГРУЗЧИК 2,
           содержащий RWTS, и выполняет безусловный переход на
           него. (Загружаются сектора 1-9 трека 0).
            Если это первый вход в Загрузчик 1, то 
           перейти на ¤081F. Создает адрес ПП чтения сектора
           (¤C65C в нашем случае) и сохранить его в яч.¤3E-3F.
           Извлекает из яч.¤08FF адрес первой страницы памяти
           для Загрузчика 2, прибавить его длину (в секторах)
           из яч.¤08FF и установить это значение в качестве
           начального адреса загрузки.
   081F    Получить номер сектора, который следует прочитать;
           если он нулевой, то перейти на ¤0839.
           Перевести теоретический номер сектора в физический,
           используя первый в качестве индекса в "преломляющей"
           таблице по адресу ¤084D. Выполнить декремент теоре-
           тического номера сектора в яч. ¤08FF для следующей
           итерации. Установить параметры для чтения очередного
           сектора и передать управление на ¤C65C. Когда сектор
           будет прочитан, управление на ¤0801.
   0839    Установить в яч.¤08FE номер страницы для определения
           точки входа в Загрузчик 2. Выполняются команды PR#0
           и IN#0, вызывая Монитор. Инициализирует Монитор
           (текстовый режим, стандартное окно и т.д.)
           Получает номер разъема и переходит на Загрузчик 2
           (адрес ¤3700 для основного диска, ¤8700 - в
           окончательно перемещенном положении).

           В составе Загрузчика 2 в "нижней" его части загру-
           жается копия Загрузчика 1 для будущей разметки
           дискет.

               ЗАГРУЗЧИК 2 (сектора 1-9 трека 0).

.ов

Загрузчик 2 состоит из 2-х частей: загрузочной "основной" программы и пакета RWTS. Первая из них, опираясь на RWTS, находит трек 2 сектор 4 и считывает подряд 27 секторов (сектора 0-4 трека 2, трек 1 полностью и сектора A-F трека 0) в область ОЗУ, непосредственно примыкающую снизу к Загрузчику 2. Последний сектор (сектор A трек 0) попадает по адресу ¤1B00 для основной дискеты. Таким образом загружаются основные ПП DOS и мененджер файлов.

   В этой точке процесс начальной загрузки дублирующей дискеты оакончен, после чего предпринимается безусловный переход по адресу "холодного" старта DOS.

   В случае основной дискеты осуществляется переход к специальной перемещающей программе по адресу ¤1B03. Эта программа имеет длину 512 байт(в случае дублирующей дискеты в этой области 0000).

   Перемещающая программа определяет размер памяти компьютера путем записи и чтения на старших страницах ОЗУ, пока не будет найдена действительная старшая страница ОЗУ. Затем она перемещает копию DOS с адреса ¤1D00 на ее окончательное место(¤9D00 для 48К) и используя таблицы, встроенные в программу, модифицирует машинные коды таким образом, чтобы они правильно выполнялись на новом месте. Потом перемещающая программа выполняет безусловный переход к копии DOS в области старших адресов, а старая копия забывается.

   Загрузка DOS завершается программой "холодного" старта DOS. Эта программа инициализирует DOS, отводит место под буферы файлов, устанавливает HIMEM, строит таблицу векторов на странице 3 и запускает программу HELLO.



.шп8
.цв
Основные программы DOS 3.3.

.шп0
.лв
9D00-9D0F  Переместимые адресные констнты:
  9D00  Адрес первого буфера файла, а именно, поле имени файла;
  9D02  Адрес программы клавиатурного перехвата DOS;
  9D04  Адрес программы видеоперехвата DOS;
  9D06  Адрес буфера первого имени файла;
  9D08  Адрес буфера второго(RENAME) имени файла;
  9D0A  Адрес параметра длины ряда(использует LOAD);
  9D0C  Адрес ячейки, содержащей адрес загрузки DOS(¤9D00);
  9D0E  Адрес списка параметров мененджера файлов.

9D10-9D1C  Таблица адресов программ обработки состояний видео-
           перехвата DOS (CSWL). Состояния используются для
           управления обработкой команд DOS, как выходных строк
           оператора PRINT (номера состояний 0-6).

9D1E-9D55  Таблица точек входа в программы обслуживания команд:
             INIT     ¤A54F          LOAD     ¤A413
             SAVE     ¤A397          RUN      ¤A4D1
             CHAIN    ¤A4F0          DELETE   ¤A263
             LOCK     ¤A271          UNLOCK   ¤A275
             CLOSE    ¤A2EA          READ     ¤A51B
             EXEC     ¤A5C6          WRITE    ¤A510
             OPEN     ¤A2A3          APPEND   ¤A298
             RENAME   ¤A281          CATALOG  ¤A56E
             MON      ¤A233          NOMON    ¤A23D
             PR#      ¤A229          IN#      ¤A22E
             MAXFILES ¤A251          FP       ¤A57A
             INT      ¤A59E          BSAVE    ¤A331
             BLOAD    ¤A35D          BRUN     ¤A38E
             VERIFY   ¤A27D.

9D56-9D61  Таблица входных векторов активного Бейсика:
  9D56  Адрес точки входа в Бейсик для команды CHAIN;
  9D58  Адрес RUN;
  9D5A  Адрес программы обработки ошибок;
  9D5C  Адрес "холодного" старта Бейсика;
  9D5E  Адрес "теплого" старта Бейсика;
  9D60  Адрес перемещенного Бейсика(только для типа APPLESOFT).

9D62-9D6B  Таблица входных векторов целочисленного Бейсика.

9D6C-9D77  Таблица входных векторов для ПЗУ-версии Бейсика.

9D78-9D83  Таблица входных векторов для ОЗУ-версии Бейсика.

9D84-9DBE  Входная программа "холодного" старта DOS.
           Сохранить номер разъема и НГМД в качестве величин,
           принятых по умолчанию для командных ключевых слов.
           Запомнить какой Бейсик активен и продублировать его
           входной вектор. Перейти на ¤9DD1.

9DBF-9DE9  Входная программа "теплого" старта DOS.
           Получить сохраненный в памяти тип Бейсика и привести
           плату ПЗУ в необходимое состояние(вызывается ¤A5BD):
  9DD1  Запомнить тип старта DOS. Вызвать ¤A851 для замещения 
        программ клавиатурного и видеоперехвата. Установить
        NOMON C,I,O. Установить состояние видеоперехвата 0.
        Выполнить соответствующий тип старта текущего Бейсика.
        (Выйти из DOS. DOS вновь получит управление, когда
        Бейсик выведет свой символ-подсказку).

9DEA-9E50  Первая программа обработки ввода для DOS. Она
           вызывается программой обслуживания клавиатурного
           перехвата, когда Бейсик выполняет первый после 
           "холодного" старта опрос клавиатуры. 
           Если активна ОЗУ-версия Бейсика, скопировать ее
           таблицу входных векторов в таблицу входных векторов
           активного Бейсика и очистить буфер первого имени
           файла, так что файл HELLO не запустится. Установить
           MAXFILES=3. Вызвать ¤A7D4 для построения буферов
           файлов DOS. Если была активна команда EXEC, то
           закрыть исполняемый файл. Установить состояние
           видеоперехвата 0 и сигнализировать о состоянии
           "теплого" старта, вызывая ¤A75B. Если последняя
           выполненная команда не INIT(DOS не была только что
           загружена), перейти на ¤9E45. В противном случае
           продублировать в яч.¤3D0-3FF копию векторов DOS.
           Поместить в яч. ¤3F2-3F3 указатель на программу
           "теплого" старта DOS. Установить байт включения
           питания ПЗУ Автостарта, поскольку адрес обработки
           RESET изменился. Установить индекс команды RUN
           (для запуска HELLO) и перейти на ¤A180.
  9E45  Проверить, нет ли отсроченной команды. Если да, то
        то перейти на ¤A180, в противном случае вернуться в
        вызывающую программу.

9E51-9E7F  Копия векторов DOS страницы 3, которые программа,
           описанная выше, дублирует в ячейках ¤03D0-03FF.

9E81-9EB9  Программа клавиатурного перехвата DOS.
           Вызвать ¤9ED1 для сохранения регистров при входе
           в DOS. Если выполняется не "холодный" старт или 
           не чтение дискового файла, то перейти на ¤9E9E.
           Взять значение, полученное в регистре A при входе
           в программу, и отобразить его на экране.
           Если работает режим чтения файла, то перейти на
           ¤A626 для получения следующего байта.
           В противном случае вызвать ¤9DEA для исполнения 
           первой обработки ввода. Поместить курсор в
           следующую позицию экрана.
  9E9E  Если исполняется команда EXEC, то вызвать ¤A682 для
        получения следующего байта из исполняемого файла.
        Установить видеоперехват в состояние 3(отображение
        ввода). Вызвать ¤9FBA для восстановления содержимого
        регистров. Вызвать действительную программу ввода с
        клавиатуры. Сохранить введенный символ так, чтобы
        он в последующем восстановился в регистре A при 
        восстановлении регистров. Проделать то же самое с
        новым содержимым регистра X. Выйти из DOS через ¤9FB3.

9EBA-9EBC  Безусловный переход к действительной программе
            обработки KSWL.

9EBD-9ED0  Программа видеоперехвата DOS.
           Вызвать ¤9ED1 для сохранения регистров при входе
           в DOS. Получить номер состояния видеоперехвата и,
           используя его в качестве индекса в таблице адресов
           программ обработки состояний(¤9D10), перейти к
           соответствующей программе, передавая ей выводимый
           символ.

9ED1-9EEA  Обобщенная программа сохранения регистров для 
           перехвата. Сохранить содержимое регистров A,X,Y,S
           в яч.¤AA59-AA5C. Пока работает DOS, восстановить
           адреса действительных программ обслуживания в/вывода
           (KSWL и CSWL) в яч.¤36-39. Вернуться в вызывающую
           программу.

9EEB-9F11  Программа обслуживания 0-состояния вывода.
           -- Начало строки --.
           Если команда RUN была прервана (загрузкой ОЗУ-версии
           Бейсика), то перейти на ¤9F78 для ее завершения.
           Если флажок чтения установлен(идет чтение файла) и
           на вывод передан символ "?"(из оператора INPUT), то
           перейти к состоянию 6, чтобы пропустить его.
           Если флажок чтения установлен и на вывод передан
           символ-подсказка из яч.¤33, то перейти к состоянию 2
           для игнорирования данной строки.
           В любом случае установить состояние 2(игнорирование
           несистемной команды). Если выводимый символ
           не УПР-D, то перейти к состоянию 2. В противном
           случае установить строчный индекс равным 0 и войти в
           состояние 1 (накопление возможной команды DOS).

9F12-9F22  Программа обслуживания 1-состояния вывода.
           -- Накопление команды DOS --.
           Используя строчный индекс, записать символ в буфер
           ввода(¤0200). Инкремент строчного индекса.
           Если символ не "возврат каретки", то выйти из DOS
           через ¤9F95(с отображением символа на экране, если
           установлен MON I). В противном случае перейти к 
           сканеру команд по адресу ¤9FCD.

9F23-9F2E  Программа обслуживания 2-состояния вывода.
           -- Игнорирование несистемной команды --.
           Если символ не "возврат каретки", то выйти из DOS
           через ¤9FA4(с отображением символа на экране).
           В противном случае ввести состояние 0 и выйти из
           DOS через ¤9FA4.

9F2F-9F51  Программа обслуживания 3-состояния вывода.
           -- Обработка оператора Бейсика INPUT --.
           Установить состояние 0, если INPUT завершен(¤8D).
           Если символ не "возврат каретки", то отобразить его
           на экране, если только не действует команда EXEC
           вместе с режимом NOMON I, и выйти из DOS в любом
           случае.(KSWL установит состояние 3). В противном
           случае вызвать ¤A65E, чтобы проверить, выполняет ли
           Бейсик программу или находится в диалоговом режиме.
           Если действует команда EXEC или Бейсик находится в
           диалоговом режиме, то перейти к состоянию 1 для
           накопления возможной команды DOS. В противном случае
           выйти из DOS, отображая символ соответствующим
           образом.

9F52-9F60  Программа обслуживания 4-состояния вывода.
           -- Запись(WRITE) данных в файл --.
           Если символ - "возврат каретки", то установить
           состояние 5(начало записи строки данных). Вызвать
           ¤A60E для записи байта в файл. Выйти из DOS с
           отображением на экране, если установлен MON O.

9F61-9F70  Программа обслуживания 5-состояния вывода.
           -- Начало записи(WRITE) строки данных --.
           Если символ - УПР-D, то перейти к состоянию 0 для
           немедленного выхода из режима записи.
           Если символ - прогон строки, то записать его и
           выйти, оставаясь в состоянии 5. В противном случае
           перейти к состоянию 4.

9F71-9F77  Программа обслуживания 6-состояния вывода.
           -- Пропуск символа-подсказки --.
           Выйти из DOS через ¤9F9D(с отображением, если
           включен MON I).

.ст DOS (логика)2

Закрыть окно         Список других документов библиотеки Серкова