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