// Meatloaf - A Commodore 64/128 multi-device emulator // https://github.com/idolpx/meatloaf // Copyright(C) 2020 James Johnston // // Meatloaf is free software : you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Meatloaf is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Meatloaf. If not, see . #ifndef CBMDEFINES_H #define CBMDEFINES_H #include // The base pointer of basic. #define CBM_BASIC_START 0x0401 // 1541 RAM and ROM memory map definitions. #define CBM_1541_RAM_OFFSET 0 #define CBM_1541_RAM_SIZE (1024 * 2) #define CBM_1541_VIA1_OFFSET 0x1800 #define CBM_1541_VIA1_SIZE 0x10 #define CBM_1541_VIA2_OFFSET 0x1C00 #define CBM_1541_VIA2_SIZE 0x10 #define CBM_1541_ROM_OFFSET 0xC000 #define CBM_1541_ROM_SIZE (1024 * 16) // Back arrow character code. #define CBM_DOLLAR_SIGN '$' #define CBM_EXCLAMATION_MARKS "!!" #define CBM_ARROW_LEFT "\x5F" #define CBM_ARROW_UP "\x5E" #define CBM_CRSR_LEFT "\x9d" #define CBM_DEL_DEL "\x14\x14" #define CBM_HOME "\x13" #define CBM_CLEAR "\x93" #define CBM_INSERT "\x94" #define CBM_DELETE "\x14" #define CBM_RETURN "\x0D" #define CBM_CURSOR_DOWN "\x11" #define CBM_CURSOR_RIGHT "\x1D" #define CBM_CURSOR_UP "\x91" #define CBM_CURSOR_LEFT "\x9D" #define CBM_RUN "\x83" #define CBM_STOP "\x03" #define CBM_WHITE "\x05" #define CBM_RED "\x1C" #define CBM_GREEN "\x1E" #define CBM_BLUE "\x1F" #define CBM_ORANGE "\x81" #define CBM_BLACK "\x90" #define CBM_BROWN "\x95" #define CBM_PINK "\x96" #define CBM_DARK_GREY "\x97" #define CBM_GREY "\x98" #define CBM_LIGHT_GREEN "\x99" #define CBM_LIGHT_BLUE "\x9A" #define CBM_LIGHT_GREY "\x9B" #define CBM_PURPLE "\x9C" #define CBM_YELLOW "\x9E" #define CBM_CYAN "\x9F" #define CBM_REVERSE_ON "\x12" #define CBM_REVERSE_OFF "\x92" #define CBM_CS_UPPPER "\x0E" #define CBM_CS_GFX "\x8E" #define CBM_SCREEN_ROWS 25 #define CBM_SCREEN_COLS 40 // Device OPEN channels. // Special channels. enum IECChannels { CHANNEL_LOAD = 0, CHANNEL_SAVE = 1, CHANNEL_COMMAND = 15 }; typedef enum { ErrOK = 0, ErrFilesScratched, // Files scratched response, not an error condition. ErrBlockHeaderNotFound = 20, ErrSyncCharNotFound, ErrDataBlockNotFound, ErrChecksumInData, ErrByteDecoding, ErrWriteVerify, ErrWriteProtectOn, ErrChecksumInHeader, ErrDataExtendsNextBlock, ErrDiskIdMismatch, ErrSyntaxError, ErrInvalidCommand, ErrLongLine, ErrInvalidFilename, ErrNoFileGiven, // The file name was left out of a command or the DOS does not recognize it as such. // Typically, a colon or equal character has been left out of the command ErrCommandNotFound = 39, // This error may result if the command sent to command channel (secondary address 15) is unrecognizedby the DOS. ErrRecordNotPresent = 50, ErrOverflowInRecord, ErrFileTooLarge, ErrFileOpenForWrite = 60, ErrFileNotOpen, ErrFileNotFound, ErrFileExists, ErrFileTypeMismatch, ErrNoBlock, ErrIllegalTrackOrSector, ErrIllegalSystemTrackOrSector, ErrNoChannelAvailable = 70, ErrDirectoryError, ErrDiskFullOrDirectoryFull, ErrIntro, // power up message or write attempt with DOS mismatch ErrDriveNotReady, // typically in this emulation could also mean: not supported on this file system. ErrSerialComm = 97, // something went sideways with serial communication to the file server. ErrNotImplemented = 98, // The command or specific operation is not yet implemented in this device. ErrUnknownError = 99, ErrCount } IOErrorMessage; // BIT Flags #define CLEAR 0x0000 // clear all flags #define CLEAR_LOW 0xFF00 // clear low byte #define ERROR (1 << 0) // if this flag is set, something went wrong #define ATN_PULLED (1 << 1) // might be set by iec_receive #define EOI_RECVD (1 << 2) #define EMPTY_STREAM (1 << 3) #define COMMAND_RECVD (1 << 4) // Detected Protocols #define FAST_SERIAL_ACTIVE (1 << 8) #define PARALLEL_ACTIVE (1 << 9) #define SAUCEDOS_ACTIVE (1 << 10) #define JIFFYDOS_ACTIVE (1 << 11) #define WIC64_ACTIVE (1 << 13) // IEC protocol timing consts in microseconds (us) // IEC-Disected p10-11 // Description // 1541 C64 min typical max // Notes #define TIMEOUT_Tat 1000 // ATN RESPONSE (REQUIRED) - - 1000us (If maximum time exceeded, device not present error.) #define TIMING_Th 60 // LISTENER HOLD-OFF 65us 39us 0 - infinte #define TIMING_Tne 40 // NON-EOI RESPONSE TO RFD - 40us 200us (If maximum time exceeded, EOI response required.) #define TIMEOUT_Tne 250 #define TIMING_Ts 70 // BIT SET-UP TALKER 71us 20us 70us - #define TIMING_Ts1 57 // BIT SET-UP LISTENER PRE 57us 47us #define TIMING_Ts2 28 // BIT SET-UP LISTENER POST 28us 24us #define TIMING_Tv 20 // DATA VALID VIC20 76us 26us 20us 20us - (Tv and Tpr minimum must be 60μ s for external device to be a talker. ) #define TIMING_Tv64 76 // DATA VALID C64 #define TIMING_Tf 45 // FRAME HANDSHAKE 0 20us 1000us (If maximum time exceeded, frame error.) #define TIMEOUT_Tf 1000 #define TIMING_Tr 20 // FRAME TO RELEASE OF ATN 20us - - #define TIMING_Tbb 100 // BETWEEN BYTES TIME 100us - - #define TIMING_Tye 250 // EOI RESPONSE TIME 200us 250us - #define TIMING_Tei 60 // EOI RESPONSE HOLD TIME 60us - - (Tei minimum must be 80μ s for external device to be a listener.) #define TIMING_Try 30 // TALKER RESPONSE LIMIT 0 30us 60us #define TIMEOUT_Try 60 #define TIMING_Tpr 60 // BYTE-ACKNOWLEDGE 20us 30us - (Tv and Tpr minimum must be 60μ s for external device to be a talker.) #define TIMING_Ttk 20 // TALK-ATTENTION RELEASE 20us 20us 30us 100us #define TIMEOUT_Ttk 100 #define TIMING_Tdc 20 // TALK-ATTENTION ACKNOWLEDGE 20us 0 - - #define TIMING_Tda 80 // TALK-ATTENTION ACK. HOLD 80us - - #define TIMING_Tfr 60 // EOI ACKNOWLEDGE 60us - - #define TIMING_EMPTY 512 // SIGNAL EMPTY STREAM #define TIMING_SYNC 100 // SYNC WITH ATN #define TIMING_STABLE 20 // WAIT FOR BUS TO BE STABLE #define TIMING_DELAY 70 // DELAY AFTER ATN #define TIMING_VIC20_DETECT 40 // VIC20 DETECTED WHEN HOST BIT TIME IS LESS THAN 40us #define TIMING_PROTOCOL_DETECT 218 // SAUCEDOS/JIFFYDOS CAPABLE DELAY #define TIMING_PROTOCOL_ACK 101 // SAUCEDOS/JIFFYDOS ACK RESPONSE // See timeoutWait #define TIMEOUT_DEFAULT 1000 // 1ms #define TIMED_OUT -1 #define FOREVER 5000000 // 0 #ifndef IEC_INVERTED_LINES // Not Inverted #define PULLED true #define RELEASED false #define LOW 0x00 #define HIGH 0x01 #else // Inverted #define PULLED false #define RELEASED true #define LOW 0x01 #define HIGH 0x00 #endif #endif // CBMDEFINES_H