70 lines
986 B
NASM
70 lines
986 B
NASM
format binary
|
|
|
|
include '../common/const.inc'
|
|
include 'multiboot.inc'
|
|
|
|
org LOADER_BASE
|
|
use32
|
|
|
|
jmp _start
|
|
|
|
align 4
|
|
multiboot_header:
|
|
mb_header MultibootHeader multiboot_header
|
|
|
|
_start:
|
|
cmp eax, MULTIBOOT_MAGIC
|
|
je .multiboot
|
|
|
|
use16
|
|
;; non multiboot process
|
|
push cs
|
|
pop ds
|
|
|
|
mov si, msg_stage2
|
|
call bios_print
|
|
|
|
call a20_enable
|
|
jc .error_a20
|
|
|
|
; detect memory
|
|
call memory_get_map
|
|
jc .error_memory
|
|
xchg bx, bx
|
|
|
|
call video_setup
|
|
|
|
.multiboot:
|
|
jmp .hang
|
|
|
|
.error_memory:
|
|
mov si, msg_error_memory
|
|
jmp .error
|
|
.error_a20:
|
|
mov si, msg_error_a20
|
|
.error:
|
|
call bios_print
|
|
.hang:
|
|
hlt
|
|
jmp $
|
|
|
|
include 'a20.inc'
|
|
include '../common/bios.inc'
|
|
include 'memory.inc'
|
|
include 'video.inc'
|
|
|
|
msg_stage2 db "StupidOS Bootloader (Stage 1)", CR, LF, 0
|
|
msg_error_a20 db "ERROR: can't enable a20 line", CR, LF, 0
|
|
msg_error_memory db "ERROR: can't detect available memory", CR, LF, 0
|
|
|
|
;;
|
|
bi_screen_width: dw 0
|
|
bi_screen_height: dw 0
|
|
|
|
_edata:
|
|
|
|
; BSS
|
|
rb 0x4000
|
|
|
|
_end:
|