89 lines
1.7 KiB
NASM
89 lines
1.7 KiB
NASM
//==============================================================================
|
|
// void parse(int code, char* parserAddress, WINDOW* window)
|
|
// In:
|
|
// r0: code
|
|
// r1: parser address
|
|
// r2: window
|
|
// Out:
|
|
// r0: control code length (0 if not matched)
|
|
//==============================================================================
|
|
|
|
customcodes_parse:
|
|
|
|
push {r1-r5,lr}
|
|
mov r3,0
|
|
mov r4,r0
|
|
|
|
//--------------------------------
|
|
// 60 FF XX: Add XX pixels to the renderer
|
|
cmp r4,0x60
|
|
bne @@next
|
|
mov r3,3
|
|
|
|
// Get the current X offset
|
|
ldrh r4,[r2,2]
|
|
|
|
// Get the current X tile
|
|
ldrh r5,[r2,0x2A]
|
|
|
|
lsl r5,r5,3
|
|
add r4,r4,r5 // Current X location (in pixels)
|
|
|
|
// Get the value to add
|
|
ldrb r5,[r1,2] // Control code parameter
|
|
add r4,r4,r5 // New X location
|
|
|
|
// Store the pixel offset of the new location
|
|
@@store_x:
|
|
lsl r5,r4,29
|
|
lsr r5,r5,29
|
|
strh r5,[r2,2]
|
|
|
|
// Store the X tile of the new location
|
|
lsr r4,r4,3
|
|
strh r4,[r2,0x2A]
|
|
b @@end
|
|
|
|
@@next:
|
|
|
|
//--------------------------------
|
|
// 5F FF XX: Set the X value of the renderer
|
|
cmp r4,0x5F
|
|
bne @@next2
|
|
mov r3,3
|
|
|
|
// Get the new X value
|
|
ldrb r4,[r1,2]
|
|
b @@store_x
|
|
|
|
@@next2:
|
|
|
|
//--------------------------------
|
|
// 5E FF XX: Load value into memory
|
|
cmp r4,0x5E
|
|
bne @@end
|
|
mov r3,3
|
|
|
|
// Get the argument
|
|
ldrb r4,[r1,2]
|
|
cmp r4,1
|
|
bne @@end
|
|
|
|
// 01: load enemy plurality
|
|
ldr r1,=0x2025038
|
|
ldrb r1,[r1] // number of enemies at start of battle
|
|
cmp r1,4
|
|
blt @@small
|
|
mov r1,3
|
|
@@small:
|
|
mov r0,r1 // the jump table is 1-indexed
|
|
mov r4,r3
|
|
bl 0x80A334C // store to window memory
|
|
mov r3,r4
|
|
|
|
//--------------------------------
|
|
@@end:
|
|
mov r0,r3
|
|
pop {r1-r5,pc}
|
|
.pool
|