|
City #20
14 июля 1999 |
|

ООООООООООООООООООООО
ОООООООООО ЛИКБЕЗ ОООООООООО
ООООООООООООООООООООО
╔════════════════════════════════════════╗
║ ║
║ ПОЛНОЕ ОПИСАНИЕ + ПОЛНЫЙ ДИЗАССЕМБЛЕР ║
║ ПЗУ ║
║ ║
║ TR-DOS 5.04T (5.03) ║
║ ║
║ ДЛЯ ПРОФЕССИОНАЛОВ, ║
║ ║
║ А ТАКЖЕ ДЛЯ ТЕХ, ║
║ ║
║ КТО ХОЧЕТ ИМИ СТАТЬ. ║
║ ║
╚════════════════════════════════════════╝
продолжение
П.Федин
Адрес 1270. Проверка переменной 23801 и
проверка достижения конца каталога при его
печати.
1270 PUSH HL ;сохранение HL и BC
PUSH BC
LD A,(23801) ;берем номер дисковода
для выдачи каталога
LD HL,23798 ;назначен этот диско-
вод ?
CP (HL)
CALL NZ,15755;если нет, то о послед-
ствиях читайте в конце
Ошибка в программе!! Об этом особо в конце
текста.
POP BC ;восстановление HL и BC
POP HL
JP 12230 ;проверка достижения
конца каталога и возв-
рат
Обратите особое внимание на команду CALL
NZ,15755. В аналогичной подпрограмме для
LIST стоит CALL NZ,15819.В нашем же случае
управление будет передано в подпрограмму
печати символа (ее адрес 15744) на адрес,
где находятся 2 байта адреса от команды
CALL 15764. Программа с этого адреса будет
такой:
SUB H
DEC A
CALL 8433
POP DE
POP BC
POP HL
RET
Таким образом произойдет изменение памяти,
если оно разрешено, затем со стека будут
сняты 3 адреса и помещены в регистры и за-
тем произойдет возврат. Последствия всего
этого определяются программой, вызвавшей
1270.
──────────────────────────────────────────
Адрес 1287. Прибавление 16 к HL.
1287 LD DE,16
ADD HL,DE
RET
──────────────────────────────────────────
Адрес 1292. Проверка и обработка достиже-
ния конца буфера при работе с каталогом.
Установите 23756 и поместите в HL текущее
место буфера. Если достигнут его конец, то
в HL будет начало буфера и в него будет
загружен следующий сектор каталога.
1292 PUSH HL ;сохранение HL и BC
PUSH BC
LD BC,41435;достигнут конец буфера ?
ADD HL,BC
JR C,1303 ;если да,то загрузка сле-
дующего сектора
POP BC ;восстановление HL и BC
POP HL
RET ;возврат
1303 LD HL,23756;следующий сектор
INC (HL)
CALL 1004 ;загрузка его в буфер
POP BC ;восстановление BC и HL
POP HL
LD HL,23845;помещение в HL адреса
начала буфера
RET ;возврат
──────────────────────────────────────────
Адрес 1316. Вычисление номера дисковода по
его имени. Имя поместите в А, на выходе
там будет номер.
1316 AND 223 ;буква заглавная
SBC A,65 ;вычисление номера диско-
вода
JP C,7450 ;если именем был символ
меньше "A", то ошибка
CP 4 ;номер получился больше 3?
JP NC,7450;если да, то ошибка
RET ;возврат
──────────────────────────────────────────
Адрес 1338. Выполнение команды NEW. Уста-
новите 23825 и 23611. Используется также с
адреса 1385 (запись информации о файле;
номер файла задайте в регистре C).
1338 CALL 7629 ;прием имен файлов на
стек калькулятора
CALL 7541 ;если идет проверка на
синтаксис, то возврат
CALL 4142 ;прием расширения файла
CALL 7344 ;установка старого имени
файла
LD A,(23798);берем номер дисковода
LD (23800),A;сохраняем его
JP NZ,985 ;если файл не найден, то
ошибка
PUSH BC ;сохранение номера файла
CALL 5725 ;загрузка описателя фай-
ла
CALL 7344 ;установка нового имени
файла
PUSH AF ;сохранение результата
проверки имени файла
LD A,(23800);в новом имени файла
назначен другой диско-
вод
LD HL,23798
CP (HL)
JP NZ,7450 ;если да, то ошибка
CALL 1029 ;настройка на диск
POP AF ;восстановление резуль-
тата проверки имени
файла
JP Z,7248 ;если такой файл уже
есть, то ошибка
POP BC ;восстановление номера
файла
1385 CALL 5739 ;загрузка сектора с опи-
сателем файла и замена
описателя
CALL 7747 ;перезапись сектора
JP 993 ;сообщение O.K.
──────────────────────────────────────────
Адрес 1394. Проверка переменной 23824. Со-
ответственно содержимому будет установлен
флаг Z,а само содержимое будет в аккумуля-
торе.
1394 LD A,(23824)
OR A
RET
──────────────────────────────────────────
Адрес 1399. Проверка количества стертых
файлов. Установите
23825. Если там 0, то будет сообщение NO
FILE, иначе O.K.
1399 LD A,(23825);берем количество стер-
тых файлов
OR A ;оно равно 0 ?
JP Z,985 ;если да, то NO FILE
JP 993 ;иначе O.K.
продолжение следует ...
Other articles:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Similar articles:
В этот день... 15 November