Difference between revisions of "Some event data setting routine"
Jump to navigation
Jump to search
(Created page with "<font face='Courier New'> 0014ca80: 3c018017 lui r1,0x8017 0014ca84: 00200821 addu r1,r1,r0 0014ca88: 8c284038 lw r8,0x4038(r1) load Block # 0014ca8c: 00000000 nop 00...") |
m |
||
Line 1: | Line 1: | ||
− | < | + | Seeks a new thread to run. |
+ | Start from currently running thread (0x80174038) and check the running flag (0x48) | ||
+ | - If the thread is running, changes all the registers values (r16 to r31) | ||
+ | - If there's no running thread after the current one switch to thread 0x00 | ||
+ | ----------------------------------------------------------------------------------------- | ||
+ | 0014ca80: 3c018017 lui r1,0x8017 | | ||
+ | 0014ca84: 00200821 addu r1,r1,r0 | | ||
+ | 0014ca88: 8c284038 lw r8,0x4038(r1) |{{f/adr|<nowiki>r8 = Currently running thread</nowiki>}} {{f/std|<nowiki> 0x80174038</nowiki>}} | ||
+ | 0014ca8c: 00000000 nop | | ||
+ | 0014ca90: 00084280 sll r8,r8,0x0a |{{f/std|<nowiki>r8 = Currently running thread * 0x400</nowiki>}} | ||
+ | 0014ca94: 3c018016 lui r1,0x8016 | | ||
+ | 0014ca98: 00200821 addu r1,r1,r0 | | ||
+ | 0014ca9c: 8c295f98 lw r9,0x5f98(r1) |{{f/adr|<nowiki>r3 = 8016986c - Thread array data pointer (EVTCHR)</nowiki>}} {{f/std|<nowiki> 0x80165f98</nowiki>}} | ||
+ | 0014caa0: 00000000 nop | | ||
+ | 0014caa4: 01094021 addu r8,r8,r9 |{{f/std|<nowiki>r8 = Currently running thread data pointer</nowiki>}} | ||
+ | 0014caa8: ad100010 sw r16,0x0010(r8) |{{f/store|<nowiki>Store all register in currently running thread</nowiki>}} | ||
+ | 0014caac: ad110014 sw r17,0x0014(r8) | | ||
+ | 0014cab0: ad120018 sw r18,0x0018(r8) | | ||
+ | 0014cab4: ad13001c sw r19,0x001c(r8) | | ||
+ | 0014cab8: ad140020 sw r20,0x0020(r8) | | ||
+ | 0014cabc: ad150024 sw r21,0x0024(r8) | | ||
+ | 0014cac0: ad160028 sw r22,0x0028(r8) | | ||
+ | 0014cac4: ad17002c sw r23,0x002c(r8) | | ||
+ | 0014cac8: ad1a0030 sw r26,0x0030(r8) | | ||
+ | 0014cacc: ad1b0034 sw r27,0x0034(r8) | | ||
+ | 0014cad0: ad1c0038 sw r28,0x0038(r8) | | ||
+ | 0014cad4: ad1d003c sw r29,0x003c(r8) | | ||
+ | 0014cad8: ad1e0040 sw r30,0x0040(r8) | | ||
+ | 0014cadc: ad1f0044 sw r31,0x0044(r8) | | ||
+ | 0014cae0: 25080400 addiu r8,r8,0x0400 {{f/bloop|<nowiki>LOOP</nowiki>}} {{f/adr|<nowiki>r8 = Next thread data pointer</nowiki>}} Seek a running thread after current thread | ||
+ | 0014cae4: 3c018017 lui r1,0x8017 | | ||
+ | 0014cae8: 00200821 addu r1,r1,r0 | | ||
+ | 0014caec: 8c2a4038 lw r10,0x4038(r1) |{{f/adr|<nowiki>r10 = Currently running thread ID</nowiki>}} | ||
+ | 0014caf0: 00000000 nop | | ||
+ | 0014caf4: 254a0001 addiu r10,r10,0x0001 |{{f/std|<nowiki>r10 = Next Thread ID</nowiki>}} | ||
+ | 0014caf8: 3c018017 lui r1,0x8017 | | ||
+ | 0014cafc: 00200821 addu r1,r1,r0 | | ||
+ | 0014cb00: ac2a4038 sw r10,0x4038(r1) |{{f/store|<nowiki>Store next Thread ID in Currently running thread</nowiki>}} | ||
+ | 0014cb04: 340b0010 ori r11,r0,0x0010 |{{f/std|<nowiki>r11 = 0x10</nowiki>}} | ||
+ | 0014cb08: 114b0007 beq r10,r11,0x0014cb28 {{f/Cond|<nowiki>If Next Thread ID <> 0x10 (Last Thread)</nowiki>}} | ||
+ | 0014cb0c: 00000000 nop | | ||
+ | 0014cb10: 8d0b0048 lw r11,0x0048(r8) |{{f/adr|<nowiki>r11 = Thread's Is Running flag</nowiki>}} | ||
+ | 0014cb14: 00000000 nop | | ||
+ | 0014cb18: 140b0009 bne r0,r11,0x0014cb40 {{f/Cond|<nowiki>If T his thread is not running loop</nowiki>}} /If thread is running, branch avoiding return to 1st thread | ||
+ | 0014cb1c: 00000000 nop | | ||
+ | 0014cb20: 080532b8 j 0x0014cae0 {{f/eloop|<nowiki>LOOP while not at the last Thread</nowiki>}} | ||
+ | 0014cb24: 00000000 nop | ||
+ | |||
+ | {{f/com|<nowiki>Last thread is reached and not running</nowiki>}} | ||
+ | 0014cb28: 3c018016 lui r1,0x8016 |{{f/std|<nowiki>r1 = 0x80160000</nowiki>}} | ||
+ | 0014cb2c: 00200821 addu r1,r1,r0 | | ||
+ | 0014cb30: 8c285f98 lw r8,0x5f98(r1) |{{f/adr|<nowiki>r8 = 8016986c - 1st Thread array data pointer (EVTCHR)</nowiki>}} {{f/std|<nowiki> 0x80165f98</nowiki>}} | ||
+ | 0014cb34: 3c018017 lui r1,0x8017 | | ||
+ | 0014cb38: 00200821 addu r1,r1,r0 | | ||
+ | 0014cb3c: ac204038 sw r0,0x4038(r1) |{{f/store|<nowiki>set 0x00 in currently running thread ID</nowiki>}} | ||
− | + | {{f/com|<nowiki>Thread is set (0x00 or New ID)</nowiki>}} | |
− | + | 0014cb40: 0c050b2a jal 0x00142ca8 |{{f/jal|00142ca8_-_00142d28|<nowiki>00142ca8_-_00142d28</nowiki>}} Store value at 0x801697d0 (based on thread task) - Might nullify 0x8016d9b8 | |
− | + | 0014cb44: 00000000 nop | | |
− | + | 0014cb48: 3c018017 lui r1,0x8017 | | |
− | + | 0014cb4c: 00200821 addu r1,r1,r0 | | |
− | + | 0014cb50: 8c284038 lw r8,0x4038(r1) |{{f/adr|<nowiki>r8 = Currently running thread ID</nowiki>}} | |
− | + | 0014cb54: 00000000 nop | | |
− | + | 0014cb58: 00084280 sll r8,r8,0x0a |{{f/std|<nowiki>r8 = Currently running thread ID x 0x400</nowiki>}} | |
− | + | 0014cb5c: 3c018016 lui r1,0x8016 | | |
− | + | 0014cb60: 00200821 addu r1,r1,r0 | | |
− | + | 0014cb64: 8c295f98 lw r9,0x5f98(r1) |{{f/adr|<nowiki>r9 = 8016986c - 1st Thread array data pointer (EVTCHR)</nowiki>}} | |
− | + | 0014cb68: 00000000 nop | | |
− | + | 0014cb6c: 01094021 addu r8,r8,r9 |{{f/adr|<nowiki>r8 = New thread data pointer</nowiki>}} | |
− | + | 0014cb70: 8d100010 lw r16,0x0010(r8) |{{f/load|<nowiki>load all register from new thread</nowiki>}} | |
− | + | 0014cb74: 8d110014 lw r17,0x0014(r8) | | |
− | + | 0014cb78: 8d120018 lw r18,0x0018(r8) | | |
− | + | 0014cb7c: 8d13001c lw r19,0x001c(r8) | | |
− | + | 0014cb80: 8d140020 lw r20,0x0020(r8) | | |
− | + | 0014cb84: 8d150024 lw r21,0x0024(r8) | | |
− | + | 0014cb88: 8d160028 lw r22,0x0028(r8) | | |
− | + | 0014cb8c: 8d17002c lw r23,0x002c(r8) | | |
− | + | 0014cb90: 8d1a0030 lw r26,0x0030(r8) | | |
− | + | 0014cb94: 8d1b0034 lw r27,0x0034(r8) | | |
− | + | 0014cb98: 8d1c0038 lw r28,0x0038(r8) | | |
− | + | 0014cb9c: 8d1d003c lw r29,0x003c(r8) | | |
− | + | 0014cba0: 8d1e0040 lw r30,0x0040(r8) | | |
− | + | 0014cba4: 8d1f0044 lw r31,0x0044(r8) |{{f/load|<nowiki>Might load a different return address</nowiki>}} | |
− | + | 0014cba8: 00000000 nop | |
− | + | 0014cbac: 03e00008 jr r31 | |
− | + | 0014cbb0: 00000000 nop | |
− | + | === Return locations === | |
− | + | '''Battle.bin''' | |
− | + | 0012dbf8: | |
− | + | 0012dc48: | |
− | + | 0012dda4: | |
− | + | 0012de7c: | |
− | + | 0012dea4: | |
− | + | 0012efe0: | |
− | + | 0012f7b4: | |
− | + | 001306f8: | |
− | + | 001316a4: | |
− | + | 001316c4: | |
− | + | 00131a78: | |
− | + | 00131b44: | |
− | + | 00131bd4: | |
− | + | 00131c94: | |
− | + | 00131cfc: | |
− | + | 00131d58: | |
− | + | 00131f30: | |
− | + | 00132028: | |
− | + | 001320d0: | |
− | + | 00132188: | |
− | + | 00132198: | |
− | + | 00132230: | |
− | + | 001327e8: | |
− | + | 00132b80: | |
− | + | 00132cb4: | |
− | + | 00132da8: | |
− | + | 00132fb4: | |
− | + | 001345b4: | |
− | + | 001346b8: | |
− | + | 00136068: | |
− | + | 001360c0: | |
− | + | 001362d4: | |
− | + | 001362dc: | |
− | + | 00136354: | |
− | + | 0013635c: | |
− | + | 001367ac: | |
− | + | 00136ab4: | |
− | + | 00136f18: | |
− | + | 00137070: | |
− | + | 0013713c: | |
− | + | 001375bc: | |
− | + | 00137754: | |
− | + | 001377d0: | |
− | + | 001377d8: | |
− | + | 00137af0: | |
− | + | 00138e24: | |
− | + | 00138e9c: | |
− | + | 00138fa4: | |
+ | 0013907c: | ||
+ | 0013a27c: | ||
+ | 0013a34c: | ||
+ | 0013a844: | ||
+ | 0013ae78: | ||
+ | 0013b100: | ||
+ | 0013b23c: | ||
+ | 0013b3d0: | ||
+ | 0013b4bc: | ||
+ | 0013b524: | ||
+ | 0013b55c: | ||
+ | 0013bbac: | ||
+ | 0013bc38: | ||
+ | 0013bc78: | ||
+ | 0013bce0: | ||
+ | 0013bd20: | ||
+ | 0013bff8: | ||
+ | 0013c04c: | ||
+ | 0013c0d0: | ||
+ | 0013c150: | ||
+ | 0013c358: | ||
+ | 0013c428: | ||
+ | 0013c6c8: | ||
+ | 0013c6d0: | ||
+ | 0013c818: | ||
+ | 0013c848: | ||
+ | 0013c878: | ||
+ | 0013c8e4: | ||
+ | 0013c914: | ||
+ | 0013c9a0: | ||
+ | 0013c9e4: | ||
+ | 0013ca18: | ||
+ | 0013cd50: | ||
+ | 0013d208: | ||
+ | 0013d218: | ||
+ | 0013df64: | ||
+ | 0013e5a4: | ||
+ | 0013e7f8: | ||
+ | 0013e84c: | ||
+ | 0013e8a8: | ||
+ | 0013ef24: | ||
+ | 001407d8: | ||
+ | 00141520: | ||
+ | 00142c08: | ||
+ | 001431b0: | ||
+ | 00143ed4: | ||
+ | 0014400c: | ||
+ | 001440bc: | ||
+ | 001440d8: | ||
+ | 001440e0: | ||
+ | 00144218: | ||
+ | 00144234: | ||
+ | 0014423c: | ||
+ | 001442cc: | ||
+ | 001442e4: | ||
+ | 001442fc: | ||
+ | 00144674: | ||
+ | 001447b4: | ||
+ | 001447d8: | ||
+ | 00144820: | ||
+ | 00144844: | ||
+ | 001449dc: | ||
+ | 00144a14: | ||
+ | 00144b68: | ||
+ | 00144d94: | ||
+ | 00144dbc: | ||
+ | 001453e4: | ||
+ | 0014540c: | ||
+ | 0014542c: | ||
+ | 00145490: | ||
+ | 001454b0: | ||
+ | 001454d0: | ||
+ | 001454f0: | ||
+ | 00145524: | ||
+ | 00145544: | ||
+ | 00145594: | ||
+ | 001458c4: | ||
+ | 001458f0: | ||
+ | 0014597c: | ||
+ | 001459d8: | ||
+ | 00145a54: | ||
+ | 00145d0c: | ||
+ | 00145d14: | ||
+ | 00145db8: | ||
+ | 00145f94: | ||
+ | 001460c0: | ||
+ | 001465a0: | ||
+ | 00146678: | ||
+ | 00146760: | ||
+ | 00146854: | ||
+ | 0014685c: | ||
+ | 00146910: | ||
+ | 00146918: | ||
+ | 00146b20: | ||
+ | 00146eb0: | ||
+ | 00146ff4: | ||
+ | 0014991c: | ||
+ | 00149980: | ||
+ | 00149ab4: | ||
+ | 0014a444: | ||
+ | 0014a500: | ||
+ | 0014c87c: | ||
+ | 0014c984: [[0014c958_-_0014c990]] | ||
+ | 0014c9e8: |
Latest revision as of 20:15, 3 March 2022
Seeks a new thread to run. Start from currently running thread (0x80174038) and check the running flag (0x48) - If the thread is running, changes all the registers values (r16 to r31) - If there's no running thread after the current one switch to thread 0x00 ----------------------------------------------------------------------------------------- 0014ca80: 3c018017 lui r1,0x8017 | 0014ca84: 00200821 addu r1,r1,r0 | 0014ca88: 8c284038 lw r8,0x4038(r1) |r8 = Currently running thread 0x80174038 0014ca8c: 00000000 nop | 0014ca90: 00084280 sll r8,r8,0x0a |r8 = Currently running thread * 0x400 0014ca94: 3c018016 lui r1,0x8016 | 0014ca98: 00200821 addu r1,r1,r0 | 0014ca9c: 8c295f98 lw r9,0x5f98(r1) |r3 = 8016986c - Thread array data pointer (EVTCHR) 0x80165f98 0014caa0: 00000000 nop | 0014caa4: 01094021 addu r8,r8,r9 |r8 = Currently running thread data pointer 0014caa8: ad100010 sw r16,0x0010(r8) |Store all register in currently running thread 0014caac: ad110014 sw r17,0x0014(r8) | 0014cab0: ad120018 sw r18,0x0018(r8) | 0014cab4: ad13001c sw r19,0x001c(r8) | 0014cab8: ad140020 sw r20,0x0020(r8) | 0014cabc: ad150024 sw r21,0x0024(r8) | 0014cac0: ad160028 sw r22,0x0028(r8) | 0014cac4: ad17002c sw r23,0x002c(r8) | 0014cac8: ad1a0030 sw r26,0x0030(r8) | 0014cacc: ad1b0034 sw r27,0x0034(r8) | 0014cad0: ad1c0038 sw r28,0x0038(r8) | 0014cad4: ad1d003c sw r29,0x003c(r8) | 0014cad8: ad1e0040 sw r30,0x0040(r8) | 0014cadc: ad1f0044 sw r31,0x0044(r8) | 0014cae0: 25080400 addiu r8,r8,0x0400 @LOOP r8 = Next thread data pointer Seek a running thread after current thread 0014cae4: 3c018017 lui r1,0x8017 | 0014cae8: 00200821 addu r1,r1,r0 | 0014caec: 8c2a4038 lw r10,0x4038(r1) |r10 = Currently running thread ID 0014caf0: 00000000 nop | 0014caf4: 254a0001 addiu r10,r10,0x0001 |r10 = Next Thread ID 0014caf8: 3c018017 lui r1,0x8017 | 0014cafc: 00200821 addu r1,r1,r0 | 0014cb00: ac2a4038 sw r10,0x4038(r1) |Store next Thread ID in Currently running thread 0014cb04: 340b0010 ori r11,r0,0x0010 |r11 = 0x10 0014cb08: 114b0007 beq r10,r11,0x0014cb28 #If Next Thread ID <> 0x10 (Last Thread) 0014cb0c: 00000000 nop | 0014cb10: 8d0b0048 lw r11,0x0048(r8) |r11 = Thread's Is Running flag 0014cb14: 00000000 nop | 0014cb18: 140b0009 bne r0,r11,0x0014cb40 #If T his thread is not running loop /If thread is running, branch avoiding return to 1st thread 0014cb1c: 00000000 nop | 0014cb20: 080532b8 j 0x0014cae0 Λ LOOP while not at the last Thread 0014cb24: 00000000 nop Last thread is reached and not running 0014cb28: 3c018016 lui r1,0x8016 |r1 = 0x80160000 0014cb2c: 00200821 addu r1,r1,r0 | 0014cb30: 8c285f98 lw r8,0x5f98(r1) |r8 = 8016986c - 1st Thread array data pointer (EVTCHR) 0x80165f98 0014cb34: 3c018017 lui r1,0x8017 | 0014cb38: 00200821 addu r1,r1,r0 | 0014cb3c: ac204038 sw r0,0x4038(r1) |set 0x00 in currently running thread ID Thread is set (0x00 or New ID) 0014cb40: 0c050b2a jal 0x00142ca8 |-->00142ca8_-_00142d28 Store value at 0x801697d0 (based on thread task) - Might nullify 0x8016d9b8 0014cb44: 00000000 nop | 0014cb48: 3c018017 lui r1,0x8017 | 0014cb4c: 00200821 addu r1,r1,r0 | 0014cb50: 8c284038 lw r8,0x4038(r1) |r8 = Currently running thread ID 0014cb54: 00000000 nop | 0014cb58: 00084280 sll r8,r8,0x0a |r8 = Currently running thread ID x 0x400 0014cb5c: 3c018016 lui r1,0x8016 | 0014cb60: 00200821 addu r1,r1,r0 | 0014cb64: 8c295f98 lw r9,0x5f98(r1) |r9 = 8016986c - 1st Thread array data pointer (EVTCHR) 0014cb68: 00000000 nop | 0014cb6c: 01094021 addu r8,r8,r9 |r8 = New thread data pointer 0014cb70: 8d100010 lw r16,0x0010(r8) |load all register from new thread 0014cb74: 8d110014 lw r17,0x0014(r8) | 0014cb78: 8d120018 lw r18,0x0018(r8) | 0014cb7c: 8d13001c lw r19,0x001c(r8) | 0014cb80: 8d140020 lw r20,0x0020(r8) | 0014cb84: 8d150024 lw r21,0x0024(r8) | 0014cb88: 8d160028 lw r22,0x0028(r8) | 0014cb8c: 8d17002c lw r23,0x002c(r8) | 0014cb90: 8d1a0030 lw r26,0x0030(r8) | 0014cb94: 8d1b0034 lw r27,0x0034(r8) | 0014cb98: 8d1c0038 lw r28,0x0038(r8) | 0014cb9c: 8d1d003c lw r29,0x003c(r8) | 0014cba0: 8d1e0040 lw r30,0x0040(r8) | 0014cba4: 8d1f0044 lw r31,0x0044(r8) |Might load a different return address 0014cba8: 00000000 nop 0014cbac: 03e00008 jr r31 0014cbb0: 00000000 nop
Return locations
Battle.bin 0012dbf8: 0012dc48: 0012dda4: 0012de7c: 0012dea4: 0012efe0: 0012f7b4: 001306f8: 001316a4: 001316c4: 00131a78: 00131b44: 00131bd4: 00131c94: 00131cfc: 00131d58: 00131f30: 00132028: 001320d0: 00132188: 00132198: 00132230: 001327e8: 00132b80: 00132cb4: 00132da8: 00132fb4: 001345b4: 001346b8: 00136068: 001360c0: 001362d4: 001362dc: 00136354: 0013635c: 001367ac: 00136ab4: 00136f18: 00137070: 0013713c: 001375bc: 00137754: 001377d0: 001377d8: 00137af0: 00138e24: 00138e9c: 00138fa4: 0013907c: 0013a27c: 0013a34c: 0013a844: 0013ae78: 0013b100: 0013b23c: 0013b3d0: 0013b4bc: 0013b524: 0013b55c: 0013bbac: 0013bc38: 0013bc78: 0013bce0: 0013bd20: 0013bff8: 0013c04c: 0013c0d0: 0013c150: 0013c358: 0013c428: 0013c6c8: 0013c6d0: 0013c818: 0013c848: 0013c878: 0013c8e4: 0013c914: 0013c9a0: 0013c9e4: 0013ca18: 0013cd50: 0013d208: 0013d218: 0013df64: 0013e5a4: 0013e7f8: 0013e84c: 0013e8a8: 0013ef24: 001407d8: 00141520: 00142c08: 001431b0: 00143ed4: 0014400c: 001440bc: 001440d8: 001440e0: 00144218: 00144234: 0014423c: 001442cc: 001442e4: 001442fc: 00144674: 001447b4: 001447d8: 00144820: 00144844: 001449dc: 00144a14: 00144b68: 00144d94: 00144dbc: 001453e4: 0014540c: 0014542c: 00145490: 001454b0: 001454d0: 001454f0: 00145524: 00145544: 00145594: 001458c4: 001458f0: 0014597c: 001459d8: 00145a54: 00145d0c: 00145d14: 00145db8: 00145f94: 001460c0: 001465a0: 00146678: 00146760: 00146854: 0014685c: 00146910: 00146918: 00146b20: 00146eb0: 00146ff4: 0014991c: 00149980: 00149ab4: 0014a444: 0014a500: 0014c87c: 0014c984: 0014c958_-_0014c990 0014c9e8: