apple/cuda.cpp: Updates [Doug Brown, R. Belmont]

- Set initial I2C data line state to high so systems with no I2C devices don't hang the 6805
- Use the correct Cuda 2.38 for mactv
- Hook up power key properly so System 7.1 and 7.5 don't give spurious power down warnings when pressing modifier keys
- Hook up Cuda NMI generation so Command-Power drops into MiniBug

apple/maclc3.cpp: Set LC520/LC550 harddisk to SCSI ID 0 as the restore CD for those systems hard-codes the ID [R. Belmont]
This commit is contained in:
arbee 2024-12-26 15:49:15 -05:00
parent 8fae6f00e8
commit 178e9fee20
6 changed files with 33 additions and 13 deletions

View File

@ -86,6 +86,7 @@ void cuda_device::device_add_mconfig(machine_config &config)
m_maincpu->write_p<1>().set(FUNC(cuda_device::pb_w));
m_maincpu->write_p<2>().set(FUNC(cuda_device::pc_w));
m_maincpu->set_pullups<1>(0xc0); // pull-ups on port B bits 6 & 7 (DFAC/I2C SDA & SCL)
m_maincpu->set_pullups<2>(0x04); // pull-up on port C bit 2 (NMI)
}
const tiny_rom_entry *cuda_device::device_rom_region() const
@ -101,6 +102,7 @@ cuda_device::cuda_device(const machine_config &mconfig, device_type type, const
: device_t(mconfig, type, tag, owner, clock),
device_nvram_interface(mconfig, *this),
write_reset(*this),
write_nmi(*this),
write_linechange(*this),
write_via_clock(*this),
write_via_data(*this),
@ -110,8 +112,8 @@ cuda_device::cuda_device(const machine_config &mconfig, device_type type, const
m_maincpu(*this, "cudamcu"),
m_default_nvram(*this, "defaultnv"),
m_treq(0), m_byteack(0), m_tip(0), m_via_data(0), m_last_adb(0),
m_iic_sda(0), m_last_adb_time(0), m_cuda_controls_power(false), m_adb_in(false),
m_reset_line(0), m_adb_dtime(0), m_pram_loaded(false)
m_iic_sda(1), m_last_adb_time(0), m_cuda_controls_power(false), m_adb_in(false), m_adb_power(false),
m_reset_line(0), m_nmi_line(0), m_adb_dtime(0), m_pram_loaded(false)
{
std::fill(std::begin(m_disk_pram), std::end(m_disk_pram), 0);
}
@ -124,6 +126,7 @@ void cuda_device::device_start()
save_item(NAME(m_via_data));
save_item(NAME(m_adb_in));
save_item(NAME(m_reset_line));
save_item(NAME(m_nmi_line));
save_item(NAME(m_adb_dtime));
save_item(NAME(m_pram_loaded));
save_item(NAME(m_disk_pram));
@ -196,7 +199,7 @@ void cuda_device::pb_w(u8 data)
void cuda_device::pc_w(u8 data)
{
if ((data & 8) != m_reset_line)
if (BIT(data, 3) != m_reset_line)
{
LOGMASKED(LOG_HOSTCOMM, "680x0 reset: %d -> %d (PC=%x)\n", m_reset_line, BIT(data, 3), m_maincpu->pc());
// falling edge, should reset the machine too
@ -246,6 +249,12 @@ void cuda_device::pc_w(u8 data)
}
}
}
if ((!BIT(data, 2)) != m_nmi_line)
{
m_nmi_line = !BIT(data, 2);
write_nmi(m_nmi_line);
}
}
u8 cuda_device::pa_r()
@ -261,10 +270,8 @@ u8 cuda_device::pa_r()
rv = 0x02 | 0x01; // pull-up + PFW
}
if (m_adb_in)
{
rv |= 0x40;
}
rv |= (m_adb_in) ? 0x40 : 0;
rv |= (m_adb_power) ? 0 : 0x04;
return rv;
}

View File

@ -30,13 +30,15 @@ public:
void set_byteack(u8 val) { m_byteack = val; }
u8 get_via_data() { return m_via_data; }
void set_via_data(u8 dat) { m_via_data = dat; }
void set_adb_line(int linestate) { m_adb_in = (linestate == ASSERT_LINE) ? true : false; }
void set_adb_line(int linestate) { m_adb_in = (linestate == ASSERT_LINE); }
void set_adb_power(int linestate) { m_adb_power = (linestate == ASSERT_LINE); }
void set_iic_sda(u8 data) { m_iic_sda = (data & 1); }
int get_adb_dtime() { return m_adb_dtime; }
int rom_offset;
auto reset_callback() { return write_reset.bind(); }
auto nmi_callback() { return write_nmi.bind(); }
auto linechange_callback() { return write_linechange.bind(); }
auto via_clock_callback() { return write_via_clock.bind(); }
auto via_data_callback() { return write_via_data.bind(); }
@ -44,7 +46,7 @@ public:
auto iic_sda_callback() { return write_iic_sda.bind(); }
auto dfac_latch_callback() { return write_dfac_latch.bind(); }
devcb_write_line write_reset, write_linechange, write_via_clock, write_via_data;
devcb_write_line write_reset, write_nmi, write_linechange, write_via_clock, write_via_data;
devcb_write_line write_iic_scl, write_iic_sda, write_dfac_latch;
protected:
@ -70,7 +72,8 @@ private:
u64 m_last_adb_time;
bool m_cuda_controls_power;
bool m_adb_in;
s32 m_reset_line;
bool m_adb_power;
s32 m_reset_line, m_nmi_line;
s32 m_adb_dtime;
u8 m_disk_pram[0x100]{};
bool m_pram_loaded;

View File

@ -480,7 +480,9 @@ void maclc_state::maccclas(machine_config &config)
m_cuda->linechange_callback().set(m_macadb, FUNC(macadb_device::adb_linechange_w));
m_cuda->via_clock_callback().set(m_v8, FUNC(v8_device::cb1_w));
m_cuda->via_data_callback().set(m_v8, FUNC(v8_device::cb2_w));
m_cuda->nmi_callback().set_inputline(m_maincpu, M68K_IRQ_7);
m_macadb->adb_data_callback().set(m_cuda, FUNC(cuda_device::set_adb_line));
m_macadb->adb_power_callback().set(m_cuda, FUNC(cuda_device::set_adb_power));
config.set_perfect_quantum(m_maincpu);
SPICE(config.replace(), m_v8, C15M);
@ -518,12 +520,14 @@ void maclc_state::mactv(machine_config &config)
config.device_remove("fdc");
CUDA_V2XX(config, m_cuda, XTAL(32'768));
m_cuda->set_default_bios_tag("341s0788"); // TODO: 0789 freezes during boot, possible VIA bug or 6522/6523 difference?
m_cuda->set_default_bios_tag("341s0789");
m_cuda->reset_callback().set(FUNC(maclc_state::egret_reset_w));
m_cuda->linechange_callback().set(m_macadb, FUNC(macadb_device::adb_linechange_w));
m_cuda->via_clock_callback().set(m_v8, FUNC(v8_device::cb1_w));
m_cuda->via_data_callback().set(m_v8, FUNC(v8_device::cb2_w));
m_cuda->nmi_callback().set_inputline(m_maincpu, M68K_IRQ_7);
m_macadb->adb_data_callback().set(m_cuda, FUNC(cuda_device::set_adb_line));
m_macadb->adb_power_callback().set(m_cuda, FUNC(cuda_device::set_adb_power));
config.set_perfect_quantum(m_maincpu);
TINKERBELL(config.replace(), m_v8, C15M);

View File

@ -263,7 +263,7 @@ void macvail_state::maclc3_base(machine_config &config)
m_ram->set_extra_options("8M,16M,32M,48M,64M,80M");
NSCSI_BUS(config, "scsi");
NSCSI_CONNECTOR(config, "scsi:0", mac_scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsi:0", mac_scsi_devices, "harddisk");
NSCSI_CONNECTOR(config, "scsi:1", mac_scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsi:2", mac_scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsi:3").option_set("cdrom", NSCSI_CDROM_APPLE).machine_config(
@ -274,7 +274,7 @@ void macvail_state::maclc3_base(machine_config &config)
});
NSCSI_CONNECTOR(config, "scsi:4", mac_scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsi:5", mac_scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsi:6", mac_scsi_devices, "harddisk");
NSCSI_CONNECTOR(config, "scsi:6", mac_scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsi:7").option_set("ncr5380", NCR53C80).machine_config([this](device_t *device)
{
ncr53c80_device &adapter = downcast<ncr53c80_device &>(*device);
@ -384,7 +384,9 @@ void macvail_state::maclc520(machine_config &config)
m_cuda->iic_scl_callback().set(m_omega, FUNC(omega_device::clock_write));
m_cuda->iic_sda_callback().set(m_omega, FUNC(omega_device::data_write));
m_cuda->dfac_latch_callback().set(m_omega, FUNC(omega_device::latch_write));
m_cuda->nmi_callback().set_inputline(m_maincpu, M68K_IRQ_7);
m_macadb->adb_data_callback().set(m_cuda, FUNC(cuda_device::set_adb_line));
m_macadb->adb_power_callback().set(m_cuda, FUNC(cuda_device::set_adb_power));
config.set_perfect_quantum(m_maincpu);
m_sonora->pb3_callback().set(m_cuda, FUNC(cuda_device::get_treq));

View File

@ -213,7 +213,9 @@ void quadra605_state::macqd605(machine_config &config)
m_cuda->linechange_callback().set(m_macadb, FUNC(macadb_device::adb_linechange_w));
m_cuda->via_clock_callback().set(m_primetime, FUNC(primetime_device::cb1_w));
m_cuda->via_data_callback().set(m_primetime, FUNC(primetime_device::cb2_w));
m_cuda->nmi_callback().set_inputline(m_maincpu, M68K_IRQ_7);
m_macadb->adb_data_callback().set(m_cuda, FUNC(cuda_device::set_adb_line));
m_macadb->adb_power_callback().set(m_cuda, FUNC(cuda_device::set_adb_power));
config.set_perfect_quantum(m_maincpu);
m_primetime->pb3_callback().set(m_cuda, FUNC(cuda_device::get_treq));

View File

@ -176,7 +176,9 @@ void quadra630_state::macqd630(machine_config &config)
m_cuda->linechange_callback().set(m_macadb, FUNC(macadb_device::adb_linechange_w));
m_cuda->via_clock_callback().set(m_primetimeii, FUNC(primetime_device::cb1_w));
m_cuda->via_data_callback().set(m_primetimeii, FUNC(primetime_device::cb2_w));
m_cuda->nmi_callback().set_inputline(m_maincpu, M68K_IRQ_7);
m_macadb->adb_data_callback().set(m_cuda, FUNC(cuda_device::set_adb_line));
m_macadb->adb_power_callback().set(m_cuda, FUNC(cuda_device::set_adb_power));
config.set_perfect_quantum(m_maincpu);
input_merger_device &sda_merger(INPUT_MERGER_ALL_HIGH(config, "sda"));