Get MBR ready, add hdimage target
This commit is contained in:
parent
7c4a618385
commit
c70f388548
15
Makefile
15
Makefile
@ -29,18 +29,27 @@ kernel.com: kernel/*.asm lib/*.inc
|
|||||||
debug.rom: debug/*.asm lib/*.inc
|
debug.rom: debug/*.asm lib/*.inc
|
||||||
nasm -s -o $@ -I lib -I debug debug/main.asm && scripts/fix-rom.sh $@
|
nasm -s -o $@ -I lib -I debug debug/main.asm && scripts/fix-rom.sh $@
|
||||||
|
|
||||||
floppy.bs: boot/fatvbr.asm
|
boot/floppy.bs: boot/fatvbr.asm
|
||||||
nasm -s -DCMDLINE='"KERNEL.COM"' -o $@ $<
|
nasm -s -DCMDLINE='"KERNEL.COM"' -o $@ $<
|
||||||
|
|
||||||
|
boot/mbr.bs: boot/mbr.asm
|
||||||
|
nasm -s -DFLOPPY=$(FLOPPY) -o $@ $<
|
||||||
|
|
||||||
programs/%.com: programs/%.asm
|
programs/%.com: programs/%.asm
|
||||||
nasm -s -I lib -o $@ $<
|
nasm -s -I lib -o $@ $<
|
||||||
|
|
||||||
fdimage.img: floppy.bs $(DISTFILES)
|
fdimage.img: boot/floppy.bs $(DISTFILES)
|
||||||
mformat -C -i $@ -f $(FLOPPY) -B floppy.bs ::
|
mformat -C -i $@ -f $(FLOPPY) -B boot/floppy.bs ::
|
||||||
mcopy -i $@ $(DISTFILES) ::
|
mcopy -i $@ $(DISTFILES) ::
|
||||||
|
|
||||||
|
hdimage.img: boot/mbr.bs fdimage.img
|
||||||
|
cat boot/mbr.bs fdimage.img >$@
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f *.com *.bin *.rom *.img *.log *.bs *.lst programs/*.com
|
rm -f *.com *.bin *.rom *.img *.log *.bs *.lst programs/*.com
|
||||||
|
|
||||||
qemu-floppy: fdimage.img $(DEBUGROM)
|
qemu-floppy: fdimage.img $(DEBUGROM)
|
||||||
$(QEMU) $(QEMU_ARGS) -boot c -fda fdimage.img
|
$(QEMU) $(QEMU_ARGS) -boot c -fda fdimage.img
|
||||||
|
|
||||||
|
qemu-hdd: hdimage.img $(DEBUGROM)
|
||||||
|
$(QEMU) $(QEMU_ARGS) -boot c -hda hdimage.img
|
||||||
|
@ -151,6 +151,10 @@ load_sectors:
|
|||||||
push cx
|
push cx
|
||||||
push dx
|
push dx
|
||||||
|
|
||||||
|
; add partition offset (required for HDD)
|
||||||
|
add ax, [fdc.po]
|
||||||
|
adc dx, [fdc.po+2]
|
||||||
|
|
||||||
; calculate CHS data
|
; calculate CHS data
|
||||||
div word [cs:fdc.spt] ; ax:temp = (lba / spt)
|
div word [cs:fdc.spt] ; ax:temp = (lba / spt)
|
||||||
inc dx ; dx:sector = (lba % spt) + 1
|
inc dx ; dx:sector = (lba % spt) + 1
|
||||||
|
67
boot/mbr.asm
67
boot/mbr.asm
@ -2,6 +2,11 @@
|
|||||||
%define self 0x00600 ; 1 sector
|
%define self 0x00600 ; 1 sector
|
||||||
%define prog 0x07C00 ; 1 sector
|
%define prog 0x07C00 ; 1 sector
|
||||||
|
|
||||||
|
; FDC fields in VBR
|
||||||
|
%define spt (prog + 0x18)
|
||||||
|
%define nos (prog + 0x1A)
|
||||||
|
%define po (prog + 0x1C)
|
||||||
|
|
||||||
org self
|
org self
|
||||||
cpu 8086
|
cpu 8086
|
||||||
|
|
||||||
@ -26,15 +31,69 @@ init:
|
|||||||
jmp 0:main
|
jmp 0:main
|
||||||
|
|
||||||
main:
|
main:
|
||||||
mov bp, 0x0035
|
mov bp, 0x3335
|
||||||
mov WORD [dap.blocknum], 1
|
mov si, part1
|
||||||
|
mov cx, 4
|
||||||
|
.loop:
|
||||||
|
test BYTE [si], 0x80
|
||||||
|
jnz loadpart
|
||||||
|
add si, 0x10
|
||||||
|
loop .loop
|
||||||
|
jmp error
|
||||||
|
|
||||||
|
loadpart:
|
||||||
|
; transfer starting address into DAP
|
||||||
|
push si
|
||||||
|
add si, 0x08
|
||||||
|
mov di, dap.blocknum
|
||||||
|
movsw
|
||||||
|
movsw
|
||||||
|
pop si
|
||||||
|
|
||||||
|
; load sector
|
||||||
|
push si
|
||||||
mov si, dap
|
mov si, dap
|
||||||
|
mov bp, 0x3336
|
||||||
mov ah, 0x42
|
mov ah, 0x42
|
||||||
stc
|
stc
|
||||||
int 0x13
|
int 0x13
|
||||||
jc error
|
jc error
|
||||||
mov cx, [dap.blocknum]
|
pop si
|
||||||
int3
|
|
||||||
|
cmp BYTE [si+4], 0x01
|
||||||
|
jne jump
|
||||||
|
|
||||||
|
adjust:
|
||||||
|
push dx
|
||||||
|
|
||||||
|
mov bp, 0x3337
|
||||||
|
mov ah, 0x08
|
||||||
|
stc
|
||||||
|
int 0x13
|
||||||
|
jc error
|
||||||
|
|
||||||
|
; update sectors per track
|
||||||
|
xor ax, ax
|
||||||
|
mov al, cl
|
||||||
|
mov [spt], ax
|
||||||
|
|
||||||
|
; update number of sides
|
||||||
|
xor ax, ax
|
||||||
|
mov al, dh
|
||||||
|
mov [nos], ax
|
||||||
|
|
||||||
|
; update partition offset
|
||||||
|
push si
|
||||||
|
add si, 0x08
|
||||||
|
mov di, po
|
||||||
|
movsw
|
||||||
|
movsw
|
||||||
|
pop si
|
||||||
|
|
||||||
|
pop dx
|
||||||
|
|
||||||
|
jump:
|
||||||
|
jmp 0:prog
|
||||||
|
|
||||||
error:
|
error:
|
||||||
mov ax, bp
|
mov ax, bp
|
||||||
|
Loading…
Reference in New Issue
Block a user