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

┌─────────────────────────────────────────────────┐
│ ************** ЛИКБЕЗ ***************** │
└─────────────────────────────────────────────────┘
(c) П.Ю.Федин
╔═════════════════════════════════════════════════╗
║ ║
║ ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ ║
║ ║
║ TR-DOS 5.04T (5.03) ║
║ ║
║ ДЛЯ ПРОФЕССИОНАЛОВ, ║
║ ║
║ А ТАКЖЕ ДЛЯ ТЕХ, ║
║ ║
║ КТО ХОЧЕТ ИМИ СТАТЬ. ║
║ ║
╚═════════════════════════════════════════════════╝
пpодолжение
Адрес 5360. Проверка наличия места на диске-прием-
ике для команды COPY B. Установите 23775 и помести-
те в дисковод диск-приемник. Устанавливает 23770,
23783, 23773 и обнуляет 23841.
5360 XOR A ;обнуление 23841
LD (23841),A
CALL 1029 ;настройка на диск
CALL 15889 ;берем режим дисковода
LD (23770),A ;сохраняем его
LD A,(24072) ;сохраняем тип диска
LD (23783),A
LD HL,640 ;вычисление количества секторов
CP 25 ;на диске-приемнике
JR Z,5407
LD HL,1260
CP 24
JR Z,5407
CP 23
JR Z,5407
LD HL,2560
CP 22
JR Z,5407
JP 7540 ;если в качестве типа диска сто-
ит неопределенное значение, то
*ERROR*
Лучше DISC ERROR.
5407 LD (23773),HL;сохранение количества секторов
на диске-приемнике
LD BC,(23775);берем количество копируемых се-
кторов
SBC HL,BC ;места хватит ?
JP C,7237 ;если нет, то NO SPACE
RET ;возврат
───────────────────────────────────────────────────
Адрес 5420. Выполнение команды COPY B. Установите
23611.
5420 CALL 7541 ;если идет проверка на синтак-
сис, то возврат
CALL 5743 ;резервирование места в памяти
LD HL,10105 ;печать BACKUP DISC
CALL 9991
LD HL,10154 ;печать INSERT SOURCE DISC
CALL 9991
5438 CALL 4173 ;ввод клавиши
CP "Y" ;это Y ?
JR NZ,5438 ;если да, то повтор
CALL 7583 ;очистка низа экрана
LD A,255 ;первый проход
LD (23841),A
Внимание!!! Эта переменная уже занята. В ней хра-
нятся первые 3 символа командной строки.
CALL 1029 ;настройка на диск
CALL 15889 ;берем режим дисковода
LD (23769),A ;сохраняем его
LD A,(24072) ;берем тип диска
CP 25 ;диск 40-дорожечный односторон-
ний ?
LD HL,640 ;всего на диске 640 секторов
JR Z,5493 ;если да, то копирование
LD HL,1280 ;всего на диске 1280 секторов
CP 24 ;диск 80-дорожечный односторон-
ний ?
JR Z,5493 ;если да, то копирование
CP 23 ;диск 40-дорожечный двухсторон-
ний ?
JR Z,5493 ;если да, то копирование
LD HL,2560 ;всего на диске 2560 секторов
CP 22 ;диск 80-дорожечный двухсторон-
ний ?
JR Z,5493 ;если да, то копирование
JP 7450 ;иначе *ERROR*
Внимание!!! Лучше выдавать сообщение DISC ERROR.
5493 LD BC,(24074);берем количество свободных сек-
торов
SBC HL,BC ;вычисляем количество занятых
секторов
LD (23781),HL;установка количества секторов
LD (23775),HL
LD HL,0 ;скопировано 0 секторов
LD (23777),HL
LD (23779),HL
CALL 5560 ;копирование секторов
CALL 1029 ;настройка на диск
LD A,(23783) ;установка нового типа диска-
приемника
LD (24072),A
LD HL,(23773);берем общее число секторов на
диске-приемнике
LD BC,(23775);берем число скопированных сек-
торов
SBC HL,BC ;вычисление числа свободных сек-
торов на диске - приемнике
LD (24074),HL;установка его
CALL 5348 ;настройка дисковода под диск-
приемник
LD DE,9 ;записывали сектор 8 дорожки 0
LD (23796),DE
CALL 7747 ;запись сектора
JP 993 ;O.K.
пpодолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 15 ноября