ZX Spectrum для пользователей и программистов 1991 г.

GENS4 - сообщения об ошибках. Пример сеанса работы. Забавный пример использования команд условной трансляции.


СООБЩЕНИЯ ОБ ОШИБКАХ

*ERROR* 1 — ошибка в константе;

*ERROR* 2 — мнемоника не распознана;

*ERROR* 3 — утверждение сформировано неправильно;

*ERROR* 4 —символ (метка) определен более одного раза;

*ERROR* 5 — строка содержит недопустимый символ;

*ERROR* 6 — один из операндов в строке не определен;

*ERROR* 7 — метка является зарезервированным словом;

*ERROR* 8 — использование недопустимой для данной команды пары регистров;

*ERROR* 9 — использование недопустимого для данной команды регистра;

*ERROR* 10 — величина относительного смещения слишком велика;

*ERROR* 11 — инструкция не может быть оттранслирована;

*ERROR* 12 — ошибка в директиве ассемблера;

*ERROR* 13 — метка, используемая в команде, не определена;

*ERROR* 14 —деление на ноль;

*ERROR* 15 — переполнение при операции умножения;

*ERROR* 16 — вложенное макроопределение;

*ERROR* 17 — идентификатор не может являться именем макроопределения;

*ERROR* 18 — рекурсивный вызов макроопределения;

Bad ORG! — операндом директивы ORG является адрес, использование которого может испор-
тить ячейки GENS4, текстовый файл или таблицу символов. Управление возвращается в ре-
дактор;

No Symbol Table space! — появляется во время первого прохода, если под таблицу символов
выделено недостаточно памяти. Управление возвращается в редактор;

Out of memory! — нет места для текста программы. Рекомендуется записать текущий текстовый
файл или его часть на магнитный носитель.

ЗАРЕЗЕРВИРОВАННЫЕ СЛОВА

Все зарезервированные слова состоят из заглавных букв. Приведенные ниже слова нельзя ис-
пользовать как метки:

А В С D Е

Н L I R $

AF AF' ВС DE HL

IX IY SP NC Z

NZ М Р РЕ PO

Далее приводится список мнемоник команд Z80, директив я команд ассемблера:
ADC ADD AND BIT CALL

CCF CP CPD CPDR CPI

CPIR CPL DAA DEC DI

DJNZ El ЕХ EXX HALT

IM IN INC IND INDR

INI INIR JP JR LD

LDD LDDR LDI LDIR NEG

NOP OR OTDR OTIR OUT

OUTD OUTI POP PUSH RES

RET RETI RETN RL RLA

RLC RLCA RLD RR RRA

RRC RRCA RRD RST SBC

SCF SET SLA SRA SRL

SUB XOR

DEFB DEFAA DEFS DEFW ELSE

END ENT EQU IF ORG

MAC ENDM

*D *E *H *L *S

*C *F *M

ПРИМЕР СЕАНСА РАБОТЫ

Задача: написать и отладить программу, выводящую на экран числа в пределах от О до 65535 в
произвольной системе счисления.

Проект: программа должна состоять из двух подпрограмм — подпрограммы, подготавливающей
таблицу степеней, и собственно подпрограммы вывода числа на экран.
Ввод программы:

Полужирным шрифтом выделен текст, вводимый с клавиатуры, курсивом — пояснения. Исполь-
зованы следующие обозначения клавиш:

Enter;
[SP] - Space;

[SS/x] — одновременное нажатие клавиш Symbol Shift и х;
[CS/x] — одновременное нажатие клавиш Caps Shift и х.

Ввод строки программы заканчивается нажатием на клавишу Enter:

>II10,10^ автонумерация строк
Pardon? ошибка в командной строке
>I10,10^

10 ;отладочная часть*

20 ORG 40000 ;адрес размещения подпрограмм

*) Пример вводился и обрабатывался без комментариев.

30 ENT $ ;определение входной точки

4 0 CALL 3503 ;очистка экрана

50 LD A,10 ;установка системы счисления

60 CALL MAK_TB ; с основанием 10

70 LD HL,12345 ;печать числа

80 ;подпрограмма печати числа, содержащегося в HL

90 PR_NUM PUSH HL ;сохранение числа

100 PUSH HL ;создание рабочей копии

110 LD HL, (TB END) ;загрузка адреса конца таблицы

120 LOOP_1 DEC HL ;загрузка в DE очередной

130 LD D,(HL) ; степени числа, находящейся

14 0 DEC HL ; в таблице

150 LD E,(HL)

160 LD A,D ;проверка на достижение конца

17 0 OR Е ; таблицы

180 JR. NZ,CONT 1 ,продолжение, если не конец

190 POP HK ; восстановление SP

200 POP HL ;восстановление числа

210 LD А,13 ;АSCII-код 13 - перевод строки

220 RST 16 ;печать символа из А

230 RET ;возврат из подпрограммы

240

250 CONT_1 ЕХ (SP),HL ;восстановление числа

260 XOR А ;очистка А и сброс бита CY

270 LOOP 2 SBC HL,DE ' ;расчет очередного разряда

280 JR. C,PR CHR ; числа, результат помещается

290 INC A ; в А, а расчет заканчивается

300 JR LOOP_2 , ; при переходе через ноль

310 _

320 PR_CHR ADD HL,DE ;восстановл. полож. значения

330 ADD A,"0" ; получение ASdI кода

340 СР "9"+1 ;если код меньше, чем "9"

350 JR. C,CONT 1 ; то переход на печать

360 ADD А,"А"—"9"—1 ; коррекция кода

37 0 CONT 2 RST 16 ;печать очередной цифры числа

380 ЕХ (SP),HL ;восстан. адреса таблицы

3 90 JR LOOP_1

400 ; подпрограмма подготовки таблицы степеней, основание

410 ; степени должно быть помещено в аккумулятор

420 МАК_ТВ LD HL, TABLE+4 ;загрузка адреса таблицы

430 PUSH HL ;сохранение адреса

440 LD DE,1 ;инициал. счетчика степени

450 LOOP 3 LD B,A ;загрузка счетчика цикла

460 LD HL,0 ;обнуление результата

470 LOOP_4 ADD HL,DE ;подсчет степени

480 JR. C.READY ;окончание счета (>65535)

4 90 DJNZ LOOP_4 ;цикл подсчета

500 ЕХ DE,HL ;загрузка результата в DE

510 READY POP HL ;восстановление адреса таблицы

52 0 LD (TB END),HL ;запись адреса конца таблицы

530 RET С ;выход. при окончании счета

540 LD (HL),E ;запись очередного значения

550 INC HL ; степени в таблицу

560 LD (HL),D

57 0 INC HL

580 PUSH HL ;сохранение адреса таблицы

5 90 JR. LOOP 3 ;продолжение цикла
600 ; область данных

610 TB_END DEFW TABLE+2 ;переменная, содержащая адрес

620 ;конца таблицы

630 TBLE DEFW 0 ;таблица степеней, первые два

64 0 DEFW 1 ;значения — константы

650 DEFS 30 ;область для таблицы
660

67 0 END

680 [CS/1]

>A2^ вызов ассемблирования без построения кода
HiSoft GEN Assembler ZX Spectrum
1990 MOA B-Disk version.

Copyright (C) HiSoft 1987
V4.1 All rights reserved
9C58 190 POP HK

*ERROR* 01

^ обнаружена ошибка — продолжаем процесс
No Symbol Table space!размер таблицы символов мал

>A2,300^ ассемблирование с большим размером таблицы символов

HiSoft GEN Assembler ZX Spectrum
1990 MOA B-Disk version.

Copyright (C) HiSoft 1987
V4.1 All rights reserved
9C58 190 POP HK

*ERROR* 01
^

Pass 1 errors: 01

*WARNING* HK absent ПРЕДУПРЕЖДЕНИЕ: метка не обнаружена
*WARNING* TABLE absent
Table used: 187 from 300

>E190^ вызов на редактирование ошибочной строки
190 POP HK

190 X[CS/0]L^ редактирование осуществляется

190 POP HL последовательным нажатием

соответствующих клавиш

>L600^ просмотр части листинга
600

610 TB_END DEFW TABLE+2
620

630 TBLE DEFW О

64 0 DEFW 1

650 DEFS 30

660

670 END

>E630^ вызов на редактирование ошибочной строки
630 TBLE DEFW 0

630 [SP]IA^^

63 0 TABLE DEFW 0

>A,300^ ассемблирование с созданием кода
HiSoft GEN Assembler ZX Spectrum
1990 MOA B-Disk version.
Copyright (C) HiSoft 1987
V4.1 All rights reserved
Pass 1 errors: 00

Pass 2 errors: 00

Table used: 167 from 300

Executes: 40000

>R^ выполнение программы

12345

>D10,70^ удаление отладочной части

>N10,10^ перенумерация строк

>Р1,20000,1: UNINUMPR^ запись текста программы на диск

ЗАБАВНЫЙ ПРИМЕР ИСПОЛЬЗОВАНИЯ
КОМАНД УСЛОВНОЙ ТРАНСЛЯЦИИ

В соответствующем разделе говорилось, что использование вложения команд условной трансля-
ции недопустимо. Но, по сути, при последовательном использовании этих команд как такового
вложения не происходит. Каждая из команд условной трансляции самостоятельно управляет одним
и тем же флагом разрешения трансляции, и комбинации команд, которые на первый взгляд могут
показаться вложенными, на самом деле являются последовательными. Использование конструкций
с «лжевложениями» позволяет писать весьма элегантные программки:

ON_16 EQU 0 ; 1 — present, 0 — not present

ON_12 8 EQU 1
ON_BETA EQU 1
ON_MDRV EQU 0

CONFIG

IF ON_16

DEFM "16K"
ELSE

IF ON_12 8

DEFM "128K"
END

IF ON_16 ! 1

IF ON_12 8 ! 1

DEFM "4 8K"
END

DEFM " memory presented"

DEFB 13

IF ON_BETA

IF ON_MDRV

DEFM "Beta disk and Microdrive"
ELSE

IF ON_BETA

DEFM "Beta disk"
END

IF ON_BETA ! 1 & ON_MDRV

DEFM "Microdrive"

END

IF ON_MDRV @ ON_BETA I 1

DEFM "No drive devices"
END

DEFM " attached"

DEFB 13@ #80

В результате трансляции данного примера в памяти будет построен текстовый файл, содержа-
щий информацию о конфигурации внешних устройств, определяемых в заголовке программы.

ПРОГРАММА-ЗАГРУЗЧИК

Если Вы часто пользуетесь GENS4, то полезно написать небольшой загрузчик на Бейсике. Для
дисковой версии он может выглядеть следующим образом:

1 RANDOMIZE USR О
10 LET A=VAL "25000"

20 IF INKEY$<>"" THEN INPUT "New address: ";A
30 RANDOMIZE A: POKE VAL "23877",PEEK VAL "23670":
POKE VAL "23878",PEEK VAL "23671": CLEAR A-SGN PI

40 LET A=PEEK VAL "23670"+VAL "256"*PEEK VAL "23671"
50 RANDOMIZE USR VAL "15619": REM : LOAD "GENS4B"CODE A
60 POKE VAL "23824",NOT PI
70 GO TO NOT PI

После ввода текста программы с клавиатуры запишите ее на диск с помощью операторов:
CLEAR :РОКЕ 23868,0

RANDOMIZE USR 15 619:REM :SAVE "GENS4B"LINE 1

Приведенный загрузчик разместит GENS4 с адреса 25000, но если при запуске удерживается
какая-либо клавиша, то на экране появится запрос New address:, на который можно ввести про-
извольный адрес.

Перезапуск ассемблера после выхода в Бейсик осуществляется оператором RUN.
Для кассетной версии загрузчик будет выглядеть несколько иначе:

1 RANDOMIZE USR О
10 LET A=VAL "25000"

20 IF INKEY$<>"" THEN INPUT "New address: ";A
30 RANDOMIZE A: POKE VAL "23765",PEEK VAL "23670":
POKE VAL "237 66",PEEK VAL "23671": CLEAR A-SGN PI

40 LET A=PEEK VAL "23670"+VAL "256"*PEEK VAL "23671"
50 LOAD "GENS4B"CODE A
60 GO TO NOT PI

Для записи загрузчика на ленту выполните операторы:

CLEAR : POKE 23756,0
SAVE "GENS4"LINE 1




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Мыльница - Errata: ошибки в Info Guide #11, ACNews #65.
Marazm - Один день.
Video - "Титаник".
Тема - Хронология развития Спектрума в СССР/СНГ.
Юмор - "Телесценарий: Спасение-911".

В этот день...   25 апреля