2024-12-29 08:29:02 -05:00
|
|
|
INCLUDE "lib/hardware.inc"
|
|
|
|
INCLUDE "lib/macros.inc"
|
|
|
|
|
|
|
|
SECTION "VBlank Interrupt", ROM0[$40]
|
|
|
|
jp VBlankHandler
|
|
|
|
|
|
|
|
SECTION "Header", ROM0[$100]
|
|
|
|
jp EntryPoint
|
|
|
|
ds $150 - @, 0 ; Make room for the header
|
|
|
|
|
|
|
|
SECTION "Init", ROM0[$150]
|
|
|
|
EntryPoint:
|
|
|
|
StartInit
|
|
|
|
|
|
|
|
ClearScreen
|
|
|
|
ClearOAM
|
|
|
|
LoadTiles
|
|
|
|
|
2024-12-29 12:51:16 -05:00
|
|
|
MemClear current_frame, 1
|
|
|
|
MemClear current_floor, 2
|
|
|
|
MemClear done_flag, 1
|
|
|
|
|
|
|
|
;; Initialize input_index
|
|
|
|
ld bc, input
|
|
|
|
ld a, b
|
|
|
|
ld [input_index], a
|
|
|
|
ld a, c
|
|
|
|
ld [input_index + 1], a
|
2024-12-29 08:29:02 -05:00
|
|
|
|
|
|
|
FinishInit
|
|
|
|
ei
|
2024-12-29 12:51:16 -05:00
|
|
|
|
|
|
|
CheckInput:
|
|
|
|
ld a, [input_index]
|
|
|
|
ld h, a
|
|
|
|
ld a, [input_index + 1]
|
|
|
|
ld l, a
|
|
|
|
ld a, [hl]
|
|
|
|
|
|
|
|
cp a, "("
|
|
|
|
jr z, GoingUp
|
|
|
|
jr GoingDown
|
|
|
|
GoingUp:
|
|
|
|
call IncrementCurrentFloor
|
|
|
|
jr GoingNowhere
|
|
|
|
GoingDown:
|
|
|
|
call DecrementCurrentFloor
|
|
|
|
GoingNowhere:
|
|
|
|
|
|
|
|
IncrementWord input_index
|
|
|
|
|
|
|
|
ld de, input_end
|
|
|
|
ld a, [input_index]
|
|
|
|
sub a, d
|
|
|
|
jr nz, CheckInput
|
|
|
|
|
|
|
|
ld a, [input_index + 1]
|
|
|
|
sub a, e
|
|
|
|
jr nz, CheckInput
|
|
|
|
|
|
|
|
ld a, 1
|
|
|
|
ld [done_flag], a
|
|
|
|
|
|
|
|
Done:
|
|
|
|
|
2024-12-29 08:29:02 -05:00
|
|
|
halt
|
|
|
|
nop
|
|
|
|
jr Done
|
|
|
|
|
2024-12-29 12:51:16 -05:00
|
|
|
IncrementCurrentFloor:
|
|
|
|
ld hl, current_floor
|
|
|
|
ld a, [hli]
|
|
|
|
ld b, a
|
|
|
|
ld a, [hli]
|
|
|
|
ld c, a
|
|
|
|
|
|
|
|
inc bc
|
|
|
|
|
|
|
|
ld hl, current_floor
|
|
|
|
ld a, b
|
|
|
|
ld [hli], a
|
|
|
|
ld a, c
|
|
|
|
ld [hli], a
|
|
|
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
DecrementCurrentFloor:
|
|
|
|
ld hl, current_floor
|
|
|
|
ld a, [hli]
|
|
|
|
ld b, a
|
|
|
|
ld a, [hli]
|
|
|
|
ld c, a
|
|
|
|
|
|
|
|
dec bc
|
|
|
|
|
|
|
|
ld hl, current_floor
|
|
|
|
ld a, b
|
|
|
|
ld [hli], a
|
|
|
|
ld a, c
|
|
|
|
ld [hli], a
|
|
|
|
|
|
|
|
ret
|
|
|
|
ret
|
|
|
|
|
2024-12-29 08:29:02 -05:00
|
|
|
VBlankHandler:
|
2024-12-29 12:51:16 -05:00
|
|
|
push AF
|
|
|
|
push BC
|
|
|
|
push DE
|
|
|
|
push HL
|
|
|
|
|
|
|
|
IncrementFrameCount
|
|
|
|
PrintByteHex current_frame, 0, 0
|
|
|
|
PrintByte current_frame, 0, 1
|
|
|
|
PrintByteHex current_floor, 0, 2
|
|
|
|
PrintByteHex current_floor + 1, 2, 2
|
|
|
|
ld a, [done_flag]
|
|
|
|
cp a, 1
|
|
|
|
jr z, NotDone
|
|
|
|
PrintString done_string, 3, 3
|
|
|
|
|
|
|
|
NotDone:
|
|
|
|
pop HL
|
|
|
|
pop DE
|
|
|
|
pop BC
|
|
|
|
pop AF
|
2024-12-29 08:29:02 -05:00
|
|
|
reti
|
|
|
|
|
|
|
|
SECTION "High RAM", HRAM
|
|
|
|
current_floor: DS 2
|
2024-12-29 12:51:16 -05:00
|
|
|
done_flag: DS 1
|
2024-12-29 08:29:02 -05:00
|
|
|
|
|
|
|
SECTION "Input", ROM0
|
|
|
|
input:
|
|
|
|
INCBIN "../data/2015/1/input.txt"
|
|
|
|
input_end:
|
|
|
|
|
2024-12-29 12:51:16 -05:00
|
|
|
done_string:
|
|
|
|
db "Done", 0
|
|
|
|
done_string_end:
|
2024-12-29 08:29:02 -05:00
|
|
|
|
|
|
|
INCLUDE "lib/tiles.asm"
|