@@@ @@@@
@ @ @
@ @ @
@ @ @ @ @ @@ @@@@ @@@ @@@
@ @ @ @ @@@ @ @ @ @ @ @ @
@ @ @ @ @ @ @ @@ @@@@ @ @
@ @ @ @ @ @@ @ @ @ @ @ @ @@
@@ @@ @@@ @@ @ @@ @@@@ @@@@ @
@@@ @
@ @
(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
продолжение следует ...
Other articles: