1
0
Fork 0
This commit is contained in:
sup39 2022-10-22 21:53:47 +09:00
parent b847f0d4a5
commit 82a28b82e4
3 changed files with 162 additions and 0 deletions

34
NTSC-J 1.0/QFST.txt Normal file
View file

@ -0,0 +1,34 @@
$ QF Segment Timer (v0.1.0, 2022/10/22) [sup39]
040F9DD0 496FDE78
042069D0 495F128C
077F7C48 000000F0
3BA00000 3C60817F
93A37C40 93A37C44
4A90217C 38610E90
4A83D5C9 3821FFE0
BF81000C 3C60817F
3BE37C00 83C37C40
3BA00096 80C300BC
2C060000 41A2002C
808300B8 80A37C44
7C042800 40A1001C
7C052050 57CC16BA
7C1F612E 90837C44
3BDE0001 93C37C40
3B9EFFF0 2C1E0010
40800008 3B800000
7C1CF000 41A00014
BB81000C 38210020
3C60803B 4AA0ED00
578316BA 7C1F182E
1C0003E9 39600078
7D405B96 396003E8
7D2A5B96 1D6903E8
7D4B5050 38600214
7FA4EB78 38A0000D
38C0FFFF 7CC73378
48000011 2532642E
25303364 00000000
7D0802A6 4CC63182
4BFF8511 3B9C0001
3BBD000D 4BFFFF8C

12
src/QFST.ld Normal file
View file

@ -0,0 +1,12 @@
/* @ha MUST be 0x817f */
$QFST.ts = 0x817f7c00;
$QFST.cnt = 0x817f7c40;
$QFST.t0 = 0x817f7c44;
$$ = 0x817f7c48;
$QFT.tFreeze = 0x817f00b8;
$QFT.freezeDur = 0x817f00bc;
$b$.QFST.reset = 0x800f9dd0;
$b$.QFST.render = 0x802069d0;
drawText = 0x817f0238;

116
src/QFST.s Normal file
View file

@ -0,0 +1,116 @@
.set x, 532
.set y, 150
.set fontSize, 13
.set colorTop, 0xffffffff
.set colorBot, 0xffffffff
.set logN, 4
.set aBase, 0x817f<<16
.QFST.reset:
li r29, 0 # orig
lis r3, aBase@h
stw r29, $QFST.cnt-aBase(r3)
stw r29, $QFST.t0-aBase(r3)
b 4+$b$.QFST.reset
.set rmw, r28
.set rmwOff, 0xC
.set rmwAdd, 0x20
.set rTArr, r31
.set rCnt, r30
.set rY, r29
.set rIdx, r28
.QFST.render:
.QFST.render.setup:
addi r3, r1, 0xE90
bl J2DGrafContext.setup2D
## prepare
addi r1, r1, -rmwAdd
stmw rmw, rmwOff(r1)
lis r3, aBase@h
la rTArr, $QFST.ts-aBase(r3)
lwz rCnt, $QFST.cnt-aBase(r3)
li rY, y
.QFST.render.update:
### check is QFT frozen
### r6 = freeze duration
lwz r6, $QFT.freezeDur-aBase(r3)
cmpwi r6, 0
beq+ .QFST.render.update.done
### check is new frozen time
### r4 = tFreeze = QFT display time when freezed
### r5 = t0
lwz r4, $QFT.tFreeze-aBase(r3)
lwz r5, $QFST.t0-aBase(r3)
cmpw r4, r5
ble+ .QFST.render.update.done
### store diff
sub r0, r4, r5 # diff
rlwinm r12, rCnt, 2, 30-logN, 29
stwx r0, rTArr, r12
### update t0 = tFreeze
stw r4, $QFST.t0-aBase(r3)
### update cnt
addi rCnt, rCnt, 1
stw rCnt, $QFST.cnt-aBase(r3)
.QFST.render.update.done:
.QFST.render.preDraw:
### idx = max(0, cnt-N)
subi rIdx, rCnt, 1<<logN
cmpwi rCnt, 1<<logN
bge .QFST.render.preDraw.L1
li rIdx, 0
.QFST.render.preDraw.L1:
.QFST.render.loop:
cmpw rIdx, rCnt
blt+ .QFST.render.loop.body
.QFST.render.done:
lmw rmw, rmwOff(r1)
addi r1, r1, rmwAdd
## orig
lis r3, 0x803b
b 4+$b$.QFST.render
.QFST.render.loop.body:
### QF -> s
rlwinm r3, rIdx, 2, 30-logN, 29 # offset
lwzx r0, rTArr, r3
#### r0 = dQF*1001
mulli r0, r0, 1001
#### r10 = dQF*1001/120 = ms
li r11, 120
divwu r10, r0, r11
#### r9 = ms/1000 = s
li r11, 1000
divwu r9, r10, r11
#### r10 = ms-s*1000 = ms%1000
mulli r11, r9, 1000
sub r10, r10, r11
### params
li r3, x
mr r4, rY
li r5, fontSize
.if colorTop < 0x8000 || colorTop >= 0xffff8000
li r6, colorTop@l
.else
lis r6, colorTop@h
ori r6, r6, colorTop@l
.endif
.if colorTop == colorBot
mr r7, r6
.elseif colorBot < 0x8000 || colorBot >= 0xffff8000
li r7, colorBot@l
.else
lis r7, colorBot@h
ori r7, r7, colorBot@l
.endif
bl .draw2D.fmt
.string "%2d.%03d"
.align 2
.draw2D.fmt:
mflr r8
crclr 6
bl drawText
## next
addi rIdx, rIdx, 1
addi rY, rY, fontSize
b .QFST.render.loop