From 7bfa2c6e08633479a843df19a42efef14b03a083 Mon Sep 17 00:00:00 2001 From: Scott Stone Date: Wed, 15 Aug 2012 23:33:47 +0000 Subject: [PATCH] Just a code reorganization, nothing here should result in any functional change. From Haze (nw) --- src/mame/drivers/puckpkmn.c | 8 ++--- src/mame/drivers/segac2.c | 9 +++-- src/mame/includes/megadriv.h | 51 +++++++--------------------- src/mame/machine/megadriv.c | 65 +++++++++++++++++------------------- src/mame/machine/megavdp.c | 21 ++++-------- src/mame/machine/megavdp.h | 11 ++++++ 6 files changed, 67 insertions(+), 98 deletions(-) diff --git a/src/mame/drivers/puckpkmn.c b/src/mame/drivers/puckpkmn.c index 7ab55193514..31668edb9c4 100644 --- a/src/mame/drivers/puckpkmn.c +++ b/src/mame/drivers/puckpkmn.c @@ -223,7 +223,7 @@ static ADDRESS_MAP_START( puckpkmn_map, AS_PROGRAM, 16, md_boot_state ) AM_RANGE(0xa04000, 0xa04003) AM_DEVREADWRITE8_LEGACY("ymsnd", megadriv_68k_YM2612_read, megadriv_68k_YM2612_write, 0xffff) AM_RANGE(0xc00000, 0xc0001f) AM_DEVREADWRITE("gen_vdp", sega_genesis_vdp_device, megadriv_vdp_r,megadriv_vdp_w) - AM_RANGE(0xe00000, 0xe0ffff) AM_RAM AM_MIRROR(0x1f0000) AM_BASE_LEGACY(&megadrive_ram) + AM_RANGE(0xe00000, 0xe0ffff) AM_RAM AM_MIRROR(0x1f0000) /* Unknown reads/writes: */ AM_RANGE(0xa00000, 0xa00551) AM_WRITENOP /* ? */ @@ -248,17 +248,13 @@ static ADDRESS_MAP_START( jzth_map, AS_PROGRAM, 16, md_boot_state ) AM_RANGE(0xc00000, 0xc0001f) AM_DEVREADWRITE("gen_vdp", sega_genesis_vdp_device, megadriv_vdp_r,megadriv_vdp_w) - AM_RANGE(0xe00000, 0xe0ffff) AM_RAM AM_MIRROR(0x1f0000) AM_BASE_LEGACY(&megadrive_ram) + AM_RANGE(0xe00000, 0xe0ffff) AM_RAM AM_MIRROR(0x1f0000) AM_RANGE(0xa00000, 0xa00551) AM_NOP AM_RANGE(0xA11100, 0xA11101) AM_NOP AM_RANGE(0x710000, 0x710001) AM_READWRITE(bl_710000_r,bl_710000_w) // protection, will erase the VDP address causing writes to 0 unless this returns 0xe - - - - ADDRESS_MAP_END static READ16_HANDLER(puckpkmna_70001c_r) diff --git a/src/mame/drivers/segac2.c b/src/mame/drivers/segac2.c index fa2de5d018b..f3b86c9db87 100644 --- a/src/mame/drivers/segac2.c +++ b/src/mame/drivers/segac2.c @@ -113,10 +113,10 @@ static MACHINE_START( segac2 ) static MACHINE_RESET( segac2 ) { segac2_state *state = machine.driver_data(); - megadrive_ram = reinterpret_cast(state->memshare("nvram")->ptr()); - - /* set up interrupts and such */ - MACHINE_RESET_CALL(megadriv); + megadriv_framerate = 60; + megadriv_scanline_timer = machine.device("md_scan_timer"); + megadriv_scanline_timer->adjust(attotime::zero); + megadriv_reset_vdp(machine); /* determine how many sound banks */ state->m_sound_banks = 0; @@ -1789,7 +1789,6 @@ void segac2_state::segac2_common_init(running_machine& machine, int (*func)(int state->m_prot_func = func; genvdp_use_cram = 0; - genesis_other_hacks = 0; if (upd != NULL) machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(*upd, 0x880000, 0x880001, 0, 0x13fefe, FUNC(segac2_upd7759_w)); diff --git a/src/mame/includes/megadriv.h b/src/mame/includes/megadriv.h index 601a35f5ec2..26065a18e19 100644 --- a/src/mame/includes/megadriv.h +++ b/src/mame/includes/megadriv.h @@ -51,7 +51,6 @@ MACHINE_CONFIG_EXTERN( md_bootleg ); // for topshoot.c & hshavoc.c extern UINT16* megadriv_backupram; extern int megadriv_backupram_length; -extern UINT16* megadrive_ram; extern UINT8 megatech_bios_port_cc_dc_r(running_machine &machine, int offset, int ctrl); extern void megadriv_stop_scanline_timer(void); @@ -81,30 +80,10 @@ SCREEN_UPDATE_RGB32( megadriv ); SCREEN_VBLANK( megadriv ); -struct genesis_z80_vars -{ - int z80_is_reset; - int z80_has_bus; - UINT32 z80_bank_addr; - UINT8* z80_prgram; -}; -extern genesis_z80_vars genz80; -extern UINT16* megadrive_vdp_palette_lookup; -extern UINT16* megadrive_vdp_palette_lookup_sprite; // for C2 -extern UINT16* megadrive_vdp_palette_lookup_shadow; -extern UINT16* megadrive_vdp_palette_lookup_highlight; - -extern int segac2_bg_pal_lookup[4]; -extern int segac2_sp_pal_lookup[4]; - -extern int genvdp_use_cram; -extern int genesis_other_hacks; extern int megadrive_6buttons_pad; -extern int megadrive_region_export; -extern int megadrive_region_pal; /* Megaplay - Megatech specific */ /* It might be possible to move the following structs in the drivers */ @@ -432,9 +411,6 @@ extern cpu_device *_32x_master_cpu; extern cpu_device *_32x_slave_cpu; // called from out main scanline timers... -extern void _32x_scanline_cb0(running_machine& machine); -extern void _32x_scanline_cb1(void); -extern void _32x_check_framebuffer_swap(void); extern int _32x_fifo_available_callback(device_t *device, UINT32 src, UINT32 dst, UINT32 data, int size); extern MACHINE_RESET( _32x ); @@ -442,11 +418,7 @@ ADDRESS_MAP_EXTERN( sh2_main_map, driver_device ); ADDRESS_MAP_EXTERN( sh2_slave_map, driver_device ); extern emu_timer *_32x_pwm_timer; extern TIMER_CALLBACK( _32x_pwm_callback ); -UINT32* _32x_render_videobuffer_to_screenbuffer_helper(running_machine &machine, int scanline); -extern int _32x_displaymode; -extern int _32x_videopriority; -extern int _32x_hcount_compare_val; extern int megadrive_vblank_flag; extern int genesis_scanline_counter; @@ -479,23 +451,24 @@ MACHINE_START( md_sram ); extern WRITE16_HANDLER( jcart_ctrl_w ); extern READ16_HANDLER( jcart_ctrl_r ); -/* vdp / video */ +/* machine/megavdp.c */ extern UINT16 (*vdp_get_word_from_68k_mem)(running_machine &machine, UINT32 source); extern UINT16 vdp_get_word_from_68k_mem_default(running_machine &machine, UINT32 source); -extern int megadrive_visible_scanlines; -extern int megadrive_irq6_scanline; -extern int megadrive_z80irq_scanline; -extern int megadrive_imode; extern int megadriv_framerate; extern int megadrive_total_scanlines; extern int megadrive_vblank_flag; extern int genesis_scanline_counter; -extern timer_device* megadriv_render_timer; +extern UINT16* megadrive_vdp_palette_lookup; +extern UINT16* megadrive_vdp_palette_lookup_sprite; // for C2 +extern UINT16* megadrive_vdp_palette_lookup_shadow; +extern UINT16* megadrive_vdp_palette_lookup_highlight; +extern int segac2_bg_pal_lookup[4]; +extern int segac2_sp_pal_lookup[4]; +extern int genvdp_use_cram; +extern int megadrive_region_export; +extern int megadrive_region_pal; + +/* machine/megadriv.c */ extern TIMER_DEVICE_CALLBACK( megadriv_scanline_timer_callback ); -extern TIMER_DEVICE_CALLBACK( megadriv_render_timer_callback ); -extern TIMER_DEVICE_CALLBACK( irq6_on_callback ); -extern int megadrive_irq6_pending; -extern int megadrive_irq4_pending; extern timer_device* megadriv_scanline_timer; -extern timer_device* irq4_on_timer; extern void megadriv_reset_vdp(running_machine &machine); diff --git a/src/mame/machine/megadriv.c b/src/mame/machine/megadriv.c index 68a52fcaf5e..6c5b9b4b07a 100644 --- a/src/mame/machine/megadriv.c +++ b/src/mame/machine/megadriv.c @@ -56,7 +56,15 @@ static cpu_device *_genesis_snd_z80_cpu; int genesis_other_hacks = 0; // misc hacks timer_device* megadriv_scanline_timer; +UINT16* megadrive_ram = NULL; +struct genesis_z80_vars +{ + int z80_is_reset; + int z80_has_bus; + UINT32 z80_bank_addr; + UINT8* z80_prgram; +}; genesis_z80_vars genz80; @@ -956,9 +964,6 @@ SCREEN_UPDATE_RGB32(megadriv) /*****************************************************************************************/ -static int hazemdchoice_megadrive_region_export; -static int hazemdchoice_megadrive_region_pal; -static int hazemdchoice_megadriv_framerate; MACHINE_START( megadriv ) { @@ -971,8 +976,6 @@ MACHINE_RESET( megadriv ) /* default state of z80 = reset, with bus */ mame_printf_debug("Resetting Megadrive / Genesis\n"); - megadriv_framerate = hazemdchoice_megadriv_framerate; - if (machine.device("genesis_snd_z80") != NULL) { genz80.z80_is_reset = 1; @@ -993,8 +996,8 @@ MACHINE_RESET( megadriv ) { // set_refresh_rate(megadriv_framerate); // 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) */ - - memset(megadrive_ram,0x00,0x10000); + if (megadrive_ram) + memset(megadrive_ram,0x00,0x10000); } megadriv_reset_vdp(machine); @@ -1091,6 +1094,23 @@ void genesis_vdp_lv4irqline_callback_genesis_68k(running_machine &machine, bool cputag_set_input_line(machine, "maincpu", 4, CLEAR_LINE); } +/* Callback when the 68k takes an IRQ */ +static IRQ_CALLBACK(genesis_int_callback) +{ + md_base_state *state = device->machine().driver_data(); + + if (irqline==4) + { + state->m_vdp->vdp_clear_irq4_pending(); + } + + if (irqline==6) + { + state->m_vdp->vdp_clear_irq6_pending(); + } + + return (0x60+irqline*4)/4; // vector address +} MACHINE_CONFIG_FRAGMENT( megadriv_timers ) MCFG_TIMER_ADD("md_scan_timer", megadriv_scanline_timer_callback) @@ -1376,22 +1396,7 @@ MACHINE_CONFIG_DERIVED( genesis_32x_scd, genesis_32x ) MACHINE_CONFIG_END -/* Callback when the genesis enters interrupt code */ -static IRQ_CALLBACK(genesis_int_callback) -{ - if (irqline==4) - { - megadrive_irq4_pending = 0; - } - if (irqline==6) - { - megadrive_irq6_pending = 0; - // mame_printf_debug("clear pending!\n"); - } - - return (0x60+irqline*4)/4; // vector address -} static int megadriv_tas_callback(device_t *device) { @@ -1513,9 +1518,7 @@ DRIVER_INIT_MEMBER(md_base_state,megadriv_c2) genesis_other_hacks = 0; megadriv_init_common(machine()); - hazemdchoice_megadrive_region_export = 1; - hazemdchoice_megadrive_region_pal = 0; - hazemdchoice_megadriv_framerate = 60; + megadriv_framerate = 60; } @@ -1526,9 +1529,7 @@ DRIVER_INIT_MEMBER(md_base_state,megadriv) genesis_other_hacks = 1; megadriv_init_common(machine()); - hazemdchoice_megadrive_region_export = 1; - hazemdchoice_megadrive_region_pal = 0; - hazemdchoice_megadriv_framerate = 60; + megadriv_framerate = 60; } DRIVER_INIT_MEMBER(md_base_state,megadrij) @@ -1537,9 +1538,7 @@ DRIVER_INIT_MEMBER(md_base_state,megadrij) genesis_other_hacks = 1; megadriv_init_common(machine()); - hazemdchoice_megadrive_region_export = 0; - hazemdchoice_megadrive_region_pal = 0; - hazemdchoice_megadriv_framerate = 60; + megadriv_framerate = 60; } DRIVER_INIT_MEMBER(md_base_state,megadrie) @@ -1548,9 +1547,7 @@ DRIVER_INIT_MEMBER(md_base_state,megadrie) genesis_other_hacks = 1; megadriv_init_common(machine()); - hazemdchoice_megadrive_region_export = 1; - hazemdchoice_megadrive_region_pal = 1; - hazemdchoice_megadriv_framerate = 50; + megadriv_framerate = 50; } DRIVER_INIT_MEMBER(md_base_state,mpnew) diff --git a/src/mame/machine/megavdp.c b/src/mame/machine/megavdp.c index 60317efa10e..59c63c34435 100644 --- a/src/mame/machine/megavdp.c +++ b/src/mame/machine/megavdp.c @@ -7,10 +7,6 @@ #include "sound/sn76496.h" -extern int megadrive_imode; -extern int megadrive_total_scanlines; -extern int megadrive_visible_scanlines; -extern int megadrive_irq6_scanline; extern cpu_device *_svp_cpu; extern int segacd_wordram_mapped; extern timer_device* megadriv_scanline_timer; @@ -29,16 +25,10 @@ extern int _32x_is_connected; /* external gunk still has dependencies on these */ - -int megadrive_visible_scanlines; -int megadrive_irq6_scanline; -int megadrive_z80irq_scanline; int megadriv_framerate; int megadrive_total_scanlines; int megadrive_vblank_flag = 0; int genesis_scanline_counter = 0; -int megadrive_irq6_pending = 0; -int megadrive_irq4_pending = 0; int segac2_bg_pal_lookup[4]; int segac2_sp_pal_lookup[4]; @@ -50,8 +40,6 @@ UINT16* megadrive_vdp_palette_lookup; UINT16* megadrive_vdp_palette_lookup_sprite; // for C2 UINT16* megadrive_vdp_palette_lookup_shadow; UINT16* megadrive_vdp_palette_lookup_highlight; -UINT16* megadrive_ram; - int megadrive_region_export; int megadrive_region_pal; @@ -172,8 +160,11 @@ void sega_genesis_vdp_device::device_start() save_item(NAME(m_imode_odd_frame)); save_item(NAME(m_sprite_collision)); save_item(NAME(megadrive_imode)); - - + save_item(NAME(megadrive_irq6_pending)); + save_item(NAME(megadrive_irq4_pending)); + save_item(NAME(megadrive_visible_scanlines)); + save_item(NAME(megadrive_irq6_scanline)); + save_item(NAME(megadrive_z80irq_scanline)); m_sprite_renderline = auto_alloc_array(machine(), UINT8, 1024); m_highpri_renderline = auto_alloc_array(machine(), UINT8, 320); @@ -200,6 +191,8 @@ void sega_genesis_vdp_device::device_reset() m_imode_odd_frame = 0; m_sprite_collision = 0; megadrive_imode = 0; + megadrive_irq6_pending = 0; + megadrive_irq4_pending = 0; } void sega_genesis_vdp_device::device_reset_old() diff --git a/src/mame/machine/megavdp.h b/src/mame/machine/megavdp.h index 15a322f61bf..edb2c463060 100644 --- a/src/mame/machine/megavdp.h +++ b/src/mame/machine/megavdp.h @@ -165,6 +165,9 @@ public: void vdp_handle_irq4_on_timer_callback(running_machine &machine, int param); void vdp_handle_vblank(screen_device &screen); void device_reset_old(); + void vdp_clear_irq6_pending(void) { megadrive_irq6_pending = 0; }; + void vdp_clear_irq4_pending(void) { megadrive_irq4_pending = 0; }; + bitmap_ind16* m_render_bitmap; @@ -189,9 +192,17 @@ private: int m_irq4counter; int m_imode_odd_frame; int m_sprite_collision; + int megadrive_irq6_pending; + int megadrive_irq4_pending; int megadrive_imode; + + int megadrive_visible_scanlines; + int megadrive_irq6_scanline; + int megadrive_z80irq_scanline; + + UINT16* m_vdp_regs; UINT16* m_vram; UINT16* m_cram;