~ubuntu-branches/ubuntu/hardy/vice/hardy

« back to all changes in this revision

Viewing changes to src/c64/ramcart.c

  • Committer: Bazaar Package Importer
  • Author(s): Laszlo Boszormenyi (GCS)
  • Date: 2007-10-07 07:05:46 UTC
  • mfrom: (1.1.5 upstream)
  • Revision ID: james.westby@ubuntu.com-20071007070546-81yy0twlka7p2t0e
Tags: 1.22-1
* New upstream version (closes: #428280).
* Correct link to HTML documentation in manpage (closes: #409567).
* Fix most packaging mistakes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
62
62
 
63
63
/* RAMCART image.  */
64
64
static BYTE *ramcart_ram = NULL;
65
 
static unsigned int old_ramcart_ram_size = 0;
 
65
static int old_ramcart_ram_size = 0;
66
66
 
67
67
static log_t ramcart_log = LOG_ERR;
68
68
 
75
75
int ramcart_enabled;
76
76
 
77
77
/* Flag: Is the RAMCART readonly ?  */
78
 
int ramcart_readonly=0;
 
78
int ramcart_readonly = 0;
79
79
 
80
80
/* Size of the RAMCART.  */
81
 
static DWORD ramcart_size = 0;
 
81
static int ramcart_size = 0;
82
82
 
83
83
/* Size of the RAMCART in KB.  */
84
 
static DWORD ramcart_size_kb = 0;
 
84
static int ramcart_size_kb = 0;
85
85
 
86
86
/* Filename of the RAMCART image.  */
87
87
static char *ramcart_filename = NULL;
88
88
 
 
89
 
89
90
void ramcart_init_config(void)
90
91
{
91
 
  if (ramcart_enabled)
92
 
  {
93
 
    export.exrom=1;
94
 
    mem_pla_config_changed();
95
 
  }
 
92
    if (ramcart_enabled) {
 
93
        export.exrom = 1;
 
94
        mem_pla_config_changed();
 
95
    }
96
96
}
97
97
 
98
 
static int set_ramcart_enabled(resource_value_t v, void *param)
 
98
static int set_ramcart_enabled(int val, void *param)
99
99
{
100
 
    if (!(int)v) {
 
100
    if (!val) {
101
101
        if (ramcart_enabled) {
102
102
            if (ramcart_deactivate() < 0) {
103
103
                return -1;
105
105
        }
106
106
        c64export_remove(&export_res);
107
107
        ramcart_enabled = 0;
108
 
        export.exrom=0;
 
108
        export.exrom = 0;
109
109
        mem_pla_config_changed();
110
110
        return 0;
111
111
    } else { 
120
120
                return -1;
121
121
 
122
122
            ramcart_enabled = 1;
123
 
            export.exrom=1;
 
123
            export.exrom = 1;
124
124
            mem_pla_config_changed();
125
125
            return 0;
126
126
        } else {
129
129
    }
130
130
}
131
131
 
132
 
static int set_ramcart_readonly(resource_value_t v, void *param)
 
132
static int set_ramcart_readonly(int val, void *param)
133
133
{
134
 
  ramcart_readonly=(int)v;
 
134
  ramcart_readonly = val;
135
135
  return 0;
136
136
}
137
137
 
138
 
static int set_ramcart_size(resource_value_t v, void *param)
 
138
static int set_ramcart_size(int val, void *param)
139
139
{
140
 
    if ((DWORD)v == ramcart_size_kb)
 
140
    if (val == ramcart_size_kb)
141
141
        return 0;
142
142
 
143
 
    switch ((DWORD)v) {
 
143
    switch (val) {
144
144
      case 64:
145
145
      case 128:
146
146
        break;
147
147
      default:
148
 
        log_message(ramcart_log, "Unknown RAMCART size %ld.", (long)v);
 
148
        log_message(ramcart_log, "Unknown RAMCART size %d.", val);
149
149
        return -1;
150
150
    }
151
151
 
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();
157
157
    } else {
158
 
        ramcart_size_kb = (DWORD)v;
 
158
        ramcart_size_kb = val;
159
159
        ramcart_size = ramcart_size_kb << 10;
160
160
    }
161
161
 
162
162
    return 0;
163
163
}
164
164
 
165
 
static int set_ramcart_filename(resource_value_t v, void *param)
 
165
static int set_ramcart_filename(const char *name, void *param)
166
166
{
167
 
    const char *name = (const char *)v;
168
 
 
169
167
    if (ramcart_filename != NULL && name != NULL
170
168
        && strcmp(name, ramcart_filename) == 0)
171
169
        return 0;
172
170
 
 
171
    if (name != NULL && *name != '\0') {
 
172
        if (util_check_filename_access(name) < 0)
 
173
            return -1;
 
174
    }
 
175
 
173
176
    if (ramcart_enabled) {
174
177
        ramcart_deactivate();
175
178
        util_string_set(&ramcart_filename, name);
181
184
    return 0;
182
185
}
183
186
 
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,
189
 
      RES_EVENT_NO, NULL,
190
 
      (void *)&ramcart_readonly, set_ramcart_readonly, NULL },
191
 
    { "RAMCARTsize", RES_INTEGER, (resource_value_t)128,
192
 
      RES_EVENT_NO, NULL,
193
 
      (void *)&ramcart_size_kb, set_ramcart_size, NULL },
194
 
    { "RAMCARTfilename", RES_STRING, (resource_value_t)"",
195
 
      RES_EVENT_NO, NULL,
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 },
 
190
    { NULL }
 
191
};
 
192
 
 
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 },
197
200
    { NULL }
198
201
};
199
202
 
200
203
int ramcart_resources_init(void)
201
204
{
202
 
    return resources_register(resources);
 
205
    if (resources_register_string(resources_string) < 0)
 
206
        return -1;
 
207
 
 
208
    return resources_register_int(resources_int);
203
209
}
204
210
 
205
211
void ramcart_resources_shutdown(void)
268
274
 
269
275
    old_ramcart_ram_size = ramcart_size;
270
276
 
271
 
    log_message(ramcart_log, "%dKB unit installed.", (int)(ramcart_size >> 10));
 
277
    log_message(ramcart_log, "%dKB unit installed.", ramcart_size >> 10);
272
278
 
273
279
    if (!util_check_null_string(ramcart_filename)) {
274
280
        if (util_file_load(ramcart_filename, ramcart_ram, (size_t)ramcart_size,
322
328
{
323
329
    BYTE retval;
324
330
 
325
 
    io_source=IO_SOURCE_RAMCART;
326
 
    retval=ramcart[addr];
 
331
    io_source = IO_SOURCE_RAMCART;
 
332
    retval = ramcart[addr];
327
333
 
328
334
    return retval;
329
335
}
330
336
 
331
337
void REGPARM2 ramcart_reg_store(WORD addr, BYTE byte)
332
338
{
333
 
  if (addr==1 && ramcart_size_kb==128)
334
 
    ramcart[1]=byte;
335
 
  if (addr==0)
336
 
    ramcart[0]=byte;
 
339
    if (addr == 1 && ramcart_size_kb == 128)
 
340
        ramcart[1] = byte;
 
341
 
 
342
    if (addr == 0)
 
343
        ramcart[0] = byte;
337
344
}
338
345
 
339
346
BYTE REGPARM1 ramcart_roml_read(WORD addr)
340
347
{
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)
 
351
            + (addr & 0xff)];
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);
 
358
 
349
359
    return mem_ram[addr];
350
360
}
351
361