Merge branch 'main' into overworld_kara

This commit is contained in:
2022-01-24 14:07:50 -08:00
14 changed files with 1006 additions and 113 deletions

View File

@@ -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

View File

@@ -214,3 +214,10 @@ FixJingleGlitch:
.exit
RTL
;--------------------------------------------------------------------------------
SetOverworldTransitionFlags:
LDA #$01
STA $0ABF ; used by witch
STA $021B ; used by race game
RTL

View File

@@ -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

View File

@@ -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

View File

@@ -151,4 +151,4 @@ FlipperScrollWarp:
RTL
+ LDA $7EC184
STA $20
RTL
RTL

View File

@@ -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

View File

@@ -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

View File

@@ -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
;--------------------------------------------------------------------------------

BIN
newfont.bin Normal file

Binary file not shown.

BIN
newfont_inverted.bin Normal file

Binary file not shown.

159
spc.asm
View File

@@ -1,107 +1,74 @@
; WARNING: THIS CODE IS EXTREMELY FRAGILE
macro copybin(source, length)
!copycount #= 0
while !copycount+3 < <length>
dd read4(pctosnes(<source>+!copycount))
!copycount #= !copycount+4
endif
while !copycount < <length>
db read1(pctosnes(<source>+!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

View File

@@ -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

View File

@@ -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
db $08, $08, $06, $06, $02, $0A, $0E, $08, $08, $08, $06, $08, $0C, $1B, $00, $00

433
textrenderer.asm Normal file
View File

@@ -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 ; <sp>
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 ; <sp>