int scpu64_snapshot_write(const char *name, int save_roms, int save_disks, int event_mode) { snapshot_t *s; s = snapshot_create(name, ((BYTE)(SNAP_MAJOR)), ((BYTE)(SNAP_MINOR)), machine_get_name()); if (s == NULL) { return -1; } sound_snapshot_prepare(); /* Execute drive CPUs to get in sync with the main CPU. */ drive_cpu_execute_all(maincpu_clk); if (maincpu_snapshot_write_module(s) < 0 || scpu64_snapshot_write_module(s, save_roms) < 0 || ciacore_snapshot_write_module(machine_context.cia1, s) < 0 || ciacore_snapshot_write_module(machine_context.cia2, s) < 0 || sid_snapshot_write_module(s) < 0 || drive_snapshot_write_module(s, save_disks, save_roms) < 0 || vicii_snapshot_write_module(s) < 0 || scpu64_glue_snapshot_write_module(s) < 0 || event_snapshot_write_module(s, event_mode) < 0 || keyboard_snapshot_write_module(s) || joystick_snapshot_write_module(s)) { snapshot_close(s); ioutil_remove(name); return -1; } snapshot_close(s); return 0; }
static void read_sdr(cia_context_t *cia_context) { if (burst_mod == BURST_MOD_CIA1) { drive_cpu_execute_all(maincpu_clk); } cia_context->c_cia[CIA_SDR] = read_userport_sp1(cia_context->c_cia[CIA_SDR]); }
static BYTE read_pa(tpi_context_t *tpi_context) { BYTE byte; drive_cpu_execute_all(maincpu_clk); byte = 0xff; if (ieee_is_out) { if (parallel_nrfd) { byte &= 0x7f; } if (parallel_ndac) { byte &= 0xbf; } } else { if (parallel_dav) { byte &= 0xef; } if (parallel_eoi) { byte &= 0xdf; } } if (ieee_is_dev) { if (parallel_atn) { byte &= 0xf7; } } byte = (byte & ~(tpi_context->c_tpi)[TPI_DDPA]) | (tpi_context->c_tpi[TPI_PA] & tpi_context->c_tpi[TPI_DDPA]); return byte; }
BYTE parallel_cable_cpu_read(int type) { if (!(drive_context[0]->drive->enable) && !(drive_context[1]->drive->enable)) { return 0; } drive_cpu_execute_all(maincpu_clk); return parallel_cable_cpu_value & parallel_cable_drive_value[0] & parallel_cable_drive_value[1]; }
void parallel_cable_cpu_write(int type, BYTE data) { if (!(drive_context[0]->drive->enable) && !(drive_context[1]->drive->enable)) { return; } drive_cpu_execute_all(last_write_cycle); parallel_cable_cpu_value = data; }
static BYTE read_pb(tpi_context_t *tpi_context) { BYTE byte; drive_cpu_execute_all(maincpu_clk); byte = ieee_is_out ? 0xff : parallel_bus; byte = (byte & ~(tpi_context->c_tpi)[TPI_DDPB]) | (tpi_context->c_tpi[TPI_PB] & tpi_context->c_tpi[TPI_DDPB]); return byte; }
static BYTE read_pa(tpi_context_t *tpi_context) { BYTE byte; drive_cpu_execute_all(maincpu_clk); byte = 0x07; byte += parallel_atn ? 0 : 8; byte += parallel_dav ? 0 : 16; byte += parallel_eoi ? 0 : 32; byte += parallel_ndac ? 0 : 64; byte += parallel_nrfd ? 0 : 128; byte = (byte & ~(tpi_context->c_tpi)[TPI_DDPA]) | (tpi_context->c_tpi[TPI_PA] & tpi_context->c_tpi[TPI_DDPA]); return byte; }
/* read_* functions must return 0xff if nothing to read!!! */ static BYTE read_ciapa(cia_context_t *cia_context) { BYTE byte; drive_cpu_execute_all(maincpu_clk); /* this reads the 8 bit IEEE488 data bus, but joystick 1 and 2 buttons can pull down inputs pa6 and pa7 resp. */ byte = parallel_bus; if (parallel_debug) { log_message(LOG_DEFAULT, "read: parallel_bus=%02x, pra=%02x, ddra=%02x -> %02x\n", parallel_bus, cia_context->c_cia[CIA_PRA], cia_context->c_cia[CIA_DDRA], byte); } byte = ((byte & ~(cia_context->c_cia[CIA_DDRA])) | (cia_context->c_cia[CIA_PRA] & cia_context->c_cia[CIA_DDRA])); return byte; }
/* Make sure the drive clock counters never overflow; return nonzero if they have been decremented to prevent overflow. */ CLOCK drivecpu_prevent_clk_overflow(drive_context_t *drv, CLOCK sub) { if (sub != 0) { /* First, get in sync with what the main CPU has done. Notice that `clk' has already been decremented at this point. */ if (drv->drive->enable) { if (drv->cpu->last_clk < sub) { /* Hm, this is kludgy. :-( */ drive_cpu_execute_all(maincpu_clk + sub); } drv->cpu->last_clk -= sub; } else { drv->cpu->last_clk = maincpu_clk; } } /* Then, check our own clock counters. */ return clk_guard_prevent_overflow(drv->cpu->clk_guard); }
int c64dtv_snapshot_write(const char *name, int save_roms, int save_disks, int event_mode) { snapshot_t *s; s = snapshot_create(name, ((BYTE)(SNAP_MAJOR)), ((BYTE)(SNAP_MINOR)), machine_name); if (s == NULL) { return -1; } sound_snapshot_prepare(); /* Execute drive CPUs to get in sync with the main CPU. */ drive_cpu_execute_all(maincpu_clk); if (maincpu_snapshot_write_module(s) < 0 || c64dtv_snapshot_write_module(s, save_roms) < 0 || c64dtvdma_snapshot_write_module(s) < 0 || c64dtvblitter_snapshot_write_module(s) < 0 || c64dtvmisc_snapshot_write_module(s) < 0 || ciacore_snapshot_write_module(machine_context.cia1, s) < 0 || ciacore_snapshot_write_module(machine_context.cia2, s) < 0 || sid_snapshot_write_module(s) < 0 || drive_snapshot_write_module(s, save_disks, save_roms) < 0 || vicii_snapshot_write_module(s) < 0 || event_snapshot_write_module(s, event_mode) < 0 || keyboard_snapshot_write_module(s) < 0 || joyport_snapshot_write_module(s, JOYPORT_1) < 0 || joyport_snapshot_write_module(s, JOYPORT_2) < 0 || userport_snapshot_write_module(s) < 0) { snapshot_close(s); ioutil_remove(name); return -1; } snapshot_close(s); return 0; }
static void read_sdr(cia_context_t *cia_context) { if (burst_mod == BURST_MOD_CIA1) { drive_cpu_execute_all(maincpu_clk); } }