Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ZX-Review-1992-01-12.pdf
Скачиваний:
243
Добавлен:
28.03.2015
Размер:
2.43 Mб
Скачать

DJNZ NEXT_C

16

252

RET

201

 

Как она работает:

ВHL загружается адрес последнего атрибута 23 й строки. В DE загружается адрес последнего атрибута 24 й строки. В BC загружается число байтов для перемещения, затем команда LDDR перемещает байты (их количество указано в регистровой паре ВС) из адреса

вHL по адресу в DE. Эти результаты в DE хранят адрес последнего атрибута первой строки.

Ваккумулятор загружается значение атрибута для ввода в верхнюю строку. В B регистр загружается число байтов в верхней строке он используется, как счетчик. В ячейку с адресом DE помещается значение из аккумулятора и DE уменьшается для указания на следующий байт. Счетчик уменьшается и, если он не равен 0, подпрограмма возвращается к NEXT_С. Программа затем возвращается в BASIC.

5.5 Сдвиг влево на один символ.

Длина:21 Количество переменных:0

Контрольная сумма:1745 Назначение: эта программа прокручивает графику экрана на один символ влево.

Вызов подпрограммы:

RANDOMIZE USR адрес

Контроль ошибок: Нет Комментарий:

Эта программа полезна при организации экрана в качестве "окна", показывающего в данный момент меньшую часть большой дисплейной области. Это "окно" перемещается, используя подпрограммы сдвига.

ЛИСТИНГ МАШИННЫХ КОДОВ

МЕТКА

АССЕМБЛЕР

ЧИСЛА ДЛЯ ВВОДА

 

LD HL,16384

33

0

54

 

LD D,L

85

 

 

 

LD A,192

62

192

 

NEXT_L

LD B,31

6

31

 

NEXT_B

INC HL

35

 

 

 

LD E,(HL)

94

 

 

 

DEC HL

43

 

 

 

LD (HL),E

115

 

 

 

INC HL

35

 

 

 

DJNZ NEXT_B

16

249

 

 

LD (HL),D

114

 

 

 

INC HL

35

 

 

 

DEC A

61

 

 

 

JR NZ,NEXT_L

32

242

 

 

RET

201

 

 

Как она работает:

В пару регистров HL загружается адрес дисплейного файла, а D регистр устанавливается в 0. В аккумулятор загружается число строк на экране. В B регистр загружается значение на 1 меньшее, чем число символов в строке оно является числом байтов для копирования.

HL увеличивается для указания на следующий адрес и содержимое из этой ячейки загружается в E регистр. HL уменьшается и в ячейку с адресом HL загружается значение из E регистра. HL увеличивается для адресации следующего байта и счетчик в B регистре уменьшается. Если он не равен 0, подпрограмма возвращается к NEXT_B.

Если регистр B равен 0, это означает, что последний байт строки скопирован и HL указывает на крайний правый байт. По этому адресу в регистровой паре HL помещается 0 и

HL увеличивается, указывая на следующую строку. Счетчик строк аккумулятор уменьшается, и, если он не равен нулю, происходит переход к NEXT_L.

Программа возвращается в BASIC.

5.6 Сдвиг вправо на один символ.

Длина:22 Количество переменных:0

Контрольная сумма:1976 Назначение: эта программа прокручивает содержимое дисплейного файла на один

символ вправо.

Вызов подпрограммы:

RANDOMIZE USR адрес

Контроль ошибок: нет Комментарий:

Эта программа полезна при организации экрана в качестве "окна", показывающего в данный момент меньшую часть большой дисплейной области. Это "окно" перемещается, используя подпрограммы сдвига.

Листинг машинных кодов

МЕТКА

АССЕМБЛЕР

ЧИСЛА ДЛЯ ВВОДА

 

LD HL,22527

33

255

87

 

LD D,0

22

0

 

 

LD A,192

62

192

 

NEXT_L

LD B,31 6

31

 

 

NEXT_B

DEC HL

43

 

 

 

LD R,(HL)

94

 

 

 

INC HL

35

 

 

 

LD (HL),E

115

 

 

 

DEC HL

43

 

 

 

DJNZ NEXT_B

16

249

 

 

LD (HL),D

114

 

 

 

DEC HL

35

 

 

 

DEC A

61

 

 

 

JR NZ,NEXT_L

32

242

 

 

RET

201

 

 

Как она работает:

В пару регистров HL загружается адрес последнего байта дисплейного файла, а D регистр устанавливается в 0. В аккумулятор загружается число строк на экране. В B регистр загружается значение на 1 меньшее, чем число символов в строке, он используется, как счетчик.

HL уменьшается, указывая на следующий байт, и его значение загружается в E регистр. HL затем увеличивается, и в ячейку с адресом HL загружается значение E регистра. HL уменьшается, указывая на следующий байт, и счетчик (B регистр) уменьшается. Если он не равен 0, подпрограмма возвращается к NEXT_B.

Если регистр B равен 0, это означает, что HL указывает на крайний левый байт строки. Затем по адресу в регистровой паре HL помещается 0, и HL уменьшается, указывая на следующую строку. Счетчик строк (аккумулятор) уменьшается и, если он не равен 0, происходит переход к NEXT_L.

Программа возвращается в BASIC

5.7 Сдвиг вверх на один символ

Длина: 68 Количество переменных:0

Контрольная сумма: 6326 Назначение: программа сдвигает содержимое дисплейного файла вверх на восемь

пикселей.

Вызов подпрограммы:

RANDOMIZE USR адрес

Контроль ошибок: Нет Комментарий: нет

Листинг машинных кодов

МЕТКА

АССЕМБЛЕР

ЧИСЛА ДЛЯ ВВОДА

 

LD HL,16364

33

0

64

 

LD DE,16416

17

32

64

SAVE

PUSH HL

229

 

 

 

PUSH DE

213

 

 

 

LD C,23

14

23

 

NEXT_L

LD B,32

6

32

 

COPY_B

LD A,(DE)

26

 

 

 

LD (HL),A

119

 

 

 

LD A,C

121

 

 

 

AND 7

230

7

 

 

CP 1

254

1

 

 

JR NZ,NEXT_B

32

2

 

 

SUB A

151

 

 

 

LD (DE),A

18

 

 

NEXT_B

INC HL

35

 

 

 

INC DE

19

 

 

 

DJNZ COPY_B

16

241

 

 

DEC C

13

 

 

 

JR Z,REST

40

19

 

 

LD A,C

121

 

 

 

AND 7

230

7

 

 

CP 0

254

0

 

 

JR Z,N_BLOCK

40

22

 

 

CP 7

254

7

 

 

JR NZ,NEXT_L

32

225

 

 

PUSH DE

213

 

 

 

LD DE,1792

17

0

7

 

ADD HL,DE

25

 

 

 

POP DE

209

 

 

 

JR NEXT_L

24

217

 

REST

POP DE

209

 

 

 

POP HL

225

 

 

 

INC D

20

 

 

 

INC H

36

 

 

 

LD A,H

124

 

 

 

CP 72

254

72

 

 

JR NZ,SAVE

32

204

 

 

RET

201

 

 

N BLOCK

PUSH HL

229

 

 

 

LD HL,1792

33

0

7

 

ADD HL,DE

25

 

 

 

EX DE,HL

235

 

 

 

POP HL

225

 

 

 

JR NEXT_L

24

198

 

Как она работает:

Впару регистров HL загружается адрес начала дисплейного файла, а в DE загружается адрес байта через восемь линий вниз. HL и DE сохраняются в стеке, в C регистр загружается число на 1 меньшее, чем число строк на экране. В B регистр загружается количество байтов на одной линии дисплея он используется, как счетчик.

Ваккумулятор загружается байт, адресованный DE, и это значение загружается в ячейку по адресу HL. В аккумулятор загружается содержимое C регистра и, если оно равно

1, 9 или 17, то в ячейку по адресу DE помещается 0. HL и DE увеличиваются, указывая на следующий байт, счетчик в B регистре уменьшается и, если он не равен 0, происходит переход к 'COPY_B'.

Счетчик строк в регистре C затем уменьшается. Если он равен 0, происходит переход к 'RESTORE'. Если C содержит 8 или 16, то происходит переход к 'N_BLOCK'. Если C не содержит 7 или 15, подпрограмма переходит к 'NEXT_L'. Затем 1792 прибавляется к HL теперь HL указывает на следующий блок экрана. Подпрограмма переходит к 'NEXT_L'.

В процедуре 'REST' DE и HL берутся из стека и 256 прибавляется к каждому из них. Т.о., DE и HL указывают на строку, позиция которой ниже, чем та, что была в предыдущем цикле. Если HL содержит значение 18432, подпрограмма возвращается в BASIC, иначе происходит переход к процедуре 'SAVE'. В процедуре 'N_BLOCK' 1792 прибавляется к DE таким образом DE указывает на следующий блок экрана. Подпрограмма затем возвращается к 'NEXT_L'.

По окончании работы происходит возврат в БЕЙСИК.

Продолжение следует

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]