City
#40
08 февраля 2000 |
|
Ликбез - полное описание + полный дизассемблер ПЗУ TR-DOS (продолжение).
┌──────────────────────────────────────────────────────────────┐ │ ** ЛИКБЕЗ ** │ └──────────────────────────────────────────────────────────────┘ (c) П.Федин ПОЛНОЕ ОПИСАНИЕ + ПОЛНЫЙ ДИЗАССЕМБЛЕР ПЗУ TR-DOS 5.04T (5.03) ДЛЯ ПРОФЕССИОНАЛОВ, А ТАКЖЕ ДЛЯ ТЕХ, КТО ХОЧЕТ ИМИ СТАТЬ продолжение Адрес 6657. Подготовка к загрузке программы на бейсике. 6657 LD DE,(23635);берем адрес начала программы на бейсике LD HL,(23641);берем адрес конца программы на бейсике DEC HL PUSH HL ;сохранение начала и конца программы PUSH DE SBC HL,DE ;вычисление длины программы на бейсике LD DE,(23782);берем длину программы с переменными PUSH DE ;сохраняем ее PUSH HL ;сохранение длины старой программы LD HL,0 ;идет верификация ? LD A,(23801) CP 255 JR Z,6688 ;если да, то длину не меняем LD HL,5 ;иначе увеличим ее на 5 байтов 6688 ADD HL,DE LD (23771),HL;установка длины загрузки POP HL ;восстановление длины старой программы LD A,(23801) ;верификация ? CP 255 JR NZ,6705 ;если нет, то подготовка памяти POP DE ;снятие регистров со стека POP DE POP HL JR 6728 ;возврат 6705 CALL 6642 ;проверка наличия места для программы POP BC ;восстановление длины программы с переменными POP DE ;восстановление начала программы POP HL ;восстановление конца программы PUSH BC ;сохранение длины программы RST 32 ;стирание старой программы DEFW #19E5 POP BC ;восстановление длины программы CALL 7730 ;резервирование места для новой программы INC HL ;установка переменной VARS LD BC,(23784) ADD HL,BC LD (23627),HL 6728 LD HL,(23635);берем адрес загрузки программы RET ;возврат ──────────────────────────────────────────────────────────────── Адрес 6732. Подготовка памяти к загрузке массива. Установите 23784, 23767, 23769 и 23801. 6732 LD DE,(23784);загружать весь файл LD (23771),DE LD HL,(23767);берем адрес массива в памяти LD A,(23801) ;верификация ? CP 255 RET Z ;если да, то возврат LD HL,(23769);берем адрес загрузки файла PUSH HL ;сохраняем его 6753 CALL 6642 ;проверка наличия места для массива POP HL ;восстановление адреса загрузки файла LD A,H ;он равен 0 ? OR L JR Z,6777 ;если да, то старый массив не убираем LD HL,(23767);берем начало старого массива DEC HL DEC HL DEC HL LD BC,(23769);берем его длину INC BC INC BC INC BC CALL 7726 ;стирание старого массива 6777 LD HL,(23641);берем начало области переменных DEC HL LD BC,(23784);берем длину файла PUSH BC ;сохраняем ее INC BC INC BC INC BC CALL 7730 ;резервирование места для нового массива INC HL ;установка имени массива LD A,(23762) LD (HL),A INC HL ;восстановление и установка длины массива POP DE LD (HL),E INC HL LD (HL),D INC HL ;берем адрес тела массива RET ;возврат продолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября