Previous 199869 Revisions Next

r22072 Monday 25th March, 2013 at 12:30:09 UTC by Miodrag Milanović
and some more megadriv modernization (nw)
[src/mame/drivers]megaplay.c megatech.c segac2.c
[src/mame/includes]megadriv.h
[src/mame/machine]megadriv.c megavdp.c
[src/mess/drivers]megadriv.c

trunk/src/mess/drivers/megadriv.c
r22071r22072
3434   READ8_MEMBER(mess_md_io_read_data_port);
3535   WRITE16_MEMBER(mess_md_io_write_data_port);
3636
37   DECLARE_MACHINE_START( ms_megadriv );
38   DECLARE_MACHINE_RESET( ms_megadriv );
3739};
3840
3941class pico_state : public md_cons_state
r22071r22072
4951   UINT16 pico_read_penpos(int pen);
5052   DECLARE_READ16_HANDLER(pico_68k_io_read);
5153   DECLARE_WRITE16_MEMBER(pico_68k_io_write);
54   DECLARE_MACHINE_START(pico);
5255};
5356
5457
r22071r22072
313316   }
314317}
315318
316static MACHINE_START( ms_megadriv )
319MACHINE_START_MEMBER(md_cons_state,ms_megadriv )
317320{
318   md_cons_state *state = machine.driver_data<md_cons_state>();
321   init_megadri6_io();
319322
320   state->init_megadri6_io();
321
322323   vdp_get_word_from_68k_mem = vdp_get_word_from_68k_mem_console;
323324
324   machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7fffff, read16_delegate(FUNC(base_md_cart_slot_device::read),(base_md_cart_slot_device*)state->m_slotcart), write16_delegate(FUNC(base_md_cart_slot_device::write),(base_md_cart_slot_device*)state->m_slotcart));
325   machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0xa13000, 0xa130ff, read16_delegate(FUNC(base_md_cart_slot_device::read_a13),(base_md_cart_slot_device*)state->m_slotcart), write16_delegate(FUNC(base_md_cart_slot_device::write_a13),(base_md_cart_slot_device*)state->m_slotcart));
326   machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0xa15000, 0xa150ff, read16_delegate(FUNC(base_md_cart_slot_device::read_a15),(base_md_cart_slot_device*)state->m_slotcart), write16_delegate(FUNC(base_md_cart_slot_device::write_a15),(base_md_cart_slot_device*)state->m_slotcart));
327   machine.device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0xa14000, 0xa14003, write16_delegate(FUNC(base_md_cart_slot_device::write_tmss_bank),(base_md_cart_slot_device*)state->m_slotcart));
325   machine().device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7fffff, read16_delegate(FUNC(base_md_cart_slot_device::read),(base_md_cart_slot_device*)m_slotcart), write16_delegate(FUNC(base_md_cart_slot_device::write),(base_md_cart_slot_device*)m_slotcart));
326   machine().device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0xa13000, 0xa130ff, read16_delegate(FUNC(base_md_cart_slot_device::read_a13),(base_md_cart_slot_device*)m_slotcart), write16_delegate(FUNC(base_md_cart_slot_device::write_a13),(base_md_cart_slot_device*)m_slotcart));
327   machine().device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0xa15000, 0xa150ff, read16_delegate(FUNC(base_md_cart_slot_device::read_a15),(base_md_cart_slot_device*)m_slotcart), write16_delegate(FUNC(base_md_cart_slot_device::write_a15),(base_md_cart_slot_device*)m_slotcart));
328   machine().device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0xa14000, 0xa14003, write16_delegate(FUNC(base_md_cart_slot_device::write_tmss_bank),(base_md_cart_slot_device*)m_slotcart));
328329}
329330
330static MACHINE_RESET( ms_megadriv )
331MACHINE_RESET_MEMBER(md_cons_state,ms_megadriv )
331332{
332   MACHINE_RESET_CALL( megadriv );
333   MACHINE_RESET_CALL_MEMBER( megadriv );
333334}
334335
335336static SLOT_INTERFACE_START(md_cart)
r22071r22072
393394static MACHINE_CONFIG_START( ms_megadriv, md_cons_state )
394395   MCFG_FRAGMENT_ADD( md_ntsc )
395396
396   MCFG_MACHINE_START( ms_megadriv )
397   MCFG_MACHINE_RESET( ms_megadriv )
397   MCFG_MACHINE_START_OVERRIDE( md_cons_state, ms_megadriv )
398   MCFG_MACHINE_RESET_OVERRIDE( md_cons_state, ms_megadriv )
398399
399400   MCFG_MD_CARTRIDGE_ADD("mdslot", md_cart, NULL, NULL)
400401   MCFG_SOFTWARE_LIST_ADD("cart_list","megadriv")
r22071r22072
403404static MACHINE_CONFIG_START( ms_megadpal, md_cons_state )
404405   MCFG_FRAGMENT_ADD( md_pal )
405406
406   MCFG_MACHINE_START( ms_megadriv )
407   MCFG_MACHINE_RESET( ms_megadriv )
407   MCFG_MACHINE_START_OVERRIDE( md_cons_state, ms_megadriv )
408   MCFG_MACHINE_RESET_OVERRIDE( md_cons_state, ms_megadriv )
408409
409410   MCFG_MD_CARTRIDGE_ADD("mdslot", md_cart, NULL, NULL)
410411   MCFG_SOFTWARE_LIST_ADD("cart_list","megadriv")
r22071r22072
10141015   SLOT_INTERFACE_INTERNAL("rom_sramsafe",  MD_ROM_SRAM)   // not sure these are needed...
10151016SLOT_INTERFACE_END
10161017
1017static MACHINE_START(pico)
1018MACHINE_START_MEMBER(pico_state,pico)
10181019{
1019   pico_state *state = machine.driver_data<pico_state>();
1020   machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7fffff, read16_delegate(FUNC(base_md_cart_slot_device::read),(base_md_cart_slot_device*)state->m_picocart), write16_delegate(FUNC(base_md_cart_slot_device::write),(base_md_cart_slot_device*)state->m_picocart));
1021   machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0xa13000, 0xa130ff, read16_delegate(FUNC(base_md_cart_slot_device::read_a13),(base_md_cart_slot_device*)state->m_picocart), write16_delegate(FUNC(base_md_cart_slot_device::write_a13),(base_md_cart_slot_device*)state->m_picocart));
1022   machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0xa15000, 0xa150ff, read16_delegate(FUNC(base_md_cart_slot_device::read_a15),(base_md_cart_slot_device*)state->m_picocart), write16_delegate(FUNC(base_md_cart_slot_device::write_a15),(base_md_cart_slot_device*)state->m_picocart));
1023   machine.device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0xa14000, 0xa14003, write16_delegate(FUNC(base_md_cart_slot_device::write_tmss_bank),(base_md_cart_slot_device*)state->m_picocart));
1020   machine().device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7fffff, read16_delegate(FUNC(base_md_cart_slot_device::read),(base_md_cart_slot_device*)m_picocart), write16_delegate(FUNC(base_md_cart_slot_device::write),(base_md_cart_slot_device*)m_picocart));
1021   machine().device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0xa13000, 0xa130ff, read16_delegate(FUNC(base_md_cart_slot_device::read_a13),(base_md_cart_slot_device*)m_picocart), write16_delegate(FUNC(base_md_cart_slot_device::write_a13),(base_md_cart_slot_device*)m_picocart));
1022   machine().device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0xa15000, 0xa150ff, read16_delegate(FUNC(base_md_cart_slot_device::read_a15),(base_md_cart_slot_device*)m_picocart), write16_delegate(FUNC(base_md_cart_slot_device::write_a15),(base_md_cart_slot_device*)m_picocart));
1023   machine().device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0xa14000, 0xa14003, write16_delegate(FUNC(base_md_cart_slot_device::write_tmss_bank),(base_md_cart_slot_device*)m_picocart));
10241024}
10251025
10261026static MACHINE_CONFIG_START( pico, pico_state )
r22071r22072
10311031
10321032   MCFG_DEVICE_REMOVE("genesis_snd_z80")
10331033
1034   MCFG_MACHINE_START( pico )
1035   MCFG_MACHINE_RESET( ms_megadriv )
1034   MCFG_MACHINE_START_OVERRIDE( pico_state, pico )
1035   MCFG_MACHINE_RESET_OVERRIDE( pico_state, ms_megadriv )
10361036
10371037   MCFG_PICO_CARTRIDGE_ADD("picoslot", pico_cart, NULL, NULL)
10381038   MCFG_SOFTWARE_LIST_ADD("cart_list","pico")
r22071r22072
10461046
10471047   MCFG_DEVICE_REMOVE("genesis_snd_z80")
10481048
1049   MCFG_MACHINE_START( pico )
1050   MCFG_MACHINE_RESET( ms_megadriv )
1049   MCFG_MACHINE_START_OVERRIDE( pico_state, pico )
1050   MCFG_MACHINE_RESET_OVERRIDE( pico_state, ms_megadriv )
10511051
10521052   MCFG_PICO_CARTRIDGE_ADD("picoslot", pico_cart, NULL, NULL)
10531053   MCFG_SOFTWARE_LIST_ADD("cart_list","pico")
trunk/src/mame/drivers/megatech.c
r22071r22072
428428VIDEO_START_MEMBER(mtech_state,mtnew)
429429{
430430   init_for_megadrive(machine()); // create an sms vdp too, for compatibility mode
431   VIDEO_START_CALL_LEGACY(megadriv);
431   VIDEO_START_CALL_MEMBER(megadriv);
432432}
433433
434434//attotime::never
r22071r22072
436436{
437437   /* if we're running an sms game then use the SMS update.. maybe this should be moved to the megadrive emulation core as compatibility mode is a feature of the chip */
438438   if (!m_current_game_is_sms)
439      SCREEN_UPDATE32_CALL(megadriv);
439      screen_update_megadriv(screen, bitmap, cliprect);
440440   else
441441      SCREEN_UPDATE32_CALL(megatech_md_sms);
442442   return 0;
r22071r22072
446446{
447447   bool vblank_on = state;
448448   if (!m_current_game_is_sms)
449      SCREEN_VBLANK_CALL(megadriv);
449      screen_eof_megadriv(screen, state);
450450   else
451451      SCREEN_VBLANK_CALL(megatech_md_sms);
452452}
r22071r22072
455455{
456456   m_mt_bank_addr = 0;
457457
458   MACHINE_RESET_CALL_LEGACY(megadriv);
458   MACHINE_RESET_CALL_MEMBER(megadriv);
459459   MACHINE_RESET_CALL_LEGACY(megatech_md_sms);
460460   megatech_select_game(0);
461461}
trunk/src/mame/drivers/megaplay.c
r22071r22072
600600VIDEO_START_MEMBER(mplay_state,megplay)
601601{
602602   //printf("megplay vs\n");
603   VIDEO_START_CALL_LEGACY(megadriv);
603   VIDEO_START_CALL_MEMBER(megadriv);
604604//  VIDEO_START_CALL_MEMBER(megaplay_normal);
605605}
606606
607607UINT32 mplay_state::screen_update_megplay(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
608608{
609609   //printf("megplay vu\n");
610   SCREEN_UPDATE32_CALL(megadriv);
610   screen_update_megadriv(screen,bitmap,cliprect);
611611//  SCREEN_UPDATE32_CALL(megaplay_normal);
612612   SCREEN_UPDATE32_CALL(megaplay_bios);
613613   return 0;
r22071r22072
620620   m_bios_mode = MP_ROM;
621621   m_mp_bios_bank_addr = 0;
622622   m_readpos = 1;
623   MACHINE_RESET_CALL_LEGACY(megadriv);
623   MACHINE_RESET_CALL_MEMBER(megadriv);
624624   MACHINE_RESET_CALL_LEGACY(megatech_bios);
625625}
626626
627627void mplay_state::screen_eof_megaplay(screen_device &screen, bool state)
628628{
629629   bool vblank_on = state;
630   SCREEN_VBLANK_CALL(megadriv);
630   screen_eof_megadriv(screen,state);
631631   SCREEN_VBLANK_CALL(megatech_bios);
632632}
633633
trunk/src/mame/drivers/segac2.c
r22071r22072
12481248
12491249VIDEO_START_MEMBER(segac2_state,segac2_new)
12501250{
1251   VIDEO_START_CALL_LEGACY(megadriv);
1251   VIDEO_START_CALL_MEMBER(megadriv);
12521252}
12531253
12541254// C2 doesn't use the internal VDP CRAM, instead it uses the digital output of the chip
r22071r22072
13791379   MCFG_SCREEN_SIZE(64*8, 64*8)
13801380   MCFG_SCREEN_VISIBLE_AREA(0, 32*8-1, 0, 28*8-1)
13811381   MCFG_SCREEN_UPDATE_DRIVER(segac2_state, screen_update_segac2_new)
1382   MCFG_SCREEN_VBLANK_STATIC( megadriv )
1382   MCFG_SCREEN_VBLANK_DRIVER(segac2_state, screen_eof_megadriv )
13831383
13841384   MCFG_PALETTE_LENGTH(2048*3)
13851385
trunk/src/mame/machine/megadriv.c
r22071r22072
836836
837837
838838
839SCREEN_UPDATE_RGB32(megadriv)
839UINT32 md_base_state::screen_update_megadriv(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
840840{
841   sega_genesis_vdp_device *vdp = screen.machine().device<sega_genesis_vdp_device>("gen_vdp"); // yuck
841   sega_genesis_vdp_device *vdp = machine().device<sega_genesis_vdp_device>("gen_vdp"); // yuck
842842
843843   /* Copy our screen buffer here */
844844   for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
r22071r22072
869869
870870/*****************************************************************************************/
871871
872
873MACHINE_START( megadriv )
872VIDEO_START_MEMBER(md_base_state,megadriv)
874873{
875   md_base_state *state = machine.driver_data<md_base_state>();
876   if (state->m_megadrive_6buttons_pad)
877      state->init_megadri6_io();
878874}
879875
880MACHINE_RESET( megadriv )
876MACHINE_START_MEMBER(md_base_state,megadriv)
881877{
882   md_base_state *state = machine.driver_data<md_base_state>();
878   if (m_megadrive_6buttons_pad)
879      init_megadri6_io();
880}
883881
882MACHINE_RESET_MEMBER(md_base_state,megadriv)
883{
884884   /* default state of z80 = reset, with bus */
885885   mame_printf_debug("Resetting Megadrive / Genesis\n");
886886
887   if (state->m_z80snd)
887   if (m_z80snd)
888888   {
889      state->m_genz80.z80_is_reset = 1;
890      state->m_genz80.z80_has_bus = 1;
891      state->m_genz80.z80_bank_addr = 0;
892      state->m_vdp->set_scanline_counter(-1);
893      machine.scheduler().timer_set(attotime::zero, timer_expired_delegate(FUNC(md_base_state::megadriv_z80_run_state),state));
889      m_genz80.z80_is_reset = 1;
890      m_genz80.z80_has_bus = 1;
891      m_genz80.z80_bank_addr = 0;
892      m_vdp->set_scanline_counter(-1);
893      machine().scheduler().timer_set(attotime::zero, timer_expired_delegate(FUNC(md_base_state::megadriv_z80_run_state),this));
894894   }
895895
896   state->megadrive_reset_io();
896   megadrive_reset_io();
897897
898   if (!state->m_vdp->m_use_alt_timing)
898   if (!m_vdp->m_use_alt_timing)
899899   {
900      megadriv_scanline_timer = machine.device<timer_device>("md_scan_timer");
900      megadriv_scanline_timer = machine().device<timer_device>("md_scan_timer");
901901      megadriv_scanline_timer->adjust(attotime::zero);
902902   }
903903
904   if (state->m_other_hacks)
904   if (m_other_hacks)
905905   {
906906   //  machine.device("maincpu")->set_clock_scale(0.9950f); /* Fatal Rewind is very fussy... (and doesn't work now anyway, so don't bother with this) */
907      if (state->m_megadrive_ram)
908         memset(state->m_megadrive_ram,0x00,0x10000);
907      if (m_megadrive_ram)
908         memset(m_megadrive_ram,0x00,0x10000);
909909   }
910910
911   megadriv_reset_vdp(machine);
911   megadriv_reset_vdp(machine());
912912
913913
914914   // if the system has a 32x, pause the extra CPUs until they are actually turned on
915   if (state->m_32x)
916      state->m_32x->pause_cpu();
915   if (m_32x)
916      m_32x->pause_cpu();
917917}
918918
919919void md_base_state::megadriv_stop_scanline_timer()
r22071r22072
10181018   MCFG_CPU_IO_MAP(megadriv_z80_io_map)
10191019   /* IRQ handled via the timers */
10201020
1021   MCFG_MACHINE_START(megadriv)
1022   MCFG_MACHINE_RESET(megadriv)
1021   MCFG_MACHINE_START_OVERRIDE(md_base_state,megadriv)
1022   MCFG_MACHINE_RESET_OVERRIDE(md_base_state,megadriv)
10231023
10241024   MCFG_FRAGMENT_ADD(megadriv_timers)
10251025
r22071r22072
10361036   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) // Vblank handled manually.
10371037   MCFG_SCREEN_SIZE(64*8, 620)
10381038   MCFG_SCREEN_VISIBLE_AREA(0, 32*8-1, 0, 28*8-1)
1039   MCFG_SCREEN_UPDATE_STATIC(megadriv) /* Copies a bitmap */
1040   MCFG_SCREEN_VBLANK_STATIC(megadriv) /* Used to Sync the timing */
1039   MCFG_SCREEN_UPDATE_DRIVER(md_base_state,screen_update_megadriv) /* Copies a bitmap */
1040   MCFG_SCREEN_VBLANK_DRIVER(md_base_state,screen_eof_megadriv) /* Used to Sync the timing */
10411041
10421042   MCFG_TIMER_ADD_SCANLINE("scantimer", megadriv_scanline_timer_callback_alt_timing, "megadriv", 0, 1)
10431043
10441044   MCFG_PALETTE_LENGTH(0x200)
10451045
1046   MCFG_VIDEO_START(megadriv)
1046   MCFG_VIDEO_START_OVERRIDE(md_base_state,megadriv)
10471047
10481048   /* sound hardware */
10491049   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
r22071r22072
10711071   MCFG_CPU_IO_MAP(megadriv_z80_io_map)
10721072   /* IRQ handled via the timers */
10731073
1074   MCFG_MACHINE_START(megadriv)
1075   MCFG_MACHINE_RESET(megadriv)
1074   MCFG_MACHINE_START_OVERRIDE(md_base_state,megadriv)
1075   MCFG_MACHINE_RESET_OVERRIDE(md_base_state,megadriv)
10761076
10771077   MCFG_FRAGMENT_ADD(megadriv_timers)
10781078
r22071r22072
10871087   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) // Vblank handled manually.
10881088   MCFG_SCREEN_SIZE(64*8, 620)
10891089   MCFG_SCREEN_VISIBLE_AREA(0, 32*8-1, 0, 28*8-1)
1090   MCFG_SCREEN_UPDATE_STATIC(megadriv) /* Copies a bitmap */
1091   MCFG_SCREEN_VBLANK_STATIC(megadriv) /* Used to Sync the timing */
1090   MCFG_SCREEN_UPDATE_DRIVER(md_base_state,screen_update_megadriv) /* Copies a bitmap */
1091   MCFG_SCREEN_VBLANK_DRIVER(md_base_state,screen_eof_megadriv) /* Used to Sync the timing */
10921092
10931093   MCFG_PALETTE_LENGTH(0x200)
10941094
1095   MCFG_VIDEO_START(megadriv)
1095   MCFG_VIDEO_START_OVERRIDE(md_base_state,megadriv)
10961096
10971097   /* sound hardware */
10981098   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
r22071r22072
13411341
13421342
13431343
1344SCREEN_VBLANK(megadriv)
1344void md_base_state::screen_eof_megadriv(screen_device &screen, bool state)
13451345{
1346   md_base_state *state = screen.machine().driver_data<md_base_state>();
1347
13481346   if (screen.ioport(":RESET")->read_safe(0x00) & 0x01)
1349      state->m_maincpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
1347      m_maincpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
13501348
13511349   // rising edge
1352   if (vblank_on)
1350   if (state)
13531351   {
1354      if (!state->m_vdp->m_use_alt_timing)
1352      if (!m_vdp->m_use_alt_timing)
13551353      {
1356         state->m_vdp->vdp_handle_eof(screen.machine());
1354         m_vdp->vdp_handle_eof(machine());
13571355         megadriv_scanline_timer->adjust(attotime::zero);
13581356      }
13591357   }
trunk/src/mame/machine/megavdp.c
r22071r22072
26022602   }
26032603}
26042604
2605
2606VIDEO_START(megadriv)
2607{
2608}
2609
2610
26112605void sega_genesis_vdp_device::vdp_handle_scanline_callback(running_machine &machine, int scanline)
26122606{
26132607/* Compensate for some rounding errors
trunk/src/mame/includes/megadriv.h
r22071r22072
3939MACHINE_CONFIG_EXTERN( md_pal );
4040MACHINE_CONFIG_EXTERN( md_bootleg );    // for topshoot.c & hshavoc.c
4141
42MACHINE_START( megadriv );
43MACHINE_RESET( megadriv );
44VIDEO_START( megadriv );
45SCREEN_UPDATE_RGB32( megadriv );
46SCREEN_VBLANK( megadriv );
47
48
49
50
51
52extern int m_megadrive_6buttons_pad;
53
5442/* Megaplay - Megatech specific */
5543/* It might be possible to move the following structs in the drivers */
5644
r22071r22072
156144   void megadrive_io_write_sctrl_port(int portnum, UINT16 data);   
157145   
158146   void megadriv_stop_scanline_timer();   
147   
148   DECLARE_MACHINE_START( megadriv );
149   DECLARE_MACHINE_RESET( megadriv );
150   DECLARE_VIDEO_START( megadriv );
151   UINT32 screen_update_megadriv(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
152   void screen_eof_megadriv(screen_device &screen, bool state);
153   
159154};
160155
161156class md_boot_state : public md_base_state
r22071r22072
477472extern int megadrive_total_scanlines;
478473extern int megadrive_vblank_flag;
479474extern UINT16* megadrive_vdp_palette_lookup;
480
481/* machine/megadriv.c */
482475extern TIMER_DEVICE_CALLBACK( megadriv_scanline_timer_callback );
483476extern timer_device* megadriv_scanline_timer;

Previous 199869 Revisions Next


© 1997-2024 The MAME Team