Konamiman / Nextor

A disk operating system for MSX computers, forked from MSX-DOS 2.31
Other
183 stars 35 forks source link

Modifications to DOS1 mode to support various media geometries #40

Open Eugeny1 opened 4 years ago

Eugeny1 commented 4 years ago

This is already implemented in the GR8BIT storage subsystem, and it would be beneficial for Nextor to implement it too. I am very interested in it as I want to use Nextor in new version 4.0 of the GR8BIT storage subsystem. This is rather enhancement request than issue reporting. I do not see how I can set the relevant state for this request.

When DOS1 kernel enumerates devices at the label A587E, please install addition routine call to the driver which will return the default copy of the DPB for each drive (if supported) for the mode selected - instead of using hard-coded DEFDPB structure. Alternatively, you can require that call to just copy its target default DPB to the location pointed by DE.

Why it is helpful: returning custom DPB for each allocated drive will allow driver to use its own configuration files (like GR8BIT using EEPROM to store the drive configuration and maximal capacities) to size their drives appropriately - for example choosing FAT size (3 sectors/1.5KB RAM space or 9 sectors/4.5KB RAM size) according to user selected settings. Using driver'supplied DPB will also give it opportunity to have devices of different geometry in the system - e.g. 720K 3.5" drive and 360K 5.25" drive as a starting maximal setting.

You can set it up the same way as you did with the DRV_TYPE: e.g. bit 3 set if driver supports individual initial configuration of the drives/devices.

Maybe it has sense to install this into the DRV_CONFIG call with A=3 supplying C=DOS1/DOS2 mode (as driver must know this info, and it is important for storage configuration selection), and relative drive number at boot time (also very important and identifies what drive to get unique DPB). Supply target location for DPB in DE so that driver on this call, if supporting this function, copies respective drive's DPB in the predefined kernel's working location, and then kernel uses this information to calculate the (maximal) size of FAT for the drive in the memory.

I will give you an example:

For more information on the possible functionality see my knowledge base article "GR8BIT DN0003: Storage subsystem v.3.0 Manual" here: http://kb.gr8bit.ru/DN0003/GR8BIT-DN0003-Storage-subsystem-v-3-0-Manual.html.

Eugeny1 commented 4 years ago

Forgot to say one important related thing: it would be correct to impement checking of actual drive FAT size against space allocated for this drive at the initialization stage to ensure machine does not crash if 9 FAT sectors media being inserted into maximum 3 FAT sector size configured drive - that would be ok to just return read error at the FAT reading stage during new insterted media initialization.