- ISOFileSystem:
  nicht das komplette Verzeichnis lesen, GetFirst(), GetNext()
  usw. implementieren. Dadurch mssen wir nicht schon an dieser
  Stelle die *.mp? dateien raussortieren.

- MASStream:

  constructor:
    MASStream( ulong length );
    MASStream( ulong length, uint bufSize );

  ulong playPos, writePos;

  if (writePos - playPos >= bufSize)
    erstmal nich mehr von cd lesen...
  else
    von cd lesen, und bis playPos aufholen.

  if (playPos >= writePos)
    wiedergabe pausieren (stalled)

  if (playPos >= length)
    ende erreicht, stream stoppen.

  den ringbuffer zuerst mit modulo-array implementieren,
  und spter eine eigene RingBuffer Klasse daraus machen.
  (oder besser allgemein: FIFOBuffer)

- immer noch probleme mit der c't-plus rom...
- Assemblerimplementierung fr IDE_PIODataOut() !

// TODO: Clean this mess up!
//
ERROR  ISO_ReadDirectory( ISO_VOLUME     *vol,
                          ISO_FILE_NODE  *parentDirNode )

Hardware:
  Stromversorgung:
   5V: ca. 1A
  12V: ca. 1A

Conrad Drehimpulsgeber
  705586-62  liegend   13,95
  705594-62  stehend   13,95




Classes
CONSTANTS
ENUMS
MACROS
Functions,
variables,
typedefs


class NetworkAbcKey       // NOT NetworkABCKey

Avoid the temptation of bringing the name of the class a class 
derives from into the derived class's name. A class should stand 
on its own. It doesn't matter what it derives from. 

Method Names 
Use the same rule as for class names. 



class  IdeInterface  {
  int ioport;

  // pointer connected devices
  IdeDevice *device[2];

  ReadDataReg();
  WriteDataReg();
  ReadReg();
  WriteReg();

  IDEInterface( int ioport )  {
    this.ioport = ioport;

    drive probing...
      device[0] = ..
      device[1] = ..
   
    hardware reset
  }

  ~IDEInterface()  {
  }
}


class IdeDevice {
  char name;
  int  devnum;
  IdeInterface *ide; 

  virtual bool probe() = 0;

  ide->pio_data_in();
  ide->pio_data_out();

  IDEDevice( IdeInterface *ide, int deviceNumber )  {
    this.devnum = deviceNumber;
  }

}


class AtaDevice : IdeDevice {
  bool probe() {
    check signature
  }
}


class AtapiDevice : AtaDevice {
  bool probe() {
    check signature
  }
}






class BlockDevice {
  int readBlock(). ..
}


class CdRom : BlockDevice
            : CddaDevice {

  readBlock... // BlockDev
  
  Play();   // cdda
  Stop();
  Pause();
}

class HardDisk : BlockDevice  {
}



class AtapiCdRom : CDRom {
}

class AtaHarddisk : Harddisk  {
}


