; From https://gbdev.io/gb-asm-tutorial/part1/hello_world.html ; FF80 CALL ; FF81 LOW ; FF82 HIGH ; FF83 RET ; pattern repeats for the first 16 bytes so we can have some call vectors for the scene system DEF SCENE_SETUP EQU $FF81 DEF SCENE_UPDATE EQU SCENE_SETUP + 4 ; call then ret is 3+1 bytes DEF SCENE_DRAW EQU SCENE_UPDATE + 4 DEF SCENE_TEARDOWN EQU SCENE_DRAW + 4 DEF rMYBTN EQU $FFA0 DEF rMYBTNP EQU rMYBTN + 1 DEF INTERRUPT_LCD EQU $FF91 ; tile index variables DEF vSelectedTileIndex EQU $FFA0+2 DEF vPreviousCardIndex EQU $FFA0+3 ; variables for safe transfer async function DEF vSafeCopySource EQU $FFA0+4 DEF vSafeCopyDest EQU vSafeCopySource + 2 DEF vSafeCopyCount EQU vSafeCopyDest + 2 ; check this for safe transfer being complete ; stash previous interrupt state before using the interrupts DEF vSafeCopyLYC EQU vSafeCopyCount + 2 ; stashes $FF45, the LYC register DEF vSafeCopySTAT EQU vSafeCopyLYC + 1 ; stashes $FF41, the STAT register DEF vSafeCopyInterruptFirst EQU vSafeCopySTAT + 1 ; stashes $0048 the STAT interrupt DEF vSafeCopyInterruptSecond EQU vSafeCopyInterruptFirst + 1 DEF vSafeCopyInterruptEnable EQU vSafeCopyInterruptSecond + 1 ; stashes $FFFF, which interrupts are enabled INCLUDE "hardware.inc" SECTION "Interrupts", ROM0[$0] ds $48 - @, 0 call INTERRUPT_LCD - 1 ret SECTION "Header", ROM0[$100] jp EntryPoint ds $150 - @, 0 ; Make room for the header EntryPoint: ; Shut down audio circuitry ld a, 0 ld [rNR52], a ld a, [Instructions] ; get the value of a call instruction so we can shove it into our handles ld hl, SCENE_SETUP - 1 ld [hl], a ld hl, SCENE_UPDATE - 1 ld [hl], a ld hl, SCENE_DRAW - 1 ld [hl], a ld hl, SCENE_TEARDOWN - 1 ld [hl], a ld hl, INTERRUPT_LCD - 1 ld [hl], a ld a, [Instructions + 3] ; get the value of a ret instruction ld hl, SCENE_SETUP + 2 ld [hl], a ld hl, SCENE_UPDATE + 2 ld [hl], a ld hl, SCENE_DRAW + 2 ld [hl], a ld hl, SCENE_TEARDOWN + 2 ld [hl], a ld hl, INTERRUPT_LCD + 2 ld [hl], a ; set up our scene vectors ld hl, SCENE_SETUP ld de, CardReadSetup ld a, e ld [hl+], a ld a, d ld [hl+], a ld hl, SCENE_UPDATE ld de, CardReadUpdate ld a, e ld [hl+], a ld a, d ld [hl+], a ld hl, SCENE_DRAW ld de, CardReadDraw ld a, e ld [hl+], a ld a, d ld [hl+], a ld hl, SCENE_TEARDOWN ld de, CardReadTeardown ld a, e ld [hl+], a ld a, d ld [hl+], a ; set up the interrupt vector to just be ret. ld hl, INTERRUPT_LCD ld de, INTERRUPT_LCD + 2 ld a, e ld [hl+], a ld a, d ld [hl+], a ; Do not turn the LCD off outside of VBlank WaitVBlank: ld a, [rLY] cp 144 jp c, WaitVBlank call SCENE_SETUP - 1 Loop: di ld hl, rP1 ld [hl], P1F_GET_DPAD ld a, [hl] ld a, [hl] ld a, [hl] ld a, [hl] cpl and a, %00001111 ld b, a ld [hl], P1F_GET_BTN ld a, [hl] ld a, [hl] ld a, [hl] ld a, [hl] cpl and a, %00001111 swap a or a, b ld b, a ld a, [rMYBTN] cpl and a, b ld [rMYBTNP], a ld a, b ld [rMYBTN], a di call SCENE_UPDATE - 1 ei ld b, 144 call AwaitLine di call SCENE_DRAW - 1 ei jp Loop ;; CARD READ PAGE STARTS HERE CardReadSetup: ; Turn the LCD off ld a, 0 ld [rLCDC], a ld hl, UITiles ; source ld de, $8800 ; destination of copy ld bc, UITilesEnd - UITiles ; length to copy call CopyRangeUnsafe ld hl, LetterTiles ; map the small font into vram at ascii locations ld de, $8000 + (127 + $21)*16 ld bc, LetterTilesEnd - LetterTiles call CopyRangeUnsafe ld hl, BigLetterTiles ld de, $8000 + (128 + 16 + 32)*16 ld bc, BigLetterTilesEnd - BigLetterTiles ; call CopyRangeUnsafe ld de, UITilemap ; origin ld hl, $9800 ; destination ld b, 18 ; height ld c, 20 ; width call CopyTilesToMap ld de, BigLetters ld hl, $9800 + 32*1 + 10 ld b, 2 ld c, 8 call CopyTilesToMap ; Turn the LCD on ld a, LCDCF_BLK01 | LCDCF_ON | LCDCF_BGON ld [rLCDC], a ; During the first (blank) frame, initialize display registers ld a, %11100100 ld [rBGP], a ld a, $FF ldh [vPreviousCardIndex], a ld a, 0 ldh [vSelectedTileIndex], a call LoadCardData ei ret ; return from cardreadsetup CardReadUpdate: ldh a, [rMYBTNP] and a, %0000_1000 ; select the down key jp z, CardReadUpdateDoneDown ldh a, [vSelectedTileIndex] inc a ; increment when they press down because the stack has card 0 at the top ldh [vSelectedTileIndex], a CardReadUpdateDoneDown: ldh a, [rMYBTNP] and a, %0000_0100 ; select the up key jp z, CardReadUpdateDoneUp ldh a, [vSelectedTileIndex] dec a ; decrement when they press up because the stack has card 0 at the top ldh [vSelectedTileIndex], a CardReadUpdateDoneUp: ldh a, [vSelectedTileIndex] cp a, 2 jp nz, CardReadUpdateDoneZero ld a, 0 ldh [vSelectedTileIndex], a CardReadUpdateDoneZero: cp a, $FF jp nz, CardReadUpdateReturn ld a, 1 ldh [vSelectedTileIndex], a CardReadUpdateReturn: ret CardReadDraw: ld b, 1 ; 11 rows, and we stop before drawing row zero ld hl, $9800+32*4+19 ; start point ld de, 32 ; stride CardReadDrawCopyTile: ld a, $81 ld [hl], a add hl, de dec b jp nz, CardReadDrawCopyTile ld a, $87 ld [hl], a ; draw the cap at the end CardReadDrawSelectedTile: ldh a, [vSelectedTileIndex] ld b, a srl b ld hl, $9800+32*4+19 ; start point ld de, 32 ; stride jp z, CardReadDrawDrawSelectedTile CardReadDrawCountDownTile: add hl, de dec b jp nz, CardReadDrawCountDownTile CardReadDrawDrawSelectedTile: ldh a, [vSelectedTileIndex] and a, 1 jp z, CardReadDraw_PickTileWithTop ld a, $90 ld [hl], a add hl, de ld a, $81 cp a, [hl] ld a, $91 ld [hl], a jp z, CardReadDrawReturn ld a, $92 ld [hl], a jp CardReadDrawReturn CardReadDraw_PickTileWithTop: ld a, $82 ld [hl], a CardReadDrawReturn: ldh a, [vSelectedTileIndex] ld hl, vPreviousCardIndex cp a, [hl] call nz, LoadCardData ; only load new card data if the selected card has changed ret CardReadTeardown: ret LoadCardData: ld a, [vSelectedTileIndex] ld [vPreviousCardIndex], a ld b, 144 call AwaitLine ; wait for vblank before starting to work LoadCardData_DoneTurningOff: ld a, [vSelectedTileIndex] ld b, 0 ld c, a ; load bc from a. coming into this we have the number of the card in the card array in a ld hl, Cards + 1 ; skip the length prefix add hl, bc add hl, bc ; add this twice to double the offset because it's two bytes per address ; follow the pointer we're looking at ld a, [hl+] ld c, a ld a, [hl+] ld b, a ld h, b ld l, c ; hl now contains the address of the card data. ; hl points to a card struct. ; card struct starts with a sequence of length-prefixed strings in memory ; so when we're done writing one, hl will be correctly placed to read the next ; length-prefixed print doesn't require passing a length ; so all we have to set is the destination for each ld de, $9800 + 32*4 + 10 call PrintString ld de, $9800 + 32*5 + 10 call PrintString ld de, $9800 + 32*6 + 10 call PrintString ld de, $9800 + 32*7 + 10 call PrintString ld de, $9800 + 32*8 + 10 call PrintString ; hl now contains the address after all the strings. ; [hl+] and [hl+] read the length first, into bc ld a, [hl+] ld c, a ld a, [hl+] ld b, a ; bc has length ld a, [hl+] ld e, a ld a, [hl+] ld d, a ; de has source of tile range copy push hl ; save the pointer to the next bit of card data (tile map) ld h, d ld l, e ; hl takes the source ld de, $8000 ; always load tile data into the same spot in vram call CopyRangeSafe pop hl ld a, [hl+] ld c, a ld a, [hl+] ld b, a ; bc has length ld a, [hl+] ld e, a ld a, [hl+] ld d, a ; de has source of tile range copy ld h, d ld l, e ; hl takes the source ; push hl ; we don't need to keep track of hl at this point and our stack is clean. ld hl, $9800 + 32 + 1 ; destination ld b, 16 ; height ld c, 8 ; width call CopyTilesToMap ret Instructions: call Instructions + 2 ret ; subroutines PrintString: ; write ascii string which has been prefixed by its length. ld b, [hl] inc hl PrintBChars: ;write ascii characters. will not respect newlines or anything like that ; hl should be the source of ascii text ; de should be the location in the tile map to start writing at ; b should be the length ld a, [hli] or a, %10000000 ld [de], a inc de dec b jp nz, PrintBChars ret AwaitLine: ; put the line you want to reach in b ld a, [rLY] cp b jp nz, AwaitLine ret CopyRangeUnsafe: ; hl is source ; de is destination ; bc is length to copy ld a, [hli] ld [de], a inc de dec bc ld a, b or a, c ; check if bc is zero jp nz, CopyRangeUnsafe ret CopyRangeSafe: ; hl is source ; de is destination ; bc is length to copy ; copy an array of bytes to a destination in memory. ; this is completely different from CopyRangeUnsafe. ; this initiates an asynchronous, interrupt-driven copy of BC bytes of memory ; from HL to DE. ; it may return a memory address to look at for progress of the transfer, ; or else it's just going to do it with a hard-coded address. ; check the transfer status address for zero; when it's zero, the transfer is done! ; this works by using the STAT interrupt in LYC mode to interrupt its own execution at ; two scanlines inside the vblank interval to know when to start and stop. ; stash arguments in memory di ld a, l ldh [vSafeCopySource], a ld a, h ldh [vSafeCopySource+1], a ld a, e ldh [vSafeCopyDest], a ld a, d ldh [vSafeCopyDest+1], a ld a, c ldh [vSafeCopyCount], a ld a, b ldh [vSafeCopyCount+1], a ; stash interrupt state in memory ldh a, [$ff41] ldh [vSafeCopySTAT], a ; stashes $FF41, the STAT register ldh a, [$ff45] ldh [vSafeCopyLYC], a ; stashes $FF45, the LYC register ld a, [INTERRUPT_LCD] ld [vSafeCopyInterruptFirst], a ld a, [INTERRUPT_LCD + 1] ld [vSafeCopyInterruptSecond], a ; stashes $0048 the STAT interrupt handler ld a, [$ffff] and a, %0000_0010 ld [vSafeCopyInterruptEnable], a ; stashes whether LCD interrupt are enabled ld a, 148 ; adjust this to change timing of copy ld [$ff45], a ld hl, CopyRangeSafe_EnterSafeMode ld a, l ld [INTERRUPT_LCD], a ld a, h ld [INTERRUPT_LCD + 1], a; set interrupt handler to "ENTER SAFE MODE" ld a, 148 ; CHANGE ME TO ADJUST SAFE TRANSFER TIMING ld [$ff45], a ld hl, $ffff set 1, [hl] ld a, %0100_0000 ld [$ff41], a ld hl, vSafeCopyCount ei ret ; return address of bytes remaining to copy CopyRangeSafe_EnterSafeMode: ld hl, CopyRangeSafe_ExitSafeMode ld a, l ld [INTERRUPT_LCD], a ld a, h ld [INTERRUPT_LCD+1], a ld a, 153 ; CHANGE ME TO ADJUST SAFE TRANSFER TIMING ld [$ff45], a ; set lcd interrupt handler to EXIT SAFE MODE on line 153 ldh a, [vSafeCopySource] ld l, a ldh a, [vSafeCopySource+1] ld h, a ; fetch the source ldh a, [vSafeCopyDest] ld e, a ldh a, [vSafeCopyDest+1] ld d, a ; fetch the dest ldh a, [vSafeCopyCount] ld c, a ldh a, [vSafeCopyCount+1] ld b, a ; fetch the count ; before starting transfer, make sure the zero flag is false. ld a, 1 cp a, 0 CopyRangeSafe_TransferLoop: ei nop ; ei only sets the flag one instruction later apparently. safety nop! nop di ; process interrupts jp z, CopyRangeSafe_CleanUp ; zero flag will only be set if the exitsafemode handler fired ld a, [hl+] ld [de], a ; inc de dec bc ld a, b or a, c jp nz, CopyRangeSafe_TransferLoop jp CopyRangeSafe_Done CopyRangeSafe_ExitSafeMode: ld a, 0 cp a, 0 ; set the zero flag, which we're using as a signal to stop transferring reti ; set a to zero and set the zero flag true. now the transfer loop will end CopyRangeSafe_CleanUp: ld a, l ldh [vSafeCopySource], a ld a, h ldh [vSafeCopySource+1], a ; store new source ld a, e ldh [vSafeCopyDest], a ld a, d ldh [vSafeCopyDest+1], a ; store new dest ld a, c ldh [vSafeCopyCount], a ld a, b ldh [vSafeCopyCount+1], a ; store new count ld hl, CopyRangeSafe_EnterSafeMode ld a, l ld [INTERRUPT_LCD], a ld a, h ld [INTERRUPT_LCD+1], a ld a, 148 ; CHANGE ME TO ADJUST SAFE TRANSFER TIMING ld [$ff45], a ; set lcd interrupt handler to ENTER SAFE MODE on line 148 reti ; we're done with this memcpy cycle so we return from interrupt. CopyRangeSafe_Done: ; called when the complete transfer is finished, ; this restores interrupts to how they were. ; stash interrupt state in memory ldh a, [vSafeCopySTAT] ldh [$ff41], a ldh a, [vSafeCopyLYC] ldh [$ff45], a ldh a, [vSafeCopyInterruptFirst] ld [INTERRUPT_LCD], a ldh a, [vSafeCopyInterruptSecond] ldh [INTERRUPT_LCD+1], a ld hl, $ffff ld a, [hl] cpl set 1, a cpl ; turn off the lcd interrupt enable ld [hl], a ld a, [vSafeCopyInterruptEnable] cp a, 0 ; if the stashed enable was 0 return. if the stashed enable was 1 then turn it on jp z, CopyRangeSafe_Return set 1, [hl] ; turn on the lcd interrupt CopyRangeSafe_Return: ret CopyTilesToMap: ; copy tiles from where they are linearly packed at an origin (de) ; to a rectangle in the tilemap in vram (hl) ; assuming it has height in b and width in c. push bc CopyTile: ld a, [de] ; load from the tile map into a ld [hl], a ; load from a into the destination inc hl ; this is slower than using hli but i'm trying to work with this here inc de dec c ; check if we've completed a line? ld a, 0 or a, c ; check if c is zero, if it's not zero go back and copy more bytes jp nz, CopyTile DoneWithLine: pop bc ld a, l add a, 32 ld l, a ld a, h adc a, 0 ld h, a ld a, l sub a, c ld l, a ld a, h sbc a, 0 ld h, a dec b jp nz, CopyTilesToMap ret SECTION "Card Data", ROM0 Cards: db 2 dw TheFool dw TheMagician ; this is a card struct ; starts with five length-prefixed strings in memory ; then a 16bit value of the offset between the tile set and the end ; then the 16bit address of the tile set ; then a 16bit value of the offset between tile map and end ; then the 16bit address of the tile map TheFool: db 8, "THE FOOL" db 8, " " db 9, "-begin " db 9, "-leap " db 9, "-naivete " dw FoolTilesEnd - FoolTiles dw FoolTiles dw FoolMapEnd - FoolMap dw FoolMap FoolTiles: db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$00,$01,$00,$02 db $00,$00,$00,$00,$00,$1f,$00,$60,$00,$80,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$00,$00,$00,$00,$c0,$00,$20,$00,$10,$00,$10,$00,$08 db $00,$02,$00,$02,$00,$02,$00,$01,$00,$01,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$60,$00,$1f db $00,$08,$00,$08,$00,$08,$00,$10,$00,$10,$00,$20,$00,$c0,$00,$00 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01 db $00,$00,$00,$00,$00,$00,$01,$1f,$0e,$3e,$10,$60,$3c,$c4,$ff,$03 db $00,$00,$00,$00,$00,$00,$f8,$f8,$00,$3c,$7c,$7c,$00,$38,$20,$21 db $00,$01,$01,$02,$01,$02,$03,$04,$07,$08,$0f,$10,$1f,$20,$1f,$20 db $f0,$0c,$e0,$10,$e0,$10,$c0,$20,$c0,$21,$80,$43,$80,$42,$01,$85 db $f0,$fe,$20,$2b,$10,$53,$e8,$eb,$8c,$8e,$42,$43,$00,$01,$00,$03 db $00,$00,$00,$00,$00,$80,$00,$c0,$00,$40,$00,$20,$00,$60,$00,$20 db $3f,$40,$3e,$41,$1d,$22,$0a,$14,$01,$0c,$02,$08,$05,$08,$02,$08 db $00,$f4,$a0,$1a,$50,$05,$a8,$02,$50,$05,$aa,$00,$55,$00,$aa,$01 db $80,$85,$00,$05,$00,$81,$00,$63,$02,$3d,$1f,$e0,$1c,$e3,$bd,$3c db $00,$20,$00,$a0,$00,$20,$00,$20,$1f,$3f,$00,$aa,$01,$ab,$01,$6b db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$80,$c0,$c0,$c0,$c0 db $05,$08,$02,$08,$04,$0b,$00,$0c,$00,$08,$00,$00,$00,$00,$00,$00 db $54,$01,$a9,$02,$00,$fe,$01,$02,$00,$02,$01,$04,$02,$04,$01,$04 db $46,$5c,$8f,$8e,$82,$8e,$86,$8d,$8c,$89,$ca,$b9,$7c,$89,$72,$8d db $a6,$1e,$50,$08,$a8,$04,$54,$02,$a8,$02,$54,$02,$a8,$02,$54,$02 db $20,$20,$10,$10,$08,$08,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04 db $02,$04,$01,$04,$02,$04,$01,$04,$02,$04,$01,$04,$02,$04,$01,$06 db $78,$85,$3c,$43,$bc,$43,$3c,$43,$be,$41,$5e,$21,$9e,$21,$5d,$22 db $a8,$02,$54,$02,$a8,$02,$54,$02,$a8,$02,$50,$04,$a8,$04,$50,$04 db $04,$04,$04,$04,$04,$04,$04,$04,$04,$0c,$08,$08,$08,$18,$10,$30 db $00,$02,$01,$02,$00,$03,$00,$07,$00,$18,$00,$60,$00,$80,$00,$00 db $9c,$22,$1d,$62,$0c,$b2,$05,$1a,$04,$0a,$01,$06,$00,$82,$01,$82 db $a8,$04,$50,$04,$a8,$05,$53,$0f,$a0,$08,$50,$08,$a0,$08,$50,$08 db $20,$60,$40,$c0,$80,$80,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$82,$01,$82,$00,$82,$01,$82,$00,$c1,$00,$c0,$00,$60,$00,$70 db $a0,$08,$40,$38,$80,$48,$00,$84,$00,$04,$00,$04,$00,$04,$00,$08 db $00,$30,$00,$30,$00,$30,$00,$10,$00,$10,$00,$10,$00,$10,$00,$10 db $00,$08,$00,$08,$00,$08,$00,$08,$00,$08,$00,$10,$00,$10,$00,$08 db $00,$10,$00,$10,$00,$10,$00,$10,$00,$10,$00,$08,$00,$04,$00,$06 db $00,$08,$00,$08,$00,$08,$00,$04,$00,$0c,$00,$0c,$00,$38,$38,$c4 db $00,$03,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $78,$84,$fc,$02,$7e,$81,$3e,$41,$1f,$20,$0f,$10,$07,$08,$03,$04 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$80,$80,$40,$c0,$20 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$07,$00,$18 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$fc,$00,$03 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f0 db $01,$02,$00,$01,$00,$03,$00,$0f,$00,$70,$00,$80,$00,$c0,$00,$e0 db $c0,$30,$e0,$18,$00,$fc,$00,$0c,$00,$04,$00,$04,$00,$04,$00,$04 db $00,$08,$00,$04,$00,$04,$00,$04,$00,$04,$00,$04,$00,$03,$00,$00 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$80 db $00,$0f,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$ff,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$ff,$00,$03,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$fc,$00,$83,$00,$7c,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$c0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$01,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$80,$00,$00,$00,$00,$00,$80,$00,$c0,$00,$20,$00,$20,$00,$20 db $00,$20,$00,$20,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$00,$02,$00,$03 db $00,$0c,$00,$10,$00,$20,$00,$40,$00,$80,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$00,$00,$00,$00,$02,$00,$0b,$00,$2f,$00,$b8,$00,$e0 db $00,$01,$01,$02,$01,$02,$03,$04,$07,$08,$07,$08,$0f,$10,$1f,$20 db $00,$30,$00,$30,$00,$18,$00,$0c,$00,$0e,$00,$06,$00,$03,$00,$01 db $1f,$e0,$3e,$41,$1c,$22,$18,$24,$00,$18,$00,$08,$00,$08,$00,$90 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$3c,$00,$33 db $00,$e0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$83,$00,$8e,$00,$d8,$80,$70,$c0,$30,$c0,$20,$80,$40,$00,$80 db $00,$80,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$00,$06 db $00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 FoolTilesEnd: FoolMap: db $00, $00, $01, $02, $03, $00, $00, $00 db $00, $00, $04, $05, $06, $00, $00, $00 db $00, $00, $07, $08, $09, $00, $00, $00 db $00, $00, $0a, $0b, $0c, $0d, $00, $00 db $00, $00, $0e, $0f, $10, $11, $12, $00 db $00, $00, $13, $14, $15, $16, $17, $00 db $00, $00, $00, $18, $19, $1a, $1b, $00 db $00, $00, $42, $1c, $1d, $1e, $1f, $00 db $00, $38, $39, $3a, $20, $21, $00, $00 db $3e, $3b, $40, $00, $22, $23, $00, $00 db $3c, $3d, $41, $00, $24, $25, $00, $00 db $43, $3f, $00, $00, $26, $27, $28, $00 db $00, $29, $2a, $2b, $00, $2c, $2d, $00 db $00, $2e, $2f, $30, $31, $32, $33, $34 db $00, $35, $36, $00, $00, $00, $00, $00 db $00, $00, $37, $00, $00, $00, $00, $00 FoolMapEnd: TheMagician: db 8, "THE " db 8, "MAGICIAN" db 9, "-capacity" db 9, "-knowing " db 9, "-manifest" dw MagicianTilesEnd - MagicianTiles dw MagicianTiles dw MagicianMapEnd - MagicianMap dw MagicianMap MagicianTiles: db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$00,$00,$1f,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$21,$00,$23,$00,$22,$01,$3e,$00,$02,$01,$02,$00,$02,$01,$02 db $00,$80,$00,$80,$00,$80,$00,$80,$00,$c0,$40,$a0,$00,$98,$70,$8e db $00,$00,$00,$00,$00,$00,$00,$70,$00,$50,$00,$50,$00,$50,$00,$50 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$00,$01,$00,$01,$00,$01 db $00,$50,$00,$50,$00,$50,$00,$d0,$00,$58,$00,$54,$00,$26,$00,$96 db $00,$01,$00,$01,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$56,$00,$ad,$00,$4b,$00,$b3,$00,$60,$00,$20,$00,$20,$00,$20 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$80,$00,$80,$00,$40 db $00,$40,$00,$40,$00,$40,$00,$20,$00,$10,$00,$08,$00,$07,$03,$04 db $00,$04,$03,$04,$00,$04,$03,$04,$00,$0c,$07,$88,$00,$58,$0f,$30 db $00,$00,$00,$00,$00,$3f,$00,$20,$00,$60,$00,$40,$00,$df,$00,$90 db $00,$00,$00,$00,$00,$fc,$00,$06,$00,$02,$00,$01,$00,$f1,$00,$19 db $00,$90,$00,$90,$00,$90,$00,$90,$00,$90,$00,$90,$00,$90,$00,$90 db $00,$09,$00,$09,$00,$09,$00,$09,$00,$09,$00,$09,$00,$09,$00,$09 db $00,$8b,$70,$89,$00,$89,$f0,$08,$00,$08,$e0,$18,$00,$10,$e0,$10 db $00,$20,$00,$20,$00,$20,$00,$20,$00,$20,$00,$20,$00,$20,$00,$20 db $00,$90,$00,$88,$00,$86,$00,$87,$00,$84,$00,$84,$00,$87,$00,$84 db $00,$08,$00,$10,$00,$70,$00,$f0,$00,$10,$00,$10,$00,$f0,$00,$20 db $00,$10,$e0,$10,$00,$10,$e0,$10,$00,$10,$e0,$10,$00,$10,$e0,$10 db $00,$14,$e0,$14,$00,$14,$e0,$12,$00,$0a,$f0,$0a,$00,$0a,$f0,$09 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$1f,$00,$00,$00,$00 db $00,$80,$00,$80,$00,$80,$00,$80,$00,$80,$00,$f8,$00,$00,$00,$00 db $00,$00,$00,$00,$00,$f8,$00,$80,$00,$80,$00,$80,$00,$80,$00,$80 db $00,$20,$00,$30,$00,$08,$00,$04,$00,$03,$00,$00,$00,$00,$00,$00 db $00,$10,$0f,$10,$00,$30,$1f,$20,$00,$20,$1f,$20,$00,$20,$1f,$20 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$ff,$00,$00,$00,$00 db $00,$20,$1f,$20,$00,$20,$1f,$20,$00,$20,$00,$ff,$00,$00,$00,$7f db $00,$20,$c0,$20,$00,$20,$e0,$10,$00,$10,$00,$ff,$00,$00,$00,$fe db $00,$02,$01,$02,$00,$02,$01,$02,$00,$02,$01,$e2,$00,$22,$01,$12 db $00,$92,$01,$52,$00,$4a,$01,$4a,$00,$8a,$01,$ca,$00,$36,$01,$e6 db $00,$46,$01,$82,$00,$03,$00,$03,$00,$81,$00,$40,$00,$20,$00,$40 db $00,$09,$f0,$08,$00,$08,$78,$84,$00,$84,$78,$84,$00,$84,$78,$84 db $00,$84,$78,$84,$00,$04,$08,$f4,$00,$1c,$00,$06,$00,$03,$00,$01 db $00,$84,$00,$84,$00,$82,$00,$82,$00,$82,$00,$82,$00,$82,$00,$82 db $00,$82,$00,$c2,$00,$62,$c0,$3e,$00,$20,$c0,$20,$00,$20,$c0,$20 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$80 db $00,$20,$00,$20,$00,$21,$00,$21,$00,$21,$00,$21,$00,$21,$00,$21 db $00,$04,$00,$04,$00,$04,$00,$02,$00,$02,$00,$02,$00,$02,$00,$02 db $00,$02,$00,$02,$00,$3e,$00,$62,$00,$42,$00,$c2,$00,$81,$00,$80 db $00,$84,$00,$a3,$00,$a9,$00,$7d,$00,$0d,$00,$05,$00,$05,$00,$07 db $00,$40,$00,$c0,$00,$03,$00,$0e,$00,$08,$00,$10,$00,$10,$00,$30 db $00,$02,$00,$00,$00,$01,$00,$07,$00,$18,$00,$30,$00,$60,$00,$c0 db $00,$10,$e0,$10,$00,$10,$e0,$10,$00,$18,$e0,$18,$00,$18,$e0,$18 db $00,$00,$00,$00,$00,$00,$00,$80,$00,$80,$00,$40,$00,$40,$00,$40 db $00,$20,$00,$20,$00,$20,$00,$10,$00,$10,$00,$10,$00,$08,$00,$08 db $00,$00,$00,$00,$00,$70,$00,$8c,$00,$02,$00,$03,$00,$8c,$00,$70 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$00,$01,$00,$00,$00,$00 db $00,$00,$00,$00,$00,$0e,$00,$31,$00,$c0,$00,$40,$00,$31,$00,$0e db $00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$80,$00,$00,$00,$00 db $00,$1f,$00,$20,$00,$1f,$00,$00,$00,$00,$00,$02,$00,$02,$00,$7f db $00,$ff,$00,$00,$00,$ff,$00,$00,$00,$00,$00,$00,$00,$00,$00,$ff db $00,$80,$00,$00,$00,$80,$00,$7f,$00,$00,$00,$00,$00,$00,$00,$ff db $00,$01,$00,$00,$00,$00,$00,$fe,$00,$01,$00,$07,$00,$18,$00,$ff db $00,$42,$00,$7f,$00,$02,$00,$02,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$ff,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$ff,$00,$00,$00,$1f,$00,$64,$00,$bb,$00,$8e,$00,$7b,$00,$1f db $00,$84,$00,$02,$00,$01,$00,$c1,$00,$a3,$00,$25,$00,$c8,$00,$04 db $00,$03,$00,$ff,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$80,$00,$ff,$00,$81,$00,$ff,$00,$47,$00,$6c,$00,$38,$00,$50 db $00,$00,$00,$ff,$00,$18,$00,$ff,$00,$c0,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$ff,$00,$00,$00,$ff,$00,$c0,$00,$40,$00,$61,$00,$27 db $00,$2c,$00,$38,$00,$00,$00,$00,$00,$00,$00,$e0,$00,$a0,$00,$20 db $00,$00,$00,$ff,$00,$06,$00,$fc,$00,$04,$00,$04,$00,$f8,$00,$0c db $00,$06,$00,$02,$00,$03,$00,$01,$00,$01,$00,$01,$00,$00,$00,$00 db $00,$d0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$00,$00,$01,$00,$03,$00,$02,$00,$00,$00,$00,$00,$00 db $00,$c0,$00,$80,$00,$80,$00,$00,$00,$00,$00,$1f,$00,$3e,$00,$26 db $00,$20,$00,$20,$00,$f8,$00,$0c,$00,$02,$00,$03,$00,$00,$00,$00 db $00,$64,$00,$7d,$00,$7d,$00,$66,$00,$4c,$00,$6b,$00,$3e,$00,$00 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$c0,$00,$60 db $00,$a0,$00,$60,$00,$40,$00,$c0,$00,$c0,$00,$00,$00,$00,$00,$00 db $00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$06,$00,$0f,$00,$08 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$f8 db $00,$08,$00,$0e,$00,$1c,$00,$10,$00,$11,$00,$1b,$00,$0f,$00,$01 db $00,$88,$00,$08,$00,$08,$00,$78,$00,$10,$00,$10,$00,$30,$00,$e0 db $00,$c0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$20,$00,$e0,$00,$60,$00,$20,$00,$60,$00,$c0,$00,$00,$00,$01 db $00,$00,$00,$00,$00,$00,$00,$3e,$00,$6f,$00,$cf,$00,$dc,$00,$d4 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$e0,$00,$60,$00,$70 db $00,$56,$00,$63,$00,$61,$00,$38,$00,$97,$00,$90,$00,$d1,$00,$7f db $00,$70,$00,$f0,$00,$f0,$00,$20,$00,$e0,$00,$c0,$00,$80,$00,$00 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$0e,$00,$1a,$00,$11,$00,$19 db $00,$0c,$00,$30,$00,$62,$00,$46,$00,$6c,$00,$3f,$00,$00,$00,$00 db $00,$20,$1f,$20,$00,$20,$1f,$20,$00,$20,$1f,$20,$00,$20,$1f,$20 MagicianTilesEnd: MagicianMap: db $00, $04, $00, $00, $00, $00, $00, $00 db $05, $06, $30, $2f, $31, $32, $00, $00 db $07, $08, $09, $0c, $0d, $00, $00, $00 db $00, $11, $0a, $0e, $0f, $25, $00, $00 db $00, $19, $0b, $12, $13, $03, $00, $00 db $00, $00, $1a, $23, $26, $10, $2d, $00 db $00, $00, $56, $24, $02, $14, $2e, $00 db $1b, $1b, $1c, $1d, $1e, $2c, $27, $00 db $33, $34, $35, $36, $1f, $15, $28, $25 db $37, $38, $39, $3a, $20, $21, $29, $2a db $3d, $3e, $40, $3b, $3c, $22, $2b, $45 db $54, $3f, $41, $00, $42, $43, $44, $47 db $55, $4f, $50, $51, $4a, $4b, $46, $48 db $00, $49, $52, $53, $4c, $4d, $00, $00 db $00, $00, $00, $01, $18, $4e, $00, $00 db $00, $00, $00, $16, $17, $00, $00, $00 MagicianMapEnd: SECTION "Tile data", ROM0 Spreads: UITiles: db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $0f,$0f,$10,$10,$10,$10,$10,$10,$0f,$0f,$10,$10,$10,$10,$10,$10 db $7f,$7f,$80,$80,$80,$80,$80,$80,$7f,$7f,$10,$10,$10,$10,$10,$10 db $00,$3c,$3c,$7e,$42,$c3,$42,$c3,$42,$c3,$42,$c3,$42,$c3,$42,$c3 db $42,$c3,$42,$c3,$42,$c3,$42,$c3,$42,$c3,$42,$c3,$3c,$7e,$00,$3c db $00,$3c,$3c,$7e,$42,$c3,$5a,$db,$5a,$db,$5a,$db,$5a,$db,$5a,$db db $5a,$db,$5a,$db,$5a,$db,$5a,$db,$5a,$db,$42,$c3,$3c,$7e,$00,$3c db $0f,$0f,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $ce,$f0,$c6,$f8,$0e,$f0,$16,$e8,$5e,$a0,$fe,$00,$fc,$00,$00,$00 db $ce,$f0,$c6,$f8,$ce,$f0,$c6,$f8,$ce,$f0,$c6,$f8,$ce,$f0,$c6,$f8 db $00,$00,$fc,$00,$fe,$00,$ae,$50,$1e,$e0,$06,$f8,$ce,$f0,$c6,$f8 db $00,$00,$3f,$00,$7f,$00,$7a,$05,$68,$17,$70,$0f,$63,$1f,$73,$0f db $63,$1f,$73,$0f,$60,$1f,$78,$07,$75,$0a,$7f,$00,$3f,$00,$00,$00 db $00,$00,$ff,$00,$ff,$00,$aa,$55,$00,$ff,$00,$ff,$ff,$ff,$ff,$ff db $63,$1f,$73,$0f,$63,$1f,$73,$0f,$63,$1f,$73,$0f,$63,$1f,$73,$0f db $ff,$ff,$ff,$ff,$00,$ff,$00,$ff,$55,$aa,$ff,$00,$ff,$00,$00,$00 db $0f,$0f,$10,$10,$10,$10,$10,$10,$7f,$7f,$80,$80,$80,$80,$80,$80 db $7f,$7f,$10,$10,$10,$10,$10,$10,$0f,$0f,$10,$10,$10,$10,$10,$10 db $7f,$7f,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 UITilesEnd: LetterTiles: db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $04,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04,$00,$00,$04,$04 db $28,$28,$28,$28,$28,$28,$08,$08,$00,$00,$00,$00,$00,$00,$00,$00 db $04,$04,$24,$24,$2c,$2c,$28,$28,$fc,$fc,$28,$28,$fe,$fe,$28,$28 db $38,$38,$60,$60,$e0,$e0,$70,$70,$30,$30,$20,$20,$e0,$e0,$60,$60 db $e0,$e0,$b0,$b0,$b2,$b2,$e4,$e4,$08,$08,$16,$16,$35,$35,$27,$27 db $1c,$1c,$74,$74,$60,$60,$38,$38,$3d,$3d,$37,$37,$3e,$3e,$3c,$3c db $00,$00,$18,$18,$10,$10,$10,$10,$00,$00,$00,$00,$00,$00,$00,$00 db $08,$08,$10,$10,$20,$20,$20,$20,$20,$20,$20,$20,$30,$30,$10,$10 db $00,$00,$00,$00,$0e,$0e,$02,$02,$02,$02,$06,$06,$0c,$0c,$18,$18 db $02,$02,$46,$46,$6c,$6c,$78,$78,$7c,$7c,$68,$68,$0c,$0c,$00,$00 db $08,$08,$08,$08,$08,$08,$08,$08,$7c,$7c,$08,$08,$08,$08,$00,$00 db $00,$00,$00,$00,$00,$00,$00,$00,$08,$08,$08,$08,$18,$18,$10,$10 db $00,$00,$00,$00,$00,$00,$3c,$3c,$20,$20,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$20,$20,$00,$00 db $00,$00,$00,$00,$02,$02,$04,$04,$0c,$0c,$08,$08,$10,$10,$10,$10 db $00,$00,$00,$00,$3c,$3c,$24,$24,$24,$24,$3c,$3c,$00,$00,$00,$00 db $00,$00,$04,$04,$04,$04,$04,$04,$04,$04,$0c,$0c,$08,$08,$00,$00 db $00,$00,$0c,$0c,$12,$12,$12,$12,$02,$02,$0e,$0e,$07,$07,$00,$00 db $00,$00,$00,$00,$38,$38,$08,$08,$18,$18,$18,$18,$00,$00,$00,$00 db $02,$02,$32,$32,$26,$26,$3e,$3e,$24,$24,$04,$04,$00,$00,$00,$00 db $00,$00,$00,$00,$3e,$3e,$20,$20,$38,$38,$08,$08,$38,$38,$20,$20 db $00,$00,$00,$00,$30,$30,$20,$20,$58,$58,$68,$68,$7c,$7c,$3c,$3c db $00,$00,$1e,$1e,$03,$03,$03,$03,$02,$02,$04,$04,$04,$04,$00,$00 db $00,$00,$3c,$3c,$24,$24,$38,$38,$18,$18,$1c,$1c,$38,$38,$00,$00 db $00,$00,$00,$00,$3e,$3e,$64,$64,$7c,$7c,$0c,$0c,$08,$08,$10,$10 db $00,$00,$00,$00,$10,$10,$00,$00,$00,$00,$10,$10,$10,$10,$00,$00 db $00,$00,$08,$08,$00,$00,$00,$00,$0c,$0c,$04,$04,$0c,$0c,$18,$18 db $00,$00,$04,$04,$1c,$1c,$30,$30,$60,$60,$78,$78,$1e,$1e,$02,$02 db $00,$00,$00,$00,$00,$00,$3c,$3c,$40,$40,$78,$78,$00,$00,$00,$00 db $00,$00,$20,$20,$30,$30,$18,$18,$0c,$0c,$1c,$1c,$30,$30,$00,$00 db $0c,$0c,$3c,$3c,$24,$24,$0c,$0c,$08,$08,$08,$08,$00,$00,$08,$08 db $00,$00,$04,$04,$1e,$1e,$3f,$3f,$36,$36,$3e,$3e,$1c,$1c,$00,$00 db $00,$00,$10,$10,$28,$28,$28,$28,$7c,$7c,$44,$44,$82,$82,$82,$82 db $00,$00,$7c,$7c,$22,$22,$22,$22,$3c,$3c,$22,$22,$22,$22,$7c,$7c db $00,$00,$3c,$3c,$42,$42,$40,$40,$40,$40,$40,$40,$42,$42,$3c,$3c db $00,$00,$78,$78,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$78,$78 db $00,$00,$7c,$7c,$44,$44,$40,$40,$78,$78,$40,$40,$44,$44,$7c,$7c db $00,$00,$7c,$7c,$24,$24,$20,$20,$38,$38,$20,$20,$20,$20,$20,$20 db $00,$00,$38,$38,$44,$44,$40,$40,$4c,$4c,$44,$44,$44,$44,$38,$38 db $00,$00,$44,$44,$44,$44,$44,$44,$7c,$7c,$44,$44,$44,$44,$44,$44 db $00,$00,$38,$38,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$38,$38 db $00,$00,$0e,$0e,$04,$04,$04,$04,$04,$04,$04,$04,$44,$44,$38,$38 db $00,$00,$48,$48,$50,$50,$60,$60,$60,$60,$50,$50,$48,$48,$44,$44 db $00,$00,$70,$70,$20,$20,$20,$20,$20,$20,$20,$20,$22,$22,$7e,$7e db $00,$00,$42,$42,$66,$66,$5a,$5a,$42,$42,$42,$42,$42,$42,$42,$42 db $00,$00,$64,$64,$64,$64,$54,$54,$54,$54,$4c,$4c,$4c,$4c,$44,$44 db $00,$00,$38,$38,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$38,$38 db $00,$00,$78,$78,$44,$44,$44,$44,$44,$44,$78,$78,$40,$40,$40,$40 db $00,$00,$38,$38,$44,$44,$44,$44,$44,$44,$4c,$4c,$44,$44,$3a,$3a db $00,$00,$78,$78,$44,$44,$44,$44,$7c,$7c,$48,$48,$48,$48,$44,$44 db $00,$00,$1c,$1c,$22,$22,$20,$20,$1c,$1c,$02,$02,$62,$62,$1c,$1c db $00,$00,$7c,$7c,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10 db $00,$00,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$3c,$3c db $00,$00,$44,$44,$44,$44,$28,$28,$28,$28,$28,$28,$10,$10,$10,$10 db $00,$00,$82,$82,$82,$82,$44,$44,$54,$54,$54,$54,$28,$28,$28,$28 db $00,$00,$44,$44,$28,$28,$28,$28,$10,$10,$28,$28,$28,$28,$44,$44 db $00,$00,$44,$44,$28,$28,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10 db $00,$00,$7c,$7c,$08,$08,$08,$08,$10,$10,$20,$20,$20,$20,$7c,$7c db $00,$00,$3c,$3c,$20,$20,$20,$20,$20,$20,$20,$20,$3c,$3c,$00,$00 db $00,$00,$c0,$c0,$c0,$c0,$40,$40,$60,$60,$20,$20,$10,$10,$18,$18 db $18,$18,$0f,$0f,$03,$03,$02,$02,$02,$02,$02,$02,$12,$12,$1e,$1e db $08,$08,$1c,$1c,$34,$34,$04,$04,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$3e,$3e,$00,$00 db $20,$20,$18,$18,$0c,$0c,$04,$04,$00,$00,$00,$00,$00,$00,$00,$00 db $00,$00,$00,$00,$38,$38,$0c,$0c,$3c,$3c,$4c,$4c,$3a,$3a,$00,$00 db $00,$00,$30,$30,$30,$30,$3c,$3c,$32,$32,$32,$32,$3c,$3c,$00,$00 db $00,$00,$00,$00,$1c,$1c,$30,$30,$30,$30,$30,$30,$1c,$1c,$00,$00 db $00,$00,$0c,$0c,$0c,$0c,$3c,$3c,$4c,$4c,$4c,$4c,$3c,$3c,$00,$00 db $00,$00,$00,$00,$38,$38,$64,$64,$78,$78,$60,$60,$3c,$3c,$00,$00 db $00,$00,$0e,$0e,$18,$18,$3c,$3c,$18,$18,$18,$18,$18,$18,$00,$00 db $00,$00,$00,$00,$3c,$3c,$4c,$4c,$4c,$4c,$3c,$3c,$0c,$0c,$38,$38 db $00,$00,$60,$60,$60,$60,$78,$78,$64,$64,$64,$64,$64,$64,$00,$00 db $00,$00,$10,$10,$00,$00,$38,$38,$18,$18,$18,$18,$3c,$3c,$00,$00 db $00,$00,$04,$04,$00,$00,$0c,$0c,$0c,$0c,$0c,$0c,$2c,$2c,$18,$18 db $00,$00,$60,$60,$68,$68,$68,$68,$70,$70,$68,$68,$64,$64,$00,$00 db $00,$00,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$0c,$0c,$00,$00 db $00,$00,$00,$00,$74,$74,$6a,$6a,$6a,$6a,$6a,$6a,$6a,$6a,$00,$00 db $00,$00,$00,$00,$78,$78,$64,$64,$64,$64,$64,$64,$64,$64,$00,$00 db $00,$00,$00,$00,$38,$38,$64,$64,$64,$64,$64,$64,$38,$38,$00,$00 db $00,$00,$00,$00,$78,$78,$64,$64,$64,$64,$78,$78,$60,$60,$60,$60 db $00,$00,$00,$00,$3c,$3c,$4c,$4c,$4c,$4c,$3c,$3c,$0c,$0c,$0e,$0e db $00,$00,$00,$00,$1c,$1c,$30,$30,$30,$30,$30,$30,$30,$30,$00,$00 db $00,$00,$00,$00,$38,$38,$60,$60,$38,$38,$0c,$0c,$78,$78,$00,$00 db $00,$00,$30,$30,$78,$78,$30,$30,$30,$30,$30,$30,$1c,$1c,$00,$00 db $00,$00,$00,$00,$64,$64,$64,$64,$64,$64,$64,$64,$3c,$3c,$00,$00 db $00,$00,$00,$00,$64,$64,$64,$64,$64,$64,$28,$28,$10,$10,$00,$00 db $00,$00,$00,$00,$62,$62,$6a,$6a,$6a,$6a,$6a,$6a,$34,$34,$00,$00 db $00,$00,$00,$00,$64,$64,$38,$38,$18,$18,$2c,$2c,$46,$46,$00,$00 db $00,$00,$00,$00,$4c,$4c,$4c,$4c,$4c,$4c,$3c,$3c,$0c,$0c,$38,$38 db $00,$00,$00,$00,$7e,$7e,$0c,$0c,$18,$18,$30,$30,$7e,$7e,$00,$00 db $0e,$0e,$18,$18,$0c,$0c,$0c,$0c,$38,$38,$08,$08,$18,$18,$1c,$1c db $20,$20,$30,$30,$20,$20,$10,$10,$10,$10,$10,$10,$00,$00,$00,$00 db $30,$30,$38,$38,$10,$10,$10,$10,$10,$10,$18,$18,$18,$18,$30,$30 db $00,$00,$00,$00,$32,$32,$3c,$3c,$78,$78,$00,$00,$00,$00,$00,$00 db $06,$06,$7c,$7c,$5f,$5f,$5b,$5b,$5e,$5e,$72,$72,$03,$03,$00,$00 LetterTilesEnd: BigLetterTiles: db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 db $ee,$ee,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44 db $7c,$7c,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$ee,$ee db $10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$38,$38 db $38,$38,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10 db $70,$70,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$42,$42,$fe,$fe db $fe,$fe,$42,$42,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40 db $48,$48,$44,$44,$44,$44,$44,$44,$44,$44,$42,$42,$42,$42,$e3,$e3 db $fc,$fc,$42,$42,$42,$42,$42,$42,$42,$42,$7c,$7c,$48,$48,$48,$48 db $42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$3c,$3c db $3c,$3c,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42 db $20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$70,$70 db $7c,$7c,$22,$22,$22,$22,$22,$22,$22,$22,$3c,$3c,$20,$20,$20,$20 db $38,$38,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$ee,$ee db $10,$10,$28,$28,$28,$28,$28,$28,$28,$28,$28,$28,$28,$28,$28,$28 db $ce,$ce,$44,$44,$64,$64,$54,$54,$54,$54,$54,$54,$54,$54,$54,$54 db $54,$54,$54,$54,$54,$54,$54,$54,$54,$54,$4c,$4c,$44,$44,$e6,$e6 db $fe,$fe,$92,$92,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10 db $7e,$7e,$22,$22,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20 db $38,$38,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$70,$70 db $70,$70,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20 db $20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$22,$22,$7e,$7e db $42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$fc,$fc db $f8,$f8,$44,$44,$42,$42,$42,$42,$44,$44,$78,$78,$44,$44,$42,$42 db $ee,$ee,$44,$44,$44,$44,$44,$44,$44,$44,$7c,$7c,$44,$44,$44,$44 db $44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$ee,$ee db $7e,$7e,$22,$22,$20,$20,$20,$20,$20,$20,$38,$38,$20,$20,$20,$20 db $fe,$fe,$42,$42,$40,$40,$40,$40,$40,$40,$70,$70,$40,$40,$40,$40 db $40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$42,$42,$fe,$fe db $3c,$3c,$42,$42,$42,$42,$42,$42,$40,$40,$40,$40,$40,$40,$40,$40 db $40,$40,$40,$40,$40,$40,$40,$40,$42,$42,$42,$42,$42,$42,$3c,$3c db $42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$44,$44,$f8,$f8 db $f8,$f8,$44,$44,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42,$42 db $80,$80,$80,$80,$8f,$8f,$8a,$8a,$82,$82,$82,$82,$44,$44,$38,$38 db $38,$38,$44,$44,$82,$82,$82,$82,$82,$82,$80,$80,$80,$80,$80,$80 db $04,$04,$04,$04,$04,$04,$04,$04,$04,$04,$44,$44,$44,$44,$38,$38 db $0e,$0e,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04 db $ee,$ee,$44,$44,$44,$44,$48,$48,$50,$50,$60,$60,$50,$50,$48,$48 db $54,$54,$54,$54,$54,$54,$54,$54,$44,$44,$44,$44,$44,$44,$ee,$ee db $c6,$c6,$6c,$6c,$54,$54,$54,$54,$54,$54,$54,$54,$54,$54,$54,$54 db $42,$42,$42,$42,$42,$42,$42,$42,$4a,$4a,$4c,$4c,$4c,$4c,$36,$36 db $3c,$3c,$42,$42,$42,$42,$40,$40,$40,$40,$3c,$3c,$02,$02,$02,$02 db $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$42,$42,$42,$42,$3c,$3c db $44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$28,$28,$10,$10 db $44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$44,$38,$38 db $44,$44,$54,$54,$54,$54,$54,$54,$54,$54,$54,$54,$54,$54,$28,$28 db $10,$10,$10,$10,$28,$28,$28,$28,$28,$28,$44,$44,$44,$44,$ee,$ee db $ee,$ee,$44,$44,$44,$44,$28,$28,$28,$28,$28,$28,$10,$10,$10,$10 db $ee,$ee,$44,$44,$44,$44,$28,$28,$10,$10,$10,$10,$10,$10,$10,$10 db $fe,$fe,$82,$82,$04,$04,$04,$04,$08,$08,$08,$08,$08,$08,$10,$10 db $10,$10,$20,$20,$20,$20,$20,$20,$40,$40,$40,$40,$82,$82,$fe,$fe BigLetterTilesEnd: SECTION "Tilemap", ROM0 UITilemap: db $8b, $8d, $8d, $8d, $8d, $8d, $8d, $8d, $8d, $8a, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89, $80, $80, $80, $85, $80, $80, $80, $80, $80, $80 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89, $80, $80, $83, $86, $83, $83, $80, $80, $80, $80 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89, $80, $80, $84, $83, $84, $84, $80, $80, $80, $80 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89, $80, $80, $80, $84, $80, $80, $80, $80, $80, $80 db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80 db $8c, $8f, $8f, $8f, $8f, $8f, $8f, $8f, $8f, $88, $80, $80, $80, $80, $80, $80, $80, $80, $80, $80 UITilemapEnd: BigLetters: db $c1, $b1, $b6, $b0, $c2, $ba, $ba, $c4 db $b3, $b2, $b5, $b0, $c3, $b9, $b9, $c5 BigLettersEnd: