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