|
City
#33
17 октября 1999 |
|
Ликбез - полный дизассемблер ПЗУ (часть 26).

┌─────────────────────────────────────────────────┐
│ *************** ЛИКБЕЗ **************** │
└─────────────────────────────────────────────────┘
(c) П.Ю.Федин
╔═════════════════════════════════════════════════╗
║ ║
║ ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ ║
║ ║
║ TR-DOS 5.04T (5.03) ║
║ ║
║ ДЛЯ ПРОФЕССИОНАЛОВ, ║
║ ║
║ А ТАКЖЕ ДЛЯ ТЕХ, ║
║ ║
║ КТО ХОЧЕТ ИМИ СТАТЬ. ║
║ ║
╚═════════════════════════════════════════════════╝
пpодолжение
Адрес 5715. Проверка состояния файла. Номер файла
задайте в регистре A. Возвращает Z, если файл стерт
и NZ, если нет, а в A будет первый символ имени
файла.
5715 CALL 5725 ;чтение описателя файла
LD A,(23773);берем первый символ имени файла
CP 1 ;проверка состояния файла
RET ;возврат
───────────────────────────────────────────────────
Адрес 5724. Чтение описателя файла. На входе в ре-
гистр A поместите номер файла. Описатель будет заг-
ружен по адресу 23781. Используется также с адре-
сов:
5725 - то же, что и 5724, но номер файла в регистре
C.
5726 - то же, что и 6121, но сохраняет номер файла.
5724 LD C,A ;перенос номера файла в рег. C
5725 XOR A ;переносим описатель из буфера в па-
мять
5726 PUSH BC ;сохранение номера файла
CALL 6121;чтение сектора с описателем и пере-
нос описателя
POP BC ;восстановление номера файла
RET ;возврат
───────────────────────────────────────────────────
Адрес 5732. запись информации о файле. Вход: описа-
тель расположить по адресу 23773, а в аккумулятор
поместить номер файла.
5732 LD C,A ;перенос в C номера файла
CALL 5739;чтение сектора и замена описателя
файла в нем
JP 7747 ;перезапись сектора
───────────────────────────────────────────────────
Адрес 5739. Чтение в буфер сектора с описателем
файла и замена описателя. Поместите описатель по
адресу 23773.
5739 LD A,255;описатель перемещать из переменных в
буфер
JR 5726 ;то же, что и 6121, но с сохранением
BC
───────────────────────────────────────────────────
Адрес 5743. Резервирование места в памяти. Устанав-
ливает 23759 и 23843.
5743 LD A,255 ;WORKSP использовалась
LD (23822),A
CALL 5760 ;вычисление размера доступной
памяти
LD HL,(23649);установка адреса рабочей облас-
ти
LD (23759),HL
JP 7715 ;выделение места в памяти и воз-
врат
───────────────────────────────────────────────────
Адрес 5760. Вычисление количества свободной памяти
в секторах.
Размер свободной памяти в байтах будет в BC, а в
секторах - в 23843.
5760 RST 32 ;берем количество свободной памя-
ти в байтах
DEFW #1F1A
LD HL,65535
SBC HL,BC
LD A,H ;свободно меньше 16 секторов ?
CP 16
JR NC,5775 ;если да, то
LD A,17 ;будем выделять 16 секторов
5775 DEC A ;1 сектор на всякий случай
LD (23843),A;установка размера свободной па-
мяти в секторах
LD B,A ;установка размера свободной па-
мяти в байтах
LD C,0
RET ;возврат
───────────────────────────────────────────────────
Адрес 5783. Помещает HL в 23767 и 23771 и прибавля-
ет 23786 (1 байт) к 23769 (2 байта).
5783 LD (23767),HL;установка 23767 и 23769
LD (23771),HL
LD DE,(23786);сложение 23786 и 23769
LD HL,(23769)
LD D,0
ADD HL,DE
LD (23769),HL
RET ;возврат
пpодолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 18 ноября