1 #ifndef CARTRIDGE_H_ 2 #define CARTRIDGE_H_ 3 4 #include "config.h" 5 #include "atari.h" 6 7 enum { 8 CARTRIDGE_UNKNOWN = -1, 9 CARTRIDGE_NONE = 0, 10 CARTRIDGE_STD_8 = 1, 11 CARTRIDGE_STD_16 = 2, 12 CARTRIDGE_OSS_034M_16 = 3, 13 CARTRIDGE_5200_32 = 4, 14 CARTRIDGE_DB_32 = 5, 15 CARTRIDGE_5200_EE_16 = 6, 16 CARTRIDGE_5200_40 = 7, 17 CARTRIDGE_WILL_64 = 8, 18 CARTRIDGE_EXP_64 = 9, 19 CARTRIDGE_DIAMOND_64 = 10, 20 CARTRIDGE_SDX_64 = 11, 21 CARTRIDGE_XEGS_32 = 12, 22 CARTRIDGE_XEGS_07_64 = 13, 23 CARTRIDGE_XEGS_128 = 14, 24 CARTRIDGE_OSS_M091_16 = 15, 25 CARTRIDGE_5200_NS_16 = 16, 26 CARTRIDGE_ATRAX_128 = 17, 27 CARTRIDGE_BBSB_40 = 18, 28 CARTRIDGE_5200_8 = 19, 29 CARTRIDGE_5200_4 = 20, 30 CARTRIDGE_RIGHT_8 = 21, 31 CARTRIDGE_WILL_32 = 22, 32 CARTRIDGE_XEGS_256 = 23, 33 CARTRIDGE_XEGS_512 = 24, 34 CARTRIDGE_XEGS_1024 = 25, 35 CARTRIDGE_MEGA_16 = 26, 36 CARTRIDGE_MEGA_32 = 27, 37 CARTRIDGE_MEGA_64 = 28, 38 CARTRIDGE_MEGA_128 = 29, 39 CARTRIDGE_MEGA_256 = 30, 40 CARTRIDGE_MEGA_512 = 31, 41 CARTRIDGE_MEGA_1024 = 32, 42 CARTRIDGE_SWXEGS_32 = 33, 43 CARTRIDGE_SWXEGS_64 = 34, 44 CARTRIDGE_SWXEGS_128 = 35, 45 CARTRIDGE_SWXEGS_256 = 36, 46 CARTRIDGE_SWXEGS_512 = 37, 47 CARTRIDGE_SWXEGS_1024 = 38, 48 CARTRIDGE_PHOENIX_8 = 39, 49 CARTRIDGE_BLIZZARD_16 = 40, 50 CARTRIDGE_ATMAX_128 = 41, 51 CARTRIDGE_ATMAX_1024 = 42, 52 CARTRIDGE_SDX_128 = 43, 53 CARTRIDGE_OSS_8 = 44, 54 CARTRIDGE_OSS_043M_16 = 45, 55 CARTRIDGE_BLIZZARD_4 = 46, 56 CARTRIDGE_AST_32 = 47, 57 CARTRIDGE_ATRAX_SDX_64 = 48, 58 CARTRIDGE_ATRAX_SDX_128 = 49, 59 CARTRIDGE_TURBOSOFT_64 = 50, 60 CARTRIDGE_TURBOSOFT_128 = 51, 61 CARTRIDGE_ULTRACART_32 = 52, 62 CARTRIDGE_LOW_BANK_8 = 53, 63 CARTRIDGE_SIC_128 = 54, 64 CARTRIDGE_SIC_256 = 55, 65 CARTRIDGE_SIC_512 = 56, 66 CARTRIDGE_STD_2 = 57, 67 CARTRIDGE_STD_4 = 58, 68 CARTRIDGE_RIGHT_4 = 59, 69 CARTRIDGE_BLIZZARD_32 = 60, 70 CARTRIDGE_MEGAMAX_2048 = 61, 71 CARTRIDGE_THECART_128M = 62, 72 CARTRIDGE_MEGA_4096 = 63, 73 CARTRIDGE_MEGA_2048 = 64, 74 CARTRIDGE_THECART_32M = 65, 75 CARTRIDGE_THECART_64M = 66, 76 CARTRIDGE_XEGS_8F_64 = 67, 77 CARTRIDGE_LAST_SUPPORTED = 67 78 }; 79 80 #define CARTRIDGE_MAX_SIZE (128 * 1024 * 1024) 81 extern int const CARTRIDGE_kb[CARTRIDGE_LAST_SUPPORTED + 1]; 82 83 #define CARTRIDGE_STD_8_DESC "Standard 8 KB cartridge" 84 #define CARTRIDGE_STD_16_DESC "Standard 16 KB cartridge" 85 #define CARTRIDGE_OSS_034M_16_DESC "OSS two chip 16 KB cartridge (034M)" 86 #define CARTRIDGE_5200_32_DESC "Standard 32 KB 5200 cartridge" 87 #define CARTRIDGE_DB_32_DESC "DB 32 KB cartridge" 88 #define CARTRIDGE_5200_EE_16_DESC "Two chip 16 KB 5200 cartridge" 89 #define CARTRIDGE_5200_40_DESC "Bounty Bob 40 KB 5200 cartridge" 90 #define CARTRIDGE_WILL_64_DESC "64 KB Williams cartridge" 91 #define CARTRIDGE_EXP_64_DESC "Express 64 KB cartridge" 92 #define CARTRIDGE_DIAMOND_64_DESC "Diamond 64 KB cartridge" 93 #define CARTRIDGE_SDX_64_DESC "SpartaDOS X 64 KB cartridge" 94 #define CARTRIDGE_XEGS_32_DESC "XEGS 32 KB cartridge" 95 #define CARTRIDGE_XEGS_07_64_DESC "XEGS 64 KB cartridge (banks 0-7)" 96 #define CARTRIDGE_XEGS_128_DESC "XEGS 128 KB cartridge" 97 #define CARTRIDGE_OSS_M091_16_DESC "OSS one chip 16 KB cartridge" 98 #define CARTRIDGE_5200_NS_16_DESC "One chip 16 KB 5200 cartridge" 99 #define CARTRIDGE_ATRAX_128_DESC "Atrax 128 KB cartridge" 100 #define CARTRIDGE_BBSB_40_DESC "Bounty Bob 40 KB cartridge" 101 #define CARTRIDGE_5200_8_DESC "Standard 8 KB 5200 cartridge" 102 #define CARTRIDGE_5200_4_DESC "Standard 4 KB 5200 cartridge" 103 #define CARTRIDGE_RIGHT_8_DESC "Right slot 8 KB cartridge" 104 #define CARTRIDGE_WILL_32_DESC "32 KB Williams cartridge" 105 #define CARTRIDGE_XEGS_256_DESC "XEGS 256 KB cartridge" 106 #define CARTRIDGE_XEGS_512_DESC "XEGS 512 KB cartridge" 107 #define CARTRIDGE_XEGS_1024_DESC "XEGS 1 MB cartridge" 108 #define CARTRIDGE_MEGA_16_DESC "MegaCart 16 KB cartridge" 109 #define CARTRIDGE_MEGA_32_DESC "MegaCart 32 KB cartridge" 110 #define CARTRIDGE_MEGA_64_DESC "MegaCart 64 KB cartridge" 111 #define CARTRIDGE_MEGA_128_DESC "MegaCart 128 KB cartridge" 112 #define CARTRIDGE_MEGA_256_DESC "MegaCart 256 KB cartridge" 113 #define CARTRIDGE_MEGA_512_DESC "MegaCart 512 KB cartridge" 114 #define CARTRIDGE_MEGA_1024_DESC "MegaCart 1 MB cartridge" 115 #define CARTRIDGE_SWXEGS_32_DESC "Switchable XEGS 32 KB cartridge" 116 #define CARTRIDGE_SWXEGS_64_DESC "Switchable XEGS 64 KB cartridge" 117 #define CARTRIDGE_SWXEGS_128_DESC "Switchable XEGS 128 KB cartridge" 118 #define CARTRIDGE_SWXEGS_256_DESC "Switchable XEGS 256 KB cartridge" 119 #define CARTRIDGE_SWXEGS_512_DESC "Switchable XEGS 512 KB cartridge" 120 #define CARTRIDGE_SWXEGS_1024_DESC "Switchable XEGS 1 MB cartridge" 121 #define CARTRIDGE_PHOENIX_8_DESC "Phoenix 8 KB cartridge" 122 #define CARTRIDGE_BLIZZARD_16_DESC "Blizzard 16 KB cartridge" 123 #define CARTRIDGE_ATMAX_128_DESC "Atarimax 128 KB Flash cartridge" 124 #define CARTRIDGE_ATMAX_1024_DESC "Atarimax 1 MB Flash cartridge" 125 #define CARTRIDGE_SDX_128_DESC "SpartaDOS X 128 KB cartridge" 126 #define CARTRIDGE_OSS_8_DESC "OSS 8 KB cartridge" 127 #define CARTRIDGE_OSS_043M_16_DESC "OSS two chip 16 KB cartridge (043M)" 128 #define CARTRIDGE_BLIZZARD_4_DESC "Blizzard 4 KB cartridge" 129 #define CARTRIDGE_AST_32_DESC "AST 32 KB cartridge" 130 #define CARTRIDGE_ATRAX_SDX_64_DESC "Atrax SDX 64 KB cartridge" 131 #define CARTRIDGE_ATRAX_SDX_128_DESC "Atrax SDX 128 KB cartridge" 132 #define CARTRIDGE_TURBOSOFT_64_DESC "Turbosoft 64 KB cartridge" 133 #define CARTRIDGE_TURBOSOFT_128_DESC "Turbosoft 128 KB cartridge" 134 #define CARTRIDGE_ULTRACART_32_DESC "Ultracart 32 KB cartridge" 135 #define CARTRIDGE_LOW_BANK_8_DESC "Low bank 8 KB cartridge" 136 #define CARTRIDGE_SIC_128_DESC "SIC! 128 KB cartridge" 137 #define CARTRIDGE_SIC_256_DESC "SIC! 256 KB cartridge" 138 #define CARTRIDGE_SIC_512_DESC "SIC! 512 KB cartridge" 139 #define CARTRIDGE_STD_2_DESC "Standard 2 KB cartridge" 140 #define CARTRIDGE_STD_4_DESC "Standard 4 KB cartridge" 141 #define CARTRIDGE_RIGHT_4_DESC "Right slot 4 KB cartridge" 142 #define CARTRIDGE_BLIZZARD_32_DESC "Blizzard 32 KB cartridge" 143 #define CARTRIDGE_MEGAMAX_2048_DESC "MegaMax 2 MB cartridge" 144 #define CARTRIDGE_THECART_128M_DESC "The!Cart 128 MB cartridge" 145 #define CARTRIDGE_MEGA_4096_DESC "Flash MegaCart 4 MB cartridge" 146 #define CARTRIDGE_MEGA_2048_DESC "MegaCart 2 MB cartridge" 147 #define CARTRIDGE_THECART_32M_DESC "The!Cart 32 MB cartridge" 148 #define CARTRIDGE_THECART_64M_DESC "The!Cart 64 MB cartridge" 149 #define CARTRIDGE_XEGS_8F_64_DESC "XEGS 64 KB cartridge (banks 8-15)" 150 151 /* Indicates whether the emulator should automatically reboot (coldstart) 152 after inserting/removing a cartridge. (Doesn't affect the piggyback 153 cartridge - in this case system will never autoreboot.) */ 154 extern int CARTRIDGE_autoreboot; 155 156 typedef struct CARTRIDGE_image_t { 157 int type; 158 int state; /* Cartridge's state, such as selected bank or switch on/off. */ 159 int size; /* Size of the image, in kilobytes */ 160 UBYTE *image; 161 char filename[FILENAME_MAX]; 162 } CARTRIDGE_image_t; 163 164 extern CARTRIDGE_image_t CARTRIDGE_main; 165 extern CARTRIDGE_image_t CARTRIDGE_piggyback; 166 167 int CARTRIDGE_Checksum(const UBYTE *image, int nbytes); 168 169 int CARTRIDGE_ReadConfig(char *string, char *ptr); 170 void CARTRIDGE_WriteConfig(FILE *fp); 171 int CARTRIDGE_Initialise(int *argc, char *argv[]); 172 void CARTRIDGE_Exit(void); 173 174 #define CARTRIDGE_CANT_OPEN -1 /* Can't open cartridge image file */ 175 #define CARTRIDGE_BAD_FORMAT -2 /* Unknown cartridge format */ 176 #define CARTRIDGE_BAD_CHECKSUM -3 /* Warning: bad CART checksum */ 177 /* Inserts the left cartrifge. */ 178 int CARTRIDGE_Insert(const char *filename); 179 /* Inserts the left cartridge and reboots the system if needed. */ 180 int CARTRIDGE_InsertAutoReboot(const char *filename); 181 /* Inserts the piggyback cartridge. */ 182 int CARTRIDGE_Insert_Second(const char *filename); 183 /* When the cartridge type is CARTRIDGE_UNKNOWN after a call to 184 CARTRIDGE_Insert(), this function should be called to set the 185 cartridge's type manually to a value chosen by user. */ 186 void CARTRIDGE_SetType(CARTRIDGE_image_t *cart, int type); 187 /* Sets type of the cartridge and reboots the system if needed. */ 188 void CARTRIDGE_SetTypeAutoReboot(CARTRIDGE_image_t *cart, int type); 189 190 /* Removes the left cartridge. */ 191 void CARTRIDGE_Remove(void); 192 /* Removes the left cartridge and reboots the system if needed. */ 193 void CARTRIDGE_RemoveAutoReboot(void); 194 /* Removed the piggyback cartridge. */ 195 void CARTRIDGE_Remove_Second(void); 196 197 /* Called on system coldstart. Resets the states of mounted cartridges. */ 198 void CARTRIDGE_ColdStart(void); 199 200 UBYTE CARTRIDGE_GetByte(UWORD addr, int no_side_effects); 201 void CARTRIDGE_PutByte(UWORD addr, UBYTE byte); 202 void CARTRIDGE_BountyBob1(UWORD addr); 203 void CARTRIDGE_BountyBob2(UWORD addr); 204 void CARTRIDGE_StateSave(void); 205 void CARTRIDGE_StateRead(UBYTE version); 206 #ifdef PAGED_ATTRIB 207 UBYTE CARTRIDGE_BountyBob1GetByte(UWORD addr, int no_side_effects); 208 UBYTE CARTRIDGE_BountyBob2GetByte(UWORD addr, int no_side_effects); 209 void CARTRIDGE_BountyBob1PutByte(UWORD addr, UBYTE value); 210 void CARTRIDGE_BountyBob2PutByte(UWORD addr, UBYTE value); 211 #endif 212 213 #endif /* CARTRIDGE_H_ */ 214