add B2 patch support on PSO Plus
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
.version GC_V3
|
||||
.quest_num 88500
|
||||
.language 1
|
||||
.episode Episode1
|
||||
.name "GC v1.2 USA patch enabler"
|
||||
.short_desc ""
|
||||
.long_desc ""
|
||||
|
||||
start:
|
||||
// Create quest opcode handlers for F9FE to call flush_code and F9FF to call
|
||||
// the copied code. Fortunately, quest_call_l leaved the byteswapped value of
|
||||
// the opcode argument in r4, so as long as the address ends with 00, it will
|
||||
// be valid as the size argument to flush_code. We'll end up flushing many
|
||||
// more bytes than needed, but this isn't a problem.
|
||||
leti r3, 0x80004000 // dest addr
|
||||
write4 0x804C81C8, 0x801F2A14 // quest_call_l
|
||||
write4 0x804C81CC, 0x8000C274 // flush_code
|
||||
write4 0x804C81D0, r3 // written code ptr
|
||||
|
||||
read4 r0, 0x805D5E70 // quest_script_base
|
||||
leto r4, code
|
||||
read4 r4, r4
|
||||
add r4, r0 // r4 = address of code label
|
||||
leto r5, code_end
|
||||
read4 r5, r5
|
||||
add r5, r0 // r5 = address of code_end label
|
||||
|
||||
// Copy all data from [code, code_end) to 80004000
|
||||
copy_byte:
|
||||
jmp_eq r4, r5, copy_done
|
||||
read1 r0, r4
|
||||
write1 r3, r0
|
||||
addi r3, 1
|
||||
addi r4, 1
|
||||
jmp copy_byte
|
||||
|
||||
copy_done:
|
||||
// Call flush_code(0x80004000, 0x00400080) to commit it to memory
|
||||
.data F9FE00400080
|
||||
// Call the copied native code
|
||||
.data F9FF
|
||||
|
||||
// This script runs on the first frame during the quest loading procedure,
|
||||
// but this procedure is started from the lobby overview, not from a game!
|
||||
// To make the result of loading a quest sane, we need to set some extra
|
||||
// state that will take effect when loading is done.
|
||||
ba_initial_floor 17 // Make player spawn in lobby (for one frame)
|
||||
write2 0x805D5CE8, 1 // Leave "game" immediately (sends 98)
|
||||
|
||||
// Clean up quest handler table
|
||||
write4 0x804C81C8, 0
|
||||
write4 0x804C81CC, 0
|
||||
write4 0x804C81D0, 0
|
||||
|
||||
ret
|
||||
|
||||
code:
|
||||
.include_native q88500-gc.s
|
||||
code_end:
|
||||
Reference in New Issue
Block a user