rulimine/src/bootsect/bootsect.asm

111 lines
1.7 KiB
NASM
Raw Normal View History

org 0x7C00
bits 16
2020-01-22 06:12:55 +03:00
start:
cli
jmp 0x0000:.initialise_cs
.initialise_cs:
xor ax, ax
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
mov ss, ax
mov sp, 0x7c00
sti
2020-01-22 06:12:55 +03:00
mov si, LoadingMsg
call simple_print
2020-01-22 06:12:55 +03:00
; ****************** Load stage 2 ******************
2020-01-22 06:12:55 +03:00
mov si, Stage2Msg
call simple_print
2020-01-22 06:12:55 +03:00
mov eax, 1
mov ebx, 0x7e00
mov ecx, 1
call read_sectors
2020-01-22 06:12:55 +03:00
jc err_reading_disk
2020-01-22 06:12:55 +03:00
mov si, DoneMsg
call simple_print
2020-01-22 06:12:55 +03:00
jmp 0x7e00
2019-07-08 22:41:17 +03:00
err_reading_disk:
2020-01-22 06:12:55 +03:00
mov si, ErrReadDiskMsg
call simple_print
jmp halt
2019-07-08 22:41:17 +03:00
err_enabling_a20:
2020-01-22 06:12:55 +03:00
mov si, ErrEnableA20Msg
call simple_print
jmp halt
halt:
2020-01-22 06:12:55 +03:00
hlt
jmp halt
; Data
LoadingMsg db 0x0D, 0x0A, '<qLoader 2>', 0x0D, 0x0A, 0x0A, 0x00
Stage2Msg db 'stage1: Loading stage2...', 0x00
2019-07-08 22:41:17 +03:00
ErrReadDiskMsg db 0x0D, 0x0A, 'Error reading disk, system halted.', 0x00
ErrEnableA20Msg db 0x0D, 0x0A, 'Error enabling a20, system halted.', 0x00
DoneMsg db ' DONE', 0x0D, 0x0A, 0x00
times 0xda-($-$$) db 0
times 6 db 0
; Includes
%include 'simple_print.inc'
%include 'disk.inc'
times 0x1b8-($-$$) db 0
times 510-($-$$) db 0
dw 0xaa55
; ********************* Stage 2 *********************
2020-01-22 06:12:55 +03:00
stage2:
; Load stage 3
mov eax, 2
mov ebx, 0x8000
mov ecx, 62
call read_sectors
jc err_reading_disk
2020-01-22 06:12:55 +03:00
; Enable A20
call enable_a20
jc err_enabling_a20
2020-01-22 06:12:55 +03:00
; Enter 32 bit pmode
lgdt [GDT] ; Load the GDT
2020-01-22 06:12:55 +03:00
cli
2020-01-22 06:12:55 +03:00
mov eax, cr0
or al, 1
mov cr0, eax
2020-01-22 06:12:55 +03:00
jmp 0x18:.pmode
bits 32
.pmode:
mov ax, 0x20
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
mov ss, ax
2020-01-22 06:12:55 +03:00
jmp 0x8000
2019-05-30 17:35:49 +03:00
bits 16
%include 'a20_enabler.inc'
%include 'gdt.inc'
times 1024-($-$$) db 0