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