Skip to content

Commit 098b4ed

Browse files
committed
luna: add the cmc
1 parent 83978e0 commit 098b4ed

File tree

1 file changed

+66
-5
lines changed

1 file changed

+66
-5
lines changed

src/mame/omron/luna_68k.cpp

Lines changed: 66 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@
5656
#include "video/bt45x.h"
5757
#include "machine/nvram.h"
5858

59+
// cmc
60+
#include "machine/am79c90.h"
61+
#include "machine/tms9914.h"
62+
5963
#define VERBOSE 0
6064
#include "logmacro.h"
6165

@@ -81,6 +85,7 @@ class luna_68k_state : public driver_device
8185
, m_ioc_floppy(*this, "fdc:0")
8286
, m_ioc_scc(*this, "scc")
8387
, m_ioc_cio(*this, "cio")
88+
, m_ioc_boot_ram(*this, "ioc_boot_ram")
8489
, m_ioc_ram(*this, "ioc_ram")
8590
, m_ioc_boot(*this, "ioc_boot")
8691
// gpu
@@ -89,6 +94,15 @@ class luna_68k_state : public driver_device
8994
, m_gpu_mfp(*this, "mfp")
9095
, m_gpu_tty(*this, "tty")
9196
, m_gpu_duart(*this, "duart%u", 0U)
97+
// cmc
98+
, m_cmc_cpu(*this, "cmc")
99+
, m_cmc_eth(*this, "lance")
100+
, m_cmc_gpib(*this, "gpib")
101+
, m_cmc_stc(*this, "cmc_stc")
102+
, m_cmc_scc1(*this, "cmc_scc1")
103+
, m_cmc_scc2(*this, "cmc_scc2")
104+
, m_cmc_ram(*this, "cmc_ram")
105+
, m_cmc_boot(*this, "cmc_boot")
92106
{
93107
}
94108

@@ -102,12 +116,15 @@ class luna_68k_state : public driver_device
102116

103117
// address maps
104118
void cpu_map(address_map &map) ATTR_COLD;
105-
void cpu_autovector_map(address_map &map) ATTR_COLD;
119+
void cpu_cpuspace_map(address_map &map) ATTR_COLD;
106120

107121
void ioc_cpu_map(address_map &map) ATTR_COLD;
108122
void ioc_cpuspace_map(address_map &map) ATTR_COLD;
123+
109124
void gpu_cpu_map(address_map &map) ATTR_COLD;
110125

126+
void cmc_cpu_map(address_map &map) ATTR_COLD;
127+
111128
private:
112129
u32 bus_error_r(offs_t offset)
113130
{
@@ -134,7 +151,14 @@ class luna_68k_state : public driver_device
134151
{
135152
if (!machine().side_effects_disabled())
136153
m_ioc_boot.disable();
137-
m_ioc_ram[offset & 0x1ffff] = data;
154+
m_ioc_boot_ram[offset & 0x1ffff] = data;
155+
}
156+
157+
void cmc_boot_disable_w(offs_t offset, u16 data)
158+
{
159+
if (!machine().side_effects_disabled())
160+
m_cmc_boot.disable();
161+
m_cmc_ram[offset & 0x3ffff] = data;
138162
}
139163

140164
void ram_size_w(u32 data)
@@ -173,6 +197,7 @@ class luna_68k_state : public driver_device
173197
required_device<floppy_connector> m_ioc_floppy;
174198
required_device<z80scc_device> m_ioc_scc;
175199
required_device<z8536_device> m_ioc_cio;
200+
required_shared_ptr<u16> m_ioc_boot_ram;
176201
required_shared_ptr<u16> m_ioc_ram;
177202
memory_view m_ioc_boot;
178203
u8 m_m2i;
@@ -185,6 +210,15 @@ class luna_68k_state : public driver_device
185210
required_device<rs232_port_device> m_gpu_tty;
186211
required_device_array<mc68681_device, 2> m_gpu_duart;
187212

213+
// cmc
214+
required_device<m68020_device> m_cmc_cpu;
215+
required_device<am7990_device> m_cmc_eth;
216+
required_device<tms9914_device> m_cmc_gpib;
217+
required_device<am9513_device> m_cmc_stc;
218+
required_device<z80scc_device> m_cmc_scc1, m_cmc_scc2;
219+
required_shared_ptr<u32> m_cmc_ram;
220+
221+
memory_view m_cmc_boot;
188222
u32 m_ram_size = 0U;
189223
};
190224

@@ -211,6 +245,7 @@ void luna_68k_state::machine_reset()
211245
m_m2i = 0;
212246
m_i2m = 0;
213247
m_ioc_boot.select(0);
248+
m_cmc_boot.select(0);
214249
}
215250

216251
void luna_68k_state::m2i_w(u32 data)
@@ -286,7 +321,7 @@ void luna_68k_state::cpu_map(address_map &map)
286321
map(0xe1f00038, 0xe1f0003b).nopr(); // jrc graphics
287322
}
288323

289-
void luna_68k_state::cpu_autovector_map(address_map &map)
324+
void luna_68k_state::cpu_cpuspace_map(address_map &map)
290325
{
291326
map(0xfffffff3, 0xfffffff3).r(FUNC(luna_68k_state::i2m_vector_r));
292327
map(0xfffffff5, 0xfffffff5).lr8(NAME([]() { return m68000_base_device::autovector(2); }));
@@ -305,7 +340,7 @@ void luna_68k_state::ioc_cpu_map(address_map &map)
305340
// hd63450ps10 x 2 dma
306341
// z0853606psc cio
307342

308-
map(0x000000, 0x01ffff).ram(); // HM62256LP-10x4 (32768x4) - 128KB
343+
map(0x000000, 0x01ffff).ram().share(m_ioc_boot_ram); // HM62256LP-10x4 (32768x4) - 128KB
309344
map(0x000000, 0x000fff).view(m_ioc_boot);
310345
m_ioc_boot[0](0x000000, 0x000fff).rom().region("ioc", 0).w(FUNC(luna_68k_state::ioc_boot_disable_w));
311346
map(0x100000, 0x11ffff).ram().share(m_ioc_ram); // HM62256LP-10x8 (32768x4) - 128KB
@@ -346,6 +381,15 @@ void luna_68k_state::gpu_cpu_map(address_map &map)
346381
map(0xf0000000, 0xf003ffff).ram(); // M5M5258P-35 256kb (64k x 4) static RAM (x8) - 256kB
347382
}
348383

384+
void luna_68k_state::cmc_cpu_map(address_map &map)
385+
{
386+
map(0x000000, 0x03ffff).ram().share(m_cmc_ram); // NEC D43256AC-10L x 8 (32768x8)
387+
map(0x000000, 0x000fff).view(m_cmc_boot);
388+
m_cmc_boot[0](0x000000, 0x000fff).rom().region("cmc", 0).w(FUNC(luna_68k_state::cmc_boot_disable_w));
389+
390+
map(0x400000, 0x407fff).rom().region("cmc", 0);
391+
}
392+
349393
static DEVICE_INPUT_DEFAULTS_START(terminal)
350394
DEVICE_INPUT_DEFAULTS("RS232_RXBAUD", 0xff, RS232_BAUD_19200)
351395
DEVICE_INPUT_DEFAULTS("RS232_TXBAUD", 0xff, RS232_BAUD_19200)
@@ -364,7 +408,7 @@ void luna_68k_state::luna(machine_config &config)
364408
{
365409
M68030(config, m_cpu, 50_MHz_XTAL / 2);
366410
m_cpu->set_addrmap(AS_PROGRAM, &luna_68k_state::cpu_map);
367-
m_cpu->set_addrmap(m68000_base_device::AS_CPU_SPACE, &luna_68k_state::cpu_autovector_map);
411+
m_cpu->set_addrmap(m68000_base_device::AS_CPU_SPACE, &luna_68k_state::cpu_cpuspace_map);
368412

369413
// 8 SIMMs for RAM arranged as two groups of 4, soldered
370414
RAM(config, m_ram);
@@ -474,6 +518,20 @@ void luna_68k_state::luna(machine_config &config)
474518
MC68681(config, m_gpu_duart[1], 3.6864_MHz_XTAL);
475519

476520
NVRAM(config, "gpu_nvram");
521+
522+
// CMC
523+
M68020(config, m_cmc_cpu, 25_MHz_XTAL/2);
524+
m_cmc_cpu->set_addrmap(AS_PROGRAM, &luna_68k_state::cmc_cpu_map);
525+
526+
AM7990(config, m_cmc_eth); // Linked to an AM7992BCD,
527+
TMS9914(config, m_cmc_gpib, 25_MHz_XTAL/5);
528+
AM9513(config, m_cmc_stc, 25_MHz_XTAL/2); // FIXME: clock unknown
529+
530+
SCC8530(config, m_cmc_scc1, 4.9152_MHz_XTAL); // AM8530H-6PC
531+
SCC8530(config, m_cmc_scc2, 4.9152_MHz_XTAL); // AM8530H-6PC
532+
m_cmc_scc1->configure_channels(4'915'200, 4'915'200, 4'915'200, 4'915'200);
533+
m_cmc_scc2->configure_channels(4'915'200, 4'915'200, 4'915'200, 4'915'200);
534+
477535
}
478536

479537
ROM_START(luna)
@@ -491,6 +549,9 @@ ROM_START(luna)
491549
ROM_REGION32_BE(0x40000, "gpu", 0)
492550
ROM_LOAD("jaw-2500__rom0__v1.21.rom0", 0x00000, 0x20000, CRC(915e0e86) SHA1(1115a8d3101f6d16e397016ae02fc64202edfc3a))
493551
ROM_LOAD("jaw-2500__rom1__v1.21.rom1", 0x20000, 0x20000, CRC(b4c21f3f) SHA1(577833dfbbceba8ee32fd2ac5b1809f860143d44))
552+
553+
ROM_REGION16_BE(0x8000, "cmc", 0)
554+
ROM_LOAD("8112_v1_1.icnn", 0x0000, 0x8000, CRC(b87e0122) SHA1(22290850761ed3dddb2369e062012679e2963fa3))
494555
ROM_END
495556

496557
} // anonymous namespace

0 commit comments

Comments
 (0)