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

┌─────────────────────────────────────────────────┐
│ **************** ЛИКБЕЗ ***************** │
└─────────────────────────────────────────────────┘
(c) П.Ю.Федин
╔═════════════════════════════════════════════════╗
║ ║
║ ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ ║
║ ║
║ TR-DOS 5.04T (5.03) ║
║ ║
║ ДЛЯ ПРОФЕССИОНАЛОВ, ║
║ ║
║ А ТАКЖЕ ДЛЯ ТЕХ, ║
║ ║
║ КТО ХОЧЕТ ИМИ СТАТЬ. ║
║ ║
╚═════════════════════════════════════════════════╝
пpодолжение
Адрес 5201. Копирование файла на одном дисководе.
Поместите описатель файла в 23773 и его часть в
23789 и установите 23793, 23841, 23843 и 23759. По-
дпрограмма устанавливает 23739, 23769, 23770 и
23698.
5201 LD A,(23793) ;все скопировали ?
OR A
RET Z ;если да, то возврат
LD A,(23841) ;первый проход ?
OR A
JR NZ,5231 ;если да, то диск - источник уже
в дисководе
CALL 7575 ;очистка экрана
LD HL,10154 ;печать INSERT SOURCE DISC
CALL 9991
5221 CALL 4178 ;ожидание клавиши Y
CP "Y"
JR NZ,5211
CALL 7583 ;очистка низа экрана
5231 LD A,(23793) ;все скопировали ?
OR A
RET Z ;если да, то возврат
PUSH HL ;сохранение HL
LD HL,23843 ;копируется часть файла
SUB (HL)
POP HL ;восстановление HL
JR NC,5323 ;если еще не конец, то копирует-
ся часть файла
LD A,(23793) ;копируем остаток
LD B,A
XOR A ;скопировали все
LD (23793),A
5252 PUSH BC ;сохранение количества копируе-
мых секторов
LD (23758),A ;обнуление 23758
LD HL,(23759);берем адрес рабочего простран-
ства
PUSH HL ;сохраняем его
LD DE,(23794);берем адрес копируемого участка
диска
CALL 5336 ;настройка дисковода под диск-
источник
CALL 7741 ;загрузка секторов
LD HL,(23796);установка адреса на диске сле-
дующего сектора
LD (23794),HL
CALL 7575 ;очистка экрана
LD HL,10119 ;печать INSERT DESTINATION DISC
CALL 9991
5285 CALL 4178 ;ожидание клавиши Y
CP "Y"
JR NZ,5286
CALL 7583 ;очистка низа экрана
LD A,(23841) ;первый проход ?
OR A
CALL NZ,5123 ;если да, то проверка наличия
места на диске
POP HL ;восстановление адреса рабочего
пространства
POP BC ;и количества копируемых секто-
ров
LD DE,(23787);берем адрес текущего участка
диска
CALL 5348 ;настройка дисковода под диск-
приемник
CALL 7757 ;запись секторов
LD HL,(23797);установка адреса на диске сле-
дующего сектора
LD (23787),HL
JP 5201 ;повтор
5323 LD (23793),A ;установка длины оставшейся час-
ти файла
PUSH HL ;сохранение HL
LD HL,23843 ;берем длину рабочей области
LD B,(HL)
POP HL ;восстановление HL
XOR A ;обнуление аккумулятора
JP 5252 ;копирование
───────────────────────────────────────────────────
Адрес 5336. Помещение значения 23769 в переменную
режима дисковода. Установите 23769.
5336 PUSH HL ;сохранение DE и HL
PUSH DE
CALL 15889 ;берем адрес переменной с типом
дисковода
LD A,(23769);берем тип дисковода из 23769
LD (HL),A ;установка типа дисковода
POP DE ;восстановление DE и HL
POP HL
RET ;возврат
───────────────────────────────────────────────────
Адрес 5348. Помещение значения 23770 в переменную
режима дисковода. Установите 23770.
5348 PUSH HL ;сохранение DE и HL
PUSH DE
CALL 15889 ;берем адрес переменной с типом
дисковода
LD A,(23770);берем тип дисковода из 23769
LD (HL),A ;установка типа дисковода
POP DE ;восстановление DE и HL
POP HL
RET ;возврат
пpодолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 13 ноября