@@@ @@@@ @ @ @ @ @ @ @ @ @ @ @ @@ @@@@ @@@ @@@ @ @ @ @ @@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @@ @@@@ @ @ @ @ @ @ @ @@ @ @ @ @ @ @ @@ @@ @@ @@@ @@ @ @@ @@@@ @@@@ @ @@@ @ @ @ (c) П.Федин @@@@ ПОЛНОЕ ОПИСАНИЕ + ПОЛНЫЙ ДИЗАССЕМБЛЕР ПЗУ TR-DOS 5.04 (5.03) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ДЛЯ ПРОФЕССИОНАЛОВ, А ТАКЖЕ ДЛЯ ТЕХ, КТО ХОЧЕТ ИМИ СТАТЬ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ продолжение Адрес 7450. Обработка синтаксической ошибки. Установите 23610, 23822, 23829, и все для подпрограммы 467. Используется также с адреса 7465 (обработка ошибок; в A - код ошибки, в HL - адрес сообщения). 7450 BIT 7,(IY+0);код ошибки бейсика уже назначен ? JR Z,7461 ;если нет, то установка ошибки LD A,11 ;NONSENCE IN BASIC LD (23610),A 7461 INC A ;получение кода ошибки DOS LD HL,10674 ;адрес сообщения ERROR 7465 CALL 963 ;печать сообщения, если можно JP 467 ;завершение ──────────────────────────────────────────────────────────────── Адрес 7471. Обработка ошибки, поступившей из пзу бейсика без очистки стека. Установите 23610. 7471 LD A,(23610);берем код ошибки бейсика LD HL,10186 ;адрес сообщения *BREAK* CP 20 ;BREAK INTO PROGRAM ? JR Z,7465 ;если да, то печать сообщения CP 12 ;BREAK - CONT REPEATS ? JR Z,7465 ;если да, то печать сообщения LD HL,10194 ;адрес сообщения OUT OF RAM CP 3 ;OUT OF MEMORY ? JR Z,7465 ;если да, то печать сообщения LD HL,10205 ;адрес сообщения ARRAY NOT FOUND CP 1 ;VARIABLE NOT FOUND ? JR Z,7465 ;если да, то печать сообщения JR 7450 ;иначе сообщение *ERROR* ──────────────────────────────────────────────────────────────── Адрес 7501. Выполнение команды RUN. Установите 23825 и 23611. 7501 CALL 6226 ;выполнять загрузку файла CALL 6198 ;обработка параметров и загрузка файла CALL 7541 ;если идет проверка на синтаксис, то возврат LD HL,(23782);берем адрес загрузки файла по умолчанию Ошибка!! Ведь файл могли загрузить и по другому адресу. В под- программе 6315 надо сохранять в 23840 действительный адрес заг- рузки файла, а здесь восстанавливать его. LD A,(23781) ;расширение файла B ? CP "B" JP Z,298 ;если да, то запуск программы на бейсике PUSH HL ;запуск программы в кодах RET Боже!! Ну кто так делает!!! Во-первых, адрес программы при за- пуске должен быть в BC; во-вторых, надо совсем выйти из TR-DOS, иначе программа спятит при вызове 15635; в третьих, куда прог- рамма будет возвращаться?; в четвертых... В общем, надо так (после CALL 7541): LD A,(23781) CP "D" JP Z,7450 CP "B" JP Z,298 LD HL,START LD (23834),HL JP 467 ──────────────────────────────────────────────────────────────── START CALL 562 LD BC,(23840) PUSH BC RET ──────────────────────────────────────────────────────────────── Адрес 7523. Очистка рабочей области памяти. 7523 LD HL,23822;рабочую область очищать ? LD A,(HL) CP 255 LD (HL),0 ;рабочая область очищена RET NZ ;если рабочая область очищена, то возврат RST 32 ;очистка рабочей области DEFW #1бBF RET ;возврат ──────────────────────────────────────────────────────────────── Адрес 7536. Проверка, идет ли проверка строки на синтаксис или выполнение команды. Если идет выполнение, то флаг Z будет сбро- шен, иначе установлен. 7536 BIT 7,(IY+1) RET продолжение следует ...