diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index 68e465d..d6f5ff5 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -27,6 +27,15 @@ db #$00 ; expand file to 2mb org $1FFFF8 ; <- FFFF8 timestamp rom db #$20, #$19, #$08, #$31 ; year/month/day +;================================================================================ +!ROM_VERSION_LOW ?= 1 ; ROM version (two 16-bit integers) +!ROM_VERSION_HIGH ?= 1 ; + +org $00FFE0 ; Unused hardware vector +RomVersion: +dw !ROM_VERSION_LOW +dw !ROM_VERSION_HIGH + ;================================================================================ !ADD = "CLC : ADC" @@ -98,6 +107,9 @@ db #$20, #$19, #$08, #$31 ; year/month/day function hexto555(h) = ((((h&$FF)/8)<<10)|(((h>>8&$FF)/8)<<5)|(((h>>16&$FF)/8)<<0)) +; Feature flags, run asar with -DFEATURE_X=1 to enable +!FEATURE_NEW_TEXT ?= 0 + ;================================================================================ !MULTIWORLD_ITEM = "$7EF4D2" @@ -235,6 +247,9 @@ incsrc multiworld.asm incsrc terrorpin.asm incsrc special_weapons.asm incsrc variable_ganon_vulnerability.asm +if !FEATURE_NEW_TEXT + incsrc textrenderer.asm +endif warnpc $A58000 ;org $228000 ; contrib area @@ -337,6 +352,14 @@ org $339600 BossMapIconGFX: incbin bossicons.4bpp +if !FEATURE_NEW_TEXT + org $339C00 + NewFont: + incbin newfont.bin + NewFontInverted: + incbin newfont_inverted.bin +endif + org $328000 Extra_Text_Table: incsrc itemtext.asm @@ -382,7 +405,8 @@ warnpc $B08000 ;$3B reserved for downstream use ;$3F reserved for internal debugging ;================================================================================ -;RAM +;RAM +;$7E021B[0x1]: Used by race game instead of $0ABF to avoid witch item conflict ;$7EC900[0x1F00]: BIGRAM buffer ;$7EF000[0x500]: SRAM mirror First 0x500 bytes of SRAM ;$7F5000[0x800]: Rando's main free ram region diff --git a/bugfixes.asm b/bugfixes.asm index 826bdbb..10df7ad 100644 --- a/bugfixes.asm +++ b/bugfixes.asm @@ -214,3 +214,10 @@ FixJingleGlitch: .exit RTL + +;-------------------------------------------------------------------------------- +SetOverworldTransitionFlags: + LDA #$01 + STA $0ABF ; used by witch + STA $021B ; used by race game + RTL diff --git a/compasses.asm b/compasses.asm index 223f5fa..7f27cd8 100644 --- a/compasses.asm +++ b/compasses.asm @@ -4,7 +4,13 @@ DrawDungeonCompassCounts: LDX $1B : BNE + : RTL : + ; Skip if outdoors - LDX $040C : CPX.b #$FF : BEQ .done ; Skip if not in a dungeon + + ; extra hard safeties for getting dungeon ID to prevent crashes + PHA + LDA.w $040C : AND.w #$00FE : TAX ; force dungeon ID to be multiple of 2 + PLA + + CPX.b #$1B : BCS .done ; Skip if not in a valid dungeon ID CMP.w #$0002 : BEQ ++ ; if CompassMode==2, we don't check for the compass LDA $7EF364 : AND.l DungeonItemMasks, X ; Load compass values to A, mask with dungeon item masks diff --git a/entrances.asm b/entrances.asm index 0a0d37c..121f34b 100644 --- a/entrances.asm +++ b/entrances.asm @@ -80,8 +80,8 @@ AllowStartFromSingleEntranceCave: LDA $7EF3C8 : AND.w #$00FF ; What we wrote over PHA TAX - LDA.l StartingAreaExitOffset, X + AND.w #$00FF BNE + JMP .done @@ -124,10 +124,10 @@ AllowStartFromSingleEntranceCave: STZ $0699 ;zero out door overlays in case starting overworld door is not set SEP #$20 ; set 8-bit accumulator - LDX $00 + LDA $7EF3C8 : TAX LDA.l StartingAreaOverworldDoor, X : STA.l $7F5099 ;Load overworld door - REP #$20 ; reset 16-bit accumulator + JSL.l CacheDoorFrameData .done PLA diff --git a/flipperkill.asm b/flipperkill.asm index 67b84be..986f3f4 100644 --- a/flipperkill.asm +++ b/flipperkill.asm @@ -151,4 +151,4 @@ FlipperScrollWarp: RTL + LDA $7EC184 STA $20 -RTL \ No newline at end of file +RTL diff --git a/hooks.asm b/hooks.asm index 1ea520b..07c68c0 100755 --- a/hooks.asm +++ b/hooks.asm @@ -1901,12 +1901,12 @@ NOP #8 ;JSL.l OnLoadMap ;================================================================================ org $028B8F ; <- 10B8F - Bank02.asm:2236 (LDA $7EF374 : LSR A : BCS BRANCH_BETA) -LDA $7EF00F : BNE + : NOP +JSL CheckHeraBossDefeated : BNE + : NOP LDX.b #$F1 : STX $012C + ;================================================================================ org $029090 ; <- 11090 - Bank02.asm:3099 (LDA $7EF374 : LSR A : BCS BRANCH_GAMMA) -LDA $7EF00F : BNE + : NOP +JSL CheckHeraBossDefeated : BNE + : NOP STX $012C ; DON'T MOVE THIS FORWARD OR MADNESS AWAITS + ;================================================================================ @@ -2313,8 +2313,11 @@ JSL.l OnLinkDamagedFromPit org $01FFE7 ; <- FFE7 - Bank01.asm:16375 (LDA $7EF36D) JSL.l OnLinkDamagedFromPitOutdoors ;-------------------------------------------------------------------------------- +;org $078F27 ; <- 38F27 +;JSL.l FlipperReset +;-------------------------------------------------------------------------------- org $02B468 -dw FakeFlipperProtection + dw FakeFlipperProtection org $02FFC7 FakeFlipperProtection: @@ -2325,11 +2328,8 @@ FakeFlipperProtection: org $02B46C ; <- bank_02.asm:9722 (STZ.b $00 : STZ.b $02) JSL FlipperScrollWarp ;-------------------------------------------------------------------------------- -;org $078F27 ; <- 38F27 -;JSL.l FlipperReset -;-------------------------------------------------------------------------------- -org $09F40B ; <- 4F40B - module_death.asm:222 (LDX.b #$00) -JSL.l IgnoreFairyCheck +;org $09F40B ; <- 4F40B - module_death.asm:222 (LDX.b #$00) +;JSL.l IgnoreFairyCheck ;-------------------------------------------------------------------------------- org $078F51 ; <- 38F51 - Bank07.asm:2444 (JSR $AE54 ; $3AE54 IN ROM) JSL.l OnEnterWater : NOP @@ -2586,6 +2586,22 @@ JSL ParadoxCaveGfxFix NOP ;================================================================================ +;================================================================================ +; Resolve conflict between race game and witch item +;-------------------------------------------------------------------------------- +; Change race game to use $021B instead of $0ABF for detecting cheating +org $0DCB9D ; STZ.w $0ABF +STZ $021B + +org $0DCBFE ; LDA.w $0ABF +LDA $021B + +org $02BFE0 ; LDA.b #$01 : STA.w $0ABF +JSL SetOverworldTransitionFlags +NOP +; For mirroring, the new flag is set in IncrementOWMirror in stats.asm +;================================================================================ + ;================================================================================ ; Player Sprite Fixes ;-------------------------------------------------------------------------------- @@ -2597,13 +2613,13 @@ org $0DA9C8 ; <- 06A9C8 - player_oam.asm: 1663 (AND.w #$00FF : CMP.w #$00F8 : BC LDA $02 ; always zero! (this replaces the BCC) ADC.w #0000 ; put the carry bit into the accumulator instead of a hardcoded 1. ;------------------------------------------------------------------------------- -org $02fd6f ; <- 017d6f - bank0E.asm: 3694 (LoadActualGearPalettes:) Note: Overflow of bank02 moved to 0e in US Rom +org $02FD6F ; <- 017d6f - bank0E.asm: 3694 (LoadActualGearPalettes:) Note: Overflow of bank02 moved to 0e in US Rom JSL LoadActualGearPalettesWithGloves RTL ;-------------------------------------------------------------------------------- ; Bunny Palette/Overworld Map Bugfix ;-------------------------------------------------------------------------------- -org $02fdf0 ; <- 017df0 - bank0E (LDA [$00] : STA $7EC300, X : STA $7EC500, X) +org $02FDF0 ; <- 017df0 - bank0E (LDA [$00] : STA $7EC300, X : STA $7EC500, X) JSL LoadGearPalette_safe_for_bunny RTS ;================================================================================ @@ -2928,3 +2944,36 @@ org $01C4B8 : JSL FixJingleGlitch org $01C536 : JSL FixJingleGlitch org $01C592 : JSL FixJingleGlitch org $01C65F : JSL FixJingleGlitch + +;================================================================================ +; Text Renderer +;-------------------------------------------------------------------------------- +if !FEATURE_NEW_TEXT + org $0EF51B + JML RenderCharExtended + org $0EF520 + RenderCharExtended_returnOriginal: + org $0EF567 + RenderCharExtended_returnUncompressed: + + org $0EF356 + JSL RenderCharLookupWidth + org $0EF3BA + JSL RenderCharLookupWidth + org $0EF48E + JML RenderCharLookupWidthDraw + org $0EF499 + RenderCharLookupWidthDraw_return: + + org $0EF6AA + JML RenderCharToMapExtended + org $0EF6C2 + RenderCharToMapExtended_return: + + org $0EFA50 + JSL RenderCharSetColorExtended + org $0EEE5D + JSL RenderCharSetColorExtended_init + org $0EF285 + JSL RenderCharSetColorExtended_close : NOP +endif diff --git a/init.asm b/init.asm index ad007ea..8fc9a65 100644 --- a/init.asm +++ b/init.asm @@ -1,3 +1,5 @@ +RomVersionSRAM = $701FFC + ;-------------------------------------------------------------------------------- ; Init_Primary ;-------------------------------------------------------------------------------- @@ -39,6 +41,11 @@ Init_Primary: LDA $00FFC0, X : STA $702000, X INX CPX #$15 : !BLT - + LDX #$00 + - + LDA RomVersion, X : STA RomVersionSRAM, X + INX + CPX #$04 : !BLT - .done REP #$20 diff --git a/music.asm b/music.asm index 3b1b120..0b25866 100644 --- a/music.asm +++ b/music.asm @@ -206,3 +206,10 @@ Underworld_DoorDown_Entry: .done LDA $A0 : RTL ;-------------------------------------------------------------------------------- + +;-------------------------------------------------------------------------------- +; Check if the boss in ToH has been defeated (16-bit accumulator) +CheckHeraBossDefeated: + LDA $7EF00F : AND #$00FF + RTL +;-------------------------------------------------------------------------------- diff --git a/newfont.bin b/newfont.bin new file mode 100644 index 0000000..ee9a452 Binary files /dev/null and b/newfont.bin differ diff --git a/newfont_inverted.bin b/newfont_inverted.bin new file mode 100644 index 0000000..13323ee Binary files /dev/null and b/newfont_inverted.bin differ diff --git a/spc.asm b/spc.asm index e1c564b..8946463 100644 --- a/spc.asm +++ b/spc.asm @@ -1,107 +1,74 @@ -; WARNING: THIS CODE IS EXTREMELY FRAGILE - -macro copybin(source, length) - !copycount #= 0 - while !copycount+3 < - dd read4(pctosnes(+!copycount)) - !copycount #= !copycount+4 - endif - - while !copycount < - db read1(pctosnes(+!copycount)) - !copycount #= !copycount+1 - endif -endmacro +MSUCode = $00277E ;@ pushpc -org $008901 -LDA.b #SPCData : STA $00 -LDA.b #SPCData>>8 : STA $01 -LDA.b #SPCData>>16 : STA $02 -;@ pullpc -SPCData: -;@ check bankcross off -%copybin($0C8000, $7BCA) - -!SPCEngineStart = $0800 -!SPCCodeStart = $07A7 - -dw ($0F9E+(!SPCEngineStart-!SPCCodeStart)) -dw !SPCCodeStart - -;@ pushpc -;@ pushbase - -arch spc700 -base !SPCCodeStart -org $34FBCE;-(!SPCEngineStart-!SPCCodeStart) -NewSPCCode: - -SpecialCommand_Mute: -CMP A,#$F0 ; The thing we overwrote -BNE + - JMP $0A81 ; SilenceSong -+ -CMP A,#$FA ; New mute command $FA -BNE + - MOV $F4,A - MOV A,#$00 - MOV $0A4A,A ; $0A49: MOV A,#$70 -> MOV A,#$00 - MOV $0AF3,A ; $0AF2: MOV $059,#$C0 -> MOV $059,#$00 - MOV $0C32,A ; $0C32: MOVW $058,YA -> NOP #2 - MOV $0C33,A - MOV A,#$C4 ; $0D19: MOVW $058,YA -> MOV A,$058 - MOV $0D19,A - MOV A,#$58 - MOV $0D1A,A - BRA +++ -+ -CMP A,#$FB ; New unmute command $FB -BEQ + - JMP $0A9D ; NewSongInput -+ -MOV $F4,A -MOV A,#$70 -MOV $0A4A,A ; $0A49: MOV A,#$70 -MOV A,#$C0 -MOV $0AF3,A ; $0AF2: MOV $059,#$C0 -MOV A,#$DA -MOV $0C32,A ; $0C32: MOVW $058,YA -MOV $0D19,A ; $0D19: MOVW $058,YA -MOV A,#$58 -MOV $0C33,A -MOV $0D1A,A -+++ -CALL $0A81 ; SilenceSong -- : MOV A,$F4 - BNE - - CMP A,$F4 - BNE - -MOV $F4,$00 -RET - -org !SPCEngineStart - -arch 65816 -SPCEngineStart: -;@ pullbase -;@ pullpc -skip !SPCEngineStart-!SPCCodeStart -%copybin($0CFBCE, $57B2) -SPCEngineEnd: -;@ check bankcross on ; Change track 15 (unused) to point to 13 (Death Mountain) so dark woods can be track 15 ; Bank 1 org $1A9F15 ; PC 0x0D1F15 ; SPC $D01C - dw #$2B00 ; Set track 15 pointer to track 13's data + dw $2B00 ; Set track 15 pointer to track 13's data -; Bank 2 -org $359F6E ; PC 0x1A9F6E ; SPC $D01C - dw #$2B00 ; Set track 15 pointer to track 13's data +pullpc + +;--------------------------------------------------------------------------------------------------- arch spc700 -org $34FE9A ; PC 0x1A7E9A ; SPC $0A73 - JMP !SPCCodeStart : NOP + +;@ pushpc +;@ pushbase +org $19FE41 ; SPC 0A73 + JMP MSUCode + +; Hijack unreachable SFX data for globally available code +org $1A9B2E +base MSUCode + +SpecialCommand_Mute: + CMP A,#$F0 ; The thing we overwrote + BNE + + JMP $0A81 ; SilenceSong + + + CMP A,#$FA ; New mute command $FA + BNE + + MOV $F4,A + MOV A,#$00 + MOV $0A4A,A ; $0A49: MOV A,#$70 -> MOV A,#$00 + MOV $0AF3,A ; $0AF2: MOV $059,#$C0 -> MOV $059,#$00 + MOV $0C32,A ; $0C32: MOVW $058,YA -> NOP #2 + MOV $0C33,A + MOV A,#$C4 ; $0D19: MOVW $058,YA -> MOV A,$058 + MOV $0D19,A + MOV A,#$58 + MOV $0D1A,A + BRA +++ + + + CMP A,#$FB ; New unmute command $FB + BEQ + + JMP $0A9D ; NewSongInput + + + MOV $F4,A + MOV A,#$70 + MOV $0A4A,A ; $0A49: MOV A,#$70 + MOV A,#$C0 + MOV $0AF3,A ; $0AF2: MOV $059,#$C0 + MOV A,#$DA + MOV $0C32,A ; $0C32: MOVW $058,YA + MOV $0D19,A ; $0D19: MOVW $058,YA + MOV A,#$58 + MOV $0C33,A + MOV $0D1A,A + +++ + CALL $0A81 ; SilenceSong +- MOV A,$F4 + BNE - + CMP A,$F4 + BNE - + MOV $F4,$00 + RET + +warnpc $1A9B91 + +;@ pullbase +;@ pullpc + arch 65816 diff --git a/stats.asm b/stats.asm index dab1e48..6e66c75 100644 --- a/stats.asm +++ b/stats.asm @@ -450,6 +450,7 @@ IncrementMagicUseCounterOne: !OW_MIRROR_COUNTER = "$7EF43A" IncrementOWMirror: PHA + LDA #$08 : STA $021B ; fail race game LDA !LOCK_STATS : BNE + LDA $7EF3CA : BEQ + ; only do this for DW->LW LDA !OW_MIRROR_COUNTER : INC : STA !OW_MIRROR_COUNTER diff --git a/tables.asm b/tables.asm index 3fdb03d..5d25b16 100644 --- a/tables.asm +++ b/tables.asm @@ -1906,6 +1906,398 @@ org $30E36D ; PC 0x18636D ;BerserkerMulti.world Seed GUID db #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00, #$00 +;-------------------------------------------------------------------------------- +RoomHeaders: +org $30DA00 : RoomHeader_0000: ; pc 0x185A00 +db $41, $21, $13, $22, $07, $3D, $00, $00, $00, $10, $C0, $00, $00, $04 + +org $30DA0E : RoomHeader_0001: ; pc 0x185A0E +db $C0, $00, $00, $04, $00, $00, $00, $00, $00, $00, $72, $00, $50, $52 + +org $30DA1C : RoomHeader_0002: ; pc 0x185A1C +db $C0, $1D, $04, $06, $00, $14, $00, $00, $00, $00, $11, $00, $18, $0D + +org $30DA2A : RoomHeader_0003: ; pc 0x185A2A +db $C0, $07, $06, $19, $00, $00, $00, $00, $0C, $02, $12, $00, $00, $00 + +org $30DA38 : RoomHeader_0004: ; pc 0x185A38 +db $00, $18, $0D, $26, $00, $26, $14, $00, $00, $00, $B5, $00, $08, $08 + +org $30DA46 : RoomHeader_0005: ; pc 0x185A46 +db $00, $08, $08, $14, $00, $25, $00, $20, $06, $05, $0C, $00, $25, $00 + +org $30DA54 : RoomHeader_0006: ; pc 0x185A54 +db $00, $08, $08, $14, $00, $25, $00, $20, $06, $05, $0C, $00, $25, $00 + +org $30DA62 : RoomHeader_0007: ; pc 0x185A62 +db $20, $06, $05, $0C, $00, $25, $00, $00, $00, $17, $17, $C0, $07, $06 + +org $30DA70 : RoomHeader_0008: ; pc 0x185A70 +db $C0, $07, $06, $07, $00, $00, $00, $00, $0F, $07, $19, $00, $27, $00 + +org $30DA7E : RoomHeader_0009: ; pc 0x185A7E +db $00, $0F, $07, $19, $00, $27, $00, $00, $00, $4B, $4A, $4A, $00, $0F + +org $30DA8C : RoomHeader_000A: ; pc 0x185A8C +db $00, $0F, $07, $19, $00, $27, $00, $00, $00, $09, $3A, $01, $0F, $07 + +org $30DA9A : RoomHeader_000B: ; pc 0x185A9A +db $01, $0F, $07, $19, $00, $03, $00, $00, $00, $6A, $1B, $C0, $28, $0E + +org $30DAA8 : RoomHeader_000C: ; pc 0x185AA8 +db $C0, $28, $0E, $13, $00, $00, $00, $00, $00, $00, $6B, $8C, $8C, $40 + +org $30DAB6 : RoomHeader_000D: ; pc 0x185AB6 +db $40, $1B, $0E, $18, $05, $38, $00, $00, $13, $0B, $1C, $00, $08, $00 + +org $30DAC4 : RoomHeader_000E: ; pc 0x185AC4 +db $00, $13, $0B, $1C, $00, $08, $00, $00, $00, $00, $1E, $00, $21, $13 + +org $30DAD2 : RoomHeader_000F: ; pc 0x185AD2 +db $00, $21, $13, $22, $00, $00, $00, $00, $01, $01, $01, $00, $00, $00 + +org $30DAE0 : RoomHeader_0010: ; pc 0x185AE0 +db $00, $21, $13, $22, $00, $00, $00, $00, $01, $01, $01, $00, $00, $00 + +org $30DAEE : RoomHeader_0011: ; pc 0x185AEE +db $00, $01, $01, $01, $00, $00, $00, $08, $00, $00, $02, $C0, $1D, $04 + +org $30DAFC : RoomHeader_0012: ; pc 0x185AFC +db $C0, $1D, $04, $06, $00, $00, $00, $00, $18, $0D, $26, $00, $00, $00 + +org $30DB0A : RoomHeader_0013: ; pc 0x185B0A +db $00, $18, $0D, $26, $00, $00, $00, $00, $18, $0D, $1E, $00, $00, $00 + +org $30DB18 : RoomHeader_0014: ; pc 0x185B18 +db $20, $18, $0D, $26, $00, $00, $00, $C0, $18, $0D, $26, $00, $00, $00 + +org $30DB26 : RoomHeader_0015: ; pc 0x185B26 +db $C0, $18, $0D, $26, $00, $00, $00, $00, $00, $00, $B6, $90, $08, $08 + +org $30DB34 : RoomHeader_0016: ; pc 0x185B34 +db $90, $08, $08, $11, $03, $00, $00, $00, $00, $00, $66, $20, $06, $05 + +org $30DB42 : RoomHeader_0017: ; pc 0x185B42 +db $20, $06, $05, $19, $00, $35, $00, $00, $00, $27, $07, $27, $01, $0F + +org $30DB50 : RoomHeader_0018: ; pc 0x185B50 +db $00, $07, $06, $07, $00, $00, $00, $00, $22, $12, $07, $00, $00, $00 + +org $30DB5E : RoomHeader_0019: ; pc 0x185B5E +db $01, $0F, $07, $19, $00, $00, $00, $00, $0F, $07, $19, $00, $16, $00 + +org $30DB6C : RoomHeader_001A: ; pc 0x185B6C +db $00, $0F, $07, $19, $00, $16, $00, $00, $00, $00, $6A, $6A, $68, $0F + +org $30DB7A : RoomHeader_001B: ; pc 0x185B7A +db $68, $0F, $07, $08, $00, $03, $1C, $00, $00, $00, $0B, $00, $1A, $0E + +org $30DB88 : RoomHeader_001C: ; pc 0x185B88 +db $00, $1A, $0E, $09, $00, $04, $3F, $00, $00, $00, $8C, $00, $1B, $0E + +org $30DB96 : RoomHeader_001D: ; pc 0x185B96 +db $00, $1B, $0E, $18, $00, $00, $00, $00, $00, $00, $4C, $20, $13, $0B + +org $30DBA4 : RoomHeader_001E: ; pc 0x185BA4 +db $20, $13, $0B, $1C, $00, $17, $00, $00, $00, $3E, $0E, $00, $13, $0B + +org $30DBB2 : RoomHeader_001F: ; pc 0x185BB2 +db $00, $13, $0B, $29, $00, $17, $00, $00, $00, $00, $3F, $20, $0C, $02 + +org $30DBC0 : RoomHeader_0020: ; pc 0x185BC0 +db $20, $0C, $02, $12, $00, $15, $25, $01, $01, $01, $01, $00, $00, $00 + +org $30DBCE : RoomHeader_0021: ; pc 0x185BCE +db $01, $01, $01, $01, $00, $00, $00, $00, $18, $0D, $26, $00, $01, $00 + +org $30DBDC : RoomHeader_0022: ; pc 0x185BDC +db $01, $01, $01, $01, $00, $00, $00, $00, $18, $0D, $26, $00, $01, $00 + +org $30DBEA : RoomHeader_0023: ; pc 0x185BEA +db $00, $18, $0D, $26, $00, $00, $00, $00, $18, $0D, $1E, $00, $00, $00 + +org $30DBF8 : RoomHeader_0024: ; pc 0x185BF8 +db $00, $18, $0D, $26, $00, $01, $00, $00, $0A, $08, $11, $00, $16, $00 + +org $30DC06 : RoomHeader_0025: ; pc 0x185C06 +db $00, $0A, $08, $11, $00, $16, $00, $00, $00, $00, $76, $76, $76, $20 + +org $30DC14 : RoomHeader_0026: ; pc 0x185C14 +db $00, $0A, $08, $11, $00, $16, $00, $00, $00, $00, $76, $76, $76, $20 + +org $30DC22 : RoomHeader_0027: ; pc 0x185C22 +db $20, $06, $05, $19, $00, $36, $00, $00, $00, $31, $17, $31, $80, $0A + +org $30DC30 : RoomHeader_0028: ; pc 0x185C30 +db $80, $0A, $08, $11, $00, $32, $1B, $00, $00, $00, $38, $CC, $0E, $09 + +org $30DC3E : RoomHeader_0029: ; pc 0x185C3E +db $CC, $0E, $09, $1A, $02, $25, $00, $00, $0F, $07, $19, $00, $00, $00 + +org $30DC4C : RoomHeader_002A: ; pc 0x185C4C +db $00, $0F, $07, $19, $00, $00, $00, $C0, $0F, $07, $2B, $00, $16, $00 + +org $30DC5A : RoomHeader_002B: ; pc 0x185C5A +db $C0, $0F, $07, $2B, $00, $16, $00, $00, $00, $00, $3B, $00, $13, $0B + +org $30DC68 : RoomHeader_002C: ; pc 0x185C68 +db $00, $07, $06, $07, $00, $00, $00, $00, $22, $12, $07, $00, $00, $00 + +org $30DC76 : RoomHeader_002D: ; pc 0x185C76 +db $00, $13, $0B, $1C, $00, $2A, $00, $C0, $07, $06, $19, $00, $00, $00 + +org $30DC84 : RoomHeader_002E: ; pc 0x185C84 +db $00, $13, $0B, $1C, $00, $2A, $00, $C0, $07, $06, $19, $00, $00, $00 + +org $30DC92 : RoomHeader_002F: ; pc 0x185C92 +db $C0, $07, $06, $19, $00, $00, $00, $00, $0C, $02, $12, $00, $00, $00 + +org $30DCA0 : RoomHeader_0030: ; pc 0x185CA0 +db $00, $0C, $02, $12, $00, $00, $00, $00, $00, $00, $40, $20, $06, $05 + +org $30DCAE : RoomHeader_0031: ; pc 0x185CAE +db $20, $06, $05, $19, $00, $37, $04, $22, $00, $77, $27, $77, $01, $01 + +org $30DCBC : RoomHeader_0032: ; pc 0x185CBC +db $01, $01, $01, $01, $00, $00, $00, $00, $00, $00, $42, $00, $04, $05 + +org $30DCCA : RoomHeader_0033: ; pc 0x185CCA +db $00, $04, $05, $0B, $00, $15, $25, $80, $0A, $08, $11, $00, $00, $00 + +org $30DCD8 : RoomHeader_0034: ; pc 0x185CD8 +db $80, $0A, $08, $11, $00, $00, $00, $00, $00, $00, $54, $80, $0A, $08 + +org $30DCE6 : RoomHeader_0035: ; pc 0x185CE6 +db $80, $0A, $08, $11, $00, $00, $19, $80, $0A, $08, $11, $00, $00, $00 + +org $30DCF4 : RoomHeader_0036: ; pc 0x185CF4 +db $80, $0A, $08, $11, $00, $00, $00, $80, $0A, $08, $11, $00, $00, $00 + +org $30DD02 : RoomHeader_0037: ; pc 0x185D02 +db $80, $0A, $08, $11, $00, $00, $19, $80, $0A, $08, $11, $00, $00, $00 + +org $30DD10 : RoomHeader_0038: ; pc 0x185D10 +db $80, $0A, $08, $11, $00, $00, $00, $00, $00, $00, $28, $20, $0D, $09 + +org $30DD1E : RoomHeader_0039: ; pc 0x185D1E +db $20, $0D, $09, $13, $00, $00, $00, $00, $00, $29, $20, $0F, $07, $19 + +org $30DD2C : RoomHeader_003A: ; pc 0x185D2C +db $20, $0F, $07, $19, $00, $00, $00, $00, $00, $0A, $0A, $00, $0F, $07 + +org $30DD3A : RoomHeader_003B: ; pc 0x185D3A +db $00, $0F, $07, $08, $00, $00, $00, $00, $00, $00, $2B, $00, $07, $06 + +org $30DD48 : RoomHeader_003C: ; pc 0x185D48 +db $00, $07, $06, $13, $00, $00, $00, $20, $1A, $0E, $0C, $00, $33, $00 + +org $30DD56 : RoomHeader_003D: ; pc 0x185D56 +db $20, $1A, $0E, $0C, $00, $33, $00, $00, $00, $96, $96, $CC, $13, $0B + +org $30DD64 : RoomHeader_003E: ; pc 0x185D64 +db $CC, $13, $0B, $29, $02, $02, $00, $00, $00, $00, $1E, $00, $13, $0B + +org $30DD72 : RoomHeader_003F: ; pc 0x185D72 +db $00, $13, $0B, $29, $00, $27, $14, $00, $00, $00, $1F, $5F, $C0, $00 + +org $30DD80 : RoomHeader_0040: ; pc 0x185D80 +db $C0, $00, $02, $27, $00, $00, $00, $00, $00, $00, $30, $B0, $01, $00 + +org $30DD8E : RoomHeader_0041: ; pc 0x185D8E +db $01, $00, $00, $02, $00, $13, $00, $00, $00, $00, $42, $01, $01, $01 + +org $30DD9C : RoomHeader_0042: ; pc 0x185D9C +db $01, $01, $01, $01, $00, $00, $00, $00, $00, $00, $41, $32, $68, $04 + +org $30DDAA : RoomHeader_0043: ; pc 0x185DAA +db $68, $04, $05, $0A, $00, $00, $1D, $00, $17, $0A, $1B, $00, $01, $00 + +org $30DDB8 : RoomHeader_0044: ; pc 0x185DB8 +db $00, $17, $0A, $1B, $00, $01, $00, $60, $17, $0A, $1B, $00, $01, $00 + +org $30DDC6 : RoomHeader_0045: ; pc 0x185DC6 +db $60, $17, $0A, $1B, $00, $01, $00, $00, $00, $00, $BC, $00, $0A, $08 + +org $30DDD4 : RoomHeader_0046: ; pc 0x185DD4 +db $00, $0A, $08, $11, $00, $3C, $00, $00, $0D, $09, $13, $00, $33, $34 + +org $30DDE2 : RoomHeader_0047: ; pc 0x185DE2 +db $00, $0D, $09, $13, $00, $33, $34, $00, $0F, $07, $19, $00, $17, $00 + +org $30DDF0 : RoomHeader_0048: ; pc 0x185DF0 +db $00, $0D, $09, $13, $00, $33, $34, $00, $0F, $07, $19, $00, $17, $00 + +org $30DDFE : RoomHeader_0049: ; pc 0x185DFE +db $00, $0D, $09, $13, $00, $33, $34, $00, $0F, $07, $19, $00, $17, $00 + +org $30DE0C : RoomHeader_004A: ; pc 0x185E0C +db $00, $0F, $07, $19, $00, $17, $00, $00, $00, $00, $09, $09, $00, $0F + +org $30DE1A : RoomHeader_004B: ; pc 0x185E1A +db $00, $0F, $07, $08, $00, $01, $00, $00, $00, $09, $00, $1A, $0E, $0C + +org $30DE28 : RoomHeader_004C: ; pc 0x185E28 +db $00, $1A, $0E, $0C, $00, $00, $00, $00, $00, $00, $1D, $20, $1A, $0E + +org $30DE36 : RoomHeader_004D: ; pc 0x185E36 +db $20, $1A, $0E, $0C, $00, $32, $3F, $00, $00, $A6, $A6, $00, $13, $0B + +org $30DE44 : RoomHeader_004E: ; pc 0x185E44 +db $00, $13, $0B, $29, $00, $17, $00, $00, $00, $00, $6E, $00, $13, $0B + +org $30DE52 : RoomHeader_004F: ; pc 0x185E52 +db $00, $13, $0B, $1C, $00, $00, $00, $00, $00, $BE, $C0, $00, $00, $04 + +org $30DE60 : RoomHeader_0050: ; pc 0x185E60 +db $C0, $00, $00, $04, $00, $00, $00, $00, $00, $00, $00, $00, $01, $01 + +org $30DE6E : RoomHeader_0051: ; pc 0x185E6E +db $C0, $00, $00, $03, $00, $00, $00, $00, $00, $00, $61, $C0, $00, $00 + +org $30DE7C : RoomHeader_0052: ; pc 0x185E7C +db $C0, $00, $00, $04, $00, $00, $00, $00, $00, $00, $00, $00, $01, $01 + +org $30DE8A : RoomHeader_0053: ; pc 0x185E8A +db $C0, $04, $05, $0A, $00, $03, $00, $00, $00, $00, $63, $20, $0A, $08 + +org $30DE98 : RoomHeader_0054: ; pc 0x185E98 +db $20, $0A, $08, $11, $00, $00, $00, $00, $00, $34, $34, $01, $01, $10 + +org $30DEA6 : RoomHeader_0055: ; pc 0x185EA6 +db $01, $01, $10, $0D, $00, $00, $00, $00, $0D, $09, $13, $00, $23, $00 + +org $30DEB4 : RoomHeader_0056: ; pc 0x185EB4 +db $00, $0D, $09, $13, $00, $23, $00, $00, $0D, $09, $13, $00, $16, $00 + +org $30DEC2 : RoomHeader_0057: ; pc 0x185EC2 +db $00, $0D, $09, $13, $00, $16, $00, $00, $0D, $09, $13, $00, $21, $28 + +org $30DED0 : RoomHeader_0058: ; pc 0x185ED0 +db $00, $0D, $09, $13, $00, $21, $28, $C0, $0D, $09, $13, $00, $00, $00 + +org $30DEDE : RoomHeader_0059: ; pc 0x185EDE +db $C0, $0D, $09, $13, $00, $00, $00, $00, $10, $07, $15, $00, $25, $00 + +org $30DEEC : RoomHeader_005A: ; pc 0x185EEC +db $00, $10, $07, $15, $00, $25, $00, $C0, $1B, $0E, $0A, $00, $17, $00 + +org $30DEFA : RoomHeader_005B: ; pc 0x185EFA +db $C0, $1B, $0E, $0A, $00, $17, $00, $00, $1B, $0E, $0A, $00, $00, $00 + +org $30DF08 : RoomHeader_005C: ; pc 0x185F08 +db $00, $1B, $0E, $0A, $00, $00, $00, $00, $00, $00, $5D, $00, $24, $0E + +org $30DF16 : RoomHeader_005D: ; pc 0x185F16 +db $00, $24, $0E, $23, $00, $09, $00, $00, $00, $00, $5C, $20, $13, $0B + +org $30DF24 : RoomHeader_005E: ; pc 0x185F24 +db $20, $13, $0B, $1C, $00, $00, $00, $00, $00, $7E, $7E, $00, $13, $0B + +org $30DF32 : RoomHeader_005F: ; pc 0x185F32 +db $00, $13, $0B, $1C, $00, $27, $00, $00, $00, $00, $3F, $7F, $C0, $00 + +org $30DF40 : RoomHeader_0060: ; pc 0x185F40 +db $C0, $00, $00, $04, $00, $00, $00, $C0, $00, $00, $04, $00, $00, $00 + +org $30DF4E : RoomHeader_0061: ; pc 0x185F4E +db $C0, $00, $00, $04, $00, $00, $00, $08, $00, $00, $51, $00, $09, $05 + +org $30DF5C : RoomHeader_0062: ; pc 0x185F5C +db $C0, $00, $00, $04, $00, $00, $00, $C0, $00, $00, $04, $00, $00, $00 + +org $30DF6A : RoomHeader_0063: ; pc 0x185F6A +db $00, $09, $05, $0A, $00, $0D, $00, $00, $00, $00, $53, $E0, $23, $0A + +org $30DF78 : RoomHeader_0064: ; pc 0x185F78 +db $E0, $23, $0A, $21, $00, $17, $00, $00, $00, $00, $AB, $E0, $23, $0A + +org $30DF86 : RoomHeader_0065: ; pc 0x185F86 +db $E0, $23, $0A, $21, $00, $00, $00, $00, $00, $AC, $C0, $0A, $08, $11 + +org $30DF94 : RoomHeader_0066: ; pc 0x185F94 +db $C0, $0A, $08, $11, $00, $3C, $00, $00, $00, $00, $16, $00, $0D, $09 + +org $30DFA2 : RoomHeader_0067: ; pc 0x185FA2 +db $00, $0D, $09, $13, $00, $22, $00, $00, $0D, $09, $13, $00, $00, $00 + +org $30DFB0 : RoomHeader_0068: ; pc 0x185FB0 +db $00, $0D, $09, $13, $00, $00, $00, $01, $0F, $07, $19, $00, $00, $00 + +org $30DFBE : RoomHeader_0069: ; pc 0x185FBE +db $01, $0F, $07, $19, $00, $00, $00, $00, $00, $00, $1A, $1A, $00, $1B + +org $30DFCC : RoomHeader_006A: ; pc 0x185FCC +db $01, $0F, $07, $19, $00, $00, $00, $00, $00, $00, $1A, $1A, $00, $1B + +org $30DFDA : RoomHeader_006B: ; pc 0x185FDA +db $00, $1B, $0E, $0A, $00, $08, $0B, $00, $00, $00, $0C, $00, $24, $0E + +org $30DFE8 : RoomHeader_006C: ; pc 0x185FE8 +db $00, $24, $0E, $23, $00, $03, $3F, $00, $00, $00, $A5, $00, $24, $0E + +org $30DFF6 : RoomHeader_006D: ; pc 0x185FF6 +db $00, $24, $0E, $23, $00, $05, $00, $00, $13, $0B, $1C, $00, $02, $00 + +org $30E004 : RoomHeader_006E: ; pc 0x186004 +db $00, $13, $0B, $1C, $00, $02, $00, $00, $00, $00, $4E, $00, $01, $01 + +org $30E012 : RoomHeader_006F: ; pc 0x186012 +db $00, $01, $01, $04, $00, $00, $00, $08, $00, $00, $71, $80, $C0, $01 + +org $30E020 : RoomHeader_0070: ; pc 0x186020 +db $00, $01, $01, $04, $00, $00, $00, $08, $00, $00, $71, $80, $C0, $01 + +org $30E02E : RoomHeader_0071: ; pc 0x18602E +db $C0, $01, $01, $04, $00, $08, $00, $00, $00, $00, $70, $C0, $01, $01 + +org $30E03C : RoomHeader_0072: ; pc 0x18603C +db $C0, $01, $01, $04, $00, $00, $00, $08, $00, $00, $01, $00, $09, $05 + +org $30E04A : RoomHeader_0073: ; pc 0x18604A +db $00, $09, $05, $0A, $00, $17, $00, $00, $09, $05, $0A, $00, $27, $00 + +org $30E058 : RoomHeader_0074: ; pc 0x186058 +db $00, $09, $05, $0A, $00, $27, $00, $00, $09, $05, $0A, $00, $01, $00 + +org $30E066 : RoomHeader_0075: ; pc 0x186066 +db $00, $09, $05, $0A, $00, $01, $00, $80, $0A, $08, $11, $00, $00, $18 + +org $30E074 : RoomHeader_0076: ; pc 0x186074 +db $80, $0A, $08, $11, $00, $00, $18, $00, $00, $00, $26, $26, $26, $C0 + +org $30E082 : RoomHeader_0077: ; pc 0x186082 +db $C0, $06, $05, $19, $00, $00, $00, $00, $00, $A7, $31, $87, $87, $00 + +org $30E090 : RoomHeader_0078: ; pc 0x186090 +db $00, $28, $0E, $13, $00, $03, $39, $00, $00, $9D, $00, $28, $0E, $13 + +org $30E09E : RoomHeader_0079: ; pc 0x18609E +db $00, $28, $0E, $13, $00, $03, $39, $00, $00, $9D, $00, $28, $0E, $13 + +org $30E0AC : RoomHeader_007A: ; pc 0x1860AC +db $00, $28, $0E, $13, $00, $03, $39, $00, $00, $9D, $00, $28, $0E, $13 + +org $30E0BA : RoomHeader_007B: ; pc 0x1860BA +db $00, $28, $0E, $13, $00, $03, $39, $00, $00, $9D, $00, $28, $0E, $13 + +org $30E0C8 : RoomHeader_007C: ; pc 0x1860C8 +db $00, $28, $0E, $13, $00, $20, $00, $00, $28, $0E, $13, $00, $04, $3C + +org $30E0D6 : RoomHeader_007D: ; pc 0x1860D6 +db $00, $28, $0E, $13, $00, $04, $3C, $00, $00, $9B, $20, $13, $0B, $1C + +org $30E0E4 : RoomHeader_007E: ; pc 0x1860E4 +db $20, $13, $0B, $1C, $00, $2B, $17, $00, $00, $9E, $5E, $00, $13, $0B + +org $30E0F2 : RoomHeader_007F: ; pc 0x1860F2 +db $00, $13, $0B, $1C, $00, $00, $00, $00, $00, $00, $5F, $60, $01, $01 + +org $30E100 : RoomHeader_0080: ; pc 0x186100 +db $60, $01, $01, $04, $00, $00, $00, $00, $00, $00, $70, $C0, $01, $01 + +org $30E10E : RoomHeader_0081: ; pc 0x18610E +db $C0, $01, $01, $04, $00, $00, $00, $00, $09, $05, $0A, $00, $0D, $00 + org $30E37D ; PC 0x18637D Enable_TerrorPin_AI_Fix: db #$01 @@ -1928,4 +2320,4 @@ db #$02 org $30F000 ; PC 0x187000-0x18700F CompassTotal: -db $08, $08, $06, $06, $02, $0A, $0E, $08, $08, $08, $06, $08, $0C, $1B, $00, $00 \ No newline at end of file +db $08, $08, $06, $06, $02, $0A, $0E, $08, $08, $08, $06, $08, $0C, $1B, $00, $00 diff --git a/textrenderer.asm b/textrenderer.asm new file mode 100644 index 0000000..cbe880b --- /dev/null +++ b/textrenderer.asm @@ -0,0 +1,433 @@ +!INVERTED_TEMP = $35 + +RenderCharSetColorExtended_init: + stz !INVERTED_TEMP + jsl $00d84e + rtl + +RenderCharSetColorExtended_close: + stz !INVERTED_TEMP + lda $010c + sta $10 + rtl + +RenderCharSetColorExtended: + pha + and #$10 + cmp #$10 + beq .inverted + lda #$00 + bra .end +.inverted + lda #$01 +.end + sta !INVERTED_TEMP + pla + and #$07 : asl : asl + rtl + +RenderCharToMapExtended: + phx : tya : asl #2 : tax + lda.l FontProperties, x + and #$0001 + bne .uncompressed +.compressed + plx + lda #$0000 + sta $00 + lda #$007f + sta $02 + lda #$0000 + clc : adc #$0020 + sta $03 + lda #$007f + sta $05 + jml RenderCharToMapExtended_return + +.uncompressed + lda.l FontProperties+$2, x + plx + clc : adc #(NewFont&$ffff) + sta $00 + clc : adc #$0100 + pha + lda #(NewFont>>16) + sta $02 + pla : sta $03 + lda #(NewFont>>16) + sta $05 + jml RenderCharToMapExtended_return + +RenderCharLookupWidthDraw: + rep #$30 + phx : lda $09 : and #$fffe : tax + lda.l FontProperties, x + bmi .thin +.wide + plx : sep #$30 + lda $09 : and #$03 : tay + lda $fd7c, y : tay + jml RenderCharLookupWidthDraw_return +.thin + xba : and #$004f : bne .vwf + plx : sep #$30 + lda $09 : and #$03 : phx : tax + lda.l RenderCharThinTable, x : tay : plx + jml RenderCharLookupWidthDraw_return +.vwf + and #$000f : tay + plx : sep #$30 + lda $09 : and #$03 : phx : tax + cpx #$00 : bne + + tya : bra ++ ++ lda.l RenderCharThinTable, x +++ tay : plx : jml RenderCharLookupWidthDraw_return + + +RenderCharLookupWidth: + phx : lda $09 : and #$fffe : tax + lda.l FontProperties, x + bmi .thin +.wide + plx : lda $fd7c, x : clc + rtl +.thin + xba : and #$004f : bne .vwf + plx : lda.l RenderCharThinTable, x : clc + rtl +.vwf + and #$000f + plx : cpx #$0000 : beq + : lda.l RenderCharThinTable, x ++ clc : rtl + +RenderCharThinTable: + db $08, $00, $ff + +RenderCharExtended: + pha + asl : asl : tax + lda.l FontProperties, x + and #$00ff + bne .renderUncompressed + +.renderOriginal + pla : asl : tax : asl : adc $0e + jml RenderCharExtended_returnOriginal + +.renderUncompressed + pla : phb : pea.w NewFont>>8 : plb : plb + lda.l FontProperties+$2, x + tay + + lda !INVERTED_TEMP + bne .inverted + + ldx #$00000 +- + lda.w NewFont, y + sta.l $7EBFC0, x + lda.w NewFont+$100, y + sta.l $7EBFC0+$16, x + inx #2 + iny #2 + cpx #$0010 + bne - + bra .end + +.inverted + ldx #$00000 +- + lda.w NewFontInverted, y + sta.l $7EBFC0, x + lda.w NewFontInverted+$100, y + sta.l $7EBFC0+$16, x + inx #2 + iny #2 + cpx #$0010 + bne - + +.end + plb + jml RenderCharExtended_returnUncompressed + +; Table of font properties and tilemap offset +; Properties are these for now: +; tv--wwww -------u +; t = thin spacing (0 px instead of 3 px) +; u = uncompressed character loaded from offset +; v = use variable width rendering for this character (thin spacing must be set as well) +; w = character width for VWF rendering + +FontProperties: +; props, offset + dw $0000, $0000 ; 00 + dw $0000, $0000 ; 01 + dw $0000, $0000 ; 02 + dw $0000, $0000 ; 03 + dw $0000, $0000 ; 04 + dw $0000, $0000 ; 05 + dw $0000, $0000 ; 06 + dw $0000, $0000 ; 07 + dw $0000, $0000 ; 08 + dw $0000, $0000 ; 09 + dw $0000, $0000 ; 0A + dw $0000, $0000 ; 0B + dw $0000, $0000 ; 0C + dw $0000, $0000 ; 0D + dw $0000, $0000 ; 0E + dw $0000, $0000 ; 0F + + dw $0000, $0000 ; 10 + dw $0000, $0000 ; 11 + dw $0000, $0000 ; 12 + dw $0000, $0000 ; 13 + dw $0000, $0000 ; 14 + dw $0000, $0000 ; 15 + dw $0000, $0000 ; 16 + dw $0000, $0000 ; 17 + dw $0000, $0000 ; 18 + dw $0000, $0000 ; 19 + dw $0000, $0000 ; 1A + dw $0000, $0000 ; 1B + dw $0000, $0000 ; 1C + dw $0000, $0000 ; 1D + dw $0000, $0000 ; 1E + dw $0000, $0000 ; 1F + + dw $0000, $0000 ; 20 + dw $0000, $0000 ; 21 + dw $0000, $0000 ; 22 + dw $0000, $0000 ; 23 + dw $0000, $0000 ; 24 + dw $0000, $0000 ; 25 + dw $0000, $0000 ; 26 + dw $0000, $0000 ; 27 + dw $0000, $0000 ; 28 + dw $0000, $0000 ; 29 + dw $0000, $0000 ; 2A + dw $0000, $0000 ; 2B + dw $0000, $0000 ; 2C + dw $0000, $0000 ; 2D + dw $0000, $0000 ; 2E + dw $0000, $0000 ; 2F + + dw $8001, $0400 ; 30 ; a + dw $8001, $0410 ; 31 + dw $8001, $0420 ; 32 + dw $8001, $0430 ; 33 + dw $8001, $0440 ; 34 + dw $8001, $0450 ; 35 + dw $8001, $0460 ; 36 + dw $8001, $0470 ; 37 + dw $8001, $0480 ; 38 + dw $8001, $0490 ; 39 + dw $8001, $04A0 ; 3A + dw $8001, $04B0 ; 3B + dw $8001, $04C0 ; 3C + dw $8001, $04D0 ; 3D + dw $8001, $04E0 ; 3E + dw $8001, $04F0 ; 3F + + dw $8001, $0600 ; 40 + dw $8001, $0610 ; 41 + dw $8001, $0620 ; 42 + dw $8001, $0630 ; 43 + dw $8001, $0640 ; 44 + dw $8001, $0650 ; 45 + dw $8001, $0660 ; 46 + dw $8001, $0670 ; 47 + dw $8001, $0680 ; 48 + dw $8001, $0690 ; 49 ; z + dw $8001, $06F0 ; 4A ; : + dw $8001, $0A90 ; 4B ; @ (thin) + dw $8001, $0AA0 ; 4C ; # (thin) + dw $0000, $0000 ; 4D + dw $0000, $0000 ; 4E + dw $8001, $0EF0 ; 4F ; + + dw $0000, $0000 ; 50 + dw $0000, $0000 ; 51 + dw $0000, $0000 ; 52 + dw $0000, $0000 ; 53 + dw $0000, $0000 ; 54 + dw $0000, $0000 ; 55 + dw $0000, $0000 ; 56 + dw $0000, $0000 ; 57 + dw $0000, $0000 ; 58 + dw $0000, $0000 ; 59 + dw $0000, $0000 ; 5A + dw $0000, $0000 ; 5B + dw $0000, $0000 ; 5C + dw $0000, $0000 ; 5D + dw $0000, $0000 ; 5E + dw $0000, $0000 ; 5F + + dw $0000, $0000 ; 60 + dw $0000, $0000 ; 61 + dw $0000, $0000 ; 62 + dw $0000, $0000 ; 63 + dw $0000, $0000 ; 64 + dw $0000, $0000 ; 65 + dw $0000, $0000 ; 66 + dw $0000, $0000 ; 67 + dw $0000, $0000 ; 68 + dw $0000, $0000 ; 69 + dw $0000, $0000 ; 6A + dw $0000, $0000 ; 6B + dw $0000, $0000 ; 6C + dw $0000, $0000 ; 6D + dw $0000, $0000 ; 6E + dw $0000, $0000 ; 6F + + dw $0000, $0000 ; 70 + dw $0000, $0000 ; 71 + dw $0000, $0000 ; 72 + dw $0000, $0000 ; 73 + dw $0000, $0000 ; 74 + dw $0000, $0000 ; 75 + dw $0000, $0000 ; 76 + dw $0000, $0000 ; 77 + dw $0000, $0000 ; 78 + dw $0000, $0000 ; 79 + dw $0000, $0000 ; 7A + dw $0000, $0000 ; 7B + dw $0000, $0000 ; 7C + dw $0000, $0000 ; 7D + dw $0000, $0000 ; 7E + dw $0000, $0000 ; 7F + + dw $0000, $0000 ; 80 + dw $0000, $0000 ; 81 + dw $0000, $0000 ; 82 + dw $0000, $0000 ; 83 + dw $0000, $0000 ; 84 + dw $0000, $0000 ; 85 + dw $0000, $0000 ; 86 + dw $0000, $0000 ; 87 + dw $0000, $0000 ; 88 + dw $0000, $0000 ; 89 + dw $0000, $0000 ; 8A + dw $0000, $0000 ; 8B + dw $0000, $0000 ; 8C + dw $0000, $0000 ; 8D + dw $0000, $0000 ; 8E + dw $0000, $0000 ; 8F + + dw $0000, $0000 ; 90 + dw $0000, $0000 ; 91 + dw $0000, $0000 ; 92 + dw $0000, $0000 ; 93 + dw $0000, $0000 ; 94 + dw $0000, $0000 ; 95 + dw $0000, $0000 ; 96 + dw $0000, $0000 ; 97 + dw $0000, $0000 ; 98 + dw $0000, $0000 ; 99 + dw $0000, $0000 ; 9A + dw $0000, $0000 ; 9B + dw $0000, $0000 ; 9C + dw $0000, $0000 ; 9D + dw $0000, $0000 ; 9E + dw $0000, $0000 ; 9F + + dw $8001, $0800 ; A0 ; 0 + dw $8001, $0810 ; A1 + dw $8001, $0820 ; A2 + dw $8001, $0830 ; A3 + dw $8001, $0840 ; A4 + dw $8001, $0850 ; A5 + dw $8001, $0860 ; A6 + dw $8001, $0870 ; A7 + dw $8001, $0880 ; A8 + dw $8001, $0890 ; A9 ; 9 + dw $8001, $0000 ; AA ; A + dw $8001, $0010 ; AB + dw $8001, $0020 ; AC + dw $8001, $0030 ; AD + dw $8001, $0040 ; AE + dw $8001, $0050 ; AF + + dw $8001, $0060 ; B0 + dw $8001, $0070 ; B1 + dw $8001, $0080 ; B2 + dw $8001, $0090 ; B3 + dw $8001, $00A0 ; B4 + dw $8001, $00B0 ; B5 + dw $8001, $00C0 ; B6 + dw $8001, $00D0 ; B7 + dw $8001, $00E0 ; B8 + dw $8001, $00F0 ; B9 + dw $8001, $0200 ; BA + dw $8001, $0210 ; BB + dw $8001, $0220 ; BC + dw $8001, $0230 ; BD + dw $8001, $0240 ; BE + dw $8001, $0250 ; BF + + dw $8001, $0260 ; C0 + dw $8001, $0270 ; C1 + dw $8001, $0280 ; C2 + dw $8001, $0290 ; C3 ; Z + dw $8000, $0000 ; C4 + dw $8000, $0000 ; C5 + dw $8001, $06D0 ; C6 ; ? + dw $8001, $06C0 ; C7 ; ! + dw $8001, $02D0 ; C8 ; , + dw $8001, $02B0 ; C9 ; - + dw $8000, $0000 ; CA + dw $8000, $0000 ; CB + dw $8000, $02E0 ; CC ; ... + dw $8001, $02C0 ; CD ; . + dw $8001, $02F0 ; CE ; ~ + dw $8000, $0000 ; CF + + dw $0000, $0000 ; D0 + dw $0000, $0000 ; D1 + dw $8001, $06a0 ; D2 ; Link face left + dw $8001, $06b0 ; D3 ; Link face right + dw $0000, $0000 ; D4 + dw $0000, $0000 ; D5 + dw $0000, $0000 ; D6 + dw $0000, $0000 ; D7 + dw $8001, $06E0 ; D8 ; ' + dw $0000, $0000 ; D9 + dw $0000, $0000 ; DA + dw $0000, $0000 ; DB + dw $0000, $0000 ; DC + dw $0000, $0000 ; DD + dw $0000, $0000 ; DE + dw $0000, $0000 ; DF + + dw $0000, $0000 ; E0 + dw $0000, $0000 ; E1 + dw $0000, $0000 ; E2 + dw $0000, $0000 ; E3 + dw $8001, $02A0 ; E4 ; Cursor |> + dw $0000, $0000 ; E5 + dw $0000, $0000 ; E6 + dw $0000, $0000 ; E7 + dw $0000, $0000 ; E8 + dw $0000, $0000 ; E9 + dw $0000, $0000 ; EA + dw $0000, $0000 ; EB + dw $0000, $0000 ; EC + dw $0000, $0000 ; ED + dw $0000, $0000 ; EE + dw $0000, $0000 ; EF + + dw $0000, $0000 ; F0 + dw $0000, $0000 ; F1 + dw $0000, $0000 ; F2 + dw $0000, $0000 ; F3 + dw $0000, $0000 ; F4 + dw $0000, $0000 ; F5 + dw $0000, $0000 ; F6 + dw $0000, $0000 ; F7 + dw $0000, $0000 ; F8 + dw $0000, $0000 ; F9 + dw $0000, $0000 ; FA + dw $0000, $0000 ; FB + dw $0000, $0000 ; FC + dw $0000, $0000 ; FD + dw $0000, $0000 ; FE + dw $8001, $0EF0 ; FF ; \ No newline at end of file