inline static void mem_proc_port_store(void) { /* Correct clock */ ted_handle_pending_alarms(maincpu_rmw_flag + 1); pport.data_out = (pport.data_out & ~pport.dir) | (pport.data & pport.dir); if (((~pport.dir | pport.data) & 0x02) != old_port_write_bit) { old_port_write_bit = (~pport.dir | pport.data) & 0x02; tapeport_toggle_write_bit((~pport.dir | ~pport.data) & 0x02); } (*iecbus_callback_write)((BYTE)~pport.data_out, last_write_cycle); if (((pport.dir & pport.data) & 0x08) != old_port_data_out) { old_port_data_out = (pport.dir & pport.data) & 0x08; tapeport_set_motor(!old_port_data_out); } }
inline static BYTE mem_proc_port_read(WORD addr) { BYTE tmp; BYTE input; /* Correct clock */ ted_handle_pending_alarms(0); if (addr == 0) return pport.dir; input = ((*iecbus_callback_read)(maincpu_clk) & 0xc0); if (tape_read) { input |= 0x10; } else { input &= ~0x10; } tmp = ((input & ~pport.dir) | (pport.data_out & pport.dir)) & 0xdf ; return tmp; }
void pio1_store(WORD addr, BYTE value) { BYTE pio1_outline; /* Correct clock */ ted_handle_pending_alarms(maincpu_rmw_flag + 1); pio1_data = value; pio1_outline = value; if (tape_sense) { pio1_outline &= ~4; } store_userport_pbx(pio1_outline); /* The functions below will gradually be removed as the functionality is added to the new userport system. */ if (drive_context[0]->drive->parallel_cable || drive_context[1]->drive->parallel_cable) { parallel_cable_cpu_write(DRIVE_PC_STANDARD, pio1_outline); } }
BYTE pio1_read(WORD addr) { BYTE pio1_value = 0xff; /* Correct clock */ ted_handle_pending_alarms(0); /* The functions below will gradually be removed as the functionality is added to the new userport system. */ if (drive_context[0]->drive->parallel_cable || drive_context[1]->drive->parallel_cable) { pio1_value = parallel_cable_cpu_read(DRIVE_PC_STANDARD, pio1_value); } else { pio1_value = pio1_data; } pio1_value = read_userport_pbx(0xff, pio1_value); if (tape_sense) { pio1_value &= ~4; } return pio1_value; }
void machine_handle_pending_alarms(int num_write_cycles) { ted_handle_pending_alarms(num_write_cycles); }