diff --git a/boot.asm b/boot.asm index ea1477c..a42ded0 100644 --- a/boot.asm +++ b/boot.asm @@ -1,24 +1,15 @@ ; disk booting routines ; these are only used during booting, they are not exposed via the jump table -const KERNEL_FILE_STRUCT: 0x01FFF800 ; kernel.bin file struct is right above the system stack -kernel_file_name: data.str "system bin" data.8 0 - -; read disk 0 and attempt to figure out what type of disk it is, and load the correct binary into memory +; load the boot sector of disk 0 to 0x00000800 and jump to it ; inputs: -; r0: disk size (bytes) +; none ; outputs: ; none (doesn't return) start_boot_process: - ; r0 contains the size of the disk in bytes - ; divide the size by 512 and add 1 to get the size in sectors - div r0, 512 - inc r0 - mov r31, r0 - mov r0, BACKGROUND_COLOR call fill_background -draw_boot_text: + mov r0, boot_str mov r1, 16 mov r2, 464 @@ -29,64 +20,16 @@ draw_boot_text: mov r12, FOX32ROM_VERSION_PATCH call draw_format_str_to_background - mov r0, 0 ; sector counter - mov r2, 0x00000800 ; destination pointer - mov r3, 0x80003000 ; command to read a sector from disk 0 into memory - mov r4, 0x80002000 ; command to set the location of the buffer + mov r0, 0x80003000 ; command to read a sector from disk 0 into memory + mov r1, 0x80002000 ; command to set the location of the buffer - ; first, check to see if this is a FAT-formatted disk or RYFS-formatted disk - out r4, r2 ; set the memory buffer location - out r3, 0 ; read sector 0 into the buffer - cmp.8 [r2], 0xEB ; check for an x86 jmp instruction, indicating a possible FAT volume - ifz jmp start_boot_process_fat - cmp.8 [r2], 0xE9 ; check for an x86 jmp instruction, indicating a possible FAT volume - ifz jmp start_boot_process_fat - out r3, 1 ; read sector 1 into the buffer - add r2, 2 - cmp.16 [r2], 0x5952 ; check for RYFS magic bytes - ifz jmp start_boot_process_ryfs - sub r2, 2 -start_boot_process_raw_binary_sector_loop: - out r4, r2 ; set the memory buffer location - out r3, r0 ; read the current sector into memory - inc r0 ; increment sector counter - add r2, 512 ; increment the destination pointer - loop start_boot_process_raw_binary_sector_loop - jmp start_boot_process_done -start_boot_process_fat: - jmp start_boot_process_fat -start_boot_process_ryfs: - ; open system.bin - mov r0, kernel_file_name - mov r1, 0 - mov r2, KERNEL_FILE_STRUCT - call ryfs_open - cmp r0, 0 - ifz jmp start_boot_process_error + ; read sector 0 to 0x800 + out r1, 0x00000800 + out r0, 0 - mov r0, KERNEL_FILE_STRUCT - mov r1, 0x00000800 - call ryfs_read_whole_file -start_boot_process_done: - ; done loading !!! ; now clean up and jump to the loaded binary call boot_cleanup jmp 0x00000800 -start_boot_process_error: - mov r0, BACKGROUND_COLOR - call fill_background - - mov r0, boot_error_str - mov r1, 16 - mov r2, 464 - mov r3, TEXT_COLOR - mov r4, 0x00000000 - mov r10, FOX32ROM_VERSION_MAJOR - mov r11, FOX32ROM_VERSION_MINOR - mov r12, FOX32ROM_VERSION_PATCH - call draw_format_str_to_background - - ret ; clean up the system's state before jumping to the loaded binary ; inputs: diff --git a/main.asm b/main.asm index 957c58a..e52da2c 100644 --- a/main.asm +++ b/main.asm @@ -322,7 +322,6 @@ const MENU_FRAMEBUFFER: 0x0215618E ; max 640x480x4 = end address at 0x022821 startup_str: data.str "fox32 - ROM version %u.%u.%u - insert boot disk - F12 for monitor" data.8 0 boot_str: data.str "fox32 - ROM version %u.%u.%u - booting..." data.8 0 -boot_error_str: data.str "fox32 - ROM version %u.%u.%u - system.bin not found! - F12 for monitor" data.8 0 menu_items_root: data.8 1 ; number of menus