From f70242dfa2b1e399096ff9c5c1c554d1014510ee Mon Sep 17 00:00:00 2001 From: Ain <41307858+nero@users.noreply.github.com> Date: Fri, 29 Mar 2019 21:40:44 +0000 Subject: [PATCH] vbr: display drive geometry --- boot/vbr.asm | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 74 insertions(+), 2 deletions(-) diff --git a/boot/vbr.asm b/boot/vbr.asm index c9628c0..9e10485 100644 --- a/boot/vbr.asm +++ b/boot/vbr.asm @@ -58,7 +58,11 @@ _startup: mov ss, ax xor sp, sp - mov [fdc.drv], dl ; backup driver number + call print_inline + db "VBR: Using", 0 + + mov [fdc.drv], dl ; backup drive number +.adjust_chs: mov ah, 0x08 int 0x13 ; required, QEMU detects 360kB as 1200kB with CHS 80 2 15 jc .noadjust ; skip if function does not exist @@ -75,11 +79,38 @@ _startup: mul word [fdc.nos] ; number of tracks = number of cylinders * heads mul word [fdc.spt] ; number of sectors = number of tracks * sectors per track mov [fdc.ts], ax + + call print_inline + db " BIOS", 0 .noadjust: + call print_inline + db " CHS ", 0 + + mov ax, [fdc.ts] + div word [fdc.nos] + div word [fdc.spt] + call print_number + + call print_inline + db ",", 0 + + mov ax, [fdc.nos] + call print_number + + call print_inline + db ",", 0 + + mov ax, [fdc.spt] + call print_number + + call print_inline + db 0x0A, 0x0D, 0 + mov ax, 0x0070 mov es, ax xor bx, bx call loadrootdir + call dump .end: hlt @@ -149,6 +180,39 @@ loadblk: add bx, 0x0200 ret +print_number: + mov cx, 0x000A + xor dx, dx + div cx ; ax = dx:ax / 10, dx = dx:ax % 10 + and ax, ax + jz .print + push dx + call print_number + pop dx +.print: + mov al, dl + add al, 0x30 + mov ah, 0x0e + int 0x10 + ret + +print_inline: + pop si + push bx +.loop: + lodsb + cmp al, 0x00 + je .end + mov bx, 0x0000 + mov ah, 0x0e + int 0x10 + cmp al, 0x0D + jmp .loop +.end: + pop bx + push si + ret + dump: mov si, bx mov cx, 0x10 @@ -179,5 +243,13 @@ dump: %include "print.asm" -times (0x1FE - ($-$$)) nop +times (0x1F0 - ($-$$)) db 0 + +str_bootfile: + db "BOOT" + times (0x1F8 - ($-$$)) db " " + db "BIN" + +times (0x1FE - ($-$$)) db 0 + dw 0xAA55