Load kernel from reserved sectors in fatfs

This commit is contained in:
Nero 2020-09-17 05:57:46 +00:00
parent 1ee0637eab
commit 8e87cf0f75
3 changed files with 36 additions and 18 deletions

View File

@ -1,7 +1,5 @@
FLOPPY = 1440
PROGRAMS = hello.com PROGRAMS = hello.com
DISTFILES = $(PROGRAMS) kernel.bs DISTFILES = $(PROGRAMS)
ROMS = ROMS =
QEMU_ARCH = $(shell uname -m) QEMU_ARCH = $(shell uname -m)
@ -9,7 +7,7 @@ QEMU = qemu-system-$(QEMU_ARCH)
QEMU_ARGS = $(addprefix --option-rom ,$(ROMS)) QEMU_ARGS = $(addprefix --option-rom ,$(ROMS))
NASM = nasm NASM = nasm
NASM_ARGS = -s -Ilib -DFLOPPY=$(FLOPPY) NASM_ARGS = -s -Ilib
EMUL = utils/emul EMUL = utils/emul
@ -28,7 +26,7 @@ endif
.PHONY: default bootstrap clean qemu-rom qemu-floppy qemu-pxe .PHONY: default bootstrap clean qemu-rom qemu-floppy qemu-pxe
default: fdimage.img default: fd1440.img
# Host utils # Host utils
utils/%: %.c utils/%: %.c
@ -59,14 +57,13 @@ fat6.bs: boot/fat.asm
%.rom: rom/%.asm utils/fix-rom %.rom: rom/%.asm utils/fix-rom
$(NASM) $(NASM_ARGS) -o $@ $< && utils/fix-rom $@ $(NASM) $(NASM_ARGS) -o $@ $< && utils/fix-rom $@
fdimage.img: fat1.bs $(DISTFILES) fd%.img: kernel.bs $(DISTFILES)
mformat -C -i $@ -f $(FLOPPY) -B fat1.bs :: mformat -C -i $@ -f $* -R 8 -B kernel.bs ::
mmd -i $@ ::rdos dd if=kernel.bs conv=notrunc bs=512 skip=1 seek=1 of=$@
mcopy -i $@ $(DISTFILES) ::rdos mcopy -i $@ $(DISTFILES) ::
mattrib -i $@ +s ::rdos ::rdos/kernel.bs
hdimage.img: mbr.bs fdimage.img hdimage.img: mbr.bs fd1440.img
cat mbr.bs fdimage.img >$@ cat mbr.bs fd1440 >$@
part.img: fatc.bs $(DISTFILES) part.img: fatc.bs $(DISTFILES)
dd if=/dev/zero bs=1024 count=33k of=$@ dd if=/dev/zero bs=1024 count=33k of=$@
@ -82,8 +79,8 @@ clean:
rm -f *.com *.bs *.0 *.lst *.img *.bin *.rom rm -f *.com *.bs *.0 *.lst *.img *.bin *.rom
rm -rf utils rm -rf utils
qemu-floppy: fdimage.img $(ROMS) qemu-floppy: fd1440.img $(ROMS)
$(QEMU) $(QEMU_ARGS) -boot a -fda fdimage.img $(QEMU) $(QEMU_ARGS) -boot a -fda fd1440.img
qemu-hdd: hdd.img $(ROMS) qemu-hdd: hdd.img $(ROMS)
$(QEMU) $(QEMU_ARGS) -boot c -hda hdd.img $(QEMU) $(QEMU_ARGS) -boot c -hda hdd.img

View File

@ -7,11 +7,12 @@
; kernel stack size in words ; kernel stack size in words
%define stacksize 512 %define stacksize 512
jmp init jmp near init
times ( 0x0B - ($-$$) ) db " " db "LOVELAIN"
times bpb_size db 0 ; mformat writes stuff until 0x3E
params: times ( 0x3E - ($-$$) ) nop
init: cli init: cli
xor ax, ax xor ax, ax
@ -20,11 +21,31 @@ init: cli
mov ss, ax mov ss, ax
mov sp, ( stack+stacksize ) mov sp, ( stack+stacksize )
mov ax, [params+bpb.sectoroffset]
mov dx, [params+bpb.sectoroffset+2]
mov ax, 0x0201
mov cx, 0x0002
mov dh, 0
mov bx, 0x7E00
int 0x13
mov ax, [0x7E00]
mov cx, [0x7E02]
mov dx, [0x7E04]
int 3 int 3
hlt: hlt hlt: hlt
jmp hlt jmp hlt
times (0x1FE - ($-$$)) db 0
dw 0xAA55
db "rdos kernel"
end: align 512
section .bss section .bss
stack: resb stacksize stack: resb stacksize

View File

@ -131,7 +131,7 @@ part1: db 0x80
db 0x01 db 0x01
db 0xFF, 0xFF, 0xFF db 0xFF, 0xFF, 0xFF
dd 1 dd 1
dd (FLOPPY * 2) dd (1440 * 2)
times (0x1FE - ($-$$)) db 0 times (0x1FE - ($-$$)) db 0