StupidOS/kernel/sys/multiboot.inc
d0p1 a9fec6e18c feat: setup paging and map kernel to higher half
Kernel is now at 0xC0100000, but still we use 4MiB pages, instruction like 'invlpg' which are invalid for cpu prior to 486, and we don't ensure multiboot structures are mapped. Still lot of work
2023-07-12 13:31:08 +02:00

140 lines
2.6 KiB
PHP

; File: multiboot.inc
; Define: MB_HDR_MAGIC
; Multiboot Header Magic
MB_HDR_MAGIC equ 0x1BADB002
; Define: MB_MAGIC
; Multiboot Magic passed by the bootloader.
MB_MAGIC equ 0x2BADB002
; Structure: mb_header
;
; .magic - todo
; .flags - See <flags>
; .checksum - todo
; .aout_kludge - todo
; .mode_type - todo
; .width - todo
; .height - todo
; .depth - todo
struc mb_header
.magic: resd 1
.flags: resd 1
.checksum: resd 1
.aout_kludge: resd 5
.mode_type: resd 1
.width: resd 1
.height: resd 1
.depth: resd 1
endstruc
; Defines: flags
;
; MB_HDR_ALIGN - todo
; MB_HDR_MEMINFO - <mb_info.mem_lower>
; MB_HDR_VIDEO - todo
MB_HDR_ALIGN equ 1 << 0
MB_HDR_MEMINFO equ 1 << 1
MB_HDR_VIDEO equ 1 << 2
; Structure: mb_info
;
; Fields:
; .flags - See <flags>
; .mem_lower - todo
; .mem_upper - todo
; .boot_device - todo
; .
struc mb_info
;; flags
.flags: resd 1
;; flags[0] is set
.mem_lower: resd 1
.mem_upper: resd 1
;; flags[1] is set
.boot_device: resd 1
;; flags[2] is set
.cmdline: resd 1
;; flags[3] is set
.mods_count: resd 1
.mods_addr: resd 1
;; flags[4] || flags[4] is set
.syms: resd 4
;; flags[6] is set
.mmap_length: resd 1
; <mb_info.mmap_length>
; see <mb_mmap>
.mmap_addr: resd 1
;; flags[7] is set
.drives_length: resd 1
.drives_addr: resd 1
;; flags[8] is set
.config_table: resd 1
;; flags[9] is set
.bootloader_name: resd 1
;; flags[10] is set
.apm_table: resd 1
;;
.vbe_control_info: resd 1
.vbe_mode_info: resd 1
.vbe_mode: resw 1
.vbe_interface_seg: resw 1
.vbe_interface_off: resw 1
.vbe_interface_len: resw 1
.framebuffer_addr: resq 1
.framebuffer_pitch: resd 1
.framebuffer_width: resd 1
.framebuffer_height: resd 1
.framebuffer_bpp: resb 1
.framebuffer_type: resb 1
.framebuffer_misc: resw 3
endstruc
; Defines: flags
;
; MB_INFO_MEM - todo
; MB_INFO_BOOTDEV - todo
MB_INFO_MEM equ 1 << 0
MB_INFO_BOOTDEV equ 1 << 1
MB_INFO_CMDLINE equ 1 << 2
MB_INFO_MODULES equ 1 << 3
MB_INFO_MMAP equ 1 << 6
MB_INFO_DRIVES equ 1 << 7
MB_INFO_BOOTLOADER_NAME equ 1 << 9
MB_INFO_VBE equ 1 << 11
MB_INFO_FRAMEBUFFER equ 1 << 12
; Structure: mb_mmap
struc mb_mmap
.size: resd 1
.addr: resq 1
.length: resq 1
.type: resd 1
endstruc
; Defines: types
;
; MB_MEMORY_AVAILABLE - 1
; MB_MEMORY_RESERVED - 2
; MB_MEMORY_ACPI - 3
; MB_MEMORY_NVS - 4
; MB_MEMORY_BADRAM - 5
%define MB_MEMORY_AVAILABLE 1
%define MB_MEMORY_RESERVED 2
%define MB_MEMORY_ACPI 3
%define MB_MEMORY_NVS 4
%define MB_MEMORY_BADRAM 5