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одолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября