Files
alttpr-baserom/textrenderer.asm
2023-08-12 01:58:50 -04:00

428 lines
11 KiB
NASM

RenderCharSetColorExtended_init:
stz.b Scrap0C
jsl Attract_DecompressStoryGfx
rtl
RenderCharSetColorExtended_close:
stz.b Scrap0C
lda.w GameModeCache
sta.b GameMode
rtl
RenderCharSetColorExtended:
pha
and.b #$10
cmp.b #$10
beq .inverted
lda.b #$00
bra .end
.inverted
lda.b #$01
.end
sta.b Scrap0C
pla
and.b #$07 : asl : asl
rtl
RenderCharToMapExtended:
phx : tya : asl #2 : tax
lda.l FontProperties, x : bit.w #$0001 : bne .uncompressed
.compressed
plx
lda.w #$0000
sta.b Scrap00
lda.w #$007f
sta.b Scrap02
lda.w #$0000
clc : adc.w #$0020
sta.b Scrap03
lda.w #$007f
sta.b Scrap05
jml RenderCharToMapExtended_return
.uncompressed
lda.l FontProperties+$2, x
plx
clc : adc.w #(NewFont&$ffff)
sta.b Scrap00
clc : adc.w #$0100
pha
lda.w #(NewFont>>16)
sta.b Scrap02
pla : sta.b Scrap03
lda.w #(NewFont>>16)
sta.b Scrap05
jml RenderCharToMapExtended_return
RenderCharLookupWidthDraw:
rep #$30
phx : lda.b Scrap09 : and.w #$fffe : tax
lda.l FontProperties, x
bmi .thin
.wide
plx : sep #$30
lda.b Scrap09 : and.b #$03 : tay
lda.w $fd7c, y : tay
jml RenderCharLookupWidthDraw_return
.thin
xba : and.w #$004f : bne .vwf
plx : sep #$30
lda.b Scrap09 : and.b #$03 : phx : tax
lda.l RenderCharThinTable, x : tay : plx
jml RenderCharLookupWidthDraw_return
.vwf
and.w #$000f : tay
plx : sep #$30
lda.b Scrap09 : and.b #$03 : phx : tax
cpx.b #$00 : bne +
tya : bra ++
+ lda.l RenderCharThinTable, x
++ tay : plx : jml RenderCharLookupWidthDraw_return
RenderCharLookupWidth:
phx : lda.b Scrap09 : and.w #$fffe : tax
lda.l FontProperties, x
bmi .thin
.wide
plx : lda.w $fd7c, x : clc
rtl
.thin
xba : and.w #$004f : bne .vwf
plx : lda.l RenderCharThinTable, x : clc
rtl
.vwf
and.w #$000f
plx : cpx.w #$0000 : beq + : lda.l RenderCharThinTable, x
+ clc : rtl
RenderCharThinTable:
db $08, $00, $ff
RenderCharExtended:
pha
asl : asl : tax
lda.l FontProperties, x : and.w #$00ff : bne .renderUncompressed
.renderOriginal
pla : asl : tax : asl : adc.b Scrap0E
jml RenderCharExtended_returnOriginal
.renderUncompressed
pla : phb : pea.w NewFont>>8 : plb : plb
lda.l FontProperties+$2, x
tay
lda.b Scrap0C
bne .inverted
ldx.w #$0000
-
lda.w NewFont, y
sta.l $7EBFC0, x
lda.w NewFont+$100, y
sta.l $7EBFC0+$16, x
inx #02
iny #02
cpx.w #$0010
bne -
bra .end
.inverted
ldx.w #$0000
-
lda.w NewFontInverted, y
sta.l $7EBFC0, x
lda.w NewFontInverted+$100, y
sta.l $7EBFC0+$16, x
inx #02
iny #02
cpx.w #$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 $0000, $0000 ; 30
dw $0000, $0000 ; 31
dw $0000, $0000 ; 32
dw $0000, $0000 ; 33
dw $0000, $0000 ; 34
dw $0000, $0000 ; 35
dw $0000, $0000 ; 36
dw $0000, $0000 ; 37
dw $0000, $0000 ; 38
dw $0000, $0000 ; 39
dw $0000, $0000 ; 3A
dw $0000, $0000 ; 3B
dw $0000, $0000 ; 3C
dw $0000, $0000 ; 3D
dw $0000, $0000 ; 3E
dw $0000, $0000 ; 3F
dw $0000, $0000 ; 40
dw $0000, $0000 ; 41
dw $0000, $0000 ; 42
dw $0000, $0000 ; 43
dw $0000, $0000 ; 44
dw $0000, $0000 ; 45
dw $0000, $0000 ; 46
dw $0000, $0000 ; 47
dw $0000, $0000 ; 48
dw $0000, $0000 ; 49
dw $0000, $0000 ; 4A
dw $0000, $0000 ; 4B
dw $0000, $0000 ; 4C
dw $0000, $0000 ; 4D
dw $0000, $0000 ; 4E
dw $8001, $0DF0 ; 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 $8001, $0AD0 ; 97 ; /
dw $8001, $0AE0 ; 98 ; •
dw $8001, $02A0 ; 99 ; Cursor |>
dw $0000, $0000 ; 9A ; smiley lookin JP char
dw $8001, $06A0 ; 9B ; Link face left
dw $8001, $06B0 ; 9C ; Link face right
dw $8001, $06E0 ; 9D ; '
dw $8001, $0AF0 ; 9E ; "
dw $8001, $02E0 ; 9F ; ellipsis ...
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 $0000, $0000 ; CC ; Blank char
dw $8001, $02C0 ; CD ; .
dw $8001, $02F0 ; CE ; ~
dw $8000, $0000 ; CF ;
dw $8001, $0400 ; D0 ; a
dw $8001, $0410 ; D1
dw $8001, $0420 ; D2
dw $8001, $0430 ; D3
dw $8001, $0440 ; D4
dw $8001, $0450 ; D5
dw $8001, $0460 ; D6
dw $8001, $0470 ; D7
dw $8001, $0480 ; D8
dw $8001, $0490 ; D9
dw $8001, $04A0 ; DA
dw $8001, $04B0 ; DB
dw $8001, $04C0 ; DC
dw $8001, $04D0 ; DD
dw $8001, $04E0 ; DE
dw $8001, $04F0 ; DF ; p
dw $8001, $0600 ; E0 ; q
dw $8001, $0610 ; E1
dw $8001, $0620 ; E2
dw $8001, $0630 ; E3
dw $8001, $0640 ; E4
dw $8001, $0650 ; E5
dw $8001, $0660 ; E6
dw $8001, $0670 ; E7
dw $8001, $0680 ; E8
dw $8001, $0690 ; E9 ; z
dw $8001, $0A80 ; EA ; :
dw $8001, $0A90 ; EB ; @ (thin)
dw $8001, $0AA0 ; EC ; # (thin)
dw $8001, $0A00 ; 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, $0DF0 ; FF ; <sp>