From af680dd5fc4502436124845c0ed26b2a4914b555 Mon Sep 17 00:00:00 2001 From: shoofle Date: Wed, 8 Jan 2025 14:03:54 -0500 Subject: [PATCH] refactor everything to use the websites format and more files --- 00TheFool.inc | 6 +- 01TheMagician.inc | 6 +- 02TheHighPriestess.inc | 6 +- 03TheEmpress.inc | 122 ++++ 04TheEmperor.inc | 120 ++++ tarot.asm => CardReadScreen.inc | 442 +++++------- CopyRangeSafe.inc | 35 +- CopyTilesSafe.inc | 48 +- KeyArtTiles.asm | 120 ---- hardware.inc | 1114 +++++++++++++++++++++++++++++++ littleletters.asm | 123 ---- main.asm | 161 +++++ theemperor.aseprite | Bin 0 -> 5956 bytes theempress.aseprite | Bin 0 -> 6048 bytes thefool.asm | 46 -- themagician.asm | 112 ---- 16 files changed, 1772 insertions(+), 689 deletions(-) create mode 100644 03TheEmpress.inc create mode 100644 04TheEmperor.inc rename tarot.asm => CardReadScreen.inc (70%) delete mode 100644 KeyArtTiles.asm create mode 100644 hardware.inc delete mode 100644 littleletters.asm create mode 100644 main.asm create mode 100644 theemperor.aseprite create mode 100644 theempress.aseprite delete mode 100644 thefool.asm delete mode 100644 themagician.asm diff --git a/00TheFool.inc b/00TheFool.inc index 95c1adc..862d833 100644 --- a/00TheFool.inc +++ b/00TheFool.inc @@ -7,9 +7,9 @@ TheFool: db 9, "THE FOOL " db 9, " " - db 9, "-begin " - db 9, "-leap " - db 9, "-naivete " + db 9, "beginning" + db 9, "leap " + db 9, "naivete " dw FoolMapEnd - FoolMap dw FoolMap dw FoolTilesEnd - FoolTiles diff --git a/01TheMagician.inc b/01TheMagician.inc index bdaf6a1..a5e2499 100644 --- a/01TheMagician.inc +++ b/01TheMagician.inc @@ -1,9 +1,9 @@ TheMagician: db 9, "THE " db 9, "MAGICIAN " - db 9, "-capacity" - db 9, "-knowing " - db 9, "-manifest" + db 9, "capacity " + db 9, "knowing " + db 9, "manifest " dw MagicianMapEnd - MagicianMap dw MagicianMap dw MagicianTilesEnd - MagicianTiles diff --git a/02TheHighPriestess.inc b/02TheHighPriestess.inc index 3c78029..36dc63e 100644 --- a/02TheHighPriestess.inc +++ b/02TheHighPriestess.inc @@ -1,9 +1,9 @@ TheHighPriestess: db 9, "THE HIGH " db 9, "PRIESTESS" - db 9, "-secrets " - db 9, "-mystery " - db 9, "-unknown " + db 9, "secrets " + db 9, "mystery " + db 9, "unknown " dw HighPriestessMapEnd - HighPriestessMap dw HighPriestessMap dw HighPriestessTilesEnd - HighPriestessTiles diff --git a/03TheEmpress.inc b/03TheEmpress.inc new file mode 100644 index 0000000..ac603db --- /dev/null +++ b/03TheEmpress.inc @@ -0,0 +1,122 @@ +TheEmpress: + db 9, "THE " + db 9, "EMPRESS " + db 9, "diplomacy" + db 9, "fecundity" + db 9, "nature " + dw EmpressMapEnd - EmpressMap + dw EmpressMap + dw EmpressTilesEnd - EmpressTiles + dw EmpressTiles + +EmpressMap: + db $00, $01, $02, $03, $00, $00, $00, $00 + db $00, $04, $05, $06, $07, $08, $00, $00 + db $00, $09, $00, $0a, $00, $00, $0b, $00 + db $00, $0c, $0d, $0e, $00, $0f, $10, $00 + db $00, $11, $12, $00, $00, $00, $00, $00 + db $00, $14, $15, $00, $16, $17, $18, $00 + db $19, $1a, $1b, $1c, $1d, $1e, $1f, $20 + db $21, $22, $23, $24, $25, $00, $26, $00 + db $27, $28, $29, $2a, $2b, $2c, $2d, $00 + db $2e, $2f, $30, $31, $32, $33, $34, $35 + db $36, $37, $38, $00, $39, $3a, $3b, $3c + db $3d, $3e, $13, $3f, $40, $41, $42, $43 + db $44, $45, $46, $47, $48, $49, $4a, $4b + db $4c, $4d, $00, $4e, $00, $4f, $50, $51 + db $00, $00, $00, $52, $53, $54, $55, $00 + db $00, $00, $00, $56, $57, $58, $00, $00 +EmpressMapEnd: + +EmpressTiles: + 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,$00,$00,$01,$00,$02 + db $00,$00,$00,$00,$00,$01,$00,$41,$00,$81,$00,$80,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$80,$00,$40 + db $00,$04,$00,$08,$00,$08,$00,$07,$00,$00,$00,$01,$00,$02,$00,$04 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$00,$00,$00,$00,$00 + db $00,$20,$00,$10,$00,$08,$00,$08,$00,$04,$00,$78,$00,$80,$00,$40 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0f,$00,$30,$00,$c0 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$00,$06,$00,$01 + db $00,$08,$00,$10,$00,$3e,$00,$01,$00,$02,$00,$04,$00,$04,$00,$08 + db $00,$21,$00,$12,$00,$0c,$00,$0c,$00,$04,$00,$7e,$00,$84,$00,$44 + db $00,$80,$00,$40,$00,$20,$00,$20,$00,$20,$00,$20,$00,$20,$00,$10 + db $00,$08,$00,$10,$00,$10,$00,$23,$00,$2c,$00,$10,$00,$00,$00,$00 + db $00,$00,$00,$7e,$00,$a1,$00,$20,$00,$20,$00,$20,$00,$20,$00,$20 + db $00,$24,$00,$14,$00,$cc,$00,$34,$00,$0c,$00,$02,$00,$02,$00,$01 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$00,$06 + db $00,$10,$00,$10,$00,$10,$00,$10,$00,$10,$00,$60,$00,$80,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$13,$00,$14,$00,$18,$00,$10,$00,$30 + db $00,$00,$00,$00,$00,$00,$00,$e0,$00,$10,$00,$08,$00,$04,$00,$02 + db $00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$31,$00,$32,$00,$30,$00,$30,$00,$30,$00,$12,$00,$11,$00,$18 + db $00,$b2,$00,$0a,$00,$04,$00,$04,$00,$04,$00,$64,$00,$88,$00,$10 + db $00,$06,$00,$09,$00,$11,$00,$12,$00,$24,$00,$28,$00,$30,$00,$20 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$07,$00,$08,$00,$10,$00,$11 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$c0,$00,$20,$00,$40,$00,$80 + db $00,$00,$00,$00,$00,$01,$00,$06,$00,$0a,$00,$14,$00,$14,$00,$14 + db $00,$0c,$00,$03,$00,$fc,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$20,$00,$c0,$00,$3c,$00,$02,$00,$01,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$40,$00,$20 + db $00,$20,$00,$20,$00,$20,$00,$20,$00,$20,$00,$20,$00,$20,$00,$01 + db $00,$22,$00,$4c,$00,$50,$00,$80,$00,$80,$00,$80,$00,$80,$00,$00 + db $00,$00,$00,$01,$00,$02,$00,$04,$00,$04,$00,$09,$00,$12,$00,$1c + db $00,$80,$00,$40,$00,$20,$00,$40,$00,$80,$00,$00,$00,$00,$00,$00 + db $00,$14,$00,$14,$00,$14,$00,$14,$00,$14,$00,$14,$00,$14,$00,$14 + db $00,$40,$00,$40,$00,$40,$00,$40,$00,$40,$00,$80,$00,$80,$00,$80 + db $00,$00,$00,$00,$00,$00,$00,$06,$00,$01,$00,$01,$00,$00,$00,$00 + db $00,$20,$00,$10,$00,$10,$00,$08,$00,$08,$00,$84,$00,$c6,$00,$a1 + db $00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$00,$00,$00,$00,$00,$00 + db $00,$10,$00,$20,$00,$20,$00,$20,$00,$40,$00,$40,$00,$40,$00,$40 + db $00,$13,$00,$10,$00,$30,$00,$30,$00,$2e,$00,$21,$00,$20,$00,$20 + db $00,$ff,$00,$00,$00,$00,$00,$00,$00,$00,$00,$ff,$00,$00,$00,$40 + db $00,$e1,$00,$18,$00,$00,$00,$00,$00,$00,$00,$f8,$00,$00,$00,$04 + db $00,$50,$00,$ac,$00,$52,$00,$49,$00,$44,$00,$23,$00,$20,$00,$20 + db $00,$80,$00,$40,$00,$20,$00,$10,$00,$88,$00,$44,$00,$a2,$00,$71 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$07,$00,$80 + db $00,$40,$00,$40,$00,$40,$00,$00,$00,$00,$00,$00,$00,$80,$00,$70 + db $00,$20,$00,$20,$00,$20,$00,$20,$00,$20,$00,$10,$00,$10,$00,$10 + db $00,$20,$00,$20,$00,$20,$00,$10,$00,$10,$00,$10,$00,$10,$00,$08 + db $00,$04,$00,$04,$00,$04,$00,$02,$00,$01,$00,$00,$00,$00,$00,$00 + db $00,$20,$00,$20,$00,$20,$00,$20,$00,$40,$00,$81,$00,$00,$00,$00 + db $00,$18,$00,$ec,$00,$1a,$00,$0f,$00,$07,$00,$00,$00,$80,$00,$40 + db $00,$40,$00,$20,$00,$20,$00,$20,$00,$c0,$00,$f8,$00,$27,$00,$10 + db $00,$08,$00,$04,$00,$02,$00,$01,$00,$00,$00,$00,$00,$00,$00,$80 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$7c,$00,$00,$00,$00 + db $00,$10,$00,$08,$00,$08,$00,$04,$00,$04,$00,$02,$00,$02,$00,$01 + db $00,$08,$00,$08,$00,$08,$00,$0c,$00,$0b,$00,$08,$00,$08,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$60,$00,$18,$00,$06 + db $00,$20,$00,$10,$00,$08,$00,$04,$00,$02,$00,$01,$00,$00,$00,$00 + db $00,$08,$00,$04,$00,$02,$00,$02,$00,$01,$00,$80,$00,$40,$00,$20 + db $00,$40,$00,$20,$00,$20,$00,$20,$00,$16,$00,$91,$00,$90,$00,$90 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$60,$00,$1e + db $00,$01,$00,$01,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$80,$00,$40,$00,$a0,$00,$98,$00,$84 + db $00,$80,$00,$70,$00,$0c,$00,$03,$00,$00,$00,$00,$00,$01,$00,$06 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$e0,$00,$90,$00,$08,$00,$04 + db $00,$10,$00,$08,$00,$04,$00,$02,$00,$01,$00,$00,$00,$00,$00,$00 + db $00,$50,$00,$50,$00,$48,$00,$28,$00,$28,$00,$a8,$00,$58,$00,$38 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$18 + db $00,$00,$00,$00,$00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$00,$02 + db $00,$87,$00,$8b,$00,$08,$00,$08,$00,$10,$00,$10,$00,$10,$00,$20 + db $00,$00,$00,$ff,$00,$7f,$00,$01,$00,$01,$00,$01,$00,$00,$00,$00 + db $00,$78,$00,$90,$00,$10,$00,$10,$00,$10,$00,$08,$00,$88,$00,$88 + db $00,$06,$00,$05,$00,$02,$00,$02,$00,$02,$00,$01,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$80,$00,$c0,$00,$b0,$00,$1c,$00,$0b,$00,$0f + db $00,$18,$00,$18,$00,$04,$00,$02,$00,$01,$00,$00,$00,$00,$00,$c0 + db $00,$24,$00,$44,$00,$44,$00,$84,$00,$84,$00,$84,$00,$84,$00,$84 + db $00,$02,$00,$02,$00,$02,$00,$06,$00,$03,$00,$02,$00,$00,$00,$00 + db $00,$20,$00,$40,$00,$40,$00,$80,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$44,$00,$44,$00,$22,$00,$12,$00,$11,$00,$09,$00,$06,$00,$00 + db $00,$04,$00,$02,$00,$00,$00,$01,$00,$01,$00,$01,$00,$00,$00,$00 + db $00,$30,$00,$1c,$00,$76,$00,$0b,$00,$04,$00,$02,$00,$82,$00,$62 + db $00,$08,$00,$88,$00,$88,$00,$90,$00,$50,$00,$20,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$3f,$00,$02,$00,$02,$00,$02 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$ff,$00,$44,$00,$44,$00,$44 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f0,$00,$00,$00,$00 + db $00,$1c,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$02,$00,$02,$00,$02,$00,$02,$00,$02,$00,$02,$00,$7f,$00,$00 + db $00,$44,$00,$44,$00,$44,$00,$44,$00,$44,$00,$44,$00,$ff,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$e0,$00,$00 +EmpressTilesEnd: + diff --git a/04TheEmperor.inc b/04TheEmperor.inc new file mode 100644 index 0000000..1667d29 --- /dev/null +++ b/04TheEmperor.inc @@ -0,0 +1,120 @@ +TheEmperor: + db 9, "THE " + db 9, "EMPEROR " + db 9, "authority" + db 9, "control " + db 9, "stability" + dw EmperorMapEnd - EmperorMap + dw EmperorMap + dw EmperorTilesEnd - EmperorTiles + dw EmperorTiles + +EmperorMap: + db $00, $4c, $4d, $08, $09, $4d, $51, $00 + db $00, $4e, $0a, $0b, $0c, $00, $52, $00 + db $00, $4f, $0d, $0e, $0f, $00, $53, $00 + db $00, $50, $10, $11, $12, $13, $53, $00 + db $00, $14, $15, $00, $00, $16, $17, $00 + db $00, $18, $19, $00, $00, $1a, $1b, $00 + db $1c, $1d, $1e, $00, $00, $1f, $20, $00 + db $21, $22, $23, $00, $00, $24, $25, $26 + db $28, $29, $2a, $00, $2b, $2c, $2d, $2e + db $31, $32, $33, $34, $35, $00, $36, $37 + db $38, $39, $00, $00, $00, $00, $3a, $3b + db $00, $3c, $00, $00, $00, $4a, $3d, $00 + db $00, $3e, $3f, $4b, $40, $41, $42, $00 + db $43, $49, $44, $45, $46, $47, $48, $00 + db $00, $00, $01, $02, $03, $04, $00, $00 + db $00, $00, $05, $06, $07, $00, $00, $00 +EmperorMapEnd: + +EmperorTiles: + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$23,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$ff,$00,$21,$00,$21,$00,$21,$00,$21,$00,$21,$00,$20 + db $00,$00,$00,$ff,$00,$04,$00,$08,$00,$08,$00,$08,$00,$10,$00,$90 + db $00,$00,$00,$c0,$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,$00 + db $00,$20,$00,$20,$00,$20,$00,$20,$00,$20,$00,$10,$00,$ff,$00,$00 + db $00,$a0,$00,$a0,$00,$60,$00,$60,$00,$20,$00,$00,$00,$fe,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0f,$00,$90 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$4f + db $00,$01,$00,$01,$00,$01,$00,$02,$00,$02,$00,$02,$00,$01,$00,$01 + db $00,$20,$00,$20,$00,$40,$00,$40,$00,$40,$00,$80,$00,$80,$00,$80 + db $00,$20,$00,$20,$00,$10,$00,$10,$00,$08,$00,$0a,$00,$0c,$00,$0c + db $00,$01,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$80,$00,$80,$00,$80,$00,$80,$00,$80,$00,$4f,$00,$23,$00,$1c + db $00,$08,$00,$08,$00,$10,$00,$10,$00,$20,$00,$c0,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$01,$00,$0e,$00,$10,$00,$20,$00,$40 + db $00,$00,$00,$00,$00,$1f,$00,$e0,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$1e,$00,$fc,$00,$03,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$80,$00,$70,$00,$06,$00,$02,$00,$02 + db $00,$04,$00,$05,$00,$05,$00,$06,$00,$06,$00,$06,$00,$06,$00,$06 + db $00,$80,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$01,$00,$01,$00,$01,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$01,$00,$01,$00,$01,$00,$01,$00,$81,$00,$81,$00,$81,$00,$81 + db $00,$06,$00,$06,$00,$06,$00,$06,$00,$06,$00,$06,$00,$04,$00,$18 + db $00,$00,$00,$00,$00,$02,$00,$02,$00,$02,$00,$02,$00,$02,$00,$02 + db $00,$40,$00,$40,$00,$40,$00,$c0,$00,$c0,$00,$c0,$00,$40,$00,$40 + db $00,$41,$00,$41,$00,$41,$00,$41,$00,$41,$00,$41,$00,$21,$00,$21 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$03,$00,$16 + db $00,$10,$00,$20,$00,$20,$00,$20,$00,$40,$00,$80,$00,$00,$00,$00 + db $00,$02,$00,$02,$00,$04,$00,$04,$00,$04,$00,$08,$00,$10,$00,$60 + db $00,$40,$00,$20,$00,$20,$00,$20,$00,$00,$00,$10,$00,$00,$00,$08 + db $00,$11,$00,$11,$00,$08,$00,$08,$00,$08,$00,$04,$00,$02,$00,$02 + db $00,$16,$00,$18,$00,$18,$00,$11,$00,$1e,$00,$70,$00,$60,$00,$80 + db $00,$00,$00,$01,$00,$02,$00,$c4,$00,$38,$00,$f0,$00,$18,$00,$08 + db $00,$80,$00,$00,$00,$00,$00,$00,$00,$04,$00,$04,$00,$08,$00,$10 + db $00,$04,$00,$02,$00,$81,$00,$40,$00,$20,$00,$18,$00,$04,$00,$02 + db $00,$01,$00,$00,$00,$00,$00,$80,$00,$80,$00,$70,$00,$30,$00,$18 + db $00,$00,$00,$80,$00,$80,$00,$40,$00,$28,$00,$38,$00,$7c,$00,$a4 + db $00,$00,$00,$00,$00,$00,$00,$01,$00,$01,$00,$02,$00,$02,$00,$02 + db $00,$a0,$00,$e0,$00,$c0,$00,$c0,$00,$20,$00,$19,$00,$06,$00,$00 + db $00,$14,$00,$16,$00,$22,$00,$42,$00,$81,$00,$01,$00,$07,$00,$39 + db $00,$10,$00,$20,$00,$40,$00,$40,$00,$80,$00,$00,$00,$00,$00,$1c + 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,$78,$00,$80,$00,$00 + db $00,$15,$00,$92,$00,$4b,$00,$27,$00,$23,$00,$16,$00,$0f,$00,$0f + db $00,$42,$00,$01,$00,$01,$00,$01,$00,$00,$00,$82,$00,$91,$00,$8f + db $00,$20,$00,$20,$00,$20,$00,$a0,$00,$a0,$00,$e0,$00,$c0,$00,$c0 + db $00,$02,$00,$02,$00,$02,$00,$02,$00,$03,$00,$03,$00,$03,$00,$02 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$87 + db $00,$20,$00,$60,$00,$70,$00,$70,$00,$70,$00,$d0,$00,$d0,$00,$f0 + db $00,$02,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$80,$00,$80,$00,$40,$00,$20,$00,$1f,$00,$00,$00,$00,$00,$00 + db $00,$08,$00,$10,$00,$20,$00,$40,$00,$80,$00,$00,$00,$00,$00,$00 + db $00,$05,$00,$07,$00,$07,$00,$06,$00,$06,$00,$06,$00,$06,$00,$05 + db $00,$ff,$00,$81,$00,$41,$00,$c1,$00,$a3,$00,$e3,$00,$7d,$00,$2a + db $00,$ff,$00,$5e,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$d0,$00,$50,$00,$40,$00,$60,$00,$40,$00,$40,$00,$40,$00,$40 + db $00,$04,$00,$08,$00,$08,$00,$08,$00,$10,$00,$10,$00,$10,$00,$20 + db $00,$df,$00,$3e,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$40,$00,$40,$00,$40,$00,$40,$00,$40,$00,$40,$00,$40,$00,$40 + db $00,$20,$00,$20,$00,$20,$00,$20,$00,$20,$00,$00,$00,$00,$00,$80 + db $00,$00,$00,$40,$00,$7f,$00,$80,$00,$20,$00,$20,$00,$40,$00,$40 + db $00,$00,$00,$00,$00,$fc,$00,$0b,$00,$08,$00,$08,$00,$08,$00,$08 + db $00,$00,$00,$00,$00,$01,$00,$06,$00,$08,$00,$38,$00,$c8,$00,$08 + db $00,$1c,$00,$67,$00,$82,$00,$02,$00,$02,$00,$01,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$80 + db $00,$00,$00,$00,$00,$01,$00,$01,$00,$02,$00,$02,$00,$02,$00,$02 + db $00,$08,$00,$18,$00,$30,$00,$c0,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$20,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$04,$00,$03,$00,$02,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$80,$00,$40,$00,$3f + db $00,$40,$00,$40,$00,$30,$00,$20,$00,$10,$00,$10,$00,$08,$00,$f0 + db $00,$80,$00,$80,$00,$00,$00,$00,$00,$03,$00,$04,$00,$08,$00,$30 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$03 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$7c,$00,$03,$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,$00,$00,$00,$00,$00,$00,$00,$00,$00,$ff + db $00,$02,$00,$02,$00,$02,$00,$02,$00,$02,$00,$02,$00,$02,$00,$02 + db $00,$02,$00,$02,$00,$02,$00,$02,$00,$04,$00,$04,$00,$04,$00,$04 + db $00,$04,$00,$04,$00,$04,$00,$04,$00,$04,$00,$04,$00,$04,$00,$04 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$fc + db $00,$02,$00,$02,$00,$02,$00,$02,$00,$02,$00,$02,$00,$02,$00,$01 + db $00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$00,$01,$00,$01 + db $00,$40,$00,$40,$00,$40,$00,$40,$00,$40,$00,$40,$00,$80,$00,$80 + db $00,$02,$00,$02,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$40 +EmperorTilesEnd: + diff --git a/tarot.asm b/CardReadScreen.inc similarity index 70% rename from tarot.asm rename to CardReadScreen.inc index d7603fc..848b210 100644 --- a/tarot.asm +++ b/CardReadScreen.inc @@ -1,153 +1,8 @@ -; 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 -DEF vSafeCopyOriginalCount EQU vSafeCopyCount + 2 -; stash previous interrupt state before using the interrupts -DEF vSafeCopyLYC EQU vSafeCopyOriginalCount + 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 - - call SCENE_UPDATE - 1 - - ld b, 144 - call AwaitLine - - call SCENE_DRAW - 1 - jp Loop - +; screen variables +DEF vSelectedCardIndex EQU rMYBTNP + 1 +DEF vPreviousCardIndex EQU vSelectedCardIndex + 1 +DEF vSelectedCardInSpread EQU vPreviousCardIndex + 1 +DEF vSelectedSpreadAddress EQU vSelectedCardInSpread + 1 ;; CARD READ PAGE STARTS HERE CardReadSetup: @@ -168,13 +23,8 @@ CardReadSetup: ld hl, UITilemap ; origin ld de, $9800 ; destination ld b, 18 ; height - ld c, 20 ; width + ld c, 10 ; width call CopyTilesToMapUnsafe - - ;ld hl, FoolTiles - ;ld de, $8000 - ;ld bc, FoolTilesEnd - FoolTiles - ;call CopyRangeUnsafe ; Turn the LCD on ld a, LCDCF_BLK01 | LCDCF_ON | LCDCF_BGON @@ -184,10 +34,17 @@ CardReadSetup: ld a, %11100100 ld [rBGP], a + ld a, 0 + ldh [vSelectedCardInSpread], a + ld hl, Spreads + ld a, l + ldh [vSelectedSpreadAddress], a + ld a, h + ldh [vSelectedSpreadAddress+1], a ld a, $FF ldh [vPreviousCardIndex], a ld a, 0 - ldh [vSelectedTileIndex], a + ldh [vSelectedCardIndex], a call LoadCardData ei ret ; return from cardreadsetup @@ -196,36 +53,152 @@ CardReadUpdate: ldh a, [rMYBTNP] and a, %0000_1000 ; select the down key jp z, :+ ; skip the following code if down is not pressed - ldh a, [vSelectedTileIndex] + ldh a, [vSelectedCardIndex] inc a ; increment when they press down because the deck has card 0 at the top - ldh [vSelectedTileIndex], a + ldh [vSelectedCardIndex], a : ldh a, [rMYBTNP] and a, %0000_0100 ; select the up key jp z, :+ ; skip the following code if up is not pressed - ldh a, [vSelectedTileIndex] + ldh a, [vSelectedCardIndex] dec a ; decrement when they press up because the deck has card 0 at the top - ldh [vSelectedTileIndex], a + ldh [vSelectedCardIndex], a : - ldh a, [vSelectedTileIndex] ; load current selected tile index + ldh a, [vSelectedCardIndex] ; load current selected tile index ld hl, Cards ; deck length cp a, [hl] ; ddoes the index equal the deck length? jp nz, :+ ld a, 0 ; if the index equals the deck length replace it with zero - ldh [vSelectedTileIndex], a + ldh [vSelectedCardIndex], a : cp a, $FF ; if the tile index is $FF (underflowed from dec) jp nz, :+ ld a, [hl] dec a ;replace with deck length - 1 - ldh [vSelectedTileIndex], a + ldh [vSelectedCardIndex], a +: + + ldh a, [rMYBTNP] + and a, %0000_0010 ; select the left key + jp z, :+ ; skip the following code if left is not pressed + ldh a, [vSelectedCardInSpread] + dec a + ldh [vSelectedCardInSpread], a +: + ldh a, [rMYBTNP] + and a, %0000_0001 ; select the right key + jp z, :+ ; skip the following code if right is not pressed + ldh a, [vSelectedCardInSpread] + inc a + ldh [vSelectedCardInSpread], a +: + ldh a, [vSelectedSpreadAddress] + ld l, a + ldh a, [vSelectedSpreadAddress+1] + ld h, a ; fetch the spread length address into h + ldh a, [vSelectedCardInSpread] + cp a, [hl] ; ddoes the index equal the deck length? + jp nz, :+ + ld a, 0 ; if the index equals the deck length replace it with zero + ldh [vSelectedCardInSpread], a +: + cp a, $FF ; if the tile index is $FF (underflowed from dec) + jp nz, :+ + ld a, [hl] + dec a ;replace with deck length - 1 + ldh [vSelectedCardInSpread], a : ret CardReadDraw: -; this function mostly just refreshes the deck view on the right side -; should probably be factored out into its own thing? -; it's also not vblank-safe; this could be up to 22 iterations of a loop... +; first, we draw the spread minimap + ldh a, [vSelectedSpreadAddress] + ld c, a + ldh a, [vSelectedSpreadAddress+1] + ld b, a + ld a, [bc] + ld e, a + ld d, 0 + +CardReadDraw_FoundSpread: + push de ; length of the spread in e! +CardReadDraw_DrawCard: + ld a, e + cp a, 0 + jp z, CardReadDraw_DoneWithSpread + inc bc ; first card of spread is after the length of the spread + + ld hl, $9800 + (32*12)+11 + + ld a, [bc] + swap a + and a, %0000_1111 + ld d, 0 + ld e, a ; add a to hl + add hl, de +CardReadDraw_DoneWithWalkRight: + ld a, [bc] + and a, %0000_1111 + ld d, 0 + ld e, 32 + jp z, CardReadDraw_DoneWithWalkDown +CardReadDraw_WalkDown: + dec a + add hl, de + cp a, 0 + jp nz, CardReadDraw_WalkDown +CardReadDraw_DoneWithWalkDown: +CardReadDraw_DrawMiniCard: + ld [hl], $83 + add hl, de + ld [hl], $84 +CardReadDraw_DoneDrawingCard: + pop de + dec de + ld a, e + cp a, 0 + jp nz, CardReadDraw_FoundSpread + + + +CardReadDraw_DoneWithSpread: + ; highlight the selected card + ldh a, [vSelectedSpreadAddress] + ld l, a + ldh a, [vSelectedSpreadAddress+1] + ld h, a + + ldh a, [vSelectedCardInSpread] + ld d, 0 + ld e, a ; index of selected card in spread + inc e ; skip length + + add hl, de + ld b, h + ld c, l ; move location of selected card to bc + + ld hl, $9800 + (32*12)+11 + ld a, [bc] ; a has card location + swap a + and a, %0000_1111 + ld e, a + add hl, de ; step right + ld e, 32 + ld a, [bc] + and a, %0000_1111 + jp z, CardReadDraw_DrawSelectedCard +: + dec a + add hl, de ; step down + cp a, 0 + jp nz, :- +CardReadDraw_DrawSelectedCard: + ld [hl], $85 + add hl, de + ld [hl], $86 + + +; okay now we draw the deck minimap ld a, [Cards] srl a ; divide by two because we're drawing icons for pairs of cards ld b, a ; length of the cards data @@ -233,7 +206,7 @@ CardReadDraw: ld de, 32 ; stride CardReadDrawCopyTile: ld [hl], $81 ; load the tile for "unselected pair of tiles" - add hl, de ; step forward by stride (de is the address we're drawing to on screen) + add hl, de ; step forward by stride (hl is the address we're drawing to on screen) dec b ; sets zero flag because it's an 8-bit register jp nz, CardReadDrawCopyTile ; repeat if there's more cards in the deck to draw ld [hl], $87 ; draw the cap at the end @@ -241,7 +214,7 @@ CardReadDrawCopyTile: ; the rest of this stuff deals with drawing the set-out card for the current ; selected card CardReadDrawSelectedTile: - ldh a, [vSelectedTileIndex] + ldh a, [vSelectedCardIndex] srl a ld b, a ld hl, $9800+32*4+19 ; start point @@ -254,7 +227,7 @@ CardReadDrawCountDownTile: dec b jp nz, CardReadDrawCountDownTile CardReadDrawDrawSelectedTile: - ldh a, [vSelectedTileIndex] + ldh a, [vSelectedCardIndex] and a, 1 ; if we're on an odd tile, draw the tile with the top card selected. ; no other tile needs to change. @@ -272,7 +245,7 @@ CardReadDrawDrawSelectedTile: CardReadDrawReturn: ; check if the current selected tile is different from the previous; ; if it is different, then load new card data - ldh a, [vSelectedTileIndex] + ldh a, [vSelectedCardIndex] ld hl, vPreviousCardIndex cp a, [hl] call nz, LoadCardData ; only load new card data if the selected card has changed @@ -282,12 +255,12 @@ CardReadTeardown: ret LoadCardData: - ld a, [vSelectedTileIndex] + ld a, [vSelectedCardIndex] ld [vPreviousCardIndex], a ld b, 144 call AwaitLine ; wait for vblank before starting to work - ld a, [vSelectedTileIndex] + ld a, [vSelectedCardIndex] 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 @@ -381,84 +354,8 @@ WaitForSafeCopy2: 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 - INCLUDE "CopyRangeSafe.inc" -CopyTilesToMapUnsafe: - ; 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, [hl] ; load from the tile map into a - ld [de], 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, e - add a, 32 - ld e, a - ld a, d - adc a, 0 - ld d, a - ld a, e - sub a, c - ld e, a - ld a, d - sbc a, 0 - ld d, a - - dec b - ld a, b - cp a, 0 - jp nz, CopyTilesToMapUnsafe - ret INCLUDE "CopyTilesSafe.inc" @@ -466,19 +363,26 @@ INCLUDE "CopyTilesSafe.inc" SECTION "Card Data", ROM0 Cards: - db 3 + db 5 dw TheFool dw TheMagician dw TheHighPriestess + dw TheEmpress + dw TheEmperor INCLUDE "00TheFool.inc" INCLUDE "01TheMagician.inc" INCLUDE "02TheHighPriestess.inc" +INCLUDE "03TheEmpress.inc" +INCLUDE "04TheEmperor.inc" SECTION "Tile data", ROM0 Spreads: - + db 10, $00, $10, $20, $30, $40, $02, $12, $22, $32, $42 + db 5, $11, $20, $22, $31, $41 + db 3, $11, $21, $31 + 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 @@ -657,22 +561,22 @@ 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 + db $8b, $8d, $8d, $8d, $8d, $8d, $8d, $8d, $8d, $8a + db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 + db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 + db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 + db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 + db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 + db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 + db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 + db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 + db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 + db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 + db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 + db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 + db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 + db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 + db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 + db $8e, $80, $80, $80, $80, $80, $80, $80, $80, $89 + db $8c, $8f, $8f, $8f, $8f, $8f, $8f, $8f, $8f, $88 UITilemapEnd: diff --git a/CopyRangeSafe.inc b/CopyRangeSafe.inc index 7117817..5f7015c 100644 --- a/CopyRangeSafe.inc +++ b/CopyRangeSafe.inc @@ -1,3 +1,15 @@ +; variables for safe transfer async function +DEF vSafeCopySource EQU INTERRUPT_LCD + 3 +DEF vSafeCopyDest EQU vSafeCopySource + 2 +DEF vSafeCopyCount EQU vSafeCopyDest + 2 ; check this for safe transfer being complete +DEF vSafeCopyOriginalCount EQU vSafeCopyCount + 2 +; stash previous interrupt state before using the interrupts +DEF vSafeCopyLYC EQU vSafeCopyOriginalCount + 2 ; stashes $FF45, the LYC register +DEF vSafeCopySTAT EQU vSafeCopyLYC + 1 ; stashes $FF41, the STAT register +DEF vSafeCopyInterrupt EQU vSafeCopySTAT + 1 ; stashes the previous LCD interrupt +DEF vSafeCopyInterruptEnable EQU vSafeCopyInterrupt + 2 ; stashes $FFFF, which interrupts are enabled + + CopyRangeSafe: ; hl is source ; de is destination @@ -32,9 +44,9 @@ CopyRangeSafe: 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 the current STAT interrupt handler + ld [vSafeCopyInterrupt], a + ld a, [INTERRUPT_LCD+1] + ld [vSafeCopyInterrupt+1], a ; stashes the current STAT interrupt handler ld a, [$ffff] and a, %0000_0010 ld [vSafeCopyInterruptEnable], a ; stashes whether LCD interrupt are enabled @@ -174,9 +186,9 @@ CopyRangeSafe_Done: ; called when the complete transfer is finished, ldh [$ff41], a ldh a, [vSafeCopyLYC] ldh [$ff45], a - ldh a, [vSafeCopyInterruptFirst] + ldh a, [vSafeCopyInterrupt] ld [INTERRUPT_LCD], a - ldh a, [vSafeCopyInterruptSecond] + ldh a, [vSafeCopyInterrupt+1] ldh [INTERRUPT_LCD+1], a ld hl, $ffff @@ -193,3 +205,16 @@ CopyRangeSafe_Done: ; called when the complete transfer is finished, CopyRangeSafe_Return: reti + +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 \ No newline at end of file diff --git a/CopyTilesSafe.inc b/CopyTilesSafe.inc index 5d03aa8..4ac4614 100644 --- a/CopyTilesSafe.inc +++ b/CopyTilesSafe.inc @@ -28,9 +28,9 @@ CopyTilesSafe: 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 the current STAT interrupt handler + ld [vSafeCopyInterrupt], a + ld a, [INTERRUPT_LCD+1] + ld [vSafeCopyInterrupt+1], a ; stashes the current STAT interrupt handler ld a, [$ffff] and a, %0000_0010 ld [vSafeCopyInterruptEnable], a ; stashes whether LCD interrupt are enabled @@ -191,9 +191,9 @@ CopyTilesSafe_Done: ; called when the complete transfer is finished, ldh [$ff41], a ldh a, [vSafeCopyLYC] ldh [$ff45], a - ldh a, [vSafeCopyInterruptFirst] + ldh a, [vSafeCopyInterrupt] ld [INTERRUPT_LCD], a - ldh a, [vSafeCopyInterruptSecond] + ldh a, [vSafeCopyInterrupt+1] ldh [INTERRUPT_LCD+1], a ld hl, $ffff @@ -210,3 +210,41 @@ CopyTilesSafe_Done: ; called when the complete transfer is finished, CopyTilesSafe_Return: reti + + +CopyTilesToMapUnsafe: + ; 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, [hl] ; load from the tile map into a + ld [de], 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, e + add a, 32 + ld e, a + ld a, d + adc a, 0 + ld d, a + ld a, e + sub a, c + ld e, a + ld a, d + sbc a, 0 + ld d, a + + dec b + ld a, b + cp a, 0 + jp nz, CopyTilesToMapUnsafe + ret \ No newline at end of file diff --git a/KeyArtTiles.asm b/KeyArtTiles.asm deleted file mode 100644 index 8485e0f..0000000 --- a/KeyArtTiles.asm +++ /dev/null @@ -1,120 +0,0 @@ - ; original export script by gabriel reis, modified by shoofle - - -KeyArtTiles: - - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$ff,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$04 - db $00,$3f,$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,$f8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$40,$00,$ff,$00,$42,$00,$42,$00,$42,$00,$42,$00,$42 - db $00,$42,$00,$42,$00,$42,$00,$42,$00,$42,$00,$42,$00,$42,$00,$42 - db $10,$00,$00,$10,$00,$10,$80,$10,$40,$10,$40,$10,$20,$18,$10,$28 - db $00,$28,$00,$28,$00,$24,$00,$24,$00,$e4,$00,$22,$00,$a2,$00,$41 - db $00,$00,$00,$00,$00,$01,$00,$06,$00,$99,$00,$20,$00,$00,$00,$fc - db $00,$40,$00,$c0,$00,$20,$00,$60,$00,$60,$00,$60,$00,$50,$00,$50 - db $00,$07,$00,$00,$00,$00,$00,$00,$00,$ff,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$c2,$00,$62,$00,$52,$00,$8a,$00,$06,$00,$02,$00,$02 - db $00,$48,$00,$44,$00,$43,$00,$40,$00,$40,$00,$5f,$00,$20,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$c0,$00,$30,$00,$88,$00,$08,$00,$04 - db $00,$03,$00,$03,$00,$01,$00,$01,$00,$01,$00,$03,$00,$03,$00,$06 - db $00,$04,$00,$04,$00,$02,$00,$02,$00,$02,$00,$02,$00,$04,$00,$18 - db $00,$08,$00,$10,$00,$20,$00,$20,$00,$40,$00,$80,$00,$80,$00,$80 - db $00,$00,$00,$03,$00,$04,$00,$04,$00,$04,$00,$04,$00,$03,$00,$00 - db $00,$20,$00,$c0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8 - 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,$78,$00,$06,$00,$01,$00,$00 - db $00,$31,$00,$31,$00,$11,$00,$11,$00,$11,$00,$11,$00,$11,$00,$91 - db $00,$07,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$e0,$00,$1f,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$9f,$00,$60,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$81,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $41,$00,$20,$00,$10,$00,$08,$00,$04,$00,$02,$00,$01,$00,$00,$01 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$7e,$00,$81,$00,$01 - db $00,$42,$00,$44,$00,$44,$00,$22,$00,$21,$00,$18,$00,$06,$00,$01 - db $00,$82,$00,$82,$00,$05,$00,$08,$00,$f0,$00,$80,$00,$00,$00,$00 - db $00,$10,$80,$10,$80,$10,$80,$10,$00,$30,$00,$1f,$00,$78,$00,$94 - db $02,$08,$01,$08,$00,$08,$00,$08,$00,$08,$00,$e8,$00,$1f,$00,$08 - db $01,$00,$00,$00,$80,$00,$40,$00,$20,$00,$10,$00,$08,$80,$04,$40 - db $80,$06,$80,$08,$80,$10,$40,$10,$40,$10,$20,$10,$20,$10,$10,$00 - db $02,$30,$01,$08,$00,$04,$00,$02,$00,$02,$00,$01,$00,$00,$00,$80 - db $08,$04,$04,$00,$80,$04,$40,$04,$00,$04,$00,$08,$00,$88,$00,$88 - db $00,$00,$00,$80,$00,$80,$00,$80,$00,$80,$00,$80,$00,$80,$00,$41 - db $00,$80,$00,$40,$00,$40,$00,$40,$00,$40,$00,$40,$00,$41,$00,$41 - db $00,$88,$00,$88,$00,$88,$00,$88,$00,$88,$00,$88,$20,$08,$10,$08 - db $00,$80,$00,$40,$00,$20,$00,$18,$00,$07,$00,$00,$00,$00,$00,$00 - db $00,$08,$00,$e8,$00,$30,$00,$c0,$00,$00,$00,$02,$00,$01,$00,$00 - db $08,$00,$00,$08,$00,$88,$00,$48,$00,$28,$00,$78,$00,$98,$00,$88 - db $00,$f8,$00,$a8,$00,$a8,$00,$a8,$00,$a8,$00,$a8,$00,$a9,$00,$a9 - db $00,$29,$00,$31,$00,$31,$00,$31,$00,$31,$00,$31,$00,$31,$00,$31 - db $00,$28,$00,$24,$00,$24,$00,$24,$00,$24,$00,$27,$00,$27,$00,$2e - db $00,$2d,$00,$26,$00,$25,$00,$25,$00,$25,$00,$25,$00,$25,$00,$25 - db $00,$25,$00,$25,$00,$25,$00,$25,$00,$15,$00,$15,$00,$15,$00,$15 - db $00,$15,$00,$15,$00,$15,$00,$15,$00,$11,$00,$02,$00,$02,$00,$02 - db $00,$02,$00,$02,$00,$02,$00,$04,$00,$04,$00,$08,$00,$08,$00,$00 - db $00,$a9,$00,$a9,$00,$a9,$00,$a9,$00,$a9,$00,$a9,$00,$a9,$00,$a9 - db $02,$00,$02,$00,$80,$03,$40,$04,$20,$08,$00,$10,$00,$10,$00,$10 - db $01,$00,$00,$00,$00,$e0,$00,$10,$00,$10,$00,$08,$00,$08,$0c,$00 - db $00,$0b,$00,$08,$00,$04,$00,$03,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$01,$00,$03,$00,$0c,$01,$f4,$00,$04 - db $00,$04,$00,$04,$00,$24,$00,$24,$02,$24,$02,$24,$01,$24,$01,$24 - db $00,$78,$00,$80,$00,$00,$00,$60,$00,$18,$00,$07,$00,$00,$00,$00 - db $00,$60,$00,$1c,$00,$03,$00,$00,$00,$01,$00,$fe,$00,$00,$00,$00 - db $02,$40,$01,$20,$00,$f8,$00,$78,$00,$88,$00,$08,$00,$08,$00,$10 - db $08,$20,$06,$40,$01,$80,$10,$00,$08,$00,$04,$00,$02,$00,$81,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$1f,$00,$e7 - db $00,$00,$00,$00,$00,$00,$00,$07,$00,$00,$00,$00,$00,$fe,$00,$81 - db $00,$20,$00,$40,$00,$80,$00,$00,$00,$00,$00,$00,$04,$00,$04,$80 - db $00,$00,$00,$02,$00,$02,$00,$02,$00,$02,$00,$02,$00,$02,$00,$06 - db $00,$22,$00,$22,$00,$22,$00,$22,$00,$22,$00,$02,$00,$02,$00,$02 - db $00,$02,$00,$02,$00,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $02,$28,$02,$28,$01,$28,$00,$28,$00,$28,$00,$28,$00,$28,$00,$28 - db $00,$0a,$00,$0a,$00,$0a,$00,$0a,$00,$0a,$00,$0a,$00,$0a,$00,$0a - db $00,$12,$00,$12,$00,$12,$00,$22,$00,$22,$00,$22,$00,$22,$00,$22 - db $00,$22,$00,$22,$00,$22,$00,$22,$00,$22,$00,$22,$00,$22,$00,$22 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$7f,$00,$00 - db $00,$0c,$00,$18,$80,$0c,$40,$0b,$20,$04,$10,$04,$08,$02,$00,$02 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$ff,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$fc,$00,$00,$00,$00,$00,$00 - db $00,$01,$a0,$00,$70,$00,$10,$00,$08,$00,$04,$00,$02,$00,$01,$00 - db $00,$00,$00,$80,$00,$80,$00,$40,$00,$3f,$00,$04,$00,$04,$00,$04 - db $00,$80,$00,$40,$00,$20,$00,$18,$00,$06,$00,$01,$00,$00,$00,$03 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$80,$00,$3f,$00,$c0 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$f8,$00,$00,$00,$00 - db $00,$04,$80,$04,$80,$04,$40,$04,$20,$04,$20,$04,$10,$04,$10,$04 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$ff,$00,$00,$00,$84,$00,$44 - db $00,$48,$00,$88,$00,$88,$00,$88,$00,$88,$00,$88,$00,$08,$00,$08 - db $00,$44,$00,$44,$00,$44,$00,$44,$00,$44,$00,$44,$00,$44,$00,$44 - db $00,$08,$00,$08,$00,$08,$00,$08,$00,$08,$00,$08,$00,$08,$00,$08 - db $00,$08,$00,$08,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$00,$02,$00,$0c,$00,$10 - db $00,$00,$00,$00,$00,$00,$00,$78,$00,$86,$00,$01,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$fc,$00,$02,$00,$01 - db $00,$28,$00,$28,$00,$28,$00,$28,$00,$28,$00,$28,$08,$20,$04,$28 - db $00,$00,$01,$00,$00,$00,$00,$00,$40,$00,$20,$00,$10,$00,$08,$00 - db $04,$00,$03,$00,$c0,$00,$20,$00,$10,$00,$10,$00,$08,$00,$04,$00 - db $02,$00,$01,$00,$80,$00,$40,$00,$20,$00,$20,$00,$18,$00,$06,$00 - db $00,$00,$80,$00,$40,$00,$20,$00,$10,$00,$08,$00,$04,$00,$04,$00 - - - -BackgroundCopy: - db $00, $00, $57, $58, $59, $00, $00, $00 - db $3e, $3f, $40, $5b, $5e, $4e, $4f, $50 - db $3a, $3b, $3c, $5c, $5d, $49, $4a, $4b - db $48, $38, $3d, $35, $36, $4c, $4d, $52 - db $41, $39, $1d, $21, $22, $23, $51, $54 - db $45, $5a, $24, $37, $2b, $25, $26, $54 - db $46, $44, $09, $27, $1e, $28, $29, $54 - db $47, $2f, $0a, $1f, $0b, $20, $2c, $54 - db $47, $30, $0c, $2a, $0d, $0e, $2d, $53 - db $47, $31, $0f, $10, $00, $11, $34, $55 - db $47, $32, $00, $12, $00, $13, $2e, $55 - db $42, $33, $14, $15, $16, $17, $18, $55 - db $43, $00, $00, $19, $1a, $1b, $1c, $56 - db $00, $00, $01, $02, $07, $02, $00, $00 - db $00, $00, $00, $00, $08, $03, $00, $00 - db $00, $00, $00, $04, $05, $06, $00, $00 diff --git a/hardware.inc b/hardware.inc new file mode 100644 index 0000000..6eab876 --- /dev/null +++ b/hardware.inc @@ -0,0 +1,1114 @@ +;* +;* Gameboy Hardware definitions +;* https://github.com/gbdev/hardware.inc +;* +;* Based on Jones' hardware.inc +;* And based on Carsten Sorensen's ideas. +;* +;* To the extent possible under law, the authors of this work have +;* waived all copyright and related or neighboring rights to the work. +;* See https://creativecommons.org/publicdomain/zero/1.0/ for details. +;* +;* SPDX-License-Identifier: CC0-1.0 +;* +;* Rev 1.1 - 15-Jul-97 : Added define check +;* Rev 1.2 - 18-Jul-97 : Added revision check macro +;* Rev 1.3 - 19-Jul-97 : Modified for RGBASM V1.05 +;* Rev 1.4 - 27-Jul-97 : Modified for new subroutine prefixes +;* Rev 1.5 - 15-Aug-97 : Added _HRAM, PAD, CART defines +;* : and Nintendo Logo +;* Rev 1.6 - 30-Nov-97 : Added rDIV, rTIMA, rTMA, & rTAC +;* Rev 1.7 - 31-Jan-98 : Added _SCRN0, _SCRN1 +;* Rev 1.8 - 15-Feb-98 : Added rSB, rSC +;* Rev 1.9 - 16-Feb-98 : Converted I/O registers to $FFXX format +;* Rev 2.0 - : Added GBC registers +;* Rev 2.1 - : Added MBC5 & cart RAM enable/disable defines +;* Rev 2.2 - : Fixed NR42,NR43, & NR44 equates +;* Rev 2.3 - : Fixed incorrect _HRAM equate +;* Rev 2.4 - 27-Apr-13 : Added some cart defines (AntonioND) +;* Rev 2.5 - 03-May-15 : Fixed format (AntonioND) +;* Rev 2.6 - 09-Apr-16 : Added GBC OAM and cart defines (AntonioND) +;* Rev 2.7 - 19-Jan-19 : Added rPCMXX (ISSOtm) +;* Rev 2.8 - 03-Feb-19 : Added audio registers flags (Álvaro Cuesta) +;* Rev 2.9 - 28-Feb-20 : Added utility rP1 constants +;* Rev 3.0 - 27-Aug-20 : Register ordering, byte-based sizes, OAM additions, general cleanup (Blitter Object) +;* Rev 4.0 - 03-May-21 : Updated to use RGBDS 0.5.0 syntax, changed IEF_LCDC to IEF_STAT (Eievui) +;* Rev 4.1 - 16-Aug-21 : Added more flags, bit number defines, and offset constants for OAM and window positions (rondnelson99) +;* Rev 4.2 - 04-Sep-21 : Added CH3- and CH4-specific audio registers flags (ISSOtm) +;* Rev 4.3 - 07-Nov-21 : Deprecate VRAM address constants (Eievui) +;* Rev 4.4 - 11-Jan-22 : Deprecate VRAM CART_SRAM_2KB constant (avivace) +;* Rev 4.5 - 03-Mar-22 : Added bit number definitions for OCPS, BCPS and LCDC (sukus) +;* Rev 4.6 - 15-Jun-22 : Added MBC3 registers and special values +;* Rev 4.7.0 - 27-Jun-22 : Added alternate names for some constants +;* Rev 4.7.1 - 05-Jul-22 : Added RPB_LED_ON constant +;* Rev 4.8.0 - 25-Oct-22 : Changed background addressing constants (zlago) +;* Rev 4.8.1 - 29-Apr-23 : Added rOPRI (rbong) +;* Rev 4.9.0 - 24-Jun-23 : Added definitions for interrupt vectors (sukus) +;* Rev 4.9.1 - 11-Sep-23 : Added repository link and CC0 waiver notice +;* Rev 4.9.2 - 18-Aug-24 : Corrected CART_ROM_MBC5_BAT to CART_ROM_MBC5_RAM (DevEd) + + +; NOTE: REVISION NUMBER CHANGES MUST BE REFLECTED +; IN `rev_Check_hardware_inc` BELOW! + +IF __RGBDS_MAJOR__ == 0 && __RGBDS_MINOR__ < 5 + FAIL "This version of 'hardware.inc' requires RGBDS version 0.5.0 or later." +ENDC + +; If all of these are already defined, don't do it again. + + IF !DEF(HARDWARE_INC) +DEF HARDWARE_INC EQU 1 + +; Usage: rev_Check_hardware_inc +; Examples: rev_Check_hardware_inc 4.1.2 +; rev_Check_hardware_inc 4.1 (equivalent to 4.1.0) +; rev_Check_hardware_inc 4 (equivalent to 4.0.0) +MACRO rev_Check_hardware_inc + DEF CUR_VER equs "4,9,2" ; ** UPDATE THIS LINE WHEN CHANGING THE REVISION NUMBER ** + + DEF MIN_VER equs STRRPL("\1", ".", ",") + DEF INTERNAL_CHK equs """MACRO ___internal + IF \\1 != \\4 || \\2 < \\5 || (\\2 == \\5 && \\3 < \\6) + FAIL "Version \\1.\\2.\\3 of 'hardware.inc' is incompatible with requested version \\4.\\5.\\6" + ENDC +\nENDM""" + INTERNAL_CHK + ___internal {CUR_VER}, {MIN_VER},0,0 + PURGE CUR_VER, MIN_VER, INTERNAL_CHK, ___internal +ENDM + + +;*************************************************************************** +;* +;* General memory region constants +;* +;*************************************************************************** + +DEF _VRAM EQU $8000 ; $8000->$9FFF +DEF _SCRN0 EQU $9800 ; $9800->$9BFF +DEF _SCRN1 EQU $9C00 ; $9C00->$9FFF +DEF _SRAM EQU $A000 ; $A000->$BFFF +DEF _RAM EQU $C000 ; $C000->$CFFF / $C000->$DFFF +DEF _RAMBANK EQU $D000 ; $D000->$DFFF +DEF _OAMRAM EQU $FE00 ; $FE00->$FE9F +DEF _IO EQU $FF00 ; $FF00->$FF7F,$FFFF +DEF _AUD3WAVERAM EQU $FF30 ; $FF30->$FF3F +DEF _HRAM EQU $FF80 ; $FF80->$FFFE + + +;*************************************************************************** +;* +;* MBC registers +;* +;*************************************************************************** + +; *** Common *** + +; -- +; -- RAMG ($0000-$1FFF) +; -- Controls whether access to SRAM (and the MBC3 RTC registers) is allowed (W) +; -- +DEF rRAMG EQU $0000 + +DEF CART_SRAM_ENABLE EQU $0A +DEF CART_SRAM_DISABLE EQU $00 + + +; -- +; -- ROMB0 ($2000-$3FFF) +; -- Selects which ROM bank is mapped to the ROMX space ($4000-$7FFF) (W) +; -- +; -- The range of accepted values, as well as the behavior of writing $00, +; -- varies depending on the MBC. +; -- +DEF rROMB0 EQU $2000 + +; -- +; -- RAMB ($4000-$5FFF) +; -- Selects which SRAM bank is mapped to the SRAM space ($A000-$BFFF) (W) +; -- +; -- The range of accepted values varies depending on the cartridge configuration. +; -- +DEF rRAMB EQU $4000 + + +; *** MBC3-specific registers *** + +; Write one of these to rRAMG to map the corresponding RTC register to all SRAM space +DEF RTC_S EQU $08 ; Seconds (0-59) +DEF RTC_M EQU $09 ; Minutes (0-59) +DEF RTC_H EQU $0A ; Hours (0-23) +DEF RTC_DL EQU $0B ; Lower 8 bits of Day Counter ($00-$FF) +DEF RTC_DH EQU $0C ; Bit 7 - Day Counter Carry Bit (1=Counter Overflow) + ; Bit 6 - Halt (0=Active, 1=Stop Timer) + ; Bit 0 - Most significant bit of Day Counter (Bit 8) + + +; -- +; -- RTCLATCH ($6000-$7FFF) +; -- Write $00 then $01 to latch the current time into the RTC registers (W) +; -- +DEF rRTCLATCH EQU $6000 + + +; *** MBC5-specific register *** + +; -- +; -- ROMB1 ($3000-$3FFF) +; -- A 9th bit that "extends" ROMB0 if more than 256 banks are present (W) +; -- +; -- Also note that rROMB0 thus only spans $2000-$2FFF. +; -- +DEF rROMB1 EQU $3000 + + +; Bit 3 of RAMB enables the rumble motor (if any) +DEF CART_RUMBLE_ON EQU 1 << 3 + + +;*************************************************************************** +;* +;* Memory-mapped registers +;* +;*************************************************************************** + +; -- +; -- P1 ($FF00) +; -- Register for reading joy pad info. (R/W) +; -- +DEF rP1 EQU $FF00 + +DEF P1F_5 EQU %00100000 ; P15 out port, set to 0 to get buttons +DEF P1F_4 EQU %00010000 ; P14 out port, set to 0 to get dpad +DEF P1F_3 EQU %00001000 ; P13 in port +DEF P1F_2 EQU %00000100 ; P12 in port +DEF P1F_1 EQU %00000010 ; P11 in port +DEF P1F_0 EQU %00000001 ; P10 in port + +DEF P1F_GET_DPAD EQU P1F_5 +DEF P1F_GET_BTN EQU P1F_4 +DEF P1F_GET_NONE EQU P1F_4 | P1F_5 + + +; -- +; -- SB ($FF01) +; -- Serial Transfer Data (R/W) +; -- +DEF rSB EQU $FF01 + + +; -- +; -- SC ($FF02) +; -- Serial I/O Control (R/W) +; -- +DEF rSC EQU $FF02 + +DEF SCF_START EQU %10000000 ; Transfer Start Flag (1=Transfer in progress, or requested) +DEF SCF_SPEED EQU %00000010 ; Clock Speed (0=Normal, 1=Fast) ** CGB Mode Only ** +DEF SCF_SOURCE EQU %00000001 ; Shift Clock (0=External Clock, 1=Internal Clock) + +DEF SCB_START EQU 7 +DEF SCB_SPEED EQU 1 +DEF SCB_SOURCE EQU 0 + +; -- +; -- DIV ($FF04) +; -- Divider register (R/W) +; -- +DEF rDIV EQU $FF04 + + +; -- +; -- TIMA ($FF05) +; -- Timer counter (R/W) +; -- +DEF rTIMA EQU $FF05 + + +; -- +; -- TMA ($FF06) +; -- Timer modulo (R/W) +; -- +DEF rTMA EQU $FF06 + + +; -- +; -- TAC ($FF07) +; -- Timer control (R/W) +; -- +DEF rTAC EQU $FF07 + +DEF TACF_START EQU %00000100 +DEF TACF_STOP EQU %00000000 +DEF TACF_4KHZ EQU %00000000 +DEF TACF_16KHZ EQU %00000011 +DEF TACF_65KHZ EQU %00000010 +DEF TACF_262KHZ EQU %00000001 + +DEF TACB_START EQU 2 + + +; -- +; -- IF ($FF0F) +; -- Interrupt Flag (R/W) +; -- +DEF rIF EQU $FF0F + + +; -- +; -- AUD1SWEEP/NR10 ($FF10) +; -- Sweep register (R/W) +; -- +; -- Bit 6-4 - Sweep Time +; -- Bit 3 - Sweep Increase/Decrease +; -- 0: Addition (frequency increases???) +; -- 1: Subtraction (frequency increases???) +; -- Bit 2-0 - Number of sweep shift (# 0-7) +; -- Sweep Time: (n*7.8ms) +; -- +DEF rNR10 EQU $FF10 +DEF rAUD1SWEEP EQU rNR10 + +DEF AUD1SWEEP_UP EQU %00000000 +DEF AUD1SWEEP_DOWN EQU %00001000 + + +; -- +; -- AUD1LEN/NR11 ($FF11) +; -- Sound length/Wave pattern duty (R/W) +; -- +; -- Bit 7-6 - Wave Pattern Duty (00:12.5% 01:25% 10:50% 11:75%) +; -- Bit 5-0 - Sound length data (# 0-63) +; -- +DEF rNR11 EQU $FF11 +DEF rAUD1LEN EQU rNR11 + + +; -- +; -- AUD1ENV/NR12 ($FF12) +; -- Envelope (R/W) +; -- +; -- Bit 7-4 - Initial value of envelope +; -- Bit 3 - Envelope UP/DOWN +; -- 0: Decrease +; -- 1: Range of increase +; -- Bit 2-0 - Number of envelope sweep (# 0-7) +; -- +DEF rNR12 EQU $FF12 +DEF rAUD1ENV EQU rNR12 + + +; -- +; -- AUD1LOW/NR13 ($FF13) +; -- Frequency low byte (W) +; -- +DEF rNR13 EQU $FF13 +DEF rAUD1LOW EQU rNR13 + + +; -- +; -- AUD1HIGH/NR14 ($FF14) +; -- Frequency high byte (W) +; -- +; -- Bit 7 - Initial (when set, sound restarts) +; -- Bit 6 - Counter/consecutive selection +; -- Bit 2-0 - Frequency's higher 3 bits +; -- +DEF rNR14 EQU $FF14 +DEF rAUD1HIGH EQU rNR14 + + +; -- +; -- AUD2LEN/NR21 ($FF16) +; -- Sound Length; Wave Pattern Duty (R/W) +; -- +; -- see AUD1LEN for info +; -- +DEF rNR21 EQU $FF16 +DEF rAUD2LEN EQU rNR21 + + +; -- +; -- AUD2ENV/NR22 ($FF17) +; -- Envelope (R/W) +; -- +; -- see AUD1ENV for info +; -- +DEF rNR22 EQU $FF17 +DEF rAUD2ENV EQU rNR22 + + +; -- +; -- AUD2LOW/NR23 ($FF18) +; -- Frequency low byte (W) +; -- +DEF rNR23 EQU $FF18 +DEF rAUD2LOW EQU rNR23 + + +; -- +; -- AUD2HIGH/NR24 ($FF19) +; -- Frequency high byte (W) +; -- +; -- see AUD1HIGH for info +; -- +DEF rNR24 EQU $FF19 +DEF rAUD2HIGH EQU rNR24 + + +; -- +; -- AUD3ENA/NR30 ($FF1A) +; -- Sound on/off (R/W) +; -- +; -- Bit 7 - Sound ON/OFF (1=ON,0=OFF) +; -- +DEF rNR30 EQU $FF1A +DEF rAUD3ENA EQU rNR30 + +DEF AUD3ENA_OFF EQU %00000000 +DEF AUD3ENA_ON EQU %10000000 + + +; -- +; -- AUD3LEN/NR31 ($FF1B) +; -- Sound length (R/W) +; -- +; -- Bit 7-0 - Sound length +; -- +DEF rNR31 EQU $FF1B +DEF rAUD3LEN EQU rNR31 + + +; -- +; -- AUD3LEVEL/NR32 ($FF1C) +; -- Select output level +; -- +; -- Bit 6-5 - Select output level +; -- 00: 0/1 (mute) +; -- 01: 1/1 +; -- 10: 1/2 +; -- 11: 1/4 +; -- +DEF rNR32 EQU $FF1C +DEF rAUD3LEVEL EQU rNR32 + +DEF AUD3LEVEL_MUTE EQU %00000000 +DEF AUD3LEVEL_100 EQU %00100000 +DEF AUD3LEVEL_50 EQU %01000000 +DEF AUD3LEVEL_25 EQU %01100000 + + +; -- +; -- AUD3LOW/NR33 ($FF1D) +; -- Frequency low byte (W) +; -- +; -- see AUD1LOW for info +; -- +DEF rNR33 EQU $FF1D +DEF rAUD3LOW EQU rNR33 + + +; -- +; -- AUD3HIGH/NR34 ($FF1E) +; -- Frequency high byte (W) +; -- +; -- see AUD1HIGH for info +; -- +DEF rNR34 EQU $FF1E +DEF rAUD3HIGH EQU rNR34 + + +; -- +; -- AUD4LEN/NR41 ($FF20) +; -- Sound length (R/W) +; -- +; -- Bit 5-0 - Sound length data (# 0-63) +; -- +DEF rNR41 EQU $FF20 +DEF rAUD4LEN EQU rNR41 + + +; -- +; -- AUD4ENV/NR42 ($FF21) +; -- Envelope (R/W) +; -- +; -- see AUD1ENV for info +; -- +DEF rNR42 EQU $FF21 +DEF rAUD4ENV EQU rNR42 + + +; -- +; -- AUD4POLY/NR43 ($FF22) +; -- Polynomial counter (R/W) +; -- +; -- Bit 7-4 - Selection of the shift clock frequency of the (scf) +; -- polynomial counter (0000-1101) +; -- freq=drf*1/2^scf (not sure) +; -- Bit 3 - Selection of the polynomial counter's step +; -- 0: 15 steps +; -- 1: 7 steps +; -- Bit 2-0 - Selection of the dividing ratio of frequencies (drf) +; -- 000: f/4 001: f/8 010: f/16 011: f/24 +; -- 100: f/32 101: f/40 110: f/48 111: f/56 (f=4.194304 Mhz) +; -- +DEF rNR43 EQU $FF22 +DEF rAUD4POLY EQU rNR43 + +DEF AUD4POLY_15STEP EQU %00000000 +DEF AUD4POLY_7STEP EQU %00001000 + + +; -- +; -- AUD4GO/NR44 ($FF23) +; -- +; -- Bit 7 - Initial (when set, sound restarts) +; -- Bit 6 - Counter/consecutive selection +; -- +DEF rNR44 EQU $FF23 +DEF rAUD4GO EQU rNR44 + + +; -- +; -- AUDVOL/NR50 ($FF24) +; -- Channel control / ON-OFF / Volume (R/W) +; -- +; -- Bit 7 - Vin->SO2 ON/OFF (left) +; -- Bit 6-4 - SO2 output level (left speaker) (# 0-7) +; -- Bit 3 - Vin->SO1 ON/OFF (right) +; -- Bit 2-0 - SO1 output level (right speaker) (# 0-7) +; -- +DEF rNR50 EQU $FF24 +DEF rAUDVOL EQU rNR50 + +DEF AUDVOL_VIN_LEFT EQU %10000000 ; SO2 +DEF AUDVOL_VIN_RIGHT EQU %00001000 ; SO1 + + +; -- +; -- AUDTERM/NR51 ($FF25) +; -- Selection of Sound output terminal (R/W) +; -- +; -- Bit 7 - Output channel 4 to SO2 terminal (left) +; -- Bit 6 - Output channel 3 to SO2 terminal (left) +; -- Bit 5 - Output channel 2 to SO2 terminal (left) +; -- Bit 4 - Output channel 1 to SO2 terminal (left) +; -- Bit 3 - Output channel 4 to SO1 terminal (right) +; -- Bit 2 - Output channel 3 to SO1 terminal (right) +; -- Bit 1 - Output channel 2 to SO1 terminal (right) +; -- Bit 0 - Output channel 1 to SO1 terminal (right) +; -- +DEF rNR51 EQU $FF25 +DEF rAUDTERM EQU rNR51 + +; SO2 +DEF AUDTERM_4_LEFT EQU %10000000 +DEF AUDTERM_3_LEFT EQU %01000000 +DEF AUDTERM_2_LEFT EQU %00100000 +DEF AUDTERM_1_LEFT EQU %00010000 +; SO1 +DEF AUDTERM_4_RIGHT EQU %00001000 +DEF AUDTERM_3_RIGHT EQU %00000100 +DEF AUDTERM_2_RIGHT EQU %00000010 +DEF AUDTERM_1_RIGHT EQU %00000001 + + +; -- +; -- AUDENA/NR52 ($FF26) +; -- Sound on/off (R/W) +; -- +; -- Bit 7 - All sound on/off (sets all audio regs to 0!) +; -- Bit 3 - Sound 4 ON flag (read only) +; -- Bit 2 - Sound 3 ON flag (read only) +; -- Bit 1 - Sound 2 ON flag (read only) +; -- Bit 0 - Sound 1 ON flag (read only) +; -- +DEF rNR52 EQU $FF26 +DEF rAUDENA EQU rNR52 + +DEF AUDENA_ON EQU %10000000 +DEF AUDENA_OFF EQU %00000000 ; sets all audio regs to 0! + + +; -- +; -- LCDC ($FF40) +; -- LCD Control (R/W) +; -- +DEF rLCDC EQU $FF40 + +DEF LCDCF_OFF EQU %00000000 ; LCD Control Operation +DEF LCDCF_ON EQU %10000000 ; LCD Control Operation +DEF LCDCF_WIN9800 EQU %00000000 ; Window Tile Map Display Select +DEF LCDCF_WIN9C00 EQU %01000000 ; Window Tile Map Display Select +DEF LCDCF_WINOFF EQU %00000000 ; Window Display +DEF LCDCF_WINON EQU %00100000 ; Window Display +DEF LCDCF_BLK21 EQU %00000000 ; BG & Window Tile Data Select +DEF LCDCF_BLK01 EQU %00010000 ; BG & Window Tile Data Select +DEF LCDCF_BG9800 EQU %00000000 ; BG Tile Map Display Select +DEF LCDCF_BG9C00 EQU %00001000 ; BG Tile Map Display Select +DEF LCDCF_OBJ8 EQU %00000000 ; OBJ Construction +DEF LCDCF_OBJ16 EQU %00000100 ; OBJ Construction +DEF LCDCF_OBJOFF EQU %00000000 ; OBJ Display +DEF LCDCF_OBJON EQU %00000010 ; OBJ Display +DEF LCDCF_BGOFF EQU %00000000 ; BG Display +DEF LCDCF_BGON EQU %00000001 ; BG Display + +DEF LCDCB_ON EQU 7 ; LCD Control Operation +DEF LCDCB_WIN9C00 EQU 6 ; Window Tile Map Display Select +DEF LCDCB_WINON EQU 5 ; Window Display +DEF LCDCB_BLKS EQU 4 ; BG & Window Tile Data Select +DEF LCDCB_BG9C00 EQU 3 ; BG Tile Map Display Select +DEF LCDCB_OBJ16 EQU 2 ; OBJ Construction +DEF LCDCB_OBJON EQU 1 ; OBJ Display +DEF LCDCB_BGON EQU 0 ; BG Display +; "Window Character Data Select" follows BG + + +; -- +; -- STAT ($FF41) +; -- LCDC Status (R/W) +; -- +DEF rSTAT EQU $FF41 + +DEF STATF_LYC EQU %01000000 ; LYC=LY Coincidence (Selectable) +DEF STATF_MODE10 EQU %00100000 ; Mode 10 +DEF STATF_MODE01 EQU %00010000 ; Mode 01 (V-Blank) +DEF STATF_MODE00 EQU %00001000 ; Mode 00 (H-Blank) +DEF STATF_LYCF EQU %00000100 ; Coincidence Flag +DEF STATF_HBL EQU %00000000 ; H-Blank +DEF STATF_VBL EQU %00000001 ; V-Blank +DEF STATF_OAM EQU %00000010 ; OAM-RAM is used by system +DEF STATF_LCD EQU %00000011 ; Both OAM and VRAM used by system +DEF STATF_BUSY EQU %00000010 ; When set, VRAM access is unsafe + +DEF STATB_LYC EQU 6 +DEF STATB_MODE10 EQU 5 +DEF STATB_MODE01 EQU 4 +DEF STATB_MODE00 EQU 3 +DEF STATB_LYCF EQU 2 +DEF STATB_BUSY EQU 1 + +; -- +; -- SCY ($FF42) +; -- Scroll Y (R/W) +; -- +DEF rSCY EQU $FF42 + + +; -- +; -- SCX ($FF43) +; -- Scroll X (R/W) +; -- +DEF rSCX EQU $FF43 + + +; -- +; -- LY ($FF44) +; -- LCDC Y-Coordinate (R) +; -- +; -- Values range from 0->153. 144->153 is the VBlank period. +; -- +DEF rLY EQU $FF44 + + +; -- +; -- LYC ($FF45) +; -- LY Compare (R/W) +; -- +; -- When LY==LYC, STATF_LYCF will be set in STAT +; -- +DEF rLYC EQU $FF45 + + +; -- +; -- DMA ($FF46) +; -- DMA Transfer and Start Address (W) +; -- +DEF rDMA EQU $FF46 + + +; -- +; -- BGP ($FF47) +; -- BG Palette Data (W) +; -- +; -- Bit 7-6 - Intensity for %11 +; -- Bit 5-4 - Intensity for %10 +; -- Bit 3-2 - Intensity for %01 +; -- Bit 1-0 - Intensity for %00 +; -- +DEF rBGP EQU $FF47 + + +; -- +; -- OBP0 ($FF48) +; -- Object Palette 0 Data (W) +; -- +; -- See BGP for info +; -- +DEF rOBP0 EQU $FF48 + + +; -- +; -- OBP1 ($FF49) +; -- Object Palette 1 Data (W) +; -- +; -- See BGP for info +; -- +DEF rOBP1 EQU $FF49 + + +; -- +; -- WY ($FF4A) +; -- Window Y Position (R/W) +; -- +; -- 0 <= WY <= 143 +; -- When WY = 0, the window is displayed from the top edge of the LCD screen. +; -- +DEF rWY EQU $FF4A + + +; -- +; -- WX ($FF4B) +; -- Window X Position (R/W) +; -- +; -- 7 <= WX <= 166 +; -- When WX = 7, the window is displayed from the left edge of the LCD screen. +; -- Values of 0-6 and 166 are unreliable due to hardware bugs. +; -- +DEF rWX EQU $FF4B + +DEF WX_OFS EQU 7 ; add this to a screen position to get a WX position + + +; -- +; -- SPEED ($FF4D) +; -- Select CPU Speed (R/W) +; -- +DEF rKEY1 EQU $FF4D +DEF rSPD EQU rKEY1 + +DEF KEY1F_DBLSPEED EQU %10000000 ; 0=Normal Speed, 1=Double Speed (R) +DEF KEY1F_PREPARE EQU %00000001 ; 0=No, 1=Prepare (R/W) + + +; -- +; -- VBK ($FF4F) +; -- Select Video RAM Bank (R/W) +; -- +; -- Bit 0 - Bank Specification (0: Specify Bank 0; 1: Specify Bank 1) +; -- +DEF rVBK EQU $FF4F + + +; -- +; -- HDMA1 ($FF51) +; -- High byte for Horizontal Blanking/General Purpose DMA source address (W) +; -- CGB Mode Only +; -- +DEF rHDMA1 EQU $FF51 + + +; -- +; -- HDMA2 ($FF52) +; -- Low byte for Horizontal Blanking/General Purpose DMA source address (W) +; -- CGB Mode Only +; -- +DEF rHDMA2 EQU $FF52 + + +; -- +; -- HDMA3 ($FF53) +; -- High byte for Horizontal Blanking/General Purpose DMA destination address (W) +; -- CGB Mode Only +; -- +DEF rHDMA3 EQU $FF53 + + +; -- +; -- HDMA4 ($FF54) +; -- Low byte for Horizontal Blanking/General Purpose DMA destination address (W) +; -- CGB Mode Only +; -- +DEF rHDMA4 EQU $FF54 + + +; -- +; -- HDMA5 ($FF55) +; -- Transfer length (in tiles minus 1)/mode/start for Horizontal Blanking, General Purpose DMA (R/W) +; -- CGB Mode Only +; -- +DEF rHDMA5 EQU $FF55 + +DEF HDMA5F_MODE_GP EQU %00000000 ; General Purpose DMA (W) +DEF HDMA5F_MODE_HBL EQU %10000000 ; HBlank DMA (W) +DEF HDMA5B_MODE EQU 7 ; DMA mode select (W) + +; -- Once DMA has started, use HDMA5F_BUSY to check when the transfer is complete +DEF HDMA5F_BUSY EQU %10000000 ; 0=Busy (DMA still in progress), 1=Transfer complete (R) + + +; -- +; -- RP ($FF56) +; -- Infrared Communications Port (R/W) +; -- CGB Mode Only +; -- +DEF rRP EQU $FF56 + +DEF RPF_ENREAD EQU %11000000 +DEF RPF_DATAIN EQU %00000010 ; 0=Receiving IR Signal, 1=Normal +DEF RPF_WRITE_HI EQU %00000001 +DEF RPF_WRITE_LO EQU %00000000 + +DEF RPB_LED_ON EQU 0 +DEF RPB_DATAIN EQU 1 + + +; -- +; -- BCPS/BGPI ($FF68) +; -- Background Color Palette Specification (aka Background Palette Index) (R/W) +; -- +DEF rBCPS EQU $FF68 +DEF rBGPI EQU rBCPS + +DEF BCPSF_AUTOINC EQU %10000000 ; Auto Increment (0=Disabled, 1=Increment after Writing) +DEF BCPSB_AUTOINC EQU 7 +DEF BGPIF_AUTOINC EQU BCPSF_AUTOINC +DEF BGPIB_AUTOINC EQU BCPSB_AUTOINC + + +; -- +; -- BCPD/BGPD ($FF69) +; -- Background Color Palette Data (aka Background Palette Data) (R/W) +; -- +DEF rBCPD EQU $FF69 +DEF rBGPD EQU rBCPD + + +; -- +; -- OCPS/OBPI ($FF6A) +; -- Object Color Palette Specification (aka Object Background Palette Index) (R/W) +; -- +DEF rOCPS EQU $FF6A +DEF rOBPI EQU rOCPS + +DEF OCPSF_AUTOINC EQU %10000000 ; Auto Increment (0=Disabled, 1=Increment after Writing) +DEF OCPSB_AUTOINC EQU 7 +DEF OBPIF_AUTOINC EQU OCPSF_AUTOINC +DEF OBPIB_AUTOINC EQU OCPSB_AUTOINC + + +; -- +; -- OCPD/OBPD ($FF6B) +; -- Object Color Palette Data (aka Object Background Palette Data) (R/W) +; -- +DEF rOCPD EQU $FF6B +DEF rOBPD EQU rOCPD + + +; -- +; -- OPRI ($FF6C) +; -- Object Priority Mode (R/W) +; -- CGB Only + +; -- +; -- Priority can be changed only from the boot ROM +; -- +DEF rOPRI EQU $FF6C + +DEF OPRI_OAM EQU 0 ; Prioritize objects by location in OAM (CGB Mode default) +DEF OPRI_COORD EQU 1 ; Prioritize objects by x-coordinate (Non-CGB Mode default) + + + +; -- +; -- SMBK/SVBK ($FF70) +; -- Select Main RAM Bank (R/W) +; -- +; -- Bit 2-0 - Bank Specification (0,1: Specify Bank 1; 2-7: Specify Banks 2-7) +; -- +DEF rSVBK EQU $FF70 +DEF rSMBK EQU rSVBK + + +; -- +; -- PCM12 ($FF76) +; -- Sound channel 1&2 PCM amplitude (R) +; -- +; -- Bit 7-4 - Copy of sound channel 2's PCM amplitude +; -- Bit 3-0 - Copy of sound channel 1's PCM amplitude +; -- +DEF rPCM12 EQU $FF76 + + +; -- +; -- PCM34 ($FF77) +; -- Sound channel 3&4 PCM amplitude (R) +; -- +; -- Bit 7-4 - Copy of sound channel 4's PCM amplitude +; -- Bit 3-0 - Copy of sound channel 3's PCM amplitude +; -- +DEF rPCM34 EQU $FF77 + + +; -- +; -- IE ($FFFF) +; -- Interrupt Enable (R/W) +; -- +DEF rIE EQU $FFFF + +DEF IEF_HILO EQU %00010000 ; Transition from High to Low of Pin number P10-P13 +DEF IEF_SERIAL EQU %00001000 ; Serial I/O transfer end +DEF IEF_TIMER EQU %00000100 ; Timer Overflow +DEF IEF_STAT EQU %00000010 ; STAT +DEF IEF_VBLANK EQU %00000001 ; V-Blank + +DEF IEB_HILO EQU 4 +DEF IEB_SERIAL EQU 3 +DEF IEB_TIMER EQU 2 +DEF IEB_STAT EQU 1 +DEF IEB_VBLANK EQU 0 + + +;*************************************************************************** +;* +;* Flags common to multiple sound channels +;* +;*************************************************************************** + +; -- +; -- Square wave duty cycle +; -- +; -- Can be used with AUD1LEN and AUD2LEN +; -- See AUD1LEN for more info +; -- +DEF AUDLEN_DUTY_12_5 EQU %00000000 ; 12.5% +DEF AUDLEN_DUTY_25 EQU %01000000 ; 25% +DEF AUDLEN_DUTY_50 EQU %10000000 ; 50% +DEF AUDLEN_DUTY_75 EQU %11000000 ; 75% + + +; -- +; -- Audio envelope flags +; -- +; -- Can be used with AUD1ENV, AUD2ENV, AUD4ENV +; -- See AUD1ENV for more info +; -- +DEF AUDENV_UP EQU %00001000 +DEF AUDENV_DOWN EQU %00000000 + + +; -- +; -- Audio trigger flags +; -- +; -- Can be used with AUD1HIGH, AUD2HIGH, AUD3HIGH +; -- See AUD1HIGH for more info +; -- +DEF AUDHIGH_RESTART EQU %10000000 +DEF AUDHIGH_LENGTH_ON EQU %01000000 +DEF AUDHIGH_LENGTH_OFF EQU %00000000 + + +;*************************************************************************** +;* +;* CPU values on bootup (a=type, b=qualifier) +;* +;*************************************************************************** + +DEF BOOTUP_A_DMG EQU $01 ; Dot Matrix Game +DEF BOOTUP_A_CGB EQU $11 ; Color GameBoy +DEF BOOTUP_A_MGB EQU $FF ; Mini GameBoy (Pocket GameBoy) + +; if a=BOOTUP_A_CGB, bit 0 in b can be checked to determine if real CGB or +; other system running in GBC mode +DEF BOOTUP_B_CGB EQU %00000000 +DEF BOOTUP_B_AGB EQU %00000001 ; GBA, GBA SP, Game Boy Player, or New GBA SP + + +;*************************************************************************** +;* +;* Interrupt vector addresses +;* +;*************************************************************************** + +DEF INT_HANDLER_VBLANK EQU $0040 +DEF INT_HANDLER_STAT EQU $0048 +DEF INT_HANDLER_TIMER EQU $0050 +DEF INT_HANDLER_SERIAL EQU $0058 +DEF INT_HANDLER_JOYPAD EQU $0060 + + +;*************************************************************************** +;* +;* Header +;* +;*************************************************************************** + +;* +;* Nintendo scrolling logo +;* (Code won't work on a real GameBoy) +;* (if next lines are altered.) +MACRO NINTENDO_LOGO + DB $CE,$ED,$66,$66,$CC,$0D,$00,$0B,$03,$73,$00,$83,$00,$0C,$00,$0D + DB $00,$08,$11,$1F,$88,$89,$00,$0E,$DC,$CC,$6E,$E6,$DD,$DD,$D9,$99 + DB $BB,$BB,$67,$63,$6E,$0E,$EC,$CC,$DD,$DC,$99,$9F,$BB,$B9,$33,$3E +ENDM + +; $0143 Color GameBoy compatibility code +DEF CART_COMPATIBLE_DMG EQU $00 +DEF CART_COMPATIBLE_DMG_GBC EQU $80 +DEF CART_COMPATIBLE_GBC EQU $C0 + +; $0146 GameBoy/Super GameBoy indicator +DEF CART_INDICATOR_GB EQU $00 +DEF CART_INDICATOR_SGB EQU $03 + +; $0147 Cartridge type +DEF CART_ROM EQU $00 +DEF CART_ROM_MBC1 EQU $01 +DEF CART_ROM_MBC1_RAM EQU $02 +DEF CART_ROM_MBC1_RAM_BAT EQU $03 +DEF CART_ROM_MBC2 EQU $05 +DEF CART_ROM_MBC2_BAT EQU $06 +DEF CART_ROM_RAM EQU $08 +DEF CART_ROM_RAM_BAT EQU $09 +DEF CART_ROM_MMM01 EQU $0B +DEF CART_ROM_MMM01_RAM EQU $0C +DEF CART_ROM_MMM01_RAM_BAT EQU $0D +DEF CART_ROM_MBC3_BAT_RTC EQU $0F +DEF CART_ROM_MBC3_RAM_BAT_RTC EQU $10 +DEF CART_ROM_MBC3 EQU $11 +DEF CART_ROM_MBC3_RAM EQU $12 +DEF CART_ROM_MBC3_RAM_BAT EQU $13 +DEF CART_ROM_MBC5 EQU $19 +DEF CART_ROM_MBC5_RAM EQU $1A +DEF CART_ROM_MBC5_RAM_BAT EQU $1B +DEF CART_ROM_MBC5_RUMBLE EQU $1C +DEF CART_ROM_MBC5_RAM_RUMBLE EQU $1D +DEF CART_ROM_MBC5_RAM_BAT_RUMBLE EQU $1E +DEF CART_ROM_MBC7_RAM_BAT_GYRO EQU $22 +DEF CART_ROM_POCKET_CAMERA EQU $FC +DEF CART_ROM_BANDAI_TAMA5 EQU $FD +DEF CART_ROM_HUDSON_HUC3 EQU $FE +DEF CART_ROM_HUDSON_HUC1 EQU $FF + +; $0148 ROM size +; these are kilobytes +DEF CART_ROM_32KB EQU $00 ; 2 banks +DEF CART_ROM_64KB EQU $01 ; 4 banks +DEF CART_ROM_128KB EQU $02 ; 8 banks +DEF CART_ROM_256KB EQU $03 ; 16 banks +DEF CART_ROM_512KB EQU $04 ; 32 banks +DEF CART_ROM_1024KB EQU $05 ; 64 banks +DEF CART_ROM_2048KB EQU $06 ; 128 banks +DEF CART_ROM_4096KB EQU $07 ; 256 banks +DEF CART_ROM_8192KB EQU $08 ; 512 banks +DEF CART_ROM_1152KB EQU $52 ; 72 banks +DEF CART_ROM_1280KB EQU $53 ; 80 banks +DEF CART_ROM_1536KB EQU $54 ; 96 banks + +; $0149 SRAM size +; these are kilobytes +DEF CART_SRAM_NONE EQU 0 +DEF CART_SRAM_8KB EQU 2 ; 1 bank +DEF CART_SRAM_32KB EQU 3 ; 4 banks +DEF CART_SRAM_128KB EQU 4 ; 16 banks + +; $014A Destination code +DEF CART_DEST_JAPANESE EQU $00 +DEF CART_DEST_NON_JAPANESE EQU $01 + + +;*************************************************************************** +;* +;* Keypad related +;* +;*************************************************************************** + +DEF PADF_DOWN EQU $80 +DEF PADF_UP EQU $40 +DEF PADF_LEFT EQU $20 +DEF PADF_RIGHT EQU $10 +DEF PADF_START EQU $08 +DEF PADF_SELECT EQU $04 +DEF PADF_B EQU $02 +DEF PADF_A EQU $01 + +DEF PADB_DOWN EQU $7 +DEF PADB_UP EQU $6 +DEF PADB_LEFT EQU $5 +DEF PADB_RIGHT EQU $4 +DEF PADB_START EQU $3 +DEF PADB_SELECT EQU $2 +DEF PADB_B EQU $1 +DEF PADB_A EQU $0 + + +;*************************************************************************** +;* +;* Screen related +;* +;*************************************************************************** + +DEF SCRN_X EQU 160 ; Width of screen in pixels +DEF SCRN_Y EQU 144 ; Height of screen in pixels. Also corresponds to the value in LY at the beginning of VBlank. +DEF SCRN_X_B EQU 20 ; Width of screen in bytes +DEF SCRN_Y_B EQU 18 ; Height of screen in bytes + +DEF SCRN_VX EQU 256 ; Virtual width of screen in pixels +DEF SCRN_VY EQU 256 ; Virtual height of screen in pixels +DEF SCRN_VX_B EQU 32 ; Virtual width of screen in bytes +DEF SCRN_VY_B EQU 32 ; Virtual height of screen in bytes + + +;*************************************************************************** +;* +;* OAM related +;* +;*************************************************************************** + +; OAM attributes +; each entry in OAM RAM is 4 bytes (sizeof_OAM_ATTRS) +RSRESET +DEF OAMA_Y RB 1 ; y pos plus 16 +DEF OAMA_X RB 1 ; x pos plus 8 +DEF OAMA_TILEID RB 1 ; tile id +DEF OAMA_FLAGS RB 1 ; flags (see below) +DEF sizeof_OAM_ATTRS RB 0 + +DEF OAM_Y_OFS EQU 16 ; add this to a screen-relative Y position to get an OAM Y position +DEF OAM_X_OFS EQU 8 ; add this to a screen-relative X position to get an OAM X position + +DEF OAM_COUNT EQU 40 ; number of OAM entries in OAM RAM + +; flags +DEF OAMF_PRI EQU %10000000 ; Priority +DEF OAMF_YFLIP EQU %01000000 ; Y flip +DEF OAMF_XFLIP EQU %00100000 ; X flip +DEF OAMF_PAL0 EQU %00000000 ; Palette number; 0,1 (DMG) +DEF OAMF_PAL1 EQU %00010000 ; Palette number; 0,1 (DMG) +DEF OAMF_BANK0 EQU %00000000 ; Bank number; 0,1 (GBC) +DEF OAMF_BANK1 EQU %00001000 ; Bank number; 0,1 (GBC) + +DEF OAMF_PALMASK EQU %00000111 ; Palette (GBC) + +DEF OAMB_PRI EQU 7 ; Priority +DEF OAMB_YFLIP EQU 6 ; Y flip +DEF OAMB_XFLIP EQU 5 ; X flip +DEF OAMB_PAL1 EQU 4 ; Palette number; 0,1 (DMG) +DEF OAMB_BANK1 EQU 3 ; Bank number; 0,1 (GBC) + + +; Deprecated constants. Please avoid using. + +DEF IEF_LCDC EQU %00000010 ; LCDC (see STAT) +DEF _VRAM8000 EQU _VRAM +DEF _VRAM8800 EQU _VRAM+$800 +DEF _VRAM9000 EQU _VRAM+$1000 +DEF CART_SRAM_2KB EQU 1 ; 1 incomplete bank +DEF LCDCF_BG8800 EQU %00000000 ; BG & Window Tile Data Select +DEF LCDCF_BG8000 EQU %00010000 ; BG & Window Tile Data Select +DEF LCDCB_BG8000 EQU 4 ; BG & Window Tile Data Select + + + ENDC ;HARDWARE_INC diff --git a/littleletters.asm b/littleletters.asm deleted file mode 100644 index 8a02acc..0000000 --- a/littleletters.asm +++ /dev/null @@ -1,123 +0,0 @@ - ; original export script by gabriel reis, modified by shoofle - - -littleletters: - - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 - db $03,$03,$07,$07,$0f,$0f,$0e,$0e,$1c,$1c,$30,$30,$c0,$c0,$c0,$c0 - db $24,$24,$6c,$6c,$6c,$6c,$48,$48,$00,$00,$00,$00,$00,$00,$00,$00 - db $1a,$1a,$1a,$1a,$7f,$7f,$34,$34,$34,$34,$fe,$fe,$68,$68,$68,$68 - db $08,$08,$3c,$3c,$6a,$6a,$68,$68,$3c,$3c,$0a,$0a,$6a,$6a,$3c,$3c - db $63,$63,$a6,$a6,$ac,$ac,$d8,$d8,$1b,$1b,$35,$35,$65,$65,$c6,$c6 - db $18,$18,$24,$24,$28,$28,$18,$18,$2c,$2c,$66,$66,$67,$67,$39,$39 - db $18,$18,$18,$18,$18,$18,$30,$30,$00,$00,$00,$00,$00,$00,$00,$00 - db $04,$04,$0c,$0c,$18,$18,$10,$10,$10,$10,$18,$18,$0c,$0c,$04,$04 - db $20,$20,$30,$30,$18,$18,$08,$08,$08,$08,$18,$18,$30,$30,$20,$20 - db $00,$00,$08,$08,$28,$28,$1e,$1e,$78,$78,$14,$14,$10,$10,$00,$00 - db $00,$00,$00,$00,$18,$18,$18,$18,$7e,$7e,$18,$18,$18,$18,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$0c,$0c,$0c,$0c,$0c,$0c,$18,$18 - db $00,$00,$00,$00,$00,$00,$1c,$1c,$38,$38,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$18,$18,$18,$18,$00,$00 - db $04,$04,$0c,$0c,$0c,$0c,$18,$18,$18,$18,$30,$30,$30,$30,$20,$20 - db $00,$00,$38,$38,$64,$64,$64,$64,$64,$64,$64,$64,$64,$64,$38,$38 - db $08,$08,$18,$18,$38,$38,$18,$18,$18,$18,$18,$18,$18,$18,$3c,$3c - db $00,$00,$38,$38,$4c,$4c,$0c,$0c,$0c,$0c,$18,$18,$30,$30,$7c,$7c - db $00,$00,$3c,$3c,$06,$06,$06,$06,$1c,$1c,$06,$06,$06,$06,$3c,$3c - db $00,$00,$04,$04,$26,$26,$26,$26,$3e,$3e,$06,$06,$06,$06,$04,$04 - db $00,$00,$7c,$7c,$64,$64,$60,$60,$78,$78,$44,$44,$04,$04,$38,$38 - db $00,$00,$20,$20,$30,$30,$30,$30,$3c,$3c,$32,$32,$32,$32,$1c,$1c - db $00,$00,$7c,$7c,$4c,$4c,$0c,$0c,$3e,$3e,$18,$18,$30,$30,$20,$20 - db $00,$00,$78,$78,$64,$64,$64,$64,$38,$38,$64,$64,$64,$64,$3c,$3c - db $00,$00,$38,$38,$4c,$4c,$4c,$4c,$3c,$3c,$0c,$0c,$0c,$0c,$18,$18 - db $00,$00,$00,$00,$18,$18,$18,$18,$00,$00,$18,$18,$18,$18,$00,$00 - db $00,$00,$00,$00,$0c,$0c,$0c,$0c,$00,$00,$0c,$0c,$0c,$0c,$18,$18 - db $00,$00,$0c,$0c,$18,$18,$30,$30,$60,$60,$30,$30,$18,$18,$0c,$0c - db $00,$00,$00,$00,$3c,$3c,$3c,$3c,$00,$00,$3c,$3c,$3c,$3c,$00,$00 - db $00,$00,$30,$30,$18,$18,$0c,$0c,$06,$06,$0c,$0c,$18,$18,$30,$30 - db $38,$38,$6c,$6c,$24,$24,$0c,$0c,$18,$18,$18,$18,$00,$00,$18,$18 - db $3c,$3c,$62,$62,$59,$59,$45,$45,$5d,$5d,$5d,$5d,$63,$63,$38,$38 - db $00,$00,$38,$38,$34,$34,$32,$32,$3e,$3e,$32,$32,$32,$32,$32,$32 - db $00,$00,$7c,$7c,$32,$32,$32,$32,$3c,$3c,$32,$32,$32,$32,$1c,$1c - db $00,$00,$3c,$3c,$72,$72,$62,$62,$60,$60,$60,$60,$62,$62,$3c,$3c - db $00,$00,$f8,$f8,$64,$64,$62,$62,$62,$62,$62,$62,$62,$62,$3c,$3c - db $00,$00,$fc,$fc,$60,$60,$60,$60,$78,$78,$60,$60,$60,$60,$3c,$3c - db $00,$00,$fc,$fc,$60,$60,$60,$60,$78,$78,$60,$60,$60,$60,$20,$20 - db $00,$00,$78,$78,$64,$64,$60,$60,$60,$60,$6e,$6e,$64,$64,$3c,$3c - db $00,$00,$40,$40,$62,$62,$62,$62,$7e,$7e,$62,$62,$62,$62,$22,$22 - db $00,$00,$10,$10,$18,$18,$18,$18,$18,$18,$18,$18,$18,$18,$08,$08 - db $00,$00,$08,$08,$0c,$0c,$0c,$0c,$0c,$0c,$4c,$4c,$6c,$6c,$3c,$3c - db $00,$00,$40,$40,$64,$64,$68,$68,$70,$70,$68,$68,$64,$64,$22,$22 - db $00,$00,$20,$20,$30,$30,$30,$30,$30,$30,$30,$30,$32,$32,$1e,$1e - db $00,$00,$3e,$3e,$6a,$6a,$6a,$6a,$6a,$6a,$62,$62,$62,$62,$22,$22 - db $00,$00,$72,$72,$6a,$6a,$6a,$6a,$6a,$6a,$66,$66,$62,$62,$22,$22 - db $00,$00,$3c,$3c,$66,$66,$62,$62,$62,$62,$62,$62,$32,$32,$1e,$1e - db $00,$00,$f8,$f8,$64,$64,$64,$64,$7c,$7c,$60,$60,$60,$60,$20,$20 - db $00,$00,$38,$38,$64,$64,$62,$62,$62,$62,$6a,$6a,$64,$64,$3b,$3b - db $00,$00,$f8,$f8,$64,$64,$64,$64,$7c,$7c,$68,$68,$64,$64,$23,$23 - db $00,$00,$38,$38,$64,$64,$60,$60,$38,$38,$04,$04,$64,$64,$38,$38 - db $00,$00,$7e,$7e,$5a,$5a,$18,$18,$18,$18,$18,$18,$18,$18,$08,$08 - db $00,$00,$40,$40,$62,$62,$62,$62,$62,$62,$62,$62,$62,$62,$3c,$3c - db $00,$00,$40,$40,$62,$62,$62,$62,$62,$62,$24,$24,$34,$34,$18,$18 - db $00,$00,$c3,$c3,$62,$62,$62,$62,$6a,$6a,$6a,$6a,$6a,$6a,$34,$34 - db $00,$00,$42,$42,$62,$62,$34,$34,$18,$18,$3c,$3c,$66,$66,$42,$42 - db $00,$00,$4c,$4c,$4c,$4c,$4c,$4c,$3c,$3c,$0c,$0c,$4c,$4c,$78,$78 - db $00,$00,$7e,$7e,$46,$46,$0c,$0c,$18,$18,$30,$30,$62,$62,$7e,$7e - db $7c,$7c,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$7c,$7c - db $20,$20,$30,$30,$30,$30,$18,$18,$18,$18,$0c,$0c,$0c,$0c,$04,$04 - db $3e,$3e,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$3e,$3e - db $18,$18,$3c,$3c,$66,$66,$42,$42,$00,$00,$00,$00,$00,$00,$00,$00 - db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$7c,$7c,$3e,$3e - db $30,$30,$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,$08,$08,$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,$18,$18,$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 $3c,$3c,$60,$60,$30,$30,$60,$60,$60,$60,$30,$30,$60,$60,$3c,$3c - db $20,$20,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$10,$10 - db $3c,$3c,$06,$06,$0c,$0c,$06,$06,$06,$06,$0c,$0c,$06,$06,$3c,$3c - db $00,$00,$00,$00,$31,$31,$7b,$7b,$de,$de,$8c,$8c,$00,$00,$00,$00 - db $c0,$c0,$a0,$a0,$b8,$b8,$b0,$b0,$da,$da,$12,$12,$1a,$1a,$03,$03 - - - -littlealphabet: - db $00, $00, $00, $00, $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, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $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, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $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, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $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, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $01, $02, $03, $04, $05, $06, $07, $08, $09, $0a, $0b, $0c, $0d, $0e, $0f, $00, $00, $00, $00 - db $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $1a, $1b, $1c, $1d, $1e, $1f, $00, $00, $00, $00 - db $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $2a, $2b, $2c, $2d, $2e, $2f, $00, $00, $00, $00 - db $30, $31, $32, $33, $34, $35, $36, $37, $38, $39, $3a, $3b, $3c, $3d, $3e, $3f, $00, $00, $00, $00 - db $40, $41, $42, $43, $44, $45, $46, $47, $48, $49, $4a, $4b, $4c, $4d, $4e, $4f, $00, $00, $00, $00 - db $50, $51, $52, $53, $54, $55, $56, $57, $58, $59, $5a, $5b, $5c, $5d, $5e, $5f, $00, $00, $00, $00 - db $00, $00, $00, $00, $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, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $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, $00, $00, $00, $00, $00, $00, $00, $00, $00 diff --git a/main.asm b/main.asm new file mode 100644 index 0000000..7c7be12 --- /dev/null +++ b/main.asm @@ -0,0 +1,161 @@ +; 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 INTERRUPT_LCD EQU $FF91 + +DEF rMYBTN EQU $FFA8 +DEF rMYBTNP EQU rMYBTN + 1 + +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 + + call SCENE_UPDATE - 1 + + ld b, 144 + call AwaitLine + + call SCENE_DRAW - 1 + jp Loop + +AwaitLine: ; put the line you want to reach in b + ld a, [rLY] + cp b + jp nz, AwaitLine + ret + +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 + +INCLUDE "CardReadScreen.inc" + +Instructions: + call Instructions + 2 + ret + diff --git a/theemperor.aseprite b/theemperor.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..db91f0c4193f12618a9d7eddb201b9357a21533a GIT binary patch literal 5956 zcmeHLcT`hZ6MqSzM|u&L5&=O7)k0H}(1eI9DxxAHp@}G+gerz0Dy|}67b758P*@a@ zCLkh6S*igH0!jb@VIfoj1LS=#ab5j(_xt>3&)M^x&pBu2+;`vHH@`dg&D^=yQWgLh zcVIvokO&9>FaQ8NApSxK0LJNr-U)o^{2N=_qDkzQ`AH;*-hp#&tCz|_6CGgT_g zM{2})n#8~^)_J6WgIrj7s_>pBTQXnlJE;@Ivvz?^Q$69BQ|!y?ACFf&1a#GuJ&$Fg z*?ao1Uc1yHs5x3Y9za=wuBv zN5Xy>DC@leH}J1R? zpKZ6eMYiI};<1AlI7kv)r)+R_*Ar}_5wLVmyNBj=G!y4GcP zd0gfrN^kb&kyR!?O)*^X&yE~FC4oPGOX^bV8$AQoSYhX}iumCHe^%pYb4fR)aA|LW z8|;BhS6XwV+w(O{i~1!pn9U4PQcZ{p=mG`7LxJ0#mV-}>N5O{)xU;oNd(N;idrk@| z{%`*v-_ieFA^r-^2{lM?vmW6;gqjH8<4q*`c%pnhMH>|w0L9rp!JukAff*zS1}9Xb zJSZbc-dD4EwnU@+=&Xc>G3hy>1{aIr4&uk~`Q@1c0v^+_eprT=eqs9`~G+Fq#s77&dUx#p5)@0H6y@d_N*hDbS{a60zGvuAv z?TmV|yrev)l588DV)FV?MLk&`n=^+F&=qbvdFZXY$;8rp1D@QEpRQU;NAA95PHnGs zU{|`YLC!XmgkKCKBne$S`S_)%K6N>!w*^`xXxF4&$lO{7bxFb(1p1zUo zJ#%onV#K-0Iklo7>c+eY2&CngwiWr7qJ{4*p_2}<=FQ0l!{NJW{yia4@Q0+*#)K}v ztIMz0M+?f(HM)yfmf?9BU%_H#+eb-u30!M|aofe+p<6NdT6YA7e;Pxx%0D>8Xi7F6 zb_a2huMSpxn*|ZMMc_2I2rSqqc!6iN0JR@Xc>7BYPx2Ni^>#HQP3@wKQ7J_>7$pr` zLstLhQfeL6{r&{79X6VL)n-X=;75PoVes}!3{qSjT>Ej;phMbu&kmeMo{)53gqxkJ z<$kvT%bAT&u2uTc@U!>22Nz%XW+c2woTtuA>MP!TKj)|?0}Wzlf!% zE!`W>iDSWs0Jzh{P0ejypTgBXAji9G2L~`f7vu!C#Gk=60yAsbqIC}tDh{k z@Xnc@gTy9kc}HzMq|k*n*^R$zu+9w0-ffhjrTU8wg)*Y*ffb2SaZs8LnOx4apLo73 zlc+GzRt+Zx70E3+4rZ;g_g0M%%p$4A3a#E7=-S_O6xo&AhZpbr;f`Yto0U=i(3+XG z!~BP>Tm3DaI}ox{dmW{EJ94i*SW?bx)$-+!7n&b}A8-l~v%br3)q1(Kc|-Cub;W73 z{>o|QRWotg;Yw}a+g>*xS6{~1vz$>nFNb2HM2c7OJ6&n3O5ePV0=s&QtYZ4=SBihj z8AGuewG(lAi|}dPbml0M6m!6LB;|ztTWi z_y>e@a=RMDe^wO&9PlV>R}U{wVld|enp`dTA3i7oZ2NRJ`RyivV@~}qHHE*vFn~4* zKkfZ_8BQOO2+cGjl(51fwhCnN-x0J zs6g{Wo%L5659Y6vtLki)!Uj}o54%{Ht`B3Jw9CW(7%GB=8(s0aKcXX6Eog4^rfr3a z+v|)t?c*^j?^351ASc=-Y{eweN-D(Cv1{ZEv@BIoQh3<*Rr;c z*Rw2LIn<&3(S@jZlebdjqiOf+oHi{QcKwuMtU%PS+=OYhpT+3c$g)-v;*y4(gMEym z70#QQ28#qD?hUb(_+&*f@zA7rxd&IslfSz_3Xu4Q3kD7m2#ht+B`f3jk6C8+$!`=z z6XZAgw{MncbXRWMyhnZ%QKy$67xy}C!}??svvrN`l;kS-i@NBZNejc%yJiAliQ$`Z zjdnn=n0Jbp7!MFv4`&2%!SDe40KKok2mrj_0Amk<2|)A%YsZn*DL8p}brLd`Vj#8% z%f*VFw)haUz_fhN3vu-MUAe;$s)Ua7x%+Z0B7hxGJ@jSz0s!J079~9h z1Omd%fNv~XF7A5tHR;o3CSo(NTnVv!AXn=W-A=G7ddVT|5#>9r*@_nw7zgtaC$!-+M`s7Ehj_UiN$*Cxy>&0{9( zd4V=AGJZ(nzH);YR4o4YKv+?A+Q1wJ0Im0IE;wwdzw2rhVv{FfzIHtu)a{9EUJ-+O zukX=$aPeHHe>==wWL0RLtF=6-F&1BYGk~UHfA^-rz`6WpR0UjQoBgIWFRM!8OgY1eZ_RH+8&+a_@O6R_F%+df#Iw2g1(#cn9kXk>Z!gT`?LHD X#}}BVQ;&ZfPjDtL&nUra#b5pl^i4$u literal 0 HcmV?d00001 diff --git a/theempress.aseprite b/theempress.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..393f890855011ee1793fa8230b38547350b80eb5 GIT binary patch literal 6048 zcmeHLcT`hJ7k^2pA@m~f1&yE}MF^lYHHm-%Mgc(-bb&xXL=hqZ0a1$5EEo|{S0h1e zsK81SLJ<)Jks>`HtTYv(^cJM#eJ`xL`tACC{*9i3qeQEp~YZyrX+_)l)r&STsBnLeOF-t1H(!y(n zkU+)tV)3)-;#haAxRH1{)T)Bvi3va~4KWYppT`2g6{sheo@XyC_7o!|y#O-y5Kfn? zj66~eh;NeWx0^eU5^_)oE@6o5t|NvEM7@!$(NZoi>2rh=3r1mMS^cO%!RoU}+ znx;bH!TTgVnPd*WRkoEy)iUZZGGIOER(id;Hz7A0o29EULd=^WbcT$U`*)8Byq*&9 z(Nq>3s?%plI+GMu^>GEPxr|V5c@;BKMEwH)RwM)sgMkX*|GP$ptgf=OY`mq=hxl7d zAqkjzdttVF1_XHeQ!%@|eLShE(7<4NhQrd@sIWn>*u$Pc*wQ7{qy$IaQ7J3}inpeu z_6Fjo`-{7;!wvi@-O*yyzUa|*iJ?)=q8^Q*?Q4Cv3{1@wSvYy&GZs}X2ZxF88I{I5 zj>Jw$vvk>=<-t~*#*N{P!hul-vRVx0H-&9I*@0K*KEo=vmesj!`Sx>xj90z!z8Y_C&*t>GJ#uEJv9yxN zXhPbf$nNxwY(Y1I9j~Djj zxx*gFy-ukQb$_;c#H@ND984cMx?&YAj`A852KOJ?{-gvfH2whoLL;25TCw{y7q>ea zx%~h82l;{i@7m&RaNbsfiY2c{`Y&5e4Dj&|2=MX5`24op=+FRYpE(NqS73!EQ6NaA zRbV_K*$LiP(h*xDFutrgTFsE`46?@6Y@jvZQwV2qGLK}1tI;2jYf3&;P%O#!VKlH| z@_=0WzNT=~b6%Z0q7F_`A~V!R`TGiv{~FlO!kcd^k1y`7jX+*BSh z+l|#-Y`XB+ihJ}|+36UTjx?POavoN8_cy!J)|p=R!K~Dtxz$S#_Q!OBYr9GHGqnV5 z!d|a=r56IEls#KaM~rQRY6z|qrl(>>KfqUk*)URhD%a5PV97(q&2R;$)@8DXnt)n;!Rx<|V%xaOQ8adb%JQWPUYAS1Lhy z)5Qa3Tnn_SrKJ?-a2F#dCEswyY|LJk>r>jadfbco3ZES=&9W;F^G%&qKs3*&zB07U zk1RTx%$m)A^YHz6|0Dvm=^+A?CoS1^E5;t@=2tGCcWf02emIstd~bH0G5!J=NB$@n zaXNe_-nyqc94(E;m4y={l1(}ul~#xA;xlJ7DLNu`(fi+^O-2_uHCEw$Rukn5si<8y zP3bLF4%{;GYSdH>GbHf{DFK-no!cm`OCQKKCn_S0F?tYkgpbxLSvq|pVJKJon zc-DHZ_oT~2DciZunNgZ|;yT9!1X6N}n)44AX^Pxi&`kJgj$;~bFc7k<$*=3^3HUF8 zMYXiozE>98xQFtJH7j-I@pFdf%saHFX;RGjeOq?PaXWSSIJr1=`f5OMdu=zso=Tu;dR*LP6mlODHKz@d*JT z;H855ApTY=C;|{YLpJ*dEG2=)OTp>6qwx81tWfTIkd~P{UZzX3-18vMnJzy@sjQaA zE7(S5;E9gsR(koB=cp{C4jkz`iIkaHODQ;A7%7N)?uw?Jsk)nK2J1x~kf~HZlPGzD z=|D2y>^g%uGjEB~W9~FuImlheqr6?-IV<-}<2-rhYGa3_e>G$O5id&%R>WmGiE~x` z&@+=3Ps~ufm}>V?fsFAyxE)%wS~g_ms|N%xFd)-9<+&T%LwflJBO9MBo~MbH!<0UL zX)8t=|7hDbWnFa?If8m6PHETt1JrPmuI2nZZ2_s~$1XI|z1+I@qL^EZlEdnj>Yv>A zY^q5uXgkp8yaT`eF4hqlR?(02tg^&;X$;yIFr$Ow)u_otVyqGKsYcpvdVgn;5B~PH zK~;_Jl@qQDR)dJ;rDbF_Y+^`$N%P$UM>3y@GsXG(Sr*Tk{kA~IKn=eVJzoWUU#@wH?T$A6d z{PGR6pynl$4exu$K`vv-XXhQFN7z6-$|Ifse5dTU7W9CN*;e`@ai2o{z1RSg|7H%G1o&i+e7c`cn z;D7p{7_j}fqtNGz2c9~$Z%T@MeLumwM_Tb&j933cf`A2tpMud{1GW8z>URO&1WW`|cYwOcjCE9J1-DQ`=b!ly}B`QsOF2=;g|Gd{; z)lb!eIJD2ZW~!4tJ22YxA$7yV@?-3?C-4ZAo_Vqx@*MW1eE)W=0_U!>wSKu4wKnIe z`_vW3{m~9>j$WsBJZ|5wRzI3ug%gx9zMZIY-njRYem%42qGl$u_wt63khuI6D!B1l zVh7zNr2hu3o4lQIeEi1!MSvtF-X0IlfPd*w44LhZ`N{xN-8C*5^8M#s)Tp4gaiVJtA_XZFM&Y-jsW&6FhT(Tcfi;~U?_Zjz?xxHMKS>muSh^e zMH)!V!?N%av1ZdJXGhEj`C-m!C1JKDzJwuUMVYN3lx2kpkPk0uV3 zDdQz~|7q**DZ5iwg@o@!@i(Z6IaVUcqa`d5GO)gzyEsC@>l~?7yvZfv%KiAwfe5xmZO&0Ql@M4xu8y0Xuar3 z%%HAEyUYB!cE1)FSxhnLg_{LBur|u7>IS7r-Tv+kgZ^_l^~R$o&uTM=&NxxuuPyj+ z?W1pjcjMapwaos^(2>xdn--Th%~aTHCOb`cU0ddI>|LH=TS;E;4Gyk-s!@$`_*36Q ZzsJL~Be9IIPs23l@Wsg$uqw&Me*=aSaM=I= literal 0 HcmV?d00001 diff --git a/thefool.asm b/thefool.asm deleted file mode 100644 index 68bf1ab..0000000 --- a/thefool.asm +++ /dev/null @@ -1,46 +0,0 @@ - ; original export script by gabriel reis, modified by shoofle - - -tileset: - - 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 - - - -UIGadgets: ; tiles start at 0 - db $0b, $0d, $0d, $0d, $0d, $0d, $0d, $0d, $0d, $0a, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $0e, $00, $00, $00, $00, $00, $00, $00, $00, $09, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $0e, $00, $00, $00, $00, $00, $00, $00, $00, $09, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $0e, $00, $00, $00, $00, $00, $00, $00, $00, $09, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 - db $0e, $00, $00, $00, $00, $00, $00, $00, $00, $09, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01 - db $0e, $00, $00, $00, $00, $00, $00, $00, $00, $09, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01 - db $0e, $00, $00, $00, $00, $00, $00, $00, $00, $09, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01 - db $0e, $00, $00, $00, $00, $00, $00, $00, $00, $09, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01 - db $0e, $00, $00, $00, $00, $00, $00, $00, $00, $09, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01 - db $0e, $00, $00, $00, $00, $00, $00, $00, $00, $09, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01 - db $0e, $00, $00, $00, $00, $00, $00, $00, $00, $09, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01 - db $0e, $00, $00, $00, $00, $00, $00, $00, $00, $09, $00, $00, $00, $00, $00, $00, $00, $00, $00, $02 - db $0e, $00, $00, $00, $00, $00, $00, $00, $00, $09, $00, $00, $00, $05, $00, $00, $00, $00, $00, $10 - db $0e, $00, $00, $00, $00, $00, $00, $00, $00, $09, $00, $00, $03, $06, $03, $03, $00, $00, $00, $11 - db $0e, $00, $00, $00, $00, $00, $00, $00, $00, $09, $00, $00, $04, $03, $04, $04, $00, $00, $00, $01 - db $0e, $00, $00, $00, $00, $00, $00, $00, $00, $09, $00, $00, $00, $04, $00, $00, $00, $00, $00, $01 - db $0e, $00, $00, $00, $00, $00, $00, $00, $00, $09, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01 - db $0c, $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f, $08, $00, $00, $00, $00, $00, $00, $00, $00, $00, $12 diff --git a/themagician.asm b/themagician.asm deleted file mode 100644 index 8a873ea..0000000 --- a/themagician.asm +++ /dev/null @@ -1,112 +0,0 @@ - ; original export script by gabriel reis, modified by shoofle - - -KeyArtTiles: - - 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 - - - -BackgroundCopy: ; tiles start at 0 - 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