From 8ee021416428da440656e52f3dc0cb021ccb379a Mon Sep 17 00:00:00 2001 From: Ry Date: Tue, 26 Jul 2022 16:58:20 -0700 Subject: [PATCH] Add some convenience routines for moving and resizing overlays --- fox32rom.def | 5 ++++ main.asm | 5 ++++ overlay.asm | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+) diff --git a/fox32rom.def b/fox32rom.def index 1fbe406..a480be9 100644 --- a/fox32rom.def +++ b/fox32rom.def @@ -43,6 +43,11 @@ draw_pixel_to_overlay: jmp [0xF004301C] draw_filled_rectangle_to_overlay: jmp [0xF0043020] check_if_overlay_covers_position: jmp [0xF0043024] check_if_enabled_overlay_covers_position: jmp [0xF0043028] +enable_overlay: jmp [0xF004302C] +disable_overlay: jmp [0xF0043030] +move_overlay: jmp [0xF0043034] +resize_overlay: jmp [0xF0043038] +set_overlay_framebuffer_pointer: jmp [0xF004303C] ; menu bar jump table enable_menu_bar: jmp [0xF0044000] diff --git a/main.asm b/main.asm index d2771ed..d537521 100644 --- a/main.asm +++ b/main.asm @@ -189,6 +189,11 @@ get_rom_version: data.32 draw_filled_rectangle_to_overlay data.32 check_if_overlay_covers_position data.32 check_if_enabled_overlay_covers_position + data.32 enable_overlay + data.32 disable_overlay + data.32 move_overlay + data.32 resize_overlay + data.32 set_overlay_framebuffer_pointer ; menu bar jump table org.pad 0xF0044000 diff --git a/overlay.asm b/overlay.asm index 9576883..a70ee35 100644 --- a/overlay.asm +++ b/overlay.asm @@ -1,5 +1,79 @@ ; overlay routines +; enable an overlay +; inputs: +; r0: overlay number +; outputs: +; none +enable_overlay: + push r0 + + or r0, 0x80000300 + out r0, 1 + + pop r0 + ret + +; disable an overlay +; inputs: +; r0: overlay number +; outputs: +; none +disable_overlay: + push r0 + + or r0, 0x80000300 + out r0, 0 + + pop r0 + ret + +; move an overlay +; r0: X position +; r1: Y position +; r2: overlay number +move_overlay: + push r1 + push r2 + + or r2, 0x80000000 + sla r1, 16 + mov.16 r1, r0 + out r2, r1 + + pop r2 + pop r1 + ret + +; resize an overlay +; r0: width +; r1: height +; r2: overlay number +resize_overlay: + push r1 + push r2 + + or r2, 0x80000100 + sla r1, 16 + mov.16 r1, r0 + out r2, r1 + + pop r2 + pop r1 + ret + +; set an overlay's framebuffer pointer +; r0: framebuffer pointer +; r1: overlay number +set_overlay_framebuffer_pointer: + push r1 + + or r1, 0x80000200 + out r1, r0 + + pop r1 + ret + ; fill a whole overlay with a color ; inputs: ; r0: color