@@@ @@@@
@ @ @
@ @ @
@ @ @ @ @ @@ @@@@ @@@ @@@
@ @ @ @ @@@ @ @ @ @ @ @ @
@ @ @ @ @ @ @ @@ @@@@ @ @
@ @ @ @ @ @@ @ @ @ @ @ @ @@
@@ @@ @@@ @@ @ @@ @@@@ @@@@ @
@@@ @
@ @
(c) П.Федин @@@@
ПОЛНОЕ ОПИСАНИЕ + ПОЛНЫЙ ДИЗАССЕМБЛЕР ПЗУ TR-DOS 5.04 (5.03)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ДЛЯ ПРОФЕССИОНАЛОВ, А ТАКЖЕ ДЛЯ ТЕХ, КТО ХОЧЕТ ИМИ СТАТЬ
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
продолжение
Адрес 7332. Определение адреса описателя файла в буфере по его
номеру в секторе. В C должен быть номер описателя в секторе. На
выходе в HL будет его адрес.
7332 LD L,C ;перевод номера описателя файла в двухбайтную
LD H,0 ;форму
ADD HL,HL ;умножение его на 16
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD BC,23845;адресуемся от начала буфера
ADD HL,BC
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 7344. Установка и проверка имени файла. Имя файла должно
быть помещено на стек калькулятора. Выход: если файл с таким
именем есть, то будет установлен флаг Z, а в рег. C и в 23838
будет его номер, а если такого файла нет, то флаг Z сбросится.
Используется также с адреса 7347 (поиск файла, установите 23773
и 23781, выход как и из 7344).
7344 CALL 7255 ;установка имени файла
7347 CALL 1000 ;начнем с сектора 0
LD B,128 ;всего 128 файлов
LD C,0 ;начнем с нулевого описателя в секторе
7354 PUSH BC ;сохраним номер файла и счетчик
CALL 7332 ;определим начало описателя в буфере
CALL 1292 ;проверка и обработка достижения конца буфера
POP BC ;восстановление номера описателя в секторе и
PUSH BC ;счетчика файлов без изменения стека
LD A,C ;просмотрен весь сектор ?
CP 16
JR NZ,7373 ;если да, то
POP BC ;снятие номера описателя и счетчика со стека
LD C,0 ;нулевой описатель в секторе
JR 7354 ;повтор проверки
7373 LD DE,23773 ;берем адрес части описателя для проверки
LD A,(23814);берем длину этой части
LD B,A
XOR A ;конец каталога ?
CP (HL)
JR NZ,7387 ;если нет, то переход на проверку описателя
POP BC ;снятие номера описателя и счетчика со стека
JR 7396 ;выход с флагом NZ
7387 CALL 10003 ;сравнение частей описателей
POP BC ;восстановление номера описателя и счетчика
JR Z,7399 ;если части описателей совпали, то на выход
INC C ;следующий описатель
DJNZ 7354 ;повтор до конца
7396 OR 255 ;выключение флага Z
RET ;возврат
7399 LD A,128 ;определение номера файла
SUB B
LD C,A
LD (23838),A;помещение его в 23838
XOR A ;сброс флага Z
RET Z ;возврат
────────────────────────────────────────────────────────────────
Адрес 7408. Поиск файла. Часть описателя, подлежащую проверке,
установите по адресу 23773 и установите 23814. Если файл не
найден, то будет сброшен флаг Z и в 23823 будет 255, а если най-
ден, то включится флаг Z, а номер файла будет в рег. C и по ад-
ресам 23823 и 23838.
7408 CALL 7347 ;поиск файла
LD HL,23823
LD (HL),C ;загрузка регистра C в 23823
RET Z ;если файл найден, то возврат
LD (HL),255;помещаем в 23823 255
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 7419. Выполнение команды RETURN. Установите 23611, 23836 и
23827.
7419 CALL 7541 ;если идет проверка на синтаксис, то возврат
CALL 8421 ;изменение памяти
RES 3,(IY+1) ;установка режима ввода "K"
CALL 562 ;восстановление старого ERR_SP
LD SP,(23836);восстановление стека
LD HL,(23613);берем адрес перед адресом из ERR_SP
DEC HL
LD A,18 ;там находится 18 ?
CP (HL)
JR NZ,7449 ;если нет, то возврат
DEC HL ;установка ERR_SP на адрес ниже
LD (23613),HL
7449 RET ;возврат
продолжение следует ...
Other articles: