fixes
turn a bunch of addresses into fast rom bunch of consistency clean ups in hooks move zsnes to failures
This commit is contained in:
890
stats/main.asm
890
stats/main.asm
@@ -5,7 +5,7 @@ lorom
|
||||
!BLT = "BCC"
|
||||
!BGE = "BCS"
|
||||
|
||||
org $238000
|
||||
org $A38000
|
||||
incsrc stats/credits.asm
|
||||
|
||||
FontGfx:
|
||||
@@ -41,8 +41,8 @@ PreparePointer:
|
||||
LDY.w #$0000
|
||||
RTL
|
||||
|
||||
; Regular stat: XXXX X00L LLLL LLLL BBBB SSSS CCC- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA
|
||||
; Time stat: XXXX X01L LLLL LLLL ---- ---- ---- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA
|
||||
; Regular stat: XXXX X00L LLLL LLLL BBBB SSSS CCC- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA
|
||||
; Time stat: XXXX X01L LLLL LLLL ---- ---- ---- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA
|
||||
; End of data: 1111 1111 1111 1111
|
||||
|
||||
; X X offset (measured in 8x8 tiles)
|
||||
@@ -58,55 +58,55 @@ RTL
|
||||
; A Memory Address
|
||||
|
||||
ValueCaps:
|
||||
dw 0
|
||||
dw 9
|
||||
dw 99
|
||||
dw 999
|
||||
dw 9999
|
||||
dw 9999 ; TODO - 5 digits need to be fixed at a later date
|
||||
dw 0
|
||||
dw 9
|
||||
dw 99
|
||||
dw 999
|
||||
dw 9999
|
||||
dw 9999 ; TODO - 5 digits need to be fixed at a later date
|
||||
|
||||
BitMasks:
|
||||
dw $FFFF
|
||||
dw $0001
|
||||
dw $0003
|
||||
dw $0007
|
||||
dw $000F
|
||||
dw $001F
|
||||
dw $003F
|
||||
dw $007F
|
||||
dw $00FF
|
||||
dw $01FF
|
||||
dw $03FF
|
||||
dw $07FF
|
||||
dw $0FFF
|
||||
dw $1FFF
|
||||
dw $3FFF
|
||||
dw $7FFF
|
||||
dw $FFFF
|
||||
dw $0001
|
||||
dw $0003
|
||||
dw $0007
|
||||
dw $000F
|
||||
dw $001F
|
||||
dw $003F
|
||||
dw $007F
|
||||
dw $00FF
|
||||
dw $01FF
|
||||
dw $03FF
|
||||
dw $07FF
|
||||
dw $0FFF
|
||||
dw $1FFF
|
||||
dw $3FFF
|
||||
dw $7FFF
|
||||
|
||||
macro StripeStart(xPos, length)
|
||||
LDA.b $C8
|
||||
CLC
|
||||
ADC.w #<xPos>
|
||||
XBA
|
||||
STA.w $1002,x
|
||||
|
||||
LDA.w #<length>*2-1
|
||||
XBA
|
||||
LDA.w #$0500
|
||||
STA.w $1004,x
|
||||
LDA.b $C8
|
||||
CLC
|
||||
ADC.w #<xPos>
|
||||
XBA
|
||||
STA.w $1002,x
|
||||
|
||||
LDA.w #<length>*2-1
|
||||
XBA
|
||||
LDA.w #$0500
|
||||
STA.w $1004,x
|
||||
endmacro
|
||||
|
||||
macro StripeTile()
|
||||
STA.w $1006,x
|
||||
INX
|
||||
INX
|
||||
STA.w $1006,x
|
||||
INX
|
||||
INX
|
||||
endmacro
|
||||
|
||||
macro StripeEnd()
|
||||
INX
|
||||
INX
|
||||
INX
|
||||
INX
|
||||
INX
|
||||
INX
|
||||
INX
|
||||
INX
|
||||
endmacro
|
||||
|
||||
HexToDecStats:
|
||||
@@ -140,52 +140,52 @@ HexToDecStats:
|
||||
RTL
|
||||
|
||||
LastHexDigit:
|
||||
TYA
|
||||
AND.w #$000F
|
||||
PHA
|
||||
TYA
|
||||
LSR #4
|
||||
TAY
|
||||
CLC
|
||||
LDA.b StatsBottom
|
||||
BNE +
|
||||
; Upper half
|
||||
PLA
|
||||
ADC #$3D40
|
||||
RTS
|
||||
+ ; Lower half
|
||||
PLA
|
||||
ADC #$3D50
|
||||
RTS
|
||||
|
||||
FindLine:
|
||||
LDY.w #$0000
|
||||
TYA
|
||||
AND.w #$000F
|
||||
PHA
|
||||
TYA
|
||||
LSR #4
|
||||
TAY
|
||||
CLC
|
||||
LDA.b StatsBottom
|
||||
BNE +
|
||||
; Upper half
|
||||
PLA
|
||||
ADC #$3D40
|
||||
RTS
|
||||
+ ; Lower half
|
||||
PLA
|
||||
ADC #$3D50
|
||||
RTS
|
||||
|
||||
FindLine:
|
||||
LDY.w #$0000
|
||||
|
||||
- LDA.w CreditsStats,y
|
||||
STZ.b StatsBottom
|
||||
CMP #$FFFF
|
||||
BEQ .noLine
|
||||
|
||||
XBA
|
||||
AND.w #$01FF
|
||||
CMP.b LineNumber
|
||||
BEQ .lineFound
|
||||
|
||||
INC
|
||||
INC.b StatsBottom
|
||||
CMP.b LineNumber
|
||||
BEQ .lineFound
|
||||
|
||||
INY #8
|
||||
BRA -
|
||||
|
||||
- LDA.w CreditsStats,y
|
||||
STZ.b StatsBottom
|
||||
CMP #$FFFF
|
||||
BEQ .noLine
|
||||
|
||||
XBA
|
||||
AND.w #$01FF
|
||||
CMP.b LineNumber
|
||||
BEQ .lineFound
|
||||
|
||||
INC
|
||||
INC.b StatsBottom
|
||||
CMP.b LineNumber
|
||||
BEQ .lineFound
|
||||
|
||||
INY #8
|
||||
BRA -
|
||||
|
||||
.lineFound
|
||||
SEC
|
||||
RTS
|
||||
|
||||
SEC
|
||||
RTS
|
||||
|
||||
.noLine
|
||||
CLC
|
||||
RTS
|
||||
CLC
|
||||
RTS
|
||||
|
||||
!FRAMES_PER_SECOND = 60
|
||||
!FRAMES_PER_MINUTE = 60*60
|
||||
@@ -193,20 +193,20 @@ FindLine:
|
||||
!MAX_FRAME_COUNT = 59*60+59*60+59*60+99
|
||||
|
||||
macro CountUnits(framesPerUnit, unitCounter)
|
||||
STZ.b <unitCounter>
|
||||
STZ.b <unitCounter>
|
||||
?loop:
|
||||
LDA.b ValueLow
|
||||
SEC
|
||||
SBC.w #<framesPerUnit>
|
||||
STA.b Temp
|
||||
LDA.b ValueHigh
|
||||
SBC.w #<framesPerUnit>>>16
|
||||
BCC ?end
|
||||
STA.b ValueHigh
|
||||
LDA.b Temp
|
||||
STA.b ValueLow
|
||||
INC.b <unitCounter>
|
||||
BRA ?loop
|
||||
LDA.b ValueLow
|
||||
SEC
|
||||
SBC.w #<framesPerUnit>
|
||||
STA.b Temp
|
||||
LDA.b ValueHigh
|
||||
SBC.w #<framesPerUnit>>>16
|
||||
BCC ?end
|
||||
STA.b ValueHigh
|
||||
LDA.b Temp
|
||||
STA.b ValueLow
|
||||
INC.b <unitCounter>
|
||||
BRA ?loop
|
||||
?end:
|
||||
endmacro
|
||||
|
||||
@@ -215,342 +215,342 @@ endmacro
|
||||
BlankCreditsTile = $883D
|
||||
|
||||
RenderCreditsStatCounter:
|
||||
PHB
|
||||
PHK
|
||||
PLB
|
||||
|
||||
JSR FindLine
|
||||
BCS +
|
||||
JMP .endStats
|
||||
+
|
||||
|
||||
; XXXX X00L LLLL LLLL BBBB SSSS CCC- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA
|
||||
|
||||
; == Determine stat type ==
|
||||
LDA.w CreditsStats,y ; LLLL LLLL XXXX XTTL
|
||||
LSR
|
||||
AND.w #$0003 ; TT
|
||||
CMP.w #$0000
|
||||
BEQ .normalStat
|
||||
JMP .timeStat
|
||||
PHB
|
||||
PHK
|
||||
PLB
|
||||
|
||||
JSR FindLine
|
||||
BCS +
|
||||
JMP .endStats
|
||||
+
|
||||
|
||||
; XXXX X00L LLLL LLLL BBBB SSSS CCC- ---- ---- ---- AAAA AAAA AAAA AAAA AAAA AAAA
|
||||
|
||||
; == Determine stat type ==
|
||||
LDA.w CreditsStats,y ; LLLL LLLL XXXX XTTL
|
||||
LSR
|
||||
AND.w #$0003 ; TT
|
||||
CMP.w #$0000
|
||||
BEQ .normalStat
|
||||
JMP .timeStat
|
||||
|
||||
.normalStat
|
||||
; == Write Stripe header (VRAM address, i.e. tile coordinates) ==
|
||||
LDA.w CreditsStats,y ; LLLL LLLL XXXX XTTL
|
||||
LSR #3
|
||||
AND.w #$001F ; X XXXX
|
||||
CLC
|
||||
ADC.w $C8
|
||||
XBA
|
||||
STA.w $1002,x
|
||||
|
||||
; == Write Stripe header (Length of data) ==
|
||||
LDA.w #4*2-1 ; 4 tiles = 8 bytes
|
||||
XBA
|
||||
STA.w $1004,x
|
||||
PHX
|
||||
|
||||
; == Load tile base (upper or lower half of white two-line zero) ==
|
||||
LDA.b StatsBottom
|
||||
BNE +
|
||||
LDA.w #$3D40
|
||||
BRA ++
|
||||
+ LDA.w #$3D50
|
||||
++ STA.b Temp
|
||||
; == Write Stripe header (VRAM address, i.e. tile coordinates) ==
|
||||
LDA.w CreditsStats,y ; LLLL LLLL XXXX XTTL
|
||||
LSR #3
|
||||
AND.w #$001F ; X XXXX
|
||||
CLC
|
||||
ADC.w $C8
|
||||
XBA
|
||||
STA.w $1002,x
|
||||
|
||||
; == Load the actual stat word ==
|
||||
LDA.w CreditsStats+5,y
|
||||
STA.b StatsPtr
|
||||
LDA.w CreditsStats+6,y
|
||||
STA.b StatsPtr+1
|
||||
LDA.b [StatsPtr]
|
||||
STA.b ValueLow
|
||||
|
||||
; == Shift value ==
|
||||
LDA.w CreditsStats+2,y; CCC- ---- BBBB SSSS
|
||||
AND.w #$000F ; SSSS
|
||||
BEQ +
|
||||
TAX
|
||||
LDA.b ValueLow
|
||||
- LSR
|
||||
DEX
|
||||
BNE -
|
||||
STA.b ValueLow
|
||||
+
|
||||
; == Mask value ==
|
||||
LDA.w CreditsStats+2,y; CCC- ---- BBBB SSSS
|
||||
;LSR #4
|
||||
;AND.w #$000F ; BBBB
|
||||
; == Write Stripe header (Length of data) ==
|
||||
LDA.w #4*2-1 ; 4 tiles = 8 bytes
|
||||
XBA
|
||||
STA.w $1004,x
|
||||
PHX
|
||||
|
||||
; == Load tile base (upper or lower half of white two-line zero) ==
|
||||
LDA.b StatsBottom
|
||||
BNE +
|
||||
LDA.w #$3D40
|
||||
BRA ++
|
||||
+ LDA.w #$3D50
|
||||
++ STA.b Temp
|
||||
|
||||
; == Load the actual stat word ==
|
||||
LDA.w CreditsStats+5,y
|
||||
STA.b StatsPtr
|
||||
LDA.w CreditsStats+6,y
|
||||
STA.b StatsPtr+1
|
||||
LDA.b [StatsPtr]
|
||||
STA.b ValueLow
|
||||
|
||||
; == Shift value ==
|
||||
LDA.w CreditsStats+2,y; CCC- ---- BBBB SSSS
|
||||
AND.w #$000F ; SSSS
|
||||
BEQ +
|
||||
TAX
|
||||
LDA.b ValueLow
|
||||
- LSR
|
||||
DEX
|
||||
BNE -
|
||||
STA.b ValueLow
|
||||
+
|
||||
; == Mask value ==
|
||||
LDA.w CreditsStats+2,y; CCC- ---- BBBB SSSS
|
||||
;LSR #4
|
||||
;AND.w #$000F ; BBBB
|
||||
LSR #3
|
||||
AND.w #$001E
|
||||
TAX
|
||||
LDA.l BitMasks,x
|
||||
AND.b ValueLow
|
||||
STA.b ValueLow
|
||||
|
||||
; == Cap value ==
|
||||
LDA.w CreditsStats+3,y; ---- ---- CCC- ----
|
||||
LSR #5
|
||||
AND.w #$0007 ; CCC
|
||||
BEQ +
|
||||
ASL : TAX
|
||||
LDA.l ValueCaps,x
|
||||
CMP.b ValueLow
|
||||
!BGE +
|
||||
STA.b ValueLow
|
||||
+
|
||||
; == Display value ==
|
||||
LDA.b ValueLow
|
||||
JSL HexToDecStats
|
||||
PLX
|
||||
STZ.b RemoveZero
|
||||
|
||||
LDA.l $7F5004
|
||||
AND.w #$00FF
|
||||
CMP.b RemoveZero
|
||||
BNE +
|
||||
LDA.w #BlankCreditsTile
|
||||
BRA ++
|
||||
+ DEC.b RemoveZero
|
||||
CLC
|
||||
ADC.b Temp
|
||||
++ %StripeTile()
|
||||
|
||||
LDA.l $7F5005
|
||||
AND.w #$00FF
|
||||
CMP.b RemoveZero
|
||||
BNE +
|
||||
LDA.w #BlankCreditsTile
|
||||
BRA ++
|
||||
+ DEC.b RemoveZero
|
||||
CLC
|
||||
ADC.b Temp
|
||||
++ %StripeTile()
|
||||
|
||||
LDA.l $7F5006
|
||||
AND.w #$00FF
|
||||
CMP.b RemoveZero
|
||||
BNE +
|
||||
LDA.w #BlankCreditsTile
|
||||
BRA ++
|
||||
+ DEC.b RemoveZero
|
||||
CLC
|
||||
ADC.b Temp
|
||||
++ %StripeTile()
|
||||
|
||||
LDA.l $7F5007
|
||||
AND.w #$00FF
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
%StripeEnd()
|
||||
TAX
|
||||
LDA.l BitMasks,x
|
||||
AND.b ValueLow
|
||||
STA.b ValueLow
|
||||
|
||||
; == Cap value ==
|
||||
LDA.w CreditsStats+3,y; ---- ---- CCC- ----
|
||||
LSR #5
|
||||
AND.w #$0007 ; CCC
|
||||
BEQ +
|
||||
ASL : TAX
|
||||
LDA.l ValueCaps,x
|
||||
CMP.b ValueLow
|
||||
!BGE +
|
||||
STA.b ValueLow
|
||||
+
|
||||
; == Display value ==
|
||||
LDA.b ValueLow
|
||||
JSL HexToDecStats
|
||||
PLX
|
||||
STZ.b RemoveZero
|
||||
|
||||
LDA.l $7F5004
|
||||
AND.w #$00FF
|
||||
CMP.b RemoveZero
|
||||
BNE +
|
||||
LDA.w #BlankCreditsTile
|
||||
BRA ++
|
||||
+ DEC.b RemoveZero
|
||||
CLC
|
||||
ADC.b Temp
|
||||
++ %StripeTile()
|
||||
|
||||
LDA.l $7F5005
|
||||
AND.w #$00FF
|
||||
CMP.b RemoveZero
|
||||
BNE +
|
||||
LDA.w #BlankCreditsTile
|
||||
BRA ++
|
||||
+ DEC.b RemoveZero
|
||||
CLC
|
||||
ADC.b Temp
|
||||
++ %StripeTile()
|
||||
|
||||
LDA.l $7F5006
|
||||
AND.w #$00FF
|
||||
CMP.b RemoveZero
|
||||
BNE +
|
||||
LDA.w #BlankCreditsTile
|
||||
BRA ++
|
||||
+ DEC.b RemoveZero
|
||||
CLC
|
||||
ADC.b Temp
|
||||
++ %StripeTile()
|
||||
|
||||
LDA.l $7F5007
|
||||
AND.w #$00FF
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
%StripeEnd()
|
||||
.endStats
|
||||
|
||||
PLB
|
||||
RTL
|
||||
|
||||
PLB
|
||||
RTL
|
||||
|
||||
.timeStat
|
||||
; Output format: HH:MM:SS.FF
|
||||
|
||||
; == Write Stripe header (VRAM address, i.e. tile coordinates) ==
|
||||
LDA.w CreditsStats,y ; LLLL LLLL XXXX XTTL
|
||||
LSR #3
|
||||
AND.w #$001F ; X XXXX
|
||||
CLC
|
||||
ADC.b $C8
|
||||
XBA
|
||||
STA.w $1002,x
|
||||
|
||||
; == Write Stripe header (Length of data) ==
|
||||
LDA.w #11*2-1 ; 11 tiles = 22 bytes
|
||||
XBA
|
||||
STA.w $1004,x
|
||||
PHX
|
||||
|
||||
; == Load the actual stat words ==
|
||||
LDA.w CreditsStats+5,y
|
||||
STA.b StatsPtr
|
||||
LDA.w CreditsStats+6,y
|
||||
STA.b StatsPtr+1
|
||||
LDA.b [StatsPtr]
|
||||
STA.b ValueLow
|
||||
INC.b StatsPtr
|
||||
INC.b StatsPtr
|
||||
LDA.b [StatsPtr]
|
||||
STA.b ValueHigh
|
||||
|
||||
CMP.w #!MAX_FRAME_COUNT>>16+1
|
||||
!BGE ++
|
||||
|
||||
; == Convert total frames into hours, minutes, seconds and frames ==
|
||||
%CountUnits(!FRAMES_PER_HOUR, Hours)
|
||||
%CountUnits(!FRAMES_PER_MINUTE, Minutes)
|
||||
%CountUnits(!FRAMES_PER_SECOND, Seconds)
|
||||
|
||||
; == Cap at 99:59:59.59 ==
|
||||
LDA.b Hours
|
||||
CMP.w #100
|
||||
!BLT +
|
||||
++ LDA.w #99
|
||||
STA.b Hours
|
||||
LDA.w #59
|
||||
STA.b Minutes
|
||||
STA.b Seconds
|
||||
STA.b ValueLow
|
||||
; Output format: HH:MM:SS.FF
|
||||
|
||||
; == Write Stripe header (VRAM address, i.e. tile coordinates) ==
|
||||
LDA.w CreditsStats,y ; LLLL LLLL XXXX XTTL
|
||||
LSR #3
|
||||
AND.w #$001F ; X XXXX
|
||||
CLC
|
||||
ADC.b $C8
|
||||
XBA
|
||||
STA.w $1002,x
|
||||
|
||||
; == Write Stripe header (Length of data) ==
|
||||
LDA.w #11*2-1 ; 11 tiles = 22 bytes
|
||||
XBA
|
||||
STA.w $1004,x
|
||||
PHX
|
||||
|
||||
; == Load the actual stat words ==
|
||||
LDA.w CreditsStats+5,y
|
||||
STA.b StatsPtr
|
||||
LDA.w CreditsStats+6,y
|
||||
STA.b StatsPtr+1
|
||||
LDA.b [StatsPtr]
|
||||
STA.b ValueLow
|
||||
INC.b StatsPtr
|
||||
INC.b StatsPtr
|
||||
LDA.b [StatsPtr]
|
||||
STA.b ValueHigh
|
||||
|
||||
CMP.w #!MAX_FRAME_COUNT>>16+1
|
||||
!BGE ++
|
||||
|
||||
; == Convert total frames into hours, minutes, seconds and frames ==
|
||||
%CountUnits(!FRAMES_PER_HOUR, Hours)
|
||||
%CountUnits(!FRAMES_PER_MINUTE, Minutes)
|
||||
%CountUnits(!FRAMES_PER_SECOND, Seconds)
|
||||
|
||||
; == Cap at 99:59:59.59 ==
|
||||
LDA.b Hours
|
||||
CMP.w #100
|
||||
!BLT +
|
||||
++ LDA.w #99
|
||||
STA.b Hours
|
||||
LDA.w #59
|
||||
STA.b Minutes
|
||||
STA.b Seconds
|
||||
STA.b ValueLow
|
||||
+
|
||||
|
||||
; == Load tile base (upper or lower half of white two-line zero) ==
|
||||
LDA.b StatsBottom
|
||||
BNE +
|
||||
LDA.w #$3D40
|
||||
BRA ++
|
||||
+ LDA.w #$3D50
|
||||
++ STA.b Temp
|
||||
|
||||
PLX
|
||||
|
||||
; == Display value ==
|
||||
LDA.b Hours
|
||||
JSL HexToDecStats
|
||||
|
||||
LDA.l $7F5006
|
||||
AND.w #$00FF
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
LDA.l $7F5007
|
||||
AND.w #$00FF
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
LDA.w #!ColonOffset
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
LDA.b Minutes
|
||||
JSL HexToDecStats
|
||||
LDA.l $7F5006
|
||||
AND.w #$00FF
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
LDA.l $7F5007
|
||||
AND.w #$00FF
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
LDA.w #!ColonOffset
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
LDA.b Seconds
|
||||
JSL HexToDecStats
|
||||
LDA.l $7F5006
|
||||
AND.w #$00FF
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
LDA.l $7F5007
|
||||
AND.w #$00FF
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
LDA.w #!PeriodOffset
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
LDA.b ValueLow
|
||||
JSL HexToDecStats
|
||||
LDA.l $7F5006
|
||||
AND.w #$00FF
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
LDA.l $7F5007
|
||||
AND.w #$00FF
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
%StripeEnd()
|
||||
JMP .endStats
|
||||
|
||||
|
||||
|
||||
; == Load tile base (upper or lower half of white two-line zero) ==
|
||||
LDA.b StatsBottom
|
||||
BNE +
|
||||
LDA.w #$3D40
|
||||
BRA ++
|
||||
+ LDA.w #$3D50
|
||||
++ STA.b Temp
|
||||
|
||||
PLX
|
||||
|
||||
; == Display value ==
|
||||
LDA.b Hours
|
||||
JSL HexToDecStats
|
||||
|
||||
LDA.l $7F5006
|
||||
AND.w #$00FF
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
LDA.l $7F5007
|
||||
AND.w #$00FF
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
LDA.w #!ColonOffset
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
LDA.b Minutes
|
||||
JSL HexToDecStats
|
||||
LDA.l $7F5006
|
||||
AND.w #$00FF
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
LDA.l $7F5007
|
||||
AND.w #$00FF
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
LDA.w #!ColonOffset
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
LDA.b Seconds
|
||||
JSL HexToDecStats
|
||||
LDA.l $7F5006
|
||||
AND.w #$00FF
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
LDA.l $7F5007
|
||||
AND.w #$00FF
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
LDA.w #!PeriodOffset
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
LDA.b ValueLow
|
||||
JSL HexToDecStats
|
||||
LDA.l $7F5006
|
||||
AND.w #$00FF
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
LDA.l $7F5007
|
||||
AND.w #$00FF
|
||||
CLC
|
||||
ADC.b Temp
|
||||
%StripeTile()
|
||||
|
||||
%StripeEnd()
|
||||
JMP .endStats
|
||||
|
||||
|
||||
RenderLineNumber:
|
||||
%StripeStart(0, 3)
|
||||
|
||||
STZ.b StatsBottom
|
||||
LDA.b $CA
|
||||
TAY
|
||||
AND.w #$0001
|
||||
BEQ +
|
||||
DEY
|
||||
INC.b StatsBottom
|
||||
+
|
||||
JSR LastHexDigit
|
||||
PHA
|
||||
JSR LastHexDigit
|
||||
PHA
|
||||
JSR LastHexDigit
|
||||
%StripeTile()
|
||||
PLA
|
||||
%StripeTile()
|
||||
PLA
|
||||
%StripeTile()
|
||||
|
||||
%StripeEnd()
|
||||
|
||||
RTS
|
||||
|
||||
%StripeStart(0, 3)
|
||||
|
||||
STZ.b StatsBottom
|
||||
LDA.b $CA
|
||||
TAY
|
||||
AND.w #$0001
|
||||
BEQ +
|
||||
DEY
|
||||
INC.b StatsBottom
|
||||
+
|
||||
JSR LastHexDigit
|
||||
PHA
|
||||
JSR LastHexDigit
|
||||
PHA
|
||||
JSR LastHexDigit
|
||||
%StripeTile()
|
||||
PLA
|
||||
%StripeTile()
|
||||
PLA
|
||||
%StripeTile()
|
||||
|
||||
%StripeEnd()
|
||||
|
||||
RTS
|
||||
|
||||
LoadModifiedFont:
|
||||
; Based on CopyFontToVram(Bank00)
|
||||
; copies font graphics to VRAM (for BG3)
|
||||
|
||||
; set name base table to vram $4000 (word)
|
||||
LDA.b #$02 : STA.w OBSEL
|
||||
|
||||
; increment on writes to $2119
|
||||
LDA.b #$80 : STA.w VMAIN
|
||||
|
||||
; set bank of the source address (see below)
|
||||
LDA.b #FontGfx>>16 : STA.b Scrap02
|
||||
|
||||
REP #$30
|
||||
|
||||
; vram target address is $7000 (word)
|
||||
LDA.w #$7000 : STA.w VMADDL
|
||||
|
||||
; $00[3] = $0E8000 (offset for the font data)
|
||||
LDA.w #FontGfx : STA.b Scrap00
|
||||
|
||||
; going to write 0x1000 bytes (0x800 words)
|
||||
LDX.w #FontGfxEnd-FontGfx/2-1
|
||||
|
||||
; Based on CopyFontToVram(Bank00)
|
||||
; copies font graphics to VRAM (for BG3)
|
||||
|
||||
; set name base table to vram $4000 (word)
|
||||
LDA.b #$02 : STA.w OBSEL
|
||||
|
||||
; increment on writes to $2119
|
||||
LDA.b #$80 : STA.w VMAIN
|
||||
|
||||
; set bank of the source address (see below)
|
||||
LDA.b #FontGfx>>16 : STA.b Scrap02
|
||||
|
||||
REP #$30
|
||||
|
||||
; vram target address is $7000 (word)
|
||||
LDA.w #$7000 : STA.w VMADDL
|
||||
|
||||
; $00[3] = $0E8000 (offset for the font data)
|
||||
LDA.w #FontGfx : STA.b Scrap00
|
||||
|
||||
; going to write 0x1000 bytes (0x800 words)
|
||||
LDX.w #FontGfxEnd-FontGfx/2-1
|
||||
|
||||
.nextWord
|
||||
|
||||
; read a word from the font data
|
||||
LDA.b [$00] : STA.w VMDATAL
|
||||
|
||||
; increment source address by 2
|
||||
INC.b Scrap00 : INC.b Scrap00
|
||||
|
||||
DEX : BPL .nextWord
|
||||
|
||||
SEP #$30
|
||||
; read a word from the font data
|
||||
LDA.b [$00] : STA.w VMDATAL
|
||||
|
||||
; increment source address by 2
|
||||
INC.b Scrap00 : INC.b Scrap00
|
||||
|
||||
DEX : BPL .nextWord
|
||||
|
||||
SEP #$30
|
||||
JSL LoadFullItemTilesCredits
|
||||
|
||||
RTL
|
||||
RTL
|
||||
|
||||
LoadFullItemTilesCredits:
|
||||
; Based on CopyFontToVram(Bank00)
|
||||
@@ -584,17 +584,17 @@ LoadFullItemTilesCredits:
|
||||
DEX : BPL .nextWord
|
||||
|
||||
SEP #$30
|
||||
|
||||
RTL
|
||||
|
||||
|
||||
RTL
|
||||
|
||||
CheckFontTable:
|
||||
TAY
|
||||
PHB
|
||||
PHK
|
||||
PLB
|
||||
LDA.w FontTable,Y
|
||||
PLB
|
||||
RTL
|
||||
TAY
|
||||
PHB
|
||||
PHK
|
||||
PLB
|
||||
LDA.w FontTable,Y
|
||||
PLB
|
||||
RTL
|
||||
|
||||
NearEnding:
|
||||
STZ.w $012A ; disable triforce helper thread
|
||||
@@ -602,7 +602,7 @@ NearEnding:
|
||||
REP #$10
|
||||
JSL AltBufferTable_credits
|
||||
JSR DrawEndingItems
|
||||
JML.l $00ec03 ; PaletteFilter_InitTheEndSprite
|
||||
JML.l $80EC03 ; PaletteFilter_InitTheEndSprite
|
||||
|
||||
EndingItems:
|
||||
; This function is not strictly needed, simply updating the tracker
|
||||
@@ -621,20 +621,20 @@ DrawEndingItems:
|
||||
RTS
|
||||
|
||||
FontTable:
|
||||
incbin stats/fonttable.bin
|
||||
incbin stats/fonttable.bin
|
||||
|
||||
CreditsStats:
|
||||
incsrc stats/statConfig.asm
|
||||
dw $FFFF
|
||||
|
||||
org $0eedd9
|
||||
JSL EndingItems
|
||||
org $0EEDD9
|
||||
JSL EndingItems
|
||||
|
||||
org $0eedaf
|
||||
org $0EEDAF
|
||||
JSL NearEnding
|
||||
|
||||
org $0EE651
|
||||
JSL LoadModifiedFont
|
||||
JSL LoadModifiedFont
|
||||
|
||||
org $0EE828
|
||||
JSL PreparePointer
|
||||
@@ -646,13 +646,13 @@ org $0EE83F
|
||||
org $0EE853
|
||||
LDA.b [CreditsPtr],Y
|
||||
NOP
|
||||
AND.w #$00ff
|
||||
ASL A
|
||||
JSL CheckFontTable
|
||||
|
||||
org $0ee86d
|
||||
JSL RenderCreditsStatCounter
|
||||
JMP.w AfterDeathCounterOutput
|
||||
|
||||
org $0ee8fd
|
||||
AfterDeathCounterOutput:
|
||||
AND.w #$00FF
|
||||
ASL A
|
||||
JSL CheckFontTable
|
||||
|
||||
org $0EE86D
|
||||
JSL RenderCreditsStatCounter
|
||||
JMP.w AfterDeathCounterOutput
|
||||
|
||||
org $8EE8FD
|
||||
AfterDeathCounterOutput:
|
||||
|
||||
Reference in New Issue
Block a user