Add support for a "romdisk"
This commit is contained in:
parent
9cfb010116
commit
bec78c9a10
18
boot.asm
18
boot.asm
|
@ -22,12 +22,26 @@ start_boot_process:
|
|||
mov r0, 0 ; booting from disk id 0
|
||||
jmp 0x00000800
|
||||
|
||||
; load the boot sector of the romdisk and jump to it
|
||||
; inputs:
|
||||
; none
|
||||
; outputs:
|
||||
; none (returns if romdisk is not bootable)
|
||||
start_boot_process_from_romdisk:
|
||||
; read sector 0 to 0x800
|
||||
out r1, 0x00000800
|
||||
out r0, 0
|
||||
mov r0, 0
|
||||
mov r1, 4
|
||||
mov r2, 0x00000800
|
||||
call read_sector
|
||||
|
||||
; check for the bootable magic bytes
|
||||
cmp [0x000009FC], 0x523C334C
|
||||
ifnz ret
|
||||
|
||||
; now clean up and jump to the loaded binary
|
||||
call boot_cleanup
|
||||
mov rsp, SYSTEM_STACK ; reset stack pointer
|
||||
mov r0, 4 ; booting from disk id 4
|
||||
jmp 0x00000800
|
||||
|
||||
; clean up the system's state before jumping to the loaded binary
|
||||
|
|
49
disk.asm
49
disk.asm
|
@ -10,6 +10,9 @@ const TEMP_SECTOR_BUF: 0x01FFF808
|
|||
; outputs:
|
||||
; none
|
||||
read_sector:
|
||||
cmp.8 r1, 4
|
||||
ifz jmp read_romdisk_sector
|
||||
|
||||
push r3
|
||||
push r4
|
||||
|
||||
|
@ -23,6 +26,49 @@ read_sector:
|
|||
pop r3
|
||||
ret
|
||||
|
||||
; read a sector from the romdisk into the specified memory buffer
|
||||
; inputs:
|
||||
; r0: sector number
|
||||
; r2: sector buffer (512 bytes)
|
||||
; outputs:
|
||||
; none
|
||||
read_romdisk_sector:
|
||||
push r0
|
||||
push r1
|
||||
push r2
|
||||
|
||||
; source pointer
|
||||
mul r0, 512
|
||||
add r0, romdisk_image
|
||||
|
||||
; destination pointer
|
||||
mov r1, r2
|
||||
|
||||
; copy 512 bytes
|
||||
mov r2, 512
|
||||
|
||||
call copy_memory_bytes
|
||||
|
||||
pop r2
|
||||
pop r1
|
||||
pop r0
|
||||
ret
|
||||
|
||||
; check if a RYFS image is included as a romdisk
|
||||
; inputs:
|
||||
; none
|
||||
; outputs:
|
||||
; Z flag: set if available, reset if not
|
||||
is_romdisk_available:
|
||||
push r0
|
||||
|
||||
mov r0, romdisk_image
|
||||
add r0, 514
|
||||
cmp.16 [r0], 0x5952
|
||||
|
||||
pop r0
|
||||
ret
|
||||
|
||||
; write a sector from the specified memory buffer
|
||||
; inputs:
|
||||
; r0: sector number
|
||||
|
@ -31,6 +77,9 @@ read_sector:
|
|||
; outputs:
|
||||
; none
|
||||
write_sector:
|
||||
cmp.8 r1, 4
|
||||
ifz ret
|
||||
|
||||
push r3
|
||||
push r4
|
||||
|
||||
|
|
7
main.asm
7
main.asm
|
@ -161,6 +161,9 @@ event_loop:
|
|||
cmp r0, 0
|
||||
ifnz call start_boot_process
|
||||
|
||||
call is_romdisk_available
|
||||
ifz call start_boot_process_from_romdisk
|
||||
|
||||
jmp event_loop
|
||||
|
||||
get_rom_version:
|
||||
|
@ -394,5 +397,9 @@ bottom_bar_patterns:
|
|||
data.32 0xFFFFFFFF
|
||||
data.32 0xFF674764
|
||||
|
||||
romdisk_image:
|
||||
#include_bin_optional "romdisk.img"
|
||||
romdisk_image_end:
|
||||
|
||||
; pad out to 512 KiB
|
||||
org.pad 0xF0080000
|
||||
|
|
Loading…
Reference in New Issue
Block a user