home *** CD-ROM | disk | FTP | other *** search
- /*
- * IEC.h - IEC-Bus-Routinen, 1541-Emulation
- *
- * Copyright (C) 1994-1995 by Christian Bauer
- */
-
- #ifndef IEC_H
- #define IEC_H
-
- #include <exec/types.h>
-
-
- // C64-Status-Codes
- #define ST_OK 0 // Alles klar
- #define ST_READ_TIMEOUT 0x02 // Timeout beim Lesen
- #define ST_TIMEOUT 0x03 // Timeout
- #define ST_EOF 0x40 // End of file
-
- // 1541-Fehlercodes
- enum {
- ERR_OK, // 00 OK
- ERR_WRITEERROR, // 25 WRITE ERROR
- ERR_WRITEPROTECT, // 26 WRITE PROTECT ON
- ERR_SYNTAX30, // 30 SYNTAX ERROR (Unbekannter Befehl)
- ERR_SYNTAX33, // 33 SYNTAX ERROR (Wildcards beim Schreiben)
- ERR_WRITEFILEOPEN, // 60 WRITE FILE OPEN
- ERR_FILENOTOPEN, // 61 FILE NOT OPEN
- ERR_FILENOTFOUND, // 62 FILE NOT FOUND
- ERR_ILLEGALTS, // 67 ILLEGAL TRACK OR SECTOR
- ERR_NOCHANNEL, // 70 NO CHANNEL
- ERR_STARTUP, // 73 Einschaltmeldung
- };
-
- // Maximale Länge eines Dateinamens
- #define NAMEBUF_LENGTH 256
-
- // Struktur der BAM
- typedef struct {
- UBYTE dir_track; // Spur...
- UBYTE dir_sector; // ...und Sektor des ersten Directory-Blocks
- BYTE fmt_type; // Format-Typ
- BYTE pad0;
- UBYTE bitmap[4*35]; // Belegung der Sektoren
- UBYTE disk_name[18]; // Name des Diskette
- UBYTE id[2]; // ID der Diskette
- BYTE pad1;
- UBYTE fmt_char[2]; // Formatzeichen
- BYTE pad2[4];
- BYTE pad3[85];
- } BAM;
-
- // Struktur eines Verzeichniseintrags
- typedef struct {
- UBYTE type; // Dateityp
- UBYTE track; // Spur...
- UBYTE sector; // ...und Sektor des ersten Datenblocks
- UBYTE name[16]; // Dateiname
- UBYTE side_track; // Spur...
- UBYTE side_sector; // ...und Sektor des ersten Side-Sektors
- UBYTE rec_len; // Recordlänge
- BYTE pad0[4];
- UBYTE ovr_track; // Spur...
- UBYTE ovr_sector; // ...und Sektor beim Überschreiben
- UBYTE num_blocks_l; // Anzahl Blocks, LSB
- UBYTE num_blocks_h; // Anzahl Blocks, MSB
- BYTE pad1[2];
- } DirEntry;
-
- // Struktur eines Verzeichnisblocks
- typedef struct {
- UBYTE next_track;
- UBYTE next_sector;
- DirEntry entry[8];
- } Directory;
-
- // Datenstruktur für ein Laufwerk
- typedef struct {
- char type; // Laufwerks-Typ
- char read_char; // Byte-Puffer zum Lesen aus Dateien
- char name_length; // Bisher empfangene Länge des Dateinamens
- char error_length; // Restliche Länge der Fehlermeldung
- char *name_ptr; // Zeiger in Dateinamen, für Open/IECOut
- char *error_ptr; // Zeiger in Fehlermeldung
- BPTR lock; // Lock des Verzeichnisses des Laufwerks
- // bzw. Handle der .d64-Datei
-
- void (*init_proc)(); // Initialisieren
- void (*exit_proc)(); // Beenden
- int (*open_proc)(); // Kanal öffnen
- int (*close_proc)(); // Kanal schließen
- int (*read_proc)(); // Byte lesen
- int (*write_proc)(); // Byte schreiben
-
- char cmd_buffer[44]; // Eingabepuffer für Kommandos
- int cmd_length; // Länge des bisher empfangenen Kommandos
-
- BPTR handle[16]; // FS: FileHandles für alle 16 Kanäle
-
- char chan_mode[16]; // D64: Kanalmodus
- char chan_buf_num[16]; // D64: Nummer des Puffers des Kanals (für Direktzugriffskanäle)
- char *chan_buf[16]; // D64: Zeiger auf Puffer des Kanals
- char *buf_ptr[16]; // D64: Aktuelle Position im Puffer
- int buf_len[16]; // D64: Restliche Anzahl Bytes im Puffer
-
- char *ram; // D64: 2KB RAM für das Laufwerk
- char buf_free[4]; // D64: Puffer 0..3 frei?
-
- int image_header; // D64: Länge des Headers der Image-Datei (.d64: 0, .x64: 64)
-
- BAM *BAM; // D64: Zeiger auf Puffer für BAM (Puffer 4, $700)
- Directory dir; // D64: Temporärer Puffer für Directory-Blocks
- } DriveData;
-
- // Prefs: '/' in Dateinamen konvertieren?
- extern WORD MapSlash;
-
-
- // Exportierte Funktionen
- extern void SetError(DriveData *drive, int error);
-
- #endif
-