X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Floader.asm;h=f1ef6595f009002341869f9824ce88c7996d8eb1;hb=66cfc3e189df8362aa77f7a2f3e2495bf00ab2c3;hp=7ecec042f88f96b900cd1e80c80a2b0318556667;hpb=afde6754684dc6be5a09b5a4659732c0d7b46741;p=metatoy diff --git a/src/loader.asm b/src/loader.asm index 7ecec04..f1ef659 100644 --- a/src/loader.asm +++ b/src/loader.asm @@ -17,11 +17,13 @@ _start: mov ds, ax mov es, ax mov fs, ax ; this will store the original real mode segment - mov ss, ax ; modify the return to real mode jump segment mov [.jmpcs16 + 3], ax - xor ax, ax + ; put the stack on the next segment, should be free + add ax, 1000h + mov ss, ax + mov ax, 0xfffe mov sp, ax %ifdef BUG_WARNING @@ -111,6 +113,7 @@ _start: mov ax, 13h int 10h + cli ; paranoid lgdt [gdt_lim] mov eax, cr0 @@ -165,7 +168,7 @@ _start: mov ss, ax ; restore real-mode IVT - lidt [rmidt] + o32 lidt [rmidt] ; switch back to text mode mov ax, 3 @@ -357,7 +360,7 @@ detect_memory: str_ok db 'OK',10,0 str_fail db 'failed',10,0 memdet_fail_msg db 'Failed to detect available memory!',10,0 -memdet_detram db 'Detecting RAM ' +memdet_detram db 'Detecting RAM ',0 memdet_e820_msg db '(BIOS 15h/0xe820)... ',0 memdet_e801_msg db '(BIOS 15h/0xe801)... ',0 memdet_88_msg db '(BIOS 15h/0x88, max 64mb)... ',0 @@ -630,4 +633,40 @@ gdt: ; 0: null segment rmidt: dw 3ffh ; IVT limit (1kb / 256 entries) dd 0 ; IVT base 0 + +; --- debug --- +newline: + push ax + mov al, 13 + call ser_putchar + mov al, 10 + call ser_putchar + pop ax + ret + +printhex: + rol ax, 4 + call print_hexdigit + rol ax, 4 + call print_hexdigit + rol ax, 4 + call print_hexdigit + rol ax, 4 + call print_hexdigit + ret + +print_hexdigit: + push ax + and ax, 0xf + cmp al, 0xa + jae .hexdig + add al, '0' + call ser_putchar + pop ax + ret +.hexdig:add al, 'a' - 10 + call ser_putchar + pop ax + ret + ; vi:set ts=8 sts=8 sw=8 ft=nasm: