Previous 199869 Revisions Next

r20218 Saturday 12th January, 2013 at 13:43:18 UTC by hap
many cleanups + added internal .lay
[src/mame/drivers]imolagp.c
[src/mame/layout]imolagp.lay

trunk/src/mame/drivers/imolagp.c
r20217r20218
11/***************************************************************************
2IMOLA GP by Alberici
32
4todo:
3  IMOLA GP by RB Bologna (Alberici?)
4
5TODO:
56- document remaining dips
6- bogus colors
7- need better mappings for accelerator/shifter
8- eliminate need for master-cpu communications hack
7- need better mappings for shifter, currently 3 buttons
8- improve analog steering
9- correct timing (cpu and video) - see sprites disappear partially
10- vreg[0xf] autosteering
11- verify colors
12
913========================================
1014www.andys-arcade.com
1115
r20217r20218
6973Andy Welburn
7074www.andys-arcade.com
7175
72Known issues:
73- the 8255 is not hooked up
7476***************************************************************************/
7577
7678#include "emu.h"
r20217r20218
8183#include "imolagp.lh"
8284
8385
84#define HLE_COM
85
86
8786class imolagp_state : public driver_device
8887{
8988public:
9089   imolagp_state(const machine_config &mconfig, device_type type, const char *tag)
9190      : driver_device(mconfig, type, tag),
92      m_maincpu(*this,"maincpu"),
93      m_slave_workram(*this, "slave_workram"){ }
91      m_maincpu(*this, "maincpu"),
92      m_slavecpu(*this, "slave")
93   { }
9494
9595   required_device<cpu_device> m_maincpu;
96   required_shared_ptr<UINT8> m_slave_workram; // used only ifdef HLE_COM
96   required_device<cpu_device> m_slavecpu;
9797
98#ifdef HLE_COM
99   UINT8 m_mComData[0x100];
100   int   m_mComCount;
101
102#else
103   UINT8 m_mLatchedData[2];
104#endif
105
106   UINT8 m_control;
98   UINT8 m_videoram[2][0x4000]; // 2 layers of 16KB
99   UINT8 m_comms_latch[2];
100   UINT8 m_vcontrol;
101   UINT8 m_vreg[0x10];
107102   UINT8 m_scroll;
108103   UINT8 m_steerlatch;
109   int   m_draw_mode;
110   int   m_oldsteer;
104   UINT8 m_draw_mode;
105   UINT8 m_oldsteer;
111106
112   /* devices */
113   cpu_device *m_slavecpu;
114
115   /* memory */
116   UINT8  m_videoram[3][0x4000];
117
118107   DECLARE_WRITE8_MEMBER(transmit_data_w);
119108   DECLARE_READ8_MEMBER(trigger_slave_nmi_r);
120109   DECLARE_READ8_MEMBER(receive_data_r);
121   DECLARE_WRITE8_MEMBER(imola_ledram_w);
122   DECLARE_READ8_MEMBER(steerlatch_r);
110   DECLARE_WRITE8_MEMBER(imola_led_board_w);
111   DECLARE_READ8_MEMBER(vreg_data_r);
123112   DECLARE_WRITE8_MEMBER(screenram_w);
124   DECLARE_READ8_MEMBER(imola_slave_port05r);
125   DECLARE_READ8_MEMBER(imola_slave_port06r);
126   DECLARE_READ8_MEMBER(imola_slave_port81r);
127   DECLARE_READ8_MEMBER(imola_slave_port82r);
113   DECLARE_READ8_MEMBER(imola_draw_mode_r);
128114   DECLARE_WRITE8_MEMBER(vreg_control_w);
129115   DECLARE_WRITE8_MEMBER(vreg_data_w);
116   DECLARE_CUSTOM_INPUT_MEMBER(imolagp_steerlatch_r);
117   INTERRUPT_GEN_MEMBER(slave_vblank_irq);
118
130119   virtual void machine_start();
131120   virtual void machine_reset();
132121   virtual void video_start();
122   virtual void palette_init();
133123   UINT32 screen_update_imolagp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
134   INTERRUPT_GEN_MEMBER(vblank_irq);
135124};
136125
137126
138#ifdef HLE_COM
127/***************************************************************************
139128
140WRITE8_MEMBER(imolagp_state::transmit_data_w)
141{
142   m_mComData[m_mComCount++] = data;
143}
129  Video
144130
145READ8_MEMBER(imolagp_state::trigger_slave_nmi_r)
146{
147   return 0;
148}
131***************************************************************************/
149132
150READ8_MEMBER(imolagp_state::receive_data_r)
133void imolagp_state::palette_init()
151134{
152   return 0;
153}
154
155#else
156/* the master cpu transmits data to the slave CPU one word at a time using a rapid sequence of triggered NMIs
157 * the slave cpu pauses as it enters its irq, awaiting this burst of data
158 */
159WRITE8_MEMBER(imolagp_state::transmit_data_w)
160{
161   m_mLatchedData[offset] = data;
162}
163READ8_MEMBER(imolagp_state::trigger_slave_nmi_r)
164{
165   m_slave->execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
166   return 0;
167}
168
169READ8_MEMBER(imolagp_state::receive_data_r)
170{
171   return m_mLatchedData[offset];
172}
173#endif
174
175static void initialize_colors( running_machine &machine )
176{
177   /* optional runtime remapping of colors */
178   static const UINT8 color[0x10][3] =
179   { /* wrong! need color-accurate screenshots to fix */
180      { 0x44,0x44,0x00 },
181      { 0x7f,0xff,0xff },
182      { 0xff,0x00,0x7f }, /* opp car */
183      { 0x00,0x00,0xff }, /* road(2) */
184      { 0xff,0xff,0x00 },
185      { 0x00,0x88,0x00 }, /* grass */
186      { 0x7f,0x00,0x00 },
187      { 0x00,0xff,0xff }, /* house front */
188      { 0xff,0x00,0x00 }, /* player car body */
189      { 0xff,0x00,0x00 }, /* house roof right */
190      { 0xff,0x7f,0x00 },
191      { 0xff,0x00,0xff }, /* house roof left */
192      { 0xff,0xff,0xff }, /* rescue truck trim */
193      { 0xff,0xff,0x00 }, /* roadside grass */
194      { 0xff,0xff,0xff }, /* driveway, headlight */
195      { 0xff,0xff,0xff }  /* house crease, door */
196   };
197   int i;
198   for (i = 0; i < 0x10; i++)
135   // palette seems like 3bpp + intensity
136   for (int i = 0; i < 8; i++)
199137   {
200      palette_set_color_rgb( machine, i * 2 + 0, 0, 0, 0 );
201      palette_set_color_rgb( machine, i * 2 + 1, color[i][0], color[i][1], color[i][2] );
138      palette_set_color_rgb(machine(), i*4+0, 0, 0, 0);
139      palette_set_color_rgb(machine(), i*4+1, pal1bit(i >> 2)/2, pal1bit(i >> 1)/2, pal1bit(i >> 0)/2);
140      palette_set_color_rgb(machine(), i*4+2, 0, 0, 0);
141      palette_set_color_rgb(machine(), i*4+3, pal1bit(i >> 2), pal1bit(i >> 1), pal1bit(i >> 0));
202142   }
203143}
204144
r20217r20218
206146{
207147   memset(m_videoram, 0, sizeof(m_videoram));
208148   save_item(NAME(m_videoram));
209
210   initialize_colors(machine());
211149}
212150
213151
214152UINT32 imolagp_state::screen_update_imolagp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
215153{
216   int scroll2 = m_scroll ^ 0x03;
217   int pass;
218   for (pass = 0; pass < 2; pass++)
154   // draw solid background layer first, then sprites on top
155   for (int layer = 0; layer < 2; layer++)
219156   {
220      int i;
221      const UINT8 *source = m_videoram[pass * 2];
222
223      for (i = 0; i < 0x4000; i++)
157      for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
224158      {
225         int pen;
226         int y = (i / 0x40);
227         int x = (i & 0x3f) * 4 - scroll2;
159         const UINT8 *source = &m_videoram[layer][(y & 0xff) * 0x40];
228160         UINT16 *dest = &bitmap.pix16(y & 0xff);
229         int data = source[i];
230         if (data || pass == 0)
161         for (int i = 0; i < 0x40; i++)
231162         {
232            int color = (data & 0xf0) >> 3;
233            data &= 0x0f;
234            pen = ((data >> 3) & 1); dest[(x + 3) & 0xff] = color | pen;
235            pen = ((data >> 2) & 1); dest[(x + 2) & 0xff] = color | pen;
236            pen = ((data >> 1) & 1); dest[(x + 1) & 0xff] = color | pen;
237            pen = ((data >> 0) & 1); dest[(x + 0) & 0xff] = color | pen;
163            UINT8 data = source[i];
164            if (data || layer == 0)
165            {
166               // one color per each 4 pixels
167               UINT8 color = (data & 0xf0) >> 3;
168               UINT8 x = (i << 2) - (m_scroll ^ 3);
169               for (int x2 = 0; x2 < 4; x2++)
170               {
171                  UINT8 offset = x + x2;
172                  if (offset >= cliprect.min_x && offset <= cliprect.max_x)
173                     dest[offset] = color | (data >> x2 & 1);
174               }
175            }
238176         }
239177      }
240178   }
179
241180   return 0;
242181}
243182
244WRITE8_MEMBER(imolagp_state::imola_ledram_w)
245{
246   data &= 0xf;
247183
248   switch (offset)
249   {
250   case 0x00: output_set_value("score1000", data); break;
251   case 0x01: output_set_value("score100", data); break;
252   case 0x02: output_set_value("score10", data); break;
253   case 0x03: output_set_value("score1", data); break;
254   case 0x04: output_set_value("time10", data ); break;
255   case 0x05: output_set_value("time1", data ); break;
256184
257   case 0x08: output_set_value("hs5_10", data); break;
258   case 0x09: output_set_value("hs5_1", data); break;
185/***************************************************************************
259186
260   case 0x10: output_set_value("hs4_1000", data); break;
261   case 0x11: output_set_value("hs4_100", data); break;
262   case 0x12: output_set_value("hs4_10", data); break;
263   case 0x13: output_set_value("hs4_1", data); break;
264   case 0x14: output_set_value("hs5_1000", data); break;
265   case 0x15: output_set_value("hs5_100", data); break;
187  I/O and Memory Maps
266188
267   case 0x0a: output_set_value("numplays10", data ); break;
268   case 0x0b: output_set_value("numplays1", data ); break;
269   case 0x0c: output_set_value("credit10", data); break;
270   case 0x0d: output_set_value("credit1", data); break;
189***************************************************************************/
271190
272   case 0x18: output_set_value("hs2_10", data); break;
273   case 0x19: output_set_value("hs2_1", data); break;
274   case 0x1a: output_set_value("hs3_1000", data); break;
275   case 0x1b: output_set_value("hs3_100", data); break;
276   case 0x1c: output_set_value("hs3_10", data); break;
277   case 0x1d: output_set_value("hs3_1", data); break;
278
279   case 0x20: output_set_value("hs1_1000", data); break;
280   case 0x21: output_set_value("hs1_100", data); break;
281   case 0x22: output_set_value("hs1_10", data); break;
282   case 0x23: output_set_value("hs1_1", data); break;
283   case 0x24: output_set_value("hs2_1000", data); break;
284   case 0x25: output_set_value("hs2_100", data); break;
285
286   default:
287      break;
288   }
191/* The master CPU transmits data to the slave CPU one word at a time using a rapid sequence of triggered NMIs.
192 * The slave CPU pauses as it enters its irq, awaiting this burst of data.
193 * Handling the NMI takes more time than triggering the NMI, implying that the slave CPU either runs at
194 * a higher clock, or has a way to force the main CPU to wait.
195 */
196WRITE8_MEMBER(imolagp_state::transmit_data_w)
197{
198   m_comms_latch[offset] = data;
289199}
290200
291READ8_MEMBER(imolagp_state::steerlatch_r)
201READ8_MEMBER(imolagp_state::receive_data_r)
292202{
293   return m_steerlatch;
203   return m_comms_latch[offset];
294204}
295205
296WRITE8_MEMBER(imolagp_state::screenram_w)
297{ /* ?! */
298   switch (m_draw_mode)
299   {
300   case 0x82:
301   case 0x81:
302   case 0x05:
303      m_videoram[1][offset] = data;
304      break;
305   case 0x06:
306      m_videoram[0][offset] = data;
307      break;
308   default:
309      break;
310   }
206READ8_MEMBER(imolagp_state::trigger_slave_nmi_r)
207{
208   m_slavecpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
209   return 0;
311210}
312211
313READ8_MEMBER(imolagp_state::imola_slave_port05r)
212
213WRITE8_MEMBER(imolagp_state::imola_led_board_w)
314214{
315   memcpy(m_videoram[2], m_videoram[1], 0x4000); /* hack! capture before sprite plane is erased */
316   m_draw_mode = 0x05;
317   return 0;
215   // not sure what chip is used here, this is copied from turbo.c
216   static const UINT8 ls48_map[16] =
217      { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x67,0x58,0x4c,0x62,0x69,0x78,0x00 };
218
219   output_set_digit_value(offset, ls48_map[data & 0x0f]);
220/*
221   score:         0,  1,  2,  3
222   time:          4,  5
223   result:       10, 11
224   credits:      12, 13
225   highscore 1:  32, 33, 34, 35
226   highscore 2:  36, 37, 24, 25
227   highscore 3:  26, 27, 28, 29
228   highscore 4:  16, 17, 18, 19
229   highscore 5:  20, 21,  8,  9
230*/
318231}
319232
320READ8_MEMBER(imolagp_state::imola_slave_port06r)
233
234WRITE8_MEMBER(imolagp_state::vreg_control_w)
321235{
322   m_draw_mode = 0x06;
323   return 0;
236   m_vcontrol = data & 0xf;
324237}
325238
326READ8_MEMBER(imolagp_state::imola_slave_port81r)
239READ8_MEMBER(imolagp_state::vreg_data_r)
327240{
328   m_draw_mode = 0x81;
329   memcpy(m_videoram[2], m_videoram[1], 0x4000); /* hack! capture before sprite plane is erased */
330241   return 0;
242   //return 0xf7; // -> go left?
243   //return 0x17; // it checks for this too
331244}
332245
333READ8_MEMBER(imolagp_state::imola_slave_port82r)
246WRITE8_MEMBER(imolagp_state::vreg_data_w)
334247{
335   m_draw_mode = 0x82;
336   return 0;
248   // $07: always $ff?
249   // $0e: x scroll
250   // $0f: auto-steer related
251   m_vreg[m_vcontrol] = data;
337252}
338253
339WRITE8_MEMBER(imolagp_state::vreg_control_w)
254
255WRITE8_MEMBER(imolagp_state::screenram_w)
340256{
341   m_control = data;
257   // when in tunnel: $81/$82 -> sprite ram?
258   if (m_draw_mode & 0x80)
259      m_videoram[1][offset] = data;
260   
261   // sprites: $05
262   else if (m_draw_mode & 0x01)
263      m_videoram[1][offset] = data;
264
265   // background: $06
266   else
267      m_videoram[0][offset] = data;
342268}
343269
344WRITE8_MEMBER(imolagp_state::vreg_data_w)
270READ8_MEMBER(imolagp_state::imola_draw_mode_r)
345271{
346   switch (m_control)
347   {
348   case 0x0e:
349      m_scroll = data;
350      break;
351   case 0x07: /* always 0xff? */
352   case 0x0f: /* 0xff or 0x00 */
353   default:
354      logerror("vreg[0x%02x]:=0x%02x\n", m_control, data);
355      break;
356   }
272   // the game reads a port before and after writing to screen ram
273   m_draw_mode = offset;
274   return 0;
357275}
358276
359static ADDRESS_MAP_START( readport_master, AS_IO, 8, imolagp_state )
360   ADDRESS_MAP_GLOBAL_MASK(0xff)
361   AM_RANGE(0x00, 0x00) AM_READ(trigger_slave_nmi_r)
362ADDRESS_MAP_END
363
364static ADDRESS_MAP_START( imolagp_master, AS_PROGRAM, 8, imolagp_state )
277static ADDRESS_MAP_START( imolagp_master_map, AS_PROGRAM, 8, imolagp_state )
365278   AM_RANGE(0x0000, 0x1fff) AM_ROM
366279   AM_RANGE(0x2000, 0x23ff) AM_RAM
367   AM_RANGE(0x2800, 0x2800) AM_READ_PORT("2800")   /* gas */
368   AM_RANGE(0x2802, 0x2802) AM_READ(steerlatch_r) AM_WRITENOP
369   /*  AM_RANGE(0x2803, 0x2803) ? */
280   AM_RANGE(0x2800, 0x2803) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
370281   AM_RANGE(0x3000, 0x3000) AM_WRITE(vreg_control_w)
371282   AM_RANGE(0x37f0, 0x37f0) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_w)
372   /*  AM_RANGE(0x37f7, 0x37f7) ? */
373   AM_RANGE(0x3800, 0x3800) AM_WRITE(vreg_data_w)
283//   AM_RANGE(0x37f7, 0x37f7) AM_NOP
284   AM_RANGE(0x3800, 0x3800) AM_READWRITE(vreg_data_r, vreg_data_w)
374285   AM_RANGE(0x3810, 0x3810) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_w)
375   AM_RANGE(0x4000, 0x4000) AM_READ_PORT("DSWA")   /* DSWA */
376   AM_RANGE(0x5000, 0x50ff) AM_WRITE(imola_ledram_w)
286   AM_RANGE(0x4000, 0x4000) AM_READ_PORT("DSWA")
377287   AM_RANGE(0x47ff, 0x4800) AM_WRITE(transmit_data_w)
378   AM_RANGE(0x6000, 0x6000) AM_READ_PORT("DSWB")   /* DSWB */
288   AM_RANGE(0x5000, 0x50ff) AM_WRITE(imola_led_board_w)
289   AM_RANGE(0x5800, 0x5800) AM_READ_PORT("DSWA") // assume mirror
290   AM_RANGE(0x6000, 0x6000) AM_READ_PORT("DSWB")
379291ADDRESS_MAP_END
380292
381static ADDRESS_MAP_START( readport_slave, AS_IO, 8, imolagp_state )
293static ADDRESS_MAP_START( imolagp_master_io, AS_IO, 8, imolagp_state )
382294   ADDRESS_MAP_GLOBAL_MASK(0xff)
383   AM_RANGE(0x05,0x05) AM_READ(imola_slave_port05r)
384   AM_RANGE(0x06,0x06) AM_READ(imola_slave_port06r)
385   AM_RANGE(0x81,0x81) AM_READ(imola_slave_port81r)
386   AM_RANGE(0x82,0x82) AM_READ(imola_slave_port82r)
295   AM_RANGE(0x00, 0x00) AM_READ(trigger_slave_nmi_r)
387296ADDRESS_MAP_END
388297
389static ADDRESS_MAP_START( imolagp_slave, AS_PROGRAM, 8, imolagp_state )
390   AM_RANGE(0x0000, 0x03ff) AM_ROM
391   AM_RANGE(0x0800, 0x0bff) AM_ROM
392   AM_RANGE(0x1000, 0x13ff) AM_ROM
393   AM_RANGE(0x1c00, 0x3fff) AM_ROM
394   AM_RANGE(0x4000, 0x43ff) AM_RAM AM_SHARE("slave_workram")
298
299static ADDRESS_MAP_START( imolagp_slave_map, AS_PROGRAM, 8, imolagp_state )
300   AM_RANGE(0x0000, 0x3fff) AM_ROM
301   AM_RANGE(0x4000, 0x43ff) AM_RAM
395302   AM_RANGE(0x9fff, 0xa000) AM_READ(receive_data_r)
396303   AM_RANGE(0xc000, 0xffff) AM_WRITE(screenram_w)
397304ADDRESS_MAP_END
398305
306static ADDRESS_MAP_START( imolagp_slave_io, AS_IO, 8, imolagp_state )
307   ADDRESS_MAP_GLOBAL_MASK(0xff)
308   AM_RANGE(0x00,0xff) AM_READ(imola_draw_mode_r)
309ADDRESS_MAP_END
399310
311
312
313/***************************************************************************
314
315  Inputs
316
317***************************************************************************/
318
319CUSTOM_INPUT_MEMBER(imolagp_state::imolagp_steerlatch_r)
320{
321   return m_steerlatch & 0xf;
322}
323
400324static INPUT_PORTS_START( imolagp )
401325   PORT_START("DSWA") /* 0x4000 */
402326   PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coin_A ) )
r20217r20218
408332   PORT_DIPSETTING(    0x02, DEF_STR( 3C_1C ) )
409333   PORT_DIPSETTING(    0x01, DEF_STR( 2C_1C ) )
410334   PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
411   PORT_DIPNAME( 0x18, 0x00, DEF_STR( Unknown ) ) /* ? */
412   PORT_DIPSETTING(    0x00, "DSWA-0" )
413   PORT_DIPSETTING(    0x08, "DSWA-1" )
414   PORT_DIPSETTING(    0x10, "DSWA-2" )
415   PORT_DIPSETTING(    0x18, "DSWA-3" )
335   PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
336   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
337   PORT_DIPSETTING(    0x08, DEF_STR( On ) )
338   PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
339   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
340   PORT_DIPSETTING(    0x10, DEF_STR( On ) )
416341   PORT_DIPNAME( 0xe0, 0x00, DEF_STR( Test ) )
417342   PORT_DIPSETTING(    0x00, DEF_STR(Off) )
418343   PORT_DIPSETTING(    0x20, "TEST A" )
r20217r20218
433358   PORT_DIPSETTING(    0x02, DEF_STR( 3C_1C ) )
434359   PORT_DIPSETTING(    0x01, DEF_STR( 2C_1C ) )
435360   PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
436   PORT_DIPNAME( 0x18, 0x00, DEF_STR( Unknown ) ) /* ? */
437   PORT_DIPSETTING(    0x00, "DSWB-0" )
438   PORT_DIPSETTING(    0x08, "DSWB-1" )
439   PORT_DIPSETTING(    0x10, "DSWB-2" )
440   PORT_DIPSETTING(    0x18, "DSWB-3" )
361   PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
362   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
363   PORT_DIPSETTING(    0x08, DEF_STR( On ) )
364   PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
365   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
366   PORT_DIPSETTING(    0x10, DEF_STR( On ) )
441367   PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
442   PORT_DIPSETTING(    0x00, "DSWB-0" )
443   PORT_DIPSETTING(    0x20, "DSWB-1" )
368   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
369   PORT_DIPSETTING(    0x20, DEF_STR( On ) )
444370   PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unused ) )
445371   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
446372   PORT_DIPSETTING(    0x40, DEF_STR( On ) )
r20217r20218
448374   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
449375   PORT_DIPSETTING(    0x80, DEF_STR( On ) )
450376
451   PORT_START("2800") /* 2800 */ /* speed: 08 00 0F 1C 0F 00 1E 3D */
452//  PORT_DIPNAME( 0x03, 0x03, "Pedal" )
453//  PORT_DIPSETTING( 0x01, "STOPPED" )
454//  PORT_DIPSETTING( 0x00, "SLOW" )
455//  PORT_DIPSETTING( 0x02, "MEDIUM" )
456//  PORT_DIPSETTING( 0x03, "FAST" )
377   PORT_START("IN0")
378   PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, imolagp_state, imolagp_steerlatch_r, NULL)
379   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
380   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 )
381   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
382   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
383
384   PORT_START("IN1")
457385   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
458386   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 )
459//  PORT_DIPNAME( 0x04, 0x04, "Stick Shift" )
460//  PORT_DIPSETTING( 0x0, DEF_STR(Low) )
461//  PORT_DIPSETTING( 0x4, DEF_STR(High) )
462387   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 )
388   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
389
390   PORT_START("STEER")
391   PORT_BIT( 0x0f, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(1)
392INPUT_PORTS_END
393
394
395static INPUT_PORTS_START( imolagpo )
396   PORT_INCLUDE( imolagp )
397
398   PORT_MODIFY("IN0")
399   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
400   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 )
401   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 )
463402   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 )
464403   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 )
465   PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED )
404   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
405   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
406   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
466407
467   PORT_START("2802") /* 2802 */
468   PORT_BIT( 0x0f, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(1) PORT_PLAYER(1)
408   PORT_MODIFY("IN1")
409   PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, imolagp_state, imolagp_steerlatch_r, NULL)
469410INPUT_PORTS_END
470411
471/***************************************************************************/
472412
473413
414/***************************************************************************
415
416  Machine Config
417
418***************************************************************************/
419
474420static TIMER_DEVICE_CALLBACK ( imolagp_nmi_cb )
475421{
476422   imolagp_state *state = timer.machine().driver_data<imolagp_state>();
477
423   int newsteer = timer.machine().root_device().ioport("STEER")->read() & 0xf;
424   if (newsteer != state->m_oldsteer)
478425   {
479      int newsteer = timer.machine().root_device().ioport("2802")->read() & 0xf;
480      if (newsteer != state->m_oldsteer)
426      if ((newsteer - state->m_oldsteer) & 0x8)
481427      {
482         if (state->m_steerlatch == 0)
483            state->m_steerlatch = 0x03;
484         else if ((newsteer - state->m_oldsteer) & 0x8)
485         {
486            state->m_steerlatch = ((state->m_steerlatch << 1) | (state->m_steerlatch >> 3)) & 0xf;
487            state->m_oldsteer = (state->m_oldsteer - 1) & 0xf;
488         }
489         else
490         {
491            state->m_oldsteer = (state->m_oldsteer + 1) & 0xf;
492         }
493         state->m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
428         // shift
429         state->m_steerlatch = (state->m_steerlatch << 1) | (~state->m_steerlatch >> 1 & 1);
430         state->m_oldsteer = (state->m_oldsteer - 1) & 0xf;
494431      }
432      else
433      {
434         state->m_oldsteer = (state->m_oldsteer + 1) & 0xf;
435      }
436      state->m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
495437   }
496438}
497439
498INTERRUPT_GEN_MEMBER(imolagp_state::vblank_irq)
440INTERRUPT_GEN_MEMBER(imolagp_state::slave_vblank_irq)
499441{
500#ifdef HLE_COM
501   memcpy(&m_slave_workram[0x80], m_mComData, m_mComCount);
502   m_mComCount = 0;
503#endif
442   m_scroll = m_vreg[0xe]; // latch scroll
504443   device.execute().set_input_line(0, HOLD_LINE);
505} /* master_interrupt */
444}
506445
507446
508447static I8255A_INTERFACE( ppi8255_intf )
509448{
510   DEVCB_NULL,                         /* Port A read */
511   DEVCB_NULL,                         /* Port A write */
512   DEVCB_NULL,                         /* Port B read */
513   DEVCB_NULL,                         /* Port B write */
514   DEVCB_NULL,                         /* Port C read */
515   DEVCB_NULL,                         /* Port C write */
449   // mode $91 - ports A & C-lower as input, ports B & C-upper as output
450   DEVCB_INPUT_PORT("IN0"),
451   DEVCB_NULL,
452   DEVCB_UNMAPPED,
453   DEVCB_UNMAPPED,
454   DEVCB_INPUT_PORT("IN1"),
455   DEVCB_NULL
516456};
517457
518458
519459void imolagp_state::machine_start()
520460{
521   m_slavecpu = machine().device<cpu_device>("slave");
522
523   save_item(NAME(m_control));
461   save_item(NAME(m_vcontrol));
462   save_item(NAME(m_vreg));
524463   save_item(NAME(m_scroll));
525464   save_item(NAME(m_steerlatch));
526465   save_item(NAME(m_draw_mode));
527466   save_item(NAME(m_oldsteer));
528#ifdef HLE_COM
529   save_item(NAME(m_mComData));
530   save_item(NAME(m_mComCount));
531#else
532   save_item(NAME(m_mLatchedData));
533#endif
467   save_item(NAME(m_comms_latch));
534468}
535469
536470void imolagp_state::machine_reset()
537471{
538   m_control = 0;
539   m_scroll = 0;
540   m_steerlatch = 0;
541   m_draw_mode = 0;
542   m_oldsteer = 0;
543#ifdef HLE_COM
544   m_mComCount = 0;
545   memset(m_mComData, 0, 0x100);
546#else
547   m_mLatchedData[0] = 0;
548   m_mLatchedData[1] = 0;
549#endif
550472}
551473
552474static MACHINE_CONFIG_START( imolagp, imolagp_state )
553475
554   MCFG_CPU_ADD("maincpu", Z80,8000000) /* ? */
555   MCFG_CPU_PROGRAM_MAP(imolagp_master)
556   MCFG_CPU_IO_MAP(readport_master)
557   MCFG_CPU_VBLANK_INT_DRIVER("screen", imolagp_state, vblank_irq)
476   /* basic machine hardware */
477   MCFG_CPU_ADD("maincpu", Z80, 3000000) // ? (assume slower than slave)
478   MCFG_CPU_PROGRAM_MAP(imolagp_master_map)
479   MCFG_CPU_IO_MAP(imolagp_master_io)
480   MCFG_CPU_VBLANK_INT_DRIVER("screen", imolagp_state, irq0_line_hold)
558481   MCFG_TIMER_ADD_PERIODIC("pot_irq", imolagp_nmi_cb, attotime::from_hz(60*3))
559482
560   MCFG_CPU_ADD("slave", Z80,8000000) /* ? */
561   MCFG_CPU_PROGRAM_MAP(imolagp_slave)
562   MCFG_CPU_IO_MAP(readport_slave)
563   MCFG_CPU_VBLANK_INT_DRIVER("screen", imolagp_state,  irq0_line_hold)
483   MCFG_CPU_ADD("slave", Z80, 4000000) // ?
484   MCFG_CPU_PROGRAM_MAP(imolagp_slave_map)
485   MCFG_CPU_IO_MAP(imolagp_slave_io)
486   MCFG_CPU_VBLANK_INT_DRIVER("screen", imolagp_state, slave_vblank_irq)
564487
565   MCFG_QUANTUM_TIME(attotime::from_hz(6000))
488   MCFG_QUANTUM_PERFECT_CPU("maincpu")
566489
567
568490   MCFG_I8255A_ADD( "ppi8255", ppi8255_intf )
569491
492   /* video hardware */
570493   MCFG_SCREEN_ADD("screen", RASTER)
571494   MCFG_SCREEN_REFRESH_RATE(60)
572   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
495   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
573496   MCFG_SCREEN_SIZE(256,256)
574   MCFG_SCREEN_VISIBLE_AREA(0+64-16,255,0+16,255)
575   MCFG_SCREEN_UPDATE_DRIVER(imolagp_state, screen_update_imolagp)
497   MCFG_SCREEN_VISIBLE_AREA(0+48,255,0+16,255)
576498
499   MCFG_SCREEN_UPDATE_DRIVER(imolagp_state, screen_update_imolagp)
577500   MCFG_PALETTE_LENGTH(0x20)
501   MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_SCANLINE)
502
503   /* sound hardware */
578504   MCFG_SPEAKER_STANDARD_MONO("mono")
579   MCFG_SOUND_ADD("aysnd", AY8910, 2000000)
580   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
505   MCFG_SOUND_ADD("aysnd", AY8910, 2000000) // ?
506   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5)
581507MACHINE_CONFIG_END
582508
583ROM_START( imolagp )
509
510ROM_START( imolagp ) // same hardware, but larger video roms
584511   ROM_REGION( 0x10000, "maincpu", 0 ) /* Z80 code */
585512   ROM_LOAD( "03.bin",   0x0000, 0x0800, CRC(a8be1c83) SHA1(e3147515f9f44e435192db838ffbb5c592f6e8d7) )
586513   ROM_LOAD( "01.bin",   0x0800, 0x0800, CRC(aa6fc1ea) SHA1(3f9c559aaba7b00ffd0210c6977dd4f966451a4b) )
r20217r20218
600527
601528ROM_START( imolagpo )
602529   ROM_REGION( 0x10000, "maincpu", 0 ) /* Z80 code */
603   ROM_LOAD( "yd.bin", 0x0000, 0x800, CRC(5eb61bb7) SHA1(b897ecc7fa9aa1ae4e095d22d16a901b9d439a8e) )
604   ROM_LOAD( "yc.bin", 0x0800, 0x800, CRC(f7468a3b) SHA1(af1664e30b732b3d5321e76659961af3ebeb1237) )
605   ROM_LOAD( "yb.bin", 0x1000, 0x800, CRC(9f21506e) SHA1(6b46ff4815b8a02b190ec13e067f9a6687980774) )
606   ROM_LOAD( "ya.bin", 0x1800, 0x800, CRC(23fbcf14) SHA1(e8b5a9b01f715356c14aa41dbc9ca26732d3a4e4) )
530   ROM_LOAD( "yd.bin",   0x0000, 0x0800, CRC(5eb61bb7) SHA1(b897ecc7fa9aa1ae4e095d22d16a901b9d439a8e) )
531   ROM_LOAD( "yc.bin",   0x0800, 0x0800, CRC(f7468a3b) SHA1(af1664e30b732b3d5321e76659961af3ebeb1237) )
532   ROM_LOAD( "yb.bin",   0x1000, 0x0800, CRC(9f21506e) SHA1(6b46ff4815b8a02b190ec13e067f9a6687980774) )
533   ROM_LOAD( "ya.bin",   0x1800, 0x0800, CRC(23fbcf14) SHA1(e8b5a9b01f715356c14aa41dbc9ca26732d3a4e4) )
607534
608   ROM_REGION( 0x10000, "slave", 0 ) /* Z80 code */
609   ROM_LOAD( "xx.bin", 0x0000, 0x400, CRC(059d6294) SHA1(38f075753e7a9fcabb857e5587e8a5966052cbcd) )
610   ROM_LOAD( "xm.bin", 0x0800, 0x400, CRC(64ebb7de) SHA1(fc5477bbedf44e93a578a71d2ff376f6f0b51a71) ) // ? gfx: B
611   ROM_LOAD( "xc.bin", 0x1000, 0x400, CRC(397fd1f3) SHA1(e6b927933847ddcdbbcbeb5e5f37fea063356b24) )
612   ROM_LOAD( "xi.bin", 0x1c00, 0x400, CRC(ef54efa2) SHA1(c8464f11ccfd9eaf9aefb2cd3ac2b9e8bc2d11b6) ) // contains bitmap for "R.B."
613   ROM_LOAD( "xy.bin", 0x2000, 0x400, CRC(fea8e31e) SHA1(f85eac74d32ebd28170b466b136faf21a8ab220f) )
614   ROM_LOAD( "xd.bin", 0x2400, 0x400, CRC(0c601fc9) SHA1(e655f292b502a14068f5c35428001f8ceedf3637) )
615   ROM_LOAD( "xs.bin", 0x2800, 0x400, CRC(5d15ac52) SHA1(b4f97854018f72e4086c7d830d1b312aea1420a7) )
616   ROM_LOAD( "xa.bin", 0x2c00, 0x400, CRC(a95f5461) SHA1(2645fb93bc4ad5354eef5a385fa94021fb7291dc) ) // ? car - good?
617   ROM_LOAD( "xp.bin", 0x3000, 0x400, CRC(4b6d63ef) SHA1(16f9e31e588b989f5259ab59c0a3a2c7787f3a16) ) // ? gfx: AEIOSXTDNMVGYRPL
618   ROM_LOAD( "xo.bin", 0x3400, 0x400, CRC(c1d7f67c) SHA1(2ddfe9e59e323cd041fd760531b9e15ccd050058) ) // ? gfx: C
619   ROM_LOAD( "xr.bin", 0x3800, 0x400, CRC(8a8667aa) SHA1(53f34b6c5327d4398de644d7f318d460da56c2de) ) // ? gfx: sign+explosion
620   ROM_LOAD( "xe.bin", 0x3c00, 0x400, CRC(e0e81120) SHA1(14a77dfd069be342df4dbb1b747443c6d121d3fe) ) // ? car+misc
535   ROM_REGION( 0x10000, "slave", ROMREGION_ERASEFF ) /* Z80 code */
536   ROM_LOAD( "xx.bin",   0x0000, 0x0400, CRC(059d6294) SHA1(38f075753e7a9fcabb857e5587e8a5966052cbcd) )
537   // empty socket, please don't put NO_DUMP unless 100% sure
538   ROM_LOAD( "xm.bin",   0x0800, 0x0400, CRC(64ebb7de) SHA1(fc5477bbedf44e93a578a71d2ff376f6f0b51a71) ) // ? gfx: B
539   // empty socket, "
540   ROM_LOAD( "xc.bin",   0x1000, 0x0400, CRC(397fd1f3) SHA1(e6b927933847ddcdbbcbeb5e5f37fea063356b24) )
541   // empty socket, "
542   // empty socket, "
543   ROM_LOAD( "xi.bin",   0x1c00, 0x0400, CRC(ef54efa2) SHA1(c8464f11ccfd9eaf9aefb2cd3ac2b9e8bc2d11b6) ) // contains bitmap for "R.B."
544   ROM_LOAD( "xy.bin",   0x2000, 0x0400, CRC(fea8e31e) SHA1(f85eac74d32ebd28170b466b136faf21a8ab220f) )
545   ROM_LOAD( "xd.bin",   0x2400, 0x0400, CRC(0c601fc9) SHA1(e655f292b502a14068f5c35428001f8ceedf3637) )
546   ROM_LOAD( "xs.bin",   0x2800, 0x0400, CRC(5d15ac52) SHA1(b4f97854018f72e4086c7d830d1b312aea1420a7) )
547   ROM_LOAD( "xa.bin",   0x2c00, 0x0400, CRC(a95f5461) SHA1(2645fb93bc4ad5354eef5a385fa94021fb7291dc) ) // ? car - good?
548   ROM_LOAD( "xp.bin",   0x3000, 0x0400, CRC(4b6d63ef) SHA1(16f9e31e588b989f5259ab59c0a3a2c7787f3a16) ) // ? gfx: AEIOSXTDNMVGYRPL
549   ROM_LOAD( "xo.bin",   0x3400, 0x0400, CRC(c1d7f67c) SHA1(2ddfe9e59e323cd041fd760531b9e15ccd050058) ) // ? gfx: C
550   ROM_LOAD( "xr.bin",   0x3800, 0x0400, CRC(8a8667aa) SHA1(53f34b6c5327d4398de644d7f318d460da56c2de) ) // ? gfx: sign+explosion
551   ROM_LOAD( "xe.bin",   0x3c00, 0x0400, CRC(e0e81120) SHA1(14a77dfd069be342df4dbb1b747443c6d121d3fe) ) // ? car+misc
621552ROM_END
622553
623554
624555/*    YEAR,  NAME,     PARENT,  MACHINE, INPUT,    INIT,              MONITOR, COMPANY, FULLNAME, FLAGS */
625556GAMEL(1983?, imolagp,  0,       imolagp, imolagp,  driver_device, 0,  ROT90,   "RB Bologna", "Imola Grand Prix (set 1)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_COLORS | GAME_SUPPORTS_SAVE, layout_imolagp ) // made by Alberici? year not shown, PCB labels suggests it's from 1983
626GAMEL(1983?, imolagpo, imolagp, imolagp, imolagp, driver_device, 0,  ROT90,   "RB Bologna", "Imola Grand Prix (set 2)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_COLORS | GAME_SUPPORTS_SAVE, layout_imolagp ) // "
557GAMEL(1983?, imolagpo, imolagp, imolagp, imolagpo, driver_device, 0,  ROT90,   "RB Bologna", "Imola Grand Prix (set 2)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_COLORS | GAME_SUPPORTS_SAVE, layout_imolagp ) // "
trunk/src/mame/layout/imolagp.lay
r20217r20218
11<?xml version="1.0"?>
22<mamelayout version="2">
3
4<!-- define elements -->
5
6   <element name="digit" defstate="0">
7      <led7seg>
8         <color red="1.0" green="0.1" blue="0.1" />
9      </led7seg>
10   </element>
11
12   <element name="static_black">
13      <rect>
14         <color red="0.0" green="0.0" blue="0.0" />
15      </rect>
16   </element>
17
18   <element name="static_gray">
19      <rect>
20         <color red="0.6" green="0.6" blue="0.6" />
21      </rect>
22   </element>
23
24   <element name="static_white">
25      <rect>
26         <color red="0.95" green="0.95" blue="0.95" />
27      </rect>
28   </element>
29   <element name="disk_white">
30      <disk>
31         <color red="0.95" green="0.95" blue="0.95" />
32      </disk>
33   </element>
34
35   <element name="static_red">
36      <rect>
37         <color red="0.8" green="0.1" blue="0.0" />
38      </rect>
39   </element>
40   <element name="disk_red">
41      <disk>
42         <color red="0.8" green="0.1" blue="0.0" />
43      </disk>
44   </element>
45
46   <element name="static_green">
47      <rect>
48         <color red="0.15" green="0.8" blue="0.1" />
49      </rect>
50   </element>
51   <element name="disk_green">
52      <disk>
53         <color red="0.15" green="0.8" blue="0.1" />
54      </disk>
55   </element>
56
57   <element name="static_yellow">
58      <rect>
59         <color red="0.8" green="0.75" blue="0.1" />
60      </rect>
61   </element>
62   <element name="disk_yellow">
63      <disk>
64         <color red="0.8" green="0.75" blue="0.1" />
65      </disk>
66   </element>
67
68
69<!-- define text -->
70
71   <element name="text_result">
72      <text string="result" align="1">
73         <color red="1.0" green="1.0" blue="1.0" />
74      </text>
75   </element>
76   <element name="text_credits">
77      <text string="credits" align="1">
78         <color red="1.0" green="1.0" blue="1.0" />
79      </text>
80   </element>
81
82   <element name="text_time">
83      <text string="TIME">
84         <color red="1.0" green="1.0" blue="1.0" />
85      </text>
86   </element>
87
88   <element name="text_s">
89      <text string="S">
90         <color red="1.0" green="1.0" blue="1.0" />
91      </text>
92   </element>
93   <element name="text_c">
94      <text string="C">
95         <color red="1.0" green="1.0" blue="1.0" />
96      </text>
97   </element>
98   <element name="text_o">
99      <text string="O">
100         <color red="1.0" green="1.0" blue="1.0" />
101      </text>
102   </element>
103   <element name="text_r">
104      <text string="R">
105         <color red="1.0" green="1.0" blue="1.0" />
106      </text>
107   </element>
108   <element name="text_e">
109      <text string="E">
110         <color red="1.0" green="1.0" blue="1.0" />
111      </text>
112   </element>
113
114   <element name="text_i">
115      <text string="I">
116         <color red="1.0" green="1.0" blue="1.0" />
117      </text>
118   </element>
119   <element name="text_n">
120      <text string="N">
121         <color red="1.0" green="1.0" blue="1.0" />
122      </text>
123   </element>
124   <element name="text_f">
125      <text string="F">
126         <color red="1.0" green="1.0" blue="1.0" />
127      </text>
128   </element>
129
130   <element name="text_h">
131      <text string="H">
132         <color red="1.0" green="1.0" blue="1.0" />
133      </text>
134   </element>
135   <element name="text_g">
136      <text string="G">
137         <color red="1.0" green="1.0" blue="1.0" />
138      </text>
139   </element>
140
141   <element name="text_1">
142      <text string="1" align="2">
143         <color red="1.0" green="1.0" blue="1.0" />
144      </text>
145   </element>
146   <element name="text_2">
147      <text string="2" align="2">
148         <color red="1.0" green="1.0" blue="1.0" />
149      </text>
150   </element>
151   <element name="text_3">
152      <text string="3" align="2">
153         <color red="1.0" green="1.0" blue="1.0" />
154      </text>
155   </element>
156   <element name="text_4">
157      <text string="4" align="2">
158         <color red="1.0" green="1.0" blue="1.0" />
159      </text>
160   </element>
161   <element name="text_5">
162      <text string="5" align="2">
163         <color red="1.0" green="1.0" blue="1.0" />
164      </text>
165   </element>
166
167   <element name="text_st">
168      <text string="st" align="1">
169         <color red="1.0" green="1.0" blue="1.0" />
170      </text>
171   </element>
172   <element name="text_nd">
173      <text string="nd" align="1">
174         <color red="1.0" green="1.0" blue="1.0" />
175      </text>
176   </element>
177   <element name="text_rd">
178      <text string="rd" align="1">
179         <color red="1.0" green="1.0" blue="1.0" />
180      </text>
181   </element>
182   <element name="text_th">
183      <text string="th" align="1">
184         <color red="1.0" green="1.0" blue="1.0" />
185      </text>
186   </element>
187
188
189
3190   <view name="Simple LEDs">
191      <bounds left="0" top="-124" right="300" bottom="325" />
192
193<!-- NOTE: visible screen is not 3:4, partially cut from view horizontally -->
194<!-- (see imolagp.c MCFG_SCREEN_VISIBLE_AREA) -->
195
4196      <screen index="0">
5         <bounds left="0" top="0" right="3" bottom="4" />
197         <bounds left="0" top="0" right="300" bottom="325" />
6198      </screen>
199
200
201<!-- color bars -->
202
203      <bezel element="static_green">
204         <bounds x="0" y="-120" width="8" height="116" />
205      </bezel>
206      <bezel element="disk_green">
207         <bounds x="0" y="-124" width="8" height="8" />
208      </bezel>
209
210      <bezel element="static_red">
211         <bounds x="10" y="-120" width="8" height="116" />
212      </bezel>
213      <bezel element="disk_red">
214         <bounds x="10" y="-124" width="8" height="8" />
215      </bezel>
216
217      <bezel element="static_red">
218         <bounds x="26" y="-60" width="8" height="56" />
219      </bezel>
220      <bezel element="disk_red">
221         <bounds x="26" y="-64" width="8" height="8" />
222      </bezel>
223
224      <bezel element="static_green">
225         <bounds x="95" y="-60" width="8" height="56" />
226      </bezel>
227      <bezel element="disk_green">
228         <bounds x="95" y="-64" width="8" height="8" />
229      </bezel>
230
231      <bezel element="static_yellow">
232         <bounds x="105" y="-60" width="8" height="56" />
233      </bezel>
234      <bezel element="disk_yellow">
235         <bounds x="105" y="-64" width="8" height="8" />
236      </bezel>
237
238      <bezel element="static_red">
239         <bounds x="115" y="-60" width="8" height="56" />
240      </bezel>
241      <bezel element="disk_red">
242         <bounds x="115" y="-64" width="8" height="8" />
243      </bezel>
244
245      <bezel element="static_white">
246         <bounds x="177" y="-60" width="8" height="56" />
247      </bezel>
248      <bezel element="disk_white">
249         <bounds x="177" y="-64" width="8" height="8" />
250      </bezel>
251
252      <bezel element="static_green">
253         <bounds x="187" y="-60" width="8" height="56" />
254      </bezel>
255      <bezel element="disk_green">
256         <bounds x="187" y="-64" width="8" height="8" />
257      </bezel>
258
259      <bezel element="static_yellow">
260         <bounds x="282" y="-120" width="8" height="116" />
261      </bezel>
262      <bezel element="disk_yellow">
263         <bounds x="282" y="-124" width="8" height="8" />
264      </bezel>
265
266      <bezel element="static_green">
267         <bounds x="292" y="-120" width="8" height="116" />
268      </bezel>
269      <bezel element="disk_green">
270         <bounds x="292" y="-124" width="8" height="8" />
271      </bezel>
272
273
274<!-- score -->
275
276      <bezel element="text_s">
277         <bounds x="10" y="-122" width="8" height="9" />
278      </bezel>
279      <bezel element="text_c">
280         <bounds x="10" y="-112.5" width="8" height="9" />
281      </bezel>
282      <bezel element="text_o">
283         <bounds x="10" y="-103" width="8" height="9" />
284      </bezel>
285      <bezel element="text_r">
286         <bounds x="10" y="-93.5" width="8" height="9" />
287      </bezel>
288      <bezel element="text_e">
289         <bounds x="10" y="-84" width="8" height="9" />
290      </bezel>
291
292      <bezel element="static_gray">
293         <bounds x="20" y="-117" width="73" height="31" />
294      </bezel>
295      <bezel element="static_black">
296         <bounds x="22" y="-115" width="69" height="27" />
297      </bezel>
298
299      <bezel name="digit0" element="digit">
300         <bounds x="26.5" y="-113" width="15" height="23" />
301      </bezel>
302      <bezel name="digit1" element="digit">
303         <bounds x="41.5" y="-113" width="15" height="23" />
304      </bezel>
305      <bezel name="digit2" element="digit">
306         <bounds x="56.5" y="-113" width="15" height="23" />
307      </bezel>
308      <bezel name="digit3" element="digit">
309         <bounds x="71.5" y="-113" width="15" height="23" />
310      </bezel>
311
312
313<!-- result/credits -->
314
315      <bezel element="text_i">
316         <bounds x="26" y="-54" width="8" height="9" />
317      </bezel>
318      <bezel element="text_n">
319         <bounds x="26" y="-44.5" width="8" height="9" />
320      </bezel>
321      <bezel element="text_f">
322         <bounds x="26" y="-35" width="8" height="9" />
323      </bezel>
324      <bezel element="text_o">
325         <bounds x="26" y="-25.5" width="8" height="9" />
326      </bezel>
327
328      <bezel element="static_gray">
329         <bounds x="36" y="-57" width="57" height="43" />
330      </bezel>
331      <bezel element="static_black">
332         <bounds x="38" y="-55" width="53" height="39" />
333      </bezel>
334
335      <bezel name="digit10" element="digit">
336         <bounds x="42" y="-53" width="10" height="15" />
337      </bezel>
338      <bezel name="digit11" element="digit">
339         <bounds x="52" y="-53" width="10" height="15" />
340      </bezel>
341
342      <bezel name="digit12" element="digit">
343         <bounds x="42" y="-33" width="10" height="15" />
344      </bezel>
345      <bezel name="digit13" element="digit">
346         <bounds x="52" y="-33" width="10" height="15" />
347      </bezel>
348
349      <bezel element="text_result">
350         <bounds x="65" y="-54" width="40" height="10" />
351      </bezel>
352      <bezel element="text_credits">
353         <bounds x="65" y="-34" width="40" height="10" />
354      </bezel>
355
356
357<!-- time -->
358
359<!-- (the area above TIME has a racecar drawn on the cab) -->
360
361      <bezel element="static_green">
362         <bounds x="125" y="-64" width="50" height="55" />
363      </bezel>
364      <bezel element="static_black">
365         <bounds x="129" y="-59" width="42" height="30" />
366      </bezel>
367      <bezel element="static_gray">
368         <bounds x="129" y="-45" width="42" height="31" />
369      </bezel>
370      <bezel element="static_black">
371         <bounds x="131" y="-43" width="38" height="27" />
372      </bezel>
373
374      <bezel element="text_time">
375         <bounds x="129" y="-60" width="42" height="15" />
376      </bezel>
377
378      <bezel name="digit4" element="digit">
379         <bounds x="135" y="-41" width="15" height="23" />
380      </bezel>
381      <bezel name="digit5" element="digit">
382         <bounds x="150" y="-41" width="15" height="23" />
383      </bezel>
384
385
386<!-- highscores -->
387
388      <bezel element="static_gray">
389         <bounds x="197" y="-117" width="83" height="103" />
390      </bezel>
391      <bezel element="static_black">
392         <bounds x="199" y="-115" width="79" height="99" />
393      </bezel>
394
395      <bezel element="text_1">
396         <bounds x="212" y="-114" width="10" height="15" />
397      </bezel>
398      <bezel element="text_st">
399         <bounds x="222.5" y="-114" width="10" height="10" />
400      </bezel>
401      <bezel name="digit32" element="digit">
402         <bounds x="234" y="-113" width="10" height="15" />
403      </bezel>
404      <bezel name="digit33" element="digit">
405         <bounds x="244" y="-113" width="10" height="15" />
406      </bezel>
407      <bezel name="digit34" element="digit">
408         <bounds x="254" y="-113" width="10" height="15" />
409      </bezel>
410      <bezel name="digit35" element="digit">
411         <bounds x="264" y="-113" width="10" height="15" />
412      </bezel>
413
414      <bezel element="text_2">
415         <bounds x="212" y="-94" width="10" height="15" />
416      </bezel>
417      <bezel element="text_nd">
418         <bounds x="222.5" y="-94" width="10" height="10" />
419      </bezel>
420      <bezel name="digit36" element="digit">
421         <bounds x="234" y="-93" width="10" height="15" />
422      </bezel>
423      <bezel name="digit37" element="digit">
424         <bounds x="244" y="-93" width="10" height="15" />
425      </bezel>
426      <bezel name="digit24" element="digit">
427         <bounds x="254" y="-93" width="10" height="15" />
428      </bezel>
429      <bezel name="digit25" element="digit">
430         <bounds x="264" y="-93" width="10" height="15" />
431      </bezel>
432
433      <bezel element="text_3">
434         <bounds x="212" y="-74" width="10" height="15" />
435      </bezel>
436      <bezel element="text_rd">
437         <bounds x="222.5" y="-74" width="10" height="10" />
438      </bezel>
439      <bezel name="digit26" element="digit">
440         <bounds x="234" y="-73" width="10" height="15" />
441      </bezel>
442      <bezel name="digit27" element="digit">
443         <bounds x="244" y="-73" width="10" height="15" />
444      </bezel>
445      <bezel name="digit28" element="digit">
446         <bounds x="254" y="-73" width="10" height="15" />
447      </bezel>
448      <bezel name="digit29" element="digit">
449         <bounds x="264" y="-73" width="10" height="15" />
450      </bezel>
451
452      <bezel element="text_4">
453         <bounds x="212" y="-54" width="10" height="15" />
454      </bezel>
455      <bezel element="text_th">
456         <bounds x="222.5" y="-54" width="10" height="10" />
457      </bezel>
458      <bezel name="digit16" element="digit">
459         <bounds x="234" y="-53" width="10" height="15" />
460      </bezel>
461      <bezel name="digit17" element="digit">
462         <bounds x="244" y="-53" width="10" height="15" />
463      </bezel>
464      <bezel name="digit18" element="digit">
465         <bounds x="254" y="-53" width="10" height="15" />
466      </bezel>
467      <bezel name="digit19" element="digit">
468         <bounds x="264" y="-53" width="10" height="15" />
469      </bezel>
470
471      <bezel element="text_5">
472         <bounds x="212" y="-34" width="10" height="15" />
473      </bezel>
474      <bezel element="text_th">
475         <bounds x="222.5" y="-34" width="10" height="10" />
476      </bezel>
477      <bezel name="digit20" element="digit">
478         <bounds x="234" y="-33" width="10" height="15" />
479      </bezel>
480      <bezel name="digit21" element="digit">
481         <bounds x="244" y="-33" width="10" height="15" />
482      </bezel>
483      <bezel name="digit8" element="digit">
484         <bounds x="254" y="-33" width="10" height="15" />
485      </bezel>
486      <bezel name="digit9" element="digit">
487         <bounds x="264" y="-33" width="10" height="15" />
488      </bezel>
489
490      <bezel element="static_red">
491         <bounds x="199" y="-115" width="14" height="99" />
492      </bezel>
493      <bezel element="text_h">
494         <bounds x="199" y="-113" width="14" height="9" />
495      </bezel>
496      <bezel element="text_i">
497         <bounds x="199" y="-103.5" width="14" height="9" />
498      </bezel>
499      <bezel element="text_g">
500         <bounds x="199" y="-94" width="14" height="9" />
501      </bezel>
502      <bezel element="text_h">
503         <bounds x="199" y="-84.5" width="14" height="9" />
504      </bezel>
505      <bezel element="text_s">
506         <bounds x="199" y="-75" width="14" height="9" />
507      </bezel>
508      <bezel element="text_c">
509         <bounds x="199" y="-65.5" width="14" height="9" />
510      </bezel>
511      <bezel element="text_o">
512         <bounds x="199" y="-56" width="14" height="9" />
513      </bezel>
514      <bezel element="text_r">
515         <bounds x="199" y="-46.5" width="14" height="9" />
516      </bezel>
517      <bezel element="text_e">
518         <bounds x="199" y="-37" width="14" height="9" />
519      </bezel>
520      <bezel element="text_s">
521         <bounds x="199" y="-27.5" width="14" height="9" />
522      </bezel>
523
524
7525   </view>
8526</mamelayout>

Previous 199869 Revisions Next


© 1997-2024 The MAME Team