░░░ ░░░ ░░░░ ░░░░ ░░░░ ░░░░░▒░ ░░░░░░▒░ ░▒░░
░▓█▒ ░███ ▓██▒ ▒██▓▒██▓░░██████▒ ▒██████░ ▓████▒
░▓██▓░ ▒███ ▒███▒ ▓██▓▓██░ ▒██████▒ ▒█████▓ ░▓█▓███
░▓███▒ ░███▒████▒ ▒█████▒ ░███░░░░ ░███░░░ ░░░▓██
░██▓█▓ ████████▒ ░████▓ ███▒▓▓▒ ███▓▓▓ ▓██▒
▒██▒██░ █████▓██▒ ░█████▒ ███▓███░ ███▒▒▒ ▓██▓░
░██▓ ▓█▓ ████▓░██▓░░██▓▓██░ ███ ▓██▒ ███▒▒▒░░▒▒░▓██▒
▒██░ ▒██░ ███▓░░██▓ ░██▓▒██▓░ ███▓███▒ ██████░▓██████░
▓▓▓ ░▓▓▒ ▓▓▓░ ░▓▓▒ ░▓▓▒ ▒▓▓▒ ▓▓▓▓▓▒░ ▓▓▓▓▓▓ ░▒▓▓▓▓▒
(c) П.Федин
ПОЛНОЕ ОПИСАНИЕ + ПОЛНЫЙ ДИЗАССЕМБЛЕР ПЗУ TR-DOS 5.04 (5.03)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ДЛЯ ПРОФЕССИОНАЛОВ, А ТАКЖЕ ДЛЯ ТЕХ, КТО ХОЧЕТ ИМИ СТАТЬ
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
продолжение
Адрес 8501. Принятие команды. Установите 23823 и если там не 0,
то и 23840.
8501 LD A,(23823) ;ошибка была?
OR A
PUSH AF ;сохранение результата проверки
CALL NZ,8490 ;если да, то восстановление первых трех сим-
волов
Не надо этого делать!!! COPY портит буфер по адресу 23840, а бу-
фер редактора всегда остается цел.
POP AF ;восстановление результата проверки
CALL Z,8478 ;если ошибки не было, то стирание старой
строки
LD HL,(23641);эта команда тоже не нужна
CALL 15744 ;перевод строки
LD A,(23833) ;берем номер дисковода по умолчанию
ADD A,"A" ;печать его имени
RST 16
LD A,">" ;печать ">"
RST 16
LD HL,23610 ;для нормального выхода из редактора
LD (HL),255
JP 7568 ;ввод команды и возврат
────────────────────────────────────────────────────────────────
Адрес 8536. Прием числа. CH_ADD установите на символ перед
числом. Число, увеличенное на 1, будет помещено в 23767, а со-
держимое 23771 будет скопировано в 23769. Число не должно рав-
няться 0.
8536 CALL 7722 ;следующий символ
CALL 7564
CP "," ;это запятая?
JP NZ,7450 ;если да, то ошибка
LD HL,(23771);сохранение 23771
LD (23769),HL
CALL 7691 ;помещение числа на стек калькулятора
CALL 7541 ;если идет проверка на синтаксис, то возврат
LD HL,(23771);число равно 0?
LD A,
OR L
JP NZ,7450 ;если да, то ошибка
INC HL ;еще будет байт ENTER
LD (23767),HL;установка числа
LD HL,(23769);восстановление 23771
LD (23771),HL
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 8578. Выполнение команды OPEN#. Установите 23825 и 23611.
8578 LD HL,(23825);установка CH_ADD
LD (23645),HL
CALL 7691 ;принятие номера потока
CALL 7632 ;принятие имени файла на стек калькулятора
8590 CALL 7564 ;берем текущий символ
CP "A" ;он меньше "A"?
JR NC,8602 ;если нет, то проверка режима файла
CALL 7722 ;следующий символ
JR 8590 ;повтор
8602 CP 165 ;это RND?
PUSH AF ;сохранение символа и результата проверки
CALL Z,8536 ;если это RND, то обработка длины записи
POP AF ;восстановление символа и результата проверки
JR Z,8622 ;если это RND, то открытие потока
AND 223 ;буква заглавная
CP "R" ;это "R"?
JR Z,8622 ;если да, то открытие потока
CP "W" ;это "W"?
JP NZ,7450 ;если нет, то ошибка
8622 LD (23817),A ;сохранение буквы режима файла
CALL 7541 ;если идет проверка на синтаксис, то возврат
LD A,"#" ;расширение файла - "#"
LD (23781),A
LD A,0 ;поиск начинать с блока 0
LD (23782),A
CALL 8667 ;поиск последнего блока файла
PUSH AF ;сохранение флага результата поиска
CALL 8719 ;проверка потока
POP AF ;восстановление флага результата поиска
PUSH AF ;сохранение флага результата поиска
CALL NZ,8840 ;если файл не был найден, то создание блока 0
POP AF ;восстановление флага результата поиска
CALL 8770 ;открытие потока
LD HL,(23825);коррекция переменной с адресом командной
строки
LD BC,292
ADD HL,BC
LD (23825),HL
JP 467 ;завершение
────────────────────────────────────────────────────────────────
Адрес 8667. Поиск блока файла данных. Вход: поместите имя файла
на стек калькулятора, установите 23773 и 23817 и поместите в
23782 номер первого блока файла. Выход: если файл найден, то бу-
дет считан описатель последнего или первого блока в зависимости
от 23817 и обнулен аккумулятор и установлен флаг Z; иначе флаг Z
будет сброшен, а в аккумуляторе будет байт из 23817.
8667 LD A,10 ;поиск файла ведем по 10 байтам
LD (23814),A
CALL 7344 ;установка имени файла и поиск файла
PUSH AF ;сохранение результата поиска
CALL 1029 ;настройка на диск
POP AF ;восстановление результата поиска
JR NZ,8710 ;если файл не найден, то проверка режима файла
LD A,(23817);открываем файл для чтения?
CP "R"
JR Z,8705 ;если да, то выход
8689 LD HL,23782 ;следующий блок
INC (HL)
CALL 7347 ;поиск блока
JR Z,8689 ;если блок найден, то следующий блок
LD HL,23782
DEC (HL) ;последний существующий блок
CALL 7347 ;определение его номера в каталоге
8705 CALL 5725 ;чтение его описателя
XOR A ;обнуление аккумулятора и установка флага Z
RET ;возврат
8710 LD A,(23817);открываем файл для чтения?
CP "R"
RET NZ ;если да, то возврат
JP 985 ;сообщение NO FILE
продолжение следует ...
Other articles: