From d879df630f68bb56f291ac285f951ca2ba6764e7 Mon Sep 17 00:00:00 2001 From: andromeda Date: Tue, 3 Mar 2026 18:18:57 +0100 Subject: reorganise --- boot.asm | 158 --------------------------------------------------------------- 1 file changed, 158 deletions(-) delete mode 100644 boot.asm (limited to 'boot.asm') diff --git a/boot.asm b/boot.asm deleted file mode 100644 index bb852ef..0000000 --- a/boot.asm +++ /dev/null @@ -1,158 +0,0 @@ -; bootler -; legacy bootloader in nasm-flavoured asm -; 2026 Andromeda -; GPL licensed - -[bits 16] -[org 0x7C00] ; address where bootloader is loaded - -xor ax, ax -mov ds, ax -mov es, ax -mov ss, ax -mov sp, 0x7C00 - -mov ah, 0x0E -mov al, 'R' -int 0x10 -mov al, 'e' -int 0x10 -mov al, 'a' -int 0x10 -mov al, 'l' -int 0x10 -mov al, 0x0D -int 0x10 -mov al, 0x0A -int 0x10 -mov al, 0x00 ; stops serial and bios output from overlapping in qemu -nographic -int 0x10 ; output - -; activate a20 -mov ax, 0x2401 -int 0x15 -jc error - -; load kernel -; 'docs' from https://www.ctyme.com/intr/rb-0607.htm -mov ah, 0x02 -mov al, 1 ; number of sectors to read (must be nonzero) -mov ch, 0 ; low eight bits of cylinder number -mov cl, 2 ; sector number 1-63 (bits 0-5); high two bits of cylinder (bits 6-7, - ; hard disk only) -mov dh, 0 ; head number -; dl is already set by bios -mov bx, 0x1000 ; data buffer -mov es, bx -xor bx, bx -int 0x13 ; read disk -jc error - -; load gdt -lgdt [gdt_descriptor] - -; jump to pm -cli -mov eax, cr0 -or eax, 1 -mov cr0, eax -jmp 0x08:pm_start - -error: - mov al, 'e' - int 0x10 - mov al, 'r' - int 0x10 - mov al, 'r' - int 0x10 - mov al, 'o' - int 0x10 - mov al, 'r' - int 0x10 - jmp $ - -gdt_data: - ; null segment - dq 0x0000000000000000 - ; code segment - dw 0xFFFF - dw 0x0000 - - db 0x00 - db 10011010b ; 32-bit code segment, present, ring 0 - db 11001111b ; limit bits 16-19 - db 0x00 - - ; data segment - dw 0xFFFF - dw 0x0000 - - db 0x00 - db 10010010b ; 32-bit data segment, present, ring 0 - db 11001111b ; limit bits 16-19 - db 0x00 - -gdt_descriptor: - dw $ - gdt_data - 1 ; size - dd gdt_data ; start - -[bits 32] - -; entry point -pm_start: - ; data segment registers - mov ax, 0x10 - mov ds, ax - mov es, ax - mov fs, ax - mov gs, ax - mov ss, ax - mov esp, 0x80000 - - ; TODO actually configure COM1 - mov dx, 0x3F8 ; COM1 - mov al, 'P' - out dx, al - mov al, 'r' - out dx, al - mov al, 'o' - out dx, al - mov al, 't' - out dx, al - mov al, 'e' - out dx, al - mov al, 'c' - out dx, al - mov al, 't' - out dx, al - mov al, 'e' - out dx, al - mov al, 'd' - out dx, al - mov al, 0x0D - out dx, al - mov al, 0x0A - out dx, al - - jmp 0x08:0x10000 - -pm_error: - mov al, 'p' - out dx, al - mov al, 'm' - out dx, al - mov al, 'e' - out dx, al - mov al, 'r' - out dx, al - mov al, 'r' - out dx, al - mov al, 'o' - out dx, al - mov al, 'r' - out dx, al - jmp $ - -times 510-($-$$) db 0 ; 2 bytes less now -db 0x55 -db 0xAA -- cgit v1.3.1