Адрес 12457. Определение номера ключевого слова. Установите
23769. После возврата если флаг Z установлен, то в C будет номер
ключевого слова, а в HL - адрес последнего символа ключевого
слова; иначе ключевое слово не было опознано, а в HL будет адрес
из 23769.
12457 LD HL,(23769);берем адрес ключевого слова в строке
LD DE,12541 ;адрес таблицы ключевых слов
LD C,0 ;начнем со слова 0
12465 LD A,(HL) ;берем символ слова из нашей строки
AND 223 ;буква заглавная
LD B,A ;загрузка символа в B
OR A ;это CHR$ 0 ?
JR NZ,12475 ;если да, то
INC HL ;следующий символ
JR 12465 ;и повтор
12475 LD A,(DE) ;берем символ из таблицы
AND 128 ;его бит 7 включен ?
JR NZ,12488 ;если да, то этот символ последний
LD A,(DE) ;снова берем символ из таблицы
CP B ;сравнение символов
JR NZ,12505 ;если они не совпадают, то проверка следующего слова
INC HL ;адреса следующих символов
INC DE
JR 12465 ;повтор
12488 LD A,(DE) ;берем символ из таблицы
AND 127 ;сбрасываем бит 7
CP B ;сравниваем символы
RET Z ;если они совпали, то возврат
12493 INC C ;номер следующего слова
LD HL,(23769);берем адрес ключевого слова в строке
INC DE ;следующий символ из таблицы
LD A,(DE)
CP 255 ;конец таблицы ?
JR NZ,12465 ;если нет, то повтор
OR A ;сброс флага Z
RET ;возврат
12505 INC DE ;следующий символ из таблицы
LD A,(DE)
AND 128 ;его бит 7 включен ?
JR Z,12505 ;если да, то следующий символ
JR 12493 ;проверка достижения конца таблицы
────────────────────────────────────────────────────────────────
Адрес 12513. Проверка местонахождения строки. Устанавливает
23766, а в HL помещает адрес поля длины строки минус 2.
12513 LD HL,(23621);берем номер выполняющейся строки
INC HL ;подана прямая команда ?
INC HL
LD A,H
OR L
JR Z,12532 ;если да, то установка флага
XOR A ;команда находится в строке программы на бейсике
LD (23766),A
DEC HL ;восстановление номера строки
DEC HL
RST 32 ;определение адреса строки
DEFW #196E
RET ;возврат
12532 LD A,255 ;подана прямая команда
LD (23766),A
LD HL,(23641);любой адрес
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 12541. Таблица ключевых слов TR-DOS.
12541 DEFM "SAVE"
DEFB 128
DEFM "SAV"
DEFB 197
DEFM "LOAD"
DEFB 128
DEFM "LOA"
DEFB 196
DEFM "RUN"
DEFB 128
DEFM "RU"
DEFB 206
DEFM "CAT"
DEFB 128
DEFM "CA"
DEFB 212
DEFM "ERASE"
DEFB 128
DEFM "ERAS"
DEFB 197
DEFM "NEW"
DEFB 128
DEFM "NE"
DEFB 215
DEFM "MOVE"
DEFB 128
DEFM "MOV"
DEFB 197
DEFM "MERGE"
DEFB 128
DEFM "MERG"
DEFB 197
DEFM "PEEK"
DEFB 128
DEFM "PEE"
DEFB 203
DEFM "POKE"
DEFB 128
DEFM "POK"
DEFB 197
DEFM "OPEN"
DEFB 131
DEFM "CLOSE"
DEFB 131
DEFM "CODE"
DEFB 128
DEFM "COD"
DEFB 197
DEFM "RND"
DEFB 128
DEFM "RN"
DEFB 197
DEFM "DATA"
DEFB 128
DEFM "DAT"
DEFB 193
DEFM "SCREEN"
DEFB 4,132
DEFM "SCREEN"
DEFB 132
DEFM "COPY"
DEFB 128
DEFM "COP"
DEFB 217
DEFM "FORMAT"
DEFB 128
DEFM "FORMA"
DEFB 212
DEFM "GO TO"
DEFB 128
DEFM "GO T"
DEFB 207
DEFM "LIST"
DEFB 128
DEFM "LIS"
DEFB 212
DEFM "LINE"
DEFB 128
DEFM "LIN"
DEFB 197
DEFM "VERIFY"
DEFB 128
DEFM "VERIF"
DEFB 217
DEFB 255
────────────────────────────────────────────────────────────────
Адрес 12744. Таблица кодов ключевых слов TR-DOS.
12744 DEFB 248,248,239,239,247,247,207,207,210,210,230,230,209
DEFB 209,213,213,190,190,244,244,211,212,175,175,165,165
DEFB 228,228,170,170,255,255,208,208,236,236,240,240,202
DEFB 202,214,214,0
────────────────────────────────────────────────────────────────
Адрес 12787. Проверка наличия системных переменных TR-DOS. Если
они есть, то флаг C будет сброшен, иначе установлен.
12787 LD HL,(23631);берем адрес области описателей каналов
OR A ;для правильного вычитания
LD BC,23845 ;адрес области описателей каналов при наличии системных
;переменных TR-DOS.
SBC HL,BC ;установка флага C
RET ;возврат
────────────────────────────────────────────────────────────────
Адрес 12800. Выбор формата диска. Устанавливает 23782 и 23784, а
в аккумуляторе возвращает тип дисковода.
12800 LD HL,12844 ;печать PRESS T FOR TURBO FORMAT,
RST 24 ;OTHER KEY FOR FORMAT
CALL 4178 ;ввод клавиши
CP "T" ;это "T"" ?
JR Z,12823 ;если да, то быстрый формат
LD HL,8121 ;адрес таблицы секторов для форматирования
LD (23782),HL;обычного диска
INC HL ;адрес таблицы секторов для проверки
LD (23784),HL;обычного диска
JR 12833 ;продолжение
12823 LD HL,12890 ;адрес таблицы секторов для форматирования
LD (23782),HL;быстрого диска
INC HL ;адрес таблицы секторов для проверки
LD (23784),HL;быстрого диска
12833 RST 32 ;очистка низа экрана
DEFW #0D6E
LD HL,13074 ;печать HEAD 0 CYLINDER 0
RST 24
CALL 15889 ;берем тип дисковода
RET ;возврат
12844 DEFM "Press T for TURBO-FORMAT"
DEFB 13
DEFM "Other key for FORMAT"
DEFB 0
12890 DEFB 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1
────────────────────────────────────────────────────────────────
Адрес 12907. Запрос на повтор форматирования.
12907 LD A,13 ;перевод строки
RST 16
LD HL,12940;печать PRESS R FOR REPEAT FORMAT,OTHER KEY FOR
RST 24 ;TR-DOS
CALL 4178 ;ввод клавиши
CP "R" ;это R ?
JR Z,12924 ;если нет, то завеpшение
JP 467
12924 RST 32 ;очистка низа экрана
DEFW #0D6E
12927 RST 32 ;берем номер нажатой клавиши
DEFW #028E
JR NZ,12927;если нажата бессмысленная комбинация клавиш, то повтор
RST 32 ;берем код нажатой клавиши
DEFW #031E
JR C,12927 ;если что-то нажато, то повтор
JP 7901 ;повтор форматирования
12940 DEFM "Press R for repeat FORMAT"
DEFB 13
DEFM "Other key for TR-D0S"
DEFB 0
────────────────────────────────────────────────────────────────
Адрес 12987. Проверка дорожки по таблице секторов для обычного
диска. Установите 23768, обнулите 23766 и спозиционируйте голов-
ку.
12987 LD HL,8122 ;установка адреса таблицы секторов
LD (23784),HL
JP 8317 ;проверка дорожки
────────────────────────────────────────────────────────────────
Адрес 12996. Помещение аккумулятора в 23781 и очистка низа экра-
на.
12996 LD (23781),A
RST 32
DEFW #0D6E
RET
────────────────────────────────────────────────────────────────
Адрес 13003. Сообщения HEAD и CYLINDER.
13003 DEFM "HEAD "
DEFB 0
13009 DEFM " CYLINDER "
DEFB 0
────────────────────────────────────────────────────────────────
Адрес 13021. Печать номера дорожки на верхней стороне и формати-
рование ее. Номер дорожки поместите в A, выберите верхнюю сторону
диска и установите все для 8189. Используется также с адреса
13022 (Печать номера стороны и дорожки и форматирование ее; ус-
тановите все для 13021 плюс флаг C должен указывать номер сторо-
ны.
13021 OR A ;нижняя сторона
13022 PUSH DE ;сохранение номера дорожки
PUSH AF ;и стороны
LD A,22 ;печать кода "AT"
RST 16
LD A,(23659);последняя строка нижнего экрана
DEC A
RST 16
LD A,0 ;колонка 0
RST 16
LD HL,13003 ;печать HEAD
RST 24
POP AF ;восстановление номера стороны
LD A,"0" ;печать номера стороны
ADC A,0
RST 16
LD HL,13009 ;печать CYLINDER
RST 24
POP DE ;восстановление
PUSH DE ;и снова сохранение номера дорожки
LD C,E ;перенос его в BC
LD B,0
CALL 7593 ;печать его
POP DE ;восстановление
PUSH DE ;и снова сохранение номера дорожки
LD A,E ;он меньше 10 ?
CP 10
JR NC,13067 ;если да, то
LD A," " ;печать пробела
RST 16
13067 POP DE ;восстановление номера дорожки
JP 8189 ;форматирование дорожки и возврат
────────────────────────────────────────────────────────────────
Адрес 13071. Печать номера дорожки на нижней стороне и формати-
рование ее. Номер дорожки поместите в A, выберите нижнюю сторону
диска и установите все для 8189.
13071 SCF ;нижняя сторона
JR 13022;печать номера стороны и дорожки ,форматирование ее и возврат
────────────────────────────────────────────────────────────────
Адрес 13074. Сообщение HEAD 0 CYLINDER 0.
13074 DEFM "HEAD 0 CYLINDER 0"
DEFB 0