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+
111128private:
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
216251void 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+
349393static 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
479537ROM_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))
494555ROM_END
495556
496557} // anonymous namespace
0 commit comments