Esempio n. 1
0
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);
    }
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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);
    }
}
Esempio n. 4
0
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;
}
Esempio n. 5
0
void machine_handle_pending_alarms(int num_write_cycles)
{
     ted_handle_pending_alarms(num_write_cycles);
}