Previous 199869 Revisions Next

r31623 Tuesday 12th August, 2014 at 06:08:13 UTC by Robbbert
allied.c : WIP
[src/mame]mame.mak
[src/mame/drivers]allied.c
[src/mame/layout]allied.lay*

trunk/src/mame/mame.mak
r31622r31623
24602460
24612461$(DRIVERS)/acefruit.o:  $(LAYOUT)/sidewndr.lh
24622462
2463$(DRIVERS)/allied.o:    $(LAYOUT)/allied.lh
2464
24632465$(DRIVERS)/amaticmg.o:  $(LAYOUT)/suprstar.lh
24642466
24652467$(DRIVERS)/ampoker2.o:  $(LAYOUT)/ampoker2.lh \
trunk/src/mame/layout/allied.lay
r0r31623
1<!-- Allied copied from gp_1.lay -->
2
3<!-- 2014-08-12: Initial version.  [Robbbert] -->
4
5<mamelayout version="2">
6
7   <element name="digit" defstate="0">
8      <led7seg>
9         <color red="1.0" green="0.25" blue="0.0" />
10      </led7seg>
11   </element>
12   <element name="red_led">
13      <disk><color red="1.0" green="0.0" blue="0.0" /></disk>
14   </element>
15   <element name="background">
16      <rect>
17         <bounds left="0" top="0" right="1" bottom="1" />
18         <color red="0.0" green="0.0" blue="0.0" />
19      </rect>
20   </element>
21   <element name="P0"><text string="Ball / Match"><color red="1.0" green="1.0" blue="1.0" /></text></element>
22   <element name="P1"><text string="Credits"><color red="1.0" green="1.0" blue="1.0" /></text></element>
23   <element name="P2"><text string="Players"><color red="1.0" green="1.0" blue="1.0" /></text></element>
24   <element name="P3"><text string="Player 1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
25   <element name="P4"><text string="Player 2"><color red="1.0" green="1.0" blue="1.0" /></text></element>
26   <element name="P5"><text string="Player 3"><color red="1.0" green="1.0" blue="1.0" /></text></element>
27   <element name="P6"><text string="Player 4"><color red="1.0" green="1.0" blue="1.0" /></text></element>
28
29   <view name="Default Layout">
30
31      <!-- Background -->
32      <backdrop element="background">
33         <bounds left="0" top="20" right="274" bottom="394" />
34      </backdrop>
35
36      <!-- LEDs -->
37
38      <!-- Player 1 Score -->
39
40      <bezel name="digit5" element="digit">
41         <bounds left="10" top="45" right="44" bottom="84" />
42      </bezel>
43      <bezel name="digit4" element="digit">
44         <bounds left="54" top="45" right="88" bottom="84" />
45      </bezel>
46      <bezel name="digit3" element="digit">
47         <bounds left="98" top="45" right="132" bottom="84" />
48      </bezel>
49      <bezel name="digit2" element="digit">
50         <bounds left="142" top="45" right="176" bottom="84" />
51      </bezel>
52      <bezel name="digit1" element="digit">
53         <bounds left="186" top="45" right="220" bottom="84" />
54      </bezel>
55      <bezel name="digit0" element="digit">
56         <bounds left="230" top="45" right="264" bottom="84" />
57      </bezel>
58
59      <!-- Player 2 Score -->
60      <bezel name="digit15" element="digit">
61         <bounds left="10" top="105" right="44" bottom="144" />
62      </bezel>
63      <bezel name="digit14" element="digit">
64         <bounds left="54" top="105" right="88" bottom="144" />
65      </bezel>
66      <bezel name="digit13" element="digit">
67         <bounds left="98" top="105" right="132" bottom="144" />
68      </bezel>
69      <bezel name="digit12" element="digit">
70         <bounds left="142" top="105" right="176" bottom="144" />
71      </bezel>
72      <bezel name="digit11" element="digit">
73         <bounds left="186" top="105" right="220" bottom="144" />
74      </bezel>
75      <bezel name="digit10" element="digit">
76         <bounds left="230" top="105" right="264" bottom="144" />
77      </bezel>
78
79      <!-- Player 3 Score -->
80      <bezel name="digit25" element="digit">
81         <bounds left="10" top="165" right="44" bottom="204" />
82      </bezel>
83      <bezel name="digit24" element="digit">
84         <bounds left="54" top="165" right="88" bottom="204" />
85      </bezel>
86      <bezel name="digit23" element="digit">
87         <bounds left="98" top="165" right="132" bottom="204" />
88      </bezel>
89      <bezel name="digit22" element="digit">
90         <bounds left="142" top="165" right="176" bottom="204" />
91      </bezel>
92      <bezel name="digit21" element="digit">
93         <bounds left="186" top="165" right="220" bottom="204" />
94      </bezel>
95      <bezel name="digit20" element="digit">
96         <bounds left="230" top="165" right="264" bottom="204" />
97      </bezel>
98
99      <!-- Player 4 Score -->
100      <bezel name="digit35" element="digit">
101         <bounds left="10" top="225" right="44" bottom="264" />
102      </bezel>
103      <bezel name="digit34" element="digit">
104         <bounds left="54" top="225" right="88" bottom="264" />
105      </bezel>
106      <bezel name="digit33" element="digit">
107         <bounds left="98" top="225" right="132" bottom="264" />
108      </bezel>
109      <bezel name="digit32" element="digit">
110         <bounds left="142" top="225" right="176" bottom="264" />
111      </bezel>
112      <bezel name="digit31" element="digit">
113         <bounds left="186" top="225" right="220" bottom="264" />
114      </bezel>
115      <bezel name="digit30" element="digit">
116         <bounds left="230" top="225" right="264" bottom="264" />
117      </bezel>
118
119      <!-- Credits and Balls -->
120      <bezel name="digit45" element="digit">
121         <bounds left="39" top="345" right="73" bottom="384" />
122      </bezel>
123      <bezel name="digit44" element="digit">
124         <bounds left="110" top="345" right="144" bottom="384" />
125      </bezel>
126      <bezel name="digit43" element="digit">
127         <bounds left="171" top="345" right="205" bottom="384" />
128      </bezel>
129      <bezel name="digit42" element="digit">
130         <bounds left="210" top="345" right="244" bottom="384" />
131      </bezel>
132      <bezel element="P2"><bounds left="100" right="158" top="330" bottom="342" /></bezel>
133      <bezel element="P1"><bounds left="200" right="258" top="330" bottom="342" /></bezel>
134      <bezel element="P0"><bounds left="30" right="88" top="330" bottom="342" /></bezel>
135      <bezel name="text3" element="P3"><bounds left="100" right="180" top="30" bottom="42" /></bezel>
136      <bezel name="text2" element="P4"><bounds left="100" right="180" top="90" bottom="102" /></bezel>
137      <bezel name="text1" element="P5"><bounds left="100" right="180" top="150" bottom="162" /></bezel>
138      <bezel name="text0" element="P6"><bounds left="100" right="180" top="210" bottom="222" /></bezel>
139      <bezel name="led0" element="red_led">
140         <bounds left="10" right="25" top="360" bottom="375" /></bezel>
141   </view>
142</mamelayout>
Property changes on: trunk/src/mame/layout/allied.lay
Added: svn:eol-style
   + native
Added: svn:mime-type
   + text/plain
trunk/src/mame/drivers/allied.c
r31622r31623
11/**************************************************************************
22
3  PINBALL
34  Allied Leisure Cocktail Pinball
45  All tables use the same base roms and some playfields even interchange
56  between games.
67
8  6504 CPU, 3x R6530 RRIOT, 5x R6520 PIA
9  It is assumed that the R6530 is the same as MOS6530, and the R6520 is
10  the same as MC6821.
11
12  The schematic is too blurry to make out much detail, so used PinMAME
13  for the PIA connections.
14
15  The display units use 74164 serial units, with clock and data lines
16  sufficient for all the digits of one player. Data = IC2,PB7, while
17  Clock is IC2,CB2. To prevent display garbage, the new data is stored
18  while IC4PBx is high, then displayed when the line goes low. IC7portB
19  selects which player's display to update.
20
21  For some reason the 'rol $46' instruction outputs the original data
22  followed by the new result, so I've had to employ a horrible hack.
23
724***************************************************************************/
825
9#include "emu.h"
26#include "machine/genpin.h"
1027#include "cpu/m6502/m6504.h"
28#include "machine/mos6530.h"
29#include "machine/6821pia.h"
30#include "allied.lh"
1131
12class allied_state : public driver_device
32class allied_state : public genpin_class
1333{
1434public:
1535   allied_state(const machine_config &mconfig, device_type type, const char *tag)
16      : driver_device(mconfig, type, tag),
17         m_maincpu(*this, "maincpu")
36      : genpin_class(mconfig, type, tag)
37      , m_maincpu(*this, "maincpu")
1838   { }
1939
20protected:
21
22   // devices
23   required_device<cpu_device> m_maincpu;
24
25   // driver_device overrides
40   DECLARE_DRIVER_INIT(allied);
41   DECLARE_WRITE8_MEMBER(ic2_b_w);
42   DECLARE_WRITE_LINE_MEMBER(ic2_cb2_w);
43   DECLARE_WRITE8_MEMBER(ic3_b_w);
44   DECLARE_WRITE8_MEMBER(ic4_b_w);
45   DECLARE_WRITE_LINE_MEMBER(ic4_cb2_w);
46   DECLARE_WRITE8_MEMBER(ic5_b_w);
47   DECLARE_WRITE8_MEMBER(ic6_b_w);
48   DECLARE_WRITE8_MEMBER(ic7_b_w);
49   DECLARE_WRITE8_MEMBER(ic8_a_w);
50   DECLARE_WRITE8_MEMBER(ic8_b_w);
51private:
52   UINT32 m_player_score[6];
53   UINT8 m_display;
54   UINT8 m_bit_counter;
55   bool m_disp_data;
2656   virtual void machine_reset();
27public:
28   DECLARE_DRIVER_INIT(allied);
57   required_device<m6504_device> m_maincpu;
2958};
3059
3160
3261static ADDRESS_MAP_START( allied_map, AS_PROGRAM, 8, allied_state )
33   AM_RANGE(0x0000, 0x0fff) AM_RAM
62   AM_RANGE(0x0000, 0x003f) AM_RAM // ic6
63   AM_RANGE(0x0044, 0x0047) AM_DEVREADWRITE("ic2", pia6821_device, read, write)
64   AM_RANGE(0x0048, 0x004b) AM_DEVREADWRITE("ic1", pia6821_device, read, write)
65   AM_RANGE(0x0050, 0x0053) AM_DEVREADWRITE("ic7", pia6821_device, read, write)
66   AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE("ic4", pia6821_device, read, write)
67   AM_RANGE(0x0080, 0x008f) AM_DEVREADWRITE("ic5", mos6530_device, read, write)
68   AM_RANGE(0x0840, 0x084f) AM_DEVREADWRITE("ic6", mos6530_device, read, write)
69   AM_RANGE(0x00c0, 0x00c3) AM_DEVREADWRITE("ic8", pia6821_device, read, write)
70   AM_RANGE(0x0100, 0x013f) AM_RAM // ic5
3471   AM_RANGE(0x1400, 0x1fff) AM_ROM
3572ADDRESS_MAP_END
3673
3774static INPUT_PORTS_START( allied )
3875INPUT_PORTS_END
3976
77WRITE8_MEMBER( allied_state::ic2_b_w )
78{
79   //printf("%s:IC2B:%X ",machine().describe_context(),data);
80   m_disp_data = !BIT(data, 7);
81}
82
83WRITE_LINE_MEMBER( allied_state::ic2_cb2_w )
84{
85   if ((m_display) && (!state))
86   {
87      m_bit_counter++;
88      if BIT(m_bit_counter, 0)
89         m_player_score[m_display-1] = (m_player_score[m_display-1] << 1) | m_disp_data;
90      if (m_bit_counter == 15)
91         m_bit_counter = 0;
92   }
93}
94
95WRITE8_MEMBER( allied_state::ic3_b_w )
96{
97   m_maincpu->set_input_line(M6504_IRQ_LINE, BIT(data, 7) ? CLEAR_LINE : ASSERT_LINE );
98}
99
100WRITE8_MEMBER( allied_state::ic4_b_w )
101{
102   static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x69, 0x78, 0 }; // 7446A
103   UINT8 segment, i;
104   //printf("%s:IC4B:%X ",machine().describe_context(),data);
105   for (i = 0; i < 4; i++)
106   {
107      if (!BIT(data, i+4))
108      {
109         output_set_digit_value(i*10, patterns[0]);
110         segment = (m_player_score[i] >> 0) & 15;
111         output_set_digit_value(i*10+1, patterns[segment]);
112         segment = (m_player_score[i] >> 4) & 15;
113         output_set_digit_value(i*10+2, patterns[segment]);
114         segment = (m_player_score[i] >> 8) & 15;
115         output_set_digit_value(i*10+3, patterns[segment]);
116         segment = (m_player_score[i] >> 12) & 15;
117         output_set_digit_value(i*10+4, patterns[segment]);
118         segment = (m_player_score[i] >> 16) & 15;
119         output_set_digit_value(i*10+5, patterns[segment]);
120      }
121   }
122}
123
124WRITE_LINE_MEMBER( allied_state::ic4_cb2_w )
125{
126}
127
128// cabinet solenoids
129WRITE8_MEMBER( allied_state::ic5_b_w )
130{
131   if (!BIT(data, 2)) // chime C
132      m_samples->start(1, 1);
133
134   if (!BIT(data, 3)) // chime B
135      m_samples->start(2, 2);
136
137   if (!BIT(data, 4)) // chime A
138      m_samples->start(3, 3); // tens have highest tone
139
140   if (!BIT(data, 5)) // knocker
141      m_samples->start(0, 6);
142
143   m_maincpu->set_input_line(M6504_IRQ_LINE, BIT(data, 7) ? CLEAR_LINE : ASSERT_LINE );
144}
145
146WRITE8_MEMBER( allied_state::ic6_b_w )
147{
148   m_maincpu->set_input_line(M6504_IRQ_LINE, BIT(data, 7) ? CLEAR_LINE : ASSERT_LINE );
149}
150
151WRITE8_MEMBER( allied_state::ic7_b_w )
152{
153   //if (m_display) printf(" %X=%X",m_display,m_player_score[m_display-1]>>1);
154   //printf("%s:IC7B:%X ",machine().describe_context(),data);
155   m_display = data >> 4;
156   if (m_display > 5)
157      m_display = 0;
158   m_bit_counter = 0;
159}
160
161// playfield solenoids
162WRITE8_MEMBER( allied_state::ic8_a_w )
163{
164   if ((data & 0x07) < 0x07) // 3 bumpers
165      m_samples->start(0, 0);
166
167   if ((data & 0x60) < 0x60) // slings
168      m_samples->start(0, 7);
169
170   if (!BIT(data, 7)) // outhole
171      m_samples->start(0, 5);
172}
173
174// PB0-4 = ball 1-5 LED; PB5 = shoot again lamp
175WRITE8_MEMBER( allied_state::ic8_b_w )
176{
177   //printf("%s:IC8B:%X ",machine().describe_context(),data);
178}
179
40180void allied_state::machine_reset()
41181{
42182}
r31622r31623
49189   /* basic machine hardware */
50190   MCFG_CPU_ADD("maincpu", M6504, 3572549/4)
51191   MCFG_CPU_PROGRAM_MAP(allied_map)
192
193   /* Video */
194   MCFG_DEFAULT_LAYOUT(layout_allied)
195
196   /* Sound */
197   MCFG_FRAGMENT_ADD( genpin_audio )
198
199   /* Devices */
200   MCFG_DEVICE_ADD("ic1", PIA6821, 0)
201   //MCFG_PIA_READPA_HANDLER(READ8(allied_state, ic1_a_r))
202   //MCFG_PIA_WRITEPA_HANDLER(WRITE8(allied_state, ic1_a_w))
203   //MCFG_PIA_READPB_HANDLER(READ8(allied_state, ic1_b_r))
204   //MCFG_PIA_WRITEPB_HANDLER(WRITE8(allied_state, ic1_b_w))
205   //MCFG_PIA_CA2_HANDLER(WRITELINE(allied_state, ic1_ca2_w))
206   //MCFG_PIA_CB2_HANDLER(WRITELINE(allied_state, ic1_cb2_w))
207   MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("maincpu", m6504_device, irq_line))
208   MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("maincpu", m6504_device, irq_line))
209
210   MCFG_DEVICE_ADD("ic2", PIA6821, 0)
211   //MCFG_PIA_READPA_HANDLER(READ8(allied_state, ic2_a_r))
212   //MCFG_PIA_WRITEPA_HANDLER(WRITE8(allied_state, ic2_a_w))
213   //MCFG_PIA_READPB_HANDLER(READ8(allied_state, ic2_b_r))
214   MCFG_PIA_WRITEPB_HANDLER(WRITE8(allied_state, ic2_b_w))
215   //MCFG_PIA_CA2_HANDLER(WRITELINE(allied_state, ic2_ca2_w))
216   MCFG_PIA_CB2_HANDLER(WRITELINE(allied_state, ic2_cb2_w))
217   MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("maincpu", m6504_device, irq_line))
218   MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("maincpu", m6504_device, irq_line))
219
220   MCFG_DEVICE_ADD("ic4", PIA6821, 0)
221   //MCFG_PIA_READPA_HANDLER(READ8(allied_state, ic4_a_r))
222   //MCFG_PIA_WRITEPA_HANDLER(WRITE8(allied_state, ic4_a_w))
223   //MCFG_PIA_READPB_HANDLER(READ8(allied_state, ic4_b_r))
224   MCFG_PIA_WRITEPB_HANDLER(WRITE8(allied_state, ic4_b_w))
225   //MCFG_PIA_CA2_HANDLER(WRITELINE(allied_state, ic4_ca2_w))
226   MCFG_PIA_CB2_HANDLER(WRITELINE(allied_state, ic4_cb2_w))
227   MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("maincpu", m6504_device, irq_line))
228   MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("maincpu", m6504_device, irq_line))
229
230   MCFG_DEVICE_ADD("ic7", PIA6821, 0)
231   //MCFG_PIA_READPA_HANDLER(READ8(allied_state, ic7_a_r))
232   //MCFG_PIA_WRITEPA_HANDLER(WRITE8(allied_state, ic7_a_w))
233   //MCFG_PIA_READPB_HANDLER(READ8(allied_state, ic7_b_r))
234   MCFG_PIA_WRITEPB_HANDLER(WRITE8(allied_state, ic7_b_w))
235   //MCFG_PIA_CA2_HANDLER(WRITELINE(allied_state, ic7_ca2_w))
236   //MCFG_PIA_CB2_HANDLER(WRITELINE(allied_state, ic7_cb2_w))
237   MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("maincpu", m6504_device, irq_line))
238   MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("maincpu", m6504_device, irq_line))
239
240   MCFG_DEVICE_ADD("ic8", PIA6821, 0)
241   //MCFG_PIA_READPA_HANDLER(READ8(allied_state, ic8_a_r))
242   MCFG_PIA_WRITEPA_HANDLER(WRITE8(allied_state, ic8_a_w))
243   //MCFG_PIA_READPB_HANDLER(READ8(allied_state, ic8_b_r))
244   MCFG_PIA_WRITEPB_HANDLER(WRITE8(allied_state, ic8_b_w))
245   //MCFG_PIA_CA2_HANDLER(WRITELINE(allied_state, ic8_ca2_w))
246   //MCFG_PIA_CB2_HANDLER(WRITELINE(allied_state, ic8_cb2_w))
247   MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("maincpu", m6504_device, irq_line))
248   MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("maincpu", m6504_device, irq_line))
249
250   MCFG_DEVICE_ADD("ic3", MOS6530, 3572549/4) // unknown where the ram and i/o is located
251   MCFG_MOS6530_OUT_PB_CB(WRITE8(allied_state, ic3_b_w))
252
253   MCFG_DEVICE_ADD("ic5", MOS6530, 3572549/4)
254   //MCFG_MOS6530_IN_PA_CB(READ8(allied_state, ic5_a_r))
255   //MCFG_MOS6530_OUT_PA_CB(WRITE8(allied_state, ic5_a_w))
256   //MCFG_MOS6530_IN_PB_CB(READ8(allied_state, ic5_b_r))
257   MCFG_MOS6530_OUT_PB_CB(WRITE8(allied_state, ic5_b_w))
258
259   MCFG_DEVICE_ADD("ic6", MOS6530, 3572549/4)
260   //MCFG_MOS6530_IN_PA_CB(READ8(allied_state, ic6_a_r))
261   //MCFG_MOS6530_OUT_PA_CB(WRITE8(allied_state, ic6_a_w))
262   //MCFG_MOS6530_IN_PB_CB(READ8(allied_state, ic6_b_r))
263   MCFG_MOS6530_OUT_PB_CB(WRITE8(allied_state, ic6_b_w))
52264MACHINE_CONFIG_END
53265
54266
55267ROM_START( allied )
56268   ROM_REGION( 0x2000, "maincpu", 0 )
57   ROM_LOAD( "alliedu5.bin", 0x1400, 0x0400, CRC(e4fb64fb) SHA1(a3d9de7cbfb42180a860e0bbbeaeba96d8bd1e20))
58   ROM_LOAD( "alliedu6.bin", 0x1800, 0x0400, CRC(dca980dd) SHA1(3817d75413854d889fc1ce4fd6a51d820d1e0534))
59   ROM_LOAD( "alliedu3.bin", 0x1c00, 0x0400, CRC(13f42789) SHA1(baa0f73fda08a3c5d6f1423fb329e4febb07ef97))
269   ROM_LOAD( "r6530-009.u5", 0x1400, 0x0400, CRC(e4fb64fb) SHA1(a3d9de7cbfb42180a860e0bbbeaeba96d8bd1e20))
270   ROM_LOAD( "r6530-010.u6", 0x1800, 0x0400, CRC(dca980dd) SHA1(3817d75413854d889fc1ce4fd6a51d820d1e0534))
271   ROM_LOAD( "r6530-011.u3", 0x1c00, 0x0400, CRC(13f42789) SHA1(baa0f73fda08a3c5d6f1423fb329e4febb07ef97))
60272ROM_END
61273
62274#define rom_suprpick    rom_allied

Previous 199869 Revisions Next


© 1997-2024 The MAME Team