Пример #1
0
static void init_buffered_spriteram(void)
{
	assert_always(spriteram_size != 0, "Video buffers spriteram but spriteram_size is 0");

	/* allocate memory for the back buffer */
	buffered_spriteram = auto_malloc(spriteram_size);

	/* register for saving it */
	state_save_register_global_pointer(buffered_spriteram, spriteram_size);

	/* do the same for the secon back buffer, if present */
	if (spriteram_2_size)
	{
		/* allocate memory */
		buffered_spriteram_2 = auto_malloc(spriteram_2_size);

		/* register for saving it */
		state_save_register_global_pointer(buffered_spriteram_2, spriteram_2_size);
	}

	/* make 16-bit and 32-bit pointer variants */
	buffered_spriteram16 = (UINT16 *)buffered_spriteram;
	buffered_spriteram32 = (UINT32 *)buffered_spriteram;
	buffered_spriteram16_2 = (UINT16 *)buffered_spriteram_2;
	buffered_spriteram32_2 = (UINT32 *)buffered_spriteram_2;
}
Пример #2
0
static int init_buffered_spriteram(void)
{
	/* make sure we have a valid size */
	if (spriteram_size == 0)
	{
		logerror("video_init():  Video buffers spriteram but spriteram_size is 0\n");
		return 0;
	}

	/* allocate memory for the back buffer */
	buffered_spriteram = auto_malloc(spriteram_size);

	/* register for saving it */
	state_save_register_global_pointer(buffered_spriteram, spriteram_size);

	/* do the same for the secon back buffer, if present */
	if (spriteram_2_size)
	{
		/* allocate memory */
		buffered_spriteram_2 = auto_malloc(spriteram_2_size);

		/* register for saving it */
		state_save_register_global_pointer(buffered_spriteram_2, spriteram_2_size);
	}

	/* make 16-bit and 32-bit pointer variants */
	buffered_spriteram16 = (UINT16 *)buffered_spriteram;
	buffered_spriteram32 = (UINT32 *)buffered_spriteram;
	buffered_spriteram16_2 = (UINT16 *)buffered_spriteram_2;
	buffered_spriteram32_2 = (UINT32 *)buffered_spriteram_2;
	return 0;
}
Пример #3
0
static VIDEO_START( common )
{
	midyunit_state *state = machine.driver_data<midyunit_state>();
	/* allocate memory */
	state->m_cmos_ram = auto_alloc_array(machine, UINT16, (0x2000 * 4)/2);
	state->m_local_videoram = auto_alloc_array_clear(machine, UINT16, 0x80000/2);
	state->m_pen_map = auto_alloc_array(machine, pen_t, 65536);

	machine.device<nvram_device>("nvram")->set_base(state->m_cmos_ram, 0x2000 * 4);

	/* reset all the globals */
	state->m_cmos_page = 0;
	state->m_autoerase_enable = 0;
	state->m_yawdim_dma = 0;

	/* reset DMA state */
	memset(state->m_dma_register, 0, sizeof(state->m_dma_register));
	memset(&state->m_dma_state, 0, sizeof(state->m_dma_state));

	/* register for state saving */
	state_save_register_global(machine, state->m_autoerase_enable);
	state_save_register_global_pointer(machine, state->m_local_videoram, 0x80000/2);
	state_save_register_global_pointer(machine, state->m_cmos_ram, (0x2000 * 4)/2);
	state_save_register_global(machine, state->m_videobank_select);
	state_save_register_global_array(machine, state->m_dma_register);
}
Пример #4
0
static void video_start_common(running_machine &machine, int pagecount)
{
	system1_state *state = machine.driver_data<system1_state>();
	int pagenum;

	/* allocate memory for the collision arrays */
	state->m_mix_collide = auto_alloc_array_clear(machine, UINT8, 64);
	state->m_sprite_collide = auto_alloc_array_clear(machine, UINT8, 1024);

	/* allocate memory for videoram */
	state->m_tilemap_pages = pagecount;
	state->m_videoram = auto_alloc_array_clear(machine, UINT8, 0x800 * pagecount);

	/* create the tilemap pages */
	for (pagenum = 0; pagenum < pagecount; pagenum++)
	{
		state->m_tilemap_page[pagenum] = &machine.tilemap().create(tilemap_get_info_delegate(FUNC(system1_state::tile_get_info),state), TILEMAP_SCAN_ROWS, 8,8, 32,32);
		state->m_tilemap_page[pagenum]->set_transparent_pen(0);
		state->m_tilemap_page[pagenum]->set_user_data(state->m_videoram + 0x800 * pagenum);
	}

	/* allocate a temporary bitmap for sprite rendering */
	state->m_sprite_bitmap = auto_bitmap_ind16_alloc(machine, 512, 256);

	/* register for save stats */
	state_save_register_global(machine, state->m_video_mode);
	state_save_register_global(machine, state->m_mix_collide_summary);
	state_save_register_global(machine, state->m_sprite_collide_summary);
	state->save_pointer(NAME(state->m_videoram), 0x800 * pagecount);
	state_save_register_global_pointer(machine, state->m_mix_collide, 64);
	state_save_register_global_pointer(machine, state->m_sprite_collide, 1024);
}
Пример #5
0
static void neogeo_register_sub_savestate(void)
{
	UINT8* gamevector = memory_region(REGION_CPU1);

	state_save_register_global(neogeo_sram_locked);
	state_save_register_global_pointer(neogeo_ram16, 0x10000/2);
	state_save_register_global_pointer(neogeo_memcard, 0x800);
	state_save_register_global_pointer(gamevector, 0x80);
	state_save_register_global(neogeo_prot_data);
}
Пример #6
0
void palette_init(running_machine *machine)
{
	palette_private *palette = auto_malloc(sizeof(*palette));

	/* request cleanup */
	machine->palette_data = palette;
	add_exit_callback(machine, palette_exit);

	/* reset all our data */
	memset(palette, 0, sizeof(*palette));
	palette->format = machine->screen[0].format;

	/* determine the color mode */
	switch (palette->format)
	{
		case BITMAP_FORMAT_INDEXED16:
			/* indexed modes are fine for everything */
			break;

		case BITMAP_FORMAT_RGB15:
		case BITMAP_FORMAT_RGB32:
			/* RGB modes can't use color tables */
			assert(machine->drv->color_table_len == 0);
			break;

		case BITMAP_FORMAT_INVALID:
			/* invalid format means no palette - or at least it should */
			assert(machine->drv->total_colors == 0);
			assert(machine->drv->color_table_len == 0);
			return;

		default:
			fatalerror("Unsupported screen bitmap format!");
			break;
	}

	/* allocate all the data structures */
	if (machine->drv->total_colors > 0)
	{
		int numcolors;

		allocate_palette(machine, palette);
		allocate_color_tables(machine, palette);
		allocate_shadow_tables(machine, palette);

		/* set up save/restore of the palette */
		numcolors = palette_get_num_colors(machine->palette);
		palette->save_pen = auto_malloc(sizeof(*palette->save_pen) * numcolors);
		palette->save_bright = auto_malloc(sizeof(*palette->save_bright) * numcolors);
		state_save_register_global_pointer(palette->save_pen, numcolors);
		state_save_register_global_pointer(palette->save_bright, numcolors);
		state_save_register_func_presave(palette_presave);
		state_save_register_func_postload(palette_postload);
	}
}
Пример #7
0
void cidelsa_state::video_start()
{
	// allocate memory
	m_pcbram = auto_alloc_array(machine, UINT8, CIDELSA_CHARRAM_SIZE);
	m_charram = auto_alloc_array(machine, UINT8, CIDELSA_CHARRAM_SIZE);

	// register for state saving
	state_save_register_global(machine, m_cdp1869_pcb);
	state_save_register_global_pointer(machine, m_pcbram, CIDELSA_CHARRAM_SIZE);
	state_save_register_global_pointer(machine, m_charram, CIDELSA_CHARRAM_SIZE);
}
Пример #8
0
ROM_END

static DRIVER_INIT(ssingles)
{
	ssingles_state *state = machine->driver_data<ssingles_state>();

	state->videoram=auto_alloc_array_clear(machine, UINT8, VMEM_SIZE);
	state->colorram=auto_alloc_array_clear(machine, UINT8, VMEM_SIZE);
	state_save_register_global_pointer(machine, state->videoram, VMEM_SIZE);
	state_save_register_global_pointer(machine, state->colorram, VMEM_SIZE);
}
Пример #9
0
static VIDEO_START( laserbat )
{
	laserbat_state *state = (laserbat_state *)machine->driver_data;

	state->bg_tilemap = tilemap_create(machine, get_tile_info, tilemap_scan_rows, 8, 8, 32, 32);

	state->videoram = auto_alloc_array(machine, UINT8, 0x400);
	state->colorram = auto_alloc_array(machine, UINT8, 0x400);

	state_save_register_global_pointer(machine, state->videoram, 0x400);
	state_save_register_global_pointer(machine, state->colorram, 0x400);
}
Пример #10
0
void namcos1_state::video_start()
{
	int i;

	m_tilemap_maskdata = (UINT8 *)memregion("gfx1")->base();

	/* allocate videoram */
	m_videoram = auto_alloc_array(machine(), UINT8, 0x8000);
	m_spriteram = auto_alloc_array(machine(), UINT8, 0x1000);

	/* initialize playfields */
	m_bg_tilemap[0] = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(namcos1_state::bg_get_info0),this),TILEMAP_SCAN_ROWS,8,8,64,64);
	m_bg_tilemap[1] = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(namcos1_state::bg_get_info1),this),TILEMAP_SCAN_ROWS,8,8,64,64);
	m_bg_tilemap[2] = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(namcos1_state::bg_get_info2),this),TILEMAP_SCAN_ROWS,8,8,64,64);
	m_bg_tilemap[3] = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(namcos1_state::bg_get_info3),this),TILEMAP_SCAN_ROWS,8,8,64,32);
	m_bg_tilemap[4] = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(namcos1_state::fg_get_info4),this),TILEMAP_SCAN_ROWS,8,8,36,28);
	m_bg_tilemap[5] = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(namcos1_state::fg_get_info5),this),TILEMAP_SCAN_ROWS,8,8,36,28);

	m_bg_tilemap[4]->set_scrolldx(73,512-73);
	m_bg_tilemap[5]->set_scrolldx(73,512-73);
	m_bg_tilemap[4]->set_scrolldy(0x10,0x110);
	m_bg_tilemap[5]->set_scrolldy(0x10,0x110);

	/* register videoram to the save state system (post-allocation) */
	state_save_register_global_pointer(machine(), m_videoram, 0x8000);
	state_save_register_global_array(machine(), m_cus116);
	state_save_register_global_pointer(machine(), m_spriteram, 0x1000);
	state_save_register_global_array(machine(), m_playfield_control);

	/* set table for sprite color == 0x7f */
	for (i = 0;i < 15;i++)
		m_drawmode_table[i] = DRAWMODE_SHADOW;
	m_drawmode_table[15] = DRAWMODE_NONE;

	/* clear paletteram */
	memset(m_paletteram, 0, 0x8000);
	memset(m_cus116, 0, 0x10);
	for (i = 0; i < 0x2000; i++)
		palette_set_color(machine(), i, MAKE_RGB(0, 0, 0));

	/* all palette entries are not affected by shadow sprites... */
	for (i = 0;i < 0x2000;i++)
		machine().shadow_table[i] = i;
	/* ... except for tilemap colors */
	for (i = 0x0800;i < 0x1000;i++)
		machine().shadow_table[i] = i + 0x0800;

	memset(m_playfield_control, 0, sizeof(m_playfield_control));
	m_copy_sprites = 0;
}
Пример #11
0
static VIDEO_START( nightgal )
{
	nightgal_state *state = machine->driver_data<nightgal_state>();
	state->blit_buffer = auto_alloc_array(machine, UINT8, 256*256);

	state_save_register_global_pointer(machine, state->blit_buffer, 256*256);
}
Пример #12
0
static CPU_INIT( mb86233 )
{
	mb86233_state *cpustate = get_safe_token(device);
	mb86233_cpu_core * _config = (mb86233_cpu_core *)device->static_config();
	(void)irqcallback;

	memset(cpustate, 0, sizeof( *cpustate ) );
	cpustate->device = device;
	cpustate->program = device->space(AS_PROGRAM);
	cpustate->direct = &cpustate->program->direct();

	if ( _config )
	{
		cpustate->fifo_read_cb = _config->fifo_read_cb;
		cpustate->fifo_write_cb = _config->fifo_write_cb;
		cpustate->Tables = (UINT32*) device->machine().region(_config->tablergn)->base();
	}

	cpustate->RAM = auto_alloc_array(device->machine(), UINT32, 2 * 0x200);		/* 2x 2KB */
	memset( cpustate->RAM, 0, 2 * 0x200 * sizeof(UINT32) );
	cpustate->ARAM = &cpustate->RAM[0];
	cpustate->BRAM = &cpustate->RAM[0x200];

	state_save_register_global_pointer(device->machine(), cpustate->RAM,2 * 0x200 * sizeof(UINT32));
}
Пример #13
0
static VIDEO_START( mole )
{
	mole_state *state = machine->driver_data<mole_state>();
	state->tileram = auto_alloc_array_clear(machine, UINT16, 0x400);
	state->bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows, 8, 8, 40, 25);

	state_save_register_global_pointer(machine, state->tileram, 0x400);
}
Пример #14
0
void comx35_state::video_start()
{
	// allocate memory
	m_charram = auto_alloc_array(machine(), UINT8, COMX35_CHARRAM_SIZE);

	// register for save state
	state_save_register_global_pointer(machine(), m_charram, COMX35_CHARRAM_SIZE);
}
Пример #15
0
ROM_END

static DRIVER_INIT(ssingles)
{
	ssingles_vram=auto_malloc(0x2000);
	memset(ssingles_vram,0,0x2000);
	state_save_register_global_pointer(ssingles_vram, 0x2000);
}
Пример #16
0
static void video_start(running_machine *machine, UINT16 pageram_size)
{
	cidelsa_state *state = (cidelsa_state *)machine->driver_data;

	/* allocate memory */
	state->pageram = auto_alloc_array(machine, UINT8, pageram_size);
	state->pcbram = auto_alloc_array(machine, UINT8, CIDELSA_CHARRAM_SIZE);
	state->charram = auto_alloc_array(machine, UINT8, CIDELSA_CHARRAM_SIZE);

	/* find devices */
	state->cdp1869 = devtag_get_device(machine, CDP1869_TAG);

	/* register for state saving */
	state_save_register_global(machine, state->cdp1869_pcb);
	state_save_register_global_pointer(machine, state->pageram, pageram_size);
	state_save_register_global_pointer(machine, state->pcbram, CIDELSA_CHARRAM_SIZE);
	state_save_register_global_pointer(machine, state->charram, CIDELSA_CHARRAM_SIZE);
}
Пример #17
0
void v1050_state::video_start()
{
	/* allocate memory */
	m_attr_ram = auto_alloc_array(machine(), UINT8, V1050_VIDEORAM_SIZE);

	/* register for state saving */
	state_save_register_global(machine(), m_attr);
	state_save_register_global_pointer(machine(), m_attr_ram, V1050_VIDEORAM_SIZE);
}
Пример #18
0
static void taitof2_core_vh_start (running_machine *machine, int sprite_type, int hide, int flip_hide )
{
	int i;
	taitof2_state *state = machine->driver_data<taitof2_state>();
	state->sprite_type = sprite_type;
	state->hide_pixels = hide;
	state->flip_hide_pixels = flip_hide;

	state->spriteram_delayed = auto_alloc_array(machine, UINT16, state->spriteram_size / 2);
	state->spriteram_buffered = auto_alloc_array(machine, UINT16, state->spriteram_size / 2);
	state->spritelist = auto_alloc_array(machine, struct f2_tempsprite, 0x400);

	for (i = 0; i < 8; i ++)
	{
		state->spritebank_buffered[i] = 0x400 * i;
		state->spritebank[i] = state->spritebank_buffered[i];
	}

	state->sprites_disabled = 1;
	state->sprites_active_area = 0;
	state->sprites_flipscreen = 0;

	state->sprites_master_scrollx = 0;
	state->sprites_master_scrolly = 0;

	state->spriteblendmode = 0;
	state->prepare_sprites = 0;

	state->game = 0;	/* means NOT footchmp */

	state_save_register_global_array(machine, state->spritebank);
	state_save_register_global_array(machine, state->spritebank_buffered);
	state_save_register_global(machine, state->sprites_disabled);
	state_save_register_global(machine, state->sprites_active_area);
	state_save_register_global(machine, state->sprites_flipscreen);
	state_save_register_global(machine, state->sprites_master_scrollx);
	state_save_register_global(machine, state->sprites_master_scrolly);
	state_save_register_global_array(machine, state->tilepri);
	state_save_register_global_array(machine, state->spritepri);
	state_save_register_global(machine, state->spriteblendmode);
	state_save_register_global(machine, state->prepare_sprites);
	state_save_register_global_pointer(machine, state->spriteram_delayed, state->spriteram_size / 2);
	state_save_register_global_pointer(machine, state->spriteram_buffered, state->spriteram_size / 2);
}
Пример #19
0
void volfied_cchip_init(void)
{
	cchip_ram=auto_malloc(0x400 * 8);

	state_save_register_global(current_bank);
	state_save_register_global(current_cmd);
	state_save_register_global(current_flag);
	state_save_register_global(cc_port);
	state_save_register_global_pointer(cchip_ram, 0x400 * 8);
}
Пример #20
0
GFXDECODE_END



static MACHINE_START(merit)
{
	slotcarn_state *state = machine.driver_data<slotcarn_state>();
	state->m_ram_palette = auto_alloc_array(machine, UINT8, RAM_PALETTE_SIZE);
	state_save_register_global_pointer(machine, state->m_ram_palette, RAM_PALETTE_SIZE);
}
Пример #21
0
ADDRESS_MAP_END



static VIDEO_START(hotblock)
{
	hotblock_state *state = machine->driver_data<hotblock_state>();
	state->pal = auto_alloc_array(machine, UINT8, 0x10000);
	state_save_register_global_pointer(machine, state->pal, 0x10000);
}
Пример #22
0
static void register_savestate(void)
{
	state_save_register_global(flipscreen);
	state_save_register_global(kidniki_background_bank);
	state_save_register_global(m62_background_hscroll);
	state_save_register_global(m62_background_vscroll);
	state_save_register_global(kidniki_text_vscroll);
	state_save_register_global(spelunkr_palbank);
	state_save_register_global_pointer(irem_textram, irem_textram_size);
}
Пример #23
0
void vixen_state::video_start()
{
	// find memory regions
	m_sync_rom = m_machine.region("video")->base();
	m_char_rom = m_machine.region("chargen")->base();

	// register for state saving
	state_save_register_global(m_machine, m_alt);
	state_save_register_global(m_machine, m_256);
	state_save_register_global(m_machine, m_vsync);
	state_save_register_global_pointer(m_machine, m_video_ram, 0x1000);
}
Пример #24
0
void volfied_cchip_init( running_machine *machine )
{
	volfied_state *state = (volfied_state *)machine->driver_data;

	state->cchip_ram = auto_alloc_array_clear(machine, UINT8, 0x400 * 8);

	state_save_register_global(machine, state->current_bank);
	state_save_register_global(machine, state->current_cmd);
	state_save_register_global(machine, state->current_flag);
	state_save_register_global(machine, state->cc_port);
	state_save_register_global_pointer(machine, state->cchip_ram, 0x400 * 8);
}
Пример #25
0
void atari_machine_start(running_machine &machine)
{
	gtia_interface gtia_intf;

	/* GTIA */
	memset(&gtia_intf, 0, sizeof(gtia_intf));
	if (machine.root_device().ioport("console") != NULL)
		gtia_intf.console_read = console_read;
	if (machine.device<dac_device>("dac") != NULL)
		gtia_intf.console_write = console_write;
	gtia_init(machine, &gtia_intf);

	/* pokey */
	machine.add_notifier(MACHINE_NOTIFY_RESET, machine_notify_delegate(FUNC(pokey_reset), &machine));

	/* ANTIC */
	machine.add_notifier(MACHINE_NOTIFY_RESET, machine_notify_delegate(FUNC(_antic_reset), &machine));

	/* save states */
	state_save_register_global_pointer(machine, ((UINT8 *) &antic.r), sizeof(antic.r));
	state_save_register_global_pointer(machine, ((UINT8 *) &antic.w), sizeof(antic.w));
}
Пример #26
0
VIDEO_START_MEMBER(twincobr_state,toaplan0)
{

    /* the video RAM is accessed via ports, it's not memory mapped */
    m_txvideoram_size = 0x0800;
    m_bgvideoram_size = 0x2000; /* banked two times 0x1000 */
    m_fgvideoram_size = 0x1000;

    twincobr_create_tilemaps(machine());

    m_txvideoram16 = auto_alloc_array_clear(machine(), UINT16, m_txvideoram_size);
    m_fgvideoram16 = auto_alloc_array_clear(machine(), UINT16, m_fgvideoram_size);
    m_bgvideoram16 = auto_alloc_array_clear(machine(), UINT16, m_bgvideoram_size);

    m_display_on = 0;
    twincobr_display(machine(), m_display_on);

    state_save_register_global_pointer(machine(), m_txvideoram16, m_txvideoram_size);
    state_save_register_global_pointer(machine(), m_fgvideoram16, m_fgvideoram_size);
    state_save_register_global_pointer(machine(), m_bgvideoram16, m_bgvideoram_size);
    state_save_register_global(machine(), m_txoffs);
    state_save_register_global(machine(), m_fgoffs);
    state_save_register_global(machine(), m_bgoffs);
    state_save_register_global(machine(), m_scroll_x);
    state_save_register_global(machine(), m_scroll_y);
    state_save_register_global(machine(), m_txscrollx);
    state_save_register_global(machine(), m_fgscrollx);
    state_save_register_global(machine(), m_bgscrollx);
    state_save_register_global(machine(), m_txscrolly);
    state_save_register_global(machine(), m_fgscrolly);
    state_save_register_global(machine(), m_bgscrolly);
    state_save_register_global(machine(), m_display_on);
    state_save_register_global(machine(), m_fg_rom_bank);
    state_save_register_global(machine(), m_bg_ram_bank);
    state_save_register_global(machine(), m_flip_screen);
    state_save_register_global(machine(), m_wardner_sprite_hack);
    machine().save().register_postload(save_prepost_delegate(FUNC(twincobr_restore_screen), &machine()));
}
Пример #27
0
static VIDEO_START( common )
{
	/* allocate memory */
	midyunit_cmos_ram = auto_alloc_array(machine, UINT16, (0x2000 * 4)/2);
	local_videoram = auto_alloc_array_clear(machine, UINT16, 0x80000/2);
	pen_map = auto_alloc_array(machine, pen_t, 65536);

	/* reset all the globals */
	midyunit_cmos_page = 0;
	autoerase_enable = 0;
	yawdim_dma = 0;

	/* reset DMA state */
	memset(dma_register, 0, sizeof(dma_register));
	memset(&dma_state, 0, sizeof(dma_state));

	/* register for state saving */
	state_save_register_global(machine, autoerase_enable);
	state_save_register_global_pointer(machine, local_videoram, 0x80000/2);
	state_save_register_global_pointer(machine, midyunit_cmos_ram, (0x2000 * 4)/2);
	state_save_register_global(machine, videobank_select);
	state_save_register_global_array(machine, dma_register);
}
Пример #28
0
static void init_common(running_machine *machine)
{
	flipscreen_old = -1;

	/* allocate local videoram */
	local_videoram[0] = auto_alloc_array(machine, UINT8, 0x1000 * 3);
	local_videoram[1] = auto_alloc_array(machine, UINT8, 0x1000 * 3);

	/* allocate local palette RAM */
	local_paletteram = auto_alloc_array(machine, UINT8, 0x800 * 2);

	/* configure tilemaps */
	tilemap_set_transparent_pen(fg_tilemap,15);

	/* reset the timer */
	crtc_timer = timer_alloc(machine, crtc_interrupt_gen, NULL);

	scrollx_ofs = 0x159;
	scrolly_ofs = 0x10;

	/* state save */
	state_save_register_global(machine, selected_videoram);
	state_save_register_global_pointer(machine, local_videoram[0], 0x1000 * 3);
	state_save_register_global_pointer(machine, local_videoram[1], 0x1000 * 3);
	state_save_register_global(machine, selected_paletteram);
	state_save_register_global_array(machine, scrollx);
	state_save_register_global_array(machine, scrolly);
	state_save_register_global(machine, gfxreg);
	state_save_register_global(machine, flipscreen);
	state_save_register_global(machine, flipscreen_old);
	state_save_register_global(machine, scrollx_ofs);
	state_save_register_global(machine, scrolly_ofs);
	state_save_register_global(machine, crtc_register);
	state_save_register_global_array(machine, crtc_data);
	state_save_register_global_pointer(machine, local_paletteram, 0x800 * 2);
}
Пример #29
0
static MACHINE_START( ccastles )
{
	rectangle visarea;

	/* initialize globals */
	syncprom = memory_region(REGION_PROMS) + 0x000;

	/* find the start of VBLANK in the SYNC PROM */
	for (ccastles_vblank_start = 0; ccastles_vblank_start < 256; ccastles_vblank_start++)
		if ((syncprom[(ccastles_vblank_start - 1) & 0xff] & 1) == 0 && (syncprom[ccastles_vblank_start] & 1) != 0)
			break;
	if (ccastles_vblank_start == 0)
		ccastles_vblank_start = 256;

	/* find the end of VBLANK in the SYNC PROM */
	for (ccastles_vblank_end = 0; ccastles_vblank_end < 256; ccastles_vblank_end++)
		if ((syncprom[(ccastles_vblank_end - 1) & 0xff] & 1) != 0 && (syncprom[ccastles_vblank_end] & 1) == 0)
			break;

	/* can't handle the wrapping case */
	assert(ccastles_vblank_end < ccastles_vblank_start);

	/* reconfigure the visible area to match */
	visarea.min_x = 0;
	visarea.max_x = 255;
	visarea.min_y = ccastles_vblank_end;
	visarea.max_y = ccastles_vblank_start - 1;
	video_screen_configure(0, 320, 256, &visarea, (float)PIXEL_CLOCK / (float)VTOTAL / (float)HTOTAL);

	/* configure the ROM banking */
	memory_configure_bank(1, 0, 2, memory_region(REGION_CPU1) + 0xa000, 0x6000);

	/* create a timer for IRQs and set up the first callback */
	irq_timer = timer_alloc(clock_irq);
	irq_state = 0;
	schedule_next_irq(0);

	/* allocate backing memory for the NVRAM */
	generic_nvram = auto_malloc(generic_nvram_size);

	/* setup for save states */
	state_save_register_global(irq_state);
	state_save_register_global_array(nvram_store);
	state_save_register_global_pointer(generic_nvram, generic_nvram_size);

	return 0;
}
Пример #30
0
void tms34061_start(running_machine &machine, const struct tms34061_interface *interface)
{
	/* reset the data */
	memset(&tms34061, 0, sizeof(tms34061));
	tms34061.intf = *interface;
	tms34061.screen = downcast<screen_device *>(machine.device(tms34061.intf.screen_tag));
	tms34061.vrammask = tms34061.intf.vramsize - 1;

	/* allocate memory for VRAM */
	tms34061.vram = auto_alloc_array_clear(machine, UINT8, tms34061.intf.vramsize + 256 * 2);
	/* not really a save state, just there for debugging purposes */
	state_save_register_global_pointer(machine, tms34061.vram, tms34061.intf.vramsize);

	/* allocate memory for latch RAM */
	tms34061.latchram = auto_alloc_array_clear(machine, UINT8, tms34061.intf.vramsize + 256 * 2);

	/* add some buffer space for VRAM and latch RAM */
	tms34061.vram += 256;
	tms34061.latchram += 256;

	/* point the shift register to the base of VRAM for now */
	tms34061.shiftreg = tms34061.vram;

	/* initialize registers to their default values from the manual */
	tms34061.regs[TMS34061_HORENDSYNC]   = 0x0010;
	tms34061.regs[TMS34061_HORENDBLNK]   = 0x0020;
	tms34061.regs[TMS34061_HORSTARTBLNK] = 0x01f0;
	tms34061.regs[TMS34061_HORTOTAL]     = 0x0200;
	tms34061.regs[TMS34061_VERENDSYNC]   = 0x0004;
	tms34061.regs[TMS34061_VERENDBLNK]   = 0x0010;
	tms34061.regs[TMS34061_VERSTARTBLNK] = 0x00f0;
	tms34061.regs[TMS34061_VERTOTAL]     = 0x0100;
	tms34061.regs[TMS34061_DISPUPDATE]   = 0x0000;
	tms34061.regs[TMS34061_DISPSTART]    = 0x0000;
	tms34061.regs[TMS34061_VERINT]       = 0x0000;
	tms34061.regs[TMS34061_CONTROL1]     = 0x7000;
	tms34061.regs[TMS34061_CONTROL2]     = 0x0600;
	tms34061.regs[TMS34061_STATUS]       = 0x0000;
	tms34061.regs[TMS34061_XYOFFSET]     = 0x0010;
	tms34061.regs[TMS34061_XYADDRESS]    = 0x0000;
	tms34061.regs[TMS34061_DISPADDRESS]  = 0x0000;
	tms34061.regs[TMS34061_VERCOUNTER]   = 0x0000;

	/* start vertical interrupt timer */
	tms34061.timer = machine.scheduler().timer_alloc(FUNC(tms34061_interrupt));
}