ZX Ассемблер 1969 г.

Раздел 10 - мониторная программа EZ СОРЕ.


Мониторная программа EZ СОРЕ

З'о - мониторная программа на машинном языке, позволяющая вам:

1. Вводить свой программный модуль, написанный на машинном
языке

либо в полностью ассемблированном виде;

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

2. Распечатывать исходный вводимый программный модуль.

3. Делать дамп входного программного модуля по заданному адресу памяти.

4. Просматривать ячейки памяти из определенного диапазона.

5. Запоминать либо "исходный модуль", либо дамп программы, полностью переведенной на ма-
шинный 'язык.

6. Загружать записанную "исходную программу" с кассеты.

7. Выполнять дамп модуля программы на машинном языке.

Предварительные требования для кода EZ

Прежде чем применять эту мониторную программу для ввода каких-либо программ на машин-
ном языке, вы должны ассемблировать свою программу на языке ассемблера. Вам не нужно вы-
числять относительные или абсолютные переходы!

Ваш программный модуль не должен превышать 800 байтов или 200 команд.
Вы яе должны загружать окончательный текст программы по адресам, меньшим 31495 (чтобы
не стереть программу кода EZ).

Идейные основания программы кода EZ

Основная идея этой программы состоит в том, чтобы дать возможность вводить команды ма-
шинного языка в виде нумерованных строк, аналогично распечатке программы на языке
"бейсик".

Каждая строка "исходной программы" (так называются строки текста программы на машинном
языке) имеет номер и содержит до 4 байтов текста.

Основное преимущество этого программного средства, таким образом, состоит в возмож-
ности "редактирования" любой строки. "Исходная программа" может также отдельно записы-
ваться на лент что позволяет запоминать работу на конкретных этапах.

Основная новизна этой программы - в возможности вставки относительных и абсолютных пе-
реходов без необходимости пересчета соответствующих чисел, любой переход можно сделать,
просто сославшись на номер строки, на которую вы хотите перейти!

Зто означает, что изменения можно вносить без труда даже в пределах диапазона относи-
тельного перехода.

Текст "исходной программы" передается в память по команде "дамп". Получающийся в ре-
зультате текст программы на машинном языке можно также записать в память.

Сводка команд кода EZ

Обратите внимание, что первый вопрос, задаваемый вам программой:
"адрес загрузки".

Зто адрес, по которому вы хотите разместить текст программы на машинном языке. Он не
может быть меньше 31500.
Ввод строк

1. Для ввода строк "исходной программы": (номер-строки) (пробел) (не более 4 шестнадца-
теричных байтов) (ENTER)

например, 1 210040 приведет к вводу машинной команды

LD HL, 4000н в строку номер 1.
(ENtIlR) реАактирования стР0Ки: (номеР строки) (пробел) (заново ввести новые байты)

например, 1 210140 приведет к замене строки номер 1 командой LD HL, 4001н

3. Для удаления строки команды: (номер-строки) (ENTER)
например, 1 (ENTER) приведет к удалению строки номер 1.

4. Для задания относительного или абсолютного перехода (номер-строки) (пробел) (команда
перехода) ('"L" в нижнем регистре") (номер-строки) (ENTER)

например, 1 с312 представляет команду JP на строку 2.
2 1811 Представляет команду JR на строку 1.

Команды

1. DUMP (ENTER)

* дамп исходной распечатки в память, начиная с заданного адреса загрузки.

* Зто необходимо проделать перед выполнением программы на машинном языке.
Сокращение: DU

2. exit (enter)

* выход из кода EZ и повторный вход в систему "бейсик".
Сокращение: ех

3. list (enter)

* распечатка первых 22 строк команд распечатки исходного текста

* нажмите любую клавишу, кроме "м" и "BREAK", чтобы продолжить распечатку.
Сокращение: LI

LISTS (ENTER)

* распечатка 22 строк распечатки исходного текста начиная со строки n1, где номер - от 1
до 200 включительно.

Сокращение: без сокращения

4. Load (enter)

* загрузить модуль с распечаткой исходного текста с кассеты, заменив им существующий мо-
дуль.

Сокращение: LD

5. Мем (ENTER)
подсказка: адрес начала:

* введите адрес памяти с которого вы хотите начать выдачу.

* Может быть от 0 до 32767 для "спектрум" с объемом памяти 16к или от 0 до 65535 для
"спектрум с объемом памяти 48к.

* Нажмите "м", чтобы выйти из режима просмотра памяти.
Сокращение: ме

6. NEW CENTER)

* удалить текущий модуль и заново стартовать код EZ.

* Эта команда полезна для того, чтобы начать ввод текста еще одного программного модуля.
Сокращение: NE

7. RUN CENTER)

* выполнить подвергнутый дампу программный модуль, начиная с адреса загрузки, заданного
вами, когда стартовали программу кода EZ или при загрузке новой распечатки исходного
текста.

Сокращение: RU

8. SAVE (ENTER)

* записать на кассету распечатку исходного текста или дамп текста машинной программы,
подсказка: ввести
имя:

введите имя, которое вы хотите использовать, исходный текст или машинный язык: (S или

м)

введите S для записи распечатки исходного текста;
введите м для записи текста
на машинном языке;

запустите ленту, потом нажмите любую клавишу, убедитесь, что кассета правильно заправ-
лена, нажмите любую клавишу, когда кассета готова.
Сокращение: SA

Замечания

1. Если вы не хотите, чтобы после выполнения программы возвращался результат в регистре
вс, измените строку 3090 следующим образом:

3090 IF к$ = "RU'THEN LET Г= USR R

2. Для рестарта программы кода EZ: либо примените RUN, в результате чего все переменные
будут инициализированы; либо примените GO то 2020, в результате чего выдается подсказка:
"COMMAND OR LINE (Ш) .

3. Все вводимые числа, за исключением текста машинных команд, должны быть в десятичном

формате.

4. Чтобы вы могли вставлять дополнительные строки в текущую распечатку, полезно в распе-
чатке пропускать номера строк, т. Е. Вместо того чтобы вводить строки команд с номерами
1, 2, 3, вводите 1, 5, 10 и т. Д.

Это придаст большую гибкость вводимому модулю.
Упражнение на код Е 1
введите следующий текст программы.
210340 LD HL, 4000H: FILL SCREEN
110140 LD DE, 4001н
0 IFF17 LD вс 6143
3EFF LD a, 0FFH

77 LD (HL), a

EDB0 LDIR

3E7F • LOOP: LD a, 7FH: TRAP BREAK кеу
DBFl IN a. (0FEH)

e601 AND 1

20F8 JR NZ, LOOP

с 9 RET

FILL SCREEN-заполнение экрана; TRAP BREAK кеу -прерьвание по клавише.
Чтобы ввести приведенный выше текст с помощью программы кода EZ

COMMAND OR LINE (III): 1 210040 (ENTER)
COMMAND OR LINE HI : 5 110140 (ENTER)
COMMAND OR LINE
III : 10 01FF17 (ENTER)
COMMAND OR
LINE III : 15 3EFF (ENTER)
COMMAND OR LINE
III : 20 77 (ENTER)
■ COMMAND OR LINE
III): 25 EDB0 (ENTER
COMMAND OR LINE
III : 30 3E7F ENTER
COMMAND OR LINE
(III : 35 DBFE ENTER
COMMAND OR LINE
III : 40 e601 (ENTER)
COMMAND OR LINE
(III): 45 20130 (ENTER)
(это будет 20,. потом "L в нижнем регистре, потом 30, т. Е.
3R Й, LINE 30)
COMMAND OR LINE
[III : 50 c9 (ENTER)
COMMAND OR LINE
III : LIST (ENTER
COMMAND OR LINE
III : DUMP (ENTER)
COMMAND OR LINE (III): мем (ENTER)
STARTING ADDRESS: 31500 (ENTER)

(THIS IS THE KEY TO EXIT THE MEMORY
DISPLAY MODE)
COMMAND OR LINE (III): RUN (ENTER)
(BREAK)

RUN - выполнить: LOADING ADDRESS - адрес загрузки: СОНМ) OR LINE - команда или стро-
ка; STARTING ADDRESS - адрес начала; THIS IS THE КЁУ TO EXIT THE MEMORY DISPLAY MODE -
это - клавиш для выхода из режима просмотра памяти.

Обцтит. внимание, что после номеров строк должен идти пробел.

COPYRIGHT (с) 1982

100 REM MACHINE

110 REM MACHINE CODE MONITOR

120 GO то 9000

130 DEF FN D (SS) = (S$>"9"* (CODE SS-55)

+ (S$<=T) t (CODE SS-48) - [SI > " ') *32
140 DEF FN о ДО = ( (oS = ca") + (oS = 'DA )
+ (o5 = *ea") + [oj = "FA") + [oS = c2
+ o$ = "D2" + o$ = "e2") + (o$ = "F2")
+ oS = "c3 ;) - ( (oS = "38") + (oS = 130")

+ (of = "28") + (o$ = "20") + (o$ -- "18")
+ o$ = "10"))

1000 РЕМ

1010 REM INV LINE PRINTING ROUTINE IRU

1020 CLS: PRINT ат ZE, 25; INVERSE ON; FLASH ON; "LISTING IRU"

1030 LET F = ZE: PRINt ат ZE, ZE;

1040 FOR J = PL1 то PL2

1050 IF c$ (J, ON) = " " THEN GO то 1110

1060 PRINT тав TR- LEN STR$ J; J; тав FR; " ";

1070 IF c$ (J. TW, ON то ON) ="1

THEN folNt c$ (J, ON) +" "+c$ (J, TW) +c$ (J, TR)
: GO то 1090)

1080 PRINT c$ (J, ON); " ": c$ (J, TW); " "
; cS (J, TR); " " c$ (j, ТЙ>
1090 LtT F =F+ON
1100 IF F = 22 THEN GO то 1120
1110 NEXT J

1120 PRINT ат 2E, 25; "
1130 RETURN

2000 REM INV MAIN ROUTINE IRU

2020 INPUT "COMMAND OR LINE (III): "; a$
2030 IF aS (to FR) =" "THEN GO то MR
2040 IF aS (ON) > "9" THEN GO то 3000
2050 LET к$ = '": FOR к = ON то FR
2060 IF aS (к то к) = " " THEN GO то 2090
2070 LET к$ = к$+а$ (к то к)
2080 NEXT к

2090 IF к = 5 OR VAL к$ = ZE OR VAL к$ > IN

THEN GO то №
2100 LET J = VAL к$: LET N = J
: REM LINE NUMBER MUST ве 3 BYTES
2110 LET aS = a{ (к+ON
to)
2120 LET k$ =
2130 FOR к = ON то LEN a$
2140 IF aS (к то к) <> " "

THEN LET 4 =к$+а$ (к то к)
2150 NEXT к
2160 LET a$ = к$

2162 IF aS (ON) = "1" THEN GO то MR
2170 CLS: FOR I = ON то 7 STEP TW
2180 LET к = INT (IAW+ON)
2190 LET c< (J к) = a$ (I то I+ON)
2200 NEXT I

2210 IF-c$ (N, ON) = " " THEN GO то 2250
2220 IF N < тр THEN LET тр = N
2230 IF N > вр THEN LET вр = N
2240
go то 2320

2250 IF N <> вр THEN GO то 2280
2260 IF вр =
on OR c$ (вр, on) <> " "

THEN GO то 2320
2270 LET вр = вр-ON: GO то 2260
2280 IF N <> тр THEN GO то 2320
2293 IF cS (тр, ON) <> " " THEN GO то 2320
2300 IF тр <> вр AND тр <> IN THEN LET тр = тр+ON

2310 LET тр = ON
2320 LET pp = N

2330 IF N < тр THEN LET pp = тр: GO то 2380
2340 LET NUMLP = ZE

2350 IF pp = тр OP NUMLP = 11 THEN GO то 2380
2360 IF c| (pp, ON) <> " "

THEN LET NUMLP = NUMLP+ON
2370 LET pp = pp-ON: GO то 2350
2380 LET PL1 = pp: LET PL2 = вр
2390 GO SUB 1000

* REM PRINT a BLOCK OF LINES
2400 GO то MR
3000 REM

3010 REM INV COMMANDS*"************ IRU

3020 LET к$ = a$ (to TU)
3030 IF KS = "DU" THEN GO то 5000
•3040 IF кь = "ex" THEN STOP
3050 IF к5 = "LI" THEN GO то 4000
3060 IF k| = "LO" THEN GO то 7000
3070 IF к! = "ме" THEN GO то 6000
3080 IF KS = "NE" THEN RUN
3090 IF k| = "RU" THEN PRINT USR R
3100 IF к! = "SA" THEN GO то 8000
3110 GO то MR
4000 REM

4000 REM INV LIST ROUTINE*********** IRU

4020 LET PL1 = td: LET PL2 = вр

4030 LET N1 = CODE aS (6 то 6)

4040 IF LEN a$ > FR AND NL > 47 AND N1 < 58

THEN LET PL1 = VAL a$ (5 то 8)

4050 GO SUB 1000

4050 GO to MR

5000 RrM

5010 REM INV DUMP ROUTINE*********** IRU

5020 cls: PRINT ат ZE, 25; INK ON; INVERSE ON
; ^LASH ON; "DUMPING": LET G = R
5030 PRINf ат ON, ZE;
5340 FOR J = тр то вр
5050 IF cj (J, ON) = " THEN GO то 5470
5060 IF cS (J. TW, ON то ON) <> "1" THEN GO то 5380
5070 роке G, ZE: роке G+ON, ZE: роке G+TW, ZE
; роке G+TR, ZE t л ,

5080 LET jf. = VAL (cS (J, TW. TW то TW) +c$ (J, TR))
5090 PRINT тав TR- LEN StR$ J; INVERSE ON; J
; тав FR; INVERSE ZE; " " ,
; cS (J, ON) +" "+c$ (J, TW) +c$ (J, TR)

'5100 IF Jl! < ZE OR JL > LN THEN GO то 5460
5110 LET C3 = FN о (c$ (J.
ON))
5120 PRINT тав 17- LEN STl}$ JL: INVERSE ON; JL
; тав 18: INVERSE ZE: " "; c$ (jL. ON)b b
" "; cj (JL, TW); "; c$ (JL, tR);
cS
(JL, FR):

5130 IF ABS SJ <> ON THEN GO то 5460

5140 LET DD = (JL > J) - (JL < J)
5150 LET JA = G: LET DP = ZE
5170 LET CL = J+DD

5180 LET NL = ZE: IF c$ (CL, ON) = " "

THEN GO то 5220
5190 IF c$ (CL. TW, ON то ON) <> '1"

THEN LfT Nt = ON+ (c( (CL, TW) <> " ")
+ (c$ (CL, TR <> " ")

: GO то 5220

5200 LET TJ = FN о (c$ (CL. ON))

5210 LET N1 = (TJ = ON) Ф (T = -ON) *TW

5220 IF CL = JL AND DD > ZE THEN GO то 5270

5230 LET DP = DP+N1

5240 IF CL = JL THEN GO то 5270

5250 LET CL = CL+DD

5260 GO то 5180

■5270 IF CJ = ON THEN LET JA = JA+DD*DP+ (DD > ZE) *TR
: GO то 5310

5280 IF DD > ZE THEN LET DP = DP+2

SS !E f > 126 m 00 < ZE THEN GO то 5460

8$ » " 129 m D? > ZE THEN GO то 5460

5310 LET V =16* FN D (c$ (J, ON, ON то ON))

____ + FN D (c$ (J, ON, TW то TW )

5320 роке G, V: LEt G = G+ON

5,3Й 4 nn0N THENKe G; № W (JA/OK) *QK

'' £ S = № Роке INT JA/QK

: LET G = G+ON: GO то $360

5340 IF DD < ZE THEN LET DP = -DP

5350 LET DP.* DP-TW: роке G, DP: LET G = G+ON

5360 PRINT ok

5370 GO то 5470

5380 FOR I = ON то 7 STEP TW

5390 LET к = INT (I/TW+ON)

5400 LET V = 16* FN D (c$ (J, к, ON то ON))

+ FN D (c$ J, к, TW то TW))
5410 IF V < ZE THEN Gfl то 5440
5420 роке G, V
5430 LET G ? G+ON
5440 NEXT I
5450 GO то 5470
5460 PRINT "**"
5470 NEXT J

5480 PRINT ат ZE, 25* '
: GO то MR
6000 REM

6010 REM INV MEMORY DISPLAY********* IBU

6020 INPUT "STARTING ADDRESS: DM
6030 CLS: PRINT ат ZE, ZE:
6040 LET G = DM: LET P = £
6050 LET F = F+ON

: PRINT тав 5-LEN STR$ G; G; тав 6;

6060 FOR 1= ON то FR

6070 LET V = реек G

6080 LET н = INT (V/16)

6090 LET L = V-16*H

6100 PRINT D$ (н+ON); D$ (L+ON; " *;
5110 LET G = G+ON
6120 NEXT I
6130 PRINT • " '
6140 IF F<> 22 THEN GO то 6050
6053 LET к$ = INKEYJ: IF к$ THEN GO то 6150
6160 IF к$ <> V AND к$ <> V THEN LET F = ZE
: роке 23692, QK-ON: GO то 6050
6200 роке 2^692, ON: PAUSE 20: GO то MR
7000 m

7010 REM INV LOAD mtmtmmmt IRU

7020 CLS
7030 INPUT

"LOAD ARRAY: PRESS ANY кеу WHEN READY. "

; K$

7040 PRINT ат ZEX 25; INVERSE ON; FLASH ON; LOADING
7050 LOAD "SOURCE DATA c$ () ■
7060 FOR I = ON то IN
7070 LET тр = I

7080 IF c$ (I, ON) <> ' " THEN GO то 7100
7090 NEXT I

7100 FOR I = IN то ON STEP -1

7110 LET вр = I

7120 IF c$ (I, ON) <> " " THEN GO то 7140
7130 NEXT I

7140 PRINT ат ZE, 25; '
7150 GO то 9150
8000 REM

8010 REM INV SAVEmmmmmm ш

8020 INPUT "ENTER NAME: "; N$
6033 IF NS = ""THEN GO то 8020
8040 INPUT

"SOURCE OR MACHIEN CODE: (S OR м) '

'8050 IF kS <> "S" AND K$ <> "м" THEN GO то 8040

8060 IF kS = "S" THEN SAVE N$ DATA c$ (): GO то MR

8070 INPUT "STARTING ADDRESS: "; SS

8080 INPUT "FINISHING ADDRESS: ; SF

8090 LET SB = SF-SS+ON

8100 SAVE N$ CODE SS, SB

8110 GO то MR

9000 REM

9310 REM INITIALISATION
9020 LET ZE = PI - Pi: LET ON = PI / PI
: LET TW = ON+ON: LET TR = ON+TW
: LET FR -- TW+TW: LET QK = 256
: LET MR = 2020: LET IN = 200
9025 BORDER 7: PAPER 7: INK ON: INVERSE ZE
: OVER ZE: FLASH ZE: BRIGHT ZE
: веер.25, 24: Beep.25, 12
9030 DIM aS (15): DIM o$ (TW)
9040
let yn = LN: LET bd = ON: REM LINE NUMBER BUFFER
9050 DIM cS (LN, FR. TW): REM HOLDS CODE
9060 PRINT ат ZE, 20; INVERSE ON; FLASH ON
; "INITIALISING"

9070 FOR I = ON то LN
9080 FOR J = ON то FR
9393 LET cS (I, J) = " "
9100 NEXT J
9110 веер.01, 20
9120 NEXT I

9130 PRINT ат ZE, 20; "

9140 LET Df = "0i234^6789ABCDEF"

9150 CLS: PRINT "LOWEST ADDRESS: "; 31500

8160 INPUT "LOADING ADDRESS: R: PAUSE 20

9170 IF R < 31500 THEN GO то 9'1б0

9180 CLS: GO то MR

COPYRIGHT - авторские права; MACHINE CODE MONITOR - монитор машинного языка; ROUTINE -
программа; MAIN ROUTINE - основная программа; COMMAND OR LINE - команда или строка;
NUMBER MUST ве 3 BYTES - номер строки должен составлять 3 байта; PRINT a BLOCK OF LINES -
напечатать блок строк; COMMANDS - команды; MEMORY DISPLAY - распечатка памяти; STARTING
ADDRESS - начальный адрес; LOAD - загрузка; LOAD ARRAY: PRESS ANY кеу WHEN

READY - загрузка массива: нажмите любую клавишу, когда будете готовы; SAVE - запись;
ENTER NAME - введите имя; SOURCE OR мае INE CODE - исходный текст или текст
на машинном
языке; STARTIN ADDRESS - начальный адрес; FINISHING ADDRESS -
конечный адрес;
INITIALISATION - инициализация* LINE NUMBER BUFFER - буфер номеров строк; LOWEST ADDRESS-
наименьший адрес; LOADING ADDRESS - адрес загрузки.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Mрaчныe рaccкaзы - by DWТ^KCS: Дoрoгa, Крышa, Трamвaй, Тaнeц, Тam.
Будем жить ? - Существовать ли газете в дальнейшем ?
Интервью - Николай Родионов и ZX-Sectrum.
Реклама - Реклама и объявления ...
IS-DOS - программистам: Оконная система IS-DOS

В этот день...   21 ноября