Atari Logo
Atari Computer

Hauptseite -
Welches System? -
Hardware -
Software -
Emulatoren -
Internet
MausNet
Programmieren
Verweise
Über

MetaDOS Treiber

Home BOS Treiber long (*discinfo)(CD_DISC_INFO *discinfo) Beispiel für einen BOS Treiber

3.4 Die verschiedenen Strukturen

typedef struct
{
   unsigned char trackno; /* Track Nummer in BCD Kodierung */
   unsigned char minute;  /* BCD kodiert! */
   unsigned char second;  /* BCD kodiert! */
   unsigned char frame;   /* BCD kodiert! */
} CD_TOC_ENTRY;

typedef struct
{
   unsigned char disctype; /* 0: audio, 1: data */
   unsigned char firsttrack;
   unsigned char lasttrack;
   unsigned char curtrack;
   unsigned char relposz;
   unsigned char relposm;
   unsigned char relposs;
   unsigned char relposf;
   unsigned char absposz;
   unsigned char absposm;
   unsigned char absposs;
   unsigned char absposf;
   unsigned char endposz;
   unsigned char endposm;
   unsigned char endposs;
   unsigned char endposf;
   unsigned char index;
   unsigned char res[3];
   unsigned long reserved[123];
} CD_DISC_INFO;

#define MD_VERSION_2_30 0x230
#define MD_MAGIC_STRING "_MET"
#define MD_MAGIC_LONG   0x5F4D4554

typedef struct
{
   unsigned short mi_version; /* 0x230 == '02.30' */
   long           mi_magic;   /* == '_MET' */
   /* maps DOS-IDs to MetaDOS XBIOS device numbers */
   const char     *mi_log2phys;
} META_INFO_2;

typedef struct
{
   unsigned long mi_drivemap;
   const char    *mi_version_string;
   long          reserved;
   META_INFO_2   *mi_info;
} META_INFO_1;

typedef struct
{
   char *mdr_name;
   long res[3];
} META_DRVINFO;

#define MD_BOS_STATUS_BUSY         0x00000002l
#define MD_BOS_STATUS_MEDIA_CHANGE 0x00000004l
#define MD_BOS_STATUS_TIMEOUT      0x00000080l
#define MD_BOS_STATUS_ERROR        0x00008000l

typedef struct {
   char status[32];
} META_BOS_STATUS;

typedef struct {
   unsigned char count;
   unsigned char first;
} CD_TRACKS;

typedef struct {
   long (*init)(META_INFO_1 *metainit);
   long (*open)(META_DRVINFO *metaopen);
   long (*close)(void);
   long (*read)(void *buffer, unsigned long first, unsigned short count);
   long (*write)(void *buffer, unsigned long first, unsigned short count);
   long (*seek)(unsigned long offset);
   long (*status)(META_BOS_STATUS *extended);
   long (*ioctl)(unsigned long magic, unsigned short opcode, void *buffer);
   long (*undefined08)(void);
   long (*undefined09)(void);
   long (*undefined0a)(void);
   long (*startaudio)(unsigned short dummy, unsigned char *tracks);
   long (*stopaudio)(void);
   long (*setsongtime)(unsigned short dummy, unsigned long start, unsigned long end);
   long (*gettoc)(unsigned short dummy, CD_TOC_ENTRY *tocentry);
   long (*discinfo)(CD_DISC_INFO *discinfo);
} META_BOS_FUNCTIONS;

typedef struct {
   void *next;                 /* Zeiger auf den naechsten BOS Treiber, auf NULL setzen, wird durch MetaDOS gefuellt */
   unsigned long attrib;       /* Einige Attributes fuer das Device */
   unsigned short phys_letter; /* Der Wert von D0, den MetaDOS in der Initialisierungsfunktion geliefert hat */
   unsigned short dma_channel; /* Der Wert von D1, den MetaDOS in der Initialisierungsfunktion geliefert hat */
   unsigned short sub_device;  /* Ein Treiber kann verschiedene Subdevices bedienen, dieses Feld gibt an, mit welchem Subdevice MetaDOS sprechen moechte */
   MdBosFunctions *functions;  /* Zeiger auf eine Liste von 16 Funktionen (die den 16 Xbios MetaDOS functions traps entsprechen */
   unsigned short status;      /* Ein Statusfeld, um weitere Fehler zu melden */
   unsigned long reserved[2];
   char name[32];              /* Name des Geraetes */
} META_BOS_HEADER;

Home BOS Treiber long (*discinfo)(CD_DISC_INFO *discinfo) Beispiel für einen BOS Treiber


Best viewed with any browser English version not yet available.

Änderungen und Irrtümer vorbehalten. Letzte Änderung:
14 September 2001.
Home - Mail an den Webmaster - Impressum