Skip to content

Commit 178e9fe

Browse files
committed
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]
1 parent 8fae6f0 commit 178e9fe

File tree

6 files changed

+33
-13
lines changed

6 files changed

+33
-13
lines changed

src/mame/apple/cuda.cpp

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ void cuda_device::device_add_mconfig(machine_config &config)
8686
m_maincpu->write_p<1>().set(FUNC(cuda_device::pb_w));
8787
m_maincpu->write_p<2>().set(FUNC(cuda_device::pc_w));
8888
m_maincpu->set_pullups<1>(0xc0); // pull-ups on port B bits 6 & 7 (DFAC/I2C SDA & SCL)
89+
m_maincpu->set_pullups<2>(0x04); // pull-up on port C bit 2 (NMI)
8990
}
9091

9192
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
101102
: device_t(mconfig, type, tag, owner, clock),
102103
device_nvram_interface(mconfig, *this),
103104
write_reset(*this),
105+
write_nmi(*this),
104106
write_linechange(*this),
105107
write_via_clock(*this),
106108
write_via_data(*this),
@@ -110,8 +112,8 @@ cuda_device::cuda_device(const machine_config &mconfig, device_type type, const
110112
m_maincpu(*this, "cudamcu"),
111113
m_default_nvram(*this, "defaultnv"),
112114
m_treq(0), m_byteack(0), m_tip(0), m_via_data(0), m_last_adb(0),
113-
m_iic_sda(0), m_last_adb_time(0), m_cuda_controls_power(false), m_adb_in(false),
114-
m_reset_line(0), m_adb_dtime(0), m_pram_loaded(false)
115+
m_iic_sda(1), m_last_adb_time(0), m_cuda_controls_power(false), m_adb_in(false), m_adb_power(false),
116+
m_reset_line(0), m_nmi_line(0), m_adb_dtime(0), m_pram_loaded(false)
115117
{
116118
std::fill(std::begin(m_disk_pram), std::end(m_disk_pram), 0);
117119
}
@@ -124,6 +126,7 @@ void cuda_device::device_start()
124126
save_item(NAME(m_via_data));
125127
save_item(NAME(m_adb_in));
126128
save_item(NAME(m_reset_line));
129+
save_item(NAME(m_nmi_line));
127130
save_item(NAME(m_adb_dtime));
128131
save_item(NAME(m_pram_loaded));
129132
save_item(NAME(m_disk_pram));
@@ -196,7 +199,7 @@ void cuda_device::pb_w(u8 data)
196199

197200
void cuda_device::pc_w(u8 data)
198201
{
199-
if ((data & 8) != m_reset_line)
202+
if (BIT(data, 3) != m_reset_line)
200203
{
201204
LOGMASKED(LOG_HOSTCOMM, "680x0 reset: %d -> %d (PC=%x)\n", m_reset_line, BIT(data, 3), m_maincpu->pc());
202205
// falling edge, should reset the machine too
@@ -246,6 +249,12 @@ void cuda_device::pc_w(u8 data)
246249
}
247250
}
248251
}
252+
253+
if ((!BIT(data, 2)) != m_nmi_line)
254+
{
255+
m_nmi_line = !BIT(data, 2);
256+
write_nmi(m_nmi_line);
257+
}
249258
}
250259

251260
u8 cuda_device::pa_r()
@@ -261,10 +270,8 @@ u8 cuda_device::pa_r()
261270
rv = 0x02 | 0x01; // pull-up + PFW
262271
}
263272

264-
if (m_adb_in)
265-
{
266-
rv |= 0x40;
267-
}
273+
rv |= (m_adb_in) ? 0x40 : 0;
274+
rv |= (m_adb_power) ? 0 : 0x04;
268275

269276
return rv;
270277
}

src/mame/apple/cuda.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,21 +30,23 @@ class cuda_device : public device_t, public device_nvram_interface
3030
void set_byteack(u8 val) { m_byteack = val; }
3131
u8 get_via_data() { return m_via_data; }
3232
void set_via_data(u8 dat) { m_via_data = dat; }
33-
void set_adb_line(int linestate) { m_adb_in = (linestate == ASSERT_LINE) ? true : false; }
33+
void set_adb_line(int linestate) { m_adb_in = (linestate == ASSERT_LINE); }
34+
void set_adb_power(int linestate) { m_adb_power = (linestate == ASSERT_LINE); }
3435
void set_iic_sda(u8 data) { m_iic_sda = (data & 1); }
3536
int get_adb_dtime() { return m_adb_dtime; }
3637

3738
int rom_offset;
3839

3940
auto reset_callback() { return write_reset.bind(); }
41+
auto nmi_callback() { return write_nmi.bind(); }
4042
auto linechange_callback() { return write_linechange.bind(); }
4143
auto via_clock_callback() { return write_via_clock.bind(); }
4244
auto via_data_callback() { return write_via_data.bind(); }
4345
auto iic_scl_callback() { return write_iic_scl.bind(); }
4446
auto iic_sda_callback() { return write_iic_sda.bind(); }
4547
auto dfac_latch_callback() { return write_dfac_latch.bind(); }
4648

47-
devcb_write_line write_reset, write_linechange, write_via_clock, write_via_data;
49+
devcb_write_line write_reset, write_nmi, write_linechange, write_via_clock, write_via_data;
4850
devcb_write_line write_iic_scl, write_iic_sda, write_dfac_latch;
4951

5052
protected:
@@ -70,7 +72,8 @@ class cuda_device : public device_t, public device_nvram_interface
7072
u64 m_last_adb_time;
7173
bool m_cuda_controls_power;
7274
bool m_adb_in;
73-
s32 m_reset_line;
75+
bool m_adb_power;
76+
s32 m_reset_line, m_nmi_line;
7477
s32 m_adb_dtime;
7578
u8 m_disk_pram[0x100]{};
7679
bool m_pram_loaded;

src/mame/apple/maclc.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,9 @@ void maclc_state::maccclas(machine_config &config)
480480
m_cuda->linechange_callback().set(m_macadb, FUNC(macadb_device::adb_linechange_w));
481481
m_cuda->via_clock_callback().set(m_v8, FUNC(v8_device::cb1_w));
482482
m_cuda->via_data_callback().set(m_v8, FUNC(v8_device::cb2_w));
483+
m_cuda->nmi_callback().set_inputline(m_maincpu, M68K_IRQ_7);
483484
m_macadb->adb_data_callback().set(m_cuda, FUNC(cuda_device::set_adb_line));
485+
m_macadb->adb_power_callback().set(m_cuda, FUNC(cuda_device::set_adb_power));
484486
config.set_perfect_quantum(m_maincpu);
485487

486488
SPICE(config.replace(), m_v8, C15M);
@@ -518,12 +520,14 @@ void maclc_state::mactv(machine_config &config)
518520
config.device_remove("fdc");
519521

520522
CUDA_V2XX(config, m_cuda, XTAL(32'768));
521-
m_cuda->set_default_bios_tag("341s0788"); // TODO: 0789 freezes during boot, possible VIA bug or 6522/6523 difference?
523+
m_cuda->set_default_bios_tag("341s0789");
522524
m_cuda->reset_callback().set(FUNC(maclc_state::egret_reset_w));
523525
m_cuda->linechange_callback().set(m_macadb, FUNC(macadb_device::adb_linechange_w));
524526
m_cuda->via_clock_callback().set(m_v8, FUNC(v8_device::cb1_w));
525527
m_cuda->via_data_callback().set(m_v8, FUNC(v8_device::cb2_w));
528+
m_cuda->nmi_callback().set_inputline(m_maincpu, M68K_IRQ_7);
526529
m_macadb->adb_data_callback().set(m_cuda, FUNC(cuda_device::set_adb_line));
530+
m_macadb->adb_power_callback().set(m_cuda, FUNC(cuda_device::set_adb_power));
527531
config.set_perfect_quantum(m_maincpu);
528532

529533
TINKERBELL(config.replace(), m_v8, C15M);

src/mame/apple/maclc3.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ void macvail_state::maclc3_base(machine_config &config)
263263
m_ram->set_extra_options("8M,16M,32M,48M,64M,80M");
264264

265265
NSCSI_BUS(config, "scsi");
266-
NSCSI_CONNECTOR(config, "scsi:0", mac_scsi_devices, nullptr);
266+
NSCSI_CONNECTOR(config, "scsi:0", mac_scsi_devices, "harddisk");
267267
NSCSI_CONNECTOR(config, "scsi:1", mac_scsi_devices, nullptr);
268268
NSCSI_CONNECTOR(config, "scsi:2", mac_scsi_devices, nullptr);
269269
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)
274274
});
275275
NSCSI_CONNECTOR(config, "scsi:4", mac_scsi_devices, nullptr);
276276
NSCSI_CONNECTOR(config, "scsi:5", mac_scsi_devices, nullptr);
277-
NSCSI_CONNECTOR(config, "scsi:6", mac_scsi_devices, "harddisk");
277+
NSCSI_CONNECTOR(config, "scsi:6", mac_scsi_devices, nullptr);
278278
NSCSI_CONNECTOR(config, "scsi:7").option_set("ncr5380", NCR53C80).machine_config([this](device_t *device)
279279
{
280280
ncr53c80_device &adapter = downcast<ncr53c80_device &>(*device);
@@ -384,7 +384,9 @@ void macvail_state::maclc520(machine_config &config)
384384
m_cuda->iic_scl_callback().set(m_omega, FUNC(omega_device::clock_write));
385385
m_cuda->iic_sda_callback().set(m_omega, FUNC(omega_device::data_write));
386386
m_cuda->dfac_latch_callback().set(m_omega, FUNC(omega_device::latch_write));
387+
m_cuda->nmi_callback().set_inputline(m_maincpu, M68K_IRQ_7);
387388
m_macadb->adb_data_callback().set(m_cuda, FUNC(cuda_device::set_adb_line));
389+
m_macadb->adb_power_callback().set(m_cuda, FUNC(cuda_device::set_adb_power));
388390
config.set_perfect_quantum(m_maincpu);
389391

390392
m_sonora->pb3_callback().set(m_cuda, FUNC(cuda_device::get_treq));

src/mame/apple/macquadra605.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,9 @@ void quadra605_state::macqd605(machine_config &config)
213213
m_cuda->linechange_callback().set(m_macadb, FUNC(macadb_device::adb_linechange_w));
214214
m_cuda->via_clock_callback().set(m_primetime, FUNC(primetime_device::cb1_w));
215215
m_cuda->via_data_callback().set(m_primetime, FUNC(primetime_device::cb2_w));
216+
m_cuda->nmi_callback().set_inputline(m_maincpu, M68K_IRQ_7);
216217
m_macadb->adb_data_callback().set(m_cuda, FUNC(cuda_device::set_adb_line));
218+
m_macadb->adb_power_callback().set(m_cuda, FUNC(cuda_device::set_adb_power));
217219
config.set_perfect_quantum(m_maincpu);
218220

219221
m_primetime->pb3_callback().set(m_cuda, FUNC(cuda_device::get_treq));

src/mame/apple/macquadra630.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,9 @@ void quadra630_state::macqd630(machine_config &config)
176176
m_cuda->linechange_callback().set(m_macadb, FUNC(macadb_device::adb_linechange_w));
177177
m_cuda->via_clock_callback().set(m_primetimeii, FUNC(primetime_device::cb1_w));
178178
m_cuda->via_data_callback().set(m_primetimeii, FUNC(primetime_device::cb2_w));
179+
m_cuda->nmi_callback().set_inputline(m_maincpu, M68K_IRQ_7);
179180
m_macadb->adb_data_callback().set(m_cuda, FUNC(cuda_device::set_adb_line));
181+
m_macadb->adb_power_callback().set(m_cuda, FUNC(cuda_device::set_adb_power));
180182
config.set_perfect_quantum(m_maincpu);
181183

182184
input_merger_device &sda_merger(INPUT_MERGER_ALL_HIGH(config, "sda"));

0 commit comments

Comments
 (0)