Previous 199869 Revisions Next

r29643 Monday 14th April, 2014 at 20:46:23 UTC by Alex Jackson
Sync with trunk (nw)
[/branches/old_menus/src/emu]digfx.c
[/branches/old_menus/src/emu/bus/c64]ieee488.c magic_voice.c
[/branches/old_menus/src/emu/bus/plus4]c1551.c
[/branches/old_menus/src/emu/machine]6525tpi.c 6525tpi.h ay31015.c ay31015.h
[/branches/old_menus/src/mame/drivers]toaplan2.c
[/branches/old_menus/src/mame/includes]toaplan2.h
[/branches/old_menus/src/mame/video]gp9001.c gp9001.h toaplan2.c
[/branches/old_menus/src/mess]mess.mak
[/branches/old_menus/src/mess/drivers]amiga.c avigo.c cbm2.c hp9k.c hunter2.c ie15.c nascom1.c ptcsol.c sorcerer.c trs80.c z80ne.c
[/branches/old_menus/src/mess/layout]ie15.lay*
[/branches/old_menus/src/mess/machine]ie15_kbd.c* ie15_kbd.h*

branches/old_menus/src/mame/includes/toaplan2.h
r29642r29643
3232      m_mainram16(*this, "mainram16"),
3333      m_maincpu(*this, "maincpu"),
3434      m_audiocpu(*this, "audiocpu"),
35      m_vdp0(*this, "gp9001vdp0"),
36      m_vdp1(*this, "gp9001vdp1"),
35      m_vdp0(*this, "gp9001"),
36      m_vdp1(*this, "gp9001_1"),
3737      m_nmk112(*this, "nmk112"),
3838      m_oki(*this, "oki"),
3939      m_oki1(*this, "oki1"),
r29642r29643
6161   optional_device<okim6295_device> m_oki1;
6262   optional_device<eeprom_serial_93cxx_device> m_eeprom;
6363   optional_device<upd4992_device> m_rtc;
64   required_device<gfxdecode_device> m_gfxdecode;
64   optional_device<gfxdecode_device> m_gfxdecode;
6565   required_device<screen_device> m_screen;
6666   required_device<palette_device> m_palette;
6767
6868   UINT16 m_mcu_data;
69   UINT16 m_video_status;
7069   INT8 m_old_p1_paddle_h; /* For Ghox */
7170   INT8 m_old_p2_paddle_h;
7271   UINT8 m_v25_reset_line; /* 0x20 for dogyuun/batsugun, 0x10 for vfive, 0x08 for fixeight */
branches/old_menus/src/mame/video/toaplan2.c
r29642r29643
11/***************************************************************************
22
33 Functions to emulate additional video hardware on several Toaplan2 games.
4 The main video is handled by the GP9001 (see video gp9001.c)
4 The main video is handled by the GP9001 (see video/gp9001.c)
55
66 Extra-text RAM format
77
r29642r29643
4141   attrib = m_tx_videoram[tile_index];
4242   tile_number = attrib & 0x3ff;
4343   color = attrib >> 10;
44   SET_TILE_INFO_MEMBER(2,
44   SET_TILE_INFO_MEMBER(0,
4545         tile_number,
4646         color,
4747         0);
r29642r29643
6666
6767void toaplan2_state::truxton2_postload()
6868{
69   for (int i = 0; i < 1024; i++)
70      m_gfxdecode->gfx(2)->mark_dirty(i);
69   m_gfxdecode->gfx(0)->mark_all_dirty();
7170}
7271
7372VIDEO_START_MEMBER(toaplan2_state,toaplan2)
r29642r29643
9392   VIDEO_START_CALL_MEMBER( toaplan2 );
9493
9594   /* Create the Text tilemap for this game */
96   m_gfxdecode->gfx(2)->set_source(reinterpret_cast<UINT8 *>(m_tx_gfxram16.target()));
95   m_gfxdecode->gfx(0)->set_source(reinterpret_cast<UINT8 *>(m_tx_gfxram16.target()));
9796   machine().save().register_postload(save_prepost_delegate(FUNC(toaplan2_state::truxton2_postload), this));
9897
9998   create_tx_tilemap(0x1d5, 0x16a);
r29642r29643
146145
147146   /* Create the Text tilemap for this game */
148147   m_tx_gfxram16.allocate(RAIZING_TX_GFXRAM_SIZE/2);
149   m_gfxdecode->gfx(2)->set_source(reinterpret_cast<UINT8 *>(m_tx_gfxram16.target()));
148   m_gfxdecode->gfx(0)->set_source(reinterpret_cast<UINT8 *>(m_tx_gfxram16.target()));
150149   machine().save().register_postload(save_prepost_delegate(FUNC(toaplan2_state::truxton2_postload), this));
151150
152151   create_tx_tilemap(0x1d4, 0x16b);
r29642r29643
178177
179178   if (oldword != data)
180179   {
181      int code = offset/32;
182180      COMBINE_DATA(&m_tx_gfxram16[offset]);
183      m_gfxdecode->gfx(2)->mark_dirty(code);
181      m_gfxdecode->gfx(0)->mark_dirty(offset/32);
184182   }
185183}
186184
r29642r29643
201199   dest += (m_tx_linescroll.bytes()/2);
202200   memcpy(dest, m_mainram16, m_mainram16.bytes());
203201
204   for (int i = 0; i < 1024; i++)
205      m_gfxdecode->gfx(2)->mark_dirty(i);
202   m_gfxdecode->gfx(0)->mark_all_dirty();
206203}
207204
208205WRITE16_MEMBER(toaplan2_state::batrider_unknown_dma_w)
r29642r29643
349346
350347UINT32 toaplan2_state::screen_update_toaplan2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
351348{
352   if (m_vdp0)
353   {
354      bitmap.fill(0, cliprect);
355      m_custom_priority_bitmap.fill(0, cliprect);
356      m_vdp0->gp9001_render_vdp(machine(), bitmap, cliprect);
357   }
349   bitmap.fill(0, cliprect);
350   m_custom_priority_bitmap.fill(0, cliprect);
351   m_vdp0->gp9001_render_vdp(machine(), bitmap, cliprect);
358352
359353   return 0;
360354}
branches/old_menus/src/mame/video/gp9001.c
r29642r29643
150150
151151WRITE16_MEMBER( gp9001vdp_device::gp9001_bg_tmap_w )
152152{
153   COMBINE_DATA(&bg.vram16[offset]);
153   COMBINE_DATA(&m_vram_bg[offset]);
154154   bg.tmap->mark_tile_dirty(offset/2);
155155}
156156
157157WRITE16_MEMBER( gp9001vdp_device::gp9001_fg_tmap_w )
158158{
159   COMBINE_DATA(&fg.vram16[offset]);
159   COMBINE_DATA(&m_vram_fg[offset]);
160160   fg.tmap->mark_tile_dirty(offset/2);
161161}
162162
163163WRITE16_MEMBER( gp9001vdp_device::gp9001_top_tmap_w )
164164{
165   COMBINE_DATA(&top.vram16[offset]);
165   COMBINE_DATA(&m_vram_top[offset]);
166166   top.tmap->mark_tile_dirty(offset/2);
167167}
168168
169READ16_MEMBER( gp9001vdp_device::gp9001_bg_tmap_r )
170{
171   return bg.vram16[offset];
172}
173169
174READ16_MEMBER( gp9001vdp_device::gp9001_fg_tmap_r )
175{
176   return fg.vram16[offset];
177}
170DEVICE_ADDRESS_MAP_START( map, 16, gp9001vdp_device )
171   AM_RANGE(0x0000, 0x0fff) AM_RAM_WRITE(gp9001_bg_tmap_w) AM_SHARE("vram_bg")
172   AM_RANGE(0x1000, 0x1fff) AM_RAM_WRITE(gp9001_fg_tmap_w) AM_SHARE("vram_fg")
173   AM_RANGE(0x2000, 0x2fff) AM_RAM_WRITE(gp9001_top_tmap_w) AM_SHARE("vram_top")
174   AM_RANGE(0x3000, 0x37ff) AM_RAM AM_SHARE("spriteram")
175   AM_RANGE(0x3800, 0x3fff) AM_RAM // sprite mirror?
176ADDRESS_MAP_END
178177
179READ16_MEMBER( gp9001vdp_device::gp9001_top_tmap_r )
180{
181   return top.vram16[offset];
182}
183178
184READ16_MEMBER( gp9001vdp_device::gp9001_spram_r )
179const gfx_layout gp9001vdp_device::tilelayout =
185180{
186   return sp.vram16[offset];
187}
181   16,16,          /* 16x16 */
182   RGN_FRAC(1,2),  /* Number of tiles */
183   4,              /* 4 bits per pixel */
184   { RGN_FRAC(1,2)+8, RGN_FRAC(1,2), 8, 0 },
185   { 0, 1, 2, 3, 4, 5, 6, 7,
186      8*16+0, 8*16+1, 8*16+2, 8*16+3, 8*16+4, 8*16+5, 8*16+6, 8*16+7 },
187   { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
188      16*16, 17*16, 18*16, 19*16, 20*16, 21*16, 22*16, 23*16 },
189   8*4*16
190};
188191
189WRITE16_MEMBER( gp9001vdp_device::gp9001_spram_w )
192const gfx_layout gp9001vdp_device::spritelayout =
190193{
191   COMBINE_DATA(&sp.vram16[offset]);
192}
194   8,8,            /* 8x8 */
195   RGN_FRAC(1,2),  /* Number of 8x8 sprites */
196   4,              /* 4 bits per pixel */
197   { RGN_FRAC(1,2)+8, RGN_FRAC(1,2), 8, 0 },
198   { 0, 1, 2, 3, 4, 5, 6, 7 },
199   { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
200   8*16
201};
193202
194static ADDRESS_MAP_START( gp9001vdp_map, AS_0, 16, gp9001vdp_device )
195   AM_RANGE(0x0000, 0x0fff) AM_READWRITE(gp9001_bg_tmap_r, gp9001_bg_tmap_w)
196   AM_RANGE(0x1000, 0x1fff) AM_READWRITE(gp9001_fg_tmap_r, gp9001_fg_tmap_w)
197   AM_RANGE(0x2000, 0x2fff) AM_READWRITE(gp9001_top_tmap_r, gp9001_top_tmap_w)
198   AM_RANGE(0x3000, 0x37ff) AM_READWRITE(gp9001_spram_r, gp9001_spram_w)
199   AM_RANGE(0x3800, 0x3fff) AM_RAM // sprite mirror?
200ADDRESS_MAP_END
203GFXDECODE_MEMBER( gp9001vdp_device::gfxinfo )
204   GFXDECODE_DEVICE( DEVICE_SELF, 0, tilelayout,   0, 0x1000 )
205   GFXDECODE_DEVICE( DEVICE_SELF, 0, spritelayout, 0, 0x1000 )
206GFXDECODE_END
201207
202208
203209const device_type GP9001_VDP = &device_creator<gp9001vdp_device>;
204210
205211gp9001vdp_device::gp9001vdp_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
206212   : device_t(mconfig, GP9001_VDP, "GP9001 VDP", tag, owner, clock, "gp9001vdp", __FILE__),
213      device_gfx_interface(mconfig, *this, gfxinfo),
207214      device_video_interface(mconfig, *this),
208215      device_memory_interface(mconfig, *this),
209      m_space_config("gp9001vdp", ENDIANNESS_BIG, 16,14, 0, NULL, *ADDRESS_MAP_NAME(gp9001vdp_map)),
210      m_gfxregion(0),
211      m_gfxdecode(*this),
212      m_palette(*this)
216      m_space_config("gp9001vdp", ENDIANNESS_BIG, 16,14, 0, address_map_delegate(FUNC(gp9001vdp_device::map), this)),
217      m_vram_bg(*this, "vram_bg"),
218      m_vram_fg(*this, "vram_fg"),
219      m_vram_top(*this, "vram_top"),
220      m_spriteram(*this, "spriteram")
213221{
214222}
215223
216//-------------------------------------------------
217//  static_set_gfxdecode_tag: Set the tag of the
218//  gfx decoder
219//-------------------------------------------------
220
221void gp9001vdp_device::static_set_gfxdecode_tag(device_t &device, const char *tag)
222{
223   downcast<gp9001vdp_device &>(device).m_gfxdecode.set_tag(tag);
224}
225
226
227void gp9001vdp_device::static_set_gfx_region(device_t &device, int gfxregion)
228{
229   gp9001vdp_device &vdp = downcast<gp9001vdp_device &>(device);
230   vdp.m_gfxregion = gfxregion;
231}
232
233void gp9001vdp_device::device_validity_check(validity_checker &valid) const
234{
235}
236
237224const address_space_config *gp9001vdp_device::memory_space_config(address_spacenum spacenum) const
238225{
239226   return (spacenum == 0) ? &m_space_config : NULL;
r29642r29643
243230{
244231   int color, tile_number, attrib;
245232
246   attrib = top.vram16[2*tile_index];
233   attrib = m_vram_top[2*tile_index];
247234
248   tile_number = top.vram16[2*tile_index+1];
235   tile_number = m_vram_top[2*tile_index+1];
249236
250237   if (gp9001_gfxrom_is_banked)
251238   {
r29642r29643
253240   }
254241
255242   color = attrib & 0x0fff; // 0x0f00 priority, 0x007f colour
256   SET_TILE_INFO_MEMBER(tile_region,
243   SET_TILE_INFO_MEMBER(0,
257244         tile_number,
258245         color,
259246         0);
r29642r29643
264251{
265252   int color, tile_number, attrib;
266253
267   attrib = fg.vram16[2*tile_index];
254   attrib = m_vram_fg[2*tile_index];
268255
269   tile_number = fg.vram16[2*tile_index+1];
256   tile_number = m_vram_fg[2*tile_index+1];
270257
271258
272259   if (gp9001_gfxrom_is_banked)
r29642r29643
275262   }
276263
277264   color = attrib & 0x0fff; // 0x0f00 priority, 0x007f colour
278   SET_TILE_INFO_MEMBER(tile_region,
265   SET_TILE_INFO_MEMBER(0,
279266         tile_number,
280267         color,
281268         0);
r29642r29643
285272TILE_GET_INFO_MEMBER(gp9001vdp_device::get_bg0_tile_info)
286273{
287274   int color, tile_number, attrib;
288   attrib = bg.vram16[2*tile_index];
275   attrib = m_vram_bg[2*tile_index];
289276
290   tile_number = bg.vram16[2*tile_index+1];
277   tile_number = m_vram_bg[2*tile_index+1];
291278
292279   if (gp9001_gfxrom_is_banked)
293280   {
r29642r29643
295282   }
296283
297284   color = attrib & 0x0fff; // 0x0f00 priority, 0x007f colour
298   SET_TILE_INFO_MEMBER(tile_region,
285   SET_TILE_INFO_MEMBER(0,
299286         tile_number,
300287         color,
301288         0);
302289   //tileinfo.category = (attrib & 0x0f00) >> 8;
303290}
304291
305void gp9001vdp_device::create_tilemaps(int region)
292void gp9001vdp_device::create_tilemaps()
306293{
307   tile_region = region;
294   top.tmap = &machine().tilemap().create(*this, tilemap_get_info_delegate(FUNC(gp9001vdp_device::get_top0_tile_info),this),TILEMAP_SCAN_ROWS,16,16,32,32);
295   fg.tmap = &machine().tilemap().create(*this, tilemap_get_info_delegate(FUNC(gp9001vdp_device::get_fg0_tile_info),this),TILEMAP_SCAN_ROWS,16,16,32,32);
296   bg.tmap = &machine().tilemap().create(*this, tilemap_get_info_delegate(FUNC(gp9001vdp_device::get_bg0_tile_info),this),TILEMAP_SCAN_ROWS,16,16,32,32);
308297
309   top.tmap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(gp9001vdp_device::get_top0_tile_info),this),TILEMAP_SCAN_ROWS,16,16,32,32);
310   fg.tmap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(gp9001vdp_device::get_fg0_tile_info),this),TILEMAP_SCAN_ROWS,16,16,32,32);
311   bg.tmap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(gp9001vdp_device::get_bg0_tile_info),this),TILEMAP_SCAN_ROWS,16,16,32,32);
312
313298   top.tmap->set_transparent_pen(0);
314299   fg.tmap->set_transparent_pen(0);
315300   bg.tmap->set_transparent_pen(0);
r29642r29643
318303
319304void gp9001vdp_device::device_start()
320305{
321   if(!m_gfxdecode->started())
322      throw device_missing_dependencies();
323
324   top.vram16 = auto_alloc_array_clear(machine(), UINT16, GP9001_TOP_VRAM_SIZE/2);
325   fg.vram16 = auto_alloc_array_clear(machine(), UINT16, GP9001_FG_VRAM_SIZE/2);
326   bg.vram16 = auto_alloc_array_clear(machine(), UINT16, GP9001_BG_VRAM_SIZE/2);
327
328   sp.vram16 = auto_alloc_array_clear(machine(), UINT16, GP9001_SPRITERAM_SIZE/2);
329306   sp.vram16_buffer = auto_alloc_array_clear(machine(), UINT16, GP9001_SPRITERAM_SIZE/2);
330307
331   create_tilemaps(m_gfxregion);
308   create_tilemaps();
332309
333   save_pointer(NAME(sp.vram16), GP9001_SPRITERAM_SIZE/2);
334310   save_pointer(NAME(sp.vram16_buffer), GP9001_SPRITERAM_SIZE/2);
335   save_pointer(NAME(top.vram16), GP9001_TOP_VRAM_SIZE/2);
336   save_pointer(NAME(fg.vram16), GP9001_FG_VRAM_SIZE/2);
337   save_pointer(NAME(bg.vram16), GP9001_BG_VRAM_SIZE/2);
338311
339312   save_item(NAME(gp9001_scroll_reg));
340313   save_item(NAME(gp9001_voffs));
r29642r29643
397370}
398371
399372
400void gp9001vdp_device::gp9001_voffs_w(offs_t offset, UINT16 data, UINT16 mem_mask)
373void gp9001vdp_device::gp9001_voffs_w(UINT16 data, UINT16 mem_mask)
401374{
402375   COMBINE_DATA(&gp9001_voffs);
403376}
404377
405int gp9001vdp_device::gp9001_videoram16_r(offs_t offset)
378int gp9001vdp_device::gp9001_videoram16_r()
406379{
407380   int offs = gp9001_voffs;
408381   gp9001_voffs++;
r29642r29643
410383}
411384
412385
413void gp9001vdp_device::gp9001_videoram16_w(offs_t offset, UINT16 data, UINT16 mem_mask)
386void gp9001vdp_device::gp9001_videoram16_w(UINT16 data, UINT16 mem_mask)
414387{
415388   int offs = gp9001_voffs;
416389   gp9001_voffs++;
r29642r29643
423396   return ((m_screen->vpos() + 15) % 262) >= 245;
424397}
425398
426void gp9001vdp_device::gp9001_scroll_reg_select_w( offs_t offset, UINT16 data, UINT16 mem_mask )
399void gp9001vdp_device::gp9001_scroll_reg_select_w(UINT16 data, UINT16 mem_mask)
427400{
428401   if (ACCESSING_BITS_0_7)
429402   {
430403      gp9001_scroll_reg = data & 0x8f;
431404      if (data & 0x70)
432         logerror("Hmmm, selecting unknown LSB video control register (%04x)  Video controller %01x  \n",gp9001_scroll_reg,tile_region>>1);
405         logerror("Hmmm, selecting unknown LSB video control register (%04x)\n",gp9001_scroll_reg);
433406   }
434407   else
435408   {
436      logerror("Hmmm, selecting unknown MSB video control register (%04x)  Video controller %01x  \n",gp9001_scroll_reg,tile_region>>1);
409      logerror("Hmmm, selecting unknown MSB video control register (%04x)\n",gp9001_scroll_reg);
437410   }
438411}
439412
r29642r29643
514487   }
515488}
516489
517void gp9001vdp_device::gp9001_scroll_reg_data_w(offs_t offset, UINT16 data, UINT16 mem_mask)
490void gp9001vdp_device::gp9001_scroll_reg_data_w(UINT16 data, UINT16 mem_mask)
518491{
519492   /************************************************************************/
520493   /***** layer X and Y flips can be set independently, so emulate it ******/
521494   /************************************************************************/
522495
523   //printf("gp9001_scroll_reg_data_w %04x %04x\n", offset, data);
524
525496   // writes with 8x set turn on flip for the specified layer / axis
526497   int flip = gp9001_scroll_reg & 0x80;
527498
r29642r29643
545516      case 0x0f:  break;
546517
547518
548      default:    logerror("Hmmm, writing %08x to unknown video control register (%08x) Video controller %01x  !!!\n",data ,gp9001_scroll_reg,tile_region>>1);
519      default:    logerror("Hmmm, writing %08x to unknown video control register (%08x) !!!\n",data,gp9001_scroll_reg);
549520               break;
550521   }
551522}
r29642r29643
566537
567538READ16_MEMBER( gp9001vdp_device::gp9001_vdp_r )
568539{
569   switch (offset)
540   switch (offset & (0xc/2))
570541   {
571542      case 0x04/2:
572      case 0x06/2:
573         return gp9001_videoram16_r(offset-0x04/2);
543         return gp9001_videoram16_r();
574544
575545      case 0x0c/2:
576546         return gp9001_vdpstatus_r();
r29642r29643
584554
585555WRITE16_MEMBER( gp9001vdp_device::gp9001_vdp_w )
586556{
587   switch (offset)
557   switch (offset & (0xc/2))
588558   {
589559      case 0x00/2:
590         gp9001_voffs_w(offset-0x00/2, data, mem_mask);
560         gp9001_voffs_w(data, mem_mask);
591561         break;
592562
593563      case 0x04/2:
594      case 0x06/2:
595         gp9001_videoram16_w(offset-0x04/2, data, mem_mask);
564         gp9001_videoram16_w(data, mem_mask);
596565         break;
597566
598567      case 0x08/2:
599         gp9001_scroll_reg_select_w(offset-0x08/2, data, mem_mask);
568         gp9001_scroll_reg_select_w(data, mem_mask);
600569         break;
601570
602571      case 0x0c/2:
603         gp9001_scroll_reg_data_w(offset-0x0c/2, data, mem_mask);
572         gp9001_scroll_reg_data_w(data, mem_mask);
604573         break;
605
606      default:
607         logerror("gp9001_vdp_w: write to unhandled offset %04x %04x\n",offset, data);
608         break;
609574   }
610575}
611576
612/* some raizing games have a different layout */
577/* batrider and bbakraid invert the register select lines */
613578READ16_MEMBER( gp9001vdp_device::gp9001_vdp_alt_r )
614579{
615   switch (offset)
580   switch (offset & (0xc/2))
616581   {
617      case 0x00/2:
582      case 0x0/2:
618583         return gp9001_vdpstatus_r();
619584
620      case 0x08/2:
621      case 0x0a/2:
622         return gp9001_videoram16_r(offset-0x04/2);
585      case 0x8/2:
586         return gp9001_videoram16_r();
623587
624
625588      default:
626589         logerror("gp9001_vdp_alt_r: read from unhandled offset %04x\n",offset*2);
627590   }
r29642r29643
631594
632595WRITE16_MEMBER( gp9001vdp_device::gp9001_vdp_alt_w )
633596{
634   switch (offset)
597   switch (offset & (0xc/2))
635598   {
636      case 0x00/2:
637         gp9001_scroll_reg_data_w(offset-0x0c/2, data, mem_mask);
599      case 0x0/2:
600         gp9001_scroll_reg_data_w(data, mem_mask);
638601         break;
639602
640      case 0x04/2:
641         gp9001_scroll_reg_select_w(offset-0x08/2, data, mem_mask);
603      case 0x4/2:
604         gp9001_scroll_reg_select_w(data, mem_mask);
642605         break;
643606
644      case 0x08/2:
645      case 0x0a/2:
646         gp9001_videoram16_w(offset-0x04/2, data, mem_mask);
607      case 0x8/2:
608         gp9001_videoram16_w(data, mem_mask);
647609         break;
648610
649      case 0x0c/2:
650         gp9001_voffs_w(offset-0x00/2, data, mem_mask);
611      case 0xc/2:
612         gp9001_voffs_w(data, mem_mask);
651613         break;
652
653      default:
654         logerror("gp9001_vdp_alt_w: write to unhandled offset %04x %04x\n",offset, data);
655         break;
656614   }
657615}
658616
r29642r29643
679637      }
680638
681639      gp9001_scroll_reg = offset;
682      gp9001_scroll_reg_data_w(offset, data, mem_mask);
640      gp9001_scroll_reg_data_w(data, mem_mask);
683641   }
684642}
685643
686644READ16_MEMBER( gp9001vdp_device::pipibibi_bootleg_videoram16_r )
687645{
688   gp9001_voffs_w(0, offset, 0xffff);
689   return gp9001_videoram16_r(0);
646   gp9001_voffs_w(offset, 0xffff);
647   return gp9001_videoram16_r();
690648}
691649
692650WRITE16_MEMBER( gp9001vdp_device::pipibibi_bootleg_videoram16_w )
693651{
694   gp9001_voffs_w(0, offset, 0xffff);
695   gp9001_videoram16_w(0, data, mem_mask);
652   gp9001_voffs_w(offset, 0xffff);
653   gp9001_videoram16_w(data, mem_mask);
696654}
697655
698656READ16_MEMBER( gp9001vdp_device::pipibibi_bootleg_spriteram16_r )
699657{
700   gp9001_voffs_w(0, (0x1800 + offset), 0);
701   return gp9001_videoram16_r(0);
658   gp9001_voffs_w((0x1800 + offset), 0);
659   return gp9001_videoram16_r();
702660}
703661
704662WRITE16_MEMBER( gp9001vdp_device::pipibibi_bootleg_spriteram16_w )
705663{
706   gp9001_voffs_w(0, (0x1800 + offset), mem_mask);
707   gp9001_videoram16_w(0, data, mem_mask);
664   gp9001_voffs_w((0x1800 + offset), mem_mask);
665   gp9001_videoram16_w(data, mem_mask);
708666}
709667
710668/***************************************************************************
r29642r29643
713671
714672void gp9001vdp_device::draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, const UINT8* primap )
715673{
716   gfx_element *gfx = m_gfxdecode->gfx(tile_region+1);
674   const UINT16 primask = (GP9001_PRIMASK << 8);
717675
718   int offs, old_x, old_y;
719
720676   UINT16 *source;
721677
722   if (sp.use_sprite_buffer) source=(UINT16 *)(sp.vram16_buffer);
723   else source=(UINT16 *)(sp.vram16);
678   if (sp.use_sprite_buffer) source = sp.vram16_buffer;
679   else source = m_spriteram;
680   gfx_element *spritegfx = gfx(1);
681   int total_elements = spritegfx->elements();
682   int total_colors = spritegfx->colors();
724683
725   old_x = (-(sp.scrollx)) & 0x1ff;
726   old_y = (-(sp.scrolly)) & 0x1ff;
684   int old_x = (-(sp.scrollx)) & 0x1ff;
685   int old_y = (-(sp.scrolly)) & 0x1ff;
727686
728
729   for (offs = 0; offs < (GP9001_SPRITERAM_SIZE/2); offs += 4)
687   for (int offs = 0; offs < (GP9001_SPRITERAM_SIZE/2); offs += 4)
730688   {
731689      int attrib, sprite, color, priority, flipx, flipy, sx, sy;
732690      int sprite_sizex, sprite_sizey, dim_x, dim_y, sx_base, sy_base;
733691      int bank, sprite_num;
734      UINT16 primask = (GP9001_PRIMASK << 8);
735692
736693      attrib = source[offs];
737694      priority = primap[((attrib & primask)>>8)]+1;
r29642r29643
821778                   flipx,flipy,
822779                   sx,sy,0);
823780               */
824               sprite %= gfx->elements();
825               color %= gfx->colors();
826
781               sprite %= total_elements;
782               color %= total_colors;
783               const pen_t *paldata = &palette()->pen(color * 16);
827784               {
828785                  int yy, xx;
829                  const pen_t *paldata = &m_palette->pen(gfx->colorbase() + gfx->granularity() * color);
830                  const UINT8* srcdata = gfx->get_data(sprite);
786                  const UINT8* srcdata = spritegfx->get_data(sprite);
831787                  int count = 0;
832788                  int ystart, yend, yinc;
833789                  int xstart, xend, xinc;
r29642r29643
976932void gp9001vdp_device::gp9001_screen_eof(void)
977933{
978934   /** Shift sprite RAM buffers  ***  Used to fix sprite lag **/
979   if (sp.use_sprite_buffer) memcpy(sp.vram16_buffer,sp.vram16,GP9001_SPRITERAM_SIZE);
935   if (sp.use_sprite_buffer) memcpy(sp.vram16_buffer,m_spriteram,GP9001_SPRITERAM_SIZE);
980936}
981
982//-------------------------------------------------
983//  static_set_palette_tag: Set the tag of the
984//  palette device
985//-------------------------------------------------
986
987void gp9001vdp_device::static_set_palette_tag(device_t &device, const char *tag)
988{
989   downcast<gp9001vdp_device &>(device).m_palette.set_tag(tag);
990}
branches/old_menus/src/mame/video/gp9001.h
r29642r29643
1414
1515   gp9001layeroffsets extra_xoffset;
1616   gp9001layeroffsets extra_yoffset;
17
18   UINT16* vram16; // vram for this layer
1917};
2018
2119struct gp9001tilemaplayer : gp9001layer
r29642r29643
3129
3230
3331class gp9001vdp_device : public device_t,
32                     public device_gfx_interface,
3433                     public device_video_interface,
3534                     public device_memory_interface
3635{
36   static const gfx_layout tilelayout, spritelayout;
37   DECLARE_GFXDECODE_MEMBER(gfxinfo);
38
3739public:
3840   gp9001vdp_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
3941
40   // static configuration
41   static void static_set_gfxdecode_tag(device_t &device, const char *tag);
42   static void static_set_palette_tag(device_t &device, const char *tag);
43   static void static_set_gfx_region(device_t &device, int gfxregion);
44
4542   UINT16 gp9001_voffs;
4643   UINT16 gp9001_scroll_reg;
4744
4845   gp9001tilemaplayer bg, top, fg;
4946   gp9001spritelayer sp;
5047
51   int    tile_region; // we also use this to figure out which vdp we're using in some debug logging features
52
5348   // technically this is just rom banking, allowing the chip to see more graphic ROM, however it's easier to handle it
5449   // in the chip implementation than externally for now (which would require dynamic decoding of the entire charsets every
5550   // time the bank was changed)
r29642r29643
6257   void gp9001_draw_custom_tilemap(running_machine& machine, bitmap_ind16 &bitmap, tilemap_t* tilemap, const UINT8* priremap, const UINT8* pri_enable );
6358   void gp9001_render_vdp(running_machine& machine, bitmap_ind16 &bitmap, const rectangle &cliprect);
6459   void gp9001_screen_eof(void);
65   void create_tilemaps(int region);
60   void create_tilemaps(void);
6661   void init_scroll_regs(void);
6762
6863   bitmap_ind8 *custom_priority_bitmap;
6964
65   DECLARE_ADDRESS_MAP(map, 16);
66
7067   // access to VDP
7168   DECLARE_READ16_MEMBER( gp9001_vdp_r );
7269   DECLARE_WRITE16_MEMBER( gp9001_vdp_w );
r29642r29643
8481   DECLARE_WRITE16_MEMBER( gp9001_bg_tmap_w );
8582   DECLARE_WRITE16_MEMBER( gp9001_fg_tmap_w );
8683   DECLARE_WRITE16_MEMBER( gp9001_top_tmap_w );
87   DECLARE_READ16_MEMBER( gp9001_bg_tmap_r );
88   DECLARE_READ16_MEMBER( gp9001_fg_tmap_r );
89   DECLARE_READ16_MEMBER( gp9001_top_tmap_r );
90   DECLARE_READ16_MEMBER( gp9001_spram_r );
91   DECLARE_WRITE16_MEMBER( gp9001_spram_w );
9284
9385protected:
94   virtual void device_validity_check(validity_checker &valid) const;
9586   virtual void device_start();
9687   virtual void device_reset();
9788
9889   virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
9990
10091   address_space_config        m_space_config;
101   UINT8                       m_gfxregion;
10292
10393   TILE_GET_INFO_MEMBER(get_top0_tile_info);
10494   TILE_GET_INFO_MEMBER(get_fg0_tile_info);
10595   TILE_GET_INFO_MEMBER(get_bg0_tile_info);
10696
10797private:
108   void gp9001_voffs_w(offs_t offset, UINT16 data, UINT16 mem_mask);
109   int gp9001_videoram16_r(offs_t offset);
110   void gp9001_videoram16_w(offs_t offset, UINT16 data, UINT16 mem_mask);
111   UINT16 gp9001_vdpstatus_r();
112   void gp9001_scroll_reg_select_w( offs_t offset, UINT16 data, UINT16 mem_mask );
113   void gp9001_scroll_reg_data_w(offs_t offset, UINT16 data, UINT16 mem_mask);
114   required_device<gfxdecode_device> m_gfxdecode;
115   required_device<palette_device> m_palette;
98   required_shared_ptr<UINT16> m_vram_bg;
99   required_shared_ptr<UINT16> m_vram_fg;
100   required_shared_ptr<UINT16> m_vram_top;
101   required_shared_ptr<UINT16> m_spriteram;
102
103   void gp9001_voffs_w(UINT16 data, UINT16 mem_mask);
104   int gp9001_videoram16_r(void);
105   void gp9001_videoram16_w(UINT16 data, UINT16 mem_mask);
106   UINT16 gp9001_vdpstatus_r(void);
107   void gp9001_scroll_reg_select_w(UINT16 data, UINT16 mem_mask);
108   void gp9001_scroll_reg_data_w(UINT16 data, UINT16 mem_mask);
116109};
117110
118111extern const device_type GP9001_VDP;
r29642r29643
123116#define GP9001_SPRITERAM_SIZE 0x800 /* Sprite     RAM size */
124117#define GP9001_SPRITE_FLIPX 0x1000  /* Sprite flip flags */
125118#define GP9001_SPRITE_FLIPY 0x2000
126
127
128
129/* vdp map 0, gfx region 0 */
130#define MCFG_DEVICE_ADD_VDP0 \
131   MCFG_DEVICE_ADD("gp9001vdp0", GP9001_VDP, 0) \
132   gp9001vdp_device::static_set_gfx_region(*device, 0);
133
134/* vdp map 1, gfx region 2 */
135#define MCFG_DEVICE_ADD_VDP1 \
136   MCFG_DEVICE_ADD("gp9001vdp1", GP9001_VDP, 0) \
137   gp9001vdp_device::static_set_gfx_region(*device, 2);
138
139#define MCFG_GP9001_VDP_GFXDECODE(_gfxtag) \
140   gp9001vdp_device::static_set_gfxdecode_tag(*device, "^" _gfxtag);
141
142#define MCFG_GP9001_VDP_PALETTE(_palette_tag) \
143   gp9001vdp_device::static_set_palette_tag(*device, "^" _palette_tag);
branches/old_menus/src/mame/drivers/toaplan2.c
r29642r29643
368368MACHINE_START_MEMBER(toaplan2_state,toaplan2)
369369{
370370   save_item(NAME(m_mcu_data));
371   save_item(NAME(m_video_status));
372371   save_item(NAME(m_old_p1_paddle_h));
373372   save_item(NAME(m_old_p2_paddle_h));
374373   save_item(NAME(m_z80_busreq));
r29642r29643
505504   int hpos = m_screen->hpos();
506505   int vpos = m_screen->vpos();
507506
508   m_video_status = 0xff00;    // Set signals inactive
507   int video_status = 0xff00;    // Set signals inactive
509508
510509   vpos = (vpos + 15) % 262;
511510
r29642r29643
515514   vblank = (vpos >= 247) && (vpos <= 250);
516515
517516   if (hblank)
518      m_video_status &= ~0x8000;
517      video_status &= ~0x8000;
519518   if (vblank)
520      m_video_status &= ~0x4000;
519      video_status &= ~0x4000;
521520   if (vblank || hblank) // ?? Dogyuun is too slow if this is wrong
522      m_video_status &= ~0x0100;
521      video_status &= ~0x0100;
523522   if (vpos < 256)
524      m_video_status |= (vpos & 0xff);
523      video_status |= (vpos & 0xff);
525524   else
526      m_video_status |= 0xff;
525      video_status |= 0xff;
527526
528527//  logerror("VC: vpos=%04x hpos=%04x VBL=%04x\n",vpos,hpos,m_screen->vblank());
529528
530   return m_video_status;
529   return video_status;
531530}
532531
533532
r29642r29643
990989   AM_RANGE(0x020000, 0x03ffff) AM_ROM                     // extra for Whoopee
991990   AM_RANGE(0x080000, 0x082fff) AM_RAM
992991   AM_RANGE(0x0c0000, 0x0c0fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
993   AM_RANGE(0x140000, 0x14000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
992   AM_RANGE(0x140000, 0x14000d) AM_DEVREADWRITE("gp9001", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
994993   AM_RANGE(0x180000, 0x180001) AM_READ_PORT("DSWA")
995994   AM_RANGE(0x180010, 0x180011) AM_READ_PORT("DSWB")
996995   AM_RANGE(0x180020, 0x180021) AM_READ_PORT("SYS")
r29642r29643
10081007   AM_RANGE(0x080000, 0x083fff) AM_RAM
10091008   AM_RANGE(0x0c0000, 0x0c0fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
10101009   AM_RANGE(0x100000, 0x100001) AM_READ(ghox_p1_h_analog_r)
1011   AM_RANGE(0x140000, 0x14000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
1010   AM_RANGE(0x140000, 0x14000d) AM_DEVREADWRITE("gp9001", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
10121011   AM_RANGE(0x180000, 0x180001) AM_READWRITE(ghox_mcu_r, ghox_mcu_w)   // really part of shared RAM
10131012   AM_RANGE(0x180006, 0x180007) AM_READ_PORT("DSWA")
10141013   AM_RANGE(0x180008, 0x180009) AM_READ_PORT("DSWB")
r29642r29643
10291028   AM_RANGE(0x200018, 0x200019) AM_READ_PORT("SYS")
10301029   AM_RANGE(0x20001c, 0x20001d) AM_WRITE(toaplan2_v25_coin_word_w) // Coin count/lock + v25 reset line
10311030   AM_RANGE(0x210000, 0x21ffff) AM_READWRITE(shared_ram_r, shared_ram_w )
1032   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
1031   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
10331032   AM_RANGE(0x400000, 0x400fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
1034   AM_RANGE(0x500000, 0x50000d) AM_DEVREADWRITE("gp9001vdp1", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
1033   AM_RANGE(0x500000, 0x50000d) AM_DEVREADWRITE("gp9001_1", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
10351034   AM_RANGE(0x700000, 0x700001) AM_READ(video_count_r)         // test bit 8
10361035ADDRESS_MAP_END
10371036
r29642r29643
10441043   AM_RANGE(0x208014, 0x208015) AM_READ_PORT("IN2")
10451044   AM_RANGE(0x208018, 0x208019) AM_READ_PORT("SYS")
10461045   AM_RANGE(0x20801c, 0x20801d) AM_WRITE(toaplan2_coin_word_w)
1047   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
1046   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
10481047   AM_RANGE(0x400000, 0x400fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
10491048   AM_RANGE(0x700000, 0x700001) AM_READ(video_count_r)         // test bit 8
10501049ADDRESS_MAP_END
r29642r29643
10661065   AM_RANGE(0x200024, 0x200025) AM_DEVREADWRITE8("oki1", okim6295_device, read, write, 0x00ff)
10671066   AM_RANGE(0x200028, 0x200029) AM_WRITE(oki1_bankswitch_w)
10681067   AM_RANGE(0x20002c, 0x20002d) AM_READ(video_count_r)
1069   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
1068   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
10701069   AM_RANGE(0x400000, 0x400fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
10711070ADDRESS_MAP_END
10721071
r29642r29643
10741073static ADDRESS_MAP_START( truxton2_68k_mem, AS_PROGRAM, 16, toaplan2_state )
10751074   AM_RANGE(0x000000, 0x07ffff) AM_ROM
10761075   AM_RANGE(0x100000, 0x10ffff) AM_RAM
1077   AM_RANGE(0x200000, 0x20000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
1076   AM_RANGE(0x200000, 0x20000d) AM_DEVREADWRITE("gp9001", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
10781077   AM_RANGE(0x300000, 0x300fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
10791078   AM_RANGE(0x400000, 0x401fff) AM_RAM_WRITE(toaplan2_tx_videoram_w) AM_SHARE("tx_videoram")
10801079   AM_RANGE(0x402000, 0x402fff) AM_RAM AM_SHARE("tx_lineselect")
r29642r29643
10981097   AM_RANGE(0x000000, 0x03ffff) AM_ROM
10991098   AM_RANGE(0x080000, 0x082fff) AM_RAM
11001099   AM_RANGE(0x0c0000, 0x0c0fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
1101   AM_RANGE(0x140000, 0x14000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
1100   AM_RANGE(0x140000, 0x14000d) AM_DEVREADWRITE("gp9001", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
11021101   AM_RANGE(0x190000, 0x190fff) AM_READWRITE(shared_ram_r, shared_ram_w)
11031102   AM_RANGE(0x19c01c, 0x19c01d) AM_WRITE(toaplan2_coin_word_w)
11041103   AM_RANGE(0x19c020, 0x19c021) AM_READ_PORT("DSWA")
r29642r29643
11131112static ADDRESS_MAP_START( pipibibi_bootleg_68k_mem, AS_PROGRAM, 16, toaplan2_state )
11141113   AM_RANGE(0x000000, 0x03ffff) AM_ROM
11151114   AM_RANGE(0x080000, 0x082fff) AM_RAM
1116   AM_RANGE(0x083000, 0x0837ff) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, pipibibi_bootleg_spriteram16_r, pipibibi_bootleg_spriteram16_w)   // SpriteRAM
1115   AM_RANGE(0x083000, 0x0837ff) AM_DEVREADWRITE("gp9001", gp9001vdp_device, pipibibi_bootleg_spriteram16_r, pipibibi_bootleg_spriteram16_w)   // SpriteRAM
11171116   AM_RANGE(0x083800, 0x087fff) AM_RAM             // SpriteRAM (unused)
11181117   AM_RANGE(0x0c0000, 0x0c0fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
11191118   AM_RANGE(0x120000, 0x120fff) AM_RAM             // Copy of SpriteRAM ?
11201119//  AM_RANGE(0x13f000, 0x13f001) AM_WRITENOP        // ???
1121   AM_RANGE(0x180000, 0x182fff) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, pipibibi_bootleg_videoram16_r, pipibibi_bootleg_videoram16_w) // TileRAM
1122   AM_RANGE(0x188000, 0x18800f) AM_DEVWRITE("gp9001vdp0", gp9001vdp_device, pipibibi_bootleg_scroll_w)
1120   AM_RANGE(0x180000, 0x182fff) AM_DEVREADWRITE("gp9001", gp9001vdp_device, pipibibi_bootleg_videoram16_r, pipibibi_bootleg_videoram16_w) // TileRAM
1121   AM_RANGE(0x188000, 0x18800f) AM_DEVWRITE("gp9001", gp9001vdp_device, pipibibi_bootleg_scroll_w)
11231122   AM_RANGE(0x190002, 0x190003) AM_READ(shared_ram_r)  // Z80 ready ?
11241123   AM_RANGE(0x190010, 0x190011) AM_WRITE(shared_ram_w) // Z80 task to perform
11251124   AM_RANGE(0x19c01c, 0x19c01d) AM_WRITE(toaplan2_coin_word_w)
r29642r29643
11411140   AM_RANGE(0x200010, 0x200011) AM_READ_PORT("SYS")
11421141   AM_RANGE(0x20001c, 0x20001d) AM_WRITE(toaplan2_coin_word_w)
11431142   AM_RANGE(0x280000, 0x28ffff) AM_READWRITE(shared_ram_r, shared_ram_w )
1144   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
1143   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
11451144   AM_RANGE(0x400000, 0x400fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
11461145   AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(toaplan2_tx_videoram_w) AM_SHARE("tx_videoram")
11471146   AM_RANGE(0x502000, 0x5021ff) AM_RAM AM_SHARE("tx_lineselect")
r29642r29643
11631162   AM_RANGE(0x200014, 0x200015) AM_WRITE(fixeightbl_oki_bankswitch_w)  // Sound banking. Code at $4084c, $5070
11641163   AM_RANGE(0x200018, 0x200019) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
11651164   AM_RANGE(0x20001c, 0x20001d) AM_READ_PORT("DSWA")
1166   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
1165   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
11671166   AM_RANGE(0x400000, 0x400fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
11681167   AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(toaplan2_tx_videoram_w) AM_SHARE("tx_videoram")
11691168   AM_RANGE(0x700000, 0x700001) AM_READ(video_count_r)
r29642r29643
11801179   AM_RANGE(0x200018, 0x200019) AM_READ_PORT("SYS")
11811180   AM_RANGE(0x20001c, 0x20001d) AM_WRITE(toaplan2_v25_coin_word_w) // Coin count/lock + v25 reset line
11821181   AM_RANGE(0x210000, 0x21ffff) AM_READWRITE(shared_ram_r, shared_ram_w )
1183   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
1182   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
11841183   AM_RANGE(0x400000, 0x400fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
11851184   AM_RANGE(0x700000, 0x700001) AM_READ(video_count_r)
11861185ADDRESS_MAP_END
r29642r29643
11941193   AM_RANGE(0x200018, 0x200019) AM_READ_PORT("SYS")
11951194   AM_RANGE(0x20001c, 0x20001d) AM_WRITE(toaplan2_v25_coin_word_w) // Coin count/lock + v25 reset line
11961195   AM_RANGE(0x210000, 0x21ffff) AM_READWRITE(shared_ram_r, shared_ram_w )
1197   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
1196   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
11981197   AM_RANGE(0x400000, 0x400fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
1199   AM_RANGE(0x500000, 0x50000d) AM_DEVREADWRITE("gp9001vdp1", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
1198   AM_RANGE(0x500000, 0x50000d) AM_DEVREADWRITE("gp9001_1", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
12001199   AM_RANGE(0x700000, 0x700001) AM_READ(video_count_r)
12011200ADDRESS_MAP_END
12021201
r29642r29643
12051204   AM_RANGE(0x100000, 0x10ffff) AM_RAM
12061205
12071206   AM_RANGE(0x200000, 0x20000f) AM_DEVREADWRITE8("rtc", upd4992_device, read, write, 0x00ff )
1208   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
1207   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
12091208   AM_RANGE(0x400000, 0x400fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
12101209   AM_RANGE(0x600000, 0x600001) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
12111210
r29642r29643
12261225   AM_RANGE(0x100000, 0x10ffff) AM_RAM
12271226
12281227   AM_RANGE(0x200000, 0x20000f) AM_DEVREADWRITE8("rtc", upd4992_device, read, write, 0x00ff )
1229   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
1228   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
12301229   AM_RANGE(0x400000, 0x400fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
12311230   AM_RANGE(0x600000, 0x600001) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
12321231
r29642r29643
12451244static ADDRESS_MAP_START( snowbro2_68k_mem, AS_PROGRAM, 16, toaplan2_state )
12461245   AM_RANGE(0x000000, 0x07ffff) AM_ROM
12471246   AM_RANGE(0x100000, 0x10ffff) AM_RAM
1248   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
1247   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
12491248   AM_RANGE(0x400000, 0x400fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
12501249   AM_RANGE(0x500000, 0x500003) AM_DEVREADWRITE8("ymsnd", ym2151_device, read, write, 0x00ff)
12511250   AM_RANGE(0x600000, 0x600001) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
r29642r29643
12741273   AM_RANGE(0x21c030, 0x21c031) AM_READ_PORT("DSWB")
12751274   AM_RANGE(0x21c034, 0x21c035) AM_READ_PORT("JMPR")
12761275   AM_RANGE(0x21c03c, 0x21c03d) AM_READ(video_count_r)
1277   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
1276   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
12781277   AM_RANGE(0x400000, 0x400fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
12791278   AM_RANGE(0x401000, 0x4017ff) AM_RAM                         // Unused palette RAM
12801279   AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(toaplan2_tx_videoram_w) AM_SHARE("tx_videoram")
r29642r29643
12971296   AM_RANGE(0x21c030, 0x21c031) AM_READ_PORT("DSWB")
12981297   AM_RANGE(0x21c034, 0x21c035) AM_READ_PORT("JMPR")
12991298   AM_RANGE(0x21c03c, 0x21c03d) AM_READ(video_count_r)
1300   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
1299   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
13011300   AM_RANGE(0x400000, 0x400fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
13021301   AM_RANGE(0x401000, 0x4017ff) AM_RAM                         // Unused palette RAM
13031302   AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(toaplan2_tx_videoram_w) AM_SHARE("tx_videoram")
r29642r29643
13191318   AM_RANGE(0x21c030, 0x21c031) AM_READ_PORT("DSWB")
13201319   AM_RANGE(0x21c034, 0x21c035) AM_READ_PORT("JMPR")
13211320   AM_RANGE(0x21c03c, 0x21c03d) AM_READ(video_count_r)
1322   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
1321   AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w)
13231322   AM_RANGE(0x400000, 0x400fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
13241323   AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(toaplan2_tx_videoram_w) AM_SHARE("tx_videoram")
13251324   AM_RANGE(0x502000, 0x502fff) AM_RAM AM_SHARE("tx_lineselect")
r29642r29643
13391338   AM_RANGE(0x203400, 0x207fff) AM_RAM AM_SHARE("mainram16")
13401339   AM_RANGE(0x208000, 0x20ffff) AM_RAM
13411340   AM_RANGE(0x300000, 0x37ffff) AM_READ(batrider_z80rom_r)
1342   AM_RANGE(0x400000, 0x40000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_alt_r, gp9001_vdp_alt_w)
1341   AM_RANGE(0x400000, 0x40000d) AM_DEVREADWRITE("gp9001", gp9001vdp_device, gp9001_vdp_alt_r, gp9001_vdp_alt_w)
13431342   AM_RANGE(0x500000, 0x500001) AM_READ_PORT("IN")
13441343   AM_RANGE(0x500002, 0x500003) AM_READ_PORT("SYS-DSW")
13451344   AM_RANGE(0x500004, 0x500005) AM_READ_PORT("DSW")
r29642r29643
13691368   AM_RANGE(0x203400, 0x207fff) AM_RAM AM_SHARE("mainram16")
13701369   AM_RANGE(0x208000, 0x20ffff) AM_RAM
13711370   AM_RANGE(0x300000, 0x33ffff) AM_READ(batrider_z80rom_r)
1372   AM_RANGE(0x400000, 0x40000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_alt_r, gp9001_vdp_alt_w)
1371   AM_RANGE(0x400000, 0x40000d) AM_DEVREADWRITE("gp9001", gp9001vdp_device, gp9001_vdp_alt_r, gp9001_vdp_alt_w)
13731372   AM_RANGE(0x500000, 0x500001) AM_READ_PORT("IN")
13741373   AM_RANGE(0x500002, 0x500003) AM_READ_PORT("SYS-DSW")
13751374   AM_RANGE(0x500004, 0x500005) AM_READ_PORT("DSW")
r29642r29643
29862985INPUT_PORTS_END
29872986
29882987
2988// Text layer graphics -- ROM based in some games, RAM based in others
2989// See video/gp9001.c for the main graphics layouts
29892990
2990static const gfx_layout tilelayout =
2991{
2992   16,16,          /* 16x16 */
2993   RGN_FRAC(1,2),  /* Number of tiles */
2994   4,              /* 4 bits per pixel */
2995   { RGN_FRAC(1,2)+8, RGN_FRAC(1,2), 8, 0 },
2996   { 0, 1, 2, 3, 4, 5, 6, 7,
2997      8*16+0, 8*16+1, 8*16+2, 8*16+3, 8*16+4, 8*16+5, 8*16+6, 8*16+7 },
2998   { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
2999      16*16, 17*16, 18*16, 19*16, 20*16, 21*16, 22*16, 23*16 },
3000   8*4*16
3001};
3002
3003static const gfx_layout spritelayout =
3004{
3005   8,8,            /* 8x8 */
3006   RGN_FRAC(1,2),  /* Number of 8x8 sprites */
3007   4,              /* 4 bits per pixel */
3008   { RGN_FRAC(1,2)+8, RGN_FRAC(1,2), 8, 0 },
3009   { 0, 1, 2, 3, 4, 5, 6, 7 },
3010   { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
3011   8*16
3012};
3013
30142991static const gfx_layout raizing_textlayout =
30152992{
30162993   8,8,    /* 8x8 characters */
r29642r29643
30583035   8*8*4
30593036};
30603037
3061static GFXDECODE_START( toaplan2 )
3062   GFXDECODE_ENTRY( "gfx1", 0, tilelayout,   0, 0x1000 )
3063   GFXDECODE_ENTRY( "gfx1", 0, spritelayout, 0, 0x1000 )
3064GFXDECODE_END
3065
3066static GFXDECODE_START( t2dualvdp )
3067   GFXDECODE_ENTRY( "gfx1", 0, tilelayout,   0, 0x1000 )
3068   GFXDECODE_ENTRY( "gfx1", 0, spritelayout, 0, 0x1000 )
3069   GFXDECODE_ENTRY( "gfx2", 0, tilelayout,   0, 0x1000 )
3070   GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 0, 0x1000 )
3071GFXDECODE_END
3072
30733038static GFXDECODE_START( truxton2 )
3074   GFXDECODE_ENTRY( "gfx1", 0, tilelayout            , 0, 0x1000 )
3075   GFXDECODE_ENTRY( "gfx1", 0, spritelayout          , 0, 0x1000 )
30763039   GFXDECODE_ENTRY( NULL,   0, truxton2_tx_tilelayout, 64*16, 64 )
30773040GFXDECODE_END
30783041
30793042static GFXDECODE_START( raizing )
3080   GFXDECODE_ENTRY( "gfx1", 0, tilelayout,         0, 0x1000 )
3081   GFXDECODE_ENTRY( "gfx1", 0, spritelayout,       0, 0x1000 )
3082   GFXDECODE_ENTRY( "gfx2", 0, raizing_textlayout, 64*16, 64 )
3043   GFXDECODE_ENTRY( "text", 0, raizing_textlayout, 64*16, 64 )
30833044GFXDECODE_END
30843045
30853046static GFXDECODE_START( batrider )
3086   GFXDECODE_ENTRY( "gfx1", 0, tilelayout,             0, 0x1000 )
3087   GFXDECODE_ENTRY( "gfx1", 0, spritelayout,           0, 0x1000 )
30883047   GFXDECODE_ENTRY( NULL,   0, batrider_tx_tilelayout, 64*16, 64 )
30893048GFXDECODE_END
30903049
30913050static GFXDECODE_START( fixeightbl )
3092   GFXDECODE_ENTRY( "gfx1", 0, tilelayout     , 0, 0x1000 )
3093   GFXDECODE_ENTRY( "gfx1", 0, spritelayout   , 0, 0x1000 )
3094   GFXDECODE_ENTRY( "gfx2", 0, fixeightblayout, 64*16, 64 )
3051   GFXDECODE_ENTRY( "text", 0, fixeightblayout, 64*16, 64 )
30953052GFXDECODE_END
30963053
30973054
r29642r29643
31343091   MCFG_SCREEN_VBLANK_DRIVER(toaplan2_state, screen_eof_toaplan2)
31353092   MCFG_SCREEN_PALETTE("palette")
31363093
3137   MCFG_GFXDECODE_ADD("gfxdecode", "palette", toaplan2)
31383094   MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH)
31393095   MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
31403096
3141   MCFG_DEVICE_ADD_VDP0
3142   MCFG_GP9001_VDP_GFXDECODE("gfxdecode")
3143   MCFG_GP9001_VDP_PALETTE("palette")
3097   MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0)
3098   MCFG_GFX_PALETTE("palette")
31443099
31453100   MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2)
31463101
r29642r29643
31793134   MCFG_SCREEN_VBLANK_DRIVER(toaplan2_state, screen_eof_toaplan2)
31803135   MCFG_SCREEN_PALETTE("palette")
31813136
3182   MCFG_GFXDECODE_ADD("gfxdecode", "palette", toaplan2)
31833137   MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH)
31843138   MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
31853139
3186   MCFG_DEVICE_ADD_VDP0
3187   MCFG_GP9001_VDP_GFXDECODE("gfxdecode")
3188   MCFG_GP9001_VDP_PALETTE("palette")
3140   MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0)
3141   MCFG_GFX_PALETTE("palette")
31893142
31903143   MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2)
31913144
r29642r29643
32683221   MCFG_SCREEN_VBLANK_DRIVER(toaplan2_state, screen_eof_toaplan2)
32693222   MCFG_SCREEN_PALETTE("palette")
32703223
3271   MCFG_GFXDECODE_ADD("gfxdecode", "palette", t2dualvdp)
32723224   MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH)
32733225   MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
32743226
3275   MCFG_DEVICE_ADD_VDP0
3276   MCFG_GP9001_VDP_GFXDECODE("gfxdecode")
3277   MCFG_GP9001_VDP_PALETTE("palette")
3227   MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0)
3228   MCFG_GFX_PALETTE("palette")
32783229
3279   MCFG_DEVICE_ADD_VDP1
3280   MCFG_GP9001_VDP_GFXDECODE("gfxdecode")
3281   MCFG_GP9001_VDP_PALETTE("palette")
3230   MCFG_DEVICE_ADD("gp9001_1", GP9001_VDP, 0)
3231   MCFG_GFX_PALETTE("palette")
32823232
32833233   MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2)
32843234
r29642r29643
33193269   MCFG_SCREEN_VBLANK_DRIVER(toaplan2_state, screen_eof_toaplan2)
33203270   MCFG_SCREEN_PALETTE("palette")
33213271
3322   MCFG_GFXDECODE_ADD("gfxdecode", "palette", toaplan2)
33233272   MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH)
33243273   MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
33253274
3326   MCFG_DEVICE_ADD_VDP0
3327   MCFG_GP9001_VDP_GFXDECODE("gfxdecode")
3328   MCFG_GP9001_VDP_PALETTE("palette")
3275   MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0)
3276   MCFG_GFX_PALETTE("palette")
33293277
33303278   MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2)
33313279
r29642r29643
33603308   MCFG_SCREEN_VBLANK_DRIVER(toaplan2_state, screen_eof_toaplan2)
33613309   MCFG_SCREEN_PALETTE("palette")
33623310
3363   MCFG_GFXDECODE_ADD("gfxdecode", "palette", toaplan2)
33643311   MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH)
33653312   MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
33663313
3367   MCFG_DEVICE_ADD_VDP0
3368   MCFG_GP9001_VDP_GFXDECODE("gfxdecode")
3369   MCFG_GP9001_VDP_PALETTE("palette")
3314   MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0)
3315   MCFG_GFX_PALETTE("palette")
33703316
33713317   MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2)
33723318
r29642r29643
34023348   MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH)
34033349   MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
34043350
3405   MCFG_DEVICE_ADD_VDP0
3406   MCFG_GP9001_VDP_GFXDECODE("gfxdecode")
3407   MCFG_GP9001_VDP_PALETTE("palette")
3351   MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0)
3352   MCFG_GFX_PALETTE("palette")
34083353
34093354   MCFG_VIDEO_START_OVERRIDE(toaplan2_state,truxton2)
34103355
r29642r29643
34573402   MCFG_SCREEN_VBLANK_DRIVER(toaplan2_state, screen_eof_toaplan2)
34583403   MCFG_SCREEN_PALETTE("palette")
34593404
3460   MCFG_GFXDECODE_ADD("gfxdecode", "palette", toaplan2)
34613405   MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH)
34623406   MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
34633407
3464   MCFG_DEVICE_ADD_VDP0
3465   MCFG_GP9001_VDP_GFXDECODE("gfxdecode")
3466   MCFG_GP9001_VDP_PALETTE("palette")
3408   MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0)
3409   MCFG_GFX_PALETTE("palette")
34673410
34683411   MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2)
34693412
r29642r29643
35023445   MCFG_SCREEN_VBLANK_DRIVER(toaplan2_state, screen_eof_toaplan2)
35033446   MCFG_SCREEN_PALETTE("palette")
35043447
3505   MCFG_GFXDECODE_ADD("gfxdecode", "palette", toaplan2)
35063448   MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH)
35073449   MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
35083450
3509   MCFG_DEVICE_ADD_VDP0
3510   MCFG_GP9001_VDP_GFXDECODE("gfxdecode")
3511   MCFG_GP9001_VDP_PALETTE("palette")
3451   MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0)
3452   MCFG_GFX_PALETTE("palette")
35123453
35133454   MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2)
35143455
r29642r29643
35863527   MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH)
35873528   MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
35883529
3589   MCFG_DEVICE_ADD_VDP0
3590   MCFG_GP9001_VDP_GFXDECODE("gfxdecode")
3591   MCFG_GP9001_VDP_PALETTE("palette")
3530   MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0)
3531   MCFG_GFX_PALETTE("palette")
35923532
35933533   MCFG_VIDEO_START_OVERRIDE(toaplan2_state,truxton2)
35943534
r29642r29643
36273567   MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH)
36283568   MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
36293569
3630   MCFG_DEVICE_ADD_VDP0
3631   MCFG_GP9001_VDP_GFXDECODE("gfxdecode")
3632   MCFG_GP9001_VDP_PALETTE("palette")
3570   MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0)
3571   MCFG_GFX_PALETTE("palette")
36333572
36343573   MCFG_VIDEO_START_OVERRIDE(toaplan2_state,fixeightbl)
36353574
r29642r29643
36643603   MCFG_SCREEN_VBLANK_DRIVER(toaplan2_state, screen_eof_toaplan2)
36653604   MCFG_SCREEN_PALETTE("palette")
36663605
3667   MCFG_GFXDECODE_ADD("gfxdecode", "palette", toaplan2)
36683606   MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH)
36693607   MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
36703608
3671   MCFG_DEVICE_ADD_VDP0
3672   MCFG_GP9001_VDP_GFXDECODE("gfxdecode")
3673   MCFG_GP9001_VDP_PALETTE("palette")
3609   MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0)
3610   MCFG_GFX_PALETTE("palette")
36743611
36753612   MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2)
36763613
r29642r29643
37063643   MCFG_SCREEN_VBLANK_DRIVER(toaplan2_state, screen_eof_toaplan2)
37073644   MCFG_SCREEN_PALETTE("palette")
37083645
3709   MCFG_GFXDECODE_ADD("gfxdecode", "palette", t2dualvdp)
37103646   MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH)
37113647   MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
37123648
3713   MCFG_DEVICE_ADD_VDP0
3714   MCFG_GP9001_VDP_GFXDECODE("gfxdecode")
3715   MCFG_GP9001_VDP_PALETTE("palette")
3649   MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0)
3650   MCFG_GFX_PALETTE("palette")
37163651
3717   MCFG_DEVICE_ADD_VDP1
3718   MCFG_GP9001_VDP_GFXDECODE("gfxdecode")
3719   MCFG_GP9001_VDP_PALETTE("palette")
3652   MCFG_DEVICE_ADD("gp9001_1", GP9001_VDP, 0)
3653   MCFG_GFX_PALETTE("palette")
37203654
37213655   MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2)
37223656
r29642r29643
37483682   MCFG_SCREEN_VBLANK_DRIVER(toaplan2_state, screen_eof_toaplan2)
37493683   MCFG_SCREEN_PALETTE("palette")
37503684
3751   MCFG_GFXDECODE_ADD("gfxdecode", "palette", toaplan2)
37523685   MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH)
37533686   MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
37543687
3755   MCFG_DEVICE_ADD_VDP0
3756   MCFG_GP9001_VDP_GFXDECODE("gfxdecode")
3757   MCFG_GP9001_VDP_PALETTE("palette")
3688   MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0)
3689   MCFG_GFX_PALETTE("palette")
37583690
37593691   MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2)
37603692
r29642r29643
37823714   MCFG_SCREEN_VBLANK_DRIVER(toaplan2_state, screen_eof_toaplan2)
37833715   MCFG_SCREEN_PALETTE("palette")
37843716
3785   MCFG_GFXDECODE_ADD("gfxdecode", "palette", toaplan2)
37863717   MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH)
37873718   MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
37883719
3789   MCFG_DEVICE_ADD_VDP0
3790   MCFG_GP9001_VDP_GFXDECODE("gfxdecode")
3791   MCFG_GP9001_VDP_PALETTE("palette")
3720   MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0)
3721   MCFG_GFX_PALETTE("palette")
37923722
37933723   MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2)
37943724
r29642r29643
38193749   MCFG_SCREEN_VBLANK_DRIVER(toaplan2_state, screen_eof_toaplan2)
38203750   MCFG_SCREEN_PALETTE("palette")
38213751
3822   MCFG_GFXDECODE_ADD("gfxdecode", "palette", toaplan2)
38233752   MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH)
38243753   MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
38253754
3826   MCFG_DEVICE_ADD_VDP0
3827   MCFG_GP9001_VDP_GFXDECODE("gfxdecode")
3828   MCFG_GP9001_VDP_PALETTE("palette")
3755   MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0)
3756   MCFG_GFX_PALETTE("palette")
38293757
38303758   MCFG_VIDEO_START_OVERRIDE(toaplan2_state,toaplan2)
38313759
r29642r29643
38703798   MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH)
38713799   MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
38723800
3873   MCFG_DEVICE_ADD_VDP0
3874   MCFG_GP9001_VDP_GFXDECODE("gfxdecode")
3875   MCFG_GP9001_VDP_PALETTE("palette")
3801   MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0)
3802   MCFG_GFX_PALETTE("palette")
38763803
38773804   MCFG_VIDEO_START_OVERRIDE(toaplan2_state,bgaregga)
38783805
r29642r29643
39173844   MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH)
39183845   MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
39193846
3920   MCFG_DEVICE_ADD_VDP0
3921   MCFG_GP9001_VDP_GFXDECODE("gfxdecode")
3922   MCFG_GP9001_VDP_PALETTE("palette")
3847   MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0)
3848   MCFG_GFX_PALETTE("palette")
39233849
39243850   MCFG_VIDEO_START_OVERRIDE(toaplan2_state,bgaregga)
39253851
r29642r29643
39633889   MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH)
39643890   MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
39653891
3966   MCFG_DEVICE_ADD_VDP0
3967   MCFG_GP9001_VDP_GFXDECODE("gfxdecode")
3968   MCFG_GP9001_VDP_PALETTE("palette")
3892   MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0)
3893   MCFG_GFX_PALETTE("palette")
39693894
39703895   MCFG_VIDEO_START_OVERRIDE(toaplan2_state,bgaregga)
39713896
r29642r29643
40203945   MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH)
40213946   MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
40223947
4023   MCFG_DEVICE_ADD_VDP0
4024   MCFG_GP9001_VDP_GFXDECODE("gfxdecode")
4025   MCFG_GP9001_VDP_PALETTE("palette")
3948   MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0)
3949   MCFG_GFX_PALETTE("palette")
40263950
40273951   MCFG_VIDEO_START_OVERRIDE(toaplan2_state,batrider)
40283952
r29642r29643
40764000   MCFG_GFXDECODE_ADD("gfxdecode", "palette", batrider)
40774001   MCFG_PALETTE_ADD("palette", T2PALETTE_LENGTH)
40784002   MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
4079   MCFG_DEVICE_ADD_VDP0
4080   MCFG_GP9001_VDP_GFXDECODE("gfxdecode")
4081   MCFG_GP9001_VDP_PALETTE("palette")
40824003
4004   MCFG_DEVICE_ADD("gp9001", GP9001_VDP, 0)
4005   MCFG_GFX_PALETTE("palette")
4006
40834007   MCFG_VIDEO_START_OVERRIDE(toaplan2_state,batrider)
40844008
40854009   /* sound hardware */
r29642r29643
41074031   /* sound CPU is a HD647180 (Z180) with internal ROM - not yet supported */
41084032   ROM_LOAD( "hd647180.020", 0x00000, 0x08000, NO_DUMP )
41094033
4110   ROM_REGION( 0x100000, "gfx1", 0 )
4034   ROM_REGION( 0x100000, "gp9001", 0 )
41114035   ROM_LOAD( "tp020-4.bin", 0x000000, 0x080000, CRC(3ebbe41e) SHA1(cea196c5f83e1a23d5b538a0db9bbbffa7af5118) )
41124036   ROM_LOAD( "tp020-3.bin", 0x080000, 0x080000, CRC(2d5e2201) SHA1(5846c844eedd48305c1c67dc645b6e070b3f5b98) )
41134037ROM_END
r29642r29643
41224046   /* sound CPU is a HD647180 (Z180) with internal ROM - not yet supported */
41234047   ROM_LOAD( "hd647180.021", 0x00000, 0x08000, NO_DUMP )
41244048
4125   ROM_REGION( 0x100000, "gfx1", 0 )
4049   ROM_REGION( 0x100000, "gp9001", 0 )
41264050   ROM_LOAD( "tp021-03.u36", 0x000000, 0x080000, CRC(a15d8e9d) SHA1(640a33997bdce8e84bea6a944139716379839037) )
41274051   ROM_LOAD( "tp021-04.u37", 0x080000, 0x080000, CRC(26ed1c9a) SHA1(37da8af86ea24327444c2d4ad3dfbd936208d43d) )
41284052ROM_END
r29642r29643
41374061   /* sound CPU is a HD647180 (Z180) with internal ROM - not yet supported */
41384062   ROM_LOAD( "hd647180.021", 0x00000, 0x08000, NO_DUMP )
41394063
4140   ROM_REGION( 0x100000, "gfx1", 0 )
4064   ROM_REGION( 0x100000, "gp9001", 0 )
41414065   ROM_LOAD( "tp021-03.u36", 0x000000, 0x080000, CRC(a15d8e9d) SHA1(640a33997bdce8e84bea6a944139716379839037) )
41424066   ROM_LOAD( "tp021-04.u37", 0x080000, 0x080000, CRC(26ed1c9a) SHA1(37da8af86ea24327444c2d4ad3dfbd936208d43d) )
41434067ROM_END
r29642r29643
41504074   /* Secondary CPU is a Toaplan marked chip, (TS-002-MACH  TOA PLAN) */
41514075   /* It's a NEC V25 (PLCC94) (encrypted program uploaded by main CPU) */
41524076
4153   ROM_REGION( 0x200000, "gfx1", 0 )
4077   ROM_REGION( 0x200000, "gp9001", 0 )
41544078   ROM_LOAD16_WORD_SWAP( "tp022_3.w92", 0x000000, 0x100000, CRC(191b595f) SHA1(89344946daa18087cc83f92027cf5da659b1c7a5) )
41554079   ROM_LOAD16_WORD_SWAP( "tp022_4.w93", 0x100000, 0x100000, CRC(d58d29ca) SHA1(90d142fef37764ef817347a2bed77892a288a077) )
41564080
4157   ROM_REGION( 0x400000, "gfx2", 0 )
4081   ROM_REGION( 0x400000, "gp9001_1", 0 )
41584082   ROM_LOAD16_WORD_SWAP( "tp022_5.w16", 0x000000, 0x200000, CRC(d4c1db45) SHA1(f5655467149ba737128c2f54c9c6cdaca6e4c35c) )
41594083   ROM_LOAD16_WORD_SWAP( "tp022_6.w17", 0x200000, 0x200000, CRC(d48dc74f) SHA1(081b5a00a2ff2bd82b98b30aab3cb5b6ae1014d5) )
41604084
r29642r29643
41704094   /* Secondary CPU is a Toaplan marked chip, (TS-002-MACH  TOA PLAN) */
41714095   /* It's a NEC V25 (PLCC94) (encrypted program uploaded by main CPU) */
41724096
4173   ROM_REGION( 0x200000, "gfx1", 0 )
4097   ROM_REGION( 0x200000, "gp9001", 0 )
41744098   ROM_LOAD16_WORD_SWAP( "tp022_3.w92", 0x000000, 0x100000, CRC(191b595f) SHA1(89344946daa18087cc83f92027cf5da659b1c7a5) )
41754099   ROM_LOAD16_WORD_SWAP( "tp022_4.w93", 0x100000, 0x100000, CRC(d58d29ca) SHA1(90d142fef37764ef817347a2bed77892a288a077) )
41764100
4177   ROM_REGION( 0x400000, "gfx2", 0 )
4101   ROM_REGION( 0x400000, "gp9001_1", 0 )
41784102   ROM_LOAD16_WORD_SWAP( "tp022_5.w16", 0x000000, 0x200000, CRC(d4c1db45) SHA1(f5655467149ba737128c2f54c9c6cdaca6e4c35c) )
41794103   ROM_LOAD16_WORD_SWAP( "tp022_6.w17", 0x200000, 0x200000, CRC(d48dc74f) SHA1(081b5a00a2ff2bd82b98b30aab3cb5b6ae1014d5) )
41804104
r29642r29643
41904114   /* Secondary CPU is a Toaplan marked chip, (TS-002-MACH  TOA PLAN) */
41914115   /* It's a NEC V25 (PLCC94) (encrypted program uploaded by main CPU) */
41924116
4193   ROM_REGION( 0x200000, "gfx1", 0 )
4117   ROM_REGION( 0x200000, "gp9001", 0 )
41944118   ROM_LOAD16_WORD_SWAP( "tp022_3.w92", 0x000000, 0x100000, CRC(191b595f) SHA1(89344946daa18087cc83f92027cf5da659b1c7a5) )
41954119   ROM_LOAD16_WORD_SWAP( "tp022_4.w93", 0x100000, 0x100000, CRC(d58d29ca) SHA1(90d142fef37764ef817347a2bed77892a288a077) )
41964120
4197   ROM_REGION( 0x400000, "gfx2", 0 )
4121   ROM_REGION( 0x400000, "gp9001_1", 0 )
41984122   ROM_LOAD16_WORD_SWAP( "tp022_5.w16", 0x000000, 0x200000, CRC(d4c1db45) SHA1(f5655467149ba737128c2f54c9c6cdaca6e4c35c) )
41994123   ROM_LOAD16_WORD_SWAP( "tp022_6.w17", 0x200000, 0x200000, CRC(d48dc74f) SHA1(081b5a00a2ff2bd82b98b30aab3cb5b6ae1014d5) )
42004124
r29642r29643
42134137   ROM_REGION( 0x8000, "audiocpu", 0 )         /* Sound CPU code */
42144138   ROM_LOAD( "tp023_02.bin", 0x0000, 0x8000, CRC(4cd882a1) SHA1(7199a5c384918f775f0815e09c46b2a58141814a) )
42154139
4216   ROM_REGION( 0x800000, "gfx1", 0 )
4140   ROM_REGION( 0x800000, "gp9001", 0 )
42174141   ROM_LOAD( "tp023_3.bin", 0x000000, 0x200000, CRC(32ad508b) SHA1(e473489beaf649d3e5236770eb043327e309850c) )
42184142   ROM_LOAD( "tp023_5.bin", 0x200000, 0x200000, CRC(b84c90eb) SHA1(17a1531d884d9a9696d1b25d65f9155f02396e0e) )
42194143   ROM_LOAD( "tp023_4.bin", 0x400000, 0x200000, CRC(e493c077) SHA1(0edcfb70483ad07206695d9283031b85cd198a36) )
r29642r29643
42684192   ROM_REGION( 0x80000, "maincpu", 0 )         /* Main 68K code */
42694193   ROM_LOAD16_WORD_SWAP( "mecat-m", 0x000000, 0x80000, CRC(bd2263c6) SHA1(eb794c0fc9c1fb4337114d48149283d42d22e4b3) )
42704194
4271   ROM_REGION( 0x800000, "gfx1", 0 )
4195   ROM_REGION( 0x800000, "gp9001", 0 )
42724196   ROM_LOAD( "mecat-34", 0x000000, 0x400000, CRC(6be7b37e) SHA1(13160ad0712fee932bb98cc226e651895b19228a) )
42734197   ROM_LOAD( "mecat-12", 0x400000, 0x400000, CRC(49e46b1f) SHA1(d12b12696a8473eb34f3cd247ab060289a6c0e9c) )
42744198
r29642r29643
42884212   /* program ROM is byte swapped ! */
42894213   ROM_LOAD16_WORD( "tp024_1.bin", 0x000000, 0x080000, CRC(f5cfe6ee) SHA1(30979888a4cd6500244117748f28386a7e20a169) )
42904214
4291   ROM_REGION( 0x200000, "gfx1", 0 )
4215   ROM_REGION( 0x200000, "gp9001", 0 )
42924216   ROM_LOAD( "tp024_4.bin", 0x000000, 0x100000, CRC(805c449e) SHA1(fdf985344145bd320b88b9b0c25e73066c9b2ada) )
42934217   ROM_LOAD( "tp024_3.bin", 0x100000, 0x100000, CRC(47587164) SHA1(bac493e2d5507286b984957b289c929335d27eaa) )
42944218
r29642r29643
43054229   ROM_REGION( 0x10000, "audiocpu", 0 )            /* Sound Z80 code */
43064230   ROM_LOAD( "tp025-5.bin", 0x0000, 0x8000, CRC(bf8ffde5) SHA1(79c09cc9a0ea979f5af5a7e5ad671ea486f5f43e) )
43074231
4308   ROM_REGION( 0x200000, "gfx1", 0 )
4232   ROM_REGION( 0x200000, "gp9001", 0 )
43094233   ROM_LOAD( "tp025-4.bin", 0x000000, 0x100000, CRC(ab97f744) SHA1(c1620e614345dbd5c6567e4cb6f55c61b900d0ee) )
43104234   ROM_LOAD( "tp025-3.bin", 0x100000, 0x100000, CRC(7b16101e) SHA1(ae0119bbfa0937d18c4fbb0a3ef7cdc3b9fa6b56) )
43114235ROM_END
r29642r29643
43194243   ROM_REGION( 0x10000, "audiocpu", 0 )            /* Sound Z80 code */
43204244   ROM_LOAD( "tp025-5.bin", 0x0000, 0x8000, CRC(bf8ffde5) SHA1(79c09cc9a0ea979f5af5a7e5ad671ea486f5f43e) )
43214245
4322   ROM_REGION( 0x200000, "gfx1", 0 )
4246   ROM_REGION( 0x200000, "gp9001", 0 )
43234247   ROM_LOAD( "tp025-4.bin", 0x000000, 0x100000, CRC(ab97f744) SHA1(c1620e614345dbd5c6567e4cb6f55c61b900d0ee) )
43244248   ROM_LOAD( "tp025-3.bin", 0x100000, 0x100000, CRC(7b16101e) SHA1(ae0119bbfa0937d18c4fbb0a3ef7cdc3b9fa6b56) )
43254249ROM_END
r29642r29643
43344258   /* sound CPU is a HD647180 (Z180) with internal ROM - not yet supported */
43354259   ROM_LOAD( "hd647180.025", 0x00000, 0x08000, NO_DUMP )
43364260
4337   ROM_REGION( 0x200000, "gfx1", 0 )
4261   ROM_REGION( 0x200000, "gp9001", 0 )
43384262   ROM_LOAD( "tp025-4.bin", 0x000000, 0x100000, CRC(ab97f744) SHA1(c1620e614345dbd5c6567e4cb6f55c61b900d0ee) )
43394263   ROM_LOAD( "tp025-3.bin", 0x100000, 0x100000, CRC(7b16101e) SHA1(ae0119bbfa0937d18c4fbb0a3ef7cdc3b9fa6b56) )
43404264ROM_END
r29642r29643
43484272   ROM_REGION( 0x10000, "audiocpu", 0 )            /* Sound Z80 code */
43494273   ROM_LOAD( "pip_snd", 0x0000, 0x8000, CRC(8ebf183b) SHA1(602b138c85b02d121d007f6788b322aa107c7d91) )
43504274
4351   ROM_REGION( 0x200000, "gfx1", 0 )
4275   ROM_REGION( 0x200000, "gp9001", 0 )
43524276   ROM_LOAD( "cg_01_l", 0x000000, 0x080000, CRC(21d1ef46) SHA1(d7ccbe56eb08be421c241065cbaa99cc9cca4d73) )
43534277   ROM_LOAD( "cg_01_h", 0x080000, 0x080000, CRC(d5726328) SHA1(26401ba8ce22fda161306b91d70afefa959cde8c) )
43544278   ROM_LOAD( "cg_23_l", 0x100000, 0x080000, CRC(114d41d0) SHA1(d1166d495d92c6082fffbed422deb7605c5a41a2) )
r29642r29643
43644288   ROM_REGION( 0x10000, "audiocpu", 0 )            /* Sound Z80 code */
43654289   ROM_LOAD( "ppbb08.bin", 0x0000, 0x8000, CRC(101c0358) SHA1(162e02d00b7bdcdd3b48a0cd0527b7428435ec50) )
43664290
4367   ROM_REGION( 0x200000, "gfx1", 0 )
4291   ROM_REGION( 0x200000, "gp9001", 0 )
43684292   /* GFX data differs slightly from Toaplan boards ??? */
43694293   ROM_LOAD16_BYTE( "ppbb01.bin", 0x000000, 0x080000, CRC(0fcae44b) SHA1(ac72bc79e3a5d0a81647c312d310d00ace017272) )
43704294   ROM_LOAD16_BYTE( "ppbb02.bin", 0x000001, 0x080000, CRC(8bfcdf87) SHA1(4537a7d646d3014f069c6fd0be457bb32e2f18ac) )
r29642r29643
43794303#define ROMS_FIXEIGHT \
43804304   ROM_REGION( 0x080000, "maincpu", 0 ) \
43814305   ROM_LOAD16_WORD_SWAP( "tp-026-1", 0x000000, 0x080000, CRC(f7b1746a) SHA1(0bbea6f111b818bc9b9b2060af4fe900f37cf7f9) ) \
4382   ROM_REGION( 0x400000, "gfx1", 0 ) \
4306   ROM_REGION( 0x400000, "gp9001", 0 ) \
43834307   ROM_LOAD( "tp-026-3", 0x000000, 0x200000, CRC(e5578d98) SHA1(280d2b716d955e767d311fc9596823852435b6d7) ) \
43844308   ROM_LOAD( "tp-026-4", 0x200000, 0x200000, CRC(b760cb53) SHA1(bc9c5e49e45cdda0f774be0038aa4deb21d4d285) ) \
43854309   ROM_REGION( 0x40000, "oki", 0 ) \
r29642r29643
45134437   ROM_LOAD16_BYTE( "3.bin", 0x000000, 0x80000, CRC(cc77d4b4) SHA1(4d3376cbae13d90c6314d8bb9236c2183fc6253c) )
45144438   ROM_LOAD16_BYTE( "2.bin", 0x000001, 0x80000, CRC(ed715488) SHA1(37be9bc8ff6b54a1f660d89469c6c2da6301e9cd) )
45154439
4516   ROM_REGION( 0x400000, "gfx1", 0 )
4440   ROM_REGION( 0x400000, "gp9001", 0 )
45174441   ROM_LOAD( "tp-026-3", 0x000000, 0x200000, CRC(e5578d98) SHA1(280d2b716d955e767d311fc9596823852435b6d7) )
45184442   ROM_LOAD( "tp-026-4", 0x200000, 0x200000, CRC(b760cb53) SHA1(bc9c5e49e45cdda0f774be0038aa4deb21d4d285) )
45194443
4520   ROM_REGION( 0x08000, "gfx2", 0)
4444   ROM_REGION( 0x08000, "text", 0)
45214445   ROM_LOAD( "4.bin", 0x00000, 0x08000, CRC(a6aca465) SHA1(2b331faeee1832e0adc5218254a99d66331862c6) )
45224446
45234447   ROM_REGION( 0x80000, "oki", 0 )         /* ADPCM Samples */
r29642r29643
45354459   /* Secondary CPU is a Toaplan marked chip, (TS-007-Spy  TOA PLAN) */
45364460   /* It's a NEC V25 (PLCC94) (encrypted program uploaded by main CPU) */
45374461
4538   ROM_REGION( 0x200000, "gfx1", 0 )
4462   ROM_REGION( 0x200000, "gp9001", 0 )
45394463   ROM_LOAD( "tp027_02.bin", 0x000000, 0x100000, CRC(877b45e8) SHA1(b3ed8d8dbbe51a1919afc55d619d2b6771971493) )
45404464   ROM_LOAD( "tp027_03.bin", 0x100000, 0x100000, CRC(b1fc6362) SHA1(5e97e3cce31be57689d394a50178cda4d80cce5f) )
45414465ROM_END
r29642r29643
45484472   /* Secondary CPU is a Toaplan marked chip, (TS-007-Spy  TOA PLAN) */
45494473   /* It's a NEC V25 (PLCC94) (encrypted program uploaded by main CPU) */
45504474
4551   ROM_REGION( 0x200000, "gfx1", 0 )
4475   ROM_REGION( 0x200000, "gp9001", 0 )
45524476   ROM_LOAD( "tp027_02.bin", 0x000000, 0x100000, CRC(877b45e8) SHA1(b3ed8d8dbbe51a1919afc55d619d2b6771971493) )
45534477   ROM_LOAD( "tp027_03.bin", 0x100000, 0x100000, CRC(b1fc6362) SHA1(5e97e3cce31be57689d394a50178cda4d80cce5f) )
45544478ROM_END
r29642r29643
45614485   /* Secondary CPU is a Toaplan marked chip, (TS-007-Spy  TOA PLAN) */
45624486   /* It's a NEC V25 (PLCC94) (encrypted program uploaded by main CPU) */
45634487
4564   ROM_REGION( 0x200000, "gfx1", 0 )
4488   ROM_REGION( 0x200000, "gp9001", 0 )
45654489   ROM_LOAD( "tp027_02.bin", 0x000000, 0x100000, CRC(877b45e8) SHA1(b3ed8d8dbbe51a1919afc55d619d2b6771971493) )
45664490   ROM_LOAD( "tp027_03.bin", 0x100000, 0x100000, CRC(b1fc6362) SHA1(5e97e3cce31be57689d394a50178cda4d80cce5f) )
45674491ROM_END
r29642r29643
45744498   /* Secondary CPU is a Toaplan marked chip, (TS-007-Spy  TOA PLAN) */
45754499   /* It's a NEC V25 (PLCC94) (program uploaded by main CPU) */
45764500
4577   ROM_REGION( 0x400000, "gfx1", 0 )
4501   ROM_REGION( 0x400000, "gp9001", 0 )
45784502   ROM_LOAD( "tp030_3l.bin", 0x000000, 0x100000, CRC(3024b793) SHA1(e161db940f069279356fca2c5bf2753f07773705) )
45794503   ROM_LOAD( "tp030_3h.bin", 0x100000, 0x100000, CRC(ed75730b) SHA1(341f0f728144a049486d996c9bb14078578c6879) )
45804504   ROM_LOAD( "tp030_4l.bin", 0x200000, 0x100000, CRC(fedb9861) SHA1(4b0917056bd359b21935358c6bcc729262be6417) )
45814505   ROM_LOAD( "tp030_4h.bin", 0x300000, 0x100000, CRC(d482948b) SHA1(31be7dc5cff072403b783bf203b9805ffcad7284) )
45824506
4583   ROM_REGION( 0x200000, "gfx2", 0 )
4507   ROM_REGION( 0x200000, "gp9001_1", 0 )
45844508   ROM_LOAD( "tp030_5.bin",  0x000000, 0x100000, CRC(bcf5ba05) SHA1(40f98888a29cdd30cda5dfb60fdc667c69b0fdb0) )
45854509   ROM_LOAD( "tp030_6.bin",  0x100000, 0x100000, CRC(0666fecd) SHA1(aa8f921fc51590b5b05bbe0b0ad0cce5ff359c64) )
45864510
r29642r29643
46004524   /* Secondary CPU is a Toaplan marked chip, (TS-007-Spy  TOA PLAN) */
46014525   /* It's a NEC V25 (PLCC94) (program uploaded by main CPU) */
46024526
4603   ROM_REGION( 0x400000, "gfx1", 0 )
4527   ROM_REGION( 0x400000, "gp9001", 0 )
46044528   ROM_LOAD( "tp030_3l.bin", 0x000000, 0x100000, CRC(3024b793) SHA1(e161db940f069279356fca2c5bf2753f07773705) )
46054529   ROM_LOAD( "tp030_3h.bin", 0x100000, 0x100000, CRC(ed75730b) SHA1(341f0f728144a049486d996c9bb14078578c6879) )
46064530   ROM_LOAD( "tp030_4l.bin", 0x200000, 0x100000, CRC(fedb9861) SHA1(4b0917056bd359b21935358c6bcc729262be6417) )
46074531   ROM_LOAD( "tp030_4h.bin", 0x300000, 0x100000, CRC(d482948b) SHA1(31be7dc5cff072403b783bf203b9805ffcad7284) )
46084532
4609   ROM_REGION( 0x200000, "gfx2", 0 )
4533   ROM_REGION( 0x200000, "gp9001_1", 0 )
46104534   ROM_LOAD( "tp030_5.bin",  0x000000, 0x100000, CRC(bcf5ba05) SHA1(40f98888a29cdd30cda5dfb60fdc667c69b0fdb0) )
46114535   ROM_LOAD( "tp030_6.bin",  0x100000, 0x100000, CRC(0666fecd) SHA1(aa8f921fc51590b5b05bbe0b0ad0cce5ff359c64) )
46124536
r29642r29643
46254549   /* Secondary CPU is a Toaplan marked chip, (TS-007-Spy  TOA PLAN) */
46264550   /* It's a NEC V25 (PLCC94) (program uploaded by main CPU) */
46274551
4628   ROM_REGION( 0x400000, "gfx1", 0 )
4552   ROM_REGION( 0x400000, "gp9001", 0 )
46294553   ROM_LOAD( "tp030_3l.bin", 0x000000, 0x100000, CRC(3024b793) SHA1(e161db940f069279356fca2c5bf2753f07773705) )
46304554   ROM_LOAD( "tp030_3h.bin", 0x100000, 0x100000, CRC(ed75730b) SHA1(341f0f728144a049486d996c9bb14078578c6879) )
46314555   ROM_LOAD( "tp030_4l.bin", 0x200000, 0x100000, CRC(fedb9861) SHA1(4b0917056bd359b21935358c6bcc729262be6417) )
46324556   ROM_LOAD( "tp030_4h.bin", 0x300000, 0x100000, CRC(d482948b) SHA1(31be7dc5cff072403b783bf203b9805ffcad7284) )
46334557
4634   ROM_REGION( 0x200000, "gfx2", 0 )
4558   ROM_REGION( 0x200000, "gp9001_1", 0 )
46354559   ROM_LOAD( "tp030_5.bin",  0x000000, 0x100000, CRC(bcf5ba05) SHA1(40f98888a29cdd30cda5dfb60fdc667c69b0fdb0) )
46364560   ROM_LOAD( "tp030_6.bin",  0x100000, 0x100000, CRC(0666fecd) SHA1(aa8f921fc51590b5b05bbe0b0ad0cce5ff359c64) )
46374561
r29642r29643
46474571   ROM_REGION( 0x80000, "maincpu", ROMREGION_ERASE00 )
46484572   ROM_LOAD16_WORD_SWAP( "1.u61",        0x000000, 0x080000, CRC(118b5899) SHA1(7a1637a63eb17e3892d79aede5730013a1dc00f9) )
46494573
4650   ROM_REGION( 0x100000, "gfx1", ROMREGION_ERASE00 )
4574   ROM_REGION( 0x100000, "gp9001", ROMREGION_ERASE00 )
46514575   ROM_LOAD( "2.u26",        0x000000, 0x080000, CRC(a190eaea) SHA1(2c7b8c8026873e0f591fbcbc2e72b196ef84e162) )
46524576   ROM_LOAD( "3.u27",        0x080000, 0x080000, CRC(0b81e038) SHA1(8376617ae519a8ef604f20b26e941aa5b8066602) )
46534577
r29642r29643
46594583   ROM_REGION( 0x080000, "maincpu", 0 )
46604584   ROM_LOAD16_WORD_SWAP( "db0.1",        0x00000, 0x80000, CRC(6b4008d3) SHA1(4cf838c47563ba482be8364b2e115569a4a06c83) )
46614585
4662   ROM_REGION( 0x400000, "gfx1", 0 )
4586   ROM_REGION( 0x400000, "gp9001", 0 )
46634587   ROM_LOAD( "db0-r2",       0x000000, 0x200000, CRC(4efff265) SHA1(4cd239ff42f532495946cb52bd1fee412f84e192) )
46644588   ROM_LOAD( "db0-r3",       0x200000, 0x200000, CRC(5c142b38) SHA1(5466a8b061a0f2545493de0f96fd4387beea276a) )
46654589
r29642r29643
46714595   ROM_REGION( 0x080000, "maincpu", 0 )            /* Main 68K code */
46724596   ROM_LOAD16_WORD_SWAP( "pro-4", 0x000000, 0x080000, CRC(4c7ee341) SHA1(ad46c605a38565d0148daac301be4e4b72302fe7) )
46734597
4674   ROM_REGION( 0x300000, "gfx1", 0 )
4598   ROM_REGION( 0x300000, "gp9001", 0 )
46754599   ROM_LOAD( "rom2-l", 0x000000, 0x100000, CRC(e9d366a9) SHA1(e87e3966fce3395324b90db6c134b3345104c04b) )
46764600   ROM_LOAD( "rom2-h", 0x100000, 0x080000, CRC(9aab7a62) SHA1(611f6a15fdbac5d3063426a365538c1482e996bf) )
46774601   ROM_LOAD( "rom3-l", 0x180000, 0x100000, CRC(eb06e332) SHA1(7cd597bfffc153d178530c0f0903bebd751c9dd1) )
r29642r29643
46864610   ROM_LOAD16_BYTE( "sb2-prg1.u39", 0x000000, 0x040000, CRC(e1fec8a2) SHA1(30c1a351070d784da9ba0dca68be8a262dba2045) )
46874611   ROM_LOAD16_BYTE( "sb2-prg0.u23", 0x000001, 0x040000, CRC(b473cd57) SHA1(331130faa9de01b3ca93845174e8c3684bd269c7) )
46884612
4689   ROM_REGION( 0x400000, "gfx1", 0 )
4613   ROM_REGION( 0x400000, "gp9001", 0 )
46904614   ROM_LOAD( "sb2-gfx.u177", 0x000000, 0x200000, CRC(ebeec910) SHA1(e179f393b98135caa8419b68cd979038ab47a413) )
46914615   ROM_LOAD( "sb2-gfx.u175", 0x200000, 0x200000, CRC(e349c75b) SHA1(7d40d00fc0e15a68c427fe94db410bb7cbe00117) )
46924616
r29642r29643
47314655   ROM_REGION( 0x10000, "audiocpu", 0 )            /* Sound Z80 code */
47324656   ROM_LOAD( "ra-ma-01_02.u66", 0x00000, 0x10000, CRC(eabfa46d) SHA1(402c99ebf88f9025f74f0a28ced22b7882a65eb3) )
47334657
4734   ROM_REGION( 0x200000, "gfx1", 0 )
4658   ROM_REGION( 0x200000, "gp9001", 0 )
47354659   ROM_LOAD( "ra-ma01-rom2.u2",  0x000000, 0x100000, CRC(54e2bd95) SHA1(341359dd46152615675bb90e8a184216c8feebff) )
47364660   ROM_LOAD( "ra-ma01-rom3.u1",  0x100000, 0x100000, CRC(21cd378f) SHA1(e1695bccec949d18b1c03e9c42dca384554b0d7c) )
47374661
4738   ROM_REGION( 0x008000, "gfx2", 0 )
4662   ROM_REGION( 0x008000, "text", 0 )
47394663   ROM_LOAD( "ra-ma-01_05.u81",  0x000000, 0x008000, CRC(88b58841) SHA1(1d16b538c11a291bd1f46a510bfbd6259b45a0b5) )
47404664
47414665   ROM_REGION( 0x40000, "oki", 0 )         /* ADPCM Samples */
r29642r29643
47504674   ROM_REGION( 0x10000, "audiocpu", 0 )            /* Sound Z80 code */
47514675   ROM_LOAD( "ra-ma-01_02.u66", 0x00000, 0x10000, CRC(eabfa46d) SHA1(402c99ebf88f9025f74f0a28ced22b7882a65eb3) )
47524676
4753   ROM_REGION( 0x200000, "gfx1", 0 )
4677   ROM_REGION( 0x200000, "gp9001", 0 )
47544678   ROM_LOAD( "ra-ma01-rom2.u2",  0x000000, 0x100000, CRC(54e2bd95) SHA1(341359dd46152615675bb90e8a184216c8feebff) )
47554679   ROM_LOAD( "ra-ma01-rom3.u1",  0x100000, 0x100000, CRC(21cd378f) SHA1(e1695bccec949d18b1c03e9c42dca384554b0d7c) )
47564680
4757   ROM_REGION( 0x008000, "gfx2", 0 )
4681   ROM_REGION( 0x008000, "text", 0 )
47584682   ROM_LOAD( "ra-ma-01_05.u81",  0x000000, 0x008000, CRC(88b58841) SHA1(1d16b538c11a291bd1f46a510bfbd6259b45a0b5) )
47594683
47604684   ROM_REGION( 0x40000, "oki", 0 )         /* ADPCM Samples */
r29642r29643
47694693   ROM_REGION( 0x10000, "audiocpu", 0 )            /* Sound Z80 code */
47704694   ROM_LOAD( "ra-ma-01_02.u66", 0x00000, 0x10000, CRC(eabfa46d) SHA1(402c99ebf88f9025f74f0a28ced22b7882a65eb3) )
47714695
4772   ROM_REGION( 0x200000, "gfx1", 0 )
4696   ROM_REGION( 0x200000, "gp9001", 0 )
47734697   ROM_LOAD( "ra-ma01-rom2.u2",  0x000000, 0x100000, CRC(54e2bd95) SHA1(341359dd46152615675bb90e8a184216c8feebff) )
47744698   ROM_LOAD( "ra-ma01-rom3.u1",  0x100000, 0x100000, CRC(21cd378f) SHA1(e1695bccec949d18b1c03e9c42dca384554b0d7c) )
47754699
4776   ROM_REGION( 0x008000, "gfx2", 0 )
4700   ROM_REGION( 0x008000, "text", 0 )
47774701   ROM_LOAD( "ra_ma_01_05.u81",  0x000000, 0x008000, CRC(c00d1e80) SHA1(53e64c4c0c6309130b37597d13b44a9e95b717d8) )
47784702
47794703   ROM_REGION( 0x40000, "oki", 0 )         /* ADPCM Samples */
r29642r29643
47894713   ROM_REGION( 0x10000, "audiocpu", 0 )            /* Sound Z80 code */
47904714   ROM_LOAD( "ma02rom2.bin", 0x00000, 0x10000, CRC(dde8a57e) SHA1(f522a3f17e229c71512464349760a9e27778bf6a) )
47914715
4792   ROM_REGION( 0x400000, "gfx1", 0 )
4716   ROM_REGION( 0x400000, "gp9001", 0 )
47934717   ROM_LOAD( "ma02rom3.bin",  0x000000, 0x200000, CRC(0e797142) SHA1(a480ccd151e49b886d3175a6deff56e1f2c26c3e) )
47944718   ROM_LOAD( "ma02rom4.bin",  0x200000, 0x200000, CRC(72a6fa53) SHA1(ce92e65205b84361cfb90305a61e9541b5c4dc2f) )
47954719
4796   ROM_REGION( 0x008000, "gfx2", 0 )
4720   ROM_REGION( 0x008000, "text", 0 )
47974721   ROM_LOAD( "ma02rom5.eng",  0x000000, 0x008000, CRC(8c28460b) SHA1(0aed170762f6044896a7e608df60bbd37c583a71) )
47984722
47994723   ROM_REGION( 0x80000, "oki", 0 )         /* ADPCM Samples */
r29642r29643
48094733   ROM_REGION( 0x10000, "audiocpu", 0 )            /* Sound Z80 code */
48104734   ROM_LOAD( "ma02rom2.bin", 0x00000, 0x10000, CRC(dde8a57e) SHA1(f522a3f17e229c71512464349760a9e27778bf6a) )
48114735
4812   ROM_REGION( 0x400000, "gfx1", 0 )
4736   ROM_REGION( 0x400000, "gp9001", 0 )
48134737   ROM_LOAD( "ma02rom3.bin",  0x000000, 0x200000, CRC(0e797142) SHA1(a480ccd151e49b886d3175a6deff56e1f2c26c3e) )
48144738   ROM_LOAD( "ma02rom4.bin",  0x200000, 0x200000, CRC(72a6fa53) SHA1(ce92e65205b84361cfb90305a61e9541b5c4dc2f) )
48154739
4816   ROM_REGION( 0x008000, "gfx2", 0 )
4740   ROM_REGION( 0x008000, "text", 0 )
48174741   ROM_LOAD( "ma02rom5.bin",  0x000000, 0x008000, CRC(116ae559) SHA1(4cc2d2a23cc0aefd457111b7990e47184e79204c) )
48184742
48194743   ROM_REGION( 0x80000, "oki", 0 )         /* ADPCM Samples */
r29642r29643
48294753   ROM_REGION( 0x20000, "audiocpu", 0 )            /* Sound Z80 code + bank */
48304754   ROM_LOAD( "snd.bin", 0x00000, 0x20000, CRC(68632952) SHA1(fb834db83157948e2b420b6051102a9c6ac3969b) )
48314755
4832   ROM_REGION( 0x800000, "gfx1", 0 )
4756   ROM_REGION( 0x800000, "gp9001", 0 )
48334757   ROM_LOAD( "rom4.bin",  0x000000, 0x200000, CRC(b333d81f) SHA1(5481465f1304334fd55798be2f44324c57c2dbcb) )
48344758   ROM_LOAD( "rom3.bin",  0x200000, 0x200000, CRC(51b9ebfb) SHA1(30e0c326f5175aa436df8dba08f6f4e08130b92f) )
48354759   ROM_LOAD( "rom2.bin",  0x400000, 0x200000, CRC(b330e5e2) SHA1(5d48e9d56f99d093b6390e0af1609fd796df2d35) )
48364760   ROM_LOAD( "rom1.bin",  0x600000, 0x200000, CRC(7eafdd70) SHA1(7c8da8e86c3f9491719b1d7d5d285568d7614f38) )
48374761
4838   ROM_REGION( 0x010000, "gfx2", 0 )
4762   ROM_REGION( 0x010000, "text", 0 )
48394763   ROM_LOAD( "text.u81", 0x00000, 0x08000, CRC(e67fd534) SHA1(987d0edffc2c243a13d4567319ea3d185eaadbf8) )
48404764
48414765   ROM_REGION( 0x140000, "oki", 0 )        /* ADPCM Samples */
r29642r29643
48514775   ROM_REGION( 0x20000, "audiocpu", 0 )            /* Sound Z80 code + bank */
48524776   ROM_LOAD( "snd.bin", 0x00000, 0x20000, CRC(68632952) SHA1(fb834db83157948e2b420b6051102a9c6ac3969b) )
48534777
4854   ROM_REGION( 0x800000, "gfx1", 0 )
4778   ROM_REGION( 0x800000, "gp9001", 0 )
48554779   ROM_LOAD( "rom4.bin",  0x000000, 0x200000, CRC(b333d81f) SHA1(5481465f1304334fd55798be2f44324c57c2dbcb) )
48564780   ROM_LOAD( "rom3.bin",  0x200000, 0x200000, CRC(51b9ebfb) SHA1(30e0c326f5175aa436df8dba08f6f4e08130b92f) )
48574781   ROM_LOAD( "rom2.bin",  0x400000, 0x200000, CRC(b330e5e2) SHA1(5d48e9d56f99d093b6390e0af1609fd796df2d35) )
48584782   ROM_LOAD( "rom1.bin",  0x600000, 0x200000, CRC(7eafdd70) SHA1(7c8da8e86c3f9491719b1d7d5d285568d7614f38) )
48594783
4860   ROM_REGION( 0x010000, "gfx2", 0 )
4784   ROM_REGION( 0x010000, "text", 0 )
48614785   ROM_LOAD( "text.u81", 0x00000, 0x08000, CRC(e67fd534) SHA1(987d0edffc2c243a13d4567319ea3d185eaadbf8) )
48624786
48634787   ROM_REGION( 0x140000, "oki", 0 )        /* ADPCM Samples */
r29642r29643
48734797   ROM_REGION( 0x20000, "audiocpu", 0 )            /* Sound Z80 code + bank */
48744798   ROM_LOAD( "snd.bin", 0x00000, 0x20000, CRC(68632952) SHA1(fb834db83157948e2b420b6051102a9c6ac3969b) )
48754799
4876   ROM_REGION( 0x800000, "gfx1", 0 )
4800   ROM_REGION( 0x800000, "gp9001", 0 )
48774801   ROM_LOAD( "rom4.bin",  0x000000, 0x200000, CRC(b333d81f) SHA1(5481465f1304334fd55798be2f44324c57c2dbcb) )
48784802   ROM_LOAD( "rom3.bin",  0x200000, 0x200000, CRC(51b9ebfb) SHA1(30e0c326f5175aa436df8dba08f6f4e08130b92f) )
48794803   ROM_LOAD( "rom2.bin",  0x400000, 0x200000, CRC(b330e5e2) SHA1(5d48e9d56f99d093b6390e0af1609fd796df2d35) )
48804804   ROM_LOAD( "rom1.bin",  0x600000, 0x200000, CRC(7eafdd70) SHA1(7c8da8e86c3f9491719b1d7d5d285568d7614f38) )
48814805
4882   ROM_REGION( 0x010000, "gfx2", 0 )
4806   ROM_REGION( 0x010000, "text", 0 )
48834807   ROM_LOAD( "text.u81", 0x00000, 0x08000, CRC(e67fd534) SHA1(987d0edffc2c243a13d4567319ea3d185eaadbf8) )
48844808
48854809   ROM_REGION( 0x140000, "oki", 0 )        /* ADPCM Samples */
r29642r29643
48954819   ROM_REGION( 0x20000, "audiocpu", 0 )            /* Sound Z80 code + bank */
48964820   ROM_LOAD( "snd.bin", 0x00000, 0x20000, CRC(68632952) SHA1(fb834db83157948e2b420b6051102a9c6ac3969b) )
48974821
4898   ROM_REGION( 0x800000, "gfx1", 0 )
4822   ROM_REGION( 0x800000, "gp9001", 0 )
48994823   ROM_LOAD( "rom4.bin",  0x000000, 0x200000, CRC(b333d81f) SHA1(5481465f1304334fd55798be2f44324c57c2dbcb) )
49004824   ROM_LOAD( "rom3.bin",  0x200000, 0x200000, CRC(51b9ebfb) SHA1(30e0c326f5175aa436df8dba08f6f4e08130b92f) )
49014825   ROM_LOAD( "rom2.bin",  0x400000, 0x200000, CRC(b330e5e2) SHA1(5d48e9d56f99d093b6390e0af1609fd796df2d35) )
49024826   ROM_LOAD( "rom1.bin",  0x600000, 0x200000, CRC(7eafdd70) SHA1(7c8da8e86c3f9491719b1d7d5d285568d7614f38) )
49034827
4904   ROM_REGION( 0x010000, "gfx2", 0 )
4828   ROM_REGION( 0x010000, "text", 0 )
49054829   ROM_LOAD( "text.u81", 0x00000, 0x08000, CRC(e67fd534) SHA1(987d0edffc2c243a13d4567319ea3d185eaadbf8) )
49064830
49074831   ROM_REGION( 0x140000, "oki", 0 )        /* ADPCM Samples */
r29642r29643
49174841   ROM_REGION( 0x20000, "audiocpu", 0 )            /* Sound Z80 code + bank */
49184842   ROM_LOAD( "snd.bin", 0x00000, 0x20000, CRC(68632952) SHA1(fb834db83157948e2b420b6051102a9c6ac3969b) )
49194843
4920   ROM_REGION( 0x800000, "gfx1", 0 )
4844   ROM_REGION( 0x800000, "gp9001", 0 )
49214845   ROM_LOAD( "rom4.bin",  0x000000, 0x200000, CRC(b333d81f) SHA1(5481465f1304334fd55798be2f44324c57c2dbcb) )
49224846   ROM_LOAD( "rom3.bin",  0x200000, 0x200000, CRC(51b9ebfb) SHA1(30e0c326f5175aa436df8dba08f6f4e08130b92f) )
49234847   ROM_LOAD( "rom2.bin",  0x400000, 0x200000, CRC(b330e5e2) SHA1(5d48e9d56f99d093b6390e0af1609fd796df2d35) )
49244848   ROM_LOAD( "rom1.bin",  0x600000, 0x200000, CRC(7eafdd70) SHA1(7c8da8e86c3f9491719b1d7d5d285568d7614f38) )
49254849
4926   ROM_REGION( 0x010000, "gfx2", 0 )
4850   ROM_REGION( 0x010000, "text", 0 )
49274851   ROM_LOAD( "text.u81", 0x00000, 0x08000, CRC(e67fd534) SHA1(987d0edffc2c243a13d4567319ea3d185eaadbf8) )
49284852
49294853   ROM_REGION( 0x140000, "oki", 0 )        /* ADPCM Samples */
r29642r29643
49394863   ROM_REGION( 0x20000, "audiocpu", 0 )            /* Sound Z80 code + bank */
49404864   ROM_LOAD( "snd.bin", 0x00000, 0x20000, CRC(68632952) SHA1(fb834db83157948e2b420b6051102a9c6ac3969b) )
49414865
4942   ROM_REGION( 0x800000, "gfx1", 0 )
4866   ROM_REGION( 0x800000, "gp9001", 0 )
49434867   ROM_LOAD( "rom4.bin",  0x000000, 0x200000, CRC(b333d81f) SHA1(5481465f1304334fd55798be2f44324c57c2dbcb) )
49444868   ROM_LOAD( "rom3.bin",  0x200000, 0x200000, CRC(51b9ebfb) SHA1(30e0c326f5175aa436df8dba08f6f4e08130b92f) )
49454869   ROM_LOAD( "rom2.bin",  0x400000, 0x200000, CRC(b330e5e2) SHA1(5d48e9d56f99d093b6390e0af1609fd796df2d35) )
49464870   ROM_LOAD( "rom1.bin",  0x600000, 0x200000, CRC(7eafdd70) SHA1(7c8da8e86c3f9491719b1d7d5d285568d7614f38) )
49474871
4948   ROM_REGION( 0x010000, "gfx2", 0 )
4872   ROM_REGION( 0x010000, "text", 0 )
49494873   ROM_LOAD( "text.u81", 0x00000, 0x08000, CRC(e67fd534) SHA1(987d0edffc2c243a13d4567319ea3d185eaadbf8) )
49504874
49514875   ROM_REGION( 0x140000, "oki", 0 )        /* ADPCM Samples */
r29642r29643
49604884   ROM_REGION( 0x20000, "audiocpu", 0 )            /* Sound Z80 code + bank */
49614885   ROM_LOAD( "snd.bin", 0x00000, 0x20000, CRC(68632952) SHA1(fb834db83157948e2b420b6051102a9c6ac3969b) )
49624886
4963   ROM_REGION( 0x800000, "gfx1", 0 )
4887   ROM_REGION( 0x800000, "gp9001", 0 )
49644888   ROM_LOAD( "6#-322",  0x000000, 0x400000, CRC(37fe48ed) SHA1(ded5d13c33b4582310cdfb3dd52c052f741c00c5) ) /* == rom4.bin+rom3.bin */
49654889   ROM_LOAD( "5#-322",  0x400000, 0x400000, CRC(5a06c031) SHA1(ee241ff90117cec1f33ab163601a9d5c75609739) ) /* == rom2.bin+rom1.bin */
49664890
4967   ROM_REGION( 0x010000, "gfx2", 0 )
4891   ROM_REGION( 0x010000, "text", 0 )
49684892   ROM_LOAD( "1#-256", 0x00000, 0x08000, CRC(760dcd14) SHA1(e151e5d7ca5557277f306b9484ec021f4edf1e07) )
49694893   ROM_LOAD( "2#-256", 0x08000, 0x08000, CRC(456dd16e) SHA1(84779ee64d3ea33ba1ba4dee39b504a81c6811a1) )
49704894
r29642r29643
50504974   ROM_REGION( 0x40000, "audiocpu", 0 )            /* Sound Z80 code + bank */
50514975   ROM_LOAD( "snd.u77", 0x00000, 0x40000, CRC(56682696) SHA1(a372450d9a6d535123dfc31d8116074b168ab646) )
50524976
5053   ROM_REGION( 0x1000000, "gfx1", 0 )
4977   ROM_REGION( 0x1000000, "gp9001", 0 )
50544978   ROM_LOAD( "rom-1.bin", 0x000000, 0x400000, CRC(0df69ca2) SHA1(49670347ebd7e1067ff988cf842b275b7ee7b5f7) )
50554979   ROM_LOAD( "rom-3.bin", 0x400000, 0x400000, CRC(60167d38) SHA1(fd2429808c59ef51fd5f5db84ea89a8dc504186e) )
50564980   ROM_LOAD( "rom-2.bin", 0x800000, 0x400000, CRC(1bfea593) SHA1(ce06dc3097ae56b0df56d104bbf7efc9b5d968d4) )
r29642r29643
50744998   ROM_REGION( 0x40000, "audiocpu", 0 )            /* Sound Z80 code + bank */
50754999   ROM_LOAD( "snd.u77", 0x00000, 0x40000, CRC(56682696) SHA1(a372450d9a6d535123dfc31d8116074b168ab646) )
50765000
5077   ROM_REGION( 0x1000000, "gfx1", 0 )
5001   ROM_REGION( 0x1000000, "gp9001", 0 )
50785002   ROM_LOAD( "rom-1.bin", 0x000000, 0x400000, CRC(0df69ca2) SHA1(49670347ebd7e1067ff988cf842b275b7ee7b5f7) )
50795003   ROM_LOAD( "rom-3.bin", 0x400000, 0x400000, CRC(60167d38) SHA1(fd2429808c59ef51fd5f5db84ea89a8dc504186e) )
50805004   ROM_LOAD( "rom-2.bin", 0x800000, 0x400000, CRC(1bfea593) SHA1(ce06dc3097ae56b0df56d104bbf7efc9b5d968d4) )
r29642r29643
50985022   ROM_REGION( 0x40000, "audiocpu", 0 )            /* Sound Z80 code + bank */
50995023   ROM_LOAD( "snd.u77", 0x00000, 0x40000, CRC(56682696) SHA1(a372450d9a6d535123dfc31d8116074b168ab646) )
51005024
5101   ROM_REGION( 0x1000000, "gfx1", 0 )
5025   ROM_REGION( 0x1000000, "gp9001", 0 )
51025026   ROM_LOAD( "rom-1.bin", 0x000000, 0x400000, CRC(0df69ca2) SHA1(49670347ebd7e1067ff988cf842b275b7ee7b5f7) )
51035027   ROM_LOAD( "rom-3.bin", 0x400000, 0x400000, CRC(60167d38) SHA1(fd2429808c59ef51fd5f5db84ea89a8dc504186e) )
51045028   ROM_LOAD( "rom-2.bin", 0x800000, 0x400000, CRC(1bfea593) SHA1(ce06dc3097ae56b0df56d104bbf7efc9b5d968d4) )
r29642r29643
51225046   ROM_REGION( 0x40000, "audiocpu", 0 )            /* Sound Z80 code + bank */
51235047   ROM_LOAD( "snd.u77", 0x00000, 0x40000, CRC(56682696) SHA1(a372450d9a6d535123dfc31d8116074b168ab646) )
51245048
5125   ROM_REGION( 0x1000000, "gfx1", 0 )
5049   ROM_REGION( 0x1000000, "gp9001", 0 )
51265050   ROM_LOAD( "rom-1.bin", 0x000000, 0x400000, CRC(0df69ca2) SHA1(49670347ebd7e1067ff988cf842b275b7ee7b5f7) )
51275051   ROM_LOAD( "rom-3.bin", 0x400000, 0x400000, CRC(60167d38) SHA1(fd2429808c59ef51fd5f5db84ea89a8dc504186e) )
51285052   ROM_LOAD( "rom-2.bin", 0x800000, 0x400000, CRC(1bfea593) SHA1(ce06dc3097ae56b0df56d104bbf7efc9b5d968d4) )
r29642r29643
51465070   ROM_REGION( 0x40000, "audiocpu", 0 )            /* Sound Z80 code + bank */
51475071   ROM_LOAD( "snd.u77", 0x00000, 0x40000, CRC(56682696) SHA1(a372450d9a6d535123dfc31d8116074b168ab646) )
51485072
5149   ROM_REGION( 0x1000000, "gfx1", 0 )
5073   ROM_REGION( 0x1000000, "gp9001", 0 )
51505074   ROM_LOAD( "rom-1.bin", 0x000000, 0x400000, CRC(0df69ca2) SHA1(49670347ebd7e1067ff988cf842b275b7ee7b5f7) )
51515075   ROM_LOAD( "rom-3.bin", 0x400000, 0x400000, CRC(60167d38) SHA1(fd2429808c59ef51fd5f5db84ea89a8dc504186e) )
51525076   ROM_LOAD( "rom-2.bin", 0x800000, 0x400000, CRC(1bfea593) SHA1(ce06dc3097ae56b0df56d104bbf7efc9b5d968d4) )
r29642r29643
51705094   ROM_REGION( 0x40000, "audiocpu", 0 )            /* Sound Z80 code + bank */
51715095   ROM_LOAD( "snd.u77", 0x00000, 0x40000, CRC(56682696) SHA1(a372450d9a6d535123dfc31d8116074b168ab646) )
51725096
5173   ROM_REGION( 0x1000000, "gfx1", 0 )
5097   ROM_REGION( 0x1000000, "gp9001", 0 )
51745098   ROM_LOAD( "rom-1.bin", 0x000000, 0x400000, CRC(0df69ca2) SHA1(49670347ebd7e1067ff988cf842b275b7ee7b5f7) )
51755099   ROM_LOAD( "rom-3.bin", 0x400000, 0x400000, CRC(60167d38) SHA1(fd2429808c59ef51fd5f5db84ea89a8dc504186e) )
51765100   ROM_LOAD( "rom-2.bin", 0x800000, 0x400000, CRC(1bfea593) SHA1(ce06dc3097ae56b0df56d104bbf7efc9b5d968d4) )
r29642r29643
51945118   ROM_REGION( 0x40000, "audiocpu", 0 )            /* Sound Z80 code + bank */
51955119   ROM_LOAD( "snd.u77", 0x00000, 0x40000, CRC(56682696) SHA1(a372450d9a6d535123dfc31d8116074b168ab646) )
51965120
5197   ROM_REGION( 0x1000000, "gfx1", 0 )
5121   ROM_REGION( 0x1000000, "gp9001", 0 )
51985122   ROM_LOAD( "rom-1.bin", 0x000000, 0x400000, CRC(0df69ca2) SHA1(49670347ebd7e1067ff988cf842b275b7ee7b5f7) )
51995123   ROM_LOAD( "rom-3.bin", 0x400000, 0x400000, CRC(60167d38) SHA1(fd2429808c59ef51fd5f5db84ea89a8dc504186e) )
52005124   ROM_LOAD( "rom-2.bin", 0x800000, 0x400000, CRC(1bfea593) SHA1(ce06dc3097ae56b0df56d104bbf7efc9b5d968d4) )
r29642r29643
52695193   ROM_REGION( 0x20000, "audiocpu", 0 )            /* Sound Z80 code */
52705194   ROM_LOAD( "sndu0720.bin", 0x00000, 0x20000, CRC(e62ab246) SHA1(00d23689dd423ecd4024c58b5903d16e890f1dff) )
52715195
5272   ROM_REGION( 0x1000000, "gfx1", 0 )
5196   ROM_REGION( 0x1000000, "gp9001", 0 )
52735197   ROM_LOAD( "gfxu0510.bin", 0x000000, 0x400000, CRC(9cca3446) SHA1(1123f8b8bfbe59a2c572cdf61f1ad27ff37f0f0d) )
52745198   ROM_LOAD( "gfxu0512.bin", 0x400000, 0x400000, CRC(a2a281d5) SHA1(d9a6623f9433ad682223f9780c26cd1523ebc5c5) )
52755199   ROM_LOAD( "gfxu0511.bin", 0x800000, 0x400000, CRC(e16472c0) SHA1(6068d679a8b3b65e05acd58a7ce9ead90177049f) )
r29642r29643
52955219   ROM_REGION( 0x20000, "audiocpu", 0 )            /* Sound Z80 code */
52965220   ROM_LOAD( "sndu0720.bin", 0x00000, 0x20000, CRC(e62ab246) SHA1(00d23689dd423ecd4024c58b5903d16e890f1dff) )
52975221
5298   ROM_REGION( 0x1000000, "gfx1", 0 )
5222   ROM_REGION( 0x1000000, "gp9001", 0 )
52995223   ROM_LOAD( "gfxu0510.bin", 0x000000, 0x400000, CRC(9cca3446) SHA1(1123f8b8bfbe59a2c572cdf61f1ad27ff37f0f0d) )
53005224   ROM_LOAD( "gfxu0512.bin", 0x400000, 0x400000, CRC(a2a281d5) SHA1(d9a6623f9433ad682223f9780c26cd1523ebc5c5) )
53015225   ROM_LOAD( "gfxu0511.bin", 0x800000, 0x400000, CRC(e16472c0) SHA1(6068d679a8b3b65e05acd58a7ce9ead90177049f) )
r29642r29643
53215245   ROM_REGION( 0x20000, "audiocpu", 0 )            /* Sound Z80 code */
53225246   ROM_LOAD( "sndu0720.bin", 0x00000, 0x20000, CRC(e62ab246) SHA1(00d23689dd423ecd4024c58b5903d16e890f1dff) )
53235247
5324   ROM_REGION( 0x1000000, "gfx1", 0 )
5248   ROM_REGION( 0x1000000, "gp9001", 0 )
53255249   ROM_LOAD( "gfxu0510.bin", 0x000000, 0x400000, CRC(9cca3446) SHA1(1123f8b8bfbe59a2c572cdf61f1ad27ff37f0f0d) )
53265250   ROM_LOAD( "gfxu0512.bin", 0x400000, 0x400000, CRC(a2a281d5) SHA1(d9a6623f9433ad682223f9780c26cd1523ebc5c5) )
53275251   ROM_LOAD( "gfxu0511.bin", 0x800000, 0x400000, CRC(e16472c0) SHA1(6068d679a8b3b65e05acd58a7ce9ead90177049f) )
branches/old_menus/src/emu/machine/6525tpi.c
r29642r29643
106106
107107tpi6525_device::tpi6525_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
108108   : device_t(mconfig, TPI6525, "6525 TPI", tag, owner, clock, "tpi6525", __FILE__),
109   m_out_irq_cb(*this),
110   m_in_pa_cb(*this),
111   m_out_pa_cb(*this),
112   m_in_pb_cb(*this),
113   m_out_pb_cb(*this),
114   m_in_pc_cb(*this),
115   m_out_pc_cb(*this),
116   m_out_ca_cb(*this),
117   m_out_cb_cb(*this),
109118   m_port_a(0),
110119   m_ddr_a(0),
111120   m_in_a(0),
r29642r29643
128137}
129138
130139//-------------------------------------------------
131//  device_config_complete - perform any
132//  operations now that the configuration is
133//  complete
134//-------------------------------------------------
135
136void tpi6525_device::device_config_complete()
137{
138   // inherit a copy of the static data
139   const tpi6525_interface *intf = reinterpret_cast<const tpi6525_interface *>(static_config());
140   if (intf != NULL)
141      *static_cast<tpi6525_interface *>(this) = *intf;
142
143   // or initialize to defaults if none provided
144   else
145   {
146      memset(&m_out_irq_cb, 0, sizeof(m_out_irq_cb));
147      memset(&m_in_pa_cb, 0, sizeof(m_in_pa_cb));
148      memset(&m_out_pa_cb, 0, sizeof(m_out_pa_cb));
149      memset(&m_in_pb_cb, 0, sizeof(m_in_pb_cb));
150      memset(&m_out_pb_cb, 0, sizeof(m_out_pb_cb));
151      memset(&m_in_pc_cb, 0, sizeof(m_in_pc_cb));
152      memset(&m_out_pc_cb, 0, sizeof(m_out_pc_cb));
153      memset(&m_out_ca_cb, 0, sizeof(m_out_ca_cb));
154      memset(&m_out_cb_cb, 0, sizeof(m_out_cb_cb));
155   }
156}
157
158//-------------------------------------------------
159140//  device_start - device-specific startup
160141//-------------------------------------------------
161142
162143void tpi6525_device::device_start()
163144{
164145   // resolve callbacks
165   m_out_irq_func.resolve(m_out_irq_cb, *this);
166   m_in_pa_func.resolve(m_in_pa_cb, *this);
167   m_out_pa_func.resolve(m_out_pa_cb, *this);
168   m_in_pb_func.resolve(m_in_pb_cb, *this);
169   m_out_pb_func.resolve(m_out_pb_cb, *this);
170   m_in_pc_func.resolve(m_in_pc_cb, *this);
171   m_out_pc_func.resolve(m_out_pc_cb, *this);
172   m_out_ca_func.resolve(m_out_ca_cb, *this);
173   m_out_cb_func.resolve(m_out_cb_cb, *this);
146   m_out_irq_cb.resolve_safe();
147   m_in_pa_cb.resolve();
148   m_out_pa_cb.resolve_safe();
149   m_in_pb_cb.resolve();
150   m_out_pb_cb.resolve_safe();
151   m_in_pc_cb.resolve();
152   m_out_pc_cb.resolve_safe();
153   m_out_ca_cb.resolve_safe();
154   m_out_cb_cb.resolve_safe();
174155
175156   /* register for state saving */
176157   save_item(NAME(m_port_a));
r29642r29643
215196
216197      DBG_LOG(machine(), 3, "tpi6525", ("%s set interrupt\n", tag()));
217198
218      m_out_irq_func(m_interrupt_level);
199      m_out_irq_cb(m_interrupt_level);
219200   }
220201}
221202
r29642r29643
228209
229210      DBG_LOG(machine(), 3, "tpi6525", ("%s clear interrupt\n", tag()));
230211
231      m_out_irq_func(m_interrupt_level);
212      m_out_irq_cb(m_interrupt_level);
232213   }
233214}
234215
r29642r29643
315296{
316297   UINT8 data = m_in_a;
317298
318   if (!m_in_pa_func.isnull())
319      data = m_in_pa_func(offset);
299   if (!m_in_pa_cb.isnull())
300      data = m_in_pa_cb(offset);
320301
321302   data = (data & ~m_ddr_a) | (m_ddr_a & m_port_a);
322303
r29642r29643
334315{
335316   UINT8 data = m_in_b;
336317
337   if (!m_in_pb_func.isnull())
338      data = m_in_pb_func(offset);
318   if (!m_in_pb_cb.isnull())
319      data = m_in_pb_cb(offset);
339320
340321   data = (data & ~m_ddr_b) | (m_ddr_b & m_port_b);
341322
r29642r29643
353334{
354335   UINT8 data = m_in_c;
355336
356   if (!m_in_pc_func.isnull())
357      data &= m_in_pc_func(offset);
337   if (!m_in_pc_cb.isnull())
338      data &= m_in_pc_cb(offset);
358339
359340   data = (data & ~m_ddr_c) | (m_ddr_c & m_port_c);
360341
r29642r29643
377358   case 0:
378359      data = m_in_a;
379360
380      if (!m_in_pa_func.isnull())
381         data &= m_in_pa_func(0);
361      if (!m_in_pa_cb.isnull())
362         data &= m_in_pa_cb(0);
382363
383364      data = (data & ~m_ddr_a) | (m_ddr_a & m_port_a);
384365
r29642r29643
387368   case 1:
388369      data = m_in_b;
389370
390      if (!m_in_pb_func.isnull())
391         data &= m_in_pb_func(0);
371      if (!m_in_pb_cb.isnull())
372         data &= m_in_pb_cb(0);
392373
393374      data = (data & ~m_ddr_b) | (m_ddr_b & m_port_b);
394375
r29642r29643
412393      {
413394         data = m_in_c;
414395
415         if (!m_in_pc_func.isnull())
416            data &= m_in_pc_func(0);
396         if (!m_in_pc_cb.isnull())
397            data &= m_in_pc_cb(0);
417398
418399         data = (data & ~m_ddr_c) | (m_ddr_c & m_port_c);
419400      }
r29642r29643
491472   {
492473   case 0:
493474      m_port_a = data;
494      m_out_pa_func(0, (m_port_a & m_ddr_a) | (m_ddr_a ^ 0xff));
475      m_out_pa_cb((offs_t)0, (m_port_a & m_ddr_a) | (m_ddr_a ^ 0xff));
495476      break;
496477
497478   case 1:
498479      m_port_b = data;
499      m_out_pb_func(0, (m_port_b & m_ddr_b) | (m_ddr_b ^ 0xff));
480      m_out_pb_cb((offs_t)0, (m_port_b & m_ddr_b) | (m_ddr_b ^ 0xff));
500481      break;
501482
502483   case 2:
503484      m_port_c = data;
504485
505486      if (!INTERRUPT_MODE)
506         m_out_pc_func(0, (m_port_c & m_ddr_c) | (m_ddr_c ^ 0xff));
487         m_out_pc_cb((offs_t)0, (m_port_c & m_ddr_c) | (m_ddr_c ^ 0xff));
507488      break;
508489
509490   case 3:
510491      m_ddr_a = data;
511      m_out_pa_func(0, (m_port_a & m_ddr_a) | (m_ddr_a ^ 0xff));
492      m_out_pa_cb((offs_t)0, (m_port_a & m_ddr_a) | (m_ddr_a ^ 0xff));
512493      break;
513494
514495   case 4:
515496      m_ddr_b = data;
516      m_out_pb_func(0, (m_port_b & m_ddr_b) | (m_ddr_b ^ 0xff));
497      m_out_pb_cb((offs_t)0, (m_port_b & m_ddr_b) | (m_ddr_b ^ 0xff));
517498      break;
518499
519500   case 5:
520501      m_ddr_c = data;
521502
522503      if (!INTERRUPT_MODE)
523         m_out_pc_func(0, (m_port_c & m_ddr_c) | (m_ddr_c ^ 0xff));
504         m_out_pc_cb((offs_t)0, (m_port_c & m_ddr_c) | (m_ddr_c ^ 0xff));
524505      break;
525506
526507   case 6:
r29642r29643
533514            if (m_ca_level != CA_MANUAL_LEVEL)
534515            {
535516               m_ca_level = CA_MANUAL_LEVEL;
536               m_out_ca_func(m_ca_level);
517               m_out_ca_cb(m_ca_level);
537518            }
538519         }
539520         if (CB_MANUAL_OUT)
r29642r29643
541522            if (m_cb_level != CB_MANUAL_LEVEL)
542523            {
543524               m_cb_level = CB_MANUAL_LEVEL;
544               m_out_cb_func(m_cb_level);
525               m_out_cb_cb(m_cb_level);
545526            }
546527         }
547528      }
branches/old_menus/src/emu/machine/6525tpi.h
r29642r29643
3131
3232
3333/***************************************************************************
34    TYPE DEFINITIONS
35***************************************************************************/
36
37struct tpi6525_interface
38{
39   devcb_write_line    m_out_irq_cb;
40
41   devcb_read8         m_in_pa_cb;
42   devcb_write8        m_out_pa_cb;
43
44   devcb_read8         m_in_pb_cb;
45   devcb_write8        m_out_pb_cb;
46
47   devcb_read8         m_in_pc_cb;
48   devcb_write8        m_out_pc_cb;
49
50   devcb_write_line    m_out_ca_cb;
51   devcb_write_line    m_out_cb_cb;
52};
53
54
55/***************************************************************************
5634    DEVICE CONFIGURATION MACROS
5735***************************************************************************/
5836
59class tpi6525_device : public device_t,
60                        public tpi6525_interface
37class tpi6525_device : public device_t
6138{
6239public:
6340   tpi6525_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
6441   ~tpi6525_device() {}
6542
43   template<class _Object> static devcb2_base &set_out_irq_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_out_irq_cb.set_callback(object); }
44   template<class _Object> static devcb2_base &set_in_pa_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_in_pa_cb.set_callback(object); }
45   template<class _Object> static devcb2_base &set_out_pa_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_out_pa_cb.set_callback(object); }
46   template<class _Object> static devcb2_base &set_in_pb_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_in_pb_cb.set_callback(object); }
47   template<class _Object> static devcb2_base &set_out_pb_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_out_pb_cb.set_callback(object); }
48   template<class _Object> static devcb2_base &set_in_pc_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_in_pc_cb.set_callback(object); }
49   template<class _Object> static devcb2_base &set_out_pc_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_out_pc_cb.set_callback(object); }
50   template<class _Object> static devcb2_base &set_out_ca_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_out_ca_cb.set_callback(object); }
51   template<class _Object> static devcb2_base &set_out_cb_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_out_cb_cb.set_callback(object); }
52   
6653   DECLARE_READ8_MEMBER( read );
6754   DECLARE_WRITE8_MEMBER( write );
6855
r29642r29643
8572
8673protected:
8774   // device-level overrides
88   virtual void device_config_complete();
8975   virtual void device_start();
9076   virtual void device_reset();
9177
9278private:
9379   // internal state
94   devcb_resolved_write_line   m_out_irq_func;
95   devcb_resolved_read8        m_in_pa_func;
96   devcb_resolved_write8       m_out_pa_func;
97   devcb_resolved_read8        m_in_pb_func;
98   devcb_resolved_write8       m_out_pb_func;
99   devcb_resolved_read8        m_in_pc_func;
100   devcb_resolved_write8       m_out_pc_func;
101   devcb_resolved_write_line   m_out_ca_func;
102   devcb_resolved_write_line   m_out_cb_func;
80   devcb2_write_line    m_out_irq_cb;
10381
82   devcb2_read8         m_in_pa_cb;
83   devcb2_write8        m_out_pa_cb;
84
85   devcb2_read8         m_in_pb_cb;
86   devcb2_write8        m_out_pb_cb;
87
88   devcb2_read8         m_in_pc_cb;
89   devcb2_write8        m_out_pc_cb;
90
91   devcb2_write_line    m_out_ca_cb;
92   devcb2_write_line    m_out_cb_cb;
93
10494   UINT8 m_port_a, m_ddr_a, m_in_a;
10595   UINT8 m_port_b, m_ddr_b, m_in_b;
10696   UINT8 m_port_c, m_ddr_c, m_in_c;
r29642r29643
119109extern const device_type TPI6525;
120110
121111
122#define MCFG_TPI6525_ADD(_tag, _intrf) \
123   MCFG_DEVICE_ADD(_tag, TPI6525, 0) \
124   MCFG_DEVICE_CONFIG(_intrf)
112#define MCFG_TPI6525_OUT_IRQ_CB(_devcb) \
113   devcb = &tpi6525_device::set_out_irq_callback(*device, DEVCB2_##_devcb);
125114
115#define MCFG_TPI6525_IN_PA_CB(_devcb) \
116   devcb = &tpi6525_device::set_in_pa_callback(*device, DEVCB2_##_devcb);
126117
118#define MCFG_TPI6525_OUT_PA_CB(_devcb) \
119   devcb = &tpi6525_device::set_out_pa_callback(*device, DEVCB2_##_devcb);
127120
121#define MCFG_TPI6525_IN_PB_CB(_devcb) \
122   devcb = &tpi6525_device::set_in_pb_callback(*device, DEVCB2_##_devcb);
123
124#define MCFG_TPI6525_OUT_PB_CB(_devcb) \
125   devcb = &tpi6525_device::set_out_pb_callback(*device, DEVCB2_##_devcb);
126
127#define MCFG_TPI6525_IN_PC_CB(_devcb) \
128   devcb = &tpi6525_device::set_in_pc_callback(*device, DEVCB2_##_devcb);
129
130#define MCFG_TPI6525_OUT_PC_CB(_devcb) \
131   devcb = &tpi6525_device::set_out_pc_callback(*device, DEVCB2_##_devcb);
132
133#define MCFG_TPI6525_OUT_CA_CB(_devcb) \
134   devcb = &tpi6525_device::set_out_ca_callback(*device, DEVCB2_##_devcb);
135
136#define MCFG_TPI6525_OUT_CB_CB(_devcb) \
137   devcb = &tpi6525_device::set_out_cb_callback(*device, DEVCB2_##_devcb);
138
139
128140#endif /* __TPI6525_H__ */
branches/old_menus/src/emu/machine/ay31015.c
r29642r29643
9696const device_type AY51013 = &device_creator<ay51013_device>;
9797
9898ay31015_device::ay31015_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
99            : device_t(mconfig, type, name, tag, owner, clock, shortname, source)
99            : device_t(mconfig, type, name, tag, owner, clock, shortname, source),
100            m_rx_clock(0),
101            m_tx_clock(0),
102            m_read_si_cb(*this),
103            m_write_so_cb(*this),
104            m_status_changed_cb(*this)
100105{
101106}
102107
103108ay31015_device::ay31015_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
104            : device_t(mconfig, AY31015, "AY-3-1015", tag, owner, clock, "ay31015", __FILE__)
109            : device_t(mconfig, AY31015, "AY-3-1015", tag, owner, clock, "ay31015", __FILE__),
110            m_read_si_cb(*this),
111            m_write_so_cb(*this),
112            m_status_changed_cb(*this)
105113{
106114}
107115
r29642r29643
111119}
112120
113121//-------------------------------------------------
114//  device_config_complete - perform any
115//  operations now that the configuration is
116//  complete
117//-------------------------------------------------
118
119void ay31015_device::device_config_complete()
120{
121   // inherit a copy of the static data
122   const ay31015_config *intf = reinterpret_cast<const ay31015_config *>(static_config());
123   if (intf != NULL)
124      *static_cast<ay31015_config *>(this) = *intf;
125
126   // or initialize to defaults if none provided
127   else
128   {
129      memset(&read_si_cb, 0, sizeof(read_si_cb));
130      memset(&write_so_cb, 0, sizeof(write_so_cb));
131      memset(&status_changed_cb, 0, sizeof(status_changed_cb));
132      transmitter_clock = 0;
133      receiver_clock = 0;
134   }
135}
136
137//-------------------------------------------------
138122//  device_start - device-specific startup
139123//-------------------------------------------------
140124
141125void ay31015_device::device_start()
142126{
143   m_read_si.resolve(read_si_cb, *this);
144   m_write_so.resolve(write_so_cb, *this);
145   m_status_changed.resolve(status_changed_cb, *this);
127   m_read_si_cb.resolve();
128   m_write_so_cb.resolve();
129   m_status_changed_cb.resolve();
146130
147   m_tx_clock = transmitter_clock;
148   m_rx_clock = receiver_clock;
149
150131   m_rx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ay31015_device::rx_process),this));
151132   m_tx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ay31015_device::tx_process),this));
152133
r29642r29643
191172
192173inline UINT8 ay31015_device::get_si()
193174{
194   if (!m_read_si.isnull())
195      m_pins[AY31015_SI] = m_read_si(0) ? 1 : 0;
175   if (!m_read_si_cb.isnull())
176      m_pins[AY31015_SI] = m_read_si_cb(0) ? 1 : 0;
196177
197178   return m_pins[AY31015_SI];
198179}
r29642r29643
202183{
203184   m_pins[AY31015_SO] = data ? 1 : 0;
204185
205   if (!m_write_so.isnull())
206      m_write_so(0, m_pins[AY31015_SO]);
186   if (!m_write_so_cb.isnull())
187      m_write_so_cb((offs_t)0, m_pins[AY31015_SO]);
207188}
208189
209190
r29642r29643
238219   }
239220   status_pins_changed += update_status_pin(STATUS_EOC, AY31015_EOC);
240221
241   if (status_pins_changed && !m_status_changed.isnull())
222   if (status_pins_changed && !m_status_changed_cb.isnull())
242223   {
243      m_status_changed(0, status_pins_changed);
224      m_status_changed_cb((offs_t)0, status_pins_changed);
244225   }
245226}
246227
branches/old_menus/src/emu/machine/ay31015.h
r29642r29643
3939};
4040
4141
42struct  ay31015_config
43{
44   double              transmitter_clock;          /* TCP - pin 40 */
45   double              receiver_clock;             /* RCP - pin 17 */
46   devcb_read8         read_si_cb;                 /* SI - pin 20 - This will be called whenever the SI pin is sampled. Optional */
47   devcb_write8        write_so_cb;                /* SO - pin 25 - This will be called whenever data is put on the SO pin. Optional */
48   devcb_write8        status_changed_cb;          /* This will be called whenever one of the status pins may have changed. Optional */
49};
50
51
5242/***************************************************************************
5343    DEVICE INTERFACE
5444***************************************************************************/
r29642r29643
6656
6757ALLOW_SAVE_TYPE(state_t);
6858
69class ay31015_device : public device_t,
70                  public ay31015_config
59class ay31015_device : public device_t
7160{
7261public:
7362   ay31015_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
7463   ay31015_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
7564   ~ay31015_device() {}
7665
77
66   static void set_tx_clock(device_t &device, double tx_clock) { downcast<ay31015_device &>(device).m_tx_clock = tx_clock; }
67   static void set_rx_clock(device_t &device, double rx_clock) { downcast<ay31015_device &>(device).m_rx_clock = rx_clock; }
68   template<class _Object> static devcb2_base &set_read_si_callback(device_t &device, _Object object) { return downcast<ay31015_device &>(device).m_read_si_cb.set_callback(object); }
69   template<class _Object> static devcb2_base &set_write_so_callback(device_t &device, _Object object) { return downcast<ay31015_device &>(device).m_write_so_cb.set_callback(object); }
70   template<class _Object> static devcb2_base &set_status_changed_callback(device_t &device, _Object object) { return downcast<ay31015_device &>(device).m_status_changed_cb.set_callback(object); }
71   
7872   /* Set an input pin */
7973   void set_input_pin( ay31015_input_pin_t pin, int data );
8074
r29642r29643
10296
10397protected:
10498   // device-level overrides
105   virtual void device_config_complete();
10699   virtual void device_start();
107100   virtual void device_reset();
108101
r29642r29643
133126   UINT8 m_rx_bit_count;
134127   UINT8 m_rx_parity;
135128   UINT16 m_rx_pulses;   // total pulses left
136   double m_rx_clock;
129   double m_rx_clock;    /* RCP - pin 17 */
137130   emu_timer *m_rx_timer;
138131
139132   state_t m_tx_state;
r29642r29643
141134   UINT8 m_tx_buffer;    // next byte to send
142135   UINT8 m_tx_parity;
143136   UINT16 m_tx_pulses;   // total pulses left
144   double m_tx_clock;
137   double m_tx_clock;    /* TCP - pin 40 */
145138   emu_timer *m_tx_timer;
146139
147   devcb_resolved_read8    m_read_si;                /* SI - pin 20 - This will be called whenever the SI pin is sampled. Optional */
148   devcb_resolved_write8   m_write_so;               /* SO - pin 25 - This will be called whenever data is put on the SO pin. Optional */
149   devcb_resolved_write8   m_status_changed;         /* This will be called whenever one of the status pins may have changed. Optional */
140   devcb2_read8 m_read_si_cb;                 /* SI - pin 20 - This will be called whenever the SI pin is sampled. Optional */
141   devcb2_write8 m_write_so_cb;                /* SO - pin 25 - This will be called whenever data is put on the SO pin. Optional */
142   devcb2_write8 m_status_changed_cb;          /* This will be called whenever one of the status pins may have changed. Optional */
150143};
151144
152145class ay51013_device : public ay31015_device
r29642r29643
168161 DEVICE CONFIGURATION MACROS
169162 ***************************************************************************/
170163
171#define MCFG_AY31015_ADD(_tag, _config) \
172   MCFG_DEVICE_ADD(_tag, AY31015, 0)       \
173   MCFG_DEVICE_CONFIG(_config)
174164
165#define MCFG_AY31015_TX_CLOCK(_txclk) \
166   ay31015_device::set_tx_clock(*device, _txclk);
167   
168#define MCFG_AY31015_RX_CLOCK(_rxclk) \
169   ay31015_device::set_rx_clock(*device, _rxclk);
175170
171#define MCFG_AY31015_READ_SI_CB(_devcb) \
172   devcb = &ay31015_device::set_read_si_callback(*device, DEVCB2_##_devcb);
176173
174#define MCFG_AY31015_WRITE_SO_CB(_devcb) \
175   devcb = &ay31015_device::set_write_so_callback(*device, DEVCB2_##_devcb);
176
177#define MCFG_AY31015_STATUS_CHANGED_CB(_devcb) \
178    devcb = &ay31015_device::set_status_changed_callback(*device, DEVCB2_##_devcb);
179   
180
181#define MCFG_AY51013_TX_CLOCK(_txclk) \
182   ay51013_device::set_tx_clock(*device, _txclk);
183   
184#define MCFG_AY51013_RX_CLOCK(_rxclk) \
185   ay51013_device::set_rx_clock(*device, _rxclk);
186
187#define MCFG_AY51013_READ_SI_CB(_devcb) \
188   devcb = &ay51013_device::set_read_si_callback(*device, DEVCB2_##_devcb);
189
190#define MCFG_AY51013_WRITE_SO_CB(_devcb) \
191   devcb = &ay51013_device::set_write_so_callback(*device, DEVCB2_##_devcb);
192
193#define MCFG_AY51013_STATUS_CHANGED_CB(_devcb) \
194    devcb = &ay51013_device::set_status_changed_callback(*device, DEVCB2_##_devcb);
195
177196#endif
branches/old_menus/src/emu/digfx.c
r29642r29643
158158            assert(region != NULL);
159159            region_length = 8 * region->bytes();
160160            region_base = region->base();
161            // FIXME
162            region_width = 1;
163            region_endianness = ENDIANNESS_NATIVE;
161            region_width = region->width();
162            region_endianness = region->endianness();
164163         }
165164      }
166165      else
branches/old_menus/src/emu/bus/plus4/c1551.c
r29642r29643
241241   m_ga->oe_w(BIT(data, 4));
242242}
243243
244static const tpi6525_interface tpi0_intf =
245{
246   DEVCB_NULL,
247   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tcbm_data_r),
248   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tcbm_data_w),
249   DEVCB_DEVICE_MEMBER(C64H156_TAG, c64h156_device, yb_r),
250   DEVCB_DEVICE_MEMBER(C64H156_TAG, c64h156_device, yb_w),
251   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tpi0_pc_r),
252   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tpi0_pc_w),
253   DEVCB_NULL,
254   DEVCB_NULL
255};
256
257
258244//-------------------------------------------------
259245//  tpi6525_interface tpi1_intf
260246//-------------------------------------------------
r29642r29643
325311   m_dav = BIT(data, 6);
326312}
327313
328static const tpi6525_interface tpi1_intf =
329{
330   DEVCB_NULL,
331   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tcbm_data_r),
332   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tcbm_data_w),
333   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tpi1_pb_r),
334   DEVCB_NULL,
335   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tpi1_pc_r),
336   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tpi1_pc_w),
337   DEVCB_NULL,
338   DEVCB_NULL
339};
340
341
342314//-------------------------------------------------
343315//  ADDRESS_MAP( c1551_mem )
344316//-------------------------------------------------
r29642r29643
380352   MCFG_QUANTUM_PERFECT_CPU(M6510T_TAG)
381353
382354   MCFG_PLS100_ADD(PLA_TAG)
383   MCFG_TPI6525_ADD(M6523_0_TAG, tpi0_intf)
384   MCFG_TPI6525_ADD(M6523_1_TAG, tpi1_intf)
385
355   MCFG_DEVICE_ADD(M6523_0_TAG, TPI6525, 0)
356   MCFG_TPI6525_IN_PA_CB(READ8(c1551_device, tcbm_data_r))
357   MCFG_TPI6525_OUT_PA_CB(WRITE8(c1551_device, tcbm_data_w))
358   MCFG_TPI6525_IN_PB_CB(DEVREAD8(C64H156_TAG, c64h156_device, yb_r))
359   MCFG_TPI6525_OUT_PB_CB(DEVWRITE8(C64H156_TAG, c64h156_device, yb_w))
360   MCFG_TPI6525_IN_PC_CB(READ8(c1551_device, tpi0_pc_r))
361   MCFG_TPI6525_OUT_PC_CB(WRITE8(c1551_device, tpi0_pc_w))
362   MCFG_DEVICE_ADD(M6523_1_TAG, TPI6525, 0)
363   MCFG_TPI6525_IN_PA_CB(READ8(c1551_device, tcbm_data_r))
364   MCFG_TPI6525_OUT_PA_CB(WRITE8(c1551_device, tcbm_data_w))
365   MCFG_TPI6525_IN_PB_CB(READ8(c1551_device, tpi1_pb_r))
366   MCFG_TPI6525_IN_PC_CB(READ8(c1551_device, tpi1_pc_r))
367   MCFG_TPI6525_OUT_PC_CB(WRITE8(c1551_device, tpi1_pc_w))
368   
386369   MCFG_DEVICE_ADD(C64H156_TAG, C64H156, XTAL_16MHz)
387370   MCFG_64H156_BYTE_CALLBACK(DEVWRITELINE(C64H156_TAG, c64h156_device, atni_w))
388371   MCFG_FLOPPY_DRIVE_ADD(C64H156_TAG":0", c1551_floppies, "525ssqd", c1551_device::floppy_formats)
branches/old_menus/src/emu/bus/c64/ieee488.c
r29642r29643
138138   m_roml_sel = BIT(data, 4);
139139}
140140
141static const tpi6525_interface tpi_intf =
142{
143   DEVCB_NULL,
144   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_ieee488_device, tpi_pa_r),
145   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_ieee488_device, tpi_pa_w),
146   DEVCB_DEVICE_MEMBER(IEEE488_TAG, ieee488_device, dio_r),
147   DEVCB_DEVICE_MEMBER(IEEE488_TAG, ieee488_device, dio_w),
148   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_ieee488_device, tpi_pc_r),
149   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_ieee488_device, tpi_pc_w),
150   DEVCB_NULL,
151   DEVCB_NULL
152};
153
154
155141//-------------------------------------------------
156142//  MACHINE_CONFIG_FRAGMENT( c64_ieee488 )
157143//-------------------------------------------------
158144
159145static MACHINE_CONFIG_FRAGMENT( c64_ieee488 )
160   MCFG_TPI6525_ADD(MOS6525_TAG, tpi_intf)
161
146   MCFG_DEVICE_ADD(MOS6525_TAG, TPI6525, 0)
147   MCFG_TPI6525_IN_PA_CB(READ8(c64_ieee488_device, tpi_pa_r))
148   MCFG_TPI6525_OUT_PA_CB(WRITE8(c64_ieee488_device, tpi_pa_w))
149   MCFG_TPI6525_IN_PB_CB(DEVREAD8(IEEE488_TAG, ieee488_device, dio_r))
150   MCFG_TPI6525_OUT_PB_CB(DEVWRITE8(IEEE488_TAG, ieee488_device, dio_w))
151   MCFG_TPI6525_IN_PC_CB(READ8(c64_ieee488_device, tpi_pc_r))
152   MCFG_TPI6525_OUT_PC_CB(WRITE8(c64_ieee488_device, tpi_pc_w))
153   
162154   MCFG_CBM_IEEE488_ADD(NULL)
163155   MCFG_C64_PASSTHRU_EXPANSION_SLOT_ADD()
164156MACHINE_CONFIG_END
branches/old_menus/src/emu/bus/c64/magic_voice.c
r29642r29643
185185   m_exrom = state;
186186}
187187
188static const tpi6525_interface tpi_intf =
189{
190   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_magic_voice_cartridge_device, tpi_irq_w),
191   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_magic_voice_cartridge_device, tpi_pa_r),
192   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_magic_voice_cartridge_device, tpi_pa_w),
193   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_magic_voice_cartridge_device, tpi_pb_r),
194   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_magic_voice_cartridge_device, tpi_pb_w),
195   DEVCB_NULL,
196   DEVCB_NULL,
197   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_magic_voice_cartridge_device, tpi_ca_w),
198   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_magic_voice_cartridge_device, tpi_cb_w),
199};
200
201
202188//-------------------------------------------------
203189//  t6721_interface
204190//-------------------------------------------------
r29642r29643
235221//-------------------------------------------------
236222
237223static MACHINE_CONFIG_FRAGMENT( c64_magic_voice )
238   MCFG_TPI6525_ADD(MOS6525_TAG, tpi_intf)
224   MCFG_DEVICE_ADD(MOS6525_TAG, TPI6525, 0)
225   MCFG_TPI6525_OUT_IRQ_CB(WRITELINE(c64_magic_voice_cartridge_device, tpi_irq_w))
226   MCFG_TPI6525_IN_PA_CB(READ8(c64_magic_voice_cartridge_device, tpi_pa_r))
227   MCFG_TPI6525_OUT_PA_CB(WRITE8(c64_magic_voice_cartridge_device, tpi_pa_w))
228   MCFG_TPI6525_IN_PB_CB(READ8(c64_magic_voice_cartridge_device, tpi_pb_r))
229   MCFG_TPI6525_OUT_PB_CB(WRITE8(c64_magic_voice_cartridge_device, tpi_pb_w))
230   MCFG_TPI6525_OUT_CA_CB(WRITELINE(c64_magic_voice_cartridge_device, tpi_ca_w))
231   MCFG_TPI6525_OUT_CA_CB(WRITELINE(c64_magic_voice_cartridge_device, tpi_cb_w))
239232   MCFG_40105_ADD(CMOS40105_TAG, DEVWRITELINE(MOS6525_TAG, tpi6525_device, i3_w), NULL)
240233
241234   MCFG_SPEAKER_STANDARD_MONO("mono")
branches/old_menus/src/mess/layout/ie15.lay
r0r29643
1<mamelayout version="2">
2
3   <element name="e_led">
4      <disk>
5         <color red="1.0" green="0.0" blue="0.0" />
6      </disk>
7   </element>
8
9   <element name="e_LAT">
10      <text string="LAT">
11         <color red="1.0" green="1.0" blue="1.0" />
12      </text>
13   </element>
14   <element name="e_NR">
15      <text string="NR">
16         <color red="1.0" green="1.0" blue="1.0" />
17      </text>
18   </element>
19   <element name="e_PCH">
20      <text string="PCH">
21         <color red="1.0" green="1.0" blue="1.0" />
22      </text>
23   </element>
24   <element name="e_DUP">
25      <text string="DUP">
26         <color red="1.0" green="1.0" blue="1.0" />
27      </text>
28   </element>
29   <element name="e_LIN">
30      <text string="LIN">
31         <color red="1.0" green="1.0" blue="1.0" />
32      </text>
33   </element>
34   <element name="e_RED">
35      <text string="RED">
36         <color red="1.0" green="1.0" blue="1.0" />
37      </text>
38   </element>
39   <element name="e_SDV">
40      <text string="SDV">
41         <color red="1.0" green="1.0" blue="1.0" />
42      </text>
43   </element>
44   <element name="e_PRD">
45      <text string="PRD">
46         <color red="1.0" green="1.0" blue="1.0" />
47      </text>
48   </element>
49
50   <element name="e_background">
51      <rect>
52         <bounds left="0" top="0" right="1" bottom="1" />
53         <color red="0.0" green="0.0" blue="0.5" />
54      </rect>
55   </element>
56
57   <view name="Keyboard LEDs">
58      <bezel name="lat_txt" element="e_LAT">
59         <bounds   left="0" right="100" top="550" bottom="570" />
60      </bezel>
61      <bezel name="lat_led" element="e_led">
62         <bounds  left="40"  right="60" top="580" bottom="600" />
63      </bezel>
64
65      <bezel name="nr_txt" element="e_NR">
66         <bounds left="100" right="200" top="550" bottom="570" />
67      </bezel>
68      <bezel name="nr_led" element="e_led">
69         <bounds left="140" right="160" top="580" bottom="600" />
70      </bezel>
71
72      <bezel name="pch_txt" element="e_PCH">
73         <bounds left="200" right="300" top="550" bottom="570" />
74      </bezel>
75      <bezel name="pch_led" element="e_led">
76         <bounds left="240" right="260" top="580" bottom="600" />
77      </bezel>
78
79      <bezel name="dup_txt" element="e_DUP">
80         <bounds left="300" right="400" top="550" bottom="570" />
81      </bezel>
82      <bezel name="dup_led" element="e_led">
83         <bounds left="340" right="360" top="580" bottom="600" />
84      </bezel>
85
86      <bezel name="lin_txt" element="e_LIN">
87         <bounds left="400" right="500" top="550" bottom="570" />
88      </bezel>
89      <bezel name="lin_led" element="e_led">
90         <bounds left="440" right="460" top="580" bottom="600" />
91      </bezel>
92
93      <bezel name="red_txt" element="e_RED">
94         <bounds left="500" right="600" top="550" bottom="570" />
95      </bezel>
96      <bezel name="red_led" element="e_led">
97         <bounds left="540" right="560" top="580" bottom="600" />
98      </bezel>
99
100      <bezel name="sdv_txt" element="e_SDV">
101         <bounds left="600" right="700" top="550" bottom="570" />
102      </bezel>
103      <bezel name="sdv_led" element="e_led">
104         <bounds left="640" right="660" top="580" bottom="600" />
105      </bezel>
106
107      <bezel name="prd_txt" element="e_PRD">
108         <bounds left="700" right="800" top="550" bottom="570" />
109      </bezel>
110      <bezel name="prd_led" element="e_led">
111         <bounds left="740" right="760" top="580" bottom="600" />
112      </bezel>
113
114<!--
115      <bezel element="e_background">
116         <bounds   left="0" right="800" top="550" bottom="600" />
117      </bezel>
118-->
119      <screen index="0">
120         <bounds x="0" y="0" width="800" height="550" />
121      </screen>
122   </view>
123
124</mamelayout>
Property changes on: branches/old_menus/src/mess/layout/ie15.lay
Added: svn:eol-style
   + native
Added: svn:mime-type
   + text/xml
branches/old_menus/src/mess/drivers/amiga.c
r29642r29643
502502   MACHINE_RESET_CALL_LEGACY( amigacd );
503503}
504504
505static const tpi6525_interface cdtv_tpi_intf =
506{
507   DEVCB_DRIVER_LINE_MEMBER(amiga_state, amigacd_tpi6525_irq),
508   DEVCB_NULL,
509   DEVCB_NULL,
510   DEVCB_NULL,
511   DEVCB_DRIVER_MEMBER(amiga_state, amigacd_tpi6525_portb_w),
512   DEVCB_DRIVER_MEMBER(amiga_state, amigacd_tpi6525_portc_r),
513   DEVCB_NULL,
514   DEVCB_NULL,
515   DEVCB_NULL
516};
517
518505READ8_MEMBER(a1200_state::a1200_cia_0_portA_r)
519506{
520507   UINT8 ret = ioport("CIA0PORTA")->read() & 0xc0; /* Gameport 1 and 0 buttons */
r29642r29643
684671   MCFG_CDROM_ADD( "cdrom", cdtv_cdrom)
685672   MCFG_SOFTWARE_LIST_ADD("cd_list", "cdtv")
686673
687   MCFG_TPI6525_ADD("tpi6525", cdtv_tpi_intf)
688
674   MCFG_DEVICE_ADD("tpi6525", TPI6525, 0)
675   MCFG_TPI6525_OUT_IRQ_CB(WRITELINE(amiga_state, amigacd_tpi6525_irq))
676   MCFG_TPI6525_OUT_PB_CB(WRITE8(amiga_state, amigacd_tpi6525_portb_w))
677   MCFG_TPI6525_IN_PC_CB(READ8(amiga_state, amigacd_tpi6525_portc_r))
678   
689679   MCFG_DEVICE_MODIFY("cia_0")
690680   MCFG_MOS6526_TOD(0) // connected to vsync
691681MACHINE_CONFIG_END
branches/old_menus/src/mess/drivers/trs80.c
r29642r29643
554554   NULL
555555};
556556
557static const ay31015_config trs80_ay31015_config =
558{
559   0.0,
560   0.0,
561   DEVCB_NULL,
562   DEVCB_NULL,
563   DEVCB_NULL
564};
565
566557static const floppy_interface trs80_floppy_interface =
567558{
568559   DEVCB_NULL,
r29642r29643
629620
630621   MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
631622
632   MCFG_AY31015_ADD( "tr1602", trs80_ay31015_config )
623   MCFG_DEVICE_ADD( "tr1602", AY31015, 0 )
633624MACHINE_CONFIG_END
634625
635626static MACHINE_CONFIG_DERIVED( model3, model1 )
branches/old_menus/src/mess/drivers/z80ne.c
r29642r29643
400400   rgb_t(0xff, 0xc4, 0x18)      /* ALPHANUMERIC BRIGHT ORANGE */
401401};
402402
403static const ay31015_config z80ne_ay31015_config =
404{
405   4800.0,
406   4800.0,
407   DEVCB_NULL,
408   DEVCB_NULL,
409   DEVCB_NULL
410};
411
412403static const cassette_interface z80ne_cassettea_config =
413404{
414405   cassette_default_formats,
r29642r29643
464455   MCFG_MACHINE_START_OVERRIDE(z80ne_state,z80ne)
465456   MCFG_MACHINE_RESET_OVERRIDE(z80ne_state,z80ne)
466457
467   MCFG_AY31015_ADD( "ay_3_1015", z80ne_ay31015_config )
458   MCFG_DEVICE_ADD( "ay_3_1015", AY31015, 0 )
459   MCFG_AY31015_TX_CLOCK(4800.0)
460   MCFG_AY31015_RX_CLOCK(4800.0)
468461
469462   MCFG_CASSETTE_ADD( "cassette", z80ne_cassettea_config )
470463   MCFG_CASSETTE_ADD( "cassette2", z80ne_cassetteb_config )
r29642r29643
508501   MCFG_MACHINE_START_OVERRIDE(z80ne_state,z80netb)
509502   MCFG_MACHINE_RESET_OVERRIDE(z80ne_state,z80netb)
510503
511   MCFG_AY31015_ADD( "ay_3_1015", z80ne_ay31015_config )
504   MCFG_DEVICE_ADD( "ay_3_1015", AY31015, 0 )
505   MCFG_AY31015_TX_CLOCK(4800.0)
506   MCFG_AY31015_RX_CLOCK(4800.0)
512507
513508   MCFG_CASSETTE_ADD( "cassette", z80ne_cassettea_config )
514509   MCFG_CASSETTE_ADD( "cassette2", z80ne_cassetteb_config )
r29642r29643
536531   MCFG_MACHINE_START_OVERRIDE(z80ne_state,z80netf)
537532   MCFG_MACHINE_RESET_OVERRIDE(z80ne_state,z80netf)
538533
539   MCFG_AY31015_ADD( "ay_3_1015", z80ne_ay31015_config )
534   MCFG_DEVICE_ADD( "ay_3_1015", AY31015, 0 )
535   MCFG_AY31015_TX_CLOCK(4800.0)
536   MCFG_AY31015_RX_CLOCK(4800.0)
540537
541538   MCFG_CASSETTE_ADD( "cassette", z80ne_cassettea_config )
542539   MCFG_CASSETTE_ADD( "cassette2", z80ne_cassetteb_config )
branches/old_menus/src/mess/drivers/ie15.c
r29642r29643
11/***************************************************************************
22
3        15IE-00-013 Terminal
3    15IE-00-013 Terminal
44
5            board images : http://asvcorp.ru/darch/hardware/pdp/fryazin-display/index.html
5    A serial (RS232 or current loop) green-screen terminal, mostly VT52
6    compatible (no Hold Screen mode and no graphics character set).
67
7        29/06/2012 Skeleton driver.
8    Alternate character set (selected by SO/SI chars) is Cyrillic.
89
9    A serial (RS232 or current loop) green-screen terminal, mostly VT52 compatible
10    (no Hold Screen mode and no graphics character set, but has Cyrillic characters).
11    The top line is a status line.
12
1310****************************************************************************/
1411
12
1513#include "emu.h"
14
15#include "bus/rs232/rs232.h"
1616#include "cpu/ie15/ie15.h"
17#include "imagedev/bitbngr.h"
18#include "machine/keyboard.h"
17#include "machine/ie15_kbd.h"
1918#include "sound/beep.h"
19#include "ie15.lh"
2020
2121#define SCREEN_PAGE (80*48)
2222
23#define IE_1        0x80
24#define IE_KB_ACK   1
23#define IE_TRUE         0x80
24#define IE_FALSE    0
2525
2626#define IE15_TOTAL_HORZ 1000
27#define IE15_TOTAL_VERT 28*11
28
2927#define IE15_DISP_HORZ  800
30#define IE15_DISP_VERT 25*11
28#define IE15_HORZ_START 200
3129
32#define IE15_HORZ_START 100
30#define IE15_TOTAL_VERT 28*11
31#define IE15_DISP_VERT  25*11
3332#define IE15_VERT_START 2*11
33#define IE15_STATUSLINE 11
3434
35
3536#define VERBOSE_DBG 1       /* general debug messages */
3637
3738#define DBG_LOG(N,M,A) \
r29642r29643
4445      } \
4546   } while (0)
4647
47#if VERBOSE_DBG > 0
48#define LOOPBACK (m_io_keyboard->read() & 0x20)
49#else
50#define LOOPBACK (0)
51#endif
5248
53#define BITBANGER_TAG   "bitbanger"
54#define KEYBOARD_TAG "keyboard"
55
56class ie15_state : public driver_device
49class ie15_state : public driver_device,
50   public device_serial_interface
5751{
5852public:
59   ie15_state(const machine_config &mconfig, device_type type, const char *tag)
60      : driver_device(mconfig, type, tag),
53   ie15_state(const machine_config &mconfig, device_type type, const char *tag) :
54      driver_device(mconfig, type, tag),
55      device_serial_interface(mconfig, *this),
6156      m_maincpu(*this, "maincpu"),
6257      m_beeper(*this, "beeper"),
63      m_bitbanger(*this, BITBANGER_TAG),
64      m_io_keyboard(*this, KEYBOARD_TAG)
58      m_rs232(*this, "rs232"),
59      m_screen(*this, "screen"),
60      m_io_keyboard(*this, "keyboard")
6561   { }
6662
6763   virtual void machine_reset();
6864   virtual void video_start();
69   DECLARE_PALETTE_INIT(ie15);
7065   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
7166   UINT32 screen_update_hle(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
72   TIMER_DEVICE_CALLBACK_MEMBER(scanline_callback);
73   DECLARE_WRITE8_MEMBER(kbd_put);
74   static const bitbanger_config ie15_bitbanger_config;
75   TIMER_CALLBACK_MEMBER(serial_tx_callback);
76   emu_timer  *m_serial_tx_timer;
67   TIMER_DEVICE_CALLBACK_MEMBER( scanline_callback );
68   DECLARE_WRITE16_MEMBER( kbd_put );
7769
70   DECLARE_WRITE_LINE_MEMBER( serial_rx_callback );
71   virtual void rcv_complete();
72   virtual void tra_callback();
73   virtual void tra_complete();
74   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
75
7876   DECLARE_WRITE8_MEMBER( mem_w );
7977   DECLARE_READ8_MEMBER( mem_r );
8078   DECLARE_WRITE8_MEMBER( mem_addr_lo_w );
r29642r29643
9694   DECLARE_WRITE8_MEMBER( serial_w );
9795   DECLARE_READ8_MEMBER( serial_rx_ready_r );
9896   DECLARE_READ8_MEMBER( serial_r );
99#if 0
10097   DECLARE_WRITE8_MEMBER( serial_speed_w );
101#endif
10298
10399private:
104100   TIMER_CALLBACK_MEMBER(ie15_beepoff);
105   UINT32 draw_scanline(UINT16 *p, UINT16 offset, UINT8 scanline, UINT8 y);
101   void update_leds();
102   UINT32 draw_scanline(UINT16 *p, UINT16 offset, UINT8 scanline);
103   rectangle m_tmpclip;
106104   bitmap_ind16 m_tmpbmp;
105   bitmap_ind16 m_offbmp;
107106
108107   const UINT8 *m_p_chargen;
109108   UINT8 *m_p_videoram;
110   UINT8 m_beep;
111   UINT8 m_cursor;
109   UINT8 m_long_beep;
110   UINT8 m_kb_control;
112111   UINT8 m_kb_data;
113   UINT8 m_kb_flag;
114112   UINT8 m_kb_flag0;
113   UINT8 m_kb_flag;
114   UINT8 m_kb_ruslat;
115115   UINT8 m_latch;
116   UINT8 m_ruslat;
117   UINT8 m_serial_rx_bits;
118   UINT8 m_serial_rx_buffer;
119   UINT8 m_serial_rx_data;
120   UINT8 m_serial_tx_bits;
121   UINT8 m_serial_tx_data;
122   UINT8 m_statusline;
123   UINT8 m_video;
124   UINT32 m_videoptr;
125   UINT32 m_videoptr_2;
116   struct {
117      UINT8 cursor;
118      UINT8 enable;
119      UINT8 line25;
120      UINT32 ptr1;
121      UINT32 ptr2;
122   } m_video;
126123
127   static void bitbanger_callback(running_machine &machine, UINT8 bit);
128   DECLARE_WRITE_LINE_MEMBER( serial_rx_callback );
124   UINT8 m_serial_rx_ready;
125   UINT8 m_serial_tx_ready;
129126
130127protected:
131128   required_device<cpu_device> m_maincpu;
132129   required_device<beep_device> m_beeper;
133   required_device<bitbanger_device> m_bitbanger;
130   required_device<rs232_port_device> m_rs232;
131   required_device<screen_device> m_screen;
134132   required_ioport m_io_keyboard;
135133};
136134
137135READ8_MEMBER( ie15_state::mem_r ) {
138136   UINT8 ret;
139137
140   ret = m_p_videoram[m_videoptr];
141   if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0 && m_videoptr >= SCREEN_PAGE)
138   ret = m_p_videoram[m_video.ptr1];
139   if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0 && m_video.ptr1 >= SCREEN_PAGE)
142140   {
143      DBG_LOG(2,"memory",("R @ %03x == %02x\n", m_videoptr, ret));
141      DBG_LOG(2,"memory",("R @ %03x == %02x\n", m_video.ptr1, ret));
144142   }
145   m_videoptr++;
146   m_videoptr &= 0xfff;
143   m_video.ptr1++;
144   m_video.ptr1 &= 0xfff;
147145   m_latch = 0;
148146   return ret;
149147}
150148
151149WRITE8_MEMBER( ie15_state::mem_w ) {
152150   if ((m_latch ^= 1) == 0) {
153      if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0 && m_videoptr >= SCREEN_PAGE)
151      if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0 && m_video.ptr1 >= SCREEN_PAGE)
154152      {
155         DBG_LOG(2,"memory",("W @ %03x <- %02x\n", m_videoptr, data));
153         DBG_LOG(2,"memory",("W @ %03x <- %02x\n", m_video.ptr1, data));
156154      }
157      m_p_videoram[m_videoptr++] = data;
158      m_videoptr &= 0xfff;
155      m_p_videoram[m_video.ptr1++] = data;
156      m_video.ptr1 &= 0xfff;
159157   }
160158}
161159
162160WRITE8_MEMBER( ie15_state::mem_addr_inc_w ) {
163161   if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0)
164162   {
165      DBG_LOG(2,"memory",("++ %03x\n", m_videoptr));
163      DBG_LOG(2,"memory",("++ %03x\n", m_video.ptr1));
166164   }
167   m_videoptr++;
168   m_videoptr &= 0xfff;
169   if (m_video)
170      m_videoptr_2 = m_videoptr;
165   m_video.ptr1++;
166   m_video.ptr1 &= 0xfff;
167   if (m_video.enable)
168      m_video.ptr2 = m_video.ptr1;
171169}
172170
173171WRITE8_MEMBER( ie15_state::mem_addr_dec_w ) {
174172   if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0)
175173   {
176      DBG_LOG(2,"memory",("-- %03x\n", m_videoptr));
174      DBG_LOG(2,"memory",("-- %03x\n", m_video.ptr1));
177175   }
178   m_videoptr--;
179   m_videoptr &= 0xfff;
180   if (m_video)
181      m_videoptr_2 = m_videoptr;
176   m_video.ptr1--;
177   m_video.ptr1 &= 0xfff;
178   if (m_video.enable)
179      m_video.ptr2 = m_video.ptr1;
182180}
183181
184182WRITE8_MEMBER( ie15_state::mem_addr_lo_w ) {
185   UINT16 tmp = m_videoptr;
183   UINT16 tmp = m_video.ptr1;
186184
187185   tmp &= 0xff0;
188186   tmp |= ((data >> 4) & 0xf);
189187   if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0)
190188   {
191      DBG_LOG(2,"memory",("lo %03x <- %02x = %03x\n", m_videoptr, data, tmp));
189      DBG_LOG(2,"memory",("lo %03x <- %02x = %03x\n", m_video.ptr1, data, tmp));
192190   }
193   m_videoptr = tmp;
194   if (m_video)
195      m_videoptr_2 = tmp;
191   m_video.ptr1 = tmp;
192   if (m_video.enable)
193      m_video.ptr2 = tmp;
196194}
197195
198196WRITE8_MEMBER( ie15_state::mem_addr_hi_w ) {
199   UINT16 tmp = m_videoptr;
197   UINT16 tmp = m_video.ptr1;
200198
201199   tmp &= 0xf;
202200   tmp |= (data << 4);
203201   if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0)
204202   {
205      DBG_LOG(2,"memory",("hi %03x <- %02x = %03x\n", m_videoptr, data, tmp));
203      DBG_LOG(2,"memory",("hi %03x <- %02x = %03x\n", m_video.ptr1, data, tmp));
206204   }
207   m_videoptr = tmp;
208   if (m_video)
209      m_videoptr_2 = tmp;
205   m_video.ptr1 = tmp;
206   if (m_video.enable)
207      m_video.ptr2 = tmp;
210208}
211209
212210TIMER_CALLBACK_MEMBER(ie15_state::ie15_beepoff)
r29642r29643
215213}
216214
217215WRITE8_MEMBER( ie15_state::beep_w ) {
218   UINT16 length = (m_beep&128)?150:400;
216   UINT16 length = (m_long_beep & IE_TRUE) ? 150 : 400;
219217
220218   if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0)
221219   {
222      DBG_LOG(1,"beep",("(%s)\n", m_beep?"short":"long"));
220      DBG_LOG(1,"beep",("(%s)\n", m_long_beep ? "short" : "long"));
223221   }
224222   machine().scheduler().timer_set(attotime::from_msec(length), timer_expired_delegate(FUNC(ie15_state::ie15_beepoff),this));
225223   machine().device<beep_device>("beeper")->set_state(1);
226224}
227225
226/* keyboard */
227
228228// active high
229229READ8_MEMBER( ie15_state::kb_r ) {
230   DBG_LOG(2,"keyboard",("R %02X '%c'\n", m_kb_data, m_kb_data < 0x20?' ':m_kb_data));
230   DBG_LOG(2,"keyboard",("R %02X '%c'\n", m_kb_data, m_kb_data < 0x20 ? ' ' : m_kb_data));
231231   return m_kb_data;
232232}
233233
234234// active low
235235READ8_MEMBER( ie15_state::kb_ready_r ) {
236   m_kb_flag &= IE_1;
236   m_kb_flag &= IE_TRUE;
237237   if (m_kb_flag != m_kb_flag0) {
238      DBG_LOG(2,"keyboard",("? %c\n", m_kb_flag?'n':'y'));
238      DBG_LOG(2,"keyboard",("? %c\n", m_kb_flag ? 'n' : 'y'));
239239      m_kb_flag0 = m_kb_flag;
240240   }
241241   return m_kb_flag;
r29642r29643
244244// active low
245245WRITE8_MEMBER( ie15_state::kb_ready_w ) {
246246   DBG_LOG(2,"keyboard",("clear ready\n"));
247   m_kb_flag = IE_1 | IE_KB_ACK;
247   m_kb_flag = IE_TRUE | IE_KB_ACK;
248248}
249249
250250
251251// active high; active = interpret controls, inactive = display controls
252252READ8_MEMBER( ie15_state::kb_s_red_r ) {
253   return m_io_keyboard->read() & 0x01 ? IE_1 : 0;
253   return m_io_keyboard->read() & IE_KB_RED ? IE_TRUE : 0;
254254}
255255
256256// active high; active = setup mode
257257READ8_MEMBER( ie15_state::kb_s_sdv_r ) {
258   return m_io_keyboard->read() & 0x02 ? IE_1 : 0;
258   return m_kb_control & IE_KB_SDV ? IE_TRUE : 0;
259259}
260260
261// active high, XXX stub
261// active high; active = keypress detected on aux keypad
262262READ8_MEMBER( ie15_state::kb_s_dk_r ) {
263   return 0;
263   return m_kb_control & IE_KB_DK ? IE_TRUE : 0;
264264}
265265
266266// active low; active = full duplex, inactive = half duplex
267267READ8_MEMBER( ie15_state::kb_s_dupl_r ) {
268   return m_io_keyboard->read() & 0x08 ? IE_1 : 0;
268   return m_io_keyboard->read() & IE_KB_DUP ? IE_TRUE : 0;
269269}
270270
271271// active high; active = on-line, inactive = local editing
272272READ8_MEMBER( ie15_state::kb_s_lin_r ) {
273   return m_io_keyboard->read() & 0x10 ? IE_1 : 0;
273   return m_io_keyboard->read() & IE_KB_LIN ? IE_TRUE : 0;
274274}
275275
276// active low
277READ8_MEMBER( ie15_state::serial_rx_ready_r ) {
278   if (LOOPBACK)
279      return m_serial_tx_data ? 0 : IE_1;
280   else
281      return m_serial_rx_data ? 0 : IE_1;
282}
276/* serial port */
283277
284// not called unless data is ready
285READ8_MEMBER( ie15_state::serial_r ) {
286   UINT8 tmp;
287
288   if (LOOPBACK) {
289      tmp = m_serial_tx_data;
290      m_serial_tx_data = 0;
291   } else {
292      tmp = m_serial_rx_data;
293      m_serial_rx_data = 0;
294   }
295   DBG_LOG(2,"serial",("R %02X '%c'\n", tmp, tmp < 0x20?' ':tmp));
296   return tmp;
278void ie15_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
279{
280   device_serial_interface::device_timer(timer, id, param, ptr);
297281}
298282
299/*
300    m_serial_rx_buffer  incoming bits.
301    m_serial_rx_bits    number of bits in _buffer.
302    m_serial_rx_data    complete byte, ready to be read by host, or 0 if no data.
303*/
304
305283WRITE_LINE_MEMBER( ie15_state::serial_rx_callback )
306284{
307   UINT8 tmp = m_serial_rx_bits;
285   device_serial_interface::rx_w(state);
286}
308287
309   switch (m_serial_rx_bits) {
310      // wait for start bit (0)
311      case 10:
312         m_serial_rx_bits = 0;
313      case 0:
314         if (!state) {
315            m_serial_rx_bits++;
316            m_serial_rx_buffer = 0;
317         }
318         break;
319      // stuff incoming bits into byte buffer
320      case 1: case 2: case 3: case 4:
321      case 5: case 6: case 7: case 8:
322         m_serial_rx_buffer |= state << (m_serial_rx_bits-1);
323         m_serial_rx_bits++;
324         break;
325      // expecting stop bit (1)
326      case 9:
327         if (state && !m_serial_rx_data) {
328            m_serial_rx_data = m_serial_rx_buffer;
329            m_serial_rx_bits++;
330         } else
331            m_serial_rx_bits = 0;
332         break;
333      default:
334         // overflow
335         break;
336   }
337   DBG_LOG(2,"serial",("r %d bits %02d->%02d buffer %02X data %02X\n",
338      state, tmp, m_serial_rx_bits, m_serial_rx_buffer, m_serial_rx_data));
288void ie15_state::rcv_complete()
289{
290   receive_register_extract();
291   m_serial_rx_ready = IE_FALSE;
339292}
340293
341const bitbanger_config ie15_state::ie15_bitbanger_config =
294void ie15_state::tra_callback()
342295{
343   DEVCB_DRIVER_LINE_MEMBER(ie15_state, serial_rx_callback),   /* callback */
344   BITBANGER_PRINTER,                                          /* default mode */
345   BITBANGER_9600,                                             /* default output baud */
346   BITBANGER_0PERCENT                                          /* default fine tune adjustment */
347};
296   UINT8 bit = transmit_register_get_data_bit();
297   m_rs232->write_txd(bit);
298}
348299
300void ie15_state::tra_complete()
301{
302   m_serial_tx_ready = IE_TRUE;
303}
304
305// active low
306READ8_MEMBER( ie15_state::serial_rx_ready_r ) {
307   return m_serial_rx_ready;
308}
309
349310// active high
350311READ8_MEMBER( ie15_state::serial_tx_ready_r ) {
351   return m_serial_tx_data ? 0 : IE_1;
312   return m_serial_tx_ready;
352313}
353314
315// not called unless data are ready
316READ8_MEMBER( ie15_state::serial_r ) {
317   UINT8 data;
318
319   data = get_received_char();
320   m_serial_rx_ready = IE_TRUE;
321   DBG_LOG(1,"serial",("R %02X '%c'\n", data, data < 0x20?' ':data));
322   return data;
323}
324
354325WRITE8_MEMBER( ie15_state::serial_w ) {
355   DBG_LOG(2,"serial",("W %02X '%c'\n", data, data < 0x20?' ':data));
356   if (LOOPBACK) {
357      if (!m_serial_tx_data)
358         m_serial_tx_data = data;
359   } else {
360      /* 1 start bit */
361      m_bitbanger->output(0);
362      /* 8 data bits, 1 stop bit, no parity */
363      m_serial_tx_bits = 8;
364      m_serial_tx_data = data;
365      m_serial_tx_timer->adjust(attotime::from_hz(9600));
366   }
326   DBG_LOG(1,"serial",("W %02X '%c'\n", data, data < 0x20?' ':data));
327
328   m_serial_tx_ready = IE_FALSE;
329   transmit_register_setup(data);
367330}
368331
369TIMER_CALLBACK_MEMBER(ie15_state::serial_tx_callback) {
370   if (!m_serial_tx_bits) {
371      m_bitbanger->output(1);
372      m_serial_tx_data = 0;
373   } else {
374      m_bitbanger->output(BIT(m_serial_tx_data, 8-(m_serial_tx_bits--)));
375      m_serial_tx_timer->adjust(attotime::from_hz(9600));
376   }
332WRITE8_MEMBER( ie15_state::serial_speed_w ) {
333   return;
377334}
378335
379336READ8_MEMBER( ie15_state::flag_r ) {
r29642r29643
382339   switch (offset)
383340   {
384341      case 0: // hsync pulse (not hblank)
385         ret = machine().first_screen()->hpos() < IE15_HORZ_START;
342         ret = m_screen->hpos() < IE15_HORZ_START;
386343         break;
387344      case 1: // marker scanline
388         ret = (machine().first_screen()->vpos() % 11) > 7;
345         ret = (m_screen->vpos() % 11) > 7;
389346         break;
390347      case 2: // vblank
391         ret = !machine().first_screen()->vblank();
348         ret = !m_screen->vblank();
392349         break;
393350      case 4:
394         ret = m_ruslat;
351         ret = m_kb_ruslat;
395352         break;
396353      default:
397354         break;
r29642r29643
407364   switch (offset)
408365   {
409366      case 0:
410         m_video = data;
367         m_video.enable = data;
411368         break;
412369      case 1:
413         m_cursor = data;
370         m_video.cursor = data;
414371         break;
415372      case 2:
416         m_beep = data;
373         m_long_beep = data;
417374         break;
418375      case 3:
419         m_statusline = data;
376         m_video.line25 = data;
420377         break;
421378      case 4:
422         m_ruslat = data;
379         m_kb_ruslat = data;
423380         break;
424381      default:
425382         break;
426383   }
427   if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0)
384   if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0 && !offset)
428385   {
429386      DBG_LOG(2,"flag",("%sset %d\n", data?"":"re", offset));
430387   }
r29642r29643
449406   AM_RANGE(011, 011) AM_READ(kb_r)            // 09h R: keyboard data [6.1.5.2]
450407   AM_RANGE(012, 012) AM_READ(kb_s_red_r)          // 0Ah I: keyboard mode "RED" [6.1.5.2]
451408   AM_RANGE(013, 013) AM_READ(kb_ready_r)          // 0Bh R: keyboard data ready [6.1.5.2]
452   AM_RANGE(014, 014) AM_READ(kb_s_sdv_r) AM_WRITENOP // 0Ch W: serial port speed [6.1.3.1], R: keyboard mode "SDV" [6.1.5.2]
409   AM_RANGE(014, 014) AM_READ(kb_s_sdv_r) AM_WRITE(serial_speed_w) // 0Ch W: serial port speed [6.1.3.1], R: keyboard mode "SDV" [6.1.5.2]
453410   AM_RANGE(015, 015) AM_READ(kb_s_dk_r) AM_WRITE(kb_ready_w)  // 0Dh I: keyboard mode "DK" [6.1.5.2]
454411   AM_RANGE(016, 016) AM_READ(kb_s_dupl_r)         // 0Eh I: keyboard mode "DUPL" [6.1.5.2]
455412   AM_RANGE(017, 017) AM_READ(kb_s_lin_r)          // 0Fh I: keyboard mode "LIN" [6.1.5.2]
r29642r29643
460417/* Input ports */
461418static INPUT_PORTS_START( ie15 )
462419   PORT_START("keyboard")
463   PORT_DIPNAME(0x01, 0x00, "RED mode")
464   PORT_DIPSETTING(0x00, "Off" )
465   PORT_DIPSETTING(0x01, "On" )
466   PORT_DIPNAME(0x02, 0x00, "SDV mode (Setup)")
467   PORT_DIPSETTING(0x00, "Off" )
468   PORT_DIPSETTING(0x02, "On" )
469   PORT_DIPNAME(0x08, 0x00, "DUPL mode")
470   PORT_DIPSETTING(0x00, "Off" )
471   PORT_DIPSETTING(0x08, "On" )
472   PORT_DIPNAME(0x10, 0x00, "LIN mode")
473   PORT_DIPSETTING(0x00, "Off" )
474   PORT_DIPSETTING(0x10, "On" )
475   PORT_DIPNAME(0x20, 0x00, "digital loopback")
476   PORT_DIPSETTING(0x00, "Off" )
477   PORT_DIPSETTING(0x20, "On" )
420   PORT_DIPNAME(IE_KB_RED, IE_KB_RED, "RED (Interpret controls)")
421   PORT_DIPSETTING(0x00, "Off")
422   PORT_DIPSETTING(IE_KB_RED, "On")
423   PORT_DIPNAME(IE_KB_DUP, IE_KB_DUP, "DUP (Full duplex)")
424   PORT_DIPSETTING(0x00, "Off")
425   PORT_DIPSETTING(IE_KB_DUP, "On")
426   PORT_DIPNAME(IE_KB_LIN, IE_KB_LIN, "LIN (Online)")
427   PORT_DIPSETTING(0x00, "Off")
428   PORT_DIPSETTING(IE_KB_LIN, "On")
478429INPUT_PORTS_END
479430
480WRITE8_MEMBER( ie15_state::kbd_put )
431WRITE16_MEMBER( ie15_state::kbd_put )
481432{
482   DBG_LOG(2,"keyboard",("W %02X<-%02X '%c' %c\n", m_kb_data, data, data < 0x20?' ':data, m_kb_flag?'n':'y'));
483   if (m_kb_flag == IE_1) {
484      m_kb_data = data;
433   DBG_LOG(2,"keyboard",("W %02X<-%02X '%c' %02X (%c)\n", m_kb_data, data, 'x' /* data < 0x20 ? ' ' : (data & 255) */,
434      m_kb_flag, m_kb_flag ? 'n' : 'y'));
435   m_kb_control = (data >> 8) & 255;
436   // send new key only when firmware has processed previous one
437   if (m_kb_flag == IE_TRUE) {
438      m_kb_data = data & 255;
485439      m_kb_flag = 0;
486440   }
487441}
488442
489443void ie15_state::machine_reset()
490444{
491   m_ruslat = m_beep = m_statusline = m_cursor = m_video = m_kb_data = m_kb_flag0 = 0;
492   m_serial_tx_data = m_serial_tx_bits = m_serial_rx_buffer = m_serial_rx_data = m_serial_rx_bits = 0;
493   m_kb_flag = IE_1;
445   memset(&m_video, 0, sizeof(m_video));
446   m_kb_ruslat = m_long_beep = m_kb_control = m_kb_data = m_kb_flag0 = 0;
447   m_kb_flag = IE_TRUE;
494448
495449   machine().device<beep_device>("beeper")->set_frequency(2400);
496450   machine().device<beep_device>("beeper")->set_state(0);
497451
498   m_serial_tx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ie15_state::serial_tx_callback),this));
452   m_serial_tx_ready = m_serial_rx_ready = IE_TRUE;
453   set_data_frame(1 /* start bits */, 8 /* data bits */, PARITY_NONE, STOP_BITS_1);
454   // device supports rates from 150 to 9600 baud but null_modem has hardcoded 9600
455   set_tra_rate(9600);
456   set_rcv_rate(9600);
499457}
500458
501459void ie15_state::video_start()
502460{
503   m_p_chargen = machine().root_device().memregion("chargen")->base();
461   m_p_chargen = memregion("chargen")->base();
504462   m_p_videoram = memregion("video")->base();
505   m_videoptr = m_videoptr_2 = m_latch = 0;
463   m_video.ptr1 = m_video.ptr2 = m_latch = 0;
506464
465   m_tmpclip = rectangle(0, IE15_DISP_HORZ-1, 0, IE15_DISP_VERT-1);
507466   m_tmpbmp.allocate(IE15_DISP_HORZ, IE15_DISP_VERT);
467   m_offbmp.allocate(IE15_DISP_HORZ, 1);
468   if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0) {
469      m_offbmp.fill(0);
470   }
508471}
509472
510UINT32 ie15_state::draw_scanline(UINT16 *p, UINT16 offset, UINT8 scanline, UINT8 y)
473/*
474    Usable raster is 800 x 275 pixels (80 x 25 characters).  24 lines are
475    available to the user and 25th (topmost) line is the status line.
476    Status line, if enabled, displays current serial port speed, 16 setup
477    bits, and clock.  There is no NVRAM, so setup bits are always 0 after
478    reset and clock starts counting at 0 XXX.
479
480    No character attributes are available, but in 'display controls' mode
481    control characters stored in memory are shown as blinking chars.
482
483    Character cell is 10 x 11; character generator provides 7 x 8 of that.
484    3 extra horizontal pixels are always blank.  Blinking cursor may be
485    displayed on 3 extra scan lines.
486
487    On each scan line, video board draws 80 characters from any location
488    in video memory; this is used by firmware to provide instant scroll
489    and cursor, which is a character with code 0x7F stored in XXX.
490
491    Video board output is controlled by
492    - control flag 0 "disable video": 0 == disable
493    - control flag 1 "cursor": 0 == if this scan line is one of extra 3,
494      enable video every 5 frames.
495    - control flag 3 "status line": 0 == current scan line is part of status line
496    - keyboard mode 'RED' ('display controls'): if character code is
497      less than 0x20 and RED is set, enable video every 5 frames; if RED is
498      unset, disable video.
499
500    XXX 'dotted look' is caused by strobe at 2x pixel clock -- use HLSL for this.
501*/
502
503UINT32 ie15_state::draw_scanline(UINT16 *p, UINT16 offset, UINT8 scanline)
511504{
512   UINT8 gfx,fg,bg,ra,blink,red;
513   UINT16 x,chr;
505   UINT8 gfx, fg, bg, ra, blink, red;
506   UINT16 x, chr;
514507
515508   bg = 0; fg = 1; ra = scanline % 8;
516   blink = (machine().first_screen()->frame_number() % 10) >= 5;
517   red = m_io_keyboard->read() & 0x01;
509   blink = (m_screen->frame_number() % 10) > 4;
510   red = m_io_keyboard->read() & IE_KB_RED;
518511
519   DBG_LOG(2,"draw_scanline",
520      ("addr %03x row %d-%d video %d\n", offset, y, scanline, m_video));
521
522512   for (x = offset; x < offset + 80; x++)
523513   {
524      if (m_video) {
525         chr = m_p_videoram[x] << 3;
526         gfx = m_p_chargen[chr | ra];
514      chr = m_p_videoram[x] << 3;
515      gfx = m_p_chargen[chr | ra];
527516
528         /*
529             Cursor is a character with only 3 scan lines, and is
530             not shown if flag 1 is not active on this scan line.
531             It always blinks if shown.
532
533             Control characters blink if RED mode is on and they
534             are not on status line; else they are blanked out.
535         */
536
537         if (scanline > 7 && (!m_cursor || blink))
517      if (scanline > 7 && (!m_video.cursor || blink))
518         gfx = 0;
519      else if (chr < (0x20<<3)) {
520         if (red && blink && m_video.line25)
521            gfx = m_p_chargen[chr | 0x200 | ra];
522         else
538523            gfx = 0;
539         if (chr < (0x20<<3)) {
540            if (!y || !red || blink)
541               gfx = 0;
542            else
543               gfx = m_p_chargen[chr | 0x200 | ra];
544         }
545         /* Display a scanline of a character */
546         *p++ = BIT(gfx, 7) ? fg : bg;
547         *p++ = BIT(gfx, 6) ? fg : bg;
548         *p++ = BIT(gfx, 5) ? fg : bg;
549         *p++ = BIT(gfx, 4) ? fg : bg;
550         *p++ = BIT(gfx, 3) ? fg : bg;
551         *p++ = BIT(gfx, 2) ? fg : bg;
552         *p++ = BIT(gfx, 1) ? fg : bg;
553         *p++ = bg;
554         *p++ = bg;
555         *p++ = bg;
556      } else {
557         *p++ = bg;
558         *p++ = bg;
559         *p++ = bg;
560         *p++ = bg;
561         *p++ = bg;
562         *p++ = bg;
563         *p++ = bg;
564         *p++ = bg;
565         *p++ = bg;
566         *p++ = bg;
567524      }
525
526      *p++ = BIT(gfx, 7) ? fg : bg;
527      *p++ = BIT(gfx, 6) ? fg : bg;
528      *p++ = BIT(gfx, 5) ? fg : bg;
529      *p++ = BIT(gfx, 4) ? fg : bg;
530      *p++ = BIT(gfx, 3) ? fg : bg;
531      *p++ = BIT(gfx, 2) ? fg : bg;
532      *p++ = BIT(gfx, 1) ? fg : bg;
533      *p++ = bg;
534      *p++ = bg;
535      *p++ = bg;
568536   }
569537   return 0;
570538}
571539
540void ie15_state::update_leds()
541{
542   UINT8 data = m_io_keyboard->read();
543   output_set_value("lat_led", m_kb_ruslat ^ 1);
544   output_set_value("nr_led", BIT(m_kb_control, IE_KB_NR_BIT) ^ 1);
545   output_set_value("pch_led", BIT(data, IE_KB_PCH_BIT) ^ 1);
546   output_set_value("dup_led", BIT(data, IE_KB_DUP_BIT) ^ 1);
547   output_set_value("lin_led", BIT(data, IE_KB_LIN_BIT) ^ 1);
548   output_set_value("red_led", BIT(data, IE_KB_RED_BIT) ^ 1);
549   output_set_value("sdv_led", BIT(m_kb_control, IE_KB_SDV_BIT) ^ 1);
550   output_set_value("prd_led", 1); // XXX
551}
552
553/*
554    VBlank is active for 3 topmost on-screen rows and 1 at the bottom; however, control flag 3 overrides VBlank,
555    allowing status line to be switched on and off.
556*/
572557TIMER_DEVICE_CALLBACK_MEMBER(ie15_state::scanline_callback)
573558{
574   UINT16 y = machine().first_screen()->vpos();
575//  DBG_LOG(2,"scanline",
576//      ("addr %03x frame %lld x %04d y %03d\n", m_videoptr_2, machine().first_screen()->frame_number(), machine().first_screen()->hpos(), y));
577   if (y>=IE15_VERT_START) {
578      y -= IE15_VERT_START;
579      if (y < IE15_DISP_VERT) {
580         draw_scanline(&m_tmpbmp.pix16(y), m_videoptr_2, y%11, y/11);
581      }
559   UINT16 y = m_screen->vpos();
560
561   DBG_LOG(3,"scanline_cb",
562      ("addr %03x frame %" I64FMT "d x %.4d y %.3d row %.2d e:c:s %d:%d:%d\n",
563      m_video.ptr2, m_screen->frame_number(), m_screen->hpos(), y,
564      y%11, m_video.enable, m_video.cursor, m_video.line25));
565
566   if (y < IE15_VERT_START) return;
567   y -= IE15_VERT_START;
568   if (y >= IE15_DISP_VERT) return;
569
570   if (!m_video.enable || (y < IE15_STATUSLINE && m_video.line25)) {
571      copybitmap( m_tmpbmp, m_offbmp, 0, 0, 0, y, m_tmpclip );
572   } else {
573      draw_scanline( &m_tmpbmp.pix16(y), m_video.ptr2, y%11 );
582574   }
583575}
584576
585577UINT32 ie15_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
586578{
587   copybitmap( bitmap, m_tmpbmp, 0, 0, IE15_HORZ_START, IE15_VERT_START, cliprect );
579   update_leds();
580   copybitmap(bitmap, m_tmpbmp, 0, 0, IE15_HORZ_START, IE15_VERT_START, cliprect);
588581   return 0;
589582}
590583
r29642r29643
604597};
605598
606599static GFXDECODE_START( ie15 )
607   GFXDECODE_ENTRY( "chargen", 0x0000, ie15_charlayout, 0, 1 )
600   GFXDECODE_ENTRY("chargen", 0x0000, ie15_charlayout, 0, 1)
608601GFXDECODE_END
609602
610PALETTE_INIT_MEMBER(ie15_state, ie15)
611{
612   palette.set_pen_color(0, rgb_t::black); // black
613   palette.set_pen_color(1, 0x00, 0xc0, 0x00); // green
614}
615
616603static MACHINE_CONFIG_START( ie15, ie15_state )
617604   /* Basic machine hardware */
618605   MCFG_CPU_ADD("maincpu", IE15, XTAL_30_8MHz / 10)
r29642r29643
630617   MCFG_SCREEN_PALETTE("palette")
631618
632619   MCFG_GFXDECODE_ADD("gfxdecode", "palette", ie15)
633   MCFG_PALETTE_ADD("palette", 2)
634   MCFG_PALETTE_INIT_OWNER(ie15_state, ie15)
620   MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
635621
622   MCFG_DEFAULT_LAYOUT( layout_ie15 )
623
636624   /* Devices */
637   MCFG_DEVICE_ADD(KEYBOARD_TAG, GENERIC_KEYBOARD, 0)
638   MCFG_GENERIC_KEYBOARD_CB(WRITE8(ie15_state, kbd_put))
639   MCFG_BITBANGER_ADD(BITBANGER_TAG, ie15_state::ie15_bitbanger_config)
625   MCFG_DEVICE_ADD("keyboard", IE15_KEYBOARD, 0)
626   MCFG_IE15_KEYBOARD_CB(WRITE16(ie15_state, kbd_put))
640627
628   MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, NULL)
629   MCFG_RS232_RXD_HANDLER(WRITELINE(ie15_state, serial_rx_callback))
630   MCFG_DEVICE_MODIFY("rs232")
631   MCFG_SLOT_DEFAULT_OPTION("null_modem")
632
641633   MCFG_SPEAKER_STANDARD_MONO("mono")
642634   MCFG_SOUND_ADD("beeper", BEEP, 0)
643635   MCFG_SOUND_ROUTE(ALL_OUTPUTS,"mono",0.15)
branches/old_menus/src/mess/drivers/avigo.c
r29642r29643
6969 ******************************************************************************/
7070
7171
72#include "bus/rs232/null_modem.h"
7372#include "includes/avigo.h"
7473#include "avigo.lh"
7574
r29642r29643
865864   memset(base, 0x00, size);
866865}
867866
868static SLOT_INTERFACE_START( avigo_com )
869   SLOT_INTERFACE("null_modem", NULL_MODEM)
870SLOT_INTERFACE_END
871
872867static MACHINE_CONFIG_START( avigo, avigo_state )
873868   /* basic machine hardware */
874869   MCFG_CPU_ADD("maincpu", Z80, 4000000)
r29642r29643
878873
879874   MCFG_NS16550_ADD( "ns16550", avigo_com_interface, XTAL_1_8432MHz )
880875
881   MCFG_RS232_PORT_ADD( "serport", avigo_com, NULL )
876   MCFG_RS232_PORT_ADD( "serport", default_rs232_devices, NULL )
882877   MCFG_RS232_RXD_HANDLER(DEVWRITELINE("ns16550", ins8250_uart_device, rx_w))
883878   MCFG_RS232_DCD_HANDLER(DEVWRITELINE("ns16550", ins8250_uart_device, dcd_w))
884879   MCFG_RS232_DSR_HANDLER(DEVWRITELINE("ns16550", ins8250_uart_device, dsr_w))
branches/old_menus/src/mess/drivers/cbm2.c
r29642r29643
13791379   m_vicdotsel = state;
13801380}
13811381
1382static const tpi6525_interface tpi1_intf =
1383{
1384   DEVCB_DRIVER_LINE_MEMBER(cbm2_state, tpi1_irq_w),
1385   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pa_r),
1386   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pa_w),
1387   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pb_r),
1388   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pb_w),
1389   DEVCB_NULL,
1390   DEVCB_NULL,
1391   DEVCB_DRIVER_LINE_MEMBER(cbm2_state, tpi1_ca_w),
1392   DEVCB_NULL
1393};
1394
1395static const tpi6525_interface p500_tpi1_intf =
1396{
1397   DEVCB_DRIVER_LINE_MEMBER(p500_state, tpi1_irq_w),
1398   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pa_r),
1399   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pa_w),
1400   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pb_r),
1401   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pb_w),
1402   DEVCB_NULL,
1403   DEVCB_NULL,
1404   DEVCB_DRIVER_LINE_MEMBER(p500_state, tpi1_ca_w),
1405   DEVCB_DRIVER_LINE_MEMBER(p500_state, tpi1_cb_w)
1406};
1407
1408
14091382//-------------------------------------------------
14101383//  tpi6525_interface tpi2_intf
14111384//-------------------------------------------------
r29642r29643
15241497   m_vicbnksel = data >> 6;
15251498}
15261499
1527static const tpi6525_interface tpi2_intf =
1528{
1529   DEVCB_NULL,
1530   DEVCB_NULL,
1531   DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pa_w),
1532   DEVCB_NULL,
1533   DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pb_w),
1534   DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pc_r),
1535   DEVCB_NULL,
1536   DEVCB_NULL,
1537   DEVCB_NULL
1538};
1539
1540static const tpi6525_interface hp_tpi2_intf =
1541{
1542   DEVCB_NULL,
1543   DEVCB_NULL,
1544   DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pa_w),
1545   DEVCB_NULL,
1546   DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pb_w),
1547   DEVCB_DRIVER_MEMBER(cbm2hp_state, tpi2_pc_r),
1548   DEVCB_NULL,
1549   DEVCB_NULL,
1550   DEVCB_NULL
1551};
1552
1553static const tpi6525_interface p500_tpi2_intf =
1554{
1555   DEVCB_NULL,
1556   DEVCB_NULL,
1557   DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pa_w),
1558   DEVCB_NULL,
1559   DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pb_w),
1560   DEVCB_DRIVER_MEMBER(p500_state, tpi2_pc_r),
1561   DEVCB_DRIVER_MEMBER(p500_state, tpi2_pc_w),
1562   DEVCB_NULL,
1563   DEVCB_NULL
1564};
1565
1566
15671500//-------------------------------------------------
15681501//  MOS6526_INTERFACE( cia_intf )
15691502//-------------------------------------------------
r29642r29643
17731706   }
17741707}
17751708
1776static const tpi6525_interface ext_tpi_intf =
1777{
1778   DEVCB_NULL,
1779   DEVCB_DEVICE_MEMBER(EXT_MOS6526_TAG, mos6526_device, pa_r),
1780   DEVCB_NULL,
1781   DEVCB_DRIVER_MEMBER(cbm2_state, ext_tpi_pb_r),
1782   DEVCB_DRIVER_MEMBER(cbm2_state, ext_tpi_pb_w),
1783   DEVCB_NULL,
1784   DEVCB_DRIVER_MEMBER(cbm2_state, ext_tpi_pc_w),
1785   DEVCB_NULL,
1786   DEVCB_NULL
1787};
1788
1789
17901709//-------------------------------------------------
17911710//  MOS6526_INTERFACE( ext_cia_intf )
17921711//-------------------------------------------------
r29642r29643
21362055   // devices
21372056   MCFG_PLS100_ADD(PLA1_TAG)
21382057   MCFG_PLS100_ADD(PLA2_TAG)
2139   MCFG_TPI6525_ADD(MOS6525_1_TAG, p500_tpi1_intf)
2140   MCFG_TPI6525_ADD(MOS6525_2_TAG, p500_tpi2_intf)
2058   MCFG_DEVICE_ADD(MOS6525_1_TAG, TPI6525, 0)
2059   MCFG_TPI6525_OUT_IRQ_CB(WRITELINE(p500_state, tpi1_irq_w))
2060   MCFG_TPI6525_IN_PA_CB(READ8(cbm2_state, tpi1_pa_r))
2061   MCFG_TPI6525_OUT_PA_CB(WRITE8(cbm2_state, tpi1_pa_w))
2062   MCFG_TPI6525_IN_PB_CB(READ8(cbm2_state, tpi1_pb_r))
2063   MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, tpi1_pb_w))
2064   MCFG_TPI6525_OUT_CA_CB(WRITELINE(p500_state, tpi1_ca_w))
2065   MCFG_TPI6525_OUT_CB_CB(WRITELINE(p500_state, tpi1_cb_w))
2066   MCFG_DEVICE_ADD(MOS6525_2_TAG, TPI6525, 0)
2067   MCFG_TPI6525_OUT_PA_CB(WRITE8(cbm2_state, tpi2_pa_w))
2068   MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, tpi2_pb_w))
2069   MCFG_TPI6525_IN_PC_CB(READ8(p500_state, tpi2_pc_r))
2070   MCFG_TPI6525_OUT_PC_CB(WRITE8(p500_state, tpi2_pc_w))
21412071   MCFG_DEVICE_ADD(MOS6551A_TAG, MOS6551, VIC6567_CLOCK)
21422072   MCFG_MOS6551_XTAL(XTAL_1_8432MHz)
21432073   MCFG_MOS6551_IRQ_HANDLER(DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i4_w))
r29642r29643
22402170   // devices
22412171   MCFG_PLS100_ADD(PLA1_TAG)
22422172   MCFG_PLS100_ADD(PLA2_TAG)
2243   MCFG_TPI6525_ADD(MOS6525_1_TAG, p500_tpi1_intf)
2244   MCFG_TPI6525_ADD(MOS6525_2_TAG, p500_tpi2_intf)
2173   MCFG_DEVICE_ADD(MOS6525_1_TAG, TPI6525, 0)
2174   MCFG_TPI6525_OUT_IRQ_CB(WRITELINE(p500_state, tpi1_irq_w))
2175   MCFG_TPI6525_IN_PA_CB(READ8(cbm2_state, tpi1_pa_r))
2176   MCFG_TPI6525_OUT_PA_CB(WRITE8(cbm2_state, tpi1_pa_w))
2177   MCFG_TPI6525_IN_PB_CB(READ8(cbm2_state, tpi1_pb_r))
2178   MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, tpi1_pb_w))
2179   MCFG_TPI6525_OUT_CA_CB(WRITELINE(p500_state, tpi1_ca_w))
2180   MCFG_TPI6525_OUT_CB_CB(WRITELINE(p500_state, tpi1_cb_w))
2181   MCFG_DEVICE_ADD(MOS6525_2_TAG, TPI6525, 0)
2182   MCFG_TPI6525_OUT_PA_CB(WRITE8(cbm2_state, tpi2_pa_w))
2183   MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, tpi2_pb_w))
2184   MCFG_TPI6525_IN_PC_CB(READ8(p500_state, tpi2_pc_r))
2185   MCFG_TPI6525_OUT_PC_CB(WRITE8(p500_state, tpi2_pc_w))
22452186   MCFG_DEVICE_ADD(MOS6551A_TAG, MOS6551, 0)
22462187   MCFG_MOS6551_XTAL(XTAL_1_8432MHz)
22472188   MCFG_MOS6551_IRQ_HANDLER(DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i4_w))
r29642r29643
23402281
23412282   // devices
23422283   MCFG_PLS100_ADD(PLA1_TAG)
2343   MCFG_TPI6525_ADD(MOS6525_1_TAG, tpi1_intf)
2344   MCFG_TPI6525_ADD(MOS6525_2_TAG, tpi2_intf)
2284   MCFG_DEVICE_ADD(MOS6525_1_TAG, TPI6525, 0)
2285   MCFG_TPI6525_OUT_IRQ_CB(WRITELINE(cbm2_state, tpi1_irq_w))
2286   MCFG_TPI6525_IN_PA_CB(READ8(cbm2_state, tpi1_pa_r))
2287   MCFG_TPI6525_OUT_PA_CB(WRITE8(cbm2_state, tpi1_pa_w))
2288   MCFG_TPI6525_IN_PA_CB(READ8(cbm2_state, tpi1_pb_r))
2289   MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, tpi1_pb_w))
2290   MCFG_TPI6525_OUT_CA_CB(WRITELINE(cbm2_state, tpi1_ca_w))
2291   MCFG_DEVICE_ADD(MOS6525_2_TAG, TPI6525, 0)
2292   MCFG_TPI6525_OUT_PA_CB(WRITE8(cbm2_state, tpi2_pa_w))
2293   MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, tpi2_pb_w))
2294   MCFG_TPI6525_IN_PC_CB(READ8(cbm2_state, tpi2_pc_r))
23452295   MCFG_DEVICE_ADD(MOS6551A_TAG, MOS6551, 0)
23462296   MCFG_MOS6551_XTAL(XTAL_1_8432MHz)
23472297   MCFG_MOS6551_IRQ_HANDLER(DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i4_w))
r29642r29643
24542404//-------------------------------------------------
24552405
24562406static MACHINE_CONFIG_DERIVED_CLASS( cbm2hp_ntsc, cbm2lp_ntsc, cbm2hp_state )
2457   MCFG_DEVICE_REMOVE(MOS6525_2_TAG)
2458   MCFG_TPI6525_ADD(MOS6525_2_TAG, hp_tpi2_intf)
2407   MCFG_DEVICE_MODIFY(MOS6525_2_TAG)
2408   MCFG_TPI6525_IN_PC_CB(READ8(cbm2hp_state, tpi2_pc_r))
24592409MACHINE_CONFIG_END
24602410
24612411
r29642r29643
24892439   MCFG_CPU_IO_MAP(ext_io)
24902440
24912441   MCFG_PIC8259_ADD(EXT_I8259A_TAG, INPUTLINE(EXT_I8088_TAG, INPUT_LINE_IRQ0), VCC, NULL)
2492   MCFG_TPI6525_ADD(EXT_MOS6525_TAG, ext_tpi_intf)
2442   MCFG_DEVICE_ADD(EXT_MOS6525_TAG, TPI6525, 0)
2443   MCFG_TPI6525_IN_PA_CB(DEVREAD8(EXT_MOS6526_TAG, mos6526_device, pa_r))
2444   MCFG_TPI6525_IN_PB_CB(READ8(cbm2_state, ext_tpi_pb_r))
2445   MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, ext_tpi_pb_w))
2446   MCFG_TPI6525_OUT_PC_CB(WRITE8(cbm2_state, ext_tpi_pc_w))
24932447   MCFG_DEVICE_ADD(EXT_MOS6526_TAG, MOS6526, XTAL_18MHz/9)
24942448   MCFG_MOS6526_TOD(60)
24952449   MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(cbm2_state, ext_cia_irq_w))
r29642r29643
25092463   MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2_pal)
25102464
25112465   // devices
2512   MCFG_DEVICE_REMOVE(MOS6525_2_TAG)
2513   MCFG_TPI6525_ADD(MOS6525_2_TAG, hp_tpi2_intf)
2466   MCFG_DEVICE_MODIFY(MOS6525_2_TAG)
2467   MCFG_TPI6525_IN_PC_CB(READ8(cbm2hp_state, tpi2_pc_r))
25142468
25152469   MCFG_DEVICE_MODIFY(MOS6526_TAG)
25162470   MCFG_MOS6526_TOD(50)
r29642r29643
25472501   MCFG_CPU_IO_MAP(ext_io)
25482502
25492503   MCFG_PIC8259_ADD(EXT_I8259A_TAG, INPUTLINE(EXT_I8088_TAG, INPUT_LINE_IRQ0), VCC, NULL)
2550   MCFG_TPI6525_ADD(EXT_MOS6525_TAG, ext_tpi_intf)
2504   MCFG_DEVICE_ADD(EXT_MOS6525_TAG, TPI6525, 0)
2505   MCFG_TPI6525_IN_PA_CB(DEVREAD8(EXT_MOS6526_TAG, mos6526_device, pa_r))
2506   MCFG_TPI6525_IN_PB_CB(READ8(cbm2_state, ext_tpi_pb_r))
2507   MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, ext_tpi_pb_w))
2508   MCFG_TPI6525_OUT_PC_CB(WRITE8(cbm2_state, ext_tpi_pc_w))
25512509   MCFG_DEVICE_ADD(EXT_MOS6526_TAG, MOS6526, XTAL_18MHz/9)
25522510   MCFG_MOS6526_TOD(50)
25532511   MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(cbm2_state, ext_cia_irq_w))
branches/old_menus/src/mess/drivers/sorcerer.c
r29642r29643
386386
387387/**********************************************************************************************************/
388388
389static const ay31015_config sorcerer_ay31015_config =
390{
391   4800.0,
392   4800.0,
393   DEVCB_NULL,
394   DEVCB_NULL,
395   DEVCB_NULL
396};
397
398
399389static const cassette_interface sorcerer_cassette_interface =
400390{
401391   sorcerer_cassette_formats,
r29642r29643
445435   MCFG_SOUND_WAVE_ADD(WAVE2_TAG, "cassette2")
446436   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) // cass2 speaker
447437
448   MCFG_AY31015_ADD( "uart", sorcerer_ay31015_config )
449
438   MCFG_DEVICE_ADD( "uart", AY31015, 0 )
439   MCFG_AY31015_TX_CLOCK(4800.0)
440   MCFG_AY31015_RX_CLOCK(4800.0)
441   
450442   /* printer */
451443   MCFG_CENTRONICS_ADD("centronics", centronics_printers, "covox")
452444   MCFG_SLOT_OPTION_ADD( "covox", CENTRONICS_COVOX )
branches/old_menus/src/mess/drivers/hunter2.c
r29642r29643
3131#include "sound/speaker.h"
3232#include "machine/nsc810.h"
3333#include "bus/rs232/rs232.h"
34#include "bus/rs232/null_modem.h"
3534#include "machine/nvram.h"
3635#include "machine/bankdev.h"
3736
r29642r29643
371370      m_maincpu->set_input_line(NSC800_RSTB, ASSERT_LINE);
372371}
373372
374SLOT_INTERFACE_START( hunter2_rs232_devices )
375   SLOT_INTERFACE("null_modem", NULL_MODEM)
376SLOT_INTERFACE_END
377
378373static MACHINE_CONFIG_START( hunter2, hunter2_state )
379374   /* basic machine hardware */
380375   MCFG_CPU_ADD("maincpu", NSC800, 4000000)
r29642r29643
415410   MCFG_NSC810_TIMER0_OUT(WRITELINE(hunter2_state,timer0_out))
416411   MCFG_NSC810_TIMER1_OUT(WRITELINE(hunter2_state,timer1_out))
417412
418   MCFG_RS232_PORT_ADD("serial",hunter2_rs232_devices,NULL)
413   MCFG_RS232_PORT_ADD("serial",default_rs232_devices,NULL)
419414   MCFG_RS232_CTS_HANDLER(WRITELINE(hunter2_state,cts_w))
420415   MCFG_RS232_RXD_HANDLER(WRITELINE(hunter2_state,rxd_w))
421416
branches/old_menus/src/mess/drivers/ptcsol.c
r29642r29643
547547   PORT_CONFSETTING(    0x02, "6575")
548548INPUT_PORTS_END
549549
550static const ay31015_config sol20_ay31015_config =
551{
552   4800.0,
553   4800.0,
554   DEVCB_NULL,
555   DEVCB_NULL,
556   DEVCB_NULL
557};
558550
559
560551static const cassette_interface sol20_cassette_interface =
561552{
562553   sol20_cassette_formats,//cassette_default_formats,
r29642r29643
767758   // devices
768759   MCFG_CASSETTE_ADD( "cassette", sol20_cassette_interface )
769760   MCFG_CASSETTE_ADD( "cassette2", sol20_cassette_interface )
770   MCFG_AY31015_ADD( "uart", sol20_ay31015_config )
771   MCFG_AY31015_ADD( "uart_s", sol20_ay31015_config )
761   MCFG_DEVICE_ADD( "uart", AY31015, 0 )
762   MCFG_AY31015_TX_CLOCK(4800.0)
763   MCFG_AY31015_RX_CLOCK(4800.0)
764   MCFG_DEVICE_ADD( "uart_s", AY31015, 0 )
765   MCFG_AY31015_TX_CLOCK(4800.0)
766   MCFG_AY31015_RX_CLOCK(4800.0)
772767   MCFG_DEVICE_ADD(KEYBOARD_TAG, GENERIC_KEYBOARD, 0)
773768   MCFG_GENERIC_KEYBOARD_CB(WRITE8(sol20_state, kbd_put))
774769MACHINE_CONFIG_END
branches/old_menus/src/mess/drivers/hp9k.c
r29642r29643
336336   1,                  /* 1 bits per pixel */
337337   { 0 },                  /* no bitplanes */
338338   /* x offsets */
339   { 0, 1, 2, 3, 4, 5, 6, 7 },
339   { STEP8(0,1) },
340340   /* y offsets */
341   { 1*8, 0*8, 3*8, 2*8, 5*8, 4*8, 7*8, 6*8, 9*8, 8*8, 11*8, 10*8, 13*8, 12*8, 15*8, 14*8 },
341   { STEP16(0,8) },
342342   8*16                    /* every char takes 16 bytes */
343343};
344344
branches/old_menus/src/mess/drivers/nascom1.c
r29642r29643
258258 *
259259 *************************************/
260260
261static const ay31015_config nascom1_ay31015_config =
262{
263   ( XTAL_16MHz / 16 ) / 256,
264   ( XTAL_16MHz / 16 ) / 256,
265   DEVCB_DRIVER_MEMBER(nascom1_state, nascom1_hd6402_si),
266   DEVCB_DRIVER_MEMBER(nascom1_state, nascom1_hd6402_so),
267   DEVCB_NULL
268};
269
270
271261static Z80PIO_INTERFACE( nascom1_z80pio_intf )
272262{
273263   DEVCB_NULL,
r29642r29643
299289   MCFG_GFXDECODE_ADD("gfxdecode", "palette", nascom1)
300290   MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
301291
302   MCFG_AY31015_ADD( "hd6402", nascom1_ay31015_config )
292   MCFG_DEVICE_ADD( "hd6402", AY31015, 0 )
293   MCFG_AY31015_TX_CLOCK(( XTAL_16MHz / 16 ) / 256)
294   MCFG_AY31015_RX_CLOCK(( XTAL_16MHz / 16 ) / 256)
295   MCFG_AY51013_READ_SI_CB(READ8(nascom1_state, nascom1_hd6402_si))
296   MCFG_AY51013_WRITE_SO_CB(WRITE8(nascom1_state, nascom1_hd6402_so))
297   
303298
304299   MCFG_Z80PIO_ADD( "z80pio", XTAL_16MHz/8, nascom1_z80pio_intf )
305300
branches/old_menus/src/mess/mess.mak
r29642r29643
20632063   $(MESS_DRIVERS)/hunter2.o   \
20642064   $(EMU_MACHINE)/nsc810.o     \
20652065   $(MESS_DRIVERS)/ibm6580.o   \
2066   $(MESS_DRIVERS)/ie15.o     \
2066   $(MESS_DRIVERS)/ie15.o $(MESS_MACHINE)/ie15_kbd.o \
20672067   $(MESS_DRIVERS)/if800.o     \
20682068   $(MESS_DRIVERS)/imsai.o     \
20692069   $(MESS_DRIVERS)/indiana.o   \
r29642r29643
22322232                     $(MESS_LAYOUT)/vsc.lh
22332233$(MESS_DRIVERS)/glasgow.o:  $(MESS_LAYOUT)/glasgow.lh
22342234$(MESS_DRIVERS)/h8.o:       $(MESS_LAYOUT)/h8.lh
2235$(MESS_DRIVERS)/ie15.o:     $(MESS_LAYOUT)/ie15.lh
22352236$(MESS_DRIVERS)/instruct.o: $(MESS_LAYOUT)/instruct.lh
22362237$(MESS_DRIVERS)/k1003.o:    $(MESS_LAYOUT)/k1003.lh
22372238$(MESS_DRIVERS)/kim1.o:     $(MESS_LAYOUT)/kim1.lh
branches/old_menus/src/mess/machine/ie15_kbd.c
r0r29643
1/***************************************************************************
2
3    15WWW-97-006 keyboard, normally used with 15IE-00-013.
4    Irisha can use it too.
5
6***************************************************************************/
7
8#include "machine/ie15_kbd.h"
9
10/***************************************************************************
11    IMPLEMENTATION
12***************************************************************************/
13
14
15ie15_keyboard_device::ie15_keyboard_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
16   : device_t(mconfig, type, name, tag, owner, clock, shortname, source)
17   , m_io_kbd0(*this, "TERM_LINE0")
18   , m_io_kbd1(*this, "TERM_LINE1")
19   , m_io_kbd2(*this, "TERM_LINE2")
20   , m_io_kbd3(*this, "TERM_LINE3")
21   , m_io_kbdc(*this, "TERM_LINEC")
22   , m_keyboard_cb(*this)
23{
24}
25
26ie15_keyboard_device::ie15_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
27   : device_t(mconfig, IE15_KEYBOARD, "15WWW-97-006 Keyboard", tag, owner, clock, "ie15_keyboard", __FILE__)
28   , m_io_kbd0(*this, "TERM_LINE0")
29   , m_io_kbd1(*this, "TERM_LINE1")
30   , m_io_kbd2(*this, "TERM_LINE2")
31   , m_io_kbd3(*this, "TERM_LINE3")
32   , m_io_kbdc(*this, "TERM_LINEC")
33   , m_keyboard_cb(*this)
34{
35}
36
37UINT8 ie15_keyboard_device::row_number(UINT32 code)
38{
39   if BIT(code,0) return 0;
40   if BIT(code,1) return 1;
41   if BIT(code,2) return 2;
42   if BIT(code,3) return 3;
43   if BIT(code,4) return 4;
44   if BIT(code,5) return 5;
45   if BIT(code,6) return 6;
46   if BIT(code,7) return 7;
47   if BIT(code,8) return 8;
48   if BIT(code,9) return 9;
49   if BIT(code,10) return 10;
50   if BIT(code,11) return 11;
51   if BIT(code,12) return 12;
52   if BIT(code,13) return 13;
53   if BIT(code,14) return 14;
54   if BIT(code,15) return 15;
55   return 0;
56}
57
58UINT16 ie15_keyboard_device::keyboard_handler(UINT16 last_code, UINT8 *scan_line)
59{
60   int i;
61   UINT32 code = 0;
62   UINT16 key_code = 0;
63   UINT16 retVal = 0;
64   UINT8 ctrl  = BIT(m_io_kbdc->read(), 0);
65   UINT8 shift = BIT(m_io_kbdc->read(), 1);
66
67   i = *scan_line;
68   {
69      if (i == 0) code = m_io_kbd0->read();
70      else
71      if (i == 1) code = m_io_kbd1->read();
72      else
73      if (i == 2) code = m_io_kbd2->read();
74      else
75      if (i == 3) code = m_io_kbd3->read();
76
77      if (code != 0)
78      {
79         if (!m_ruslat)
80            i += 4;
81         if (shift)
82            i += 8;
83         i <<= 4;
84         if (code < 0x10000) {
85            key_code = m_rom [i + row_number(code)];
86         } else {
87            key_code = m_rom [i + row_number(code >> 16)*2 + 256];
88         }
89         if (ctrl) {
90            key_code &= 0x1f;
91         }
92         retVal = key_code;
93      } else {
94         *scan_line += 1;
95         if (*scan_line==4) {
96            *scan_line = 0;
97         }
98      }
99   }
100
101   // setup mode toggle
102   if (BIT(m_io_kbdc->read(), 2)) {
103      retVal |= (IE_KB_SDV << 8);
104   }
105   // aux keyboard flag
106   if (code & 0xe0e000) {
107      retVal |= (IE_KB_DK << 8);
108   }
109   // shift
110   if (shift) {
111      retVal |= (IE_KB_NR << 8);
112   }
113   // SI/SO handling
114   if ((key_code & 127) == IE_KB_SI) {
115      m_ruslat = 0;
116   }
117   if ((key_code & 127) == IE_KB_SO) {
118      m_ruslat = 1;
119   }
120
121   return retVal;
122}
123
124void ie15_keyboard_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
125{
126   UINT16 new_code;
127   new_code = keyboard_handler(m_last_code, &m_scan_line);
128   if ((m_last_code != new_code) /* && (new_code) */)
129      send_key(new_code);
130   m_last_code = new_code;
131}
132
133/***************************************************************************
134    VIDEO HARDWARE
135***************************************************************************/
136
137ROM_START( ie15_keyboard )
138   ROM_REGION( 0x200, "ie15kbd", 0 )
139   ROM_LOAD( "15bbb.rt5", 0x000, 0x200, CRC(e6a4226e) SHA1(0ee46f5be1b01fa917a6d483bb51463106ae441f) )
140ROM_END
141
142const rom_entry *ie15_keyboard_device::device_rom_region() const
143{
144   return ROM_NAME( ie15_keyboard );
145}
146
147static MACHINE_CONFIG_FRAGMENT( ie15_keyboard )
148MACHINE_CONFIG_END
149
150machine_config_constructor ie15_keyboard_device::device_mconfig_additions() const
151{
152   return MACHINE_CONFIG_NAME(ie15_keyboard);
153}
154
155void ie15_keyboard_device::device_start()
156{
157   m_keyboard_cb.resolve_safe();
158   m_timer = timer_alloc();
159   m_rom = (UINT8*)memregion("ie15kbd")->base();
160}
161
162void ie15_keyboard_device::device_reset()
163{
164   m_last_code = 0;
165   m_scan_line = 0;
166   m_ruslat = 0;
167   m_timer->adjust(attotime::from_hz(10000), 0, attotime::from_hz(10000));
168}
169
170/*
171Y1  Y2  Y3  Y4  Y5  Y6  Y7  Y8  Y9  Y10 Y11 Y12 Y13 Y14 Y15 Y16 Y17 Y18 Y19 Y20 Y21 Y22 Y23 Y24
172--
173;+  1!  2"  3#  4$  5%  6&  7'  8(  9)  0   -=      7   8   9   ??? ??  ??? ??? ??? f1  f2  f3
174?J  ?C  ?U  ?K  ?E  ?N  ?G  ?[  ?]  ?Z  ?H  :*      4   5   6   ??  ??  ??1 ?1  ??2 f4  f5  f6
175?F  ?Y  ?W  ?A  ?P  ?R  ?O  ?L  ?D  ?V  ?\  .>  ??  1   2   3           ??? ??? ??? f7  f8  f9
176?Q  ?^  ?S  ?M  ?I  ?T  ?X  ?B  ?@  ,<  /?  _   SPC 0       ,                       fA  fB  fC
177
178rom:
179
18000000000  3b 31 32 33 34 35 36 37  38 39 30 2d 00 37 38 39  |;1234567890-.789| rus + upper
18100000010  6a 63 75 6b 65 6e 67 7b  7d 7a 68 3a 00 34 35 36  |jcukeng{}zh:.456|
18200000020  66 79 77 61 70 72 6f 6c  64 76 7c 2e 7f 31 32 33  |fywaproldv|..123|
18300000030  71 7e 73 6d 69 74 78 62  60 2c 2f 7f 20 30 30 2c  |q~smitxb`,/. 00,|
184
18500000040  3b 31 32 33 34 35 36 37  38 39 30 2d 00 37 38 39  |;1234567890-.789| lat + upper
18600000050  4a 43 55 4b 45 4e 47 5b  5d 5a 48 3a 00 34 35 36  |JCUKENG[]ZH:.456|
18700000060  46 59 57 41 50 52 4f 4c  44 56 5c 2e 7f 31 32 33  |FYWAPROLDV\..123|
18800000070  51 5e 53 4d 49 54 58 42  40 2c 2f 5f 20 30 30 2c  |Q^SMITXB@,/_ 00,|
189
19000000080  2b 21 22 23 24 25 26 27  28 29 30 3d 00 37 38 39  |+!"#$%&'()0=.789| rus + lower
19100000090  4a 43 55 4b 45 4e 47 5b  5d 5a 48 2a 00 34 35 36  |JCUKENG[]ZH*.456|
192000000a0  46 59 57 41 50 52 4f 4c  44 56 5c 3e 7f 31 32 33  |FYWAPROLDV\>.123|
193000000b0  51 5e 53 4d 49 54 58 42  40 3c 3f 5f 20 30 30 2c  |Q^SMITXB@<?_ 00,|
194
195000000c0  2b 21 22 23 24 25 26 27  28 29 30 3d 00 37 38 39  |+!"#$%&'()0=.789| lat + lower
196000000d0  6a 63 75 6b 65 6e 67 7b  7d 7a 68 2a 00 34 35 36  |jcukeng{}zh*.456|
197000000e0  66 79 77 61 70 72 6f 6c  64 76 7c 3e 7f 31 32 33  |fywaproldv|>.123|
198000000f0  71 7e 73 6d 69 74 78 62  60 3c 3f 7f 20 30 30 2c  |q~smitxb`<?. 00,|
199
20000000100  18 18 09 09 0c 0c 1f 1f  0b 0b 15 15 1c 1c 0d 0d  |................|
20100000110  0a 0a 0d 0d 10 10 01 01  1b 1b 1a 1a 08 08 19 19  |................|
20200000120  7f 7f 7f 7f 1e 1e 11 11  06 06 14 14 1d 1d 13 13  |................|
20300000130  0e 0e 0f 0f 7f 7f 7f 7f  7f 7f 16 16 02 02 12 12  |................|
204*/
205
206static INPUT_PORTS_START( ie15_keyboard )
207   PORT_START("TERM_LINE0")
208   PORT_BIT(0x000001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+')
209   PORT_BIT(0x000002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
210   PORT_BIT(0x000004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"')
211   PORT_BIT(0x000008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
212   PORT_BIT(0x000010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
213   PORT_BIT(0x000020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
214   PORT_BIT(0x000040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
215   PORT_BIT(0x000080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
216   PORT_BIT(0x000100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
217   PORT_BIT(0x000200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
218   PORT_BIT(0x000400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
219   PORT_BIT(0x000800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') // PORT_CHAR('=')
220   PORT_BIT(0x001000, IP_ACTIVE_HIGH, IPT_UNUSED)
221   PORT_BIT(0x002000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Keypad 7") PORT_CODE(KEYCODE_7_PAD)
222   PORT_BIT(0x004000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Keypad 8") PORT_CODE(KEYCODE_8_PAD)
223   PORT_BIT(0x008000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Keypad 9") PORT_CODE(KEYCODE_9_PAD)
224   PORT_BIT(0x010000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TAB (VT)") PORT_CODE(KEYCODE_F11) PORT_CHAR(UCHAR_MAMEKEY(F11)) // Vertical Tab
225   PORT_BIT(0x020000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR(9)
226   PORT_BIT(0x040000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SBR") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
227   PORT_BIT(0x080000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("STR") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
228   PORT_BIT(0x100000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("STS") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3))
229   PORT_BIT(0x200000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD))   // 'f1'
230   PORT_BIT(0x400000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Up") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) // 'f2'
231   PORT_BIT(0x800000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Home") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME))   // 'f3'
232
233   PORT_START("TERM_LINE1")
234   PORT_BIT(0x000001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
235   PORT_BIT(0x000002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
236   PORT_BIT(0x000004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
237   PORT_BIT(0x000008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
238   PORT_BIT(0x000010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
239   PORT_BIT(0x000020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
240   PORT_BIT(0x000040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
241   PORT_BIT(0x000080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{')
242   PORT_BIT(0x000100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
243   PORT_BIT(0x000200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
244   PORT_BIT(0x000400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
245   PORT_BIT(0x000800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':') PORT_CHAR('*')
246   PORT_BIT(0x001000, IP_ACTIVE_HIGH, IPT_UNUSED)
247   PORT_BIT(0x002000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Keypad 4") PORT_CODE(KEYCODE_4_PAD)
248   PORT_BIT(0x004000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Keypad 5") PORT_CODE(KEYCODE_5_PAD)
249   PORT_BIT(0x008000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Keypad 6") PORT_CODE(KEYCODE_6_PAD)
250   PORT_BIT(0x010000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("PS (LF)") PORT_CODE(KEYCODE_F12) PORT_CHAR(UCHAR_MAMEKEY(F12))  // Line Feed
251   PORT_BIT(0x020000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
252   PORT_BIT(0x040000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("AR1") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4))
253   PORT_BIT(0x080000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("S1")  PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5))
254   PORT_BIT(0x100000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("AR2 (Escape)") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
255   PORT_BIT(0x200000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
256   PORT_BIT(0x400000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Begin") PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(END))
257   PORT_BIT(0x800000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
258
259   PORT_START("TERM_LINE2")
260   PORT_BIT(0x000001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
261   PORT_BIT(0x000002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
262   PORT_BIT(0x000004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
263   PORT_BIT(0x000008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
264   PORT_BIT(0x000010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
265   PORT_BIT(0x000020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
266   PORT_BIT(0x000040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
267   PORT_BIT(0x000080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
268   PORT_BIT(0x000100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
269   PORT_BIT(0x000200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
270   PORT_BIT(0x000400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|')
271   PORT_BIT(0x000800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
272   PORT_BIT(0x001000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
273   PORT_BIT(0x002000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Keypad 1") PORT_CODE(KEYCODE_1_PAD)
274   PORT_BIT(0x004000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Keypad 2") PORT_CODE(KEYCODE_2_PAD)
275   PORT_BIT(0x008000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Keypad 3") PORT_CODE(KEYCODE_3_PAD)
276   PORT_BIT(0x010000, IP_ACTIVE_HIGH, IPT_UNUSED)
277   PORT_BIT(0x020000, IP_ACTIVE_HIGH, IPT_UNUSED)
278   PORT_BIT(0x040000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("PRD") PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6))
279   PORT_BIT(0x080000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("PRM") PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7))
280   PORT_BIT(0x100000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("PRS") PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8))
281   PORT_BIT(0x200000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Del") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL))
282   PORT_BIT(0x400000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
283   PORT_BIT(0x800000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Ins") PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
284
285   PORT_START("TERM_LINE3")
286   PORT_BIT(0x000001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
287   PORT_BIT(0x000002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('^') PORT_CHAR('~')
288   PORT_BIT(0x000004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
289   PORT_BIT(0x000008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
290   PORT_BIT(0x000010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
291   PORT_BIT(0x000020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
292   PORT_BIT(0x000040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
293   PORT_BIT(0x000080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
294   PORT_BIT(0x000100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD)) // PORT_CHAR('`') PORT_CHAR('@') // XXX
295   PORT_BIT(0x000200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
296   PORT_BIT(0x000400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
297   PORT_BIT(0x000800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('_') // XXX
298   PORT_BIT(0x001000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
299   PORT_BIT(0x002000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Keypad 0") PORT_CODE(KEYCODE_0_PAD)
300   PORT_BIT(0x004000, IP_ACTIVE_HIGH, IPT_UNUSED)
301   PORT_BIT(0x008000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Keypad ,") PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD))
302   PORT_BIT(0x010000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Lat (SO)") PORT_CODE(KEYCODE_LALT)
303   PORT_BIT(0x020000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Rus (SI)") PORT_CODE(KEYCODE_RALT)
304   PORT_BIT(0x040000, IP_ACTIVE_HIGH, IPT_UNUSED)
305   PORT_BIT(0x080000, IP_ACTIVE_HIGH, IPT_UNUSED)
306   PORT_BIT(0x100000, IP_ACTIVE_HIGH, IPT_UNUSED)
307   PORT_BIT(0x200000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("PgDn") PORT_CODE(KEYCODE_PGDN) PORT_CHAR(UCHAR_MAMEKEY(PGDN))
308   PORT_BIT(0x400000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Next SetUp") PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK))
309   PORT_BIT(0x800000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("PgUp") PORT_CODE(KEYCODE_PGUP) PORT_CHAR(UCHAR_MAMEKEY(PGUP))
310
311   PORT_START("TERM_LINEC")
312   PORT_BIT(0x000001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL)
313//  PORT_BIT(0x000002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT)  PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
314   PORT_BIT(0x000002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SetUp") PORT_CODE(KEYCODE_RSHIFT) PORT_TOGGLE PORT_CHAR(UCHAR_MAMEKEY(RSHIFT))
315   PORT_BIT(0x000004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SetUp") PORT_CODE(KEYCODE_PRTSCR) PORT_TOGGLE PORT_CHAR(UCHAR_MAMEKEY(PRTSCR))
316INPUT_PORTS_END
317
318ioport_constructor ie15_keyboard_device::device_input_ports() const
319{
320   return INPUT_PORTS_NAME(ie15_keyboard);
321}
322
323const device_type IE15_KEYBOARD = &device_creator<ie15_keyboard_device>;
Property changes on: branches/old_menus/src/mess/machine/ie15_kbd.c
Added: svn:eol-style
   + native
Added: svn:mime-type
   + text/plain
branches/old_menus/src/mess/machine/ie15_kbd.h
r0r29643
1#ifndef __IE15_KEYBOARD_H__
2#define __IE15_KEYBOARD_H__
3
4#include "emu.h"
5
6#define IE_KB_ACK   1
7
8#define IE_KB_RED   0x01
9#define IE_KB_SDV   0x02
10#define IE_KB_DUP   0x08
11#define IE_KB_LIN   0x10
12#define IE_KB_DK    0x20
13#define IE_KB_PCH   0x40
14#define IE_KB_NR    0x80
15
16#define IE_KB_RED_BIT   0
17#define IE_KB_SDV_BIT   1
18#define IE_KB_DUP_BIT   3
19#define IE_KB_LIN_BIT   4
20#define IE_KB_DK_BIT    5
21#define IE_KB_PCH_BIT   6
22#define IE_KB_NR_BIT    7
23
24#define IE_KB_SI    0x0f
25#define IE_KB_SO    0x0e
26
27
28/***************************************************************************
29    DEVICE CONFIGURATION MACROS
30***************************************************************************/
31
32#define MCFG_IE15_KEYBOARD_CB(_devcb) \
33   devcb = &ie15_keyboard_device::set_keyboard_callback(*device, DEVCB2_##_devcb);
34
35/***************************************************************************
36    FUNCTION PROTOTYPES
37***************************************************************************/
38
39class ie15_keyboard_device :
40   public device_t
41{
42public:
43   ie15_keyboard_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
44   ie15_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
45   
46   template<class _Object> static devcb2_base &set_keyboard_callback(device_t &device, _Object object) { return downcast<ie15_keyboard_device &>(device).m_keyboard_cb.set_callback(object); }
47
48   virtual ioport_constructor device_input_ports() const;
49   virtual machine_config_constructor device_mconfig_additions() const;
50   virtual const rom_entry *device_rom_region() const;
51
52protected:
53   required_ioport m_io_kbd0;
54   required_ioport m_io_kbd1;
55   required_ioport m_io_kbd2;
56   required_ioport m_io_kbd3;
57   required_ioport m_io_kbdc;
58
59   virtual void device_start();
60   virtual void device_reset();
61   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
62   virtual void send_key(UINT16 code) { m_keyboard_cb((offs_t)0, code); }
63   emu_timer *m_timer;
64
65private:
66   virtual UINT16 keyboard_handler(UINT16 last_code, UINT8 *scan_line);
67   UINT8 row_number(UINT32 code);
68   UINT16 m_last_code;
69   UINT8 m_scan_line;
70   UINT8 m_ruslat;
71   UINT8 *m_rom;
72
73   devcb2_write16 m_keyboard_cb;
74};
75
76extern const device_type IE15_KEYBOARD;
77
78#endif /* __IE15_KEYBOARD_H__ */
Property changes on: branches/old_menus/src/mess/machine/ie15_kbd.h
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native

Property changes on: branches/old_menus
Modified: svn:mergeinfo
   Merged /trunk:r29634-29642

Previous 199869 Revisions Next


© 1997-2024 The MAME Team