Ассемблерное кодирование / Использование спрайтов




Вы можете скачать "3 в 1 SPRITE EDITOR". Настоящий крутой пакет редактора, в котором вы можете создавать свои собственные разноцветные спрайты или шрифты. Чтобы запустить редактор 3 в 1, введите SYS 50000 после его загрузки.

Ok, давайте теперь поместим спрайт на экран и заставим его двигаться. Вот примерно то, что нам нужно сделать: -

  • Clear Screen
  • Set up Sprite pointer
  • Set up Sprite Colours & Mode
  • Set up X & Y position of Sprite
  • Move it Down
  • Move it Up


Итак, давайте напишем код :-

10 LDA #147

20 JSR $FFD2

30 LDA #00

40 STA 53280

50 STA 53281

60 LDA #255

70 STA 53269

80 STA 53276

90 LDA #02

100 STA 53285

110 LDA #03

120 STA 53286

130 LDX #00

140 COLOUR LDA #04

150 STA 53287,X

160 INX

170 CPX #08

180 BNE COLOUR

190 LDX #64

200 STX 2040

210 INX

220 STX 2041

230 INX

240 STX 2042

250 INX

260 STX 2043

270 INX

280 STX 2044

290 INX

300 STX 2045

310 INX

320 STX 2046

330 INX

340 STX 2047

350 LDY # 70

360 STY 53249

370 STY 53251

380 STY 53253

390 STY 53255

400 STY 53257

410 STY 53259

420 STY 53261

430 STY 53263

440 LDX #30

450 STX 53248

460 LDX #60

470 STX 53250

480 LDX #90

490 STX 53252

500 LDX #120

510 STX 53254

520 LDX #150

530 STX 53256

540 LDX #180

550 STX 52358

560 LDX #210

570 STX 53260

580 LDX #240

590 STX 53262

610 DOWN LDX #100

620 LOOP1 LDY #100

630 LOOP DEY

640 BNE LOOP

650 DEX

660 BNE LOOP1

670 INC 53249

680 INC 53251

690 INC 53253

700 INC 53255

710 INC 53257

720 INC 53259

730 INC 53261

740 INC 53263

750 LDA 53249

760 CMP #200

770 BNE DOWN

780 UP LDX #100

790 LOOP3 LDY #100

800 LOOP2 DEY

810 BNE LOOP2

820 DEX

830 BNE LOOP3

840 DEC 53249

850 DEC 53251

860 DEC 53253

870 DEC 53255

880 DEC 53257

890 DEC 53259

900 DEC 53261

910 DEC 53263

920 LDA 53249

930 CMP #70

940 BNE UP

950 JMP DOWN

Итак, как это работает ?
10 и 20 очищает экран

30,40,50 придают рамке и фону черный цвет

60,70,80 включает все 8 спрайтов и включает многоцветные спрайты

90, 100 устанавливает многоцветный регистр спрайта от 0 до КРАСНОГО
110 120 устанавливает многоцветный регистр спрайта от 1 до ГОЛУБОЙ
130–180 устанавливает для каждого спрайта ПУРПУРНЫЙ цвет с помощью цикла сравнения и разветвления.
190 - 340 устанавливает указатель данных каждого спрайта. Спрайты здесь будут в банке 0, а значение 64 дает им место в памяти 1000 шестнадцатеричных или 4096 десятичных знаков. Здесь вы должны загрузить данные спрайта. Конечно, вы бы изменили цвета выше, чтобы они соответствовали вашим спрайтам. Формула для расчета того, где находятся ваши данные спрайта, показана здесь:-
LOCATION = (BANK * 16384) + (SPRITE POINTER VALUE * 64)
Итак, для нашего случая имеем :-
LOCATION = ( 0 * 16384) + (64 * 64)
Следовательно
LOCATION = 4096 Decimal (1000 Hex)
Таким образом, первый спрайт использует 64 в качестве своего значения, а следующий 65 и т. д., пока все спрайты не будут иметь местоположение указателя данных.
350 - 430 Устанавливает позицию Y на экране для каждого спрайта на 70.
440 - 590 Устанавливают позицию X на экране для каждого спрайта, начиная с 30 для спрайта 0 и заканчивая 240 для спрайта 7.
600 (К сожалению, я ошибся и пропустил эту строку, неважно).
610 - 770 Эти строки кода перемещают спрайты вниз по экрану. Код использует цикл временной задержки для замедления процесса, пример этого цикла показан ниже :-
LDX #100

LOOP1 LDY #100

LOOP DEY

BNE LOOP

DEX

BNE LOOP1

За этим очень просто следить. Во-первых, устанавливаются регистры X и Y в 100, затем -1 из Y до Y = 0, затем -1 из регистра X, если X = 0, если нет, то переходите обратно к строке LDY #100 и начанаете заново. Эффект - задержка. Без этой задержки движение спрайта было бы слишком быстрым, чтобы его можно было увидеть. Вы можете изменить эти значения по своему усмотрению. Конечно, максимальное значение, которое вы можете иметь в каждом цикле, равно 255.

Способ перемещения спрайта заключается в простом увеличении позиции Y для каждого спрайта на +1. (Вы увеличиваете, чтобы двигаться вниз, так как это способ настройки экрана, т.е. верхний левый угол - это позиция (0,0).

Затем код проверяет позицию спрайта 0, если эта позиция равна 200, то программа проходит через ветку, чтобы переместить спрайт вверх по экрану. Если позиция равна 200, то программа переходит назад, чтобы продолжить перемещение спрайта вниз по экрану.

780 - 950 Точно так же, как движение вниз, за исключением того, что мы перемещаем спрайты вверх, увеличивая каждую позицию Y спрайта, и мы тестируем позицию на 70. Если не 70, перемещаем спрайт еще немного вверх, если position = 70, то на этот раз программа возвращается назад в строку с надписью DOWN, чтобы снова переместить спрайт вниз.

Процесс будет продолжаться и перемещать спрайт вверх и вниз по экрану.

 
 

Ну, я надеюсь, у вас всё получилось. Это очень легко, честно. Код выглядит длинным, но большая его часть предназначена для фактической настройки цветов спрайтов, указателей и начальных положений экрана.
В этом примере спрайты не перемещаются в направлении X, но вы делаете то же самое. Самое сложное в этом — вводить и выводить спрайты из MSB, т. е. за пределы 255 в направлении X. Да, вы не ослышались, экран в направлении X разделен на две видимые части. От 24 до 255, а затем в следующем разделе от 0 до 91.