City
#45
09 июня 2000 |
|
Ликбез - полное описание и полный дизассемблер ПЗУ TR-DOS (продолжение).
@@@ @@@@ @ @ @ @ @ @ @ @ @ @ @ @@ @@@@ @@@ @@@ @ @ @ @ @@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @@ @@@@ @ @ @ @ @ @ @ @@ @ @ @ @ @ @ @@ @@ @@ @@@ @@ @ @@ @@@@ @@@@ @ @@@ @ @ @ (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 ;возврат продолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября