Initial Commit
This commit is contained in:
commit
160d2222f9
|
|
@ -0,0 +1,3 @@
|
|||
bin
|
||||
mount
|
||||
image.bin
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
CC := gcc
|
||||
AS := nasm
|
||||
BL_ASFLAGS := -f bin
|
||||
|
||||
all: bootloader
|
||||
cp bin/bootloader.bin image.bin
|
||||
qemu-img resize image.bin 512M
|
||||
qemu-system-i386 bin/bootloader.bin --no-reboot --no-shutdown -m 32m -smp 2
|
||||
|
||||
bootloader:
|
||||
$(AS) src/bootloader/main.s $(BL_ASFLAGS) -o bin/bootloader.bin
|
||||
init:
|
||||
@mkdir mount
|
||||
@mkdir bin
|
||||
@mkdir bin/boot
|
||||
@mkdir bin/kernel
|
||||
|
||||
clean:
|
||||
@rm -rf bin/
|
||||
@rm -rf mount/
|
||||
|
|
@ -0,0 +1,202 @@
|
|||
org 0x7c00
|
||||
|
||||
bits 16
|
||||
|
||||
%macro debug 0
|
||||
mov ah, 0xe
|
||||
mov al, 0x41
|
||||
int 0x10
|
||||
%endmacro
|
||||
|
||||
;TODO:
|
||||
;Enable A20 line
|
||||
;Enable unreal mode
|
||||
;Load GDT
|
||||
;Load part2
|
||||
;Set video mode
|
||||
;get memory map
|
||||
;enable paging
|
||||
;read filesystem
|
||||
;load kernel
|
||||
;parse ELF format
|
||||
;pass memory and video information to kernel
|
||||
;relocate and jump to kernel
|
||||
|
||||
jump:
|
||||
jmp short start
|
||||
times 3-($-$$) db 0x90
|
||||
fat_bpb:
|
||||
.oem:
|
||||
db "KIMI'SOS"
|
||||
.bytes_per_sector:
|
||||
dw 512
|
||||
.sectors_per_cluster:
|
||||
db 8
|
||||
.reserved_sectors:
|
||||
dw 32
|
||||
.fat_count:
|
||||
db 2
|
||||
.root_dir_entries:
|
||||
dw 0
|
||||
.sectors_in_volume:
|
||||
dw 0
|
||||
.media_type:
|
||||
db 0xf8
|
||||
.sectors_per_fat:
|
||||
dw 0
|
||||
.sectors_per_track:
|
||||
dw 63
|
||||
.heads:
|
||||
dw 8
|
||||
.part_start:
|
||||
dd 0
|
||||
.large_sector_count:
|
||||
dd 1048576
|
||||
fat_ebpb32:
|
||||
.sectors_per_fat:
|
||||
dd 1024
|
||||
.flags:
|
||||
dw 0
|
||||
.version:
|
||||
db 0, 1
|
||||
.root_dir_cluster:
|
||||
dd 2
|
||||
.fs_info_sector:
|
||||
dw 1
|
||||
.backup_boot:
|
||||
dw 0
|
||||
.reserved:
|
||||
times 12 db 0
|
||||
.drive_num:
|
||||
db 0x80
|
||||
.ntflags:
|
||||
db 0
|
||||
.sig:
|
||||
db 0x29
|
||||
.vid_Serial:
|
||||
dd 0
|
||||
.label:
|
||||
db " Kimi's OS "
|
||||
.sysid:
|
||||
db "FAT32 "
|
||||
|
||||
start:
|
||||
mov sp, 0x7000
|
||||
mov bp, 0x7000
|
||||
mov ax, ds
|
||||
xor bx, bx
|
||||
mov ds, bx
|
||||
mov [data.part_seg], ax
|
||||
mov [data.part_off], si
|
||||
jmp 0:set_cs
|
||||
set_cs:
|
||||
xor cx, cx
|
||||
check_a20:
|
||||
inc cx
|
||||
mov ax, 0xffff
|
||||
mov es, ax
|
||||
mov ax, [es:0x7e0e]
|
||||
cmp ax, [ds:0x7dfe]
|
||||
jne load_gdt
|
||||
enable_a20:
|
||||
cmp cx, 4
|
||||
je no_a20
|
||||
cmp cx, 3
|
||||
je .fast_a20
|
||||
cmp cx, 2
|
||||
je .kb_en
|
||||
.bios_en:
|
||||
mov ax, 0x2401
|
||||
int 0x15
|
||||
jmp check_a20
|
||||
.fast_a20:
|
||||
in al, 0x92
|
||||
or al, 2
|
||||
out 0x92, al
|
||||
mov ax, 100000
|
||||
.lp:
|
||||
dec ax
|
||||
cmp ax, 0
|
||||
jge .lp
|
||||
jmp check_a20
|
||||
.kb_en:
|
||||
cli
|
||||
mov al, 0xad
|
||||
out 0x64, al
|
||||
|
||||
call .wait
|
||||
mov al, 0xd0
|
||||
out 0x64, al
|
||||
|
||||
call .wait2
|
||||
in al, 0x60
|
||||
push eax
|
||||
|
||||
call .wait
|
||||
mov al, 0xd1
|
||||
out 0x64, al
|
||||
|
||||
call .wait
|
||||
pop eax
|
||||
or al, 2
|
||||
out 0x60, al
|
||||
|
||||
call .wait
|
||||
mov al, 0xae
|
||||
out 0x64, al
|
||||
|
||||
call .wait
|
||||
sti
|
||||
jmp check_a20
|
||||
|
||||
.wait:
|
||||
in al, 0x64
|
||||
test al,2
|
||||
jnz .wait
|
||||
ret
|
||||
.wait2:
|
||||
in al, 0x64
|
||||
test al, 1
|
||||
jnz .wait2
|
||||
ret
|
||||
|
||||
load_gdt:
|
||||
load_part2:
|
||||
jmp $
|
||||
no_a20:
|
||||
mov ah, 0xe
|
||||
mov al, 'E'
|
||||
int 0x10
|
||||
jmp $
|
||||
DAP:
|
||||
.sz: db 0x10
|
||||
.unused: db 0
|
||||
.read_count: dw 7
|
||||
.offset: dw 0x7e00
|
||||
.segment: dw 0
|
||||
.sector_start:
|
||||
dd 1
|
||||
dd 0
|
||||
|
||||
|
||||
data:
|
||||
.boot_disc: db 0
|
||||
.part_seg: dw 0
|
||||
.part_off: dw 0
|
||||
|
||||
times 510-($-$$) db 0
|
||||
db 0x55, 0xaa
|
||||
fs_info:
|
||||
.id: dd 0x41615252
|
||||
.reserved0: times 480 db 0
|
||||
.sig: dd 0x61417272
|
||||
.last_known_free: dd 0xFFFFFFFF
|
||||
.free_search_start: dd 3
|
||||
.reserved: times 12 db 0
|
||||
.trail: dd 0xAA550000
|
||||
times 1024-($-$$) db 0
|
||||
part_2:
|
||||
load_part3:
|
||||
get_mmap:
|
||||
set_video_mode:
|
||||
times 4096-($-$$) db 0
|
||||
Loading…
Reference in New Issue