com.webcodepro.applecommander.storage.physical
Class NibbleOrder

java.lang.Object
  extended by com.webcodepro.applecommander.storage.physical.ImageOrder
      extended by com.webcodepro.applecommander.storage.physical.DosOrder
          extended by com.webcodepro.applecommander.storage.physical.NibbleOrder

public class NibbleOrder
extends DosOrder

Supports disk images stored in nibbilized DOS physical order.

Author:
Rob Greene (RobGreene@users.sourceforge.net)

Field Summary
 int[] readTranslateTable
          The read translation table.
 
Constructor Summary
NibbleOrder(ByteArrayImageLayout diskImageManager)
          Construct a NibbleOrder.
 
Method Summary
protected  int decodeOddEven(byte[] buffer, int offset)
          Decode odd-even bytes as stored on disk.
protected  void encodeOddEven(byte[] buffer, int offset, int value)
          Encode odd-even bytes to be stored on disk.
 void format()
          Format the media.
 int getBlocksOnDevice()
          Answer with the number of blocks on this device.
 int getSectorsPerTrack()
          Answer with the number of sectors per track on this device.
 int getTracksPerDisk()
          Answer with the number of tracks on this device.
protected  int locateField(int byte1, int byte2, int byte3, byte[] trackData, byte[] fieldData, int startingOffset)
          Locate a field on the track.
 byte[] readSector(int track, int dosSector)
          Retrieve the specified sector.
protected  byte[] readTrackData(int track)
          Read nibbilized track data.
 void writeSector(int track, int dosSector, byte[] sectorData)
          Write the specified sector.
protected  void writeTrackData(int track, byte[] trackData)
          Write nibbilized track data.
 
Methods inherited from class com.webcodepro.applecommander.storage.physical.DosOrder
getOffset, isBlockDevice, isTrackAndSectorDevice, readBlock, writeBlock
 
Methods inherited from class com.webcodepro.applecommander.storage.physical.ImageOrder
getDiskImageManager, getPhysicalSize, getSectorsPerDisk, isSizeApprox, readBytes, setDiskImageManager, writeBytes
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

readTranslateTable

public int[] readTranslateTable
The read translation table. Constructed from the write translate table. Used to decode a disk byte into a value from 0x00 to 0x3f which is further decoded...

Constructor Detail

NibbleOrder

public NibbleOrder(ByteArrayImageLayout diskImageManager)
Construct a NibbleOrder.

Method Detail

readTrackData

protected byte[] readTrackData(int track)
Read nibbilized track data.


writeTrackData

protected void writeTrackData(int track,
                              byte[] trackData)
Write nibbilized track data.


readSector

public byte[] readSector(int track,
                         int dosSector)
                  throws java.lang.IllegalArgumentException
Retrieve the specified sector. The primary source of information for this process is directly from Beneath Apple DOS, chapter 3.

Overrides:
readSector in class DosOrder
Throws:
java.lang.IllegalArgumentException

locateField

protected int locateField(int byte1,
                          int byte2,
                          int byte3,
                          byte[] trackData,
                          byte[] fieldData,
                          int startingOffset)
Locate a field on the track. These are identified by a 3 byte unique signature. Because of the way in which disk bytes are captured, we need to wrap around the track to ensure all sequences of bytes are accounted for.

This methid fills fieldData as well as returning the last position referenced in the track buffer.


decodeOddEven

protected int decodeOddEven(byte[] buffer,
                            int offset)
Decode odd-even bytes as stored on disk. The format will be in two bytes. They are stored as such:
     XX = 1d1d1d1d (odd data bits)
     YY = 1d1d1d1d (even data bits)
 
XX is then shifted by a bit and ANDed with YY to get the databyte. See page 3-12 in Beneath Apple DOS for more information.


encodeOddEven

protected void encodeOddEven(byte[] buffer,
                             int offset,
                             int value)
Encode odd-even bytes to be stored on disk. See decodeOddEven for the format.

See Also:
decodeOddEven(byte[], int)

writeSector

public void writeSector(int track,
                        int dosSector,
                        byte[] sectorData)
                 throws java.lang.IllegalArgumentException
Write the specified sector.

Overrides:
writeSector in class DosOrder
Throws:
java.lang.IllegalArgumentException

getTracksPerDisk

public int getTracksPerDisk()
Answer with the number of tracks on this device.

Overrides:
getTracksPerDisk in class ImageOrder

getSectorsPerTrack

public int getSectorsPerTrack()
Answer with the number of sectors per track on this device.

Overrides:
getSectorsPerTrack in class ImageOrder

getBlocksOnDevice

public int getBlocksOnDevice()
Answer with the number of blocks on this device. This cannot be computed since the physical size relates to disk bytes (6+2 encoded) instead of a full 8-bit byte.

Overrides:
getBlocksOnDevice in class ImageOrder

format

public void format()
Format the media. Formatting at the ImageOrder level deals with low-level issues. A typical ordering just needs to have the image "wiped," and that is the assumed implementation. However, specialized orders - such as a nibbilized disk - need to lay down track and sector markers.

Overrides:
format in class ImageOrder