75
75
int ramcart_enabled;
77
77
/* Flag: Is the RAMCART readonly ? */
78
int ramcart_readonly=0;
78
int ramcart_readonly = 0;
80
80
/* Size of the RAMCART. */
81
static DWORD ramcart_size = 0;
81
static int ramcart_size = 0;
83
83
/* Size of the RAMCART in KB. */
84
static DWORD ramcart_size_kb = 0;
84
static int ramcart_size_kb = 0;
86
86
/* Filename of the RAMCART image. */
87
87
static char *ramcart_filename = NULL;
89
90
void ramcart_init_config(void)
94
mem_pla_config_changed();
92
if (ramcart_enabled) {
94
mem_pla_config_changed();
98
static int set_ramcart_enabled(resource_value_t v, void *param)
98
static int set_ramcart_enabled(int val, void *param)
101
101
if (ramcart_enabled) {
102
102
if (ramcart_deactivate() < 0) {
132
static int set_ramcart_readonly(resource_value_t v, void *param)
132
static int set_ramcart_readonly(int val, void *param)
134
ramcart_readonly=(int)v;
134
ramcart_readonly = val;
138
static int set_ramcart_size(resource_value_t v, void *param)
138
static int set_ramcart_size(int val, void *param)
140
if ((DWORD)v == ramcart_size_kb)
140
if (val == ramcart_size_kb)
148
log_message(ramcart_log, "Unknown RAMCART size %ld.", (long)v);
148
log_message(ramcart_log, "Unknown RAMCART size %d.", val);
152
152
if (ramcart_enabled) {
153
153
ramcart_deactivate();
154
ramcart_size_kb = (DWORD)v;
154
ramcart_size_kb = val;
155
155
ramcart_size = ramcart_size_kb << 10;
156
156
ramcart_activate();
158
ramcart_size_kb = (DWORD)v;
158
ramcart_size_kb = val;
159
159
ramcart_size = ramcart_size_kb << 10;
165
static int set_ramcart_filename(resource_value_t v, void *param)
165
static int set_ramcart_filename(const char *name, void *param)
167
const char *name = (const char *)v;
169
167
if (ramcart_filename != NULL && name != NULL
170
168
&& strcmp(name, ramcart_filename) == 0)
171
if (name != NULL && *name != '\0') {
172
if (util_check_filename_access(name) < 0)
173
176
if (ramcart_enabled) {
174
177
ramcart_deactivate();
175
178
util_string_set(&ramcart_filename, name);
184
static const resource_t resources[] = {
185
{ "RAMCART", RES_INTEGER, (resource_value_t)0,
186
RES_EVENT_STRICT, (resource_value_t)0,
187
(void *)&ramcart_enabled, set_ramcart_enabled, NULL },
188
{ "RAMCART_RO", RES_INTEGER, (resource_value_t)0,
190
(void *)&ramcart_readonly, set_ramcart_readonly, NULL },
191
{ "RAMCARTsize", RES_INTEGER, (resource_value_t)128,
193
(void *)&ramcart_size_kb, set_ramcart_size, NULL },
194
{ "RAMCARTfilename", RES_STRING, (resource_value_t)"",
196
(void *)&ramcart_filename, set_ramcart_filename, NULL },
187
static const resource_string_t resources_string[] = {
188
{ "RAMCARTfilename", "", RES_EVENT_NO, NULL,
189
&ramcart_filename, set_ramcart_filename, NULL },
193
static const resource_int_t resources_int[] = {
194
{ "RAMCART", 0, RES_EVENT_STRICT, (resource_value_t)0,
195
&ramcart_enabled, set_ramcart_enabled, NULL },
196
{ "RAMCART_RO", 0, RES_EVENT_NO, NULL,
197
&ramcart_readonly, set_ramcart_readonly, NULL },
198
{ "RAMCARTsize", 128, RES_EVENT_NO, NULL,
199
&ramcart_size_kb, set_ramcart_size, NULL },
200
203
int ramcart_resources_init(void)
202
return resources_register(resources);
205
if (resources_register_string(resources_string) < 0)
208
return resources_register_int(resources_int);
205
211
void ramcart_resources_shutdown(void)
269
275
old_ramcart_ram_size = ramcart_size;
271
log_message(ramcart_log, "%dKB unit installed.", (int)(ramcart_size >> 10));
277
log_message(ramcart_log, "%dKB unit installed.", ramcart_size >> 10);
273
279
if (!util_check_null_string(ramcart_filename)) {
274
280
if (util_file_load(ramcart_filename, ramcart_ram, (size_t)ramcart_size,
325
io_source=IO_SOURCE_RAMCART;
326
retval=ramcart[addr];
331
io_source = IO_SOURCE_RAMCART;
332
retval = ramcart[addr];
331
337
void REGPARM2 ramcart_reg_store(WORD addr, BYTE byte)
333
if (addr==1 && ramcart_size_kb==128)
339
if (addr == 1 && ramcart_size_kb == 128)
339
346
BYTE REGPARM1 ramcart_roml_read(WORD addr)
341
if (ramcart_readonly==1 && ramcart_size_kb==128 && addr>=0x8000 && addr<=0x80ff)
342
return ramcart_ram[((ramcart[1]&1)*65536)+(ramcart[0]*256)+(addr&0xff)];
348
if (ramcart_readonly == 1 && ramcart_size_kb == 128
349
&& addr >= 0x8000 && addr <= 0x80ff)
350
return ramcart_ram[((ramcart[1] & 1) * 65536) + (ramcart[0] * 256)
343
352
if (plus60k_enabled)
344
return plus60k_ram_read(addr);
353
return plus60k_ram_read(addr);
345
354
if (plus256k_enabled)
346
return plus256k_ram_high_read(addr);
355
return plus256k_ram_high_read(addr);
347
356
if (c64_256k_enabled)
348
return c64_256k_ram_segment2_read(addr);
357
return c64_256k_ram_segment2_read(addr);
349
359
return mem_ram[addr];