Как написать игру для ZX Spectrum на ассемблере



         

Дуги


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

Как пример, приведем программку, соответствующую строке Бейсика

PLOT 100,80: DRAW 30,50,3

Для занесения чисел в стек калькулятора можно, конечно, воспользоваться уже известной подпрограммой 11563, но в данном случае нам не требуются числа, превышающие байтную величину (255), поэтому программа получится короче, если в стеке калькулятора размещать значения из аккумулятора, применив процедуру ПЗУ 11560, исходным данным для которой и является содержимое регистра A. Порядок действий будет совершенно таким же, как и при использовании подпрограммы 11563. Например, для занесения в стек калькулятора числа 123 можно написать такую последовательность инструкций:

LD A,123 CALL 11560

Зная это, можно написать такой фрагмент на ассемблере, соответствующий приведенной выше строке Бейсика:

ORG 60000 ENT $ LD BC,#5064 ;C = 100 (#64), B = 80 (#50) CALL 8933 ;PLOT 100,80 LD A,30 ;заносим в стек калькулятора CALL 11560 ; первый параметр LD A,50 ;второй параметр CALL 11560 LD A,3 ;третий параметр CALL 11560 CALL 9108 ;DRAW 30,50,3 LD HL,10072 ;восстанавливаем значение пары HL' EXX ; для нормального выхода в Бейсик RET




Содержание  Назад  Вперед