extern int ac_z3_done;
extern int ac_z3_type[AC_PIC_LIMIT];
extern int ac_z3_index[AC_PIC_LIMIT];
-extern int gayle_emulation_enabled;
+extern uint8_t gayle_emulation_enabled;
char *z2_autoconf_id = "z2_autoconf_fast";
char *z2_autoconf_zap_id = "^2_autoconf_fast";
#define max(a, b) (a > b) ? a : b
uint8_t rtg_enabled = 0, piscsi_enabled = 0, pinet_enabled = 0, kick13_mode = 0, pistorm_dev_enabled = 1;
-uint8_t a314_emulation_enabled = 0;
+uint8_t a314_emulation_enabled = 0, a314_initialized = 0;
extern uint32_t piscsi_base, pistorm_dev_base;
}
if (a314_emulation_enabled && addr >= a314_base && addr < a314_base + (64 * SIZE_KILO)) {
+ //printf("%s read from A314 @$%.8X\n", op_type_names[type], addr);
switch (type) {
case OP_TYPE_BYTE:
- *val = a314_read_memory_8(addr);
+ *val = a314_read_memory_8(addr - a314_base);
return 1;
break;
case OP_TYPE_WORD:
- *val = a314_read_memory_16(addr);
+ *val = a314_read_memory_16(addr - a314_base);
return 1;
break;
case OP_TYPE_LONGWORD:
- *val = a314_read_memory_32(addr);
+ *val = a314_read_memory_32(addr - a314_base);
return 1;
break;
default:
}
if (a314_emulation_enabled && addr >= a314_base && addr < a314_base + (64 * SIZE_KILO)) {
+ //printf("%s write to A314 @$%.8X: %d\n", op_type_names[type], addr, val);
switch (type) {
case OP_TYPE_BYTE:
- a314_write_memory_8(addr, val);
+ a314_write_memory_8(addr - a314_base, val);
return 1;
break;
case OP_TYPE_WORD:
kick13_mode = 1;
}
if CHKVAR("a314") {
- int32_t res = a314_init();
- if (res != 0) {
- printf("[AMIGA] Failed to enable A314 emulation, error return code: %d.\n", res);
+ if (!a314_initialized) {
+ int32_t res = a314_init();
+ if (res != 0) {
+ printf("[AMIGA] Failed to enable A314 emulation, error return code: %d.\n", res);
+ } else {
+ printf("[AMIGA] A314 emulation enabled.\n");
+ add_z2_pic(ACTYPE_A314, 0);
+ a314_emulation_enabled = 1;
+ a314_initialized = 1;
+ }
} else {
- printf("[AMIGA] A314 emulation enabled.\n");
add_z2_pic(ACTYPE_A314, 0);
a314_emulation_enabled = 1;
}
}
- if CHKVAR("a314conf") {
+ if CHKVAR("a314_conf") {
if (val && strlen(val) != 0) {
a314_set_config_file(val);
}
}
void shutdown_platform_amiga(struct emulator_config *cfg) {
+ printf("[AMIGA] Performing Amiga platform shutdown.\n");
if (cfg) {}
if (cdtv_mode) {
FILE *out = fopen("data/cdtv.sram", "wb+");
}
if (cfg->platform->subsys) {
free(cfg->platform->subsys);
+ cfg->platform->subsys = NULL;
}
if (piscsi_enabled) {
piscsi_shutdown();