From 1cbd918b56c86c7d9df751a67e7b23ffdac71ae9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juhani=20Krekel=C3=A4?= Date: Mon, 28 Mar 2022 16:53:55 +0300 Subject: [PATCH] Proof of concept 720k disk support --- Makefile | 2 +- boot.asm | 12 ++++++------ io.asm | 15 ++++++++++++--- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 7f602e3..b766c3f 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ DOSBOX=dosbox -conf dosbox-build.conf -exit ordos.img: BOOT.BIN IO.SYS ORDOS.SYS COMMAND.COM debug.com edlin.com exe2bin.exe link.exe masm.exe rm -f ordos.img - mkfs.fat -C $@ -M 0xff 320 + mkfs.fat -C $@ 720 rw -I 0x7c00 -i BOOT.BIN -o $@ -c 512 mcopy -i $@ IO.SYS :: mcopy -i $@ ORDOS.SYS :: diff --git a/boot.asm b/boot.asm index 1864551..a395488 100644 --- a/boot.asm +++ b/boot.asm @@ -17,12 +17,12 @@ jmp code dw 512 ; Bytes per sector db 2 ; Sectors per cluster dw 1 ; Reserved sectors - db 2 ; FATs +fats db 2 ; FATs dw 112 ; Root directory entries - dw 2*320 ; Total sectors - db 0ffh ; Media descriptor - dw 1 ; Sectors per fat -sectorspertrack dw 8 + dw 2*720 ; Total sectors + db 0f9h ; Media descriptor +sectorsperfat dw 3 ; Sectors per fat +sectorspertrack dw 9 heads dw 2 dd 0 ; Hidden sectors dd 0 ; Total sectors (large) @@ -40,7 +40,7 @@ code: mov drivenumber, dl ; TODO: Check we actually have the OS - mov ax, 10 + mov ax, 14 mov bx, 600h mov cx, 17 ; This is what PC-DOS 1.10's full size ends up at call loadsectors diff --git a/io.asm b/io.asm index ddf09f5..2d49e5e 100644 --- a/io.asm +++ b/io.asm @@ -1,7 +1,7 @@ ; SPDX-License-Identifier: MIT ; Copyright (c) 2021 Juhani 'nortti' Krekelä. -debug equ 0 +debug equ 1 iosegment equ 60h dossegment equ iosegment + 1*1024/16 ; DOS starts 1KiB after IO system @@ -558,14 +558,15 @@ code ends constants segment -sectorspertrack dw 8 ; TODO: Don't hardcode +sectorspertrack dw 9 ; TODO: Don't hardcode heads dw 2 ; TODO: Don't hardcode disks_table: db 1 ; 1 drive, TODO: Don't hardcode db 0 ; Physical drive 0 - dw offset iogroup:parameters_320k + ;dw offset iogroup:parameters_320k + dw offset iogroup:parameters_720k parameters_320k: dw 512 ; Sector size in bytes @@ -575,6 +576,14 @@ parameters_320k: dw 112 ; Number of directory entries dw 320*2 ; Number of sectors +parameters_720k: + dw 512 ; Sector size in bytes + db 2 ; Sectors per cluster + dw 1 ; Number of reserved sectors + db 2 ; Number of FATs + dw 112 ; Number of directory entries + dw 720*2 ; Number of sectors + doubleticks_per_hour dw 32772 ; 1800B0h / 2 / 24 ticks_per_minute dw 1092 ; 1800B0h / 24 / 60 ticks_per_second dw 18 ; 1800B0h / 24 / 60 / 60