Esempio n. 1
0
static BYTE iecbus_cpu_read_conf3(CLOCK clock)
{
    drivecpu_execute_all(clock);
    serial_iec_device_exec(clock);

    return iecbus.cpu_port;
}
Esempio n. 2
0
static void iecbus_cpu_write_conf3(BYTE data, CLOCK clock)
{
    unsigned int dnr;

    drivecpu_execute_all(clock);
    serial_iec_device_exec(clock);

    DEBUG_IEC_CPU_WRITE(data);

    iec_update_cpu_bus(data);

    if (iec_old_atn != (iecbus.cpu_bus & 0x10)) {
        iec_old_atn = iecbus.cpu_bus & 0x10;

        for (dnr = 0; dnr < DRIVE_NUM; dnr++) {
            if (iecbus_device[8 + dnr] == IECBUS_DEVICE_TRUEDRIVE) {
                switch (drive_context[dnr]->drive->type) {
                    case DRIVE_TYPE_1581:
                        if (!iec_old_atn) {
                            ciacore_set_flag(drive_context[dnr]->cia1581);
                        }
                        break;
                    case DRIVE_TYPE_2000:
                    case DRIVE_TYPE_4000:
                        viacore_signal(drive_context[dnr]->via4000, VIA_SIG_CA2,
                                       iec_old_atn ? 0 : VIA_SIG_RISE);
                        break;
                    default:
                        viacore_signal(drive_context[dnr]->via1d1541, VIA_SIG_CA1,
                                       iec_old_atn ? 0 : VIA_SIG_RISE);
                }
            }
        }
    }

    for (dnr = 0; dnr < DRIVE_NUM; dnr++) {
        if (iecbus_device[8 + dnr] == IECBUS_DEVICE_TRUEDRIVE) {
            unsigned int unit;
            unit = dnr + 8;
            switch (drive_context[dnr]->drive->type) {
                case DRIVE_TYPE_1581:
                case DRIVE_TYPE_2000:
                case DRIVE_TYPE_4000:
                    iecbus.drv_bus[unit] = (((iecbus.drv_data[unit] << 3) & 0x40)
                                            | ((iecbus.drv_data[unit] << 6)
                                               & ((iecbus.drv_data[unit]
                                                   | iecbus.cpu_bus) << 3) & 0x80));
                    break;
                default:
                    iecbus.drv_bus[unit] = (((iecbus.drv_data[unit] << 3) & 0x40)
                                            | ((iecbus.drv_data[unit] << 6)
                                               & ((~iecbus.drv_data[unit]
                                                   ^ iecbus.cpu_bus) << 3) & 0x80));
            }
        }
    }

    iec_update_ports();
}
Esempio n. 3
0
static void iecbus_cpu_write_conf3(BYTE data, CLOCK clock)
{
    unsigned int dnr;

    drivecpu_execute_all(clock);
    serial_iec_device_exec(clock);

    iec_update_cpu_bus(data);

    if (iec_old_atn != (iecbus.cpu_bus & 0x10))
    {
        iec_old_atn = iecbus.cpu_bus & 0x10;

        for (dnr = 0; dnr < DRIVE_NUM; dnr++)
            if( iecbus_device[8+dnr] == IECBUS_DEVICE_TRUEDRIVE )
            {
                if (drive_context[dnr]->drive->type != DRIVE_TYPE_1581)
                    viacore_signal(drive_context[dnr]->via1d1541, VIA_SIG_CA1,
                                   iec_old_atn ? 0 : VIA_SIG_RISE);
                else if (!iec_old_atn)
                    ciacore_set_flag(drive_context[dnr]->cia1581);
            }
    }

    for (dnr = 0; dnr < DRIVE_NUM; dnr++)
        if( iecbus_device[8+dnr] == IECBUS_DEVICE_TRUEDRIVE )
        {
            unsigned int unit;
            unit = dnr + 8;
            if (drive_context[dnr]->drive->type != DRIVE_TYPE_1581)
                iecbus.drv_bus[unit] = (((iecbus.drv_data[unit] << 3) & 0x40)
                                        | ((iecbus.drv_data[unit] << 6)
                                           & ((~iecbus.drv_data[unit]
                                               ^ iecbus.cpu_bus) << 3) & 0x80));
            else
                iecbus.drv_bus[unit] = (((iecbus.drv_data[unit] << 3) & 0x40)
                                        | ((iecbus.drv_data[unit] << 6)
                                           & ((iecbus.drv_data[unit]
                                               | iecbus.cpu_bus) << 3) & 0x80));
        }

    iec_update_ports();
}