Previous 199869 Revisions Next

r22879 Friday 17th May, 2013 at 21:40:18 UTC by Carl
fruitpc: add inputs [Carl, R.Belmont]
[src/mame/drivers]fruitpc.c

trunk/src/mame/drivers/fruitpc.c
r22878r22879
1212
1313#include "emu.h"
1414#include "cpu/i386/i386.h"
15#include "machine/8237dma.h"
15#include "machine/am9517a.h"
1616#include "machine/pic8259.h"
1717#include "machine/pit8253.h"
1818#include "machine/mc146818.h"
r22878r22879
2828public:
2929   fruitpc_state(const machine_config &mconfig, device_type type, const char *tag)
3030      : driver_device(mconfig, type, tag),
31         m_maincpu(*this, "maincpu")
31         m_pit8254(*this,"pit8254"),
32         m_pic8259_1(*this,"pic8259_1"),
33         m_pic8259_2(*this,"pic8259_2"),
34         m_dma8237_1(*this,"dma8237_1") ,
35         m_dma8237_2(*this,"dma8237_2") ,
36         m_maincpu(*this, "maincpu"),
37         m_ide(*this, "ide"),
38         m_inp1(*this, "INP1"),
39         m_inp2(*this, "INP2"),
40         m_inp3(*this, "INP3"),
41         m_inp4(*this, "INP4")
3242         { }
3343
3444   int m_dma_channel;
3545   UINT8 m_dma_offset[2][4];
3646   UINT8 m_at_pages[0x10];
3747
38   device_t    *m_pit8254;
39   pic8259_device  *m_pic8259_1;
40   pic8259_device  *m_pic8259_2;
41   i8237_device    *m_dma8237_1;
42   i8237_device    *m_dma8237_2;
48   required_device<pit8254_device> m_pit8254;
49   required_device<pic8259_device> m_pic8259_1;
50   required_device<pic8259_device> m_pic8259_2;
51   required_device<am9517a_device> m_dma8237_1;
52   required_device<am9517a_device> m_dma8237_2;
53   required_device<cpu_device> m_maincpu;
54   required_device<ide_controller_device> m_ide;
4355
44   required_device<cpu_device> m_maincpu;
56   required_ioport m_inp1;
57   required_ioport m_inp2;
58   required_ioport m_inp3;
59   required_ioport m_inp4;
60
4561   DECLARE_READ8_MEMBER(at_page8_r);
4662   DECLARE_WRITE8_MEMBER(at_page8_w);
4763   DECLARE_READ8_MEMBER(pc_dma_read_byte);
r22878r22879
6177   DECLARE_READ8_MEMBER(get_slave_ack);
6278   DECLARE_DRIVER_INIT(fruitpc);
6379   DECLARE_READ8_MEMBER(get_out2);
80   DECLARE_READ8_MEMBER(fruit_inp_r);
6481   virtual void machine_start();
6582   virtual void machine_reset();
6683   IRQ_CALLBACK_MEMBER(irq_callback);
r22878r22879
7188
7289READ8_MEMBER(fruitpc_state::at_dma8237_2_r)
7390{
74   return m_dma8237_2->i8237_r(space, offset / 2);
91   return m_dma8237_2->read(space, offset / 2);
7592}
7693
7794WRITE8_MEMBER(fruitpc_state::at_dma8237_2_w)
7895{
79   m_dma8237_2->i8237_w(space, offset / 2, data);
96   m_dma8237_2->write(space, offset / 2, data);
8097}
8198
8299READ8_MEMBER(fruitpc_state::at_page8_r)
r22878r22879
127144   m_maincpu->set_input_line(INPUT_LINE_HALT, state ? ASSERT_LINE : CLEAR_LINE);
128145
129146   /* Assert HLDA */
130   m_dma8237_1->i8237_hlda_w(state);
147   m_dma8237_1->hack_w(state);
131148}
132149
133150
r22878r22879
183200
184201READ32_MEMBER(fruitpc_state::ide_r)
185202{
186   device_t *device = machine().device("ide");
187   return ide_controller32_r(device, space, 0x1f0/4 + offset, mem_mask);
203   return ide_controller32_r(m_ide, space, 0x1f0/4 + offset, mem_mask);
188204}
189205
190206WRITE32_MEMBER(fruitpc_state::ide_w)
191207{
192   device_t *device = machine().device("ide");
193   ide_controller32_w(device, space, 0x1f0/4 + offset, data, mem_mask);
208   ide_controller32_w(m_ide, space, 0x1f0/4 + offset, data, mem_mask);
194209}
195210
196211READ32_MEMBER(fruitpc_state::fdc_r)
197212{
198   device_t *device = machine().device("ide");
199   return ide_controller32_r(device, space, 0x3f0/4 + offset, mem_mask);
213   return ide_controller32_r(m_ide, space, 0x3f0/4 + offset, mem_mask);
200214}
201215
202216WRITE32_MEMBER(fruitpc_state::fdc_w)
203217{
204   device_t *device = machine().device("ide");
205218   //mame_printf_debug("FDC: write %08X, %08X, %08X\n", data, offset, mem_mask);
206   ide_controller32_w(device, space, 0x3f0/4 + offset, data, mem_mask);
219   ide_controller32_w(m_ide, space, 0x3f0/4 + offset, data, mem_mask);
207220}
208221
222READ8_MEMBER(fruitpc_state::fruit_inp_r)
223{
224   switch(offset)
225   {
226      case 0:
227         return m_inp1->read();
228      case 1:
229         return m_inp2->read();
230      case 2:
231         return m_inp3->read();
232      case 3:
233         return m_inp4->read();
234   }
235   return 0;
236}
237
209238static ADDRESS_MAP_START( fruitpc_map, AS_PROGRAM, 32, fruitpc_state )
210239   AM_RANGE(0x00000000, 0x0009ffff) AM_RAM
211240   AM_RANGE(0x000a0000, 0x000bffff) AM_DEVREADWRITE8("vga", vga_device, mem_r, mem_w, 0xffffffff) // VGA VRAM
r22878r22879
217246ADDRESS_MAP_END
218247
219248static ADDRESS_MAP_START( fruitpc_io, AS_IO, 32, fruitpc_state )
220   AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff)
249   AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", am9517a_device, read, write, 0xffffffff)
221250   AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8("pic8259_1", pic8259_device, read, write, 0xffffffff)
222251   AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff)
223252   AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff)
r22878r22879
238267   AM_RANGE(0x02e0, 0x02ef) AM_NOP //To debug
239268   AM_RANGE(0x0278, 0x02ff) AM_NOP //To debug
240269   AM_RANGE(0x02f8, 0x02ff) AM_NOP //To debug
270   AM_RANGE(0x0310, 0x0313) AM_READ8(fruit_inp_r, 0xffffffff)
241271   AM_RANGE(0x0320, 0x038f) AM_NOP //To debug
242272   AM_RANGE(0x03a0, 0x03a7) AM_NOP //To debug
243273   AM_RANGE(0x03b0, 0x03bf) AM_DEVREADWRITE8("vga", vga_device, port_03b0_r, port_03b0_w, 0xffffffff)
r22878r22879
300330
301331   PORT_START("pc_keyboard_7")
302332
333   PORT_START("INP1")
334   PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
335   PORT_BIT( 0x00fe, IP_ACTIVE_LOW, IPT_UNKNOWN )
336   PORT_START("INP2")
337   PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
338   PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
339   PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
340   PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
341   PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
342   PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
343   PORT_BIT( 0x00c0, IP_ACTIVE_LOW, IPT_UNKNOWN )
344   PORT_START("INP3")
345   PORT_BIT( 0x0003, IP_ACTIVE_LOW, IPT_UNKNOWN )
346   PORT_DIPNAME( 0x0004, 0x0004, "CONFIGURATION" )
347   PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
348   PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
349   PORT_DIPNAME( 0x0008, 0x0008, "STATISTICHE" )
350   PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
351   PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
352   PORT_BIT( 0x00f0, IP_ACTIVE_HIGH, IPT_UNUSED )
353   PORT_START("INP4")
354   PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNKNOWN )
355/*
303356   PORT_START("IOCARD1")
304357   PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
305358   PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
r22878r22879
438491   PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
439492   PORT_DIPSETTING(    0x8000, DEF_STR( Off ) )
440493   PORT_DIPSETTING(    0x0000, DEF_STR( On ) )
494*/
441495INPUT_PORTS_END
442496#endif
443497
r22878r22879
449503void fruitpc_state::machine_start()
450504{
451505   m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(fruitpc_state::irq_callback),this));
452
453   m_pit8254 = machine().device( "pit8254" );
454   m_pic8259_1 = machine().device<pic8259_device>( "pic8259_1" );
455   m_pic8259_2 = machine().device<pic8259_device>( "pic8259_2" );
456   m_dma8237_1 = machine().device<i8237_device>( "dma8237_1" );
457   m_dma8237_2 = machine().device<i8237_device>( "dma8237_2" );
458506}
459507
460508/*************************************************************
r22878r22879
463511 *
464512 *************************************************************/
465513
466WRITE_LINE_MEMBER(fruitpc_state::fruitpc_pic8259_1_set_int_line)
467{
468   m_maincpu->set_input_line(0, state ? HOLD_LINE : CLEAR_LINE);
469}
470
471514READ8_MEMBER(fruitpc_state::get_slave_ack)
472515{
473516   if (offset==2) {
r22878r22879
531574   MCFG_PIT8254_ADD( "pit8254", fruitpc_pit8254_config )
532575   MCFG_I8237_ADD( "dma8237_1", XTAL_14_31818MHz/3, dma8237_1_config )
533576   MCFG_I8237_ADD( "dma8237_2", XTAL_14_31818MHz/3, dma8237_2_config )
534   MCFG_PIC8259_ADD( "pic8259_1", WRITELINE(fruitpc_state,fruitpc_pic8259_1_set_int_line), VCC, READ8(fruitpc_state,get_slave_ack) )
577   MCFG_PIC8259_ADD( "pic8259_1", INPUTLINE("maincpu", 0), VCC, READ8(fruitpc_state,get_slave_ack) )
535578   MCFG_PIC8259_ADD( "pic8259_2", DEVWRITELINE("pic8259_1", pic8259_device, ir2_w), GND, NULL )
536579   MCFG_IDE_CONTROLLER_ADD("ide", ide_devices, "hdd", NULL, true)
537580   MCFG_IDE_CONTROLLER_IRQ_HANDLER(DEVWRITELINE("pic8259_2", pic8259_device, ir6_w))

Previous 199869 Revisions Next


© 1997-2024 The MAME Team