RAM_ARM9:0201587C ; =============== S U B R O U T I N E =======================================
RAM_ARM9:0201587C
RAM_ARM9:0201587C
RAM_ARM9:0201587C ; void __fastcall initScriptEnvironment(ScriptEnvironment *vm)
RAM_ARM9:0201587C initScriptEnvironment ; CODE XREF: initEnvironment+6p
RAM_ARM9:0201587C ; intializeScriptEnvironment+6p
RAM_ARM9:0201587C 38 B5 PUSH {R3-R5,LR}
RAM_ARM9:0201587E 05 1C MOVS R5, R0
RAM_ARM9:02015880 2A 88 LDRH R2, [R5]
RAM_ARM9:02015882 00 24 MOVS R4, #0
RAM_ARM9:02015884 68 6A LDR R0, [R5,#ScriptEnvironment.script_stack_ptr] ; dest
RAM_ARM9:02015886 00 21 MOVS R1, #0 ; data
RAM_ARM9:02015888 92 00 LSLS R2, R2, #2
RAM_ARM9:0201588A 2C 62 STR R4, [R5,#ScriptEnvironment.script_pos_ptr]
RAM_ARM9:0201588C AC 76 STRB R4, [R5,#ScriptEnvironment.scriptCmpResult]
RAM_ARM9:0201588E 6C 76 STRB R4, [R5,#ScriptEnvironment.executionState]
RAM_ARM9:02015890 EC 61 STR R4, [R5,#ScriptEnvironment.funcptr]
RAM_ARM9:02015892 2C 76 STRB R4, [R5,#ScriptEnvironment.stackPointer]
RAM_ARM9:02015894 62 F0 9E EF BLX MI_CpuFill8 ; this zeroes out the entire script stack
RAM_ARM9:02015898 6A 88 LDRH R2, [R5,#2]
RAM_ARM9:0201589A A8 6A LDR R0, [R5,#ScriptEnvironment.vars] ; dest
RAM_ARM9:0201589C 00 21 MOVS R1, #0 ; data
RAM_ARM9:0201589E 92 00 LSLS R2, R2, #2
RAM_ARM9:020158A0 62 F0 98 EF BLX MI_CpuFill8 ; this zeroes out the environment var area
RAM_ARM9:020158A4 2C 63 STR R4, [R5,#ScriptEnvironment.script_callback_verifier]
RAM_ARM9:020158A6 6C 63 STR R4, [R5,#ScriptEnvironment.sys_info]
RAM_ARM9:020158A8 38 BD POP {R3-R5,PC}
RAM_ARM9:020158A8 ; End of function initScriptEnvironment
RAM_ARM9:020158A8
RAM_ARM9:020158A8 ; ---------------------------------------------------------------------------
RAM_ARM9:020158AA 00 00 DCW 0
RAM_ARM9:020158AC
RAM_ARM9:020158AC ; =============== S U B R O U T I N E =======================================
RAM_ARM9:020158AC
RAM_ARM9:020158AC
RAM_ARM9:020158AC ; void *__fastcall startScriptingVirtualMachine(s16 blkGroupID, ScriptEnvironment *vm)
RAM_ARM9:020158AC startScriptingVirtualMachine ; CODE XREF: setupScriptingEnvironment+68p
RAM_ARM9:020158AC
RAM_ARM9:020158AC marker = -0x18
RAM_ARM9:020158AC
RAM_ARM9:020158AC F8 B5 PUSH {R3-R7,LR} ; marker
RAM_ARM9:020158AE 0D 1C MOVS R5, R1 ; the &vm being passed in here is a local copy on the stack meant for copying to 1 of 4 globally accesible virtual machines
RAM_ARM9:020158B0 69 88 LDRH R1, [R5,#2] ; virtual machine- script interpreter
RAM_ARM9:020158B2 10 4B LDR R3, =aVm_c ; "vm.c"
RAM_ARM9:020158B4 00 22 MOVS R2, #0 ; clearBlock
RAM_ARM9:020158B6 8C 00 LSLS R4, R1, #2
RAM_ARM9:020158B8 29 88 LDRH R1, [R5]
RAM_ARM9:020158BA 3C 34 ADDS R4, #0x3C ; '<'
RAM_ARM9:020158BC 8E 00 LSLS R6, R1, #2
RAM_ARM9:020158BE 60 21 MOVS R1, #0x60 ; '`'
RAM_ARM9:020158C0 00 91 STR R1, [SP,#0x18+marker] ; marker
RAM_ARM9:020158C2 A1 19 ADDS R1, R4, R6 ; blockLength
RAM_ARM9:020158C4 24 F0 B0 FC BL allocateBlockFromExpHeap
RAM_ARM9:020158C8 07 1C MOVS R7, R0
RAM_ARM9:020158CA 00 21 MOVS R1, #0 ; data
RAM_ARM9:020158CC A2 19 ADDS R2, R4, R6 ; size
RAM_ARM9:020158CE 62 F0 82 EF BLX MI_CpuFill8
RAM_ARM9:020158D2 2B 1C MOVS R3, R5
RAM_ARM9:020158D4 3A 1C MOVS R2, R7
RAM_ARM9:020158D6 03 CB LDMIA R3!, {R0,R1} ; block copy of prepared script environment
RAM_ARM9:020158D8 03 C2 STMIA R2!, {R0,R1}
RAM_ARM9:020158DA 03 CB LDMIA R3!, {R0,R1}
RAM_ARM9:020158DC 03 C2 STMIA R2!, {R0,R1}
RAM_ARM9:020158DE 03 CB LDMIA R3!, {R0,R1}
RAM_ARM9:020158E0 03 C2 STMIA R2!, {R0,R1}
RAM_ARM9:020158E2 68 88 LDRH R0, [R5,#2] ; global var max
RAM_ARM9:020158E4 39 1C MOVS R1, R7
RAM_ARM9:020158E6 3C 31 ADDS R1, #0x3C ; '<'
RAM_ARM9:020158E8 80 00 LSLS R0, R0, #2 ; stack max * 4 for alignment(number * size)(stack is 32-bit)
RAM_ARM9:020158EA B9 62 STR R1, [R7,#0x28] ; store ptr to global var store
RAM_ARM9:020158EC 08 18 ADDS R0, R1, R0
RAM_ARM9:020158EE 78 62 STR R0, [R7,#0x24] ; stack ptr
RAM_ARM9:020158F0 38 1C MOVS R0, R7
RAM_ARM9:020158F2 F8 BD POP {R3-R7,PC}
RAM_ARM9:020158F2 ; End of function startScriptingVirtualMachine
RAM_ARM9:020158F2
RAM_ARM9:020158F2 ; ---------------------------------------------------------------------------
RAM_ARM9:020158F4 ; void *off_20158F4
RAM_ARM9:020158F4 38 A3 09 02 off_20158F4 DCD aVm_c ; DATA XREF: startScriptingVirtualMachine+6r
RAM_ARM9:020158F4 ; "vm.c"
RAM_ARM9:020158F8
RAM_ARM9:020158F8 ; =============== S U B R O U T I N E =======================================
RAM_ARM9:020158F8
RAM_ARM9:020158F8
RAM_ARM9:020158F8 ; void __fastcall freeScriptingEnvironment(ScriptEnvironment *vm)
RAM_ARM9:020158F8 freeScriptingEnvironment ; CODE XREF: freeScriptingAllocations+14p
RAM_ARM9:020158F8 00 4B LDR R3, =(freeBlock+1)
RAM_ARM9:020158FA 18 47 BX R3 ; freeBlock
RAM_ARM9:020158FA ; End of function freeScriptingEnvironment
RAM_ARM9:020158FA
RAM_ARM9:020158FA ; ---------------------------------------------------------------------------
RAM_ARM9:020158FC 79 A2 03 02 off_20158FC DCD freeBlock+1 ; DATA XREF: freeScriptingEnvironmentr
RAM_ARM9:02015900
RAM_ARM9:02015900 ; =============== S U B R O U T I N E =======================================
RAM_ARM9:02015900
RAM_ARM9:02015900
RAM_ARM9:02015900 ; void __fastcall initEnvironment(ScriptEnvironment *vm, ScrcmdEnvironment *work)
RAM_ARM9:02015900 initEnvironment ; CODE XREF: setupScriptingEnvironment+70p
RAM_ARM9:02015900 38 B5 PUSH {R3-R5,LR}
RAM_ARM9:02015902 05 1C MOVS R5, R0
RAM_ARM9:02015904 0C 1C MOVS R4, R1
RAM_ARM9:02015906 FF F7 B9 FF BL initScriptEnvironment
RAM_ARM9:0201590A EC 62 STR R4, [R5,#ScriptEnvironment.scrcmd_ptr]
RAM_ARM9:0201590C 38 BD POP {R3-R5,PC}
RAM_ARM9:0201590C ; End of function initEnvironment
RAM_ARM9:0201590C
RAM_ARM9:0201590C ; ---------------------------------------------------------------------------
RAM_ARM9:0201590E 00 DCB 0
RAM_ARM9:0201590F 00 DCB 0
RAM_ARM9:02015910
RAM_ARM9:02015910 ; =============== S U B R O U T I N E =======================================
RAM_ARM9:02015910
RAM_ARM9:02015910
RAM_ARM9:02015910 ; void __fastcall intializeScriptEnvironment(ScriptEnvironment *vm, u8 *initial_script_ptr_pos)
RAM_ARM9:02015910 intializeScriptEnvironment ; CODE XREF: setupScriptingEnvironment+AAp
RAM_ARM9:02015910 38 B5 PUSH {R3-R5,LR}
RAM_ARM9:02015912 04 1C MOVS R4, R0
RAM_ARM9:02015914 0D 1C MOVS R5, R1
RAM_ARM9:02015916 FF F7 B1 FF BL initScriptEnvironment
RAM_ARM9:0201591A 01 20 MOVS R0, #1
RAM_ARM9:0201591C 25 62 STR R5, [R4,#ScriptEnvironment.script_pos_ptr]
RAM_ARM9:0201591E 60 76 STRB R0, [R4,#ScriptEnvironment.executionState]
RAM_ARM9:02015920 38 BD POP {R3-R5,PC}
RAM_ARM9:02015920 ; End of function intializeScriptEnvironment
RAM_ARM9:02015920
RAM_ARM9:02015920 ; ---------------------------------------------------------------------------
RAM_ARM9:02015922 00 DCB 0
RAM_ARM9:02015923 00 DCB 0
RAM_ARM9:02015924
RAM_ARM9:02015924 ; =============== S U B R O U T I N E =======================================
RAM_ARM9:02015924
RAM_ARM9:02015924
RAM_ARM9:02015924 ; void __fastcall setScriptState_End(ScriptEnvironment *vm)
RAM_ARM9:02015924 setScriptState_End ; CODE XREF: s0002_endScript+2p
RAM_ARM9:02015924 ; s001D_endScriptExecution+Cp ...
RAM_ARM9:02015924 00 21 MOVS R1, #0
RAM_ARM9:02015926 41 76 STRB R1, [R0,#ScriptEnvironment.executionState]
RAM_ARM9:02015928 01 62 STR R1, [R0,#ScriptEnvironment.script_pos_ptr]
RAM_ARM9:0201592A 70 47 BX LR
RAM_ARM9:0201592A ; End of function setScriptState_End
RAM_ARM9:0201592A
RAM_ARM9:0201592C
RAM_ARM9:0201592C ; =============== S U B R O U T I N E =======================================
RAM_ARM9:0201592C
RAM_ARM9:0201592C
RAM_ARM9:0201592C ; bool __fastcall scriptHandler_main(ScriptEnvironment *vm)
RAM_ARM9:0201592C scriptHandler_main ; CODE XREF: runAllVirtualMachines+12p
RAM_ARM9:0201592C ; execute_script+3Ep
RAM_ARM9:0201592C 70 B5 PUSH {R4-R6,LR}
RAM_ARM9:0201592E 05 1C MOVS R5, R0
RAM_ARM9:02015930 69 7E LDRB R1, [R5,#ScriptEnvironment.executionState]
RAM_ARM9:02015932 00 29 CMP R1, #0
RAM_ARM9:02015934 04 D0 BEQ script_over
RAM_ARM9:02015936 01 29 CMP R1, #1
RAM_ARM9:02015938 13 D0 BEQ script_run
RAM_ARM9:0201593A 02 29 CMP R1, #2
RAM_ARM9:0201593C 02 D0 BEQ run_assembly
RAM_ARM9:0201593E 49 E0 B pause_script_interpreter
RAM_ARM9:02015940 ; ---------------------------------------------------------------------------
RAM_ARM9:02015940
RAM_ARM9:02015940 script_over ; CODE XREF: scriptHandler_main+8j
RAM_ARM9:02015940 00 20 MOVS R0, #0
RAM_ARM9:02015942 70 BD POP {R4-R6,PC}
RAM_ARM9:02015944 ; ---------------------------------------------------------------------------
RAM_ARM9:02015944
RAM_ARM9:02015944 run_assembly ; CODE XREF: scriptHandler_main+10j
RAM_ARM9:02015944 EA 69 LDR R2, [R5,#ScriptEnvironment.funcptr] ; get assembly routine to run
RAM_ARM9:02015946 00 2A CMP R2, #0 ; is there a routine?
RAM_ARM9:02015948 09 D0 BEQ swap_asm_to_script ; if not, there may have been a mistake. jump back to script execution
RAM_ARM9:0201594A E9 6A LDR R1, [R5,#ScriptEnvironment.scrcmd_ptr] ; load script command info struct ptr
RAM_ARM9:0201594C 90 47 BLX R2
RAM_ARM9:0201594E 01 28 CMP R0, #1
RAM_ARM9:02015950 03 D1 BNE exit_success
RAM_ARM9:02015952 00 20 MOVS R0, #0
RAM_ARM9:02015954 E8 61 STR R0, [R5,#ScriptEnvironment.funcptr] ; set asm routine ptr to 0 after it runs
RAM_ARM9:02015956 01 20 MOVS R0, #1
RAM_ARM9:02015958 68 76 STRB R0, [R5,#ScriptEnvironment.executionState] ; set script handler status back to executing scripts instead of asm
RAM_ARM9:0201595A
RAM_ARM9:0201595A exit_success ; CODE XREF: scriptHandler_main+24j
RAM_ARM9:0201595A 01 20 MOVS R0, #1 ; always exit after running assembly
RAM_ARM9:0201595C 70 BD POP {R4-R6,PC}
RAM_ARM9:0201595E ; ---------------------------------------------------------------------------
RAM_ARM9:0201595E
RAM_ARM9:0201595E swap_asm_to_script ; CODE XREF: scriptHandler_main+1Cj
RAM_ARM9:0201595E 01 20 MOVS R0, #1 ; change from r5 + 0x19 = 2 to r5 + 0x19 = 1, so switch to script execution, not assembly execution
RAM_ARM9:02015960 68 76 STRB R0, [R5,#ScriptEnvironment.executionState]
RAM_ARM9:02015962
RAM_ARM9:02015962 script_run ; CODE XREF: scriptHandler_main+Cj
RAM_ARM9:02015962 ; scriptHandler_main+7Aj ...
RAM_ARM9:02015962 28 6A LDR R0, [R5,#ScriptEnvironment.script_pos_ptr] ; load ptr to next script command to be read
RAM_ARM9:02015964 00 28 CMP R0, #0
RAM_ARM9:02015966 02 D1 BNE script_continue
RAM_ARM9:02015968 00 20 MOVS R0, #0
RAM_ARM9:0201596A 68 76 STRB R0, [R5,#ScriptEnvironment.executionState] ; if the next command is 0, set the continuance byte to 0 and exit
RAM_ARM9:0201596C 70 BD POP {R4-R6,PC}
RAM_ARM9:0201596E ; ---------------------------------------------------------------------------
RAM_ARM9:0201596E
RAM_ARM9:0201596E script_continue ; CODE XREF: scriptHandler_main+3Aj
RAM_ARM9:0201596E 28 1C MOVS R0, R5 ; vm
RAM_ARM9:02015970 00 F0 3A F8 BL scriptRead16
RAM_ARM9:02015974 04 1C MOVS R4, R0
RAM_ARM9:02015976 A8 68 LDR R0, [R5,#ScriptEnvironment.cmdMax] ; get total scrcmd count(0x2F3)
RAM_ARM9:02015978 84 42 CMP R4, R0 ; is this command valid?(is it 2F2 or less)
RAM_ARM9:0201597A 15 D3 BCC verify_scrcmd
RAM_ARM9:0201597C 6B 69 LDR R3, [R5,#0x14]
RAM_ARM9:0201597E 9C 42 CMP R4, R3
RAM_ARM9:02015980 06 D3 BCC loc_2015990
RAM_ARM9:02015982 28 69 LDR R0, [R5,#0x10]
RAM_ARM9:02015984 C0 18 ADDS R0, R0, R3
RAM_ARM9:02015986 84 42 CMP R4, R0
RAM_ARM9:02015988 02 D2 BCS loc_2015990
RAM_ARM9:0201598A EA 68 LDR R2, [R5,#0xC]
RAM_ARM9:0201598C 00 2A CMP R2, #0
RAM_ARM9:0201598E 02 D1 BNE loc_2015996
RAM_ARM9:02015990
RAM_ARM9:02015990 loc_2015990 ; CODE XREF: scriptHandler_main+54j
RAM_ARM9:02015990 ; scriptHandler_main+5Cj
RAM_ARM9:02015990 00 20 MOVS R0, #0
RAM_ARM9:02015992 68 76 STRB R0, [R5,#0x19]
RAM_ARM9:02015994 70 BD POP {R4-R6,PC}
RAM_ARM9:02015996 ; ---------------------------------------------------------------------------
RAM_ARM9:02015996
RAM_ARM9:02015996 loc_2015996 ; CODE XREF: scriptHandler_main+62j
RAM_ARM9:02015996 E3 1A SUBS R3, R4, R3
RAM_ARM9:02015998 9B 00 LSLS R3, R3, #2
RAM_ARM9:0201599A E9 6A LDR R1, [R5,#ScriptEnvironment.scrcmd_ptr]
RAM_ARM9:0201599C D2 58 LDR R2, [R2,R3]
RAM_ARM9:0201599E 28 1C MOVS R0, R5
RAM_ARM9:020159A0 90 47 BLX R2
RAM_ARM9:020159A2 01 28 CMP R0, #1
RAM_ARM9:020159A4 18 D0 BEQ script_done_success
RAM_ARM9:020159A6 DC E7 B script_run
RAM_ARM9:020159A8 ; ---------------------------------------------------------------------------
RAM_ARM9:020159A8
RAM_ARM9:020159A8 verify_scrcmd ; CODE XREF: scriptHandler_main+4Ej
RAM_ARM9:020159A8 2E 6B LDR R6, [R5,#ScriptEnvironment.script_callback_verifier]
RAM_ARM9:020159AA 00 2E CMP R6, #0
RAM_ARM9:020159AC 09 D0 BEQ execute_scr_cmd
RAM_ARM9:020159AE E9 6A LDR R1, [R5,#ScriptEnvironment.scrcmd_ptr]
RAM_ARM9:020159B0 6A 6B LDR R2, [R5,#ScriptEnvironment.sys_info]
RAM_ARM9:020159B2 28 1C MOVS R0, R5
RAM_ARM9:020159B4 23 1C MOVS R3, R4
RAM_ARM9:020159B6 B0 47 BLX R6
RAM_ARM9:020159B8 00 28 CMP R0, #0
RAM_ARM9:020159BA 02 D1 BNE execute_scr_cmd
RAM_ARM9:020159BC 00 20 MOVS R0, #0
RAM_ARM9:020159BE 68 76 STRB R0, [R5,#ScriptEnvironment.executionState]
RAM_ARM9:020159C0 70 BD POP {R4-R6,PC}
RAM_ARM9:020159C2 ; ---------------------------------------------------------------------------
RAM_ARM9:020159C2
RAM_ARM9:020159C2 execute_scr_cmd ; CODE XREF: scriptHandler_main+80j
RAM_ARM9:020159C2 ; scriptHandler_main+8Ej
RAM_ARM9:020159C2 6B 68 LDR R3, [R5,#ScriptEnvironment.cmdArray] ; load address of script command function array
RAM_ARM9:020159C4 A2 00 LSLS R2, R4, #2 ; 4-byte alignment
RAM_ARM9:020159C6 E9 6A LDR R1, [R5,#ScriptEnvironment.scrcmd_ptr] ; load script command info pointer
RAM_ARM9:020159C8 9A 58 LDR R2, [R3,R2]
RAM_ARM9:020159CA 28 1C MOVS R0, R5
RAM_ARM9:020159CC 90 47 BLX R2
RAM_ARM9:020159CE 01 28 CMP R0, #1 ; did we hit the end of the script? (1 = yes)
RAM_ARM9:020159D0 02 D0 BEQ script_done_success
RAM_ARM9:020159D2 C6 E7 B script_run
RAM_ARM9:020159D4 ; ---------------------------------------------------------------------------
RAM_ARM9:020159D4
RAM_ARM9:020159D4 pause_script_interpreter ; CODE XREF: scriptHandler_main+12j
RAM_ARM9:020159D4 00 20 MOVS R0, #0
RAM_ARM9:020159D6 68 76 STRB R0, [R5,#ScriptEnvironment.executionState]
RAM_ARM9:020159D8
RAM_ARM9:020159D8 script_done_success ; CODE XREF: scriptHandler_main+78j
RAM_ARM9:020159D8 ; scriptHandler_main+A4j
RAM_ARM9:020159D8 01 20 MOVS R0, #1
RAM_ARM9:020159DA 70 BD POP {R4-R6,PC}
RAM_ARM9:020159DA ; End of function scriptHandler_main
RAM_ARM9:020159DA
RAM_ARM9:020159DC
RAM_ARM9:020159DC ; =============== S U B R O U T I N E =======================================
RAM_ARM9:020159DC
RAM_ARM9:020159DC
RAM_ARM9:020159DC ; ScrcmdEnvironment *__fastcall getScrcmdEnvironment(ScriptEnvironment *vm)
RAM_ARM9:020159DC getScrcmdEnvironment ; CODE XREF: freeScriptingAllocations+4p
RAM_ARM9:020159DC ; setScriptCallbackVerifier+4p
RAM_ARM9:020159DC C0 6A LDR R0, [R0,#ScriptEnvironment.scrcmd_ptr]
RAM_ARM9:020159DE 70 47 BX LR
RAM_ARM9:020159DE ; End of function getScrcmdEnvironment
RAM_ARM9:020159DE
RAM_ARM9:020159E0
RAM_ARM9:020159E0 ; =============== S U B R O U T I N E =======================================
RAM_ARM9:020159E0
RAM_ARM9:020159E0
RAM_ARM9:020159E0 saveScriptCallbackSysinfo ; CODE XREF: setScriptCallbackVerifier+12p
RAM_ARM9:020159E0 01 63 STR R1, [R0,#ScriptEnvironment.script_callback_verifier]
RAM_ARM9:020159E2 42 63 STR R2, [R0,#ScriptEnvironment.sys_info]
RAM_ARM9:020159E4 70 47 BX LR
RAM_ARM9:020159E4 ; End of function saveScriptCallbackSysinfo
RAM_ARM9:020159E4
RAM_ARM9:020159E4 ; ---------------------------------------------------------------------------
RAM_ARM9:020159E6 00 DCB 0
RAM_ARM9:020159E7 00 DCB 0
RAM_ARM9:020159E8
RAM_ARM9:020159E8 ; =============== S U B R O U T I N E =======================================
RAM_ARM9:020159E8
RAM_ARM9:020159E8
RAM_ARM9:020159E8 ; u16 __fastcall scriptRead16(ScriptEnvironment *vm)
RAM_ARM9:020159E8 scriptRead16 ; CODE XREF: scriptHandler_main+44p
RAM_ARM9:020159E8 ; s0003_pauseScriptSysForXTurns+6p ...
RAM_ARM9:020159E8 02 6A LDR R2, [R0,#ScriptEnvironment.script_pos_ptr] ; load offset of next script command
RAM_ARM9:020159EA 13 78 LDRB R3, [R2] ; load next byte of script
RAM_ARM9:020159EC 51 1C ADDS R1, R2, #1 ; add 1 to current script command offset ptr
RAM_ARM9:020159EE 01 62 STR R1, [R0,#ScriptEnvironment.script_pos_ptr] ; store that pointer back to script info base
RAM_ARM9:020159F0 52 78 LDRB R2, [R2,#1] ; load next byte of current script command
RAM_ARM9:020159F2 49 1C ADDS R1, R1, #1 ; add 1 to current script command offset ptr
RAM_ARM9:020159F4 01 62 STR R1, [R0,#ScriptEnvironment.script_pos_ptr] ; store that pointer back to script info base
RAM_ARM9:020159F6 10 06 LSLS R0, R2, #0x18
RAM_ARM9:020159F8 00 0C LSRS R0, R0, #0x10
RAM_ARM9:020159FA 18 18 ADDS R0, R3, R0
RAM_ARM9:020159FC 00 04 LSLS R0, R0, #0x10
RAM_ARM9:020159FE 00 0C LSRS R0, R0, #0x10
RAM_ARM9:02015A00 70 47 BX LR
RAM_ARM9:02015A00 ; End of function scriptRead16
RAM_ARM9:02015A00
RAM_ARM9:02015A00 ; ---------------------------------------------------------------------------
RAM_ARM9:02015A02 00 DCB 0
RAM_ARM9:02015A03 00 DCB 0
RAM_ARM9:02015A04
RAM_ARM9:02015A04 ; =============== S U B R O U T I N E =======================================
RAM_ARM9:02015A04
RAM_ARM9:02015A04
RAM_ARM9:02015A04 ; u32 __fastcall scriptRead32(ScriptEnvironment *vm)
RAM_ARM9:02015A04 scriptRead32 ; CODE XREF: setupScriptingEnvironment+BAp
RAM_ARM9:02015A04 ; s0004_pushPCAndJumpToLeafScript+4p ...
RAM_ARM9:02015A04 30 B4 PUSH {R4,R5}
RAM_ARM9:02015A06 02 6A LDR R2, [R0,#ScriptEnvironment.script_pos_ptr]
RAM_ARM9:02015A08 13 78 LDRB R3, [R2]
RAM_ARM9:02015A0A 51 1C ADDS R1, R2, #1
RAM_ARM9:02015A0C 4D 1C ADDS R5, R1, #1
RAM_ARM9:02015A0E 01 62 STR R1, [R0,#ScriptEnvironment.script_pos_ptr]
RAM_ARM9:02015A10 52 78 LDRB R2, [R2,#1]
RAM_ARM9:02015A12 6C 1C ADDS R4, R5, #1
RAM_ARM9:02015A14 05 62 STR R5, [R0,#ScriptEnvironment.script_pos_ptr]
RAM_ARM9:02015A16 49 78 LDRB R1, [R1,#1]
RAM_ARM9:02015A18 04 62 STR R4, [R0,#ScriptEnvironment.script_pos_ptr]
RAM_ARM9:02015A1A 6D 78 LDRB R5, [R5,#1]
RAM_ARM9:02015A1C 64 1C ADDS R4, R4, #1
RAM_ARM9:02015A1E 04 62 STR R4, [R0,#ScriptEnvironment.script_pos_ptr]
RAM_ARM9:02015A20 00 20 MOVS R0, #0
RAM_ARM9:02015A22 40 19 ADDS R0, R0, R5
RAM_ARM9:02015A24 00 02 LSLS R0, R0, #8
RAM_ARM9:02015A26 40 18 ADDS R0, R0, R1
RAM_ARM9:02015A28 00 02 LSLS R0, R0, #8
RAM_ARM9:02015A2A 80 18 ADDS R0, R0, R2
RAM_ARM9:02015A2C 00 02 LSLS R0, R0, #8
RAM_ARM9:02015A2E C0 18 ADDS R0, R0, R3
RAM_ARM9:02015A30 30 BC POP {R4,R5}
RAM_ARM9:02015A32 70 47 BX LR
RAM_ARM9:02015A32 ; End of function scriptRead32
RAM_ARM9:02015A32
RAM_ARM9:02015A34
RAM_ARM9:02015A34 ; =============== S U B R O U T I N E =======================================
RAM_ARM9:02015A34
RAM_ARM9:02015A34
RAM_ARM9:02015A34 ; void __fastcall pushScriptStack(ScriptEnvironment *vm, u32 val)
RAM_ARM9:02015A34 pushScriptStack ; CODE XREF: pushProgramCounterAndSetNew+8p
RAM_ARM9:02015A34 ; s0008_pushParamVarToScriptStack+Cp ...
RAM_ARM9:02015A34 18 B4 PUSH {R3,R4}
RAM_ARM9:02015A36 04 7E LDRB R4, [R0,#0x18]
RAM_ARM9:02015A38 02 88 LDRH R2, [R0]
RAM_ARM9:02015A3A 63 1C ADDS R3, R4, #1
RAM_ARM9:02015A3C 93 42 CMP R3, R2
RAM_ARM9:02015A3E 05 DA BGE loc_2015A4C
RAM_ARM9:02015A40 43 6A LDR R3, [R0,#0x24]
RAM_ARM9:02015A42 A2 00 LSLS R2, R4, #2
RAM_ARM9:02015A44 99 50 STR R1, [R3,R2]
RAM_ARM9:02015A46 01 7E LDRB R1, [R0,#0x18]
RAM_ARM9:02015A48 49 1C ADDS R1, R1, #1
RAM_ARM9:02015A4A 01 76 STRB R1, [R0,#0x18]
RAM_ARM9:02015A4C
RAM_ARM9:02015A4C loc_2015A4C ; CODE XREF: pushScriptStack+Aj
RAM_ARM9:02015A4C 18 BC POP {R3,R4}
RAM_ARM9:02015A4E 70 47 BX LR
RAM_ARM9:02015A4E ; End of function pushScriptStack
RAM_ARM9:02015A4E
RAM_ARM9:02015A50
RAM_ARM9:02015A50 ; =============== S U B R O U T I N E =======================================
RAM_ARM9:02015A50
RAM_ARM9:02015A50
RAM_ARM9:02015A50 ; u32 __fastcall popScriptStack(ScriptEnvironment *vm)
RAM_ARM9:02015A50 popScriptStack ; CODE XREF: popStackProgramCounter+4p
RAM_ARM9:02015A50 ; s0007_popScriptStackDerefParamVar+6p ...
RAM_ARM9:02015A50 01 7E LDRB R1, [R0,#0x18]
RAM_ARM9:02015A52 00 29 CMP R1, #0
RAM_ARM9:02015A54 01 D1 BNE loc_2015A5A
RAM_ARM9:02015A56 00 20 MOVS R0, #0
RAM_ARM9:02015A58 70 47 BX LR
RAM_ARM9:02015A5A ; ---------------------------------------------------------------------------
RAM_ARM9:02015A5A
RAM_ARM9:02015A5A loc_2015A5A ; CODE XREF: popScriptStack+4j
RAM_ARM9:02015A5A 49 1E SUBS R1, R1, #1
RAM_ARM9:02015A5C 01 76 STRB R1, [R0,#0x18]
RAM_ARM9:02015A5E 41 6A LDR R1, [R0,#0x24]
RAM_ARM9:02015A60 00 7E LDRB R0, [R0,#0x18]
RAM_ARM9:02015A62 80 00 LSLS R0, R0, #2
RAM_ARM9:02015A64 08 58 LDR R0, [R1,R0]
RAM_ARM9:02015A66 70 47 BX LR
RAM_ARM9:02015A66 ; End of function popScriptStack
RAM_ARM9:02015A66
RAM_ARM9:02015A68
RAM_ARM9:02015A68 ; =============== S U B R O U T I N E =======================================
RAM_ARM9:02015A68
RAM_ARM9:02015A68
RAM_ARM9:02015A68 ; void __fastcall jumpScrPos(ScriptEnvironment *vm, u32 address)
RAM_ARM9:02015A68 jumpScrPos ; CODE XREF: s001E_unconditionalJump+10p
RAM_ARM9:02015A68 ; s001F_conditionalJump+38p
RAM_ARM9:02015A68 01 62 STR R1, [R0,#0x20]
RAM_ARM9:02015A6A 70 47 BX LR
RAM_ARM9:02015A6A ; End of function jumpScrPos
RAM_ARM9:02015A6A
RAM_ARM9:02015A6C
RAM_ARM9:02015A6C ; =============== S U B R O U T I N E =======================================
RAM_ARM9:02015A6C
RAM_ARM9:02015A6C
RAM_ARM9:02015A6C ; void __fastcall pushProgramCounterAndSetNew(ScriptEnvironment *vm, void *pJumpScript)
RAM_ARM9:02015A6C pushProgramCounterAndSetNew ; CODE XREF: s0004_pushPCAndJumpToLeafScript+10p
RAM_ARM9:02015A6C ; s0020_conditionalCall+28p
RAM_ARM9:02015A6C 38 B5 PUSH {R3-R5,LR}
RAM_ARM9:02015A6E 05 1C MOVS R5, R0
RAM_ARM9:02015A70 0C 1C MOVS R4, R1
RAM_ARM9:02015A72 29 6A LDR R1, [R5,#0x20] ; val
RAM_ARM9:02015A74 FF F7 DE FF BL pushScriptStack
RAM_ARM9:02015A78 2C 62 STR R4, [R5,#0x20]
RAM_ARM9:02015A7A 38 BD POP {R3-R5,PC}
RAM_ARM9:02015A7A ; End of function pushProgramCounterAndSetNew
RAM_ARM9:02015A7A
RAM_ARM9:02015A7C
RAM_ARM9:02015A7C ; =============== S U B R O U T I N E =======================================
RAM_ARM9:02015A7C
RAM_ARM9:02015A7C
RAM_ARM9:02015A7C ; void __fastcall popStackProgramCounter(ScriptEnvironment *vm)
RAM_ARM9:02015A7C popStackProgramCounter ; CODE XREF: s0005_setStackToProgramCounter+2p
RAM_ARM9:02015A7C 10 B5 PUSH {R4,LR}
RAM_ARM9:02015A7E 04 1C MOVS R4, R0
RAM_ARM9:02015A80 FF F7 E6 FF BL popScriptStack
RAM_ARM9:02015A84 20 62 STR R0, [R4,#0x20]
RAM_ARM9:02015A86 10 BD POP {R4,PC}
RAM_ARM9:02015A86 ; End of function popStackProgramCounter
RAM_ARM9:02015A86
RAM_ARM9:02015A88
RAM_ARM9:02015A88 ; =============== S U B R O U T I N E =======================================
RAM_ARM9:02015A88
RAM_ARM9:02015A88
RAM_ARM9:02015A88 ; void __fastcall setScriptState_Asm(ScriptEnvironment *vm, AsmCall *func_ptr)
RAM_ARM9:02015A88 setScriptState_Asm ; CODE XREF: s0003_pauseScriptSysForXTurns+16p
RAM_ARM9:02015A88 ; s001C_callScriptLib+4Ap ...
RAM_ARM9:02015A88 02 22 MOVS R2, #2
RAM_ARM9:02015A8A 42 76 STRB R2, [R0,#0x19]
RAM_ARM9:02015A8C C1 61 STR R1, [R0,#0x1C]
RAM_ARM9:02015A8E 70 47 BX LR
RAM_ARM9:02015A8E ; End of function setScriptState_Asm
Comments
0 B
|👍
/👎
0 B
|👍
/👎