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 0000000..db91f0c Binary files /dev/null and b/theemperor.aseprite differ diff --git a/theempress.aseprite b/theempress.aseprite new file mode 100644 index 0000000..393f890 Binary files /dev/null and b/theempress.aseprite differ 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