diff --git a/0001_BATTLE_CODE.bin b/0001_BATTLE_CODE.bin index 50c0e1c..854fd5d 100644 Binary files a/0001_BATTLE_CODE.bin and b/0001_BATTLE_CODE.bin differ diff --git a/1119_CITY_CODE_patched_2023.bin b/1119_CITY_CODE_patched_2023.bin index 0fbe2c5..84ffadc 100644 Binary files a/1119_CITY_CODE_patched_2023.bin and b/1119_CITY_CODE_patched_2023.bin differ diff --git a/123.txt b/123.txt new file mode 100644 index 0000000..d818867 --- /dev/null +++ b/123.txt @@ -0,0 +1,918 @@ +; 6 files included +; 1303 lines +; 95 labels +; 0 equations + +; C:\psx\asm\p2is_asm\is_main_grouped.asm +; C:\psx\asm\p2is_asm\complex_strings_copy.asm +; C:\psx\asm\p2is_asm\IS_charload_grouped.asm +; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm +; C:\psx\asm\p2is_asm\charCalcs.asm +; C:\psx\asm\p2is_asm\txtpatches.asm + +FFFFFFFF .psx ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 5 +800542CC setdrawtpage: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 8 +8001B0C8 storecolor: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 9 +8001A070 initcopycharchain: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 10 +8001A08F makecharpixels: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 11 +8001A284 generatesmallchar: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 12 +8001A20C makeshadowsmallchar: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 13 +80019300 printbigdmatext: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 14 +00008009 myaddr: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 16 +FFFFFFFF .open ""C:\\psx\\asm\\p2is_asm\\SLPS_021.00"",0x8000F800 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 18 +8000F800 .org 0x8008F600 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 3 +8008F600 lui r2,-0x7FF7 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 8 +8008F604 sw r4,-0x30(r2) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 9 +8008F608 lhu r3,0x0(r5) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 10 +8008F60C nop ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 11 +8008F610 srl r2,r3,0xD ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 12 +8008F614 bne r2,zero,0x8008F66C ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 13 +8008F618 lhu r3,0x0(r5) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 14 +8008F61C clear r2 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 16 +8008F620 addiu r4,0x2 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 19 +8008F624 next2bytes: ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 20 +8008F624 sb r3,0x0(r4) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 21 +8008F628 addiu r4,0x1 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 22 +8008F62C addiu r5,0x2 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 23 +8008F630 addiu r2,0x1 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 24 +8008F634 lhu r3,0x0(r5) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 25 +8008F638 nop ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 26 +8008F63C srl r3,r3,0xC ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 27 +8008F640 bne r3,zero,0x8008F650 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 28 +8008F644 lhu r3,0x0(r5) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 29 +8008F648 j 0x8008F624 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 30 +8008F64C nop ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 31 +8008F650 savelengthandexit: ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 33 +8008F650 ori r2,0x2000 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 34 +8008F654 lui r3,-0x7FF7 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 35 +8008F658 lw r3,-0x30(r3) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 36 +8008F65C nop ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 37 +8008F660 sh r2,0x0(r3) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 38 +8008F664 jr ra ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 39 +8008F668 move r2,r4 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 40 +8008F66C ismystring: ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 43 +8008F66C lhu r3,0x0(r5) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 44 +8008F670 nop ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 45 +8008F674 andi r3,r3,0xFF ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 46 +8008F678 addiu r3,0x2 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 47 +8008F67C nextmybyte: ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 48 +8008F67C lbu r2,0x0(r5) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 49 +8008F680 nop ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 50 +8008F684 sb r2,0x0(r4) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 51 +8008F688 addiu r4,0x1 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 52 +8008F68C addiu r3,-0x1 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 53 +8008F690 bne r3,zero,0x8008F67C ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 54 +8008F694 addiu r5,0x1 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 55 +8008F698 jr ra ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 56 +8008F69C move r2,r4 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 57 +8008F6A0 .org 0x8008F700 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 60 +8008F700 lhu r3,0x0(r5) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 62 +8008F704 nop ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 63 +8008F708 srl r2,r3,0xD ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 65 +8008F70C beq r2,zero,0x8008F760 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 66 +8008F710 nop ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 67 +8008F714 lbu r2,0x0(r4) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 69 +8008F718 nop ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 70 +8008F71C lbu r3,0x0(r5) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 71 +8008F720 nop ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 72 +8008F724 add r2,r3 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 73 +8008F728 sb r2,0x0(r4) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 74 +8008F72C addiu r5,0x2 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 76 +8008F730 sub r2,r3 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 77 +8008F734 addiu r4,0x2 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 78 +8008F738 add r4,r2 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 79 +8008F73C nextmybyte2: ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 81 +8008F73C lbu r2,0x0(r5) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 82 +8008F740 nop ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 83 +8008F744 sb r2,0x0(r4) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 84 +8008F748 addiu r4,0x1 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 85 +8008F74C addiu r3,-0x1 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 86 +8008F750 bne r3,zero,0x8008F67C ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 87 +8008F754 addiu r5,0x1 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 88 +8008F758 jr ra ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 89 +8008F75C move r2,r4 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 90 +8008F760 secondstrisjap: ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 94 +8008F760 lbu r3,0x0(r4) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 96 +8008F764 addiu r4,0x2 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 97 +8008F768 add r4,r3 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 98 +8008F76C lhu r3,0x0(r5) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 100 +8008F770 clear r2 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 102 +8008F774 next2bytes2: ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 106 +8008F774 sb r3,0x0(r4) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 107 +8008F778 addiu r4,0x1 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 108 +8008F77C addiu r5,0x2 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 109 +8008F780 addiu r2,0x1 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 110 +8008F784 lhu r3,0x0(r5) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 111 +8008F788 nop ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 112 +8008F78C srl r3,r3,0xC ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 113 +8008F790 bne r3,zero,0x8008F7A0 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 114 +8008F794 lhu r3,0x0(r5) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 115 +8008F798 j 0x8008F774 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 116 +8008F79C nop ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 117 +8008F7A0 savelengthandexit2: ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 119 +8008F7A0 lui r3,-0x7FF7 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 120 +8008F7A4 lw r3,-0x30(r3) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 121 +8008F7A8 nop ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 122 +8008F7AC lhu r3,0x0(r3) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 123 +8008F7B0 nop ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 124 +8008F7B4 add r2,r3,r2 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 125 +8008F7B8 lui r3,-0x7FF7 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 129 +8008F7BC lw r3,-0x30(r3) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 130 +8008F7C0 nop ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 131 +8008F7C4 sh r2,0x0(r3) ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 132 +8008F7C8 jr ra ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 133 +8008F7CC move r2,r4 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 134 +8008F7D0 .org 0x8008F800 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 142 +8008F800 move r6,ra ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 145 +8008F804 lui r5,-0x7FF8 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 147 +8008F808 ori r5,0xA7C ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 148 +8008F80C lui r4,-0x7FF8 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 149 +8008F810 ori r4,-0x5F2 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 150 +8008F814 jal 0x80015FE0 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 151 +8008F818 nop ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 152 +8008F81C lui r5,-0x7FF8 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 154 +8008F820 ori r5,0xAE4 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 155 +8008F824 lui r4,-0x7FF8 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 156 +8008F828 ori r4,0xA7E ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 157 +8008F82C jal 0x80015FE0 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 158 +8008F830 nop ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 159 +8008F834 lui r5,-0x7FF8 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 161 +8008F838 ori r5,-0x5F4 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 162 +8008F83C lui r4,-0x7FF8 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 163 +8008F840 ori r4,0xAE6 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 164 +8008F844 jal 0x80015FE0 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 165 +8008F848 nop ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 166 +8008F84C move ra,r6 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 168 +8008F850 ori r4,r0,0x0 ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 169 +8008F854 j 0x80017A9C ; C:\psx\asm\p2is_asm\complex_strings_copy.asm line 171 +8008F858 .org 0x80090000 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 22 +80090000 externalprint: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 24 +80090000 move v1,s3 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 26 +80090004 move s3,a0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 27 +80090008 lhu v0,0x0(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 29 +8009000C move s3,v1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 30 +80090010 srl v1,v0,0xD ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 31 +80090014 bne v1,zero,0x80090024 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 32 +80090018 clear v1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 33 +8009001C j 0x80019300 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 34 +80090020 nop ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 35 +80090024 myprintlineroutine: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 37 +80090024 addiu sp,sp,-0x50 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 38 +80090028 sw ra,0x4C(sp) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 39 +8009002C sw s1,0x2C(sp) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 40 +80090030 sw s2,0x30(sp) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 41 +80090034 sw s3,0x34(sp) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 42 +80090038 sw s4,0x38(sp) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 43 +8009003C sw s5,0x3C(sp) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 44 +80090040 sw s6,0x40(sp) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 45 +80090044 sw s8,0x48(sp) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 46 +80090048 sw s7,0x44(sp) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 47 +8009004C move s6,a0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 49 +80090050 move s1,a1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 50 +80090054 move s2,a2 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 51 +80090058 andi v0,v0,0xFF ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 55 +8009005C addiu s6,s6,0x2 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 56 +80090060 lui s3,-0x7FF7 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 57 +80090064 sh v0,-0x10(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 58 +80090068 sh v0,-0xE(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 59 +8009006C lui t0,0xFF ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 62 +80090070 ori t0,t0,-0x1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 63 +80090074 sw s0,0x28(sp) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 65 +80090078 andi s0,a3,0xFF ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 66 +8009007C move a0,s0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 67 +80090080 lui a3,-0x7FF8 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 68 +80090084 lui a2,-0x100 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 69 +80090088 addiu t1,a3,-0x4930 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 72 +8009008C lw v1,-0x4930(a3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 73 +80090090 lbu a1,0x60(sp) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 74 +80090094 lui v0,-0x8000 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 75 +80090098 and a2,v1,a2 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 78 +8009009C andi a1,a1,0xFF ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 79 +800900A0 and v1,v1,t0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 80 +800900A4 or s4,v1,v0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 81 +800900A8 lw v0,0x4(t1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 82 +800900AC lw v1,0x0(s4) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 83 +800900B0 addiu v0,v0,-0x1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 84 +800900B4 and v1,v1,t0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 85 +800900B8 or a2,a2,v1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 86 +800900BC sw v0,0x4(t1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 87 +800900C0 jal 0x8001B0C8 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 88 +800900C4 sw a2,-0x4930(a3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 89 +800900C8 move a0,s4 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 90 +800900CC sll a1,s1,0x10 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 92 +800900D0 sra a1,a1,0x10 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 93 +800900D4 sll a2,s2,0x10 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 94 +800900D8 sra a2,a2,0x10 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 95 +800900DC jal 0x8001A070 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 96 +800900E0 move a3,s0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 97 +800900E4 cputovram_scratchpad_template: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 100 +800900E4 lui a3,0x1F80 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 101 +800900E8 ori a3,a3,0x348 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 102 +800900EC lui a1,0xF00 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 104 +800900F0 sw a1,0x0(a3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 105 +800900F4 lui a0,-0x6000 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 107 +800900F8 sw a0,0x4(a3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 108 +800900FC lui v0,0x1F0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 110 +80090100 ori v0,0x130 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 111 +80090104 sw v0,0x8(a3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 112 +80090108 lui v0,0xC ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 114 +8009010C ori v0,0x2 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 115 +80090110 sw v0,0xC(a3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 116 +80090114 _1bppto4bpp_table_template: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 118 +80090114 lui t8,0x1F80 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 120 +80090118 ori t8,t8,0x390 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 121 +8009011C lui t7,-0x7FFF ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 122 +80090120 ori t7,t7,0x3E8 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 123 +80090124 lw t5,0x0(t7) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 124 +80090128 lw t6,0x4(t7) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 125 +8009012C sw t5,0x0(t8) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 126 +80090130 sw t6,0x4(t8) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 127 +80090134 lw t5,0x8(t7) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 128 +80090138 lw t6,0xC(t7) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 129 +8009013C sw t5,0x8(t8) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 130 +80090140 sw t6,0xC(t8) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 131 +80090144 lw t5,0x10(t7) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 132 +80090148 lw t6,0x14(t7) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 133 +8009014C sw t5,0x10(t8) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 134 +80090150 sw t6,0x14(t8) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 135 +80090154 lw t5,0x18(t7) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 136 +80090158 lw t6,0x1C(t7) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 137 +8009015C sw t5,0x18(t8) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 138 +80090160 sw t6,0x1C(t8) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 139 +80090164 rect_scratchpad_template: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 141 +80090164 lui s3,0x1F80 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 143 +80090168 ori s3,0x3D0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 144 +8009016C lui v0,0x400 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 145 +80090170 sw v0,0x0(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 146 +80090174 lui v0,0x6480 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 147 +80090178 ori v0,-0x7F80 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 148 +8009017C sw v0,0x4(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 149 +80090180 ori v0,r0,-0xF40 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 150 +80090184 sh v0,0xC(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 151 +80090188 lhu v1,0xA8(gp) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 152 +8009018C ori v0,r0,0x0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 154 +80090190 sw v0,0x8(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 155 +80090194 sh s2,0xA(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 156 +80090198 lui v0,0xC ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 158 +8009019C ori v0,0x8 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 159 +800901A0 sw v0,0x10(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 160 +800901A4 sh v1,0xE(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 161 +800901A8 make_sprite_size_table: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 163 +800901A8 lui s3,0x1F80 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 164 +800901AC ori s3,0x3F0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 165 +800901B0 lui v0,0x403 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 166 +800901B4 ori v0,0x201 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 167 +800901B8 sw v0,0x0(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 168 +800901BC lui v1,0x706 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 169 +800901C0 ori v1,0x504 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 170 +800901C4 sw v1,0x4(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 171 +800901C8 ori v0,r0,0x807 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 172 +800901CC sh v0,0x8(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 173 +800901D0 misc_init: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 175 +800901D0 move t6,s1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 176 +800901D4 textgroupreadloop: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 180 +800901D4 lui s3,0x1F80 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 185 +800901D8 ori s3,0x3F0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 186 +800901DC lui t1,-0x7FF7 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 187 +800901E0 lh v1,-0xE(t1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 189 +800901E4 lui t2,-0x7FF7 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 190 +800901E8 sltiu a0,v1,0xB ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 191 +800901EC bne a0,zero,0x800901F8 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 192 +800901F0 clear s2 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 193 +800901F4 ori v1,r0,0xA ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 194 +800901F8 readtexttobuffer: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 196 +800901F8 lbu a0,0x0(s6) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 197 +800901FC addiu s6,s6,0x1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 198 +80090200 addiu v1,v1,-0x1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 199 +80090204 sb a0,-0xC(t2) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 200 +80090208 addiu s2,s2,0x1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 201 +8009020C lh v0,-0xE(t1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 202 +80090210 addiu t2,t2,0x1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 203 +80090214 addiu v0,v0,-0x1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 204 +80090218 bne v1,zero,0x800901F8 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 205 +8009021C sh v0,-0xE(t1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 206 +80090220 ori a0,r0,0x0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 208 +80090224 sb a0,-0xC(t2) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 209 +80090228 addu s3,s3,s2 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 211 +8009022C addiu s3,-0x1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 212 +80090230 lbu a1,0x0(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 213 +80090234 nop ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 214 +80090238 move t5,a1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 215 +8009023C lui t3,0x1F80 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 217 +80090240 ori t3,t3,0x1C0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 218 +80090244 form_char_data_in_scratch: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 220 +80090244 jal 0x80090580 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 221 +80090248 move a0,s2 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 222 +8009024C rect_cmd_init: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 225 +8009024C lui s3,0x1F80 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 227 +80090250 ori s3,0x3D0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 228 +80090254 lui s1,-0x7FF8 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 230 +80090258 addiu s5,s1,-0x4930 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 231 +8009025C lui s0,0xFF ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 232 +80090260 ori s0,s0,-0x1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 233 +80090264 lui s7,-0x8000 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 234 +80090268 lui t2,-0x100 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 245 +8009026C move t4,s4 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 246 +80090270 move t1,s4 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 247 +80090274 rect_set_x: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 248 +80090274 sh t6,0x8(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 252 +80090278 sll v0,s2,0x1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 254 +8009027C addu v0,s2 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 255 +80090280 sll v0,0x1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 256 +80090284 addu t6,v0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 257 +80090288 rect_set_width: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 258 +80090288 sll v0,t5,0x3 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 259 +8009028C sh v0,0x10(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 260 +80090290 pageloop: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 262 +80090290 lw v0,-0x4930(s1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 264 +80090294 nop ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 265 +80090298 and a0,v0,t2 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 266 +8009029C and v0,v0,s0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 267 +800902A0 or a1,v0,s7 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 268 +800902A4 lw v0,0x4(s5) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 269 +800902A8 lw v1,0x0(a1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 270 +800902AC addiu v0,v0,-0x1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 271 +800902B0 and v1,v1,s0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 272 +800902B4 or a0,a0,v1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 273 +800902B8 sw v0,0x4(s5) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 274 +800902BC sw a0,-0x4930(s1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 275 +800902C0 rect_copy_scratch_to_ram: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 277 +800902C0 lw t8,0x0(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 278 +800902C4 lw t7,0x4(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 279 +800902C8 sw t8,0x0(a1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 280 +800902CC sw t7,0x4(a1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 281 +800902D0 lw a3,0x8(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 282 +800902D4 lw t7,0xC(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 283 +800902D8 sw a3,0x8(a1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 284 +800902DC sw t7,0xC(a1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 285 +800902E0 lw t8,0x10(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 286 +800902E4 nop ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 287 +800902E8 sw t8,0x10(a1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 288 +800902EC rect_scratch_connect: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 290 +800902EC lw v1,0x18(t1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 291 +800902F0 lw v0,0x0(a1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 292 +800902F4 lw v1,0x0(v1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 293 +800902F8 and v0,v0,t2 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 294 +800902FC and v1,v1,s0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 295 +80090300 or v0,v0,v1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 296 +80090304 sw v0,0x0(a1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 297 +80090308 lw a0,0x18(t1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 299 +8009030C nop ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 300 +80090310 lw v0,0x0(a0) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 301 +80090314 and v1,a1,s0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 302 +80090318 and v0,v0,t2 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 303 +8009031C or v0,v0,v1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 304 +80090320 sw v0,0x0(a0) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 305 +80090324 sw a1,0x18(t1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 306 +80090328 lhu v0,0x4(t4) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 307 +8009032C nop ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 308 +80090330 bne v0,zero,0x80090340 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 309 +80090334 clear s8 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 310 +80090338 sw a1,0x28(t1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 312 +8009033C sw a3,0xC(t4) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 313 +80090340 cpu2vram_cmd_loop: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 315 +80090340 lw v0,-0x4930(s1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 318 +80090344 nop ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 319 +80090348 and a0,v0,t2 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 320 +8009034C and v0,v0,s0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 321 +80090350 or a3,v0,s7 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 322 +80090354 move a2,a3 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 323 +80090358 lw v0,0x4(s5) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 324 +8009035C lw v1,0x0(a3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 325 +80090360 addiu v0,v0,-0x1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 326 +80090364 and v1,v1,s0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 327 +80090368 or a0,a0,v1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 328 +8009036C sw v0,0x4(s5) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 329 +80090370 sw a0,-0x4930(s1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 333 +80090374 lui a1,0x1F80 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 336 +80090378 ori a1,a1,0x348 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 337 +8009037C lw t8,0x0(a1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 338 +80090380 lw t7,0x4(a1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 339 +80090384 sw t8,0x0(a2) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 340 +80090388 sw t7,0x4(a2) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 341 +8009038C lw t8,0x8(a1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 342 +80090390 lw t7,0xC(a1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 343 +80090394 sw t8,0x8(a2) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 344 +80090398 sw t7,0xC(a2) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 345 +8009039C sll v1,s8,0x1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 347 +800903A0 addiu v0,v1,0x130 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 348 +800903A4 sh v0,0x8(a2) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 349 +800903A8 copy_char_data_start: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 350 +800903A8 lui t3,0x1F80 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 351 +800903AC ori t3,t3,0x1C0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 352 +800903B0 addiu a2,0x10 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 354 +800903B4 clear v0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 355 +800903B8 sll v1,t5,0x2 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 357 +800903BC sll a1,s8,0x2 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 358 +800903C0 addu a1,t3 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 359 +800903C4 copy_char_data_loop: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 360 +800903C4 lw t7,0x0(a1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 361 +800903C8 addu a1,v1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 362 +800903CC sw t7,0x0(a2) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 363 +800903D0 addiu a2,0x4 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 365 +800903D4 addiu v0,0x1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 366 +800903D8 ori r1,r0,0xC ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 367 +800903DC bne v0,r1,0x800903C4 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 367 +800903E0 nop ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 368 +800903E4 bne s8,zero,0x800903FC ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 370 +800903E8 nop ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 371 +800903EC set_flush_cache_cmd: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 373 +800903EC ori t8,r0,0x10 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 374 +800903F0 sb t8,-0x3D(a2) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 375 +800903F4 lui t8,0x100 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 376 +800903F8 sw t8,0x0(a2) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 377 +800903FC cpu2vram_dma_link: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 379 +800903FC lw v1,0x18(t1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 381 +80090400 lw v0,0x0(a3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 382 +80090404 lw v1,0x0(v1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 383 +80090408 and v0,v0,t2 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 384 +8009040C and v1,v1,s0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 385 +80090410 or v0,v0,v1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 386 +80090414 sw v0,0x0(a3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 387 +80090418 lw a0,0x18(t1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 388 +8009041C nop ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 389 +80090420 lw v0,0x0(a0) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 390 +80090424 and v1,a3,s0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 391 +80090428 and v0,v0,t2 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 392 +8009042C or v0,v0,v1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 393 +80090430 sw v0,0x0(a0) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 394 +80090434 sw a3,0x18(t1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 395 +80090438 addiu s8,0x1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 398 +8009043C bne s8,t5,0x80090340 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 399 +80090440 nop ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 400 +80090444 addiu t1,t1,0x4 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 402 +80090448 addiu v0,t4,0x8 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 403 +8009044C sltu v0,t1,v0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 404 +80090450 bne v0,zero,0x80090290 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 405 +80090454 nop ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 406 +80090458 chunk_making_end: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 408 +80090458 lhu v0,0x4(s4) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 410 +8009045C lui t3,-0x7FF7 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 411 +80090460 addiu v0,v0,0x1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 412 +80090464 lhu v1,-0xE(t3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 413 +80090468 sh v0,0x4(s4) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 414 +8009046C bne v1,zero,0x800901D4 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 416 +80090470 nop ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 418 +80090474 textend: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 420 +80090474 clear s2 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 421 +80090478 lui s3,-0x7FF8 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 422 +8009047C addiu s5,s3,-0x4930 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 423 +80090480 lui s1,0xFF ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 424 +80090484 ori s1,s1,-0x1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 425 +80090488 move s0,s4 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 426 +8009048C clear a1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 427 +80090490 pagetloop: ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 429 +80090490 ori a2,r0,0x1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 431 +80090494 addu s2,s2,a2 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 432 +80090498 lui v0,-0x8000 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 433 +8009049C lui a0,-0x100 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 434 +800904A0 lw v1,-0x4930(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 435 +800904A4 lw a3,0xA4(gp) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 436 +800904A8 and v1,v1,s1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 437 +800904AC or v1,v1,v0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 438 +800904B0 sw v1,0x30(s0) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 439 +800904B4 lw v0,-0x4930(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 440 +800904B8 lw v1,0x0(v1) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 441 +800904BC and v0,v0,a0 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 442 +800904C0 and v1,v1,s1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 443 +800904C4 lw a0,0x4(s5) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 444 +800904C8 or v0,v0,v1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 445 +800904CC sw v0,-0x4930(s3) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 446 +800904D0 addiu a0,a0,-0x1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 447 +800904D4 sw a0,0x4(s5) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 448 +800904D8 lw a0,0x30(s0) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 449 +800904DC jal 0x800542CC ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 450 +800904E0 addiu s0,s0,0x4 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 451 +800904E4 sltiu v0,s2,0x2 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 452 +800904E8 bne v0,zero,0x80090490 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 453 +800904EC clear a1 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 454 +800904F0 move v0,s4 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 456 +800904F4 lw ra,0x4C(sp) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 459 +800904F8 lw s8,0x48(sp) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 460 +800904FC lw s7,0x44(sp) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 461 +80090500 lw s6,0x40(sp) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 462 +80090504 lw s5,0x3C(sp) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 463 +80090508 lw s4,0x38(sp) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 464 +8009050C lw s3,0x34(sp) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 465 +80090510 lw s2,0x30(sp) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 466 +80090514 lw s1,0x2C(sp) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 467 +80090518 lw s0,0x28(sp) ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 468 +8009051C jr ra ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 470 +80090520 addiu sp,sp,0x50 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 471 +80090524 .byte 0x54,0x68,0x69,0x73,0x20,0x67,0x61,0x6D,0x65,0x20,0x77,0x61,0x73,0x20,0x6F,0x66,0x66,0x69,0x63,0x69,0x61,0x6C,0x6C,0x79,0x20,0x63,0x72,0x61,0x63,0x6B,0x65,0x64,0x20,0x62,0x79,0x20,0x53,0x45,0x52,0x47,0x45,0x59,0x20,0x53,0x48,0x45,0x4D,0x45,0x54,0x20,0x32,0x30,0x32,0x31,0x2D,0x32,0x30,0x32,0x35,0x2E,0x20,0x57,0x48,0x41,0x54,0x20,0x41,0x52,0x45,0x20,0x59,0x4F,0x55,0x20,0x44,0x4F,0x49,0x4E,0x47,0x20,0x48,0x45,0x52,0x45,0x2C,0x20,0x42,0x4F,0x59,0x3F; C:\psx\asm\p2is_asm\is_main_grouped.asm line 472 +8009057E .byte 0x00 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 473 +8009057F .byte 0x00 ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 474 +80090580 make_char_line_in_scratch: ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 4 +80090580 addiu sp,sp,-0x18 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 6 +80090584 sw ra,0x10(sp) ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 7 +80090588 sw t5,0x14(sp) ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 8 +8009058C move t5,a0 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 9 +80090590 sll s3,a1,0x2 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 11 +80090594 lui t7,-0x7FF7 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 12 +80090598 addiu t7,-0xC ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 13 +8009059C char_data_clear: ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 15 +8009059C move a1,t3 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 16 +800905A0 addiu a0,a1,0x184 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 17 +800905A4 ori v0,r0,0x0 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 18 +800905A8 char_data_loop: ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 19 +800905A8 sw v0,0x0(a1) ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 20 +800905AC addiu a1,0x4 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 21 +800905B0 bne a1,a0,0x800905A8 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 22 +800905B4 nop ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 23 +800905B8 move s1,t3 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 25 +800905BC ori a2,r0,0x0 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 27 +800905C0 lbu v0,0x0(t7) ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 28 +800905C4 lbu t2,0xAC(gp) ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 29 +800905C8 addiu t7,t7,0x1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 30 +800905CC lui a3,0x1F80 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 32 +800905D0 ori a3,a3,0x390 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 33 +800905D4 chars_font_loop: ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 36 +800905D4 addiu v0,-0x20 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 37 +800905D8 beq v0,zero,0x800906B8 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 39 +800905DC nop ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 40 +800905E0 lui v1,-0x7FE1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 42 +800905E4 ori v1,v1,-0x5600 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 43 +800905E8 sll t0,v0,0x2 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 44 +800905EC sll v0,v0,0x3 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 45 +800905F0 addu v0,v0,t0 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 46 +800905F4 addu t1,v0,v1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 47 +800905F8 clear t3 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 49 +800905FC char_lines_loop: ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 51 +800905FC lbu v1,0x0(t1) ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 52 +80090600 nop ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 53 +80090604 beq v1,zero,0x800906A8 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 54 +80090608 nop ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 55 +8009060C its_not_empty: ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 57 +8009060C andi a0,v1,0xF ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 59 +80090610 sll a0,a0,0x1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 60 +80090614 addu a0,a0,a3 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 61 +80090618 lhu a0,0x0(a0) ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 62 +8009061C srl a1,v1,0x4 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 64 +80090620 andi a1,a1,0xF ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 65 +80090624 sll a1,a1,0x1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 66 +80090628 addu a1,a1,a3 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 67 +8009062C lhu a1,0x0(a1) ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 68 +80090630 nop ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 69 +80090634 sll a1,0x10 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 71 +80090638 or a0,a1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 72 +8009063C mult a0,t2 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 73 +80090640 sll a1,a2,0x1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 78 +80090644 addu a1,a1,a2 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 79 +80090648 nop ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 82 +8009064C mflo t4 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 83 +80090650 mult t3,s3 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 86 +80090654 nop ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 87 +80090658 nop ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 88 +8009065C nop ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 89 +80090660 mflo a0 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 90 +80090664 addu a0,a0,a1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 93 +80090668 addu a0,a0,s1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 94 +8009066C andi v0,t4,0xFF ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 96 +80090670 sb v0,0x0(a0) ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 97 +80090674 sra v0,t4,0x8 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 99 +80090678 andi v0,v0,0xFF ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 100 +8009067C sb v0,0x1(a0) ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 101 +80090680 sra v0,t4,0x10 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 103 +80090684 andi v0,v0,0xFF ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 104 +80090688 sb v0,0x2(a0) ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 105 +8009068C addiu v0,t5,-0x1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 107 +80090690 bne a2,v0,0x8009069C ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 108 +80090694 andi v1,t5,0x3 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 109 +80090698 beq v1,zero,0x800906A8 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 111 +8009069C not_last: ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 113 +8009069C sra v0,t4,0x18 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 114 +800906A0 andi v0,v0,0xFF ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 115 +800906A4 sb v0,0x3(a0) ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 116 +800906A8 divideby4: ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 118 +800906A8 zero_jump: ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 120 +800906A8 addiu t3,t3,0x1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 121 +800906AC ori v0,r0,0xC ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 122 +800906B0 bne t3,v0,0x800905FC ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 123 +800906B4 addiu t1,t1,0x1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 124 +800906B8 spacejump: ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 126 +800906B8 addiu a2,a2,0x1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 127 +800906BC lbu v0,0x0(t7) ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 128 +800906C0 addiu t7,t7,0x1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 129 +800906C4 beq v0,zero,0x800906D4 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 131 +800906C8 nop ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 132 +800906CC bne a2,t5,0x800905D4 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 134 +800906D0 nop ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 135 +800906D4 sprite_end: ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 137 +800906D4 lbu v1,0xAD(gp) ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 138 +800906D8 ori v0,r0,0x1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 139 +800906DC bne v1,v0,0x800907D0 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 140 +800906E0 nop ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 141 +800906E4 move a0,s1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 143 +800906E8 nop ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 144 +800906EC make_shadow: ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 147 +800906EC move a1,s3 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 148 +800906F0 sll a1,0x1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 149 +800906F4 sll v0,s3,0x3 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 150 +800906F8 addu v0,a1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 151 +800906FC addu a3,a0,v0 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 153 +80090700 addu a0,a1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 154 +80090704 lbu t1,0xAC(gp) ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 156 +80090708 ori t2,r0,0xF ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 157 +8009070C addiu t1,0x1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 158 +80090710 shadow_row_loop: ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 161 +80090710 clear t5 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 163 +80090714 shadow_sprites_loop: ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 166 +80090714 addu t7,a3,t5 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 168 +80090718 lw t0,0x0(t7) ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 169 +8009071C clear a2 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 170 +80090720 ori a1,r0,0x4 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 171 +80090724 shadow_pixel_loop: ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 174 +80090724 move a1,a2 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 175 +80090728 addiu a1,a1,0x1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 176 +8009072C sll a1,a1,0x2 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 177 +80090730 sll v0,a2,0x2 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 179 +80090734 sllv v0,t2,v0 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 180 +80090738 and v0,t0,v0 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 181 +8009073C beq v0,zero,0x800907A4 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 182 +80090740 nop ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 183 +80090744 ori v0,r0,0x7 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 186 +80090748 bne a2,v0,0x80090780 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 187 +8009074C nop ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 188 +80090750 addu t8,t7,s3 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 191 +80090754 addiu t8,t8,0x4 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 192 +80090758 lw v1,0x0(t8) ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 193 +8009075C ori v0,r0,0xF ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 194 +80090760 and v0,v1,v0 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 195 +80090764 bne v0,zero,0x800907A4 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 196 +80090768 nop ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 197 +8009076C move v0,t1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 198 +80090770 or v0,v1,v0 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 199 +80090774 sw v0,0x0(t8) ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 200 +80090778 b 0x800907A4 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 201 +8009077C nop ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 202 +80090780 normal_case: ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 204 +80090780 addu t8,t7,s3 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 205 +80090784 lw v1,0x0(t8) ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 206 +80090788 sllv v0,t2,a1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 207 +8009078C and v0,v1,v0 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 208 +80090790 bne v0,zero,0x800907A4 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 209 +80090794 nop ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 210 +80090798 sllv v0,t1,a1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 211 +8009079C or v0,v1,v0 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 212 +800907A0 sw v0,0x0(t8) ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 213 +800907A4 no_s: ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 215 +800907A4 addiu a2,a2,0x1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 216 +800907A8 sltiu v0,a2,0x8 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 217 +800907AC bne v0,zero,0x80090724 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 218 +800907B0 nop ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 219 +800907B4 addiu t5,t5,0x4 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 221 +800907B8 bne t5,s3,0x80090714 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 222 +800907BC nop ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 223 +800907C0 subu a3,s3 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 226 +800907C4 sltu v0,a3,a0 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 227 +800907C8 beq v0,zero,0x80090710 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 228 +800907CC nop ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 229 +800907D0 notshadow: ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 231 +800907D0 lw t5,0x14(sp) ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 232 +800907D4 lw ra,0x10(sp) ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 233 +800907D8 move v0,s1 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 234 +800907DC jr ra ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 235 +800907E0 addiu sp,sp,0x18 ; C:\psx\asm\p2is_asm\IS_charload_grouped.asm line 236 +800907E4 customnamerender: ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 6 +800907E4 _4bit_conversion_table2: ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 7 +800907E4 lui t8,0x1F80 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 8 +800907E8 ori t8,t8,0x390 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 9 +800907EC lui t7,-0x7FFF ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 10 +800907F0 ori t7,t7,0x3E8 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 11 +800907F4 lw t5,0x0(t7) ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 12 +800907F8 lw t6,0x4(t7) ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 13 +800907FC sw t5,0x0(t8) ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 14 +80090800 sw t6,0x4(t8) ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 15 +80090804 lw t5,0x8(t7) ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 16 +80090808 lw t6,0xC(t7) ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 17 +8009080C sw t5,0x8(t8) ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 18 +80090810 sw t6,0xC(t8) ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 19 +80090814 lw t5,0x10(t7) ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 20 +80090818 lw t6,0x14(t7) ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 21 +8009081C sw t5,0x10(t8) ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 22 +80090820 sw t6,0x14(t8) ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 23 +80090824 lw t5,0x18(t7) ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 24 +80090828 lw t6,0x1C(t7) ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 25 +8009082C sw t5,0x18(t8) ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 26 +80090830 sw t6,0x1C(t8) ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 27 +80090834 make_sprite_size_table2: ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 29 +80090834 lui s3,0x1F80 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 30 +80090838 ori s3,0x3F0 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 31 +8009083C lui v0,0x403 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 32 +80090840 ori v0,0x201 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 33 +80090844 sw v0,0x0(s3) ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 34 +80090848 lui v1,0x706 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 35 +8009084C ori v1,0x504 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 36 +80090850 sw v1,0x4(s3) ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 37 +80090854 clear a1 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 40 +80090858 lui v1,-0x7FF7 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 41 +8009085C read_char: ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 42 +8009085C lbu v0,0x0(a0) ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 43 +80090860 nop ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 44 +80090864 sb v0,-0xC(v1) ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 46 +80090868 beq v0,zero,0x80090888 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 47 +8009086C nop ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 48 +80090870 addiu v1,0x1 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 49 +80090874 addiu a1,0x1 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 50 +80090878 addiu a0,0x2 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 51 +8009087C sltiu v0,a1,0x7 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 52 +80090880 bne v0,zero,0x8009085C ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 53 +80090884 nop ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 54 +80090888 end_of_name_read: ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 56 +80090888 move a0,a1 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 57 +8009088C addu s3,s3,a0 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 58 +80090890 addiu s3,-0x1 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 59 +80090894 lbu a1,0x0(s3) ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 60 +80090898 nop ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 61 +8009089C lui s3,0x1F80 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 63 +800908A0 ori s3,0x3B0 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 64 +800908A4 lui a2,0x121 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 66 +800908A8 ori a2,0x3C8 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 67 +800908AC sw a2,0x0(s3) ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 68 +800908B0 lui a2,0xC ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 69 +800908B4 sll a1,0x1 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 70 +800908B8 or a2,a1 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 71 +800908BC sw a2,0x4(s3) ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 72 +800908C0 sra a1,0x1 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 73 +800908C4 lui t3,-0x7FF8 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 75 +800908C8 ori t3,t3,-0x1000 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 76 +800908CC jal 0x80090580 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 78 +800908D0 nop ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 79 +800908D4 lui a0,0x1F80 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 81 +800908D8 ori a0,0x3B0 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 82 +800908DC jal 0x8004F994 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 83 +800908E0 move a1,v0 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 84 +800908E4 jal 0x8004F6E8 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 85 +800908E8 clear a0 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 86 +800908EC j 0x800CA148 ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 88 +800908F0 nop ; C:\psx\asm\p2is_asm\IS_battle_GG_name_render.asm line 89 +800908F4 returncharsinstring: ; C:\psx\asm\p2is_asm\charCalcs.asm line 1 +800908F4 lhu v0,0x0(a0) ; C:\psx\asm\p2is_asm\charCalcs.asm line 4 +800908F8 nop ; C:\psx\asm\p2is_asm\charCalcs.asm line 5 +800908FC srl v0,v0,0xD ; C:\psx\asm\p2is_asm\charCalcs.asm line 6 +80090900 bne v0,zero,0x80090910 ; C:\psx\asm\p2is_asm\charCalcs.asm line 7 +80090904 clear v1 ; C:\psx\asm\p2is_asm\charCalcs.asm line 8 +80090908 j 0x80090940 ; C:\psx\asm\p2is_asm\charCalcs.asm line 11 +8009090C nop ; C:\psx\asm\p2is_asm\charCalcs.asm line 12 +80090910 ismy1bytestring: ; C:\psx\asm\p2is_asm\charCalcs.asm line 13 +80090910 lhu v0,0x0(a0) ; C:\psx\asm\p2is_asm\charCalcs.asm line 14 +80090914 nop ; C:\psx\asm\p2is_asm\charCalcs.asm line 15 +80090918 andi v0,v0,0xFF ; C:\psx\asm\p2is_asm\charCalcs.asm line 16 +8009091C andi v1,v0,0x1 ; C:\psx\asm\p2is_asm\charCalcs.asm line 18 +80090920 beq v1,zero,0x8009092C ; C:\psx\asm\p2is_asm\charCalcs.asm line 19 +80090924 nop ; C:\psx\asm\p2is_asm\charCalcs.asm line 20 +80090928 addiu v0,v0,0x1 ; C:\psx\asm\p2is_asm\charCalcs.asm line 21 +8009092C notand1: ; C:\psx\asm\p2is_asm\charCalcs.asm line 23 +8009092C sra v0,v0,0x1 ; C:\psx\asm\p2is_asm\charCalcs.asm line 24 +80090930 addiu v0,v0,0x1 ; C:\psx\asm\p2is_asm\charCalcs.asm line 25 +80090934 jr ra ; C:\psx\asm\p2is_asm\charCalcs.asm line 26 +80090938 move v1,v0 ; C:\psx\asm\p2is_asm\charCalcs.asm line 27 +8009093C getnewchar: ; C:\psx\asm\p2is_asm\charCalcs.asm line 29 +8009093C addiu v1,v1,0x1 ; C:\psx\asm\p2is_asm\charCalcs.asm line 30 +80090940 startreading: ; C:\psx\asm\p2is_asm\charCalcs.asm line 31 +80090940 lhu v0,0x0(a0) ; C:\psx\asm\p2is_asm\charCalcs.asm line 32 +80090944 nop ; C:\psx\asm\p2is_asm\charCalcs.asm line 33 +80090948 sltiu v0,v0,0x1000 ; C:\psx\asm\p2is_asm\charCalcs.asm line 34 +8009094C bne v0,zero,0x8009093C ; C:\psx\asm\p2is_asm\charCalcs.asm line 35 +80090950 addiu a0,a0,0x2 ; C:\psx\asm\p2is_asm\charCalcs.asm line 36 +80090954 jr ra ; C:\psx\asm\p2is_asm\charCalcs.asm line 37 +80090958 move v0,v1 ; C:\psx\asm\p2is_asm\charCalcs.asm line 38 +8009095C calcnextxcustom: ; C:\psx\asm\p2is_asm\charCalcs.asm line 41 +8009095C addiu sp,sp,-0x18 ; C:\psx\asm\p2is_asm\charCalcs.asm line 42 +80090960 sw ra,0x10(sp) ; C:\psx\asm\p2is_asm\charCalcs.asm line 43 +80090964 lhu v0,0x0(a0) ; C:\psx\asm\p2is_asm\charCalcs.asm line 45 +80090968 nop ; C:\psx\asm\p2is_asm\charCalcs.asm line 46 +8009096C andi v1,v0,0xFF ; C:\psx\asm\p2is_asm\charCalcs.asm line 47 +80090970 srl v0,v0,0xD ; C:\psx\asm\p2is_asm\charCalcs.asm line 48 +80090974 beq v0,zero,0x80090984 ; C:\psx\asm\p2is_asm\charCalcs.asm line 49 +80090978 nop ; C:\psx\asm\p2is_asm\charCalcs.asm line 50 +8009097C j 0x8009098C ; C:\psx\asm\p2is_asm\charCalcs.asm line 51 +80090980 move v0,v1 ; C:\psx\asm\p2is_asm\charCalcs.asm line 52 +80090984 japoldtext: ; C:\psx\asm\p2is_asm\charCalcs.asm line 53 +80090984 jal 0x800908F4 ; C:\psx\asm\p2is_asm\charCalcs.asm line 54 +80090988 nop ; C:\psx\asm\p2is_asm\charCalcs.asm line 55 +8009098C ihavestringlength: ; C:\psx\asm\p2is_asm\charCalcs.asm line 56 +8009098C sll v1,v0,0x1 ; C:\psx\asm\p2is_asm\charCalcs.asm line 57 +80090990 addu v1,v1,v0 ; C:\psx\asm\p2is_asm\charCalcs.asm line 58 +80090994 lw ra,0x10(sp) ; C:\psx\asm\p2is_asm\charCalcs.asm line 59 +80090998 sll v0,v1,0x1 ; C:\psx\asm\p2is_asm\charCalcs.asm line 60 +8009099C jr ra ; C:\psx\asm\p2is_asm\charCalcs.asm line 61 +800909A0 addiu sp,sp,0x18 ; C:\psx\asm\p2is_asm\charCalcs.asm line 62 +800909A4 retuncharstocity: ; C:\psx\asm\p2is_asm\charCalcs.asm line 64 +800909A4 lhu v0,0x0(a0) ; C:\psx\asm\p2is_asm\charCalcs.asm line 65 +800909A8 nop ; C:\psx\asm\p2is_asm\charCalcs.asm line 66 +800909AC srl v0,v0,0xD ; C:\psx\asm\p2is_asm\charCalcs.asm line 67 +800909B0 bne v0,zero,0x800909C0 ; C:\psx\asm\p2is_asm\charCalcs.asm line 68 +800909B4 clear v1 ; C:\psx\asm\p2is_asm\charCalcs.asm line 69 +800909B8 j 0x80090940 ; C:\psx\asm\p2is_asm\charCalcs.asm line 71 +800909BC nop ; C:\psx\asm\p2is_asm\charCalcs.asm line 72 +800909C0 ismy1bytecity: ; C:\psx\asm\p2is_asm\charCalcs.asm line 73 +800909C0 lhu v0,0x0(a0) ; C:\psx\asm\p2is_asm\charCalcs.asm line 74 +800909C4 nop ; C:\psx\asm\p2is_asm\charCalcs.asm line 75 +800909C8 andi v0,v0,0xFF ; C:\psx\asm\p2is_asm\charCalcs.asm line 76 +800909CC jr ra ; C:\psx\asm\p2is_asm\charCalcs.asm line 77 +800909D0 move v1,v0 ; C:\psx\asm\p2is_asm\charCalcs.asm line 78 +800909D4 retuncharstocitydiv2: ; C:\psx\asm\p2is_asm\charCalcs.asm line 81 +800909D4 lhu v0,0x0(a0) ; C:\psx\asm\p2is_asm\charCalcs.asm line 82 +800909D8 nop ; C:\psx\asm\p2is_asm\charCalcs.asm line 83 +800909DC srl v0,v0,0xD ; C:\psx\asm\p2is_asm\charCalcs.asm line 84 +800909E0 bne v0,zero,0x800909F0 ; C:\psx\asm\p2is_asm\charCalcs.asm line 85 +800909E4 clear v1 ; C:\psx\asm\p2is_asm\charCalcs.asm line 86 +800909E8 j 0x80090940 ; C:\psx\asm\p2is_asm\charCalcs.asm line 88 +800909EC nop ; C:\psx\asm\p2is_asm\charCalcs.asm line 89 +800909F0 ismy1bytecitydiv2: ; C:\psx\asm\p2is_asm\charCalcs.asm line 90 +800909F0 lhu v0,0x0(a0) ; C:\psx\asm\p2is_asm\charCalcs.asm line 91 +800909F4 nop ; C:\psx\asm\p2is_asm\charCalcs.asm line 92 +800909F8 andi v0,v0,0xFF ; C:\psx\asm\p2is_asm\charCalcs.asm line 93 +800909FC andi v1,v0,0x1 ; C:\psx\asm\p2is_asm\charCalcs.asm line 95 +80090A00 beq v1,zero,0x80090A0C ; C:\psx\asm\p2is_asm\charCalcs.asm line 96 +80090A04 nop ; C:\psx\asm\p2is_asm\charCalcs.asm line 97 +80090A08 addiu v0,v0,0x1 ; C:\psx\asm\p2is_asm\charCalcs.asm line 98 +80090A0C notand1_2: ; C:\psx\asm\p2is_asm\charCalcs.asm line 100 +80090A0C sra v0,v0,0x1 ; C:\psx\asm\p2is_asm\charCalcs.asm line 101 +80090A10 jr ra ; C:\psx\asm\p2is_asm\charCalcs.asm line 103 +80090A14 move v1,v0 ; C:\psx\asm\p2is_asm\charCalcs.asm line 104 +80090A18 .close ; C:\psx\asm\p2is_asm\is_main_grouped.asm line 480 +FFFFFFFF .open ""C:\\psx\\asm\\p2is_asm\\SLPS_021.00"",0x8000F800 ; C:\psx\asm\p2is_asm\txtpatches.asm line 7 +8000F800 .org 0x8001AEF4 ; C:\psx\asm\p2is_asm\txtpatches.asm line 49 +8001AEF4 j 0x800908F4 ; C:\psx\asm\p2is_asm\txtpatches.asm line 50 +8001AEF8 clear v1 ; C:\psx\asm\p2is_asm\txtpatches.asm line 51 +8001AEFC .org 0x8001AF1C ; C:\psx\asm\p2is_asm\txtpatches.asm line 56 +8001AF1C j 0x8009095C ; C:\psx\asm\p2is_asm\txtpatches.asm line 59 +8001AF20 nop ; C:\psx\asm\p2is_asm\txtpatches.asm line 60 +8001AF24 .close ; C:\psx\asm\p2is_asm\txtpatches.asm line 62 +FFFFFFFF .open ""C:\\psx\\asm\\p2is_asm\\1096_J_MENU_Settings_Code.bin"",0x800A2000; C:\psx\asm\p2is_asm\txtpatches.asm line 67 +800A2000 .org 0x800A2658 ; C:\psx\asm\p2is_asm\txtpatches.asm line 69 +800A2658 ori a1,r0,0x5C ; C:\psx\asm\p2is_asm\txtpatches.asm line 70 +800A265C .org 0x800A2678 ; C:\psx\asm\p2is_asm\txtpatches.asm line 71 +800A2678 jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 72 +800A267C .org 0x800A2690 ; C:\psx\asm\p2is_asm\txtpatches.asm line 73 +800A2690 jal 0x8001AFC0 ; C:\psx\asm\p2is_asm\txtpatches.asm line 74 +800A2694 .org 0x800A26AC ; C:\psx\asm\p2is_asm\txtpatches.asm line 77 +800A26AC jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 78 +800A26B0 .org 0x800A26E8 ; C:\psx\asm\p2is_asm\txtpatches.asm line 79 +800A26E8 jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 80 +800A26EC .org 0x800A298C ; C:\psx\asm\p2is_asm\txtpatches.asm line 81 +800A298C jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 82 +800A2990 .org 0x800A29B8 ; C:\psx\asm\p2is_asm\txtpatches.asm line 83 +800A29B8 jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 84 +800A29BC .org 0x800A29F4 ; C:\psx\asm\p2is_asm\txtpatches.asm line 85 +800A29F4 jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 86 +800A29F8 .org 0x800A2A44 ; C:\psx\asm\p2is_asm\txtpatches.asm line 87 +800A2A44 jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 88 +800A2A48 .org 0x800A2D20 ; C:\psx\asm\p2is_asm\txtpatches.asm line 89 +800A2D20 jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 90 +800A2D24 .org 0x800A2D4C ; C:\psx\asm\p2is_asm\txtpatches.asm line 91 +800A2D4C jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 92 +800A2D50 .org 0x800A2D7C ; C:\psx\asm\p2is_asm\txtpatches.asm line 93 +800A2D7C jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 94 +800A2D80 .org 0x800A3090 ; C:\psx\asm\p2is_asm\txtpatches.asm line 95 +800A3090 jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 96 +800A3094 .org 0x800A30CC ; C:\psx\asm\p2is_asm\txtpatches.asm line 97 +800A30CC jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 98 +800A30D0 .org 0x800A35AC ; C:\psx\asm\p2is_asm\txtpatches.asm line 99 +800A35AC jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 100 +800A35B0 .org 0x800A35E0 ; C:\psx\asm\p2is_asm\txtpatches.asm line 101 +800A35E0 jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 102 +800A35E4 .org 0x800A3624 ; C:\psx\asm\p2is_asm\txtpatches.asm line 103 +800A3624 jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 104 +800A3628 .org 0x800A3658 ; C:\psx\asm\p2is_asm\txtpatches.asm line 105 +800A3658 jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 106 +800A365C .org 0x800A369C ; C:\psx\asm\p2is_asm\txtpatches.asm line 107 +800A369C jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 108 +800A36A0 .org 0x800A36D0 ; C:\psx\asm\p2is_asm\txtpatches.asm line 109 +800A36D0 jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 110 +800A36D4 .org 0x800A3704 ; C:\psx\asm\p2is_asm\txtpatches.asm line 111 +800A3704 jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 112 +800A3708 .org 0x800A3734 ; C:\psx\asm\p2is_asm\txtpatches.asm line 113 +800A3734 jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 114 +800A3738 .org 0x800A3BA8 ; C:\psx\asm\p2is_asm\txtpatches.asm line 115 +800A3BA8 jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 116 +800A3BAC .org 0x800A3BDC ; C:\psx\asm\p2is_asm\txtpatches.asm line 117 +800A3BDC jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 118 +800A3BE0 .org 0x800A3C20 ; C:\psx\asm\p2is_asm\txtpatches.asm line 119 +800A3C20 jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 120 +800A3C24 .org 0x800A3C4C ; C:\psx\asm\p2is_asm\txtpatches.asm line 121 +800A3C4C jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 122 +800A3C50 .org 0x800A3C90 ; C:\psx\asm\p2is_asm\txtpatches.asm line 123 +800A3C90 jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 124 +800A3C94 .org 0x800A3CBC ; C:\psx\asm\p2is_asm\txtpatches.asm line 125 +800A3CBC jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 126 +800A3CC0 .org 0x800A4310 ; C:\psx\asm\p2is_asm\txtpatches.asm line 127 +800A4310 jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 128 +800A4314 .org 0x800A435C ; C:\psx\asm\p2is_asm\txtpatches.asm line 129 +800A435C jal 0x80090000 ; C:\psx\asm\p2is_asm\txtpatches.asm line 130 +800A4360 .close ; C:\psx\asm\p2is_asm\txtpatches.asm line 132 +FFFFFFFF .open ""C:\\psx\\asm\\p2is_asm\\1119_CITY_CODE_patched_2023.bin"",0x800AB000; C:\psx\asm\p2is_asm\txtpatches.asm line 137 +800AB000 .org 0x800AD30C ; C:\psx\asm\p2is_asm\txtpatches.asm line 153 +800AD30C jal 0x800909A4 ; C:\psx\asm\p2is_asm\txtpatches.asm line 154 +800AD310 .org 0x800AD3AC ; C:\psx\asm\p2is_asm\txtpatches.asm line 158 +800AD3AC jal 0x800909A4 ; C:\psx\asm\p2is_asm\txtpatches.asm line 159 +800AD3B0 .org 0x800AF1DC ; C:\psx\asm\p2is_asm\txtpatches.asm line 162 +800AF1DC jal 0x8001AF1C ; C:\psx\asm\p2is_asm\txtpatches.asm line 164 +800AF1E0 .close ; C:\psx\asm\p2is_asm\txtpatches.asm line 167 +FFFFFFFF .open ""C:\\psx\\asm\\p2is_asm\\0001_BATTLE_CODE.bin"",0x800AB000; C:\psx\asm\p2is_asm\txtpatches.asm line 205 +800AB000 .org 0x800CA0F0 ; C:\psx\asm\p2is_asm\txtpatches.asm line 208 +800CA0F0 j 0x800907E4 ; C:\psx\asm\p2is_asm\txtpatches.asm line 214 +800CA0F4 move a0,s3 ; C:\psx\asm\p2is_asm\txtpatches.asm line 215 +800CA0F8 .close ; C:\psx\asm\p2is_asm\txtpatches.asm line 217 diff --git a/EP_main_dynamic_chains.asm b/EP_main_dynamic_chains.asm new file mode 100644 index 0000000..19fe5d4 --- /dev/null +++ b/EP_main_dynamic_chains.asm @@ -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 - 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...) + 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= (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 (80xxxxxx) + lw v0,0x4(s7) ; CmdCounter + 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) ; 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) ; save DMA Counter + andi v0,r7,0x3 ; r2 = r7 & 3 (check destAddr MOD 4) + sw r4,-0x31a8(t3) ; 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 (r80 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 = 7ce68 + 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);>7ce68 r3 = next free Chain (*7ce68) + 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);>7ce68 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);>7ce68 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 \ No newline at end of file diff --git a/GROUPED_ALGO.txt b/GROUPED_ALGO.txt index 040b421..3be55b4 100644 --- a/GROUPED_ALGO.txt +++ b/GROUPED_ALGO.txt @@ -126,9 +126,13 @@ Custom regs: - всегда за тобой - splash screen переводчика - имя в боёвке +- описания статов персон - группа пернатых феникс р - розовый аргус - майя-прайм +- Рейх и прочие арканы +- Измеритель звёзд и прочие заклинания - оракул где-то рядом -- ортр -- аэшма \ No newline at end of file +- ортр суммон + название +- аэшма суммон + название +- перебрать все локации в данжах \ No newline at end of file diff --git a/IS_battle_GG_name_render.asm b/IS_battle_GG_name_render.asm new file mode 100644 index 0000000..4ca6fca --- /dev/null +++ b/IS_battle_GG_name_render.asm @@ -0,0 +1,89 @@ +// +// Persona 2 Innocent Sin (PSX) JAP / Custom Name Render In Battle +// Author: Sergey Shemet 06/10/2025 + + +customNameRender: +_4bit_conversion_table2: + 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) + +make_sprite_size_table2: + lui s3, 0x1f80 + ori s3, 0x03f0 // Будем серить в scratch + lui v0, 0x0403 // таблицей рассчитанных команд и ширин + ori v0, 0x0201 // необходимых для спрайтов линии (cmdCount << 2) + sw v0, 0x0(s3) + lui v1, 0x0706 + ori v1, 0x0504 + sw v1, 0x4(s3) + + //адрес текста в a0 + clear a1 + lui v1, MyAddr +read_char: + lbu v0, 0x0(a0) + nop + + sb v0, -0x0c(v1) // Запись символа в буфер + beq v0, zero, end_of_name_read + nop + addiu v1, 0x1 //Увеличиваем адрес записи в буфер + addiu a1, 0x1 //Счётчик +1 + addiu a0, 0x2 //адрес чтения + 2 + sltiu v0, a1, 0x7 + bne v0, zero, read_char //Продолжаем 6 символов... + nop + +end_of_name_read: + move a0, a1 // Перебрасываем cчётчик символов в a0 + addu s3, s3, a0 // получаем адрес количества спрайтов из таблицы + addiu s3, -0x1 // index -1 + lbu a1, 0x0(s3) // Читаем количество ширину спрайтов в a1 + nop + + lui s3, 0x1f80 //Формируем данные rect для команды LoadImage в scratch + ori s3, 0x03b0 // адрес хранения Rect + + lui a2, 0x0121 //Y + ori a2, 0x03C8 //X + sw a2, 0x0(s3) + lui a2, 0x000C //Heigth + sll a1, 1 //*2 = Ширина в 16 битах + or a2, a1 //Совмещаем ширину + sw a2, 0x4(s3) + sra a1, 1 //Возвращаем ширину блоков спрайта и передаём в функцию + + lui t3, 0x8008 + ori t3, t3, 0xf000 // Начало данных спрайта в scratch + + jal make_char_line_in_scratch //Формируем символы в scratch + nop + + lui a0, 0x1f80 // Формируем аргументы команды LoadImage + ori a0, 0x03b0 // адрес хранения Rect + jal 0x8004f994 //Вызов LoadImage + move a1, v0 //Адрес данных символов + jal 0x8004f6e8 //Тут же вызов DrawSync + clear a0 //Обязательно обнуляем аргумент 0 + + j 0x800ca148 //Возврат в оригинальную процедуру + nop \ No newline at end of file diff --git a/IS_charload_grouped.asm b/IS_charload_grouped.asm index 0b3af64..4d54f0b 100644 --- a/IS_charload_grouped.asm +++ b/IS_charload_grouped.asm @@ -7,22 +7,22 @@ make_char_line_in_scratch: 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 + move a1, t3 //dest address + addiu a0, a1, 0x184 li v0, 0 char_data_loop: sw v0, 0x0(a1) addiu a1, 0x4 - bne a1, a2, char_data_loop + bne a1, a0, char_data_loop nop - addiu s1, a0, 0x01c0 // destination address reset + move s1, t3 // destination address reset li a2, 0 // char index counter lbu v0, 0x0(t7) @@ -139,8 +139,10 @@ sprite_end: li v0, 0x1 bne v1, v0, NotShadow //Shadow character check nop - lui a0, 0x1f80 - ori a0, a0, 0x1c0 + + move a0, s1 + nop + make_shadow: //s3 - line width in bytes, a0 - data start move a1, s3 // a1 = ширина @@ -180,7 +182,7 @@ shadow_row_loop: beq v0, zero, no_s // если пикселя нет, пропускаем nop - // Проверяем граничный случай (8-й пиксель) + //Проверяем граничный случай (8-й пиксель) li v0, 0x7 // последний пиксель (X = 7) bne a2, v0, normal_case // если не 8-й пиксель - обычная обработка nop @@ -229,6 +231,6 @@ shadow_row_loop: NotShadow: lw t5,0x14(sp) lw ra,0x10(sp) //Restore stack and exit - nop + move v0, s1 jr ra addiu sp, sp, 0x18 \ No newline at end of file diff --git a/IS_main_grouped.asm b/IS_main_grouped.asm index 9b0f3ad..3d39af1 100644 --- a/IS_main_grouped.asm +++ b/IS_main_grouped.asm @@ -163,10 +163,10 @@ rect_scratchpad_template: make_sprite_size_table: lui s3, 0x1f80 ori s3, 0x03f0 // Будем серить в scratch - lui v0, 0x0303 // таблицей рассчитанных команд и ширин + lui v0, 0x0403 // таблицей рассчитанных команд и ширин ori v0, 0x0201 // необходимых для спрайтов линии (cmdCount << 2) sw v0, 0x0(s3) - lui v1, 0x0606 + lui v1, 0x0706 ori v1, 0x0504 sw v1, 0x4(s3) li v0, 0x0807 @@ -214,6 +214,9 @@ TextGroupReadLoop: nop move t5, a1 // Храним количество блоков для спрайта + lui t3, 0x1f80 + ori t3, t3, 0x1c0 // Начало данных спрайта в scratch + form_char_data_in_scratch: jal make_char_line_in_scratch //Вызываем процедуру формирования строки move a0, s2 //Передаём в неё длину строки в символах (a0) и в спрайтах (a1) @@ -472,10 +475,11 @@ PageTLoop: // Включаем дополнительные файлы .include "IS_charload_grouped.asm" +.include "IS_battle_GG_name_render.asm" .include "charCalcs.asm" .close .include "txtpatches.asm" // misc text patches -// compile with ./armips -sym SLPS_021.00.map IS_main_grouped.asm \ No newline at end of file +// compile with ./armips -sym SLPS_021.00.map -temp 123.txt is_main_grouped.asm \ No newline at end of file diff --git a/SLPS_021.00 b/SLPS_021.00 index 495ebd1..78f4b13 100644 Binary files a/SLPS_021.00 and b/SLPS_021.00 differ diff --git a/SLPS_021.00.bin b/SLPS_021.00.bin new file mode 100644 index 0000000..f6c5a6f Binary files /dev/null and b/SLPS_021.00.bin differ diff --git a/SLPS_021.00.map b/SLPS_021.00.map index 99aff58..9a46a05 100644 --- a/SLPS_021.00.map +++ b/SLPS_021.00.map @@ -24,53 +24,58 @@ 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 -80090288 pageloop -800902B8 rect_copy_scratch_to_ram -800902E4 rect_scratch_connect -80090338 cpu2vram_cmd_loop -800903A0 copy_char_data_start -800903BC copy_char_data_loop -800903E4 set_flush_cache_cmd -800903F4 cpu2vram_dma_link -80090450 chunk_making_end -8009046C textend -80090488 pagetloop -8009051C .asc:005A -80090576 .byt:0001 -80090577 .byt:0001 -80090578 make_char_line_in_scratch -80090594 char_data_clear -800905A4 char_data_loop -800905D0 chars_font_loop -800905F8 char_lines_loop -80090608 its_not_empty -80090698 not_last -800906A4 divideby4 -800906A4 zero_jump -800906B4 spacejump -800906D0 sprite_end -800906E8 make_shadow -8009070C shadow_row_loop -80090710 shadow_sprites_loop -80090720 shadow_pixel_loop -80090754 normal_case -80090778 no_s -800907A4 notshadow -800907B8 returncharsinstring -800907D4 ismy1bytestring -800907F0 notand1 -80090800 getnewchar -80090804 startreading -80090820 calcnextxcustom -80090848 japoldtext -80090850 ihavestringlength -80090868 retuncharstocity -80090884 ismy1bytecity -80090898 retuncharstocitydiv2 -800908B4 ismy1bytecitydiv2 -800908D0 notand1_2 +80090244 form_char_data_in_scratch +8009024C rect_cmd_init +80090274 rect_set_x +80090288 rect_set_width +80090290 pageloop +800902C0 rect_copy_scratch_to_ram +800902EC rect_scratch_connect +80090340 cpu2vram_cmd_loop +800903A8 copy_char_data_start +800903C4 copy_char_data_loop +800903EC set_flush_cache_cmd +800903FC cpu2vram_dma_link +80090458 chunk_making_end +80090474 textend +80090490 pagetloop +80090524 .asc:005A +8009057E .byt:0001 +8009057F .byt:0001 +80090580 make_char_line_in_scratch +8009059C char_data_clear +800905A8 char_data_loop +800905D4 chars_font_loop +800905FC char_lines_loop +8009060C its_not_empty +8009069C not_last +800906A8 divideby4 +800906A8 zero_jump +800906B8 spacejump +800906D4 sprite_end +800906EC make_shadow +80090710 shadow_row_loop +80090714 shadow_sprites_loop +80090724 shadow_pixel_loop +80090780 normal_case +800907A4 no_s +800907D0 notshadow +800907E4 _4bit_conversion_table2 +800907E4 customnamerender +80090834 make_sprite_size_table2 +8009085C read_char +80090888 end_of_name_read +800908F4 returncharsinstring +80090910 ismy1bytestring +8009092C notand1 +8009093C getnewchar +80090940 startreading +8009095C calcnextxcustom +80090984 japoldtext +8009098C ihavestringlength +800909A4 retuncharstocity +800909C0 ismy1bytecity +800909D4 retuncharstocitydiv2 +800909F0 ismy1bytecitydiv2 +80090A0C notand1_2  \ No newline at end of file diff --git a/ep_ai_main.asm b/ep_ai_main.asm new file mode 100644 index 0000000..4ba8cbb --- /dev/null +++ b/ep_ai_main.asm @@ -0,0 +1,245 @@ +; ===== ОСНОВНАЯ ФУНКЦИЯ ПЕЧАТИ ===== +.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,r4 ; s4 = адрес текста для чтения + sw s0,0x28(sp) + move s0,r5 ; s0 = параметр X + sw s1,0x2c(sp) + move s1,r6 ; s1 = параметр Y + sw s3,0x34(sp) + +; ===== ИНИЦИАЛИЗАЦИЯ ПАРАМЕТРОВ ТЕКСТА ===== + andi v0,v0,0xff + addiu s4,s4,0x2 ; Сдвигаем указатель текста на +2 байта + + lui s3,MyAddr + sw v0,-0x10(s3) ; Сохраняем счётчик байтов @ 8008fff0 + sh zero,-0xE(s3) ; Очищаем счётчик символов @ 8008fff2 + +; ===== ИНИЦИАЛИЗАЦИЯ DMA ЦЕПОЧЕК ===== + lui s3,0x1f80 + ori s3,s3,0x3d0 ; s3 = 1f8003d0 - команда копирования спрайта в scratch + + lui t0,0xff + ori t0,t0,0xffff ; t0 = 00FFFFFF (маска) + + andi r4,r7,0xff ; Режим текста (цвет и тень) + lui r7, 0x8008 ; r7 = 80080000 + lui r6, 0xff00 ; r6 = FF000000 (маска) + + ; ЗАГРУЗКА ЦЕПОЧКИ ФОРМИРОВАНИЯ СИМВОЛОВ + addiu t1,r7,-0x31a8 ; t1 = адрес цепочки формирования (8007ce58) + lw v1, -0x31a8(r7) ; v1 = текущая свободная цепочка формирования + lbu r5,0x60(sp) ; Флаг тени из стека + + and r6,v1,r6 ; r6 = старшие байты цепочки (FFxxxxxx) + andi r5,r5,0xff ; Очищаем режим текста + and v1,v1,t0 ; v1 = младшие байты цепочки (00xxxxxx) + or s5,v1,v0 ; s5 = адрес текущей цепочки формирования (80xxxxxx) + + ; ОБНОВЛЕНИЕ СЧЁТЧИКА И ЦЕПОЧКИ + lw v0,0x4(t1) ; Счётчик команд DMA + lw v1,0x0(s5) ; Следующая свободная цепочка + addiu v0,v0,-0x1 ; Уменьшаем счётчик + and v1,v1,t0 ; Обрезаем старший байт + or r6,r6,v1 ; Объединяем с старшими байтами + sw v0,0x4(t1) ; Сохраняем счётчик + jal storeColor + sw r6,-0x31a8(r7) ; Сохраняем обновлённую цепочку + +; ===== ИНИЦИАЛИЗАЦИЯ ЦЕПОЧКИ КОПИРОВАНИЯ ===== + move r4,s5 ; Адрес текущей цепочки + sll r5,s0,0x10 ; Координата X + sra r5,r5,0x10 + sll r6,s1,0x10 ; Координата Y + jal initCopyCharChain ; Инициализация цепочки копирования + sra r6,r6,0x10 + +; ===== НАСТРОЙКА SCRATCH PAD ДЛЯ DMA ===== + lui r6,0x1f80 + ori r6,r6,0x348 ; r6 = 1f800348 - начало данных символа в scratch + + ; ... (паттерны 4-bit и инициализация пропущены для краткости) + +; ===== ОСНОВНОЙ ЦИКЛ ОБРАБОТКИ СИМВОЛОВ ===== +NextChar: + addiu r4,r4,-0x20 ; Сдвигаем непечатаемые символы + + ; ОБРАБОТКА ПРОБЕЛОВ + bne r4,zero,SpaceCheckBranch + nop + + lui t2,MyAddr + lh v0,-0xE(t2) ; Текущий счётчик символов + nop + lh t3,-0x10(t2) ; Общий счётчик символов + addiu v0,v0,1 + beq v0,t3,SpaceCheckBranch ; Если последний символ - не обрабатываем пробел + nop + + ; ПРОБЕЛ - только сдвигаем позицию + sh v0,-0xE(t2) ; Обновляем счётчик + nop + lbu r4,0x0(s4) ; Следующий символ + + ; СДВИГ ПОЗИЦИИ X + lhu v0,0xa8(gp) ; Начальный X + lhu v1,0x8(s3) ; Текущий X в scratch + addiu v0,v0,0x6 ; Сдвиг на 6 пикселей + addu v1,v1,v0 ; Новый X + sh v1,0x8(s3) ; Обновляем в scratch DMA + + j NextChar + addiu s4,s4,0x1 ; Следующий байт текста + +; ===== ОБРАБОТКА НЕ-ПРОБЕЛЬНЫХ СИМВОЛОВ ===== +SpaceCheckBranch: + jal makeCharPixelsCustom ; СОЗДАЁМ ПИКСЕЛИ СИМВОЛА В SCRATCH + clear s2 + +; ===== ФОРМИРОВАНИЕ КОМАНДЫ КОПИРОВАНИЯ SPRITE ===== +PageLoop: + ; ЗАГРУЗКА ЦЕПОЧКИ КОПИРОВАНИЯ SPRITE + lw v0,-0x3198(s6) ; Адрес свободной цепочки копирования (8007ce68) + nop + and r4,v0,t2 ; Старшие байты + and v0,v0,s0 ; Младшие байты + or r5,v0,s1 ; r5 = полный адрес цепочки (80xxxxxx) + + ; ОБНОВЛЕНИЕ СЧЁТЧИКА КОПИРОВАНИЯ + lw v0,0x4(s7) ; Счётчик команд копирования + lw v1,0x0(r5) ; Следующая свободная цепочка + addiu v0,v0,-0x1 ; Уменьшаем счётчик + and v1,v1,s0 ; Обрезаем старший байт + or r4,r4,v1 ; Объединяем + sw v0,0x4(s7) ; Сохраняем счётчик + sw r4,-0x3198(s6) ; Сохраняем обновлённую цепочку + +; ===== КОПИРОВАНИЕ ИЗ SCRATCH В ЦЕПОЧКУ ===== +CopyCmdFromScratch: + ; Копируем команду DMA из scratch в цепочку + lw t9,0x0(s3) ; Количество команд (04000000) + lw t7,0x4(s3) ; Команда копирования спрайта (64808080) + lw t8,0x8(s3) ; Координаты XY на экране + lw t5,0xc(s3) ; CLUT и координаты текстуры + + ; СОХРАНЯЕМ В ЦЕПОЧКУ КОПИРОВАНИЯ + sw t9,0x0(r5) ; + sw t7,0x4(r5) + sw t8,0x8(r5) + sw t5,0xc(r5) + lw t9,0x10(s3) ; Размер спрайта после копирования + nop + sw t9,0x10(r5) ; Последняя команда + +; ===== СВЯЗЫВАНИЕ ЦЕПОЧЕК ===== + ; СВЯЗЬ: ЦЕПОЧКА ФОРМИРОВАНИЯ → ЦЕПОЧКА КОПИРОВАНИЯ + lw v1,0x18(t1) ; Текущая цепочка формирования + lw v0,0x0(r5) ; Текущая команда копирования + lw v1,0x0(v1) ; Следующая цепочка формирования + and v0,v0,t2 ; Маска старших байтов + and v1,v1,s0 ; Маска младших байтов + or v0,v0,v1 ; Объединяем + sw v0,0x0(r5) ; Обновляем команду + + ; ОБНОВЛЯЕМ ССЫЛКУ В ЦЕПОЧКЕ ФОРМИРОВАНИЯ + lw r4,0x18(t1) ; Адрес цепочки формирования + nop + lw v0,0x0(r4) ; Текущая команда формирования + and v1,r5,s0 ; Адрес цепочки копирования + and v0,v0,t2 ; Маска старших байтов + or v0,v0,v1 ; Объединяем + sw v0,0x0(r4) ; Сохраняем обновлённую ссылку + + sw r5,0x18(t1) ; Сохраняем текущую цепочку копирования + +; ===== ПРОВЕРКА ПЕРВОГО СИМВОЛА ===== + lhu v0,0x4(t6) ; Счётчик символов + nop + bne v0,zero,NotFirstChar ; Если не первый символ - пропускаем + nop + + ; ИНИЦИАЛИЗАЦИЯ ДЛЯ ПЕРВОГО СИМВОЛА + sw r5,0x28(t1) ; Устанавливаем первую цепочку символа + sw t8,0xc(t6) ; Сохраняем координаты в параметрах + +NotFirstChar: + +; ===== КОПИРОВАНИЕ ДАННЫХ СИМВОЛА ИЗ SCRATCH ===== + lui r5,0x1f80 + ori r5,r5,0x348 ; r5 = данные символа в scratch + + lw v0,-0x31a8(t3) ; Следующая свободная цепочка формирования + and r4,v0,t2 ; Старшие байты + and v0,v0,s0 ; Младшие байты + or r7,v0,s1 ; r7 = адрес цепочки (80xxxxxx) + move r6,r7 ; r6 = адрес назначения + + ; ... (копирование данных пропущено для краткости) + +; ===== СВЯЗЫВАНИЕ: ДАННЫЕ СИМВОЛА → КОМАНДА КОПИРОВАНИЯ ===== + lw v1,0x18(t1) ; Текущая команда копирования + lw v0,0x0(r7) ; Текущие данные символа + lw v1,0x0(v1) ; Следующая команда копирования + and v0,v0,t2 ; Маска старших байтов + and v1,v1,s0 ; Маска младших байтов + or v0,v0,v1 ; Объединяем + sw v0,0x0(r7) ; Обновляем данные символа + + ; ОБНОВЛЯЕМ ССЫЛКУ В КОМАНДЕ КОПИРОВАНИЯ + lw r4,0x18(t1) ; Адрес команды копирования + nop + lw v0,0x0(r4) ; Текущая команда + and v1,r7,s0 ; Адрес данных символа + and v0,v0,t2 ; Маска старших байтов + or v0,v0,v1 ; Объединяем + sw v0,0x0(r4) ; Сохраняем обновлённую ссылку + + sw r7,0x18(t1) ; Сохраняем текущие данные символа + +; ===== СДВИГ ПОЗИЦИИ ДЛЯ СЛЕДУЮЩЕГО СИМВОЛА ===== + lhu v0,0xa8(gp) ; Начальный X + lhu v1,0x8(s3) ; Текущий X + addiu v0,v0,0x6 ; Сдвиг на 6 пикселей + addu v1,v1,v0 ; Новый X + sh v1,0x8(s3) ; Обновляем + +; ===== ПРОВЕРКА ЗАВЕРШЕНИЯ ТЕКСТА ===== + lhu v0,0x4(s5) ; Счётчик символов DMA + lui t9,MyAddr + addiu v0,v0,0x1 + sh v0,0x4(s5) ; Сохраняем + + ; ПРОВЕРКА ПЕРЕПОЛНЕНИЯ DMA + lw v0,0x4(s7) ; Текущий счётчик + move v1,5 ; Минимальный лимит + sltu v0,v0,v1 ; Проверяем переполнение + bne v0,zero,TextEnd ; Если переполнение - завершаем + + ; ПРОВЕРКА КОНЦА СТРОКИ + lui t3,MyAddr + lhu v0,-0xE(t3) ; Текущий символ + lhu v1,-0x10(t3) ; Общее количество символов + addiu v0,v0,0x1 + lbu r4,0x0(s4) ; Следующий символ + sh v0,-0xE(t3) ; Сохраняем счётчик + addiu s4,s4,0x1 ; Сдвигаем указатель + + bne v0,v1,NextChar ; Если не конец - продолжаем + nop + +; ===== ЗАВЕРШЕНИЕ ОБРАБОТКИ ТЕКСТА ===== +TextEnd: + ; ... (восстановление контекста и завершение) \ No newline at end of file diff --git a/txtpatches.asm b/txtpatches.asm index 9ca7532..222f621 100644 --- a/txtpatches.asm +++ b/txtpatches.asm @@ -201,3 +201,17 @@ jal 0x8001af1c ;City Districts Table with pointers Here +;BATTLE CUSTOM NAME RENDERING REDIRECT +.open "0001_BATTLE_CODE.bin", 0x800AB000 + + +.org 0x800ca0f0 + +;ORIGINAL + ; jal 0x8001aef4 + ; move a0, s3 //a0 - адрес имени + + j customNameRender + move a0, s3 + +.close \ No newline at end of file