City
#38
29 декабря 1999 |
|
Ликбез - полный дизассемблер ПЗУ (часть 29).
┌─────────────────────────────────────────────────┐ │ ************* ЛИКБЕЗ **************** │ └─────────────────────────────────────────────────┘ (c) П.Ю.Федин ╔═════════════════════════════════════════════════╗ ║ ║ ║ ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ ║ ║ ║ ║ TR-DOS 5.04T (5.03) ║ ║ ║ ║ ДЛЯ ПРОФЕССИОНАЛОВ, ║ ║ ║ ║ А ТАКЖЕ ДЛЯ ТЕХ, ║ ║ ║ ║ КТО ХОЧЕТ ИМИ СТАТЬ ║ ║ ║ ╚═════════════════════════════════════════════════╝ пpодолжение Адрес 6427. Помещает число 3 по адресу 23766. 6427 LD A,3 LD (23766),A RET ─────────────────────────────────────────────────── Адрес 6433. Загрузка/верификация файла, а также за- грузка/запись сектора файла. Вход: установите 23801, 23824, 23767, 23771, в HL - адрес загрузки, в DE - адрес файла на диске,в B - количество секто- ров для загрузки. 6433 CALL 1394 ;выполняется загрузка или вери- фикация ? JR Z,6445 ;если да, то выполнение операций со всем файлом PUSH AF ;сохранение флага операции CALL 6804 ;вычисление адреса сектора на диске POP AF ;восстановление флага операции CP 255 ;чтение сектора файла ? 6445 PUSH AF CALL Z,6492 ;если да, то чтение сектора или операция с файлом POP AF JR Z,6455 ;и завершение загрузки или вери- фикации JP 7757 ;иначе запись сектора и возврат 6455 LD A,(23766) ;загружать весь файл ? CP 3 Не нужно этого делать!!! Лучше так: LD A,(23824) OR A и PEEK будет работать правильно. Не будет грузится мусор после загруженного сектора. Ведь если в 23766 находится 0, то младший байт длины всегда равен 0 и 6470 не будет работать. CALL Z,6470 ;если да, то загрузка или вери- фикация конца файла LD HL,(23641);отметка конца программы на бейсике DEC HL LD (HL),128 RET ;возврат ─────────────────────────────────────────────────── Адрес 6470. Загрузка или верификация конца файла. Установите 23796, 23771 и 23801. 6470 LD A,(23801) ;верификация ? CP 255 JP NZ,12254 ;если нет, то загрузка конца файла LD A,(23771) ;файл занимает сектора без ос- татка ? OR A RET Z ;если да, то возврат LD C,A ;берем длину остатка LD B,1 ;1 сектор LD DE,(23796);текущее место диска JR 6506 ;верификация конца файла и воз- врат ─────────────────────────────────────────────────── Адрес 6492. Загрузка/верификация файла а также заг- рузка сектора файла. Установите 23801, в DE помес- тите адрес файла на диске, в HL - адрес файла в па- мяти, в B - длину файла в секторах. Используется также с адреса 6506 для верификации заданного коли- чества байтов (все для 6492, кроме 23801 плюс в B - количество байтов). 6492 LD A,(23801) ;верификация ? CP 255 JP NZ,7741 ;если нет, то загрузка секторов и возврат LD (23796),DE;запомним адрес файла на диске LD C,0 ;в секторе 256 байтов 6506 LD A,B ;верифицируем 0 секторов ? OR A RET Z ;если да, то возврат LD (23767),HL;сохранение адреса файла в памя- ти LD (23769),DE;сохранение адреса файла на дис- ке 6516 PUSH BC ;сохранение количества секторов LD B,1 ;загружать 1 сектор LD DE,(23769);с текущего места диска LD HL,23845 ;в буфер CALL 7741 ;загрузка сектора LD HL,(23796);адрес следующего сектора на диске LD (23769),HL POP BC ;восстановление количества сек- торов LD HL,(23767);берем адрес файла в памяти LD DE,23845 ;адрес сектора в буфере 6542 LD A,(DE) ;сравнение их CP (HL) JR NZ,6557 ;если несовпадение, то VERIFY ERROR INC HL ;следующие байты INC DE DEC C JR NZ,6542 ;повтор до конца LD (23767),HL;установка следующего адреса DJNZ 6516 ;повтор до конца RET ;возврат 6557 LD HL,10091 ;адрес сообщения VERIFY ERROR LD A,13 ;код ошибки - 13 JP 7242 ;обработка ошибок пpодолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября