|
City
#17
06 июля 1999 |
|
Ликбез - полное описание и дизассемблер ПЗУ (часть 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одолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 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