Interface TrackSectorDevice

All Superinterfaces:
CapabilityProvider, Container, Device, HintProvider, InformationProvider
All Known Implementing Classes:
BlockToTrackSectorAdapter, OrderedTrackSectorDevice, SkewedTrackSectorDevice, TrackSectorNibbleDevice

public interface TrackSectorDevice extends Device

A TrackSectorDevice is any type of device that supports track and sector geometry. Most of the time, this is a physical 5.25" floppy, but that can be virtualized through various mechanisms, such as UniDOS.

Note that the read and write take logical sectors, and the device handles the translation (skewing) into physical sectors.

  • Field Details

  • Method Details

    • getGeometry

      Get information that describes the disk geometry.
    • getSectorOrder

      SectorOrder getSectorOrder()
      Get the sector order.
    • request

      default TrackSectorDevice request(SectorOrder sectorOrder)
      Request a track/sector device with the given sector ordering. If the current device already supports the requested order, the same device will be returned. Otherwise, the correct skew will be identified and a wrapper device will be returned.
    • is

      default boolean is(Hint hint)
      Specified by:
      is in interface HintProvider
    • readSector

      default DataBuffer readSector(int track, int sector)
      Read a single sector from the disk.
    • readSector

      void readSector(int track, int sector, int offset, DataBuffer data)
      Read a single sector from the disk into the given DataBuffer at the given offset.
    • readRange

      default DataBuffer readRange(int track, int sector, int totalSectors)
      Read a range of sectors.
    • writeSector

      void writeSector(int track, int sector, DataBuffer data)
      Write a single sector to the disk.
    • writeRange

      default void writeRange(int track, int sector, DataBuffer data)
      Write a range of sectors to the disk. Note that the data buffer is modified to be a multiple of sector size.
    • performRange

      default void performRange(int track, int sector, int totalSectors, TriIntConsumer actionFn)
      A utility method that performs an operation across a range of sectors. Mostly reusable code for the readRange and writeRange operations.
    • sizeBuffer

      default DataBuffer sizeBuffer(DataBuffer dataBuffer)
      Size the given DataBuffer to be a multiple of the sector size.
    • calculateRequiredSectors

      default int calculateRequiredSectors(int size)
      A handy/common function to calculate the number of sectors needed for the given size.
    • format

      default void format()

      Format a disk. For most disks, this is simply a wipe to all zeros. If this disk has extended format (such as nibble formats), this is the opportunity to write out that format.

      NOTE: Adapter type devices have to be cautious about what device is responsible about formatting. For example, a UniDOS disk is 2x400K volumes on an 800K block device -- if they defer formatting to the 800K block device, a format on one volume also wipes out the other (in this case, do not defer to the "parent"). However, if the block adapter contains a nibble-based TrackSectorDevice, the actual formatting needs to get to the nibble device so it can lay down sector markers and the rest of the track structure.