init
This commit is contained in:
489
ghidra_src/big.asm
Normal file
489
ghidra_src/big.asm
Normal file
@@ -0,0 +1,489 @@
|
||||
**************************************************************
|
||||
* FUNCTION *
|
||||
**************************************************************
|
||||
undefined __stdcall drawCharLine_MakeDMAChain(undefined4
|
||||
assume gp = 0x8007b190
|
||||
undefined v0:1 <RETURN>
|
||||
undefined4 a0:4 r4
|
||||
undefined2 a1:2 r5
|
||||
undefined2 a2:2 r6 XREF[1]: 8001965c(W)
|
||||
undefined1 a3:1 r7
|
||||
undefined1 Stack[0x10]:1 makeShadow? XREF[1]: 8001934c(R)
|
||||
undefined4 s4:4 r20_LineDMAParam XREF[1]: 80019374(W)
|
||||
undefined4 s2:4 r18 XREF[1]: 8001956c(W)
|
||||
undefined4 t1:4 t1 XREF[1]: 800195a8(W)
|
||||
undefined4 a2:4 DMALinkAddr XREF[1]: 8001965c(W)
|
||||
undefined4 Stack[-0x4]:4 local_4 XREF[2]: 80019354(W),
|
||||
80019898(R)
|
||||
undefined4 Stack[-0x8]:4 local_8 XREF[2]: 80019358(W),
|
||||
8001989c(R)
|
||||
undefined4 Stack[-0xc]:4 local_c XREF[2]: 8001935c(W),
|
||||
800198a0(R)
|
||||
undefined4 Stack[-0x10]:4 local_10 XREF[2]: 80019304(W),
|
||||
800198a4(R)
|
||||
undefined4 Stack[-0x14]:4 local_14 XREF[2]: 80019360(W),
|
||||
800198a8(R)
|
||||
undefined4 Stack[-0x18]:4 local_18 XREF[2]: 80019364(W),
|
||||
800198ac(R)
|
||||
undefined4 Stack[-0x1c]:4 local_1c XREF[2]: 8001931c(W),
|
||||
800198b0(R)
|
||||
undefined4 Stack[-0x20]:4 local_20 XREF[2]: 80019314(W),
|
||||
800198b4(R)
|
||||
undefined4 Stack[-0x24]:4 local_24 XREF[2]: 8001930c(W),
|
||||
800198b8(R)
|
||||
undefined4 Stack[-0x28]:4 local_28 XREF[2]: 80019330(W),
|
||||
800198bc(R)
|
||||
undefined2 Stack[-0x30]:2 textXlocal XREF[2]: 800194f4(W),
|
||||
80019598(R)
|
||||
undefined1[16] Stack[-0x40] DMALinksAddr XREF[6,11]: 80019670(W),
|
||||
80019698(R),
|
||||
80019764(R),
|
||||
80019788(R),
|
||||
800197a4(R),
|
||||
800197c0(R),
|
||||
800197a0(R),
|
||||
800197c4(R),
|
||||
800197dc(R),
|
||||
80019410(W),
|
||||
80019418(R),
|
||||
80019428(R),
|
||||
80019414(W),
|
||||
80019420(W),
|
||||
800193c8(W),
|
||||
80019424(R),
|
||||
800193d8(W)
|
||||
undefined2 HASH:5f91568 currentReadedChar
|
||||
drawCharLine_MakeDMAChain XREF[31]: PrintCommandText:8001c398(c),
|
||||
PrintCommandText:8001c40c(c),
|
||||
sendTXTLineWithParams:8001c688(c),
|
||||
PrintSelectionMenu:8001d058(c),
|
||||
PrintSelectionMenu:8001d0d8(c),
|
||||
FUN_8001e964:8001e9cc(c),
|
||||
FUN_8001ebc0:8001ed58(c),
|
||||
FUN_OVR_EXT__80096f94:800970e8(c),
|
||||
FUN_OVR_EXT__80096f94:800971dc(c),
|
||||
FUN_OVR_EXT__80096f94:800973e0(c),
|
||||
FUN_OVR_EXT__800974bc:800976ec(c),
|
||||
FUN_OVR_EXT__80099078:800990f8(c),
|
||||
OVR_EXT::800997d0(c), OVR_EXT::80099870(c),
|
||||
OVR_EXT::80099948(c), OVR_EXT::80099a28(c),
|
||||
OVR_EXT::80099a94(c), OVR_EXT::80099af8(c),
|
||||
OVR_EXT::80099c9c(c), OVR_EXT::80099d30(c),
|
||||
[more]
|
||||
80019300 b0 ff bd 27 addiu sp,sp,-0x50
|
||||
assume gp = <UNKNOWN>
|
||||
80019304 40 00 b6 af sw s6,local_10(sp) push all regs into stack!
|
||||
80019308 21 b0 80 00 move s6,r4 save text addr to r22
|
||||
8001930c 2c 00 b1 af sw s1,local_24(sp)
|
||||
80019310 21 88 a0 00 move s1,r5 save X to r17
|
||||
80019314 30 00 b2 af sw s2,local_20(sp)
|
||||
80019318 21 90 c0 00 move s2,r6 save Y to r18
|
||||
8001931c 34 00 b3 af sw s3,local_1c(sp)
|
||||
80019320 80 1f 13 3c lui s3,0x1f80
|
||||
80019324 d0 03 73 36 ori s3,s3,0x3d0 load Scratchpad temp addr to r19
|
||||
80019328 ff 00 08 3c lui t0,0xff
|
||||
8001932c ff ff 08 35 ori t0,t0,0xffff
|
||||
80019330 28 00 b0 af sw s0,local_28(sp)
|
||||
80019334 ff 00 f0 30 andi s0,r7,0xff cut a3 (&ff) => s0 - make 2byte
|
||||
80019338 21 20 00 02 move r4,s0 Save Col Index to r4? (rewrite textaddr??)
|
||||
8001933c 08 80 07 3c lui r7=>DAT_80080000,0x8008 set r7(cI) to 80080000
|
||||
80019340 00 ff 06 3c lui r6,0xff00 r6 - load ff000000
|
||||
80019344 d0 b6 e9 24 addiu t1,r7,-0x4930 r9 = r7-4930 = 8007b6d0
|
||||
80019348 d0 b6 e3 8c lw v1,-0x4930(r7)=>8007b6d0_freeChain r3 =(r7-4930)
|
||||
8001934c 60 00 a5 93 lbu r5,makeShadow?(sp) r5 = makeShadow? (sp+60h)
|
||||
80019350 00 80 02 3c lui v0,0x8000 set r2 to 80000000
|
||||
80019354 4c 00 bf af sw ra,local_4(sp)
|
||||
80019358 48 00 be af sw s8,local_8(sp)
|
||||
8001935c 44 00 b7 af sw s7,local_c(sp)
|
||||
80019360 3c 00 b5 af sw s5,local_14(sp) push ra,r30,r23,31,r20
|
||||
80019364 38 00 b4 af sw s4,local_18(sp)
|
||||
80019368 24 30 66 00 and r6,v1,r6 r3 must begins from FF
|
||||
8001936c ff 00 a5 30 andi r5,r5,0xff cut makeShadow (and ff)
|
||||
80019370 24 18 68 00 and v1,v1,t0 r3 and 00ffffff (cut 1 byte)
|
||||
80019374 25 a0 62 00 or r20_LineDMAParam,v1,v0 r2(800..) or r3 (001adf54)
|
||||
(from 7b6d0)
|
||||
to r20 - 801adf54 - FREE DMA ADDR???
|
||||
80019378 04 00 22 8d lw v0,0x4(t1)=>DAT_8007b6d4_CmdCounter load 7b6d4 to r2 (0706)
|
||||
8001937c 00 00 83 8e lw v1,0x0(r20_LineDMAParam) load [r20] to r3 (1adf10)
|
||||
80019380 ff ff 42 24 addiu v0,v0,-0x1 r2=r2-1 (705)
|
||||
80019384 24 18 68 00 and v1,v1,t0 r3 & r8 (00ffffff) cut f.byte
|
||||
80019388 25 30 c3 00 or r6,r6,v1 r6 or r3 = ff+r3 = ff1adf10
|
||||
8001938c 04 00 22 ad sw v0,0x4(t1)=>DAT_8007b6d4_CmdCounter r9+4 = r2
|
||||
80019390 32 6c 00 0c jal store_Color_to_addr undefined store_Color_to_addr(undefined1 ColIndex, undefine
|
||||
80019394 d0 b6 e6 ac _sw r6,-0x4930(r7)=>8007b6d0_freeChain store r6(ff1df10) to (r7-4930 = 7b610)
|
||||
80019398 21 20 80 02 move r4,r20_LineDMAParam lw r4,20 = 801adf54
|
||||
8001939c 00 2c 11 00 sll r5,s1,0x10 r5 = X<<10h (003A0000)
|
||||
800193a0 03 2c 05 00 sra r5,r5,0x10 r5=r5>>10h 0000003A
|
||||
800193a4 00 34 12 00 sll r6,s2,0x10 r6 = Y << 10h
|
||||
800193a8 03 34 06 00 sra r6,r6,0x10 r6>>10h - 100% clean coords
|
||||
800193ac 1c 68 00 0c jal initCopycharChain undefined initCopycharChain(undefined4 curDmaChainAddr, und
|
||||
800193b0 21 38 00 02 _move r7,s0
|
||||
|
||||
;;;;init ScratchPad
|
||||
800193b4 80 1f 07 3c lui r7,0x1f80 load r7 1f800348 - 1st scratch DMA addr
|
||||
800193b8 48 03 e7 34 ori r7=>DAT_1f800348,r7,0x348 = ??
|
||||
800193bc 80 1f 06 3c lui r6,0x1f80
|
||||
800193c0 8c 03 c6 34 ori r6=>DAT_1f80038c,r6,0x38c load r7 1f80038c - 2nd Scrach DMA???
|
||||
CpuToVRam sizes in temp chain
|
||||
800193c4 03 00 02 24 li v0,0x3
|
||||
800193c8 1c 00 a2 a7 sh v0,DMALinksAddr[12](sp) store half (0003) to sp+1c = 00100003
|
||||
800193cc 06 00 02 24 li v0,0x6 r2 = 0006
|
||||
800193d0 0d 00 05 24 li r5,0xd r5 = 0d
|
||||
800193d4 00 a0 04 3c lui r4,0xa000 r4 = a000 0000
|
||||
800193d8 1e 00 a2 a7 sh v0,DMALinksAddr[14](sp) sp+13 = 00060003
|
||||
Size of DMA sprite
|
||||
Init upper char
|
||||
800193dc 03 00 e5 a0 sb r5,0x3(r7)=>DAT_1f80034b r5(0d) to r7(scr1+3) (byte)
|
||||
800193e0 04 00 e4 ac sw r4,0x4(r7)=>DAT_1f80034c 'a00000' ->34c - CpuToVram command
|
||||
800193e4 a0 00 88 97 lhu t0,0xa0(gp)=>VRam_Temp_Char_x Load x(0310) to r8
|
||||
800193e8 a2 00 82 97 lhu v0,0xa2(gp)=>VRam_Temp_Char_y Load y(01F0)to r2
|
||||
800193ec 00 01 03 3c lui v1,0x100 ld r3 - 01 00 00 00
|
||||
800193f0 80 1f 01 3c lui at,0x1f80 ld r1 = 1f800000
|
||||
800193f4 7c 03 23 ac sw v1,offset DAT_1f80037c(at) ld *r1+37c , r3 (01000000)
|
||||
load FlushCache cmd to DMATmp
|
||||
@ the end of DMAChain
|
||||
36Bytes Free (3x6x2) After
|
||||
a0000000
|
||||
013001f0
|
||||
init lower char
|
||||
800193f8 03 00 c5 a0 sb r5,0x3(r6)=>DAT_1f80038f load 0d to 2nd (lower char) scratch
|
||||
800193fc 04 00 c4 ac sw r4,0x4(r6)=>DAT_1f800390 set a0 to 390
|
||||
80019400 a0 00 85 87 lh r5,0xa0(gp)=>VRam_Temp_Char_x load 0130 to r5
|
||||
80019404 21 f0 40 02 move s8,s2 r18 to r30 (y)
|
||||
80019408 80 1f 01 3c lui at,0x1f80 load 1f80 to r1
|
||||
8001940c c0 03 23 ac sw v1,offset DAT_1f8003c0(at) ld *r1+3c0 , r3 (01000000)
|
||||
load FlushCache cmd to DMATmp
|
||||
@ the end of 2nd DMAChain
|
||||
36Bytes Free (3x6x2) After
|
||||
a0000000
|
||||
013001f0
|
||||
Make coords & codes Up&low and save to scratch
|
||||
80019410 18 00 a8 a7 sh t0,DMALinksAddr[8](sp) load half 0130 to sp+18
|
||||
80019414 1a 00 a2 a7 sh v0,DMALinksAddr[10](sp) load half to sp+1a 01f0
|
||||
80019418 18 00 a4 8f lw r4,DMALinksAddr[8](sp) load 01f00130 to r4 from sp+18
|
||||
8001941c 06 00 42 24 addiu v0,v0,0x6 r2 += 6 = 01f6 - lower char coords
|
||||
80019420 1a 00 a2 a7 sh v0,DMALinksAddr[10](sp) save half 01f2 to sp+1a
|
||||
80019424 1c 00 a2 8f lw v0,DMALinksAddr[12](sp) load 00060003 to r2 from sp+1c
|
||||
80019428 18 00 a3 8f lw v1,DMALinksAddr[8](sp) load 01f0130 to r3 from sp+18
|
||||
8001942c 21 40 a0 00 move t0,r5 load 0130(r5) to r8
|
||||
80019430 0c 00 e2 ac sw v0,0xc(r7)=>DAT_1f800354 load r2 - 0003006 to 1st char (to r7+0c)
|
||||
80019434 0c 00 c2 ac sw v0,0xc(r6)=>DAT_1f800398 load r2 - 0003006 to 2st char (to r6+0c)
|
||||
80019438 01 80 02 3c lui v0,0x8001 load 80010000 to r2
|
||||
8001943c 08 00 e4 ac sw r4,0x8(r7)=>DAT_1f800350 load r4 (upper coord 01f6) to r7+8 (DMA)
|
||||
80019440 08 00 c3 ac sw v1,0x8(r6)=>DAT_1f800394 load r3 (lower coord 01f0) to r6+8 (DMA)
|
||||
Make StrangeTable in SCRATCH
|
||||
80019444 80 1f 18 3c lui t8,0x1f80
|
||||
80019448 e0 02 18 37 ori t8,t8,0x2e0 load 1f8002e0 to r24?
|
||||
8001944c e8 03 4f 24 addiu t7,v0,0x3e8 r15 = 800103e8
|
||||
80019450 03 00 ed 89 lwl t5,0x3(t7)
|
||||
80019454 00 00 ed 99 lwr t5,0x0(t7)=>DAT_800103e8 = 00010000h
|
||||
80019458 07 00 ee 89 lwl t6,0x7(t7)
|
||||
8001945c 04 00 ee 99 lwr t6,0x4(t7)=>DAT_800103ec = 00110010h
|
||||
80019460 03 00 0d ab swl t5,0x3(t8)
|
||||
80019464 00 00 0d bb swr t5,0x0(t8)=>DAT_1f8002e0 = ??
|
||||
80019468 07 00 0e ab swl t6,0x7(t8)
|
||||
8001946c 04 00 0e bb swr t6,0x4(t8)=>DAT_1f8002e4 = ??
|
||||
80019470 0b 00 ed 89 lwl t5,0xb(t7)
|
||||
80019474 08 00 ed 99 lwr t5,0x8(t7)=>DAT_800103f0 = 01010100h
|
||||
80019478 0f 00 ee 89 lwl t6,0xf(t7)
|
||||
8001947c 0c 00 ee 99 lwr t6,0xc(t7)=>DAT_800103f4 = 01110110h
|
||||
80019480 0b 00 0d ab swl t5,0xb(t8)
|
||||
80019484 08 00 0d bb swr t5,0x8(t8)=>DAT_1f8002e8 = ??
|
||||
80019488 0f 00 0e ab swl t6,0xf(t8)
|
||||
8001948c 0c 00 0e bb swr t6,0xc(t8)=>DAT_1f8002ec = ??
|
||||
80019490 13 00 ed 89 lwl t5,0x13(t7)
|
||||
80019494 10 00 ed 99 lwr t5,0x10(t7)=>DAT_800103f8 = 10011000h
|
||||
80019498 17 00 ee 89 lwl t6,0x17(t7)
|
||||
8001949c 14 00 ee 99 lwr t6,0x14(t7)=>DAT_800103fc = 10111010h
|
||||
800194a0 13 00 0d ab swl t5,0x13(t8) Making ConvertTo4Bits Table
|
||||
800194a4 10 00 0d bb swr t5,0x10(t8)=>DAT_1f8002f0 = ??
|
||||
800194a8 17 00 0e ab swl t6,0x17(t8)
|
||||
800194ac 14 00 0e bb swr t6,0x14(t8)=>DAT_1f8002f4 = ??
|
||||
800194b0 1b 00 ed 89 lwl t5,0x1b(t7)
|
||||
800194b4 18 00 ed 99 lwr t5,0x18(t7)=>DAT_80010400 = 11011100h
|
||||
800194b8 1f 00 ee 89 lwl t6,0x1f(t7)
|
||||
800194bc 1c 00 ee 99 lwr t6,0x1c(t7)=>DAT_80010404 = 11111110h
|
||||
800194c0 1b 00 0d ab swl t5,0x1b(t8)
|
||||
800194c4 18 00 0d bb swr t5,0x18(t8)=>DAT_1f8002f8 = ??
|
||||
800194c8 1f 00 0e ab swl t6,0x1f(t8)
|
||||
800194cc 1c 00 0e bb swr t6,0x1c(t8)=>DAT_1f8002fc = ??
|
||||
Copy Sprite DMA Command Forming
|
||||
800194d0 04 00 02 24 li v0,0x4
|
||||
800194d4 03 00 62 a2 sb v0,0x3(s3)=>DAT_1f8003d3 04 00 00 00 to 3d0 (sb 04 to 3d3)
|
||||
800194d8 64 00 02 24 li v0,0x64
|
||||
800194dc 07 00 62 a2 sb v0,0x7(s3)=>DAT_1f8003d7 sb 64 to 3d7 (copySpriteCommand)
|
||||
800194e0 80 00 02 24 li v0,0x80
|
||||
800194e4 04 00 62 a2 sb v0,0x4(s3)=>DAT_1f8003d4 make 80 80 80 64 (3d4,5,6,7)
|
||||
800194e8 05 00 62 a2 sb v0,0x5(s3)=>DAT_1f8003d5 SPRITE COPY DMA COMMAND
|
||||
800194ec 06 00 62 a2 sb v0,0x6(s3)=>DAT_1f8003d6 = ??
|
||||
800194f0 02 00 a1 04 bgez r5,LAB_800194fc branch if r5>=0
|
||||
800194f4 20 00 b1 a7 _sh s1,textXlocal(sp) sp+20 loadhalf X (3A)
|
||||
800194f8 3f 00 a8 24 addiu t0,r5,0x3f else r8 = r5 + 3f
|
||||
LAB_800194fc XREF[1]: 800194f0(j)
|
||||
800194fc 83 11 08 00 sra v0,t0,0x6 r2 = r8 (130) >> 6 = 4
|
||||
80019500 80 11 02 00 sll v0,v0,0x6 r2 = r2 (4) << 6 = 100
|
||||
80019504 23 10 a2 00 subu v0,r5,v0 r2 = r5(130) - r2 = 30
|
||||
80019508 a2 00 83 87 lh v1,0xa2(gp)=>VRam_Temp_Char_y load Y half 01f0 form Y(mem)
|
||||
8001950c 80 10 02 00 sll v0,v0,0x2 r2 << 2 = c0
|
||||
80019510 0c 00 62 a2 sb v0,0xc(s3)=>DAT_1f8003dc set src X (c0) sprCpy(3th command)
|
||||
80019514 02 00 61 04 bgez v1,LAB_80019520 if Y r3>=0 - branch & r2=r3
|
||||
80019518 21 10 60 00 _move v0,v1
|
||||
8001951c ff 00 62 24 addiu v0,v1,0xff else r2 = ff - r3
|
||||
LAB_80019520 XREF[1]: 80019514(j)
|
||||
80019520 03 12 02 00 sra v0,v0,0x8 r2 (1f0) >>a 8 = 001
|
||||
80019524 00 12 02 00 sll v0,v0,0x8 r2 (001) <<l 8 = 100 Cleared 1st byte
|
||||
80019528 23 10 62 00 subu v0,v1,v0 r2 = r3-r2 = F0
|
||||
8001952c 0d 00 62 a2 sb v0,0xd(s3)=>DAT_1f8003dd set src Y (F0) sprCpy(3th command)
|
||||
80019530 a8 00 83 97 lhu v1,0xa8(gp)=>DAT_8007b238 load XYhalf(7df3) to r3 from DMAchain
|
||||
Size of Char To Copy (000Cx000C)
|
||||
80019534 0c 00 02 24 li v0,0xc
|
||||
80019538 10 00 62 a6 sh v0,0x10(s3)=>DAT_1f8003e0 r2 = 000c. load halfs to 3e0,3e2
|
||||
8001953c 12 00 62 a6 sh v0,0x12(s3)=>DAT_1f8003e2 = ??
|
||||
MAKING TEMP CHAIN IN SCRATCHPAD FOR COPY SPRITE TO SCREEN
|
||||
80019540 0e 00 63 a6 sh v1,0xe(s3)=>DAT_1f8003de load r3half to 3de XYcoords to DMATemp (7fd3)
|
||||
START TO READING CHARS HERE
|
||||
80019544 00 00 c4 96 lhu r4,0x0(s6) LOAD FIRST CHAR (HALF-2bytes) to r4 (c2) from *r22
|
||||
80019548 00 00 00 00 nop
|
||||
8001954c 00 10 82 2c sltiu v0,r4,0x1000 r2 = r4 < 1000h
|
||||
80019550 b1 00 40 10 beq v0,zero,TextEnd branch if not char (r2=0)
|
||||
80019554 02 00 d6 26 _addiu s6,s6,0x2 add +2 to r22 (read char addr)
|
||||
80019558 08 80 11 3c lui s1,0x8008 load 80080000 to r17
|
||||
8001955c d0 b6 35 26 addiu s5,s1,-0x4930 r21 = r17-4930= 7b6d0 (tempDMA)
|
||||
80019560 ff 00 10 3c lui s0,0xff
|
||||
80019564 ff ff 10 36 ori s0,s0,0xffff r16 = 00 ff ff ff
|
||||
80019568 00 80 17 3c lui s7,0x8000 r3 = 8000 000
|
||||
LAB_8001956c XREF[1]: 80019810(j)
|
||||
8001956c 32 66 00 0c jal CreateCharCopyToDMAChain load current char, copy to Scratch
|
||||
80019570 21 90 00 00 _clear r18 r18 = 0
|
||||
80019574 b0 00 82 8f lw v0,0xb0(gp)=>DAT_8007b240_parms load r2 from r28+0b0 (7b240)(Xoffs)
|
||||
80019578 04 00 83 96 lhu v1,0x4(r20_LineDMAParam) r3 = half *DMAAddr + 4
|
||||
8001957c 0c 00 42 24 addiu v0,v0,0xc 0x0c * 12px btw letters!
|
||||
80019580 18 00 62 00 mult v1,v0 r3*r2 = xOffs*charNum
|
||||
80019584 00 ff 0a 3c lui t2,0xff00 r10 = ld upper ff00 = ff000000
|
||||
80019588 21 60 80 02 move t4,r20_LineDMAParam r12 = r20
|
||||
8001958c 10 00 ab 27 addiu t3,sp,0x10 r11 = sp + 10 = 807ffe50
|
||||
80019590 21 48 80 02 move t1,r20_LineDMAParam r9 = r20 (paramsAddr)
|
||||
80019594 0a 00 7e a6 sh s8,0xa(s3)=>DAT_1f8003da *r19(1st scr DMA)+0a = r30 (Y??)
|
||||
80019598 20 00 ad 97 lhu t5,textXlocal(sp) r13 = ld half (sp+20) = 003A
|
||||
8001959c 12 70 00 00 mflo t6 r14 = lo
|
||||
800195a0 21 10 ae 01 addu v0,t5,t6 r2 = r13 + r14 = 3A
|
||||
Рассчитываем координаты символа на экране
|
||||
800195a4 08 00 62 a6 sh v0,0x8(s3)=>DAT_1f8003d8 save r2 half to 1f8003d8 = Y (3A)
|
||||
MAKING COPYSPRITE CHAIN
|
||||
ScreenLoop XREF[1]: 800197ec(j)
|
||||
800195a8 d0 b6 22 8e lw v0,-0x4930(s1)=>8007b6d0_freeChain r2 = *7b6d0
|
||||
800195ac 00 00 00 00 nop
|
||||
800195b0 24 20 4a 00 and r4,v0,t2 r4 = a2 & ff000000 - is begins with ff
|
||||
800195b4 24 10 50 00 and v0,v0,s0 r2 & r16 (00FFFFFF) = cut FF
|
||||
800195b8 25 28 57 00 or r5,v0,s7 r5 = r2 or r23 (80000000) = 801ADF10
|
||||
r5 = next free chain
|
||||
800195bc 04 00 a2 8e lw v0,0x4(s5)=>DAT_8007b6d4_CmdCounter r2 = *7b6d0+4 = 705
|
||||
800195c0 00 00 a3 8c lw v1,0x0(r5) r3 = *r5 chainAddr?
|
||||
next sec free chain
|
||||
800195c4 ff ff 42 24 addiu v0,v0,-0x1 r2 -= 1
|
||||
800195c8 24 18 70 00 and v1,v1,s0 r3 & 00FFFFFF = cut
|
||||
800195cc 25 20 83 00 or r4,r4,v1 r4 or r3 . r4&ff = ff1adecc
|
||||
800195d0 04 00 a2 ae sw v0,0x4(s5)=>DAT_8007b6d4_CmdCounter store r2 (704) in *7b6d4
|
||||
800195d4 d0 b6 24 ae sw r4,-0x4930(s1)=>8007b6d0_freeChain 7b640 = r4
|
||||
800195d8 00 00 6f 8e lw t7,0x0(s3)=>DAT_1f8003d0 copy CopySpriteCommand
|
||||
r15 = *r19
|
||||
800195dc 04 00 78 8e lw t8,0x4(s3)=>DAT_1f8003d4 r24 = *r19+4
|
||||
800195e0 08 00 6d 8e lw t5,0x8(s3)=>DAT_1f8003d8 r13 = *r19+8
|
||||
800195e4 0c 00 6e 8e lw t6,0xc(s3)=>DAT_1f8003dc r14 = *r19+0c
|
||||
800195e8 00 00 af ac sw t7,0x0(r5) *r5 = r15
|
||||
800195ec 04 00 b8 ac sw t8,0x4(r5) *r5+4 = r24
|
||||
800195f0 08 00 ad ac sw t5,0x8(r5) *r5+8 = r13
|
||||
800195f4 0c 00 ae ac sw t6,0xc(r5) *r5+c = r14
|
||||
800195f8 10 00 6f 8e lw t7,0x10(s3)=>DAT_1f8003e0 r15 = *r19+10h last command
|
||||
800195fc 00 00 00 00 nop
|
||||
80019600 10 00 af ac sw t7,0x10(r5) *r5+10 = r15
|
||||
|
||||
80019604 18 00 23 8d lw v1,0x18(t1) r3 = *r9+18 (2nd screen???) = 801adf64
|
||||
80019608 00 00 a2 8c lw v0,0x0(r5) r2 = *r5
|
||||
8001960c 00 00 63 8c lw v1,0x0(v1) r3 = *r3 = 00FFFF
|
||||
80019610 24 10 4a 00 and v0,v0,t2 r2 & r10 (ff00...) = 0400.. - Cleaning
|
||||
80019614 24 18 70 00 and v1,v1,s0 r3 & r16 (00ff..) = cutting
|
||||
80019618 25 10 43 00 or v0,v0,v1 r2 or r3 = 04FFFFFF
|
||||
8001961c 00 00 a2 ac sw v0,0x0(r5) *r5 = r2
|
||||
80019620 18 00 24 8d lw r4,0x18(t1) r4 = *r19+18
|
||||
80019624 00 00 00 00 nop
|
||||
80019628 00 00 82 8c lw v0,0x0(r4) r2 = *r4 (00ffffff)
|
||||
8001962c 24 18 b0 00 and v1,r5,s0 r3 = r5 and r16 (00ff..)
|
||||
80019630 24 10 4a 00 and v0,v0,t2 r2 & ff0000
|
||||
80019634 25 10 43 00 or v0,v0,v1 r2 | r3 (001adf10)
|
||||
80019638 00 00 82 ac sw v0,0x0(r4) *r4 = r2
|
||||
8001963c 18 00 25 ad sw r5,0x18(t1) *r9+18 = r5
|
||||
80019640 04 00 82 95 lhu v0,0x4(t4) r2 = half r12 + 4
|
||||
80019644 00 00 00 00 nop
|
||||
80019648 02 00 40 14 bne v0,zero,LAB_80019654 if r2<>0 = goto
|
||||
8001964c 21 40 00 00 _clear t0 clear r8
|
||||
80019650 28 00 25 ad sw r5,0x28(t1) *r9+28 = r5 (df10)
|
||||
LAB_80019654 XREF[1]: 80019648(j)
|
||||
80019654 21 38 00 01 move r7,t0 r7 = r8
|
||||
80019658 21 30 60 01 move r6,t3 r6 = r11 stack +10(?)
|
||||
MAKE HALF CHAR CHAIN (r7 is offset in scratch)
|
||||
UpDownCharLoop XREF[1]: 8001975c(j)
|
||||
8001965c 80 1f 05 3c lui r5,0x1f80 r5 = 1f80000
|
||||
80019660 d0 b6 22 8e lw v0,-0x4930(s1)=>8007b6d0_freeChain r2 = *7b6d0
|
||||
80019664 48 03 a5 34 ori r5=>DAT_1f800348,r5,0x348 r5 or 348 - ld upper char ScrChain
|
||||
80019668 24 10 50 00 and v0,v0,s0 r2 & 00FFFFFF
|
||||
8001966c 25 10 57 00 or v0,v0,s7 r2 & 80000000
|
||||
80019670 00 00 c2 ac sw v0,0x0(DMALinkAddr)=>DMALinksAddr[0] set r2 to r6 (stack) (upper char chain)
|
||||
80019674 d0 b6 23 8e lw v1,-0x4930(s1)=>8007b6d0_freeChain r3 = *7b6d0
|
||||
80019678 00 00 42 8c lw v0,0x0(v0) r2 = *r2 LAST NEW CHAIN ADDR
|
||||
8001967c 04 00 a4 8e lw r4,0x4(s5)=>DAT_8007b6d4_CmdCounter r4 = chain counter
|
||||
80019680 24 18 6a 00 and v1,v1,t2 r3 & FF000000
|
||||
80019684 24 10 50 00 and v0,v0,s0 r2 & 00 FF FF FF (cut)
|
||||
80019688 25 18 62 00 or v1,v1,v0 r3 | r2 (ff-nextfreeaddr)
|
||||
8001968c ff ff 84 24 addiu r4,r4,-0x1 dec r4 chain counter -1
|
||||
80019690 d0 b6 23 ae sw v1,-0x4930(s1)=>8007b6d0_freeChain save next addr to *7b6d0
|
||||
80019694 04 00 a4 ae sw r4,0x4(s5)=>DAT_8007b6d4_CmdCounter save chain counter 7b6d4
|
||||
80019698 00 00 c4 8c lw r4,0x0(DMALinkAddr)=>DMALinksAddr[0] r4 = second chain addr
|
||||
8001969c 21 18 e5 00 addu v1,r7,r5 r3 = r7(counter)+r5 = current read ScrDMAAddr
|
||||
800196a0 25 10 64 00 or v0,v1,r4 r2 = r3(curScrAddr) | r4(DestAddr)
|
||||
800196a4 03 00 42 30 andi v0,v0,0x3 r2 & 3.. Test for Src | dest & 3
|
||||
Смещение относ. 4 байт у Исх или Назн
|
||||
Если не ноль - обработка смещения
|
||||
800196a8 16 00 40 10 beq v0,zero,goodAddr if a=0 then Ok, jump
|
||||
800196ac 30 00 62 24 _addiu v0,v1,0x30 r2 = r3 (старт) + 30h -
|
||||
конечный адрес (30h=48 байт)
|
||||
LAB_800196b0 XREF[1]: 800196f4(j)
|
||||
800196b0 03 00 6f 88 lwl t7,0x3(v1) r15 = *r3+3
|
||||
800196b4 00 00 6f 98 lwr t7,0x0(v1)=>DAT_1f800348 = ??
|
||||
800196b8 07 00 78 88 lwl t8,0x7(v1)
|
||||
800196bc 04 00 78 98 lwr t8,0x4(v1)=>DAT_1f80034c load halfbytes until r2<>r3
|
||||
800196c0 0b 00 6d 88 lwl t5,0xb(v1)
|
||||
800196c4 08 00 6d 98 lwr t5,0x8(v1)=>DAT_1f800350 = ??
|
||||
800196c8 0f 00 6e 88 lwl t6,0xf(v1)
|
||||
800196cc 0c 00 6e 98 lwr t6,0xc(v1)=>DAT_1f800354 = ??
|
||||
800196d0 03 00 8f a8 swl t7,0x3(r4)
|
||||
800196d4 00 00 8f b8 swr t7,0x0(r4)
|
||||
800196d8 07 00 98 a8 swl t8,0x7(r4)
|
||||
800196dc 04 00 98 b8 swr t8,0x4(r4)
|
||||
800196e0 0b 00 8d a8 swl t5,0xb(r4)
|
||||
800196e4 08 00 8d b8 swr t5,0x8(r4)
|
||||
800196e8 0f 00 8e a8 swl t6,0xf(r4)
|
||||
800196ec 0c 00 8e b8 swr t6,0xc(r4)
|
||||
800196f0 10 00 63 24 addiu v1,v1,0x10 r3 += 10
|
||||
800196f4 ee ff 62 14 bne v1,v0,LAB_800196b0
|
||||
800196f8 10 00 84 24 _addiu r4,r4,0x10 r4 += 10
|
||||
800196fc cc 65 00 08 j LAB_80019730
|
||||
80019700 00 00 00 00 _nop
|
||||
goodAddr XREF[2]: 800196a8(j), 80019728(j)
|
||||
80019704 00 00 6f 8c lw t7,0x0(v1)=>DAT_1f800348 r15 = *r3
|
||||
80019708 04 00 78 8c lw t8,0x4(v1)=>DAT_1f80034c r24 = *r3+4
|
||||
8001970c 08 00 6d 8c lw t5,0x8(v1)=>DAT_1f800350 r13 = *r3+8
|
||||
80019710 0c 00 6e 8c lw t6,0xc(v1)=>DAT_1f800354 r14 = *r3+c
|
||||
80019714 00 00 8f ac sw t7,0x0(r4) *r4 (dest) = r15
|
||||
80019718 04 00 98 ac sw t8,0x4(r4) *r4+4 (dest) = r24
|
||||
8001971c 08 00 8d ac sw t5,0x8(r4) *r4+8 (dest) = r13
|
||||
80019720 0c 00 8e ac sw t6,0xc(r4) *r4+c (dest) = r14
|
||||
80019724 10 00 63 24 addiu v1,v1,0x10 r3 += 10h (16) src
|
||||
80019728 f6 ff 62 14 bne v1,v0,goodAddr if r3<>r2 then loop
|
||||
8001972c 10 00 84 24 _addiu r4,r4,0x10 r4 += 10h (16) dest
|
||||
LAB_80019730 XREF[1]: 800196fc(j)
|
||||
80019730 03 00 6f 88 lwl t7,0x3(v1)
|
||||
80019734 00 00 6f 98 lwr t7,0x0(v1)=>DAT_1f800358 = ??
|
||||
80019738 07 00 78 88 lwl t8,0x7(v1)
|
||||
8001973c 04 00 78 98 lwr t8,0x4(v1)=>DAT_1f80035c = ??
|
||||
80019740 03 00 8f a8 swl t7,0x3(r4)
|
||||
80019744 00 00 8f b8 swr t7,0x0(r4) add by halfBytes
|
||||
80019748 07 00 98 a8 swl t8,0x7(r4)
|
||||
8001974c 04 00 98 b8 swr t8,0x4(r4)
|
||||
80019750 44 00 e7 24 addiu r7,r7,0x44 r7 += 44 (68)
|
||||
80019754 01 00 08 25 addiu t0,t0,0x1 r8 += 1
|
||||
80019758 02 00 02 2d sltiu v0,t0,0x2 r2 = if r8<=2
|
||||
8001975c bf ff 40 14 bne v0,zero,UpDownCharLoop then another loop (lower char)
|
||||
80019760 04 00 c6 24 _addiu DMALinkAddr,DMALinkAddr,0x4 Shift DMALinkAddress in r6
|
||||
80019764 10 00 a4 8f lw r4,DMALinksAddr[0](sp) r4 = *sp+10 (sec chain addr)
|
||||
80019768 18 00 23 8d lw v1,0x18(t1) r3 = *r9+18h = first chain addr @ secondchain header
|
||||
8001976c 00 00 82 8c lw v0,0x0(r4) r2 = *r4 = currChain start (0d000000)
|
||||
80019770 00 00 63 8c lw v1,0x0(v1) r3 = *r3 = currChain start (04ffffff)
|
||||
80019774 24 10 4a 00 and v0,v0,t2 a2 & r10 (ff 00 0 00)
|
||||
80019778 24 18 70 00 and v1,v1,s0 r3 & r16 00FFFFFF
|
||||
8001977c 25 10 43 00 or v0,v0,v1 r2 | r3
|
||||
80019780 00 00 82 ac sw v0,0x0(r4) save cur chain header with ??FFFFFF
|
||||
80019784 18 00 24 8d lw r4,0x18(t1) r4 = *r9+18h = first chain addr @ secondchain header
|
||||
80019788 10 00 a3 8f lw v1,DMALinksAddr[0](sp) r3 = *sp+10 (sec chain addr)
|
||||
8001978c 00 00 82 8c lw v0,0x0(r4) r2 = load *r4 1st chain (04ffffff)
|
||||
80019790 24 18 70 00 and v1,v1,s0 r3 & r16 00FFFFFF
|
||||
80019794 24 10 4a 00 and v0,v0,t2 r2 & r10 (ff 00 0 00)
|
||||
80019798 25 10 43 00 or v0,v0,v1 r2 | r3
|
||||
8001979c 00 00 82 ac sw v0,0x0(r4) *first chain addr=04_sec_chain
|
||||
800197a0 14 00 a4 8f lw r4,DMALinksAddr[4](sp) r4 = load last chain addr
|
||||
800197a4 10 00 a3 8f lw v1,DMALinksAddr[0](sp) r3 = *sp+10 (sec chain addr)
|
||||
800197a8 00 00 82 8c lw v0,0x0(r4) r2 = load last chain header
|
||||
800197ac 00 00 63 8c lw v1,0x0(v1) r3 = *r3 (header of 2nd chain)
|
||||
800197b0 24 10 4a 00 and v0,v0,t2 a2 & ff00..
|
||||
800197b4 24 18 70 00 and v1,v1,s0 r3 & 00ffff..
|
||||
800197b8 25 10 43 00 or v0,v0,v1 r2 | r3 = sec chain header (0d+ffff)
|
||||
800197bc 00 00 82 ac sw v0,0x0(r4) store header 0dffffff to last chain
|
||||
800197c0 10 00 a4 8f lw r4,DMALinksAddr[0](sp) r4 = *sp+10 (sec chain addr)
|
||||
800197c4 14 00 a3 8f lw v1,DMALinksAddr[4](sp) r3 = load last chain addr
|
||||
800197c8 00 00 82 8c lw v0,0x0(r4) r2 = load sec chain header
|
||||
800197cc 24 18 70 00 and v1,v1,s0 r3 & 00FFFFFF
|
||||
800197d0 24 10 4a 00 and v0,v0,t2 r2 & FF000000
|
||||
800197d4 25 10 43 00 or v0,v0,v1 r2 | r3
|
||||
800197d8 00 00 82 ac sw v0,0x0(r4) *r4 = r2 (sec header with command count)
|
||||
800197dc 14 00 a2 8f lw v0,DMALinksAddr[4](sp) r2 = load last chain addr
|
||||
800197e0 01 00 52 26 addiu r18,r18,0x1 18 += 1 (screen counter?)
|
||||
800197e4 18 00 22 ad sw v0,0x18(t1) load r2 (last cmd addr)
|
||||
to lower DMA table???
|
||||
800197e8 02 00 42 2e sltiu v0,r18,0x2 if r18<2 -v
|
||||
800197ec 6e ff 40 14 bne v0,zero,ScreenLoop Loop again another screen
|
||||
800197f0 04 00 29 25 _addiu t1,t1,0x4 SHIFT LOWER DMA TABLE MAIN ADDR
|
||||
800197f4 04 00 82 96 lhu v0,0x4(r20_LineDMAParam) r2 = upper half of textParam+4
|
||||
800197f8 00 00 00 00 nop
|
||||
800197fc 01 00 42 24 addiu v0,v0,0x1 a += 1
|
||||
80019800 04 00 82 a6 sh v0,0x4(r20_LineDMAParam) save half to textParams+4
|
||||
80019804 00 00 c4 96 lhu r4,0x0(s6) r4 = load next Char (2 bytes)
|
||||
80019808 00 00 00 00 nop
|
||||
8001980c 00 10 82 2c sltiu v0,r4,0x1000 r2 = currentChar<1000h (is Char)
|
||||
80019810 56 ff 40 14 bne v0,zero,LAB_8001956c if Char - make next char
|
||||
80019814 02 00 d6 26 _addiu s6,s6,0x2 move current text addr
|
||||
TextEnd XREF[1]: 80019550(j)
|
||||
80019818 21 90 00 00 clear r18 r18 = 0
|
||||
8001981c 08 80 13 3c lui s3,0x8008
|
||||
80019820 d0 b6 75 26 addiu s5,s3,-0x4930 r19 = 80080000, r21 = 7b6d0
|
||||
80019824 ff 00 11 3c lui s1,0xff r17 = 00ff0000
|
||||
80019828 ff ff 31 36 ori s1,s1,0xffff r17 & ffff = 00ff ffff
|
||||
8001982c 21 80 80 02 move s0,r20_LineDMAParam r16 = r20 (currentTLineParam)
|
||||
80019830 21 28 00 00 clear r5
|
||||
PageLoop XREF[1]: 8001988c(j)
|
||||
80019834 01 00 06 24 li DMALinkAddr,0x1 r6=1
|
||||
80019838 21 90 46 02 addu r18,r18,DMALinkAddr r18(Counter) += r6
|
||||
8001983c 00 80 02 3c lui v0,0x8000 r2 = 80000000
|
||||
80019840 00 ff 04 3c lui r4,0xff00 r4 = ff00 0000
|
||||
80019844 d0 b6 63 8e lw v1,-0x4930(s3)=>8007b6d0_freeChain r3 = next free Chain (*7b6d0)
|
||||
80019848 a4 00 87 8f lw r7,0xa4(gp)=>DAT_8007b234 r7 = someParam(почти DMA)gp+a4 = 34
|
||||
8001984c 24 18 71 00 and v1,v1,s1 r3 & 00FFFFFF
|
||||
80019850 25 18 62 00 or v1,v1,v0 r3 | r2 = 80.....
|
||||
80019854 30 00 03 ae sw v1,0x30(s0) store last free ChAddr to DMAParams
|
||||
80019858 d0 b6 62 8e lw v0,-0x4930(s3)=>8007b6d0_freeChain r2 = next free chain
|
||||
8001985c 00 00 63 8c lw v1,0x0(v1) r3 = *r3 = last chain - made one more chain
|
||||
80019860 24 10 44 00 and v0,v0,r4 a2 & ff000000
|
||||
80019864 24 18 71 00 and v1,v1,s1 r3 & 00FFFFFF
|
||||
80019868 04 00 a4 8e lw r4,0x4(s5)=>DAT_8007b6d4_CmdCounter r4 = DMA Counter
|
||||
8001986c 25 10 43 00 or v0,v0,v1 r2 | r3
|
||||
80019870 d0 b6 62 ae sw v0,-0x4930(s3)=>8007b6d0_freeChain new free chain addr add to *7b6b0
|
||||
80019874 ff ff 84 24* addiu r4,r4,-0x1 DMA Cunter =- 1
|
||||
80019878 04 00 a4 ae sw r4,0x4(s5)=>DAT_8007b6d4_CmdCounter Store DMA Count
|
||||
8001987c 30 00 04 8e lw r4,0x30(s0) r4 = *DMA params + 30 = Start Of DMA Chain
|
||||
80019880 b3 50 01 0c jal SetDrawTPage Set DRAW PAGE
|
||||
80019884 04 00 10 26 _addiu s0,s0,0x4 r16 += 4 - Shgift DMAParams for next Page
|
||||
80019888 02 00 42 2e sltiu v0,r18,0x2 r2 = r18<2
|
||||
8001988c e9 ff 40 14 bne v0,zero,PageLoop if not r2 then goto Loop
|
||||
80019890 21 28 00 00 _clear r5 r5 = 0
|
||||
80019894 21 10 80 02 move v0,r20_LineDMAParam r2 = DMAParamsMain
|
||||
80019898 4c 00 bf 8f lw ra,local_4(sp)
|
||||
8001989c 48 00 be 8f lw s8,local_8(sp)
|
||||
800198a0 44 00 b7 8f lw s7,local_c(sp)
|
||||
800198a4 40 00 b6 8f lw s6,local_10(sp)
|
||||
800198a8 3c 00 b5 8f lw s5,local_14(sp)
|
||||
800198ac 38 00 b4 8f lw r20_LineDMAParam,local_18(sp) VOSSTANAVL STEK
|
||||
800198b0 34 00 b3 8f lw s3,local_1c(sp)
|
||||
800198b4 30 00 b2 8f lw r18,local_20(sp)
|
||||
800198b8 2c 00 b1 8f lw s1,local_24(sp)
|
||||
800198bc 28 00 b0 8f lw s0,local_28(sp)
|
||||
800198c0 08 00 e0 03 jr ra ret
|
||||
800198c4 50 00 bd 27 _addiu sp,sp,0x50 Stek +50h
|
||||
91
ghidra_src/charL.asm
Normal file
91
ghidra_src/charL.asm
Normal file
@@ -0,0 +1,91 @@
|
||||
**************************************************************
|
||||
* FUNCTION *
|
||||
**************************************************************
|
||||
undefined __stdcall makeCharPixels(undefined4 r4, undefi
|
||||
assume gp = 0x8007b190
|
||||
undefined v0:1 <RETURN>
|
||||
undefined4 a0:4 r4
|
||||
undefined4 a1:4 a1
|
||||
undefined4 a2:4 isSmallChar XREF[1]: 8001a11c(W)
|
||||
undefined4 t2:4 t2 XREF[1]: 8001a0f8(W)
|
||||
undefined4 t1:4 t1 XREF[1]: 8001a118(W)
|
||||
undefined4 a2:4 a2 XREF[1]: 8001a11c(W)
|
||||
undefined2 HASH:5f64aad curByte
|
||||
makeCharPixels XREF[4]: PrintTimeinSaveLoad?:8001621c(c),
|
||||
CreateCharCopyToDMAChain:800198dc(c),
|
||||
GenerateSmallChar:8001a298(c),
|
||||
PrintPlayerNameInBattle!:8001b0ec(c)
|
||||
8001a0f8 ac 00 8a 93 lbu t2,0xac(gp)=>DAT_8007b23c load colIndex(b) to r10 from 7b23c
|
||||
assume gp = <UNKNOWN>
|
||||
8001a0fc 09 00 c0 14 bne isSmallChar,zero,initSmFontAddr if r6 <> 0 then Branch (small text)
|
||||
8001a100 21 40 80 00 _move t0,r4 load ScrathAddr to r8
|
||||
8001a104 1e 80 03 3c lui v1,0x801e
|
||||
8001a108 80 f4 63 34 ori v1,v1,0xf480 load font addr in mem to r3
|
||||
8001a10c c0 10 05 00 sll v0,a1,0x3 r2 = a1 (r5) << 3
|
||||
8001a110 21 10 45 00 addu v0,v0,a1 r2 += r5 (ITOGO r2 = r5*9)
|
||||
8001a114 40 10 02 00 sll v0,v0,0x1 r2 << 1. ITOGO r2 = r5 * 18 (12h)
|
||||
8001a118 21 48 43 00 addu t1,v0,v1 r9 (charAddr) = r2(offs)+r3(start) = 801F0224
|
||||
8001a11c 50 68 00 08 j contLoadChar
|
||||
8001a120 09 00 06 24 _li a2,0x9 r6 = charBytesLength = 9
|
||||
initSmFontAddr XREF[1]: 8001a0fc(j)
|
||||
8001a124 1e 80 03 3c lui v1,0x801e
|
||||
8001a128 00 f0 63 34 ori v1,v1,0xf000 load font addr to r3 (801ef000)
|
||||
8001a12c 40 10 05 00 sll v0,a1,0x1 r2 = r5 << 1 (*2)
|
||||
8001a130 21 10 45 00 addu v0,v0,a1 r2 += r5 (it. *3)
|
||||
8001a134 80 10 02 00 sll v0,v0,0x2 r2 << 2 (*4) (r2 = r5 *12)
|
||||
8001a138 21 48 43 00 addu t1,v0,v1 r9 = r2(offs) + r3 (start)
|
||||
8001a13c 06 00 06 24 li a2,0x6 r6 = byteslength = 6
|
||||
contLoadChar XREF[1]: 8001a11c(j)
|
||||
8001a140 21 10 c0 00 move v0,a2 r2 = r6 (counter)
|
||||
8001a144 2f 00 40 10 beq v0,zero,charLoaded if counter=0 then branch
|
||||
8001a148 ff ff c6 24 _addiu a2,a2,-0x1 dec r6
|
||||
8001a14c 80 1f 07 3c lui a3,0x1f80
|
||||
8001a150 e0 02 e7 34 ori a3,a3,0x2e0 set scratch convert addr r7 = 1f8002e0
|
||||
charLoop XREF[1]: 8001a1fc(j)
|
||||
8001a154 00 00 23 95 lhu v1=>DAT_801ef480_font12x12,0x0(CharF load upperhalf of char to r3
|
||||
8001a158 00 00 00 00 nop
|
||||
8001a15c 0f 00 64 30 andi r4,v1,0xf r4 = r3 & 0f - cutting left semibyte
|
||||
8001a160 02 19 03 00 srl v1,v1,0x4 r3 >> 4
|
||||
8001a164 0f 00 62 30 andi v0,v1,0xf r2 = r3 & 0f
|
||||
8001a168 40 10 02 00 sll v0,v0,0x1 r2 << 1
|
||||
8001a16c 21 10 47 00 addu v0,v0,a3 r2 = r2 + to4bitConvertTableAddr (r7)
|
||||
8001a170 00 00 42 94 lhu v0,0x0(v0)=>DAT_1f8002e0 r2 = *r2(half) pixel pattern
|
||||
8001a174 00 00 00 00 nop
|
||||
8001a178 18 00 4a 00 mult v0,t2 r2*r10. make Color
|
||||
8001a17c 40 20 04 00 sll r4,r4,0x1 r4 << 1
|
||||
8001a180 21 20 87 00 addu r4,r4,a3 r4 += r6 counter
|
||||
8001a184 12 28 00 00 mflo a1 load lo to r5
|
||||
8001a188 00 00 82 94 lhu v0,0x0(r4)=>DAT_1f8002e0 load table+r4
|
||||
8001a18c 00 00 00 00 nop
|
||||
8001a190 18 00 4a 00 mult v0,t2 r2 * colorIndex r10
|
||||
8001a194 02 19 03 00 srl v1,v1,0x4 r3 >> 4, right 4 bits
|
||||
8001a198 0f 00 64 30 andi r4,v1,0xf r4 = r3 & f0 (cut right semibyte)
|
||||
8001a19c 02 19 03 00 srl v1,v1,0x4 r3 >> 4
|
||||
8001a1a0 40 18 03 00 sll v1,v1,0x1 r3 << 1 = *2
|
||||
8001a1a4 21 18 67 00 addu v1,v1,a3 r3=r3+Table r7
|
||||
8001a1a8 00 14 05 00 sll v0,a1,0x10 r2 = r5 << 10 bits
|
||||
8001a1ac 12 60 00 00 mflo t4 load r12,low
|
||||
8001a1b0 25 10 82 01 or v0,t4,v0 r2 = r12 | r2
|
||||
8001a1b4 00 00 02 ad sw v0,0x0(t0) load *r8(current Scratch) from r2(result)
|
||||
8001a1b8 00 00 62 94 lhu v0,0x0(v1)=>DAT_1f8002e0 load r2 from TablePattern Half from r3
|
||||
8001a1bc 00 00 00 00 nop
|
||||
8001a1c0 18 00 4a 00 mult v0,t2 r2*color r10
|
||||
8001a1c4 40 20 04 00 sll r4,r4,0x1 r4 << 1
|
||||
8001a1c8 21 20 87 00 addu r4,r4,a3 r4 = r4 + TableStart
|
||||
8001a1cc 12 28 00 00 mflo a1 ld r5,lo
|
||||
8001a1d0 00 00 82 94 lhu v0,0x0(r4)=>DAT_1f8002e0 ld half r2 from *r4
|
||||
8001a1d4 00 00 00 00 nop
|
||||
8001a1d8 18 00 4a 00 mult v0,t2 r2*col
|
||||
8001a1dc 02 00 29 25 addiu t1,t1,0x2 move charFont + +2
|
||||
8001a1e0 21 18 c0 00 move v1,a2 r3 = byteCount (r6)
|
||||
8001a1e4 ff ff c6 24 addiu a2,a2,-0x1 r6 -= 1
|
||||
8001a1e8 04 00 08 25 addiu t0,t0,0x4 scrathAddr r8 += 4
|
||||
8001a1ec 00 14 05 00 sll v0,a1,0x10 r2 = r5 << 10 bits (move to hi)
|
||||
8001a1f0 12 60 00 00 mflo t4 ld r12,lo (result)
|
||||
8001a1f4 25 10 82 01 or v0,t4,v0 combine r2 & r 12 (0001 x 1111)
|
||||
8001a1f8 00 00 02 ad sw v0,0x0(t0) store result to scratch r2 to *r8
|
||||
8001a1fc d5 ff 60 14 bne v1,zero,charLoop if r3 counter<>0 goto loop
|
||||
8001a200 04 00 08 25 _addiu t0,t0,0x4 r8 scrath += 4
|
||||
charLoaded XREF[1]: 8001a144(j)
|
||||
8001a204 08 00 e0 03 jr ra
|
||||
8001a208 00 00 00 00 _nop
|
||||
471
ghidra_src/small.asm
Normal file
471
ghidra_src/small.asm
Normal file
@@ -0,0 +1,471 @@
|
||||
**************************************************************
|
||||
* FUNCTION *
|
||||
**************************************************************
|
||||
undefined __stdcall DrawSmallFontString(undefined4 r4, u
|
||||
assume gp = 0x8007b190
|
||||
undefined v0:1 <RETURN>
|
||||
undefined4 a0:4 r4
|
||||
undefined2 a1:2 r5
|
||||
undefined2 a2:2 r6
|
||||
undefined1 a3:1 r7
|
||||
undefined1 Stack[0x10]:1 Shadow XREF[1]: 80019af8(R)
|
||||
undefined2 s2:2 Y XREF[1]: 80019d40(W)
|
||||
undefined2 s1:2 X XREF[1]: 80019d9c(W)
|
||||
undefined4 Stack[-0x4]:4 local_4 XREF[2]: 80019b00(W),
|
||||
8001a040(R)
|
||||
undefined4 Stack[-0x8]:4 local_8 XREF[2]: 80019ac4(W),
|
||||
8001a044(R)
|
||||
undefined4 Stack[-0xc]:4 local_c XREF[2]: 80019aac(W),
|
||||
8001a048(R)
|
||||
undefined4 Stack[-0x10]:4 local_10 XREF[2]: 80019b04(W),
|
||||
8001a04c(R)
|
||||
undefined4 Stack[-0x14]:4 local_14 XREF[2]: 80019ae0(W),
|
||||
8001a050(R)
|
||||
undefined4 Stack[-0x18]:4 local_18 XREF[2]: 80019b08(W),
|
||||
8001a054(R)
|
||||
undefined4 Stack[-0x1c]:4 local_1c XREF[2]: 80019b0c(W),
|
||||
8001a058(R)
|
||||
undefined4 Stack[-0x20]:4 local_20 XREF[2]: 80019abc(W),
|
||||
8001a05c(R)
|
||||
undefined4 Stack[-0x24]:4 local_24 XREF[2]: 80019ad4(W),
|
||||
8001a060(R)
|
||||
undefined4 Stack[-0x28]:4 local_28 XREF[2]: 80019ab4(W),
|
||||
8001a064(R)
|
||||
undefined4 Stack[-0x30]:4 local_30 XREF[2]: 80019cf8(W),
|
||||
80019d34(R)
|
||||
undefined4 Stack[-0x34]:4 local_34 XREF[2]: 80019cec(W),
|
||||
80019d28(R)
|
||||
undefined4 Stack[-0x38]:4 local_38 XREF[2]: 80019b48(W),
|
||||
80019d40(R)
|
||||
undefined4 Stack[-0x3c]:4 local_3c XREF[2,1]: 80019b7c(W),
|
||||
80019ba8(R),
|
||||
80019b84(W)
|
||||
uint Stack[-0x40]:4 tempCoordsInVram_01f00130 XREF[2,1]: 80019bb0(W),
|
||||
80019bb8(R),
|
||||
80019bb4(W)
|
||||
undefined1 HASH:5f6f43d currentCharCode
|
||||
undefined4 HASH:23f572d tempVar
|
||||
DrawSmallFontString XREF[12]: FUN_OVR_EXT__80096f94:80097148(c),
|
||||
FUN_OVR_EXT__80096f94:8009719c(c),
|
||||
FUN_OVR_EXT__80096f94:80097204(c),
|
||||
FUN_OVR_EXT__80096f94:8009725c(c),
|
||||
FUN_OVR_EXT__80096f94:8009730c(c),
|
||||
FUN_OVR_EXT__80098f88:80099024(c),
|
||||
drawMenu2x4:8009ce24(c),
|
||||
FUN_OVR_EXT__8009e218:8009e498(c),
|
||||
FUN_OVR_EXT__8009e218:8009e6f4(c),
|
||||
FUN_OVR_EXT__8009e954:8009eac4(c),
|
||||
FUN_OVR_EXT2_0092__800bb83c:800bbb38(c),
|
||||
FUN_OVR_EXT2_0092__800c4578:800c45b0(c)
|
||||
80019aa8 b0 ff bd 27 addiu sp,sp,-0x50 shift stack -50
|
||||
assume gp = <UNKNOWN>
|
||||
80019aac 44 00 b7 af sw s7,local_c(sp) save r23, sp+44
|
||||
80019ab0 21 b8 80 00 move s7,r4 r23 = r4 (textAddr)
|
||||
80019ab4 28 00 b0 af sw s0,local_28(sp) *sp+28, r16
|
||||
80019ab8 21 80 a0 00 move s0,r5 r16=r5
|
||||
80019abc 30 00 b2 af sw s2,local_20(sp) *sp+30, r18
|
||||
80019ac0 21 90 c0 00 move s2,r6 r18 = r6
|
||||
80019ac4 48 00 be af sw s8,local_8(sp) *sp+48 = r30
|
||||
80019ac8 21 f0 00 02 move s8,s0 r30 = r16
|
||||
80019acc ff 00 08 3c lui t0,0xff
|
||||
80019ad0 ff ff 08 35 ori t0,t0,0xffff r8 = 00ffffff
|
||||
80019ad4 2c 00 b1 af sw s1,local_24(sp) *sp+2c = r17
|
||||
80019ad8 ff 00 f1 30 andi s1,r7,0xff r17 = r7 & ff (color & shadow)
|
||||
80019adc 21 20 20 02 move r4,s1 r4 = r17
|
||||
80019ae0 3c 00 b5 af sw s5,local_14(sp) *sp+3c = r21
|
||||
80019ae4 08 80 15 3c lui s5,0x8008 r21 = 80080000
|
||||
80019ae8 00 ff 06 3c lui r6,0xff00 r6 = ff000000
|
||||
80019aec 00 80 02 3c lui v0,0x8000 r2 = 8000 0000
|
||||
80019af0 21 68 a0 02 move t5,s5 r13 = r21
|
||||
80019af4 d0 b6 a3 8e lw v1,-0x4930(s5)=>8007b6d0_freeChain r3 = *freeChain
|
||||
80019af8 60 00 a7 8f lw r7,Shadow(sp) r7 = sp+60
|
||||
80019afc d0 b6 ad 25 addiu t5,t5,-0x4930 t5 -= 4930 = 8007b640 (freeChain)
|
||||
80019b00 4c 00 bf af sw ra,local_4(sp) *sp+4c = ra
|
||||
80019b04 40 00 b6 af sw s6,local_10(sp) *sp+40 = r22
|
||||
80019b08 38 00 b4 af sw s4,local_18(sp) *sp+38 = r20
|
||||
80019b0c 34 00 b3 af sw s3,local_1c(sp) *sp+34 = r19
|
||||
80019b10 24 30 66 00 and r6,v1,r6 r6 & r3 (freeChain)
|
||||
80019b14 ff 00 e5 30 andi r5,r7,0xff r5 = r7 & ff
|
||||
80019b18 24 18 68 00 and v1,v1,t0 r3 & 00FFFFFF
|
||||
80019b1c 25 a0 62 00 or s4,v1,v0 r20 = r3 | 8000000 (80..+r3)
|
||||
80019b20 10 00 e7 30 andi r7,r7,0x10 r7 & 10 (2nd bit only)
|
||||
80019b24 2b 38 07 00 sltu r7,zero,r7 r7 = 0<r7 (is 2nd bit if shad ON?)
|
||||
80019b28 04 00 a2 8d lw v0,0x4(t5)=>DAT_8007b6d4_CmdCounter r2 = *DMACounter
|
||||
80019b2c 00 00 83 8e lw v1,0x0(s4) r3 = *r20 - next chain addr
|
||||
80019b30 ff ff 42 24 addiu v0,v0,-0x1 DMACounter -1
|
||||
80019b34 24 18 68 00 and v1,v1,t0 r3 & 00FFFFFF
|
||||
80019b38 25 30 c3 00 or r6,r6,v1 r6 = FF... | r3
|
||||
80019b3c 04 00 a2 ad sw v0,0x4(t5)=>DAT_8007b6d4_CmdCounter save DMACounter
|
||||
80019b40 d0 b6 a6 ae sw r6,-0x4930(s5)=>8007b6d0_freeChain save next free chain to 7b6do
|
||||
80019b44 32 6c 00 0c jal store_Color_to_addr undefined store_Color_to_addr(undefined1 ColIndex, undefine
|
||||
80019b48 18 00 a7 af _sw r7,local_38(sp) r7 = sp+18, color
|
||||
80019b4c 21 20 80 02 move r4,s4 r4 = r20 (cur new chain)
|
||||
80019b50 00 84 10 00 sll s0,s0,0x10 r16 << 10 (log) Cleaning coords
|
||||
80019b54 03 2c 10 00 sra r5,s0,0x10 r5 = r16 >> 10 (ar)
|
||||
80019b58 00 94 12 00 sll s2,s2,0x10 r18 << 10 (log)
|
||||
80019b5c 03 84 12 00 sra s0,s2,0x10 r16 = r18 >> 10 (ar)
|
||||
80019b60 21 30 00 02 move r6,s0 r6 = r16
|
||||
80019b64 1c 68 00 0c jal initCopycharChain INIT TEXT CHAIN
|
||||
80019b68 21 38 20 02 _move r7,s1 r7 = r17 (color)
|
||||
80019b6c 80 1f 05 3c lui r5,0x1f80 r5 = 1f800348 - chain params start
|
||||
80019b70 48 03 a5 34 ori r5,r5,0x348
|
||||
80019b74 02 00 02 24 li v0,0x2 r2 = 2, r7 = 0c (size)
|
||||
80019b78 0c 00 07 24 li r7,0xc
|
||||
80019b7c 14 00 a2 a7 sh v0,local_3c(sp) *sp+14 = half r2 (heigth)
|
||||
80019b80 10 00 02 24 li v0,0x10
|
||||
80019b84 16 00 a7 a7 sh r7,local_3c+0x2(sp) *sp+16 = half r7 (color?)
|
||||
80019b88 03 00 a2 a0 sb v0,0x3(r5)=>DAT_1f80034b *34b = byte r2 (10) DMALenght
|
||||
80019b8c 00 a0 02 3c lui v0,0xa000 r2 = a000000
|
||||
80019b90 04 00 a2 ac sw v0,0x4(r5)=>DAT_1f80034c *34c = r2 (a000000) DMA cmd
|
||||
80019b94 a0 00 83 97 lhu v1,0xa0(gp)=>VRam_Temp_Char_x r3 = half gp+a0 (x)
|
||||
80019b98 a2 00 84 97 lhu r4,0xa2(gp)=>VRam_Temp_Char_y r4 = half gp+a2 (y)
|
||||
80019b9c 00 01 02 3c lui v0,0x100 r2 = 01000000 - FlushCache
|
||||
80019ba0 80 1f 01 3c lui at,0x1f80 at = 1f800000
|
||||
80019ba4 88 03 22 ac sw v0,offset DAT_1f800388(at) *at+388 = r2
|
||||
80019ba8 14 00 a2 8f lw v0,local_3c(sp) r2 = sp+14 - w*h (0c*02)!
|
||||
80019bac 80 1f 13 3c lui s3,0x1f80 r19 = 1f80
|
||||
80019bb0 10 00 a3 a7 sh v1,tempCoordsInVram_01f00130(sp) *sp+10 = half r3
|
||||
tempCoordsInVram_01f00130
|
||||
80019bb4 12 00 a4 a7 sh r4,tempCoordsInVram_01f00130+0x2(sp) *sp+12 = half r4
|
||||
80019bb8 10 00 a3 8f lw v1,tempCoordsInVram_01f00130(sp) r3 = sp+10 - Temp coords
|
||||
80019bbc a0 00 84 87 lh r4,0xa0(gp)=>VRam_Temp_Char_x r4 (signed half?) = gp+a0
|
||||
80019bc0 d0 03 73 36 ori s3,s3,0x3d0 r19 | 3d0 = 1f8003d0
|
||||
80019bc4 0c 00 a2 ac sw v0,0xc(r5)=>DAT_1f800354 *354 = r2 (Temp char Size)
|
||||
80019bc8 01 80 02 3c lui v0,0x8001 r2 = 8001
|
||||
80019bcc 21 30 80 00 move r6,r4 r6 = r4 (x)
|
||||
80019bd0 08 00 a3 ac sw v1,0x8(r5)=>DAT_1f800350 *350 = r3 = temp coords (01f0 0130)
|
||||
80019bd4 80 1f 0d 3c lui t5,0x1f80 r13 = 1f80
|
||||
80019bd8 e0 02 ad 35 ori t5,t5,0x2e0 r13 | 2e0
|
||||
80019bdc e8 03 58 24 addiu t8,v0,0x3e8 r24 = r2 + 3e0 = 800103e0
|
||||
80019be0 03 00 0e 8b lwl t6,0x3(t8)
|
||||
80019be4 00 00 0e 9b lwr t6,0x0(t8)=>DAT_800103e8 = 00010000h
|
||||
80019be8 07 00 0f 8b lwl t7,0x7(t8)
|
||||
80019bec 04 00 0f 9b lwr t7,0x4(t8)=>DAT_800103ec = 00110010h
|
||||
80019bf0 03 00 ae a9 swl t6,0x3(t5)
|
||||
80019bf4 00 00 ae b9 swr t6,0x0(t5)=>DAT_1f8002e0 = ??
|
||||
80019bf8 07 00 af a9 swl t7,0x7(t5)
|
||||
80019bfc 04 00 af b9 swr t7,0x4(t5)=>DAT_1f8002e4 = ??
|
||||
80019c00 0b 00 0e 8b lwl t6,0xb(t8)
|
||||
80019c04 08 00 0e 9b lwr t6,0x8(t8)=>DAT_800103f0 = 01010100h
|
||||
80019c08 0f 00 0f 8b lwl t7,0xf(t8)
|
||||
80019c0c 0c 00 0f 9b lwr t7,0xc(t8)=>DAT_800103f4 = 01110110h
|
||||
80019c10 0b 00 ae a9 swl t6,0xb(t5)
|
||||
80019c14 08 00 ae b9 swr t6,0x8(t5)=>DAT_1f8002e8 Init 4bits table
|
||||
80019c18 0f 00 af a9 swl t7,0xf(t5)
|
||||
80019c1c 0c 00 af b9 swr t7,0xc(t5)=>DAT_1f8002ec = ??
|
||||
80019c20 13 00 0e 8b lwl t6,0x13(t8)
|
||||
80019c24 10 00 0e 9b lwr t6,0x10(t8)=>DAT_800103f8 = 10011000h
|
||||
80019c28 17 00 0f 8b lwl t7,0x17(t8)
|
||||
80019c2c 14 00 0f 9b lwr t7,0x14(t8)=>DAT_800103fc = 10111010h
|
||||
80019c30 13 00 ae a9 swl t6,0x13(t5)
|
||||
80019c34 10 00 ae b9 swr t6,0x10(t5)=>DAT_1f8002f0 = ??
|
||||
80019c38 17 00 af a9 swl t7,0x17(t5)
|
||||
80019c3c 14 00 af b9 swr t7,0x14(t5)=>DAT_1f8002f4 = ??
|
||||
80019c40 1b 00 0e 8b lwl t6,0x1b(t8)
|
||||
80019c44 18 00 0e 9b lwr t6,0x18(t8)=>DAT_80010400 = 11011100h
|
||||
80019c48 1f 00 0f 8b lwl t7,0x1f(t8)
|
||||
80019c4c 1c 00 0f 9b lwr t7,0x1c(t8)=>DAT_80010404 = 11111110h
|
||||
80019c50 1b 00 ae a9 swl t6,0x1b(t5)
|
||||
80019c54 18 00 ae b9 swr t6,0x18(t5)=>DAT_1f8002f8 = ??
|
||||
80019c58 1f 00 af a9 swl t7,0x1f(t5)
|
||||
80019c5c 1c 00 af b9 swr t7,0x1c(t5)=>DAT_1f8002fc = ??
|
||||
80019c60 04 00 02 24 li v0,0x4
|
||||
80019c64 03 00 62 a2 sb v0,0x3(s3)=>DAT_1f8003d3 = ??
|
||||
80019c68 64 00 02 24 li v0,0x64
|
||||
80019c6c 07 00 62 a2 sb v0,0x7(s3)=>DAT_1f8003d7 = ??
|
||||
80019c70 80 00 02 24 li v0,0x80
|
||||
80019c74 04 00 62 a2 sb v0,0x4(s3)=>DAT_1f8003d4 = ??
|
||||
80019c78 05 00 62 a2 sb v0,0x5(s3)=>DAT_1f8003d5 save 04, 64808080 cmds bytes to Scratch
|
||||
80019c7c 02 00 81 04 bgez r4,x>0 if r4>=0 then branch
|
||||
80019c80 06 00 62 a2 _sb v0,0x6(s3)=>DAT_1f8003d6 last 80
|
||||
80019c84 3f 00 86 24 addiu r6,r4,0x3f ELSE r6 = r4(X)+3f???
|
||||
x>0 XREF[1]: 80019c7c(j)
|
||||
80019c88 83 11 06 00 sra v0,r6,0x6 r2 = r6 >> 6 = 4
|
||||
80019c8c 80 11 02 00 sll v0,v0,0x6 r2 << 6 = 100
|
||||
80019c90 23 10 82 00 subu v0,r4,v0 r2 = r6 - r2 = 30
|
||||
80019c94 a2 00 83 87 lh v1,0xa2(gp)=>VRam_Temp_Char_y r3 = load Y half from mem
|
||||
80019c98 80 10 02 00 sll v0,v0,0x2 r2 << 2
|
||||
80019c9c 0c 00 62 a2 sb v0,0xc(s3)=>DAT_1f8003dc *3dc = byte r2 (X)
|
||||
80019ca0 02 00 61 04 bgez v1,y>0 IF r3>=0 goto...
|
||||
80019ca4 21 10 60 00 _move v0,v1 r2 = r3 (Y)
|
||||
80019ca8 ff 00 62 24 addiu v0,v1,0xff ELSE r2 = r3+ff
|
||||
y>0 XREF[1]: 80019ca0(j)
|
||||
80019cac 03 12 02 00 sra v0,v0,0x8 r2 >> 8
|
||||
80019cb0 00 12 02 00 sll v0,v0,0x8 r2 << 8
|
||||
80019cb4 23 10 62 00 subu v0,v1,v0 r2 = r3-r2
|
||||
80019cb8 0d 00 62 a2 sb v0,0xd(s3)=>DAT_1f8003dd *3dd byte = r2 (Y)
|
||||
80019cbc a8 00 83 97 lhu v1,0xa8(gp)=>DAT_8007b238 r3 = XYhalf(7df3)
|
||||
80019cc0 08 00 02 24 li v0,0x8 r2 = 8 Sprite WIDTH
|
||||
80019cc4 10 00 62 a6 sh v0,0x10(s3)=>DAT_1f8003e0 *3e0 = r2 (8)
|
||||
80019cc8 12 00 67 a6 sh r7,0x12(s3)=>DAT_1f8003e2 *3e2 = r7 (0c) - sprite heigth
|
||||
80019ccc 0e 00 63 a6 sh v1,0xe(s3)=>DAT_1f8003de *3de = r3 = 7df3
|
||||
80019cd0 00 00 e5 92 lbu r5,0x0(s7) r5 = byte unsigned *r23 READING TEXT CODE
|
||||
80019cd4 00 00 00 00 nop
|
||||
80019cd8 b9 00 a0 10 beq r5,zero,textEnd if CHAR is 0 - end
|
||||
80019cdc 01 00 f7 26 _addiu s7,s7,0x1 CHAR addr +=1
|
||||
80019ce0 21 b0 a0 02 move s6,s5 r22 = r21
|
||||
80019ce4 08 80 15 3c lui s5,0x8008 r21 = 8008
|
||||
80019ce8 d0 b6 b5 26 addiu s5,s5,-0x4930 r21 = 7b6d0 (free chain)
|
||||
80019cec 1c 00 b0 af sw s0,local_34(sp) sp+1c = r16 (X)
|
||||
80019cf0 ff 00 10 3c lui s0,0xff
|
||||
80019cf4 ff ff 10 36 ori s0,s0,0xffff r16 = 00FFFFFF
|
||||
80019cf8 20 00 b2 af sw s2,local_30(sp) *sp+20 = r18
|
||||
LAB_80019cfc XREF[1]: 80019fb8(j)
|
||||
80019cfc 99 ff a3 24 addiu v1,r5,-0x67 r3 = r5-67 = CHAR code shift
|
||||
80019d00 13 00 62 2c sltiu v0,v1,0x13 r2 = r3 <= 13
|
||||
80019d04 0b 00 40 10 beq v0,zero,switchD_80019d20::r3<=13 r2=0? -> r3 > 13 -> goto Switch
|
||||
80019d08 80 10 03 00 _sll v0,v1,0x2 r2 = r3 << 2 (*4) cmdID
|
||||
80019d0c 01 80 0e 3c lui t6,0x8001 r14 = 8001 0000
|
||||
80019d10 a0 04 ce 25 addiu t6,t6,0x4a0 r14 & 04a0
|
||||
80019d14 21 10 4e 00 addu v0,v0,t6 r2 += t6 (command table)
|
||||
80019d18 00 00 42 8c lw v0,0x0(v0)=>->switchD_80019d20::case r2 = *r2 (cmd addr)
|
||||
80019d1c 00 00 00 00 nop
|
||||
switchD_80019d20::switchD
|
||||
80019d20 08 00 40 00 jr v0 --CALL R2 SWITCH--
|
||||
80019d24 00 00 00 00 _nop
|
||||
switchD_80019d20::caseD_6a XREF[6]: 800104a0(*), 800104ac(*), 800104c4(*),
|
||||
switchD_80019d20::caseD_70 800104c8(*), 800104e8(*), 80019d20(j)
|
||||
switchD_80019d20::caseD_71
|
||||
switchD_80019d20::caseD_79
|
||||
switchD_80019d20::caseD_67
|
||||
80019d28 1c 00 af 8f lw t7,local_34(sp) r15 = *sp+1c
|
||||
80019d2c 50 67 00 08 j LAB_80019d40
|
||||
80019d30 02 00 f2 25 _addiu s2,t7,0x2 s2 = r15 + 2??
|
||||
switchD_80019d20::caseD_69 XREF[16]: 800104a4(*), 800104a8(*), 800104b0(*),
|
||||
switchD_80019d20::caseD_6b 800104b4(*), 800104b8(*), 800104bc(*),
|
||||
switchD_80019d20::caseD_6c 800104c0(*), 800104cc(*), 800104d0(*),
|
||||
switchD_80019d20::caseD_6d 800104d4(*), 800104d8(*), 800104dc(*),
|
||||
switchD_80019d20::caseD_6e 800104e0(*), 800104e4(*), 80019d04(j),
|
||||
switchD_80019d20::caseD_6f 80019d20(j)
|
||||
switchD_80019d20::caseD_72
|
||||
switchD_80019d20::caseD_73
|
||||
switchD_80019d20::caseD_74
|
||||
switchD_80019d20::caseD_75
|
||||
switchD_80019d20::caseD_76
|
||||
switchD_80019d20::caseD_77
|
||||
switchD_80019d20::caseD_78
|
||||
switchD_80019d20::r3<=13
|
||||
80019d34 20 00 b8 8f lw t8,local_30(sp) r24 = *sp+20 (shifted Y??)
|
||||
80019d38 00 00 00 00 nop
|
||||
80019d3c 03 94 18 00 sra s2,t8,0x10 r18 = r24 >> 10 - shift coord back
|
||||
LAB_80019d40 XREF[1]: 80019d2c(j)
|
||||
80019d40 18 00 ad 8f lw t5,local_38(sp) r13 = *sp+18 (color & shadow)
|
||||
80019d44 00 00 00 00 nop
|
||||
80019d48 10 00 a0 11 beq t5,zero,LAB_80019d8c if shadow (r13=0) then Branch
|
||||
80019d4c e0 ff a5 24 _addiu r5,r5,-0x20 curCharCode -= 20
|
||||
80019d50 01 80 02 3c lui v0,0x8001
|
||||
80019d54 3c 04 42 24 addiu v0,v0,0x43c r2 = 8001043c
|
||||
80019d58 21 10 a2 00 addu v0,r5,v0 r2 += r5
|
||||
80019d5c 01 80 03 3c lui v1,0x8001 r3 = 80010000
|
||||
80019d60 00 00 42 90 lbu v0,0x0(v0)=>DAT_8001041c r2 = *r2 byte
|
||||
80019d64 28 04 63 24 addiu v1,v1,0x428 r3 & 428 = 80010428
|
||||
80019d68 40 10 02 00 sll v0,v0,0x1 r2 << 1
|
||||
80019d6c 21 10 43 00 addu v0,v0,v1 r2 += r3
|
||||
80019d70 00 00 43 90 lbu v1=>DAT_80010428,0x0(v0) r3 = byte *r2
|
||||
80019d74 01 00 42 90 lbu v0,0x1(v0)=>DAT_80010429 r2 = byte *r2+1
|
||||
80019d78 23 18 c3 03 subu v1,s8,v1
|
||||
80019d7c 00 24 03 00 sll r4,v1,0x10
|
||||
80019d80 03 8c 04 00 sra s1,r4,0x10
|
||||
80019d84 68 67 00 08 j LAB_80019da0
|
||||
80019d88 21 f0 43 00 _addu s8,v0,v1
|
||||
LAB_80019d8c XREF[1]: 80019d48(j)
|
||||
80019d8c 00 1c 1e 00 sll v1,s8,0x10 r3 = fp(r30???) << 10b
|
||||
80019d90 04 00 82 96 lhu v0,0x4(s4) r2 = r20+4* (DMA PArams+4)(charnum)
|
||||
80019d94 03 1c 03 00 sra v1,v1,0x10 r3 >> 10 (ar) - INIT X
|
||||
80019d98 c0 10 02 00 sll v0,v0,0x3 r2 << 3 (l) charnum * 8
|
||||
80019d9c 21 88 62 00 addu X,v1,v0 r17 (x) = r2+r3 (initX+r2)
|
||||
addr = 1f800358?
|
||||
LAB_80019da0 XREF[1]: 80019d84(j)
|
||||
80019da0 a1 68 00 0c jal GenerateSmallChar undefined GenerateSmallChar()
|
||||
80019da4 21 20 a0 00 _move r4,r5 r4 = r5 = Y?
|
||||
80019da8 00 80 0c 3c lui t4,0x8000 r12 = 80000000
|
||||
80019dac 00 ff 0a 3c lui t2,0xff00 r10 = ff000000
|
||||
80019db0 21 48 80 02 move t1,s4 r9 = r20 (current dma line params)
|
||||
80019db4 80 1f 0b 3c lui t3,0x1f80 r11 = 1f800388 (free dma chain????)
|
||||
80019db8 88 03 6b 35 ori t3,t3,0x388
|
||||
80019dbc 21 40 80 02 move t0,s4 r8 = r20 (another dma line params)
|
||||
80019dc0 08 00 71 a6 sh X,0x8(s3)=>DAT_1f8003d8 *DMAScr(r19+8,3d0+8) = half r17 (X)
|
||||
80019dc4 0a 00 72 a6 sh Y,0xa(s3)=>DAT_1f8003da *DMAScr(r19+0a,3d0+0a) = half r18 (Y)
|
||||
PageLoop XREF[1]: 80019f98(j)
|
||||
80019dc8 d0 b6 c2 8e lw v0,-0x4930(s6)=>8007b6d0_freeChain r2 = *freeChainAddr
|
||||
80019dcc 00 00 00 00 nop
|
||||
80019dd0 24 20 4a 00 and r4,v0,t2 r4 = r2 & ff00..
|
||||
80019dd4 24 10 50 00 and v0,v0,s0 r2 & 00FFFFFF
|
||||
80019dd8 25 28 4c 00 or r5,v0,t4 r5 = 80 & r2
|
||||
80019ddc 04 00 a2 8e lw v0,0x4(s5)=>DAT_8007b6d4_CmdCounter r2 = DMA Counter
|
||||
80019de0 00 00 a3 8c lw v1,0x0(r5) r3 = New Free ChainAddr
|
||||
80019de4 ff ff 42 24 addiu v0,v0,-0x1 r2 -= 1 Counter Down
|
||||
80019de8 24 18 70 00 and v1,v1,s0 r3 & 00FFFFFF cut begin byte
|
||||
80019dec 25 20 83 00 or r4,r4,v1 r4 & r3 = ff......
|
||||
80019df0 04 00 a2 ae sw v0,0x4(s5)=>DAT_8007b6d4_CmdCounter save DMA Counter
|
||||
80019df4 d0 b6 c4 ae sw r4,-0x4930(s6)=>8007b6d0_freeChain save new freeChain
|
||||
CopyScriptChain copy from scratch
|
||||
80019df8 00 00 6e 8e lw t6,0x0(s3)=>DAT_1f8003d0 r14 = 04000000 - DMA Commands Count
|
||||
80019dfc 04 00 6f 8e lw t7,0x4(s3)=>DAT_1f8003d4 r15 = 64808080 - CopySpriteCmd
|
||||
80019e00 08 00 78 8e lw t8,0x8(s3)=>DAT_1f8003d8 r24 = 001500d1 - xy screen coords
|
||||
80019e04 0c 00 6d 8e lw t5,0xc(s3)=>DAT_1f8003dc r13 = 7fd3f0c0 (CLUT & tex coord page)
|
||||
80019e08 00 00 ae ac sw t6,0x0(r5) *r5 = r14
|
||||
80019e0c 04 00 af ac sw t7,0x4(r5) *r5+4 = r15
|
||||
80019e10 08 00 b8 ac sw t8,0x8(r5) *r5+8 = r24
|
||||
80019e14 0c 00 ad ac sw t5,0xc(r5) *r5+c = r13
|
||||
80019e18 10 00 6e 8e lw t6,0x10(s3)=>DAT_1f8003e0 r14 = 000c0008 - spritesize after copy
|
||||
80019e1c 00 00 00 00 nop
|
||||
80019e20 10 00 ae ac sw t6,0x10(r5) *r5+10 = r14
|
||||
CharMakeChain?
|
||||
80019e24 18 00 03 8d lw v1,0x18(t0) r3 = *r8+18 (first chain addr?)
|
||||
80019e28 00 00 a2 8c lw v0,0x0(r5) r2 = *curChainaddr
|
||||
80019e2c 00 00 63 8c lw v1,0x0(v1) r3 = *r3
|
||||
80019e30 24 10 4a 00 and v0,v0,t2 r2 & ff000000
|
||||
80019e34 24 18 70 00 and v1,v1,s0 r3 & 00FFFFFF
|
||||
80019e38 25 10 43 00 or v0,v0,v1 r2 | r3 = 04FFFFFF - commands with FFFFFF
|
||||
80019e3c 00 00 a2 ac sw v0,0x0(r5) *curChainAddr r5 = r2 (upd ..04 with ..FF04)
|
||||
80019e40 18 00 04 8d lw r4,0x18(t0) r4 = *r8+18 (first chain addr?)
|
||||
80019e44 00 00 00 00 nop
|
||||
80019e48 00 00 82 8c lw v0,0x0(r4) r2 = *r4 FIRST CHAIN LINK TO NEXT??
|
||||
80019e4c 24 18 b0 00 and v1,r5,s0 r3 = r5 (cur chain) & 00FFFFFF
|
||||
80019e50 24 10 4a 00 and v0,v0,t2 r2 & FF000000
|
||||
80019e54 25 10 43 00 or v0,v0,v1 r2 | r3 = last chain adr w 10&....
|
||||
80019e58 00 00 82 ac sw v0,0x0(r4) *r4 = r2 FIRST CHAIN NEXT ADDR???
|
||||
80019e5c 18 00 05 ad sw r5,0x18(t0) t0 - main ChainParams r5 = *r8+18 curChainAddr
|
||||
80019e60 04 00 22 95 lhu v0,0x4(t1) t1 - page ChainParams r2 = half (DMA params)+4 (charCounter)
|
||||
80019e64 00 00 00 00 nop
|
||||
80019e68 04 00 40 14 bne v0,zero,NotFirstChar if CharCount<>0 then Goto...
|
||||
80019e6c 00 00 00 00 _nop
|
||||
80019e70 28 00 05 ad sw r5,0x28(t0) *curChain+28 = currentChainAddr
|
||||
80019e74 0c 00 31 a5 sh X,0xc(t1) Params+0c = save half X
|
||||
80019e78 0e 00 32 a5 sh Y,0xe(t1) Params+0e = save half Y
|
||||
COPYCHAR To DMAChain
|
||||
NotFirstChar XREF[1]: 80019e68(j)
|
||||
80019e7c 80 1f 05 3c lui r5,0x1f80 r5 = *1f80
|
||||
80019e80 d0 b6 c2 8e lw v0,-0x4930(s6)=>8007b6d0_freeChain r2 = *nextFreeChain
|
||||
80019e84 48 03 a5 34 ori r5,r5,0x348 r5 | 1f800348 = Scratch CharData
|
||||
80019e88 24 20 4a 00 and r4,v0,t2 r4 = r2 & FF000000
|
||||
80019e8c 24 10 50 00 and v0,v0,s0 r2 & 00FFFFFF
|
||||
80019e90 25 38 4c 00 or r7,v0,t4 r7 = r2 | r12 = nextChain & 80...
|
||||
80019e94 21 30 e0 00 move r6,r7 r6 = r7 (nextChain)
|
||||
80019e98 04 00 a2 8e lw v0,0x4(s5)=>DAT_8007b6d4_CmdCounter r2 = chainCounter*
|
||||
80019e9c 00 00 e3 8c lw v1,0x0(r7) r3 = *nextChainNextAddr
|
||||
80019ea0 ff ff 42 24 addiu v0,v0,-0x1 r2 -= 1
|
||||
80019ea4 24 18 70 00 and v1,v1,s0 r3 & 00FFFFFF
|
||||
80019ea8 25 20 83 00 or r4,r4,v1 r4 | r3 = FF..nextchain (cutCmdCount)
|
||||
80019eac 04 00 a2 ae sw v0,0x4(s5)=>DAT_8007b6d4_CmdCounter *cmdCountr = r2 = save
|
||||
80019eb0 03 00 e2 30 andi v0,r7,0x3 r2 = r7 & 3 (check destAddr MOD 4)
|
||||
80019eb4 16 00 40 10 beq v0,zero,Copy16Bytes if r7 MOD 4 = 0 then Branch
|
||||
80019eb8 d0 b6 c4 ae _sw r4,-0x4930(s6)=>8007b6d0_freeChain *nextFreeChain = r4
|
||||
CopyBy2Bytes XREF[1]: 80019f00(j)
|
||||
80019ebc 03 00 ae 88 lwl t6,0x3(r5) if r7 mod4 <> 0 - копируем по 2 байта
|
||||
80019ec0 00 00 ae 98 lwr t6,0x0(r5)=>DAT_1f800348 = ??
|
||||
80019ec4 07 00 af 88 lwl t7,0x7(r5)
|
||||
80019ec8 04 00 af 98 lwr t7,0x4(r5)=>DAT_1f80034c = ??
|
||||
80019ecc 0b 00 b8 88 lwl t8,0xb(r5)
|
||||
80019ed0 08 00 b8 98 lwr t8,0x8(r5)=>DAT_1f800350 = ??
|
||||
80019ed4 0f 00 ad 88 lwl t5,0xf(r5)
|
||||
80019ed8 0c 00 ad 98 lwr t5,0xc(r5)=>DAT_1f800354 = ??
|
||||
80019edc 03 00 ce a8 swl t6,0x3(r6)
|
||||
80019ee0 00 00 ce b8 swr t6,0x0(r6)
|
||||
80019ee4 07 00 cf a8 swl t7,0x7(r6)
|
||||
80019ee8 04 00 cf b8 swr t7,0x4(r6)
|
||||
80019eec 0b 00 d8 a8 swl t8,0xb(r6)
|
||||
80019ef0 08 00 d8 b8 swr t8,0x8(r6)
|
||||
80019ef4 0f 00 cd a8 swl t5,0xf(r6)
|
||||
80019ef8 0c 00 cd b8 swr t5,0xc(r6)
|
||||
80019efc 10 00 a5 24 addiu r5,r5,0x10
|
||||
80019f00 ee ff ab 14 bne r5,t3,CopyBy2Bytes
|
||||
80019f04 10 00 c6 24 _addiu r6,r6,0x10
|
||||
80019f08 cf 67 00 08 j last4BytesCopy
|
||||
80019f0c 00 00 00 00 _nop
|
||||
Copying Char Data From Scratch
|
||||
Copy16Bytes XREF[2]: 80019eb4(j), 80019f34(j)
|
||||
80019f10 00 00 ae 8c lw t6,0x0(r5)=>DAT_1f800348 r5 - curScratchAddr,r6 -cur DMAAddr
|
||||
80019f14 04 00 af 8c lw t7,0x4(r5)=>DAT_1f80034c = ??
|
||||
80019f18 08 00 b8 8c lw t8,0x8(r5)=>DAT_1f800350 = ??
|
||||
80019f1c 0c 00 ad 8c lw t5,0xc(r5)=>DAT_1f800354 = ??
|
||||
80019f20 00 00 ce ac sw t6,0x0(r6)
|
||||
80019f24 04 00 cf ac sw t7,0x4(r6) Copy cmdCnt + A0000000 + 013001F0 + 000C0002
|
||||
80019f28 08 00 d8 ac sw t8,0x8(r6) Copy 16bytes*4 times
|
||||
80019f2c 0c 00 cd ac sw t5,0xc(r6)
|
||||
80019f30 10 00 a5 24 addiu r5,r5,0x10
|
||||
80019f34 f6 ff ab 14 bne r5,t3,Copy16Bytes
|
||||
80019f38 10 00 c6 24 _addiu r6,r6,0x10
|
||||
last4BytesCopy XREF[1]: 80019f08(j)
|
||||
80019f3c 03 00 ae 88 lwl t6,0x3(r5) r14 left = 2 bytes from *r5+3
|
||||
80019f40 00 00 ae 98 lwr t6,0x0(r5)=>DAT_1f800358 r14 right = 2 bytes from *r5
|
||||
80019f44 00 00 00 00 nop
|
||||
80019f48 03 00 ce a8 swl t6,0x3(r6) *r6 = r14 left
|
||||
80019f4c 00 00 ce b8 swr t6,0x0(r6) *r6+3 = r14 right
|
||||
linking DMA char+copysprite
|
||||
80019f50 18 00 03 8d lw v1,0x18(t0) r3 = current DMACopySprite Chain
|
||||
80019f54 00 00 e2 8c lw v0,0x0(r7) r2 = current CharChainCommands
|
||||
80019f58 00 00 63 8c lw v1,0x0(v1) r3 = *r3 (comNum+FFFFFF(nextLink))
|
||||
80019f5c 24 10 4a 00 and v0,v0,t2 r2 & FF.....
|
||||
80019f60 24 18 70 00 and v1,v1,s0 r3 & 00FFFFFF
|
||||
80019f64 25 10 43 00 or v0,v0,v1 r2 | r3 = 10FFFFFF(cmdNum&FF..)
|
||||
80019f68 00 00 e2 ac sw v0,0x0(r7) *r7 = r2 saveCurChainCmd
|
||||
80019f6c 18 00 04 8d lw r4,0x18(t0) r4 = r8+18h - cur CopySpriteCmd hdrAddr
|
||||
80019f70 00 00 00 00 nop
|
||||
80019f74 00 00 82 8c lw v0,0x0(r4) r2 = *r4 (04FFFFFF)
|
||||
80019f78 24 18 f0 00 and v1,r7,s0 r3 = r7 & 00FFFFFF (Copying Cur Char Chain)
|
||||
80019f7c 24 10 4a 00 and v0,v0,t2 r2 & FF000000 (04000000) CmdCount
|
||||
80019f80 25 10 43 00 or v0,v0,v1 R2 | R3 = 04(cmd)..+CharChainAddr
|
||||
80019f84 00 00 82 ac sw v0,0x0(r4) *r4 = r2 = FullCommand With Link!!!
|
||||
(04..CharAddr) + SpriteCopyCommand
|
||||
80019f88 18 00 07 ad sw r7,0x18(t0) *r8+18 = Last Char Chain!
|
||||
80019f8c 04 00 08 25 addiu t0,t0,0x4 r8 (params) += 4 (shift params for NextPage)
|
||||
80019f90 08 00 22 25 addiu v0,t1,0x8 r2 = r9+8 (shift first chain param for Page)
|
||||
80019f94 2b 10 02 01 sltu v0,t0,v0 r2 = r8 < r2(r9+8) (first page pass)
|
||||
80019f98 8b ff 40 14 bne v0,zero,PageLoop if r2<>0 (r8<r2) then goto Next Page Loop
|
||||
80019f9c 00 00 00 00 _nop
|
||||
80019fa0 04 00 82 96 lhu v0,0x4(s4) r2 = *r20+4 = charCount
|
||||
80019fa4 00 00 00 00 nop
|
||||
80019fa8 01 00 42 24 addiu v0,v0,0x1 r2+=1
|
||||
80019fac 04 00 82 a6 sh v0,0x4(s4) *charCount += 1
|
||||
80019fb0 00 00 e5 92 lbu r5,0x0(s7) load next Char to r5 (byte)
|
||||
80019fb4 00 00 00 00 nop
|
||||
80019fb8 50 ff a0 14 bne r5,zero,LAB_80019cfc if char<>0 then goto MAKE CHAR
|
||||
80019fbc 01 00 f7 26 _addiu s7,s7,0x1 charAddr += 1
|
||||
textEnd XREF[1]: 80019cd8(j)
|
||||
80019fc0 21 90 00 00 clear Y r18 = 0
|
||||
80019fc4 08 80 13 3c lui s3,0x8008
|
||||
80019fc8 d0 b6 75 26 addiu s5,s3,-0x4930 r21 = 8007b6d0 = next Free chain Addr
|
||||
80019fcc ff 00 11 3c lui X,0xff
|
||||
80019fd0 ff ff 31 36 ori X,X,0xffff r17 = 00FFFFFF
|
||||
80019fd4 21 80 80 02 move s0,s4 r16 = r20 DMAChain ParamsAddr
|
||||
80019fd8 21 28 00 00 clear r5 r5 = 0
|
||||
callPageChain XREF[1]: 8001a034(j)
|
||||
80019fdc 01 00 06 24 li r6,0x1 r6 = 1
|
||||
80019fe0 21 90 46 02 addu Y,Y,r6 r18 += r6 (page counter)
|
||||
80019fe4 00 80 02 3c lui v0,0x8000 r2 = 8000 0000
|
||||
80019fe8 00 ff 04 3c lui r4,0xff00 r4 = ff000000
|
||||
80019fec d0 b6 63 8e lw v1,-0x4930(s3)=>8007b6d0_freeChain r3 = *freeChain
|
||||
80019ff0 a4 00 87 8f lw r7,0xa4(gp)=>DAT_8007b234 r7 = gp+a4 (34h)
|
||||
80019ff4 24 18 71 00 and v1,v1,X r3 & FF000000
|
||||
80019ff8 25 18 62 00 or v1,v1,v0 r3 | r2 = 80...freechain)
|
||||
80019ffc 30 00 03 ae sw v1,0x30(s0) r3 = *r16+30 = last Chain Addr to params
|
||||
8001a000 d0 b6 62 8e lw v0,-0x4930(s3)=>8007b6d0_freeChain r2 = nextFreeChain
|
||||
8001a004 00 00 63 8c lw v1,0x0(v1) r3=*r3
|
||||
8001a008 24 10 44 00 and v0,v0,r4 r2 & FF000000
|
||||
8001a00c 24 18 71 00 and v1,v1,X r3 & 00FFFFFF
|
||||
8001a010 04 00 a4 8e lw r4,0x4(s5)=>DAT_8007b6d4_CmdCounter r4 = cmdCounter*
|
||||
8001a014 25 10 43 00 or v0,v0,v1 r2 | r3
|
||||
8001a018 d0 b6 62 ae sw v0,-0x4930(s3)=>8007b6d0_freeChain *nexFreechain = r2
|
||||
8001a01c ff ff 84 24 addiu r4,r4,-0x1 r4 -= 1
|
||||
8001a020 04 00 a4 ae sw r4,0x4(s5)=>DAT_8007b6d4_CmdCounter save *cmdCounter r4
|
||||
8001a024 30 00 04 8e lw r4,0x30(s0) r4 = *r16+30 = last Chain Addr to params
|
||||
8001a028 b3 50 01 0c jal SetDrawTPage call DrawChain
|
||||
8001a02c 04 00 10 26 _addiu s0,s0,0x4 paramsAddr += 4
|
||||
8001a030 02 00 42 2e sltiu v0,Y,0x2 a2 = r18 < 2
|
||||
8001a034 e9 ff 40 14 bne v0,zero,callPageChain if a2<>0 (r18<2) then goto another page
|
||||
8001a038 21 28 00 00 _clear r5 r5 = 0
|
||||
8001a03c 21 10 80 02 move v0,s4 r2 = paramsAddr
|
||||
8001a040 4c 00 bf 8f lw ra,local_4(sp)
|
||||
8001a044 48 00 be 8f lw s8,local_8(sp)
|
||||
8001a048 44 00 b7 8f lw s7,local_c(sp)
|
||||
8001a04c 40 00 b6 8f lw s6,local_10(sp)
|
||||
8001a050 3c 00 b5 8f lw s5,local_14(sp) RESTORE registers from stack
|
||||
8001a054 38 00 b4 8f lw s4,local_18(sp)
|
||||
8001a058 34 00 b3 8f lw s3,local_1c(sp)
|
||||
8001a05c 30 00 b2 8f lw Y,local_20(sp)
|
||||
8001a060 2c 00 b1 8f lw X,local_24(sp)
|
||||
8001a064 28 00 b0 8f lw s0,local_28(sp)
|
||||
8001a068 08 00 e0 03 jr ra ret
|
||||
8001a06c 50 00 bd 27 _addiu sp,sp,0x50 return stack +50
|
||||
Reference in New Issue
Block a user