From 27e4dec5802deaba96b257c3032c3ad270213319 Mon Sep 17 00:00:00 2001 From: Ain <41307858+nero@users.noreply.github.com> Date: Wed, 15 Apr 2020 23:51:07 +0200 Subject: [PATCH] Implement loading BPB from media --- boot/kernel.asm | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/boot/kernel.asm b/boot/kernel.asm index d68eef7..baa20f5 100644 --- a/boot/kernel.asm +++ b/boot/kernel.asm @@ -139,12 +139,36 @@ setint: push es bpb: times bpb_len db 0 drvnum: db 0 align 4 -drvpos: dd 0 +drvoff: dd 0 ; partition offset +drvpos: dd 0 ; absolute physical sector number buffer: times 512 db 0 ; Select active drive ; IN dl drive number A=0, B=1, C=2, ... select: mov [drvnum], dl + push es + xor ax, ax + push cs + pop es + stosw + stosw + stosw + stosw + pop es + call read + call ldbpb + ret + + ; load bpb from buffer to bpb +ldbpb: push ds + push es + mov ax, cs + mov si, buffer+0x0B + mov di, bpb + mov cx, bpb_len + rep movsb + pop es + pop ds ret ; Set sector number @@ -207,17 +231,11 @@ init: cli mov ss, ax xor sp, sp - xor dh, dh call dnconv + int 3 call select - - xor ax, ax - xor dx, dx - call seek - - call read - - mov ax, [buffer+0x1FE] + int 3 + mov ax, [cs:bpb+bpb_ss] int 3 main: push cs