Previous 199869 Revisions Next

r26320 Wednesday 20th November, 2013 at 23:22:15 UTC by David Haywood
yes, it really seems to be non-interlaced, even wants the interrupts gen at 60fps rather than 30 (nw)
[src/mame/drivers]mcr3.c
[src/mame/includes]mcr3.h
[src/mame/video]mcr3.c

trunk/src/mame/drivers/mcr3.c
r26319r26320
10611061
10621062static const gfx_layout spyhuntpr_alphalayout =
10631063{
1064   16,16,
1064   16,8,
10651065   RGN_FRAC(1,1),
10661066   2,
10671067   { 0, 4},
10681068   { 0, 0, 1, 1, 2, 2, 3, 3, 8, 8, 9, 9, 10, 10, 11, 11 },
1069   { 0, 0, 2*8, 2*8, 4*8, 4*8, 6*8, 6*8, 8*8, 8*8, 10*8, 10*8, 12*8, 12*8, 14*8, 14*8 },
1069   { 0, 2*8, 4*8, 6*8, 8*8, 10*8, 12*8, 14*8 },
10701070   16*8
10711071};
10721072
r26319r26320
10741074// not quite right
10751075const gfx_layout spyhuntpr_sprite_layout =
10761076{
1077   32,32,
1077   32,16,
10781078   RGN_FRAC(1,4),
10791079   4,
10801080   { RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) },
10811081   { 6,7,  4,5,  2,3,  0,1,  14,15,  12,13,  10,11,  8,9,    22,23, 20,21,  18,19,  16,17,  30,31,  28,29,  26,27,  24,25 },
1082   { 0*32,0*32,1*32,1*32,2*32,2*32,3*32,3*32,4*32,4*32,5*32,5*32,6*32,6*32,7*32,7*32,8*32,8*32,9*32,9*32,10*32,10*32,11*32,11*32,12*32,12*32,13*32,13*32,14*32,14*32,15*32,15*32   },
1082   { 0*32,1*32,2*32,3*32,4*32,5*32,6*32,7*32,8*32,9*32,10*32,11*32,12*32,13*32,14*32,15*32   },
10831083
10841084   16*32
10851085};
r26319r26320
10961096
10971097static const gfx_layout spyhuntpr_charlayout =
10981098{
1099   64,32,
1099   64,16,
11001100   RGN_FRAC(1,8),
11011101   4,
11021102   { 0, 2*8, 0x4000*8 + 0, 0x4000*8 + 2*8},
11031103   EXTENDED_XOFFS,
1104   { 0*8,0*8,  4*8,4*8,  8*8,8*8,  12*8,12*8,    16*8,16*8,  20*8,20*8,  24*8,24*8,  28*8,28*8,     1*8,1*8,  5*8,5*8, 9*8,9*8, 13*8,13*8,    17*8,17*8,  21*8,21*8,  25*8,25*8,  29*8,29*8    },
1104   { 0*8,  4*8,  8*8,  12*8,    16*8,  20*8,  24*8,  28*8,     1*8,  5*8, 9*8, 13*8,    17*8,  21*8,  25*8,  29*8    },
11051105   32*8,
11061106   spyhuntp_charlayout_xoffset,
11071107   NULL
r26319r26320
12281228   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
12291229MACHINE_CONFIG_END
12301230
1231/* Spy Hunter prototype */
1232static MACHINE_CONFIG_DERIVED( spyhuntpr, mcrscroll )
12331231
1232static MACHINE_CONFIG_START( spyhuntpr, mcr3_state )
1233
1234   /* basic machine hardware */
1235   MCFG_CPU_ADD("maincpu", Z80, MASTER_CLOCK/4)
1236   MCFG_CPU_PROGRAM_MAP(spyhunt_map)
1237   MCFG_CPU_IO_MAP(spyhunt_portmap)
1238   MCFG_CPU_CONFIG(mcr_daisy_chain)
1239   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", mcr3_state, mcr_interrupt, "screen", 0, 1)
1240
1241   MCFG_Z80CTC_ADD("ctc", MASTER_CLOCK/4 /* same as "maincpu" */, mcr_ctc_intf)
1242
1243   MCFG_WATCHDOG_VBLANK_INIT(16)
1244   MCFG_MACHINE_START_OVERRIDE(mcr3_state,mcr)
1245   MCFG_MACHINE_RESET_OVERRIDE(mcr3_state,mcr)
1246   MCFG_NVRAM_ADD_0FILL("nvram")
1247
1248   // sound hardware
1249   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
1250
1251   /* video hardware */
1252   MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
1253
1254   /* basic machine hardware */
1255   MCFG_MIDWAY_SSIO_ADD("ssio")
1256   MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
1257   MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
1258
1259   /* video hardware */
1260   MCFG_SCREEN_ADD("screen", RASTER)
1261   MCFG_SCREEN_REFRESH_RATE(60)
1262   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
1263   MCFG_SCREEN_SIZE(30*16, 30*8)
1264   MCFG_SCREEN_VISIBLE_AREA(0, 30*16-1, 0, 30*8-1)
1265
12341266   MCFG_GFXDECODE(spyhuntpr)
1267   MCFG_PALETTE_LENGTH(64+4)
12351268
1269   MCFG_PALETTE_INIT_OVERRIDE(mcr3_state,spyhunt)
1270   MCFG_VIDEO_START_OVERRIDE(mcr3_state,spyhuntpr)
1271   MCFG_SCREEN_UPDATE_DRIVER(mcr3_state, screen_update_spyhuntpr)
12361272MACHINE_CONFIG_END
12371273
12381274
1275
1276
12391277/*************************************
12401278 *
12411279 *  ROM definitions
r26319r26320
18071845/* MCR scrolling games */
18081846GAMEL(1983, spyhunt,  0,        mcrsc_csd, spyhunt,  mcr3_state,  spyhunt,  ROT90, "Bally Midway", "Spy Hunter", GAME_SUPPORTS_SAVE, layout_spyhunt )
18091847GAMEL(1983, spyhuntp, spyhunt,  mcrsc_csd, spyhunt,  mcr3_state,  spyhunt,  ROT90, "Bally Midway (Playtronic license)", "Spy Hunter (Playtronic license)", GAME_SUPPORTS_SAVE, layout_spyhunt )
1810GAME (1983, spyhuntpr, spyhunt,  spyhuntpr,  spyhunt,  mcr3_state,  spyhuntpr,  ROT0, "Bally Midway", "Spy Hunter (prototype)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1848GAME (1983, spyhuntpr, spyhunt,  spyhuntpr,  spyhunt,  mcr3_state,  spyhuntpr,  ROT90, "Bally Midway", "Spy Hunter (prototype)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) // or bootleg??
18111849GAME( 1984, crater,   0,        mcrscroll, crater,   mcr3_state, crater,   ORIENTATION_FLIP_X, "Bally Midway", "Crater Raider", GAME_SUPPORTS_SAVE )
18121850GAMEL(1985, turbotag, 0,        mcrsc_csd, turbotag, mcr3_state, turbotag, ROT90, "Bally Midway", "Turbo Tag (prototype)", GAME_SUPPORTS_SAVE, layout_turbotag )
trunk/src/mame/video/mcr3.c
r26319r26320
118118   save_item(NAME(m_spyhunt_scroll_offset));
119119}
120120
121VIDEO_START_MEMBER(mcr3_state,spyhuntpr)
122{
123   /* initialize the background tilemap */
124   m_bg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(mcr3_state::spyhunt_get_bg_tile_info),this), tilemap_mapper_delegate(FUNC(mcr3_state::spyhunt_bg_scan),this),  64,16, 64,32);
121125
126   /* initialize the text tilemap */
127   m_alpha_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(mcr3_state::spyhunt_get_alpha_tile_info),this), TILEMAP_SCAN_COLS,  16,8, 32,32);
128   m_alpha_tilemap->set_transparent_pen(0);
129   m_alpha_tilemap->set_scrollx(0, 16);
122130
131   save_item(NAME(m_spyhunt_sprite_color_mask));
132   save_item(NAME(m_spyhunt_scrollx));
133   save_item(NAME(m_spyhunt_scrolly));
134   save_item(NAME(m_spyhunt_scroll_offset));
135}
136
137
123138/*************************************
124139 *
125140 *  Palette RAM writes
r26319r26320
196211 *
197212 *************************************/
198213
199void mcr3_state::mcr3_update_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int color_mask, int code_xor, int dx, int dy)
214void mcr3_state::mcr3_update_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int color_mask, int code_xor, int dx, int dy, int interlaced)
200215{
201216   UINT8 *spriteram = m_spriteram;
202217   int offs;
r26319r26320
230245      flipx = flags & 0x10;
231246      flipy = flags & 0x20;
232247      sx = (spriteram[offs + 3] - 3) * 2;
233      sy = (241 - spriteram[offs]) * 2;
248      sy = (241 - spriteram[offs]);
234249
250      if (interlaced == 1) sy *= 2;
251
235252      code ^= code_xor;
236253
237254      sx += dx;
r26319r26320
279296   m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
280297
281298   /* draw the sprites */
282   mcr3_update_sprites(screen, bitmap, cliprect, 0x03, 0, 0, 0);
299   mcr3_update_sprites(screen, bitmap, cliprect, 0x03, 0, 0, 0, 1);
283300   return 0;
284301}
285302
r26319r26320
293310   m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
294311
295312   /* draw the sprites */
296   mcr3_update_sprites(screen, bitmap, cliprect, m_spyhunt_sprite_color_mask, 0, -12, 0);
313   mcr3_update_sprites(screen, bitmap, cliprect, m_spyhunt_sprite_color_mask, 0, -12, 0, 1);
297314
298315   /* render any characters on top */
299316   m_alpha_tilemap->draw(screen, bitmap, cliprect, 0, 0);
300317   return 0;
301318}
319
320
321UINT32 mcr3_state::screen_update_spyhuntpr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
322{
323   /* for every character in the Video RAM, check if it has been modified */
324   /* since last time and update it accordingly. */
325   m_bg_tilemap->set_scrollx(0, m_spyhunt_scrollx * 2 + m_spyhunt_scroll_offset);
326   m_bg_tilemap->set_scrolly(0, m_spyhunt_scrolly * 2);
327   m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
328
329   /* draw the sprites */
330   mcr3_update_sprites(screen, bitmap, cliprect, m_spyhunt_sprite_color_mask, 0, -12, 0, 0);
331
332   /* render any characters on top */
333   m_alpha_tilemap->draw(screen, bitmap, cliprect, 0, 0);
334   return 0;
335}
trunk/src/mame/includes/mcr3.h
r26319r26320
6565   TILE_GET_INFO_MEMBER(spyhunt_get_alpha_tile_info);
6666   DECLARE_VIDEO_START(mcrmono);
6767   DECLARE_VIDEO_START(spyhunt);
68   DECLARE_VIDEO_START(spyhuntpr);
6869   DECLARE_PALETTE_INIT(spyhunt);
6970   UINT32 screen_update_mcr3(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
7071   UINT32 screen_update_spyhunt(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
71   void mcr3_update_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int color_mask, int code_xor, int dx, int dy);
72   UINT32 screen_update_spyhuntpr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
73   void mcr3_update_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int color_mask, int code_xor, int dx, int dy, int interlaced);
7274   void mcr_common_init();
7375};

Previous 199869 Revisions Next


© 1997-2024 The MAME Team