init
This commit is contained in:
BIN
0001_BATTLE_CODE.bin
Normal file
BIN
0001_BATTLE_CODE.bin
Normal file
Binary file not shown.
BIN
1096_J_MENU_Settings_Code.bin
Normal file
BIN
1096_J_MENU_Settings_Code.bin
Normal file
Binary file not shown.
BIN
1097_CODE_ENG.bin
Normal file
BIN
1097_CODE_ENG.bin
Normal file
Binary file not shown.
BIN
1119_CITY_CODE_patched.bin
Normal file
BIN
1119_CITY_CODE_patched.bin
Normal file
Binary file not shown.
BIN
1119_CITY_CODE_patched_2023.bin
Normal file
BIN
1119_CITY_CODE_patched_2023.bin
Normal file
Binary file not shown.
587
123
Normal file
587
123
Normal file
@@ -0,0 +1,587 @@
|
||||
; 4 files included
|
||||
; 839 lines
|
||||
; 65 labels
|
||||
; 0 equations
|
||||
|
||||
; C:\PSX\ASM\p2is_asm\cd_extra_main.asm
|
||||
; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm
|
||||
; C:\PSX\ASM\p2is_asm\charCalcs.asm
|
||||
; C:\PSX\ASM\p2is_asm\cd_extra_txtpatches.asm
|
||||
|
||||
FFFFFFFF .psx ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 6
|
||||
800522F0 setdrawtpage: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 9
|
||||
8001ADC8 storecolor: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 10
|
||||
80019D70 initcopycharchain: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 11
|
||||
80019F0C makeshadowsmallchar: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 12
|
||||
80019000 printbigdmatext: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 13
|
||||
00008009 myaddr: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 15
|
||||
FFFFFFFF .open ""C:\\PSX\\ASM\\p2is_asm\\SLPS_028.26"",0x8000F800 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 18
|
||||
8000F800 .org 0x80090000 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 19
|
||||
80090000 externalprint: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 21
|
||||
80090000 move r3,s3 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 23
|
||||
80090004 move s3,r4 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 24
|
||||
80090008 lhu v0,0x0(s3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 26
|
||||
8009000C move s3,r3 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 27
|
||||
80090010 srl v1,v0,0xD ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 28
|
||||
80090014 bne v1,zero,0x80090024 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 29
|
||||
80090018 clear v1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 30
|
||||
8009001C j 0x80019000 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 31
|
||||
80090020 nop ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 32
|
||||
80090024 myprintlineroutine: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 34
|
||||
80090024 addiu sp,sp,-0x50 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 35
|
||||
80090028 sw s6,0x40(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 36
|
||||
8009002C move s6,a0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 37
|
||||
80090030 sw s1,0x2C(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 38
|
||||
80090034 move s1,a1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 39
|
||||
80090038 sw s2,0x30(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 40
|
||||
8009003C move s2,a2 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 41
|
||||
80090040 sw s3,0x34(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 42
|
||||
80090044 andi v0,v0,0xFF ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 49
|
||||
80090048 addiu s6,s6,0x2 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 50
|
||||
8009004C lui s3,-0x7FF7 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 53
|
||||
80090050 sh v0,-0x10(s3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 54
|
||||
80090054 sh v0,-0xE(s3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 55
|
||||
80090058 lui s3,0x1F80 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 60
|
||||
8009005C ori s3,s3,0x3D0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 61
|
||||
80090060 lui t0,0xFF ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 63
|
||||
80090064 ori t0,t0,-0x1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 64
|
||||
80090068 sw s0,0x28(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 66
|
||||
8009006C andi s0,a3,0xFF ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 67
|
||||
80090070 move a0,s0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 68
|
||||
80090074 initdma: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 71
|
||||
80090074 lui a3,-0x7FF8 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 72
|
||||
80090078 lui a2,-0x100 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 73
|
||||
8009007C addiu t1,a3,-0x6C20 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 74
|
||||
80090080 lw v1,-0x6C20(a3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 75
|
||||
80090084 lbu a1,0x60(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 76
|
||||
80090088 lui v0,-0x8000 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 77
|
||||
8009008C sw ra,0x4C(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 80
|
||||
80090090 sw s8,0x48(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 81
|
||||
80090094 sw s7,0x44(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 82
|
||||
80090098 sw s5,0x3C(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 83
|
||||
8009009C sw s4,0x38(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 84
|
||||
800900A0 preparedmachain: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 87
|
||||
800900A0 and a2,v1,a2 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 88
|
||||
800900A4 andi a1,a1,0xFF ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 89
|
||||
800900A8 and v1,v1,t0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 90
|
||||
800900AC or s4,v1,v0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 91
|
||||
800900B0 lw v0,0x4(t1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 93
|
||||
800900B4 lw v1,0x0(s4) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 94
|
||||
800900B8 addiu v0,v0,-0x1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 95
|
||||
800900BC and v1,v1,t0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 96
|
||||
800900C0 or a2,a2,v1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 97
|
||||
800900C4 sw v0,0x4(t1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 98
|
||||
800900C8 prepareattrs: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 101
|
||||
800900C8 jal 0x8001ADC8 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 102
|
||||
800900CC sw a2,-0x6C20(a3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 103
|
||||
800900D0 move a0,s4 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 104
|
||||
800900D4 sll a1,s1,0x10 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 107
|
||||
800900D8 sra a1,a1,0x10 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 108
|
||||
800900DC sll a2,s2,0x10 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 109
|
||||
800900E0 sra a2,a2,0x10 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 110
|
||||
800900E4 jal 0x80019D70 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 111
|
||||
800900E8 move a3,s0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 112
|
||||
800900EC setupgpuregisters: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 115
|
||||
800900EC lui a3,0x1F80 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 116
|
||||
800900F0 ori a3,a3,0x348 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 117
|
||||
800900F4 ori v0,r0,0x2 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 121
|
||||
800900F8 sh v0,0x1C(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 122
|
||||
800900FC ori v0,r0,0xC ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 123
|
||||
80090100 ori a1,r0,0xD ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 124
|
||||
80090104 lui a0,-0x6000 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 125
|
||||
80090108 scratchcputovraminit: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 128
|
||||
80090108 sh v0,0x1E(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 129
|
||||
8009010C ori a1,r0,0x10 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 130
|
||||
80090110 sb a1,0x3(a3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 131
|
||||
80090114 sw a0,0x4(a3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 132
|
||||
80090118 lhu t0,0x9C(gp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 134
|
||||
8009011C lhu v0,0x9E(gp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 135
|
||||
80090120 lui v1,0x100 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 136
|
||||
80090124 lui at,0x1F80 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 138
|
||||
80090128 sw v1,0x37C(at) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 139
|
||||
8009012C calculatecoords: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 145
|
||||
8009012C lh a1,0x9C(gp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 146
|
||||
80090130 move s8,s2 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 147
|
||||
80090134 sh t0,0x18(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 151
|
||||
80090138 sh v0,0x1A(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 152
|
||||
8009013C lw a0,0x18(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 153
|
||||
80090140 lw v1,0x18(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 157
|
||||
80090144 lw v0,0x1C(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 158
|
||||
80090148 move t0,a1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 159
|
||||
8009014C sw v0,0x8(a3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 160
|
||||
80090150 lui v0,-0x7FFF ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 163
|
||||
80090154 sw a0,0x8(a3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 164
|
||||
80090158 lui t8,0x1F80 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 170
|
||||
8009015C ori t8,t8,0x2E0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 171
|
||||
80090160 addiu t7,v0,0x3E8 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 172
|
||||
80090164 lwl t5,0x3(t7) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 173
|
||||
80090168 lwr t5,0x0(t7) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 174
|
||||
8009016C lwl t6,0x7(t7) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 175
|
||||
80090170 lwr t6,0x4(t7) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 176
|
||||
80090174 swl t5,0x3(t8) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 177
|
||||
80090178 swr t5,0x0(t8) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 178
|
||||
8009017C swl t6,0x7(t8) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 179
|
||||
80090180 swr t6,0x4(t8) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 180
|
||||
80090184 lwl t5,0xB(t7) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 181
|
||||
80090188 lwr t5,0x8(t7) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 182
|
||||
8009018C lwl t6,0xF(t7) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 183
|
||||
80090190 lwr t6,0xC(t7) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 184
|
||||
80090194 swl t5,0xB(t8) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 185
|
||||
80090198 swr t5,0x8(t8) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 186
|
||||
8009019C swl t6,0xF(t8) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 187
|
||||
800901A0 swr t6,0xC(t8) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 188
|
||||
800901A4 lwl t5,0x13(t7) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 189
|
||||
800901A8 lwr t5,0x10(t7) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 190
|
||||
800901AC lwl t6,0x17(t7) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 191
|
||||
800901B0 lwr t6,0x14(t7) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 192
|
||||
800901B4 swl t5,0x13(t8) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 193
|
||||
800901B8 swr t5,0x10(t8) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 194
|
||||
800901BC swl t6,0x17(t8) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 195
|
||||
800901C0 swr t6,0x14(t8) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 196
|
||||
800901C4 lwl t5,0x1B(t7) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 197
|
||||
800901C8 lwr t5,0x18(t7) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 198
|
||||
800901CC lwl t6,0x1F(t7) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 199
|
||||
800901D0 lwr t6,0x1C(t7) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 200
|
||||
800901D4 swl t5,0x1B(t8) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 201
|
||||
800901D8 swr t5,0x18(t8) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 202
|
||||
800901DC swl t6,0x1F(t8) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 203
|
||||
800901E0 swr t6,0x1C(t8) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 204
|
||||
800901E4 ori v0,r0,0x4 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 207
|
||||
800901E8 sb v0,0x3(s3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 208
|
||||
800901EC ori v0,r0,0x64 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 209
|
||||
800901F0 sb v0,0x7(s3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 210
|
||||
800901F4 ori v0,r0,0x80 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 211
|
||||
800901F8 sb v0,0x4(s3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 212
|
||||
800901FC sb v0,0x5(s3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 213
|
||||
80090200 sb v0,0x6(s3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 214
|
||||
80090204 positionprocessing: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 217
|
||||
80090204 bgez a1,0x80090210 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 218
|
||||
80090208 sh s1,0x20(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 219
|
||||
8009020C addoffsetx: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 221
|
||||
8009020C addiu t0,a1,0x3F ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 222
|
||||
80090210 calculatexoffset: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 224
|
||||
80090210 sra v0,t0,0x6 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 225
|
||||
80090214 sll v0,v0,0x6 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 226
|
||||
80090218 subu v0,a1,v0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 227
|
||||
8009021C lh v1,0x9E(gp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 228
|
||||
80090220 sll v0,v0,0x2 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 229
|
||||
80090224 sb v0,0xC(s3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 230
|
||||
80090228 ycoordinateprocessing: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 233
|
||||
80090228 bgez v1,0x80090234 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 234
|
||||
8009022C move v0,v1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 235
|
||||
80090230 addoffsety: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 237
|
||||
80090230 addiu v0,v1,0xFF ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 238
|
||||
80090234 calculateyoffset: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 240
|
||||
80090234 sra v0,v0,0x8 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 241
|
||||
80090238 sll v0,v0,0x8 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 242
|
||||
8009023C subu v0,v1,v0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 243
|
||||
80090240 sb v0,0xD(s3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 244
|
||||
80090244 lhu v1,0xA4(gp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 246
|
||||
80090248 ori v0,r0,0x8 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 247
|
||||
8009024C sh v0,0x10(s3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 248
|
||||
80090250 ori v0,r0,0xC ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 249
|
||||
80090254 sh v0,0x12(s3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 250
|
||||
80090258 sh v1,0xE(s3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 251
|
||||
8009025C loadcharacter: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 254
|
||||
8009025C lbu a0,0x0(s6) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 255
|
||||
80090260 nop ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 256
|
||||
80090264 addiu s6,s6,0x1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 262
|
||||
80090268 lui s1,-0x7FF8 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 265
|
||||
8009026C addiu s5,s1,-0x6C20 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 266
|
||||
80090270 lui s0,0xFF ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 267
|
||||
80090274 ori s0,s0,-0x1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 268
|
||||
80090278 lui s7,-0x8000 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 269
|
||||
8009027C nextchar: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 272
|
||||
8009027C addiu r4,r4,-0x20 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 273
|
||||
80090280 isfirstchar: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 278
|
||||
80090280 jal 0x80090580 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 279
|
||||
80090284 clear s2 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 280
|
||||
80090288 setupdmaforchar: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 283
|
||||
80090288 lw v0,0xAC(gp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 284
|
||||
8009028C lhu v1,0x4(s4) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 285
|
||||
80090290 addiu v0,v0,0x6 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 286
|
||||
80090294 mult v1,v0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 287
|
||||
80090298 lui t2,-0x100 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 288
|
||||
8009029C move t4,s4 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 289
|
||||
800902A0 addiu t3,sp,0x10 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 290
|
||||
800902A4 move t1,s4 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 291
|
||||
800902A8 sh s8,0xA(s3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 293
|
||||
800902AC lhu t5,0x20(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 294
|
||||
800902B0 mflo t6 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 295
|
||||
800902B4 addu v0,t5,t6 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 296
|
||||
800902B8 sh v0,0x8(s3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 297
|
||||
800902BC pageloop: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 300
|
||||
800902BC lw v0,-0x6C20(s1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 301
|
||||
800902C0 nop ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 302
|
||||
800902C4 and a0,v0,t2 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 303
|
||||
800902C8 and v0,v0,s0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 304
|
||||
800902CC or a1,v0,s7 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 305
|
||||
800902D0 lw v0,0x4(s5) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 307
|
||||
800902D4 lw v1,0x0(a1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 308
|
||||
800902D8 addiu v0,v0,-0x1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 309
|
||||
800902DC and v1,v1,s0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 310
|
||||
800902E0 or a0,a0,v1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 311
|
||||
800902E4 sw v0,0x4(s5) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 312
|
||||
800902E8 sw a0,-0x6C20(s1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 313
|
||||
800902EC copyrectcmd: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 316
|
||||
800902EC lw t7,0x0(s3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 317
|
||||
800902F0 lw t8,0x4(s3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 318
|
||||
800902F4 lw t5,0x8(s3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 319
|
||||
800902F8 lw t6,0xC(s3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 320
|
||||
800902FC sw t7,0x0(a1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 322
|
||||
80090300 sw t8,0x4(a1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 323
|
||||
80090304 sw t5,0x8(a1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 324
|
||||
80090308 sw t6,0xC(a1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 325
|
||||
8009030C lw t7,0x10(s3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 327
|
||||
80090310 nop ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 328
|
||||
80090314 sw t7,0x10(a1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 329
|
||||
80090318 dmacharaddres: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 332
|
||||
80090318 lw v1,0x18(t1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 333
|
||||
8009031C lw v0,0x0(a1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 334
|
||||
80090320 lw v1,0x0(v1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 335
|
||||
80090324 and v0,v0,t2 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 336
|
||||
80090328 and v1,v1,s0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 337
|
||||
8009032C or v0,v0,v1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 338
|
||||
80090330 sw v0,0x0(a1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 339
|
||||
80090334 lw a0,0x18(t1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 341
|
||||
80090338 nop ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 342
|
||||
8009033C lw v0,0x0(a0) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 343
|
||||
80090340 and v1,a1,s0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 344
|
||||
80090344 and v0,v0,t2 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 345
|
||||
80090348 or v0,v0,v1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 346
|
||||
8009034C sw v0,0x0(a0) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 347
|
||||
80090350 sw a1,0x18(t1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 348
|
||||
80090354 lhu v0,0x4(t4) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 351
|
||||
80090358 nop ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 352
|
||||
8009035C bne v0,zero,0x8009036C ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 353
|
||||
80090360 clear t0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 354
|
||||
80090364 sw a1,0x28(t1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 356
|
||||
80090368 sw t8,0xC(t4) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 357
|
||||
8009036C notfirstchar: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 359
|
||||
8009036C lui a1,0x1F80 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 368
|
||||
80090370 lw v0,-0x6C20(s1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 369
|
||||
80090374 ori a1,a1,0x348 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 370
|
||||
80090378 and a0,v0,t2 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 371
|
||||
8009037C and v0,v0,s0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 372
|
||||
80090380 or a3,v0,s7 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 373
|
||||
80090384 move a2,a3 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 374
|
||||
80090388 lw v0,0x4(s5) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 380
|
||||
8009038C lw v1,0x0(a3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 382
|
||||
80090390 addiu v0,v0,-0x1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 383
|
||||
80090394 and v1,v1,s0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 384
|
||||
80090398 or a0,a0,v1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 386
|
||||
8009039C sw v0,0x4(s5) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 387
|
||||
800903A0 lui t3,0x1F80 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 389
|
||||
800903A4 ori t3,t3,0x388 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 390
|
||||
800903A8 andi v0,a3,0x3 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 392
|
||||
800903AC beq v0,zero,0x80090408 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 394
|
||||
800903B0 sw a0,-0x6C20(s1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 395
|
||||
800903B4 copyby2bytes: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 401
|
||||
800903B4 lwl t7,0x3(a1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 402
|
||||
800903B8 lwr t7,0x0(a1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 403
|
||||
800903BC lwl t8,0x7(a1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 404
|
||||
800903C0 lwr t8,0x4(a1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 405
|
||||
800903C4 lwl t5,0xB(a1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 406
|
||||
800903C8 lwr t5,0x8(a1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 407
|
||||
800903CC lwl t6,0xF(a1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 408
|
||||
800903D0 lwr t6,0xC(a1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 409
|
||||
800903D4 swl t7,0x3(a2) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 411
|
||||
800903D8 swr t7,0x0(a2) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 412
|
||||
800903DC swl t8,0x7(a2) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 413
|
||||
800903E0 swr t8,0x4(a2) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 414
|
||||
800903E4 swl t5,0xB(a2) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 415
|
||||
800903E8 swr t5,0x8(a2) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 416
|
||||
800903EC swl t6,0xF(a2) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 417
|
||||
800903F0 swr t6,0xC(a2) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 418
|
||||
800903F4 addiu a1,a1,0x10 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 420
|
||||
800903F8 bne a1,t3,0x800903B4 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 421
|
||||
800903FC addiu a2,a2,0x10 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 422
|
||||
80090400 j 0x80090434 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 424
|
||||
80090404 nop ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 425
|
||||
80090408 copy16bytes: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 428
|
||||
80090408 lw t7,0x0(a1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 429
|
||||
8009040C lw t8,0x4(a1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 430
|
||||
80090410 lw t5,0x8(a1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 431
|
||||
80090414 lw t6,0xC(a1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 432
|
||||
80090418 sw t7,0x0(a2) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 434
|
||||
8009041C sw t8,0x4(a2) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 435
|
||||
80090420 sw t5,0x8(a2) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 436
|
||||
80090424 sw t6,0xC(a2) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 437
|
||||
80090428 addiu a1,a1,0x10 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 439
|
||||
8009042C bne a1,t3,0x80090408 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 440
|
||||
80090430 addiu a2,a2,0x10 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 441
|
||||
80090434 last4bytescopy: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 444
|
||||
80090434 lwl t7,0x3(a1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 445
|
||||
80090438 lwr t7,0x0(a1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 446
|
||||
8009043C nop ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 449
|
||||
80090440 swl t7,0x3(a2) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 450
|
||||
80090444 swr t7,0x0(a2) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 451
|
||||
80090448 finaldmaupdate: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 463
|
||||
80090448 lw v1,0x18(t1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 465
|
||||
8009044C lw v0,0x0(a3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 466
|
||||
80090450 lw v1,0x0(v1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 467
|
||||
80090454 and v0,v0,t2 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 468
|
||||
80090458 and v1,v1,s0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 469
|
||||
8009045C or v0,v0,v1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 470
|
||||
80090460 sw v0,0x0(a3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 471
|
||||
80090464 lw a0,0x18(t1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 473
|
||||
80090468 nop ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 474
|
||||
8009046C lw v0,0x0(a0) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 475
|
||||
80090470 and v1,a3,s0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 476
|
||||
80090474 and v0,v0,t2 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 477
|
||||
80090478 or v0,v0,v1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 478
|
||||
8009047C sw v0,0x0(a0) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 479
|
||||
80090480 sw a3,0x18(t1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 481
|
||||
80090484 addiu t1,t1,0x4 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 482
|
||||
80090488 addiu v0,t4,0x8 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 483
|
||||
8009048C sltu v0,t1,v0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 485
|
||||
80090490 bne v0,zero,0x800902BC ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 486
|
||||
80090494 nop ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 487
|
||||
80090498 spacecharjumphere: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 490
|
||||
80090498 lhu v0,0x4(s4) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 491
|
||||
8009049C nop ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 492
|
||||
800904A0 addiu v0,v0,0x1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 493
|
||||
800904A4 lui t3,-0x7FF7 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 496
|
||||
800904A8 lhu v1,-0x10(t3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 497
|
||||
800904AC lbu r4,0x0(s6) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 498
|
||||
800904B0 addiu s6,s6,0x1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 499
|
||||
800904B4 sh v0,0x4(s4) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 500
|
||||
800904B8 lhu v0,-0xE(t3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 502
|
||||
800904BC nop ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 503
|
||||
800904C0 addiu v0,v0,-0x1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 504
|
||||
800904C4 sh v0,-0xE(t3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 505
|
||||
800904C8 bne v0,zero,0x8009027C ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 511
|
||||
800904CC nop ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 512
|
||||
800904D0 textend: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 516
|
||||
800904D0 clear s2 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 517
|
||||
800904D4 lui s3,-0x7FF8 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 518
|
||||
800904D8 addiu s5,s3,-0x6C20 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 519
|
||||
800904DC lui s1,0xFF ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 520
|
||||
800904E0 ori s1,s1,-0x1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 521
|
||||
800904E4 move s0,s4 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 522
|
||||
800904E8 clear a1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 523
|
||||
800904EC pagetloop: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 526
|
||||
800904EC ori a2,r0,0x1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 527
|
||||
800904F0 addu s2,s2,a2 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 528
|
||||
800904F4 lui v0,-0x8000 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 529
|
||||
800904F8 lui a0,-0x100 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 530
|
||||
800904FC lw v1,-0x6C20(s3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 532
|
||||
80090500 lw a3,0xA0(gp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 533
|
||||
80090504 and v1,v1,s1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 534
|
||||
80090508 or v1,v1,v0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 535
|
||||
8009050C sw v1,0x30(s0) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 536
|
||||
80090510 lw v0,-0x6C20(s3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 538
|
||||
80090514 lw v1,0x0(v1) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 539
|
||||
80090518 and v0,v0,a0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 540
|
||||
8009051C and v1,v1,s1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 541
|
||||
80090520 lw a0,0x4(s5) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 542
|
||||
80090524 or v0,v0,v1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 543
|
||||
80090528 sw v0,-0x6C20(s3) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 544
|
||||
8009052C addiu a0,a0,-0x1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 545
|
||||
80090530 sw a0,0x4(s5) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 546
|
||||
80090534 lw a0,0x30(s0) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 548
|
||||
80090538 jal 0x800522F0 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 549
|
||||
8009053C addiu s0,s0,0x4 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 550
|
||||
80090540 sltiu v0,s2,0x2 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 552
|
||||
80090544 bne v0,zero,0x800904EC ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 553
|
||||
80090548 clear a1 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 554
|
||||
8009054C returnfromfunction: ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 557
|
||||
8009054C move v0,s4 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 558
|
||||
80090550 lw ra,0x4C(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 559
|
||||
80090554 lw s8,0x48(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 560
|
||||
80090558 lw s7,0x44(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 561
|
||||
8009055C lw s6,0x40(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 562
|
||||
80090560 lw s5,0x3C(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 563
|
||||
80090564 lw s4,0x38(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 564
|
||||
80090568 lw s3,0x34(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 565
|
||||
8009056C lw s2,0x30(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 566
|
||||
80090570 lw s1,0x2C(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 567
|
||||
80090574 lw s0,0x28(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 568
|
||||
80090578 jr ra ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 570
|
||||
8009057C addiu sp,sp,0x50 ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 571
|
||||
80090580 makecharpixelscustom: ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 4
|
||||
80090580 addiu sp,sp,-0x18 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 6
|
||||
80090584 move a1,a0 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 7
|
||||
80090588 lui a0,0x1F80 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 8
|
||||
8009058C ori a0,a0,0x358 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 9
|
||||
80090590 sw ra,0x10(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 11
|
||||
80090594 ori a2,r0,0x1 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 13
|
||||
80090598 lbu t2,0xA8(gp) ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 15
|
||||
8009059C move t0,r4 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 16
|
||||
800905A0 lui v1,-0x7FE1 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 17
|
||||
800905A4 ori v1,v1,-0x5600 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 18
|
||||
800905A8 sll v0,a1,0x1 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 19
|
||||
800905AC addu v0,v0,a1 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 20
|
||||
800905B0 sll v0,v0,0x2 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 21
|
||||
800905B4 addu t1,v0,v1 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 22
|
||||
800905B8 ori r6,r0,0x6 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 23
|
||||
800905BC move v0,r6 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 24
|
||||
800905C0 beq v0,zero,0x80090680 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 25
|
||||
800905C4 addiu r6,r6,-0x1 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 26
|
||||
800905C8 lui a3,0x1F80 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 27
|
||||
800905CC ori a3,a3,0x2E0 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 28
|
||||
800905D0 charloop: ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 29
|
||||
800905D0 lhu v1,0x0(t1) ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 30
|
||||
800905D4 nop ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 31
|
||||
800905D8 andi r4,v1,0xF ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 32
|
||||
800905DC srl v1,v1,0x4 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 33
|
||||
800905E0 andi v0,v1,0xF ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 34
|
||||
800905E4 sll v0,v0,0x1 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 35
|
||||
800905E8 addu v0,v0,a3 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 36
|
||||
800905EC lhu v0,0x0(v0) ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 37
|
||||
800905F0 nop ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 38
|
||||
800905F4 mult v0,t2 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 39
|
||||
800905F8 sll r4,r4,0x1 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 40
|
||||
800905FC addu r4,r4,a3 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 41
|
||||
80090600 mflo a1 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 42
|
||||
80090604 lhu v0,0x0(r4) ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 43
|
||||
80090608 nop ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 44
|
||||
8009060C mult v0,t2 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 45
|
||||
80090610 srl v1,v1,0x4 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 46
|
||||
80090614 andi r4,v1,0xF ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 47
|
||||
80090618 srl v1,v1,0x4 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 48
|
||||
8009061C sll v1,v1,0x1 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 49
|
||||
80090620 addu v1,v1,a3 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 50
|
||||
80090624 sll v0,a1,0x10 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 51
|
||||
80090628 mflo t4 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 52
|
||||
8009062C or v0,t4,v0 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 53
|
||||
80090630 sw v0,0x0(t0) ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 54
|
||||
80090634 lhu v0,0x0(v1) ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 55
|
||||
80090638 nop ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 56
|
||||
8009063C mult v0,t2 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 57
|
||||
80090640 sll r4,r4,0x1 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 58
|
||||
80090644 addu r4,r4,a3 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 59
|
||||
80090648 mflo a1 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 60
|
||||
8009064C lhu v0,0x0(r4) ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 61
|
||||
80090650 nop ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 62
|
||||
80090654 mult v0,t2 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 63
|
||||
80090658 addiu t1,t1,0x2 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 64
|
||||
8009065C move v1,a2 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 65
|
||||
80090660 addiu a2,a2,-0x1 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 66
|
||||
80090664 addiu t0,t0,0x4 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 67
|
||||
80090668 sll v0,a1,0x10 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 68
|
||||
8009066C mflo t4 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 69
|
||||
80090670 or v0,t4,v0 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 70
|
||||
80090674 sw v0,0x0(t0) ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 71
|
||||
80090678 bne v1,zero,0x800905D0 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 72
|
||||
8009067C addiu t0,t0,0x4 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 73
|
||||
80090680 charloaded: ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 74
|
||||
80090680 lbu v1,0xA9(gp) ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 76
|
||||
80090684 nop ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 77
|
||||
80090688 bne v1,v0,0x8009069C ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 78
|
||||
8009068C nop ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 79
|
||||
80090690 lui a0,0x1F80 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 80
|
||||
80090694 jal 0x80019F0C ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 81
|
||||
80090698 ori a0,a0,0x358 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 82
|
||||
8009069C notshadow: ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 84
|
||||
8009069C lw ra,0x10(sp) ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 85
|
||||
800906A0 nop ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 86
|
||||
800906A4 jr ra ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 87
|
||||
800906A8 addiu sp,sp,0x18 ; C:\PSX\ASM\p2is_asm\cd_extra_charload.asm line 88
|
||||
800906AC returncharsinstring: ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 1
|
||||
800906AC lhu v0,0x0(a0) ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 4
|
||||
800906B0 nop ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 5
|
||||
800906B4 srl v0,v0,0xD ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 6
|
||||
800906B8 bne v0,zero,0x800906C8 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 7
|
||||
800906BC clear v1 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 8
|
||||
800906C0 j 0x800906F8 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 11
|
||||
800906C4 nop ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 12
|
||||
800906C8 ismy1bytestring: ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 13
|
||||
800906C8 lhu v0,0x0(a0) ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 14
|
||||
800906CC nop ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 15
|
||||
800906D0 andi v0,v0,0xFF ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 16
|
||||
800906D4 andi v1,v0,0x1 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 18
|
||||
800906D8 beq v1,zero,0x800906E4 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 19
|
||||
800906DC nop ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 20
|
||||
800906E0 addiu v0,v0,0x1 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 21
|
||||
800906E4 notand1: ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 23
|
||||
800906E4 sra v0,v0,0x1 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 24
|
||||
800906E8 addiu v0,v0,0x1 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 25
|
||||
800906EC jr ra ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 26
|
||||
800906F0 move v1,v0 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 27
|
||||
800906F4 getnewchar: ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 29
|
||||
800906F4 addiu v1,v1,0x1 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 30
|
||||
800906F8 startreading: ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 31
|
||||
800906F8 lhu v0,0x0(a0) ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 32
|
||||
800906FC nop ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 33
|
||||
80090700 sltiu v0,v0,0x1000 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 34
|
||||
80090704 bne v0,zero,0x800906F4 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 35
|
||||
80090708 addiu a0,a0,0x2 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 36
|
||||
8009070C jr ra ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 37
|
||||
80090710 move v0,v1 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 38
|
||||
80090714 calcnextxcustom: ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 41
|
||||
80090714 addiu sp,sp,-0x18 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 42
|
||||
80090718 sw ra,0x10(sp) ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 43
|
||||
8009071C lhu v0,0x0(a0) ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 45
|
||||
80090720 nop ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 46
|
||||
80090724 andi v1,v0,0xFF ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 47
|
||||
80090728 srl v0,v0,0xD ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 48
|
||||
8009072C beq v0,zero,0x8009073C ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 49
|
||||
80090730 nop ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 50
|
||||
80090734 j 0x80090744 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 51
|
||||
80090738 move v0,v1 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 52
|
||||
8009073C japoldtext: ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 53
|
||||
8009073C jal 0x800906AC ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 54
|
||||
80090740 nop ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 55
|
||||
80090744 ihavestringlength: ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 56
|
||||
80090744 sll v1,v0,0x1 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 57
|
||||
80090748 addu v1,v1,v0 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 58
|
||||
8009074C lw ra,0x10(sp) ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 59
|
||||
80090750 sll v0,v1,0x1 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 60
|
||||
80090754 jr ra ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 61
|
||||
80090758 addiu sp,sp,0x18 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 62
|
||||
8009075C retuncharstocity: ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 64
|
||||
8009075C lhu v0,0x0(a0) ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 65
|
||||
80090760 nop ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 66
|
||||
80090764 srl v0,v0,0xD ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 67
|
||||
80090768 bne v0,zero,0x80090778 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 68
|
||||
8009076C clear v1 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 69
|
||||
80090770 j 0x800906F8 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 71
|
||||
80090774 nop ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 72
|
||||
80090778 ismy1bytecity: ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 73
|
||||
80090778 lhu v0,0x0(a0) ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 74
|
||||
8009077C nop ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 75
|
||||
80090780 andi v0,v0,0xFF ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 76
|
||||
80090784 jr ra ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 77
|
||||
80090788 move v1,v0 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 78
|
||||
8009078C retuncharstocitydiv2: ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 81
|
||||
8009078C lhu v0,0x0(a0) ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 82
|
||||
80090790 nop ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 83
|
||||
80090794 srl v0,v0,0xD ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 84
|
||||
80090798 bne v0,zero,0x800907A8 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 85
|
||||
8009079C clear v1 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 86
|
||||
800907A0 j 0x800906F8 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 88
|
||||
800907A4 nop ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 89
|
||||
800907A8 ismy1bytecitydiv2: ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 90
|
||||
800907A8 lhu v0,0x0(a0) ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 91
|
||||
800907AC nop ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 92
|
||||
800907B0 andi v0,v0,0xFF ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 93
|
||||
800907B4 andi v1,v0,0x1 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 95
|
||||
800907B8 beq v1,zero,0x800907C4 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 96
|
||||
800907BC nop ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 97
|
||||
800907C0 addiu v0,v0,0x1 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 98
|
||||
800907C4 notand1_2: ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 100
|
||||
800907C4 sra v0,v0,0x1 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 101
|
||||
800907C8 jr ra ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 103
|
||||
800907CC move v1,v0 ; C:\PSX\ASM\p2is_asm\charCalcs.asm line 104
|
||||
800907D0 .close ; C:\PSX\ASM\p2is_asm\cd_extra_main.asm line 577
|
||||
FFFFFFFF .open ""C:\\PSX\\ASM\\p2is_asm\\SLPS_028.26"",0x8000F800 ; C:\PSX\ASM\p2is_asm\cd_extra_txtpatches.asm line 7
|
||||
8000F800 .org 0x8001927C ; C:\PSX\ASM\p2is_asm\cd_extra_txtpatches.asm line 16
|
||||
8001927C addiu v0,v0,0x6 ; C:\PSX\ASM\p2is_asm\cd_extra_txtpatches.asm line 17
|
||||
80019280 .org 0x8001CD58 ; C:\PSX\ASM\p2is_asm\cd_extra_txtpatches.asm line 31
|
||||
8001CD58 jal 0x80090000 ; C:\PSX\ASM\p2is_asm\cd_extra_txtpatches.asm line 32
|
||||
8001CD5C .org 0x8001CDD8 ; C:\PSX\ASM\p2is_asm\cd_extra_txtpatches.asm line 33
|
||||
8001CDD8 jal 0x80090000 ; C:\PSX\ASM\p2is_asm\cd_extra_txtpatches.asm line 34
|
||||
8001CDDC .org 0x8001C098 ; C:\PSX\ASM\p2is_asm\cd_extra_txtpatches.asm line 36
|
||||
8001C098 jal 0x80090000 ; C:\PSX\ASM\p2is_asm\cd_extra_txtpatches.asm line 37
|
||||
8001C09C .org 0x8001C10C ; C:\PSX\ASM\p2is_asm\cd_extra_txtpatches.asm line 38
|
||||
8001C10C jal 0x80090000 ; C:\PSX\ASM\p2is_asm\cd_extra_txtpatches.asm line 39
|
||||
8001C110 .org 0x8001C388 ; C:\PSX\ASM\p2is_asm\cd_extra_txtpatches.asm line 45
|
||||
8001C388 jal 0x80090000 ; C:\PSX\ASM\p2is_asm\cd_extra_txtpatches.asm line 46
|
||||
8001C38C .org 0x8001ABF4 ; C:\PSX\ASM\p2is_asm\cd_extra_txtpatches.asm line 51
|
||||
8001ABF4 j 0x800906AC ; C:\PSX\ASM\p2is_asm\cd_extra_txtpatches.asm line 52
|
||||
8001ABF8 clear v1 ; C:\PSX\ASM\p2is_asm\cd_extra_txtpatches.asm line 53
|
||||
8001ABFC .org 0x8001AC1C ; C:\PSX\ASM\p2is_asm\cd_extra_txtpatches.asm line 58
|
||||
8001AC1C j 0x80090714 ; C:\PSX\ASM\p2is_asm\cd_extra_txtpatches.asm line 61
|
||||
8001AC20 nop ; C:\PSX\ASM\p2is_asm\cd_extra_txtpatches.asm line 62
|
||||
8001AC24 .close ; C:\PSX\ASM\p2is_asm\cd_extra_txtpatches.asm line 64
|
||||
61
123_EP
Normal file
61
123_EP
Normal file
@@ -0,0 +1,61 @@
|
||||
; 1 file included
|
||||
; 76 lines
|
||||
; 8 labels
|
||||
; 0 equations
|
||||
|
||||
; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm
|
||||
|
||||
FFFFFFFF .psx ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 5
|
||||
FFFFFFFF .open ""C:\\Users\\ShemetSA.RADIO\\Documents\\GitHub\\p2is_asm\\0681.BIN"",0x800AB000; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 7
|
||||
800AB000 .org 0x800B5300 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 9
|
||||
800B5300 .area 0x000000FC ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 10
|
||||
800B5300 lhu v0,0x0(s0) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 14
|
||||
800B5304 move r4,s0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 15
|
||||
800B5308 andi v0,0xFF ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 17
|
||||
800B530C addu s0,s0,v0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 19
|
||||
800B5310 addiu s0,0x2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 20
|
||||
800B5314 andi v0,v0,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 21
|
||||
800B5318 beq v0,zero,0x800B5324 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 22
|
||||
800B531C nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 23
|
||||
800B5320 addiu s0,s0,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 24
|
||||
800B5324 notand1: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 25
|
||||
800B5324 andi r5,s3,-0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 27
|
||||
800B5328 andi r6,s1,-0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 28
|
||||
800B532C ori r7,r0,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 29
|
||||
800B5330 jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 30
|
||||
800B5334 sw r7,0x10(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 31
|
||||
800B5338 lui v1,-0x7FF4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 33
|
||||
800B533C sw v0,-0x6F8C(v1) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 34
|
||||
800B5340 lhu v1,0x0(s0) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 35
|
||||
800B5344 ori v0,r0,0x1103 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 36
|
||||
800B5348 beq v1,v0,0x800B53AC ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 37
|
||||
800B534C addiu s0,s0,0x2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 38
|
||||
800B5350 addiu s1,s1,0xE ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 39
|
||||
800B5354 nextline: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 42
|
||||
800B5354 lhu v0,0x0(s0) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 43
|
||||
800B5358 move r4,s0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 47
|
||||
800B535C andi v0,0xFF ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 48
|
||||
800B5360 addu s0,s0,v0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 50
|
||||
800B5364 addiu s0,0x2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 51
|
||||
800B5368 andi v0,v0,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 52
|
||||
800B536C beq v0,zero,0x800B5378 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 53
|
||||
800B5370 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 54
|
||||
800B5374 addiu s0,s0,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 55
|
||||
800B5378 notand1_2: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 56
|
||||
800B5378 andi r5,s3,-0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 58
|
||||
800B537C andi r6,s1,-0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 59
|
||||
800B5380 jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 60
|
||||
800B5384 ori r7,r0,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 61
|
||||
800B5388 lui v1,-0x7FF4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 62
|
||||
800B538C lw r4,-0x6F8C(v1) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 63
|
||||
800B5390 jal 0x8001B8D8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 64
|
||||
800B5394 move r5,v0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 65
|
||||
800B5398 lhu v0,0x0(s0) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 67
|
||||
800B539C ori v1,r0,0x1103 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 68
|
||||
800B53A0 addiu s0,0x2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 70
|
||||
800B53A4 bne v1,v0,0x800B5354 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 71
|
||||
800B53A8 addiu s1,s1,0xE ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 72
|
||||
800B53AC textdone: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 74
|
||||
800B53AC .fill 0x00000050,0x00 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 74
|
||||
800B53FC .endarea ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 74
|
||||
800B53FC .close ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\EP_TITLE_WINDOW_TEXT_PRINT.asm line 76
|
||||
74
123_battle
Normal file
74
123_battle
Normal file
@@ -0,0 +1,74 @@
|
||||
; 1 file included
|
||||
; 102 lines
|
||||
; 10 labels
|
||||
; 0 equations
|
||||
|
||||
; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm
|
||||
|
||||
FFFFFFFF .psx ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 3
|
||||
FFFFFFFF .open ""C:\\Users\\ShemetSA.RADIO\\Documents\\GitHub\\p2is_asm\\0001_BATTLE_CODE.bin"",0x800AB000; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 5
|
||||
800EF150 simplecopystring: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 7
|
||||
800AB000 .org 0x800F9E60 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 9
|
||||
800F9E60 lhu r2,0x0(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 11
|
||||
800F9E64 addiu r5,0x2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 12
|
||||
800F9E68 sh r2,0x0(r4) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 13
|
||||
800F9E6C andi r3,r2,0xFF ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 14
|
||||
800F9E70 addiu r4,0x2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 15
|
||||
800F9E74 nextch: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 16
|
||||
800F9E74 lbu r2,0x0(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 17
|
||||
800F9E78 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 18
|
||||
800F9E7C sb r2,0x0(r4) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 19
|
||||
800F9E80 addiu r4,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 20
|
||||
800F9E84 addiu r5,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 21
|
||||
800F9E88 addiu r3,-0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 22
|
||||
800F9E8C bne r3,zero,0x800F9E74 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 23
|
||||
800F9E90 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 24
|
||||
800F9E94 jr ra ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 25
|
||||
800F9E98 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 26
|
||||
800F9E9C checkandcopyrusinscript: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 30
|
||||
800F9E9C lhu r3,0x0(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 31
|
||||
800F9EA0 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 32
|
||||
800F9EA4 srl r3,r3,0xD ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 33
|
||||
800F9EA8 bne v1,zero,0x800F9EB8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 34
|
||||
800F9EAC nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 35
|
||||
800F9EB0 j 0x800EF150 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 36
|
||||
800F9EB4 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 37
|
||||
800F9EB8 mycopy: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 39
|
||||
800F9EB8 lhu r3,0x0(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 40
|
||||
800F9EBC nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 41
|
||||
800F9EC0 andi r3,r3,0xFF ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 42
|
||||
800F9EC4 addiu r3,0x2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 43
|
||||
800F9EC8 nx: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 44
|
||||
800F9EC8 lbu r2,0x0(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 45
|
||||
800F9ECC nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 46
|
||||
800F9ED0 sb r2,0x0(r4) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 47
|
||||
800F9ED4 addiu r4,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 48
|
||||
800F9ED8 addiu r3,-0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 49
|
||||
800F9EDC bne r3,zero,0x800F9EC8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 50
|
||||
800F9EE0 addiu r5,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 51
|
||||
800F9EE4 andi r2,r4,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 54
|
||||
800F9EE8 beq r2,zero,0x800F9EF4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 55
|
||||
800F9EEC nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 56
|
||||
800F9EF0 addiu r4,r4,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 57
|
||||
800F9EF4 notand1_3: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 60
|
||||
800F9EF4 jr ra ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 61
|
||||
800F9EF8 move r2,r4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 62
|
||||
800F9EFC .org 0x800F9F20 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 67
|
||||
800F9F20 lui r2,-0x7FEF ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 68
|
||||
800F9F24 lbu r2,0xBC8(r2) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 69
|
||||
800F9F28 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 70
|
||||
800F9F2C ori r3,r0,0x3 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 71
|
||||
800F9F30 bne r2,r3,0x800F9F3C ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 72
|
||||
800F9F34 ori r3,r0,0x30 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 73
|
||||
800F9F38 ori r3,r0,0x80 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 75
|
||||
800F9F3C not3: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 76
|
||||
800F9F3C lui r2,0x1F49 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 77
|
||||
800F9F40 sb r3,-0xC(r2) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 78
|
||||
800F9F44 j 0x80016E10 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 79
|
||||
800F9F48 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 80
|
||||
800F9F4C .org 0x800AD4E8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 84
|
||||
800AD4E8 .org 0x800F1F60 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 94
|
||||
800F1F60 jal 0x800F9E9C ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 95
|
||||
800F1F64 .org 0x800F20BC ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 96
|
||||
800F20BC jal 0x800F9E9C ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 97
|
||||
800F20C0 .close ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 102
|
||||
692
123_new
Normal file
692
123_new
Normal file
@@ -0,0 +1,692 @@
|
||||
; 6 files included
|
||||
; 941 lines
|
||||
; 58 labels
|
||||
; 0 equations
|
||||
|
||||
; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm
|
||||
; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm
|
||||
; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm
|
||||
; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm
|
||||
; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm
|
||||
; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm
|
||||
|
||||
FFFFFFFF .psx ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 6
|
||||
800542CC setdrawtpage: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 10
|
||||
8001B0C8 storecolor: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 11
|
||||
8001A070 initcopycharchain: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 12
|
||||
8001A08F makecharpixels: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 13
|
||||
8001A284 generatesmallchar: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 14
|
||||
8001A20C makeshadowsmallchar: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 15
|
||||
80019300 printbigdmatext: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 16
|
||||
00008009 myaddr: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 18
|
||||
FFFFFFFF .open ""C:\\Users\\ShemetSA.RADIO\\Documents\\GitHub\\p2is_asm\\SLPS_021.00"",0x8000F800; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 21
|
||||
8000F800 .org 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 28
|
||||
80090000 externalprint: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 29
|
||||
80090000 move r3,s3 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 31
|
||||
80090004 move s3,r4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 32
|
||||
80090008 lhu v0,0x0(s3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 34
|
||||
8009000C move s3,r3 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 35
|
||||
80090010 srl v1,v0,0xD ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 36
|
||||
80090014 bne v1,zero,0x80090024 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 37
|
||||
80090018 clear v1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 38
|
||||
8009001C j 0x80019300 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 39
|
||||
80090020 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 40
|
||||
80090024 myprintlineroutine: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 43
|
||||
80090024 addiu sp,sp,-0x50 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 44
|
||||
80090028 sw s6,0x40(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 45
|
||||
8009002C move s6,r4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 46
|
||||
80090030 sw s1,0x2C(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 47
|
||||
80090034 move s1,r5 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 48
|
||||
80090038 sw s2,0x30(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 49
|
||||
8009003C move s2,r6 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 50
|
||||
80090040 sw s3,0x34(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 51
|
||||
80090044 andi v0,v0,0xFF ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 58
|
||||
80090048 addiu s6,s6,0x2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 59
|
||||
8009004C lui s3,-0x7FF7 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 63
|
||||
80090050 sw v0,-0x10(s3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 64
|
||||
80090054 lui s3,0x1F80 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 67
|
||||
80090058 ori s3,s3,0x3D0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 68
|
||||
8009005C lui t0,0xFF ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 69
|
||||
80090060 ori t0,t0,-0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 70
|
||||
80090064 sw s0,0x28(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 72
|
||||
80090068 andi s0,r7,0xFF ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 73
|
||||
8009006C move r4,s0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 74
|
||||
80090070 lui r7,-0x7FF8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 75
|
||||
80090074 lui r6,-0x100 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 76
|
||||
80090078 addiu t1,r7,-0x4930 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 78
|
||||
8009007C lw v1,-0x4930(r7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 79
|
||||
80090080 lbu r5,0x60(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 80
|
||||
80090084 lui v0,-0x8000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 81
|
||||
80090088 sw ra,0x4C(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 82
|
||||
8009008C sw s8,0x48(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 83
|
||||
80090090 sw s7,0x44(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 84
|
||||
80090094 sw s5,0x3C(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 85
|
||||
80090098 sw s4,0x38(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 86
|
||||
8009009C and r6,v1,r6 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 88
|
||||
800900A0 andi r5,r5,0xFF ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 89
|
||||
800900A4 and v1,v1,t0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 90
|
||||
800900A8 or r20,v1,v0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 91
|
||||
800900AC lw v0,0x4(t1) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 92
|
||||
800900B0 lw v1,0x0(r20) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 93
|
||||
800900B4 addiu v0,v0,-0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 94
|
||||
800900B8 and v1,v1,t0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 95
|
||||
800900BC or r6,r6,v1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 96
|
||||
800900C0 sw v0,0x4(t1) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 97
|
||||
800900C4 jal 0x8001B0C8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 98
|
||||
800900C8 sw r6,-0x4930(r7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 99
|
||||
800900CC move r4,r20 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 100
|
||||
800900D0 sll r5,s1,0x10 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 101
|
||||
800900D4 sra r5,r5,0x10 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 102
|
||||
800900D8 sll r6,s2,0x10 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 103
|
||||
800900DC sra r6,r6,0x10 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 104
|
||||
800900E0 jal 0x8001A070 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 105
|
||||
800900E4 move r7,s0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 106
|
||||
800900E8 lui r7,0x1F80 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 110
|
||||
800900EC ori r7,r7,0x348 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 111
|
||||
800900F0 ori v0,r0,0x2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 114
|
||||
800900F4 sh v0,0x1C(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 115
|
||||
800900F8 ori v0,r0,0xC ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 116
|
||||
800900FC lui r4,-0x6000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 118
|
||||
80090100 sh v0,0x1E(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 119
|
||||
80090104 ori r5,r0,0x10 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 124
|
||||
80090108 sb r5,0x3(r7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 125
|
||||
8009010C sw r4,0x4(r7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 126
|
||||
80090110 lhu t0,0xA0(gp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 127
|
||||
80090114 lhu v0,0xA2(gp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 128
|
||||
80090118 lui v1,0x100 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 129
|
||||
8009011C lui at,0x1F80 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 130
|
||||
80090120 sw v1,0x388(at) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 131
|
||||
80090124 sety1: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 132
|
||||
80090124 move s8,s2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 133
|
||||
80090128 lh r5,0xA0(gp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 134
|
||||
8009012C sh t0,0x18(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 135
|
||||
80090130 sh v0,0x1A(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 136
|
||||
80090134 lw r4,0x18(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 137
|
||||
80090138 lw v0,0x1C(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 138
|
||||
8009013C sw r4,0x8(r7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 139
|
||||
80090140 sw v0,0xC(r7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 140
|
||||
80090144 lui v0,-0x7FFF ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 142
|
||||
80090148 lui t8,0x1F80 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 2
|
||||
8009014C ori t8,t8,0x2E0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 3
|
||||
80090150 addiu t7,v0,0x3E8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 4
|
||||
80090154 lwl t5,0x3(t7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 6
|
||||
80090158 lwr t5,0x0(t7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 7
|
||||
8009015C lwl t6,0x7(t7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 8
|
||||
80090160 lwr t6,0x4(t7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 9
|
||||
80090164 swl t5,0x3(t8) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 11
|
||||
80090168 swr t5,0x0(t8) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 12
|
||||
8009016C swl t6,0x7(t8) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 13
|
||||
80090170 swr t6,0x4(t8) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 14
|
||||
80090174 lwl t5,0xB(t7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 17
|
||||
80090178 lwr t5,0x8(t7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 18
|
||||
8009017C lwl t6,0xF(t7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 19
|
||||
80090180 lwr t6,0xC(t7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 20
|
||||
80090184 swl t5,0xB(t8) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 22
|
||||
80090188 swr t5,0x8(t8) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 23
|
||||
8009018C swl t6,0xF(t8) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 24
|
||||
80090190 swr t6,0xC(t8) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 25
|
||||
80090194 lwl t5,0x13(t7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 28
|
||||
80090198 lwr t5,0x10(t7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 29
|
||||
8009019C lwl t6,0x17(t7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 30
|
||||
800901A0 lwr t6,0x14(t7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 31
|
||||
800901A4 swl t5,0x13(t8) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 33
|
||||
800901A8 swr t5,0x10(t8) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 34
|
||||
800901AC swl t6,0x17(t8) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 35
|
||||
800901B0 swr t6,0x14(t8) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 36
|
||||
800901B4 lwl t5,0x1B(t7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 39
|
||||
800901B8 lwr t5,0x18(t7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 40
|
||||
800901BC lwl t6,0x1F(t7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 41
|
||||
800901C0 lwr t6,0x1C(t7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 42
|
||||
800901C4 swl t5,0x1B(t8) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 44
|
||||
800901C8 swr t5,0x18(t8) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 45
|
||||
800901CC swl t6,0x1F(t8) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 46
|
||||
800901D0 swr t6,0x1C(t8) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\4bitPattern.asm line 47
|
||||
800901D4 ori v0,r0,0x4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 148
|
||||
800901D8 sb v0,0x3(s3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 149
|
||||
800901DC ori v0,r0,0x64 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 150
|
||||
800901E0 sb v0,0x7(s3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 151
|
||||
800901E4 ori v0,r0,0x80 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 152
|
||||
800901E8 sb v0,0x4(s3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 153
|
||||
800901EC sb v0,0x5(s3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 154
|
||||
800901F0 sb v0,0x6(s3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 155
|
||||
800901F4 bgez r5,0x80090200 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 156
|
||||
800901F8 setx1: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 157
|
||||
800901F8 sh s1,0x20(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 158
|
||||
800901FC addiu t0,r5,0x3F ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 159
|
||||
80090200 lab_800194fc: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 160
|
||||
80090200 sra v0,t0,0x6 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 161
|
||||
80090204 sll v0,v0,0x6 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 162
|
||||
80090208 subu v0,r5,v0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 163
|
||||
8009020C lh v1,0xA2(gp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 164
|
||||
80090210 sll v0,v0,0x2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 165
|
||||
80090214 sb v0,0xC(s3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 166
|
||||
80090218 bgez v1,0x80090224 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 167
|
||||
8009021C move v0,v1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 168
|
||||
80090220 addiu v0,v1,0xFF ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 169
|
||||
80090224 lab_80019520: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 170
|
||||
80090224 sra v0,v0,0x8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 171
|
||||
80090228 sll v0,v0,0x8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 172
|
||||
8009022C subu v0,v1,v0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 173
|
||||
80090230 sb v0,0xD(s3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 174
|
||||
80090234 lhu v1,0xA8(gp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 175
|
||||
80090238 ori v0,r0,0x8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 177
|
||||
8009023C sh v0,0x10(s3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 178
|
||||
80090240 sh v1,0xE(s3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 179
|
||||
80090244 ori v0,r0,0xC ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 180
|
||||
80090248 sh v0,0x12(s3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 181
|
||||
8009024C lbu r4,0x0(s6) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 184
|
||||
80090250 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 185
|
||||
80090254 addiu s6,s6,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 186
|
||||
80090258 lui s1,-0x7FF8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 188
|
||||
8009025C addiu s5,s1,-0x4930 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 189
|
||||
80090260 lui s0,0xFF ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 190
|
||||
80090264 ori s0,s0,-0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 191
|
||||
80090268 lui s7,-0x8000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 192
|
||||
8009026C nextchar: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 193
|
||||
8009026C addiu r4,r4,-0x20 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 194
|
||||
80090270 bne r4,zero,0x800902A8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 199
|
||||
80090274 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 200
|
||||
80090278 lui t2,-0x7FF7 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 202
|
||||
8009027C lh v0,-0xE(t2) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 203
|
||||
80090280 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 204
|
||||
80090284 lh t3,-0x10(t2) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 205
|
||||
80090288 addiu v0,v0,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 206
|
||||
8009028C beq v0,t3,0x800902A8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 207
|
||||
80090290 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 208
|
||||
80090294 sh v0,-0xE(t2) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 210
|
||||
80090298 lbu r4,0x0(s6) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 211
|
||||
8009029C nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 212
|
||||
800902A0 j 0x8009026C ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 213
|
||||
800902A4 addiu s6,s6,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 214
|
||||
800902A8 spacecheckbranch: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 217
|
||||
800902A8 jal 0x800905AC ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 219
|
||||
800902AC clear r18 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 220
|
||||
800902B0 lw v0,0xB0(gp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 223
|
||||
800902B4 lui t2,-0x7FF7 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 224
|
||||
800902B8 lh v1,-0xE(t2) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 225
|
||||
800902BC addiu v0,v0,0x6 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 227
|
||||
800902C0 mult v1,v0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 230
|
||||
800902C4 lui t2,-0x100 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 234
|
||||
800902C8 move t4,r20 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 235
|
||||
800902CC addiu t3,sp,0x10 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 236
|
||||
800902D0 move t1,r20 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 237
|
||||
800902D4 gety: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 238
|
||||
800902D4 sh s8,0xA(s3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 239
|
||||
800902D8 getx: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 240
|
||||
800902D8 lhu t5,0x20(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 241
|
||||
800902DC mflo t6 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 242
|
||||
800902E0 addu v0,t5,t6 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 243
|
||||
800902E4 sh v0,0x8(s3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 244
|
||||
800902E8 pageloop: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 245
|
||||
800902E8 lw v0,-0x4930(s1) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 247
|
||||
800902EC nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 248
|
||||
800902F0 and r4,v0,t2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 249
|
||||
800902F4 and v0,v0,s0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 250
|
||||
800902F8 or r5,v0,s7 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 251
|
||||
800902FC lw v0,0x4(s5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 252
|
||||
80090300 lw v1,0x0(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 253
|
||||
80090304 addiu v0,v0,-0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 254
|
||||
80090308 and v1,v1,s0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 255
|
||||
8009030C or r4,r4,v1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 256
|
||||
80090310 sw v0,0x4(s5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 257
|
||||
80090314 sw r4,-0x4930(s1) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 258
|
||||
80090318 copycmdfromscratch: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 259
|
||||
80090318 lw t6,0x0(s3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 261
|
||||
8009031C lw t7,0x4(s3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 262
|
||||
80090320 lw t8,0x8(s3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 263
|
||||
80090324 lw t5,0xC(s3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 264
|
||||
80090328 sw t6,0x0(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 265
|
||||
8009032C sw t7,0x4(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 266
|
||||
80090330 sw t8,0x8(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 267
|
||||
80090334 sw t5,0xC(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 268
|
||||
80090338 lw t6,0x10(s3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 269
|
||||
8009033C nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 270
|
||||
80090340 sw t6,0x10(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 271
|
||||
80090344 lw v1,0x18(t1) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 274
|
||||
80090348 lw v0,0x0(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 275
|
||||
8009034C lw v1,0x0(v1) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 276
|
||||
80090350 and v0,v0,t2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 277
|
||||
80090354 and v1,v1,s0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 278
|
||||
80090358 or v0,v0,v1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 279
|
||||
8009035C sw v0,0x0(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 280
|
||||
80090360 lw r4,0x18(t1) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 281
|
||||
80090364 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 282
|
||||
80090368 lw v0,0x0(r4) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 283
|
||||
8009036C and v1,r5,s0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 284
|
||||
80090370 and v0,v0,t2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 285
|
||||
80090374 or v0,v0,v1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 286
|
||||
80090378 sw v0,0x0(r4) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 287
|
||||
8009037C sw r5,0x18(t1) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 288
|
||||
80090380 lhu v0,0x4(t4) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 289
|
||||
80090384 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 290
|
||||
80090388 bne v0,zero,0x80090398 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 291
|
||||
8009038C nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 292
|
||||
80090390 sw r5,0x28(t1) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 293
|
||||
80090394 sw t8,0xC(t4) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 294
|
||||
80090398 notfirstchar: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 296
|
||||
80090398 lui r5,0x1F80 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 297
|
||||
8009039C lw v0,-0x4930(s1) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 298
|
||||
800903A0 ori r5,r5,0x348 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 299
|
||||
800903A4 and r4,v0,t2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 300
|
||||
800903A8 and v0,v0,s0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 301
|
||||
800903AC or r7,v0,s7 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 302
|
||||
800903B0 move r6,r7 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 303
|
||||
800903B4 lw v0,0x4(s5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 304
|
||||
800903B8 lw v1,0x0(r7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 305
|
||||
800903BC addiu v0,v0,-0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 306
|
||||
800903C0 and v1,v1,s0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 307
|
||||
800903C4 or r4,r4,v1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 308
|
||||
800903C8 sw v0,0x4(s5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 309
|
||||
800903CC andi v0,r7,0x3 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 310
|
||||
800903D0 lui t3,0x1F80 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 312
|
||||
800903D4 ori t3,t3,0x388 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 313
|
||||
800903D8 beq v0,zero,0x80090434 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 315
|
||||
800903DC sw r4,-0x4930(s1) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 316
|
||||
800903E0 copyby2bytes: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 320
|
||||
800903E0 lwl t6,0x3(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 321
|
||||
800903E4 lwr t6,0x0(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 322
|
||||
800903E8 lwl t7,0x7(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 323
|
||||
800903EC lwr t7,0x4(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 324
|
||||
800903F0 lwl t8,0xB(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 325
|
||||
800903F4 lwr t8,0x8(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 326
|
||||
800903F8 lwl t5,0xF(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 327
|
||||
800903FC lwr t5,0xC(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 328
|
||||
80090400 swl t6,0x3(r6) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 329
|
||||
80090404 swr t6,0x0(r6) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 330
|
||||
80090408 swl t7,0x7(r6) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 331
|
||||
8009040C swr t7,0x4(r6) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 332
|
||||
80090410 swl t8,0xB(r6) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 333
|
||||
80090414 swr t8,0x8(r6) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 334
|
||||
80090418 swl t5,0xF(r6) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 335
|
||||
8009041C swr t5,0xC(r6) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 336
|
||||
80090420 addiu r5,r5,0x10 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 337
|
||||
80090424 bne r5,t3,0x800903E0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 338
|
||||
80090428 addiu r6,r6,0x10 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 339
|
||||
8009042C j 0x80090460 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 340
|
||||
80090430 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 341
|
||||
80090434 copy16bytes: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 342
|
||||
80090434 lw t6,0x0(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 343
|
||||
80090438 lw t7,0x4(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 344
|
||||
8009043C lw t8,0x8(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 345
|
||||
80090440 lw t5,0xC(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 346
|
||||
80090444 sw t6,0x0(r6) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 347
|
||||
80090448 sw t7,0x4(r6) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 348
|
||||
8009044C sw t8,0x8(r6) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 349
|
||||
80090450 sw t5,0xC(r6) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 350
|
||||
80090454 addiu r5,r5,0x10 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 351
|
||||
80090458 bne r5,t3,0x80090434 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 352
|
||||
8009045C addiu r6,r6,0x10 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 353
|
||||
80090460 last4bytescopy: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 354
|
||||
80090460 lwl t6,0x3(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 355
|
||||
80090464 lwr t6,0x0(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 356
|
||||
80090468 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 357
|
||||
8009046C swl t6,0x3(r6) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 358
|
||||
80090470 swr t6,0x0(r6) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 359
|
||||
80090474 lw v1,0x18(t1) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 364
|
||||
80090478 lw v0,0x0(r7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 365
|
||||
8009047C lw v1,0x0(v1) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 366
|
||||
80090480 and v0,v0,t2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 367
|
||||
80090484 and v1,v1,s0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 368
|
||||
80090488 or v0,v0,v1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 369
|
||||
8009048C sw v0,0x0(r7) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 370
|
||||
80090490 lw r4,0x18(t1) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 371
|
||||
80090494 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 372
|
||||
80090498 lw v0,0x0(r4) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 373
|
||||
8009049C and v1,r7,s0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 374
|
||||
800904A0 and v0,v0,t2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 375
|
||||
800904A4 or v0,v0,v1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 376
|
||||
800904A8 sw v0,0x0(r4) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 377
|
||||
800904AC sw r7,0x18(t1) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 379
|
||||
800904B0 addiu t1,t1,0x4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 380
|
||||
800904B4 addiu v0,t4,0x8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 381
|
||||
800904B8 sltu v0,t1,v0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 382
|
||||
800904BC bne v0,zero,0x800902E8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 383
|
||||
800904C0 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 384
|
||||
800904C4 lhu v0,0x4(r20) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 387
|
||||
800904C8 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 388
|
||||
800904CC addiu v0,v0,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 389
|
||||
800904D0 sh v0,0x4(r20) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 390
|
||||
800904D4 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 391
|
||||
800904D8 lui t3,-0x7FF7 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 392
|
||||
800904DC lhu v0,-0xE(t3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 393
|
||||
800904E0 lhu v1,-0x10(t3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 394
|
||||
800904E4 addiu v0,v0,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 395
|
||||
800904E8 lbu r4,0x0(s6) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 396
|
||||
800904EC sh v0,-0xE(t3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 398
|
||||
800904F0 addiu s6,s6,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 399
|
||||
800904F4 bne v0,v1,0x8009026C ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 401
|
||||
800904F8 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 402
|
||||
800904FC textend: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 403
|
||||
800904FC clear r18 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 404
|
||||
80090500 lui s3,-0x7FF8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 405
|
||||
80090504 addiu s5,s3,-0x4930 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 406
|
||||
80090508 lui s1,0xFF ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 407
|
||||
8009050C ori s1,s1,-0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 408
|
||||
80090510 move s0,r20 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 409
|
||||
80090514 clear r5 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 410
|
||||
80090518 pagetloop: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 411
|
||||
80090518 ori r6,r0,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 412
|
||||
8009051C addu r18,r18,r6 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 413
|
||||
80090520 lui v0,-0x8000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 414
|
||||
80090524 lui r4,-0x100 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 415
|
||||
80090528 lw v1,-0x4930(s3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 416
|
||||
8009052C lw r7,0xA4(gp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 417
|
||||
80090530 and v1,v1,s1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 418
|
||||
80090534 or v1,v1,v0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 419
|
||||
80090538 sw v1,0x30(s0) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 420
|
||||
8009053C lw v0,-0x4930(s3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 421
|
||||
80090540 lw v1,0x0(v1) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 422
|
||||
80090544 and v0,v0,r4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 423
|
||||
80090548 and v1,v1,s1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 424
|
||||
8009054C lw r4,0x4(s5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 425
|
||||
80090550 or v0,v0,v1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 426
|
||||
80090554 sw v0,-0x4930(s3) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 427
|
||||
80090558 addiu r4,r4,-0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 428
|
||||
8009055C sw r4,0x4(s5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 429
|
||||
80090560 lw r4,0x30(s0) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 430
|
||||
80090564 jal 0x800542CC ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 431
|
||||
80090568 addiu s0,s0,0x4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 432
|
||||
8009056C sltiu v0,r18,0x2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 433
|
||||
80090570 bne v0,zero,0x80090518 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 434
|
||||
80090574 clear r5 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 435
|
||||
80090578 move v0,r20 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 436
|
||||
8009057C lw ra,0x4C(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 438
|
||||
80090580 lw s8,0x48(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 439
|
||||
80090584 lw s7,0x44(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 440
|
||||
80090588 lw s6,0x40(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 441
|
||||
8009058C lw s5,0x3C(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 442
|
||||
80090590 lw s4,0x38(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 443
|
||||
80090594 lw s3,0x34(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 444
|
||||
80090598 lw s2,0x30(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 445
|
||||
8009059C lw s1,0x2C(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 446
|
||||
800905A0 lw s0,0x28(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 447
|
||||
800905A4 jr ra ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 449
|
||||
800905A8 addiu sp,sp,0x50 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 450
|
||||
800905AC makecharpixelscustom: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 4
|
||||
800905AC addiu sp,sp,-0x18 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 6
|
||||
800905B0 move a1,a0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 7
|
||||
800905B4 lui a0,0x1F80 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 8
|
||||
800905B8 ori a0,a0,0x358 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 9
|
||||
800905BC sw ra,0x10(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 11
|
||||
800905C0 ori a2,r0,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 13
|
||||
800905C4 lbu t2,0xAC(gp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 15
|
||||
800905C8 move t0,r4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 16
|
||||
800905CC lui v1,-0x7FE1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 17
|
||||
800905D0 ori v1,v1,-0x5600 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 18
|
||||
800905D4 sll v0,a1,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 19
|
||||
800905D8 addu v0,v0,a1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 20
|
||||
800905DC sll v0,v0,0x2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 21
|
||||
800905E0 addu t1,v0,v1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 22
|
||||
800905E4 ori r6,r0,0x6 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 23
|
||||
800905E8 move v0,r6 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 24
|
||||
800905EC beq v0,zero,0x800906AC ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 25
|
||||
800905F0 addiu r6,r6,-0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 26
|
||||
800905F4 lui a3,0x1F80 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 27
|
||||
800905F8 ori a3,a3,0x2E0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 28
|
||||
800905FC charloop: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 29
|
||||
800905FC lhu v1,0x0(t1) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 30
|
||||
80090600 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 31
|
||||
80090604 andi r4,v1,0xF ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 32
|
||||
80090608 srl v1,v1,0x4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 33
|
||||
8009060C andi v0,v1,0xF ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 34
|
||||
80090610 sll v0,v0,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 35
|
||||
80090614 addu v0,v0,a3 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 36
|
||||
80090618 lhu v0,0x0(v0) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 37
|
||||
8009061C nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 38
|
||||
80090620 mult v0,t2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 39
|
||||
80090624 sll r4,r4,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 40
|
||||
80090628 addu r4,r4,a3 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 41
|
||||
8009062C mflo a1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 42
|
||||
80090630 lhu v0,0x0(r4) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 43
|
||||
80090634 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 44
|
||||
80090638 mult v0,t2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 45
|
||||
8009063C srl v1,v1,0x4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 46
|
||||
80090640 andi r4,v1,0xF ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 47
|
||||
80090644 srl v1,v1,0x4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 48
|
||||
80090648 sll v1,v1,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 49
|
||||
8009064C addu v1,v1,a3 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 50
|
||||
80090650 sll v0,a1,0x10 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 51
|
||||
80090654 mflo t4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 52
|
||||
80090658 or v0,t4,v0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 53
|
||||
8009065C sw v0,0x0(t0) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 54
|
||||
80090660 lhu v0,0x0(v1) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 55
|
||||
80090664 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 56
|
||||
80090668 mult v0,t2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 57
|
||||
8009066C sll r4,r4,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 58
|
||||
80090670 addu r4,r4,a3 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 59
|
||||
80090674 mflo a1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 60
|
||||
80090678 lhu v0,0x0(r4) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 61
|
||||
8009067C nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 62
|
||||
80090680 mult v0,t2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 63
|
||||
80090684 addiu t1,t1,0x2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 64
|
||||
80090688 move v1,a2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 65
|
||||
8009068C addiu a2,a2,-0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 66
|
||||
80090690 addiu t0,t0,0x4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 67
|
||||
80090694 sll v0,a1,0x10 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 68
|
||||
80090698 mflo t4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 69
|
||||
8009069C or v0,t4,v0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 70
|
||||
800906A0 sw v0,0x0(t0) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 71
|
||||
800906A4 bne v1,zero,0x800905FC ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 72
|
||||
800906A8 addiu t0,t0,0x4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 73
|
||||
800906AC charloaded: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 74
|
||||
800906AC lbu v1,0xAD(gp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 76
|
||||
800906B0 ori v0,r0,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 77
|
||||
800906B4 bne v1,v0,0x800906C8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 78
|
||||
800906B8 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 79
|
||||
800906BC lui a0,0x1F80 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 80
|
||||
800906C0 jal 0x8001A20C ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 81
|
||||
800906C4 ori a0,a0,0x358 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 82
|
||||
800906C8 notshadow: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 84
|
||||
800906C8 lw ra,0x10(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 85
|
||||
800906CC nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 86
|
||||
800906D0 jr ra ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 87
|
||||
800906D4 addiu sp,sp,0x18 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charload.asm line 88
|
||||
800906D8 returncharsinstring: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 1
|
||||
800906D8 lhu v0,0x0(a0) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 4
|
||||
800906DC nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 5
|
||||
800906E0 srl v0,v0,0xD ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 6
|
||||
800906E4 bne v0,zero,0x800906F4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 7
|
||||
800906E8 clear v1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 8
|
||||
800906EC j 0x80090724 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 11
|
||||
800906F0 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 12
|
||||
800906F4 ismy1bytestring: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 13
|
||||
800906F4 lhu v0,0x0(a0) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 14
|
||||
800906F8 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 15
|
||||
800906FC andi v0,v0,0xFF ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 16
|
||||
80090700 andi v1,v0,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 18
|
||||
80090704 beq v1,zero,0x80090710 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 19
|
||||
80090708 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 20
|
||||
8009070C addiu v0,v0,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 21
|
||||
80090710 notand1: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 23
|
||||
80090710 sra v0,v0,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 24
|
||||
80090714 addiu v0,v0,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 25
|
||||
80090718 jr ra ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 26
|
||||
8009071C move v1,v0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 27
|
||||
80090720 getnewchar: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 29
|
||||
80090720 addiu v1,v1,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 30
|
||||
80090724 startreading: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 31
|
||||
80090724 lhu v0,0x0(a0) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 32
|
||||
80090728 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 33
|
||||
8009072C sltiu v0,v0,0x1000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 34
|
||||
80090730 bne v0,zero,0x80090720 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 35
|
||||
80090734 addiu a0,a0,0x2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 36
|
||||
80090738 jr ra ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 37
|
||||
8009073C move v0,v1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 38
|
||||
80090740 calcnextxcustom: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 41
|
||||
80090740 addiu sp,sp,-0x18 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 42
|
||||
80090744 sw ra,0x10(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 43
|
||||
80090748 lhu v0,0x0(a0) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 45
|
||||
8009074C nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 46
|
||||
80090750 andi v1,v0,0xFF ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 47
|
||||
80090754 srl v0,v0,0xD ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 48
|
||||
80090758 beq v0,zero,0x80090768 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 49
|
||||
8009075C nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 50
|
||||
80090760 j 0x80090770 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 51
|
||||
80090764 move v0,v1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 52
|
||||
80090768 japoldtext: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 53
|
||||
80090768 jal 0x800906D8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 54
|
||||
8009076C nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 55
|
||||
80090770 ihavestringlength: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 56
|
||||
80090770 sll v1,v0,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 57
|
||||
80090774 addu v1,v1,v0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 58
|
||||
80090778 lw ra,0x10(sp) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 59
|
||||
8009077C sll v0,v1,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 60
|
||||
80090780 jr ra ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 61
|
||||
80090784 addiu sp,sp,0x18 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 62
|
||||
80090788 retuncharstocity: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 64
|
||||
80090788 lhu v0,0x0(a0) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 65
|
||||
8009078C nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 66
|
||||
80090790 srl v0,v0,0xD ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 67
|
||||
80090794 bne v0,zero,0x800907A4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 68
|
||||
80090798 clear v1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 69
|
||||
8009079C j 0x80090724 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 71
|
||||
800907A0 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 72
|
||||
800907A4 ismy1bytecity: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 73
|
||||
800907A4 lhu v0,0x0(a0) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 74
|
||||
800907A8 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 75
|
||||
800907AC andi v0,v0,0xFF ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 76
|
||||
800907B0 jr ra ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 77
|
||||
800907B4 move v1,v0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 78
|
||||
800907B8 retuncharstocitydiv2: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 81
|
||||
800907B8 lhu v0,0x0(a0) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 82
|
||||
800907BC nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 83
|
||||
800907C0 srl v0,v0,0xD ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 84
|
||||
800907C4 bne v0,zero,0x800907D4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 85
|
||||
800907C8 clear v1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 86
|
||||
800907CC j 0x80090724 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 88
|
||||
800907D0 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 89
|
||||
800907D4 ismy1bytecitydiv2: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 90
|
||||
800907D4 lhu v0,0x0(a0) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 91
|
||||
800907D8 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 92
|
||||
800907DC andi v0,v0,0xFF ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 93
|
||||
800907E0 andi v1,v0,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 95
|
||||
800907E4 beq v1,zero,0x800907F0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 96
|
||||
800907E8 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 97
|
||||
800907EC addiu v0,v0,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 98
|
||||
800907F0 notand1_2: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 100
|
||||
800907F0 sra v0,v0,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 101
|
||||
800907F4 jr ra ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 103
|
||||
800907F8 move v1,v0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\charCalcs.asm line 104
|
||||
800907FC .close ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\main.asm line 458
|
||||
FFFFFFFF .open ""C:\\Users\\ShemetSA.RADIO\\Documents\\GitHub\\p2is_asm\\0001_BATTLE_CODE.bin"",0x800AB000; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 3
|
||||
800AB000 .org 0x800F9E60 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 6
|
||||
800F9E60 lhu r2,0x0(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 8
|
||||
800F9E64 addiu r5,0x2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 9
|
||||
800F9E68 sh r2,0x0(r4) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 10
|
||||
800F9E6C andi r3,r2,0xFF ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 11
|
||||
800F9E70 addiu r4,0x2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 12
|
||||
800F9E74 nextch: ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 13
|
||||
800F9E74 lbu r2,0x0(r5) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 14
|
||||
800F9E78 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 15
|
||||
800F9E7C sb r2,0x0(r4) ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 16
|
||||
800F9E80 addiu r4,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 17
|
||||
800F9E84 addiu r5,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 18
|
||||
800F9E88 addiu r3,-0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 19
|
||||
800F9E8C bne r3,zero,0x800F9E74 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 20
|
||||
800F9E90 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 21
|
||||
800F9E94 jr ra ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 22
|
||||
800F9E98 .org 0x800AD4E8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 25
|
||||
800AD4E8 jal 0x800F9E60 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 30
|
||||
800AD4EC .close ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\battle_patch.asm line 33
|
||||
FFFFFFFF .open ""C:\\Users\\ShemetSA.RADIO\\Documents\\GitHub\\p2is_asm\\SLPS_021.00"",0x8000F800; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 7
|
||||
8000F800 .org 0x8001BFD4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 10
|
||||
8001BFD4 ori r5,r0,0x0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 11
|
||||
8001BFD8 .org 0x8001957C ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 16
|
||||
8001957C addiu v0,v0,0x6 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 17
|
||||
80019580 .org 0x8001AF38 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 20
|
||||
8001AF38 sll r2,r3,0x2 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 21
|
||||
8001AF3C .org 0x8007B195 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 24
|
||||
8007B195 .byte 0x04 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 25
|
||||
8007B196 .org 0x8001C398 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 31
|
||||
8001C398 jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 32
|
||||
8001C39C .org 0x8001C40C ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 33
|
||||
8001C40C jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 34
|
||||
8001C410 .org 0x8001D058 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 37
|
||||
8001D058 jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 38
|
||||
8001D05C .org 0x8001D0D8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 39
|
||||
8001D0D8 jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 40
|
||||
8001D0DC .org 0x8001C688 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 43
|
||||
8001C688 jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 44
|
||||
8001C68C .org 0x8001AEF4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 49
|
||||
8001AEF4 j 0x800906D8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 50
|
||||
8001AEF8 clear v1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 51
|
||||
8001AEFC .org 0x8001AF1C ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 55
|
||||
8001AF1C j 0x80090740 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 58
|
||||
8001AF20 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 59
|
||||
8001AF24 .close ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 61
|
||||
FFFFFFFF .open ""C:\\Users\\ShemetSA.RADIO\\Documents\\GitHub\\p2is_asm\\1096_J_MENU_Settings_Code.bin"",0x800A2000; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 66
|
||||
800A2000 .org 0x800A2658 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 68
|
||||
800A2658 ori a1,r0,0x5C ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 69
|
||||
800A265C .org 0x800A2678 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 70
|
||||
800A2678 jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 71
|
||||
800A267C .org 0x800A2690 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 72
|
||||
800A2690 jal 0x8001AFC0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 73
|
||||
800A2694 .org 0x800A26AC ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 76
|
||||
800A26AC jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 77
|
||||
800A26B0 .org 0x800A26E8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 78
|
||||
800A26E8 jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 79
|
||||
800A26EC .org 0x800A298C ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 80
|
||||
800A298C jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 81
|
||||
800A2990 .org 0x800A29B8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 82
|
||||
800A29B8 jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 83
|
||||
800A29BC .org 0x800A29F4 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 84
|
||||
800A29F4 jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 85
|
||||
800A29F8 .org 0x800A2A44 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 86
|
||||
800A2A44 jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 87
|
||||
800A2A48 .org 0x800A2D20 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 88
|
||||
800A2D20 jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 89
|
||||
800A2D24 .org 0x800A2D4C ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 90
|
||||
800A2D4C jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 91
|
||||
800A2D50 .org 0x800A2D7C ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 92
|
||||
800A2D7C jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 93
|
||||
800A2D80 .org 0x800A3090 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 94
|
||||
800A3090 jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 95
|
||||
800A3094 .org 0x800A30CC ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 96
|
||||
800A30CC jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 97
|
||||
800A30D0 .org 0x800A35AC ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 98
|
||||
800A35AC jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 99
|
||||
800A35B0 .org 0x800A35E0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 100
|
||||
800A35E0 jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 101
|
||||
800A35E4 .org 0x800A3624 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 102
|
||||
800A3624 jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 103
|
||||
800A3628 .org 0x800A3658 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 104
|
||||
800A3658 jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 105
|
||||
800A365C .org 0x800A369C ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 106
|
||||
800A369C jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 107
|
||||
800A36A0 .org 0x800A36D0 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 108
|
||||
800A36D0 jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 109
|
||||
800A36D4 .org 0x800A3704 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 110
|
||||
800A3704 jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 111
|
||||
800A3708 .org 0x800A3734 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 112
|
||||
800A3734 jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 113
|
||||
800A3738 .org 0x800A3BA8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 114
|
||||
800A3BA8 jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 115
|
||||
800A3BAC .org 0x800A3BDC ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 116
|
||||
800A3BDC jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 117
|
||||
800A3BE0 .org 0x800A3C20 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 118
|
||||
800A3C20 jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 119
|
||||
800A3C24 .org 0x800A3C4C ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 120
|
||||
800A3C4C jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 121
|
||||
800A3C50 .org 0x800A3C90 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 122
|
||||
800A3C90 jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 123
|
||||
800A3C94 .org 0x800A3CBC ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 124
|
||||
800A3CBC jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 125
|
||||
800A3CC0 .org 0x800A4310 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 126
|
||||
800A4310 jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 127
|
||||
800A4314 .org 0x800A435C ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 128
|
||||
800A435C jal 0x80090000 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 129
|
||||
800A4360 .close ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 131
|
||||
FFFFFFFF .open ""C:\\Users\\ShemetSA.RADIO\\Documents\\GitHub\\p2is_asm\\1119_CITY_CODE_patched.bin"",0x800AB000; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 136
|
||||
800AB000 .org 0x800AD320 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 140
|
||||
800AD320 nop ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 141
|
||||
800AD324 .org 0x800AD328 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 144
|
||||
800AD328 sll a1,0x1 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 145
|
||||
800AD32C .org 0x800AD360 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 147
|
||||
800AD360 addiu a1,a1,0x5 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 148
|
||||
800AD364 .org 0x800AD30C ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 152
|
||||
800AD30C jal 0x80090788 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 153
|
||||
800AD310 .org 0x800AD3AC ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 157
|
||||
800AD3AC jal 0x80090788 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 158
|
||||
800AD3B0 .org 0x800AF1DC ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 161
|
||||
800AF1DC jal 0x800907B8 ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 162
|
||||
800AF1E0 .close ; C:\Users\ShemetSA.RADIO\Documents\GitHub\p2is_asm\txtpatches.asm line 166
|
||||
47
4bitPattern.asm
Normal file
47
4bitPattern.asm
Normal file
@@ -0,0 +1,47 @@
|
||||
;4bit table pattern
|
||||
lui t8,0x1f80
|
||||
ori t8,t8,0x2e0 ;Pattern addr 1f8002e0
|
||||
addiu t7,v0,0x3e8 ;r15 = 800103e8
|
||||
|
||||
lwl t5,0x3(t7)
|
||||
lwr t5,0x0(t7)
|
||||
lwl t6,0x7(t7)
|
||||
lwr t6,0x4(t7)
|
||||
|
||||
swl t5,0x3(t8)
|
||||
swr t5,0x0(t8)
|
||||
swl t6,0x7(t8)
|
||||
swr t6,0x4(t8)
|
||||
|
||||
|
||||
lwl t5,0xb(t7)
|
||||
lwr t5,0x8(t7)
|
||||
lwl t6,0xf(t7)
|
||||
lwr t6,0xc(t7)
|
||||
|
||||
swl t5,0xb(t8)
|
||||
swr t5,0x8(t8)
|
||||
swl t6,0xf(t8)
|
||||
swr t6,0xc(t8)
|
||||
|
||||
|
||||
lwl t5,0x13(t7)
|
||||
lwr t5,0x10(t7)
|
||||
lwl t6,0x17(t7)
|
||||
lwr t6,0x14(t7)
|
||||
|
||||
swl t5,0x13(t8)
|
||||
swr t5,0x10(t8)
|
||||
swl t6,0x17(t8)
|
||||
swr t6,0x14(t8)
|
||||
|
||||
|
||||
lwl t5,0x1b(t7)
|
||||
lwr t5,0x18(t7)
|
||||
lwl t6,0x1f(t7)
|
||||
lwr t6,0x1c(t7)
|
||||
|
||||
swl t5,0x1b(t8)
|
||||
swr t5,0x18(t8)
|
||||
swl t6,0x1f(t8)
|
||||
swr t6,0x1c(t8)
|
||||
49
EP_4bitPattern.asm
Normal file
49
EP_4bitPattern.asm
Normal file
@@ -0,0 +1,49 @@
|
||||
;4bit table pattern
|
||||
|
||||
lui v0,0x8001
|
||||
lui t9,0x1f80
|
||||
ori t9,t9,0x2e0 ;Pattern addr 1f8002e0
|
||||
addiu t8,v0,0x5fc ;r15 = 800105fc
|
||||
|
||||
lwl t5,0x3(t8)
|
||||
lwr t5,0x0(t8)
|
||||
lwl t7,0x7(t8)
|
||||
lwr t7,0x4(t8)
|
||||
|
||||
swl t5,0x3(t9)
|
||||
swr t5,0x0(t9)
|
||||
swl t7,0x7(t9)
|
||||
swr t7,0x4(t9)
|
||||
|
||||
|
||||
lwl t5,0xb(t8)
|
||||
lwr t5,0x8(t8)
|
||||
lwl t7,0xf(t8)
|
||||
lwr t7,0xc(t8)
|
||||
|
||||
swl t5,0xb(t9)
|
||||
swr t5,0x8(t9)
|
||||
swl t7,0xf(t9)
|
||||
swr t7,0xc(t9)
|
||||
|
||||
|
||||
lwl t5,0x13(t8)
|
||||
lwr t5,0x10(t8)
|
||||
lwl t7,0x17(t8)
|
||||
lwr t7,0x14(t8)
|
||||
|
||||
swl t5,0x13(t9)
|
||||
swr t5,0x10(t9)
|
||||
swl t7,0x17(t9)
|
||||
swr t7,0x14(t9)
|
||||
|
||||
|
||||
lwl t5,0x1b(t8)
|
||||
lwr t5,0x18(t8)
|
||||
lwl t7,0x1f(t8)
|
||||
lwr t7,0x1c(t8)
|
||||
|
||||
swl t5,0x1b(t9)
|
||||
swr t5,0x18(t9)
|
||||
swl t7,0x1f(t9)
|
||||
swr t7,0x1c(t9)
|
||||
160
EP_CharLoadBIG_SRC.asm
Normal file
160
EP_CharLoadBIG_SRC.asm
Normal file
@@ -0,0 +1,160 @@
|
||||
**************************************************************
|
||||
* FUNCTION *
|
||||
**************************************************************
|
||||
undefined MakeCharInScratch()
|
||||
assume gp = 0x8007c970
|
||||
undefined v0:1 <RETURN>
|
||||
undefined4 Stack[-0x8]:4 local_8 XREF[2]: 8001a96c(W),
|
||||
8001aa40(R)
|
||||
MakeCharInScratch XREF[1]: DrawCharLine_1a3a8:8001a608(c)
|
||||
8001a95c e8 ff bd 27 addiu sp,sp,-0x18
|
||||
assume gp = <UNKNOWN>
|
||||
8001a960 21 28 80 00 move a1,a0
|
||||
8001a964 80 1f 04 3c lui a0,0x1f80
|
||||
8001a968 00 03 84 34 ori a0=>DAT_1f800300,a0,0x300 = ??
|
||||
8001a96c 10 00 bf af sw ra,local_8(sp)
|
||||
8001a970 65 6c 00 0c jal makeCharPixels undefined makeCharPixels()
|
||||
8001a974 21 30 00 00 _clear a2
|
||||
8001a978 a5 00 83 93 lbu v1,0xa5(gp)=>DAT_8007ca15
|
||||
8001a97c 01 00 02 24 li v0,0x1
|
||||
8001a980 03 00 62 14 bne v1,v0,LAB_8001a990
|
||||
8001a984 80 1f 04 3c _lui a0,0x1f80
|
||||
8001a988 94 6a 00 0c jal MakeCharShadow undefined MakeCharShadow()
|
||||
8001a98c 00 03 84 34 _ori a0=>DAT_1f800300,a0,0x300 = ??
|
||||
LAB_8001a990 XREF[1]: 8001a980(j)
|
||||
8001a990 80 1f 03 3c lui v1,0x1f80
|
||||
8001a994 58 03 63 34 ori v1,v1,0x358
|
||||
8001a998 80 1f 02 3c lui v0,0x1f80
|
||||
8001a99c 00 03 42 34 ori v0,v0,0x300
|
||||
8001a9a0 80 1f 04 3c lui a0,0x1f80
|
||||
8001a9a4 20 03 84 34 ori a0,a0,0x320
|
||||
LAB_8001a9a8 XREF[1]: 8001a9cc(j)
|
||||
8001a9a8 00 00 47 8c lw a3,0x0(v0)=>DAT_1f800300 = ??
|
||||
8001a9ac 04 00 48 8c lw t0,offset DAT_1f800304(v0) = ??
|
||||
8001a9b0 08 00 49 8c lw t1,offset DAT_1f800308(v0) = ??
|
||||
8001a9b4 0c 00 4a 8c lw t2,offset DAT_1f80030c(v0) = ??
|
||||
8001a9b8 00 00 67 ac sw a3,0x0(v1)=>DAT_1f800358 = ??
|
||||
8001a9bc 04 00 68 ac sw t0,0x4(v1)=>DAT_1f80035c = ??
|
||||
8001a9c0 08 00 69 ac sw t1,0x8(v1)=>DAT_1f800360 = ??
|
||||
8001a9c4 0c 00 6a ac sw t2,0xc(v1)=>DAT_1f800364 = ??
|
||||
8001a9c8 10 00 42 24 addiu v0,v0,0x10
|
||||
8001a9cc f6 ff 44 14 bne v0,a0,LAB_8001a9a8
|
||||
8001a9d0 10 00 63 24 _addiu v1,v1,0x10
|
||||
8001a9d4 03 00 47 88 lwl a3,0x3(v0)
|
||||
8001a9d8 00 00 47 98 lwr a3,0x0(v0)=>DAT_1f800310 = ??
|
||||
8001a9dc 00 00 00 00 nop
|
||||
8001a9e0 03 00 67 a8 swl a3,0x3(v1)
|
||||
8001a9e4 00 00 67 b8 swr a3,0x0(v1)=>DAT_1f800368 = ??
|
||||
8001a9e8 80 1f 03 3c lui v1,0x1f80
|
||||
8001a9ec 9c 03 63 34 ori v1,v1,0x39c
|
||||
8001a9f0 80 1f 02 3c lui v0,0x1f80
|
||||
8001a9f4 24 03 42 34 ori v0,v0,0x324
|
||||
8001a9f8 80 1f 04 3c lui a0,0x1f80
|
||||
8001a9fc 44 03 84 34 ori a0,a0,0x344
|
||||
LAB_8001aa00 XREF[1]: 8001aa24(j)
|
||||
8001aa00 00 00 47 8c lw a3,0x0(v0)=>DAT_1f800324 = ??
|
||||
8001aa04 04 00 48 8c lw t0,0x4(v0)=>DAT_1f800328 = ??
|
||||
8001aa08 08 00 49 8c lw t1,0x8(v0)=>DAT_1f80032c = ??
|
||||
8001aa0c 0c 00 4a 8c lw t2,0xc(v0)=>DAT_1f800330 = ??
|
||||
8001aa10 00 00 67 ac sw a3,0x0(v1)=>DAT_1f80039c = ??
|
||||
8001aa14 04 00 68 ac sw t0,0x4(v1)=>DAT_1f8003a0 = ??
|
||||
8001aa18 08 00 69 ac sw t1,0x8(v1)=>DAT_1f8003a4 = ??
|
||||
8001aa1c 0c 00 6a ac sw t2,0xc(v1)=>DAT_1f8003a8 = ??
|
||||
8001aa20 10 00 42 24 addiu v0=>DAT_1f800334,v0,0x10 = ??
|
||||
8001aa24 f6 ff 44 14 bne v0,a0,LAB_8001aa00
|
||||
8001aa28 10 00 63 24 _addiu v1,v1,0x10
|
||||
8001aa2c 03 00 47 88 lwl a3,0x3(v0)
|
||||
8001aa30 00 00 47 98 lwr a3,0x0(v0)=>DAT_1f800334 = ??
|
||||
8001aa34 00 00 00 00 nop
|
||||
8001aa38 03 00 67 a8 swl a3,0x3(v1)
|
||||
8001aa3c 00 00 67 b8 swr a3,0x0(v1)=>DAT_1f8003ac = ??
|
||||
8001aa40 10 00 bf 8f lw ra,local_8(sp)
|
||||
8001aa44 00 00 00 00 nop
|
||||
8001aa48 08 00 e0 03 jr ra
|
||||
8001aa4c 18 00 bd 27 _addiu sp,sp,0x18
|
||||
|
||||
|
||||
**************************************************************
|
||||
* FUNCTION *
|
||||
**************************************************************
|
||||
undefined makeCharPixels()
|
||||
assume gp = 0x8007c970
|
||||
undefined v0:1 <RETURN>
|
||||
makeCharPixels XREF[4]: FUN_80016a5c:80016ad0(c),
|
||||
MakeCharInScratch:8001a970(c),
|
||||
GenerateSmallChar:8001b334(c),
|
||||
FUN_8001c0c8:8001c0d8(c)
|
||||
8001b194 a4 00 8a 93 lbu t2,0xa4(gp)=>DAT_8007ca14
|
||||
assume gp = <UNKNOWN>
|
||||
8001b198 09 00 c0 14 bne a2,zero,LAB_8001b1c0
|
||||
8001b19c 21 40 80 00 _move t0,a0
|
||||
8001b1a0 1e 80 03 3c lui v1,0x801e
|
||||
8001b1a4 80 f4 63 34 ori v1,v1,0xf480
|
||||
8001b1a8 c0 10 05 00 sll v0,a1,0x3
|
||||
8001b1ac 21 10 45 00 addu v0,v0,a1
|
||||
8001b1b0 40 10 02 00 sll v0,v0,0x1
|
||||
8001b1b4 21 48 43 00 addu t1,v0,v1
|
||||
8001b1b8 77 6c 00 08 j LAB_8001b1dc
|
||||
8001b1bc 09 00 06 24 _li a2,0x9
|
||||
LAB_8001b1c0 XREF[1]: 8001b198(j)
|
||||
8001b1c0 1e 80 03 3c lui v1,0x801e
|
||||
8001b1c4 00 f0 63 34 ori v1,v1,0xf000
|
||||
8001b1c8 40 10 05 00 sll v0,a1,0x1
|
||||
8001b1cc 21 10 45 00 addu v0,v0,a1
|
||||
8001b1d0 80 10 02 00 sll v0,v0,0x2
|
||||
8001b1d4 21 48 43 00 addu t1,v0,v1
|
||||
8001b1d8 06 00 06 24 li a2,0x6
|
||||
LAB_8001b1dc XREF[1]: 8001b1b8(j)
|
||||
8001b1dc 21 10 c0 00 move v0,a2
|
||||
8001b1e0 2f 00 40 10 beq v0,zero,LAB_8001b2a0
|
||||
8001b1e4 ff ff c6 24 _addiu a2,a2,-0x1
|
||||
8001b1e8 80 1f 07 3c lui a3,0x1f80
|
||||
8001b1ec e0 02 e7 34 ori a3,a3,0x2e0
|
||||
LAB_8001b1f0 XREF[1]: 8001b298(j)
|
||||
8001b1f0 00 00 23 95 lhu v1=>DAT_801ef480,0x0(t1)=>DAT_801ef482 = ??
|
||||
8001b1f4 00 00 00 00 nop
|
||||
8001b1f8 0f 00 64 30 andi a0,v1,0xf
|
||||
8001b1fc 02 19 03 00 srl v1,v1,0x4
|
||||
8001b200 0f 00 62 30 andi v0,v1,0xf
|
||||
8001b204 40 10 02 00 sll v0,v0,0x1
|
||||
8001b208 21 10 47 00 addu v0,v0,a3
|
||||
8001b20c 00 00 42 94 lhu v0,0x0(v0)=>DAT_1f8002e0 = ??
|
||||
8001b210 00 00 00 00 nop
|
||||
8001b214 18 00 4a 00 mult v0,t2
|
||||
8001b218 40 20 04 00 sll a0,a0,0x1
|
||||
8001b21c 21 20 87 00 addu a0,a0,a3
|
||||
8001b220 12 28 00 00 mflo a1
|
||||
8001b224 00 00 82 94 lhu v0,0x0(a0)=>DAT_1f8002e0 = ??
|
||||
8001b228 00 00 00 00 nop
|
||||
8001b22c 18 00 4a 00 mult v0,t2
|
||||
8001b230 02 19 03 00 srl v1,v1,0x4
|
||||
8001b234 0f 00 64 30 andi a0,v1,0xf
|
||||
8001b238 02 19 03 00 srl v1,v1,0x4
|
||||
8001b23c 40 18 03 00 sll v1,v1,0x1
|
||||
8001b240 21 18 67 00 addu v1,v1,a3
|
||||
8001b244 00 14 05 00 sll v0,a1,0x10
|
||||
8001b248 12 60 00 00 mflo t4
|
||||
8001b24c 25 10 82 01 or v0,t4,v0
|
||||
8001b250 00 00 02 ad sw v0,0x0(t0)
|
||||
8001b254 00 00 62 94 lhu v0,0x0(v1)=>DAT_1f8002e0 = ??
|
||||
8001b258 00 00 00 00 nop
|
||||
8001b25c 18 00 4a 00 mult v0,t2
|
||||
8001b260 40 20 04 00 sll a0,a0,0x1
|
||||
8001b264 21 20 87 00 addu a0,a0,a3
|
||||
8001b268 12 28 00 00 mflo a1
|
||||
8001b26c 00 00 82 94 lhu v0,0x0(a0)=>DAT_1f8002e0 = ??
|
||||
8001b270 00 00 00 00 nop
|
||||
8001b274 18 00 4a 00 mult v0,t2
|
||||
8001b278 02 00 29 25 addiu t1,t1,0x2
|
||||
8001b27c 21 18 c0 00 move v1,a2
|
||||
8001b280 ff ff c6 24 addiu a2,a2,-0x1
|
||||
8001b284 04 00 08 25 addiu t0,t0,0x4
|
||||
8001b288 00 14 05 00 sll v0,a1,0x10
|
||||
8001b28c 12 60 00 00 mflo t4
|
||||
8001b290 25 10 82 01 or v0,t4,v0
|
||||
8001b294 00 00 02 ad sw v0,0x0(t0)
|
||||
8001b298 d5 ff 60 14 bne v1,zero,LAB_8001b1f0
|
||||
8001b29c 04 00 08 25 _addiu t0,t0,0x4
|
||||
LAB_8001b2a0 XREF[1]: 8001b1e0(j)
|
||||
8001b2a0 08 00 e0 03 jr ra
|
||||
8001b2a4 00 00 00 00 _nop
|
||||
116
EP_CharLoadSML_SRC.asm
Normal file
116
EP_CharLoadSML_SRC.asm
Normal file
@@ -0,0 +1,116 @@
|
||||
**************************************************************
|
||||
* FUNCTION *
|
||||
**************************************************************
|
||||
undefined GenerateSmallChar()
|
||||
assume gp = 0x8007c970
|
||||
undefined v0:1 <RETURN>
|
||||
undefined4 Stack[-0x8]:4 local_8 XREF[2]: 8001b330(W),
|
||||
8001b358(R)
|
||||
GenerateSmallChar XREF[2]: MakeSmallChar:8001ae38(c),
|
||||
FUN_8001c3a4:8001c548(c)
|
||||
8001b320 e8 ff bd 27 addiu sp,sp,-0x18
|
||||
assume gp = <UNKNOWN>
|
||||
8001b324 21 28 80 00 move a1,a0
|
||||
8001b328 80 1f 04 3c lui a0,0x1f80
|
||||
8001b32c 58 03 84 34 ori a0=>DAT_1f800358,a0,0x358 = ??
|
||||
8001b330 10 00 bf af sw ra,local_8(sp)
|
||||
8001b334 65 6c 00 0c jal makeCharPixels undefined makeCharPixels()
|
||||
8001b338 01 00 06 24 _li a2,0x1
|
||||
8001b33c a5 00 83 93 lbu v1,0xa5(gp)=>DAT_8007ca15
|
||||
8001b340 01 00 02 24 li v0,0x1
|
||||
8001b344 04 00 62 14 bne v1,v0,LAB_8001b358
|
||||
8001b348 00 00 00 00 _nop
|
||||
8001b34c 80 1f 04 3c lui a0,0x1f80
|
||||
8001b350 aa 6c 00 0c jal MakeCharShadow undefined MakeCharShadow()
|
||||
8001b354 58 03 84 34 _ori a0=>DAT_1f800358,a0,0x358 = ??
|
||||
LAB_8001b358 XREF[1]: 8001b344(j)
|
||||
8001b358 10 00 bf 8f lw ra,local_8(sp)
|
||||
8001b35c 00 00 00 00 nop
|
||||
8001b360 08 00 e0 03 jr ra
|
||||
8001b364 18 00 bd 27 _addiu sp,sp,0x18
|
||||
|
||||
|
||||
**************************************************************
|
||||
* FUNCTION *
|
||||
**************************************************************
|
||||
undefined makeCharPixels()
|
||||
assume gp = 0x8007c970
|
||||
undefined v0:1 <RETURN>
|
||||
makeCharPixels XREF[4]: FUN_80016a5c:80016ad0(c),
|
||||
MakeCharInScratch:8001a970(c),
|
||||
GenerateSmallChar:8001b334(c),
|
||||
FUN_8001c0c8:8001c0d8(c)
|
||||
8001b194 a4 00 8a 93 lbu t2,0xa4(gp)=>DAT_8007ca14
|
||||
assume gp = <UNKNOWN>
|
||||
8001b198 09 00 c0 14 bne a2,zero,LAB_8001b1c0
|
||||
8001b19c 21 40 80 00 _move t0,a0
|
||||
8001b1a0 1e 80 03 3c lui v1,0x801e
|
||||
8001b1a4 80 f4 63 34 ori v1,v1,0xf480
|
||||
8001b1a8 c0 10 05 00 sll v0,a1,0x3
|
||||
8001b1ac 21 10 45 00 addu v0,v0,a1
|
||||
8001b1b0 40 10 02 00 sll v0,v0,0x1
|
||||
8001b1b4 21 48 43 00 addu t1,v0,v1
|
||||
8001b1b8 77 6c 00 08 j LAB_8001b1dc
|
||||
8001b1bc 09 00 06 24 _li a2,0x9
|
||||
LAB_8001b1c0 XREF[1]: 8001b198(j)
|
||||
8001b1c0 1e 80 03 3c lui v1,0x801e
|
||||
8001b1c4 00 f0 63 34 ori v1,v1,0xf000
|
||||
8001b1c8 40 10 05 00 sll v0,a1,0x1
|
||||
8001b1cc 21 10 45 00 addu v0,v0,a1
|
||||
8001b1d0 80 10 02 00 sll v0,v0,0x2
|
||||
8001b1d4 21 48 43 00 addu t1,v0,v1
|
||||
8001b1d8 06 00 06 24 li a2,0x6
|
||||
LAB_8001b1dc XREF[1]: 8001b1b8(j)
|
||||
8001b1dc 21 10 c0 00 move v0,a2
|
||||
8001b1e0 2f 00 40 10 beq v0,zero,LAB_8001b2a0
|
||||
8001b1e4 ff ff c6 24 _addiu a2,a2,-0x1
|
||||
8001b1e8 80 1f 07 3c lui a3,0x1f80
|
||||
8001b1ec e0 02 e7 34 ori a3,a3,0x2e0
|
||||
LAB_8001b1f0 XREF[1]: 8001b298(j)
|
||||
8001b1f0 00 00 23 95 lhu v1=>DAT_801ef480,0x0(t1)=>DAT_801ef482 = ??
|
||||
8001b1f4 00 00 00 00 nop
|
||||
8001b1f8 0f 00 64 30 andi a0,v1,0xf
|
||||
8001b1fc 02 19 03 00 srl v1,v1,0x4
|
||||
8001b200 0f 00 62 30 andi v0,v1,0xf
|
||||
8001b204 40 10 02 00 sll v0,v0,0x1
|
||||
8001b208 21 10 47 00 addu v0,v0,a3
|
||||
8001b20c 00 00 42 94 lhu v0,0x0(v0)=>DAT_1f8002e0 = ??
|
||||
8001b210 00 00 00 00 nop
|
||||
8001b214 18 00 4a 00 mult v0,t2
|
||||
8001b218 40 20 04 00 sll a0,a0,0x1
|
||||
8001b21c 21 20 87 00 addu a0,a0,a3
|
||||
8001b220 12 28 00 00 mflo a1
|
||||
8001b224 00 00 82 94 lhu v0,0x0(a0)=>DAT_1f8002e0 = ??
|
||||
8001b228 00 00 00 00 nop
|
||||
8001b22c 18 00 4a 00 mult v0,t2
|
||||
8001b230 02 19 03 00 srl v1,v1,0x4
|
||||
8001b234 0f 00 64 30 andi a0,v1,0xf
|
||||
8001b238 02 19 03 00 srl v1,v1,0x4
|
||||
8001b23c 40 18 03 00 sll v1,v1,0x1
|
||||
8001b240 21 18 67 00 addu v1,v1,a3
|
||||
8001b244 00 14 05 00 sll v0,a1,0x10
|
||||
8001b248 12 60 00 00 mflo t4
|
||||
8001b24c 25 10 82 01 or v0,t4,v0
|
||||
8001b250 00 00 02 ad sw v0,0x0(t0)
|
||||
8001b254 00 00 62 94 lhu v0,0x0(v1)=>DAT_1f8002e0 = ??
|
||||
8001b258 00 00 00 00 nop
|
||||
8001b25c 18 00 4a 00 mult v0,t2
|
||||
8001b260 40 20 04 00 sll a0,a0,0x1
|
||||
8001b264 21 20 87 00 addu a0,a0,a3
|
||||
8001b268 12 28 00 00 mflo a1
|
||||
8001b26c 00 00 82 94 lhu v0,0x0(a0)=>DAT_1f8002e0 = ??
|
||||
8001b270 00 00 00 00 nop
|
||||
8001b274 18 00 4a 00 mult v0,t2
|
||||
8001b278 02 00 29 25 addiu t1,t1,0x2
|
||||
8001b27c 21 18 c0 00 move v1,a2
|
||||
8001b280 ff ff c6 24 addiu a2,a2,-0x1
|
||||
8001b284 04 00 08 25 addiu t0,t0,0x4
|
||||
8001b288 00 14 05 00 sll v0,a1,0x10
|
||||
8001b28c 12 60 00 00 mflo t4
|
||||
8001b290 25 10 82 01 or v0,t4,v0
|
||||
8001b294 00 00 02 ad sw v0,0x0(t0)
|
||||
8001b298 d5 ff 60 14 bne v1,zero,LAB_8001b1f0
|
||||
8001b29c 04 00 08 25 _addiu t0,t0,0x4
|
||||
LAB_8001b2a0 XREF[1]: 8001b1e0(j)
|
||||
8001b2a0 08 00 e0 03 jr ra
|
||||
8001b2a4 00 00 00 00 _nop
|
||||
76
EP_TITLE_WINDOW_TEXT_PRINT.asm
Normal file
76
EP_TITLE_WINDOW_TEXT_PRINT.asm
Normal file
@@ -0,0 +1,76 @@
|
||||
;//////////////////////////////////////////////////////
|
||||
;// ETERNAL PUNISHMENT TITLE CODE PATCH
|
||||
|
||||
|
||||
.psx
|
||||
|
||||
.open "0681.BIN", 0x800AB000
|
||||
|
||||
.org 0x800b5300
|
||||
.area 0xFC,0
|
||||
|
||||
|
||||
|
||||
lhu v0,0x0(s0)
|
||||
move r4,s0 ;loading text addr to r4
|
||||
|
||||
andi v0,0xff ;clear text length
|
||||
|
||||
addu s0,s0,v0 ;move text addr + charLen
|
||||
addiu s0,2 ;move text addr +2 (code)
|
||||
andi v0,v0,1
|
||||
beq v0,zero,notAnd1
|
||||
nop
|
||||
addiu s0,s0,1 ; make text addr odd (next line/code)
|
||||
notAnd1:
|
||||
|
||||
andi r5,s3,0xffff ;load X
|
||||
andi r6,s1,0xffff ;load Y
|
||||
li r7, 1 ;white color
|
||||
jal 0x80090000 ;call print text
|
||||
sw r7,0x10(sp) ;store shadow ON in stack+10
|
||||
|
||||
lui v1,0x800c
|
||||
sw v0,-0x6f8c(v1) ;=>DAT_TITLE__800b9074 ;save DMAParams Addr???
|
||||
lhu v1,0x0(s0) ;load next codes
|
||||
li v0,0x1103 ;end text code
|
||||
beq v1,v0,textdone ;this is end of text
|
||||
addiu s0,s0,2 ;move en
|
||||
addiu s1,s1,0xe ; Y = Y + 14
|
||||
|
||||
|
||||
nextLine:
|
||||
lhu v0,0x0(s0)
|
||||
|
||||
|
||||
|
||||
move r4,s0 ;loading text addr to r4
|
||||
andi v0,0xff ;clear text length
|
||||
|
||||
addu s0,s0,v0 ;move text addr + charLen
|
||||
addiu s0,2 ;move text addr +2 (code)
|
||||
andi v0,v0,1
|
||||
beq v0,zero,notAnd1_2
|
||||
nop
|
||||
addiu s0,s0,1 ; make text addr odd (next line/code)
|
||||
notAnd1_2:
|
||||
|
||||
andi r5,s3,0xffff ;load X
|
||||
andi r6,s1,0xffff ;load Y
|
||||
jal 0x80090000 ;call print text
|
||||
li r7, 1 ;white color
|
||||
lui v1,0x800c
|
||||
lw r4,-0x6f8c(v1) ;=>DAT_TITLE__800b9074 ;load DMAParams Addr???
|
||||
jal 0x8001b8d8 ; CloseTextDMA
|
||||
move r5,v0
|
||||
|
||||
lhu v0,0x0(s0)
|
||||
li v1,0x1103 ;end text code
|
||||
|
||||
addiu s0,2 ;move text addr +2 (code)
|
||||
bne v1,v0,nextLine ;this is end of text
|
||||
addiu s1,s1,0xe ; Y = Y + 14
|
||||
|
||||
textdone:
|
||||
.endarea
|
||||
.close
|
||||
429
EP_big_SRC.asm
Normal file
429
EP_big_SRC.asm
Normal file
@@ -0,0 +1,429 @@
|
||||
|
||||
FUN_8002162c:800216bc(c)
|
||||
8001a3a8 b0 ff bd 27 addiu sp,sp,-0x50
|
||||
|
||||
8001a3ac 38 00 b4 af sw s4,local_18(sp)
|
||||
8001a3b0 21 a0 80 00 move s4,r4
|
||||
8001a3b4 28 00 b0 af sw s0,local_28(sp)
|
||||
8001a3b8 21 80 a0 00 move s0,r5
|
||||
8001a3bc 2c 00 b1 af sw s1,local_24(sp)
|
||||
8001a3c0 21 88 c0 00 move s1,r6
|
||||
8001a3c4 34 00 b3 af sw s3,local_1c(sp)
|
||||
|
||||
8001a3c8 80 1f 13 3c lui s3,0x1f80
|
||||
8001a3cc d0 03 73 36 ori s3,s3,0x3d0
|
||||
8001a3d0 ff 00 08 3c lui t0,0xff
|
||||
8001a3d4 ff ff 08 35 ori t0,t0,0xffff
|
||||
|
||||
8001a3d8 ff 00 e4 30 andi r4,r7,0xff
|
||||
8001a3dc 08 80 07 3c lui r7=>DAT_80080000,0x8008 = ??
|
||||
8001a3e0 00 ff 06 3c lui r6,0xff00
|
||||
|
||||
8001a3e4 58 ce e9 24 addiu t1,r7,-0x31a8
|
||||
8001a3e8 58 ce e3 8c lw v1,-0x31a8(r7)=>DAT_8007ce58 = ??
|
||||
8001a3ec 60 00 a5 93 lbu r5,Stack-10?(sp)
|
||||
8001a3f0 00 80 02 3c lui v0,0x8000
|
||||
8001a3f4 48 00 bf af sw ra,local_8(sp)
|
||||
8001a3f8 44 00 b7 af sw s7,local_c(sp)
|
||||
8001a3fc 40 00 b6 af sw s6,local_10(sp)
|
||||
8001a400 3c 00 b5 af sw s5,local_14(sp)
|
||||
8001a404 30 00 b2 af sw s2,local_20(sp)
|
||||
|
||||
;;init chains
|
||||
8001a408 24 30 66 00 and r6,v1,r6
|
||||
8001a40c ff 00 a5 30 andi r5,r5,0xff
|
||||
8001a410 24 18 68 00 and v1,v1,t0
|
||||
8001a414 25 a8 62 00 or s5,v1,v0
|
||||
8001a418 04 00 22 8d lw v0,0x4(t1)=>DAT_8007ce5c = ??
|
||||
8001a41c 00 00 a3 8e lw v1,0x0(s5)
|
||||
8001a420 ff ff 42 24 addiu v0,v0,-0x1
|
||||
8001a424 24 18 68 00 and v1,v1,t0
|
||||
8001a428 25 30 c3 00 or r6,r6,v1
|
||||
8001a42c 04 00 22 ad sw v0,0x4(t1)=>DAT_8007ce5c = ??
|
||||
8001a430 2d 70 00 0c jal StoreColorToAddr undefined StoreColorToAddr()
|
||||
8001a434 58 ce e6 ac _sw r6,-0x31a8(r7)=>DAT_8007ce58 = ??
|
||||
8001a438 21 20 a0 02 move r4,s5
|
||||
8001a43c 00 2c 10 00 sll r5,s0,0x10
|
||||
8001a440 03 2c 05 00 sra r5,r5,0x10
|
||||
8001a444 00 34 11 00 sll r6,s1,0x10
|
||||
8001a448 44 6c 00 0c jal InitDMAtextChain undefined InitDMAtextChain()
|
||||
8001a44c 03 34 06 00 _sra r6,r6,0x10
|
||||
|
||||
;;;;init ScratchPad
|
||||
;;;;;;;;;;;;;;;;;; CPU TO VRAM
|
||||
8001a450 80 1f 06 3c lui r6,0x1f80
|
||||
8001a454 48 03 c6 34 ori r6=>DAT_1f800348,r6,0x348 = ??
|
||||
;8001a458 80 1f 05 3c lui r5,0x1f80 ;LOWER HALF OF CHAR - DONT NEED!!!
|
||||
;8001a45c 8c 03 a5 34 ori r5=>DAT_1f80038c,r5,0x38c = ??
|
||||
|
||||
;4bit table pattern
|
||||
|
||||
|
||||
8001a4f0 03 00 02 24 li v0,0x3
|
||||
8001a4f4 1c 00 a2 a7 sh v0,local_34(sp)
|
||||
8001a4f8 06 00 02 24 li v0,0x6
|
||||
8001a4fc 0d 00 04 24 li r4,0xd
|
||||
8001a500 00 a0 03 3c lui v1,0xa000
|
||||
8001a504 1e 00 a2 a7 sh v0,local_34+0x2(sp)
|
||||
|
||||
|
||||
INIT CHAR
|
||||
8001a508 00 01 02 3c lui v0,0x100
|
||||
|
||||
8001a50c 03 00 c4 a0 sb r4,0x3(r6)=>DAT_1f80034b = ??
|
||||
8001a510 04 00 c3 ac sw v1,0x4(r6)=>DAT_1f80034c = ??
|
||||
8001a514 80 1f 01 3c lui at,0x1f80
|
||||
8001a518 7c 03 22 ac sw v0,offset DAT_1f80037c(at) = ??
|
||||
|
||||
8001a51c 03 00 a4 a0 sb r4,0x3(r5)=>DAT_1f80038f = ??
|
||||
8001a520 04 00 a3 ac sw v1,0x4(r5)=>DAT_1f800390 = ??
|
||||
8001a524 80 1f 01 3c lui at,0x1f80
|
||||
8001a528 c0 03 22 ac sw v0,offset DAT_1f8003c0(at) = ??
|
||||
|
||||
8001a52c 04 00 02 24 li v0,0x4
|
||||
8001a530 03 00 62 a2 sb v0,0x3(s3)=>DAT_1f8003d3 = ??
|
||||
8001a534 64 00 02 24 li v0,0x64
|
||||
8001a538 07 00 62 a2 sb v0,0x7(s3)=>DAT_1f8003d7 = ??
|
||||
|
||||
8001a53c 98 00 84 97 lhu r4,0x98(gp)=>DAT_8007ca08
|
||||
8001a540 9a 00 83 97 lhu v1,0x9a(gp)=>DAT_8007ca0a
|
||||
|
||||
8001a544 80 00 02 24 li v0,0x80
|
||||
8001a548 04 00 62 a2 sb v0,0x4(s3)=>DAT_1f8003d4 = ??
|
||||
8001a54c 05 00 62 a2 sb v0,0x5(s3)=>DAT_1f8003d5 = ??
|
||||
8001a550 06 00 62 a2 sb v0,0x6(s3)=>DAT_1f8003d6 = ??
|
||||
|
||||
setY1:
|
||||
8001a554 1c 00 a2 8f lw v0,local_34(sp)
|
||||
|
||||
8001a558 98 00 87 87 lh r7,0x98(gp)=>DAT_8007ca08
|
||||
8001a55c 18 00 a4 a7 sh r4,local_38(sp)
|
||||
8001a560 1a 00 a3 a7 sh v1,local_38+0x2(sp)
|
||||
|
||||
8001a564 18 00 a4 8f lw r4,local_38(sp)
|
||||
|
||||
|
||||
8001a568 06 00 63 24 addiu v1,v1,0x6
|
||||
8001a56c 1a 00 a3 a7 sh v1,local_38+0x2(sp) LOWER GLIPH COORD
|
||||
|
||||
|
||||
|
||||
8001a570 18 00 a3 8f lw v1,local_38(sp)
|
||||
8001a574 21 40 e0 00 move t0,r7
|
||||
8001a578 0c 00 c2 ac sw v0,0xc(r6)=>DAT_1f800354 = ??
|
||||
8001a57c 0c 00 a2 ac sw v0,0xc(r5)=>DAT_1f800398 = ??
|
||||
8001a580 08 00 c4 ac sw r4,0x8(r6)=>DAT_1f800350 = ??
|
||||
|
||||
8001a584 02 00 e1 04 bgez r7,LAB_8001a590
|
||||
8001a588 08 00 a3 ac _sw v1,0x8(r5)=>DAT_1f800394 = ??
|
||||
8001a58c 3f 00 e8 24 addiu t0,r7,0x3f
|
||||
|
||||
;decoding coords for source sprite
|
||||
; >DAT_1f8003dc ;STORE CHAR SPRITE X BYTE
|
||||
LAB_8001a590 XREF[1]: 8001a584(j)
|
||||
8001a590 83 11 08 00 sra v0,t0,0x6
|
||||
8001a594 80 11 02 00 sll v0,v0,0x6
|
||||
8001a598 23 10 e2 00 subu v0,r7,v0
|
||||
8001a59c 9a 00 83 87 lh v1,0x9a(gp)=>DAT_8007ca0a
|
||||
8001a5a0 80 10 02 00 sll v0,v0,0x2
|
||||
8001a5a4 0c 00 62 a2 sb v0,0xc(s3)=>DAT_1f8003dc = ??
|
||||
8001a5a8 02 00 61 04 bgez v1,LAB_8001a5b4
|
||||
8001a5ac 21 10 60 00 _move v0,v1
|
||||
8001a5b0 ff 00 62 24 addiu v0,v1,0xff
|
||||
; >DAT_1f8003dd ;STORE CHAR SPRITE Y BYTE
|
||||
LAB_8001a5b4 XREF[1]: 8001a5a8(j)
|
||||
8001a5b4 03 12 02 00 sra v0,v0,0x8
|
||||
8001a5b8 00 12 02 00 sll v0,v0,0x8
|
||||
8001a5bc 23 10 62 00 subu v0,v1,v0
|
||||
8001a5c0 0d 00 62 a2 sb v0,0xd(s3)=>DAT_1f8003dd = ??
|
||||
8001a5c4 a0 00 83 97 lhu v1,0xa0(gp)=>DAT_8007ca10
|
||||
8001a5c8 0c 00 02 24 li v0,0xc
|
||||
8001a5cc 10 00 62 a6 sh v0,0x10(s3)=>DAT_1f8003e0 = ??
|
||||
8001a5d0 12 00 62 a6 sh v0,0x12(s3)=>DAT_1f8003e2 = ??
|
||||
8001a5d4 08 00 70 a6 sh s0,0x8(s3)=>DAT_1f8003d8 = ??
|
||||
8001a5d8 0a 00 71 a6 sh s1,0xa(s3)=>DAT_1f8003da = ??
|
||||
8001a5dc 0e 00 63 a6 sh v1,0xe(s3)=>DAT_1f8003de = ??
|
||||
|
||||
;TEXT READ START
|
||||
|
||||
8001a5e0 00 00 84 96 lhu r4,0x0(s4)
|
||||
8001a5e4 00 00 00 00 nop
|
||||
8001a5e8 00 10 82 2c sltiu v0,r4,0x1000
|
||||
8001a5ec b0 00 40 10 beq v0,zero,LAB_8001a8b0 INIT X IN STACK
|
||||
8001a5f0 02 00 94 26 _addiu s4,s4,0x2
|
||||
|
||||
8001a5f4 08 80 16 3c lui s6,0x8008
|
||||
8001a5f8 68 ce d7 26 addiu s7,s6,-0x3198
|
||||
8001a5fc ff 00 10 3c lui s0,0xff
|
||||
8001a600 ff ff 10 36 ori s0,s0,0xffff
|
||||
8001a604 00 80 11 3c lui s1,0x8000
|
||||
|
||||
|
||||
|
||||
LAB_8001a608 NextChar: XREF[1]: 8001a8a8(j)
|
||||
8001a608 57 6a 00 0c jal MakeCharInScratch undefined MakeCharInScratch()
|
||||
8001a60c 21 90 00 00 _clear s2
|
||||
|
||||
|
||||
; Coords XY init
|
||||
|
||||
8001a610 00 ff 0a 3c lui t2,0xff00
|
||||
8001a614 21 70 a0 02 move t6,s5
|
||||
8001a618 10 00 ad 27 addiu t5,sp,0x10
|
||||
8001a61c 20 00 ad af sw t5,local_30(sp)
|
||||
8001a620 08 80 0b 3c lui t3,0x8008
|
||||
8001a624 58 ce 6c 25 addiu t4,t3,-0x31a8
|
||||
8001a628 21 48 a0 02 move t1,s5
|
||||
|
||||
PageLoop:
|
||||
LAB_8001a62c XREF[1]: 8001a870(j)
|
||||
8001a62c 68 ce c2 8e lw v0,-0x3198(s6)=>DMA_NEXT_FREE_CHAIN_8007ce68 = ??
|
||||
8001a630 00 00 00 00 nop
|
||||
8001a634 24 20 4a 00 and r4,v0,t2
|
||||
8001a638 24 10 50 00 and v0,v0,s0
|
||||
8001a63c 25 28 51 00 or r5,v0,s1
|
||||
8001a640 04 00 e2 8e lw v0,0x4(s7)=>DMA_COUNTER_8007ce6c = ??
|
||||
8001a644 00 00 a3 8c lw v1,0x0(r5)
|
||||
8001a648 ff ff 42 24 addiu v0,v0,-0x1
|
||||
8001a64c 24 18 70 00 and v1,v1,s0
|
||||
8001a650 25 20 83 00 or r4,r4,v1
|
||||
8001a654 04 00 e2 ae sw v0,0x4(s7)=>DMA_COUNTER_8007ce6c = ??
|
||||
8001a658 68 ce c4 ae sw r4,-0x3198(s6)=>DMA_NEXT_FREE_CHAIN_8007ce68 = ??
|
||||
|
||||
CopyCmdFromScratch:
|
||||
|
||||
8001a65c 00 00 6f 8e lw t7,0x0(s3)=>DAT_1f8003d0 = ??
|
||||
8001a660 04 00 78 8e lw t8,0x4(s3)=>DAT_1f8003d4 = ??
|
||||
8001a664 08 00 79 8e lw t9,0x8(s3)=>DAT_1f8003d8 = ??
|
||||
8001a668 0c 00 6d 8e lw t5,0xc(s3)=>DAT_1f8003dc = ??
|
||||
8001a66c 00 00 af ac sw t7,0x0(r5)
|
||||
8001a670 04 00 b8 ac sw t8,0x4(r5)
|
||||
8001a674 08 00 b9 ac sw t9,0x8(r5)
|
||||
8001a678 0c 00 ad ac sw t5,0xc(r5)
|
||||
8001a67c 10 00 6f 8e lw t7,0x10(s3)=>DAT_1f8003e0 = ??
|
||||
8001a680 00 00 00 00 nop
|
||||
8001a684 10 00 af ac sw t7,0x10(r5)
|
||||
|
||||
|
||||
8001a688 18 00 23 8d lw v1,0x18(t1)
|
||||
8001a68c 00 00 a2 8c lw v0,0x0(r5)
|
||||
8001a690 00 00 63 8c lw v1,0x0(v1)
|
||||
8001a694 24 10 4a 00 and v0,v0,t2
|
||||
8001a698 24 18 70 00 and v1,v1,s0
|
||||
8001a69c 25 10 43 00 or v0,v0,v1
|
||||
8001a6a0 00 00 a2 ac sw v0,0x0(r5)
|
||||
8001a6a4 18 00 24 8d lw r4,0x18(t1)
|
||||
8001a6a8 00 00 00 00 nop
|
||||
8001a6ac 00 00 82 8c lw v0,0x0(r4)
|
||||
8001a6b0 24 18 b0 00 and v1,r5,s0
|
||||
8001a6b4 24 10 4a 00 and v0,v0,t2
|
||||
8001a6b8 25 10 43 00 or v0,v0,v1
|
||||
8001a6bc 00 00 82 ac sw v0,0x0(r4)
|
||||
8001a6c0 18 00 25 ad sw r5,0x18(t1)
|
||||
8001a6c4 04 00 c2 95 lhu v0,0x4(t6)
|
||||
8001a6c8 00 00 00 00 nop
|
||||
8001a6cc 02 00 40 14 bne v0,zero,LAB_8001a6d8 NotFirstChar
|
||||
8001a6d0 21 40 00 00 _clear t0
|
||||
8001a6d4 28 00 25 ad sw r5,0x28(t1)
|
||||
|
||||
NotFirstChar:
|
||||
LAB_8001a6d8 XREF[1]: 8001a6cc(j)
|
||||
8001a6d8 21 38 00 01 move r7,t0
|
||||
8001a6dc 20 00 a6 8f lw r6,local_30(sp) ---loading from stack????
|
||||
LAB_8001a6e0 XREF[1]: 8001a7e0(j)
|
||||
8001a6e0 80 1f 05 3c lui r5,0x1f80
|
||||
8001a6e4 58 ce 62 8d lw v0,-0x31a8(t3)=>DAT_8007ce58 = ??
|
||||
8001a6e8 48 03 a5 34 ori r5=>DAT_1f800348,r5,0x348 = ??
|
||||
8001a6ec 24 10 50 00 and v0,v0,s0
|
||||
8001a6f0 25 10 51 00 or v0,v0,s1
|
||||
|
||||
8001a6f4 00 00 c2 ac sw v0,0x0(r6) ---saving to stack????
|
||||
|
||||
8001a6f8 58 ce 63 8d lw v1,-0x31a8(t3)=>DAT_8007ce58 = ??
|
||||
8001a6fc 00 00 42 8c lw v0,0x0(v0)
|
||||
8001a700 04 00 84 8d lw r4,0x4(t4)=>DAT_8007ce5c = ??
|
||||
8001a704 24 18 6a 00 and v1,v1,t2
|
||||
8001a708 24 10 50 00 and v0,v0,s0
|
||||
8001a70c 25 18 62 00 or v1,v1,v0
|
||||
8001a710 ff ff 84 24 addiu r4,r4,-0x1
|
||||
8001a714 58 ce 63 ad sw v1,-0x31a8(t3)=>DAT_8007ce58 = ??
|
||||
8001a718 04 00 84 ad sw r4,0x4(t4)=>DAT_8007ce5c = ??
|
||||
8001a71c 00 00 c4 8c lw r4,0x0(r6)
|
||||
8001a720 21 18 e5 00 addu v1,r7,r5
|
||||
8001a724 25 10 64 00 or v0,v1,r4
|
||||
8001a728 03 00 42 30 andi v0,v0,0x3
|
||||
8001a72c 16 00 40 10 beq v0,zero,LAB_8001a788
|
||||
8001a730 30 00 62 24 _addiu v0,v1,0x30
|
||||
|
||||
LAB_8001a734 XREF[1]: 8001a778(j)
|
||||
8001a734 03 00 6f 88 lwl t7,0x3(v1)
|
||||
8001a738 00 00 6f 98 lwr t7,0x0(v1)=>DAT_1f800348 = ??
|
||||
8001a73c 07 00 78 88 lwl t8,0x7(v1)
|
||||
8001a740 04 00 78 98 lwr t8,0x4(v1)=>DAT_1f80034c = ??
|
||||
8001a744 0b 00 79 88 lwl t9,0xb(v1)
|
||||
8001a748 08 00 79 98 lwr t9,0x8(v1)=>DAT_1f800350 = ??
|
||||
8001a74c 0f 00 6d 88 lwl t5,0xf(v1)
|
||||
8001a750 0c 00 6d 98 lwr t5,0xc(v1)=>DAT_1f800354 = ??
|
||||
8001a754 03 00 8f a8 swl t7,0x3(r4)
|
||||
8001a758 00 00 8f b8 swr t7,0x0(r4)
|
||||
8001a75c 07 00 98 a8 swl t8,0x7(r4)
|
||||
8001a760 04 00 98 b8 swr t8,0x4(r4)
|
||||
8001a764 0b 00 99 a8 swl t9,0xb(r4)
|
||||
8001a768 08 00 99 b8 swr t9,0x8(r4)
|
||||
8001a76c 0f 00 8d a8 swl t5,0xf(r4)
|
||||
8001a770 0c 00 8d b8 swr t5,0xc(r4)
|
||||
8001a774 10 00 63 24 addiu v1,v1,0x10
|
||||
8001a778 ee ff 62 14 bne v1,v0,LAB_8001a734
|
||||
8001a77c 10 00 84 24 _addiu r4,r4,0x10
|
||||
8001a780 ed 69 00 08 j LAB_8001a7b4
|
||||
8001a784 00 00 00 00 _nop
|
||||
LAB_8001a788 XREF[2]: 8001a72c(j), 8001a7ac(j)
|
||||
8001a788 00 00 6f 8c lw t7,0x0(v1)=>DAT_1f800348 = ??
|
||||
8001a78c 04 00 78 8c lw t8,0x4(v1)=>DAT_1f80034c = ??
|
||||
8001a790 08 00 79 8c lw t9,0x8(v1)=>DAT_1f800350 = ??
|
||||
8001a794 0c 00 6d 8c lw t5,0xc(v1)=>DAT_1f800354 = ??
|
||||
8001a798 00 00 8f ac sw t7,0x0(r4)
|
||||
8001a79c 04 00 98 ac sw t8,0x4(r4)
|
||||
8001a7a0 08 00 99 ac sw t9,0x8(r4)
|
||||
8001a7a4 0c 00 8d ac sw t5,0xc(r4)
|
||||
8001a7a8 10 00 63 24 addiu v1,v1,0x10
|
||||
8001a7ac f6 ff 62 14 bne v1,v0,LAB_8001a788
|
||||
8001a7b0 10 00 84 24 _addiu r4,r4,0x10
|
||||
LAB_8001a7b4
|
||||
last4BytesCopy: XREF[1]: 8001a780(j)
|
||||
8001a7b4 03 00 6f 88 lwl t7,0x3(v1)
|
||||
8001a7b8 00 00 6f 98 lwr t7,0x0(v1)=>DAT_1f800358 = ??
|
||||
8001a7bc 07 00 78 88 lwl t8,0x7(v1)
|
||||
8001a7c0 04 00 78 98 lwr t8,0x4(v1)=>DAT_1f80035c = ??
|
||||
8001a7c4 03 00 8f a8 swl t7,0x3(r4)
|
||||
8001a7c8 00 00 8f b8 swr t7,0x0(r4)
|
||||
8001a7cc 07 00 98 a8 swl t8,0x7(r4)
|
||||
8001a7d0 04 00 98 b8 swr t8,0x4(r4)
|
||||
|
||||
|
||||
|
||||
;UPPER/LOWER COMMAND LOOP
|
||||
8001a7d4 44 00 e7 24 addiu r7,r7,0x44
|
||||
8001a7d8 01 00 08 25 addiu t0,t0,0x1
|
||||
8001a7dc 02 00 02 2d sltiu v0,t0,0x2
|
||||
8001a7e0 bf ff 40 14 bne v0,zero,LAB_8001a6e0
|
||||
8001a7e4 04 00 c6 24 _addiu r6,r6,0x4
|
||||
|
||||
|
||||
|
||||
8001a7e8 10 00 a4 8f lw r4,local_40(sp)
|
||||
8001a7ec 18 00 23 8d lw v1,0x18(t1)
|
||||
8001a7f0 00 00 82 8c lw v0,0x0(r4)
|
||||
8001a7f4 00 00 63 8c lw v1,0x0(v1)
|
||||
8001a7f8 24 10 4a 00 and v0,v0,t2
|
||||
8001a7fc 24 18 70 00 and v1,v1,s0
|
||||
8001a800 25 10 43 00 or v0,v0,v1
|
||||
8001a804 00 00 82 ac sw v0,0x0(r4)
|
||||
|
||||
8001a808 18 00 24 8d lw r4,0x18(t1)
|
||||
8001a80c 10 00 a3 8f lw v1,local_40(sp)
|
||||
8001a810 00 00 82 8c lw v0,0x0(r4)
|
||||
8001a814 24 18 70 00 and v1,v1,s0
|
||||
8001a818 24 10 4a 00 and v0,v0,t2
|
||||
8001a81c 25 10 43 00 or v0,v0,v1
|
||||
8001a820 00 00 82 ac sw v0,0x0(r4)
|
||||
|
||||
8001a824 14 00 a4 8f lw r4,local_3c(sp)
|
||||
8001a828 10 00 a3 8f lw v1,local_40(sp)
|
||||
8001a82c 00 00 82 8c lw v0,0x0(r4)
|
||||
8001a830 00 00 63 8c lw v1,0x0(v1)
|
||||
8001a834 24 10 4a 00 and v0,v0,t2
|
||||
8001a838 24 18 70 00 and v1,v1,s0
|
||||
8001a83c 25 10 43 00 or v0,v0,v1
|
||||
8001a840 00 00 82 ac sw v0,0x0(r4)
|
||||
|
||||
8001a844 10 00 a4 8f lw r4,local_40(sp)
|
||||
8001a848 14 00 a3 8f lw v1,local_3c(sp)
|
||||
8001a84c 00 00 82 8c lw v0,0x0(r4)
|
||||
8001a850 24 18 70 00 and v1,v1,s0
|
||||
8001a854 24 10 4a 00 and v0,v0,t2
|
||||
8001a858 25 10 43 00 or v0,v0,v1
|
||||
8001a85c 00 00 82 ac sw v0,0x0(r4)
|
||||
|
||||
8001a860 14 00 a2 8f lw v0,local_3c(sp)
|
||||
8001a864 01 00 52 26 addiu s2,s2,0x1
|
||||
8001a868 18 00 22 ad sw v0,0x18(t1)
|
||||
8001a86c 02 00 42 2e sltiu v0,s2,0x2
|
||||
8001a870 6e ff 40 14 bne v0,zero,LAB_8001a62c
|
||||
8001a874 04 00 29 25 _addiu t1,t1,0x4
|
||||
|
||||
X COORD SHIFT (+12)
|
||||
8001a878 a8 00 82 97 lhu v0,0xa8(gp)=>DAT_8007ca18 ;LOAD INIT X
|
||||
8001a87c 08 00 63 96 lhu v1,0x8(s3)=>DAT_1f8003d8 ;LOAD LAST X = ??
|
||||
8001a880 0c 00 42 24 addiu v0,v0,0xc
|
||||
8001a884 21 18 62 00 addu v1,v1,v0
|
||||
8001a888 08 00 63 a6 sh v1,0x8(s3)=>DAT_1f8003d8 = ??
|
||||
|
||||
|
||||
|
||||
r2 = current charDMACount
|
||||
8001a88c 04 00 a2 96 lhu v0,0x4(s5)
|
||||
8001a890 00 00 00 00 nop
|
||||
8001a894 01 00 42 24 addiu v0,v0,0x1
|
||||
8001a898 04 00 a2 a6 sh v0,0x4(s5)
|
||||
|
||||
|
||||
|
||||
8001a89c 00 00 84 96 lhu r4,0x0(s4)
|
||||
8001a8a0 00 00 00 00 nop
|
||||
8001a8a4 00 10 82 2c sltiu v0,r4,0x1000
|
||||
8001a8a8 57 ff 40 14 bne v0,zero,LAB_8001a608 IF r4<1000 - GOTO NEXT CHAR
|
||||
8001a8ac 02 00 94 26 _addiu s4,s4,0x2
|
||||
|
||||
|
||||
|
||||
|
||||
LAB_8001a8b0 TEXT END XREF[1]: 8001a5ec(j)
|
||||
8001a8b0 21 90 00 00 clear s2
|
||||
8001a8b4 08 80 13 3c lui s3,0x8008
|
||||
8001a8b8 68 ce 74 26 addiu s4,s3,-0x3198
|
||||
8001a8bc ff 00 11 3c lui s1,0xff
|
||||
8001a8c0 ff ff 31 36 ori s1,s1,0xffff
|
||||
8001a8c4 21 80 a0 02 move s0,s5
|
||||
8001a8c8 21 28 00 00 clear r5
|
||||
LAB_8001a8cc XREF[1]: 8001a924(j)
|
||||
8001a8cc 01 00 06 24 li r6,0x1
|
||||
8001a8d0 21 90 46 02 addu s2,s2,r6
|
||||
8001a8d4 00 80 02 3c lui v0,0x8000
|
||||
8001a8d8 00 ff 04 3c lui r4,0xff00
|
||||
8001a8dc 68 ce 63 8e lw v1,-0x3198(s3)=>DMA_NEXT_FREE_CHAIN_8007ce68 = ??
|
||||
8001a8e0 9c 00 87 8f lw r7,0x9c(gp)=>DAT_8007ca0c
|
||||
8001a8e4 24 18 71 00 and v1,v1,s1
|
||||
8001a8e8 25 18 62 00 or v1,v1,v0
|
||||
8001a8ec 30 00 03 ae sw v1,0x30(s0)
|
||||
8001a8f0 68 ce 62 8e lw v0,-0x3198(s3)=>DMA_NEXT_FREE_CHAIN_8007ce68 = ??
|
||||
8001a8f4 00 00 63 8c lw v1,0x0(v1)
|
||||
8001a8f8 24 10 44 00 and v0,v0,r4
|
||||
8001a8fc 24 18 71 00 and v1,v1,s1
|
||||
8001a900 04 00 84 8e lw r4,0x4(s4)=>DMA_COUNTER_8007ce6c = ??
|
||||
8001a904 25 10 43 00 or v0,v0,v1
|
||||
8001a908 68 ce 62 ae sw v0,-0x3198(s3)=>DMA_NEXT_FREE_CHAIN_8007ce68 = ??
|
||||
8001a90c ff ff 84 24 addiu r4,r4,-0x1
|
||||
8001a910 04 00 84 ae sw r4,0x4(s4)=>DMA_COUNTER_8007ce6c = ??
|
||||
8001a914 30 00 04 8e lw r4,0x30(s0)
|
||||
8001a918 3f 5e 01 0c jal SetDrawTPage void SetDrawTPage(DR_TPAGE * p, int dfe, int dtd, int tpage)
|
||||
8001a91c 04 00 10 26 _addiu s0,s0,0x4
|
||||
8001a920 02 00 42 2e sltiu v0,s2,0x2
|
||||
8001a924 e9 ff 40 14 bne v0,zero,LAB_8001a8cc
|
||||
8001a928 21 28 00 00 _clear r5
|
||||
8001a92c 21 10 a0 02 move v0,s5
|
||||
8001a930 48 00 bf 8f lw ra,local_8(sp)
|
||||
8001a934 44 00 b7 8f lw s7,local_c(sp)
|
||||
8001a938 40 00 b6 8f lw s6,local_10(sp)
|
||||
8001a93c 3c 00 b5 8f lw s5,local_14(sp)
|
||||
8001a940 38 00 b4 8f lw s4,local_18(sp)
|
||||
8001a944 34 00 b3 8f lw s3,local_1c(sp)
|
||||
8001a948 30 00 b2 8f lw s2,local_20(sp)
|
||||
8001a94c 2c 00 b1 8f lw s1,local_24(sp)
|
||||
8001a950 28 00 b0 8f lw s0,local_28(sp)
|
||||
8001a954 08 00 e0 03 jr ra
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
89
EP_charload.asm
Normal file
89
EP_charload.asm
Normal file
@@ -0,0 +1,89 @@
|
||||
|
||||
; LOADING CHAR FROM CUSTOM FONT
|
||||
|
||||
makeCharPixelsCustom:
|
||||
|
||||
addiu sp,sp,-0x18
|
||||
move a1,r4
|
||||
lui r4,0x1f80
|
||||
ori r4,r4,0x358
|
||||
|
||||
sw ra,0x10(sp)
|
||||
|
||||
li a2,0x01
|
||||
|
||||
lbu t2,0xa4(gp)
|
||||
move t0,r4
|
||||
lui v1,0x801f ; ;load font addr to r3 (801ef000 + BA00)
|
||||
ori v1,v1,0xaa00 ; ==== 801faa00
|
||||
sll v0,a1,0x1 ; r2 = r5 << 1 (*2)
|
||||
addu v0,v0,a1 ; r2 += r5 (it. *3)
|
||||
sll v0,v0,0x2 ;*12 ; r2 << 2 (*4) (r2 = r5 *12)
|
||||
addu t1,v0,v1 ;t1 = char addr ; r9 = r2(offs) + r3 (start)
|
||||
;T1 = SOURCE ADDR
|
||||
li a2,0x6 ; a2 = byteslength = 6
|
||||
move v0,a2 ; r2 = a2 (counter)
|
||||
beq v0,zero,charLoaded ; if counter=0 then branch
|
||||
addiu a2,a2,-0x1 ; dec a2
|
||||
lui a3,0x1f80
|
||||
ori a3,a3,0x2e0 ; set scratch convert addr r7 = 1f8002e0
|
||||
CharLoop:
|
||||
lhu v1,0x0(t1) ;load upperhalf of char to r3
|
||||
nop
|
||||
andi r4,v1,0xf ; r4 = r3 & 0f - cutting left semibyte
|
||||
srl v1,v1,0x4 ; r3 >> 4
|
||||
andi v0,v1,0xf ; r2 = r3 & 0f
|
||||
sll v0,v0,0x1 ; r2 << 1
|
||||
addu v0,v0,a3 ; r2 = r2 + to4bitConvertTableAddr (r7)
|
||||
lhu v0,0x0(v0);>DAT_1f8002e0 r2 = *r2(half) pixel pattern
|
||||
nop
|
||||
mult v0,t2 ; r2*r10. make Color
|
||||
sll r4,r4,0x1 ; r4 << 1
|
||||
addu r4,r4,a3 ; r4 += a2 counter
|
||||
mflo a1 ; load lo to r5
|
||||
lhu v0,0x0(r4);>DAT_1f8002e0 load table+r4
|
||||
nop
|
||||
mult v0,t2 ; r2 * colorIndex r10
|
||||
srl v1,v1,0x4 ; r3 >> 4, right 4 bits
|
||||
andi r4,v1,0xf ; r4 = r3 & f0 (cut right semibyte)
|
||||
srl v1,v1,0x4 ; r3 >> 4
|
||||
sll v1,v1,0x1 ; r3 << 1 = *2
|
||||
addu v1,v1,a3 ; r3=r3+Table r7
|
||||
sll v0,a1,0x10 ; r2 = r5 << 10 bits
|
||||
mflo t4 ; load r12,low
|
||||
or v0,t4,v0 ; r2 = r12 | r2
|
||||
sw v0,0x0(t0) ; load *r8(current Scratch) from r2(result)
|
||||
lhu v0,0x0(v1);>DAT_1f8002e0 ; load r2 from TablePattern Half from r3
|
||||
nop
|
||||
mult v0,t2 ; r2*color r10
|
||||
sll r4,r4,0x1 ; r4 << 1
|
||||
addu r4,r4,a3 ; r4 = r4 + TableStart
|
||||
mflo a1 ; ld r5,lo
|
||||
lhu v0,0x0(r4);>DAT_1f8002e0 ; ld half r2 from *r4
|
||||
nop
|
||||
mult v0,t2 ; r2*col
|
||||
addiu t1,t1,0x2 ; move charFont + +2
|
||||
move v1,a2 ; r3 = byteCount (a2)
|
||||
addiu a2,a2,-0x1 ; a2 -= 1
|
||||
addiu t0,t0,0x4 ; scrathAddr r8 += 4
|
||||
sll v0,a1,0x10 ; r2 = r5 << 10 bits (move to hi)
|
||||
mflo t4 ; ld r12,lo (result)
|
||||
or v0,t4,v0 ; combine r2 & r 12 (0001 x 1111)
|
||||
sw v0,0x0(t0) ; store result to scratch r2 to *r8
|
||||
bne v1,zero,charLoop ; if r3 counter<>0 goto loop
|
||||
addiu t0,t0,0x4 ; r8 scrath += 4
|
||||
charLoaded:
|
||||
|
||||
lbu v1,0xa5(gp) ; >DAT_8007b23d_textMode load curText Shadow?
|
||||
li v0,0x1
|
||||
bne v1,v0,NotShadow ;Shadow character check
|
||||
nop
|
||||
lui r4,0x1f80
|
||||
jal MakeShadowSmallChar ;Make shadow in Scratch DMA
|
||||
ori r4,r4,0x358
|
||||
|
||||
NotShadow:
|
||||
lw ra,0x10(sp) ;Restore stack and exit
|
||||
nop
|
||||
jr ra
|
||||
addiu sp,sp,0x18
|
||||
572
EP_main.asm
Normal file
572
EP_main.asm
Normal file
@@ -0,0 +1,572 @@
|
||||
;
|
||||
; Persona 2 Eternal Punishment (PSX) JAP / Custom Characters/Data Patch
|
||||
;
|
||||
; Author: Sergey Shemet 06/10/2022
|
||||
|
||||
.psx
|
||||
|
||||
|
||||
|
||||
.definelabel SetDrawTPage, 0x800578fc
|
||||
.definelabel storeColor, 0x8001c0b4
|
||||
.definelabel initCopyCharChain, 0x8001b110
|
||||
;.definelabel makeCharPixels, 0x8001a08f ;need custom routine with custom font
|
||||
;.definelabel GenerateSmallChar, 0x8001a284 ;need custom routine
|
||||
.definelabel MakeShadowSmallChar, 0x8001b2a8
|
||||
.definelabel PrintBigDMAText, 0x8001a3a8
|
||||
|
||||
.definelabel MyAddr, 0x8009
|
||||
|
||||
|
||||
.open "SLPS_028.25", 0x8000F800
|
||||
|
||||
|
||||
;.include "complex_strings_copy.asm" ;Make complex strings in battles
|
||||
|
||||
;;neeeeed to init 8008fff6 = min dma commands
|
||||
|
||||
.org 0x80090000
|
||||
ExternalPrint:
|
||||
;;;;;;;text routing test routine
|
||||
; move r3,s3
|
||||
; move s3,r4
|
||||
|
||||
lhu v0,0x0(a0) ;read half 2 bytes of text (r4, not s1+0c!!!!!)
|
||||
nop
|
||||
; move s3,r3
|
||||
srl v1,v0,0xD ;;;;Check 13th bit (1byte system !!!)
|
||||
bne v1,zero,MyPrintLineRoutine
|
||||
clear v1
|
||||
j PrintBigDMAText
|
||||
nop
|
||||
|
||||
;;;;;;;;;;;;;;;;;MyPrintLineRoutine
|
||||
MyPrintLineRoutine:
|
||||
addiu sp,sp,-0x50
|
||||
sw s4,0x38(sp)
|
||||
move s4,r4 ;textReadAddr - S4 (NOT S6!)
|
||||
sw s0,0x28(sp)
|
||||
move s0,r5
|
||||
sw s1,0x2c(sp)
|
||||
move s1,r6
|
||||
sw s3,0x34(sp)
|
||||
|
||||
; NEW COMMAND OBRAB
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;lw v1,0x0(s5)
|
||||
;nop
|
||||
;v1/r3 - MyChars charcount
|
||||
andi v0,v0,0xff
|
||||
addiu s4,s4,0x2 ;Moving text read pointer +2bytes
|
||||
|
||||
|
||||
|
||||
lui s3,MyAddr
|
||||
sw v0,-0x10(s3) ;store bytecounter @ 8008fff0 and clean charCounter (8008fff2)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
lui s3,0x1f80
|
||||
ori s3,s3,0x3d0 ;s3 = 1f8003d0 - copysprite cmd in scratch
|
||||
lui t0,0xff
|
||||
ori t0,t0,0xffff ;t0 = 00FFFFFF
|
||||
|
||||
;sw s0, 0x28(sp) ;save s0 in stack
|
||||
andi r4,r7,0xff ;s0 - cut textMode (color & shadow)
|
||||
lui r7, 0x8008 ;r7 = 8008 0000
|
||||
lui r6, 0xff00 ;r6 = FF000000
|
||||
|
||||
addiu t1,r7,-0x31a8 ;t1 = 8007b6d0 - new free CHAIN Here
|
||||
lw v1, -0x31a8(r7) ;r3/v1 = load freeChain
|
||||
lbu r5,0x60(sp) ;shadow flag from stack to r5
|
||||
lui v0,0x8000 ;r2 = 8000 0000
|
||||
sw ra,0x48(sp)
|
||||
sw s7,0x44(sp)
|
||||
sw s6,0x40(sp)
|
||||
sw s5,0x3c(sp) ; push ra,r30,r23,31,r20
|
||||
sw s2,0x30(sp)
|
||||
|
||||
;;init chains
|
||||
and r6,v1,r6 ;r6 = r3 & ff000000 = FF000000
|
||||
andi r5,r5,0xff ;clean text mode (color/shadow)
|
||||
and v1,v1,t0 ;r3 & 00ffffff
|
||||
or s5,v1,v0 ;r20 - 80...+r3 = freeChain Main Addr
|
||||
lw v0,0x4(t1) ;Load DMA Counter
|
||||
lw v1,0x0(s5) ;r3 = next free Chain
|
||||
addiu v0,v0,-0x1 ;DMA Counter-1
|
||||
and v1,v1,t0 ; r3 & r8 (00ffffff) cut f.byte
|
||||
or r6,r6,v1 ; r6 | r3 = ff+r3 = next free Chain (FF...) +
|
||||
sw v0,0x4(t1) ;save DMACounter
|
||||
jal storeColor
|
||||
sw r6,-0x31a8(r7) ;SAVE next free Chain (FF...) to 7b6d0
|
||||
move r4,s5 ;currentChainAddr
|
||||
sll r5,s0,0x10 ;r5 = X<<10h (003A0000)
|
||||
sra r5,r5,0x10 ; r5=r5>>10h 0000003A
|
||||
sll r6,s1,0x10 ; r6 = Y << 10h
|
||||
jal initCopyCharChain ;init line chains
|
||||
sra r6,r6,0x10 ;r6>>10h - 100% clean coords
|
||||
;move r7,s0 ;store textMode _THIS IS FOR INIT
|
||||
|
||||
;;;;init ScratchPad
|
||||
;;;;;;;;;;;;;;;;;; CPU TO VRAM
|
||||
lui r6,0x1f80
|
||||
ori r6,r6,0x348 ;r7 = FIRST CHAR START
|
||||
;lui r6,0x1f80 ;LOWER HALF OF CHAR - DONT NEED!!!
|
||||
;ori r6,r6,0x38c
|
||||
|
||||
|
||||
;4bit table pattern
|
||||
.include "EP_4bitPattern.asm"
|
||||
|
||||
|
||||
li v0,0x2
|
||||
sh v0,0x1c(sp)
|
||||
li v0,0xc
|
||||
li r4,0x10 ;COMMANDS IN CHAR FORMING CHAIN?
|
||||
lui r3,0xa000 ;r4 = a000 0000
|
||||
sh v0,0x1e(sp) ; SAVE 000C0002 TO STACK+1c
|
||||
|
||||
|
||||
|
||||
; INIT CHAR
|
||||
lui v0,0x100 ;FLUSH CACHE 01 00 00 00 =>DAT_1f80034b
|
||||
|
||||
sb r4,0x3(r6) ;SAVE 0d 00 00 00 =>DAT_1f80034c cmdcount\
|
||||
sw r3,0x4(r6); SAVE a000000 TO DAT_1f80034c
|
||||
|
||||
|
||||
lui at,0x1f80 ;scrathcpadStart
|
||||
sw v0,0x388(at) ;save 0x01 00 00 00 to end of 1st CHAR chain
|
||||
|
||||
|
||||
; Copy Sprite DMA Command Forming
|
||||
li v0,0x4
|
||||
sb v0,0x3(s3) ; 04 00 00 00 to 3d0 (sb 04 to 3d3) CHAIN LENGTH
|
||||
li v0,0x64
|
||||
sb v0,0x7(s3) ;sb 64 to 3d7 (copySpriteCommand)
|
||||
|
||||
lhu r4,0x98(gp) ;0310 ;Load x(0310) to r8
|
||||
lhu r3,0x9a(gp) ;01f0 ;Load y(01F0)to r2
|
||||
;lui v1,0x100 ;0100 0000 flushcache
|
||||
|
||||
li v0,0x80
|
||||
sb v0,0x4(s3)
|
||||
sb v0,0x5(s3)
|
||||
sb v0,0x6(s3) ;make 80 80 80 64 (3d4,5,6)
|
||||
|
||||
|
||||
setY1:
|
||||
|
||||
|
||||
lw v0,0x1c(sp) ; r2 = 000c0002 from stack
|
||||
|
||||
lh r7,0x98(gp) ;for futher sprite X calc
|
||||
sh r4,0x18(sp)
|
||||
sh r3,0x1a(sp) ;SAVE CONCAT 013001f0 to stack
|
||||
|
||||
lw r4,0x18(sp) ;LOAD 013001f0 from stack
|
||||
;lw v1,0x18(sp)
|
||||
|
||||
move t0,r7
|
||||
sw r4,0x8(r6) ;DAT_1f800350 load r4 (upper coord 01f6) to r7+8 (DMA)
|
||||
sw v0,0xc(r6) ;=>DAT_1f800354 r2 - 000c0002 to 1st char (to r7+0c)
|
||||
|
||||
bgez r7,LAB_800194fc
|
||||
SetX1:
|
||||
sh s1,0x20(sp) ;store X half to sp+10 !!!!!!!!!!!!!!!!!
|
||||
addiu t0,r7,0x3f
|
||||
|
||||
|
||||
LAB_800194fc: ;decoding coords for source sprite
|
||||
sra v0,t0,0x6 ;r2 = r6 >> 6 = 4
|
||||
sll v0,v0,0x6 ;r2 << 6 = 100
|
||||
subu v0,r7,v0 ;r2 = r6 - r2 = 30
|
||||
lh v1,0x9a(gp) ;r3 = load Y half from mem
|
||||
sll v0,v0,0x2 ;r2 << 2
|
||||
sb v0,0xc(s3) ; >DAT_1f8003dc ;STORE CHAR SPRITE X BYTE
|
||||
bgez v1,LAB_80019520 ;if Y r3>=0 - branch & r2=r3
|
||||
move v0,v1
|
||||
addiu v0,v1,0xff ;else r2 = ff - r3
|
||||
LAB_80019520:
|
||||
sra v0,v0,0x8
|
||||
sll v0,v0,0x8
|
||||
subu v0,v1,v0
|
||||
sb v0,0xd(s3) ; >DAT_1f8003dd ;STORE CHAR SPRITE Y BYTE
|
||||
lhu v1,0xa0(gp)
|
||||
;DIFF BETWEEN VERSs::::::::::::::::::::::
|
||||
li v0,0x8 ; r2 = 8 Sprite WIDTH
|
||||
sh v0,0x10(s3) ; 3e0 - 0008 save
|
||||
sh v1,0xe(s3);=>DAT_1f8003de ; *3de = r3 = 7df3
|
||||
|
||||
sh s0,0x8(s3)
|
||||
sh s1,0xa(s3)
|
||||
|
||||
li v0,0xc ; r2 = c Sprite HEIGTH
|
||||
sh v0,0x12(s3) ; 3e2 - 000c save
|
||||
|
||||
|
||||
;TEXT READ START
|
||||
|
||||
|
||||
|
||||
lbu r4,0x0(s4) ;MAIN READ CHAR COMMAND - Load Byte Unsigned
|
||||
nop
|
||||
addiu s4,s4,0x1 ;Shift read address +1 byte
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;CHAR CHECK CUTTED!
|
||||
|
||||
lui s6,0x8008 ;load 80080000 to r17
|
||||
addiu s7,s6,-0x3198 ;r21 = r17-4930= 7b6d0 (tempDMA)
|
||||
lui s0,0xff
|
||||
ori s0,s0,0xffff ;s0 = 00 ff ff ff
|
||||
lui s1,0x8000 ;r3 = 8000 0000
|
||||
NextChar:
|
||||
addiu r4,r4,-0x20 ;Shift unprintable symbols
|
||||
|
||||
|
||||
;ОБРАБОТКА ПРОБЕЛОВ
|
||||
|
||||
bne r4,zero,SpaceCheckBranch ;Если не пробел - перепрыгиваем сразу
|
||||
nop
|
||||
|
||||
lui t2,MyAddr
|
||||
lh v0,-0xE(t2) ;Load my temp CHAR COUNTER for check
|
||||
nop
|
||||
lh t3,-0x10(t2)
|
||||
addiu v0,v0,1 ;overall chars+1
|
||||
beq v0,t3,SpaceCheckBranch ;is last char - пробел не проверяем!
|
||||
nop
|
||||
|
||||
|
||||
;ITS A SPACE!!!!
|
||||
sh v0,-0xE(t2) ;Save charcount += 1
|
||||
nop
|
||||
lbu r4,0x0(s4) ;LOAD NEXT CHAR
|
||||
;j SpaceJump
|
||||
|
||||
;X COORD SHIFT (+6)
|
||||
lhu v0,0xa8(gp) ;LOAD INIT X
|
||||
lhu v1,0x8(s3) ;LOAD LAST X IN SCRATCH
|
||||
addiu v0,v0,0x6 ;v0 = INIT X+6
|
||||
addu v1,v1,v0 ;LAST X = LAST X + (INIT X + 6)
|
||||
sh v1,0x8(s3) ;UPDATE LAST X IN SCRATCH DMA
|
||||
|
||||
|
||||
j NextChar
|
||||
addiu s4,s4,0x1 ;Shift read address +1 byte
|
||||
|
||||
|
||||
SpaceCheckBranch:
|
||||
;LAB_8001a608 NextChar:
|
||||
jal makeCharPixelsCustom ;MAKE SMALL CHAR IN SCRATCH ___ CUSTOM ROUTINE
|
||||
clear s2
|
||||
; Coords XY init
|
||||
;lw v0,0xb0(gp); =>DAT_8007b240_parms load r2 from r28+0b0 (7b240)(Xoffs)
|
||||
;lui t2,MyAddr
|
||||
;lh v1,-0xE(t2) ;Load my temp CHAR COUNTER for check
|
||||
; lhu v1,0x4(r20) ; current char = r3 = half *DMAAddr + 4
|
||||
;addiu v0,v0,0x6 ; 0x06 * 6px btw letters!
|
||||
;mult v1,v0 ; r3*r2 = xOffs*charNum
|
||||
|
||||
|
||||
lui t2,0xff00 ; r10 = ld upper ff00 = ff000000
|
||||
move t6,s5 ; r14 = r21 (params) =r9 FROM SMALL SRC
|
||||
addiu t5,sp,0x10 ; r11 = sp + 10 = 807ffe50
|
||||
lui t3,0x8008
|
||||
addiu t4,t3,-0x31a8
|
||||
move t1,s5 ; r9 = r21 (params again) =t9 ;=r8 FROM SMALL
|
||||
|
||||
|
||||
SetY:
|
||||
; sh s8,0xa(s3) ; DAT_1f8003da *r19(1st scr DMA)+0a = r30 (Y??) !!!!!!!!!!!!!!!!
|
||||
SetX:
|
||||
; lhu t5,0x20(sp) ; r13 = ld half (sp+20) = 003A ---X from sp+20 !!
|
||||
; mflo t6 ; r14 = lo
|
||||
;addu v0,t5,t6 ; r2 = r13 + r14 = X + Offset
|
||||
; sh v0,0x8(s3) ;DAT_1f8003d8 save r2 half to 1f8003d8 = X (3A) !!!!!!!!!!!!!!!!
|
||||
PageLoop:
|
||||
;MAKING COPYSPRITE CHAIN
|
||||
lw v0,-0x3198(s6); r2 = *freeChainAddr
|
||||
nop
|
||||
and r4,v0,t2 ; r4 = r2 & ff00..
|
||||
and v0,v0,s0 ; r2 & 00FFFFFF
|
||||
or r5,v0,s1 ; r5 = r2 or r23 (80000000) = 801ADF10
|
||||
lw v0,0x4(s7) ; CmdCounter r2 = *7b6d0+4 = 705
|
||||
lw v1,0x0(r5) ; r3 = New Free ChainAddr
|
||||
addiu v0,v0,-0x1 ; r2 -= 1 Counter Down
|
||||
and v1,v1,s0 ; r3 & 00FFFFFF cut begin byte
|
||||
or r4,r4,v1 ; r4 & r3 = ff......
|
||||
sw v0,0x4(s7) ; CmdCounter save DMA Counter
|
||||
sw r4,-0x3198(s6); freeChain save new freeChain
|
||||
|
||||
CopyCmdFromScratch:
|
||||
; CopyScriptChain copy from scratch
|
||||
lw t9,0x0(s3) ;>DAT_1f8003d0 r14 = 04000000 - DMA Commands Count
|
||||
lw t7,0x4(s3) ;>DAT_1f8003d4 r15 = 64808080 - CopySpriteCmd
|
||||
lw t8,0x8(s3) ;>DAT_1f8003d8 r24 = 001500d1 - xy screen coords
|
||||
lw t5,0xc(s3); >DAT_1f8003dc r13 = 7fd3f0c0 (CLUT & tex coord page)
|
||||
sw t9,0x0(r5) ; *r5 = r14
|
||||
sw t7,0x4(r5) ; *r5+4 = r15
|
||||
sw t8,0x8(r5) ; *r5+8 = r24
|
||||
sw t5,0xc(r5) ; *r5+c = r13
|
||||
lw t9,0x10(s3);>DAT_1f8003e0 r14 = 000c0008 - spritesize after copy
|
||||
nop
|
||||
sw t9,0x10(r5) ; *r5+10 = r14 - LAST COMMAND SAVE
|
||||
; t1 = t0 (small) !!!!
|
||||
; t4 = t1 (small) !!!!
|
||||
lw v1,0x18(t1) ;r3 = *r9+18 (next param???)
|
||||
lw v0,0x0(r5) ; r2 = *cur New Chainaddr
|
||||
lw v1,0x0(v1) ; r3 = *r3
|
||||
and v0,v0,t2 ; r2 & ff000000
|
||||
and v1,v1,s0 ;r3 & 00FFFFFF
|
||||
or v0,v0,v1 ; r2 | r3 = 04FFFFFF - commands with FFFFFF
|
||||
sw v0,0x0(r5) ; *curChainAddr r5 = r2 (upd ..04 with ..FF04)
|
||||
lw r4,0x18(t1) ; r4 = *r8+18 (first chain addr?)
|
||||
nop
|
||||
lw v0,0x0(r4) ; r2 = *r4 FIRST CHAIN LINK TO NEXT??
|
||||
and v1,r5,s0 ; r3 = r5 (cur chain) & 00FFFFFF
|
||||
and v0,v0,t2 ; r2 & FF000000
|
||||
or v0,v0,v1 ; r2 | r3 = last chain adr w 10&....
|
||||
sw v0,0x0(r4) ; *r4 = r2 FIRST CHAIN NEXT ADDR???
|
||||
sw r5,0x18(t1) ;t0->t1 ; r5 = *r8+18 curChainAddr
|
||||
lhu v0,0x4(t6) ;t1->t6 r2 = half (DMA params)+4 (charCounter)
|
||||
nop
|
||||
bne v0,zero,NotFirstChar ; if CharCount<>0 then Goto...
|
||||
nop ;clear t0
|
||||
sw r5,0x28(t1) ;t0->t1 ;*curChain+28 = Set first Char Chain
|
||||
sw t8,0xc(t6) ;t1->t6 ; Params+0c = save STORE COORDS to params
|
||||
;sh s2,0xe(t4) ;t1->t6 ;Params+0e = save half Y
|
||||
NotFirstChar:
|
||||
|
||||
; lui t3,0x1f80
|
||||
; ori t3,t3,0x388 ; Scratch DMAChain CharEndAddr
|
||||
|
||||
|
||||
lui r5,0x1f80 ;;;;;;;;;;;;;;;;;;;;;;;ADDRESS OF CHAR HERe ---> SLL CHARNUM, 6
|
||||
|
||||
lw v0,-0x31a8(t3);>8007b6d0_freeChain r2 = *nextFreeChain
|
||||
ori r5,r5,0x348 ; r5 | 1f800348 = Scratch CharData
|
||||
and r4,v0,t2 ; r4 = r2 & FF000000 FFNEXTCHAIN
|
||||
and v0,v0,s0 ; r2 & 00FFFFFF = 00XTCHAN
|
||||
or r7,v0,s1 ;or (800...) ; r7 = r2 | r12 = nextChain & 80...
|
||||
move r6,r7 ; r6 = r7 (nextChain)
|
||||
lw v0,0x4(t4) ; CmdCounter r2 = DMA Counter
|
||||
lw v1,0x0(r7) ; r3 = New Free ChainAddr / currHeader Addr
|
||||
addiu v0,v0,-0x1 ; r2 -= 1 Counter Down
|
||||
and v1,v1,s0 ; r3 & 80.... commandCount / currHeader
|
||||
or r4,r4,v1 ; r4 & r3 = ff......
|
||||
sw v0,0x4(t4);>DAT_8007b6d4_CmdCounter save DMA Counter
|
||||
andi v0,r7,0x3 ; r2 = r7 & 3 (check destAddr MOD 4)
|
||||
sw r4,-0x31a8(t3);>8007b6d0_freeChain save new freeChain
|
||||
|
||||
|
||||
beq v0,zero,Copy16Bytes ; if r7 MOD 4 = 0 then Branch
|
||||
addiu v0,r5,0x40 ;T3 = 388!
|
||||
|
||||
;;;;;;;;;;;;;;;Copy from ScratchPad To Chain
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
CopyBy2Bytes:
|
||||
lwl t9,0x3(r5) ; if r7 mod4 <> 0 - копируем по 2 байта
|
||||
lwr t9,0x0(r5);>DAT_1f800348
|
||||
lwl t7,0x7(r5)
|
||||
lwr t7,0x4(r5);>DAT_1f80034c
|
||||
lwl t8,0xb(r5)
|
||||
lwr t8,0x8(r5);>DAT_1f800350
|
||||
lwl t5,0xf(r5)
|
||||
lwr t5,0xc(r5);>DAT_1f800354
|
||||
swl t9,0x3(r6)
|
||||
swr t9,0x0(r6)
|
||||
swl t7,0x7(r6)
|
||||
swr t7,0x4(r6)
|
||||
swl t8,0xb(r6)
|
||||
swr t8,0x8(r6)
|
||||
swl t5,0xf(r6)
|
||||
swr t5,0xc(r6)
|
||||
addiu r5,r5,0x10
|
||||
bne r5,v0,CopyBy2Bytes
|
||||
addiu r6,r6,0x10
|
||||
j last4BytesCopy
|
||||
nop
|
||||
Copy16Bytes:
|
||||
lw t9,0x0(r5);>DAT_1f800348 r5 - curScratchAddr,r6 -cur DMAAddr
|
||||
lw t7,0x4(r5)
|
||||
lw t8,0x8(r5)
|
||||
lw t5,0xc(r5)
|
||||
sw t9,0x0(r6)
|
||||
sw t7,0x4(r6)
|
||||
sw t8,0x8(r6)
|
||||
sw t5,0xc(r6)
|
||||
addiu r5,r5,0x10
|
||||
bne r5,v0,Copy16Bytes
|
||||
addiu r6,r6,0x10
|
||||
last4BytesCopy:
|
||||
lwl t9,0x3(r5) ; r14 left = 2 bytes from *r5+3
|
||||
lwr t9,0x0(r5);>DAT_1f800358 r14 right = 2 bytes from *r5
|
||||
nop
|
||||
swl t9,0x3(r6) ; *r6 = r14 left
|
||||
swr t9,0x0(r6) ; *r6+3 = r14 right
|
||||
|
||||
|
||||
; linking DMA char+copysprite
|
||||
|
||||
; t0 (smallSRC) = t1 (HERE) !!!! ;r8 = r9 !!!!!!!!!!!!!
|
||||
; t1 (smallSRC) = t6 (HERE) !!!! ;r9 = r14 !!!!!!!!!!!!
|
||||
|
||||
lw v1,0x18(t1) ; r3 = current DMACopySprite Chain
|
||||
lw v0,0x0(r7) ; r2 = current CharChainCommands
|
||||
lw v1,0x0(v1) ; r3 = *r3 (comNum+FFFFFF(nextLink))
|
||||
and v0,v0,t2 ; r2 & FF.....
|
||||
and v1,v1,s0 ; r3 & 00FFFFFF
|
||||
or v0,v0,v1 ; r2 | r3 = 10FFFFFF(cmdNum&FF..)
|
||||
sw v0,0x0(r7) ; *r7 = r2 saveCurChainCmd (10FFFFFF)
|
||||
|
||||
lw r4,0x18(t1) ; r4 = r8+18h - cur CopySpriteCmd hdrAddr
|
||||
nop
|
||||
lw v0,0x0(r4) ; r2 = *r4 (04FFFFFF)
|
||||
and v1,r7,s0 ; r3 = r7 & 00FFFFFF (Copying Cur Char Chain)
|
||||
and v0,v0,t2 ; r2 & FF000000 (04000000) CmdCount
|
||||
or v0,v0,v1 ; R2 | R3 = 04(cmd)..+CharChainAddr
|
||||
sw v0,0x0(r4) ; *r4 = r2 = FullCommand With Link!!!
|
||||
; (04..CharAddr) + SpriteCopyCommand
|
||||
sw r7,0x18(t1) ; *r8+18 = Last Char Chain!
|
||||
|
||||
addiu t1,t1,0x4 ; r8 (params) += 4 (shift params for NextPage)
|
||||
addiu v0,t6,0x8 ; r2 = r9+8 (shift first chain param for Page)
|
||||
sltu v0,t1,v0 ; r2 = r8 < r2(r9+8) (first page pass)
|
||||
bne v0,zero,PageLoop ; if r2<>0 (r8<r2) then goto Next Page Loop
|
||||
nop
|
||||
|
||||
|
||||
;X COORD SHIFT (+6)
|
||||
lhu v0,0xa8(gp) ;LOAD INIT X
|
||||
lhu v1,0x8(s3) ;LOAD LAST X IN SCRATCH
|
||||
addiu v0,v0,0x6 ;v0 = INIT X+6
|
||||
addu v1,v1,v0 ;LAST X = LAST X + (INIT X + 6)
|
||||
sh v1,0x8(s3) ;UPDATE LAST X IN SCRATCH DMA
|
||||
|
||||
|
||||
SpaceJump:
|
||||
;;;CharCount + Check
|
||||
lhu v0,0x4(s5) ; r2 = current charDMACount
|
||||
lui t9,MyAddr
|
||||
addiu v0,v0,0x1 ; a += 1
|
||||
sh v0,0x4(s5) ;save DMAcounter to chain
|
||||
|
||||
|
||||
;DMA OVERFLOW CHECK!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (8007b6d4)
|
||||
|
||||
lw v0,0x4(s7) ; CmdCounter r2 = DMA Char Counter
|
||||
;lhu v1,-0xC(t9) ;v1 = 8008fff4 = minimum cmd counter
|
||||
move v1,5 ;80cd0 ///
|
||||
sltu v0,v0,v1 ; v0 = v0 < V1 ?
|
||||
bne v0,zero,TextEnd ;if v0<>0 then Goto End Text (DMA OVERFLOW!!!!)
|
||||
nop
|
||||
|
||||
|
||||
|
||||
|
||||
lui t3,MyAddr
|
||||
lhu v0,-0xE(t3) ; r2 = charCount In string
|
||||
lhu v1,-0x10(t3) ; r3 = My charOverAll In string
|
||||
addiu v0,v0,0x1 ; a += 1
|
||||
lbu r4,0x0(s4) ; load next Char to r4 (byte)
|
||||
|
||||
sh v0,-0xE(t3) ; store myCharCounter to MyAddr-E
|
||||
addiu s4,s4,0x1 ;Shift CharAddr
|
||||
|
||||
bne v0,v1,NextChar ; if currentChar<>OverallChar - branch
|
||||
nop
|
||||
|
||||
TextEnd:
|
||||
clear r18
|
||||
lui s3,0x8008
|
||||
addiu s4,s3,-0x3198 ; r19 = 80080000, r21 = 7b6d0
|
||||
lui s1,0xff ; r17 = 00ff0000
|
||||
ori s1,s1,0xffff ; r17 & ffff = 00ff ffff
|
||||
move s0,s5 ; r16 = r20 (currentTLineParam)
|
||||
clear r5
|
||||
PageTLoop: ;ALMOST FINISH!!!!
|
||||
li r6,0x1 ; r6=1
|
||||
addu r18,r18,r6 ; r18(Counter) += r6
|
||||
lui v0,0x8000 ; r2 = 80000000
|
||||
lui r4,0xff00 ; r4 = ff00 0000
|
||||
lw v1,-0x3198(s3);>8007b6d0_freeChain r3 = next free Chain (*7b6d0)
|
||||
lw r7,0x9c(gp);>DAT_8007b234 r7 = someParam(почти DMA)gp+a4 = 34
|
||||
and v1,v1,s1 ; r3 & 00FFFFFF
|
||||
or v1,v1,v0 ; r3 | r2 = 80.....
|
||||
sw v1,0x30(s0) ; store last free ChAddr to DMAParams
|
||||
lw v0,-0x3198(s3);>8007b6d0_freeChain r2 = next free chain
|
||||
lw v1,0x0(v1) ; r3 = *r3 = last chain - made one more chain
|
||||
and v0,v0,r4 ; a2 & ff000000
|
||||
and v1,v1,s1 ; r3 & 00FFFFFF
|
||||
lw r4,0x4(s4);>DAT_8007b6d4_CmdCounter r4 = DMA Counter
|
||||
or v0,v0,v1 ; r2 | r3
|
||||
sw v0,-0x3198(s3);>8007b6d0_freeChain new free chain addr add to *7b6b0
|
||||
addiu r4,r4,-0x1 ; DMA Cunter =- 1
|
||||
sw r4,0x4(s4);>DAT_8007b6d4_CmdCounter Store DMA Count
|
||||
lw r4,0x30(s0) ; r4 = *DMA params + 30 = Start Of DMA Chain
|
||||
jal SetDrawTPage ; Set DRAW PAGE
|
||||
addiu s0,s0,0x4 ; r16 += 4 - Shgift DMAParams for next Page
|
||||
sltiu v0,r18,0x2 ; r2 = r18<2
|
||||
bne v0,zero,PageTLoop ; if not r2 then goto Loop
|
||||
clear r5 ; r5 = 0
|
||||
move v0,s5 ; r2 = DMAParamsMain
|
||||
|
||||
lw ra,0x48(sp)
|
||||
|
||||
lw s7,0x44(sp)
|
||||
lw s6,0x40(sp)
|
||||
lw s5,0x3c(sp) ;restoring regs from Stack
|
||||
lw s4,0x38(sp)
|
||||
lw s3,0x34(sp)
|
||||
lw s2,0x30(sp)
|
||||
lw s1,0x2c(sp)
|
||||
lw s0,0x28(sp)
|
||||
|
||||
jr ra
|
||||
addiu sp,sp,0x50
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chars / 2 Return Func
|
||||
.include "EP_charload.asm"
|
||||
|
||||
.include "charCalcs.asm"
|
||||
|
||||
|
||||
;patching PrintCommandText
|
||||
|
||||
.org 0x8001d138
|
||||
;jal 0x8001a3a8 ORIG CALL
|
||||
jal ExternalPrint
|
||||
|
||||
.org 0x8001d0c4
|
||||
;jal 0x8001a3a8 ORIG CALL
|
||||
jal ExternalPrint
|
||||
|
||||
|
||||
|
||||
.org 0x8001bee0
|
||||
j ReturnCharsInString ;custom routine
|
||||
; j 0x8001beec
|
||||
|
||||
.org 0x8001bf08
|
||||
; addiu sp,sp,-0x18 ;Original Code
|
||||
; sw ra,0x10(sp)
|
||||
j calcnextXCustom ;PATCHED
|
||||
nop
|
||||
|
||||
|
||||
|
||||
.close
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;; BOSSNAMECOPY
|
||||
;;.include "battle_patch.asm"
|
||||
|
||||
|
||||
|
||||
|
||||
;;.include "txtpatches.asm" ;misc text patches
|
||||
|
||||
; COMPILE COMMAND: ./armips -temp 123_EP EP_main.asm
|
||||
410
EP_main_grouped.asm
Normal file
410
EP_main_grouped.asm
Normal file
@@ -0,0 +1,410 @@
|
||||
;
|
||||
; Persona 2 Eternal Punishment (PSX) JAP / Custom Characters/Data Patch
|
||||
; Author: Sergey Shemet 06/10/2022
|
||||
|
||||
.psx
|
||||
|
||||
// Определения функций
|
||||
.definelabel SetDrawTPage, 0x800578fc
|
||||
.definelabel storeColor, 0x8001c0b4
|
||||
.definelabel initCopyCharChain, 0x8001b110
|
||||
.definelabel MakeShadowSmallChar, 0x8001b2a8
|
||||
.definelabel PrintBigDMAText, 0x8001a3a8
|
||||
|
||||
.definelabel MyAddr, 0x8009
|
||||
|
||||
.open "SLPS_028.25", 0x8000F800
|
||||
|
||||
.org 0x80090000
|
||||
|
||||
ExternalPrint:
|
||||
// Текстовая тестовая процедура
|
||||
lhu v0, 0x0(a0) // Читаем 2 байта текста
|
||||
nop
|
||||
srl v1, v0, 0xD // Проверяем 13-й бит (система 1 байт)
|
||||
bne v1, zero, MyPrintLineRoutine // Если установлен, переходим к нашей процедуре
|
||||
clear v1
|
||||
j PrintBigDMAText // Иначе используем стандартную процедуру
|
||||
nop
|
||||
|
||||
MyPrintLineRoutine:
|
||||
addiu sp, sp, -0x50 // Выделяем место в стеке
|
||||
sw s4, 0x38(sp) // Сохраняем регистры
|
||||
move s4, a0 // Адрес чтения текста -> s4
|
||||
sw s0, 0x28(sp)
|
||||
move s0, a1
|
||||
sw s1, 0x2c(sp)
|
||||
move s1, a2
|
||||
sw s3, 0x34(sp)
|
||||
|
||||
// Обработка новой команды
|
||||
andi v0, v0, 0xff // Берем младший байт
|
||||
addiu s4, s4, 0x2 // Сдвигаем указатель текста на +2 байта
|
||||
|
||||
lui s3, MyAddr
|
||||
sw v0, -0x10(s3) // Сохраняем счетчик байтов @ 8008fff0
|
||||
|
||||
// Инициализация scratchpad
|
||||
lui s3, 0x1f80
|
||||
ori s3, s3, 0x3d0 // s3 = 1f8003d0 - команда копирования спрайта
|
||||
lui t0, 0xff
|
||||
ori t0, t0, 0xffff // t0 = 00FFFFFF
|
||||
|
||||
andi a0, a3, 0xff // Режим текста (цвет и тень)
|
||||
lui a3, 0x8008 // a3 = 80080000
|
||||
lui a2, 0xff00 // a2 = FF000000
|
||||
|
||||
addiu t1, a3, -0x31a8 // t1 = 8007b6d0 - новая свободная цепочка
|
||||
lw v1, -0x31a8(a3) // v1 = загружаем свободную цепочку
|
||||
lbu a1, 0x60(sp) // Флаг тени из стека -> a1
|
||||
lui v0, 0x8000 // v0 = 80000000
|
||||
sw ra, 0x48(sp) // Сохраняем регистры
|
||||
sw s7, 0x44(sp)
|
||||
sw s6, 0x40(sp)
|
||||
sw s5, 0x3c(sp)
|
||||
sw s2, 0x30(sp)
|
||||
|
||||
// Инициализация цепочек
|
||||
and a2, v1, a2 // a2 = v1 & ff000000
|
||||
andi a1, a1, 0xff // Очищаем режим текста
|
||||
and v1, v1, t0 // v1 & 00ffffff
|
||||
or s5, v1, v0 // s5 - основной адрес свободной цепочки
|
||||
lw v0, 0x4(t1) // Загружаем счетчик DMA
|
||||
lw v1, 0x0(s5) // v1 = следующая свободная цепочка
|
||||
addiu v0, v0, -0x1 // Уменьшаем счетчик DMA
|
||||
and v1, v1, t0 // v1 & 00ffffff
|
||||
or a2, a2, v1 // a2 | v1 = следующая свободная цепочка
|
||||
sw v0, 0x4(t1) // Сохраняем счетчик DMA
|
||||
sw a2, -0x31a8(a3) // Сохраняем следующую свободную цепочку
|
||||
jal storeColor
|
||||
move a0, s5 // Текущий адрес цепочки
|
||||
sll a1, s0, 0x10 // a1 = X << 16
|
||||
sra a1, a1, 0x10 // a1 = X координата
|
||||
sll a2, s1, 0x10 // a2 = Y << 16
|
||||
jal initCopyCharChain // Инициализация цепочек символов
|
||||
sra a2, a2, 0x10 // a2 = Y координата
|
||||
|
||||
// Инициализация ScratchPad (CPU to VRAM)
|
||||
lui a2, 0x1f80
|
||||
ori a2, a2, 0x348 // a2 = первый символ начала
|
||||
|
||||
// 4-битная таблица паттернов
|
||||
.include "EP_4bitPattern.asm"
|
||||
|
||||
li v0, 0x2
|
||||
sh v0, 0x1c(sp)
|
||||
li v0, 0xc
|
||||
li a0, 0x10 // Команды в цепочке формирования символа?
|
||||
lui v1, 0xa000 // a0 = a0000000
|
||||
sh v0, 0x1e(sp) // Сохраняем 000C0002 в стек+1c
|
||||
|
||||
// Инициализация символа
|
||||
lui v0, 0x100 // Сброс кэша 01000000
|
||||
sb a0, 0x3(a2) // Сохраняем количество команд
|
||||
sw v1, 0x4(a2) // Сохраняем a0000000
|
||||
|
||||
lui at, 0x1f80 // Начало scratchpad
|
||||
sw v0, 0x388(at) // Сохраняем в конец первой цепочки символов
|
||||
|
||||
// Формирование команды DMA копирования спрайта
|
||||
li v0, 0x4
|
||||
sb v0, 0x3(s3) // Длина цепочки = 4
|
||||
li v0, 0x64
|
||||
sb v0, 0x7(s3) // Команда копирования спрайта
|
||||
|
||||
lhu a0, 0x98(gp) // Загружаем X координату
|
||||
lhu v1, 0x9a(gp) // Загружаем Y координату
|
||||
|
||||
li v0, 0x80
|
||||
sb v0, 0x4(s3)
|
||||
sb v0, 0x5(s3)
|
||||
sb v0, 0x6(s3) // Формируем 80808064
|
||||
|
||||
setY1:
|
||||
lw v0, 0x1c(sp) // v0 = 000c0002 из стека
|
||||
lh a3, 0x98(gp) // Для дальнейших расчетов X спрайта
|
||||
sh a0, 0x18(sp)
|
||||
sh v1, 0x1a(sp) // Сохраняем координаты в стек
|
||||
lw a0, 0x18(sp) // Загружаем координаты из стека
|
||||
move t0, a3
|
||||
sw a0, 0x8(a2) // Загружаем координаты в DMA
|
||||
sw v0, 0xc(a2) // Сохраняем в первый символ
|
||||
|
||||
bgez a3, LAB_800194fc
|
||||
|
||||
SetX1:
|
||||
sh s1, 0x20(sp) // Сохраняем X половину в sp+20
|
||||
addiu t0, a3, 0x3f
|
||||
|
||||
LAB_800194fc:
|
||||
// Декодирование координат для исходного спрайта
|
||||
sra v0, t0, 0x6 // v0 = t0 >> 6
|
||||
sll v0, v0, 0x6 // v0 << 6
|
||||
subu v0, a3, v0 // v0 = a3 - v0
|
||||
lh v1, 0x9a(gp) // Загружаем Y половину из памяти
|
||||
sll v0, v0, 0x2 // v0 << 2
|
||||
sb v0, 0xc(s3) // Сохраняем X байт спрайта символа
|
||||
bgez v1, LAB_80019520 // Если Y >= 0 - ветвление
|
||||
move v0, v1
|
||||
addiu v0, v1, 0xff // Иначе v0 = ff - v1
|
||||
|
||||
LAB_80019520:
|
||||
sra v0, v0, 0x8
|
||||
sll v0, v0, 0x8
|
||||
subu v0, v1, v0
|
||||
sb v0, 0xd(s3) // Сохраняем Y байт спрайта символа
|
||||
lhu v1, 0xa0(gp)
|
||||
|
||||
li v0, 0x8 // Ширина спрайта = 8
|
||||
sh v0, 0x10(s3) // Сохраняем ширину
|
||||
sh v1, 0xe(s3) // Сохраняем значение
|
||||
|
||||
sh s0, 0x8(s3) // Сохраняем X
|
||||
sh s1, 0xa(s3) // Сохраняем Y
|
||||
|
||||
li v0, 0xc // Высота спрайта = 12
|
||||
sh v0, 0x12(s3) // Сохраняем высоту
|
||||
|
||||
// Начало чтения текста
|
||||
lbu a0, 0x0(s4) // Основное чтение байта команды
|
||||
nop
|
||||
addiu s4, s4, 0x1 // Сдвиг адреса чтения на +1 байт
|
||||
|
||||
SpaceCheckBranch:
|
||||
jal makeCharPixelsCustom // Создание маленького символа в scratch
|
||||
clear s2
|
||||
|
||||
lui t2, 0xff00 // t2 = ff000000
|
||||
move t6, s5 // Параметры
|
||||
addiu t5, sp, 0x10 // t5 = sp + 10
|
||||
lui t3, 0x8008
|
||||
addiu t4, t3, -0x31a8
|
||||
move t1, s5 // Параметры снова
|
||||
|
||||
SetY:
|
||||
SetX:
|
||||
PageLoop:
|
||||
// Создание цепочки копирования спрайта
|
||||
lw v0, -0x3198(s6) // v0 = *адрес свободной цепочки
|
||||
nop
|
||||
and a0, v0, t2 // a0 = v0 & ff00..
|
||||
and v0, v0, s0 // v0 & 00FFFFFF
|
||||
or a1, v0, s1 // a1 = v0 | 80000000
|
||||
lw v0, 0x4(s7) // Счетчик команд
|
||||
lw v1, 0x0(a1) // Новый адрес свободной цепочки
|
||||
addiu v0, v0, -0x1 // Уменьшаем счетчик
|
||||
and v1, v1, s0 // v1 & 00FFFFFF
|
||||
or a0, a0, v1 // a0 & v1
|
||||
sw v0, 0x4(s7) // Сохраняем счетчик DMA
|
||||
sw a0, -0x3198(s6) // Сохраняем новую свободную цепочку
|
||||
|
||||
CopyCmdFromScratch:
|
||||
// Копирование команды из scratch
|
||||
lw t9, 0x0(s3) // Количество команд DMA
|
||||
lw t7, 0x4(s3) // Команда копирования спрайта
|
||||
lw t8, 0x8(s3) // Координаты экрана XY
|
||||
lw t5, 0xc(s3) // CLUT и координаты текстуры
|
||||
sw t9, 0x0(a1)
|
||||
sw t7, 0x4(a1)
|
||||
sw t8, 0x8(a1)
|
||||
sw t5, 0xc(a1)
|
||||
lw t9, 0x10(s3) // Размер спрайта после копирования
|
||||
nop
|
||||
sw t9, 0x10(a1) // Сохраняем последнюю команду
|
||||
|
||||
lw v1, 0x18(t1) // Следующий параметр
|
||||
lw v0, 0x0(a1) // Текущий новый адрес цепочки
|
||||
lw v1, 0x0(v1) // Загружаем значение
|
||||
and v0, v0, t2 // v0 & ff000000
|
||||
and v1, v1, s0 // v1 & 00FFFFFF
|
||||
or v0, v0, v1 // Команды с FFFFFF
|
||||
sw v0, 0x0(a1) // Обновляем текущий адрес цепочки
|
||||
lw a0, 0x18(t1) // Первый адрес цепочки
|
||||
nop
|
||||
lw v0, 0x0(a0) // Первая ссылка цепочки на следующую
|
||||
and v1, a1, s0 // v1 = a1 & 00FFFFFF
|
||||
and v0, v0, t2 // v0 & FF000000
|
||||
or v0, v0, v1 // Последний адрес цепочки
|
||||
sw v0, 0x0(a0) // Первая цепочка следующего адреса
|
||||
sw a1, 0x18(t1) // Текущий адрес цепочки
|
||||
lhu v0, 0x4(t6) // Счетчик символов
|
||||
nop
|
||||
bne v0, zero, NotFirstChar // Если счетчик символов ≠ 0, переходим
|
||||
nop
|
||||
|
||||
sw a1, 0x28(t1) // Устанавливаем первую цепочку символов
|
||||
sw t8, 0xc(t6) // Сохраняем координаты в параметры
|
||||
// sh s2, 0xe(t4) // Сохраняем половину Y
|
||||
|
||||
NotFirstChar:
|
||||
lui a1, 0x1f80 // Адрес символа здесь
|
||||
lw v0, -0x31a8(t3) // Следующая свободная цепочка
|
||||
ori a1, a1, 0x348 // a1 | 1f800348 = Scratch данные символа
|
||||
and a0, v0, t2 // a0 = v0 & FF000000
|
||||
and v0, v0, s0 // v0 & 00FFFFFF
|
||||
or a3, v0, s1 // a3 = следующая цепочка & 80...
|
||||
move a2, a3 // a2 = a3 (следующая цепочка)
|
||||
lw v0, 0x4(t4) // Счетчик команд
|
||||
lw v1, 0x0(a3) // Новый адрес свободной цепочки
|
||||
addiu v0, v0, -0x1 // Уменьшаем счетчик
|
||||
and v1, v1, s0 // v1 & 80... количество команд
|
||||
or a0, a0, v1 // a0 & v1
|
||||
sw v0, 0x4(t4) // Сохраняем счетчик DMA
|
||||
andi v0, a3, 0x3 // Проверяем адрес назначения MOD 4
|
||||
sw a0, -0x31a8(t3) // Сохраняем новую свободную цепочку
|
||||
|
||||
beq v0, zero, Copy16Bytes // Если MOD 4 = 0, ветвление
|
||||
addiu v0, a1, 0x40
|
||||
|
||||
CopyBy2Bytes:
|
||||
// Копируем по 2 байта если MOD 4 ≠ 0
|
||||
lwl t9, 0x3(a1)
|
||||
lwr t9, 0x0(a1)
|
||||
lwl t7, 0x7(a1)
|
||||
lwr t7, 0x4(a1)
|
||||
lwl t8, 0xb(a1)
|
||||
lwr t8, 0x8(a1)
|
||||
lwl t5, 0xf(a1)
|
||||
lwr t5, 0xc(a1)
|
||||
swl t9, 0x3(a2)
|
||||
swr t9, 0x0(a2)
|
||||
swl t7, 0x7(a2)
|
||||
swr t7, 0x4(a2)
|
||||
swl t8, 0xb(a2)
|
||||
swr t8, 0x8(a2)
|
||||
swl t5, 0xf(a2)
|
||||
swr t5, 0xc(a2)
|
||||
addiu a1, a1, 0x10
|
||||
bne a1, v0, CopyBy2Bytes
|
||||
addiu a2, a2, 0x10
|
||||
j last4BytesCopy
|
||||
nop
|
||||
|
||||
Copy16Bytes:
|
||||
// Копируем по 16 байт
|
||||
lw t9, 0x0(a1)
|
||||
lw t7, 0x4(a1)
|
||||
lw t8, 0x8(a1)
|
||||
lw t5, 0xc(a1)
|
||||
sw t9, 0x0(a2)
|
||||
sw t7, 0x4(a2)
|
||||
sw t8, 0x8(a2)
|
||||
sw t5, 0xc(a2)
|
||||
addiu a1, a1, 0x10
|
||||
bne a1, v0, Copy16Bytes
|
||||
addiu a2, a2, 0x10
|
||||
|
||||
last4BytesCopy:
|
||||
// Копируем последние 4 байта
|
||||
lwl t9, 0x3(a1)
|
||||
lwr t9, 0x0(a1)
|
||||
nop
|
||||
swl t9, 0x3(a2)
|
||||
swr t9, 0x0(a2)
|
||||
|
||||
// Связывание DMA символа + копирование спрайта
|
||||
lw v1, 0x18(t1) // Текущая цепочка DMA копирования спрайта
|
||||
lw v0, 0x0(a3) // Текущие команды цепочки символов
|
||||
lw v1, 0x0(v1) // Количество команд + следующая ссылка
|
||||
and v0, v0, t2 // v0 & FF.....
|
||||
and v1, v1, s0 // v1 & 00FFFFFF
|
||||
or v0, v0, v1 // Количество команд & FF..
|
||||
sw v0, 0x0(a3) // Сохраняем текущую команду цепочки
|
||||
lw a0, 0x18(t1) // Адрес заголовка текущей команды копирования спрайта
|
||||
nop
|
||||
lw v0, 0x0(a0) // 04FFFFFF
|
||||
and v1, a3, s0 // v1 = копирование текущей цепочки символов
|
||||
and v0, v0, t2 // v0 & FF000000 (количество команд)
|
||||
or v0, v0, v1 // Полная команда со ссылкой
|
||||
sw v0, 0x0(a0) // Сохраняем с ссылкой на цепочку символов
|
||||
sw a3, 0x18(t1) // Последняя цепочка символов
|
||||
|
||||
addiu t1, t1, 0x4 // Сдвигаем параметры для следующей страницы
|
||||
addiu v0, t6, 0x8 // Сдвигаем первый параметр цепочки для страницы
|
||||
sltu v0, t1, v0 // Проверяем прохождение первой страницы
|
||||
bne v0, zero, PageLoop // Если не прошли, продолжаем цикл страниц
|
||||
nop
|
||||
|
||||
// Сдвиг X координаты (+6)
|
||||
lhu v0, 0xa8(gp) // Загружаем начальный X
|
||||
lhu v1, 0x8(s3) // Загружаем последний X в scratch
|
||||
addiu v0, v0, 0x6 // v0 = начальный X + 6
|
||||
addu v1, v1, v0 // Последний X = последний X + (начальный X + 6)
|
||||
sh v1, 0x8(s3) // Обновляем последний X в DMA scratch
|
||||
|
||||
SpaceJump:
|
||||
// Увеличиваем счетчик символов + проверка
|
||||
lhu v0, 0x4(s5) // Текущее количество символов DMA
|
||||
lui t9, MyAddr
|
||||
addiu v0, v0, 0x1 // Увеличиваем на 1
|
||||
sh v0, 0x4(s5) // Сохраняем счетчик в цепочку
|
||||
|
||||
// Проверка переполнения DMA
|
||||
lw v0, 0x4(s7) // Счетчик команд DMA
|
||||
move v1, 5 // Минимальный счетчик команд
|
||||
sltu v0, v0, v1 // v0 < v1?
|
||||
bne v0, zero, TextEnd // Если переполнение DMA, завершаем текст
|
||||
nop
|
||||
|
||||
lui t3, MyAddr
|
||||
lhu v0, -0xE(t3) // Количество символов в строке
|
||||
lhu v1, -0x10(t3) // Общее количество символов в строке
|
||||
addiu v0, v0, 0x1 // Увеличиваем на 1
|
||||
lbu a0, 0x0(s4) // Загружаем следующий символ
|
||||
sh v0, -0xE(t3) // Сохраняем счетчик символов
|
||||
addiu s4, s4, 0x1 // Сдвигаем адрес символа
|
||||
|
||||
bne v0, v1, NextChar // Если текущий символ ≠ общему количеству, продолжаем
|
||||
nop
|
||||
|
||||
TextEnd:
|
||||
clear s2
|
||||
lui s3, 0x8008
|
||||
addiu s4, s3, -0x3198 // s4 = 7b6d0
|
||||
lui s1, 0xff
|
||||
ori s1, s1, 0xffff // s1 = 00ffffff
|
||||
move s0, s5 // s0 = текущие параметры строки
|
||||
clear a1
|
||||
|
||||
PageTLoop:
|
||||
// Завершающая обработка страниц
|
||||
li a2, 0x1 // a2 = 1
|
||||
addu s2, s2, a2 // Увеличиваем счетчик
|
||||
lui v0, 0x8000 // v0 = 80000000
|
||||
lui a0, 0xff00 // a0 = ff000000
|
||||
lw v1, -0x3198(s3) // Следующая свободная цепочка
|
||||
lw a3, 0x9c(gp) // Некоторые параметры (почти DMA)
|
||||
and v1, v1, s1 // v1 & 00FFFFFF
|
||||
or v1, v1, v0 // v1 | v0 = 80.....
|
||||
sw v1, 0x30(s0) // Сохраняем последний свободный адрес в параметрах DMA
|
||||
lw v0, -0x3198(s3) // Следующая свободная цепочка
|
||||
lw v1, 0x0(v1) // Создаем еще одну цепочку
|
||||
and v0, v0, a0 // v0 & ff000000
|
||||
and v1, v1, s1 // v1 & 00FFFFFF
|
||||
lw a0, 0x4(s4) // Счетчик DMA
|
||||
or v0, v0, v1 // v0 | v1
|
||||
sw v0, -0x3198(s3) // Новый адрес свободной цепочки
|
||||
addiu a0, a0, -0x1 // Уменьшаем счетчик DMA
|
||||
sw a0, 0x4(s4) // Сохраняем счетчик DMA
|
||||
lw a0, 0x30(s0) // Начало цепочки DMA
|
||||
jal SetDrawTPage // Устанавливаем страницу отрисовки
|
||||
addiu s0, s0, 0x4 // Сдвигаем параметры DMA для следующей страницы
|
||||
sltiu v0, s2, 0x2 // Проверяем счетчик < 2
|
||||
bne v0, zero, PageTLoop // Если да, продолжаем цикл
|
||||
clear a1 // a1 = 0
|
||||
|
||||
move v0, s5 // Возвращаем основные параметры DMA
|
||||
|
||||
// Восстанавливаем регистры из стека
|
||||
lw ra, 0x48(sp)
|
||||
lw s7, 0x44(sp)
|
||||
lw s6, 0x40(sp)
|
||||
lw s5, 0x3c(sp)
|
||||
lw s4, 0x38(sp)
|
||||
lw s3, 0x34(sp)
|
||||
lw s2, 0x30(sp)
|
||||
lw s1, 0x2c(sp)
|
||||
lw s0, 0x28(sp)
|
||||
|
||||
jr ra // Возврат
|
||||
addiu sp, sp, 0x50 // Восстанавливаем стек
|
||||
448
EP_small_SRC.asm
Normal file
448
EP_small_SRC.asm
Normal file
@@ -0,0 +1,448 @@
|
||||
**************************************************************
|
||||
* FUNCTION *
|
||||
**************************************************************
|
||||
undefined MakeSmallChar(undefined r4, undefined par
|
||||
assume gp = 0x8007c970
|
||||
undefined v0:1 <RETURN>
|
||||
undefined a0:1 r4
|
||||
undefined a1:1 r5
|
||||
undefined a2:1 r6
|
||||
undefined a3:1 r7
|
||||
undefined4 Stack[0x10]:4 param_5 XREF[1]: 8001ab80(R)
|
||||
|
||||
MakeSmallChar
|
||||
8001ab3c a8 ff bd 27 addiu sp,sp,-0x58
|
||||
assume gp = <UNKNOWN>
|
||||
8001ab40 44 00 b5 af sw s5,local_14(sp)
|
||||
8001ab44 21 a8 80 00 move s5,r4
|
||||
8001ab48 30 00 b0 af sw s0,local_28(sp)
|
||||
8001ab4c 21 80 a0 00 move s0,r5
|
||||
8001ab50 34 00 b1 af sw s1,local_24(sp)
|
||||
8001ab54 21 88 c0 00 move s1,r6
|
||||
8001ab58 38 00 b2 af sw s2,local_20(sp)
|
||||
|
||||
8001ab5c 80 1f 12 3c lui s2,0x1f80
|
||||
8001ab60 d0 03 52 36 ori s2,s2,0x3d0
|
||||
8001ab64 ff 00 09 3c lui t1,0xff
|
||||
8001ab68 ff ff 29 35 ori t1,t1,0xffff
|
||||
8001ab6c ff 00 e4 30 andi r4,r7,0xff
|
||||
|
||||
8001ab70 08 80 08 3c lui t0,0x8008
|
||||
8001ab74 00 ff 06 3c lui r6,0xff00
|
||||
8001ab78 58 ce 0a 25 addiu t2,t0,-0x31a8
|
||||
8001ab7c 58 ce 03 8d lw v1,-0x31a8(t0)=>DAT_8007ce58 = ??
|
||||
8001ab80 68 00 a7 8f lw r7,Stack+10(sp)
|
||||
|
||||
8001ab84 00 80 02 3c lui v0,0x8000 ;r2 = 8000 0000
|
||||
8001ab88 54 00 bf af sw ra,local_4(sp)
|
||||
8001ab8c 50 00 be af sw s8,local_8(sp)
|
||||
8001ab90 4c 00 b7 af sw s7,local_c(sp)
|
||||
8001ab94 48 00 b6 af sw s6,local_10(sp)
|
||||
8001ab98 40 00 b4 af sw s4,local_18(sp)
|
||||
8001ab9c 3c 00 b3 af sw s3,local_1c(sp)
|
||||
8001aba0 28 00 b0 a7 sh s0,local_30(sp)
|
||||
|
||||
;;init chains
|
||||
8001aba4 24 30 66 00 and r6,v1,r6
|
||||
8001aba8 ff 00 e5 30 andi r5,r7,0xff
|
||||
8001abac 24 18 69 00 and v1,v1,t1
|
||||
8001abb0 25 a0 62 00 or s4,v1,v0
|
||||
8001abb4 10 00 e7 30 andi r7,r7,0x10
|
||||
8001abb8 2b 38 07 00 sltu r7,zero,r7
|
||||
8001abbc 04 00 42 8d lw v0,0x4(t2)=>DAT_8007ce5c DMA cnt-1 = ??
|
||||
8001abc0 00 00 83 8e lw v1,0x0(s4)
|
||||
8001abc4 ff ff 42 24 addiu v0,v0,-0x1
|
||||
8001abc8 24 18 69 00 and v1,v1,t1
|
||||
8001abcc 25 30 c3 00 or r6,r6,v1
|
||||
8001abd0 04 00 42 ad sw v0,0x4(t2)=>DAT_8007ce5c = ??
|
||||
8001abd4 58 ce 06 ad sw r6,-0x31a8(t0)=>DAT_8007ce58 = ??
|
||||
|
||||
8001abd8 2d 70 00 0c jal StoreColorToAddr undefined StoreColorToAddr()
|
||||
8001abdc 18 00 a7 af _sw r7,local_40(sp)
|
||||
|
||||
|
||||
8001abe0 21 20 80 02 move r4,s4
|
||||
8001abe4 00 84 10 00 sll s0,s0,0x10
|
||||
8001abe8 03 2c 10 00 sra r5,s0,0x10
|
||||
8001abec 00 8c 11 00 sll s1,s1,0x10
|
||||
8001abf0 03 84 11 00 sra s0,s1,0x10
|
||||
|
||||
8001abf4 44 6c 00 0c jal InitDMAtextChain undefined InitDMAtextChain()
|
||||
8001abf8 21 30 00 02 _move r6,s0
|
||||
|
||||
8001abfc 80 1f 04 3c lui r4,0x1f80
|
||||
8001ac00 48 03 84 34 ori r4,r4,0x348
|
||||
|
||||
|
||||
--------------4bit pattern here
|
||||
|
||||
8001ac94 02 00 02 24 li v0,0x2
|
||||
8001ac98 0c 00 08 24 li t0,0xc
|
||||
8001ac9c 14 00 a2 a7 sh v0,local_44(sp)
|
||||
8001aca0 10 00 02 24 li v0,0x10
|
||||
8001aca4 16 00 a8 a7 sh t0,local_44+0x2(sp)
|
||||
8001aca8 03 00 82 a0 sb v0,0x3(r4)=>DAT_1f80034b = ??
|
||||
8001acac 00 a0 02 3c lui v0,0xa000
|
||||
8001acb0 04 00 82 ac sw v0,0x4(r4)=>DAT_1f80034c = ??
|
||||
|
||||
8001acb4 00 01 02 3c lui v0,0x100
|
||||
8001acb8 80 1f 01 3c lui at,0x1f80
|
||||
8001acbc 88 03 22 ac sw v0,offset DAT_1f800388(at) = ??
|
||||
|
||||
8001acc0 04 00 02 24 li v0,0x4
|
||||
8001acc4 03 00 42 a2 sb v0,0x3(s2)=>DAT_1f8003d3 = ??
|
||||
8001acc8 64 00 02 24 li v0,0x64
|
||||
8001accc 07 00 42 a2 sb v0,0x7(s2)=>DAT_1f8003d7 = ??
|
||||
|
||||
8001acd0 98 00 83 97 lhu v1,0x98(gp)=>DAT_8007ca08
|
||||
8001acd4 9a 00 87 97 lhu r7,0x9a(gp)=>DAT_8007ca0a
|
||||
|
||||
8001acd8 80 00 02 24 li v0,0x80
|
||||
8001acdc 04 00 42 a2 sb v0,0x4(s2)=>DAT_1f8003d4 = ??
|
||||
8001ace0 05 00 42 a2 sb v0,0x5(s2)=>DAT_1f8003d5 = ??
|
||||
8001ace4 06 00 42 a2 sb v0,0x6(s2)=>DAT_1f8003d6 = ??
|
||||
|
||||
8001ace8 14 00 a2 8f lw v0,local_44(sp)
|
||||
8001acec 10 00 a3 a7 sh v1,local_48(sp)
|
||||
|
||||
8001acf0 00 1c 03 00 sll v1,v1,0x10
|
||||
8001acf4 03 2c 03 00 sra r5,v1,0x10
|
||||
8001acf8 12 00 a7 a7 sh r7,local_48+0x2(sp)
|
||||
8001acfc 10 00 a3 8f lw v1,local_48(sp)
|
||||
8001ad00 21 30 a0 00 move r6,r5
|
||||
8001ad04 0c 00 82 ac sw v0,0xc(r4)=>DAT_1f800354 = ??
|
||||
8001ad08 02 00 a1 04 bgez r5,LAB_8001ad14
|
||||
8001ad0c 08 00 83 ac _sw v1,0x8(r4)=>DAT_1f800350 = ??
|
||||
8001ad10 3f 00 a6 24 addiu r6,r5,0x3f
|
||||
|
||||
LAB_800194fc: LAB_8001ad14 XREF[1]: 8001ad08(j)
|
||||
8001ad14 83 11 06 00 sra v0,r6,0x6
|
||||
8001ad18 80 11 02 00 sll v0,v0,0x6
|
||||
8001ad1c 23 10 a2 00 subu v0,r5,v0
|
||||
8001ad20 80 10 02 00 sll v0,v0,0x2
|
||||
8001ad24 0c 00 42 a2 sb v0,0xc(s2)=>DAT_1f8003dc = ??
|
||||
8001ad28 00 14 07 00 sll v0,r7,0x10
|
||||
8001ad2c 03 1c 02 00 sra v1,v0,0x10
|
||||
8001ad30 02 00 61 04 bgez v1,LAB_8001ad3c
|
||||
8001ad34 21 10 60 00 _move v0,v1
|
||||
8001ad38 ff 00 62 24 addiu v0,v1,0xff
|
||||
|
||||
LAB_8001ad3c XREF[1]: 8001ad30(j)
|
||||
8001ad3c 03 12 02 00 sra v0,v0,0x8
|
||||
8001ad40 00 12 02 00 sll v0,v0,0x8
|
||||
8001ad44 23 10 62 00 subu v0,v1,v0
|
||||
8001ad48 0d 00 42 a2 sb v0,0xd(s2)=>DAT_1f8003dd = ??
|
||||
8001ad4c a0 00 83 97 lhu v1,0xa0(gp)=>DAT_8007ca10
|
||||
8001ad50 08 00 02 24 li v0,0x8 ; r2 = 8 Sprite WIDTH
|
||||
8001ad54 10 00 42 a6 sh v0,0x10(s2)=>DAT_1f8003e0 = ??
|
||||
8001ad58 12 00 48 a6 sh t0,0x12(s2)=>DAT_1f8003e2 = ??
|
||||
8001ad5c 0e 00 43 a6 sh v1,0xe(s2)=>DAT_1f8003de = ??
|
||||
|
||||
|
||||
;TEXT READ START!!!!!!!!!
|
||||
8001ad60 00 00 a5 92 lbu r5,0x0(s5)
|
||||
8001ad64 00 00 00 00 nop
|
||||
8001ad68 bd 00 a0 10 beq r5,zero,LAB_8001b060
|
||||
8001ad6c 01 00 b5 26 _addiu s5,s5,0x1
|
||||
8001ad70 08 80 16 3c lui s6,0x8008
|
||||
8001ad74 68 ce de 26 addiu s8,s6,-0x3198
|
||||
8001ad78 1c 00 b0 af sw s0,local_3c(sp)
|
||||
8001ad7c ff 00 10 3c lui s0,0xff
|
||||
8001ad80 ff ff 10 36 ori s0,s0,0xffff
|
||||
8001ad84 20 00 b1 af sw s1,local_38(sp)
|
||||
LAB_8001ad88 XREF[1]: 8001b058(j)
|
||||
8001ad88 99 ff a3 24 addiu v1,r5,-0x67
|
||||
8001ad8c 13 00 62 2c sltiu v0,v1,0x13
|
||||
8001ad90 0b 00 40 10 beq v0,zero,switchD_8001adac::caseD_68
|
||||
8001ad94 80 10 03 00 _sll v0,v1,0x2
|
||||
8001ad98 01 80 0f 3c lui t7,0x8001
|
||||
8001ad9c b4 06 ef 25 addiu t7,t7,0x6b4
|
||||
8001ada0 21 10 4f 00 addu v0,v0,t7
|
||||
8001ada4 00 00 42 8c lw v0,0x0(v0)=>->switchD_8001adac::caseD_67 = 8001adb4
|
||||
8001ada8 00 00 00 00 nop
|
||||
switchD_8001adac::switchD
|
||||
8001adac 08 00 40 00 jr v0
|
||||
8001adb0 00 00 00 00 _nop
|
||||
switchD_8001adac::caseD_6a XREF[6]: 800106b4(*), 800106c0(*), 800106d8(*),
|
||||
switchD_8001adac::caseD_70 800106dc(*), 800106fc(*), 8001adac(j)
|
||||
switchD_8001adac::caseD_71
|
||||
switchD_8001adac::caseD_79
|
||||
switchD_8001adac::caseD_67
|
||||
8001adb4 1c 00 b7 8f lw s7,local_3c(sp)
|
||||
8001adb8 73 6b 00 08 j LAB_8001adcc
|
||||
8001adbc 02 00 f1 26 _addiu s1,s7,0x2
|
||||
switchD_8001adac::caseD_69 XREF[16]: 800106b8(*), 800106bc(*), 800106c4(*),
|
||||
switchD_8001adac::caseD_6b 800106c8(*), 800106cc(*), 800106d0(*),
|
||||
switchD_8001adac::caseD_6c 800106d4(*), 800106e0(*), 800106e4(*),
|
||||
switchD_8001adac::caseD_6d 800106e8(*), 800106ec(*), 800106f0(*),
|
||||
switchD_8001adac::caseD_6e 800106f4(*), 800106f8(*), 8001ad90(j),
|
||||
switchD_8001adac::caseD_6f 8001adac(j)
|
||||
switchD_8001adac::caseD_72
|
||||
switchD_8001adac::caseD_73
|
||||
switchD_8001adac::caseD_74
|
||||
switchD_8001adac::caseD_75
|
||||
switchD_8001adac::caseD_76
|
||||
switchD_8001adac::caseD_77
|
||||
switchD_8001adac::caseD_78
|
||||
switchD_8001adac::caseD_68
|
||||
8001adc0 20 00 b8 8f lw t8,local_38(sp)
|
||||
8001adc4 00 00 00 00 nop
|
||||
8001adc8 03 8c 18 00 sra s1,t8,0x10
|
||||
LAB_8001adcc XREF[1]: 8001adb8(j)
|
||||
8001adcc 18 00 b9 8f lw t9,local_40(sp)
|
||||
8001add0 00 00 00 00 nop
|
||||
8001add4 12 00 20 13 beq t9,zero,LAB_8001ae20
|
||||
8001add8 e0 ff a5 24 _addiu r5,r5,-0x20
|
||||
8001addc 01 80 02 3c lui v0,0x8001
|
||||
8001ade0 50 06 42 24 addiu v0,v0,0x650
|
||||
8001ade4 21 10 a2 00 addu v0,r5,v0
|
||||
8001ade8 01 80 03 3c lui v1,0x8001
|
||||
8001adec 3c 06 63 24 addiu v1,v1,0x63c
|
||||
8001adf0 00 00 42 90 lbu v0,0x0(v0)=>DAT_80010630 = 63h c
|
||||
8001adf4 28 00 af 97 lhu t7,local_30(sp)
|
||||
8001adf8 40 10 02 00 sll v0,v0,0x1
|
||||
8001adfc 21 10 43 00 addu v0,v0,v1
|
||||
8001ae00 00 00 43 90 lbu v1=>DAT_8001063c,0x0(v0)
|
||||
8001ae04 01 00 42 90 lbu v0,0x1(v0)=>DAT_8001063d = 04h
|
||||
8001ae08 23 18 e3 01 subu v1,t7,v1
|
||||
8001ae0c 00 24 03 00 sll r4,v1,0x10
|
||||
8001ae10 03 9c 04 00 sra s3,r4,0x10
|
||||
8001ae14 21 10 43 00 addu v0,v0,v1
|
||||
8001ae18 8e 6b 00 08 j LAB_8001ae38
|
||||
8001ae1c 28 00 a2 a7 _sh v0,local_30(sp)
|
||||
|
||||
|
||||
LAB_8001ae20 XREF[1]: 8001add4(j)
|
||||
8001ae20 28 00 b7 97 lhu s7,local_30(sp)
|
||||
8001ae24 04 00 82 96 lhu v0,0x4(s4)
|
||||
8001ae28 00 1c 17 00 sll v1,s7,0x10
|
||||
8001ae2c 03 1c 03 00 sra v1,v1,0x10
|
||||
8001ae30 c0 10 02 00 sll v0,v0,0x3
|
||||
8001ae34 21 98 62 00 addu s3,v1,v0
|
||||
|
||||
|
||||
|
||||
LAB_8001ae38 XREF[1]: 8001ae18(j)
|
||||
8001ae38 c8 6c 00 0c jal GenerateSmallChar undefined FUN_8001b320()
|
||||
8001ae3c 21 20 a0 00 _move r4,r5
|
||||
8001ae40 00 80 0e 3c lui t6,0x8000
|
||||
8001ae44 00 ff 0a 3c lui t2,0xff00
|
||||
8001ae48 21 48 80 02 move t1,s4
|
||||
8001ae4c 08 80 0c 3c lui t4,0x8008
|
||||
8001ae50 58 ce 8d 25 addiu t5,t4,-0x31a8
|
||||
8001ae54 80 1f 0b 3c lui t3,0x1f80
|
||||
8001ae58 88 03 6b 35 ori t3,t3,0x388
|
||||
8001ae5c 21 40 80 02 move t0,s4
|
||||
8001ae60 08 00 53 a6 sh s3,0x8(s2)=>DAT_1f8003d8 = ??
|
||||
8001ae64 0a 00 51 a6 sh s1,0xa(s2)=>DAT_1f8003da = ??
|
||||
|
||||
PageLoop:
|
||||
LAB_8001ae68 XREF[1]: 8001b038(j)
|
||||
8001ae68 68 ce c2 8e lw v0,-0x3198(s6)=>DMA_NEXT_FREE_CHAIN_8007ce68 = ??
|
||||
8001ae6c 00 00 00 00 nop
|
||||
8001ae70 24 20 4a 00 and r4,v0,t2
|
||||
8001ae74 24 10 50 00 and v0,v0,s0
|
||||
8001ae78 25 28 4e 00 or r5,v0,t6
|
||||
8001ae7c 04 00 c2 8f lw v0,0x4(s8)=>DMA_COUNTER_8007ce6c = ??
|
||||
8001ae80 00 00 a3 8c lw v1,0x0(r5)
|
||||
8001ae84 ff ff 42 24 addiu v0,v0,-0x1
|
||||
8001ae88 24 18 70 00 and v1,v1,s0
|
||||
8001ae8c 25 20 83 00 or r4,r4,v1
|
||||
8001ae90 04 00 c2 af sw v0,0x4(s8)=>DMA_COUNTER_8007ce6c = ??
|
||||
8001ae94 68 ce c4 ae sw r4,-0x3198(s6)=>DMA_NEXT_FREE_CHAIN_8007c = ??
|
||||
|
||||
CopyCmdFromScratch:
|
||||
; CopyScriptChain copy from scratch
|
||||
8001ae98 00 00 58 8e lw t8,0x0(s2)=>DAT_1f8003d0 = ??
|
||||
8001ae9c 04 00 59 8e lw t9,0x4(s2)=>DAT_1f8003d4 = ??
|
||||
8001aea0 08 00 4f 8e lw t7,0x8(s2)=>DAT_1f8003d8 = ??
|
||||
8001aea4 0c 00 57 8e lw s7,0xc(s2)=>DAT_1f8003dc = ??
|
||||
8001aea8 00 00 b8 ac sw t8,0x0(r5)
|
||||
8001aeac 04 00 b9 ac sw t9,0x4(r5)
|
||||
8001aeb0 08 00 af ac sw t7,0x8(r5)
|
||||
8001aeb4 0c 00 b7 ac sw s7,0xc(r5)
|
||||
8001aeb8 10 00 58 8e lw t8,0x10(s2)=>DAT_1f8003e0 = ??
|
||||
8001aebc 00 00 00 00 nop
|
||||
|
||||
8001aec0 10 00 b8 ac sw t8,0x10(r5)
|
||||
8001aec4 18 00 03 8d lw v1,0x18(t0)
|
||||
8001aec8 00 00 a2 8c lw v0,0x0(r5)
|
||||
8001aecc 00 00 63 8c lw v1,0x0(v1)
|
||||
8001aed0 24 10 4a 00 and v0,v0,t2
|
||||
8001aed4 24 18 70 00 and v1,v1,s0
|
||||
8001aed8 25 10 43 00 or v0,v0,v1
|
||||
8001aedc 00 00 a2 ac sw v0,0x0(r5)
|
||||
8001aee0 18 00 04 8d lw r4,0x18(t0)
|
||||
8001aee4 00 00 00 00 nop
|
||||
;;;YEHU
|
||||
|
||||
8001aee8 00 00 82 8c lw v0,0x0(r4)
|
||||
8001aeec 24 18 b0 00 and v1,r5,s0
|
||||
8001aef0 24 10 4a 00 and v0,v0,t2
|
||||
8001aef4 25 10 43 00 or v0,v0,v1
|
||||
8001aef8 00 00 82 ac sw v0,0x0(r4)
|
||||
8001aefc 18 00 05 ad sw r5,0x18(t0)
|
||||
8001af00 04 00 22 95 lhu v0,0x4(t1)
|
||||
8001af04 00 00 00 00 nop
|
||||
8001af08 04 00 40 14 bne v0,zero,LAB_8001af1c
|
||||
8001af0c 00 00 00 00 _nop
|
||||
8001af10 28 00 05 ad sw r5,0x28(t0)
|
||||
8001af14 0c 00 33 a5 sh s3,0xc(t1)
|
||||
8001af18 0e 00 31 a5 sh s1,0xe(t1)
|
||||
|
||||
NotFirstChar: LAB_8001af1c XREF[1]: 8001af08(j)
|
||||
8001af1c 80 1f 05 3c lui r5,0x1f80
|
||||
8001af20 58 ce 82 8d lw v0,-0x31a8(t4)=>DAT_8007ce58 = ??
|
||||
8001af24 48 03 a5 34 ori r5,r5,0x348
|
||||
8001af28 24 20 4a 00 and r4,v0,t2
|
||||
8001af2c 24 10 50 00 and v0,v0,s0
|
||||
8001af30 25 38 4e 00 or r7,v0,t6
|
||||
8001af34 21 30 e0 00 move r6,r7
|
||||
8001af38 04 00 a2 8d lw v0,0x4(t5)=>DAT_8007ce5c = ??
|
||||
8001af3c 00 00 e3 8c lw v1,0x0(r7)
|
||||
8001af40 ff ff 42 24 addiu v0,v0,-0x1
|
||||
8001af44 24 18 70 00 and v1,v1,s0
|
||||
8001af48 25 20 83 00 or r4,r4,v1
|
||||
8001af4c 04 00 a2 ad sw v0,0x4(t5)=>DAT_8007ce5c = ??
|
||||
|
||||
8001af50 03 00 e2 30 andi v0,r7,0x3
|
||||
8001af54 16 00 40 10 beq v0,zero,LAB_8001afb0
|
||||
8001af58 58 ce 84 ad _sw r4,-0x31a8(t4)=>DAT_8007ce58 = ??
|
||||
|
||||
;;;;;;;;;;;;;;;Copy from ScratchPad To Chain
|
||||
|
||||
CopyBy2Bytes:
|
||||
LAB_8001af5c XREF[1]: 8001afa0(j)
|
||||
8001af5c 03 00 b8 88 lwl t8,0x3(r5)
|
||||
8001af60 00 00 b8 98 lwr t8,0x0(r5)=>DAT_1f800348 = ??
|
||||
8001af64 07 00 b9 88 lwl t9,0x7(r5)
|
||||
8001af68 04 00 b9 98 lwr t9,0x4(r5)=>DAT_1f80034c = ??
|
||||
8001af6c 0b 00 af 88 lwl t7,0xb(r5)
|
||||
8001af70 08 00 af 98 lwr t7,0x8(r5)=>DAT_1f800350 = ??
|
||||
8001af74 0f 00 b7 88 lwl s7,0xf(r5)
|
||||
8001af78 0c 00 b7 98 lwr s7,0xc(r5)=>DAT_1f800354 = ??
|
||||
8001af7c 03 00 d8 a8 swl t8,0x3(r6)
|
||||
8001af80 00 00 d8 b8 swr t8,0x0(r6)
|
||||
8001af84 07 00 d9 a8 swl t9,0x7(r6)
|
||||
8001af88 04 00 d9 b8 swr t9,0x4(r6)
|
||||
8001af8c 0b 00 cf a8 swl t7,0xb(r6)
|
||||
8001af90 08 00 cf b8 swr t7,0x8(r6)
|
||||
8001af94 0f 00 d7 a8 swl s7,0xf(r6)
|
||||
8001af98 0c 00 d7 b8 swr s7,0xc(r6)
|
||||
8001af9c 10 00 a5 24 addiu r5,r5,0x10
|
||||
8001afa0 ee ff ab 14 bne r5,t3,LAB_8001af5c
|
||||
8001afa4 10 00 c6 24 _addiu r6,r6,0x10
|
||||
8001afa8 f7 6b 00 08 j LAB_8001afdc
|
||||
8001afac 00 00 00 00 _nop
|
||||
|
||||
Copy16Bytes:
|
||||
LAB_8001afb0 XREF[2]: 8001af54(j), 8001afd4(j)
|
||||
8001afb0 00 00 b8 8c lw t8,0x0(r5)=>DAT_1f800348 = ??
|
||||
8001afb4 04 00 b9 8c lw t9,0x4(r5)=>DAT_1f80034c = ??
|
||||
8001afb8 08 00 af 8c lw t7,0x8(r5)=>DAT_1f800350 = ??
|
||||
8001afbc 0c 00 b7 8c lw s7,0xc(r5)=>DAT_1f800354 = ??
|
||||
8001afc0 00 00 d8 ac sw t8,0x0(r6)
|
||||
8001afc4 04 00 d9 ac sw t9,0x4(r6)
|
||||
8001afc8 08 00 cf ac sw t7,0x8(r6)
|
||||
8001afcc 0c 00 d7 ac sw s7,0xc(r6)
|
||||
8001afd0 10 00 a5 24 addiu r5,r5,0x10
|
||||
8001afd4 f6 ff ab 14 bne r5,t3,LAB_8001afb0
|
||||
8001afd8 10 00 c6 24 _addiu r6,r6,0x10
|
||||
|
||||
last4BytesCopy:
|
||||
LAB_8001afdc XREF[1]: 8001afa8(j)
|
||||
8001afdc 03 00 b8 88 lwl t8,0x3(r5)
|
||||
8001afe0 00 00 b8 98 lwr t8,0x0(r5)=>DAT_1f800358 = ??
|
||||
8001afe4 00 00 00 00 nop
|
||||
8001afe8 03 00 d8 a8 swl t8,0x3(r6)
|
||||
8001afec 00 00 d8 b8 swr t8,0x0(r6)
|
||||
; linking DMA char+copysprite
|
||||
|
||||
|
||||
8001aff0 18 00 03 8d lw v1,0x18(t0)
|
||||
8001aff4 00 00 e2 8c lw v0,0x0(r7)
|
||||
8001aff8 00 00 63 8c lw v1,0x0(v1)
|
||||
8001affc 24 10 4a 00 and v0,v0,t2
|
||||
8001b000 24 18 70 00 and v1,v1,s0
|
||||
8001b004 25 10 43 00 or v0,v0,v1
|
||||
8001b008 00 00 e2 ac sw v0,0x0(r7)
|
||||
8001b00c 18 00 04 8d lw r4,0x18(t0)
|
||||
8001b010 00 00 00 00 nop
|
||||
8001b014 00 00 82 8c lw v0,0x0(r4)
|
||||
8001b018 24 18 f0 00 and v1,r7,s0
|
||||
8001b01c 24 10 4a 00 and v0,v0,t2
|
||||
8001b020 25 10 43 00 or v0,v0,v1
|
||||
8001b024 00 00 82 ac sw v0,0x0(r4)
|
||||
|
||||
8001b028 18 00 07 ad sw r7,0x18(t0)
|
||||
|
||||
8001b02c 04 00 08 25 addiu t0,t0,0x4
|
||||
8001b030 08 00 22 25 addiu v0,t1,0x8
|
||||
8001b034 2b 10 02 01 sltu v0,t0,v0
|
||||
8001b038 8b ff 40 14 bne v0,zero,LAB_8001ae68 Go To pageLoop
|
||||
8001b03c 00 00 00 00 _nop
|
||||
|
||||
;DMA OVERFLOW CHECK!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (8007b6d4)
|
||||
|
||||
|
||||
8001b040 04 00 82 96 lhu v0,0x4(s4)
|
||||
8001b044 00 00 00 00 nop
|
||||
8001b048 01 00 42 24 addiu v0,v0,0x1
|
||||
8001b04c 04 00 82 a6 sh v0,0x4(s4)
|
||||
8001b050 00 00 a5 92 lbu r5,0x0(s5)
|
||||
8001b054 00 00 00 00 nop
|
||||
8001b058 4b ff a0 14 bne r5,zero,LAB_8001ad88
|
||||
8001b05c 01 00 b5 26 _addiu s5,s5,0x1
|
||||
|
||||
|
||||
TextEnd:
|
||||
|
||||
LAB_8001b060 XREF[1]: 8001ad68(j)
|
||||
8001b060 21 90 00 00 clear s2
|
||||
8001b064 08 80 13 3c lui s3,0x8008
|
||||
8001b068 68 ce 75 26 addiu s5,s3,-0x3198
|
||||
8001b06c ff 00 11 3c lui s1,0xff
|
||||
8001b070 ff ff 31 36 ori s1,s1,0xffff
|
||||
8001b074 21 80 80 02 move s0,s4
|
||||
8001b078 21 28 00 00 clear r5
|
||||
|
||||
PageTLoop:
|
||||
LAB_8001b07c XREF[1]: 8001b0d4(j)
|
||||
8001b07c 01 00 06 24 li r6,0x1
|
||||
8001b080 21 90 46 02 addu s2,s2,r6
|
||||
8001b084 00 80 02 3c lui v0,0x8000
|
||||
8001b088 00 ff 04 3c lui r4,0xff00
|
||||
8001b08c 68 ce 63 8e lw v1,-0x3198(s3)=>DMA_NEXT_FREE_CHAIN_8007ce68 = ??
|
||||
8001b090 9c 00 87 8f lw r7,0x9c(gp)=>DAT_8007ca0c
|
||||
8001b094 24 18 71 00 and v1,v1,s1
|
||||
8001b098 25 18 62 00 or v1,v1,v0
|
||||
8001b09c 30 00 03 ae sw v1,0x30(s0)
|
||||
8001b0a0 68 ce 62 8e lw v0,-0x3198(s3)=>DMA_NEXT_FREE_CHAIN_8007ce68 = ??
|
||||
8001b0a4 00 00 63 8c lw v1,0x0(v1)
|
||||
8001b0a8 24 10 44 00 and v0,v0,r4
|
||||
8001b0ac 24 18 71 00 and v1,v1,s1
|
||||
8001b0b0 04 00 a4 8e lw r4,0x4(s5)=>DMA_COUNTER_8007ce6c = ??
|
||||
8001b0b4 25 10 43 00 or v0,v0,v1
|
||||
8001b0b8 68 ce 62 ae sw v0,-0x3198(s3)=>DMA_NEXT_FREE_CHAIN_8007ce68 = ??
|
||||
8001b0bc ff ff 84 24 addiu r4,r4,-0x1
|
||||
8001b0c0 04 00 a4 ae sw r4,0x4(s5)=>DMA_COUNTER_8007ce6c = ??
|
||||
8001b0c4 30 00 04 8e lw r4,0x30(s0)
|
||||
8001b0c8 3f 5e 01 0c jal SetDrawTPage void SetDrawTPage(DR_TPAGE * p, int dfe, int dtd, int tpage)
|
||||
8001b0cc 04 00 10 26 _addiu s0,s0,0x4
|
||||
8001b0d0 02 00 42 2e sltiu v0,s2,0x2
|
||||
8001b0d4 e9 ff 40 14 bne v0,zero,LAB_8001b07c
|
||||
8001b0d8 21 28 00 00 _clear r5
|
||||
8001b0dc 21 10 80 02 move v0,s4
|
||||
|
||||
8001b0e0 54 00 bf 8f lw ra,local_4(sp)
|
||||
8001b0e4 50 00 be 8f lw s8,local_8(sp)
|
||||
8001b0e8 4c 00 b7 8f lw s7,local_c(sp)
|
||||
8001b0ec 48 00 b6 8f lw s6,local_10(sp)
|
||||
8001b0f0 44 00 b5 8f lw s5,local_14(sp)
|
||||
8001b0f4 40 00 b4 8f lw s4,local_18(sp)
|
||||
8001b0f8 3c 00 b3 8f lw s3,local_1c(sp)
|
||||
8001b0fc 38 00 b2 8f lw s2,local_20(sp)
|
||||
8001b100 34 00 b1 8f lw s1,local_24(sp)
|
||||
8001b104 30 00 b0 8f lw s0,local_28(sp)
|
||||
8001b108 08 00 e0 03 jr ra
|
||||
8001b10c 58 00 bd 27 _addiu sp,sp,0x58
|
||||
123
GROUPED_ALGO.txt
Normal file
123
GROUPED_ALGO.txt
Normal file
@@ -0,0 +1,123 @@
|
||||
- Проверка на "мой формат" текста. Проверка 13ого бита команды. Если нет - вызов оригинальной японской процедуры
|
||||
- Инициализация регистров (сдвиг стека, сохранение регистров)
|
||||
- Инициализация "текстовой строки"
|
||||
- получение адреса свободной цепочки/декремент счётчика
|
||||
- вызов оригинальной процедуры инициализации параметров initCopyCharChain
|
||||
- получение/чистка координат, сохранение в стек
|
||||
- сохранение множителя цвета/признака тени
|
||||
- подготовка scratchpad
|
||||
- готовим команду rect, копируя туда координаты, команду 64808080 и первые экранные координаты
|
||||
- готовим "шаблон-заголовок" команды CpuToVram с последней командой 0x01 в scratchpad
|
||||
|
||||
- tPos = 0
|
||||
- textEnd = false
|
||||
ЦИКЛ ЧТЕНИЯ ГРУППЫ СИМВОЛОВ
|
||||
- Считаем количество символов (lineLen) до конца строки от текущей позиции (tPos), одновременно копируя коды в буфер
|
||||
- Если lineLen >= 10
|
||||
- lineLen = 10
|
||||
- tPos += 10
|
||||
- textEnd = false
|
||||
- Else
|
||||
- lineLen = lineLen
|
||||
- tPos += lineLen
|
||||
- textEnd = true
|
||||
- Вызываем процедуру формирования данных строки длиной (lineLen)
|
||||
- Здесь формируем всю строку в scratchpad, в готовом 4битном формате,
|
||||
возвращая реальную width
|
||||
- в первой версии не будем применять тень (разберёмся потом)
|
||||
- Вычисляем spriteCmdCount = количество нужных команд CpuToVram, вычисляя ceil(width/8)
|
||||
ЗАПИСЬ КОМАНД!
|
||||
Запись команд происходит снизу вверх! То есть, сначала пишем rect, потом все CpuToVram,
|
||||
связывая их и записывая текущую цепочку в textParams.
|
||||
ЦИКЛ СТРАНИЦ (1,2)
|
||||
- получение адреса свободной цепочки/декремент счётчика
|
||||
- КОПИРОВАНИЕ КОМАНДЫ rect из scratchpad
|
||||
- установка width и координаты в rect
|
||||
- установка x = tPos * 6 + initX в rect
|
||||
ЦИКЛ ФОРМИРОВАНИЯ СПРАЙТОВ 8x12 (< spriteCmdCount)
|
||||
- получение адреса свободной цепочки/декремент счётчика
|
||||
- Запись шаблона CpuToVram из scratchpad в новую цепочку
|
||||
- Запись данных символа 8x12 из scratchpad в новую цепочку
|
||||
- Связь предыдущего блока с текущим/обновление text_params
|
||||
КОНЕЦ ЦИКЛА СПРАЙТОВ
|
||||
КОНЕЦ ЦИКЛА СТРАНИЦ
|
||||
Если textEnd == 0 переход на начало цикла
|
||||
КОНЕЦ ЦИКЛА ГРУППЫ СИМВОЛОВ
|
||||
ЦИКЛ ДОБАВЛЕНИЯ setTpage для 2 страниц
|
||||
- получение адреса свободной цепочки/декремент счётчика
|
||||
- вызов/запись команды setTpage
|
||||
- связь последней команды + обновление text_params
|
||||
КОНЕЦ ЦИКЛА
|
||||
Возврат значения text_params(ссылка на всю текстовую структуру)
|
||||
|
||||
|
||||
Формула чтения данных символа из scratchpad:
|
||||
y = charLen * 4
|
||||
for x = 0 to width * 4 - 1
|
||||
chardataBytes.Add(y * (len * 4) + x)
|
||||
next x
|
||||
|
||||
|
||||
IS inner data
|
||||
|
||||
1f8001e0 -
|
||||
1f800348 - 4bit chardata
|
||||
|
||||
1f800348 - CpuToVram cmd template
|
||||
1f800358 cmdLengt (0x10)
|
||||
0000000a
|
||||
3001f001 - 0130 + (spriteIndex * 2) : 01f0.
|
||||
02000c00
|
||||
........
|
||||
|
||||
|
||||
00000001 - flushcache in result chain
|
||||
|
||||
1f800390 -
|
||||
1f8003ac - 1bpp to 4bpp convert table
|
||||
|
||||
1f8003d0 - Rect
|
||||
cmdLengt (04)
|
||||
80808064
|
||||
5c00d400 - dest coords
|
||||
c0f0d37f - src coords & clut
|
||||
08000c00 - width & heigth
|
||||
|
||||
IS regs:
|
||||
a2 - FF000000
|
||||
a3 - 80080000
|
||||
|
||||
s3 - scratch read address
|
||||
s6 - text read pointer
|
||||
s7 - 80000000 address mask
|
||||
|
||||
t0 - 00FFFFFF
|
||||
|
||||
t1 - print_params for PAGE
|
||||
|
||||
t1 + 4 - short - charcount
|
||||
t1 + 18 - chain last addr
|
||||
t1 + 1C - chain last addr
|
||||
|
||||
t4 - overall print params
|
||||
|
||||
8007b6d0 - next Free Chain addr
|
||||
8007b6d4 - left Chain Counter
|
||||
|
||||
0xa0(gp) - char vram UV
|
||||
0xa4(gp) - char texture page for setTpage
|
||||
0xa8(gp) - half - CLUT
|
||||
0xac(gp) - color
|
||||
|
||||
0xb0(gp) - character width multiplier
|
||||
|
||||
|
||||
Custom regs:
|
||||
t5 - current chunk cpu2vram blocks count
|
||||
t6 - current overall X
|
||||
t7 -
|
||||
t8 -
|
||||
|
||||
s2 - char count for current sprite
|
||||
|
||||
s8 - chunk block index (cpu2vram)
|
||||
210
IS_charload_grouped.asm
Normal file
210
IS_charload_grouped.asm
Normal file
@@ -0,0 +1,210 @@
|
||||
|
||||
// LOADING CHAR FROM CUSTOM FONT FOR ALL LINE
|
||||
|
||||
make_char_line_in_scratch:
|
||||
|
||||
addiu sp, sp,-0x18
|
||||
sw ra, 0x10(sp)
|
||||
sw t5, 0x14(sp)
|
||||
move t5, a0 //char num
|
||||
sll s3, a1, 0x2 //width in bytes (sprite count * 4)
|
||||
lui t7, MyAddr
|
||||
addiu t7, -0x0c //Text buffer pointer
|
||||
|
||||
char_data_clear:
|
||||
lui a0, 0x1f80
|
||||
addiu a1, a0, 0x1c0
|
||||
addiu a2, a0, 0x348
|
||||
li v0, 0
|
||||
char_data_loop:
|
||||
sw v0, 0x0(a1)
|
||||
addiu a1, 0x4
|
||||
bne a1, a2, char_data_loop
|
||||
nop
|
||||
|
||||
addiu s1, a0, 0x01c0 // destination address reset
|
||||
|
||||
li a2, 0 // char index counter
|
||||
lbu v0, 0x0(t7)
|
||||
lbu t2, 0xac(gp) //load color
|
||||
addiu t7, t7, 0x01
|
||||
|
||||
lui a3, 0x1f80
|
||||
ori a3, a3,0x390 // set scratch convert addr r7 = 1f8002e0
|
||||
|
||||
|
||||
chars_font_loop:
|
||||
addiu v0, -0x20 //shift unprintable
|
||||
|
||||
beq v0, zero, spaceJump //If space (0x20 ASCII) -- bypass char
|
||||
nop
|
||||
|
||||
lui v1, 0x801f // //load font addr to r3 (801ef000 + BA00)
|
||||
ori v1, v1, 0xaa00 // ==== 801faa00
|
||||
sll t0, v0, 2 // t0 = v0 * 4
|
||||
sll v0, v0, 3 // v0 = v0 * 8
|
||||
addu v0, v0, t0 // v0 = (v0*8) + (v0*4) = v0*12
|
||||
addu t1, v0, v1 //t1 = char addr // t1 = r2(offs) + r3 (start)
|
||||
|
||||
clear t3 //new lines counter
|
||||
|
||||
char_lines_loop:
|
||||
lbu v1, 0x0(t1) //load byte of char font to r3
|
||||
nop
|
||||
beq v1, zero, zero_jump
|
||||
nop
|
||||
|
||||
its_not_empty:
|
||||
//right
|
||||
andi a0, v1, 0xf // a0 = r3 & 0f - cutting left semibyte
|
||||
sll a0, a0, 0x1 // a0 << 1
|
||||
addu a0, a0, a3 // a0 += bit table
|
||||
lhu a0, 0x0(a0) // в a0 - правый полусимвол в 4 бит
|
||||
//left
|
||||
srl a1, v1, 0x4 // r3 >> 4
|
||||
andi a1, a1, 0xf // r2 = r3 & 0f
|
||||
sll a1, a1, 0x1 // r2 << 1
|
||||
addu a1, a1, a3 // r2 = r2 + to4bitConvertTableAddr (r7)
|
||||
lhu a1, 0x0(a1)//>DAT_1f8002e0 в a1 - левый полусимвол в 4 бит
|
||||
nop
|
||||
//combine & color
|
||||
sll a1, 0x10
|
||||
or a0, a1
|
||||
mult a0, t2 //set color - сохраняем в регистре умножения готовые 4 байта
|
||||
//line dest addr calc -
|
||||
// s1(dest addr) + ((current line * (charcount * 4) + charIndex * 3))
|
||||
|
||||
//calc char index * 3
|
||||
sll a1, a2, 1
|
||||
addu a1, a1, a2
|
||||
|
||||
//getting final char line word...
|
||||
nop
|
||||
mflo t4 // t4 = final char
|
||||
|
||||
//multiplying current line * width
|
||||
mult t3, s3
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
mflo a0
|
||||
|
||||
//getting final address
|
||||
addu a0, a0, a1 // a0 = current_line * width_in_bytes + charindex * 3
|
||||
addu a0, a0, s1 // s1 = destination write address
|
||||
|
||||
andi v0, t4, 0xFF //
|
||||
sb v0, 0x00(a0) //
|
||||
|
||||
sra v0, t4, 0x08 //
|
||||
andi v0, v0, 0xFF //
|
||||
sb v0, 0x01(a0) // Byte by byte char data save in LITTLE ENDIAN
|
||||
|
||||
sra v0, t4, 0x10 // cause we are not fitting to memory words
|
||||
andi v0, v0, 0xFF //
|
||||
sb v0, 0x02(a0) //
|
||||
|
||||
addiu v0, t5, -0x1
|
||||
bne a2, v0, not_last
|
||||
andi v1, t5, 0x3
|
||||
|
||||
beq v1, zero, divideby4
|
||||
|
||||
not_last:
|
||||
sra v0, t4, 0x18 // Байт рисуется только если длина не кратна 4
|
||||
andi v0, v0, 0xFF // и это не последний байт
|
||||
sb v0, 0x03(a0) // (иначе происходит наложение байта на следующую строку)
|
||||
|
||||
divideby4:
|
||||
|
||||
zero_jump:
|
||||
addiu t3, t3, 0x01 //inc line counter
|
||||
li v0, 0x0C //line max count
|
||||
bne t3, v0, char_lines_loop //comparing...
|
||||
addiu t1, t1, 0x01 //shift char font line address
|
||||
|
||||
spaceJump:
|
||||
addiu a2, a2, 0x1 // inc char index
|
||||
lbu v0, 0x0(t7)
|
||||
addiu t7, t7, 0x01
|
||||
|
||||
beq v0, zero, sprite_end //if we read 0 - end
|
||||
nop
|
||||
|
||||
bne a2, t5, chars_font_loop // if r3 counter<>0 goto loop
|
||||
nop
|
||||
|
||||
sprite_end:
|
||||
lbu v1, 0xad(gp) // >DAT_8007b23d_textMode load curText Shadow?
|
||||
li v0, 0x1
|
||||
bne v1, v0, NotShadow //Shadow character check
|
||||
nop
|
||||
lui a0, 0x1f80
|
||||
ori a0, a0, 0x1c0
|
||||
|
||||
make_shadow: //s3 - line width in bytes
|
||||
move a1, s3 // a1 = ширина
|
||||
sll a1, 0x1 //a1 = смещение на 3 строку (ширина * 2)
|
||||
sll v0, s3, 3 //v0 = ширина строки * 8
|
||||
addu v0, a1 //v0 = ширина строки * 10
|
||||
|
||||
addu a3, a0, v0 // a3 = указатель на 10 строку
|
||||
addu a0, a1 // a0 = Указатель на 3 строку
|
||||
|
||||
lbu t1, 0xac(gp) // v0 = базовый цвет символа
|
||||
li t2, 0xf // t2 = маска 0xF для работы с 4 битами пикселя
|
||||
addiu t1, 0x1 // t1 = цвет тени (базовый цвет + 1)
|
||||
|
||||
// Основной цикл по строкам (снизу вверх)
|
||||
shadow_row_loop:
|
||||
|
||||
clear t5 //clear sprite shift counter
|
||||
|
||||
//Цикл спрайтов в строке
|
||||
shadow_sprites_loop:
|
||||
|
||||
addu t7, a3, t5 //Текущий адрес спрайта = Адрес текущей строки + смещение спрайта
|
||||
lw t0, 0x0(t7) // t0 = текущая полоса спрайта
|
||||
clear a2 // a2 = счётчик пикселей в строке (X координата)
|
||||
li a1, 0x4 // a1 = сдвиг 1 пиксель вправо (4 бита)
|
||||
|
||||
// Внутренний цикл по пикселям в строке
|
||||
shadow_pixel_loop:
|
||||
sll v0, a2, 0x2 // v0 = смещение битов для исходного пикселя (X * 4)
|
||||
sllv v0, t2, v0 // v0 = маска для исходного пикселя (0xF << (X*4))
|
||||
and v0, t0, v0 // v0 = проверяем есть ли исходный пиксель
|
||||
beq v0, zero, no_s // если пикселя нет, пропускаем
|
||||
sllv v0, t2, a1 // v0 = маска для пикселя тени (0xF << позиция_тени)
|
||||
addu t8, t7, s3 //этот же байт в следующей строке = наш адрес + ширина строки
|
||||
lw v1, 0x0(t8) // v1 = следующая строка (где будет тень) // смещение на ВСЮ ШИРИНУ СТРОКИ
|
||||
|
||||
nop
|
||||
and v0, v1, v0 // проверяем занято ли место для тени
|
||||
bne v0, zero, no_s // если место занято, пропускаем
|
||||
sllv v0, t1, a1 // v0 = цвет тени в нужной позиции
|
||||
|
||||
or v0, v1, v0 // добавляем тень к следующей строке
|
||||
sw v0, 0x0(t8) // сохраняем строку с тенью
|
||||
|
||||
no_s:
|
||||
addiu a2, a2, 0x1 // следующий пиксель (X+1)
|
||||
sltiu v0, a2, 0x7 // проверяем X < 7 (только 7 из 8 пикселей)
|
||||
bne v0, zero, shadow_pixel_loop // продолжаем цикл по пикселям
|
||||
addiu a1, a1, 0x4 // следующая позиция тени (+4 бита = +1 пиксель)
|
||||
|
||||
addiu t5, t5, 0x04
|
||||
bne t5, s3, shadow_sprites_loop
|
||||
nop
|
||||
|
||||
// next line
|
||||
subu a3, s3 //Двигаемся назад на ширину строки
|
||||
sltu v0, a3, a0 // проверяем вышли ли за верхнюю границу
|
||||
beq v0, zero, shadow_row_loop // продолжаем цикл по строкам
|
||||
nop
|
||||
|
||||
NotShadow:
|
||||
lw t5,0x14(sp)
|
||||
lw ra,0x10(sp) //Restore stack and exit
|
||||
nop
|
||||
jr ra
|
||||
addiu sp, sp, 0x18
|
||||
480
IS_main_grouped.asm
Normal file
480
IS_main_grouped.asm
Normal file
@@ -0,0 +1,480 @@
|
||||
;
|
||||
; Persona 2 Innocent Sin (PSX) JAP / Custom Characters/Data Patch
|
||||
; Author: Sergey Shemet 12/10/2021
|
||||
|
||||
.psx
|
||||
|
||||
// Определения функций
|
||||
.definelabel SetDrawTPage, 0x800542cc
|
||||
.definelabel storeColor, 0x8001b0c8
|
||||
.definelabel initCopyCharChain, 0x8001a070
|
||||
.definelabel makeCharPixels, 0x8001a08f // need custom routine with custom font
|
||||
.definelabel GenerateSmallChar, 0x8001a284 // need custom routine
|
||||
.definelabel MakeShadowSmallChar, 0x8001a20c
|
||||
.definelabel PrintBigDMAText, 0x80019300
|
||||
|
||||
.definelabel MyAddr, 0x8009
|
||||
|
||||
.open "SLPS_021.00", 0x8000F800
|
||||
|
||||
.include "complex_strings_copy.asm"
|
||||
|
||||
.org 0x80090000
|
||||
|
||||
ExternalPrint:
|
||||
// Текстовая тестовая процедура
|
||||
move v1, s3 // Сохраняем s3
|
||||
move s3, a0 // Устанавливаем s3 как адрес текста
|
||||
|
||||
lhu v0, 0x0(s3) // Читаем 2 байта текста
|
||||
move s3, v1 // Восстанавливаем s3
|
||||
srl v1, v0, 0xD // Проверяем 13-й бит (система 1 байт)
|
||||
bne v1, zero, MyPrintLineRoutine // Если установлен, переходим к нашей процедуре
|
||||
clear v1
|
||||
j PrintBigDMAText // Иначе используем стандартную процедуру
|
||||
nop
|
||||
|
||||
MyPrintLineRoutine:
|
||||
addiu sp, sp, -0x50 // Выделяем место в стеке
|
||||
sw ra, 0x4c(sp) // Сохраняем регистры
|
||||
sw s1, 0x2c(sp)
|
||||
sw s2, 0x30(sp)
|
||||
sw s3, 0x34(sp)
|
||||
sw s4, 0x38(sp)
|
||||
sw s5, 0x3c(sp)
|
||||
sw s6, 0x40(sp) // Сохраняем регистры
|
||||
sw s8, 0x48(sp)
|
||||
sw s7, 0x44(sp)
|
||||
|
||||
move s6, a0 // Адрес чтения текста -> s6
|
||||
move s1, a1
|
||||
move s2, a2
|
||||
|
||||
|
||||
// Смещаем поинтер чтения
|
||||
andi v0, v0, 0xff // Берем младший байт
|
||||
addiu s6, s6, 0x2 // Сдвигаем указатель текста на +2 байта
|
||||
lui s3, MyAddr
|
||||
sh v0, -0x10(s3) // Сохраняем счетчик байтов @ 8008fff0 для общего количества
|
||||
sh v0, -0x0e(s3) // Сохраняем счетчик байтов @ 8008fff2 для обратного отсчёта
|
||||
|
||||
|
||||
lui t0, 0xff
|
||||
ori t0, t0, 0xffff // t0 = 00FFFFFF
|
||||
|
||||
sw s0, 0x28(sp) // Сохраняем s0 в стеке
|
||||
andi s0, a3, 0xff // s0 - режим текста (цвет и тень)
|
||||
move a0, s0 // a0 = s0 (обрезанный цвет)
|
||||
lui a3, 0x8008 // a3 = 80080000
|
||||
lui a2, 0xff00 // a2 = FF000000
|
||||
|
||||
//Начинаем формировать цепочки
|
||||
addiu t1, a3, -0x4930 // t1 = 8007b6d0 - новая свободная цепочка
|
||||
lw v1, -0x4930(a3) // v1 = загружаем свободную цепочку
|
||||
lbu a1, 0x60(sp) // Флаг тени из стека -> a1
|
||||
lui v0, 0x8000 // v0 = 80000000
|
||||
|
||||
// Инициализация цвета и textParams
|
||||
and a2, v1, a2 // a2 = v1 & ff000000
|
||||
andi a1, a1, 0xff // Очищаем режим текста
|
||||
and v1, v1, t0 // v1 & 00ffffff
|
||||
or s4, v1, v0 // s4 - основной адрес свободной цепочки
|
||||
lw v0, 0x4(t1) // Загружаем счетчик DMA
|
||||
lw v1, 0x0(s4) // v1 = следующая свободная цепочка
|
||||
addiu v0, v0, -0x1 // Уменьшаем счетчик DMA
|
||||
and v1, v1, t0 // v1 & 00ffffff
|
||||
or a2, a2, v1 // a2 | v1 = следующая свободная цепочка
|
||||
sw v0, 0x4(t1) // Сохраняем счетчик DMA
|
||||
jal storeColor
|
||||
sw a2, -0x4930(a3) // Сохраняем следующую свободную цепочку
|
||||
move a0, s4 // Текущий адрес цепочки
|
||||
|
||||
sll a1, s1, 0x10 // a1 = X << 16
|
||||
sra a1, a1, 0x10 // a1 = X координата
|
||||
sll a2, s2, 0x10 // a2 = Y << 16
|
||||
sra a2, a2, 0x10 // a2 = Y координата
|
||||
jal initCopyCharChain // Инициализация цепочек символов
|
||||
move a3, s0 // Сохраняем режим текста
|
||||
|
||||
// Шаблон cpuToVram
|
||||
cputovram_scratchpad_template:
|
||||
lui a3, 0x1f80
|
||||
ori a3, a3, 0x0348 // a3 = первый символ начала
|
||||
|
||||
lui a1, 0x0F00 // Количество команд без flushcache
|
||||
sw a1, 0x0(a3) // Сохраняем количество команд
|
||||
|
||||
lui a0, 0xa000 // a0 = a0000000
|
||||
sw a0, 0x4(a3)
|
||||
|
||||
lui v0, 0x01f0
|
||||
ori v0, 0x0130
|
||||
sw v0, 0x8(a3) // сохраняем VU для CPUtoVRAM
|
||||
|
||||
lui v0, 0xc
|
||||
ori v0, 0x2
|
||||
sw v0, 0xc(a3) // сохраняем 000c0002
|
||||
|
||||
_1bppTo4bpp_table_template:
|
||||
// Копирование таблицы преобразования 1bpp в 4bpp
|
||||
lui t8, 0x1f80
|
||||
ori t8, t8, 0x390
|
||||
lui t7, 0x8001
|
||||
ori t7, t7, 0x3e8
|
||||
lw t5, 0x0(t7)
|
||||
lw t6, 0x4(t7)
|
||||
sw t5, 0x0(t8)
|
||||
sw t6, 0x4(t8)
|
||||
lw t5, 0x8(t7)
|
||||
lw t6, 0xC(t7)
|
||||
sw t5, 0x8(t8)
|
||||
sw t6, 0xC(t8)
|
||||
lw t5, 0x10(t7)
|
||||
lw t6, 0x14(t7)
|
||||
sw t5, 0x10(t8)
|
||||
sw t6, 0x14(t8)
|
||||
lw t5, 0x18(t7)
|
||||
lw t6, 0x1C(t7)
|
||||
sw t5, 0x18(t8)
|
||||
sw t6, 0x1C(t8)
|
||||
|
||||
rect_scratchpad_template:
|
||||
// Шаблон команды rect в scratchpad
|
||||
lui s3, 0x1f80
|
||||
ori s3, 0x03d0 // s3 = 1f8003d0 - адрес rect в scratchpad
|
||||
lui v0, 0x0400
|
||||
sw v0, 0x0(s3) // Длина цепочки = 4
|
||||
lui v0, 0x6480
|
||||
ori v0, 0x8080
|
||||
sw v0, 0x4(s3)
|
||||
li v0, 0xf0c0
|
||||
sh v0, 0xc(s3) // Сохраняем координаты VU (всегда f0c0)
|
||||
lhu v1, 0xa8(gp) // Загружаем CLUT из GP (всегда 7FD3)
|
||||
|
||||
li v0, 0
|
||||
sw v0, 0x8(s3) //Чистим экранные координаты
|
||||
sh s2, 0xa(s3) //И сразу устанавливаем Y
|
||||
|
||||
lui v0, 0xc
|
||||
ori v0, 0x8 // Ширина спрайта = 8
|
||||
sw v0, 0x10(s3) // Сохраняем ширину
|
||||
sh v1, 0xe(s3) // Сохраняем CLUT
|
||||
|
||||
make_sprite_size_table:
|
||||
lui s3, 0x1f80
|
||||
ori s3, 0x03f0 // Будем серить в scratch
|
||||
lui v0, 0x0303 // таблицей рассчитанных команд и ширин
|
||||
ori v0, 0x0201 // необходимых для спрайтов линии (cmdCount << 2)
|
||||
sw v0, 0x0(s3)
|
||||
lui v1, 0x0606
|
||||
ori v1, 0x0504
|
||||
sw v1, 0x4(s3)
|
||||
li v0, 0x0807
|
||||
sh v0, 0x8(s3)
|
||||
|
||||
misc_init:
|
||||
move t6, s1 // Текущий экранный X, который будет смещаться и писаться в команду rect
|
||||
// Устанавливаем, исходя из прилетевшей координаты X
|
||||
|
||||
|
||||
TextGroupReadLoop:
|
||||
// Смотрим количество символов до предела (не более 10) (проверяем MyAddr-0xE)
|
||||
// Отнимаем количество символов в MyAddr-0xE. Устанавливаем признак, если ещё не конец
|
||||
// Копируем символы во временный буфер MyAddr (-0x0с)
|
||||
|
||||
lui s3, 0x1f80
|
||||
ori s3, 0x03f0 // Перезадаём адрес таблицы количества спрайтов для нового цикла
|
||||
lui t1, MyAddr //Постоянный счётчик
|
||||
//TODO!!!!!: Динамическая длина строки для соединения с переменными!
|
||||
lh v1, -0x0e(t1) //Загружаем количество оставшихся символов
|
||||
lui t2, MyAddr //Сдвиг для буфера
|
||||
sltiu a0, v1, 0x0B //Меньше 10 в строке?
|
||||
bne a0, zero, readTextToBuffer
|
||||
clear s2 //Обнуляем счётчик символов
|
||||
li v1, 0xA //Установка максимального количество символов
|
||||
|
||||
readTextToBuffer:
|
||||
lbu a0, 0x0(s6) // Основное чтение байта текста
|
||||
addiu s6, s6, 0x1 // Сдвиг адреса чтения на +1 байт
|
||||
addiu v1, v1, -0x1 // Осталось в этом блоке...
|
||||
sb a0, -0x0c(t2) // Запись символа в буфер
|
||||
addiu s2, s2, 0x1 // Счётчик прочитанного +1
|
||||
lh v0, -0x0e(t1) // Грузим общий счётчик
|
||||
addiu t2, t2, 0x1 // Сдвиг записи +1
|
||||
addiu v0, v0, -0x01 // Общий счётчик -1
|
||||
bne v1, zero, readTextToBuffer // Проверяем частный счётчик != 0
|
||||
sh v0, -0x0e(t1) // Сохраняем общий счётчик
|
||||
|
||||
li a0, 0
|
||||
sb a0, -0x0c(t2) //На всякий случай сохраняем 00-терминатор
|
||||
|
||||
addu s3, s3, s2 // получаем адрес количества спрайтов из таблицы
|
||||
addiu s3, -0x1 // index -1
|
||||
lbu a1, 0x0(s3) // Читаем количество в a1
|
||||
nop
|
||||
move t5, a1 // Храним количество блоков для спрайта
|
||||
|
||||
form_char_data_in_scratch:
|
||||
jal make_char_line_in_scratch //Вызываем процедуру формирования строки
|
||||
move a0, s2 //Передаём в неё длину строки в символах (a0) и в спрайтах (a1)
|
||||
// (формируем спрайт размером до 60x12)
|
||||
|
||||
rect_cmd_init:
|
||||
|
||||
lui s3, 0x1f80
|
||||
ori s3, 0x03d0 // s3 = 1f8003d0 - адрес rect в scratchpad
|
||||
|
||||
lui s1, 0x8008 // Загружаем 80080000
|
||||
addiu s5, s1, -0x4930 // s5 = 7b6d0 (временный DMA)
|
||||
lui s0, 0xff
|
||||
ori s0, s0, 0xffff // s0 = 00ffffff
|
||||
lui s7, 0x8000 // s7 = 80000000
|
||||
|
||||
//Старый неактуальный код из далёкого атлусовского прошлого
|
||||
// Инициализация координат XY
|
||||
//lw v0, 0xb0(gp) // Какой-то множитель ширины символа. В нашем случае не нужен!
|
||||
//lhu v1, 0x4(s4) // Старый счётчик символов сейчас считает спрайты
|
||||
// addiu v0, v0, 0x6 // 0x06 * 6px между буквами!
|
||||
// mult v1, v0 // v1 * v0 = смещение X * номер символа
|
||||
// addiu t3, sp, 0x10 // t3 = sp + 10
|
||||
// sh s8, 0xa(s3) // экранный Y установлен на этапе формироания rect
|
||||
|
||||
lui t2, 0xff00 // t2 = ff000000
|
||||
move t4, s4 // t4 - указатель на print params ОСНОВНОЙ
|
||||
move t1, s4 // t1 - print params для смещения страниц
|
||||
rect_set_X:
|
||||
// lhu t5, 0x20(sp) // Загружаем X из стека
|
||||
// mflo t6 // Результат умножения
|
||||
// addu v0, t5, t6 // v0 = X + смещение
|
||||
sh t6, 0x8(s3) // Сохраняем X координату в текущий rect
|
||||
|
||||
sll v0, s2, 1
|
||||
addu v0, s2 // Умножаем количество обработанных символов на 6
|
||||
sll v0, 1
|
||||
addu t6, v0 // Сдвигаем X (прочитаем со следующим блоком символов)
|
||||
rect_set_width:
|
||||
sh v0, 0x10(s3) //И, не отходя от кассы, сохраняем в rect эту ширину
|
||||
|
||||
PageLoop:
|
||||
// Создание цепочки копирования спрайта
|
||||
lw v0, -0x4930(s1) // v0 = *адрес свободной цепочки
|
||||
nop
|
||||
and a0, v0, t2 // a0 = v0 & ff00..
|
||||
and v0, v0, s0 // v0 & 00FFFFFF
|
||||
or a1, v0, s7 // a1 = v0 | s7 (80000000)
|
||||
lw v0, 0x4(s5) // Счетчик команд
|
||||
lw v1, 0x0(a1) // Новый адрес свободной цепочки
|
||||
addiu v0, v0, -0x1 // Уменьшаем счетчик
|
||||
and v1, v1, s0 // v1 & 00FFFFFF
|
||||
or a0, a0, v1 // a0 & v1
|
||||
sw v0, 0x4(s5) // Сохраняем счетчик DMA
|
||||
sw a0, -0x4930(s1) // Сохраняем новую свободную цепочку
|
||||
|
||||
rect_copy_scratch_to_ram:
|
||||
lw t8, 0x0(s3) // Количество команд DMA
|
||||
lw t7, 0x4(s3) // Команда копирования спрайта
|
||||
sw t8, 0x0(a1)
|
||||
sw t7, 0x4(a1)
|
||||
lw a3, 0x8(s3) // Координаты экрана XY
|
||||
lw t7, 0xc(s3) // CLUT и координаты текстуры
|
||||
sw a3, 0x8(a1)
|
||||
sw t7, 0xc(a1)
|
||||
lw t8, 0x10(s3) // Размер спрайта после копирования
|
||||
nop
|
||||
sw t8, 0x10(a1) // Сохраняем последнюю команду
|
||||
|
||||
rect_scratch_connect:
|
||||
lw v1, 0x18(t1) // Следующий параметр
|
||||
lw v0, 0x0(a1) // Текущий новый адрес цепочки
|
||||
lw v1, 0x0(v1) // Загружаем значение
|
||||
and v0, v0, t2 // v0 & ff000000
|
||||
and v1, v1, s0 // v1 & 00FFFFFF
|
||||
or v0, v0, v1 // Команды с FFFFFF
|
||||
sw v0, 0x0(a1) // Обновляем текущий адрес цепочки
|
||||
|
||||
lw a0, 0x18(t1) // Первый адрес цепочки
|
||||
nop
|
||||
lw v0, 0x0(a0) // Первая ссылка цепочки на следующую
|
||||
and v1, a1, s0 // v1 = a1 & 00FFFFFF
|
||||
and v0, v0, t2 // v0 & FF000000
|
||||
or v0, v0, v1 // Последний адрес цепочки
|
||||
sw v0, 0x0(a0) // Первая цепочка следующего адреса
|
||||
sw a1, 0x18(t1) // Текущий адрес цепочки
|
||||
lhu v0, 0x4(t4) // Счетчик символов
|
||||
nop
|
||||
bne v0, zero, cpu2vram_cmd_loop // Если счетчик символов ≠ 0, переходим
|
||||
clear s8 // Сбрасываем счётчик команд спрайтов
|
||||
|
||||
sw a1, 0x28(t1) // Устанавливаем первую цепочку символов в print_params
|
||||
sw a3, 0xc(t4) // Сохраняем экранные координаты в print params
|
||||
|
||||
cpu2vram_cmd_loop:
|
||||
// Цикл команд cpu_to_vram
|
||||
|
||||
lw v0, -0x4930(s1) // Следующая свободная цепочка
|
||||
nop
|
||||
and a0, v0, t2 // a0 = v0 & FF000000
|
||||
and v0, v0, s0 // v0 & 00FFFFFF
|
||||
or a3, v0, s7 // a3 = следующая цепочка & 80...
|
||||
move a2, a3 // a2 = a3 (следующая цепочка)
|
||||
lw v0, 0x4(s5) // Счетчик команд
|
||||
lw v1, 0x0(a3) // Новый адрес свободной цепочки
|
||||
addiu v0, v0, -0x1 // Уменьшаем счетчик
|
||||
and v1, v1, s0 // v1 & 00FFFFFF
|
||||
or a0, a0, v1 // a0 & v1
|
||||
sw v0, 0x4(s5) // Сохраняем счетчик DMA
|
||||
|
||||
|
||||
|
||||
sw a0, -0x4930(s1) // Сохраняем новую свободную цепочку
|
||||
//Тут "оптимизировали" копирование в short, и сделали своё копирование со смещением спрайтов
|
||||
|
||||
lui a1, 0x1f80
|
||||
ori a1, a1, 0x348 // 1f800348 = Scratch команда cpu2vram
|
||||
lw t8, 0x0(a1)
|
||||
lw t7, 0x4(a1)
|
||||
sw t8, 0x0(a2)
|
||||
sw t7, 0x4(a2)
|
||||
lw t8, 0x8(a1) //Сохраняем базу команды cpu2vram
|
||||
lw t7, 0xc(a1)
|
||||
sw t8, 0x8(a2)
|
||||
sw t7, 0xc(a2)
|
||||
|
||||
sll v1, s8, 1 //Текущий индекс блока * 2
|
||||
addiu v0, v1, 0x130 //складываем со 0x130 (начало блока спрайта в VRAM)
|
||||
sh v0, 0x8(a2) //Обновляем VU X прямо в RAM
|
||||
copy_char_data_start:
|
||||
lui t3, 0x1f80
|
||||
ori t3, t3, 0x1c0 // Начало данных спрайта в scratch
|
||||
|
||||
addiu a2, 0x10 //Адрес для записи данных после заголовка команды
|
||||
clear v0 //Основной счётчик строк (0-11)
|
||||
|
||||
sll v1, t5, 2 //v1 = количество байт в одной строке (блоки * 4) (инкремент)
|
||||
sll a1, s8, 2 //Вычисляем смещение начала чтения
|
||||
addu a1, t3 //a1 = начинаем с него
|
||||
copy_char_data_loop:
|
||||
lw t7, 0x0(a1) //Грузим данные
|
||||
addu a1, v1 //Смещаем адрес чтения
|
||||
sw t7, 0x0(a2) //Сохраняем данные
|
||||
|
||||
addiu a2, 0x04
|
||||
addiu v0, 0x01
|
||||
bne v0, 0x0c, copy_char_data_loop
|
||||
nop
|
||||
|
||||
bne s8, zero, cpu2vram_dma_link // Если это первая команда (последняя выполняемая, то добавляем flushcache)
|
||||
nop
|
||||
|
||||
set_flush_cache_cmd:
|
||||
li t8, 0x10
|
||||
sb t8, -0x3d(a2) //Обновляем длину команды до 0x10
|
||||
lui t8, 0x0100
|
||||
sw t8, 0x0(a2) //Устанавливаем команду flush cache в конце команды
|
||||
|
||||
cpu2vram_dma_link:
|
||||
// Связывание DMA символа + копирование спрайта
|
||||
lw v1, 0x18(t1) // Текущая цепочка DMA копирования спрайта
|
||||
lw v0, 0x0(a3) // Текущие команды цепочки символов
|
||||
lw v1, 0x0(v1) // Количество команд + следующая ссылка
|
||||
and v0, v0, t2 // v0 & FF.....
|
||||
and v1, v1, s0 // v1 & 00FFFFFF
|
||||
or v0, v0, v1 // Количество команд & FF..
|
||||
sw v0, 0x0(a3) // Сохраняем текущую команду цепочки
|
||||
lw a0, 0x18(t1) // Адрес заголовка текущей команды копирования спрайта
|
||||
nop
|
||||
lw v0, 0x0(a0) // 04FFFFFF
|
||||
and v1, a3, s0 // v1 = копирование текущей цепочки символов
|
||||
and v0, v0, t2 // v0 & FF000000 (количество команд)
|
||||
or v0, v0, v1 // Полная команда со ссылкой
|
||||
sw v0, 0x0(a0) // Сохраняем с ссылкой на цепочку символов
|
||||
sw a3, 0x18(t1) // Последняя цепочка символов
|
||||
|
||||
//Конец цикла команд cpu_to_vram
|
||||
addiu s8, 0x1
|
||||
bne s8, t5, cpu2vram_cmd_loop
|
||||
nop
|
||||
|
||||
addiu t1, t1, 0x4 // Сдвигаем параметры для следующей страницы
|
||||
addiu v0, t4, 0x8 // Сдвигаем первый параметр цепочки для страницы
|
||||
sltu v0, t1, v0 // Проверяем прохождение первой страницы
|
||||
bne v0, zero, PageLoop // Если не прошли, продолжаем цикл страниц
|
||||
nop
|
||||
|
||||
chunk_making_end:
|
||||
// Увеличиваем счетчик символов + проверка
|
||||
lhu v0, 0x4(s4) // Текущее количество спрайтов
|
||||
lui t3, MyAddr
|
||||
addiu v0, v0, 0x1 // Увеличиваем на 1
|
||||
lhu v1, -0x0e(t3) // Количество оставшихся символов
|
||||
sh v0, 0x4(s4) // Сохраняем счетчик спрайтов в print_params
|
||||
|
||||
bne v1, zero, TextGroupReadLoop
|
||||
// Если обработаны все буквы и созданы все спрайты, то выходим
|
||||
nop
|
||||
|
||||
TextEnd:
|
||||
clear s2
|
||||
lui s3, 0x8008
|
||||
addiu s5, s3, -0x4930 // s5 = 7b6d0
|
||||
lui s1, 0xff
|
||||
ori s1, s1, 0xffff // s1 = 00ffffff
|
||||
move s0, s4 // s0 = текущие параметры строки
|
||||
clear a1
|
||||
|
||||
PageTLoop:
|
||||
// Завершающая обработка страниц
|
||||
li a2, 0x1 // a2 = 1
|
||||
addu s2, s2, a2 // Увеличиваем счетчик
|
||||
lui v0, 0x8000 // v0 = 80000000
|
||||
lui a0, 0xff00 // a0 = ff000000
|
||||
lw v1, -0x4930(s3) // Следующая свободная цепочка
|
||||
lw a3, 0xa4(gp) // Некоторые параметры (почти DMA)
|
||||
and v1, v1, s1 // v1 & 00FFFFFF
|
||||
or v1, v1, v0 // v1 | v0 = 80.....
|
||||
sw v1, 0x30(s0) // Сохраняем последний свободный адрес в параметрах DMA
|
||||
lw v0, -0x4930(s3) // Следующая свободная цепочка
|
||||
lw v1, 0x0(v1) // Создаем еще одну цепочку
|
||||
and v0, v0, a0 // v0 & ff000000
|
||||
and v1, v1, s1 // v1 & 00FFFFFF
|
||||
lw a0, 0x4(s5) // Счетчик DMA
|
||||
or v0, v0, v1 // v0 | v1
|
||||
sw v0, -0x4930(s3) // Новый адрес свободной цепочки
|
||||
addiu a0, a0, -0x1 // Уменьшаем счетчик DMA
|
||||
sw a0, 0x4(s5) // Сохраняем счетчик DMA
|
||||
lw a0, 0x30(s0) // Начало цепочки DMA
|
||||
jal SetDrawTPage // Устанавливаем страницу отрисовки
|
||||
addiu s0, s0, 0x4 // Сдвигаем параметры DMA для следующей страницы
|
||||
sltiu v0, s2, 0x2 // Проверяем счетчик < 2
|
||||
bne v0, zero, PageTLoop // Если да, продолжаем цикл
|
||||
clear a1 // a1 = 0
|
||||
|
||||
move v0, s4 // Возвращаем основные параметры DMA
|
||||
|
||||
// Восстанавливаем регистры из стека
|
||||
lw ra, 0x4c(sp)
|
||||
lw s8, 0x48(sp)
|
||||
lw s7, 0x44(sp)
|
||||
lw s6, 0x40(sp)
|
||||
lw s5, 0x3c(sp)
|
||||
lw s4, 0x38(sp)
|
||||
lw s3, 0x34(sp)
|
||||
lw s2, 0x30(sp)
|
||||
lw s1, 0x2c(sp)
|
||||
lw s0, 0x28(sp)
|
||||
|
||||
jr ra // Возврат
|
||||
addiu sp, sp, 0x50 // Восстанавливаем стек
|
||||
.ascii "This game was officially cracked by SERGEY SHEMET 2021-2025. WHAT ARE YOU DOING HERE, BOY?"
|
||||
.byte 0x00
|
||||
.byte 0x00
|
||||
|
||||
// Включаем дополнительные файлы
|
||||
.include "IS_charload_grouped.asm"
|
||||
.include "charCalcs.asm"
|
||||
.close
|
||||
.include "txtpatches.asm" // misc text patches
|
||||
|
||||
|
||||
|
||||
// compile with ./armips -sym SLPS_021.00.map IS_main_grouped.asm
|
||||
BIN
SLPS_021.00
Normal file
BIN
SLPS_021.00
Normal file
Binary file not shown.
75
SLPS_021.00.map
Normal file
75
SLPS_021.00.map
Normal file
@@ -0,0 +1,75 @@
|
||||
00000000 0
|
||||
00008009 myaddr
|
||||
80019300 printbigdmatext
|
||||
8001A070 initcopycharchain
|
||||
8001A08F makecharpixels
|
||||
8001A20C makeshadowsmallchar
|
||||
8001A284 generatesmallchar
|
||||
8001B0C8 storecolor
|
||||
800542CC setdrawtpage
|
||||
8008F624 next2bytes
|
||||
8008F650 savelengthandexit
|
||||
8008F66C ismystring
|
||||
8008F67C nextmybyte
|
||||
8008F73C nextmybyte2
|
||||
8008F760 secondstrisjap
|
||||
8008F774 next2bytes2
|
||||
8008F7A0 savelengthandexit2
|
||||
80090000 externalprint
|
||||
80090024 myprintlineroutine
|
||||
800900E4 cputovram_scratchpad_template
|
||||
80090114 _1bppto4bpp_table_template
|
||||
80090164 rect_scratchpad_template
|
||||
800901A8 make_sprite_size_table
|
||||
800901D0 misc_init
|
||||
800901D4 textgroupreadloop
|
||||
800901F8 readtexttobuffer
|
||||
8009023C form_char_data_in_scratch
|
||||
80090244 rect_cmd_init
|
||||
8009026C rect_set_x
|
||||
80090280 rect_set_width
|
||||
80090284 pageloop
|
||||
800902B4 rect_copy_scratch_to_ram
|
||||
800902E0 rect_scratch_connect
|
||||
80090334 cpu2vram_cmd_loop
|
||||
8009039C copy_char_data_start
|
||||
800903B8 copy_char_data_loop
|
||||
800903E0 set_flush_cache_cmd
|
||||
800903F0 cpu2vram_dma_link
|
||||
8009044C chunk_making_end
|
||||
80090468 textend
|
||||
80090484 pagetloop
|
||||
80090518 .asc:005A
|
||||
80090572 .byt:0001
|
||||
80090573 .byt:0001
|
||||
80090574 make_char_line_in_scratch
|
||||
80090590 char_data_clear
|
||||
800905A0 char_data_loop
|
||||
800905CC chars_font_loop
|
||||
800905F4 char_lines_loop
|
||||
80090604 its_not_empty
|
||||
80090694 not_last
|
||||
800906A0 divideby4
|
||||
800906A0 zero_jump
|
||||
800906B0 spacejump
|
||||
800906CC sprite_end
|
||||
800906E4 make_shadow
|
||||
80090708 shadow_row_loop
|
||||
8009070C shadow_sprites_loop
|
||||
8009071C shadow_pixel_loop
|
||||
80090750 no_s
|
||||
8009077C notshadow
|
||||
80090790 returncharsinstring
|
||||
800907AC ismy1bytestring
|
||||
800907C8 notand1
|
||||
800907D8 getnewchar
|
||||
800907DC startreading
|
||||
800907F8 calcnextxcustom
|
||||
80090820 japoldtext
|
||||
80090828 ihavestringlength
|
||||
80090840 retuncharstocity
|
||||
8009085C ismy1bytecity
|
||||
80090870 retuncharstocitydiv2
|
||||
8009088C ismy1bytecitydiv2
|
||||
800908A8 notand1_2
|
||||
|
||||
BIN
SLPS_021.00_1.1
Normal file
BIN
SLPS_021.00_1.1
Normal file
Binary file not shown.
BIN
SLPS_021.00_old
Normal file
BIN
SLPS_021.00_old
Normal file
Binary file not shown.
BIN
SLPS_028.25
Normal file
BIN
SLPS_028.25
Normal file
Binary file not shown.
BIN
SLPS_028.26
Normal file
BIN
SLPS_028.26
Normal file
Binary file not shown.
64
SLPS_028.26.map
Normal file
64
SLPS_028.26.map
Normal file
@@ -0,0 +1,64 @@
|
||||
00000000 0
|
||||
00008009 myaddr
|
||||
80019000 originalkanjiprint
|
||||
80019D70 initcopycharchain
|
||||
80019F0C makeshadowsmallchar
|
||||
8001ADC8 storecolor
|
||||
800522F0 setdrawtpage
|
||||
80090000 externalprint
|
||||
80090024 myprintlineroutine
|
||||
80090074 initdma
|
||||
80090074 update_free_dma
|
||||
800900A0 preparedmachain
|
||||
800900C8 prepareattrs
|
||||
800900EC init_cputovram_vars_int_scratch
|
||||
8009012C coords_size_cputovram_scr
|
||||
800901E4 init_rect_cmd_in_scr
|
||||
80090204 positionprocessing
|
||||
8009020C addoffsetx
|
||||
80090210 calculatexoffset
|
||||
80090228 ycoordinateprocessing
|
||||
80090230 addoffsety
|
||||
80090234 calculateyoffset
|
||||
8009025C loadcharacter
|
||||
8009027C nextchar
|
||||
80090280 isfirstchar
|
||||
80090288 setup_x_coord_in_rect_scratch
|
||||
80090298 some_printparams_save
|
||||
800902A8 end_x_coord_rect
|
||||
800902BC pageloop
|
||||
800902BC update_free_dma2
|
||||
800902EC copyrectcmd
|
||||
80090318 print_params_and_chain_addr_set
|
||||
80090368 notfirstchar
|
||||
80090370 cputovram_cmd_from_scratch_copy
|
||||
80090370 halfkanji_loop
|
||||
80090370 update_free_dma3
|
||||
800903C4 copyby2bytes
|
||||
80090418 copy16bytes
|
||||
80090444 last4bytescopy
|
||||
80090458 link_char_dma_cmds
|
||||
8009049C enabled_lower_kanji
|
||||
800904DC disabled_lower_kanji
|
||||
800904F0 spacecharjumphere
|
||||
80090518 textend
|
||||
80090534 pagetloop
|
||||
80090594 returnfromfunction
|
||||
800905C8 makecharpixelscustom
|
||||
80090618 charloop
|
||||
800906C8 charloaded
|
||||
800906E4 notshadow
|
||||
800906F4 returncharsinstring
|
||||
80090710 ismy1bytestring
|
||||
8009072C notand1
|
||||
8009073C getnewchar
|
||||
80090740 startreading
|
||||
8009075C calcnextxcustom
|
||||
80090784 japoldtext
|
||||
8009078C ihavestringlength
|
||||
800907A4 retuncharstocity
|
||||
800907C0 ismy1bytecity
|
||||
800907D4 retuncharstocitydiv2
|
||||
800907F0 ismy1bytecitydiv2
|
||||
8009080C notand1_2
|
||||
|
||||
BIN
armips.exe
Normal file
BIN
armips.exe
Normal file
Binary file not shown.
102
battle_patch.asm
Normal file
102
battle_patch.asm
Normal file
@@ -0,0 +1,102 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;; BOSSNAMECOPY
|
||||
|
||||
.psx
|
||||
|
||||
.open "0001_BATTLE_CODE.bin", 0x800AB000
|
||||
|
||||
.definelabel SimpleCopyString, 0x800ef150
|
||||
|
||||
.org 0x800f9e60
|
||||
;BOSSNAME COPY
|
||||
lhu r2,0x0(r5)
|
||||
addiu r5,2
|
||||
sh r2,0x0(r4)
|
||||
andi r3,r2,0xFF
|
||||
addiu r4,2
|
||||
nextch:
|
||||
lbu r2,0x0(r5)
|
||||
nop
|
||||
sb r2,0x0(r4)
|
||||
addiu r4,1
|
||||
addiu r5,1
|
||||
addiu r3,-1
|
||||
bne r3,zero,nextch
|
||||
nop
|
||||
jr ra
|
||||
nop
|
||||
|
||||
|
||||
;BATTLE CONTACT RUS SCRIPT BUILDING
|
||||
CheckAndCopyRusInScript:
|
||||
lhu r3,0x0(r5)
|
||||
nop
|
||||
srl r3,r3,0xD ;;;;Check 13th bit (1byte system !!!)
|
||||
bne v1,zero,MyCopy
|
||||
nop
|
||||
j SimpleCopyString
|
||||
nop
|
||||
|
||||
MyCopy:
|
||||
lhu r3,0x0(r5)
|
||||
nop
|
||||
andi r3,r3,0xFF
|
||||
addiu r3,2
|
||||
nx:
|
||||
lbu r2,0x0(r5)
|
||||
nop
|
||||
sb r2,0x0(r4)
|
||||
addiu r4,1
|
||||
addiu r3,-1
|
||||
bne r3,zero,nx
|
||||
addiu r5,1
|
||||
|
||||
;needToCheck And1 ;ODD_OR_EVEN???
|
||||
andi r2,r4,0x1
|
||||
beq r2,zero,notAnd1_3
|
||||
nop
|
||||
addiu r4,r4,0x1
|
||||
|
||||
|
||||
notAnd1_3:
|
||||
jr ra
|
||||
move r2,r4 ;Duplicate for futher script
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ДИНАМИЧЕСКОЕ ОБРУБАНИЕ ТЕКСТА В БОЁВКЕ!
|
||||
|
||||
.org 0x800f9f20
|
||||
lui r2,0x8011 ;;; LUI ---==== LOAD UPPER INTEGER
|
||||
lbu r2,0x0bc8(r2)
|
||||
nop
|
||||
li r3,3
|
||||
bne r2,r3,not3 ;if mode not 3 = limit 30!
|
||||
li r3,0x30 ;ЭТА СРОКА ВЫПОЛНИТСЯ ПРИ ПЕРЕХОДЕ. Если перехода нет, то r3 перезаписывается. Итого экономим 32 байта на дублях команд
|
||||
|
||||
li r3,0x80 ;Эта строка выполнится только если в 80110bc8 будет 03 (режим общения)
|
||||
not3:
|
||||
lui r2,0x8009 ;загружаем адрес 80090000 в r2
|
||||
sb r3,-0x0c(r2) ;Записываем новый лимит в 80090000 - 0c
|
||||
j 0x80016e10 ;вылетаем в программу дальше по плану! (Хз что там за программа, но выполняется каждый цикл)
|
||||
nop
|
||||
|
||||
|
||||
;BOSSNAME COPYЧёт формат
|
||||
.org 0x800ad4e8
|
||||
;jal 0x80016024 - ORIGINAL CALL
|
||||
;custom call
|
||||
; jal 0x8008f600
|
||||
|
||||
;.org 0x800ad508
|
||||
; jal 0x8008f700
|
||||
|
||||
|
||||
;Battlecontact copy
|
||||
.org 0x800f1f60
|
||||
jal CheckAndCopyRusInScript
|
||||
.org 0x800f20bc
|
||||
jal CheckAndCopyRusInScript
|
||||
|
||||
|
||||
|
||||
|
||||
.close
|
||||
88
cd_extra_charload.asm
Normal file
88
cd_extra_charload.asm
Normal file
@@ -0,0 +1,88 @@
|
||||
|
||||
; LOADING CHAR FROM CUSTOM FONT
|
||||
|
||||
makeCharPixelsCustom:
|
||||
|
||||
addiu sp,sp,-0x18
|
||||
move a1,a0
|
||||
lui a0,0x1f80
|
||||
ori a0,a0,0x358
|
||||
|
||||
sw ra,0x10(sp)
|
||||
|
||||
li a2,1
|
||||
|
||||
lbu t2,0xa8(gp) ;a8(gp) -- color
|
||||
move t0,r4
|
||||
lui v1,0x801f ; ;load font addr to r3 (801ef480)
|
||||
ori v1,v1,0xaa00 ;
|
||||
sll v0,a1,0x1 ; r2 = r5 << 1 (*2)
|
||||
addu v0,v0,a1 ; r2 += r5 (it. *3)
|
||||
sll v0,v0,0x2 ; r2 << 2 (*4) (r2 = r5 *12)
|
||||
addu t1,v0,v1 ;t1 = char addr ; r9 = r2(offs) + r3 (start)
|
||||
li r6,0x6 ; r6 = byteslength = 6
|
||||
move v0,r6 ; r2 = r6 (counter)
|
||||
beq v0,zero,charLoaded ; if counter=0 then branch
|
||||
addiu r6,r6,-0x1 ; dec r6
|
||||
lui a3,0x1f80
|
||||
ori a3,a3,0x2e0 ; set scratch convert addr r7 = 1f8002e0
|
||||
CharLoop:
|
||||
lhu v1,0x0(t1) ;load upperhalf of char to r3
|
||||
nop
|
||||
andi r4,v1,0xf ; r4 = r3 & 0f - cutting left semibyte
|
||||
srl v1,v1,0x4 ; r3 >> 4
|
||||
andi v0,v1,0xf ; r2 = r3 & 0f
|
||||
sll v0,v0,0x1 ; r2 << 1
|
||||
addu v0,v0,a3 ; r2 = r2 + to4bitConvertTableAddr (r7)
|
||||
lhu v0,0x0(v0);>DAT_1f8002e0 r2 = *r2(half) pixel pattern
|
||||
nop
|
||||
mult v0,t2 ; r2*r10. make Color
|
||||
sll r4,r4,0x1 ; r4 << 1
|
||||
addu r4,r4,a3 ; r4 += r6 counter
|
||||
mflo a1 ; load lo to r5
|
||||
lhu v0,0x0(r4);>DAT_1f8002e0 load table+r4
|
||||
nop
|
||||
mult v0,t2 ; r2 * colorIndex r10
|
||||
srl v1,v1,0x4 ; r3 >> 4, right 4 bits
|
||||
andi r4,v1,0xf ; r4 = r3 & f0 (cut right semibyte)
|
||||
srl v1,v1,0x4 ; r3 >> 4
|
||||
sll v1,v1,0x1 ; r3 << 1 = *2
|
||||
addu v1,v1,a3 ; r3=r3+Table r7
|
||||
sll v0,a1,0x10 ; r2 = r5 << 10 bits
|
||||
mflo t4 ; load r12,low
|
||||
or v0,t4,v0 ; r2 = r12 | r2
|
||||
sw v0,0x0(t0) ; load *r8(current Scratch) from r2(result)
|
||||
lhu v0,0x0(v1);>DAT_1f8002e0 ; load r2 from TablePattern Half from r3
|
||||
nop
|
||||
mult v0,t2 ; r2*color r10
|
||||
sll r4,r4,0x1 ; r4 << 1
|
||||
addu r4,r4,a3 ; r4 = r4 + TableStart
|
||||
mflo a1 ; ld r5,lo
|
||||
lhu v0,0x0(r4);>DAT_1f8002e0 ; ld half r2 from *r4
|
||||
nop
|
||||
mult v0,t2 ; r2*col
|
||||
addiu t1,t1,0x2 ; move charFont + +2
|
||||
move v1,a2 ; r3 = byteCount (r6)
|
||||
addiu a2,a2,-0x1 ; r6 -= 1
|
||||
addiu t0,t0,0x4 ; scrathAddr r8 += 4
|
||||
sll v0,a1,0x10 ; r2 = r5 << 10 bits (move to hi)
|
||||
mflo t4 ; ld r12,lo (result)
|
||||
or v0,t4,v0 ; combine r2 & r 12 (0001 x 1111)
|
||||
sw v0,0x0(t0) ; store result to scratch r2 to *r8
|
||||
bne v1,zero,charLoop ; if r3 counter<>0 goto loop
|
||||
addiu t0,t0,0x4 ; r8 scrath += 4
|
||||
charLoaded:
|
||||
|
||||
lbu v1, 0xa9(gp) ; a9(gp) -- shadow
|
||||
li v0, 0x1
|
||||
bne v1, v0, NotShadow ;Shadow character check
|
||||
nop
|
||||
lui a0,0x1f80
|
||||
jal MakeShadowSmallChar ;Make shadow in Scratch DMA
|
||||
ori a0,a0,0x358
|
||||
|
||||
NotShadow:
|
||||
lw ra,0x10(sp) ;Restore stack and exit
|
||||
nop
|
||||
jr ra
|
||||
addiu sp, sp, 0x18
|
||||
620
cd_extra_main.asm
Normal file
620
cd_extra_main.asm
Normal file
@@ -0,0 +1,620 @@
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Persona 2 Eternal Punishment CD Extra (PSX) JAP / Custom Characters/Data Patch
|
||||
//
|
||||
// Author: Sergey Shemet 17/09/2025
|
||||
//
|
||||
|
||||
.psx
|
||||
|
||||
.definelabel SetDrawTPage, 0x800522F0
|
||||
.definelabel storeColor, 0x8001ADC8
|
||||
.definelabel initCopyCharChain, 0x80019D70
|
||||
.definelabel MakeShadowSmallChar, 0x80019F0C // 0x800196BC -big char shadow???
|
||||
.definelabel OriginalKanjiPrint, 0x80019000
|
||||
|
||||
.definelabel MyAddr, 0x8009
|
||||
|
||||
.open "SLPS_028.26", 0x8000F800
|
||||
|
||||
.org 0x80090000
|
||||
|
||||
ExternalPrint:
|
||||
// Text routing test routine
|
||||
move r3,s3
|
||||
move s3,r4
|
||||
|
||||
lhu v0,0x0(s3) // Read half 2 bytes of text
|
||||
move s3,r3
|
||||
srl v1,v0,0xD // Check 13th bit (Russian text format 20XX cmd)
|
||||
bne v1,zero,MyPrintLineRoutine
|
||||
clear v1
|
||||
j OriginalKanjiPrint // Если не включен 13 бит, то это обычный японский текст. Вызов обычной подпрограммы вывода.
|
||||
nop
|
||||
|
||||
MyPrintLineRoutine:
|
||||
addiu sp, sp, -0x50 // Выделение места в стеке (80 bytes)
|
||||
sw s6, 0x40(sp) // Сохранение s6
|
||||
move s6, a0 // s6 = param_1 (указатель на текст)
|
||||
sw s1, 0x2C(sp) // Сохранение s1
|
||||
move s1, a1 // s1 = param_2 (X координата)
|
||||
sw s2, 0x30(sp) // Сохранение s2
|
||||
move s2, a2 // s2 = param_3 (Y координата)
|
||||
sw s3, 0x34(sp) // Сохранение s3
|
||||
|
||||
|
||||
|
||||
//v1/r3 - MyChars charcount
|
||||
andi v0, 0xff
|
||||
addiu s6, 0x2 //Moving text read pointer +2bytes
|
||||
|
||||
|
||||
lui s3, MyAddr
|
||||
sh v0, -0x10(s3) //store half bytecounter @ 8008fff0
|
||||
sh v0, -0x0E(s3) //store half bytecounter @ 8008fff2
|
||||
|
||||
//////////////////////////////////////
|
||||
|
||||
// Инициализация адресов scratch и масок
|
||||
lui s3, 0x1F80 // Базовый адрес GPU
|
||||
ori s3, s3, 0x03D0 // Адрес для команд отрисовки
|
||||
|
||||
lui t0, 0xFF // Маска для DMA операций
|
||||
ori t0, t0, 0xFFFF
|
||||
|
||||
sw s0, 0x28(sp) // Сохранение s0
|
||||
andi s0, a3, 0xFF // s0 = param_4 (цвет/атрибуты)
|
||||
move a0, s0 // a0 = цвет текста
|
||||
|
||||
// Блок инициализации DMA
|
||||
InitDMA:
|
||||
update_free_dma:
|
||||
lui a3, 0x8008 // Базовый адрес для текстового DMA
|
||||
lui a2, 0xFF00 // Маска для адресной части
|
||||
addiu t1, a3, -0x6C20 // TextDMANexChainAddr
|
||||
lw v1, -0x6C20(a3) // Загрузка текущего DMA адреса
|
||||
lbu a1, 0x60(sp) // Загрузка цвета из стека
|
||||
lui v0, 0x8000 // Флаг для адресации
|
||||
|
||||
// Сохранение всех регистров
|
||||
sw ra, 0x4C(sp) // Сохранение return address
|
||||
sw s8, 0x48(sp) // Сохранение s8
|
||||
sw s7, 0x44(sp) // Сохранение s7
|
||||
sw s5, 0x3C(sp) // Сохранение s5
|
||||
sw s4, 0x38(sp) // Сохранение s4
|
||||
|
||||
// Подготовка DMA цепочки
|
||||
PrepareDMAChain:
|
||||
and a2, v1, a2 // Извлечение первого байта
|
||||
and v1, v1, t0 // Отсекаем первый байт у адреса
|
||||
or s4, v1, v0 // Совмещаем 80...... и 00ADDR = новый DMA адрес
|
||||
|
||||
lw v0, 0x4(t1) // TextDMACounter
|
||||
lw v1, 0x0(s4) // Разыменовывание указателя на текущий адрес = след адрес
|
||||
addiu v0, v0, -1 // Декремент счетчика
|
||||
and v1, v1, t0 // Очистка адресной части
|
||||
or a2, a2, v1 // Объединение исходного первого байта (FF) с новым адресом
|
||||
sw v0, 0x4(t1) // Сохранение счетчика
|
||||
|
||||
// Подготовка атрибутов строки
|
||||
PrepareAttrs:
|
||||
andi a1, a1, 0xFF // Маскирование цвета
|
||||
jal storeColor // Установка цвета и тени
|
||||
sw a2, -0x6C20(a3) // Сохранение нового свободного DMA адреса
|
||||
move a0, s4 // a0 = DMA адрес
|
||||
|
||||
// Подготовка координат
|
||||
sll a1, s1, 0x10 // Подготовка X координаты
|
||||
sra a1, a1, 0x10
|
||||
sll a2, s2, 0x10 // Подготовка Y координаты
|
||||
sra a2, a2, 0x10
|
||||
jal initCopyCharChain // Инициализация строки
|
||||
move a3, s0 // a3 = а-три-буты
|
||||
|
||||
init_cputovram_vars_int_scratch:
|
||||
lui a3, 0x1F80
|
||||
ori a3, a3, 0x0348 // Адрес паттернов в scratchpad
|
||||
//lui a2, 0x1F80
|
||||
//ori a2, a2, 0x038C // Disable second kanji half command
|
||||
|
||||
li v0, 0x02 // Ширина в px в 16битном режиме (Original 3px (12 in 4bit), my - 2px)
|
||||
sh v0, 0x1C(sp)
|
||||
li v0, 0x0C // Высота полукандзи. (Original 6px, my - 12px)
|
||||
li a1, 0x0D // 0D - оригинальная длина команды CPUtoVRAM (Scratch) в words
|
||||
lui a0, 0xA000 // A0000000 - CPUtoVRAM command
|
||||
|
||||
sh v0, 0x1E(sp) // sp+1c = 000C0002
|
||||
li a1, 0x10 //INSERT // Переписываем длину команды (т.к. формируем символ в пределах одной команды)
|
||||
sb a1, 0x3(a3) // Установка длины 0x10 элемента цепочки CPUtoVRAM (Scratch)
|
||||
sw a0, 0x4(a3) // Установка команды A0000000 CPUtoVRAM (Scratch)
|
||||
|
||||
lhu t0, 0x9C(gp) // Загрузка vram X из глобальных настроек
|
||||
lhu v0, 0x9E(gp) // Загрузка vram Y из глобальных настроек
|
||||
lui v1, 0x0100 // GPU flushcache command (0100 0000)
|
||||
|
||||
lui at, 0x1F80
|
||||
sw v1, 0x0388(at) // Save flushcache (конец первой команды)(not 37c!)
|
||||
// lower half params set
|
||||
// sb a1, 0x3(a2) // Отключаем данные нижней половины
|
||||
// sw a0, 0x4(a2) //
|
||||
|
||||
// Настройка координат для каждой половины символа.
|
||||
coords_size_cputovram_scr:
|
||||
lh a1, 0x9C(gp) // Загрузка X
|
||||
move s8, s2 // Сохранение Y позиции
|
||||
// lui at, 0x1F80
|
||||
// sw v1, 0x03C0(at) // Save flushcache (second command (Disabled))
|
||||
|
||||
sh t0, 0x18(sp) // Сохранение XY в стек как полуслова (CONCAT)
|
||||
sh v0, 0x1A(sp)
|
||||
lw a0, 0x18(sp) //Загружаем XY-word из стека для CPUtoVRAM
|
||||
//Абсолютно неоптимальная хрень - можно было сразу вытащить word из 0x9C(gp),
|
||||
// либо просто задать a0 = 3001F001,
|
||||
// так как адрес всегда один и тот же. Скорее всего, он менялся при разработке и дебаге игры
|
||||
|
||||
// sh v0, 0x1A(sp) //Отключаем вычисление и сохранение VRAM-Y нижнего полусимвола.
|
||||
|
||||
lw v1, 0x18(sp)
|
||||
lw v0, 0x1C(sp) //Грузим размер символа (16-бит) из стека
|
||||
move t0, a1 // t0 будет X - пригодится ниже, в расчётах
|
||||
sw a0, 0x8(a3) //сохраняем 3001F001 to 00350 (uv-коодинаты в команду cputovram - 130x1f0)
|
||||
// sw v0, 0xc(a2) //disable lower
|
||||
|
||||
sw v0, 0xC(a3) // set 02000c00 to 00354 (sprite pixel size)
|
||||
// sw v1, 0x8(a2)
|
||||
|
||||
lui v0,0x8001 //load 80010000 to r2
|
||||
|
||||
//4bit pattern in scratch
|
||||
|
||||
lui t8, 0x1f80
|
||||
ori t8, t8, 0x2e0
|
||||
addiu t7, v0, 0x3e8
|
||||
lwl t5, 0x3(t7)
|
||||
lwr t5, 0x0(t7)
|
||||
lwl t6, 0x7(t7)
|
||||
lwr t6, 0x4(t7)
|
||||
swl t5, 0x3(t8)
|
||||
swr t5, 0x0(t8)
|
||||
swl t6, 0x7(t8)
|
||||
swr t6, 0x4(t8)
|
||||
lwl t5, 0xb(t7)
|
||||
lwr t5, 0x8(t7)
|
||||
lwl t6, 0xf(t7)
|
||||
lwr t6, 0xc(t7)
|
||||
swl t5, 0xb(t8)
|
||||
swr t5, 0x8(t8)
|
||||
swl t6, 0xf(t8)
|
||||
swr t6, 0xc(t8)
|
||||
lwl t5, 0x13(t7)
|
||||
lwr t5, 0x10(t7)
|
||||
lwl t6, 0x17(t7)
|
||||
lwr t6, 0x14(t7)
|
||||
swl t5, 0x13(t8)
|
||||
swr t5, 0x10(t8)
|
||||
swl t6, 0x17(t8)
|
||||
swr t6, 0x14(t8)
|
||||
lwl t5, 0x1b(t7)
|
||||
lwr t5, 0x18(t7)
|
||||
lwl t6, 0x1f(t7)
|
||||
lwr t6, 0x1c(t7)
|
||||
swl t5, 0x1b(t8)
|
||||
swr t5, 0x18(t8)
|
||||
swl t6, 0x1f(t8)
|
||||
swr t6, 0x1c(t8)
|
||||
|
||||
// Copy Sprite DMA Command Forming
|
||||
init_rect_cmd_in_scr:
|
||||
li v0,0x4 // Длина команды RectTexBlend (04000000)
|
||||
sb v0,0x3(s3) // сохраняем в scratch
|
||||
li v0,0x64 // Команда RectTexBlend (64)
|
||||
sb v0,0x7(s3) // Сохранение команды RectTexBlend (64)
|
||||
li v0,0x80 // 80 - стандартная яркость спрайта
|
||||
sb v0,0x4(s3) // R
|
||||
sb v0,0x5(s3) // G
|
||||
sb v0,0x6(s3) // B = Сохранение 80 80 80 + 64 (3d4,5,6,7)
|
||||
|
||||
//
|
||||
// Здесь запаковка ИСХОДНЫХ координат спрайта в VRAM.
|
||||
//Но они никогда не меняются. Наверное, можно оптимизировать и записывать f0c0
|
||||
PositionProcessing:
|
||||
bgez a1, CalculateXOffset // Проверка знака X координаты
|
||||
sh s1, 0x20(sp) // Сохранение X позиции
|
||||
|
||||
AddOffsetX:
|
||||
addiu t0, a1, 0x3F // Смещение, если меньше ноля
|
||||
|
||||
CalculateXOffset:
|
||||
sra v0, t0, 0x6
|
||||
sll v0, v0, 0x6 // округляем X
|
||||
subu v0, a1, v0
|
||||
lh v1, 0x9E(gp) // Загрузка Y параметра
|
||||
sll v0, v0, 0x2 // Умножение X на 4
|
||||
sb v0, 0xC(s3) // Сохранение X в команду Reсt
|
||||
|
||||
// Обработка Y координаты
|
||||
YCoordinateProcessing:
|
||||
bgez v1, CalculateYOffset // Проверка знака Y координаты
|
||||
move v0, v1
|
||||
|
||||
AddOffsetY:
|
||||
addiu v0, v1, 0xFF // Добавление смещения если отрицательно
|
||||
|
||||
CalculateYOffset:
|
||||
sra v0, v0, 0x8 // Округление координаты Y
|
||||
sll v0, v0, 0x8
|
||||
subu v0, v1, v0
|
||||
sb v0, 0xD(s3) // Сохранение Y текстуры в команду Reсt
|
||||
|
||||
// всю эту часть кода можно смело заменять записью 7DF3F0C0 в адрес 0xC(s3)
|
||||
// она рассчитана на динамический расчёт координат UV и CLUT, но они у нас статические
|
||||
|
||||
lhu v1, 0xA4(gp) // Загружаем из глобальных настроек координаты CLUT текста в VRAM (ВСЕГДА 7FD3 - 304 x 511)
|
||||
li v0, 0x8
|
||||
sh v0, 0x10(s3) // Сохраняем ширину спрайта в пикселях
|
||||
li v0, 0xc
|
||||
sh v0, 0x12(s3) // Сохраняем высоту спрайта в пикселях (0xC = 12)
|
||||
sh v1, 0xe(s3) // Сохраняем clut в команду rect
|
||||
|
||||
// Основной цикл чтения символов из памяти
|
||||
LoadCharacter:
|
||||
lbu a0, 0x0(s6) // Загрузка символа из текста (Читаем byte вместо half) - текст хранится побайтово
|
||||
nop
|
||||
|
||||
//Неактуальный код проверки терминатора иероглифов
|
||||
//sltiu v0, a0, 0x1000 // Проверка на конец текста
|
||||
//beq v0, zero, FinishDrawing // Если символ > 0x1000 (команда) - завершаем
|
||||
|
||||
addiu s6, s6, 0x1 // Переход к следующему символу (в оригинале было смещение на 2 байта)
|
||||
|
||||
// Подготовка к отрисовке символа
|
||||
lui s1, 0x8008
|
||||
addiu s5, s1, -0x6C20 // TextDMANexChainAddr
|
||||
lui s0, 0xFF
|
||||
ori s0, s0, 0xFFFF
|
||||
lui s7, 0x8000
|
||||
|
||||
// Цикл отрисовки символа
|
||||
NextChar:
|
||||
addiu r4, r4, -0x20 // Смещаем код символа для правильного рассчёта в шрифте
|
||||
//Тут нужна проверка на пробел
|
||||
|
||||
isFirstChar:
|
||||
jal makeCharPixelsCustom // Создание символа в scratchpad кастомной процедурой
|
||||
clear s2 // Сброс счетчика
|
||||
|
||||
// Настройка X для символа
|
||||
Setup_X_coord_in_rect_scratch:
|
||||
lw v0, 0xAC(gp) // Первая координата текста
|
||||
lhu v1, 0x4(s4) // Счётчик отрисованных символов в строке (print_params+4)
|
||||
addiu v0, v0, 0x6 // Добавление смещения к первой координате
|
||||
mult v1, v0 // Умножаем...
|
||||
|
||||
some_printparams_save:
|
||||
lui t2, 0xFF00 // Маска для адреса
|
||||
move t4, s4 // Копирование адреса print_params
|
||||
addiu t3, sp, 0x10 // Сохраняем адрес стек+0x10
|
||||
move t1, s4 // t1 - основной регистр print_params, который смещается для разных страниц
|
||||
|
||||
end_x_coord_rect:
|
||||
sh s8, 0xA(s3) // Сохранение Y позиции в команду Rect (3dc)
|
||||
lhu t5, 0x20(sp) // Загрузка X позиции из стека
|
||||
mflo t6 // Результат умножения в t6
|
||||
addu v0, t5, t6 // Вычисление финальной позиции (X + смещение)
|
||||
sh v0, 0x8(s3) // Сохранение X позиции в команду Rect (3d8)
|
||||
|
||||
PageLoop:
|
||||
update_free_dma2:
|
||||
// получаем свободный адрес для цепочки в текущей странице
|
||||
lw v0, -0x6C20(s1) // Текущий свободный DMA адрес
|
||||
nop
|
||||
and a0, v0, t2 // В a0 оставляем первый байт с помощью маски & FF000000 (должно получиться 80000000)
|
||||
and v0, v0, s0 // В v0 срезаем первый байт с помощью маски & 00FFFFFF
|
||||
or a1, v0, s7 // в a1 cовмещаем адрес, приводим к виду (80XXXXXX) - получаем конечный адрес для записи команды rect
|
||||
|
||||
lw v0, 0x4(s5) // DMA счетчик оставшихся свободных цепочек
|
||||
lw v1, 0x0(a1) // Разыменовываем адрес следующей свободной цепочки (v1 = *a1)
|
||||
addiu v0, v0, -1 // Декремент счетчика
|
||||
and v1, v1, s0 // Очистка адресной части следующей свободной цепочки
|
||||
or a0, a0, v1 // Совмещаем адрес с FF......
|
||||
sw v0, 0x4(s5) // Сохранение счетчика
|
||||
sw a0, -0x6C20(s1) // Сохранение нового адреса
|
||||
|
||||
// Копирование данных команды rect в RAM из scratch
|
||||
CopyRectCmd:
|
||||
lw t7, 0x0(s3) // Загрузка данных команды rect из scratch
|
||||
lw t8, 0x4(s3)
|
||||
lw t5, 0x8(s3)
|
||||
lw t6, 0xC(s3)
|
||||
|
||||
sw t7, 0x0(a1) // Сохранение данных команды rect в RAM
|
||||
sw t8, 0x4(a1)
|
||||
sw t5, 0x8(a1)
|
||||
sw t6, 0xC(a1)
|
||||
|
||||
lw t7, 0x10(s3)
|
||||
nop // ждём команду, чтобы значение загрузилось в регистр (особенность MIPS)
|
||||
sw t7, 0x10(a1) // докидываем данные
|
||||
|
||||
// Линкуем предыдущую команду страницы и текущую ()
|
||||
previous_last_cmd_link_with_current:
|
||||
lw v1, 0x18(t1) // Загрузка указателя хранения последней команды в странице print_params+0x18
|
||||
lw v0, 0x0(a1) // Загружаем текущую длину (0004), которая перезаписала адрес в цепочке DMA, когда копировали из sсratch
|
||||
lw v1, 0x0(v1) // Разыменование указателя (v1 = *v1), читаем количество команд последней команды (обычно XXFFFFFF)
|
||||
and v0, v0, t2 // Чистим количество команд (& ff)
|
||||
and v1, v1, s0 // Очистка адресной части из параметров строки print_params
|
||||
or v0, v0, v1 // Объединение (делаем cmdCount + ffffff from next_cmd) - очистка/экранирование?
|
||||
sw v0, 0x0(a1) // Сохранение адреса следующей команды в команде rect (04ffffff)
|
||||
|
||||
lw a0, 0x18(t1) // Снова грузим указатель на маску print_params+0x18 (00fffff)
|
||||
nop // ПРОПУСК!
|
||||
lw v0, 0x0(a0) // Разыменование указателя (v0 = *a0)
|
||||
and v1, a1, s0 // Отрезаем первый байт у адреса цепочки команды rect (сначала это маска 00ФФФФФФ)
|
||||
and v0, v0, t2 // &ff000000 (c маской)
|
||||
or v0, v0, v1 // Объединение (берём у маски кол-во команд, и след адрес)
|
||||
sw v0, 0x0(a0) // Сохраняем след адрес вместо маски (00freeChain)
|
||||
sw a1, 0x18(t1) // Сохраняем адрес след свободной цепочки в print_params (t1+18)
|
||||
// То, что было маской - стало ссылкой на след команду цепочки в этой странице
|
||||
|
||||
// Проверка на первый символ (нужна ли запись первой записи в print_params+0x28?)
|
||||
lhu v0, 0x4(t4) // Проверка - есть ли хоть один сформированный символ
|
||||
nop
|
||||
bne v0, zero, NotFirstChar // Если не ноль, пропускаем
|
||||
clear t0 // Очистка счетчика
|
||||
|
||||
sw a1, 0x28(t1) // Установка первичного адреса в print_params (+16 от ссылки на бывшую маску)
|
||||
|
||||
//ИТОГО -- PrintParams + 0x18 - указатель на последнюю команду на странице
|
||||
// PrintParams + 0x28 - указатель на первую команду на странице
|
||||
// Для второй страницы - смещаемся +0x04
|
||||
|
||||
NotFirstChar:
|
||||
|
||||
move a3, t0 // Обнуляем a3 - это смещение для копирования данных в полусимволе
|
||||
move a2, t3 // загрузка адреса sp+10. В *a2 будет храниться сформированный адрес cputovram в ram
|
||||
|
||||
// Здесь был цикл на 2 полусимвола.
|
||||
// Выдаются свободные адреса цепочек и формируется cputoVram1 и 2 (нам нужна одна команда вместо двух)
|
||||
|
||||
cputovram_cmd_from_scratch_copy:
|
||||
update_free_dma3:
|
||||
halfkanji_loop:
|
||||
lui a1, 0x1F80
|
||||
lw v0, -0x6C20(s1) // Берём адрес след свободной цепочки
|
||||
ori a1, a1, 0x0348 // Берём адрес в scrathPad символа CPUtoVRAM
|
||||
and v0, v0, s0 // отрезаем первый байт у свободной цепочки &00FFFFFF
|
||||
or v0, v0, s7 // Прикручиваем адрес 80....... || nextChain
|
||||
|
||||
sw v0, 0x0(a2) // Сохранение след полного адреса в sp+0x10
|
||||
|
||||
lw v1, -0x6C20(s1) // Берём ЕЩЁ РАЗ адрес свободной цепочки, но уже в v1
|
||||
lw v0, 0x0(v0) // Разыменование - v0 = *v0
|
||||
|
||||
lw a0, 0x4(s5) // Грузим счётчик
|
||||
and v1, t2 // Отрезаем префикс у адреса свободной цепочки в v1 (0xFF - Мы грузили адрес свободной цепочки, чтобы взять префикс FF???)
|
||||
and v0, s0 // чистим адрес от префикса (который и так 00, но неизвестно, что было в данных)(0x00FFFFFF)
|
||||
or v1, v0 // в v1 - адрес NextFreeDMA cо старым префиксом
|
||||
addiu a0, -0x01 // Декремент счётчика
|
||||
|
||||
sw v1, -0x6C20(s1) // Сохраняем NextFreeDMA
|
||||
sw a0, 0x4(s5) // save counter
|
||||
|
||||
lw a0, 0x0(a2) // Грузим след свободный адрес из *sp+10
|
||||
addu v1, a3, a1 // v1 = смещение полусимвола + начало первого символа в scratch (указание на начало данных полусимвола)
|
||||
or v0, v1, a0 // v0 = Проверка на выравнивание адресов чтения и записи
|
||||
andi v0, v0, 0x0003 // путём схлопывания их адресов через or и проверки первых 2 битов (то есть числа 3).
|
||||
beqz v0, Copy16Bytes // Если биты пусты, значит оба адреса выровнены по 4 байта, можно копировать word целиком
|
||||
|
||||
addiu v0, v1, 0x40 // v0 = максимальный адрес копирования исходных данных символа в Scratch
|
||||
|
||||
|
||||
// Копирование данных команды CPUtoVRAM символа из scratchpad в RAM
|
||||
|
||||
// Невыровненное копирование по 2 байта
|
||||
CopyBy2Bytes:
|
||||
lwl t7, 0x3(v1) // Загрузка полусловами по 2 байта
|
||||
lwr t7, 0x0(v1)
|
||||
lwl t8, 0x7(v1)
|
||||
lwr t8, 0x4(v1)
|
||||
lwl t5, 0xB(v1)
|
||||
lwr t5, 0x8(v1)
|
||||
lwl t6, 0xF(v1)
|
||||
lwr t6, 0xC(v1)
|
||||
|
||||
swl t7, 0x3(a0) // Сохранение с выравниванием
|
||||
swr t7, 0x0(a0)
|
||||
swl t8, 0x7(a0)
|
||||
swr t8, 0x4(a0)
|
||||
swl t5, 0xB(a0)
|
||||
swr t5, 0x8(a0)
|
||||
swl t6, 0xF(a0)
|
||||
swr t6, 0xC(a0)
|
||||
|
||||
addiu v1, 0x10 // Смещение адреса в scratch
|
||||
bne v1, v0, CopyBy2Bytes // Проверяем на достижение целевого адреса
|
||||
addiu a0, a0, 0x10 // Следующий целевой адрес
|
||||
|
||||
j last4BytesCopy
|
||||
nop
|
||||
|
||||
// Быстрое выровненное копирование по 4 байта
|
||||
Copy16Bytes:
|
||||
lw t7, 0x0(v1) // Загрузка 32-битных слов
|
||||
lw t8, 0x4(v1)
|
||||
lw t5, 0x8(v1)
|
||||
lw t6, 0xC(v1)
|
||||
|
||||
sw t7, 0x0(a0) // Сохранение
|
||||
sw t8, 0x4(a0)
|
||||
sw t5, 0x8(a0)
|
||||
sw t6, 0xC(a0)
|
||||
|
||||
addiu v1, 0x10 // Смещение адреса в scratch
|
||||
bne v1, v0, Copy16Bytes // Проверяем на достижение целевого адреса
|
||||
addiu a0, a0, 0x10 // Следующий целевой адрес
|
||||
|
||||
// Завершение копирования
|
||||
last4BytesCopy:
|
||||
lwl t7, 0x3(v1) // Копирование остатка
|
||||
lwr t7, 0x0(v1)
|
||||
// lwl t8, 0x7(v1)
|
||||
// lwr t8, 0x4(v1)
|
||||
nop
|
||||
swl t7, 0x3(a0)
|
||||
swr t7, 0x0(a0)
|
||||
// swl t8, 0x7(a0)
|
||||
// swr t8, 0x4(a0)
|
||||
|
||||
// Здесь старый код цикла копирования второго полукандзи
|
||||
// addiu a3, a3, 0x44 // Увеличение смещения
|
||||
// addiu t0, t0, 0x1 // Инкремент счетчика полусимволов
|
||||
// sltiu v0, t0, 0x2 // Если счётчик <2,
|
||||
// bne v0, zero, halfkanji_loop// то считываем ещё раз,
|
||||
// addiu a2, a2, 0x4 // увеличивая адрес хранения команды полусимвола (a2 = sp+14)
|
||||
|
||||
// Линковка DMA-команд
|
||||
link_char_dma_cmds:
|
||||
lw a0, 0x10(sp) // в a0 грузим адрес первого полусимвола (который хранился в *sp+10)
|
||||
lw v1, 0x18(t1) // Получили адрес rect из print_params (вернее, видимо, адрес начала цепочки)
|
||||
lw v0, 0x0(a0) // v0 = *a0 - длина команды cpoutovram (10/0d 000000) без следующего адреса
|
||||
lw v1, 0x0(v1) // v1 = *v1 - разыменовали и получили длину команды rect (04ffffff) без следующего адреса
|
||||
and v0, t2 // v0 & FF000000 - чистим длину команды
|
||||
and v1, s0 // v1 & 00FFFFFF - отрезали маску у длины команды rect
|
||||
or v0, v1 // || Совмещаем число количества команд cpoutovram и маску rect (0dffffff)
|
||||
sw v0, 0x0(a0) // сохраняем длину команды cpoutovram с маской ffffff в цепочку
|
||||
|
||||
lw a0, 0x18(t1) // Опять грузим адрес rect из print_params
|
||||
lw v1, 0x10(sp) // ОпятЬ! грузим адрес первого полусимвола
|
||||
lw v0, 0x0(a0) // v0 = *a0, то есть грузим длину команды с маской (10ffffff) вместо адреса
|
||||
and v1, s0 // &00ffffff у адреса первого полусимвола (режем префикс), оставляя адрес
|
||||
and v0, t2 // в v0 - длина команды rect. Чистим (&ff000000)
|
||||
or v0, v1 // СОЗДАЁТСЯ ЛИНК команды rect и след. адреса (04+nextCommandAddr)
|
||||
sw v0, 0x0(a0) // сохраняем линк в цепочке (команда rect указывает на следующую команду)
|
||||
|
||||
// односимвольная система
|
||||
j disabled_lower_kanji // перепрыгиваем линковку нижнего полусимвола
|
||||
lw v0, 0x10(sp) // сразу грузим адрес цепочки cpoutovram1 для сохранения в print_params
|
||||
|
||||
|
||||
enabled_lower_kanji:
|
||||
// Второй полусимвол - код оставлен, чтобы понимать принцип линковки
|
||||
// зачем-то сначала адрес следующей команды превращается в xxFFFFFF,
|
||||
// скорее всего это маркер конца цепочки текста
|
||||
lw a0, 0x14(sp) // в a0 грузим адрес второго полусимвола (который хранился в *sp+14)
|
||||
lw v1, 0x10(sp) // грузим адрес первого полусимвола
|
||||
lw v0, 0x0(a0) // v0 = *a0, грузим команду с маской (0d000000) вместо адреса
|
||||
lw v1, 0x0(v1) // v1 = *v1, Разыменовываем адрес первого полусимвола (0dffffff)
|
||||
and v0, t2 // в v0 - длина команды cpoutovram2 (&ff000000)
|
||||
and v1, s0 // &00ffffff у адреса первого полусимвола (режем префикс)
|
||||
or v0, v1 // получаем длину команды cpoutovram2 с &00ffffff (0dffffff)
|
||||
sw v0, 0x0(a0) // сохраняем длину команды cpoutovram2 в цепочку
|
||||
|
||||
lw a0, 0x10(sp) // грузим адрес первого полусимвола
|
||||
lw v1, 0x14(sp) // v1 - адрес второго полусимвола
|
||||
lw v0, 0x0(a0) // v0 = *a0 Разыменовываем адрес первого полусимвола
|
||||
and v1, s0 // &00ffffff у адреса второго полусимвола (режем префикс)
|
||||
and v0, t2 // в v0 - длина команды cpoutovram1. чистим (&ff000000)
|
||||
or v0, v1 // СОЗДАЁТСЯ ЛИНК команды cpoutovram1 и cpoutovram2 (0d+nextCommandAddr)
|
||||
sw v0, 0x0(a0) // сохраняем линк в цепочке (команда cpoutovram1 указывает на следующую команду)
|
||||
|
||||
lw v0, 0x14(sp) // v0 - адрес второго полусимвола
|
||||
|
||||
disabled_lower_kanji:
|
||||
addiu s2, 0x1 // Увеличение счетчика страниц
|
||||
sw v0, 0x18(t1) // Обновление связи в print_params (она указывает на адрес последней команды символа в этой странице)
|
||||
|
||||
sltiu v0, s2, 0x2 // Проверка счётчика текущей страницы
|
||||
bnez v0, PageLoop // Если < 2, то формируем символ ещё раз в новую страницу.
|
||||
addiu t1, t1,0x4 // смещаем базовый адрес text_params для следующей страницы
|
||||
|
||||
// Обновление индекса и проверка конца чтения
|
||||
SpaceCharJumpHere:
|
||||
lhu v0, 0x4(s4) // Грузим счётчик символов в print_params
|
||||
nop
|
||||
addiu v0, v0, 0x1 // Инкремент счётчика
|
||||
|
||||
//Моя проверка переменных
|
||||
lui t3, MyAddr
|
||||
lhu v1, -0x10(t3) // грузим количество символов
|
||||
lbu r4, 0x0(s6) // Читаем следующую букву
|
||||
addiu s6, s6, 0x1 // Смещаем позицию чтения
|
||||
sh v0, 0x4(s4) // Сохраняем счётчик сформированных символов в строке в print_params
|
||||
|
||||
bne v0, v1, NextChar // Сравниваем переменные - моё общее кол-во символов и счётчик символов из print_params. Завершаемся, если количество сошлось.
|
||||
nop
|
||||
|
||||
//Старый код с иероглифами
|
||||
// lhu a0, 0x0(s6) // Загрузка следующего символа
|
||||
// nop
|
||||
// sltiu v0, a0, 0x1000 // Проверка на конец текста
|
||||
//addiu s6, s6, 0x2 // Старый код - следующий символ
|
||||
|
||||
|
||||
// Закрытие отрисовки текста
|
||||
TextEnd:
|
||||
clear s2 // Очистка счётчика текстурных страниц s2
|
||||
lui s3, 0x8008 // s3 = 80080000
|
||||
addiu s5, s3, -0x6C20 // s5 = 800793e0 - nextFreeChain
|
||||
lui s1, 0xFF
|
||||
ori s1, s1, 0xFFFF // s1 = 00ffffff
|
||||
move s0, s4 // s0 = print_params
|
||||
clear a1 // Очистка a1
|
||||
|
||||
// Цикл установки текстурных страниц
|
||||
PageTLoop:
|
||||
li a2, 0x1 // Длина команды текстурных страниц. Читается в SetDrawTPage
|
||||
addu s2, a2 // Обновление счетчика s += a2
|
||||
lui v0, 0x8000 // Префикс адресации v0 = 80000000
|
||||
lui a0, 0xFF00 // Маска адреса a0 = ff000000
|
||||
|
||||
//Расчищаем команду под установку текстурной страницы
|
||||
lw v1, -0x6C20(s3) // v1 = nextFreeDma
|
||||
lw a3, 0xA0(gp) // Загрузка a3 = 34 (текстурная страница). Читается в SetDrawTPage
|
||||
and v1, s1 // Очистка префикса nextFreeDma
|
||||
or v1, v0 // превращаем nextFreeDma в адрес (80000000 || nextFreeDma)
|
||||
sw v1, 0x30(s0) // Сохранение адреса пустой команды для drawtpage в print_params
|
||||
|
||||
lw v0, -0x6C20(s3) // Ещё раз v0 = nextFreeDma
|
||||
lw v1, 0x0(v1) // Разыменовывание v1 = *v1. Получаем содержимое адреса след. свободной цепочки.
|
||||
and v0, a0 // оставляем префикс от nextFreeDma (99,999% это будет ff)
|
||||
and v1, s1 // Чиcтка адреса в цепочке от префикса
|
||||
lw a0, 0x4(s5) // Грузим DMA-счетчик
|
||||
or v0, v0, v1 // Объединение префикса со след пустым адресом
|
||||
sw v0, -0x6C20(s3) // Сохранение nextFreeDma
|
||||
addiu a0, a0, -1 // Декремент счетчика
|
||||
sw a0, 0x4(s5) // Сохранение счетчика свободных команд
|
||||
|
||||
lw a0, 0x30(s0) // Загрузка адреса пустой команды для drawtpage из print_params
|
||||
jal SetDrawTPage // Установка DrawTPage (текстурной страницы)
|
||||
addiu s0, s0, 0x4 // Смещение в print_params для следующей страницы
|
||||
|
||||
sltiu v0, s2, 0x2 // Проверка на завершение 2 страниц
|
||||
bne v0, zero, PageTLoop // Если не закончили, продолжаем
|
||||
clear a1 // Очистка a1
|
||||
|
||||
// Восстановление регистров и возврат
|
||||
ReturnFromFunction:
|
||||
move v0, s4 // Возвращаем DMA адрес
|
||||
lw ra, 0x4C(sp) // Восстановление return address
|
||||
lw s8, 0x48(sp) // Восстановление s8
|
||||
lw s7, 0x44(sp) // Восстановление s7
|
||||
lw s6, 0x40(sp) // Восстановление s6
|
||||
lw s5, 0x3C(sp) // Восстановление s5
|
||||
lw s4, 0x38(sp) // Восстановление s4
|
||||
lw s3, 0x34(sp) // Восстановление s3
|
||||
lw s2, 0x30(sp) // Восстановление s2
|
||||
lw s1, 0x2C(sp) // Восстановление s1
|
||||
lw s0, 0x28(sp) // Восстановление s0
|
||||
|
||||
jr ra // Возврат из функции
|
||||
addiu sp, sp, 0x50 // Восстановление стека
|
||||
|
||||
|
||||
.include "cd_extra_charload.asm"
|
||||
.include "charCalcs.asm"
|
||||
|
||||
.close
|
||||
.include "cd_extra_txtpatches.asm" //misc text patches
|
||||
|
||||
|
||||
// COMPILE COMMAND: ./armips -sym cd_extra_main.map cd_extra_main.asm
|
||||
408
cd_extra_main_small_source.asm
Normal file
408
cd_extra_main_small_source.asm
Normal file
@@ -0,0 +1,408 @@
|
||||
smallCharLine:
|
||||
addiu sp, sp, -0x50
|
||||
sw s7, 0x44(sp)
|
||||
move s7, a0 ; s7 = text_ptr
|
||||
sw s0, 0x28(sp)
|
||||
move s0, a1 ; s0 = X
|
||||
sw s2, 0x30(sp)
|
||||
move s2, a2 ; s2 = Y
|
||||
sw s8, 0x48(sp)
|
||||
move s8, s0 ; s8 = X (copy)
|
||||
lui t0, 0xFF
|
||||
ori t0, t0, 0xFFFF
|
||||
sw s1, 0x2C(sp)
|
||||
andi s1, a3, 0xFF ; s1 = color
|
||||
move a0, s1
|
||||
sw s5, 0x3C(sp)
|
||||
lui s5, 0x8008
|
||||
lui a2, 0xFF00
|
||||
lui v0, 0x8000
|
||||
move t5, s5
|
||||
lw v1, -0x6C20(s5) ; TextDMANexChainAddr
|
||||
lw a3, 0x60(sp)
|
||||
addiu t5, t5, -0x6C20
|
||||
sw ra, 0x4C(sp)
|
||||
sw s6, 0x40(sp)
|
||||
sw s4, 0x38(sp)
|
||||
sw s3, 0x34(sp)
|
||||
|
||||
; === DMA INITIALIZATION ===
|
||||
and a2, v1, a2
|
||||
andi a1, a3, 0xFF
|
||||
and v1, v1, t0
|
||||
or s4, v1, v0 ; s4 = DMA base
|
||||
andi a3, a3, 0x10
|
||||
sltu a3, zero, a3
|
||||
lw v0, 0x4(t5) ; TextDMACounter
|
||||
lw v1, 0x0(s4)
|
||||
addiu v0, v0, -1
|
||||
and v1, v1, t0
|
||||
or a2, a2, v1
|
||||
sw v0, 0x4(t5)
|
||||
sw a2, -0x6C20(s5)
|
||||
jal FUN_8001adc8
|
||||
sw a3, 0x18(sp)
|
||||
|
||||
; === CHARACTER SETUP ===
|
||||
move a0, s4
|
||||
sll s0, s0, 0x10
|
||||
sra a1, s0, 0x10
|
||||
sll s2, s2, 0x10
|
||||
sra s0, s2, 0x10
|
||||
move a2, s0
|
||||
jal FUN_80019d70
|
||||
move a3, s1
|
||||
|
||||
; === GPU REGISTER SETUP ===
|
||||
lui a1, 0x1F80
|
||||
ori a1, a1, 0x0348
|
||||
li v0, 0x2
|
||||
li a3, 0xC
|
||||
sh v0, 0x14(sp)
|
||||
li v0, 0x10
|
||||
sh a3, 0x16(sp)
|
||||
sb v0, 0x3(a1)
|
||||
lui v0, 0xA000
|
||||
sw v0, 0x4(a1)
|
||||
lhu v1, 0x9C(gp) ; DAT_80078f40
|
||||
lhu a0, 0x9E(gp) ; DAT_80078f42
|
||||
lui v0, 0x100
|
||||
lui at, 0x1F80
|
||||
sw v0, 0x388(at)
|
||||
lw v0, 0x14(sp)
|
||||
lui s3, 0x1F80
|
||||
sh v1, 0x10(sp)
|
||||
sh a0, 0x12(sp)
|
||||
lw v1, 0x10(sp)
|
||||
lh a0, 0x9C(gp)
|
||||
ori s3, s3, 0x3D0
|
||||
sw v0, 0xC(a1)
|
||||
lui v0, 0x8001
|
||||
move a2, a0
|
||||
sw v1, 0x8(a1)
|
||||
|
||||
; === PATTERN SETUP ===
|
||||
lui t5, 0x1F80
|
||||
ori t5, t5, 0x2E0
|
||||
addiu t8, v0, 0x3E8
|
||||
lwl t6, 0x3(t8)
|
||||
lwr t6, 0x0(t8)
|
||||
lwl t7, 0x7(t8)
|
||||
lwr t7, 0x4(t8)
|
||||
swl t6, 0x3(t5)
|
||||
swr t6, 0x0(t5)
|
||||
swl t7, 0x7(t5)
|
||||
swr t7, 0x4(t5)
|
||||
lwl t6, 0xB(t8)
|
||||
lwr t6, 0x8(t8)
|
||||
lwl t7, 0xF(t8)
|
||||
lwr t7, 0xC(t8)
|
||||
swl t6, 0xB(t5)
|
||||
swr t6, 0x8(t5)
|
||||
swl t7, 0xF(t5)
|
||||
swr t7, 0xC(t5)
|
||||
lwl t6, 0x13(t8)
|
||||
lwr t6, 0x10(t8)
|
||||
lwl t7, 0x17(t8)
|
||||
lwr t7, 0x14(t8)
|
||||
swl t6, 0x13(t5)
|
||||
swr t6, 0x10(t5)
|
||||
swl t7, 0x17(t5)
|
||||
swr t7, 0x14(t5)
|
||||
lwl t6, 0x1B(t8)
|
||||
lwr t6, 0x18(t8)
|
||||
lwl t7, 0x1F(t8)
|
||||
lwr t7, 0x1C(t8)
|
||||
swl t6, 0x1B(t5)
|
||||
swr t6, 0x18(t5)
|
||||
swl t7, 0x1F(t5)
|
||||
swr t7, 0x1C(t5)
|
||||
|
||||
; === SPRITE COMMAND SETUP ===
|
||||
li v0, 0x4
|
||||
sb v0, 0x3(s3)
|
||||
li v0, 0x64
|
||||
sb v0, 0x7(s3)
|
||||
li v0, 0x80
|
||||
sb v0, 0x4(s3)
|
||||
sb v0, 0x5(s3)
|
||||
bgez a0, calc_x_offset
|
||||
sb v0, 0x6(s3)
|
||||
addiu a2, a0, 0x3F
|
||||
|
||||
calc_x_offset:
|
||||
sra v0, a2, 0x6
|
||||
sll v0, v0, 0x6
|
||||
subu v0, a0, v0
|
||||
lh v1, 0x9E(gp)
|
||||
sll v0, v0, 0x2
|
||||
sb v0, 0xC(s3)
|
||||
bgez v1, calc_y_offset
|
||||
move v0, v1
|
||||
addiu v0, v1, 0xFF
|
||||
|
||||
calc_y_offset:
|
||||
sra v0, v0, 0x8
|
||||
sll v0, v0, 0x8
|
||||
subu v0, v1, v0
|
||||
sb v0, 0xD(s3)
|
||||
lhu v1, 0xA4(gp) ; DAT_80078f48
|
||||
li v0, 0x8
|
||||
sh v0, 0x10(s3)
|
||||
sh a3, 0x12(s3)
|
||||
sh v1, 0xE(s3)
|
||||
|
||||
; === MAIN TEXT LOOP ===
|
||||
lbu a1, 0x0(s7)
|
||||
beq a1, zero, finish
|
||||
addiu s7, s7, 0x1
|
||||
move s6, s5
|
||||
lui s5, 0x8008
|
||||
addiu s5, s5, -0x6C20
|
||||
sw s0, 0x1C(sp)
|
||||
lui s0, 0xFF
|
||||
ori s0, s0, 0xFFFF
|
||||
sw s2, 0x20(sp)
|
||||
|
||||
text_loop:
|
||||
addiu v1, a1, -0x67
|
||||
sltiu v0, v1, 0x13
|
||||
beq v0, zero, switch_default
|
||||
sll v0, v1, 0x2
|
||||
lui t6, 0x8001
|
||||
addiu t6, t6, 0x4A0
|
||||
addu v0, v0, t6
|
||||
lw v0, 0x0(v0)
|
||||
jr v0
|
||||
|
||||
switch_cases:
|
||||
lw t7, 0x1C(sp)
|
||||
j after_switch
|
||||
addiu s2, t7, 0x2
|
||||
|
||||
switch_default:
|
||||
lw t8, 0x20(sp)
|
||||
sra s2, t8, 0x10
|
||||
|
||||
after_switch:
|
||||
lw t5, 0x18(sp)
|
||||
beq t5, zero, normal_pos
|
||||
addiu a1, a1, -0x20
|
||||
lui v0, 0x8001
|
||||
addiu v0, v0, 0x43C
|
||||
addu v0, a1, v0
|
||||
lui v1, 0x8001
|
||||
lbu v0, 0x0(v0)
|
||||
addiu v1, v1, 0x428
|
||||
sll v0, v0, 0x1
|
||||
addu v0, v0, v1
|
||||
lbu v1, 0x0(v0)
|
||||
lbu v0, 0x1(v0)
|
||||
subu v1, s8, v1
|
||||
sll a0, v1, 0x10
|
||||
sra s1, a0, 0x10
|
||||
j pos_calculated
|
||||
addu s8, v0, v1
|
||||
|
||||
normal_pos:
|
||||
sll v1, s8, 0x10
|
||||
lhu v0, 0x4(s4)
|
||||
sra v1, v1, 0x10
|
||||
sll v0, v0, 0x3
|
||||
addu s1, v1, v0
|
||||
|
||||
pos_calculated:
|
||||
jal FUN_80019f84
|
||||
move a0, a1
|
||||
lui t4, 0x8000
|
||||
lui t2, 0xFF00
|
||||
move t1, s4
|
||||
lui t3, 0x1F80
|
||||
ori t3, t3, 0x388
|
||||
move t0, s4
|
||||
sh s1, 0x8(s3)
|
||||
sh s2, 0xA(s3)
|
||||
|
||||
; === DMA CHAIN PROCESSING ===
|
||||
dma_loop:
|
||||
lw v0, -0x6C20(s6)
|
||||
and a0, v0, t2
|
||||
and v0, v0, s0
|
||||
or a1, v0, t4
|
||||
lw v0, 0x4(s5)
|
||||
lw v1, 0x0(a1)
|
||||
addiu v0, v0, -1
|
||||
and v1, v1, s0
|
||||
or a0, a0, v1
|
||||
sw v0, 0x4(s5)
|
||||
sw a0, -0x6C20(s6)
|
||||
lw t6, 0x0(s3)
|
||||
lw t7, 0x4(s3)
|
||||
lw t8, 0x8(s3)
|
||||
lw t5, 0xC(s3)
|
||||
sw t6, 0x0(a1)
|
||||
sw t7, 0x4(a1)
|
||||
sw t8, 0x8(a1)
|
||||
sw t5, 0xC(a1)
|
||||
lw t6, 0x10(s3)
|
||||
sw t6, 0x10(a1)
|
||||
lw v1, 0x18(t0)
|
||||
lw v0, 0x0(a1)
|
||||
lw v1, 0x0(v1)
|
||||
and v0, v0, t2
|
||||
and v1, v1, s0
|
||||
or v0, v0, v1
|
||||
sw v0, 0x0(a1)
|
||||
lw a0, 0x18(t0)
|
||||
lw v0, 0x0(a0)
|
||||
and v1, a1, s0
|
||||
and v0, v0, t2
|
||||
or v0, v0, v1
|
||||
sw v0, 0x0(a0)
|
||||
sw a1, 0x18(t0)
|
||||
lhu v0, 0x4(t1)
|
||||
beq v0, zero, is_first
|
||||
nop
|
||||
j not_first
|
||||
nop
|
||||
|
||||
is_first:
|
||||
sw a1, 0x28(t0)
|
||||
sh s1, 0xC(t1)
|
||||
sh s2, 0xE(t1)
|
||||
|
||||
not_first:
|
||||
lui a1, 0x1F80
|
||||
ori a1, a1, 0x348
|
||||
lw v0, -0x6C20(s6)
|
||||
and a0, v0, t2
|
||||
and v0, v0, s0
|
||||
or a3, v0, t4
|
||||
move a2, a3
|
||||
lw v0, 0x4(s5)
|
||||
lw v1, 0x0(a3)
|
||||
addiu v0, v0, -1
|
||||
and v1, v1, s0
|
||||
or a0, a0, v1
|
||||
sw v0, 0x4(s5)
|
||||
andi v0, a3, 0x3
|
||||
beq v0, zero, aligned_copy
|
||||
sw a0, -0x6C20(s6)
|
||||
|
||||
unaligned_copy:
|
||||
lwl t6, 0x3(a1)
|
||||
lwr t6, 0x0(a1)
|
||||
lwl t7, 0x7(a1)
|
||||
lwr t7, 0x4(a1)
|
||||
lwl t8, 0xB(a1)
|
||||
lwr t8, 0x8(a1)
|
||||
lwl t5, 0xF(a1)
|
||||
lwr t5, 0xC(a1)
|
||||
swl t6, 0x3(a2)
|
||||
swr t6, 0x0(a2)
|
||||
swl t7, 0x7(a2)
|
||||
swr t7, 0x4(a2)
|
||||
swl t8, 0xB(a2)
|
||||
swr t8, 0x8(a2)
|
||||
swl t5, 0xF(a2)
|
||||
swr t5, 0xC(a2)
|
||||
addiu a1, a1, 0x10
|
||||
bne a1, t3, unaligned_copy
|
||||
addiu a2, a2, 0x10
|
||||
j copy_done
|
||||
nop
|
||||
|
||||
aligned_copy:
|
||||
lw t6, 0x0(a1)
|
||||
lw t7, 0x4(a1)
|
||||
lw t8, 0x8(a1)
|
||||
lw t5, 0xC(a1)
|
||||
sw t6, 0x0(a2)
|
||||
sw t7, 0x4(a2)
|
||||
sw t8, 0x8(a2)
|
||||
sw t5, 0xC(a2)
|
||||
addiu a1, a1, 0x10
|
||||
bne a1, t3, aligned_copy
|
||||
addiu a2, a2, 0x10
|
||||
|
||||
copy_done:
|
||||
lwl t6, 0x3(a1)
|
||||
lwr t6, 0x0(a1)
|
||||
swl t6, 0x3(a2)
|
||||
swr t6, 0x0(a2)
|
||||
lw v1, 0x18(t0)
|
||||
lw v0, 0x0(a3)
|
||||
lw v1, 0x0(v1)
|
||||
and v0, v0, t2
|
||||
and v1, v1, s0
|
||||
or v0, v0, v1
|
||||
sw v0, 0x0(a3)
|
||||
lw a0, 0x18(t0)
|
||||
lw v0, 0x0(a0)
|
||||
and v1, a3, s0
|
||||
and v0, v0, t2
|
||||
or v0, v0, v1
|
||||
sw v0, 0x0(a0)
|
||||
sw a3, 0x18(t0)
|
||||
addiu t0, t0, 0x4
|
||||
addiu v0, t1, 0x8
|
||||
sltu v0, t0, v0
|
||||
bne v0, zero, dma_loop
|
||||
nop
|
||||
|
||||
lhu v0, 0x4(s4)
|
||||
addiu v0, v0, 0x1
|
||||
sh v0, 0x4(s4)
|
||||
lbu a1, 0x0(s7)
|
||||
bne a1, zero, text_loop
|
||||
addiu s7, s7, 0x1
|
||||
|
||||
; === CLEANUP ===
|
||||
finish:
|
||||
clear s2
|
||||
lui s3, 0x8008
|
||||
addiu s5, s3, -0x6C20
|
||||
lui s1, 0xFF
|
||||
ori s1, s1, 0xFFFF
|
||||
move s0, s4
|
||||
clear a1
|
||||
|
||||
cleanup_loop:
|
||||
li a2, 0x1
|
||||
addu s2, s2, a2
|
||||
lui v0, 0x8000
|
||||
lui a0, 0xFF00
|
||||
lw v1, -0x6C20(s3)
|
||||
lw a3, 0xA0(gp)
|
||||
and v1, v1, s1
|
||||
or v1, v1, v0
|
||||
sw v1, 0x30(s0)
|
||||
lw v0, -0x6C20(s3)
|
||||
lw v1, 0x0(v1)
|
||||
and v0, v0, a0
|
||||
and v1, v1, s1
|
||||
lw a0, 0x4(s5)
|
||||
or v0, v0, v1
|
||||
sw v0, -0x6C20(s3)
|
||||
addiu a0, a0, -1
|
||||
sw a0, 0x4(s5)
|
||||
lw a0, 0x30(s0)
|
||||
jal SetDrawTPage
|
||||
addiu s0, s0, 0x4
|
||||
sltiu v0, s2, 0x2
|
||||
bne v0, zero, cleanup_loop
|
||||
clear a1
|
||||
|
||||
move v0, s4
|
||||
lw ra, 0x4C(sp)
|
||||
lw s8, 0x48(sp)
|
||||
lw s7, 0x44(sp)
|
||||
lw s6, 0x40(sp)
|
||||
lw s5, 0x3C(sp)
|
||||
lw s4, 0x38(sp)
|
||||
lw s3, 0x34(sp)
|
||||
lw s2, 0x30(sp)
|
||||
lw s1, 0x2C(sp)
|
||||
lw s0, 0x28(sp)
|
||||
jr ra
|
||||
addiu sp, sp, 0x50
|
||||
453
cd_extra_main_source.asm
Normal file
453
cd_extra_main_source.asm
Normal file
@@ -0,0 +1,453 @@
|
||||
DrawCharLine_19000:
|
||||
addiu sp, sp, -0x50
|
||||
sw s6, 0x40(sp)
|
||||
move s6, a0
|
||||
sw s1, 0x2c(sp)
|
||||
move s1, a1
|
||||
sw s2, 0x30(sp)
|
||||
move s2, a2
|
||||
sw s3, 0x34(sp)
|
||||
|
||||
lui s3, 0x1f80
|
||||
ori s3, s3, 0x3d0
|
||||
|
||||
lui t0, 0xff
|
||||
ori t0, t0, 0xffff
|
||||
sw s0, 0x28(sp)
|
||||
andi s0, a3, 0xff
|
||||
move a0, s0
|
||||
|
||||
InitDMA:
|
||||
lui a3, 0x8008
|
||||
lui a2, 0xff00
|
||||
addiu t1, a3, -0x6c20
|
||||
lw v1, -0x6c20(a3)
|
||||
lbu a1, 0x60(sp)
|
||||
lui v0, 0x8000
|
||||
|
||||
sw ra, 0x4c(sp)
|
||||
sw s8, 0x48(sp)
|
||||
sw s7, 0x44(sp)
|
||||
sw s5, 0x3c(sp)
|
||||
sw s4, 0x38(sp)
|
||||
|
||||
and a2, v1, a2
|
||||
andi a1, a1, 0xff
|
||||
and v1, v1, t0
|
||||
or s4, v1, v0
|
||||
|
||||
lw v0, 0x4(t1)
|
||||
lw v1, 0x0(s4)
|
||||
addiu v0, v0, -0x1
|
||||
and v1, v1, t0
|
||||
or a2, a2, v1
|
||||
sw v0, 0x4(t1)
|
||||
|
||||
jal FUN_8001adc8
|
||||
sw a2, -0x6c20(a3)
|
||||
move a0, s4
|
||||
|
||||
sll a1, s1, 0x10
|
||||
sra a1, a1, 0x10
|
||||
sll a2, s2, 0x10
|
||||
sra a2, a2, 0x10
|
||||
jal FUN_80019d70
|
||||
move a3, s0
|
||||
|
||||
; Настройка GPU регистров
|
||||
SetupGPURegisters:
|
||||
lui a3, 0x1f80
|
||||
ori a3, a3, 0x348
|
||||
lui a2, 0x1f80
|
||||
ori a2, a2, 0x38c
|
||||
|
||||
li v0, 0x3
|
||||
sh v0, 0x1c(sp)
|
||||
li v0, 0x6
|
||||
li a1, 0xd
|
||||
lui a0, 0xa000
|
||||
|
||||
; GPU init in scratch
|
||||
ScratchCPUtoVRAMinit:
|
||||
sh v0, 0x1e(sp)
|
||||
sb a1, 0x3(a3)
|
||||
sw a0, 0x4(a3)
|
||||
|
||||
lhu t0, 0x9c(gp)
|
||||
lhu v0, 0x9e(gp)
|
||||
lui v1, 0x100
|
||||
|
||||
lui at, 0x1f80
|
||||
sw v1, 0x37c(at)
|
||||
|
||||
sb a1, 0x3(a2)
|
||||
sw a0, 0x4(a2)
|
||||
|
||||
calculateCoords:
|
||||
lh a1, 0x9c(gp)
|
||||
move s8, s2
|
||||
lui at, 0x1f80
|
||||
sw v1, 0x3c0(at)
|
||||
|
||||
sh t0, 0x18(sp)
|
||||
sh v0, 0x1a(sp)
|
||||
lw a0, 0x18(sp)
|
||||
addiu v0, v0, 0x6
|
||||
sh v0, 0x1a(sp)
|
||||
|
||||
lw v0, 0x1c(sp)
|
||||
lw v1, 0x18(sp)
|
||||
move t0, a1
|
||||
sw v0, 0xc(a3)
|
||||
sw v0, 0xc(a2)
|
||||
|
||||
lui v0, 0x8001
|
||||
sw a0, 0x8(a3)
|
||||
sw v1, 0x8(a2)
|
||||
|
||||
|
||||
;4bit pattern in scratch
|
||||
lui t8, 0x1f80
|
||||
ori t8, t8, 0x2e0
|
||||
addiu t7, v0, 0x3e8
|
||||
lwl t5, 0x3(t7)
|
||||
lwr t5, 0x0(t7)
|
||||
lwl t6, 0x7(t7)
|
||||
lwr t6, 0x4(t7)
|
||||
swl t5, 0x3(t8)
|
||||
swr t5, 0x0(t8)
|
||||
swl t6, 0x7(t8)
|
||||
swr t6, 0x4(t8)
|
||||
lwl t5, 0xb(t7)
|
||||
lwr t5, 0x8(t7)
|
||||
lwl t6, 0xf(t7)
|
||||
lwr t6, 0xc(t7)
|
||||
swl t5, 0xb(t8)
|
||||
swr t5, 0x8(t8)
|
||||
swl t6, 0xf(t8)
|
||||
swr t6, 0xc(t8)
|
||||
lwl t5, 0x13(t7)
|
||||
lwr t5, 0x10(t7)
|
||||
lwl t6, 0x17(t7)
|
||||
lwr t6, 0x14(t7)
|
||||
swl t5, 0x13(t8)
|
||||
swr t5, 0x10(t8)
|
||||
swl t6, 0x17(t8)
|
||||
swr t6, 0x14(t8)
|
||||
lwl t5, 0x1b(t7)
|
||||
lwr t5, 0x18(t7)
|
||||
lwl t6, 0x1f(t7)
|
||||
lwr t6, 0x1c(t7)
|
||||
swl t5, 0x1b(t8)
|
||||
swr t5, 0x18(t8)
|
||||
swl t6, 0x1f(t8)
|
||||
swr t6, 0x1c(t8)
|
||||
|
||||
; Copy Sprite DMA Command Forming
|
||||
li v0, 0x4
|
||||
sb v0, 0x3(s3)
|
||||
li v0, 0x64
|
||||
sb v0, 0x7(s3)
|
||||
li v0, 0x80
|
||||
sb v0, 0x4(s3)
|
||||
sb v0, 0x5(s3)
|
||||
sb v0, 0x6(s3)
|
||||
|
||||
bgez a1, LAB_800191fc
|
||||
sh s1, 0x20(sp)
|
||||
|
||||
AddOffsetX:
|
||||
addiu t0, a1, 0x3f
|
||||
|
||||
LAB_800191fc:
|
||||
sra v0, t0, 0x6
|
||||
sll v0, v0, 0x6
|
||||
subu v0, a1, v0
|
||||
lh v1, 0x9e(gp)
|
||||
sll v0, v0, 0x2
|
||||
sb v0, 0xc(s3)
|
||||
|
||||
bgez v1, LAB_80019220
|
||||
move v0, v1
|
||||
|
||||
AddOffsetY:
|
||||
addiu v0, v1, 0xff
|
||||
|
||||
LAB_80019220:
|
||||
sra v0, v0, 0x8
|
||||
sll v0, v0, 0x8
|
||||
subu v0, v1, v0
|
||||
sb v0, 0xd(s3)
|
||||
|
||||
lhu v1, 0xa4(gp)
|
||||
li v0, 0xc
|
||||
sh v0, 0x10(s3)
|
||||
sh v0, 0x12(s3)
|
||||
sh v1, 0xe(s3)
|
||||
|
||||
LoadCharacter:
|
||||
lhu a0, 0x0(s6)
|
||||
nop
|
||||
sltiu v0, a0, 0x1000
|
||||
beq v0, zero, LAB_80019518
|
||||
addiu s6, s6, 0x2
|
||||
|
||||
; Подготовка к отрисовке символа
|
||||
lui s1, 0x8008
|
||||
addiu s5, s1, -0x6c20
|
||||
lui s0, 0xff
|
||||
ori s0, s0, 0xffff
|
||||
lui s7, 0x8000
|
||||
|
||||
LAB_8001926c:
|
||||
jal MakeCharInScratch
|
||||
clear s2
|
||||
|
||||
; Настройка DMA для символа
|
||||
SetupDMAForChar:
|
||||
lw v0, 0xac(gp)
|
||||
lhu v1, 0x4(s4)
|
||||
addiu v0, v0, 0xc
|
||||
mult v1, v0
|
||||
lui t2, 0xff00
|
||||
move t4, s4
|
||||
addiu t3, sp, 0x10
|
||||
move t1, s4
|
||||
|
||||
sh s8, 0xa(s3)
|
||||
lhu t5, 0x20(sp)
|
||||
mflo t6
|
||||
addu v0, t5, t6
|
||||
sh v0, 0x8(s3)
|
||||
|
||||
LAB_800192a8:
|
||||
lw v0, -0x6c20(s1)
|
||||
nop
|
||||
and a0, v0, t2
|
||||
and v0, v0, s0
|
||||
or a1, v0, s7
|
||||
lw v0, 0x4(s5)
|
||||
lw v1, 0x0(a1)
|
||||
addiu v0, v0, -0x1
|
||||
and v1, v1, s0
|
||||
or a0, a0, v1
|
||||
sw v0, 0x4(s5)
|
||||
sw a0, -0x6c20(s1)
|
||||
|
||||
|
||||
lw t7, 0x0(s3)
|
||||
lw t8, 0x4(s3)
|
||||
lw t5, 0x8(s3)
|
||||
lw t6, 0xc(s3)
|
||||
|
||||
sw t7, 0x0(a1)
|
||||
sw t8, 0x4(a1)
|
||||
sw t5, 0x8(a1)
|
||||
sw t6, 0xc(a1)
|
||||
|
||||
lw t7, 0x10(s3)
|
||||
nop
|
||||
sw t7, 0x10(a1)
|
||||
|
||||
; Подготовка адресов в DMA-цепочке в RAM
|
||||
DMAcharAddres:
|
||||
lw v1, 0x18(t1)
|
||||
lw v0, 0x0(a1)
|
||||
lw v1, 0x0(v1)
|
||||
and v0, v0, t2
|
||||
and v1, v1, s0
|
||||
or v0, v0, v1
|
||||
sw v0, 0x0(a1)
|
||||
|
||||
lw a0, 0x18(t1)
|
||||
nop
|
||||
lw v0, 0x0(a0)
|
||||
and v1, a1, s0
|
||||
and v0, v0, t2
|
||||
or v0, v0, v1
|
||||
sw v0, 0x0(a0)
|
||||
sw a1, 0x18(t1)
|
||||
|
||||
|
||||
lhu v0, 0x4(t4)
|
||||
nop
|
||||
bne v0, zero, LAB_80019354
|
||||
clear t0
|
||||
|
||||
sw a1, 0x28(t1)
|
||||
|
||||
LAB_80019354:
|
||||
move a3, t0
|
||||
move a2, t3
|
||||
|
||||
LAB_8001935c:
|
||||
lui a1, 0x1f80
|
||||
lw v0, -0x6c20(s1)
|
||||
ori a1, a1, 0x348
|
||||
and v0, v0, s0
|
||||
or v0, v0, s7
|
||||
sw v0, 0x0(a2)
|
||||
lw v1, -0x6c20(s1)
|
||||
lw v0, 0x0(v0)
|
||||
lw a0, 0x4(s5)
|
||||
and v1, v1, t2
|
||||
and v0, v0, s0
|
||||
or v1, v1, v0
|
||||
addiu a0, a0, -0x1
|
||||
sw v1, -0x6c20(s1)
|
||||
sw a0, 0x4(s5)
|
||||
lw a0, 0x0(a2)
|
||||
addu v1, a3, a1
|
||||
or v0, v1, a0
|
||||
andi v0, v0, 0x3
|
||||
beq v0, zero, LAB_80019404
|
||||
addiu v0, v1, 0x30
|
||||
|
||||
LAB_800193b0:
|
||||
lwl t7, 0x3(v1)
|
||||
lwr t7, 0x0(v1)
|
||||
lwl t8, 0x7(v1)
|
||||
lwr t8, 0x4(v1)
|
||||
lwl t5, 0xb(v1)
|
||||
lwr t5, 0x8(v1)
|
||||
lwl t6, 0xf(v1)
|
||||
lwr t6, 0xc(v1)
|
||||
swl t7, 0x3(a0)
|
||||
swr t7, 0x0(a0)
|
||||
swl t8, 0x7(a0)
|
||||
swr t8, 0x4(a0)
|
||||
swl t5, 0xb(a0)
|
||||
swr t5, 0x8(a0)
|
||||
swl t6, 0xf(a0)
|
||||
swr t6, 0xc(a0)
|
||||
addiu v1, v1, 0x10
|
||||
bne v1, v0, LAB_800193b0
|
||||
addiu a0, a0, 0x10
|
||||
j LAB_80019430
|
||||
nop
|
||||
|
||||
LAB_80019404:
|
||||
lw t7, 0x0(v1)
|
||||
lw t8, 0x4(v1)
|
||||
lw t5, 0x8(v1)
|
||||
lw t6, 0xc(v1)
|
||||
sw t7, 0x0(a0)
|
||||
sw t8, 0x4(a0)
|
||||
sw t5, 0x8(a0)
|
||||
sw t6, 0xc(a0)
|
||||
addiu v1, v1, 0x10
|
||||
bne v1, v0, LAB_80019404
|
||||
addiu a0, a0, 0x10
|
||||
|
||||
LAB_80019430:
|
||||
lwl t7, 0x3(v1)
|
||||
lwr t7, 0x0(v1)
|
||||
lwl t8, 0x7(v1)
|
||||
lwr t8, 0x4(v1)
|
||||
swl t7, 0x3(a0)
|
||||
swr t7, 0x0(a0)
|
||||
swl t8, 0x7(a0)
|
||||
swr t8, 0x4(a0)
|
||||
addiu a3, a3, 0x44
|
||||
addiu t0, t0, 0x1
|
||||
sltiu v0, t0, 0x2
|
||||
bne v0, zero, LAB_8001935c
|
||||
addiu a2, a2, 0x4
|
||||
lw a0, 0x10(sp)
|
||||
lw v1, 0x18(t1)
|
||||
lw v0, 0x0(a0)
|
||||
lw v1, 0x0(v1)
|
||||
and v0, v0, t2
|
||||
and v1, v1, s0
|
||||
or v0, v0, v1
|
||||
sw v0, 0x0(a0)
|
||||
lw a0, 0x18(t1)
|
||||
lw v1, 0x10(sp)
|
||||
lw v0, 0x0(a0)
|
||||
and v1, v1, s0
|
||||
and v0, v0, t2
|
||||
or v0, v0, v1
|
||||
sw v0, 0x0(a0)
|
||||
lw a0, 0x14(sp)
|
||||
lw v1, 0x10(sp)
|
||||
lw v0, 0x0(a0)
|
||||
lw v1, 0x0(v1)
|
||||
and v0, v0, t2
|
||||
and v1, v1, s0
|
||||
or v0, v0, v1
|
||||
sw v0, 0x0(a0)
|
||||
lw a0, 0x10(sp)
|
||||
lw v1, 0x14(sp)
|
||||
lw v0, 0x0(a0)
|
||||
and v1, v1, s0
|
||||
and v0, v0, t2
|
||||
or v0, v0, v1
|
||||
sw v0, 0x0(a0)
|
||||
lw v0, 0x14(sp)
|
||||
addiu s2, s2, 0x1
|
||||
sw v0, 0x18(t1)
|
||||
sltiu v0, s2, 0x2
|
||||
bne v0, zero, LAB_800192a8
|
||||
addiu t1, t1, 0x4
|
||||
lhu v0, 0x4(s4)
|
||||
nop
|
||||
addiu v0, v0, 0x1
|
||||
sh v0, 0x4(s4)
|
||||
lhu a0, 0x0(s6)
|
||||
nop
|
||||
sltiu v0, a0, 0x1000
|
||||
bne v0, zero, LAB_8001926c
|
||||
addiu s6, s6, 0x2
|
||||
|
||||
LAB_80019518:
|
||||
clear s2
|
||||
lui s3, 0x8008
|
||||
addiu s5, s3, -0x6c20
|
||||
lui s1, 0xff
|
||||
ori s1, s1, 0xffff
|
||||
move s0, s4
|
||||
clear a1
|
||||
|
||||
LAB_80019534:
|
||||
li a2, 0x1
|
||||
addu s2, s2, a2
|
||||
lui v0, 0x8000
|
||||
lui a0, 0xff00
|
||||
lw v1, -0x6c20(s3)
|
||||
lw a3, 0xa0(gp)
|
||||
and v1, v1, s1
|
||||
or v1, v1, v0
|
||||
sw v1, 0x30(s0)
|
||||
|
||||
lw v0, -0x6c20(s3)
|
||||
lw v1, 0x0(v1)
|
||||
and v0, v0, a0
|
||||
and v1, v1, s1
|
||||
lw a0, 0x4(s5)
|
||||
or v0, v0, v1
|
||||
sw v0, -0x6c20(s3)
|
||||
addiu a0, a0, -0x1
|
||||
sw a0, 0x4(s5)
|
||||
|
||||
lw a0, 0x30(s0)
|
||||
jal SetDrawTPage
|
||||
addiu s0, s0, 0x4
|
||||
|
||||
sltiu v0, s2, 0x2
|
||||
bne v0, zero, LAB_80019534
|
||||
clear a1
|
||||
|
||||
move v0, s4
|
||||
lw ra, 0x4c(sp)
|
||||
lw s8, 0x48(sp)
|
||||
lw s7, 0x44(sp)
|
||||
lw s6, 0x40(sp)
|
||||
lw s5, 0x3c(sp)
|
||||
lw s4, 0x38(sp)
|
||||
lw s3, 0x34(sp)
|
||||
lw s2, 0x30(sp)
|
||||
lw s1, 0x2c(sp)
|
||||
lw s0, 0x28(sp)
|
||||
|
||||
jr ra
|
||||
addiu sp, sp, 0x50
|
||||
67
cd_extra_txtpatches.asm
Normal file
67
cd_extra_txtpatches.asm
Normal file
@@ -0,0 +1,67 @@
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;
|
||||
;;; Some txt Patches to JAPAN Version to print bi(u)g text smaller
|
||||
;;;
|
||||
|
||||
.open "SLPS_028.26", 0x8000F800
|
||||
|
||||
;Text speed patch (0 - show all text, 2 - Normal, 1 - Button Pressed (fast) )
|
||||
.org 0x8001b5b8
|
||||
li a0, 0
|
||||
;lhu a0, 0xc0(gp) ;Original Code
|
||||
|
||||
|
||||
; Main Bigfont size between letters for special codes
|
||||
.org 0x8001927c
|
||||
addiu v0,v0,0x6
|
||||
|
||||
;calcNextX Routine (calc X in line after command)
|
||||
;.org 0x8001af38
|
||||
; sll r2,r3,2h ; Its Original - Custom in custom routine
|
||||
|
||||
;dialog start line tabulation
|
||||
;.org 0x8007b195
|
||||
; .byte 0x4 ;pixels
|
||||
.org 0x8001ca0c
|
||||
li a2, 0x4
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;Print Routines Calls Replacing
|
||||
|
||||
;main dialog calls from PrintProgramText Routine
|
||||
.org 0x8001cd58
|
||||
jal ExternalPrint
|
||||
.org 0x8001cdd8
|
||||
jal ExternalPrint
|
||||
|
||||
.org 0x8001c098
|
||||
jal ExternalPrint
|
||||
.org 0x8001c10c
|
||||
jal ExternalPrint
|
||||
|
||||
|
||||
|
||||
|
||||
;printPlaneTEXT (PlayerName, etc...)
|
||||
.org 0x8001c388
|
||||
jal ExternalPrint
|
||||
|
||||
|
||||
|
||||
;custom CheckCharNumToLineEnd for proper Complex Lines Read (charcountread)
|
||||
.org 0x8001abf4
|
||||
j ReturnCharsInString ;custom routine
|
||||
clear v1
|
||||
;j 0x8001af00 ;original code
|
||||
|
||||
;calcnextX Custom
|
||||
|
||||
.org 0x8001ac1c
|
||||
; addiu sp,sp,-0x18 ;Original Code
|
||||
; sw ra,0x10(sp)
|
||||
j calcnextXCustom ;PATCHED
|
||||
nop
|
||||
|
||||
.close
|
||||
|
||||
|
||||
104
charCalcs.asm
Normal file
104
charCalcs.asm
Normal file
@@ -0,0 +1,104 @@
|
||||
ReturnCharsInString:
|
||||
|
||||
|
||||
lhu v0,0x0(a0)
|
||||
nop
|
||||
srl v0,v0,0xD ;;;;Check 13th bit (1byte system !!!)
|
||||
bne v0,zero,IsMy1byteString
|
||||
clear v1
|
||||
;v1 = charCount
|
||||
|
||||
j StartReading
|
||||
nop
|
||||
IsMy1byteString:
|
||||
lhu v0,0x0(a0)
|
||||
nop
|
||||
andi v0,v0,0xff ;Clear from cmd flag
|
||||
|
||||
andi v1,v0,0x1
|
||||
beq v1,zero,notAnd1
|
||||
nop
|
||||
addiu v0,v0,0x1
|
||||
|
||||
notAnd1:
|
||||
sra v0,v0,1 ;v0/2 (bytes Pairs)
|
||||
addiu v0,v0,1 ;v0 += = header 2 bytes
|
||||
jr ra
|
||||
move v1,v0 ;return v0,v1 - charsNum
|
||||
|
||||
GetNewChar:
|
||||
addiu v1,v1,1
|
||||
StartReading:
|
||||
lhu v0,0x0(a0) ;a0 - curTextAddr
|
||||
nop
|
||||
sltiu v0,v0,0x1000
|
||||
bne v0,zero,GetNewChar ;if currentChar<1000 - goto next addr+2b
|
||||
addiu a0,a0,2
|
||||
jr ra
|
||||
move v0,v1 ;return v0,v1 - charsNum
|
||||
|
||||
|
||||
calcNextXCustom:
|
||||
addiu sp,sp,-0x18
|
||||
sw ra,0x10(sp)
|
||||
|
||||
lhu v0,0x0(a0)
|
||||
nop
|
||||
andi v1,v0,0xff ;Clear from cmd flag
|
||||
srl v0,v0,0xD ;;;;Check 13th bit (1byte system !!!)
|
||||
beq v0,zero,JapOldText ;if bit 0d = 0 - OldTypeText
|
||||
nop
|
||||
j IHaveStringLength
|
||||
move v0,v1 ;double char count
|
||||
JapOldText:
|
||||
jal ReturnCharsInString
|
||||
nop
|
||||
IHaveStringLength:
|
||||
sll v1,v0,0x1
|
||||
addu v1,v1,v0
|
||||
lw ra,0x10(sp)
|
||||
sll v0,v1,0x1 ;*charcount * 6 pix
|
||||
jr ra
|
||||
addiu sp,sp,0x18
|
||||
|
||||
RetunCharsToCity:
|
||||
lhu v0,0x0(a0)
|
||||
nop
|
||||
srl v0,v0,0xD ;;;;Check 13th bit (1byte system !!!)
|
||||
bne v0,zero,IsMy1byteCity
|
||||
clear v1 ;v1 = charCount
|
||||
|
||||
j StartReading
|
||||
nop
|
||||
IsMy1byteCity:
|
||||
lhu v0,0x0(a0)
|
||||
nop
|
||||
andi v0,v0,0xff ;Clear from cmd flag
|
||||
jr ra
|
||||
move v1,v0 ;return v0,v1 - charsNum
|
||||
|
||||
|
||||
RetunCharsToCityDiv2:
|
||||
lhu v0,0x0(a0)
|
||||
nop
|
||||
srl v0,v0,0xD ;;;;Check 13th bit (1byte system !!!)
|
||||
bne v0,zero,IsMy1byteCityDiv2
|
||||
clear v1 ;v1 = charCount
|
||||
|
||||
j StartReading
|
||||
nop
|
||||
IsMy1byteCityDiv2:
|
||||
lhu v0,0x0(a0)
|
||||
nop
|
||||
andi v0,v0,0xff ;Clear from cmd flag
|
||||
|
||||
andi v1,v0,0x1
|
||||
beq v1,zero,notAnd1_2
|
||||
nop
|
||||
addiu v0,v0,0x1
|
||||
|
||||
notAnd1_2:
|
||||
sra v0,v0,1 ;v0/2 (bytes Pairs)
|
||||
; addiu v0,v0,1 ;v0 += = header 2 bytes
|
||||
jr ra
|
||||
move v1,v0 ;return v0,v1 - charsNum
|
||||
88
charload.asm
Normal file
88
charload.asm
Normal file
@@ -0,0 +1,88 @@
|
||||
|
||||
; LOADING CHAR FROM CUSTOM FONT
|
||||
|
||||
makeCharPixelsCustom:
|
||||
|
||||
addiu sp,sp,-0x18
|
||||
move a1,a0
|
||||
lui a0,0x1f80
|
||||
ori a0,a0,0x358
|
||||
|
||||
sw ra,0x10(sp)
|
||||
|
||||
li a2,1
|
||||
|
||||
lbu t2,0xac(gp)
|
||||
move t0,r4
|
||||
lui v1,0x801f ; ;load font addr to r3 (801ef000 + BA00)
|
||||
ori v1,v1,0xaa00 ; ==== 801faa00
|
||||
sll v0,a1,0x1 ; r2 = r5 << 1 (*2)
|
||||
addu v0,v0,a1 ; r2 += r5 (it. *3)
|
||||
sll v0,v0,0x2 ; r2 << 2 (*4) (r2 = r5 *12)
|
||||
addu t1,v0,v1 ;t1 = char addr ; r9 = r2(offs) + r3 (start)
|
||||
li r6,0x6 ; r6 = byteslength = 6
|
||||
move v0,r6 ; r2 = r6 (counter)
|
||||
beq v0,zero,charLoaded ; if counter=0 then branch
|
||||
addiu r6,r6,-0x1 ; dec r6
|
||||
lui a3,0x1f80
|
||||
ori a3,a3,0x2e0 ; set scratch convert addr r7 = 1f8002e0
|
||||
CharLoop:
|
||||
lhu v1,0x0(t1) ;load upperhalf of char to r3
|
||||
nop
|
||||
andi r4,v1,0xf ; r4 = r3 & 0f - cutting left semibyte
|
||||
srl v1,v1,0x4 ; r3 >> 4
|
||||
andi v0,v1,0xf ; r2 = r3 & 0f
|
||||
sll v0,v0,0x1 ; r2 << 1
|
||||
addu v0,v0,a3 ; r2 = r2 + to4bitConvertTableAddr (r7)
|
||||
lhu v0,0x0(v0);>DAT_1f8002e0 r2 = *r2(half) pixel pattern
|
||||
nop
|
||||
mult v0,t2 ; r2*r10. make Color
|
||||
sll r4,r4,0x1 ; r4 << 1
|
||||
addu r4,r4,a3 ; r4 += r6 counter
|
||||
mflo a1 ; load lo to r5
|
||||
lhu v0,0x0(r4);>DAT_1f8002e0 load table+r4
|
||||
nop
|
||||
mult v0,t2 ; r2 * colorIndex r10
|
||||
srl v1,v1,0x4 ; r3 >> 4, right 4 bits
|
||||
andi r4,v1,0xf ; r4 = r3 & f0 (cut right semibyte)
|
||||
srl v1,v1,0x4 ; r3 >> 4
|
||||
sll v1,v1,0x1 ; r3 << 1 = *2
|
||||
addu v1,v1,a3 ; r3=r3+Table r7
|
||||
sll v0,a1,0x10 ; r2 = r5 << 10 bits
|
||||
mflo t4 ; load r12,low
|
||||
or v0,t4,v0 ; r2 = r12 | r2
|
||||
sw v0,0x0(t0) ; load *r8(current Scratch) from r2(result)
|
||||
lhu v0,0x0(v1);>DAT_1f8002e0 ; load r2 from TablePattern Half from r3
|
||||
nop
|
||||
mult v0,t2 ; r2*color r10
|
||||
sll r4,r4,0x1 ; r4 << 1
|
||||
addu r4,r4,a3 ; r4 = r4 + TableStart
|
||||
mflo a1 ; ld r5,lo
|
||||
lhu v0,0x0(r4);>DAT_1f8002e0 ; ld half r2 from *r4
|
||||
nop
|
||||
mult v0,t2 ; r2*col
|
||||
addiu t1,t1,0x2 ; move charFont + +2
|
||||
move v1,a2 ; r3 = byteCount (r6)
|
||||
addiu a2,a2,-0x1 ; r6 -= 1
|
||||
addiu t0,t0,0x4 ; scrathAddr r8 += 4
|
||||
sll v0,a1,0x10 ; r2 = r5 << 10 bits (move to hi)
|
||||
mflo t4 ; ld r12,lo (result)
|
||||
or v0,t4,v0 ; combine r2 & r 12 (0001 x 1111)
|
||||
sw v0,0x0(t0) ; store result to scratch r2 to *r8
|
||||
bne v1,zero,charLoop ; if r3 counter<>0 goto loop
|
||||
addiu t0,t0,0x4 ; r8 scrath += 4
|
||||
charLoaded:
|
||||
|
||||
lbu v1,0xad(gp) ; >DAT_8007b23d_textMode load curText Shadow?
|
||||
li v0,0x1
|
||||
bne v1,v0,NotShadow ;Shadow character check
|
||||
nop
|
||||
lui a0,0x1f80
|
||||
jal MakeShadowSmallChar ;Make shadow in Scratch DMA
|
||||
ori a0,a0,0x358
|
||||
|
||||
NotShadow:
|
||||
lw ra,0x10(sp) ;Restore stack and exit
|
||||
nop
|
||||
jr ra
|
||||
addiu sp,sp,0x18
|
||||
0
compile_command.txt
Normal file
0
compile_command.txt
Normal file
172
complex_strings_copy.asm
Normal file
172
complex_strings_copy.asm
Normal file
@@ -0,0 +1,172 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;MAKING COMPLEX RUSSIAN STRINGS
|
||||
|
||||
.org 0x8008f600
|
||||
|
||||
|
||||
;InitProgram + First Hybrid Copy
|
||||
|
||||
lui r2,0x8009
|
||||
sw r4,-0x30(r2) ;;;Store start string addr
|
||||
lhu r3,0x0(r5)
|
||||
nop
|
||||
srl r2,r3,0xD ;;;;Check 13th bit (1byte system !!!)
|
||||
bne r2,zero,isMyString ;;if yes - jump to my prog. If no - init this
|
||||
lhu r3,0x0(r5) ;load first 2-byte
|
||||
|
||||
clear r2 ;clear MAIN counter
|
||||
|
||||
;Standart 2-byte name
|
||||
addiu r4,2 ;DestAddr + 2 (For my xx20 Command)
|
||||
next2bytes:
|
||||
sb r3,0x0(r4)
|
||||
addiu r4,1 ;add dest counter
|
||||
addiu r5,2 ;add src counter
|
||||
addiu r2,1 ;add char counter
|
||||
lhu r3,0x0(r5) ;read next jap char
|
||||
nop
|
||||
srl r3,r3,0xC ;Is it end of 2byte-string???
|
||||
bne r3,zero,saveLengthAndExit
|
||||
lhu r3,0x0(r5)
|
||||
j next2bytes
|
||||
nop
|
||||
|
||||
saveLengthAndExit:
|
||||
ori r2,0x2000 ;add my command
|
||||
lui r3,0x8009
|
||||
lw r3,-0x30(r3) ;load str init address
|
||||
nop
|
||||
sh r2,0x0(r3) ;save init counter +20 to dest addr (half)
|
||||
jr ra ;exit
|
||||
move r2,r4 ;Duplicate for futher script
|
||||
|
||||
|
||||
isMyString:
|
||||
lhu r3,0x0(r5)
|
||||
nop
|
||||
andi r3,r3,0xFF
|
||||
addiu r3,2 ;length to copy = charnum+2
|
||||
nextMyByte:
|
||||
lbu r2,0x0(r5)
|
||||
nop
|
||||
sb r2,0x0(r4)
|
||||
addiu r4,1
|
||||
addiu r3,-1
|
||||
bne r3,zero,nextMyByte
|
||||
addiu r5,1
|
||||
jr ra ;exit
|
||||
move r2,r4 ;Duplicate for futher script
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
.org 0x8008f700 ;Adding my text Program
|
||||
|
||||
lhu r3,0x0(r5) ;read src string length
|
||||
nop
|
||||
;NEED TO CHECK STRING FORMAT
|
||||
srl r2,r3,0xD ;;;;Check 13th bit (1byte system !!!) ;FOR TATSHUYA BOSS
|
||||
beq r2,zero,secondStrisJap
|
||||
nop
|
||||
|
||||
lbu r2,0x0(r4) ;read destination string length (1 byte)
|
||||
nop
|
||||
lbu r3,0x0(r5) ;read src string length
|
||||
nop
|
||||
add r2,r3 ;Sum lengts of old and new strings
|
||||
sb r2,0x0(r4) ;save new string length
|
||||
|
||||
addiu r5,2 ;shift src +2 (len code)
|
||||
sub r2,r3
|
||||
addiu r4,2
|
||||
add r4,r2 ;shift destination - len+2
|
||||
|
||||
nextMyByte2:
|
||||
lbu r2,0x0(r5)
|
||||
nop
|
||||
sb r2,0x0(r4)
|
||||
addiu r4,1
|
||||
addiu r3,-1
|
||||
bne r3,zero,nextMyByte
|
||||
addiu r5,1
|
||||
jr ra ;exit
|
||||
move r2,r4 ;Duplicate for futher script
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
secondStrisJap:
|
||||
|
||||
lbu r3,0x0(r4) ;read dest string length
|
||||
addiu r4,2 ;DestAddr + 2 (For my xx20 Command)
|
||||
add r4,r3 ;add dest counter = end of prev string
|
||||
|
||||
lhu r3,0x0(r5) ;load first 2-byte
|
||||
|
||||
clear r2 ;clear MAIN counter
|
||||
|
||||
;Standart 2-byte name
|
||||
|
||||
next2bytes2:
|
||||
sb r3,0x0(r4)
|
||||
addiu r4,1 ;add dest counter
|
||||
addiu r5,2 ;add src counter
|
||||
addiu r2,1 ;add char counter
|
||||
lhu r3,0x0(r5) ;read next jap char
|
||||
nop
|
||||
srl r3,r3,0xC ;Is it end of 2byte-string???
|
||||
bne r3,zero,saveLengthAndExit2
|
||||
lhu r3,0x0(r5)
|
||||
j next2bytes2
|
||||
nop
|
||||
|
||||
saveLengthAndExit2:
|
||||
lui r3,0x8009
|
||||
lw r3,-0x30(r3)
|
||||
nop
|
||||
lhu r3,0x0(r3) ;load str prev length
|
||||
nop
|
||||
add r2,r3,r2 ;main counter + prev string length
|
||||
|
||||
;ori r2,r3,0x2000 ;add my command = xx20
|
||||
|
||||
lui r3,0x8009
|
||||
lw r3,-0x30(r3)
|
||||
nop
|
||||
sh r2,0x0(r3) ;save counter +20 to dest addr (half)
|
||||
jr ra ;exit
|
||||
move r2,r4 ;Duplicate for futher script
|
||||
|
||||
|
||||
|
||||
|
||||
;NAMEENTER SWAP ROUTINE
|
||||
|
||||
|
||||
.org 0x8008f800 ;Adding my text Program
|
||||
;r4 - destination
|
||||
;r5 - source
|
||||
move r6,ra
|
||||
|
||||
lui r5, 0x8008
|
||||
ori r5, 0x0a7c ;Copy name to temp
|
||||
lui r4, 0x8008
|
||||
ori r4, 0xfa0e ;dest+2
|
||||
jal 0x80015fe0 ;TEMP - 80080a0e
|
||||
nop
|
||||
|
||||
lui r5, 0x8008
|
||||
ori r5, 0x0ae4 ;Copy surname to name
|
||||
lui r4, 0x8008
|
||||
ori r4, 0x0a7e ;dest+2
|
||||
jal 0x80015fe0
|
||||
nop
|
||||
|
||||
lui r5, 0x8008
|
||||
ori r5, 0xfa0c ;Copy temp to surname ;TEMP - 80080a0c
|
||||
lui r4, 0x8008
|
||||
ori r4, 0x0ae6 ;dest+2
|
||||
jal 0x80015fe0
|
||||
nop
|
||||
|
||||
move ra,r6
|
||||
li r4,0
|
||||
|
||||
j 0x80017a9c ;EXIT
|
||||
|
||||
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
|
||||
760
main.asm
Normal file
760
main.asm
Normal file
@@ -0,0 +1,760 @@
|
||||
;
|
||||
; Persona 2 Innocent Sin (PSX) JAP / Custom Characters/Data Patch
|
||||
;
|
||||
; Author: Sergey Shemet 12/10/2021
|
||||
|
||||
.psx
|
||||
|
||||
|
||||
|
||||
.definelabel SetDrawTPage, 0x800542cc
|
||||
.definelabel storeColor, 0x8001b0c8
|
||||
.definelabel initCopyCharChain, 0x8001a070
|
||||
.definelabel makeCharPixels, 0x8001a08f ;need custom routine with custom font
|
||||
.definelabel GenerateSmallChar, 0x8001a284 ;need custom routine
|
||||
.definelabel MakeShadowSmallChar, 0x8001a20c
|
||||
.definelabel PrintBigDMAText, 0x80019300
|
||||
|
||||
.definelabel MyAddr, 0x8009
|
||||
|
||||
|
||||
.open "SLPS_021.00", 0x8000F800
|
||||
|
||||
|
||||
.include "complex_strings_copy.asm" ;Make complex strings in battles
|
||||
|
||||
;;neeeeed to init 8008fff6 = min dma commands
|
||||
|
||||
.org 0x80090000
|
||||
ExternalPrint:
|
||||
;;;;;;;text routing test routine
|
||||
move r3,s3
|
||||
move s3,r4
|
||||
|
||||
lhu v0,0x0(s3) ;read half 2 bytes of text (r4, not s1+0c!!!!!)
|
||||
move s3,r3
|
||||
srl v1,v0,0xD ;;;;Check 13th bit (1byte system !!!)
|
||||
bne v1,zero,MyPrintLineRoutine
|
||||
clear v1
|
||||
j PrintBigDMAText
|
||||
nop
|
||||
|
||||
;;;;;;;;;;;;;;;;;MyPrintLineRoutine
|
||||
MyPrintLineRoutine:
|
||||
addiu sp,sp,-0x50
|
||||
sw s6,0x40(sp)
|
||||
move s6,r4 ;textReadAddr
|
||||
sw s1,0x2c(sp)
|
||||
move s1,r5
|
||||
sw s2,0x30(sp)
|
||||
move s2,r6
|
||||
sw s3,0x34(sp)
|
||||
clear r25 ;CURRENT TEXT MODE
|
||||
|
||||
|
||||
; NEW COMMAND OBRAB
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;lw v1,0x0(s6)
|
||||
;nop
|
||||
;v1/r3 - MyChars charcount
|
||||
andi v0,v0,0xff
|
||||
addiu s6,s6,0x2 ;Moving text read pointer +2bytes
|
||||
|
||||
|
||||
|
||||
lui s3,MyAddr
|
||||
sw v0,-0x10(s3) ;store bytecounter @ 8008fff0 and clean charCounter (8008fff2)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
lui s3,0x1f80
|
||||
ori s3,s3,0x3d0 ;s3 = 1f8003d0 - copysprite cmd in scratch
|
||||
lui t0,0xff
|
||||
ori t0,t0,0xffff ;t0 = 00FFFFFF
|
||||
|
||||
sw s0, 0x28(sp) ;save s0 in stack
|
||||
andi s0,r7,0xff ;s0 - cut textMode (color & shadow)
|
||||
move r4,s0 ;r4 = s0 (cutted color)
|
||||
lui r7, 0x8008 ;r7 = 8008 0000
|
||||
lui r6, 0xff00 ;r6 = FF000000
|
||||
|
||||
addiu t1,r7,-0x4930 ;t1 = 8007b6d0 - new free CHAIN Here
|
||||
lw v1, -0x4930(r7) ;r3/v1 = load freeChain
|
||||
lbu r5,0x60(sp) ;shadow flag from stack to r5
|
||||
lui v0,0x8000 ;r2 = 8000 0000
|
||||
sw ra,0x4c(sp)
|
||||
sw s8,0x48(sp)
|
||||
sw s7,0x44(sp)
|
||||
sw s5,0x3c(sp) ; push ra,r30,r23,31,r20
|
||||
sw s4,0x38(sp)
|
||||
;;init chains
|
||||
and r6,v1,r6 ;r6 = r3 & ff000000 = FF000000
|
||||
andi r5,r5,0xff ;clean text mode (color/shadow)
|
||||
and v1,v1,t0 ;r3 & 00ffffff
|
||||
or r20,v1,v0 ;r20 - 80...+r3 = freeChain Main Addr
|
||||
lw v0,0x4(t1) ;Load DMA Counter
|
||||
lw v1,0x0(r20) ;r3 = next free Chain
|
||||
addiu v0,v0,-0x1 ;DMA Counter-1
|
||||
and v1,v1,t0 ; r3 & r8 (00ffffff) cut f.byte
|
||||
or r6,r6,v1 ; r6 | r3 = ff+r3 = next free Chain (FF...) +
|
||||
sw v0,0x4(t1) ;save DMACounter
|
||||
jal storeColor
|
||||
sw r6,-0x4930(r7) ;SAVE next free Chain (FF...) to 7b6d0
|
||||
move r4,r20 ;currentChainAddr
|
||||
sll r5,s1,0x10 ;r5 = X<<10h (003A0000)
|
||||
sra r5,r5,0x10 ; r5=r5>>10h 0000003A
|
||||
sll r6,s2,0x10 ; r6 = Y << 10h
|
||||
sra r6,r6,0x10 ;r6>>10h - 100% clean coords
|
||||
jal initCopyCharChain ;init line chains
|
||||
move r7,s0 ;store textMode _THIS IS FOR INIT
|
||||
|
||||
;;;;init ScratchPad
|
||||
;;;;;;;;;;;;;;;;;; CPU TO VRAM
|
||||
lui r7,0x1f80
|
||||
ori r7,r7,0x348 ;r7 = FIRST CHAR START
|
||||
;lui r6,0x1f80 ;LOWER HALF OF CHAR - DONT NEED!!!
|
||||
;ori r6,r6,0x38c
|
||||
li v0,0x2
|
||||
sh v0,0x1c(sp)
|
||||
li v0,0xc
|
||||
|
||||
lui r4,0xa000 ;r4 = a000 0000
|
||||
sh v0,0x1e(sp) ; SAVE 000C0002 TO STACK+1c
|
||||
|
||||
|
||||
|
||||
; INIT CHAR
|
||||
li r5,0x10 ;cmd count 10 00 00 00 =>DAT_1f80034b
|
||||
sb r5,0x3(r7) ;SAVE 0d 00 00 00 =>DAT_1f80034c cmdcount\
|
||||
sw r4,0x4(r7); SAVE a000000 TO DAT_1f80034c
|
||||
lhu t0,0xa0(gp) ;0310 ;Load x(0310) to r8
|
||||
lhu v0,0xa2(gp) ;01f0 ;Load y(01F0)to r2
|
||||
lui v1,0x100 ;0100 0000 flushcache
|
||||
lui at,0x1f80 ;scrathcpadStart
|
||||
sw v1,0x388(at) ;save 0x01 00 00 00 to end of 1st CHAR chain
|
||||
setY1:
|
||||
move s8,s2 ; r18 to r30 (y) !!!!!!!!!!!!!!!!!!!
|
||||
lh r5,0xa0(gp) ;for futher sprite X calc
|
||||
sh t0,0x18(sp)
|
||||
sh v0,0x1a(sp) ;SAVE CONCAT 013001f0 to stack
|
||||
lw r4,0x18(sp) ;LOAD 013001f0 from stack
|
||||
lw v0,0x1c(sp) ; r2 = 000c0002 from stack
|
||||
sw r4,0x8(r7) ;SAVE 013001f0 TO SCRATCH
|
||||
sw v0,0xc(r7) ;=>DAT_1f800354 r2 - 000c0002 to 1st char (to r7+0c)
|
||||
|
||||
lui v0,0x8001 ;load 80010000 to r2
|
||||
|
||||
;4bit table pattern
|
||||
.include "4bitPattern.asm"
|
||||
|
||||
; Copy Sprite DMA Command Forming
|
||||
li v0,0x4
|
||||
sb v0,0x3(s3) ; 04 00 00 00 to 3d0 (sb 04 to 3d3) CHAIN LENGTH
|
||||
li v0,0x64
|
||||
sb v0,0x7(s3) ;sb 64 to 3d7 (copySpriteCommand)
|
||||
li v0,0x80
|
||||
sb v0,0x4(s3)
|
||||
sb v0,0x5(s3)
|
||||
sb v0,0x6(s3) ;make 80 80 80 64 (3d4,5,6,7)
|
||||
bgez r5,LAB_800194fc
|
||||
SetX1:
|
||||
sh s1,0x20(sp) ;store X half to sp+10 !!!!!!!!!!!!!!!!!
|
||||
addiu t0,r5,0x3f
|
||||
LAB_800194fc: ;decoding coords for source sprite
|
||||
sra v0,t0,0x6 ;r2 = r6 >> 6 = 4
|
||||
sll v0,v0,0x6 ;r2 << 6 = 100
|
||||
subu v0,r5,v0 ;r2 = r6 - r2 = 30
|
||||
lh v1,0xa2(gp) ;r3 = load Y half from mem
|
||||
sll v0,v0,0x2 ;r2 << 2
|
||||
sb v0,0xc(s3) ; >DAT_1f8003dc ;STORE RECT SRC CHAR SPRITE X BYTE
|
||||
bgez v1,LAB_80019520 ;if Y r3>=0 - branch & r2=r3
|
||||
move v0,v1
|
||||
addiu v0,v1,0xff ;else r2 = ff - r3
|
||||
LAB_80019520:
|
||||
sra v0,v0,0x8
|
||||
sll v0,v0,0x8
|
||||
subu v0,v1,v0
|
||||
sb v0,0xd(s3) ; >DAT_1f8003dd ;STORE RECT SRC CHAR SPRITE Y BYTE
|
||||
lhu v1,0xa8(gp)
|
||||
;DIFF BETWEEN VERSs::::::::::::::::::::::
|
||||
li v0,0x8 ; r2 = 8 Sprite WIDTH
|
||||
sh v0,0x10(s3) ; 3e0 - 0008 save
|
||||
sh v1,0xe(s3);=>DAT_1f8003de ; *3de = r3 = 7df3 CLUT of RECT
|
||||
li v0,0xc ; r2 = c Sprite HEIGTH
|
||||
sh v0,0x12(s3) ; 3e2 - 000c save
|
||||
|
||||
;TEXT READ START
|
||||
lbu r4,0x0(s6) ;MAIN READ CHAR COMMAND - Load Byte Unsigned
|
||||
nop
|
||||
addiu s6,s6,0x1 ;Shift read address +1 byte
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;CHAR CHECK CUTTED!
|
||||
lui s1,0x8008 ;load 80080000 to r17
|
||||
addiu s5,s1,-0x4930 ;r21 = r17-4930= 7b6d0 (tempDMA)
|
||||
lui s0,0xff
|
||||
ori s0,s0,0xffff ;s0 = 00 ff ff ff
|
||||
lui s7,0x8000 ;r3 = 8000 0000
|
||||
NextChar:
|
||||
addiu r4,r4,-0x20 ;Shift unprintable symbols
|
||||
|
||||
|
||||
|
||||
li t2, 0xa0 ; минимальное значение оптимизированного кода (a0+20 = 192 (Русская А))
|
||||
sltu v0,r4,t2
|
||||
bne v0, zero, NotOptimized ; проверяем на русский текст и перепрыгиваем на старый режим, если нет.
|
||||
nop
|
||||
|
||||
.include "main_spritecopy.asm"
|
||||
|
||||
|
||||
NotOptimized:
|
||||
|
||||
|
||||
;ОБРАБОТКА ПРОБЕЛОВ
|
||||
|
||||
bne r4,zero,SpaceCheckBranch ;Если не пробел - перепрыгиваем сразу
|
||||
nop
|
||||
|
||||
lui t2,MyAddr
|
||||
lh v0,-0xE(t2) ;Load my temp CHAR COUNTER for check
|
||||
nop
|
||||
lh t3,-0x10(t2)
|
||||
addiu v0,v0,1 ;overall chars+1
|
||||
beq v0,t3,SpaceCheckBranch ;is last char - пробел не проверяем!
|
||||
nop
|
||||
|
||||
sh v0,-0xE(t2) ;Save charcount += 1
|
||||
lbu r4,0x0(s6) ;LOAD NEXT CHAR
|
||||
nop
|
||||
j NextChar
|
||||
addiu s6,s6,0x1 ;Shift read address +1 byte
|
||||
|
||||
|
||||
SpaceCheckBranch:
|
||||
|
||||
|
||||
|
||||
jal makeCharPixelsCustom ;MAKE SMALL CHAR IN SCRATCH ___ CUSTOM ROUTINE
|
||||
clear r18
|
||||
|
||||
; Coords XY init
|
||||
lw v0,0xb0(gp); =>DAT_8007b240_parms load r2 from r28+0b0 (7b240)(Xoffs)
|
||||
lui t2,MyAddr
|
||||
lh v1,-0xE(t2) ;Load my temp CHAR COUNTER for check
|
||||
; lhu v1,0x4(r20) ; current char = r3 = half *DMAAddr + 4
|
||||
addiu v0,v0,0x6 ; 0x06 * 6px btw letters!
|
||||
|
||||
|
||||
mult v1,v0 ; r3*r2 = xOffs*charNum
|
||||
|
||||
|
||||
|
||||
lui t2,0xff00 ; r10 = ld upper ff00 = ff000000
|
||||
move t4,r20 ; r12 = r20 (params)
|
||||
addiu t3,sp,0x10 ; r11 = sp + 10 = 807ffe50
|
||||
move t1,r20 ; r12 = r20 (params again)
|
||||
GetY:
|
||||
sh s8,0xa(s3) ; DAT_1f8003da *r19(1st scr DMA)+0a = r30 (Y??) !!!!!!!!!!!!!!!!
|
||||
GetX:
|
||||
lhu t5,0x20(sp) ; r13 = ld half (sp+20) = 003A ---X from sp+20 !!
|
||||
mflo t6 ; r14 = lo
|
||||
addu v0,t5,t6 ; r2 = r13 + r14 = X + Offset
|
||||
sh v0,0x8(s3) ;DAT_1f8003d8 save r2 half to 1f8003d8 = X (3A) !!!!!!!!!!!!!!!!
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IF Mode is not 0 = load 2 to page counter
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PageLoop:
|
||||
;MAKING COPYSPRITE CHAIN
|
||||
lw v0,-0x4930(s1); r2 = *freeChainAddr
|
||||
nop
|
||||
and r4,v0,t2 ; r4 = r2 & ff00..
|
||||
and v0,v0,s0 ; r2 & 00FFFFFF
|
||||
or r5,v0,s7 ; r5 = r2 or r23 (80000000) = 801ADF10
|
||||
lw v0,0x4(s5) ; CmdCounter r2 = *7b6d0+4 = 705
|
||||
lw v1,0x0(r5) ; r3 = New Free ChainAddr
|
||||
addiu v0,v0,-0x1 ; r2 -= 1 Counter Down
|
||||
and v1,v1,s0 ; r3 & 00FFFFFF cut begin byte
|
||||
or r4,r4,v1 ; r4 & r3 = ff......
|
||||
sw v0,0x4(s5) ; CmdCounter save DMA Counter
|
||||
sw r4,-0x4930(s1); freeChain save new freeChain
|
||||
CopyCmdFromScratch:
|
||||
; CopyScriptChain copy from scratch
|
||||
|
||||
|
||||
contStandartDMA:
|
||||
lui t6,0x500 ; set 4 commands in next chain
|
||||
nop
|
||||
sw t6,0x0(r5) ; set 5 commands
|
||||
nop
|
||||
lui t6, 0xe100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
ori t6,0x0234 ;;;;;;;make changepage command in every command to standart
|
||||
sw t6,0x4(r5) ;store it before all 6400000 command
|
||||
|
||||
addiu r5,4 ;SHIFT DEST ADDR
|
||||
|
||||
|
||||
lw t7,0x4(s3) ;>DAT_1f8003d4 r15 = 64808080 - CopySpriteCmd
|
||||
lw t8,0x8(s3) ;>DAT_1f8003d8 r24 = 001500d1 - xy screen coords
|
||||
lw t5,0xc(s3); >DAT_1f8003dc r13 = 7fd3f0c0 (CLUT & tex coord page)
|
||||
|
||||
sw t7,0x4(r5) ; *r5+4 = r15
|
||||
sw t8,0x8(r5) ; *r5+8 = r24
|
||||
sw t5,0xc(r5) ; *r5+c = r13
|
||||
lw t6,0x10(s3);>DAT_1f8003e0 r14 = 000c0008 - spritesize after copy
|
||||
nop
|
||||
sw t6,0x10(r5) ; *r5+10 = r14 - LAST COMMAND SAVE
|
||||
|
||||
addiu r5,-0x4 ;SHIFT DEST ADDR MINUS
|
||||
|
||||
|
||||
clear r25 ;clearing r25 (reset current chars status)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
lw v1,0x18(t1) ;r3 = *r9+18 (next param???)
|
||||
lw v0,0x0(r5) ; r2 = *cur New Chainaddr
|
||||
lw v1,0x0(v1) ; r3 = *r3
|
||||
and v0,v0,t2 ; r2 & ff000000
|
||||
and v1,v1,s0 ;r3 & 00FFFFFF
|
||||
or v0,v0,v1 ; r2 | r3 = 04FFFFFF - commands with FFFFFF
|
||||
sw v0,0x0(r5) ; *curChainAddr r5 = r2 (upd ..04 with ..FF04)
|
||||
lw r4,0x18(t1) ; r4 = *r8+18 (first chain addr?)
|
||||
nop
|
||||
lw v0,0x0(r4) ; r2 = *r4 FIRST CHAIN LINK TO NEXT??
|
||||
and v1,r5,s0 ; r3 = r5 (cur chain) & 00FFFFFF
|
||||
and v0,v0,t2 ; r2 & FF000000
|
||||
or v0,v0,v1 ; r2 | r3 = last chain adr w 10&....
|
||||
sw v0,0x0(r4) ; *r4 = r2 FIRST CHAIN NEXT ADDR???
|
||||
sw r5,0x18(t1) ;t0->t1 ; r5 = *r8+18 curChainAddr
|
||||
|
||||
|
||||
lhu v0,0x4(t4) ;t1->t4 r2 = half (DMA params)+4 (charCounter)
|
||||
nop
|
||||
bne v0,zero,NotFirstChar ; if CharCount<>0 then Goto...
|
||||
nop
|
||||
sw r5,0x28(t1) ;t0->t1 ;*curChain+28 = currentChainAddr
|
||||
sw t8,0xc(t4) ;t1->t4 ; Params+0c = save half X STORE COORDS
|
||||
|
||||
clear v0
|
||||
sb v0,0x3c(r20) ;store first char offset for moving string (is first in new type)
|
||||
;sh v0,-0x8(t4) ;store first char offset for moving string (is first in new type)
|
||||
nop
|
||||
|
||||
;sh s2,0xe(t4) ;t1->t4 ;Params+0e = save half Y
|
||||
NotFirstChar:
|
||||
lui r5,0x1f80 ;;;;;;;;;;;;;;;;;;;;;;;ADDRESS OF CHAR HERe ---> SLL CHARNUM, 6
|
||||
|
||||
lw v0,-0x4930(s1);>8007b6d0_freeChain r2 = *nextFreeChain
|
||||
ori r5,r5,0x348 ; r5 | 1f800348 = Scratch CharData
|
||||
and r4,v0,t2 ; r4 = r2 & FF000000
|
||||
and v0,v0,s0 ; r2 & 00FFFFFF
|
||||
or r7,v0,s7 ;t4->s7 (800...) ; r7 = r2 | r12 = nextChain & 80...
|
||||
move r6,r7 ; r6 = r7 (nextChain)
|
||||
lw v0,0x4(s5) ; CmdCounter r2 = DMA Counter
|
||||
lw v1,0x0(r7) ; r3 = New Free ChainAddr / currHeader Addr
|
||||
addiu v0,v0,-0x1 ; r2 -= 1 Counter Down
|
||||
and v1,v1,s0 ; r3 & 00FFFFFF cut commandCount / currHeader
|
||||
or r4,r4,v1 ; r4 & r3 = ff......
|
||||
sw v0,0x4(s5);>DAT_8007b6d4_CmdCounter save DMA Counter
|
||||
andi v0,r7,0x3 ; r2 = r7 & 3 (check destAddr MOD 4)
|
||||
|
||||
lui t3,0x1f80
|
||||
ori t3,t3,0x388 ; Scratch DMAChain CharEndAddr
|
||||
|
||||
beq v0,zero,Copy16Bytes ; if r7 MOD 4 = 0 then Branch
|
||||
sw r4,-0x4930(s1);>8007b6d0_freeChain save new freeChain
|
||||
|
||||
;;;;;;;;;;;;;;;Copy from ScratchPad To Chain
|
||||
|
||||
CopyBy2Bytes:
|
||||
lwl t6,0x3(r5) ; if r7 mod4 <> 0 - копируем по 2 байта
|
||||
lwr t6,0x0(r5);>DAT_1f800348
|
||||
lwl t7,0x7(r5)
|
||||
lwr t7,0x4(r5);>DAT_1f80034c
|
||||
lwl t8,0xb(r5)
|
||||
lwr t8,0x8(r5);>DAT_1f800350
|
||||
lwl t5,0xf(r5)
|
||||
lwr t5,0xc(r5);>DAT_1f800354
|
||||
swl t6,0x3(r6)
|
||||
swr t6,0x0(r6)
|
||||
swl t7,0x7(r6)
|
||||
swr t7,0x4(r6)
|
||||
swl t8,0xb(r6)
|
||||
swr t8,0x8(r6)
|
||||
swl t5,0xf(r6)
|
||||
swr t5,0xc(r6)
|
||||
addiu r5,r5,0x10
|
||||
bne r5,t3,CopyBy2Bytes
|
||||
addiu r6,r6,0x10
|
||||
j last4BytesCopy
|
||||
nop
|
||||
Copy16Bytes:
|
||||
lw t6,0x0(r5);>DAT_1f800348 r5 - curScratchAddr,r6 -cur DMAAddr
|
||||
lw t7,0x4(r5)
|
||||
lw t8,0x8(r5)
|
||||
lw t5,0xc(r5)
|
||||
sw t6,0x0(r6)
|
||||
sw t7,0x4(r6)
|
||||
sw t8,0x8(r6)
|
||||
sw t5,0xc(r6)
|
||||
addiu r5,r5,0x10
|
||||
bne r5,t3,Copy16Bytes
|
||||
addiu r6,r6,0x10
|
||||
last4BytesCopy:
|
||||
lwl t6,0x3(r5) ; r14 left = 2 bytes from *r5+3
|
||||
lwr t6,0x0(r5);>DAT_1f800358 r14 right = 2 bytes from *r5
|
||||
nop
|
||||
swl t6,0x3(r6) ; *r6 = r14 left
|
||||
swr t6,0x0(r6) ; *r6+3 = r14 right
|
||||
; linking DMA char+copysprite
|
||||
|
||||
|
||||
lw v1,0x18(t1) ; r3 = current DMACopySprite Chain
|
||||
lw v0,0x0(r7) ; r2 = current CharChainCommands
|
||||
lw v1,0x0(v1) ; r3 = *r3 (comNum+FFFFFF(nextLink))
|
||||
and v0,v0,t2 ; r2 & FF.....
|
||||
and v1,v1,s0 ; r3 & 00FFFFFF
|
||||
or v0,v0,v1 ; r2 | r3 = 10FFFFFF(cmdNum&FF..)
|
||||
sw v0,0x0(r7) ; *r7 = r2 saveCurChainCmd
|
||||
lw r4,0x18(t1) ; r4 = r8+18h - cur CopySpriteCmd hdrAddr
|
||||
nop
|
||||
lw v0,0x0(r4) ; r2 = *r4 (04FFFFFF)
|
||||
and v1,r7,s0 ; r3 = r7 & 00FFFFFF (Copying Cur Char Chain)
|
||||
and v0,v0,t2 ; r2 & FF000000 (04000000) CmdCount
|
||||
or v0,v0,v1 ; R2 | R3 = 04(cmd)..+CharChainAddr
|
||||
sw v0,0x0(r4) ; *r4 = r2 = FullCommand With Link!!!
|
||||
; (04..CharAddr) + SpriteCopyCommand
|
||||
sw r7,0x18(t1) ; *r8+18 = Last Char Chain!
|
||||
addiu t1,t1,0x4 ; r8 (params) += 4 (shift params for NextPage)
|
||||
addiu v0,t4,0x8 ; r2 = r9+8 (shift first chain param for Page)
|
||||
sltu v0,t1,v0 ; r2 = r8 < r2(r9+8) (first page pass)
|
||||
bne v0,zero,PageLoop ; if r2<>0 (r8<r2) then goto Next Page Loop
|
||||
nop
|
||||
|
||||
|
||||
|
||||
OptimizedSpriteCopyEnd:
|
||||
|
||||
;;;CharCount + Check
|
||||
lhu v0,0x4(r20) ; r2 = current charDMACount
|
||||
nop
|
||||
addiu v0,v0,0x1 ; a += 1
|
||||
sh v0,0x4(r20) ;save DMAcounter to chain
|
||||
nop
|
||||
|
||||
|
||||
;DMA OVERFLOW CHECK!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (8007b6d4)
|
||||
lui t3,MyAddr
|
||||
lw v0,0x4(s5) ; CmdCounter r2 = DMA Counter
|
||||
lhu v1,-0xC(t3) ;v1 = 8008fff4 = minimum cmd counter
|
||||
nop
|
||||
sltu v0,v0,v1 ; v0 = v0 < V1 ?
|
||||
bne v0,zero,TextEnd ;if v0<>0 then Goto End Text (DMA OVERFLOW!!!!)
|
||||
nop
|
||||
|
||||
|
||||
|
||||
|
||||
;lui t3,MyAddr
|
||||
lhu v0,-0xE(t3) ; r2 = charCount In string
|
||||
lhu v1,-0x10(t3) ; r3 = My charOverAll In string
|
||||
addiu v0,v0,0x1 ; a += 1
|
||||
lbu r4,0x0(s6) ; load next Char to r4 (byte)
|
||||
|
||||
sh v0,-0xE(t3) ; store myCharCounter to MyAddr-E
|
||||
addiu s6,s6,0x1 ;Shift CharAddr
|
||||
|
||||
bne v0,v1,NextChar ; if currentChar<>OverallChar - branch
|
||||
nop
|
||||
TextEnd:
|
||||
clear r18
|
||||
lui s3,0x8008
|
||||
addiu s5,s3,-0x4930 ; r19 = 80080000, r21 = 7b6d0
|
||||
lui s1,0xff ; r17 = 00ff0000
|
||||
ori s1,s1,0xffff ; r17 & ffff = 00ff ffff
|
||||
move s0,r20 ; r16 = r20 (currentTLineParam)
|
||||
clear r5
|
||||
clear r25 ;clearing r25 (reset current chars status)
|
||||
PageTLoop: ;ALMOST FINISH!!!!
|
||||
li r6,0x1 ; r6=1
|
||||
addu r18,r18,r6 ; r18(Counter) += r6
|
||||
lui v0,0x8000 ; r2 = 80000000
|
||||
lui r4,0xff00 ; r4 = ff00 0000
|
||||
lw v1,-0x4930(s3);>8007b6d0_freeChain r3 = next free Chain (*7b6d0)
|
||||
;;;;;;;;;;;;;;;;
|
||||
lw r7,0xa4(gp);>DAT_8007b234 r7 = Texture page = 34
|
||||
beq r25,zero, lastTextPageDefaul
|
||||
nop
|
||||
li r7,0x3f ;IF MODE<>0 then TexturePage = 23F
|
||||
;;;;;;;;;;;;;;;''
|
||||
lastTextPageDefaul:
|
||||
|
||||
and v1,v1,s1 ; r3 & 00FFFFFF
|
||||
or v1,v1,v0 ; r3 | r2 = 80.....
|
||||
sw v1,0x30(s0) ; store last free ChAddr to DMAParams
|
||||
lw v0,-0x4930(s3);>8007b6d0_freeChain r2 = next free chain
|
||||
lw v1,0x0(v1) ; r3 = *r3 = last chain - made one more chain
|
||||
and v0,v0,r4 ; a2 & ff000000
|
||||
and v1,v1,s1 ; r3 & 00FFFFFF
|
||||
lw r4,0x4(s5);>DAT_8007b6d4_CmdCounter r4 = DMA Counter
|
||||
or v0,v0,v1 ; r2 | r3
|
||||
sw v0,-0x4930(s3);>8007b6d0_freeChain new free chain addr add to *7b6b0
|
||||
addiu r4,r4,-0x1 ; DMA Cunter =- 1
|
||||
sw r4,0x4(s5);>DAT_8007b6d4_CmdCounter Store DMA Count
|
||||
lw r4,0x30(s0) ; r4 = *DMA params + 30 = Start Of DMA Chain
|
||||
jal SetDrawTPage ; Set DRAW PAGE
|
||||
addiu s0,s0,0x4 ; r16 += 4 - Shgift DMAParams for next Page
|
||||
sltiu v0,r18,0x2 ; r2 = r18<2
|
||||
bne v0,zero,PageTLoop ; if not r2 then goto Loop
|
||||
clear r5 ; r5 = 0
|
||||
move v0,r20 ; r2 = DMAParamsMain
|
||||
|
||||
lw ra,0x4c(sp)
|
||||
lw s8,0x48(sp)
|
||||
lw s7,0x44(sp)
|
||||
lw s6,0x40(sp)
|
||||
lw s5,0x3c(sp) ;restoring regs from Stack
|
||||
lw s4,0x38(sp)
|
||||
lw s3,0x34(sp)
|
||||
lw s2,0x30(sp)
|
||||
lw s1,0x2c(sp)
|
||||
lw s0,0x28(sp)
|
||||
|
||||
jr ra
|
||||
addiu sp,sp,0x50
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chars / 2 Return Func
|
||||
|
||||
.include "charload.asm"
|
||||
|
||||
.include "charCalcs.asm"
|
||||
|
||||
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 0x8001a7dc
|
||||
;;;;;text patch for Text MOVING & OFFSET
|
||||
|
||||
|
||||
;make branch videocomand reading
|
||||
|
||||
|
||||
chainSpriteCheck:
|
||||
lbu v1,0x7(r5)
|
||||
li r27, 0xe1
|
||||
beq r27, v1, ShiftedCommandCheck
|
||||
nop
|
||||
j 0x8001a7e4 ;return
|
||||
nop
|
||||
|
||||
ShiftedCommandCheck:
|
||||
lbu v1,0xb(r5) ;my new shifted sprite command
|
||||
li r27, 0x64
|
||||
beq r27, v1, ShiftedCommandCheck2
|
||||
nop
|
||||
lbu v1,0x7(r5)
|
||||
nop
|
||||
j 0x8001a7e4 ;return
|
||||
nop
|
||||
|
||||
ShiftedCommandCheck2:
|
||||
lbu v1,0xb(r5)
|
||||
|
||||
goingback:
|
||||
j 0x8001a7e4 ;return
|
||||
nop
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 0x8001aa8c
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;text patch for Text MOVING & OFFSET
|
||||
getRightCoords:
|
||||
; lw r5, 0x28(t1) ;get chain addr from params
|
||||
;lhu r3, 0xc(t2) ;get X from params
|
||||
|
||||
lbu r4,0x7(r5)
|
||||
li r2,0xe1 ;if my new 5 commands?
|
||||
|
||||
bne r2,r4,oldStyleCommand
|
||||
nop
|
||||
addiu r5,4
|
||||
|
||||
oldStyleCommand:
|
||||
lhu r2, 0x8(r5) ;getting cur x (r5 is chain addr) --------!
|
||||
lhu r4, 0xe(t2) ;;getting Y from param
|
||||
subu r3,r3,r2 ; get X offset
|
||||
move r12,r3 ; Saving X offset in r12
|
||||
lhu r2, 0xa(r5) ;getting cur y from chain ----------!
|
||||
sll r3,r3,0x10 ;Shift r3 <<< 10 bits
|
||||
;add r2,r23 ;add
|
||||
subu r2,r4,r2 ;get Y offset
|
||||
|
||||
;clear r23
|
||||
returnToInnocence:
|
||||
j 0x8001aaa8 ;continue!
|
||||
nop
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 0x8001ab2c
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
movesprite:
|
||||
lbu r2,0x07(r4)
|
||||
nop
|
||||
beq r2, t7, simpleSpriteCmd ;if r2 == t7 = 64
|
||||
nop
|
||||
beq r2, t6, simpleSpriteCmd ;if r2 == t6 = 66 --simple move
|
||||
nop
|
||||
li r3, 0xe1
|
||||
beq r2, r3, IsThisMyChain ;ReallyMyChain
|
||||
nop
|
||||
j exitmovesprite
|
||||
nop
|
||||
|
||||
ReallyMyChain:
|
||||
lbu r2,0x03(r4)
|
||||
li r3, 0x05
|
||||
beq r2, r3, IsThisMyChain
|
||||
nop
|
||||
j exitmovesprite
|
||||
nop
|
||||
|
||||
IsThisMyChain:
|
||||
lbu r2,0x0b(r4)
|
||||
nop
|
||||
beq r2, t7, notSimpleSpriteCommand ;is this my E1 + 64?
|
||||
nop
|
||||
j exitmovesprite
|
||||
nop
|
||||
|
||||
notSimpleSpriteCommand:
|
||||
lbu r3,0x3c(t2) ;get offset X
|
||||
lhu r2,0x0c(r4)
|
||||
sra r3, r3, 0x4 ;shift 12 >> 4 = 1 pix (OR 0)
|
||||
addu r2,r2,t4
|
||||
addu r2,r2,r3 ;adding myMainOffset X
|
||||
sh r2,0xC(r4)
|
||||
|
||||
lbu r2,0x3c(t2) ;get offset Y
|
||||
lhu r3,0xE(r4)
|
||||
andi r2, r2, 0xF ;get Y offset
|
||||
addu r3,r3,t3
|
||||
addu r3,r3,r2 ;adding myMainOffset
|
||||
;addiu r3,r3,2
|
||||
|
||||
sh r3,0xE(r4)
|
||||
nop
|
||||
j exitmovesprite
|
||||
nop
|
||||
|
||||
simpleSpriteCmd:
|
||||
lhu r2,0x8(r4)
|
||||
lhu r3,0xA(r4)
|
||||
addu r2,r2,t4
|
||||
addu r3,r3,t3
|
||||
sh r2,0x8(r4)
|
||||
sh r3,0xA(r4)
|
||||
nop
|
||||
exitmovesprite:
|
||||
|
||||
j 0x8001ab5c ;EXIT TO MAIN routine
|
||||
|
||||
;;;;;;;;;;;;;;
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SET TEXT BRIGHTNESS
|
||||
|
||||
setTextBrightness:
|
||||
lbu r2,0x07(v1)
|
||||
nop
|
||||
beq r2, t1, simpleBright ;if r2 == t7 = 64
|
||||
nop
|
||||
beq r2, t0, simpleBright ;if r2 == t6 = 66 --simple move
|
||||
nop
|
||||
li r15, 0xe1
|
||||
beq r2, r15, ItsMyBrigth1 ;ReallyMyChain
|
||||
nop
|
||||
j exitbrightsprite
|
||||
nop
|
||||
|
||||
|
||||
ItsMyBrigth1:
|
||||
lbu r2,0x0b(v1)
|
||||
nop
|
||||
beq r2, t1, ItsMyBrigthMake ;is this my E1 + 64?
|
||||
nop
|
||||
j exitbrightsprite
|
||||
nop
|
||||
|
||||
ItsMyBrigthMake:
|
||||
sb s1,0x8(v1)
|
||||
sb s2,0x9(v1)
|
||||
sb s3,0xa(v1)
|
||||
j 0x8001ad6c
|
||||
nop
|
||||
|
||||
simpleBright:
|
||||
sb s1,0x4(v1)
|
||||
sb s2,0x5(v1)
|
||||
sb s3,0x6(v1)
|
||||
|
||||
exitbrightsprite:
|
||||
j 0x8001ad6c
|
||||
nop
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
;Patching main code
|
||||
.org 0x8001a7dc
|
||||
;lbu v1,0x7(r5) ;- ORIGINAL load current command
|
||||
j chainSpriteCheck
|
||||
nop
|
||||
|
||||
.org 0x8001aa8c
|
||||
;lhu r2, 0x8(r5) ;getting cur x (r5 is chain addr) --------!
|
||||
;lhu r4, 0xe(t2) ;;getting Y from prarm param
|
||||
j getRightCoords
|
||||
nop
|
||||
|
||||
.org 0x8001ab2c
|
||||
;lbu v0,0x07(a0)
|
||||
j movesprite ;movingsprite routine
|
||||
nop
|
||||
|
||||
|
||||
.org 0x8001ad48
|
||||
;lbu v0,0x07(a1)
|
||||
j setTextBrightness ;textbrightness routine
|
||||
nop
|
||||
.close
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;; BOSSNAMECOPY
|
||||
;.include "battle_patch.asm"
|
||||
|
||||
|
||||
|
||||
|
||||
.include "txtpatches.asm" ;misc text patches
|
||||
|
||||
; COMPILE COMMAND: ./armips -temp 123 main.asm
|
||||
470
main_before_FINAL_optimization.asm
Normal file
470
main_before_FINAL_optimization.asm
Normal file
@@ -0,0 +1,470 @@
|
||||
;
|
||||
; Persona 2 Innocent Sin (PSX) JAP / Custom Characters/Data Patch
|
||||
;
|
||||
; Author: Sergey Shemet 12/10/2021
|
||||
|
||||
.psx
|
||||
|
||||
|
||||
|
||||
.definelabel SetDrawTPage, 0x800542cc
|
||||
.definelabel storeColor, 0x8001b0c8
|
||||
.definelabel initCopyCharChain, 0x8001a070
|
||||
.definelabel makeCharPixels, 0x8001a08f ;need custom routine with custom font
|
||||
.definelabel GenerateSmallChar, 0x8001a284 ;need custom routine
|
||||
.definelabel MakeShadowSmallChar, 0x8001a20c
|
||||
.definelabel PrintBigDMAText, 0x80019300
|
||||
|
||||
.definelabel MyAddr, 0x8009
|
||||
|
||||
|
||||
.open "SLPS_021.00", 0x8000F800
|
||||
|
||||
|
||||
.include "complex_strings_copy.asm" ;Make complex strings in battles
|
||||
|
||||
|
||||
|
||||
.org 0x80090000
|
||||
ExternalPrint:
|
||||
;;;;;;;text routing test routine
|
||||
move r3,s3
|
||||
move s3,r4
|
||||
|
||||
lhu v0,0x0(s3) ;read half 2 bytes of text (r4, not s1+0c!!!!!)
|
||||
move s3,r3
|
||||
srl v1,v0,0xD ;;;;Check 13th bit (1byte system !!!)
|
||||
bne v1,zero,MyPrintLineRoutine
|
||||
clear v1
|
||||
j PrintBigDMAText
|
||||
nop
|
||||
|
||||
;;;;;;;;;;;;;;;;;MyPrintLineRoutine
|
||||
MyPrintLineRoutine:
|
||||
addiu sp,sp,-0x50
|
||||
sw s6,0x40(sp)
|
||||
move s6,r4 ;textReadAddr
|
||||
sw s1,0x2c(sp)
|
||||
move s1,r5
|
||||
sw s2,0x30(sp)
|
||||
move s2,r6
|
||||
sw s3,0x34(sp)
|
||||
|
||||
; NEW COMMAND OBRAB
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;lw v1,0x0(s6)
|
||||
;nop
|
||||
;v1/r3 - MyChars charcount
|
||||
andi v0,v0,0xff
|
||||
addiu s6,s6,0x2 ;Moving text read pointer +2bytes
|
||||
|
||||
|
||||
|
||||
lui s3,MyAddr
|
||||
sw v0,-0x10(s3) ;store bytecounter @ 8008fff0 and clean charCounter (8008fff2)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
lui s3,0x1f80
|
||||
ori s3,s3,0x3d0 ;s3 = 1f8003d0 - copysprite cmd in scratch
|
||||
lui t0,0xff
|
||||
ori t0,t0,0xffff ;t0 = 00FFFFFF
|
||||
|
||||
sw s0, 0x28(sp) ;save s0 in stack
|
||||
andi s0,r7,0xff ;s0 - cut textMode (color & shadow)
|
||||
move r4,s0 ;r4 = s0 (cutted color)
|
||||
lui r7, 0x8008 ;r7 = 8008 0000
|
||||
lui r6, 0xff00 ;r6 = FF000000
|
||||
|
||||
addiu t1,r7,-0x4930 ;t1 = 8007b6d0 - new free CHAIN Here
|
||||
lw v1, -0x4930(r7) ;r3/v1 = load freeChain
|
||||
lbu r5,0x60(sp) ;shadow flag from stack to r5
|
||||
lui v0,0x8000 ;r2 = 8000 0000
|
||||
sw ra,0x4c(sp)
|
||||
sw s8,0x48(sp)
|
||||
sw s7,0x44(sp)
|
||||
sw s5,0x3c(sp) ; push ra,r30,r23,31,r20
|
||||
sw s4,0x38(sp)
|
||||
;;init chains
|
||||
and r6,v1,r6 ;r6 = r3 & ff000000 = FF000000
|
||||
andi r5,r5,0xff ;clean text mode (color/shadow)
|
||||
and v1,v1,t0 ;r3 & 00ffffff
|
||||
or r20,v1,v0 ;r20 - 80...+r3 = freeChain Main Addr
|
||||
lw v0,0x4(t1) ;Load DMA Counter
|
||||
lw v1,0x0(r20) ;r3 = next free Chain
|
||||
addiu v0,v0,-0x1 ;DMA Counter-1
|
||||
and v1,v1,t0 ; r3 & r8 (00ffffff) cut f.byte
|
||||
or r6,r6,v1 ; r6 | r3 = ff+r3 = next free Chain (FF...) +
|
||||
sw v0,0x4(t1) ;save DMACounter
|
||||
jal storeColor
|
||||
sw r6,-0x4930(r7) ;SAVE next free Chain (FF...) to 7b6d0
|
||||
move r4,r20 ;currentChainAddr
|
||||
sll r5,s1,0x10 ;r5 = X<<10h (003A0000)
|
||||
sra r5,r5,0x10 ; r5=r5>>10h 0000003A
|
||||
sll r6,s2,0x10 ; r6 = Y << 10h
|
||||
sra r6,r6,0x10 ;r6>>10h - 100% clean coords
|
||||
jal initCopyCharChain ;init line chains
|
||||
move r7,s0 ;store textMode _THIS IS FOR INIT
|
||||
|
||||
;;;;init ScratchPad
|
||||
;;;;;;;;;;;;;;;;;; CPU TO VRAM
|
||||
lui r7,0x1f80
|
||||
ori r7,r7,0x348 ;r7 = FIRST CHAR START
|
||||
;lui r6,0x1f80 ;LOWER HALF OF CHAR - DONT NEED!!!
|
||||
;ori r6,r6,0x38c
|
||||
li v0,0x2
|
||||
sh v0,0x1c(sp)
|
||||
li v0,0xc
|
||||
|
||||
lui r4,0xa000 ;r4 = a000 0000
|
||||
sh v0,0x1e(sp) ; SAVE 000C0002 TO STACK+1c
|
||||
|
||||
|
||||
|
||||
; INIT CHAR
|
||||
li r5,0x10 ;cmd count 10 00 00 00 =>DAT_1f80034b
|
||||
sb r5,0x3(r7) ;SAVE 0d 00 00 00 =>DAT_1f80034c cmdcount\
|
||||
sw r4,0x4(r7); SAVE a000000 TO DAT_1f80034c
|
||||
lhu t0,0xa0(gp) ;0310 ;Load x(0310) to r8
|
||||
lhu v0,0xa2(gp) ;01f0 ;Load y(01F0)to r2
|
||||
lui v1,0x100 ;0100 0000 flushcache
|
||||
lui at,0x1f80 ;scrathcpadStart
|
||||
sw v1,0x388(at) ;save 0x01 00 00 00 to end of 1st CHAR chain
|
||||
setY1:
|
||||
move s8,s2 ; r18 to r30 (y) !!!!!!!!!!!!!!!!!!!
|
||||
lh r5,0xa0(gp) ;for futher sprite X calc
|
||||
sh t0,0x18(sp)
|
||||
sh v0,0x1a(sp) ;SAVE CONCAT 013001f0 to stack
|
||||
lw r4,0x18(sp) ;LOAD 013001f0 from stack
|
||||
lw v0,0x1c(sp) ; r2 = 000c0002 from stack
|
||||
sw r4,0x8(r7) ;DAT_1f800350 load r4 (upper coord 01f6) to r7+8 (DMA)
|
||||
sw v0,0xc(r7) ;=>DAT_1f800354 r2 - 000c0002 to 1st char (to r7+0c)
|
||||
|
||||
lui v0,0x8001 ;load 80010000 to r2
|
||||
|
||||
;4bit table pattern
|
||||
.include "4bitPattern.asm"
|
||||
|
||||
; Copy Sprite DMA Command Forming
|
||||
li v0,0x4
|
||||
sb v0,0x3(s3) ; 04 00 00 00 to 3d0 (sb 04 to 3d3) CHAIN LENGTH
|
||||
li v0,0x64
|
||||
sb v0,0x7(s3) ;sb 64 to 3d7 (copySpriteCommand)
|
||||
li v0,0x80
|
||||
sb v0,0x4(s3)
|
||||
sb v0,0x5(s3)
|
||||
sb v0,0x6(s3) ;make 80 80 80 64 (3d4,5,6,7)
|
||||
bgez r5,LAB_800194fc
|
||||
SetX1:
|
||||
sh s1,0x20(sp) ;store X half to sp+10 !!!!!!!!!!!!!!!!!
|
||||
addiu t0,r5,0x3f
|
||||
LAB_800194fc: ;decoding coords for source sprite
|
||||
sra v0,t0,0x6 ;r2 = r6 >> 6 = 4
|
||||
sll v0,v0,0x6 ;r2 << 6 = 100
|
||||
subu v0,r5,v0 ;r2 = r6 - r2 = 30
|
||||
lh v1,0xa2(gp) ;r3 = load Y half from mem
|
||||
sll v0,v0,0x2 ;r2 << 2
|
||||
sb v0,0xc(s3) ; >DAT_1f8003dc ;STORE CHAR SPRITE X BYTE
|
||||
bgez v1,LAB_80019520 ;if Y r3>=0 - branch & r2=r3
|
||||
move v0,v1
|
||||
addiu v0,v1,0xff ;else r2 = ff - r3
|
||||
LAB_80019520:
|
||||
sra v0,v0,0x8
|
||||
sll v0,v0,0x8
|
||||
subu v0,v1,v0
|
||||
sb v0,0xd(s3) ; >DAT_1f8003dd ;STORE CHAR SPRITE Y BYTE
|
||||
lhu v1,0xa8(gp)
|
||||
;DIFF BETWEEN VERSs::::::::::::::::::::::
|
||||
li v0,0x8 ; r2 = 8 Sprite WIDTH
|
||||
sh v0,0x10(s3) ; 3e0 - 0008 save
|
||||
sh v1,0xe(s3);=>DAT_1f8003de ; *3de = r3 = 7df3
|
||||
li v0,0xc ; r2 = c Sprite HEIGTH
|
||||
sh v0,0x12(s3) ; 3e2 - 000c save
|
||||
|
||||
;TEXT READ START
|
||||
lbu r4,0x0(s6) ;MAIN READ CHAR COMMAND - Load Byte Unsigned
|
||||
nop
|
||||
addiu s6,s6,0x1 ;Shift read address +1 byte
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;CHAR CHECK CUTTED!
|
||||
lui s1,0x8008 ;load 80080000 to r17
|
||||
addiu s5,s1,-0x4930 ;r21 = r17-4930= 7b6d0 (tempDMA)
|
||||
lui s0,0xff
|
||||
ori s0,s0,0xffff ;s0 = 00 ff ff ff
|
||||
lui s7,0x8000 ;r3 = 8000 0000
|
||||
NextChar:
|
||||
addiu r4,r4,-0x20 ;Shift unprintable symbols
|
||||
|
||||
|
||||
;ОБРАБОТКА ПРОБЕЛОВ
|
||||
|
||||
bne r4,zero,SpaceCheckBranch ;Если не пробел - перепрыгиваем сразу
|
||||
nop
|
||||
|
||||
lui t2,MyAddr
|
||||
lh v0,-0xE(t2) ;Load my temp CHAR COUNTER for check
|
||||
nop
|
||||
lh t3,-0x10(t2)
|
||||
addiu v0,v0,1 ;overall chars+1
|
||||
beq v0,t3,SpaceCheckBranch ;is last char - пробел не проверяем!
|
||||
nop
|
||||
|
||||
sh v0,-0xE(t2) ;Save charcount += 1
|
||||
lbu r4,0x0(s6) ;LOAD NEXT CHAR
|
||||
nop
|
||||
j NextChar
|
||||
addiu s6,s6,0x1 ;Shift read address +1 byte
|
||||
|
||||
|
||||
SpaceCheckBranch:
|
||||
|
||||
jal makeCharPixelsCustom ;MAKE SMALL CHAR IN SCRATCH ___ CUSTOM ROUTINE
|
||||
clear r18
|
||||
|
||||
; Coords XY init
|
||||
lw v0,0xb0(gp); =>DAT_8007b240_parms load r2 from r28+0b0 (7b240)(Xoffs)
|
||||
lui t2,MyAddr
|
||||
lh v1,-0xE(t2) ;Load my temp CHAR COUNTER for check
|
||||
; lhu v1,0x4(r20) ; current char = r3 = half *DMAAddr + 4
|
||||
addiu v0,v0,0x6 ; 0x06 * 6px btw letters!
|
||||
|
||||
|
||||
mult v1,v0 ; r3*r2 = xOffs*charNum
|
||||
|
||||
|
||||
|
||||
lui t2,0xff00 ; r10 = ld upper ff00 = ff000000
|
||||
move t4,r20 ; r12 = r20 (params)
|
||||
addiu t3,sp,0x10 ; r11 = sp + 10 = 807ffe50
|
||||
move t1,r20 ; r12 = r20 (params again)
|
||||
GetY:
|
||||
sh s8,0xa(s3) ; DAT_1f8003da *r19(1st scr DMA)+0a = r30 (Y??) !!!!!!!!!!!!!!!!
|
||||
GetX:
|
||||
lhu t5,0x20(sp) ; r13 = ld half (sp+20) = 003A ---X from sp+20 !!
|
||||
mflo t6 ; r14 = lo
|
||||
addu v0,t5,t6 ; r2 = r13 + r14 = X + Offset
|
||||
sh v0,0x8(s3) ;DAT_1f8003d8 save r2 half to 1f8003d8 = X (3A) !!!!!!!!!!!!!!!!
|
||||
PageLoop:
|
||||
;MAKING COPYSPRITE CHAIN
|
||||
lw v0,-0x4930(s1); r2 = *freeChainAddr
|
||||
nop
|
||||
and r4,v0,t2 ; r4 = r2 & ff00..
|
||||
and v0,v0,s0 ; r2 & 00FFFFFF
|
||||
or r5,v0,s7 ; r5 = r2 or r23 (80000000) = 801ADF10
|
||||
lw v0,0x4(s5) ; CmdCounter r2 = *7b6d0+4 = 705
|
||||
lw v1,0x0(r5) ; r3 = New Free ChainAddr
|
||||
addiu v0,v0,-0x1 ; r2 -= 1 Counter Down
|
||||
and v1,v1,s0 ; r3 & 00FFFFFF cut begin byte
|
||||
or r4,r4,v1 ; r4 & r3 = ff......
|
||||
sw v0,0x4(s5) ; CmdCounter save DMA Counter
|
||||
sw r4,-0x4930(s1); freeChain save new freeChain
|
||||
CopyCmdFromScratch:
|
||||
; CopyScriptChain copy from scratch
|
||||
lw t6,0x0(s3) ;>DAT_1f8003d0 r14 = 04000000 - DMA Commands Count
|
||||
lw t7,0x4(s3) ;>DAT_1f8003d4 r15 = 64808080 - CopySpriteCmd
|
||||
lw t8,0x8(s3) ;>DAT_1f8003d8 r24 = 001500d1 - xy screen coords
|
||||
lw t5,0xc(s3); >DAT_1f8003dc r13 = 7fd3f0c0 (CLUT & tex coord page)
|
||||
sw t6,0x0(r5) ; *r5 = r14
|
||||
sw t7,0x4(r5) ; *r5+4 = r15
|
||||
sw t8,0x8(r5) ; *r5+8 = r24
|
||||
sw t5,0xc(r5) ; *r5+c = r13
|
||||
lw t6,0x10(s3);>DAT_1f8003e0 r14 = 000c0008 - spritesize after copy
|
||||
nop
|
||||
sw t6,0x10(r5) ; *r5+10 = r14 - LAST COMMAND SAVE
|
||||
; t1 = t0 (small) !!!!
|
||||
; t4 = t1 (small) !!!!
|
||||
lw v1,0x18(t1) ;r3 = *r9+18 (next param???)
|
||||
lw v0,0x0(r5) ; r2 = *cur New Chainaddr
|
||||
lw v1,0x0(v1) ; r3 = *r3
|
||||
and v0,v0,t2 ; r2 & ff000000
|
||||
and v1,v1,s0 ;r3 & 00FFFFFF
|
||||
or v0,v0,v1 ; r2 | r3 = 04FFFFFF - commands with FFFFFF
|
||||
sw v0,0x0(r5) ; *curChainAddr r5 = r2 (upd ..04 with ..FF04)
|
||||
lw r4,0x18(t1) ; r4 = *r8+18 (first chain addr?)
|
||||
nop
|
||||
lw v0,0x0(r4) ; r2 = *r4 FIRST CHAIN LINK TO NEXT??
|
||||
and v1,r5,s0 ; r3 = r5 (cur chain) & 00FFFFFF
|
||||
and v0,v0,t2 ; r2 & FF000000
|
||||
or v0,v0,v1 ; r2 | r3 = last chain adr w 10&....
|
||||
sw v0,0x0(r4) ; *r4 = r2 FIRST CHAIN NEXT ADDR???
|
||||
sw r5,0x18(t1) ;t0->t1 ; r5 = *r8+18 curChainAddr
|
||||
lhu v0,0x4(t4) ;t1->t4 r2 = half (DMA params)+4 (charCounter)
|
||||
nop
|
||||
bne v0,zero,NotFirstChar ; if CharCount<>0 then Goto...
|
||||
nop
|
||||
sw r5,0x28(t1) ;t0->t1 ;*curChain+28 = currentChainAddr
|
||||
sw t8,0xc(t4) ;t1->t4 ; Params+0c = save half X STORE COORDS
|
||||
;sh s2,0xe(t4) ;t1->t4 ;Params+0e = save half Y
|
||||
NotFirstChar:
|
||||
lui r5,0x1f80 ;;;;;;;;;;;;;;;;;;;;;;;ADDRESS OF CHAR HERe ---> SLL CHARNUM, 6
|
||||
|
||||
lw v0,-0x4930(s1);>8007b6d0_freeChain r2 = *nextFreeChain
|
||||
ori r5,r5,0x348 ; r5 | 1f800348 = Scratch CharData
|
||||
and r4,v0,t2 ; r4 = r2 & FF000000
|
||||
and v0,v0,s0 ; r2 & 00FFFFFF
|
||||
or r7,v0,s7 ;t4->s7 (800...) ; r7 = r2 | r12 = nextChain & 80...
|
||||
move r6,r7 ; r6 = r7 (nextChain)
|
||||
lw v0,0x4(s5) ; CmdCounter r2 = DMA Counter
|
||||
lw v1,0x0(r7) ; r3 = New Free ChainAddr / currHeader Addr
|
||||
addiu v0,v0,-0x1 ; r2 -= 1 Counter Down
|
||||
and v1,v1,s0 ; r3 & 00FFFFFF cut commandCount / currHeader
|
||||
or r4,r4,v1 ; r4 & r3 = ff......
|
||||
sw v0,0x4(s5);>DAT_8007b6d4_CmdCounter save DMA Counter
|
||||
andi v0,r7,0x3 ; r2 = r7 & 3 (check destAddr MOD 4)
|
||||
|
||||
lui t3,0x1f80
|
||||
ori t3,t3,0x388 ; Scratch DMAChain CharEndAddr
|
||||
|
||||
beq v0,zero,Copy16Bytes ; if r7 MOD 4 = 0 then Branch
|
||||
sw r4,-0x4930(s1);>8007b6d0_freeChain save new freeChain
|
||||
|
||||
;;;;;;;;;;;;;;;Copy from ScratchPad To Chain
|
||||
|
||||
CopyBy2Bytes:
|
||||
lwl t6,0x3(r5) ; if r7 mod4 <> 0 - копируем по 2 байта
|
||||
lwr t6,0x0(r5);>DAT_1f800348
|
||||
lwl t7,0x7(r5)
|
||||
lwr t7,0x4(r5);>DAT_1f80034c
|
||||
lwl t8,0xb(r5)
|
||||
lwr t8,0x8(r5);>DAT_1f800350
|
||||
lwl t5,0xf(r5)
|
||||
lwr t5,0xc(r5);>DAT_1f800354
|
||||
swl t6,0x3(r6)
|
||||
swr t6,0x0(r6)
|
||||
swl t7,0x7(r6)
|
||||
swr t7,0x4(r6)
|
||||
swl t8,0xb(r6)
|
||||
swr t8,0x8(r6)
|
||||
swl t5,0xf(r6)
|
||||
swr t5,0xc(r6)
|
||||
addiu r5,r5,0x10
|
||||
bne r5,t3,CopyBy2Bytes
|
||||
addiu r6,r6,0x10
|
||||
j last4BytesCopy
|
||||
nop
|
||||
Copy16Bytes:
|
||||
lw t6,0x0(r5);>DAT_1f800348 r5 - curScratchAddr,r6 -cur DMAAddr
|
||||
lw t7,0x4(r5)
|
||||
lw t8,0x8(r5)
|
||||
lw t5,0xc(r5)
|
||||
sw t6,0x0(r6)
|
||||
sw t7,0x4(r6)
|
||||
sw t8,0x8(r6)
|
||||
sw t5,0xc(r6)
|
||||
addiu r5,r5,0x10
|
||||
bne r5,t3,Copy16Bytes
|
||||
addiu r6,r6,0x10
|
||||
last4BytesCopy:
|
||||
lwl t6,0x3(r5) ; r14 left = 2 bytes from *r5+3
|
||||
lwr t6,0x0(r5);>DAT_1f800358 r14 right = 2 bytes from *r5
|
||||
nop
|
||||
swl t6,0x3(r6) ; *r6 = r14 left
|
||||
swr t6,0x0(r6) ; *r6+3 = r14 right
|
||||
; linking DMA char+copysprite
|
||||
|
||||
; t1 = t0 (small) !!!!
|
||||
; t4 = t1 (small) !!!!
|
||||
lw v1,0x18(t1) ; r3 = current DMACopySprite Chain
|
||||
lw v0,0x0(r7) ; r2 = current CharChainCommands
|
||||
lw v1,0x0(v1) ; r3 = *r3 (comNum+FFFFFF(nextLink))
|
||||
and v0,v0,t2 ; r2 & FF.....
|
||||
and v1,v1,s0 ; r3 & 00FFFFFF
|
||||
or v0,v0,v1 ; r2 | r3 = 10FFFFFF(cmdNum&FF..)
|
||||
sw v0,0x0(r7) ; *r7 = r2 saveCurChainCmd
|
||||
lw r4,0x18(t1) ; r4 = r8+18h - cur CopySpriteCmd hdrAddr
|
||||
nop
|
||||
lw v0,0x0(r4) ; r2 = *r4 (04FFFFFF)
|
||||
and v1,r7,s0 ; r3 = r7 & 00FFFFFF (Copying Cur Char Chain)
|
||||
and v0,v0,t2 ; r2 & FF000000 (04000000) CmdCount
|
||||
or v0,v0,v1 ; R2 | R3 = 04(cmd)..+CharChainAddr
|
||||
sw v0,0x0(r4) ; *r4 = r2 = FullCommand With Link!!!
|
||||
; (04..CharAddr) + SpriteCopyCommand
|
||||
sw r7,0x18(t1) ; *r8+18 = Last Char Chain!
|
||||
addiu t1,t1,0x4 ; r8 (params) += 4 (shift params for NextPage)
|
||||
addiu v0,t4,0x8 ; r2 = r9+8 (shift first chain param for Page)
|
||||
sltu v0,t1,v0 ; r2 = r8 < r2(r9+8) (first page pass)
|
||||
bne v0,zero,PageLoop ; if r2<>0 (r8<r2) then goto Next Page Loop
|
||||
nop
|
||||
|
||||
;;;CharCount + Check
|
||||
lhu v0,0x4(r20) ; r2 = current charDMACount
|
||||
nop
|
||||
addiu v0,v0,0x1 ; a += 1
|
||||
sh v0,0x4(r20) ;save DMAcounter to chain
|
||||
|
||||
;DMA NEED CHECK HERE (8007b6d4)
|
||||
nop
|
||||
lui t3,MyAddr
|
||||
lhu v0,-0xE(t3) ; r2 = charCount In string
|
||||
lhu v1,-0x10(t3) ; r3 = My charOverAll In string
|
||||
addiu v0,v0,0x1 ; a += 1
|
||||
lbu r4,0x0(s6) ; load next Char to r4 (byte)
|
||||
|
||||
sh v0,-0xE(t3) ; store myCharCounter to MyAddr-E
|
||||
addiu s6,s6,0x1 ;Shift CharAddr
|
||||
|
||||
bne v0,v1,NextChar ; if currentChar<>OverallChar - branch
|
||||
nop
|
||||
TextEnd:
|
||||
clear r18
|
||||
lui s3,0x8008
|
||||
addiu s5,s3,-0x4930 ; r19 = 80080000, r21 = 7b6d0
|
||||
lui s1,0xff ; r17 = 00ff0000
|
||||
ori s1,s1,0xffff ; r17 & ffff = 00ff ffff
|
||||
move s0,r20 ; r16 = r20 (currentTLineParam)
|
||||
clear r5
|
||||
PageTLoop: ;ALMOST FINISH!!!!
|
||||
li r6,0x1 ; r6=1
|
||||
addu r18,r18,r6 ; r18(Counter) += r6
|
||||
lui v0,0x8000 ; r2 = 80000000
|
||||
lui r4,0xff00 ; r4 = ff00 0000
|
||||
lw v1,-0x4930(s3);>8007b6d0_freeChain r3 = next free Chain (*7b6d0)
|
||||
lw r7,0xa4(gp);>DAT_8007b234 r7 = someParam(почти DMA)gp+a4 = 34
|
||||
and v1,v1,s1 ; r3 & 00FFFFFF
|
||||
or v1,v1,v0 ; r3 | r2 = 80.....
|
||||
sw v1,0x30(s0) ; store last free ChAddr to DMAParams
|
||||
lw v0,-0x4930(s3);>8007b6d0_freeChain r2 = next free chain
|
||||
lw v1,0x0(v1) ; r3 = *r3 = last chain - made one more chain
|
||||
and v0,v0,r4 ; a2 & ff000000
|
||||
and v1,v1,s1 ; r3 & 00FFFFFF
|
||||
lw r4,0x4(s5);>DAT_8007b6d4_CmdCounter r4 = DMA Counter
|
||||
or v0,v0,v1 ; r2 | r3
|
||||
sw v0,-0x4930(s3);>8007b6d0_freeChain new free chain addr add to *7b6b0
|
||||
addiu r4,r4,-0x1 ; DMA Cunter =- 1
|
||||
sw r4,0x4(s5);>DAT_8007b6d4_CmdCounter Store DMA Count
|
||||
lw r4,0x30(s0) ; r4 = *DMA params + 30 = Start Of DMA Chain
|
||||
jal SetDrawTPage ; Set DRAW PAGE
|
||||
addiu s0,s0,0x4 ; r16 += 4 - Shgift DMAParams for next Page
|
||||
sltiu v0,r18,0x2 ; r2 = r18<2
|
||||
bne v0,zero,PageTLoop ; if not r2 then goto Loop
|
||||
clear r5 ; r5 = 0
|
||||
move v0,r20 ; r2 = DMAParamsMain
|
||||
|
||||
lw ra,0x4c(sp)
|
||||
lw s8,0x48(sp)
|
||||
lw s7,0x44(sp)
|
||||
lw s6,0x40(sp)
|
||||
lw s5,0x3c(sp) ;restoring regs from Stack
|
||||
lw s4,0x38(sp)
|
||||
lw s3,0x34(sp)
|
||||
lw s2,0x30(sp)
|
||||
lw s1,0x2c(sp)
|
||||
lw s0,0x28(sp)
|
||||
|
||||
jr ra
|
||||
addiu sp,sp,0x50
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chars / 2 Return Func
|
||||
|
||||
.include "charload.asm"
|
||||
|
||||
.include "charCalcs.asm"
|
||||
|
||||
|
||||
.close
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;; BOSSNAMECOPY
|
||||
.include "battle_patch.asm"
|
||||
|
||||
|
||||
|
||||
|
||||
.include "txtpatches.asm" ;misc text patches
|
||||
482
main_before_copysprite_optimize.asm
Normal file
482
main_before_copysprite_optimize.asm
Normal file
@@ -0,0 +1,482 @@
|
||||
;
|
||||
; Persona 2 Innocent Sin (PSX) JAP / Custom Characters/Data Patch
|
||||
;
|
||||
; Author: Sergey Shemet 12/10/2021
|
||||
|
||||
.psx
|
||||
|
||||
|
||||
|
||||
.definelabel SetDrawTPage, 0x800542cc
|
||||
.definelabel storeColor, 0x8001b0c8
|
||||
.definelabel initCopyCharChain, 0x8001a070
|
||||
.definelabel makeCharPixels, 0x8001a08f ;need custom routine with custom font
|
||||
.definelabel GenerateSmallChar, 0x8001a284 ;need custom routine
|
||||
.definelabel MakeShadowSmallChar, 0x8001a20c
|
||||
.definelabel PrintBigDMAText, 0x80019300
|
||||
|
||||
.definelabel MyAddr, 0x8009
|
||||
|
||||
|
||||
.open "SLPS_021.00", 0x8000F800
|
||||
|
||||
|
||||
.include "complex_strings_copy.asm" ;Make complex strings in battles
|
||||
|
||||
;;neeeeed to init 8008fff6 = min dma commands
|
||||
|
||||
.org 0x80090000
|
||||
ExternalPrint:
|
||||
;;;;;;;text routing test routine
|
||||
move r3,s3
|
||||
move s3,r4
|
||||
|
||||
lhu v0,0x0(s3) ;read half 2 bytes of text (r4, not s1+0c!!!!!)
|
||||
move s3,r3
|
||||
srl v1,v0,0xD ;;;;Check 13th bit (1byte system !!!)
|
||||
bne v1,zero,MyPrintLineRoutine
|
||||
clear v1
|
||||
j PrintBigDMAText
|
||||
nop
|
||||
|
||||
;;;;;;;;;;;;;;;;;MyPrintLineRoutine
|
||||
MyPrintLineRoutine:
|
||||
addiu sp,sp,-0x50
|
||||
sw s6,0x40(sp)
|
||||
move s6,r4 ;textReadAddr
|
||||
sw s1,0x2c(sp)
|
||||
move s1,r5
|
||||
sw s2,0x30(sp)
|
||||
move s2,r6
|
||||
sw s3,0x34(sp)
|
||||
|
||||
; NEW COMMAND OBRAB
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;lw v1,0x0(s6)
|
||||
;nop
|
||||
;v1/r3 - MyChars charcount
|
||||
andi v0,v0,0xff
|
||||
addiu s6,s6,0x2 ;Moving text read pointer +2bytes
|
||||
|
||||
|
||||
|
||||
lui s3,MyAddr
|
||||
sw v0,-0x10(s3) ;store bytecounter @ 8008fff0 and clean charCounter (8008fff2)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
lui s3,0x1f80
|
||||
ori s3,s3,0x3d0 ;s3 = 1f8003d0 - copysprite cmd in scratch
|
||||
lui t0,0xff
|
||||
ori t0,t0,0xffff ;t0 = 00FFFFFF
|
||||
|
||||
sw s0, 0x28(sp) ;save s0 in stack
|
||||
andi s0,r7,0xff ;s0 - cut textMode (color & shadow)
|
||||
move r4,s0 ;r4 = s0 (cutted color)
|
||||
lui r7, 0x8008 ;r7 = 8008 0000
|
||||
lui r6, 0xff00 ;r6 = FF000000
|
||||
|
||||
addiu t1,r7,-0x4930 ;t1 = 8007b6d0 - new free CHAIN Here
|
||||
lw v1, -0x4930(r7) ;r3/v1 = load freeChain
|
||||
lbu r5,0x60(sp) ;shadow flag from stack to r5
|
||||
lui v0,0x8000 ;r2 = 8000 0000
|
||||
sw ra,0x4c(sp)
|
||||
sw s8,0x48(sp)
|
||||
sw s7,0x44(sp)
|
||||
sw s5,0x3c(sp) ; push ra,r30,r23,31,r20
|
||||
sw s4,0x38(sp)
|
||||
;;init chains
|
||||
and r6,v1,r6 ;r6 = r3 & ff000000 = FF000000
|
||||
andi r5,r5,0xff ;clean text mode (color/shadow)
|
||||
and v1,v1,t0 ;r3 & 00ffffff
|
||||
or r20,v1,v0 ;r20 - 80...+r3 = freeChain Main Addr
|
||||
lw v0,0x4(t1) ;Load DMA Counter
|
||||
lw v1,0x0(r20) ;r3 = next free Chain
|
||||
addiu v0,v0,-0x1 ;DMA Counter-1
|
||||
and v1,v1,t0 ; r3 & r8 (00ffffff) cut f.byte
|
||||
or r6,r6,v1 ; r6 | r3 = ff+r3 = next free Chain (FF...) +
|
||||
sw v0,0x4(t1) ;save DMACounter
|
||||
jal storeColor
|
||||
sw r6,-0x4930(r7) ;SAVE next free Chain (FF...) to 7b6d0
|
||||
move r4,r20 ;currentChainAddr
|
||||
sll r5,s1,0x10 ;r5 = X<<10h (003A0000)
|
||||
sra r5,r5,0x10 ; r5=r5>>10h 0000003A
|
||||
sll r6,s2,0x10 ; r6 = Y << 10h
|
||||
sra r6,r6,0x10 ;r6>>10h - 100% clean coords
|
||||
jal initCopyCharChain ;init line chains
|
||||
move r7,s0 ;store textMode _THIS IS FOR INIT
|
||||
|
||||
;;;;init ScratchPad
|
||||
;;;;;;;;;;;;;;;;;; CPU TO VRAM
|
||||
lui r7,0x1f80
|
||||
ori r7,r7,0x348 ;r7 = FIRST CHAR START
|
||||
;lui r6,0x1f80 ;LOWER HALF OF CHAR - DONT NEED!!!
|
||||
;ori r6,r6,0x38c
|
||||
li v0,0x2
|
||||
sh v0,0x1c(sp)
|
||||
li v0,0xc
|
||||
|
||||
lui r4,0xa000 ;r4 = a000 0000
|
||||
sh v0,0x1e(sp) ; SAVE 000C0002 TO STACK+1c
|
||||
|
||||
|
||||
|
||||
; INIT CHAR
|
||||
li r5,0x10 ;cmd count 10 00 00 00 =>DAT_1f80034b
|
||||
sb r5,0x3(r7) ;SAVE 0d 00 00 00 =>DAT_1f80034c cmdcount\
|
||||
sw r4,0x4(r7); SAVE a000000 TO DAT_1f80034c
|
||||
lhu t0,0xa0(gp) ;0310 ;Load x(0310) to r8
|
||||
lhu v0,0xa2(gp) ;01f0 ;Load y(01F0)to r2
|
||||
lui v1,0x100 ;0100 0000 flushcache
|
||||
lui at,0x1f80 ;scrathcpadStart
|
||||
sw v1,0x388(at) ;save 0x01 00 00 00 to end of 1st CHAR chain
|
||||
setY1:
|
||||
move s8,s2 ; r18 to r30 (y) !!!!!!!!!!!!!!!!!!!
|
||||
lh r5,0xa0(gp) ;for futher sprite X calc
|
||||
sh t0,0x18(sp)
|
||||
sh v0,0x1a(sp) ;SAVE CONCAT 013001f0 to stack
|
||||
lw r4,0x18(sp) ;LOAD 013001f0 from stack
|
||||
lw v0,0x1c(sp) ; r2 = 000c0002 from stack
|
||||
sw r4,0x8(r7) ;DAT_1f800350 load r4 (upper coord 01f6) to r7+8 (DMA)
|
||||
sw v0,0xc(r7) ;=>DAT_1f800354 r2 - 000c0002 to 1st char (to r7+0c)
|
||||
|
||||
lui v0,0x8001 ;load 80010000 to r2
|
||||
|
||||
;4bit table pattern
|
||||
.include "4bitPattern.asm"
|
||||
|
||||
; Copy Sprite DMA Command Forming
|
||||
li v0,0x4
|
||||
sb v0,0x3(s3) ; 04 00 00 00 to 3d0 (sb 04 to 3d3) CHAIN LENGTH
|
||||
li v0,0x64
|
||||
sb v0,0x7(s3) ;sb 64 to 3d7 (copySpriteCommand)
|
||||
li v0,0x80
|
||||
sb v0,0x4(s3)
|
||||
sb v0,0x5(s3)
|
||||
sb v0,0x6(s3) ;make 80 80 80 64 (3d4,5,6,7)
|
||||
bgez r5,LAB_800194fc
|
||||
SetX1:
|
||||
sh s1,0x20(sp) ;store X half to sp+10 !!!!!!!!!!!!!!!!!
|
||||
addiu t0,r5,0x3f
|
||||
LAB_800194fc: ;decoding coords for source sprite
|
||||
sra v0,t0,0x6 ;r2 = r6 >> 6 = 4
|
||||
sll v0,v0,0x6 ;r2 << 6 = 100
|
||||
subu v0,r5,v0 ;r2 = r6 - r2 = 30
|
||||
lh v1,0xa2(gp) ;r3 = load Y half from mem
|
||||
sll v0,v0,0x2 ;r2 << 2
|
||||
sb v0,0xc(s3) ; >DAT_1f8003dc ;STORE CHAR SPRITE X BYTE
|
||||
bgez v1,LAB_80019520 ;if Y r3>=0 - branch & r2=r3
|
||||
move v0,v1
|
||||
addiu v0,v1,0xff ;else r2 = ff - r3
|
||||
LAB_80019520:
|
||||
sra v0,v0,0x8
|
||||
sll v0,v0,0x8
|
||||
subu v0,v1,v0
|
||||
sb v0,0xd(s3) ; >DAT_1f8003dd ;STORE CHAR SPRITE Y BYTE
|
||||
lhu v1,0xa8(gp)
|
||||
;DIFF BETWEEN VERSs::::::::::::::::::::::
|
||||
li v0,0x8 ; r2 = 8 Sprite WIDTH
|
||||
sh v0,0x10(s3) ; 3e0 - 0008 save
|
||||
sh v1,0xe(s3);=>DAT_1f8003de ; *3de = r3 = 7df3
|
||||
li v0,0xc ; r2 = c Sprite HEIGTH
|
||||
sh v0,0x12(s3) ; 3e2 - 000c save
|
||||
|
||||
;TEXT READ START
|
||||
lbu r4,0x0(s6) ;MAIN READ CHAR COMMAND - Load Byte Unsigned
|
||||
nop
|
||||
addiu s6,s6,0x1 ;Shift read address +1 byte
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;CHAR CHECK CUTTED!
|
||||
lui s1,0x8008 ;load 80080000 to r17
|
||||
addiu s5,s1,-0x4930 ;r21 = r17-4930= 7b6d0 (tempDMA)
|
||||
lui s0,0xff
|
||||
ori s0,s0,0xffff ;s0 = 00 ff ff ff
|
||||
lui s7,0x8000 ;r3 = 8000 0000
|
||||
NextChar:
|
||||
addiu r4,r4,-0x20 ;Shift unprintable symbols
|
||||
|
||||
|
||||
;ОБРАБОТКА ПРОБЕЛОВ
|
||||
|
||||
bne r4,zero,SpaceCheckBranch ;Если не пробел - перепрыгиваем сразу
|
||||
nop
|
||||
|
||||
lui t2,MyAddr
|
||||
lh v0,-0xE(t2) ;Load my temp CHAR COUNTER for check
|
||||
nop
|
||||
lh t3,-0x10(t2)
|
||||
addiu v0,v0,1 ;overall chars+1
|
||||
beq v0,t3,SpaceCheckBranch ;is last char - пробел не проверяем!
|
||||
nop
|
||||
|
||||
sh v0,-0xE(t2) ;Save charcount += 1
|
||||
lbu r4,0x0(s6) ;LOAD NEXT CHAR
|
||||
nop
|
||||
j NextChar
|
||||
addiu s6,s6,0x1 ;Shift read address +1 byte
|
||||
|
||||
|
||||
SpaceCheckBranch:
|
||||
|
||||
jal makeCharPixelsCustom ;MAKE SMALL CHAR IN SCRATCH ___ CUSTOM ROUTINE
|
||||
clear r18
|
||||
|
||||
; Coords XY init
|
||||
lw v0,0xb0(gp); =>DAT_8007b240_parms load r2 from r28+0b0 (7b240)(Xoffs)
|
||||
lui t2,MyAddr
|
||||
lh v1,-0xE(t2) ;Load my temp CHAR COUNTER for check
|
||||
; lhu v1,0x4(r20) ; current char = r3 = half *DMAAddr + 4
|
||||
addiu v0,v0,0x6 ; 0x06 * 6px btw letters!
|
||||
|
||||
|
||||
mult v1,v0 ; r3*r2 = xOffs*charNum
|
||||
|
||||
|
||||
|
||||
lui t2,0xff00 ; r10 = ld upper ff00 = ff000000
|
||||
move t4,r20 ; r12 = r20 (params)
|
||||
addiu t3,sp,0x10 ; r11 = sp + 10 = 807ffe50
|
||||
move t1,r20 ; r12 = r20 (params again)
|
||||
GetY:
|
||||
sh s8,0xa(s3) ; DAT_1f8003da *r19(1st scr DMA)+0a = r30 (Y??) !!!!!!!!!!!!!!!!
|
||||
GetX:
|
||||
lhu t5,0x20(sp) ; r13 = ld half (sp+20) = 003A ---X from sp+20 !!
|
||||
mflo t6 ; r14 = lo
|
||||
addu v0,t5,t6 ; r2 = r13 + r14 = X + Offset
|
||||
sh v0,0x8(s3) ;DAT_1f8003d8 save r2 half to 1f8003d8 = X (3A) !!!!!!!!!!!!!!!!
|
||||
PageLoop:
|
||||
;MAKING COPYSPRITE CHAIN
|
||||
lw v0,-0x4930(s1); r2 = *freeChainAddr
|
||||
nop
|
||||
and r4,v0,t2 ; r4 = r2 & ff00..
|
||||
and v0,v0,s0 ; r2 & 00FFFFFF
|
||||
or r5,v0,s7 ; r5 = r2 or r23 (80000000) = 801ADF10
|
||||
lw v0,0x4(s5) ; CmdCounter r2 = *7b6d0+4 = 705
|
||||
lw v1,0x0(r5) ; r3 = New Free ChainAddr
|
||||
addiu v0,v0,-0x1 ; r2 -= 1 Counter Down
|
||||
and v1,v1,s0 ; r3 & 00FFFFFF cut begin byte
|
||||
or r4,r4,v1 ; r4 & r3 = ff......
|
||||
sw v0,0x4(s5) ; CmdCounter save DMA Counter
|
||||
sw r4,-0x4930(s1); freeChain save new freeChain
|
||||
CopyCmdFromScratch:
|
||||
; CopyScriptChain copy from scratch
|
||||
lw t6,0x0(s3) ;>DAT_1f8003d0 r14 = 04000000 - DMA Commands Count
|
||||
lw t7,0x4(s3) ;>DAT_1f8003d4 r15 = 64808080 - CopySpriteCmd
|
||||
lw t8,0x8(s3) ;>DAT_1f8003d8 r24 = 001500d1 - xy screen coords
|
||||
lw t5,0xc(s3); >DAT_1f8003dc r13 = 7fd3f0c0 (CLUT & tex coord page)
|
||||
sw t6,0x0(r5) ; *r5 = r14
|
||||
sw t7,0x4(r5) ; *r5+4 = r15
|
||||
sw t8,0x8(r5) ; *r5+8 = r24
|
||||
sw t5,0xc(r5) ; *r5+c = r13
|
||||
lw t6,0x10(s3);>DAT_1f8003e0 r14 = 000c0008 - spritesize after copy
|
||||
nop
|
||||
sw t6,0x10(r5) ; *r5+10 = r14 - LAST COMMAND SAVE
|
||||
; t1 = t0 (small) !!!!
|
||||
; t4 = t1 (small) !!!!
|
||||
lw v1,0x18(t1) ;r3 = *r9+18 (next param???)
|
||||
lw v0,0x0(r5) ; r2 = *cur New Chainaddr
|
||||
lw v1,0x0(v1) ; r3 = *r3
|
||||
and v0,v0,t2 ; r2 & ff000000
|
||||
and v1,v1,s0 ;r3 & 00FFFFFF
|
||||
or v0,v0,v1 ; r2 | r3 = 04FFFFFF - commands with FFFFFF
|
||||
sw v0,0x0(r5) ; *curChainAddr r5 = r2 (upd ..04 with ..FF04)
|
||||
lw r4,0x18(t1) ; r4 = *r8+18 (first chain addr?)
|
||||
nop
|
||||
lw v0,0x0(r4) ; r2 = *r4 FIRST CHAIN LINK TO NEXT??
|
||||
and v1,r5,s0 ; r3 = r5 (cur chain) & 00FFFFFF
|
||||
and v0,v0,t2 ; r2 & FF000000
|
||||
or v0,v0,v1 ; r2 | r3 = last chain adr w 10&....
|
||||
sw v0,0x0(r4) ; *r4 = r2 FIRST CHAIN NEXT ADDR???
|
||||
sw r5,0x18(t1) ;t0->t1 ; r5 = *r8+18 curChainAddr
|
||||
lhu v0,0x4(t4) ;t1->t4 r2 = half (DMA params)+4 (charCounter)
|
||||
nop
|
||||
bne v0,zero,NotFirstChar ; if CharCount<>0 then Goto...
|
||||
nop
|
||||
sw r5,0x28(t1) ;t0->t1 ;*curChain+28 = currentChainAddr
|
||||
sw t8,0xc(t4) ;t1->t4 ; Params+0c = save half X STORE COORDS
|
||||
;sh s2,0xe(t4) ;t1->t4 ;Params+0e = save half Y
|
||||
NotFirstChar:
|
||||
lui r5,0x1f80 ;;;;;;;;;;;;;;;;;;;;;;;ADDRESS OF CHAR HERe ---> SLL CHARNUM, 6
|
||||
|
||||
lw v0,-0x4930(s1);>8007b6d0_freeChain r2 = *nextFreeChain
|
||||
ori r5,r5,0x348 ; r5 | 1f800348 = Scratch CharData
|
||||
and r4,v0,t2 ; r4 = r2 & FF000000
|
||||
and v0,v0,s0 ; r2 & 00FFFFFF
|
||||
or r7,v0,s7 ;t4->s7 (800...) ; r7 = r2 | r12 = nextChain & 80...
|
||||
move r6,r7 ; r6 = r7 (nextChain)
|
||||
lw v0,0x4(s5) ; CmdCounter r2 = DMA Counter
|
||||
lw v1,0x0(r7) ; r3 = New Free ChainAddr / currHeader Addr
|
||||
addiu v0,v0,-0x1 ; r2 -= 1 Counter Down
|
||||
and v1,v1,s0 ; r3 & 00FFFFFF cut commandCount / currHeader
|
||||
or r4,r4,v1 ; r4 & r3 = ff......
|
||||
sw v0,0x4(s5);>DAT_8007b6d4_CmdCounter save DMA Counter
|
||||
andi v0,r7,0x3 ; r2 = r7 & 3 (check destAddr MOD 4)
|
||||
|
||||
lui t3,0x1f80
|
||||
ori t3,t3,0x388 ; Scratch DMAChain CharEndAddr
|
||||
|
||||
beq v0,zero,Copy16Bytes ; if r7 MOD 4 = 0 then Branch
|
||||
sw r4,-0x4930(s1);>8007b6d0_freeChain save new freeChain
|
||||
|
||||
;;;;;;;;;;;;;;;Copy from ScratchPad To Chain
|
||||
|
||||
CopyBy2Bytes:
|
||||
lwl t6,0x3(r5) ; if r7 mod4 <> 0 - копируем по 2 байта
|
||||
lwr t6,0x0(r5);>DAT_1f800348
|
||||
lwl t7,0x7(r5)
|
||||
lwr t7,0x4(r5);>DAT_1f80034c
|
||||
lwl t8,0xb(r5)
|
||||
lwr t8,0x8(r5);>DAT_1f800350
|
||||
lwl t5,0xf(r5)
|
||||
lwr t5,0xc(r5);>DAT_1f800354
|
||||
swl t6,0x3(r6)
|
||||
swr t6,0x0(r6)
|
||||
swl t7,0x7(r6)
|
||||
swr t7,0x4(r6)
|
||||
swl t8,0xb(r6)
|
||||
swr t8,0x8(r6)
|
||||
swl t5,0xf(r6)
|
||||
swr t5,0xc(r6)
|
||||
addiu r5,r5,0x10
|
||||
bne r5,t3,CopyBy2Bytes
|
||||
addiu r6,r6,0x10
|
||||
j last4BytesCopy
|
||||
nop
|
||||
Copy16Bytes:
|
||||
lw t6,0x0(r5);>DAT_1f800348 r5 - curScratchAddr,r6 -cur DMAAddr
|
||||
lw t7,0x4(r5)
|
||||
lw t8,0x8(r5)
|
||||
lw t5,0xc(r5)
|
||||
sw t6,0x0(r6)
|
||||
sw t7,0x4(r6)
|
||||
sw t8,0x8(r6)
|
||||
sw t5,0xc(r6)
|
||||
addiu r5,r5,0x10
|
||||
bne r5,t3,Copy16Bytes
|
||||
addiu r6,r6,0x10
|
||||
last4BytesCopy:
|
||||
lwl t6,0x3(r5) ; r14 left = 2 bytes from *r5+3
|
||||
lwr t6,0x0(r5);>DAT_1f800358 r14 right = 2 bytes from *r5
|
||||
nop
|
||||
swl t6,0x3(r6) ; *r6 = r14 left
|
||||
swr t6,0x0(r6) ; *r6+3 = r14 right
|
||||
; linking DMA char+copysprite
|
||||
|
||||
; t1 = t0 (small) !!!!
|
||||
; t4 = t1 (small) !!!!
|
||||
lw v1,0x18(t1) ; r3 = current DMACopySprite Chain
|
||||
lw v0,0x0(r7) ; r2 = current CharChainCommands
|
||||
lw v1,0x0(v1) ; r3 = *r3 (comNum+FFFFFF(nextLink))
|
||||
and v0,v0,t2 ; r2 & FF.....
|
||||
and v1,v1,s0 ; r3 & 00FFFFFF
|
||||
or v0,v0,v1 ; r2 | r3 = 10FFFFFF(cmdNum&FF..)
|
||||
sw v0,0x0(r7) ; *r7 = r2 saveCurChainCmd
|
||||
lw r4,0x18(t1) ; r4 = r8+18h - cur CopySpriteCmd hdrAddr
|
||||
nop
|
||||
lw v0,0x0(r4) ; r2 = *r4 (04FFFFFF)
|
||||
and v1,r7,s0 ; r3 = r7 & 00FFFFFF (Copying Cur Char Chain)
|
||||
and v0,v0,t2 ; r2 & FF000000 (04000000) CmdCount
|
||||
or v0,v0,v1 ; R2 | R3 = 04(cmd)..+CharChainAddr
|
||||
sw v0,0x0(r4) ; *r4 = r2 = FullCommand With Link!!!
|
||||
; (04..CharAddr) + SpriteCopyCommand
|
||||
sw r7,0x18(t1) ; *r8+18 = Last Char Chain!
|
||||
addiu t1,t1,0x4 ; r8 (params) += 4 (shift params for NextPage)
|
||||
addiu v0,t4,0x8 ; r2 = r9+8 (shift first chain param for Page)
|
||||
sltu v0,t1,v0 ; r2 = r8 < r2(r9+8) (first page pass)
|
||||
bne v0,zero,PageLoop ; if r2<>0 (r8<r2) then goto Next Page Loop
|
||||
nop
|
||||
|
||||
;;;CharCount + Check
|
||||
lhu v0,0x4(r20) ; r2 = current charDMACount
|
||||
nop
|
||||
addiu v0,v0,0x1 ; a += 1
|
||||
sh v0,0x4(r20) ;save DMAcounter to chain
|
||||
nop
|
||||
|
||||
|
||||
;DMA OVERFLOW CHECK!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (8007b6d4)
|
||||
lui t3,MyAddr
|
||||
lw v0,0x4(s5) ; CmdCounter r2 = DMA Counter
|
||||
lhu v1,-0xC(t3) ;v1 = 8008fff4 = minimum cmd counter
|
||||
nop
|
||||
sltu v0,v0,v1 ; v0 = v0 < V1 ?
|
||||
bne v0,zero,TextEnd ;if v0<>0 then Goto End Text (DMA OVERFLOW!!!!)
|
||||
nop
|
||||
|
||||
|
||||
|
||||
|
||||
;lui t3,MyAddr
|
||||
lhu v0,-0xE(t3) ; r2 = charCount In string
|
||||
lhu v1,-0x10(t3) ; r3 = My charOverAll In string
|
||||
addiu v0,v0,0x1 ; a += 1
|
||||
lbu r4,0x0(s6) ; load next Char to r4 (byte)
|
||||
|
||||
sh v0,-0xE(t3) ; store myCharCounter to MyAddr-E
|
||||
addiu s6,s6,0x1 ;Shift CharAddr
|
||||
|
||||
bne v0,v1,NextChar ; if currentChar<>OverallChar - branch
|
||||
nop
|
||||
TextEnd:
|
||||
clear r18
|
||||
lui s3,0x8008
|
||||
addiu s5,s3,-0x4930 ; r19 = 80080000, r21 = 7b6d0
|
||||
lui s1,0xff ; r17 = 00ff0000
|
||||
ori s1,s1,0xffff ; r17 & ffff = 00ff ffff
|
||||
move s0,r20 ; r16 = r20 (currentTLineParam)
|
||||
clear r5
|
||||
PageTLoop: ;ALMOST FINISH!!!!
|
||||
li r6,0x1 ; r6=1
|
||||
addu r18,r18,r6 ; r18(Counter) += r6
|
||||
lui v0,0x8000 ; r2 = 80000000
|
||||
lui r4,0xff00 ; r4 = ff00 0000
|
||||
lw v1,-0x4930(s3);>8007b6d0_freeChain r3 = next free Chain (*7b6d0)
|
||||
lw r7,0xa4(gp);>DAT_8007b234 r7 = someParam(почти DMA)gp+a4 = 34
|
||||
and v1,v1,s1 ; r3 & 00FFFFFF
|
||||
or v1,v1,v0 ; r3 | r2 = 80.....
|
||||
sw v1,0x30(s0) ; store last free ChAddr to DMAParams
|
||||
lw v0,-0x4930(s3);>8007b6d0_freeChain r2 = next free chain
|
||||
lw v1,0x0(v1) ; r3 = *r3 = last chain - made one more chain
|
||||
and v0,v0,r4 ; a2 & ff000000
|
||||
and v1,v1,s1 ; r3 & 00FFFFFF
|
||||
lw r4,0x4(s5);>DAT_8007b6d4_CmdCounter r4 = DMA Counter
|
||||
or v0,v0,v1 ; r2 | r3
|
||||
sw v0,-0x4930(s3);>8007b6d0_freeChain new free chain addr add to *7b6b0
|
||||
addiu r4,r4,-0x1 ; DMA Cunter =- 1
|
||||
sw r4,0x4(s5);>DAT_8007b6d4_CmdCounter Store DMA Count
|
||||
lw r4,0x30(s0) ; r4 = *DMA params + 30 = Start Of DMA Chain
|
||||
jal SetDrawTPage ; Set DRAW PAGE
|
||||
addiu s0,s0,0x4 ; r16 += 4 - Shgift DMAParams for next Page
|
||||
sltiu v0,r18,0x2 ; r2 = r18<2
|
||||
bne v0,zero,PageTLoop ; if not r2 then goto Loop
|
||||
clear r5 ; r5 = 0
|
||||
move v0,r20 ; r2 = DMAParamsMain
|
||||
|
||||
lw ra,0x4c(sp)
|
||||
lw s8,0x48(sp)
|
||||
lw s7,0x44(sp)
|
||||
lw s6,0x40(sp)
|
||||
lw s5,0x3c(sp) ;restoring regs from Stack
|
||||
lw s4,0x38(sp)
|
||||
lw s3,0x34(sp)
|
||||
lw s2,0x30(sp)
|
||||
lw s1,0x2c(sp)
|
||||
lw s0,0x28(sp)
|
||||
|
||||
jr ra
|
||||
addiu sp,sp,0x50
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chars / 2 Return Func
|
||||
|
||||
.include "charload.asm"
|
||||
|
||||
.include "charCalcs.asm"
|
||||
|
||||
|
||||
.close
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;; BOSSNAMECOPY
|
||||
.include "battle_patch.asm"
|
||||
|
||||
; 69 x 44
|
||||
;yellow - 976 X 437 white - 976 X 432
|
||||
|
||||
.include "txtpatches.asm" ;misc text patches
|
||||
439
main_before_spaces.asm
Normal file
439
main_before_spaces.asm
Normal file
@@ -0,0 +1,439 @@
|
||||
;
|
||||
; Persona 2 Innocent Sin (PSX) JAP / Custom Characters/Data Patch
|
||||
;
|
||||
; Author: Sergey Shemet 12/10/2021
|
||||
|
||||
.psx
|
||||
|
||||
|
||||
|
||||
.definelabel SetDrawTPage, 0x800542cc
|
||||
.definelabel storeColor, 0x8001b0c8
|
||||
.definelabel initCopyCharChain, 0x8001a070
|
||||
.definelabel makeCharPixels, 0x8001a08f ;need custom routine with custom font
|
||||
.definelabel GenerateSmallChar, 0x8001a284 ;need custom routine
|
||||
.definelabel MakeShadowSmallChar, 0x8001a20c
|
||||
.definelabel PrintBigDMAText, 0x80019300
|
||||
|
||||
.definelabel MyAddr, 0x8009
|
||||
|
||||
|
||||
.open "SLPS_021.00", 0x8000F800
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.org 0x80090000
|
||||
ExternalPrint:
|
||||
;;;;;;;text routing test routine
|
||||
move r3,s3
|
||||
move s3,r4
|
||||
|
||||
lhu v0,0x0(s3) ;read half 2 bytes of text (r4, not s1+0c!!!!!)
|
||||
move s3,r3
|
||||
srl v1,v0,0xD ;;;;Check 13th bit (1byte system !!!)
|
||||
bne v1,zero,MyPrintLineRoutine
|
||||
clear v1
|
||||
j PrintBigDMAText
|
||||
nop
|
||||
|
||||
;;;;;;;;;;;;;;;;;MyPrintLineRoutine
|
||||
MyPrintLineRoutine:
|
||||
addiu sp,sp,-0x50
|
||||
sw s6,0x40(sp)
|
||||
move s6,r4 ;textReadAddr
|
||||
sw s1,0x2c(sp)
|
||||
move s1,r5
|
||||
sw s2,0x30(sp)
|
||||
move s2,r6
|
||||
sw s3,0x34(sp)
|
||||
|
||||
; NEW COMMAND OBRAB
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;lw v1,0x0(s6)
|
||||
;nop
|
||||
;v1/r3 - MyChars charcount
|
||||
andi v0,v0,0xff
|
||||
addiu s6,s6,0x2 ;Moving text read pointer +2bytes
|
||||
|
||||
|
||||
|
||||
lui s3,MyAddr
|
||||
sh v0,-0x10(s3) ;store half bytecounter @ 8008fff0
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
lui s3,0x1f80
|
||||
ori s3,s3,0x3d0 ;s3 = 1f8003d0 - copysprite cmd in scratch
|
||||
lui t0,0xff
|
||||
ori t0,t0,0xffff ;t0 = 00FFFFFF
|
||||
|
||||
sw s0, 0x28(sp) ;save s0 in stack
|
||||
andi s0,r7,0xff ;s0 - cut textMode (color & shadow)
|
||||
move r4,s0 ;r4 = s0 (cutted color)
|
||||
lui r7, 0x8008 ;r7 = 8008 0000
|
||||
lui r6, 0xff00 ;r6 = FF000000
|
||||
|
||||
addiu t1,r7,-0x4930 ;t1 = 8007b6d0 - new free CHAIN Here
|
||||
lw v1, -0x4930(r7) ;r3/v1 = load freeChain
|
||||
lbu r5,0x60(sp) ;shadow flag from stack to r5
|
||||
lui v0,0x8000 ;r2 = 8000 0000
|
||||
sw ra,0x4c(sp)
|
||||
sw s8,0x48(sp)
|
||||
sw s7,0x44(sp)
|
||||
sw s5,0x3c(sp) ; push ra,r30,r23,31,r20
|
||||
sw s4,0x38(sp)
|
||||
;;init chains
|
||||
and r6,v1,r6 ;r6 = r3 & ff000000 = FF000000
|
||||
andi r5,r5,0xff ;clean text mode (color/shadow)
|
||||
and v1,v1,t0 ;r3 & 00ffffff
|
||||
or r20,v1,v0 ;r20 - 80...+r3 = freeChain Main Addr
|
||||
lw v0,0x4(t1) ;Load DMA Counter
|
||||
lw v1,0x0(r20) ;r3 = next free Chain
|
||||
addiu v0,v0,-0x1 ;DMA Counter-1
|
||||
and v1,v1,t0 ; r3 & r8 (00ffffff) cut f.byte
|
||||
or r6,r6,v1 ; r6 | r3 = ff+r3 = next free Chain (FF...) +
|
||||
sw v0,0x4(t1) ;save DMACounter
|
||||
jal storeColor
|
||||
sw r6,-0x4930(r7) ;SAVE next free Chain (FF...) to 7b6d0
|
||||
move r4,r20 ;currentChainAddr
|
||||
sll r5,s1,0x10 ;r5 = X<<10h (003A0000)
|
||||
sra r5,r5,0x10 ; r5=r5>>10h 0000003A
|
||||
sll r6,s2,0x10 ; r6 = Y << 10h
|
||||
sra r6,r6,0x10 ;r6>>10h - 100% clean coords
|
||||
jal initCopyCharChain ;init line chains
|
||||
move r7,s0 ;store textMode _THIS IS FOR INIT
|
||||
|
||||
;;;;init ScratchPad
|
||||
;;;;;;;;;;;;;;;;;; CPU TO VRAM
|
||||
lui r7,0x1f80
|
||||
ori r7,r7,0x348 ;r7 = FIRST CHAR START
|
||||
;lui r6,0x1f80 ;LOWER HALF OF CHAR - DONT NEED!!!
|
||||
;ori r6,r6,0x38c
|
||||
li v0,0x2
|
||||
sh v0,0x1c(sp)
|
||||
li v0,0xc
|
||||
|
||||
lui r4,0xa000 ;r4 = a000 0000
|
||||
sh v0,0x1e(sp) ; SAVE 000C0002 TO STACK+1c
|
||||
|
||||
|
||||
|
||||
; INIT CHAR
|
||||
li r5,0x10 ;cmd count 10 00 00 00 =>DAT_1f80034b
|
||||
sb r5,0x3(r7) ;SAVE 0d 00 00 00 =>DAT_1f80034c cmdcount\
|
||||
sw r4,0x4(r7); SAVE a000000 TO DAT_1f80034c
|
||||
lhu t0,0xa0(gp) ;0310 ;Load x(0310) to r8
|
||||
lhu v0,0xa2(gp) ;01f0 ;Load y(01F0)to r2
|
||||
lui v1,0x100 ;0100 0000 flushcache
|
||||
lui at,0x1f80 ;scrathcpadStart
|
||||
sw v1,0x388(at) ;save 0x01 00 00 00 to end of 1st CHAR chain
|
||||
setY1:
|
||||
move s8,s2 ; r18 to r30 (y) !!!!!!!!!!!!!!!!!!!
|
||||
lh r5,0xa0(gp) ;for futher sprite X calc
|
||||
sh t0,0x18(sp)
|
||||
sh v0,0x1a(sp) ;SAVE CONCAT 013001f0 to stack
|
||||
lw r4,0x18(sp) ;LOAD 013001f0 from stack
|
||||
lw v0,0x1c(sp) ; r2 = 000c0002 from stack
|
||||
sw r4,0x8(r7) ;DAT_1f800350 load r4 (upper coord 01f6) to r7+8 (DMA)
|
||||
sw v0,0xc(r7) ;=>DAT_1f800354 r2 - 000c0002 to 1st char (to r7+0c)
|
||||
|
||||
lui v0,0x8001 ;load 80010000 to r2
|
||||
|
||||
;4bit table pattern
|
||||
.include "4bitPattern.asm"
|
||||
|
||||
; Copy Sprite DMA Command Forming
|
||||
li v0,0x4
|
||||
sb v0,0x3(s3) ; 04 00 00 00 to 3d0 (sb 04 to 3d3) CHAIN LENGTH
|
||||
li v0,0x64
|
||||
sb v0,0x7(s3) ;sb 64 to 3d7 (copySpriteCommand)
|
||||
li v0,0x80
|
||||
sb v0,0x4(s3)
|
||||
sb v0,0x5(s3)
|
||||
sb v0,0x6(s3) ;make 80 80 80 64 (3d4,5,6,7)
|
||||
bgez r5,LAB_800194fc
|
||||
SetX1:
|
||||
sh s1,0x20(sp) ;store X half to sp+10 !!!!!!!!!!!!!!!!!
|
||||
addiu t0,r5,0x3f
|
||||
LAB_800194fc: ;decoding coords for source sprite
|
||||
sra v0,t0,0x6 ;r2 = r6 >> 6 = 4
|
||||
sll v0,v0,0x6 ;r2 << 6 = 100
|
||||
subu v0,r5,v0 ;r2 = r6 - r2 = 30
|
||||
lh v1,0xa2(gp) ;r3 = load Y half from mem
|
||||
sll v0,v0,0x2 ;r2 << 2
|
||||
sb v0,0xc(s3) ; >DAT_1f8003dc ;STORE CHAR SPRITE X BYTE
|
||||
bgez v1,LAB_80019520 ;if Y r3>=0 - branch & r2=r3
|
||||
move v0,v1
|
||||
addiu v0,v1,0xff ;else r2 = ff - r3
|
||||
LAB_80019520:
|
||||
sra v0,v0,0x8
|
||||
sll v0,v0,0x8
|
||||
subu v0,v1,v0
|
||||
sb v0,0xd(s3) ; >DAT_1f8003dd ;STORE CHAR SPRITE Y BYTE
|
||||
lhu v1,0xa8(gp)
|
||||
;DIFF BETWEEN VERSs::::::::::::::::::::::
|
||||
li v0,0x8 ; r2 = 8 Sprite WIDTH
|
||||
sh v0,0x10(s3) ; 3e0 - 0008 save
|
||||
sh v1,0xe(s3);=>DAT_1f8003de ; *3de = r3 = 7df3
|
||||
li v0,0xc ; r2 = c Sprite HEIGTH
|
||||
sh v0,0x12(s3) ; 3e2 - 000c save
|
||||
|
||||
;TEXT READ START
|
||||
lbu r4,0x0(s6) ;MAIN READ CHAR COMMAND - Load Byte Unsigned
|
||||
nop
|
||||
addiu s6,s6,0x1 ;Shift read address +1 byte
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;CHAR CHECK CUTTED!
|
||||
lui s1,0x8008 ;load 80080000 to r17
|
||||
addiu s5,s1,-0x4930 ;r21 = r17-4930= 7b6d0 (tempDMA)
|
||||
lui s0,0xff
|
||||
ori s0,s0,0xffff ;s0 = 00 ff ff ff
|
||||
lui s7,0x8000 ;r3 = 8000 0000
|
||||
NextChar:
|
||||
addiu r4,r4,-0x20 ;Shift unprintable symbols
|
||||
|
||||
|
||||
; lhu v1,0x4(r20) ; current char = r3 = half *DMAAddr + 4
|
||||
; nop
|
||||
; beq v1,zero,isFirstChar ;check charnum. if 0 - dont check space (string not initializated)
|
||||
; nop
|
||||
;check r0 is 0 and jump to next char
|
||||
; beq r4,zero,SpaceCharJumpHere ;if char=0 (space) = jump to end of charLoop
|
||||
; nop
|
||||
|
||||
|
||||
isFirstChar:
|
||||
jal makeCharPixelsCustom ;MAKE SMALL CHAR IN SCRATCH ___ CUSTOM ROUTINE
|
||||
clear r18
|
||||
|
||||
; Coords XY init
|
||||
lw v0,0xb0(gp); =>DAT_8007b240_parms load r2 from r28+0b0 (7b240)(Xoffs)
|
||||
lhu v1,0x4(r20) ; current char = r3 = half *DMAAddr + 4
|
||||
|
||||
;NEED TO CUSTOM CHAR COUNT
|
||||
|
||||
addiu v0,v0,0x6 ; 0x06 * 6px btw letters!
|
||||
mult v1,v0 ; r3*r2 = xOffs*charNum
|
||||
lui t2,0xff00 ; r10 = ld upper ff00 = ff000000
|
||||
move t4,r20 ; r12 = r20 (params)
|
||||
addiu t3,sp,0x10 ; r11 = sp + 10 = 807ffe50
|
||||
move t1,r20 ; r12 = r20 (params again)
|
||||
GetY:
|
||||
sh s8,0xa(s3) ; DAT_1f8003da *r19(1st scr DMA)+0a = r30 (Y??) !!!!!!!!!!!!!!!!
|
||||
GetX:
|
||||
lhu t5,0x20(sp) ; r13 = ld half (sp+20) = 003A ---X from sp+20 !!
|
||||
mflo t6 ; r14 = lo
|
||||
addu v0,t5,t6 ; r2 = r13 + r14 = X + Offset
|
||||
sh v0,0x8(s3) ;DAT_1f8003d8 save r2 half to 1f8003d8 = X (3A) !!!!!!!!!!!!!!!!
|
||||
PageLoop:
|
||||
;MAKING COPYSPRITE CHAIN
|
||||
lw v0,-0x4930(s1); r2 = *freeChainAddr
|
||||
nop
|
||||
and r4,v0,t2 ; r4 = r2 & ff00..
|
||||
and v0,v0,s0 ; r2 & 00FFFFFF
|
||||
or r5,v0,s7 ; r5 = r2 or r23 (80000000) = 801ADF10
|
||||
lw v0,0x4(s5) ; CmdCounter r2 = *7b6d0+4 = 705
|
||||
lw v1,0x0(r5) ; r3 = New Free ChainAddr
|
||||
addiu v0,v0,-0x1 ; r2 -= 1 Counter Down
|
||||
and v1,v1,s0 ; r3 & 00FFFFFF cut begin byte
|
||||
or r4,r4,v1 ; r4 & r3 = ff......
|
||||
sw v0,0x4(s5) ; CmdCounter save DMA Counter
|
||||
sw r4,-0x4930(s1); freeChain save new freeChain
|
||||
CopyCmdFromScratch:
|
||||
; CopyScriptChain copy from scratch
|
||||
lw t6,0x0(s3) ;>DAT_1f8003d0 r14 = 04000000 - DMA Commands Count
|
||||
lw t7,0x4(s3) ;>DAT_1f8003d4 r15 = 64808080 - CopySpriteCmd
|
||||
lw t8,0x8(s3) ;>DAT_1f8003d8 r24 = 001500d1 - xy screen coords
|
||||
lw t5,0xc(s3); >DAT_1f8003dc r13 = 7fd3f0c0 (CLUT & tex coord page)
|
||||
sw t6,0x0(r5) ; *r5 = r14
|
||||
sw t7,0x4(r5) ; *r5+4 = r15
|
||||
sw t8,0x8(r5) ; *r5+8 = r24
|
||||
sw t5,0xc(r5) ; *r5+c = r13
|
||||
lw t6,0x10(s3);>DAT_1f8003e0 r14 = 000c0008 - spritesize after copy
|
||||
nop
|
||||
sw t6,0x10(r5) ; *r5+10 = r14 - LAST COMMAND SAVE
|
||||
; t1 = t0 (small) !!!!
|
||||
; t4 = t1 (small) !!!!
|
||||
lw v1,0x18(t1) ;r3 = *r9+18 (next param???)
|
||||
lw v0,0x0(r5) ; r2 = *cur New Chainaddr
|
||||
lw v1,0x0(v1) ; r3 = *r3
|
||||
and v0,v0,t2 ; r2 & ff000000
|
||||
and v1,v1,s0 ;r3 & 00FFFFFF
|
||||
or v0,v0,v1 ; r2 | r3 = 04FFFFFF - commands with FFFFFF
|
||||
sw v0,0x0(r5) ; *curChainAddr r5 = r2 (upd ..04 with ..FF04)
|
||||
lw r4,0x18(t1) ; r4 = *r8+18 (first chain addr?)
|
||||
nop
|
||||
lw v0,0x0(r4) ; r2 = *r4 FIRST CHAIN LINK TO NEXT??
|
||||
and v1,r5,s0 ; r3 = r5 (cur chain) & 00FFFFFF
|
||||
and v0,v0,t2 ; r2 & FF000000
|
||||
or v0,v0,v1 ; r2 | r3 = last chain adr w 10&....
|
||||
sw v0,0x0(r4) ; *r4 = r2 FIRST CHAIN NEXT ADDR???
|
||||
sw r5,0x18(t1) ;t0->t1 ; r5 = *r8+18 curChainAddr
|
||||
lhu v0,0x4(t4) ;t1->t4 r2 = half (DMA params)+4 (charCounter)
|
||||
nop
|
||||
bne v0,zero,NotFirstChar ; if CharCount<>0 then Goto...
|
||||
nop
|
||||
sw r5,0x28(t1) ;t0->t1 ;*curChain+28 = currentChainAddr
|
||||
sw t8,0xc(t4) ;t1->t4 ; Params+0c = save half X STORE COORDS
|
||||
;sh s2,0xe(t4) ;t1->t4 ;Params+0e = save half Y
|
||||
NotFirstChar:
|
||||
lui r5,0x1f80
|
||||
lw v0,-0x4930(s1);>8007b6d0_freeChain r2 = *nextFreeChain
|
||||
ori r5,r5,0x348 ; r5 | 1f800348 = Scratch CharData
|
||||
and r4,v0,t2 ; r4 = r2 & FF000000
|
||||
and v0,v0,s0 ; r2 & 00FFFFFF
|
||||
or r7,v0,s7 ;t4->s7 (800...) ; r7 = r2 | r12 = nextChain & 80...
|
||||
move r6,r7 ; r6 = r7 (nextChain)
|
||||
lw v0,0x4(s5) ; CmdCounter r2 = DMA Counter
|
||||
lw v1,0x0(r7) ; r3 = New Free ChainAddr / currHeader Addr
|
||||
addiu v0,v0,-0x1 ; r2 -= 1 Counter Down
|
||||
and v1,v1,s0 ; r3 & 00FFFFFF cut commandCount / currHeader
|
||||
or r4,r4,v1 ; r4 & r3 = ff......
|
||||
sw v0,0x4(s5);>DAT_8007b6d4_CmdCounter save DMA Counter
|
||||
andi v0,r7,0x3 ; r2 = r7 & 3 (check destAddr MOD 4)
|
||||
|
||||
lui t3,0x1f80
|
||||
ori t3,t3,0x388 ; Scratch DMAChain CharEndAddr
|
||||
|
||||
beq v0,zero,Copy16Bytes ; if r7 MOD 4 = 0 then Branch
|
||||
sw r4,-0x4930(s1);>8007b6d0_freeChain save new freeChain
|
||||
|
||||
;;;;;;;;;;;;;;;Copy from ScratchPad To Chain
|
||||
|
||||
CopyBy2Bytes:
|
||||
lwl t6,0x3(r5) ; if r7 mod4 <> 0 - копируем по 2 байта
|
||||
lwr t6,0x0(r5);>DAT_1f800348
|
||||
lwl t7,0x7(r5)
|
||||
lwr t7,0x4(r5);>DAT_1f80034c
|
||||
lwl t8,0xb(r5)
|
||||
lwr t8,0x8(r5);>DAT_1f800350
|
||||
lwl t5,0xf(r5)
|
||||
lwr t5,0xc(r5);>DAT_1f800354
|
||||
swl t6,0x3(r6)
|
||||
swr t6,0x0(r6)
|
||||
swl t7,0x7(r6)
|
||||
swr t7,0x4(r6)
|
||||
swl t8,0xb(r6)
|
||||
swr t8,0x8(r6)
|
||||
swl t5,0xf(r6)
|
||||
swr t5,0xc(r6)
|
||||
addiu r5,r5,0x10
|
||||
bne r5,t3,CopyBy2Bytes
|
||||
addiu r6,r6,0x10
|
||||
j last4BytesCopy
|
||||
nop
|
||||
Copy16Bytes:
|
||||
lw t6,0x0(r5);>DAT_1f800348 r5 - curScratchAddr,r6 -cur DMAAddr
|
||||
lw t7,0x4(r5)
|
||||
lw t8,0x8(r5)
|
||||
lw t5,0xc(r5)
|
||||
sw t6,0x0(r6)
|
||||
sw t7,0x4(r6)
|
||||
sw t8,0x8(r6)
|
||||
sw t5,0xc(r6)
|
||||
addiu r5,r5,0x10
|
||||
bne r5,t3,Copy16Bytes
|
||||
addiu r6,r6,0x10
|
||||
last4BytesCopy:
|
||||
lwl t6,0x3(r5) ; r14 left = 2 bytes from *r5+3
|
||||
lwr t6,0x0(r5);>DAT_1f800358 r14 right = 2 bytes from *r5
|
||||
nop
|
||||
swl t6,0x3(r6) ; *r6 = r14 left
|
||||
swr t6,0x0(r6) ; *r6+3 = r14 right
|
||||
; linking DMA char+copysprite
|
||||
|
||||
; t1 = t0 (small) !!!!
|
||||
; t4 = t1 (small) !!!!
|
||||
lw v1,0x18(t1) ; r3 = current DMACopySprite Chain
|
||||
lw v0,0x0(r7) ; r2 = current CharChainCommands
|
||||
lw v1,0x0(v1) ; r3 = *r3 (comNum+FFFFFF(nextLink))
|
||||
and v0,v0,t2 ; r2 & FF.....
|
||||
and v1,v1,s0 ; r3 & 00FFFFFF
|
||||
or v0,v0,v1 ; r2 | r3 = 10FFFFFF(cmdNum&FF..)
|
||||
sw v0,0x0(r7) ; *r7 = r2 saveCurChainCmd
|
||||
lw r4,0x18(t1) ; r4 = r8+18h - cur CopySpriteCmd hdrAddr
|
||||
nop
|
||||
lw v0,0x0(r4) ; r2 = *r4 (04FFFFFF)
|
||||
and v1,r7,s0 ; r3 = r7 & 00FFFFFF (Copying Cur Char Chain)
|
||||
and v0,v0,t2 ; r2 & FF000000 (04000000) CmdCount
|
||||
or v0,v0,v1 ; R2 | R3 = 04(cmd)..+CharChainAddr
|
||||
sw v0,0x0(r4) ; *r4 = r2 = FullCommand With Link!!!
|
||||
; (04..CharAddr) + SpriteCopyCommand
|
||||
sw r7,0x18(t1) ; *r8+18 = Last Char Chain!
|
||||
addiu t1,t1,0x4 ; r8 (params) += 4 (shift params for NextPage)
|
||||
addiu v0,t4,0x8 ; r2 = r9+8 (shift first chain param for Page)
|
||||
sltu v0,t1,v0 ; r2 = r8 < r2(r9+8) (first page pass)
|
||||
bne v0,zero,PageLoop ; if r2<>0 (r8<r2) then goto Next Page Loop
|
||||
nop
|
||||
|
||||
SpaceCharJumpHere:
|
||||
;;;CharCount + Check
|
||||
lhu v0,0x4(r20) ; r2 = current charCount
|
||||
nop
|
||||
addiu v0,v0,0x1 ; a += 1
|
||||
lui t3,MyAddr
|
||||
lhu v1,-0x10(t3) ; r3 = My charCount In string
|
||||
lbu r4,0x0(s6) ; load next Char to r4 (byte)
|
||||
addiu s6,s6,0x1 ;Shift CharAddr
|
||||
sh v0,0x4(r20) ; r2 = save to chain
|
||||
|
||||
bne v0,v1,NextChar ; if currentChar<>OverallChar - branch
|
||||
nop
|
||||
TextEnd:
|
||||
clear r18
|
||||
lui s3,0x8008
|
||||
addiu s5,s3,-0x4930 ; r19 = 80080000, r21 = 7b6d0
|
||||
lui s1,0xff ; r17 = 00ff0000
|
||||
ori s1,s1,0xffff ; r17 & ffff = 00ff ffff
|
||||
move s0,r20 ; r16 = r20 (currentTLineParam)
|
||||
clear r5
|
||||
PageTLoop: ;ALMOST FINISH!!!!
|
||||
li r6,0x1 ; r6=1
|
||||
addu r18,r18,r6 ; r18(Counter) += r6
|
||||
lui v0,0x8000 ; r2 = 80000000
|
||||
lui r4,0xff00 ; r4 = ff00 0000
|
||||
lw v1,-0x4930(s3);>8007b6d0_freeChain r3 = next free Chain (*7b6d0)
|
||||
lw r7,0xa4(gp);>DAT_8007b234 r7 = someParam(почти DMA)gp+a4 = 34
|
||||
and v1,v1,s1 ; r3 & 00FFFFFF
|
||||
or v1,v1,v0 ; r3 | r2 = 80.....
|
||||
sw v1,0x30(s0) ; store last free ChAddr to DMAParams
|
||||
lw v0,-0x4930(s3);>8007b6d0_freeChain r2 = next free chain
|
||||
lw v1,0x0(v1) ; r3 = *r3 = last chain - made one more chain
|
||||
and v0,v0,r4 ; a2 & ff000000
|
||||
and v1,v1,s1 ; r3 & 00FFFFFF
|
||||
lw r4,0x4(s5);>DAT_8007b6d4_CmdCounter r4 = DMA Counter
|
||||
or v0,v0,v1 ; r2 | r3
|
||||
sw v0,-0x4930(s3);>8007b6d0_freeChain new free chain addr add to *7b6b0
|
||||
addiu r4,r4,-0x1 ; DMA Cunter =- 1
|
||||
sw r4,0x4(s5);>DAT_8007b6d4_CmdCounter Store DMA Count
|
||||
lw r4,0x30(s0) ; r4 = *DMA params + 30 = Start Of DMA Chain
|
||||
jal SetDrawTPage ; Set DRAW PAGE
|
||||
addiu s0,s0,0x4 ; r16 += 4 - Shgift DMAParams for next Page
|
||||
sltiu v0,r18,0x2 ; r2 = r18<2
|
||||
bne v0,zero,PageTLoop ; if not r2 then goto Loop
|
||||
clear r5 ; r5 = 0
|
||||
move v0,r20 ; r2 = DMAParamsMain
|
||||
|
||||
lw ra,0x4c(sp)
|
||||
lw s8,0x48(sp)
|
||||
lw s7,0x44(sp)
|
||||
lw s6,0x40(sp)
|
||||
lw s5,0x3c(sp) ;restoring regs from Stack
|
||||
lw s4,0x38(sp)
|
||||
lw s3,0x34(sp)
|
||||
lw s2,0x30(sp)
|
||||
lw s1,0x2c(sp)
|
||||
lw s0,0x28(sp)
|
||||
|
||||
jr ra
|
||||
addiu sp,sp,0x50
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chars / 2 Return Func
|
||||
|
||||
.include "charload.asm"
|
||||
|
||||
.include "charCalcs.asm"
|
||||
|
||||
.close
|
||||
|
||||
.include "txtpatches.asm" ;misc text patches
|
||||
760
main_making_offsets.asm
Normal file
760
main_making_offsets.asm
Normal file
@@ -0,0 +1,760 @@
|
||||
;
|
||||
; Persona 2 Innocent Sin (PSX) JAP / Custom Characters/Data Patch
|
||||
;
|
||||
; Author: Sergey Shemet 12/10/2021
|
||||
|
||||
.psx
|
||||
|
||||
|
||||
|
||||
.definelabel SetDrawTPage, 0x800542cc
|
||||
.definelabel storeColor, 0x8001b0c8
|
||||
.definelabel initCopyCharChain, 0x8001a070
|
||||
.definelabel makeCharPixels, 0x8001a08f ;need custom routine with custom font
|
||||
.definelabel GenerateSmallChar, 0x8001a284 ;need custom routine
|
||||
.definelabel MakeShadowSmallChar, 0x8001a20c
|
||||
.definelabel PrintBigDMAText, 0x80019300
|
||||
|
||||
.definelabel MyAddr, 0x8009
|
||||
|
||||
|
||||
.open "SLPS_021.00", 0x8000F800
|
||||
|
||||
|
||||
.include "complex_strings_copy.asm" ;Make complex strings in battles
|
||||
|
||||
;;neeeeed to init 8008fff6 = min dma commands
|
||||
|
||||
.org 0x80090000
|
||||
ExternalPrint:
|
||||
;;;;;;;text routing test routine
|
||||
move r3,s3
|
||||
move s3,r4
|
||||
|
||||
lhu v0,0x0(s3) ;read half 2 bytes of text (r4, not s1+0c!!!!!)
|
||||
move s3,r3
|
||||
srl v1,v0,0xD ;;;;Check 13th bit (1byte system !!!)
|
||||
bne v1,zero,MyPrintLineRoutine
|
||||
clear v1
|
||||
j PrintBigDMAText
|
||||
nop
|
||||
|
||||
;;;;;;;;;;;;;;;;;MyPrintLineRoutine
|
||||
MyPrintLineRoutine:
|
||||
addiu sp,sp,-0x50
|
||||
sw s6,0x40(sp)
|
||||
move s6,r4 ;textReadAddr
|
||||
sw s1,0x2c(sp)
|
||||
move s1,r5
|
||||
sw s2,0x30(sp)
|
||||
move s2,r6
|
||||
sw s3,0x34(sp)
|
||||
clear r25 ;CURRENT TEXT MODE
|
||||
|
||||
|
||||
; NEW COMMAND OBRAB
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;lw v1,0x0(s6)
|
||||
;nop
|
||||
;v1/r3 - MyChars charcount
|
||||
andi v0,v0,0xff
|
||||
addiu s6,s6,0x2 ;Moving text read pointer +2bytes
|
||||
|
||||
|
||||
|
||||
lui s3,MyAddr
|
||||
sw v0,-0x10(s3) ;store bytecounter @ 8008fff0 and clean charCounter (8008fff2)
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
lui s3,0x1f80
|
||||
ori s3,s3,0x3d0 ;s3 = 1f8003d0 - copysprite cmd in scratch
|
||||
lui t0,0xff
|
||||
ori t0,t0,0xffff ;t0 = 00FFFFFF
|
||||
|
||||
sw s0, 0x28(sp) ;save s0 in stack
|
||||
andi s0,r7,0xff ;s0 - cut textMode (color & shadow)
|
||||
move r4,s0 ;r4 = s0 (cutted color)
|
||||
lui r7, 0x8008 ;r7 = 8008 0000
|
||||
lui r6, 0xff00 ;r6 = FF000000
|
||||
|
||||
addiu t1,r7,-0x4930 ;t1 = 8007b6d0 - new free CHAIN Here
|
||||
lw v1, -0x4930(r7) ;r3/v1 = load freeChain
|
||||
lbu r5,0x60(sp) ;shadow flag from stack to r5
|
||||
lui v0,0x8000 ;r2 = 8000 0000
|
||||
sw ra,0x4c(sp)
|
||||
sw s8,0x48(sp)
|
||||
sw s7,0x44(sp)
|
||||
sw s5,0x3c(sp) ; push ra,r30,r23,31,r20
|
||||
sw s4,0x38(sp)
|
||||
;;init chains
|
||||
and r6,v1,r6 ;r6 = r3 & ff000000 = FF000000
|
||||
andi r5,r5,0xff ;clean text mode (color/shadow)
|
||||
and v1,v1,t0 ;r3 & 00ffffff
|
||||
or r20,v1,v0 ;r20 - 80...+r3 = freeChain Main Addr
|
||||
lw v0,0x4(t1) ;Load DMA Counter
|
||||
lw v1,0x0(r20) ;r3 = next free Chain
|
||||
addiu v0,v0,-0x1 ;DMA Counter-1
|
||||
and v1,v1,t0 ; r3 & r8 (00ffffff) cut f.byte
|
||||
or r6,r6,v1 ; r6 | r3 = ff+r3 = next free Chain (FF...) +
|
||||
sw v0,0x4(t1) ;save DMACounter
|
||||
jal storeColor
|
||||
sw r6,-0x4930(r7) ;SAVE next free Chain (FF...) to 7b6d0
|
||||
move r4,r20 ;currentChainAddr
|
||||
sll r5,s1,0x10 ;r5 = X<<10h (003A0000)
|
||||
sra r5,r5,0x10 ; r5=r5>>10h 0000003A
|
||||
sll r6,s2,0x10 ; r6 = Y << 10h
|
||||
sra r6,r6,0x10 ;r6>>10h - 100% clean coords
|
||||
jal initCopyCharChain ;init line chains
|
||||
move r7,s0 ;store textMode _THIS IS FOR INIT
|
||||
|
||||
;;;;init ScratchPad
|
||||
;;;;;;;;;;;;;;;;;; CPU TO VRAM
|
||||
lui r7,0x1f80
|
||||
ori r7,r7,0x348 ;r7 = FIRST CHAR START
|
||||
;lui r6,0x1f80 ;LOWER HALF OF CHAR - DONT NEED!!!
|
||||
;ori r6,r6,0x38c
|
||||
li v0,0x2
|
||||
sh v0,0x1c(sp)
|
||||
li v0,0xc
|
||||
|
||||
lui r4,0xa000 ;r4 = a000 0000
|
||||
sh v0,0x1e(sp) ; SAVE 000C0002 TO STACK+1c
|
||||
|
||||
|
||||
|
||||
; INIT CHAR
|
||||
li r5,0x10 ;cmd count 10 00 00 00 =>DAT_1f80034b
|
||||
sb r5,0x3(r7) ;SAVE 0d 00 00 00 =>DAT_1f80034c cmdcount\
|
||||
sw r4,0x4(r7); SAVE a000000 TO DAT_1f80034c
|
||||
lhu t0,0xa0(gp) ;0310 ;Load x(0310) to r8
|
||||
lhu v0,0xa2(gp) ;01f0 ;Load y(01F0)to r2
|
||||
lui v1,0x100 ;0100 0000 flushcache
|
||||
lui at,0x1f80 ;scrathcpadStart
|
||||
sw v1,0x388(at) ;save 0x01 00 00 00 to end of 1st CHAR chain
|
||||
setY1:
|
||||
move s8,s2 ; r18 to r30 (y) !!!!!!!!!!!!!!!!!!!
|
||||
lh r5,0xa0(gp) ;for futher sprite X calc
|
||||
sh t0,0x18(sp)
|
||||
sh v0,0x1a(sp) ;SAVE CONCAT 013001f0 to stack
|
||||
lw r4,0x18(sp) ;LOAD 013001f0 from stack
|
||||
lw v0,0x1c(sp) ; r2 = 000c0002 from stack
|
||||
sw r4,0x8(r7) ;SAVE 013001f0 TO SCRATCH
|
||||
sw v0,0xc(r7) ;=>DAT_1f800354 r2 - 000c0002 to 1st char (to r7+0c)
|
||||
|
||||
lui v0,0x8001 ;load 80010000 to r2
|
||||
|
||||
;4bit table pattern
|
||||
.include "4bitPattern.asm"
|
||||
|
||||
; Copy Sprite DMA Command Forming
|
||||
li v0,0x4
|
||||
sb v0,0x3(s3) ; 04 00 00 00 to 3d0 (sb 04 to 3d3) CHAIN LENGTH
|
||||
li v0,0x64
|
||||
sb v0,0x7(s3) ;sb 64 to 3d7 (copySpriteCommand)
|
||||
li v0,0x80
|
||||
sb v0,0x4(s3)
|
||||
sb v0,0x5(s3)
|
||||
sb v0,0x6(s3) ;make 80 80 80 64 (3d4,5,6,7)
|
||||
bgez r5,LAB_800194fc
|
||||
SetX1:
|
||||
sh s1,0x20(sp) ;store X half to sp+10 !!!!!!!!!!!!!!!!!
|
||||
addiu t0,r5,0x3f
|
||||
LAB_800194fc: ;decoding coords for source sprite
|
||||
sra v0,t0,0x6 ;r2 = r6 >> 6 = 4
|
||||
sll v0,v0,0x6 ;r2 << 6 = 100
|
||||
subu v0,r5,v0 ;r2 = r6 - r2 = 30
|
||||
lh v1,0xa2(gp) ;r3 = load Y half from mem
|
||||
sll v0,v0,0x2 ;r2 << 2
|
||||
sb v0,0xc(s3) ; >DAT_1f8003dc ;STORE RECT SRC CHAR SPRITE X BYTE
|
||||
bgez v1,LAB_80019520 ;if Y r3>=0 - branch & r2=r3
|
||||
move v0,v1
|
||||
addiu v0,v1,0xff ;else r2 = ff - r3
|
||||
LAB_80019520:
|
||||
sra v0,v0,0x8
|
||||
sll v0,v0,0x8
|
||||
subu v0,v1,v0
|
||||
sb v0,0xd(s3) ; >DAT_1f8003dd ;STORE RECT SRC CHAR SPRITE Y BYTE
|
||||
lhu v1,0xa8(gp)
|
||||
;DIFF BETWEEN VERSs::::::::::::::::::::::
|
||||
li v0,0x8 ; r2 = 8 Sprite WIDTH
|
||||
sh v0,0x10(s3) ; 3e0 - 0008 save
|
||||
sh v1,0xe(s3);=>DAT_1f8003de ; *3de = r3 = 7df3 CLUT of RECT
|
||||
li v0,0xc ; r2 = c Sprite HEIGTH
|
||||
sh v0,0x12(s3) ; 3e2 - 000c save
|
||||
|
||||
;TEXT READ START
|
||||
lbu r4,0x0(s6) ;MAIN READ CHAR COMMAND - Load Byte Unsigned
|
||||
nop
|
||||
addiu s6,s6,0x1 ;Shift read address +1 byte
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;CHAR CHECK CUTTED!
|
||||
lui s1,0x8008 ;load 80080000 to r17
|
||||
addiu s5,s1,-0x4930 ;r21 = r17-4930= 7b6d0 (tempDMA)
|
||||
lui s0,0xff
|
||||
ori s0,s0,0xffff ;s0 = 00 ff ff ff
|
||||
lui s7,0x8000 ;r3 = 8000 0000
|
||||
NextChar:
|
||||
addiu r4,r4,-0x20 ;Shift unprintable symbols
|
||||
|
||||
|
||||
|
||||
li t2, 0xa0 ; минимальное значение оптимизированного кода (a0+20 = 192 (Русская А))
|
||||
sltu v0,r4,t2
|
||||
bne v0, zero, NotOptimized ; проверяем на русский текст и перепрыгиваем на старый режим, если нет.
|
||||
nop
|
||||
|
||||
.include "main_spritecopy.asm"
|
||||
|
||||
|
||||
NotOptimized:
|
||||
|
||||
|
||||
;ОБРАБОТКА ПРОБЕЛОВ
|
||||
|
||||
bne r4,zero,SpaceCheckBranch ;Если не пробел - перепрыгиваем сразу
|
||||
nop
|
||||
|
||||
lui t2,MyAddr
|
||||
lh v0,-0xE(t2) ;Load my temp CHAR COUNTER for check
|
||||
nop
|
||||
lh t3,-0x10(t2)
|
||||
addiu v0,v0,1 ;overall chars+1
|
||||
beq v0,t3,SpaceCheckBranch ;is last char - пробел не проверяем!
|
||||
nop
|
||||
|
||||
sh v0,-0xE(t2) ;Save charcount += 1
|
||||
lbu r4,0x0(s6) ;LOAD NEXT CHAR
|
||||
nop
|
||||
j NextChar
|
||||
addiu s6,s6,0x1 ;Shift read address +1 byte
|
||||
|
||||
|
||||
SpaceCheckBranch:
|
||||
|
||||
|
||||
|
||||
jal makeCharPixelsCustom ;MAKE SMALL CHAR IN SCRATCH ___ CUSTOM ROUTINE
|
||||
clear r18
|
||||
|
||||
; Coords XY init
|
||||
lw v0,0xb0(gp); =>DAT_8007b240_parms load r2 from r28+0b0 (7b240)(Xoffs)
|
||||
lui t2,MyAddr
|
||||
lh v1,-0xE(t2) ;Load my temp CHAR COUNTER for check
|
||||
; lhu v1,0x4(r20) ; current char = r3 = half *DMAAddr + 4
|
||||
addiu v0,v0,0x6 ; 0x06 * 6px btw letters!
|
||||
|
||||
|
||||
mult v1,v0 ; r3*r2 = xOffs*charNum
|
||||
|
||||
|
||||
|
||||
lui t2,0xff00 ; r10 = ld upper ff00 = ff000000
|
||||
move t4,r20 ; r12 = r20 (params)
|
||||
addiu t3,sp,0x10 ; r11 = sp + 10 = 807ffe50
|
||||
move t1,r20 ; r12 = r20 (params again)
|
||||
GetY:
|
||||
sh s8,0xa(s3) ; DAT_1f8003da *r19(1st scr DMA)+0a = r30 (Y??) !!!!!!!!!!!!!!!!
|
||||
GetX:
|
||||
lhu t5,0x20(sp) ; r13 = ld half (sp+20) = 003A ---X from sp+20 !!
|
||||
mflo t6 ; r14 = lo
|
||||
addu v0,t5,t6 ; r2 = r13 + r14 = X + Offset
|
||||
sh v0,0x8(s3) ;DAT_1f8003d8 save r2 half to 1f8003d8 = X (3A) !!!!!!!!!!!!!!!!
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IF Mode is not 0 = load 2 to page counter
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PageLoop:
|
||||
;MAKING COPYSPRITE CHAIN
|
||||
lw v0,-0x4930(s1); r2 = *freeChainAddr
|
||||
nop
|
||||
and r4,v0,t2 ; r4 = r2 & ff00..
|
||||
and v0,v0,s0 ; r2 & 00FFFFFF
|
||||
or r5,v0,s7 ; r5 = r2 or r23 (80000000) = 801ADF10
|
||||
lw v0,0x4(s5) ; CmdCounter r2 = *7b6d0+4 = 705
|
||||
lw v1,0x0(r5) ; r3 = New Free ChainAddr
|
||||
addiu v0,v0,-0x1 ; r2 -= 1 Counter Down
|
||||
and v1,v1,s0 ; r3 & 00FFFFFF cut begin byte
|
||||
or r4,r4,v1 ; r4 & r3 = ff......
|
||||
sw v0,0x4(s5) ; CmdCounter save DMA Counter
|
||||
sw r4,-0x4930(s1); freeChain save new freeChain
|
||||
CopyCmdFromScratch:
|
||||
; CopyScriptChain copy from scratch
|
||||
|
||||
|
||||
contStandartDMA:
|
||||
lui t6,0x500 ; set 4 commands in next chain
|
||||
nop
|
||||
sw t6,0x0(r5) ; set 5 commands
|
||||
nop
|
||||
lui t6, 0xe100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
ori t6,0x0234 ;;;;;;;make changepage command in every command to standart
|
||||
sw t6,0x4(r5) ;store it before all 6400000 command
|
||||
|
||||
addiu r5,4 ;SHIFT DEST ADDR
|
||||
|
||||
|
||||
lw t7,0x4(s3) ;>DAT_1f8003d4 r15 = 64808080 - CopySpriteCmd
|
||||
lw t8,0x8(s3) ;>DAT_1f8003d8 r24 = 001500d1 - xy screen coords
|
||||
lw t5,0xc(s3); >DAT_1f8003dc r13 = 7fd3f0c0 (CLUT & tex coord page)
|
||||
|
||||
sw t7,0x4(r5) ; *r5+4 = r15
|
||||
sw t8,0x8(r5) ; *r5+8 = r24
|
||||
sw t5,0xc(r5) ; *r5+c = r13
|
||||
lw t6,0x10(s3);>DAT_1f8003e0 r14 = 000c0008 - spritesize after copy
|
||||
nop
|
||||
sw t6,0x10(r5) ; *r5+10 = r14 - LAST COMMAND SAVE
|
||||
|
||||
addiu r5,-0x4 ;SHIFT DEST ADDR MINUS
|
||||
|
||||
|
||||
clear r25 ;clearing r25 (reset current chars status)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
lw v1,0x18(t1) ;r3 = *r9+18 (next param???)
|
||||
lw v0,0x0(r5) ; r2 = *cur New Chainaddr
|
||||
lw v1,0x0(v1) ; r3 = *r3
|
||||
and v0,v0,t2 ; r2 & ff000000
|
||||
and v1,v1,s0 ;r3 & 00FFFFFF
|
||||
or v0,v0,v1 ; r2 | r3 = 04FFFFFF - commands with FFFFFF
|
||||
sw v0,0x0(r5) ; *curChainAddr r5 = r2 (upd ..04 with ..FF04)
|
||||
lw r4,0x18(t1) ; r4 = *r8+18 (first chain addr?)
|
||||
nop
|
||||
lw v0,0x0(r4) ; r2 = *r4 FIRST CHAIN LINK TO NEXT??
|
||||
and v1,r5,s0 ; r3 = r5 (cur chain) & 00FFFFFF
|
||||
and v0,v0,t2 ; r2 & FF000000
|
||||
or v0,v0,v1 ; r2 | r3 = last chain adr w 10&....
|
||||
sw v0,0x0(r4) ; *r4 = r2 FIRST CHAIN NEXT ADDR???
|
||||
sw r5,0x18(t1) ;t0->t1 ; r5 = *r8+18 curChainAddr
|
||||
|
||||
|
||||
lhu v0,0x4(t4) ;t1->t4 r2 = half (DMA params)+4 (charCounter)
|
||||
nop
|
||||
bne v0,zero,NotFirstChar ; if CharCount<>0 then Goto...
|
||||
nop
|
||||
sw r5,0x28(t1) ;t0->t1 ;*curChain+28 = currentChainAddr
|
||||
sw t8,0xc(t4) ;t1->t4 ; Params+0c = save half X STORE COORDS
|
||||
|
||||
clear v0
|
||||
sb v0,-0x1(r20) ;store first char offset for moving string (is first in new type)
|
||||
;sh v0,-0x8(t4) ;store first char offset for moving string (is first in new type)
|
||||
nop
|
||||
|
||||
;sh s2,0xe(t4) ;t1->t4 ;Params+0e = save half Y
|
||||
NotFirstChar:
|
||||
lui r5,0x1f80 ;;;;;;;;;;;;;;;;;;;;;;;ADDRESS OF CHAR HERe ---> SLL CHARNUM, 6
|
||||
|
||||
lw v0,-0x4930(s1);>8007b6d0_freeChain r2 = *nextFreeChain
|
||||
ori r5,r5,0x348 ; r5 | 1f800348 = Scratch CharData
|
||||
and r4,v0,t2 ; r4 = r2 & FF000000
|
||||
and v0,v0,s0 ; r2 & 00FFFFFF
|
||||
or r7,v0,s7 ;t4->s7 (800...) ; r7 = r2 | r12 = nextChain & 80...
|
||||
move r6,r7 ; r6 = r7 (nextChain)
|
||||
lw v0,0x4(s5) ; CmdCounter r2 = DMA Counter
|
||||
lw v1,0x0(r7) ; r3 = New Free ChainAddr / currHeader Addr
|
||||
addiu v0,v0,-0x1 ; r2 -= 1 Counter Down
|
||||
and v1,v1,s0 ; r3 & 00FFFFFF cut commandCount / currHeader
|
||||
or r4,r4,v1 ; r4 & r3 = ff......
|
||||
sw v0,0x4(s5);>DAT_8007b6d4_CmdCounter save DMA Counter
|
||||
andi v0,r7,0x3 ; r2 = r7 & 3 (check destAddr MOD 4)
|
||||
|
||||
lui t3,0x1f80
|
||||
ori t3,t3,0x388 ; Scratch DMAChain CharEndAddr
|
||||
|
||||
beq v0,zero,Copy16Bytes ; if r7 MOD 4 = 0 then Branch
|
||||
sw r4,-0x4930(s1);>8007b6d0_freeChain save new freeChain
|
||||
|
||||
;;;;;;;;;;;;;;;Copy from ScratchPad To Chain
|
||||
|
||||
CopyBy2Bytes:
|
||||
lwl t6,0x3(r5) ; if r7 mod4 <> 0 - копируем по 2 байта
|
||||
lwr t6,0x0(r5);>DAT_1f800348
|
||||
lwl t7,0x7(r5)
|
||||
lwr t7,0x4(r5);>DAT_1f80034c
|
||||
lwl t8,0xb(r5)
|
||||
lwr t8,0x8(r5);>DAT_1f800350
|
||||
lwl t5,0xf(r5)
|
||||
lwr t5,0xc(r5);>DAT_1f800354
|
||||
swl t6,0x3(r6)
|
||||
swr t6,0x0(r6)
|
||||
swl t7,0x7(r6)
|
||||
swr t7,0x4(r6)
|
||||
swl t8,0xb(r6)
|
||||
swr t8,0x8(r6)
|
||||
swl t5,0xf(r6)
|
||||
swr t5,0xc(r6)
|
||||
addiu r5,r5,0x10
|
||||
bne r5,t3,CopyBy2Bytes
|
||||
addiu r6,r6,0x10
|
||||
j last4BytesCopy
|
||||
nop
|
||||
Copy16Bytes:
|
||||
lw t6,0x0(r5);>DAT_1f800348 r5 - curScratchAddr,r6 -cur DMAAddr
|
||||
lw t7,0x4(r5)
|
||||
lw t8,0x8(r5)
|
||||
lw t5,0xc(r5)
|
||||
sw t6,0x0(r6)
|
||||
sw t7,0x4(r6)
|
||||
sw t8,0x8(r6)
|
||||
sw t5,0xc(r6)
|
||||
addiu r5,r5,0x10
|
||||
bne r5,t3,Copy16Bytes
|
||||
addiu r6,r6,0x10
|
||||
last4BytesCopy:
|
||||
lwl t6,0x3(r5) ; r14 left = 2 bytes from *r5+3
|
||||
lwr t6,0x0(r5);>DAT_1f800358 r14 right = 2 bytes from *r5
|
||||
nop
|
||||
swl t6,0x3(r6) ; *r6 = r14 left
|
||||
swr t6,0x0(r6) ; *r6+3 = r14 right
|
||||
; linking DMA char+copysprite
|
||||
|
||||
|
||||
lw v1,0x18(t1) ; r3 = current DMACopySprite Chain
|
||||
lw v0,0x0(r7) ; r2 = current CharChainCommands
|
||||
lw v1,0x0(v1) ; r3 = *r3 (comNum+FFFFFF(nextLink))
|
||||
and v0,v0,t2 ; r2 & FF.....
|
||||
and v1,v1,s0 ; r3 & 00FFFFFF
|
||||
or v0,v0,v1 ; r2 | r3 = 10FFFFFF(cmdNum&FF..)
|
||||
sw v0,0x0(r7) ; *r7 = r2 saveCurChainCmd
|
||||
lw r4,0x18(t1) ; r4 = r8+18h - cur CopySpriteCmd hdrAddr
|
||||
nop
|
||||
lw v0,0x0(r4) ; r2 = *r4 (04FFFFFF)
|
||||
and v1,r7,s0 ; r3 = r7 & 00FFFFFF (Copying Cur Char Chain)
|
||||
and v0,v0,t2 ; r2 & FF000000 (04000000) CmdCount
|
||||
or v0,v0,v1 ; R2 | R3 = 04(cmd)..+CharChainAddr
|
||||
sw v0,0x0(r4) ; *r4 = r2 = FullCommand With Link!!!
|
||||
; (04..CharAddr) + SpriteCopyCommand
|
||||
sw r7,0x18(t1) ; *r8+18 = Last Char Chain!
|
||||
addiu t1,t1,0x4 ; r8 (params) += 4 (shift params for NextPage)
|
||||
addiu v0,t4,0x8 ; r2 = r9+8 (shift first chain param for Page)
|
||||
sltu v0,t1,v0 ; r2 = r8 < r2(r9+8) (first page pass)
|
||||
bne v0,zero,PageLoop ; if r2<>0 (r8<r2) then goto Next Page Loop
|
||||
nop
|
||||
|
||||
|
||||
|
||||
OptimizedSpriteCopyEnd:
|
||||
|
||||
;;;CharCount + Check
|
||||
lhu v0,0x4(r20) ; r2 = current charDMACount
|
||||
nop
|
||||
addiu v0,v0,0x1 ; a += 1
|
||||
sh v0,0x4(r20) ;save DMAcounter to chain
|
||||
nop
|
||||
|
||||
|
||||
;DMA OVERFLOW CHECK!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (8007b6d4)
|
||||
lui t3,MyAddr
|
||||
lw v0,0x4(s5) ; CmdCounter r2 = DMA Counter
|
||||
lhu v1,-0xC(t3) ;v1 = 8008fff4 = minimum cmd counter
|
||||
nop
|
||||
sltu v0,v0,v1 ; v0 = v0 < V1 ?
|
||||
bne v0,zero,TextEnd ;if v0<>0 then Goto End Text (DMA OVERFLOW!!!!)
|
||||
nop
|
||||
|
||||
|
||||
|
||||
|
||||
;lui t3,MyAddr
|
||||
lhu v0,-0xE(t3) ; r2 = charCount In string
|
||||
lhu v1,-0x10(t3) ; r3 = My charOverAll In string
|
||||
addiu v0,v0,0x1 ; a += 1
|
||||
lbu r4,0x0(s6) ; load next Char to r4 (byte)
|
||||
|
||||
sh v0,-0xE(t3) ; store myCharCounter to MyAddr-E
|
||||
addiu s6,s6,0x1 ;Shift CharAddr
|
||||
|
||||
bne v0,v1,NextChar ; if currentChar<>OverallChar - branch
|
||||
nop
|
||||
TextEnd:
|
||||
clear r18
|
||||
lui s3,0x8008
|
||||
addiu s5,s3,-0x4930 ; r19 = 80080000, r21 = 7b6d0
|
||||
lui s1,0xff ; r17 = 00ff0000
|
||||
ori s1,s1,0xffff ; r17 & ffff = 00ff ffff
|
||||
move s0,r20 ; r16 = r20 (currentTLineParam)
|
||||
clear r5
|
||||
clear r25 ;clearing r25 (reset current chars status)
|
||||
PageTLoop: ;ALMOST FINISH!!!!
|
||||
li r6,0x1 ; r6=1
|
||||
addu r18,r18,r6 ; r18(Counter) += r6
|
||||
lui v0,0x8000 ; r2 = 80000000
|
||||
lui r4,0xff00 ; r4 = ff00 0000
|
||||
lw v1,-0x4930(s3);>8007b6d0_freeChain r3 = next free Chain (*7b6d0)
|
||||
;;;;;;;;;;;;;;;;
|
||||
lw r7,0xa4(gp);>DAT_8007b234 r7 = Texture page = 34
|
||||
beq r25,zero, lastTextPageDefaul
|
||||
nop
|
||||
li r7,0x3f ;IF MODE<>0 then TexturePage = 23F
|
||||
;;;;;;;;;;;;;;;''
|
||||
lastTextPageDefaul:
|
||||
|
||||
and v1,v1,s1 ; r3 & 00FFFFFF
|
||||
or v1,v1,v0 ; r3 | r2 = 80.....
|
||||
sw v1,0x30(s0) ; store last free ChAddr to DMAParams
|
||||
lw v0,-0x4930(s3);>8007b6d0_freeChain r2 = next free chain
|
||||
lw v1,0x0(v1) ; r3 = *r3 = last chain - made one more chain
|
||||
and v0,v0,r4 ; a2 & ff000000
|
||||
and v1,v1,s1 ; r3 & 00FFFFFF
|
||||
lw r4,0x4(s5);>DAT_8007b6d4_CmdCounter r4 = DMA Counter
|
||||
or v0,v0,v1 ; r2 | r3
|
||||
sw v0,-0x4930(s3);>8007b6d0_freeChain new free chain addr add to *7b6b0
|
||||
addiu r4,r4,-0x1 ; DMA Cunter =- 1
|
||||
sw r4,0x4(s5);>DAT_8007b6d4_CmdCounter Store DMA Count
|
||||
lw r4,0x30(s0) ; r4 = *DMA params + 30 = Start Of DMA Chain
|
||||
jal SetDrawTPage ; Set DRAW PAGE
|
||||
addiu s0,s0,0x4 ; r16 += 4 - Shgift DMAParams for next Page
|
||||
sltiu v0,r18,0x2 ; r2 = r18<2
|
||||
bne v0,zero,PageTLoop ; if not r2 then goto Loop
|
||||
clear r5 ; r5 = 0
|
||||
move v0,r20 ; r2 = DMAParamsMain
|
||||
|
||||
lw ra,0x4c(sp)
|
||||
lw s8,0x48(sp)
|
||||
lw s7,0x44(sp)
|
||||
lw s6,0x40(sp)
|
||||
lw s5,0x3c(sp) ;restoring regs from Stack
|
||||
lw s4,0x38(sp)
|
||||
lw s3,0x34(sp)
|
||||
lw s2,0x30(sp)
|
||||
lw s1,0x2c(sp)
|
||||
lw s0,0x28(sp)
|
||||
|
||||
jr ra
|
||||
addiu sp,sp,0x50
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chars / 2 Return Func
|
||||
|
||||
.include "charload.asm"
|
||||
|
||||
.include "charCalcs.asm"
|
||||
|
||||
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 0x8001a7dc
|
||||
;;;;;text patch for Text MOVING & OFFSET
|
||||
|
||||
|
||||
;make branch videocomand reading
|
||||
|
||||
|
||||
chainSpriteCheck:
|
||||
lbu v1,0x7(r5)
|
||||
li r27, 0xe1
|
||||
beq r27, v1, ShiftedCommandCheck
|
||||
nop
|
||||
j 0x8001a7e4 ;return
|
||||
nop
|
||||
|
||||
ShiftedCommandCheck:
|
||||
lbu v1,0xb(r5) ;my new shifted sprite command
|
||||
li r27, 0x64
|
||||
beq r27, v1, ShiftedCommandCheck2
|
||||
nop
|
||||
lbu v1,0x7(r5)
|
||||
nop
|
||||
j 0x8001a7e4 ;return
|
||||
nop
|
||||
|
||||
ShiftedCommandCheck2:
|
||||
lbu v1,0xb(r5)
|
||||
|
||||
goingback:
|
||||
j 0x8001a7e4 ;return
|
||||
nop
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 0x8001aa8c
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;text patch for Text MOVING & OFFSET
|
||||
getRightCoords:
|
||||
; lw r5, 0x28(t1) ;get chain addr from params
|
||||
;lhu r3, 0xc(t2) ;get X from params
|
||||
|
||||
lbu r4,0x7(r5)
|
||||
li r2,0xe1 ;if my new 5 commands?
|
||||
|
||||
bne r2,r4,oldStyleCommand
|
||||
nop
|
||||
addiu r5,4
|
||||
|
||||
oldStyleCommand:
|
||||
lhu r2, 0x8(r5) ;getting cur x (r5 is chain addr) --------!
|
||||
lhu r4, 0xe(t2) ;;getting Y from param
|
||||
subu r3,r3,r2 ; get X offset
|
||||
move r12,r3 ; Saving X offset in r12
|
||||
lhu r2, 0xa(r5) ;getting cur y from chain ----------!
|
||||
sll r3,r3,0x10 ;Shift r3 <<< 10 bits
|
||||
;add r2,r23 ;add
|
||||
subu r2,r4,r2 ;get Y offset
|
||||
|
||||
;clear r23
|
||||
returnToInnocence:
|
||||
j 0x8001aaa8 ;continue!
|
||||
nop
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 0x8001ab2c
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
movesprite:
|
||||
lbu r2,0x07(r4)
|
||||
nop
|
||||
beq r2, t7, simpleSpriteCmd ;if r2 == t7 = 64
|
||||
nop
|
||||
beq r2, t6, simpleSpriteCmd ;if r2 == t6 = 66 --simple move
|
||||
nop
|
||||
li r3, 0xe1
|
||||
beq r2, r3, IsThisMyChain ;ReallyMyChain
|
||||
nop
|
||||
j exitmovesprite
|
||||
nop
|
||||
|
||||
ReallyMyChain:
|
||||
lbu r2,0x03(r4)
|
||||
li r3, 0x05
|
||||
beq r2, r3, IsThisMyChain
|
||||
nop
|
||||
j exitmovesprite
|
||||
nop
|
||||
|
||||
IsThisMyChain:
|
||||
lbu r2,0x0b(r4)
|
||||
nop
|
||||
beq r2, t7, notSimpleSpriteCommand ;is this my E1 + 64?
|
||||
nop
|
||||
j exitmovesprite
|
||||
nop
|
||||
|
||||
notSimpleSpriteCommand:
|
||||
; lbu t7,-0x1(t2) ;get offset XY
|
||||
lhu r2,0x0c(r4) ;load cur sprite X
|
||||
sra t6, t7, 0x4 ;shift 12 >> 4 = 1 pix (OR 0)
|
||||
addu r2,r2,t4 ;add chain offset
|
||||
;addu r2,r2,t6 ;adding myMainOffset X
|
||||
sh r2,0xC(r4)
|
||||
|
||||
|
||||
lhu r3,0xE(r4)
|
||||
andi t6, t7, 0xF ;get Y offset
|
||||
addu r3,r3,t3
|
||||
;addu r3,r3,t6 ;adding myMainOffset (1,2,0, etc...)
|
||||
addiu r3,r3,2
|
||||
|
||||
sh r3,0xE(r4)
|
||||
nop
|
||||
j exitmovesprite
|
||||
nop
|
||||
|
||||
simpleSpriteCmd:
|
||||
lhu r2,0x8(r4)
|
||||
lhu r3,0xA(r4)
|
||||
addu r2,r2,t4
|
||||
addu r3,r3,t3
|
||||
sh r2,0x8(r4)
|
||||
sh r3,0xA(r4)
|
||||
nop
|
||||
exitmovesprite:
|
||||
|
||||
j 0x8001ab5c ;EXIT TO MAIN routine
|
||||
|
||||
;;;;;;;;;;;;;;
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SET TEXT BRIGHTNESS
|
||||
|
||||
setTextBrightness:
|
||||
lbu r2,0x07(v1)
|
||||
nop
|
||||
beq r2, t1, simpleBright ;if r2 == t7 = 64
|
||||
nop
|
||||
beq r2, t0, simpleBright ;if r2 == t6 = 66 --simple move
|
||||
nop
|
||||
li r15, 0xe1
|
||||
beq r2, r15, ItsMyBrigth1 ;ReallyMyChain
|
||||
nop
|
||||
j exitbrightsprite
|
||||
nop
|
||||
|
||||
|
||||
ItsMyBrigth1:
|
||||
lbu r2,0x0b(v1)
|
||||
nop
|
||||
beq r2, t1, ItsMyBrigthMake ;is this my E1 + 64?
|
||||
nop
|
||||
j exitbrightsprite
|
||||
nop
|
||||
|
||||
ItsMyBrigthMake:
|
||||
sb s1,0x8(v1)
|
||||
sb s2,0x9(v1)
|
||||
sb s3,0xa(v1)
|
||||
j 0x8001ad6c
|
||||
nop
|
||||
|
||||
simpleBright:
|
||||
sb s1,0x4(v1)
|
||||
sb s2,0x5(v1)
|
||||
sb s3,0x6(v1)
|
||||
|
||||
exitbrightsprite:
|
||||
j 0x8001ad6c
|
||||
nop
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
;Patching main code
|
||||
.org 0x8001a7dc
|
||||
;lbu v1,0x7(r5) ;- ORIGINAL load current command
|
||||
j chainSpriteCheck
|
||||
nop
|
||||
|
||||
.org 0x8001aa8c
|
||||
;lhu r2, 0x8(r5) ;getting cur x (r5 is chain addr) --------!
|
||||
;lhu r4, 0xe(t2) ;;getting Y from prarm param
|
||||
j getRightCoords
|
||||
nop
|
||||
|
||||
.org 0x8001ab2c
|
||||
;lbu v0,0x07(a0)
|
||||
j movesprite ;movingsprite routine
|
||||
nop
|
||||
|
||||
|
||||
.org 0x8001ad48
|
||||
;lbu v0,0x07(a1)
|
||||
j setTextBrightness ;textbrightness routine
|
||||
nop
|
||||
.close
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;; BOSSNAMECOPY
|
||||
;.include "battle_patch.asm"
|
||||
|
||||
|
||||
|
||||
|
||||
.include "txtpatches.asm" ;misc text patches
|
||||
|
||||
; COMPILE COMMAND: ./armips -temp 123 main.asm
|
||||
232
main_spritecopy.asm
Normal file
232
main_spritecopy.asm
Normal file
@@ -0,0 +1,232 @@
|
||||
###############################################################
|
||||
#
|
||||
# OPTIMIZED RUSSIAN TEXT
|
||||
#
|
||||
#
|
||||
|
||||
|
||||
|
||||
# Coords XY init
|
||||
lui t2,MyAddr
|
||||
|
||||
addiu v0,r4,-0xa0 #shift char code for A is 0
|
||||
sll v0,2 #charcode * 4
|
||||
ori v1,r17,0xf900 #current char params start
|
||||
|
||||
addu v0,v0,v1 # shift to current char params addr
|
||||
lw t7,0x0(v0) #t7 = CURRENT CHAR PARAMS load
|
||||
|
||||
addiu t8,t2,-0x500 #dest temp scratch addr 8008fb00
|
||||
clear r18
|
||||
|
||||
|
||||
|
||||
lh v1,-0xE(t2) #Load my temp CHAR COUNTER for check
|
||||
lhu t5,0x20(sp) # r13 = ld half (sp+20) = 003A ---X from sp+20
|
||||
|
||||
sll t6,v1,0x1 #t6 = charcount*2
|
||||
addu v1,t6,v1 #v1 = t6+v1 = charcount * 3
|
||||
sll v1,0x1 #v1 * 2 = charcount * 6
|
||||
addu v0,v1,t5 #v0 = INIT X + CURCHAR * 6
|
||||
|
||||
sh v0,0x8(s3) #DAT_1f8003d8 save r2 half to 1f8003d8 = X (3A) !!!!!!!!!!!!!!!!
|
||||
#SaveYinScratch:
|
||||
sh s8,0xa(s3) # DAT_1f8003da *r19(1st scr DMA)+0a = r30 (Y??) !!!!!!!!!!!!!!!!
|
||||
|
||||
|
||||
#lw t5,0x0(s3) #copying COMMAND 00 00 00 04
|
||||
#nop
|
||||
lui t5,0x400 #load 4 commands in command
|
||||
nop
|
||||
sw t5,0x0(t8) #paste to tempChain...
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
add5command:
|
||||
lui t5, 0x0500 # 'its 5 commands'
|
||||
sw t5,0x0(t8) #paste...
|
||||
lui t6, 0xe100#################################
|
||||
ori t6,0x023f #e100023f - TextPage = interfaceTim - BEFORE LAST COMMAND
|
||||
sw t6,0x4(t8) #paste...
|
||||
addiu t8, 0x4 #SHIFT temp DMA addr +4 (After TexPage)
|
||||
|
||||
|
||||
|
||||
|
||||
IsRusChar:
|
||||
|
||||
lw t6,0x4(s3) #copying COMMAND 80 80 80 64
|
||||
nop
|
||||
sw t6,0x4(t8) #paste...
|
||||
|
||||
#######################DEST X AND Y HERE@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
lh t5,0x8(s3) #DEST X HERE
|
||||
nop # Need to recalculate X
|
||||
addiu t5, 0x1 #right 1 pixel >
|
||||
sh t5,0x8(t8) #paste DEST X
|
||||
|
||||
|
||||
lh t6,0xA(s3) #load dest Y
|
||||
sra v1, t7, 24 ##>> SHIFT 24 bits = Y vertical offset
|
||||
addu t6,t6,v1 #shift dest y
|
||||
#addiu t6,0x2
|
||||
sh t6,0xA(t8) #save dest y
|
||||
|
||||
|
||||
Ori v1,v1,0x10 #Concat X offs (1<< ) and Y vertical offset - 0x1(2)?
|
||||
sb v1,-0x8(t2) #Store coords to temp
|
||||
|
||||
|
||||
|
||||
li v1, 0xffff
|
||||
and v0, t7, v1 #truncate SRC (FFFF) coords from myTable
|
||||
sh v0,0xc(t8) #Saving source coords to chain
|
||||
|
||||
|
||||
|
||||
lbu v0, 0xac(gp) #load color
|
||||
li v1, 0x3d #initial CLUT X
|
||||
addiu v0,-0x1 # color-1
|
||||
sra v0, 1 # color /2
|
||||
addiu v0, 0x1b0 #vertical color shift in VRAM
|
||||
sll v0, 6 #vertical shift << 6 bits
|
||||
or t6,v0,V1 # vertical<<6 & horis = CLUT
|
||||
|
||||
|
||||
|
||||
sh t6,0xe(t8) #save clut
|
||||
|
||||
li v1,0xff
|
||||
li t5,6
|
||||
sh t5,0x10(t8) #paste...
|
||||
sra v0, t7, 16 #>> shift by 16 bit right
|
||||
and t5, v0, v1 #truncate (AND FF)
|
||||
|
||||
#NEED TO MAKE DEST SIZE IN T5
|
||||
sh t5,0x12(t8) #paste...
|
||||
|
||||
|
||||
|
||||
clear t6
|
||||
sw t6,0x14(t8)############################################
|
||||
|
||||
#Fixing text coords
|
||||
|
||||
#lw t7,0x8(t8) #LOAD X,Y TO T7 FOR STORE IN PARAMS!!
|
||||
lw t7,0x8(s3) #LOAD ORIGINAL X,Y TO T7 FOR STORE IN PARAMS!!
|
||||
nop
|
||||
|
||||
|
||||
|
||||
#MAIN COMMAND PAGELOOP INIT
|
||||
move t4,r20 # r12 = r20 (params)
|
||||
move t1,r20 # r12 = r20 (params again)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PageLoop2:
|
||||
|
||||
lui t2,0xff00 # r10 = ld upper ff00 = ff000000 #DECREASE COUNTER & GET CHAIN ADDR
|
||||
lw v0,-0x4930(s1)# r2 = *freeChainAddr
|
||||
nop
|
||||
and r4,v0,t2 # r4 = r2 & ff00..
|
||||
and v0,v0,s0 # r2 & 00FFFFFF
|
||||
or r5,v0,s7 # r5 = r2 or r23 (80000000) = 801ADF10
|
||||
lw v0,0x4(s5) # CmdCounter r2 = *7b6d0+4 = 705
|
||||
lw v1,0x0(r5) # r3 = Next Free ChainAddr
|
||||
addiu v0,v0,-0x1 # r2 -= 1 Counter Down
|
||||
and v1,v1,s0 # r3 & 00FFFFFF cut begin byte
|
||||
or r4,r4,v1 # r4 & r3 = ff......
|
||||
sw v0,0x4(s5) # CmdCounter save DMA Counter
|
||||
sw r4,-0x4930(s1)# freeChain save new freeChain
|
||||
|
||||
|
||||
lui t8,0x8009
|
||||
addiu t8,t8,-0x500 #reset temp dma to 8008fb00
|
||||
CopyCmdFromTemp:
|
||||
lw t5,0x0(t8) #copying chain (comand count)
|
||||
lw t6,0x4(t8) #copying (comand id)
|
||||
sw t5,0x0(r5) #paste...
|
||||
sw t6,0x4(r5) #paste...
|
||||
lw t5,0x8(t8) #copying chain (YyyyXxxx)
|
||||
lw t6,0xc(t8) #copying (clutYyXx) #COPYING FROM TEMP TO MAIN CHAIN
|
||||
sw t5,0x8(r5) #paste...
|
||||
sw t6,0xc(r5) #paste...
|
||||
lw t5,0x10(t8) #copying chain (SizeYSizeX)
|
||||
lw t6,0x14(t8) #copying (TexPage command???)
|
||||
sw t5,0x10(r5) #paste...
|
||||
sw t6,0x14(r5) #paste...
|
||||
|
||||
#need to make TexPage on First letter!
|
||||
|
||||
lhu v0,0x4(t4) #t1->t4 r2 = half (DMA params)+4 (charCounter)
|
||||
nop
|
||||
bne v0,zero,NotFirstCharForLastCommand # if CharCount<>0 then Goto...
|
||||
nop
|
||||
lui v0,0x0600 #6 COMMANDS! ON FIRST LETTER
|
||||
sw v0,0x0(r5)
|
||||
lui t5, 0xe100
|
||||
ori t5, 0x0234
|
||||
sw t5,0x018(r5) #store sixth command e100000234
|
||||
|
||||
|
||||
NotFirstCharForLastCommand:
|
||||
|
||||
#OR SHIFTED COMMAND
|
||||
|
||||
#NEED TO COPY XY TO T8 TO COPY TO PARAMS!!!!
|
||||
#lw t8,0x8(t8)
|
||||
|
||||
###
|
||||
lw v1,0x18(t1) #r3 = *r9+18 (next param???)
|
||||
lw v0,0x0(r5) # r2 = *cur New Chainaddr
|
||||
lw v1,0x0(v1) # r3 = *r3
|
||||
and v0,v0,t2 # r2 & ff000000
|
||||
and v1,v1,s0 #r3 & 00FFFFFF
|
||||
or v0,v0,v1 # r2 | r3 = 04FFFFFF - commands with FFFFFF
|
||||
sw v0,0x0(r5) # *curChainAddr r5 = r2 (upd ..04 with ..FF04)
|
||||
lw r4,0x18(t1) # r4 = *r8+18 (first chain addr?)
|
||||
nop
|
||||
lw v0,0x0(r4) # r2 = *r4 FIRST CHAIN LINK TO NEXT??
|
||||
and v1,r5,s0 # r3 = r5 (cur chain) & 00FFFFFF
|
||||
and v0,v0,t2 # r2 & FF000000
|
||||
or v0,v0,v1 # r2 | r3 = last chain adr w 10&....
|
||||
sw v0,0x0(r4) # *r4 = r2 FIRST CHAIN NEXT ADDR???
|
||||
|
||||
sw r5,0x18(t1) #t0->t1 # r5 = *r8+18 curChainAddr
|
||||
lhu v0,0x4(t4) #t1->t4 r2 = half (DMA params)+4 (charCounter)
|
||||
nop
|
||||
bne v0,zero,NotFirstChar2 # if CharCount<>0 then Goto...
|
||||
nop
|
||||
lui t2,MyAddr
|
||||
lb v0,-0x8(t2) #load offset coords from temp
|
||||
nop
|
||||
sb v0,0x3c(r20) #store first char offset for moving string (is first in new type)
|
||||
#andi v0, 0xF #V0 and F = Y offset
|
||||
|
||||
|
||||
|
||||
sw r5,0x28(t1) #t0->t1 #*curChain+28 = currentChainAddr
|
||||
sw t7,0xc(t4) #t1->t4 # Params+0c = save word X+Y STORE COORDS T7!!!!!
|
||||
|
||||
|
||||
|
||||
|
||||
NotFirstChar2:
|
||||
|
||||
addiu t1,t1,0x4 # r8 (params) += 4 (shift params for NextPage)
|
||||
addiu v0,t4,0x8 # r2 = r9+8 (shift first chain param for Page)
|
||||
sltu v0,t1,v0 # r2 = r8 < r2(r9+8) (first page pass)
|
||||
bne v0,zero,PageLoop2 # if r2<>0 (r8<r2) then goto Next Page Loop
|
||||
nop
|
||||
|
||||
j OptimizedSpriteCopyEnd
|
||||
nop
|
||||
203
txtpatches.asm
Normal file
203
txtpatches.asm
Normal file
@@ -0,0 +1,203 @@
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;
|
||||
;;; Some txt Patches to JAPAN Version to print bi(u)g text smaller
|
||||
;;;
|
||||
|
||||
.open "SLPS_021.00", 0x8000F800
|
||||
|
||||
;Text speed patch (0 - show all text(!!!) - 4 - Normal (Pressed Button - 1))
|
||||
;.org 0x8001bfd4
|
||||
; li r5,0
|
||||
;move a0,s0 ;Original Code
|
||||
|
||||
|
||||
; Main Bigfont size between letters for special codes
|
||||
;.org 0x8001957c
|
||||
; addiu v0,v0,0x6
|
||||
|
||||
;calcNextX Routine (calc X in line after command)
|
||||
;.org 0x8001af38
|
||||
; sll r2,r3,2h ; Its Original - Custom in custom routine
|
||||
|
||||
;dialog start line tabulation
|
||||
;.org 0x8007b195
|
||||
; .byte 0x4 ;pixels
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;Print Routines Calls Replacing
|
||||
|
||||
;main dialog calls from PrintProgramText Routine
|
||||
;.org 0x8001c398
|
||||
; jal ExternalPrint
|
||||
;.org 0x8001c40c
|
||||
; jal ExternalPrint
|
||||
|
||||
;Selection Menu Calls
|
||||
;.org 0x8001d058
|
||||
; jal ExternalPrint
|
||||
;.org 0x8001d0d8
|
||||
; jal ExternalPrint
|
||||
|
||||
;printPlaneTEXT (PlayerName, etc...)
|
||||
;.org 0x8001c688
|
||||
; jal ExternalPrint
|
||||
|
||||
|
||||
|
||||
;custom CheckCharNumToLineEnd for proper Complex Lines Read (charcountread)
|
||||
.org 0x8001aef4
|
||||
j ReturnCharsInString ;custom routine
|
||||
clear v1
|
||||
;j 0x8001af00 ;original code
|
||||
|
||||
;calcnextX Custom
|
||||
|
||||
.org 0x8001af1c
|
||||
; addiu sp,sp,-0x18 ;Original Code
|
||||
; sw ra,0x10(sp)
|
||||
j calcnextXCustom ;PATCHED
|
||||
nop
|
||||
|
||||
.close
|
||||
|
||||
|
||||
|
||||
; COnfiguration Menu Strings Calls
|
||||
.open "1096_J_MENU_Settings_Code.bin", 0x800A2000
|
||||
|
||||
.org 0x800a2658
|
||||
li a1,0x5c
|
||||
.org 0x800a2678
|
||||
jal ExternalPrint ;CONFIGURATION MENU & X Coord
|
||||
.org 0x800a2690
|
||||
jal 0x8001afc0 ;OOOOOPS :))))
|
||||
|
||||
|
||||
.org 0x800a26ac
|
||||
jal ExternalPrint
|
||||
.org 0x800a26e8
|
||||
jal ExternalPrint
|
||||
.org 0x800a298c
|
||||
jal ExternalPrint
|
||||
.org 0x800a29b8
|
||||
jal ExternalPrint
|
||||
.org 0x800a29f4
|
||||
jal ExternalPrint
|
||||
.org 0x800a2a44
|
||||
jal ExternalPrint
|
||||
.org 0x800a2d20
|
||||
jal ExternalPrint
|
||||
.org 0x800a2d4c
|
||||
jal ExternalPrint
|
||||
.org 0x800a2d7c
|
||||
jal ExternalPrint
|
||||
.org 0x800a3090
|
||||
jal ExternalPrint
|
||||
.org 0x800a30cc
|
||||
jal ExternalPrint
|
||||
.org 0x800a35ac
|
||||
jal ExternalPrint
|
||||
.org 0x800a35e0
|
||||
jal ExternalPrint
|
||||
.org 0x800a3624
|
||||
jal ExternalPrint
|
||||
.org 0x800a3658
|
||||
jal ExternalPrint
|
||||
.org 0x800a369c
|
||||
jal ExternalPrint
|
||||
.org 0x800a36d0
|
||||
jal ExternalPrint
|
||||
.org 0x800a3704
|
||||
jal ExternalPrint
|
||||
.org 0x800a3734
|
||||
jal ExternalPrint
|
||||
.org 0x800a3ba8
|
||||
jal ExternalPrint
|
||||
.org 0x800a3bdc
|
||||
jal ExternalPrint
|
||||
.org 0x800a3c20
|
||||
jal ExternalPrint
|
||||
.org 0x800a3c4c
|
||||
jal ExternalPrint
|
||||
.org 0x800a3c90
|
||||
jal ExternalPrint
|
||||
.org 0x800a3cbc
|
||||
jal ExternalPrint
|
||||
.org 0x800a4310
|
||||
jal ExternalPrint
|
||||
.org 0x800a435c
|
||||
jal ExternalPrint
|
||||
|
||||
.close
|
||||
|
||||
|
||||
; CITY PATCHES!
|
||||
|
||||
.open "1119_CITY_CODE_patched_2023.bin", 0x800AB000
|
||||
|
||||
;IN 1119 - 800AD320 (offs 8992) - need to 0,0,0,0 (its shift left 0x1) x3 instead x6 - Text and rect coord
|
||||
;OVERALL X LEFT SHIFT!!!
|
||||
;.org 0x800ad320C:\Downloads\PSX
|
||||
;nop
|
||||
|
||||
;'800AD328 need to 64 instead 128 (text pixels wide x2 instead x4) - rect X WIDE
|
||||
;.org 0x800ad328
|
||||
;sll a1,0x1
|
||||
;'800AD360 (offs 9056)- need 5 instead 6 - pixels for X-offset text from start of rect
|
||||
;.org 0x800ad360
|
||||
;addiu a1,a1,0x5
|
||||
|
||||
|
||||
;check lenght for hiuse names for overallcoords calc
|
||||
.org 0x800ad30c
|
||||
jal RetunCharsToCity
|
||||
|
||||
|
||||
;checklenghth for housename RECT
|
||||
.org 0x800ad3ac
|
||||
jal RetunCharsToCity
|
||||
|
||||
|
||||
.org 0x800af1dc
|
||||
;jal RetunCharsToCityDiv2 ;OR ReturnCharsInString
|
||||
jal 0x8001af1c
|
||||
|
||||
|
||||
.close
|
||||
|
||||
;.org 0x800ad380
|
||||
;jal ExternalPrint
|
||||
;.org 0x800ad400
|
||||
;jal ExternalPrint
|
||||
;.org 0x800b2008
|
||||
;jal ExternalPrint
|
||||
;.org 0x800b21b8
|
||||
;jal ExternalPrint
|
||||
;.org 0x800b2278
|
||||
;jal ExternalPrint
|
||||
|
||||
;district select windows
|
||||
;.org 0x800b1af0
|
||||
; .byte 0x12
|
||||
;.org 0x800b1afc
|
||||
; .byte 0x08
|
||||
|
||||
;.org 0x800b1c3f
|
||||
; .byte 0x00
|
||||
|
||||
;.org 0x800b1c68
|
||||
; .byte 0x4a
|
||||
;.org 0x800b1ca8
|
||||
; .byte 0x4a
|
||||
;.org 0x800b1d4c
|
||||
; .byte 0x4a
|
||||
;.org 0x800b1d94
|
||||
; .byte 0x4a
|
||||
;.org 0x800b1dc0
|
||||
; .byte 0x4a
|
||||
|
||||
;.org 0x800b8d3c
|
||||
;City Districts Table with pointers Here
|
||||
|
||||
|
||||
Reference in New Issue
Block a user