fox32rom/monitor/monitor.asm

80 lines
2.0 KiB
NASM

; debug monitor
invoke_monitor:
; set the vsync handler to our own and reenable interrupts
mov [MONITOR_OLD_VSYNC_HANDLER], [0x000003FC]
mov [0x000003FC], monitor_vsync_handler
ise
; set the X and Y coords of the console text
mov.8 [MONITOR_CONSOLE_X], 0
mov.8 [MONITOR_CONSOLE_Y], MONITOR_CONSOLE_Y_SIZE
dec.8 [MONITOR_CONSOLE_Y]
; set properties of overlay 31
mov r0, 0x8000001F ; overlay 31: position
mov.16 r1, MONITOR_POSITION_Y
sla r1, 16
mov.16 r1, MONITOR_POSITION_X
out r0, r1
mov r0, 0x8000011F ; overlay 31: size
mov.16 r1, MONITOR_HEIGHT
sla r1, 16
mov.16 r1, MONITOR_WIDTH
out r0, r1
mov r0, 0x8000021F ; overlay 31: framebuffer pointer
mov r1, MONITOR_FRAMEBUFFER_PTR
out r0, r1
mov r0, MONITOR_BACKGROUND_COLOR
mov r1, 31
call fill_overlay
mov r0, info_str
mov r1, 256
mov r2, 0
mov r3, TEXT_COLOR
mov r4, 0x00000000
mov r5, 31
call draw_str_to_overlay
mov r0, 0
mov r1, 15
mov r2, 640
mov r3, 1
mov r4, TEXT_COLOR
mov r5, 31
call draw_filled_rectangle_to_overlay
call redraw_monitor_console
mov [MONITOR_OLD_RSP], rsp
jmp monitor_shell_start
exit_monitor:
; restore the old RSP and vsync handler, reset the cursor, and exit
mov rsp, [MONITOR_OLD_RSP]
mov [0x000003FC], [MONITOR_OLD_VSYNC_HANDLER]
call enable_cursor
ret
info_str: data.str "fox32rom monitor" data.8 0x00
#include "monitor/commands/commands.asm"
#include "monitor/console.asm"
#include "monitor/keyboard.asm"
#include "monitor/shell.asm"
#include "monitor/vsync.asm"
const MONITOR_OLD_RSP: 0x03ED36BD ; 4 bytes
const MONITOR_OLD_VSYNC_HANDLER: 0x03ED36C1 ; 4 bytes
const MONITOR_BACKGROUND_COLOR: 0xFF000000
const MONITOR_WIDTH: 640
const MONITOR_HEIGHT: 480
const MONITOR_POSITION_X: 0
const MONITOR_POSITION_Y: 0
const MONITOR_FRAMEBUFFER_PTR: 0x03ED4000