aoc_omni/gb/lib/macros.inc

180 lines
2.4 KiB
PHP
Raw Normal View History

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: