Previous 199869 Revisions Next

r25466 Monday 30th September, 2013 at 19:04:23 UTC by James Wallace
Added some more meter communication to System 5 and MPS, games should complain about less now [J. Wallace]
[src/mame]mame.mak
[src/mame/drivers]jpmmps.c jpmsys5.c
[src/mame/includes]jpmsys5.h

trunk/src/mame/mame.mak
r25465r25466
24322432
24332433$(DRIVERS)/jpmimpct.o:  $(LAYOUT)/jpmimpct.lh
24342434
2435$(DRIVERS)/jpmmps.o:   $(LAYOUT)/jpmmps.lh
2436
24352437$(DRIVERS)/jpmsys5.o:   $(LAYOUT)/jpmsys5.lh
24362438
24372439$(DRIVERS)/kas89.o:     $(LAYOUT)/kas89.lh
trunk/src/mame/includes/jpmsys5.h
r25465r25466
11
22#include "cpu/m68000/m68000.h"
3#include "machine/6821pia.h"
34#include "machine/6840ptm.h"
45#include "machine/6850acia.h"
56#include "sound/2413intf.h"
r25465r25466
910#include "video/awpvid.h"
1011#include "machine/steppers.h"
1112#include "machine/roc10937.h"
13#include "machine/meters.h"
1214
1315class jpmsys5_state : public driver_device
1416{
r25465r25466
1820      m_maincpu(*this, "maincpu"),
1921      m_upd7759(*this, "upd7759"),
2022      m_tms34061(*this, "tms34061"),
21      m_vfd(*this, "vfd") { }
23      m_vfd(*this, "vfd"),
24      m_direct_port(*this, "DIRECT") { }
2225
2326   required_device<cpu_device> m_maincpu;
2427   required_device<upd7759_device> m_upd7759;
2528   optional_device<tms34061_device> m_tms34061;
2629   optional_device<roc10937_t> m_vfd;
30   required_ioport m_direct_port;
2731
2832   UINT8 m_palette[16][3];
2933   int m_pal_addr;
r25465r25466
3741   int m_mpxclk;
3842   int m_muxram[255];
3943   int m_alpha_clock;
44   int m_chop;
4045   UINT8 m_a0_acia_dcd;
4146   UINT8 m_a0_data_out;
4247   UINT8 m_a0_data_in;
r25465r25466
6065   DECLARE_READ16_MEMBER(jpm_upd7759_r);
6166   DECLARE_WRITE_LINE_MEMBER(ptm_irq);
6267   DECLARE_WRITE8_MEMBER(u26_o1_callback);
68   DECLARE_WRITE_LINE_MEMBER(pia_irq);
69   DECLARE_READ8_MEMBER(u29_porta_r);
70   DECLARE_WRITE8_MEMBER(u29_portb_w);
71   DECLARE_WRITE_LINE_MEMBER(u29_ca2_w);
72   DECLARE_WRITE_LINE_MEMBER(u29_cb2_w);
6373   DECLARE_WRITE_LINE_MEMBER(acia_irq);
6474   DECLARE_READ_LINE_MEMBER(a0_rx_r);
6575   DECLARE_WRITE_LINE_MEMBER(a0_tx_w);
trunk/src/mame/drivers/jpmmps.c
r25465r25466
3232#include "sound/sn76496.h"
3333#include "machine/i8255.h"
3434#include "machine/tms9902.h"
35#include "machine/meters.h"
36#include "jpmmps.lh"
3537
3638class jpmmps_state : public driver_device
3739{
3840public:
3941   jpmmps_state(const machine_config &mconfig, device_type type, const char *tag)
4042      : driver_device(mconfig, type, tag),
41         m_maincpu(*this, "maincpu")
43         m_maincpu(*this, "maincpu"),
44         m_psg(*this, "sn")
4245   { }
43
46   UINT8 m_sound_buffer;
47   UINT8 m_psg_latch;
4448protected:
4549
4650   // devices
4751   required_device<cpu_device> m_maincpu;
52   optional_device<sn76489_device> m_psg;
4853public:
4954   DECLARE_DRIVER_INIT(jpmmps);
55   DECLARE_WRITE8_MEMBER(jpmmps_meters_w);
56   DECLARE_WRITE8_MEMBER(jpmmps_psg_buf_w);
57   DECLARE_WRITE8_MEMBER(jpmmps_ic22_portc_w);
58   DECLARE_MACHINE_START(jpmmps);
5059};
5160
5261static ADDRESS_MAP_START( jpmmps_map, AS_PROGRAM, 8, jpmmps_state )
r25465r25466
8897static INPUT_PORTS_START( jpmmps )
8998INPUT_PORTS_END
9099
100WRITE8_MEMBER(jpmmps_state::jpmmps_meters_w)
101{
102   int meter=0;
103   for (meter = 0; meter < 8; meter ++)
104   {
105      MechMtr_update(meter, (data & (1 << meter)));
106   }
107}
108
109
91110static I8255_INTERFACE (ppi8255_intf_ic26)
92111{
93112   DEVCB_NULL,                     /* Port A read */
94113   DEVCB_NULL,                     /* Port A write */
95114   DEVCB_NULL,                     /* Port B read */
96   DEVCB_NULL,                     /* Port B write */
115   DEVCB_NULL,                     /* Port B write (0 is coin lockout) */
97116   DEVCB_NULL,                     /* Port C read */
98   DEVCB_NULL                      /* Port C write */
117   DEVCB_DRIVER_MEMBER(jpmmps_state,jpmmps_meters_w)                      /* Port C write meters */
99118};
100119
101120static I8255_INTERFACE (ppi8255_intf_ic21)
r25465r25466
108127   DEVCB_NULL                      /* Port C write */
109128};
110129
130
131WRITE8_MEMBER(jpmmps_state::jpmmps_psg_buf_w)
132{
133   m_sound_buffer = data;
134}
135
136WRITE8_MEMBER(jpmmps_state::jpmmps_ic22_portc_w)
137{
138   //Handle PSG
139   
140   if (m_psg_latch != (data & 0x04))
141   {
142      if (!m_psg_latch)//falling edge
143      {
144         m_psg->write(m_sound_buffer);
145      }
146   }
147   m_psg_latch = (data & 0x04);
148
149   MechMtr_update(8, (data & 0x08));
150
151}
152
111153static I8255_INTERFACE (ppi8255_intf_ic22)
112154{
113155   DEVCB_NULL,                     /* Port A read */
114156   DEVCB_NULL,                     /* Port A write */
115157   DEVCB_NULL,                     /* Port B read */
116   DEVCB_NULL,                     /* Port B write */
158   DEVCB_DRIVER_MEMBER(jpmmps_state,jpmmps_psg_buf_w),                /* Port B write (SN chip data)*/
117159   DEVCB_NULL,                     /* Port C read */
118   DEVCB_NULL                      /* Port C write */
160   DEVCB_DRIVER_MEMBER(jpmmps_state,jpmmps_ic22_portc_w)              /* Port C write (C3 is last meter, C2 latches in data) */
119161};
120162
121163static I8255_INTERFACE (ppi8255_intf_ic25)
r25465r25466
168210   DEVCB_NULL
169211};
170212
213MACHINE_START_MEMBER(jpmmps_state,jpmmps)
214{
215   /* setup 9 mechanical meters */
216   MechMtr_config(machine(),9);
171217
218}
219
172220static MACHINE_CONFIG_START( jpmmps, jpmmps_state )
173221
174222   /* basic machine hardware */
r25465r25466
184232   MCFG_TMS9902_ADD("tms9902_ic10", tms9902_uart4_ic10_params, DUART_CLOCK)
185233   MCFG_TMS9902_ADD("tms9902_ic5",  tms9902_uart2_ic5_params,  DUART_CLOCK)
186234
235   MCFG_MACHINE_START_OVERRIDE(jpmmps_state,jpmmps)
187236
188237   MCFG_SPEAKER_STANDARD_MONO("mono")
189238
190239   MCFG_SOUND_ADD("sn", SN76489, SOUND_CLOCK)
191240   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
192241   MCFG_SOUND_CONFIG(psg_intf)
193
242   MCFG_DEFAULT_LAYOUT(layout_jpmmps)
194243MACHINE_CONFIG_END
195244
196245DRIVER_INIT_MEMBER(jpmmps_state,jpmmps)
trunk/src/mame/drivers/jpmsys5.c
r25465r25466
66
77    driver by Phil Bennett
88
9   AWP bits J.Wallace, D. Haywood
10   
911    Video System Games supported:
1012        * Monopoly
1113        * Monopoly Classic
1214        * Monopoly Deluxe
1315
1416    Known Issues:
15        * Some features used by the AWP games such as reels and meters
16        are not emulated.
17        * Timing for reels, and other opto devices is controlled by the same clock
18        as the lamps, in a weird daisychain setup.
17        * Some features used by the AWP games such as reels are not emulated.
18        * Timing for reels, and other opto devices is controlled by a generated clock
19        in a weird daisychain setup.
1920
2021    AWP game notes:
2122      The byte at 0x81 of the EVEN 68k rom appears to be some kind of
r25465r25466
290291 *************************************/
291292
292293#define JPM_SYS5_COMMON_MAP \
294   ADDRESS_MAP_UNMAP_HIGH \
293295   AM_RANGE(0x000000, 0x01ffff) AM_ROM \
294296   AM_RANGE(0x040000, 0x043fff) AM_RAM AM_SHARE("nvram") \
295297   AM_RANGE(0x046000, 0x046001) AM_WRITENOP \
296298   AM_RANGE(0x046020, 0x046021) AM_DEVREADWRITE8("acia6850_0", acia6850_device, status_read, control_write, 0xff) \
297299   AM_RANGE(0x046022, 0x046023) AM_DEVREADWRITE8("acia6850_0", acia6850_device, data_read, data_write, 0xff) \
298300   AM_RANGE(0x046040, 0x04604f) AM_DEVREADWRITE8("6840ptm", ptm6840_device, read, write, 0xff) \
299   AM_RANGE(0x046060, 0x046061) AM_READ_PORT("DIRECT") AM_WRITENOP \
300   AM_RANGE(0x046062, 0x046063) AM_WRITENOP \
301   AM_RANGE(0x046064, 0x046065) AM_WRITENOP \
302   AM_RANGE(0x046066, 0x046067) AM_WRITENOP \
301   AM_RANGE(0x046060, 0x046067) AM_DEVREADWRITE8("6821pia", pia6821_device, read, write,0xff) \
303302   AM_RANGE(0x046080, 0x046081) AM_DEVREADWRITE8("acia6850_1", acia6850_device, status_read, control_write, 0xff) \
304303   AM_RANGE(0x046082, 0x046083) AM_DEVREADWRITE8("acia6850_1", acia6850_device, data_read, data_write, 0xff) \
305   AM_RANGE(0x046084, 0x046085) AM_READ(unk_r) /* PIA? */ \
306   AM_RANGE(0x046088, 0x046089) AM_READ(unk_r) /* PIA? */ \
307304   AM_RANGE(0x04608c, 0x04608d) AM_DEVREADWRITE8("acia6850_2", acia6850_device, status_read, control_write, 0xff) \
308305   AM_RANGE(0x04608e, 0x04608f) AM_DEVREADWRITE8("acia6850_2", acia6850_device, data_read, data_write, 0xff) \
309306   AM_RANGE(0x0460c0, 0x0460c1) AM_WRITENOP \
310307   AM_RANGE(0x048000, 0x04801f) AM_READWRITE(coins_r, coins_w) \
311308   AM_RANGE(0x04c000, 0x04c0ff) AM_READ(mux_r) AM_WRITE(mux_w)
312
309   
313310static ADDRESS_MAP_START( 68000_awp_map, AS_PROGRAM, 16, jpmsys5_state )
314311   JPM_SYS5_COMMON_MAP
315312   AM_RANGE(0x0460a0, 0x0460a3) AM_DEVWRITE8("ym2413", ym2413_device, write, 0x00ff)
r25465r25466
481478   PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(45) PORT_KEYDELTA(15)
482479INPUT_PORTS_END
483480
481/*************************************
482 *
483 *  6821 PIA
484 *
485 *************************************/
486WRITE_LINE_MEMBER(jpmsys5_state::pia_irq)
487{
488   m_maincpu->set_input_line(INT_6821PIA, state ? ASSERT_LINE : CLEAR_LINE);
489}
484490
491READ8_MEMBER(jpmsys5_state::u29_porta_r)
492{
493
494   int combined_meter = MechMtr_GetActivity(0) | MechMtr_GetActivity(1) |
495                     MechMtr_GetActivity(2) | MechMtr_GetActivity(3) |
496                     MechMtr_GetActivity(4) | MechMtr_GetActivity(5) |
497                     MechMtr_GetActivity(6) | MechMtr_GetActivity(7);
498
499   int meter_bit =0;
500   if(combined_meter)
501   {
502      meter_bit =  0x80;
503   }
504   else
505   {
506      meter_bit =  0x00;
507   }
508
509   return m_direct_port->read() | meter_bit;
510}
511
512WRITE8_MEMBER(jpmsys5_state::u29_portb_w)
513{
514   int meter =0;
515   for (meter = 0; meter < 8; meter ++)
516   {
517      MechMtr_update(meter, (data & (1 << meter)));
518   }
519}
520
521WRITE_LINE_MEMBER(jpmsys5_state::u29_ca2_w)
522{
523   //The 'CHOP' line controls power to the reel motors, without this the reels won't turn
524   m_chop = state;
525}
526
527WRITE_LINE_MEMBER(jpmsys5_state::u29_cb2_w)
528{
529   //On a cabinet, this overrides the volume, we don't emulate this yet
530   logerror("Alarm override enabled \n");
531}
532
533static const pia6821_interface pia_intf =
534{
535   DEVCB_DRIVER_MEMBER(jpmsys5_state,u29_porta_r),        /* port A in */
536   DEVCB_NULL,     /* port B in */
537   DEVCB_NULL,     /* line CA1 in */
538   DEVCB_NULL,     /* line CB1 in */
539   DEVCB_NULL,     /* line CA2 in */
540   DEVCB_NULL,     /* line CB2 in */
541   DEVCB_NULL,     /* port A out */
542   DEVCB_DRIVER_MEMBER(jpmsys5_state,u29_portb_w),        /* port B out */
543   DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,u29_ca2_w),         /* line CA2 out */
544   DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,u29_cb2_w),         /* port CB2 out */
545   DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,pia_irq),              /* IRQA */
546   DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,pia_irq)               /* IRQB */
547};
548
485549/*************************************
486550 *
487551 *  6840 PTM
r25465r25466
672736   MCFG_SOUND_ADD("upd7759", UPD7759, UPD7759_STANDARD_CLOCK)
673737   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
674738
675   /* Earlier revisions use an SAA1099 */
739   /* Earlier revisions use an SAA1099, but no video card games seem to (?) */
676740   MCFG_SOUND_ADD("ym2413", YM2413, 4000000 ) /* Unconfirmed */
677741   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
678742
743   MCFG_PIA6821_ADD("6821pia", pia_intf)
744
679745   /* 6840 PTM */
680746   MCFG_PTM6840_ADD("6840ptm", ptm_intf)
681747MACHINE_CONFIG_END
r25465r25466
747813   PORT_START("DSW2")
748814   PORT_BIT(0xFF, IP_ACTIVE_LOW, IPT_UNKNOWN)
749815
750   PORT_START("ROTARY")//not everything has this hooked up, cna be used as a test switch internally
816   PORT_START("ROTARY")//not everything has this hooked up, can be used as a test switch internally
751817   PORT_CONFNAME(0x0F, 0x0F, "Rotary Switch")
752818   PORT_CONFSETTING(   0x0F, "0")
753819   PORT_CONFSETTING(   0x0E, "1")
r25465r25466
782848   PORT_DIPNAME( 0x40, 0x40, "Reset" ) PORT_DIPLOCATION("SW1:1")
783849   PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
784850   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
785   PORT_DIPNAME( 0x80, 0x00, DEF_STR ( Unknown ) )
786   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
787   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
851   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SPECIAL )
788852
789853   PORT_START("COINS")
790854   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_NAME("10p")
r25465r25466
821885MACHINE_START_MEMBER(jpmsys5_state,jpmsys5)
822886{
823887//  membank("bank1")->set_base(memregion("maincpu")->base()+0x20000);
888
889   /* setup 8 mechanical meters */
890   MechMtr_config(machine(),8);
891
824892}
825893
826894MACHINE_RESET_MEMBER(jpmsys5_state,jpmsys5)
r25465r25466
859927   MCFG_SOUND_ADD("ym2413", YM2413, 4000000 ) /* Unconfirmed */
860928   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
861929
930   MCFG_PIA6821_ADD("6821pia", pia_intf)
931
862932   /* 6840 PTM */
863933   MCFG_PTM6840_ADD("6840ptm", ptm_intf)
864934   MCFG_DEFAULT_LAYOUT(layout_jpmsys5)
r25465r25466
886956   MCFG_SAA1099_ADD("saa", 4000000 /* guess */)
887957   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
888958
959   MCFG_PIA6821_ADD("6821pia", pia_intf)
960
889961   /* 6840 PTM */
890962   MCFG_PTM6840_ADD("6840ptm", ptm_intf)
891963   MCFG_DEFAULT_LAYOUT(layout_jpmsys5)

Previous 199869 Revisions Next


© 1997-2024 The MAME Team