2024-12-29 08:29:02 -05:00
|
|
|
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
|
2024-12-29 12:51:16 -05:00
|
|
|
MemCopy (_SCRN0 + (\3 << 5) + \2), \1
|
2024-12-29 08:29:02 -05:00
|
|
|
ENDM
|
|
|
|
|
2024-12-29 12:51:16 -05:00
|
|
|
MACRO PrintByteHex
|
2024-12-29 08:29:02 -05:00
|
|
|
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
|
2024-12-29 12:51:16 -05:00
|
|
|
ld hl, print_byte_hex_string
|
2024-12-29 08:29:02 -05:00
|
|
|
ld a, b
|
|
|
|
ldi [hl], a
|
|
|
|
ld a, c
|
|
|
|
ld [hl], a
|
|
|
|
|
2024-12-29 12:51:16 -05:00
|
|
|
PrintString print_byte_hex_string, \2, \3
|
|
|
|
ENDM
|
|
|
|
|
|
|
|
MACRO PrintByte
|
|
|
|
ld hl, \1
|
|
|
|
xor a
|
|
|
|
ld b, a
|
|
|
|
ld c, a
|
|
|
|
ld a, [hl]
|
|
|
|
.hundreds\@
|
|
|
|
cp a, 100
|
|
|
|
jr c, .hundreds_done\@
|
|
|
|
sub a, 100
|
|
|
|
inc b
|
|
|
|
jr .hundreds\@
|
|
|
|
.hundreds_done\@
|
|
|
|
|
|
|
|
.tens\@
|
|
|
|
cp a, 10
|
|
|
|
jr c, .tens_done\@
|
|
|
|
sub a, 10
|
|
|
|
inc c
|
|
|
|
jr .tens\@
|
|
|
|
.tens_done\@
|
|
|
|
|
|
|
|
ld d, a
|
|
|
|
|
|
|
|
ld hl, print_byte_string
|
|
|
|
ld a, b
|
|
|
|
add a, "0"
|
|
|
|
ldi [hl], a
|
|
|
|
ld a, c
|
|
|
|
add a, "0"
|
|
|
|
ldi [hl], a
|
|
|
|
ld a, d
|
|
|
|
add a, "0"
|
|
|
|
ldi [hl], a
|
|
|
|
|
|
|
|
PrintString print_byte_string, \2, \3
|
2024-12-29 08:29:02 -05:00
|
|
|
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
|
2024-12-29 12:51:16 -05:00
|
|
|
ENDM
|
|
|
|
|
|
|
|
MACRO IncrementFrameCount
|
|
|
|
ld a, [current_frame]
|
|
|
|
inc a
|
|
|
|
ld [current_frame], a
|
|
|
|
ENDM
|
|
|
|
|
|
|
|
MACRO IncrementWord
|
|
|
|
ld a, [\1]
|
|
|
|
ld b, a
|
|
|
|
ld a, [\1 + 1]
|
|
|
|
ld c, a
|
|
|
|
inc bc
|
|
|
|
ld a, b
|
|
|
|
ld [\1], a
|
|
|
|
ld a, c
|
|
|
|
ld [\1 + 1], a
|
|
|
|
ENDM
|
|
|
|
|
|
|
|
SECTION "Macro HRAM", HRAM
|
|
|
|
current_frame: DS 2
|
|
|
|
current_frame_end:
|
|
|
|
|
|
|
|
input_index: DS 2
|
|
|
|
|
|
|
|
print_byte_hex_string:
|
|
|
|
print_byte_string:
|
|
|
|
DS 2
|
|
|
|
print_byte_hex_string_end:
|
|
|
|
DS 1
|
|
|
|
print_byte_string_end:
|
|
|
|
|