Программирование в машинных кодах и на языке ассемблера 1993 г.

Разбор программ в машинных кодах - управление программой от Кемпстон-джойстика.


4.3. Управление программой от Кемпстон-джойстика.

В части 1 мы уже писали о протоколе обмена Кемпстон-джойстика. Он опрашивается по внешнему порту 31 (1F) командой IN 31. Принимаемый байт анализируется так:

Бит 0 - движение вправо Бит 3 - движение вверх

Бит 1 - движение влево Бит 4 - "огонь"

Бит 2 - движение вниз Биты 5... 7 не используются

В качестве примера рассмотрим программу, которая будет рисовать на экране синие квадраты на белом поле, если кнопка не нажата. При нажатии этой кнопки производится выход из программы. Начальная позиция печати - AT (11,15) - в центре экрана.

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

Адрес

Метка

Маш.код

Мнемоника

Комментарий

659O

3EO2

LD

A, 02

6592

CDO116

CALL

1601

Открываем канал для печати на экране

6595

0618

LD

B, 18

6597

CD4 4 OE

CALL

0E44

Очистка экрана

65 9A

3E0F

LD

A, 0F

65 9C

322B66

LD

(XPOS)

,A

Установка начальной колонки печати (15) в переменной XPOS, размещенной по адресу 662B

659F

3E0B

LD

A, 0B

65A1

322C66

LD

(YPOS)

,A

Установка начальной строки печати в YPOS

65A4

CD1266

CALL

PRINT

Вызов процедуры печати символа

65A7

REP

DB1F

IN

A, (1F)

Прием байта от джойстика.

Адрес Метка Маш.код 65A9 E61 F

65AB 2 8 FA

65AD

DEFF

65AF HERE 0 0

65B0 06FF

65B2 PAUSE 10 FE

65B4 0D

65B5 2 0F8

65B7 CB67

65B9 C0

65BA CB47

65BC 2 0 0C

65DE CB4F

65С0 2 01A

65C2 CB57

65C4 2028

65С6 CB5F

65C8 2036

65CA RIGHT 3A2B66

FE1F

CAA7 65

322B66

CD12 66

3C

65CD 65CE

65D0

65D3

65D6

Мнемоника

AND 1F

JR Z,REP

LD C, FF

NOP

LD B,FF

DJNZ PAUSE

DEC C

JR NZ,HERE

BIT 4,A

RET NZ

BIT 0,A

JR NZ,RIGHT

BIT 1,A

JR NZ,LEFT

BIT 2,A

JR NZ,DOWN

BIT 3,A

JR NZ,UP

LD A,(XPOS)

INC A

CP 1F

JP Z,REP

LD (XPOS),A

CALL PRINT

Выделение 5 младших битов Возврат, если джойстик не был тронут

Установка параметров замедляющего цикла 1

Установка параметра замедляющего цикла 2 Второй замедляющий цикл

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

Если да, то возврат на опрос джойстика

Если нет, то запомнить новый столбец И вызвать подпрограмму печати

Адрес

Метка

Маш.код

Мнемоника

Комментарий

65D9

C3A7 65

JP

REP

Возврат на новый опрос джойстика

65DC

LEFT

3A2 B66

LD

A,(XPOS)

Ввод текущего столбца печати

65DF

3D

DEC

A

Уменьшить номер столбца на

65E0

FE0 0

CP

00

Проверка на достижение левого края

65E2

CAA7 65

JP

Z, REP

Если да, то возврат на опрос джойстика

65E5

322B66

LD

(XPOS),A

Если нет, запомнить новый столбец

65E8

CD12 66

CALL

PRINT

Вызов подпрограммы печати

65ED

C3A7 65

JP

REP

Возврат на опрос джойстика

65EE

DOWN

3A2C6 6

LD

A, (YPOS)

В акк-р идет последняя строка печати

65F1

3C

INC

A

и увеличивается на 1

65F2

FE16

CP

16

Проверка на нижний край

65F4

CAA7 65

JP

Z, REP

Если да, то возврат на опрос джойстика

65F7

322C66

LD

(YPOS),A

Если нет, то запомнить новую строку и вызвать

65 FA

CD12 66

CALL

PRINT

подпрограмму печати

65FD

C3A7 65

JP

REP

Возврат на новый опрос джойстика

6600

UP

3A2C66

LD

A, (YPOS)

Ввод текущей строки печати

6603

3D

DEC

A

Уменьшить номер строки на

6604

FE0 0

CP

00

Проверка на достижение верхнего края

6606

CAA7 65

JP

Z, REP

Если да, то возврат на опрос джойстика

6609

322С66

LD

(YPOS),A

Если нет, запомнить новую строку

660С CD1266

660F C3A765

6612 PRINT 06FF

6614 WAIT 10 FE

CALL PRINT

JP REP

LD B,FF

DJNZ WAIT

Вызов подпрограммы печати Возврат на опрос джойстика Установка параметра замедляющего цикла 3 Третий замедляющий цикл




СОДЕРЖАНИЕ:


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

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

6616

3E16

LD

A, 16

6618

D7

RST

10

6619

3A2C6 6

LD

A, (YPOS

661C

D7

RST

10

661D

3A2B6 6

LD

A, (XPOS

6620

D7

RST

10

6621

3E10

LD

A, 10

6623

D7

RST

10

6624

3E01

LD

A, 01

6626

D7

RST

10

6627

3E8F

LD

6629

D7

RST

10

662A

C9

RET

662B

XPOS

00

DEFB

00

6 62C

YPOS

00

DEFB

00





Похожие статьи:

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