How to use 1.44mb disks with MS-DOS 2.11 Kaypro 2000 OEM
I've been sitting on this info for an insanely long time, but I finally thought I would go ahead and post it here in case someone might find it useful.
DOS 2.0 introduced the boot sector BIOS Parameter Block to accommodate various sized hard drives. While it writes this data to floppy disks, DOS 2 only looks at a single media descriptor byte. This means DOS 2 is limited to a small set of disk layouts as defined in an internal lookup table. Normally, this is only 160K, 180K, 320K, and 360K.
A few OEMs added additional supported formats. For example, the Kaypro 2000 OEM adds the 720K 3.5" format. This is still done via the lookup table. MS-DOS did not get support for truly arbitrary disk formats until DOS 3.3.
So, knowing that the standard 1.44mb format has its own unique media descriptor byte, why not add that format to DOS 2?
I chose the Kaypro 2000 DOS 2.11 OEM for this because it already has an additional record for the 720K format, and it works well on most other IBM PC clones and emulators.
You can start by extracting the disk one from Microsoft MS-DOS 2.11 [English] [Kaypro OEM] (3.5).7z, and using WinImage to resize it to a 1.44mb disk.
In Kaypro 2000 DOS 2.11 (IO.SYS dated 3/14/1985 8192 bytes), the lookup table is located in the IO.SYS file at offset 0C43h (hexadecimal).
The data looks like this:
01 0100 02 4000 4001 FE 0100 0800 01 0000000000010DF00C0002
01 0100 02 4000 6801 FC 0200 0900 01 0000000000010DF00C0002
02 0100 02 7000 8002 FF 0100 0800 02 0000000000010DF00C0002
02 0100 02 7000 D002 FD 0200 0900 02 0000000000010DF00C0002
02 0100 02 7000 A005 F9 0300 0900 02 0000000000010DF00C0002
Byte: Number of sectors per cluster
Dword: Number of reserved sectors (normally 1)
Byte: Number of FATs (normally 2)
Dword: Directory entries (normally 112 or 224)
Dword: Total sectors on the disk
Byte: Media ID byte (FE=160K, FC=180K, FF=320K, FD=360K, F9=720K, F0=1.44, FE and FD are also used for 8" media)
Dword: Sectors per FAT
Dword: Sectors per track
Dword: Number of sides per disk
10 bytes; copy;
The number of tracks are calculated.
So, translating to decimal:
Now, the parameters for a standard 1.44mb disk are:
In practice, the 180K format is the least common, so we will replace it.
(By the time DOS 2 came out, double sided drives were common - vendors that supported backwards compatibility just used the 160K format for compatiblity with DOS 1.x)
Change:
01 0100 02 4000 6801 FC 0200 0900 01 0000000000010DF00C0002
to
01 0100 02 E000 400B F0 0900 1200 02 0000000000010DF00C0002
Now, mount the disk image with the modified IO.SYS in an emulator or write it to a disk and boot it.
It should boot up fine, and an entire 1.44mb of data will be accessible.
Unlike some hacks that try to write an 8 or 9 sector image on 18 sector media, this will not confuse disk imaging tools.
This modification is useful if you want to quickly test a larger DOS program in DOS 2.11. All you have to do is open a 1.44mb disk image and copy your files in there.
Additionally, some emulators, virtualizers, and low-quality USB floppy drives do not support 720K. Now you can use DOS 2.11!
Notes:
It is not possible here to have two different formats with the same ID byte.
The format program will not work with 1.44mb, but you can use some third party tools like FDFORMAT or NFORMAT.
Your ROM BIOS must have support for HD media.
This modification may not work with other OEM versions. I don't recall if this worked with PC-DOS.
DOS 2.0 introduced the boot sector BIOS Parameter Block to accommodate various sized hard drives. While it writes this data to floppy disks, DOS 2 only looks at a single media descriptor byte. This means DOS 2 is limited to a small set of disk layouts as defined in an internal lookup table. Normally, this is only 160K, 180K, 320K, and 360K.
A few OEMs added additional supported formats. For example, the Kaypro 2000 OEM adds the 720K 3.5" format. This is still done via the lookup table. MS-DOS did not get support for truly arbitrary disk formats until DOS 3.3.
So, knowing that the standard 1.44mb format has its own unique media descriptor byte, why not add that format to DOS 2?
I chose the Kaypro 2000 DOS 2.11 OEM for this because it already has an additional record for the 720K format, and it works well on most other IBM PC clones and emulators.
You can start by extracting the disk one from Microsoft MS-DOS 2.11 [English] [Kaypro OEM] (3.5).7z, and using WinImage to resize it to a 1.44mb disk.
In Kaypro 2000 DOS 2.11 (IO.SYS dated 3/14/1985 8192 bytes), the lookup table is located in the IO.SYS file at offset 0C43h (hexadecimal).
The data looks like this:
01 0100 02 4000 4001 FE 0100 0800 01 0000000000010DF00C0002
01 0100 02 4000 6801 FC 0200 0900 01 0000000000010DF00C0002
02 0100 02 7000 8002 FF 0100 0800 02 0000000000010DF00C0002
02 0100 02 7000 D002 FD 0200 0900 02 0000000000010DF00C0002
02 0100 02 7000 A005 F9 0300 0900 02 0000000000010DF00C0002
Byte: Number of sectors per cluster
Dword: Number of reserved sectors (normally 1)
Byte: Number of FATs (normally 2)
Dword: Directory entries (normally 112 or 224)
Dword: Total sectors on the disk
Byte: Media ID byte (FE=160K, FC=180K, FF=320K, FD=360K, F9=720K, F0=1.44, FE and FD are also used for 8" media)
Dword: Sectors per FAT
Dword: Sectors per track
Dword: Number of sides per disk
10 bytes; copy;
The number of tracks are calculated.
So, translating to decimal:
RECORD SPC RSVD FATS DIR TOT ID SPFAT SPT SIDES (TRKS SIZE) ------ --- ---- ---- --- ---- -- ----- --- ----- ---- ---- 1: 1 1 2 112 320 FE 1 8 1 (40 160K) 2: 1 1 2 112 360 FC 2 9 1 (40 180K) 3: 2 1 2 224 640 FF 1 8 2 (40 320K) 4: 2 1 2 224 720 FD 2 9 2 (40 360K) 5: 2 1 2 224 1440 F9 3 9 2 (80 720K)
Now, the parameters for a standard 1.44mb disk are:
SPC RSVD FATS DIR TOT ID SPFAT SPT SIDES (TRKS SIZE) ------ --- ---- ---- --- ---- -- ----- --- ----- ---- ---- 1 1 2 224 2880 F0 9 18 2 (80 1.44MB)
In practice, the 180K format is the least common, so we will replace it.
(By the time DOS 2 came out, double sided drives were common - vendors that supported backwards compatibility just used the 160K format for compatiblity with DOS 1.x)
Change:
01 0100 02 4000 6801 FC 0200 0900 01 0000000000010DF00C0002
to
01 0100 02 E000 400B F0 0900 1200 02 0000000000010DF00C0002
Now, mount the disk image with the modified IO.SYS in an emulator or write it to a disk and boot it.
It should boot up fine, and an entire 1.44mb of data will be accessible.
Unlike some hacks that try to write an 8 or 9 sector image on 18 sector media, this will not confuse disk imaging tools.
This modification is useful if you want to quickly test a larger DOS program in DOS 2.11. All you have to do is open a 1.44mb disk image and copy your files in there.
Additionally, some emulators, virtualizers, and low-quality USB floppy drives do not support 720K. Now you can use DOS 2.11!
Notes:
It is not possible here to have two different formats with the same ID byte.
The format program will not work with 1.44mb, but you can use some third party tools like FDFORMAT or NFORMAT.
Your ROM BIOS must have support for HD media.
This modification may not work with other OEM versions. I don't recall if this worked with PC-DOS.
Comments
But you can attach a standard 1.44mb drive to a low density controller and use it as a 720K drive.
Both hardware support and BIOS support must be present.
If DOS 3.3 or later can not fully recognize your hardware's 1.44mb drive, than the above modification likely will not work on that drive.
The primary use for this modification is if you want to test a larger application under DOS 2.11, but don't have a FAT12 hard drive handy.