--[[ ####################### # DiscFerret Disc Drive Specification File # # PC 5.25in Drives A and B, twisted cable or CBL-01A cable kit ####################### ]] -- DriveSpec version flags drivespec_version = 1.0 -- Drive types recognised by this drivespec drivespecs = { pc525_80a = { -- Shown to user friendlyname = "PC 5.25\" 80 tr., twisted cable (CBL-01A), drive A", -- Default step rate in milliseconds steprate = 3.0, -- Spin-up time in milliseconds spinup = 1000, -- Number of physical tracks tracks = 80, -- Number of tracks per inch tpi = 96, -- Number of physical heads heads = 2, }, pc525_80b = { -- Shown to user friendlyname = "PC 5.25\" 80 tr., twisted cable (CBL-01A), drive B", -- Default step rate in milliseconds steprate = 3.0, -- Spin-up time in milliseconds spinup = 1000, -- Number of physical tracks tracks = 80, -- Number of tracks per inch tpi = 96, -- Number of physical heads heads = 2, }, pc525_40a = { -- Shown to user friendlyname = "PC 5.25\" 40 tr., twisted cable (CBL-01A), drive A", -- Default step rate in milliseconds steprate = 20.0, -- Spin-up time in milliseconds spinup = 1000, -- Number of physical tracks tracks = 40, -- Number of tracks per inch tpi = 48, -- Number of physical heads heads = 2, }, pc525_40b = { -- Shown to user friendlyname = "PC 5.25\" 40 tr., twisted cable (CBL-01A), drive B", -- Default step rate in milliseconds steprate = 20.0, -- Spin-up time in milliseconds spinup = 1000, -- Number of physical tracks tracks = 40, -- Number of tracks per inch tpi = 48, -- Number of physical heads heads = 2, }, pc525_40SSa = { -- Shown to user friendlyname = "PC 5.25\" 40 tr. single sided, twisted cable (CBL-01A), drive B", -- Default step rate in milliseconds steprate = 20.0, -- Spin-up time in milliseconds spinup = 1000, -- Number of physical tracks tracks = 40, -- Number of tracks per inch tpi = 48, -- Number of physical heads heads = 1, }, pc525_40SSb = { -- Shown to user friendlyname = "PC 5.25\" 40 tr. single sided, twisted cable (CBL-01A), drive B", -- Default step rate in milliseconds steprate = 20.0, -- Spin-up time in milliseconds spinup = 1000, -- Number of physical tracks tracks = 40, -- Number of tracks per inch tpi = 48, -- Number of physical heads heads = 1, }, } --[[ Given the drive type, track, head and sector, return a list of output pins which need to be set. Called once per sector on hard-sectored media, once per track on soft-sectored media --]] function getDriveOutputs(drivetype, track, head, sector) pins = 0 -- 3.5in FDD settings are really easy to set up. First start with drive selects. if drivetype == "pc525_80a" then -- Shugart DS0 = motor enable A, DS2 = drive select A pins = pins + PIN_DS0 + PIN_DS2 elseif drivetype == "pc525_80b" then -- Shugart DS1 = drive select B, MOTEN = motor enable B pins = pins + PIN_DS1 + PIN_MOTEN elseif drivetype == "pc525_40a" then -- Shugart DS0 = motor enable A, DS2 = drive select A pins = pins + PIN_DS0 + PIN_DS2 elseif drivetype == "pc525_40b" then -- Shugart DS1 = drive select B, MOTEN = motor enable B pins = pins + PIN_DS1 + PIN_MOTEN elseif drivetype == "pc525_40SSa" then -- Shugart DS0 = motor enable A, DS2 = drive select A pins = pins + PIN_DS0 + PIN_DS2 elseif drivetype == "pc525_40SSb" then -- Shugart DS1 = drive select B, MOTEN = motor enable B pins = pins + PIN_DS1 + PIN_MOTEN else error("Unrecognised drive type '" .. drivetype .. "'.") end -- Handle side selection if head == 0 then -- do nothing, Head 0 is PIN_SIDESEL (p32) inactive/floating high elseif head == 1 then pins = pins + PIN_SIDESEL else error("Head number " .. head .. " out of range.") end -- That's pretty much it, unless we need to provide TG46 on the DENSITY pin. return pins end --[[ Given the current drive status flags, identify whether the drive is ready for use. ]] function isDriveReady(drivetype, status) -- 3.5in drives don't generally have a working READY output, and we don't give a damn about DISK CHANGE. -- If this were a Winchester drive, we'd be checking READY and SEEK COMPLETE. return true end