kernel/main: Keep track of the "current disk"

This commit is contained in:
Ry 2023-03-04 23:34:00 -08:00
parent 63fe33cdc9
commit f99c3d63c1
2 changed files with 23 additions and 5 deletions

View File

@ -2,6 +2,8 @@
; system jump table ; system jump table
get_os_version: jmp [0x00000810] get_os_version: jmp [0x00000810]
get_current_disk_id: jmp [0x00000814]
set_current_disk_id: jmp [0x00000818]
; FXF jump table ; FXF jump table
parse_fxf_binary: jmp [0x00000910] parse_fxf_binary: jmp [0x00000910]

View File

@ -16,6 +16,8 @@ const TEXT_COLOR: 0xFFFFFFFF
org.pad 0x00000010 org.pad 0x00000010
jump_table: jump_table:
data.32 get_os_version data.32 get_os_version
data.32 get_current_disk_id
data.32 set_current_disk_id
; FXF jump table ; FXF jump table
org.pad 0x00000110 org.pad 0x00000110
@ -72,9 +74,9 @@ entry:
; we can do this by comparing our load address to the known load address that the bootloader loads us to ; we can do this by comparing our load address to the known load address that the bootloader loads us to
; only the high 16 bits are checked ; only the high 16 bits are checked
rcall 6 rcall 6
pop r0 pop r1
mov.16 r0, 0 mov.16 r1, 0
cmp r0, LOAD_ADDRESS cmp r1, LOAD_ADDRESS
ifz jmp entry_ok ifz jmp entry_ok
; if it appears that we're running on top of an existing kernel, then show a messagebox and exit ; if it appears that we're running on top of an existing kernel, then show a messagebox and exit
@ -90,6 +92,9 @@ entry:
rjmp 0 rjmp 0
entry_ok: entry_ok:
; save the boot disk id that the bootloader passed in r0
mov.8 [current_disk_id], r0
; clear the background ; clear the background
mov r0, BACKGROUND_COLOR mov r0, BACKGROUND_COLOR
call fill_background call fill_background
@ -156,8 +161,9 @@ draw_bottom_bar_loop:
ifnz jmp boot_disk_1 ifnz jmp boot_disk_1
try_startup: try_startup:
; open startup.cfg ; open startup.cfg
call get_current_disk_id
mov r1, r0
mov r0, startup_cfg mov r0, startup_cfg
mov r1, 0
mov r2, startup_cfg_struct mov r2, startup_cfg_struct
call ryfs_open call ryfs_open
cmp r0, 0 cmp r0, 0
@ -172,8 +178,9 @@ load_startup_task:
call ryfs_read call ryfs_read
; open the actual startup file ; open the actual startup file
call get_current_disk_id
mov r1, r0
mov r0, startup_file mov r0, startup_file
mov r1, 0
mov r2, startup_file_struct mov r2, startup_file_struct
call ryfs_open call ryfs_open
cmp r0, 0 cmp r0, 0
@ -326,6 +333,14 @@ memory_error:
call draw_format_str_to_background call draw_format_str_to_background
rjmp 0 rjmp 0
get_current_disk_id:
movz.8 r0, [current_disk_id]
ret
set_current_disk_id:
mov.8 [current_disk_id], r0
ret
get_os_version: get_os_version:
mov r0, FOX32OS_VERSION_MAJOR mov r0, FOX32OS_VERSION_MAJOR
mov r1, FOX32OS_VERSION_MINOR mov r1, FOX32OS_VERSION_MINOR
@ -383,6 +398,7 @@ bottom_bar_patterns:
data.32 0xFF674764 data.32 0xFF674764
next_task_id: data.8 0 next_task_id: data.8 0
current_disk_id: data.8 0
startup_cfg: data.str "startup cfg" startup_cfg: data.str "startup cfg"
startup_cfg_struct: data.32 0 data.32 0 startup_cfg_struct: data.32 0 data.32 0
startup_file: data.str " " startup_file: data.str " "