Previous 199869 Revisions Next

r32248 Sunday 21st September, 2014 at 08:37:12 UTC by Sandro Ronco
(MESS) dmv: added K233 and K234 expansion modules. (nw)
[src/emu/bus]bus.mak
[src/emu/bus/dmv]dmvbus.c dmvbus.h k230.c k230.h k233.c* k233.h*
[src/mess/drivers]dmv.c

trunk/src/emu/bus/dmv/dmvbus.h
r32247r32248
3434   // slot 7 and 7A
3535   virtual bool av16bit() { return false; }
3636   virtual void hold_w(int state) { }
37   virtual void switch16_w(int state) { }
3738   virtual void irq0_w(int state) { }
3839   virtual void irq1_w(int state) { }
3940   virtual void irq2_w(int state) { }
r32247r32248
5859   template<class _Object> static devcb_base &set_prog_read_callback(device_t &device, _Object object) { return downcast<dmvcart_slot_device &>(device).m_prog_read_cb.set_callback(object); }
5960   template<class _Object> static devcb_base &set_prog_write_callback(device_t &device, _Object object) { return downcast<dmvcart_slot_device &>(device).m_prog_write_cb.set_callback(object); }
6061   template<class _Object> static devcb_base &set_out_irq_callback(device_t &device, _Object object) { return downcast<dmvcart_slot_device &>(device).m_out_irq_cb.set_callback(object); }
62   template<class _Object> static devcb_base &set_out_thold_callback(device_t &device, _Object object) { return downcast<dmvcart_slot_device &>(device).m_out_thold_cb.set_callback(object); }
6163
6264   // device-level overrides
6365   virtual void device_start();
r32247r32248
7072   virtual void io_read(address_space &space, int ifsel, offs_t offset, UINT8 &data);
7173   virtual void io_write(address_space &space, int ifsel, offs_t offset, UINT8 data);
7274   virtual void hold_w(int state);
75   virtual void switch16_w(int state);
7376   virtual void irq0_w(int state);
7477   virtual void irq1_w(int state);
7578   virtual void irq2_w(int state);
r32247r32248
8487   devcb_read8                     m_prog_read_cb;
8588   devcb_write8                    m_prog_write_cb;
8689   devcb_write_line                m_out_irq_cb;
90   devcb_write_line                m_out_thold_cb;
8791   device_dmvslot_interface*       m_cart;
8892};
8993
r32247r32248
103107#define MCFG_DMVCART_SLOT_OUT_IRQ_CB(_devcb) \
104108   devcb = &dmvcart_slot_device::set_out_irq_callback(*device, DEVCB_##_devcb);
105109
110#define MCFG_DMVCART_SLOT_OUT_THOLD_CB(_devcb) \
111   devcb = &dmvcart_slot_device::set_out_thold_callback(*device, DEVCB_##_devcb);
112
106113#endif /* __DMV_CART_H__ */
trunk/src/emu/bus/dmv/k233.h
r0r32248
1// license:BSD-3-Clause
2// copyright-holders:Sandro Ronco
3#pragma once
4
5#ifndef __DMV_K233_H__
6#define __DMV_K233_H__
7
8#include "emu.h"
9#include "dmvbus.h"
10
11//**************************************************************************
12//  TYPE DEFINITIONS
13//**************************************************************************
14
15// ======================>
16
17class dmv_k233_device :
18      public device_t,
19      public device_dmvslot_interface
20{
21public:
22   // construction/destruction
23   dmv_k233_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
24
25protected:
26   // device-level overrides
27   virtual void device_start();
28   virtual void device_reset();
29
30   // dmvcart_interface overrides
31   virtual void io_write(address_space &space, int ifsel, offs_t offset, UINT8 data);
32   virtual bool read(offs_t offset, UINT8 &data);
33   virtual bool write(offs_t offset, UINT8 data);
34
35private:
36   bool        m_enabled;
37   UINT8 *     m_ram;
38};
39
40
41// device type definition
42extern const device_type DMV_K233;
43
44#endif  /* __DMV_K233_H__ */
Property changes on: trunk/src/emu/bus/dmv/k233.h
Added: svn:eol-style
   + native
Added: svn:mime-type
   + text/plain
trunk/src/emu/bus/dmv/k230.c
r32247r32248
44
55    K230 Internal 8088 module without interrupt controller
66    K231 External 8088 module without interrupt controller
7    K234 External 68008 module
78    K235 Internal 8088 module with interrupt controller
89
910***************************************************************************/
r32247r32248
4344   AM_RANGE( 0x00, 0xff ) AM_READWRITE(io_r, io_w)
4445ADDRESS_MAP_END
4546
47static ADDRESS_MAP_START(k234_mem, AS_PROGRAM, 8, dmv_k230_device)
48   ADDRESS_MAP_UNMAP_HIGH
49   AM_RANGE( 0x00000, 0x7ffff ) AM_READWRITE(program_r, program_w)
50   AM_RANGE( 0xfff00, 0xfffff ) AM_READWRITE(io_r, io_w)
51ADDRESS_MAP_END
4652
4753static ADDRESS_MAP_START(k235_io, AS_IO, 8, dmv_k230_device)
4854   ADDRESS_MAP_UNMAP_HIGH
r32247r32248
5258ADDRESS_MAP_END
5359
5460static MACHINE_CONFIG_FRAGMENT( dmv_k230 )
55   MCFG_CPU_ADD("maincpu", I8088, XTAL_24MHz / 6)
61   MCFG_CPU_ADD("maincpu", I8088, XTAL_15MHz / 3)
5662   MCFG_CPU_PROGRAM_MAP(k230_mem)
5763   MCFG_CPU_IO_MAP(k230_io)
5864MACHINE_CONFIG_END
5965
66static MACHINE_CONFIG_FRAGMENT( dmv_k234 )
67   MCFG_CPU_ADD("maincpu", M68008, XTAL_16MHz / 2)
68   MCFG_CPU_PROGRAM_MAP(k234_mem)
69MACHINE_CONFIG_END
70
6071static MACHINE_CONFIG_FRAGMENT( dmv_k235 )
61   MCFG_CPU_ADD("maincpu", V20, XTAL_24MHz / 6)
72   MCFG_CPU_ADD("maincpu", V20, XTAL_15MHz / 3)
6273   MCFG_CPU_PROGRAM_MAP(k230_mem)
6374   MCFG_CPU_IO_MAP(k235_io)
6475   MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259", pic8259_device, inta_cb)
r32247r32248
7384
7485const device_type DMV_K230 = &device_creator<dmv_k230_device>;
7586const device_type DMV_K231 = &device_creator<dmv_k231_device>;
87const device_type DMV_K234 = &device_creator<dmv_k234_device>;
7688const device_type DMV_K235 = &device_creator<dmv_k235_device>;
7789
7890//**************************************************************************
r32247r32248
109121}
110122
111123//-------------------------------------------------
124//  dmv_k234_device - constructor
125//-------------------------------------------------
126
127dmv_k234_device::dmv_k234_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
128      : dmv_k230_device(mconfig, DMV_K234, "K234 68008", tag, owner, clock, "dmv_k234", __FILE__)
129{
130}
131
132//-------------------------------------------------
112133//  dmv_k235_device - constructor
113134//-------------------------------------------------
114135
r32247r32248
129150   m_io = &machine().device<cpu_device>("maincpu")->space(AS_IO);
130151}
131152
153void dmv_k234_device::device_start()
154{
155   dmv_k230_device::device_start();
156   m_io->install_readwrite_handler(0xd8, 0xdf, 0, 0, read8_delegate(FUNC(dmv_k234_device::snr_r), this), write8_delegate(FUNC(dmv_k234_device::snr_w), this), 0);
157}
158
132159//-------------------------------------------------
133160//  device_reset - device-specific reset
134161//-------------------------------------------------
135162
136163void dmv_k230_device::device_reset()
137164{
165   m_switch16 = 0;
166   m_hold = 0;
138167}
139168
169void dmv_k234_device::device_reset()
170{
171   dmv_k230_device::device_reset();
172   m_snr = 0;
173}
174
140175//-------------------------------------------------
141176//  machine_config_additions - device-specific
142177//  machine configurations
r32247r32248
147182   return MACHINE_CONFIG_NAME( dmv_k230 );
148183}
149184
185machine_config_constructor dmv_k234_device::device_mconfig_additions() const
186{
187   return MACHINE_CONFIG_NAME( dmv_k234 );
188}
189
150190machine_config_constructor dmv_k235_device::device_mconfig_additions() const
151191{
152192   return MACHINE_CONFIG_NAME( dmv_k235 );
r32247r32248
166206   return ROM_NAME( dmv_k231 );
167207}
168208
209const rom_entry *dmv_k234_device::device_rom_region() const
210{
211   return NULL;
212}
213
169214const rom_entry *dmv_k235_device::device_rom_region() const
170215{
171216   return ROM_NAME( dmv_k235 );
r32247r32248
178223
179224void dmv_k230_device::hold_w(int state)
180225{
181   m_maincpu->set_input_line(INPUT_LINE_HALT, state);
226   m_hold = state;
227   m_maincpu->set_input_line(INPUT_LINE_HALT, (m_hold || !m_switch16) ? ASSERT_LINE : CLEAR_LINE);
182228}
183229
230void dmv_k230_device::switch16_w(int state)
231{
232   m_switch16 = state;
233   m_maincpu->set_input_line(INPUT_LINE_HALT, (m_hold || !m_switch16) ? ASSERT_LINE : CLEAR_LINE);
234}
235
184236READ8_MEMBER(dmv_k230_device::rom_r)
185237{
186238   return m_rom->base()[offset & 0x0fff];
r32247r32248
194246WRITE8_MEMBER( dmv_k230_device::io_w )
195247{
196248   m_io->write_byte(offset, data);
197};
249}
198250
199251READ8_MEMBER( dmv_k230_device::program_r )
200252{
201253   return m_bus->m_prog_read_cb(space, offset);
202};
254}
203255
204256WRITE8_MEMBER( dmv_k230_device::program_w )
205257{
206258   m_bus->m_prog_write_cb(space, offset, data);
207};
259}
260
261void dmv_k234_device::hold_w(int state)
262{
263   m_hold = state;
264   m_maincpu->set_input_line(INPUT_LINE_HALT, (m_hold || !m_snr) ? ASSERT_LINE : CLEAR_LINE);
265}
266
267void dmv_k234_device::switch16_w(int state)
268{
269   if (m_switch16 != state)
270   {
271      m_snr = CLEAR_LINE;
272      m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
273      m_bus->m_out_thold_cb(CLEAR_LINE);
274      m_switch16 = state;
275   }
276}
277
278READ8_MEMBER( dmv_k234_device::snr_r )
279{
280   m_snr = ASSERT_LINE;
281   m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
282   m_maincpu->reset();
283   m_bus->m_out_thold_cb(ASSERT_LINE);
284
285   return 0xff;
286}
287
288WRITE8_MEMBER( dmv_k234_device::snr_w )
289{
290   m_snr = ASSERT_LINE;
291   m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
292   m_maincpu->reset();
293   m_bus->m_out_thold_cb(ASSERT_LINE);
294}
trunk/src/emu/bus/dmv/dmvbus.c
r32247r32248
199199      device_slot_interface(mconfig, *this),
200200      m_prog_read_cb(*this),
201201      m_prog_write_cb(*this),
202      m_out_irq_cb(*this)
202      m_out_irq_cb(*this),
203      m_out_thold_cb(*this)
203204{
204205}
205206
r32247r32248
224225   m_prog_read_cb.resolve_safe(0);
225226   m_prog_write_cb.resolve_safe();
226227   m_out_irq_cb.resolve_safe();
228   m_out_thold_cb.resolve_safe();
227229}
228230
229231/*-------------------------------------------------
r32247r32248
310312      m_cart->hold_w(state);
311313}
312314
315void dmvcart_slot_device::switch16_w(int state)
316{
317   if (m_cart)
318      m_cart->switch16_w(state);
319}
320
313321void dmvcart_slot_device::irq0_w(int state)
314322{
315323   if (m_cart)
trunk/src/emu/bus/dmv/k233.c
r0r32248
1// license:BSD-3-Clause
2// copyright-holders:Sandro Ronco
3/***************************************************************************
4
5    K233 16K Shared RAM
6
7***************************************************************************/
8
9#include "emu.h"
10#include "k233.h"
11
12
13/***************************************************************************
14    IMPLEMENTATION
15***************************************************************************/
16
17//**************************************************************************
18//  GLOBAL VARIABLES
19//**************************************************************************
20
21const device_type DMV_K233 = &device_creator<dmv_k233_device>;
22
23//**************************************************************************
24//  LIVE DEVICE
25//**************************************************************************
26
27//-------------------------------------------------
28//  dmv_k233_device - constructor
29//-------------------------------------------------
30
31dmv_k233_device::dmv_k233_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
32      : device_t(mconfig, DMV_K233, "K233 16K Shared RAM", tag, owner, clock, "dmv_k233", __FILE__),
33      device_dmvslot_interface( mconfig, *this )
34{
35}
36
37//-------------------------------------------------
38//  device_start - device-specific startup
39//-------------------------------------------------
40
41void dmv_k233_device::device_start()
42{
43   m_ram = machine().memory().region_alloc( "sharedram", 0x4000, 1, ENDIANNESS_LITTLE )->base();
44}
45
46//-------------------------------------------------
47//  device_reset - device-specific reset
48//-------------------------------------------------
49
50void dmv_k233_device::device_reset()
51{
52   m_enabled = false;
53}
54
55void dmv_k233_device::io_write(address_space &space, int ifsel, offs_t offset, UINT8 data)
56{
57   if (ifsel == 1)
58      m_enabled = !m_enabled;
59}
60
61//-------------------------------------------------
62//  read
63//-------------------------------------------------
64
65bool dmv_k233_device::read(offs_t offset, UINT8 &data)
66{
67   if (m_enabled && offset >= 0xc000 && offset < 0x10000)
68   {
69      data = m_ram[offset & 0x3fff];
70      return true;
71   }
72
73   return false;
74}
75
76//-------------------------------------------------
77//  write
78//-------------------------------------------------
79
80bool dmv_k233_device::write(offs_t offset, UINT8 data)
81{
82   if (m_enabled && offset >= 0xc000 && offset < 0x10000)
83   {
84      m_ram[offset & 0x3fff] = data;
85      return true;
86   }
87
88   return false;
89}
Property changes on: trunk/src/emu/bus/dmv/k233.c
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/emu/bus/dmv/k230.h
r32247r32248
99#include "dmvbus.h"
1010#include "cpu/i86/i86.h"
1111
12// K234
13#include "cpu/m68000/m68000.h"
14
1215// K235
1316#include "cpu/nec/nec.h"
1417#include "machine/pic8259.h"
r32247r32248
4649
4750   // dmvcart_interface overrides
4851   virtual void hold_w(int state);
52   virtual void switch16_w(int state);
4953   virtual bool av16bit();
5054
51private:
55protected:
5256   required_device<cpu_device> m_maincpu;
53   required_memory_region      m_rom;
57   optional_memory_region      m_rom;
5458   dmvcart_slot_device *       m_bus;
5559   address_space *             m_io;
60   int                         m_switch16;
61   int                         m_hold;
5662};
5763
5864
r32247r32248
7076};
7177
7278
79// ======================> dmv_k234_device
80
81class dmv_k234_device :
82      public dmv_k230_device
83{
84public:
85   // construction/destruction
86   dmv_k234_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
87
88   DECLARE_READ8_MEMBER(snr_r);
89   DECLARE_WRITE8_MEMBER(snr_w);
90
91protected:
92   // optional information overrides
93   virtual const rom_entry *device_rom_region() const;
94   virtual machine_config_constructor device_mconfig_additions() const;
95
96   // device-level overrides
97   virtual void device_start();
98   virtual void device_reset();
99
100   // dmvcart_interface overrides
101   virtual void hold_w(int state);
102   virtual void switch16_w(int state);
103
104private:
105   int                         m_snr;
106};
107
108
73109// ======================> dmv_k235_device
74110
75111class dmv_k235_device :
r32247r32248
100136// device type definition
101137extern const device_type DMV_K230;
102138extern const device_type DMV_K231;
139extern const device_type DMV_K234;
103140extern const device_type DMV_K235;
104141
105142#endif  /* __DMV_K230_H__ */
trunk/src/emu/bus/bus.mak
r32247r32248
270270BUSOBJS += $(BUSOBJ)/dmv/dmvbus.o
271271BUSOBJS += $(BUSOBJ)/dmv/k220.o
272272BUSOBJS += $(BUSOBJ)/dmv/k230.o
273BUSOBJS += $(BUSOBJ)/dmv/k233.o
273274BUSOBJS += $(BUSOBJ)/dmv/k806.o
274275BUSOBJS += $(BUSOBJ)/dmv/ram.o
275276endif
trunk/src/mess/drivers/dmv.c
r32247r32248
2424#include "bus/dmv/dmvbus.h"
2525#include "bus/dmv/k220.h"
2626#include "bus/dmv/k230.h"
27#include "bus/dmv/k233.h"
2728#include "bus/dmv/k806.h"
2829#include "bus/dmv/ram.h"
2930
r32247r32248
100101   DECLARE_READ8_MEMBER(sys_status_r);
101102   DECLARE_WRITE8_MEMBER(tc_set_w);
102103   DECLARE_WRITE8_MEMBER(switch16_w);
104   DECLARE_READ8_MEMBER(ramsel_r);
105   DECLARE_READ8_MEMBER(romsel_r);
103106   DECLARE_WRITE8_MEMBER(ramsel_w);
104107   DECLARE_WRITE8_MEMBER(romsel_w);
105108   DECLARE_READ8_MEMBER(kb_mcu_port1_r);
r32247r32248
110113   DECLARE_WRITE8_MEMBER(program_w);
111114   DECLARE_READ8_MEMBER(exp_program_r);
112115   DECLARE_WRITE8_MEMBER(exp_program_w);
116   DECLARE_WRITE_LINE_MEMBER(thold7_w);
117   DECLARE_WRITE_LINE_MEMBER(busint_w);
113118   DECLARE_FLOPPY_FORMATS( floppy_formats );
114119
115120   UINT8 program_read(address_space &space, int cas, offs_t offset);
r32247r32248
133138
134139   bool        m_ramoutdis;
135140   int         m_switch16;
141   int         m_thold7;
136142   int         m_dma_hrq;
137143   int         m_ram_bank;
138144   bool        m_color_mode;
r32247r32248
173179      output_set_led_value(8-i, BIT(data, i));
174180}
175181
182READ8_MEMBER(dmv_state::ramsel_r)
183{
184   m_ramoutdis = false;
185   return 0;
186}
187
188READ8_MEMBER(dmv_state::romsel_r)
189{
190   m_ramoutdis = true;
191   return 0;
192}
193
176194WRITE8_MEMBER(dmv_state::ramsel_w)
177195{
178196   m_ramoutdis = false;
r32247r32248
348366   return program_read(space, m_ram_bank, offset);
349367}
350368
369WRITE_LINE_MEMBER( dmv_state::thold7_w )
370{
371   if (m_thold7 != state)
372   {
373      m_thold7 = state;
374      update_halt_line();
375   }
376}
377
378WRITE_LINE_MEMBER( dmv_state::busint_w )
379{
380   m_slot7a->irq2_w(state);
381   m_slot7->irq2_w(state);
382}
383
351384void dmv_state::program_write(address_space &space, int cas, offs_t offset, UINT8 data)
352385{
353386   bool tramd = false;
r32247r32248
399432   ADDRESS_MAP_UNMAP_HIGH
400433   ADDRESS_MAP_GLOBAL_MASK(0xff)
401434   AM_RANGE(0x00, 0x00) AM_WRITE(leds_w)
402   AM_RANGE(0x10, 0x10) AM_WRITE(ramsel_w)
403   AM_RANGE(0x11, 0x11) AM_WRITE(romsel_w)
435   AM_RANGE(0x10, 0x10) AM_READWRITE(ramsel_r, ramsel_w)
436   AM_RANGE(0x11, 0x11) AM_READWRITE(romsel_r, romsel_w)
404437   AM_RANGE(0x12, 0x12) AM_WRITE(tc_set_w)
405438   AM_RANGE(0x13, 0x13) AM_READ(sys_status_r)
406439   AM_RANGE(0x14, 0x14) AM_WRITE(fdd_motor_w)
r32247r32248
470503   m_sd_poll_state = 0;
471504   m_floppy_motor = 1;
472505   m_switch16 = 0;
506   m_thold7 = 0;
473507   m_dma_hrq = 0;
474508
475509   update_halt_line();
r32247r32248
477511
478512void dmv_state::update_halt_line()
479513{
480   m_slot7->hold_w(!m_switch16 || m_dma_hrq ? ASSERT_LINE : CLEAR_LINE);
481   m_slot7a->hold_w(!m_switch16 || m_dma_hrq ? ASSERT_LINE : CLEAR_LINE);
482   m_maincpu->set_input_line(INPUT_LINE_HALT, m_switch16 || m_dma_hrq ? ASSERT_LINE : CLEAR_LINE);
514   m_slot7->hold_w(m_dma_hrq);
515   m_slot7->switch16_w(m_switch16);
516   m_slot7a->hold_w(m_dma_hrq);
517   m_slot7a->switch16_w(m_switch16);
518
519   m_maincpu->set_input_line(INPUT_LINE_HALT, (m_thold7 || m_switch16 || m_dma_hrq) ? ASSERT_LINE : CLEAR_LINE);
483520}
484521
485522/* F4 Character Displayer */
r32247r32248
568605SLOT_INTERFACE_END
569606
570607static SLOT_INTERFACE_START(dmv_slot2_6)
608   SLOT_INTERFACE("k233", DMV_K233)            // K233 16K Shared RAM
571609   SLOT_INTERFACE("k806", DMV_K806)            // K806 Mouse module
572610SLOT_INTERFACE_END
573611
574612static SLOT_INTERFACE_START(dmv_slot7)
575613   SLOT_INTERFACE("k220", DMV_K220)            // K220 Diagnostic Module
576614   SLOT_INTERFACE("k231", DMV_K231)            // K231 External 8088 module without interrupt controller
615   SLOT_INTERFACE("k234", DMV_K234)            // K234 External 68008 module
577616SLOT_INTERFACE_END
578617
579618
r32247r32248
667706   MCFG_DEVICE_ADD("slot7", DMVCART_SLOT, 0)
668707   MCFG_DEVICE_SLOT_INTERFACE(dmv_slot7, NULL, false)
669708   MCFG_DMVCART_SLOT_PROGRAM_READWRITE_CB(READ8(dmv_state, exp_program_r), WRITE8(dmv_state, exp_program_w))
709   MCFG_DMVCART_SLOT_OUT_THOLD_CB(WRITELINE(dmv_state, thold7_w))
710   MCFG_DMVCART_SLOT_OUT_IRQ_CB(WRITELINE(dmv_state, busint_w))
670711   MCFG_DEVICE_ADD("slot7a", DMVCART_SLOT, 0)
671712   MCFG_DEVICE_SLOT_INTERFACE(dmv_slot7a, "k230", false)
672713   MCFG_DMVCART_SLOT_PROGRAM_READWRITE_CB(READ8(dmv_state, exp_program_r), WRITE8(dmv_state, exp_program_w))
714   MCFG_DMVCART_SLOT_OUT_THOLD_CB(WRITELINE(dmv_state, thold7_w))
715   MCFG_DMVCART_SLOT_OUT_IRQ_CB(WRITELINE(dmv_state, busint_w))
673716
674717MACHINE_CONFIG_END
675718

Previous 199869 Revisions Next


© 1997-2024 The MAME Team