City #17
06 июля 1999

Ликбез - полное описание и дизассемблер ПЗУ (часть 12).

<b>Ликбез</b> - полное описание и дизассемблер ПЗУ (часть 12).
---------------------------------------------------
                     ЛИКБЕЗ
---------------------------------------------------

(c) П.Ю.Федин

╔═════════════════════════════════════════════════╗
║                                                 ║
║    ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ    ║
║                                                 ║
║              TR-DOS 5.04T (5.03)                ║
║                                                 ║
║              ДЛЯ ПРОФЕССИОНАЛОВ,                ║
║                                                 ║
║               А ТАКЖЕ ДЛЯ ТЕХ,                  ║
║                                                 ║
║             КТО ХОЧЕТ ИМИ СТАТЬ.                ║
║                                                 ║    
╚═════════════════════════════════════════════════╝

                    пpодолжение

Адрес 688.  Перенос  трех  байтов  из адреса  HL по
адресу DE.
688   LD B,3   ;количество байтов
690   LD A,(HL);перенос байта
      LD (DE),A
      INC HL   ;адреса следующих байтов
      INC DE
      DJNZ 690 ;повтор до конца
      RET      ;возврат
───────────────────────────────────────────────────
Адрес 697.  Остановка дисковода. В A поместите зна-
чение системного регистра.
697   LD B,32    ;32 повтора
699   PUSH BC    ;сохранение количества повторов
      XOR 8      ;переключение бита 3
      OUT (255),A;загрузка системного регистра
      PUSH AF    ;сохранение   значения  системного
                  регистра
      LD A,5     ;задержка в 17962 такта
      CALL 15871
      POP AF     ;восстановление значения системно-
                  го регистра
      POP BC     ;и количества повторов
      DJNZ 699   ;повтор до конца
      RET        ;возврат
───────────────────────────────────────────────────
Адрес 715. Командный процессор.  Используется также
с адресов:
751 - исполнение команды.  Сжатую команду поместите
в буфер командной строки;
778 - исполнение  команды.  Установите все для 467,
23825 и загрузите из 23825 HL.
715   LD HL,(23836);очистка стека
      DEC HL
      DEC HL
      LD SP,HL
      CALL 8433    ;изменение памяти
      CALL 7555    ;открытие потока 0
      LD A,(23830) ;выбор дисковода D:
      OR 3
      CALL 697     ;остановка его
      LD A,(23830) ;остановка текущего дисковода
      CALL 697
      XOR A        ;сообщения об ошибках печатать
      LD (23829),A
      CALL 8501    ;принятие команды
      CALL 12338   ;сжатие командной строки
751   CALL 7583    ;очистка низа экрана
      LD HL,715    ;возвращаться  в командный  про-
                    цессор
      LD (23834),HL
      XOR A        ;ошибок не было
      LD (23823),A
      LD HL,(23641);берем адрес командной строки
      PUSH HL      ;сохраняем его
      LD DE,23840  ;адрес буфера
      CALL 688     ;сохранение трех первых символов
                    строки
      POP HL       ;восстановление адреса строки
      LD (23825),HL;установка    адреса   командной
                    строки
778   LD A,(HL)    ;берем первый символ строки
      LD B,A       ;сохраняем его
      AND 128      ;его код меньше 128 ?
      LD A,B       ;восстановление символа
      JR Z,794     ;если его код меньше 128, то ди-
                    сковод не устанавливать
      CP 254       ;это RETURN ?
      JR Z,794     ;если да, то дисковод не устана-
                    вливать
      PUSH AF      ;сохранение символа
      CALL 15816   ;активизация  дисковода по умол-
                    чанию
      POP AF       ;восстановление символа
794   LD HL,12275  ;адрес таблицы команд
      DEC HL
      LD C,0       ;проверка первой команды
800   INC C
      LD D,A       ;сохранение символа
      LD A,21      ;пройдена вся таблица ?
      CP C
      JP C,467     ;если да, то завершение
Лучше было бы поставить здесь JP C,7450 для  выдачи
сообщения "*ERROR*".
      LD A,D       ;восстановление символа
      INC HL       ;адрес  следующей команды в таб-
                    лице
      CP (HL)      ;символы совпали ?
      JR NZ,800    ;если нет, то повтор
      CP 254       ;введена команда RETURN ?
      CALL NZ,10570;если нет, то создание буфера
      LD A,9       ;поиск файла вести по 9 байтам
      LD (23814),A
      XOR A        ;ошибок не было
      LD (23823),A
      LD (23766),A ;расширение файла принимать
      LD (23824),A ;на случай загрузки  или верифи-
                    кации файла
      LD HL,23611  ;проверка строки на синтаксис
      RES 7,(HL)
      LD B,0       ;перевод  номера команды в двух-
                    байтную форму
      LD HL,12296  ;адрес  таблицы адресов подпрог-
                    рамм
      DEC C        ;команды считать с нуля
      SLA C        ;умножение  номера  подпрограммы
                    на 2
      ADD HL,BC    ;определение адреса в таблице
      LD E,(HL)    ;берем адрес подпрограммы
      INC HL
      LD D,(HL)
      EX DE,HL     ;переносим его в HL
      PUSH HL      ;сохраняем его
      LD DE,857    ;возврат будет в 857
      PUSH DE
      JP (HL)      ;вызов подпрограммы
857   LD HL,23611  ;выполнение команды
      SET 7,(HL)
      POP HL       ;восстановление адреса  подпрог-
                    раммы
      JP (HL)      ;вызов подпрограммы

               пpодолжение следует ...



Другие статьи номера:

От редакции - Заказал у Nemo еще одну железяку: XTR-модем.

Железо - Немного о GMX и что с ним делать.

Что-где-почему - каталог программ фиpмы "Скоpпион".

Ликбез - полное описание и дизассемблер ПЗУ (часть 12).

Бук - Похождения Штиpлица и дpугие пpиключения Боpмана.

Реклама - Пpиобpету пеpвый диск музыкального pедактоpа SAMPLER.


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

Похожие статьи:
Приложение - RRoM v.2.01 - функциональная версия прошивки ПЗУ.
Разбиралка - Прохождение игры THE GREAT ESCAPE.
Новости - В Перми решается вопрос о создании сети на ZX
Рассвет в умирающем городе - Pаспад... Гниение... Город умирает...
Beatles - HА СУДHЕ БУHТ (Музыка и слова В.С.Высоцкого).

В этот день...   1 января

SibNews #08, Woot! #01, Spectrum Magazine #01, ACNews #25, Psychoz #14, ACNews #14, Last 128 #08, Last 128 #06, Last 128 #05, Last 128 #04, Last 128 #03, Last 128 #02, Last 128 #09, Last 128 #3.5, Last 128 #8.025, Sinclair Club #05, Last 128 #M!R 01, Fantadrom #01, Buzz #20, Last 128 #01, DonNews #13, Nicron #120, Promised Land #01, Inferno #01, Marazm #25, Ultimathum #01, Marazm #21, Hooy Mag #02, KrNews #11, Marazm #22, Marazm #23, ZX Football 2000 #01, Codemania #01, Always #03, Bugs #02, IzhNews #08, Virtual Worlds #01, Listok #04, Scenergy #02, Flash Info #18, Marazm #16, Marazm #17, Zed #01, Balagan #02, ZX Format #08, ZX Power #03, Shock #01, Impulse #02, Deja Vu #03, ZX Club #08, ZX Club #06, Numberology #01, Marazm #13, Marazm #12, Marazm #14, Gorodok #02, Zodiac #01, Marazm #15, Deja Vu #07, Marazm #11, Deja Vu #07, Playboy #03, Crazy News #2, Crazy News #4, ZX Light #01, Crazy News #5, Playboy #02, ZX News #03, ZX Review #1-2, Read Me #02, Crazy News #3, Nicron #13, Read Me #01, Public Spirit #01, Faultless #06, Faultless #05, ZX Software #01, Stump #04, Speccy #07, Возраждение #0, Speccy #03, On-Line #17, Scene+ #01, Welcome Press #01, ZX Konig #04, Adventurer #01, Faultless #05, Faultless #04, Di Halt #01, Faultless #01, Playboy #01, Crazy News #1, Faultless #03, Pioneer #03, Sinclair Town #02, ZX Magazine #01, Eldorado #01, ZX Magazine #02, Spectron #01, ZX News #01, ZX Konig #02, 200 #W, Welcome Press #00, Dune #07, Subliminal Extacy #01, Subliminal Extacy #02, ZX Konig #01, Subliminal Extacy #00, Muchomor #01, Spectrofon #01, ZX Revija #02, Outlet #01, Outlet #1-3