Назад к GBC
20.01.2017 в 11:08 (3372 Просмотров)
[IMG]https://upload.wikimedia.org/wikipedia/commons/thumb/f/f9/Game-Boy-Color-Purple.jpg/220px-Game-Boy-Color-Purple.jpg[/IMG]
Разбирая материалы на жестком диске наткнулся на заброшенный проект - демо, которое я писал для Chaos Constructions 2014.
Одна из частей представляла собой DYCP и сам эффект выглядел достаточно убого, риснул скролл исправить
Скачать можно [URL="http://g0blinish.ucoz.ru/gbc/piggy.zip"]здесь[/URL], запустите эмулятор bgb и сбросьте на окно файл piggy.gb. С исходниками можно ознакомиться просмотрев piggy.asm.
Файл сборки - assemble.bat, ассемблер приложен.
Для ознакомления с архитектурой gbc предлагаю ознакомиться с моей [URL="http://g0blinish.ucoz.ru/gbc/GameBoyColor.chm"]компиляцией материалаGameBoyColor.chm[/URL] или прочитать [URL="http://g0blinish.ucoz.ru/Articles/gbc.zip"]статью[/URL] для журнала Downgrade.
Еще один образец - [URL="http://g0blinish.ucoz.ru/gbc/plasma.zip"]плазма[/URL].
Коротко о реализации DYCP:
Для скролла используются спрайты, существуют некоторые трудности формирования спрайтов:
- известный SpriteBug : при использовании INC HL/DE/BC область памяти для спрайтов портится.
- при прямой записи данных в область спрайтов необходимо опрашивать статус порта, поэтому я реализовал формирование данных в памяти и переброску с помощью DMA
Согласно спецификациям делается это так:
[CODE]
ld a,$C1;DMA coy $C100 to OAM
ld [$FF46], a
ld a,$28 ; wait until DMA completes (160 microseconds)
wlp
dec a
jr nz,wlp
[/CODE]
Спрайты задаются следующими данными:
;form sprites at $FE00, $FF80-fariables
Y координата
X координата
номер тайла
флаг:%00001000(Byte3)
;Byte3 - Attributes/Flags:
; Bit7 OBJ-to-BG Priority (0=OBJ Above BG, 1=OBJ Behind BG color 1-3)
; (Used for both BG and Window. BG color 0 is always behind OBJ)
; Bit6 Y flip (0=Normal, 1=Vertically mirrored)
; Bit5 X flip (0=Normal, 1=Horizontally mirrored)
; Bit4 Palette number **Non CGB Mode Only** (0=OBP0, 1=OBP1) =0
; Bit3 Tile VRAM-Bank **CGB Mode Only** (0=Bank 0, 1=Bank 1)
; Bit2-0 Palette number **CGB Mode Only** (OBP0-7)
Да пребудет с Вами олдскул!





