Just a code reorganization, nothing here should result in any functional change. From Haze (nw)

This commit is contained in:
Scott Stone 2012-08-15 23:33:47 +00:00
parent 8805247d21
commit 7bfa2c6e08
6 changed files with 67 additions and 98 deletions

View File

@ -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)

View File

@ -113,10 +113,10 @@ static MACHINE_START( segac2 )
static MACHINE_RESET( segac2 )
{
segac2_state *state = machine.driver_data<segac2_state>();
megadrive_ram = reinterpret_cast<UINT16 *>(state->memshare("nvram")->ptr());
/* set up interrupts and such */
MACHINE_RESET_CALL(megadriv);
megadriv_framerate = 60;
megadriv_scanline_timer = machine.device<timer_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));

View File

@ -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);

View File

@ -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,7 +996,7 @@ 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) */
if (megadrive_ram)
memset(megadrive_ram,0x00,0x10000);
}
@ -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<md_base_state>();
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)

View File

@ -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()

View File

@ -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;