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 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 FinishInit ei 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: halt nop jr Done 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 VBlankHandler: 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 reti SECTION "High RAM", HRAM current_floor: DS 2 done_flag: DS 1 SECTION "Input", ROM0 input: INCBIN "../data/2015/1/input.txt" input_end: done_string: db "Done", 0 done_string_end: INCLUDE "lib/tiles.asm"