City
#53
14 мая 2001 |
|
Ликбез - ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ TR-DOS 5.04 (5.03)
░░░ ░░░ ░░░░ ░░░░ ░░░░ ░░░░░▒░ ░░░░░░▒░ ░▒░░ ░▓█▒ ░███ ▓██▒ ▒██▓▒██▓░░██████▒ ▒██████░ ▓████▒ ░▓██▓░ ▒███ ▒███▒ ▓██▓▓██░ ▒██████▒ ▒█████▓ ░▓█▓███ ░▓███▒ ░███▒████▒ ▒█████▒ ░███░░░░ ░███░░░ ░░░▓██ ░██▓█▓ ████████▒ ░████▓ ███▒▓▓▒ ███▓▓▓ ▓██▒ ▒██▒██░ █████▓██▒ ░█████▒ ███▓███░ ███▒▒▒ ▓██▓░ ░██▓ ▓█▓ ████▓░██▓░░██▓▓██░ ███ ▓██▒ ███▒▒▒░░▒▒░▓██▒ ▒██░ ▒██░ ███▓░░██▓ ░██▓▒██▓░ ███▓███▒ ██████░▓██████░ ▓▓▓ ░▓▓▒ ▓▓▓░ ░▓▓▒ ░▓▓▒ ▒▓▓▒ ▓▓▓▓▓▒░ ▓▓▓▓▓▓ ░▒▓▓▓▓▒ (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 продолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября