mirror of
https://github.com/holub/mame
synced 2025-05-23 22:20:01 +03:00
Some more atari driver shuffling. Added atarigen_init() function
which allocates all timers and registers for save states. Updated all drivers to call it. Converted some drivers to use device timers.
This commit is contained in:
parent
f43747b221
commit
26d1e3868a
@ -103,6 +103,12 @@ static void scanline_update(const device_config *screen, int scanline)
|
|||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
|
static MACHINE_START( arcadecl )
|
||||||
|
{
|
||||||
|
atarigen_init(machine);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_RESET( arcadecl )
|
static MACHINE_RESET( arcadecl )
|
||||||
{
|
{
|
||||||
rampart_state *state = (rampart_state *)machine->driver_data;
|
rampart_state *state = (rampart_state *)machine->driver_data;
|
||||||
@ -324,6 +330,7 @@ static MACHINE_DRIVER_START( arcadecl )
|
|||||||
MDRV_CPU_PROGRAM_MAP(main_map)
|
MDRV_CPU_PROGRAM_MAP(main_map)
|
||||||
MDRV_CPU_VBLANK_INT("screen", atarigen_video_int_gen)
|
MDRV_CPU_VBLANK_INT("screen", atarigen_video_int_gen)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(arcadecl)
|
||||||
MDRV_MACHINE_RESET(arcadecl)
|
MDRV_MACHINE_RESET(arcadecl)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
|
|
||||||
|
@ -43,6 +43,7 @@ static void update_interrupts(running_machine *machine)
|
|||||||
static MACHINE_START( atarig1 )
|
static MACHINE_START( atarig1 )
|
||||||
{
|
{
|
||||||
atarig1_state *state = (atarig1_state *)machine->driver_data;
|
atarig1_state *state = (atarig1_state *)machine->driver_data;
|
||||||
|
atarigen_init(machine);
|
||||||
state_save_register_global(machine, state->which_input);
|
state_save_register_global(machine, state->which_input);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#include "driver.h"
|
#include "driver.h"
|
||||||
#include "cpu/m68000/m68000.h"
|
#include "cpu/m68000/m68000.h"
|
||||||
#include "machine/asic65.h"
|
#include "machine/asic65.h"
|
||||||
@ -40,6 +39,19 @@ static void update_interrupts(running_machine *machine)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static MACHINE_START( atarig42 )
|
||||||
|
{
|
||||||
|
atarig42_state *state = (atarig42_state *)machine->driver_data;
|
||||||
|
atarigen_init(machine);
|
||||||
|
|
||||||
|
state_save_register_global(machine, state->analog_data);
|
||||||
|
state_save_register_global(machine, state->sloop_bank);
|
||||||
|
state_save_register_global(machine, state->sloop_next_bank);
|
||||||
|
state_save_register_global(machine, state->sloop_offset);
|
||||||
|
state_save_register_global(machine, state->sloop_state);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_RESET( atarig42 )
|
static MACHINE_RESET( atarig42 )
|
||||||
{
|
{
|
||||||
atarig42_state *state = (atarig42_state *)machine->driver_data;
|
atarig42_state *state = (atarig42_state *)machine->driver_data;
|
||||||
@ -511,6 +523,7 @@ static MACHINE_DRIVER_START( atarig42 )
|
|||||||
/* ASIC65 */
|
/* ASIC65 */
|
||||||
MDRV_IMPORT_FROM(asic65)
|
MDRV_IMPORT_FROM(asic65)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(atarig42)
|
||||||
MDRV_MACHINE_RESET(atarig42)
|
MDRV_MACHINE_RESET(atarig42)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
|
|
||||||
|
@ -56,6 +56,12 @@ static void update_interrupts(running_machine *machine)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static MACHINE_START( atarigt )
|
||||||
|
{
|
||||||
|
atarigen_init(machine);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_RESET( atarigt )
|
static MACHINE_RESET( atarigt )
|
||||||
{
|
{
|
||||||
atarigt_state *state = (atarigt_state *)machine->driver_data;
|
atarigt_state *state = (atarigt_state *)machine->driver_data;
|
||||||
@ -793,6 +799,7 @@ static MACHINE_DRIVER_START( atarigt )
|
|||||||
MDRV_CPU_VBLANK_INT("screen", atarigen_video_int_gen)
|
MDRV_CPU_VBLANK_INT("screen", atarigen_video_int_gen)
|
||||||
MDRV_CPU_PERIODIC_INT(atarigen_scanline_int_gen, 250)
|
MDRV_CPU_PERIODIC_INT(atarigen_scanline_int_gen, 250)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(atarigt)
|
||||||
MDRV_MACHINE_RESET(atarigt)
|
MDRV_MACHINE_RESET(atarigt)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
|
|
||||||
|
@ -41,6 +41,12 @@ static void update_interrupts(running_machine *machine)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static MACHINE_START( atarigx2 )
|
||||||
|
{
|
||||||
|
atarigen_init(machine);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_RESET( atarigx2 )
|
static MACHINE_RESET( atarigx2 )
|
||||||
{
|
{
|
||||||
atarigx2_state *state = (atarigx2_state *)machine->driver_data;
|
atarigx2_state *state = (atarigx2_state *)machine->driver_data;
|
||||||
@ -1392,6 +1398,7 @@ static MACHINE_DRIVER_START( atarigx2 )
|
|||||||
MDRV_CPU_PROGRAM_MAP(main_map)
|
MDRV_CPU_PROGRAM_MAP(main_map)
|
||||||
MDRV_CPU_VBLANK_INT("screen", atarigen_video_int_gen)
|
MDRV_CPU_VBLANK_INT("screen", atarigen_video_int_gen)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(atarigx2)
|
||||||
MDRV_MACHINE_RESET(atarigx2)
|
MDRV_MACHINE_RESET(atarigx2)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
|
|
||||||
|
@ -180,10 +180,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
static TIMER_CALLBACK( delayed_joystick_int );
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
*
|
*
|
||||||
* Initialization & interrupts
|
* Initialization & interrupts
|
||||||
@ -200,6 +196,20 @@ static void update_interrupts(running_machine *machine)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static MACHINE_START( atarisy1 )
|
||||||
|
{
|
||||||
|
atarisy1_state *state = (atarisy1_state *)machine->driver_data;
|
||||||
|
atarigen_init(machine);
|
||||||
|
|
||||||
|
state_save_register_global(machine, state->joystick_int);
|
||||||
|
state_save_register_global(machine, state->joystick_int_enable);
|
||||||
|
state_save_register_global(machine, state->joystick_value);
|
||||||
|
state_save_register_global(machine, state->tms5220_out_data);
|
||||||
|
state_save_register_global(machine, state->tms5220_in_data);
|
||||||
|
state_save_register_global(machine, state->tms5220_ctl);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_RESET( atarisy1 )
|
static MACHINE_RESET( atarisy1 )
|
||||||
{
|
{
|
||||||
atarisy1_state *state = (atarisy1_state *)machine->driver_data;
|
atarisy1_state *state = (atarisy1_state *)machine->driver_data;
|
||||||
@ -212,7 +222,7 @@ static MACHINE_RESET( atarisy1 )
|
|||||||
|
|
||||||
/* reset the joystick parameters */
|
/* reset the joystick parameters */
|
||||||
state->joystick_value = 0;
|
state->joystick_value = 0;
|
||||||
state->joystick_timer = timer_alloc(machine, delayed_joystick_int, NULL);
|
state->joystick_timer = devtag_get_device(machine, "joystick_timer");
|
||||||
state->joystick_int = 0;
|
state->joystick_int = 0;
|
||||||
state->joystick_int_enable = 0;
|
state->joystick_int_enable = 0;
|
||||||
}
|
}
|
||||||
@ -225,12 +235,12 @@ static MACHINE_RESET( atarisy1 )
|
|||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
static TIMER_CALLBACK( delayed_joystick_int )
|
static TIMER_DEVICE_CALLBACK( delayed_joystick_int )
|
||||||
{
|
{
|
||||||
atarisy1_state *state = (atarisy1_state *)machine->driver_data;
|
atarisy1_state *state = (atarisy1_state *)timer->machine->driver_data;
|
||||||
state->joystick_value = param;
|
state->joystick_value = param;
|
||||||
state->joystick_int = 1;
|
state->joystick_int = 1;
|
||||||
atarigen_update_interrupts(machine);
|
atarigen_update_interrupts(timer->machine);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -257,7 +267,7 @@ static READ16_HANDLER( joystick_r )
|
|||||||
|
|
||||||
/* clear any existing interrupt and set a timer for a new one */
|
/* clear any existing interrupt and set a timer for a new one */
|
||||||
state->joystick_int = 0;
|
state->joystick_int = 0;
|
||||||
timer_adjust_oneshot(state->joystick_timer, ATTOTIME_IN_USEC(50), newval);
|
timer_device_adjust_oneshot(state->joystick_timer, ATTOTIME_IN_USEC(50), newval);
|
||||||
atarigen_update_interrupts(space->machine);
|
atarigen_update_interrupts(space->machine);
|
||||||
|
|
||||||
return state->joystick_value;
|
return state->joystick_value;
|
||||||
@ -753,8 +763,14 @@ static MACHINE_DRIVER_START( atarisy1 )
|
|||||||
MDRV_CPU_ADD("audiocpu", M6502, ATARI_CLOCK_14MHz/8)
|
MDRV_CPU_ADD("audiocpu", M6502, ATARI_CLOCK_14MHz/8)
|
||||||
MDRV_CPU_PROGRAM_MAP(sound_map)
|
MDRV_CPU_PROGRAM_MAP(sound_map)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(atarisy1)
|
||||||
MDRV_MACHINE_RESET(atarisy1)
|
MDRV_MACHINE_RESET(atarisy1)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
|
|
||||||
|
MDRV_TIMER_ADD("joystick_timer", delayed_joystick_int)
|
||||||
|
MDRV_TIMER_ADD("scan_timer", atarisy1_int3_callback)
|
||||||
|
MDRV_TIMER_ADD("int3off_timer", atarisy1_int3off_callback)
|
||||||
|
MDRV_TIMER_ADD("yreset_timer", atarisy1_reset_yscroll_callback)
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MDRV_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
|
MDRV_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
|
||||||
|
@ -225,6 +225,8 @@ static DIRECT_UPDATE_HANDLER( atarisy2_direct_handler )
|
|||||||
static MACHINE_START( atarisy2 )
|
static MACHINE_START( atarisy2 )
|
||||||
{
|
{
|
||||||
atarisy2_state *state = (atarisy2_state *)machine->driver_data;
|
atarisy2_state *state = (atarisy2_state *)machine->driver_data;
|
||||||
|
atarigen_init(machine);
|
||||||
|
|
||||||
state_save_register_global(machine, state->interrupt_enable);
|
state_save_register_global(machine, state->interrupt_enable);
|
||||||
state_save_register_global(machine, state->tms5220_data);
|
state_save_register_global(machine, state->tms5220_data);
|
||||||
state_save_register_global(machine, state->tms5220_data_strobe);
|
state_save_register_global(machine, state->tms5220_data_strobe);
|
||||||
|
@ -196,6 +196,12 @@ static void scanline_update(const device_config *screen, int scanline)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static MACHINE_START( badlands )
|
||||||
|
{
|
||||||
|
atarigen_init(machine);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_RESET( badlands )
|
static MACHINE_RESET( badlands )
|
||||||
{
|
{
|
||||||
badlands_state *state = (badlands_state *)machine->driver_data;
|
badlands_state *state = (badlands_state *)machine->driver_data;
|
||||||
@ -208,6 +214,8 @@ static MACHINE_RESET( badlands )
|
|||||||
|
|
||||||
atarigen_sound_io_reset(cputag_get_cpu(machine, "audiocpu"));
|
atarigen_sound_io_reset(cputag_get_cpu(machine, "audiocpu"));
|
||||||
memcpy(state->bank_base, &state->bank_source_data[0x0000], 0x1000);
|
memcpy(state->bank_base, &state->bank_source_data[0x0000], 0x1000);
|
||||||
|
|
||||||
|
state_save_register_global_array(machine, state->pedal_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -504,6 +512,7 @@ static MACHINE_DRIVER_START( badlands )
|
|||||||
MDRV_CPU_ADD("audiocpu", M6502, ATARI_CLOCK_14MHz/8)
|
MDRV_CPU_ADD("audiocpu", M6502, ATARI_CLOCK_14MHz/8)
|
||||||
MDRV_CPU_PROGRAM_MAP(audio_map)
|
MDRV_CPU_PROGRAM_MAP(audio_map)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(badlands)
|
||||||
MDRV_MACHINE_RESET(badlands)
|
MDRV_MACHINE_RESET(badlands)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
|
|
||||||
@ -713,6 +722,7 @@ static MACHINE_DRIVER_START( badlandb )
|
|||||||
// MDRV_CPU_ADD("audiocpu", Z80, 2800000/8)
|
// MDRV_CPU_ADD("audiocpu", Z80, 2800000/8)
|
||||||
// MDRV_CPU_PROGRAM_MAP(bootleg_soundmap)
|
// MDRV_CPU_PROGRAM_MAP(bootleg_soundmap)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(badlands)
|
||||||
MDRV_MACHINE_RESET(badlandb)
|
MDRV_MACHINE_RESET(badlandb)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
|
|
||||||
|
@ -38,6 +38,16 @@ static void update_interrupts(running_machine *machine)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static MACHINE_START( batman )
|
||||||
|
{
|
||||||
|
batman_state *state = (batman_state *)machine->driver_data;
|
||||||
|
atarigen_init(machine);
|
||||||
|
|
||||||
|
state_save_register_global(machine, state->latch_data);
|
||||||
|
state_save_register_global(machine, state->alpha_tile_bank);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_RESET( batman )
|
static MACHINE_RESET( batman )
|
||||||
{
|
{
|
||||||
batman_state *state = (batman_state *)machine->driver_data;
|
batman_state *state = (batman_state *)machine->driver_data;
|
||||||
@ -47,8 +57,6 @@ static MACHINE_RESET( batman )
|
|||||||
atarivc_reset(machine->primary_screen, state->atarigen.atarivc_eof_data, 2);
|
atarivc_reset(machine->primary_screen, state->atarigen.atarivc_eof_data, 2);
|
||||||
atarigen_scanline_timer_reset(machine->primary_screen, batman_scanline_update, 8);
|
atarigen_scanline_timer_reset(machine->primary_screen, batman_scanline_update, 8);
|
||||||
atarijsa_reset();
|
atarijsa_reset();
|
||||||
atarigen_init_save_state(machine);
|
|
||||||
state_save_register_global(machine, state->latch_data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -231,6 +239,7 @@ static MACHINE_DRIVER_START( batman )
|
|||||||
MDRV_CPU_ADD("maincpu", M68000, ATARI_CLOCK_14MHz)
|
MDRV_CPU_ADD("maincpu", M68000, ATARI_CLOCK_14MHz)
|
||||||
MDRV_CPU_PROGRAM_MAP(main_map)
|
MDRV_CPU_PROGRAM_MAP(main_map)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(batman)
|
||||||
MDRV_MACHINE_RESET(batman)
|
MDRV_MACHINE_RESET(batman)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
|
|
||||||
|
@ -135,16 +135,16 @@ static UINT8 eeprom_enabled;
|
|||||||
|
|
||||||
static void update_interrupts(running_machine *machine);
|
static void update_interrupts(running_machine *machine);
|
||||||
|
|
||||||
static TIMER_CALLBACK( scanline_callback )
|
static TIMER_DEVICE_CALLBACK( scanline_callback )
|
||||||
{
|
{
|
||||||
int scanline = param;
|
int scanline = param;
|
||||||
|
|
||||||
/* update the video */
|
/* update the video */
|
||||||
video_screen_update_now(machine->primary_screen);
|
video_screen_update_now(timer->machine->primary_screen);
|
||||||
|
|
||||||
/* on scanline zero, clear any halt condition */
|
/* on scanline zero, clear any halt condition */
|
||||||
if (scanline == 0)
|
if (scanline == 0)
|
||||||
cputag_set_input_line(machine, "maincpu", INPUT_LINE_HALT, CLEAR_LINE);
|
cputag_set_input_line(timer->machine, "maincpu", INPUT_LINE_HALT, CLEAR_LINE);
|
||||||
|
|
||||||
/* wrap around at 262 */
|
/* wrap around at 262 */
|
||||||
scanline++;
|
scanline++;
|
||||||
@ -153,10 +153,16 @@ static TIMER_CALLBACK( scanline_callback )
|
|||||||
|
|
||||||
/* set the scanline IRQ */
|
/* set the scanline IRQ */
|
||||||
irq_state[2] = 1;
|
irq_state[2] = 1;
|
||||||
update_interrupts(machine);
|
update_interrupts(timer->machine);
|
||||||
|
|
||||||
/* set the timer for the next one */
|
/* set the timer for the next one */
|
||||||
timer_set(machine, double_to_attotime(attotime_to_double(video_screen_get_time_until_pos(machine->primary_screen, scanline, 0)) - hblank_offset), NULL, scanline, scanline_callback);
|
timer_device_adjust_oneshot(timer, double_to_attotime(attotime_to_double(video_screen_get_time_until_pos(timer->machine->primary_screen, scanline, 0)) - hblank_offset), scanline);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static MACHINE_START( beathead )
|
||||||
|
{
|
||||||
|
atarigen_init(machine);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -175,7 +181,7 @@ static MACHINE_RESET( beathead )
|
|||||||
|
|
||||||
/* compute the timing of the HBLANK interrupt and set the first timer */
|
/* compute the timing of the HBLANK interrupt and set the first timer */
|
||||||
hblank_offset = attotime_to_double(video_screen_get_scan_period(machine->primary_screen)) * ((455. - 336. - 25.) / 455.);
|
hblank_offset = attotime_to_double(video_screen_get_scan_period(machine->primary_screen)) * ((455. - 336. - 25.) / 455.);
|
||||||
timer_set(machine, double_to_attotime(attotime_to_double(video_screen_get_time_until_pos(machine->primary_screen, 0, 0)) - hblank_offset), NULL, 0, scanline_callback);
|
timer_device_adjust_oneshot(devtag_get_device(machine, "scan_timer"), double_to_attotime(attotime_to_double(video_screen_get_time_until_pos(machine->primary_screen, 0, 0)) - hblank_offset), 0);
|
||||||
|
|
||||||
/* reset IRQs */
|
/* reset IRQs */
|
||||||
irq_line_state = CLEAR_LINE;
|
irq_line_state = CLEAR_LINE;
|
||||||
@ -416,8 +422,11 @@ static MACHINE_DRIVER_START( beathead )
|
|||||||
MDRV_CPU_ADD("maincpu", ASAP, ATARI_CLOCK_14MHz)
|
MDRV_CPU_ADD("maincpu", ASAP, ATARI_CLOCK_14MHz)
|
||||||
MDRV_CPU_PROGRAM_MAP(main_map)
|
MDRV_CPU_PROGRAM_MAP(main_map)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(beathead)
|
||||||
MDRV_MACHINE_RESET(beathead)
|
MDRV_MACHINE_RESET(beathead)
|
||||||
MDRV_NVRAM_HANDLER(generic_1fill)
|
MDRV_NVRAM_HANDLER(generic_1fill)
|
||||||
|
|
||||||
|
MDRV_TIMER_ADD("scan_timer", scanline_callback)
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MDRV_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
|
MDRV_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
|
||||||
|
@ -46,6 +46,12 @@ static WRITE16_HANDLER( blstroid_halt_until_hblank_0_w )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static MACHINE_START( blstroid )
|
||||||
|
{
|
||||||
|
atarigen_init(machine);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_RESET( blstroid )
|
static MACHINE_RESET( blstroid )
|
||||||
{
|
{
|
||||||
blstroid_state *state = (blstroid_state *)machine->driver_data;
|
blstroid_state *state = (blstroid_state *)machine->driver_data;
|
||||||
@ -202,6 +208,7 @@ static MACHINE_DRIVER_START( blstroid )
|
|||||||
MDRV_CPU_PROGRAM_MAP(main_map)
|
MDRV_CPU_PROGRAM_MAP(main_map)
|
||||||
MDRV_CPU_VBLANK_INT("screen", atarigen_video_int_gen)
|
MDRV_CPU_VBLANK_INT("screen", atarigen_video_int_gen)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(blstroid)
|
||||||
MDRV_MACHINE_RESET(blstroid)
|
MDRV_MACHINE_RESET(blstroid)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
|
|
||||||
|
@ -43,6 +43,20 @@ static void update_interrupts(running_machine *machine)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static MACHINE_START( cyberbal )
|
||||||
|
{
|
||||||
|
cyberbal_state *state = (cyberbal_state *)machine->driver_data;
|
||||||
|
atarigen_init(machine);
|
||||||
|
|
||||||
|
state_save_register_global(machine, state->fast_68k_int);
|
||||||
|
state_save_register_global(machine, state->io_68k_int);
|
||||||
|
state_save_register_global(machine, state->sound_data_from_68k);
|
||||||
|
state_save_register_global(machine, state->sound_data_from_6502);
|
||||||
|
state_save_register_global(machine, state->sound_data_from_68k_ready);
|
||||||
|
state_save_register_global(machine, state->sound_data_from_6502_ready);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_RESET( cyberbal )
|
static MACHINE_RESET( cyberbal )
|
||||||
{
|
{
|
||||||
cyberbal_state *state = (cyberbal_state *)machine->driver_data;
|
cyberbal_state *state = (cyberbal_state *)machine->driver_data;
|
||||||
@ -436,6 +450,7 @@ static MACHINE_DRIVER_START( cyberbal )
|
|||||||
|
|
||||||
MDRV_QUANTUM_TIME(HZ(600))
|
MDRV_QUANTUM_TIME(HZ(600))
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(cyberbal)
|
||||||
MDRV_MACHINE_RESET(cyberbal)
|
MDRV_MACHINE_RESET(cyberbal)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
|
|
||||||
@ -483,6 +498,7 @@ static MACHINE_DRIVER_START( cyberb2p )
|
|||||||
MDRV_CPU_PROGRAM_MAP(cyberb2p_map)
|
MDRV_CPU_PROGRAM_MAP(cyberb2p_map)
|
||||||
MDRV_CPU_VBLANK_INT("screen", atarigen_video_int_gen)
|
MDRV_CPU_VBLANK_INT("screen", atarigen_video_int_gen)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(cyberbal)
|
||||||
MDRV_MACHINE_RESET(cyberb2p)
|
MDRV_MACHINE_RESET(cyberb2p)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
|
|
||||||
|
@ -49,7 +49,13 @@ static void update_interrupts(running_machine *machine)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_RESET( klaxp )
|
static MACHINE_START( eprom )
|
||||||
|
{
|
||||||
|
atarigen_init(machine);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static MACHINE_RESET( eprom )
|
||||||
{
|
{
|
||||||
eprom_state *state = (eprom_state *)machine->driver_data;
|
eprom_state *state = (eprom_state *)machine->driver_data;
|
||||||
|
|
||||||
@ -57,15 +63,6 @@ static MACHINE_RESET( klaxp )
|
|||||||
atarigen_interrupt_reset(&state->atarigen, update_interrupts);
|
atarigen_interrupt_reset(&state->atarigen, update_interrupts);
|
||||||
atarigen_scanline_timer_reset(machine->primary_screen, eprom_scanline_update, 8);
|
atarigen_scanline_timer_reset(machine->primary_screen, eprom_scanline_update, 8);
|
||||||
atarijsa_reset();
|
atarijsa_reset();
|
||||||
atarigen_init_save_state(machine);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_RESET( eprom )
|
|
||||||
{
|
|
||||||
eprom_state *state = (eprom_state *)machine->driver_data;
|
|
||||||
MACHINE_RESET_CALL(klaxp);
|
|
||||||
state_save_register_global_pointer(machine, state->sync_data, 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -422,6 +419,7 @@ static MACHINE_DRIVER_START( eprom )
|
|||||||
|
|
||||||
MDRV_QUANTUM_TIME(HZ(6000))
|
MDRV_QUANTUM_TIME(HZ(6000))
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(eprom)
|
||||||
MDRV_MACHINE_RESET(eprom)
|
MDRV_MACHINE_RESET(eprom)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
|
|
||||||
@ -454,7 +452,8 @@ static MACHINE_DRIVER_START( klaxp )
|
|||||||
|
|
||||||
MDRV_QUANTUM_TIME(HZ(600))
|
MDRV_QUANTUM_TIME(HZ(600))
|
||||||
|
|
||||||
MDRV_MACHINE_RESET(klaxp)
|
MDRV_MACHINE_START(eprom)
|
||||||
|
MDRV_MACHINE_RESET(eprom)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
@ -486,6 +485,7 @@ static MACHINE_DRIVER_START( guts )
|
|||||||
|
|
||||||
MDRV_QUANTUM_TIME(HZ(600))
|
MDRV_QUANTUM_TIME(HZ(600))
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(eprom)
|
||||||
MDRV_MACHINE_RESET(eprom)
|
MDRV_MACHINE_RESET(eprom)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
|
|
||||||
|
@ -111,9 +111,8 @@ static void update_interrupts(running_machine *machine)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static TIMER_CALLBACK( scanline_update )
|
static TIMER_DEVICE_CALLBACK( scanline_update )
|
||||||
{
|
{
|
||||||
foodf_state *state = (foodf_state *)machine->driver_data;
|
|
||||||
int scanline = param;
|
int scanline = param;
|
||||||
|
|
||||||
/* WARNING: the timing of this is not perfectly accurate; it should fire on
|
/* WARNING: the timing of this is not perfectly accurate; it should fire on
|
||||||
@ -122,7 +121,7 @@ static TIMER_CALLBACK( scanline_update )
|
|||||||
mystery yet */
|
mystery yet */
|
||||||
|
|
||||||
/* INT 1 is on 32V */
|
/* INT 1 is on 32V */
|
||||||
atarigen_scanline_int_gen(cputag_get_cpu(machine, "maincpu"));
|
atarigen_scanline_int_gen(cputag_get_cpu(timer->machine, "maincpu"));
|
||||||
|
|
||||||
/* advance to the next interrupt */
|
/* advance to the next interrupt */
|
||||||
scanline += 64;
|
scanline += 64;
|
||||||
@ -130,15 +129,15 @@ static TIMER_CALLBACK( scanline_update )
|
|||||||
scanline = 0;
|
scanline = 0;
|
||||||
|
|
||||||
/* set a timer for it */
|
/* set a timer for it */
|
||||||
timer_adjust_oneshot(state->scanline_timer, video_screen_get_time_until_pos(machine->primary_screen, scanline, 0), scanline);
|
timer_device_adjust_oneshot(timer, video_screen_get_time_until_pos(timer->machine->primary_screen, scanline, 0), scanline);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_START( foodf )
|
static MACHINE_START( foodf )
|
||||||
{
|
{
|
||||||
foodf_state *state = (foodf_state *)machine->driver_data;
|
foodf_state *state = (foodf_state *)machine->driver_data;
|
||||||
|
atarigen_init(machine);
|
||||||
state_save_register_global(machine, state->whichport);
|
state_save_register_global(machine, state->whichport);
|
||||||
state->scanline_timer = timer_alloc(machine, scanline_update, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -146,7 +145,7 @@ static MACHINE_RESET( foodf )
|
|||||||
{
|
{
|
||||||
foodf_state *state = (foodf_state *)machine->driver_data;
|
foodf_state *state = (foodf_state *)machine->driver_data;
|
||||||
atarigen_interrupt_reset(&state->atarigen, update_interrupts);
|
atarigen_interrupt_reset(&state->atarigen, update_interrupts);
|
||||||
timer_adjust_oneshot(state->scanline_timer, video_screen_get_time_until_pos(machine->primary_screen, 0, 0), 0);
|
timer_device_adjust_oneshot(devtag_get_device(machine, "scan_timer"), video_screen_get_time_until_pos(machine->primary_screen, 0, 0), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -365,6 +364,8 @@ static MACHINE_DRIVER_START( foodf )
|
|||||||
MDRV_MACHINE_RESET(foodf)
|
MDRV_MACHINE_RESET(foodf)
|
||||||
MDRV_NVRAM_HANDLER(generic_1fill)
|
MDRV_NVRAM_HANDLER(generic_1fill)
|
||||||
MDRV_WATCHDOG_VBLANK_INIT(8)
|
MDRV_WATCHDOG_VBLANK_INIT(8)
|
||||||
|
|
||||||
|
MDRV_TIMER_ADD("scan_timer", scanline_update)
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MDRV_GFXDECODE(foodf)
|
MDRV_GFXDECODE(foodf)
|
||||||
|
@ -128,15 +128,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
|
||||||
*
|
|
||||||
* Statics
|
|
||||||
*
|
|
||||||
*************************************/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
*
|
*
|
||||||
* Initialization & interrupts
|
* Initialization & interrupts
|
||||||
@ -163,6 +154,15 @@ static void scanline_update(const device_config *screen, int scanline)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static MACHINE_START( gauntlet )
|
||||||
|
{
|
||||||
|
gauntlet_state *state = (gauntlet_state *)machine->driver_data;
|
||||||
|
atarigen_init(machine);
|
||||||
|
|
||||||
|
state_save_register_global(machine, state->sound_reset_val);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_RESET( gauntlet )
|
static MACHINE_RESET( gauntlet )
|
||||||
{
|
{
|
||||||
gauntlet_state *state = (gauntlet_state *)machine->driver_data;
|
gauntlet_state *state = (gauntlet_state *)machine->driver_data;
|
||||||
@ -514,6 +514,7 @@ static MACHINE_DRIVER_START( gauntlet )
|
|||||||
MDRV_CPU_ADD("audiocpu", M6502, ATARI_CLOCK_14MHz/8)
|
MDRV_CPU_ADD("audiocpu", M6502, ATARI_CLOCK_14MHz/8)
|
||||||
MDRV_CPU_PROGRAM_MAP(sound_map)
|
MDRV_CPU_PROGRAM_MAP(sound_map)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(gauntlet)
|
||||||
MDRV_MACHINE_RESET(gauntlet)
|
MDRV_MACHINE_RESET(gauntlet)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
|
|
||||||
|
@ -59,6 +59,12 @@ static WRITE16_HANDLER( interrupt_ack_w )
|
|||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
|
static MACHINE_START( klax )
|
||||||
|
{
|
||||||
|
atarigen_init(machine);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_RESET( klax )
|
static MACHINE_RESET( klax )
|
||||||
{
|
{
|
||||||
klax_state *state = (klax_state *)machine->driver_data;
|
klax_state *state = (klax_state *)machine->driver_data;
|
||||||
@ -94,6 +100,7 @@ static ADDRESS_MAP_START( klax_map, ADDRESS_SPACE_PROGRAM, 16 )
|
|||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
*
|
*
|
||||||
* Port definitions
|
* Port definitions
|
||||||
@ -165,6 +172,7 @@ static MACHINE_DRIVER_START( klax )
|
|||||||
MDRV_CPU_PROGRAM_MAP(klax_map)
|
MDRV_CPU_PROGRAM_MAP(klax_map)
|
||||||
MDRV_CPU_VBLANK_INT("screen", atarigen_video_int_gen)
|
MDRV_CPU_VBLANK_INT("screen", atarigen_video_int_gen)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(klax)
|
||||||
MDRV_MACHINE_RESET(klax)
|
MDRV_MACHINE_RESET(klax)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
|
|
||||||
|
@ -45,6 +45,12 @@ static void update_interrupts(running_machine *machine)
|
|||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
|
static MACHINE_START( offtwall )
|
||||||
|
{
|
||||||
|
atarigen_init(machine);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_RESET( offtwall )
|
static MACHINE_RESET( offtwall )
|
||||||
{
|
{
|
||||||
offtwall_state *state = (offtwall_state *)machine->driver_data;
|
offtwall_state *state = (offtwall_state *)machine->driver_data;
|
||||||
@ -404,6 +410,7 @@ static MACHINE_DRIVER_START( offtwall )
|
|||||||
MDRV_CPU_ADD("maincpu", M68000, ATARI_CLOCK_14MHz/2)
|
MDRV_CPU_ADD("maincpu", M68000, ATARI_CLOCK_14MHz/2)
|
||||||
MDRV_CPU_PROGRAM_MAP(main_map)
|
MDRV_CPU_PROGRAM_MAP(main_map)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(offtwall)
|
||||||
MDRV_MACHINE_RESET(offtwall)
|
MDRV_MACHINE_RESET(offtwall)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
|
|
||||||
|
@ -60,6 +60,12 @@ static void scanline_update(const device_config *screen, int scanline)
|
|||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
|
static MACHINE_START( rampart )
|
||||||
|
{
|
||||||
|
atarigen_init(machine);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_RESET( rampart )
|
static MACHINE_RESET( rampart )
|
||||||
{
|
{
|
||||||
rampart_state *state = (rampart_state *)machine->driver_data;
|
rampart_state *state = (rampart_state *)machine->driver_data;
|
||||||
@ -343,6 +349,7 @@ static MACHINE_DRIVER_START( rampart )
|
|||||||
MDRV_CPU_PROGRAM_MAP(main_map)
|
MDRV_CPU_PROGRAM_MAP(main_map)
|
||||||
MDRV_CPU_VBLANK_INT("screen", atarigen_video_int_gen)
|
MDRV_CPU_VBLANK_INT("screen", atarigen_video_int_gen)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(rampart)
|
||||||
MDRV_MACHINE_RESET(rampart)
|
MDRV_MACHINE_RESET(rampart)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
MDRV_WATCHDOG_VBLANK_INIT(8)
|
MDRV_WATCHDOG_VBLANK_INIT(8)
|
||||||
|
@ -64,6 +64,12 @@ static WRITE16_HANDLER( relief_atarivc_w )
|
|||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
|
static MACHINE_START( relief )
|
||||||
|
{
|
||||||
|
atarigen_init(machine);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_RESET( relief )
|
static MACHINE_RESET( relief )
|
||||||
{
|
{
|
||||||
relief_state *state = (relief_state *)machine->driver_data;
|
relief_state *state = (relief_state *)machine->driver_data;
|
||||||
@ -293,6 +299,7 @@ static MACHINE_DRIVER_START( relief )
|
|||||||
MDRV_CPU_ADD("maincpu", M68000, ATARI_CLOCK_14MHz/2)
|
MDRV_CPU_ADD("maincpu", M68000, ATARI_CLOCK_14MHz/2)
|
||||||
MDRV_CPU_PROGRAM_MAP(main_map)
|
MDRV_CPU_PROGRAM_MAP(main_map)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(relief)
|
||||||
MDRV_MACHINE_RESET(relief)
|
MDRV_MACHINE_RESET(relief)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
|
|
||||||
|
@ -63,6 +63,12 @@ static WRITE16_HANDLER( shuuz_atarivc_w )
|
|||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
|
static MACHINE_START( shuuz )
|
||||||
|
{
|
||||||
|
atarigen_init(machine);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_RESET( shuuz )
|
static MACHINE_RESET( shuuz )
|
||||||
{
|
{
|
||||||
shuuz_state *state = (shuuz_state *)machine->driver_data;
|
shuuz_state *state = (shuuz_state *)machine->driver_data;
|
||||||
@ -259,6 +265,7 @@ static MACHINE_DRIVER_START( shuuz )
|
|||||||
MDRV_CPU_ADD("maincpu", M68000, ATARI_CLOCK_14MHz/2)
|
MDRV_CPU_ADD("maincpu", M68000, ATARI_CLOCK_14MHz/2)
|
||||||
MDRV_CPU_PROGRAM_MAP(main_map)
|
MDRV_CPU_PROGRAM_MAP(main_map)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(shuuz)
|
||||||
MDRV_MACHINE_RESET(shuuz)
|
MDRV_MACHINE_RESET(shuuz)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
|
|
||||||
|
@ -70,6 +70,12 @@ static WRITE16_HANDLER( skullxbo_halt_until_hblank_0_w )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static MACHINE_START( skullxbo )
|
||||||
|
{
|
||||||
|
atarigen_init(machine);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_RESET( skullxbo )
|
static MACHINE_RESET( skullxbo )
|
||||||
{
|
{
|
||||||
skullxbo_state *state = (skullxbo_state *)machine->driver_data;
|
skullxbo_state *state = (skullxbo_state *)machine->driver_data;
|
||||||
@ -255,6 +261,7 @@ static MACHINE_DRIVER_START( skullxbo )
|
|||||||
MDRV_CPU_PROGRAM_MAP(main_map)
|
MDRV_CPU_PROGRAM_MAP(main_map)
|
||||||
MDRV_CPU_VBLANK_INT("screen", atarigen_video_int_gen)
|
MDRV_CPU_VBLANK_INT("screen", atarigen_video_int_gen)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(skullxbo)
|
||||||
MDRV_MACHINE_RESET(skullxbo)
|
MDRV_MACHINE_RESET(skullxbo)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
|
|
||||||
|
@ -40,6 +40,15 @@ static void update_interrupts(running_machine *machine)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static MACHINE_START( thunderj )
|
||||||
|
{
|
||||||
|
thunderj_state *state = (thunderj_state *)machine->driver_data;
|
||||||
|
atarigen_init(machine);
|
||||||
|
|
||||||
|
state_save_register_global(machine, state->alpha_tile_bank);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_RESET( thunderj )
|
static MACHINE_RESET( thunderj )
|
||||||
{
|
{
|
||||||
thunderj_state *state = (thunderj_state *)machine->driver_data;
|
thunderj_state *state = (thunderj_state *)machine->driver_data;
|
||||||
@ -284,6 +293,7 @@ static MACHINE_DRIVER_START( thunderj )
|
|||||||
MDRV_CPU_ADD("extra", M68000, ATARI_CLOCK_14MHz/2)
|
MDRV_CPU_ADD("extra", M68000, ATARI_CLOCK_14MHz/2)
|
||||||
MDRV_CPU_PROGRAM_MAP(extra_map)
|
MDRV_CPU_PROGRAM_MAP(extra_map)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(thunderj)
|
||||||
MDRV_MACHINE_RESET(thunderj)
|
MDRV_MACHINE_RESET(thunderj)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
|
|
||||||
|
@ -42,6 +42,12 @@ static void update_interrupts(running_machine *machine)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static MACHINE_START( toobin )
|
||||||
|
{
|
||||||
|
atarigen_init(machine);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_RESET( toobin )
|
static MACHINE_RESET( toobin )
|
||||||
{
|
{
|
||||||
toobin_state *state = (toobin_state *)machine->driver_data;
|
toobin_state *state = (toobin_state *)machine->driver_data;
|
||||||
@ -224,6 +230,7 @@ static MACHINE_DRIVER_START( toobin )
|
|||||||
MDRV_CPU_ADD("maincpu", M68010, MASTER_CLOCK/4)
|
MDRV_CPU_ADD("maincpu", M68010, MASTER_CLOCK/4)
|
||||||
MDRV_CPU_PROGRAM_MAP(main_map)
|
MDRV_CPU_PROGRAM_MAP(main_map)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(toobin)
|
||||||
MDRV_MACHINE_RESET(toobin)
|
MDRV_MACHINE_RESET(toobin)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
MDRV_WATCHDOG_VBLANK_INIT(8)
|
MDRV_WATCHDOG_VBLANK_INIT(8)
|
||||||
|
@ -38,6 +38,12 @@ static void update_interrupts(running_machine *machine)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static MACHINE_START( vindictr )
|
||||||
|
{
|
||||||
|
atarigen_init(machine);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_RESET( vindictr )
|
static MACHINE_RESET( vindictr )
|
||||||
{
|
{
|
||||||
vindictr_state *state = (vindictr_state *)machine->driver_data;
|
vindictr_state *state = (vindictr_state *)machine->driver_data;
|
||||||
@ -194,6 +200,7 @@ static MACHINE_DRIVER_START( vindictr )
|
|||||||
MDRV_CPU_ADD("maincpu", M68010, ATARI_CLOCK_14MHz/2)
|
MDRV_CPU_ADD("maincpu", M68010, ATARI_CLOCK_14MHz/2)
|
||||||
MDRV_CPU_PROGRAM_MAP(main_map)
|
MDRV_CPU_PROGRAM_MAP(main_map)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(vindictr)
|
||||||
MDRV_MACHINE_RESET(vindictr)
|
MDRV_MACHINE_RESET(vindictr)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
|
|
||||||
|
@ -39,6 +39,12 @@ static void update_interrupts(running_machine *machine)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static MACHINE_START( xybots )
|
||||||
|
{
|
||||||
|
atarigen_init(machine);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_RESET( xybots )
|
static MACHINE_RESET( xybots )
|
||||||
{
|
{
|
||||||
xybots_state *state = (xybots_state *)machine->driver_data;
|
xybots_state *state = (xybots_state *)machine->driver_data;
|
||||||
@ -193,6 +199,7 @@ static MACHINE_DRIVER_START( xybots )
|
|||||||
MDRV_CPU_PROGRAM_MAP(main_map)
|
MDRV_CPU_PROGRAM_MAP(main_map)
|
||||||
MDRV_CPU_VBLANK_INT("screen", atarigen_video_int_gen)
|
MDRV_CPU_VBLANK_INT("screen", atarigen_video_int_gen)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(xybots)
|
||||||
MDRV_MACHINE_RESET(xybots)
|
MDRV_MACHINE_RESET(xybots)
|
||||||
MDRV_NVRAM_HANDLER(atarigen)
|
MDRV_NVRAM_HANDLER(atarigen)
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ struct _atarisy1_state
|
|||||||
UINT8 joystick_type;
|
UINT8 joystick_type;
|
||||||
UINT8 trackball_type;
|
UINT8 trackball_type;
|
||||||
|
|
||||||
emu_timer * joystick_timer;
|
const device_config *joystick_timer;
|
||||||
UINT8 joystick_int;
|
UINT8 joystick_int;
|
||||||
UINT8 joystick_int_enable;
|
UINT8 joystick_int_enable;
|
||||||
UINT8 joystick_value;
|
UINT8 joystick_value;
|
||||||
@ -29,12 +29,12 @@ struct _atarisy1_state
|
|||||||
UINT16 playfield_lookup[256];
|
UINT16 playfield_lookup[256];
|
||||||
UINT8 playfield_tile_bank;
|
UINT8 playfield_tile_bank;
|
||||||
UINT16 playfield_priority_pens;
|
UINT16 playfield_priority_pens;
|
||||||
emu_timer * yscroll_reset_timer;
|
const device_config *yscroll_reset_timer;
|
||||||
|
|
||||||
/* INT3 tracking */
|
/* INT3 tracking */
|
||||||
int next_timer_scanline;
|
int next_timer_scanline;
|
||||||
emu_timer * scanline_timer;
|
const device_config *scanline_timer;
|
||||||
emu_timer * int3off_timer;
|
const device_config *int3off_timer;
|
||||||
|
|
||||||
/* graphics bank tracking */
|
/* graphics bank tracking */
|
||||||
UINT8 bank_gfx[3][8];
|
UINT8 bank_gfx[3][8];
|
||||||
@ -44,6 +44,10 @@ struct _atarisy1_state
|
|||||||
|
|
||||||
/*----------- defined in video/atarisy1.c -----------*/
|
/*----------- defined in video/atarisy1.c -----------*/
|
||||||
|
|
||||||
|
TIMER_DEVICE_CALLBACK( atarisy1_int3_callback );
|
||||||
|
TIMER_DEVICE_CALLBACK( atarisy1_int3off_callback );
|
||||||
|
TIMER_DEVICE_CALLBACK( atarisy1_reset_yscroll_callback );
|
||||||
|
|
||||||
READ16_HANDLER( atarisy1_int3state_r );
|
READ16_HANDLER( atarisy1_int3state_r );
|
||||||
|
|
||||||
WRITE16_HANDLER( atarisy1_spriteram_w );
|
WRITE16_HANDLER( atarisy1_spriteram_w );
|
||||||
|
@ -13,6 +13,13 @@ struct _beathead_state
|
|||||||
|
|
||||||
UINT32 * vram_bulk_latch;
|
UINT32 * vram_bulk_latch;
|
||||||
UINT32 * palette_select;
|
UINT32 * palette_select;
|
||||||
|
|
||||||
|
UINT32 finescroll;
|
||||||
|
offs_t vram_latch_offset;
|
||||||
|
|
||||||
|
offs_t hsyncram_offset;
|
||||||
|
offs_t hsyncram_start;
|
||||||
|
UINT8 hsyncram[0x800];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,7 +16,6 @@ struct _foodf_state
|
|||||||
double bweights[2];
|
double bweights[2];
|
||||||
UINT8 playfield_flip;
|
UINT8 playfield_flip;
|
||||||
|
|
||||||
emu_timer * scanline_timer;
|
|
||||||
UINT8 whichport;
|
UINT8 whichport;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ struct _xybots_state
|
|||||||
{
|
{
|
||||||
atarigen_state atarigen;
|
atarigen_state atarigen;
|
||||||
|
|
||||||
int h256;
|
UINT16 h256;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,6 +32,8 @@
|
|||||||
STATIC FUNCTION DECLARATIONS
|
STATIC FUNCTION DECLARATIONS
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
static STATE_POSTLOAD( slapstic_postload );
|
||||||
|
|
||||||
static TIMER_CALLBACK( scanline_interrupt_callback );
|
static TIMER_CALLBACK( scanline_interrupt_callback );
|
||||||
|
|
||||||
static void decompress_eeprom_word(UINT16 *dest, const UINT16 *data);
|
static void decompress_eeprom_word(UINT16 *dest, const UINT16 *data);
|
||||||
@ -54,6 +56,92 @@ static TIMER_CALLBACK( atarivc_eof_update );
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
INLINE FUNCTIONS
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
INLINE const atarigen_screen_timer *get_screen_timer(const device_config *screen)
|
||||||
|
{
|
||||||
|
atarigen_state *state = (atarigen_state *)screen->machine->driver_data;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* find the index of the timer that matches the screen */
|
||||||
|
for (i = 0; i < ARRAY_LENGTH(state->screen_timer); i++)
|
||||||
|
if (state->screen_timer[i].screen == screen)
|
||||||
|
return &state->screen_timer[i];
|
||||||
|
|
||||||
|
fatalerror("Unexpected: no atarivc_eof_update_timer for screen '%s'\n", screen->tag);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
OVERALL INIT
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
void atarigen_init(running_machine *machine)
|
||||||
|
{
|
||||||
|
atarigen_state *state = (atarigen_state *)machine->driver_data;
|
||||||
|
const device_config *screen;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* allocate timers for all screens */
|
||||||
|
assert(video_screen_count(machine->config) <= ARRAY_LENGTH(state->screen_timer));
|
||||||
|
for (i = 0, screen = video_screen_first(machine->config); screen != NULL; i++, screen = video_screen_next(screen))
|
||||||
|
{
|
||||||
|
state->screen_timer[i].screen = screen;
|
||||||
|
state->screen_timer[i].scanline_interrupt_timer = timer_alloc(machine, scanline_interrupt_callback, (void *)screen);
|
||||||
|
state->screen_timer[i].scanline_timer = timer_alloc(machine, scanline_timer_callback, (void *)screen);
|
||||||
|
state->screen_timer[i].atarivc_eof_update_timer = timer_alloc(machine, atarivc_eof_update, (void *)screen);
|
||||||
|
}
|
||||||
|
|
||||||
|
state_save_register_global(machine, state->scanline_int_state);
|
||||||
|
state_save_register_global(machine, state->sound_int_state);
|
||||||
|
state_save_register_global(machine, state->video_int_state);
|
||||||
|
|
||||||
|
state_save_register_global(machine, state->cpu_to_sound_ready);
|
||||||
|
state_save_register_global(machine, state->sound_to_cpu_ready);
|
||||||
|
|
||||||
|
state_save_register_global(machine, state->atarivc_state.latch1); /* latch #1 value (-1 means disabled) */
|
||||||
|
state_save_register_global(machine, state->atarivc_state.latch2); /* latch #2 value (-1 means disabled) */
|
||||||
|
state_save_register_global(machine, state->atarivc_state.rowscroll_enable); /* true if row-scrolling is enabled */
|
||||||
|
state_save_register_global(machine, state->atarivc_state.palette_bank); /* which palette bank is enabled */
|
||||||
|
state_save_register_global(machine, state->atarivc_state.pf0_xscroll); /* playfield 1 xscroll */
|
||||||
|
state_save_register_global(machine, state->atarivc_state.pf0_xscroll_raw); /* playfield 1 xscroll raw value */
|
||||||
|
state_save_register_global(machine, state->atarivc_state.pf0_yscroll); /* playfield 1 yscroll */
|
||||||
|
state_save_register_global(machine, state->atarivc_state.pf1_xscroll); /* playfield 2 xscroll */
|
||||||
|
state_save_register_global(machine, state->atarivc_state.pf1_xscroll_raw); /* playfield 2 xscroll raw value */
|
||||||
|
state_save_register_global(machine, state->atarivc_state.pf1_yscroll); /* playfield 2 yscroll */
|
||||||
|
state_save_register_global(machine, state->atarivc_state.mo_xscroll); /* sprite xscroll */
|
||||||
|
state_save_register_global(machine, state->atarivc_state.mo_yscroll); /* sprite xscroll */
|
||||||
|
|
||||||
|
state_save_register_global(machine, state->eeprom_unlocked);
|
||||||
|
|
||||||
|
state_save_register_global(machine, state->slapstic_num);
|
||||||
|
state_save_register_global(machine, state->slapstic_bank);
|
||||||
|
state_save_register_global(machine, state->slapstic_last_pc);
|
||||||
|
state_save_register_global(machine, state->slapstic_last_address);
|
||||||
|
|
||||||
|
state_save_register_global(machine, state->cpu_to_sound);
|
||||||
|
state_save_register_global(machine, state->sound_to_cpu);
|
||||||
|
state_save_register_global(machine, state->timed_int);
|
||||||
|
state_save_register_global(machine, state->ym2151_int);
|
||||||
|
|
||||||
|
state_save_register_global(machine, state->scanlines_per_callback);
|
||||||
|
|
||||||
|
state_save_register_global(machine, state->actual_vc_latch0);
|
||||||
|
state_save_register_global(machine, state->actual_vc_latch1);
|
||||||
|
|
||||||
|
state_save_register_global(machine, state->playfield_latch);
|
||||||
|
state_save_register_global(machine, state->playfield2_latch);
|
||||||
|
|
||||||
|
/* need a postload to reset the state */
|
||||||
|
state_save_register_postload(machine, slapstic_postload, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
INTERRUPT HANDLING
|
INTERRUPT HANDLING
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
@ -65,22 +153,11 @@ static TIMER_CALLBACK( atarivc_eof_update );
|
|||||||
|
|
||||||
void atarigen_interrupt_reset(atarigen_state *state, atarigen_int_func update_int)
|
void atarigen_interrupt_reset(atarigen_state *state, atarigen_int_func update_int)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
|
|
||||||
/* set the callback */
|
/* set the callback */
|
||||||
state->update_int_callback = update_int;
|
state->update_int_callback = update_int;
|
||||||
|
|
||||||
/* reset the interrupt states */
|
/* reset the interrupt states */
|
||||||
state->video_int_state = state->sound_int_state = state->scanline_int_state = 0;
|
state->video_int_state = state->sound_int_state = state->scanline_int_state = 0;
|
||||||
|
|
||||||
/* clear the timers */
|
|
||||||
for (i = 0; i < ATARIMO_MAX; i++)
|
|
||||||
{
|
|
||||||
state->scanline_interrupt_timer_screens[i] = NULL;
|
|
||||||
state->scanline_interrupt_timers[i] = NULL;
|
|
||||||
state->scanline_timer_screens[i] = NULL;
|
|
||||||
state->scanline_timers[i] = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -97,43 +174,6 @@ void atarigen_update_interrupts(running_machine *machine)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------
|
|
||||||
get_scanline_interrupt_timer_for_screen: Retrieves or
|
|
||||||
creates a scanline interrupt timer.
|
|
||||||
---------------------------------------------------------------*/
|
|
||||||
|
|
||||||
static emu_timer *get_scanline_interrupt_timer_for_screen(const device_config *screen)
|
|
||||||
{
|
|
||||||
atarigen_state *state = (atarigen_state *)screen->machine->driver_data;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
/* find the index of the timer that matches the screen */
|
|
||||||
for (i = 0; i < ATARIMO_MAX; i++)
|
|
||||||
{
|
|
||||||
/* matching */
|
|
||||||
if (state->scanline_interrupt_timer_screens[i] == screen)
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* no more */
|
|
||||||
if (state->scanline_interrupt_timer_screens[i] == NULL)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* check that we still have room */
|
|
||||||
assert(i != ATARIMO_MAX);
|
|
||||||
|
|
||||||
/* need to create? */
|
|
||||||
if (state->scanline_interrupt_timer_screens[i] == NULL)
|
|
||||||
{
|
|
||||||
state->scanline_interrupt_timer_screens[i] = screen;
|
|
||||||
state->scanline_interrupt_timers[i] = timer_alloc(screen->machine, scanline_interrupt_callback, (void *)screen);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* found it */
|
|
||||||
return state->scanline_interrupt_timers[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------
|
/*---------------------------------------------------------------
|
||||||
atarigen_scanline_int_set: Sets the scanline when the next
|
atarigen_scanline_int_set: Sets the scanline when the next
|
||||||
scanline interrupt should be generated.
|
scanline interrupt should be generated.
|
||||||
@ -141,7 +181,7 @@ static emu_timer *get_scanline_interrupt_timer_for_screen(const device_config *s
|
|||||||
|
|
||||||
void atarigen_scanline_int_set(const device_config *screen, int scanline)
|
void atarigen_scanline_int_set(const device_config *screen, int scanline)
|
||||||
{
|
{
|
||||||
emu_timer *timer = get_scanline_interrupt_timer_for_screen(screen);
|
emu_timer *timer = get_screen_timer(screen)->scanline_interrupt_timer;
|
||||||
timer_adjust_oneshot(timer, video_screen_get_time_until_pos(screen, scanline, 0), 0);
|
timer_adjust_oneshot(timer, video_screen_get_time_until_pos(screen, scanline, 0), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -252,7 +292,7 @@ WRITE32_HANDLER( atarigen_video_int_ack32_w )
|
|||||||
static TIMER_CALLBACK( scanline_interrupt_callback )
|
static TIMER_CALLBACK( scanline_interrupt_callback )
|
||||||
{
|
{
|
||||||
const device_config *screen = (const device_config *)ptr;
|
const device_config *screen = (const device_config *)ptr;
|
||||||
emu_timer *timer = get_scanline_interrupt_timer_for_screen(screen);
|
emu_timer *timer = get_screen_timer(screen)->scanline_interrupt_timer;
|
||||||
|
|
||||||
/* generate the interrupt */
|
/* generate the interrupt */
|
||||||
atarigen_scanline_int_gen(cputag_get_cpu(machine, "maincpu"));
|
atarigen_scanline_int_gen(cputag_get_cpu(machine, "maincpu"));
|
||||||
@ -879,43 +919,6 @@ void atarigen_set_oki6295_vol(running_machine *machine, int volume)
|
|||||||
SCANLINE TIMING
|
SCANLINE TIMING
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
/*---------------------------------------------------------------
|
|
||||||
get_scanline_timer_for_screen: Retrieves or
|
|
||||||
creates the the scanline timer.
|
|
||||||
---------------------------------------------------------------*/
|
|
||||||
|
|
||||||
static emu_timer *get_scanline_timer_for_screen(const device_config *screen)
|
|
||||||
{
|
|
||||||
atarigen_state *state = (atarigen_state *)screen->machine->driver_data;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
/* find the index of the timer that matches the screen */
|
|
||||||
for (i = 0; i < ATARIMO_MAX; i++)
|
|
||||||
{
|
|
||||||
/* matching */
|
|
||||||
if (state->scanline_timer_screens[i] == screen)
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* no more */
|
|
||||||
if (state->scanline_timer_screens[i] == NULL)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* check that we still have room */
|
|
||||||
assert(i != ATARIMO_MAX);
|
|
||||||
|
|
||||||
/* need to create? */
|
|
||||||
if (state->scanline_timer_screens[i] == NULL)
|
|
||||||
{
|
|
||||||
state->scanline_timer_screens[i] = screen;
|
|
||||||
state->scanline_timers[i] = timer_alloc(screen->machine, scanline_timer_callback, (void *)screen);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* found it */
|
|
||||||
return state->scanline_timers[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------
|
/*---------------------------------------------------------------
|
||||||
atarigen_scanline_timer_reset: Sets up the scanline timer.
|
atarigen_scanline_timer_reset: Sets up the scanline timer.
|
||||||
---------------------------------------------------------------*/
|
---------------------------------------------------------------*/
|
||||||
@ -931,13 +934,9 @@ void atarigen_scanline_timer_reset(const device_config *screen, atarigen_scanlin
|
|||||||
/* set a timer to go off at scanline 0 */
|
/* set a timer to go off at scanline 0 */
|
||||||
if (state->scanline_callback != NULL)
|
if (state->scanline_callback != NULL)
|
||||||
{
|
{
|
||||||
emu_timer *timer = get_scanline_timer_for_screen(screen);
|
emu_timer *timer = get_screen_timer(screen)->scanline_timer;
|
||||||
timer_adjust_oneshot(timer, video_screen_get_time_until_pos(screen, 0, 0), 0);
|
timer_adjust_oneshot(timer, video_screen_get_time_until_pos(screen, 0, 0), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* implicitly allocate a scanline interrupt timer */
|
|
||||||
get_scanline_interrupt_timer_for_screen(screen);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -961,7 +960,7 @@ static TIMER_CALLBACK( scanline_timer_callback )
|
|||||||
scanline += state->scanlines_per_callback;
|
scanline += state->scanlines_per_callback;
|
||||||
if (scanline >= video_screen_get_height(screen))
|
if (scanline >= video_screen_get_height(screen))
|
||||||
scanline = 0;
|
scanline = 0;
|
||||||
timer_adjust_oneshot(get_scanline_timer_for_screen(screen), video_screen_get_time_until_pos(screen, scanline, 0), scanline);
|
timer_adjust_oneshot(get_screen_timer(screen)->scanline_timer, video_screen_get_time_until_pos(screen, scanline, 0), scanline);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -971,43 +970,6 @@ static TIMER_CALLBACK( scanline_timer_callback )
|
|||||||
VIDEO CONTROLLER
|
VIDEO CONTROLLER
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
/*---------------------------------------------------------------
|
|
||||||
get_scanline_timer_for_screen: Retrieves or
|
|
||||||
creates the the scanline timer.
|
|
||||||
---------------------------------------------------------------*/
|
|
||||||
|
|
||||||
static emu_timer *get_atarivc_eof_update_timer_for_screen(const device_config *screen)
|
|
||||||
{
|
|
||||||
atarigen_state *state = (atarigen_state *)screen->machine->driver_data;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
/* find the index of the timer that matches the screen */
|
|
||||||
for (i = 0; i < ATARIMO_MAX; i++)
|
|
||||||
{
|
|
||||||
/* matching */
|
|
||||||
if (state->atarivc_eof_update_timer_screens[i] == screen)
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* no more */
|
|
||||||
if (state->atarivc_eof_update_timer_screens[i] == NULL)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* check that we still have room */
|
|
||||||
assert(i != ATARIMO_MAX);
|
|
||||||
|
|
||||||
/* need to create? */
|
|
||||||
if (state->atarivc_eof_update_timer_screens[i] == NULL)
|
|
||||||
{
|
|
||||||
state->atarivc_eof_update_timer_screens[i] = screen;
|
|
||||||
state->atarivc_eof_update_timers[i] = timer_alloc(screen->machine, atarivc_eof_update, (void *)screen);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* found it */
|
|
||||||
return state->atarivc_eof_update_timers[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------
|
/*---------------------------------------------------------------
|
||||||
atarivc_eof_update: Callback that slurps up data and feeds
|
atarivc_eof_update: Callback that slurps up data and feeds
|
||||||
it into the video controller registers every refresh.
|
it into the video controller registers every refresh.
|
||||||
@ -1017,7 +979,7 @@ static TIMER_CALLBACK( atarivc_eof_update )
|
|||||||
{
|
{
|
||||||
atarigen_state *state = (atarigen_state *)machine->driver_data;
|
atarigen_state *state = (atarigen_state *)machine->driver_data;
|
||||||
const device_config *screen = (const device_config *)ptr;
|
const device_config *screen = (const device_config *)ptr;
|
||||||
emu_timer *timer = get_atarivc_eof_update_timer_for_screen(screen);
|
emu_timer *timer = get_screen_timer(screen)->atarivc_eof_update_timer;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* echo all the commands to the video controller */
|
/* echo all the commands to the video controller */
|
||||||
@ -1063,7 +1025,6 @@ static TIMER_CALLBACK( atarivc_eof_update )
|
|||||||
void atarivc_reset(const device_config *screen, UINT16 *eof_data, int playfields)
|
void atarivc_reset(const device_config *screen, UINT16 *eof_data, int playfields)
|
||||||
{
|
{
|
||||||
atarigen_state *state = (atarigen_state *)screen->machine->driver_data;
|
atarigen_state *state = (atarigen_state *)screen->machine->driver_data;
|
||||||
int i;
|
|
||||||
|
|
||||||
/* this allows us to manually reset eof_data to NULL if it's not used */
|
/* this allows us to manually reset eof_data to NULL if it's not used */
|
||||||
state->atarivc_eof_data = eof_data;
|
state->atarivc_eof_data = eof_data;
|
||||||
@ -1077,17 +1038,10 @@ void atarivc_reset(const device_config *screen, UINT16 *eof_data, int playfields
|
|||||||
state->atarivc_state.latch1 = state->atarivc_state.latch2 = -1;
|
state->atarivc_state.latch1 = state->atarivc_state.latch2 = -1;
|
||||||
state->actual_vc_latch0 = state->actual_vc_latch1 = -1;
|
state->actual_vc_latch0 = state->actual_vc_latch1 = -1;
|
||||||
|
|
||||||
/* clear the timers */
|
|
||||||
for (i = 0; i < ATARIMO_MAX; i++)
|
|
||||||
{
|
|
||||||
state->atarivc_eof_update_timer_screens[i] = NULL;
|
|
||||||
state->atarivc_eof_update_timers[i] = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* start a timer to go off a little before scanline 0 */
|
/* start a timer to go off a little before scanline 0 */
|
||||||
if (state->atarivc_eof_data)
|
if (state->atarivc_eof_data)
|
||||||
{
|
{
|
||||||
emu_timer *timer = get_atarivc_eof_update_timer_for_screen(screen);
|
emu_timer *timer = get_screen_timer(screen)->atarivc_eof_update_timer;
|
||||||
timer_adjust_oneshot(timer, video_screen_get_time_until_pos(screen, 0, 0), 0);
|
timer_adjust_oneshot(timer, video_screen_get_time_until_pos(screen, 0, 0), 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1637,56 +1591,3 @@ void atarigen_blend_gfx(running_machine *machine, int gfx0, int gfx1, int mask0,
|
|||||||
/* make the assembled data our new source data */
|
/* make the assembled data our new source data */
|
||||||
gfx_element_set_source(gx0, srcdata);
|
gfx_element_set_source(gx0, srcdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
SAVE STATE
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
void atarigen_init_save_state(running_machine *machine)
|
|
||||||
{
|
|
||||||
atarigen_state *state = (atarigen_state *)machine->driver_data;
|
|
||||||
|
|
||||||
state_save_register_global(machine, state->scanline_int_state);
|
|
||||||
state_save_register_global(machine, state->sound_int_state);
|
|
||||||
state_save_register_global(machine, state->video_int_state);
|
|
||||||
|
|
||||||
state_save_register_global(machine, state->cpu_to_sound_ready);
|
|
||||||
state_save_register_global(machine, state->sound_to_cpu_ready);
|
|
||||||
|
|
||||||
state_save_register_global(machine, state->atarivc_state.latch1); /* latch #1 value (-1 means disabled) */
|
|
||||||
state_save_register_global(machine, state->atarivc_state.latch2); /* latch #2 value (-1 means disabled) */
|
|
||||||
state_save_register_global(machine, state->atarivc_state.rowscroll_enable); /* true if row-scrolling is enabled */
|
|
||||||
state_save_register_global(machine, state->atarivc_state.palette_bank); /* which palette bank is enabled */
|
|
||||||
state_save_register_global(machine, state->atarivc_state.pf0_xscroll); /* playfield 1 xscroll */
|
|
||||||
state_save_register_global(machine, state->atarivc_state.pf0_xscroll_raw); /* playfield 1 xscroll raw value */
|
|
||||||
state_save_register_global(machine, state->atarivc_state.pf0_yscroll); /* playfield 1 yscroll */
|
|
||||||
state_save_register_global(machine, state->atarivc_state.pf1_xscroll); /* playfield 2 xscroll */
|
|
||||||
state_save_register_global(machine, state->atarivc_state.pf1_xscroll_raw); /* playfield 2 xscroll raw value */
|
|
||||||
state_save_register_global(machine, state->atarivc_state.pf1_yscroll); /* playfield 2 yscroll */
|
|
||||||
state_save_register_global(machine, state->atarivc_state.mo_xscroll); /* sprite xscroll */
|
|
||||||
state_save_register_global(machine, state->atarivc_state.mo_yscroll); /* sprite xscroll */
|
|
||||||
|
|
||||||
state_save_register_global(machine, state->eeprom_unlocked);
|
|
||||||
|
|
||||||
state_save_register_global(machine, state->slapstic_num);
|
|
||||||
state_save_register_global(machine, state->slapstic_bank);
|
|
||||||
state_save_register_global(machine, state->slapstic_last_pc);
|
|
||||||
state_save_register_global(machine, state->slapstic_last_address);
|
|
||||||
|
|
||||||
state_save_register_global(machine, state->cpu_to_sound);
|
|
||||||
state_save_register_global(machine, state->sound_to_cpu);
|
|
||||||
state_save_register_global(machine, state->timed_int);
|
|
||||||
state_save_register_global(machine, state->ym2151_int);
|
|
||||||
|
|
||||||
state_save_register_global(machine, state->scanlines_per_callback);
|
|
||||||
|
|
||||||
state_save_register_global(machine, state->actual_vc_latch0);
|
|
||||||
state_save_register_global(machine, state->actual_vc_latch1);
|
|
||||||
|
|
||||||
state_save_register_global(machine, state->playfield_latch);
|
|
||||||
state_save_register_global(machine, state->playfield2_latch);
|
|
||||||
|
|
||||||
/* need a postload to reset the state */
|
|
||||||
state_save_register_postload(machine, slapstic_postload, NULL);
|
|
||||||
}
|
|
||||||
|
@ -32,7 +32,8 @@ typedef void (*atarigen_int_func)(running_machine *machine);
|
|||||||
|
|
||||||
typedef void (*atarigen_scanline_func)(const device_config *screen, int scanline);
|
typedef void (*atarigen_scanline_func)(const device_config *screen, int scanline);
|
||||||
|
|
||||||
struct atarivc_state_desc
|
typedef struct _atarivc_state_desc atarivc_state_desc;
|
||||||
|
struct _atarivc_state_desc
|
||||||
{
|
{
|
||||||
UINT32 latch1; /* latch #1 value (-1 means disabled) */
|
UINT32 latch1; /* latch #1 value (-1 means disabled) */
|
||||||
UINT32 latch2; /* latch #2 value (-1 means disabled) */
|
UINT32 latch2; /* latch #2 value (-1 means disabled) */
|
||||||
@ -49,6 +50,16 @@ struct atarivc_state_desc
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _atarigen_screen_timer atarigen_screen_timer;
|
||||||
|
struct _atarigen_screen_timer
|
||||||
|
{
|
||||||
|
const device_config *screen;
|
||||||
|
emu_timer * scanline_interrupt_timer;
|
||||||
|
emu_timer * scanline_timer;
|
||||||
|
emu_timer * atarivc_eof_update_timer;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
typedef struct _atarigen_state atarigen_state;
|
typedef struct _atarigen_state atarigen_state;
|
||||||
struct _atarigen_state
|
struct _atarigen_state
|
||||||
{
|
{
|
||||||
@ -81,7 +92,7 @@ struct _atarigen_state
|
|||||||
|
|
||||||
UINT16 * atarivc_data;
|
UINT16 * atarivc_data;
|
||||||
UINT16 * atarivc_eof_data;
|
UINT16 * atarivc_eof_data;
|
||||||
struct atarivc_state_desc atarivc_state;
|
atarivc_state_desc atarivc_state;
|
||||||
|
|
||||||
/* internal state */
|
/* internal state */
|
||||||
atarigen_int_func update_int_callback;
|
atarigen_int_func update_int_callback;
|
||||||
@ -113,14 +124,7 @@ struct _atarigen_state
|
|||||||
UINT32 playfield_latch;
|
UINT32 playfield_latch;
|
||||||
UINT32 playfield2_latch;
|
UINT32 playfield2_latch;
|
||||||
|
|
||||||
const device_config * scanline_interrupt_timer_screens[ATARIMO_MAX];
|
atarigen_screen_timer screen_timer[2];
|
||||||
emu_timer * scanline_interrupt_timers[ATARIMO_MAX];
|
|
||||||
|
|
||||||
const device_config * scanline_timer_screens[ATARIMO_MAX];
|
|
||||||
emu_timer * scanline_timers[ATARIMO_MAX];
|
|
||||||
|
|
||||||
const device_config * atarivc_eof_update_timer_screens[ATARIMO_MAX];
|
|
||||||
emu_timer * atarivc_eof_update_timers[ATARIMO_MAX];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -129,6 +133,13 @@ struct _atarigen_state
|
|||||||
FUNCTION PROTOTYPES
|
FUNCTION PROTOTYPES
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------
|
||||||
|
OVERALL INIT
|
||||||
|
---------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void atarigen_init(running_machine *machine);
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------
|
/*---------------------------------------------------------------
|
||||||
INTERRUPT HANDLING
|
INTERRUPT HANDLING
|
||||||
---------------------------------------------------------------*/
|
---------------------------------------------------------------*/
|
||||||
@ -272,11 +283,6 @@ void atarigen_swap_mem(void *ptr1, void *ptr2, int bytes);
|
|||||||
void atarigen_blend_gfx(running_machine *machine, int gfx0, int gfx1, int mask0, int mask1);
|
void atarigen_blend_gfx(running_machine *machine, int gfx0, int gfx1, int mask0, int mask1);
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------
|
|
||||||
STATE SAVE
|
|
||||||
---------------------------------------------------------------*/
|
|
||||||
|
|
||||||
void atarigen_init_save_state(running_machine *machine);
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
GENERAL ATARI NOTES
|
GENERAL ATARI NOTES
|
||||||
|
@ -55,6 +55,8 @@ static void hd68k_update_interrupts(running_machine *machine);
|
|||||||
MACHINE_START( harddriv )
|
MACHINE_START( harddriv )
|
||||||
{
|
{
|
||||||
harddriv_state *state = (harddriv_state *)machine->driver_data;
|
harddriv_state *state = (harddriv_state *)machine->driver_data;
|
||||||
|
|
||||||
|
atarigen_init(machine);
|
||||||
|
|
||||||
/* predetermine memory regions */
|
/* predetermine memory regions */
|
||||||
state->sim_memory = (UINT16 *)memory_region(machine, "user1");
|
state->sim_memory = (UINT16 *)memory_region(machine, "user1");
|
||||||
|
@ -25,14 +25,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
|
||||||
*
|
|
||||||
* Statics
|
|
||||||
*
|
|
||||||
*************************************/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
*
|
*
|
||||||
* Tilemap callbacks
|
* Tilemap callbacks
|
||||||
@ -116,6 +108,13 @@ VIDEO_START( atarig42 )
|
|||||||
/* initialize the alphanumerics */
|
/* initialize the alphanumerics */
|
||||||
state->atarigen.alpha_tilemap = tilemap_create(machine, get_alpha_tile_info, tilemap_scan_rows, 8,8, 64,32);
|
state->atarigen.alpha_tilemap = tilemap_create(machine, get_alpha_tile_info, tilemap_scan_rows, 8,8, 64,32);
|
||||||
tilemap_set_transparent_pen(state->atarigen.alpha_tilemap, 0);
|
tilemap_set_transparent_pen(state->atarigen.alpha_tilemap, 0);
|
||||||
|
|
||||||
|
/* save states */
|
||||||
|
state_save_register_global(machine, state->current_control);
|
||||||
|
state_save_register_global(machine, state->playfield_tile_bank);
|
||||||
|
state_save_register_global(machine, state->playfield_color_bank);
|
||||||
|
state_save_register_global(machine, state->playfield_xscroll);
|
||||||
|
state_save_register_global(machine, state->playfield_yscroll);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -130,6 +130,14 @@ VIDEO_START( atarigt )
|
|||||||
|
|
||||||
/* reset statics */
|
/* reset statics */
|
||||||
memset(state->colorram, 0, 0x80000);
|
memset(state->colorram, 0, 0x80000);
|
||||||
|
|
||||||
|
/* save states */
|
||||||
|
state_save_register_global(machine, state->playfield_tile_bank);
|
||||||
|
state_save_register_global(machine, state->playfield_color_bank);
|
||||||
|
state_save_register_global(machine, state->playfield_xscroll);
|
||||||
|
state_save_register_global(machine, state->playfield_yscroll);
|
||||||
|
state_save_register_global(machine, state->tram_checksum);
|
||||||
|
state_save_register_global_array(machine, state->expanded_mram);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -108,6 +108,13 @@ VIDEO_START( atarigx2 )
|
|||||||
/* initialize the alphanumerics */
|
/* initialize the alphanumerics */
|
||||||
state->atarigen.alpha_tilemap = tilemap_create(machine, get_alpha_tile_info, tilemap_scan_rows, 8,8, 64,32);
|
state->atarigen.alpha_tilemap = tilemap_create(machine, get_alpha_tile_info, tilemap_scan_rows, 8,8, 64,32);
|
||||||
tilemap_set_transparent_pen(state->atarigen.alpha_tilemap, 0);
|
tilemap_set_transparent_pen(state->atarigen.alpha_tilemap, 0);
|
||||||
|
|
||||||
|
/* save states */
|
||||||
|
state_save_register_global(machine, state->current_control);
|
||||||
|
state_save_register_global(machine, state->playfield_tile_bank);
|
||||||
|
state_save_register_global(machine, state->playfield_color_bank);
|
||||||
|
state_save_register_global(machine, state->playfield_xscroll);
|
||||||
|
state_save_register_global(machine, state->playfield_yscroll);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -82,9 +82,6 @@ static const gfx_layout objlayout_6bpp =
|
|||||||
static void update_timers(running_machine *machine, int scanline);
|
static void update_timers(running_machine *machine, int scanline);
|
||||||
static void decode_gfx(running_machine *machine, UINT16 *pflookup, UINT16 *molookup);
|
static void decode_gfx(running_machine *machine, UINT16 *pflookup, UINT16 *molookup);
|
||||||
static int get_bank(running_machine *machine, UINT8 prom1, UINT8 prom2, int bpp);
|
static int get_bank(running_machine *machine, UINT8 prom1, UINT8 prom2, int bpp);
|
||||||
static TIMER_CALLBACK( int3_callback );
|
|
||||||
static TIMER_CALLBACK( int3off_callback );
|
|
||||||
static TIMER_CALLBACK( reset_yscroll_callback );
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -199,9 +196,14 @@ VIDEO_START( atarisy1 )
|
|||||||
/* reset the statics */
|
/* reset the statics */
|
||||||
atarimo_set_yscroll(0, 256);
|
atarimo_set_yscroll(0, 256);
|
||||||
state->next_timer_scanline = -1;
|
state->next_timer_scanline = -1;
|
||||||
state->scanline_timer = timer_alloc(machine, int3_callback, NULL);
|
state->scanline_timer = devtag_get_device(machine, "scan_timer");
|
||||||
state->int3off_timer = timer_alloc(machine, int3off_callback, NULL);
|
state->int3off_timer = devtag_get_device(machine, "int3off_timer");
|
||||||
state->yscroll_reset_timer = timer_alloc(machine, reset_yscroll_callback, NULL);
|
state->yscroll_reset_timer = devtag_get_device(machine, "yreset_timer");
|
||||||
|
|
||||||
|
/* save state */
|
||||||
|
state_save_register_global(machine, state->playfield_tile_bank);
|
||||||
|
state_save_register_global(machine, state->playfield_priority_pens);
|
||||||
|
state_save_register_global(machine, state->next_timer_scanline);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -304,9 +306,9 @@ WRITE16_HANDLER( atarisy1_xscroll_w )
|
|||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
static TIMER_CALLBACK( reset_yscroll_callback )
|
TIMER_DEVICE_CALLBACK( atarisy1_reset_yscroll_callback )
|
||||||
{
|
{
|
||||||
atarisy1_state *state = (atarisy1_state *)machine->driver_data;
|
atarisy1_state *state = (atarisy1_state *)timer->machine->driver_data;
|
||||||
tilemap_set_scrolly(state->atarigen.playfield_tilemap, 0, param);
|
tilemap_set_scrolly(state->atarigen.playfield_tilemap, 0, param);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -332,7 +334,7 @@ WRITE16_HANDLER( atarisy1_yscroll_w )
|
|||||||
|
|
||||||
/* but since we've adjusted it, we must reset it to the normal value
|
/* but since we've adjusted it, we must reset it to the normal value
|
||||||
once we hit scanline 0 again */
|
once we hit scanline 0 again */
|
||||||
timer_adjust_oneshot(state->yscroll_reset_timer, video_screen_get_time_until_pos(space->machine->primary_screen, 0, 0), newscroll);
|
timer_device_adjust_oneshot(state->yscroll_reset_timer, video_screen_get_time_until_pos(space->machine->primary_screen, 0, 0), newscroll);
|
||||||
|
|
||||||
/* update the data */
|
/* update the data */
|
||||||
*state->atarigen.yscroll = newscroll;
|
*state->atarigen.yscroll = newscroll;
|
||||||
@ -385,29 +387,29 @@ WRITE16_HANDLER( atarisy1_spriteram_w )
|
|||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
static TIMER_CALLBACK( int3off_callback )
|
TIMER_DEVICE_CALLBACK( atarisy1_int3off_callback )
|
||||||
{
|
{
|
||||||
const address_space *space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM);
|
const address_space *space = cputag_get_address_space(timer->machine, "maincpu", ADDRESS_SPACE_PROGRAM);
|
||||||
|
|
||||||
/* clear the state */
|
/* clear the state */
|
||||||
atarigen_scanline_int_ack_w(space, 0, 0, 0xffff);
|
atarigen_scanline_int_ack_w(space, 0, 0, 0xffff);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static TIMER_CALLBACK( int3_callback )
|
TIMER_DEVICE_CALLBACK( atarisy1_int3_callback )
|
||||||
{
|
{
|
||||||
atarisy1_state *state = (atarisy1_state *)machine->driver_data;
|
atarisy1_state *state = (atarisy1_state *)timer->machine->driver_data;
|
||||||
int scanline = param;
|
int scanline = param;
|
||||||
|
|
||||||
/* update the state */
|
/* update the state */
|
||||||
atarigen_scanline_int_gen(cputag_get_cpu(machine, "maincpu"));
|
atarigen_scanline_int_gen(cputag_get_cpu(timer->machine, "maincpu"));
|
||||||
|
|
||||||
/* set a timer to turn it off */
|
/* set a timer to turn it off */
|
||||||
timer_adjust_oneshot(state->int3off_timer, video_screen_get_scan_period(machine->primary_screen), 0);
|
timer_device_adjust_oneshot(state->int3off_timer, video_screen_get_scan_period(timer->machine->primary_screen), 0);
|
||||||
|
|
||||||
/* determine the time of the next one */
|
/* determine the time of the next one */
|
||||||
state->next_timer_scanline = -1;
|
state->next_timer_scanline = -1;
|
||||||
update_timers(machine, scanline);
|
update_timers(timer->machine, scanline);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -484,9 +486,9 @@ static void update_timers(running_machine *machine, int scanline)
|
|||||||
|
|
||||||
/* set a new one */
|
/* set a new one */
|
||||||
if (best != -1)
|
if (best != -1)
|
||||||
timer_adjust_oneshot(state->scanline_timer, video_screen_get_time_until_pos(machine->primary_screen, best, 0), best);
|
timer_device_adjust_oneshot(state->scanline_timer, video_screen_get_time_until_pos(machine->primary_screen, best, 0), best);
|
||||||
else
|
else
|
||||||
timer_adjust_oneshot(state->scanline_timer, attotime_never, 0);
|
timer_device_adjust_oneshot(state->scanline_timer, attotime_never, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,6 +77,9 @@ VIDEO_START( badlands )
|
|||||||
|
|
||||||
/* initialize the motion objects */
|
/* initialize the motion objects */
|
||||||
atarimo_init(machine, 0, &modesc);
|
atarimo_init(machine, 0, &modesc);
|
||||||
|
|
||||||
|
/* save states */
|
||||||
|
state_save_register_global(machine, state->playfield_tile_bank);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,21 +9,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
|
||||||
*
|
|
||||||
* Statics
|
|
||||||
*
|
|
||||||
*************************************/
|
|
||||||
|
|
||||||
static UINT32 finescroll;
|
|
||||||
static offs_t vram_latch_offset;
|
|
||||||
|
|
||||||
static offs_t hsyncram_offset;
|
|
||||||
static offs_t hsyncram_start;
|
|
||||||
static UINT8 * hsyncram;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
*
|
*
|
||||||
* Video start/stop
|
* Video start/stop
|
||||||
@ -32,7 +17,12 @@ static UINT8 * hsyncram;
|
|||||||
|
|
||||||
VIDEO_START( beathead )
|
VIDEO_START( beathead )
|
||||||
{
|
{
|
||||||
hsyncram = auto_alloc_array(machine, UINT8, 0x800);
|
beathead_state *state = (beathead_state *)machine->driver_data;
|
||||||
|
state_save_register_global(machine, state->finescroll);
|
||||||
|
state_save_register_global(machine, state->vram_latch_offset);
|
||||||
|
state_save_register_global(machine, state->hsyncram_offset);
|
||||||
|
state_save_register_global(machine, state->hsyncram_start);
|
||||||
|
state_save_register_global_array(machine, state->hsyncram);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -77,15 +67,17 @@ WRITE32_HANDLER( beathead_vram_bulk_w )
|
|||||||
WRITE32_HANDLER( beathead_vram_latch_w )
|
WRITE32_HANDLER( beathead_vram_latch_w )
|
||||||
{
|
{
|
||||||
/* latch the address */
|
/* latch the address */
|
||||||
vram_latch_offset = (4 * offset) & 0x7ffff;
|
beathead_state *state = (beathead_state *)space->machine->driver_data;
|
||||||
|
state->vram_latch_offset = (4 * offset) & 0x7ffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WRITE32_HANDLER( beathead_vram_copy_w )
|
WRITE32_HANDLER( beathead_vram_copy_w )
|
||||||
{
|
{
|
||||||
/* copy from VRAM to VRAM, for 1024 bytes */
|
/* copy from VRAM to VRAM, for 1024 bytes */
|
||||||
|
beathead_state *state = (beathead_state *)space->machine->driver_data;
|
||||||
offs_t dest_offset = (4 * offset) & 0x7ffff;
|
offs_t dest_offset = (4 * offset) & 0x7ffff;
|
||||||
memcpy(&space->machine->generic.videoram.u32[dest_offset / 4], &space->machine->generic.videoram.u32[vram_latch_offset / 4], 0x400);
|
memcpy(&space->machine->generic.videoram.u32[dest_offset / 4], &space->machine->generic.videoram.u32[state->vram_latch_offset / 4], 0x400);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -98,8 +90,9 @@ WRITE32_HANDLER( beathead_vram_copy_w )
|
|||||||
|
|
||||||
WRITE32_HANDLER( beathead_finescroll_w )
|
WRITE32_HANDLER( beathead_finescroll_w )
|
||||||
{
|
{
|
||||||
UINT32 oldword = finescroll;
|
beathead_state *state = (beathead_state *)space->machine->driver_data;
|
||||||
UINT32 newword = COMBINE_DATA(&finescroll);
|
UINT32 oldword = state->finescroll;
|
||||||
|
UINT32 newword = COMBINE_DATA(&state->finescroll);
|
||||||
|
|
||||||
/* if VBLANK is going off on a scanline other than the last, suspend time */
|
/* if VBLANK is going off on a scanline other than the last, suspend time */
|
||||||
if ((oldword & 8) && !(newword & 8) && video_screen_get_vpos(space->machine->primary_screen) != 261)
|
if ((oldword & 8) && !(newword & 8) && video_screen_get_vpos(space->machine->primary_screen) != 261)
|
||||||
@ -136,30 +129,34 @@ WRITE32_HANDLER( beathead_palette_w )
|
|||||||
|
|
||||||
READ32_HANDLER( beathead_hsync_ram_r )
|
READ32_HANDLER( beathead_hsync_ram_r )
|
||||||
{
|
{
|
||||||
|
beathead_state *state = (beathead_state *)space->machine->driver_data;
|
||||||
|
|
||||||
/* offset 0 is probably write-only */
|
/* offset 0 is probably write-only */
|
||||||
if (offset == 0)
|
if (offset == 0)
|
||||||
logerror("%08X:Unexpected HSYNC RAM read at offset 0\n", cpu_get_previouspc(space->cpu));
|
logerror("%08X:Unexpected HSYNC RAM read at offset 0\n", cpu_get_previouspc(space->cpu));
|
||||||
|
|
||||||
/* offset 1 reads the data */
|
/* offset 1 reads the data */
|
||||||
else
|
else
|
||||||
return hsyncram[hsyncram_offset];
|
return state->hsyncram[state->hsyncram_offset];
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE32_HANDLER( beathead_hsync_ram_w )
|
WRITE32_HANDLER( beathead_hsync_ram_w )
|
||||||
{
|
{
|
||||||
|
beathead_state *state = (beathead_state *)space->machine->driver_data;
|
||||||
|
|
||||||
/* offset 0 selects the address, and can specify the start address */
|
/* offset 0 selects the address, and can specify the start address */
|
||||||
if (offset == 0)
|
if (offset == 0)
|
||||||
{
|
{
|
||||||
COMBINE_DATA(&hsyncram_offset);
|
COMBINE_DATA(&state->hsyncram_offset);
|
||||||
if (hsyncram_offset & 0x800)
|
if (state->hsyncram_offset & 0x800)
|
||||||
hsyncram_start = hsyncram_offset & 0x7ff;
|
state->hsyncram_start = state->hsyncram_offset & 0x7ff;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* offset 1 writes the data */
|
/* offset 1 writes the data */
|
||||||
else
|
else
|
||||||
COMBINE_DATA(&hsyncram[hsyncram_offset]);
|
COMBINE_DATA(&state->hsyncram[state->hsyncram_offset]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -183,14 +180,14 @@ VIDEO_UPDATE( beathead )
|
|||||||
UINT16 scanline[336];
|
UINT16 scanline[336];
|
||||||
|
|
||||||
/* blanking */
|
/* blanking */
|
||||||
if (finescroll & 8)
|
if (state->finescroll & 8)
|
||||||
for (x = cliprect->min_x; x <= cliprect->max_x; x++)
|
for (x = cliprect->min_x; x <= cliprect->max_x; x++)
|
||||||
scanline[x] = pen_base;
|
scanline[x] = pen_base;
|
||||||
|
|
||||||
/* non-blanking */
|
/* non-blanking */
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
offs_t scanline_offset = vram_latch_offset + (finescroll & 3);
|
offs_t scanline_offset = state->vram_latch_offset + (state->finescroll & 3);
|
||||||
offs_t src = scanline_offset + cliprect->min_x;
|
offs_t src = scanline_offset + cliprect->min_x;
|
||||||
|
|
||||||
/* unswizzle the scanline first */
|
/* unswizzle the scanline first */
|
||||||
|
@ -172,6 +172,12 @@ static void video_start_cyberbal_common(running_machine* machine, int screens)
|
|||||||
tilemap_set_scrollx(state->atarigen.alpha2_tilemap, 0, 0);
|
tilemap_set_scrollx(state->atarigen.alpha2_tilemap, 0, 0);
|
||||||
tilemap_set_transparent_pen(state->atarigen.alpha2_tilemap, 0);
|
tilemap_set_transparent_pen(state->atarigen.alpha2_tilemap, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* save states */
|
||||||
|
state_save_register_global_array(machine, state->current_slip);
|
||||||
|
state_save_register_global_array(machine, state->playfield_palette_bank);
|
||||||
|
state_save_register_global_array(machine, state->playfield_xscroll);
|
||||||
|
state_save_register_global_array(machine, state->playfield_yscroll);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -140,6 +140,10 @@ VIDEO_START( eprom )
|
|||||||
/* initialize the alphanumerics */
|
/* initialize the alphanumerics */
|
||||||
state->atarigen.alpha_tilemap = tilemap_create(machine, get_alpha_tile_info, tilemap_scan_rows, 8,8, 64,32);
|
state->atarigen.alpha_tilemap = tilemap_create(machine, get_alpha_tile_info, tilemap_scan_rows, 8,8, 64,32);
|
||||||
tilemap_set_transparent_pen(state->atarigen.alpha_tilemap, 0);
|
tilemap_set_transparent_pen(state->atarigen.alpha_tilemap, 0);
|
||||||
|
|
||||||
|
/* save states */
|
||||||
|
state_save_register_global(machine, state->screen_intensity);
|
||||||
|
state_save_register_global(machine, state->video_disable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -192,6 +196,10 @@ VIDEO_START( guts )
|
|||||||
/* initialize the alphanumerics */
|
/* initialize the alphanumerics */
|
||||||
state->atarigen.alpha_tilemap = tilemap_create(machine, get_alpha_tile_info, tilemap_scan_rows, 8,8, 64,32);
|
state->atarigen.alpha_tilemap = tilemap_create(machine, get_alpha_tile_info, tilemap_scan_rows, 8,8, 64,32);
|
||||||
tilemap_set_transparent_pen(state->atarigen.alpha_tilemap, 0);
|
tilemap_set_transparent_pen(state->atarigen.alpha_tilemap, 0);
|
||||||
|
|
||||||
|
/* save states */
|
||||||
|
state_save_register_global(machine, state->screen_intensity);
|
||||||
|
state_save_register_global(machine, state->video_disable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -104,6 +104,10 @@ VIDEO_START( gauntlet )
|
|||||||
|
|
||||||
/* set up the base color for the playfield */
|
/* set up the base color for the playfield */
|
||||||
state->playfield_color_bank = state->vindctr2_screen_refresh ? 0 : 1;
|
state->playfield_color_bank = state->vindctr2_screen_refresh ? 0 : 1;
|
||||||
|
|
||||||
|
/* save states */
|
||||||
|
state_save_register_global(machine, state->playfield_tile_bank);
|
||||||
|
state_save_register_global(machine, state->playfield_color_bank);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -97,6 +97,8 @@ VIDEO_START( toobin )
|
|||||||
|
|
||||||
/* allocate a playfield bitmap for rendering */
|
/* allocate a playfield bitmap for rendering */
|
||||||
state->pfbitmap = auto_bitmap_alloc(machine, video_screen_get_width(machine->primary_screen), video_screen_get_height(machine->primary_screen), BITMAP_FORMAT_INDEXED16);
|
state->pfbitmap = auto_bitmap_alloc(machine, video_screen_get_width(machine->primary_screen), video_screen_get_height(machine->primary_screen), BITMAP_FORMAT_INDEXED16);
|
||||||
|
|
||||||
|
state_save_register_global(machine, state->brightness);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -93,6 +93,11 @@ VIDEO_START( vindictr )
|
|||||||
/* initialize the alphanumerics */
|
/* initialize the alphanumerics */
|
||||||
state->atarigen.alpha_tilemap = tilemap_create(machine, get_alpha_tile_info, tilemap_scan_rows, 8,8, 64,32);
|
state->atarigen.alpha_tilemap = tilemap_create(machine, get_alpha_tile_info, tilemap_scan_rows, 8,8, 64,32);
|
||||||
tilemap_set_transparent_pen(state->atarigen.alpha_tilemap, 0);
|
tilemap_set_transparent_pen(state->atarigen.alpha_tilemap, 0);
|
||||||
|
|
||||||
|
/* save states */
|
||||||
|
state_save_register_global(machine, state->playfield_tile_bank);
|
||||||
|
state_save_register_global(machine, state->playfield_xscroll);
|
||||||
|
state_save_register_global(machine, state->playfield_yscroll);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user