109 lines
1.6 KiB
PHP
109 lines
1.6 KiB
PHP
MACRO MemCopy
|
|
ld hl, \1
|
|
ld de, \2
|
|
ld bc, \2_end - \2
|
|
.loop\@
|
|
ld a, [de]
|
|
ld [hli], a
|
|
inc de
|
|
dec bc
|
|
ld a, b
|
|
or a, c
|
|
jp nz, .loop\@
|
|
ENDM
|
|
|
|
MACRO LoadTiles
|
|
MemCopy _VRAM9000, tiles
|
|
ENDM
|
|
|
|
MACRO MemClear
|
|
ld hl, \1
|
|
ld bc, \2
|
|
.loop\@
|
|
xor a
|
|
ldi [hl], a
|
|
dec bc
|
|
ld a, b
|
|
or a, c
|
|
jp nz, .loop\@
|
|
ENDM
|
|
|
|
MACRO ClearOAM
|
|
MemClear _OAMRAM, $A0
|
|
ENDM
|
|
|
|
MACRO ClearScreen
|
|
MemClear _SCRN0, _SCRN1 - _SCRN0
|
|
MemClear _SCRN1, _SCRN1 - _SCRN0
|
|
ENDM
|
|
|
|
MACRO PrintString
|
|
MemCopy (_SCRN0 + (\2 << 5) + \3), \1
|
|
ENDM
|
|
|
|
MACRO PrintByte
|
|
ld hl, \1
|
|
ld a, [hl]
|
|
and a, $F0
|
|
swap a
|
|
add a, "0"
|
|
cp a, ":"
|
|
jr c, .high_carry\@
|
|
add a, "A" - "0" - 10
|
|
.high_carry\@
|
|
ld b, a
|
|
|
|
ld a, [hl]
|
|
and a, $0F
|
|
add a, "0"
|
|
cp a, ":"
|
|
jr c, .low_carry\@
|
|
add a, "A" - "0" - 10
|
|
.low_carry\@
|
|
ld c, a
|
|
ld hl, print_byte_string
|
|
ld a, b
|
|
ldi [hl], a
|
|
ld a, c
|
|
ld [hl], a
|
|
|
|
PrintString print_byte_string, 0, 0
|
|
ENDM
|
|
|
|
MACRO StartInit
|
|
; Shut down audio circuitry
|
|
ld a, 0
|
|
ldh [rNR52], a
|
|
|
|
; Do not turn the LCD off outside of VBlank
|
|
WaitVBlank:
|
|
ldh a, [rLY]
|
|
cp 144
|
|
jp c, WaitVBlank
|
|
|
|
; Turn the LCD off
|
|
ld a, 0
|
|
ldh [rLCDC], a
|
|
|
|
;; Window setup
|
|
ld a, 30
|
|
ldh [rWX], a
|
|
ld a, 115
|
|
|
|
ldh [rWY], a
|
|
ENDM
|
|
|
|
MACRO FinishInit
|
|
; Enable the interrupt handler
|
|
ld a, $0F
|
|
ldh [rIE], a
|
|
|
|
; During the first (blank) frame, initialize display registers
|
|
ld a, %11100100
|
|
ldh [rBGP], a
|
|
|
|
; Turn the LCD on
|
|
ld a, LCDCF_ON | LCDCF_BGON | LCDCF_WINON | LCDCF_WIN9C00 | LCDCF_OBJON | LCDCF_OBJ8 | LCDCF_BG8800
|
|
|
|
ldh [rLCDC], a
|
|
ENDM |