From b8195a079dad239bc1583324fcfa86e3eb05644f Mon Sep 17 00:00:00 2001 From: ry755 Date: Sun, 30 Jan 2022 00:53:25 -0800 Subject: [PATCH] fox32rom: Don't use the stack pointer for the event stack Previously this used a very hacky way to push and pop events on the event stack. This especially caused issues since it disabled and enabled interrupts, and these routines are called in an interrupt handler, which breaks things in some cases :p --- event.asm | 85 ++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 59 insertions(+), 26 deletions(-) diff --git a/event.asm b/event.asm index bf2e78e..94ecc9b 100644 --- a/event.asm +++ b/event.asm @@ -37,21 +37,38 @@ wait_for_event: ; outputs: ; none push_event: - icl push r6 - mov r6, rsp - mov rsp, [event_stack_pointer] - push r0 - push r1 - push r2 - push r3 - push r4 - push r5 - mov [event_stack_pointer], rsp - mov rsp, r6 - pop r6 - ise + mov r6, [event_stack_pointer] + ; TODO: check to make sure we don't accidentally clobber the system stack by pushing too many events + + ; push r0 + sub r6, 4 + mov [r6], r0 + + ; push r1 + sub r6, 4 + mov [r6], r1 + + ; push r2 + sub r6, 4 + mov [r6], r2 + + ; push r3 + sub r6, 4 + mov [r6], r3 + + ; push r4 + sub r6, 4 + mov [r6], r4 + + ; push r5 + sub r6, 4 + mov [r6], r5 + + mov [event_stack_pointer], r6 + + pop r6 ret ; pop an event from the event stack @@ -66,21 +83,37 @@ pop_event: cmp [event_stack_pointer], event_stack_pointer ifz jmp pop_event_empty - icl push r6 - mov r6, rsp - mov rsp, [event_stack_pointer] - pop r5 - pop r4 - pop r3 - pop r2 - pop r1 - pop r0 - mov [event_stack_pointer], rsp - mov rsp, r6 - pop r6 - ise + mov r6, [event_stack_pointer] + + ; pop r5 + mov r5, [r6] + add r6, 4 + + ; pop r4 + mov r4, [r6] + add r6, 4 + + ; pop r3 + mov r3, [r6] + add r6, 4 + + ; pop r2 + mov r2, [r6] + add r6, 4 + + ; pop r1 + mov r1, [r6] + add r6, 4 + + ; pop r0 + mov r0, [r6] + add r6, 4 + + mov [event_stack_pointer], r6 + + pop r6 ret pop_event_empty: mov r0, empty_event_type