City
#41
06 марта 2000 |
|
Ликбез - полный дизассемблер ПЗУ (часть 31).
┌─────────────────────────────────────────────────┐ │ *************** ЛИКБЕЗ **************** │ └─────────────────────────────────────────────────┘ (c) П.Ю.Федин ╔═════════════════════════════════════════════════╗ ║ ║ ║ ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ ║ ║ ║ ║ TR-DOS 5.04T (5.03) ║ ║ ║ ║ ДЛЯ ПРОФЕССИОНАЛОВ, ║ ║ ║ ║ А ТАКЖЕ ДЛЯ ТЕХ, ║ ║ ║ ║ КТО ХОЧЕТ ИМИ СТАТЬ. ║ ║ ║ ╚═════════════════════════════════════════════════╝ пpодолжение Адрес 6804. Вычисление адреса сектора файла на дис- ке по его номеру в файле. Вход: установите 23767 и 23769 и поместите в регистр B длину файла в секто- рах, а в DE - адрес файла на диске. Выход: в DE бу- т адрес сектора на диске, а в B помещается 1. 6804 LD A,(23769) ;берем номер сектора в файле LD C,B LD B,A LD A,C CP B ;он меньше, чем количество секторов в файле ? JR C,6838 ;если нет, то ошибка Внимание, ошибка! Вы не сможете загрузить последний сектор файла, т.к. его номер равен количеству сек- торов в файле. LD A,B ;он равен 0 ? OR A JP Z,7450 ;если да, то синтаксическая ошибка DEC B ;он был равен 1 ? JR Z,6832 ;если да, то его адресом будет адрес файла LD A,16 ;на дорожке 16 секторов 6823 INC E ;вычисление адреса сектора на диске CP E JR NZ,6830 LD E,0 INC D 6830 DJNZ 6823 6832 LD B,1 ;загружать надо 1 сектор LD HL,(23767);берем адрес загрузки сектора RET ;возврат 6838 LD HL,10733 ;адрес сообщения REC.O/F LD A,5 ;код ошибки - 5 JP 7242 ;обработка ошибки ─────────────────────────────────────────────────── Адрес 6846. Проверка наличия файла и свободного места в каталоге. Имя файла поместите на стек каль- кулятора. Используется также с адреса 6852 (провер- ка наличия свободного места в каталоге диска). 6846 CALL 10543 ;установка имени и поиск файла JP Z,7248 ;если нашли, то FILE EXISTS 6852 CALL 1021 ;загрузка в буфер сектора 8 до- рожки 0 LD A,(24073);на диске 128 файлов ? CP 128 JP Z,10019 ;если да, то сообщение DIRECTORY FULL RET ;иначе возврат ─────────────────────────────────────────────────── Адрес 6864. Выполнение команды SAVE. Установите 23611 и 23825. Используется также с адресов: 6951 - запись программы на бейсике. Установите 23773 и 23781. 6995 -запись файла. Установите 23773, 23781, 23767, 23769 и 23771. 6864 CALL 6226 ;обнуление 23824 LD HL,0 ;автостарт бейсика не произво- дить LD (23761),HL CALL 7647 ;помещение имени файла на стек калькулятора CALL 7564 ;берем текущий символ CP 175 ;это CODE ? JR Z,6969 ;если да, то прием начала и дли- ны CP 202 ;это LINE ? JR NZ,6904 ;если нет, то проверка остальных расширений CALL 7691 ;прием строки автостарта бейсика CALL 7541 ;если проверка на синтаксис, то возврат LD HL,(23771);установка строки автостарта бейсика LD (23761),HL LD HL,23781 JR 6943 ;переход на запись бейсика 6904 CP 170 ;текущий символ SCREEN$ ? JR NZ,6925 ;если нет, то проверка расшире- ния DATA LD HL,16384 ;начало файла - 16384 LD (23767),HL LD HL,6912 ;его длина - 6912 байтов LD (23769),HL LD (23771),HL JR 6984 ;запись файла с расширением C пpодолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 4 декабря