vbr: display drive geometry

This commit is contained in:
Nero 2019-03-29 21:40:44 +00:00
parent a46114f6bd
commit f70242dfa2

View File

@ -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