- First batch of machine->screen[] access has been removed

- Added video_screen_auto_bitmap_alloc(screen) -- it is just a shorthand for 
  auto_bitmap_alloc(video_screen_get_width(screen), video_screen_get_height(screen), video_screen_get_format(screen))
  which is a common operation
- The Dynax/Don Den Lover games now do their updating in VIDEO_UPDATE instead of VIDEO_EOF.  This semmed to
  have fixed the palette problems
- Went through some of these drivers and changed Machine to machine
This commit is contained in:
Zsolt Vasvari 2008-03-11 08:37:05 +00:00
parent bf88dd74e3
commit 77a58d253c
53 changed files with 258 additions and 278 deletions

View File

@ -9414,12 +9414,12 @@ static void HandleLocalCommandCheat(running_machine *machine, UINT32 type, UINT3
/* ----- refresh rate ----- */
case kCustomLocation_RefreshRate:
{
screen_state *state = &machine->screen[0];
double refresh = data;
int width = video_screen_get_width(machine->primary_screen);
int height = video_screen_get_height(machine->primary_screen);
const rectangle *visarea = video_screen_get_visible_area(machine->primary_screen);
double refresh = data / 65536.0;
refresh /= 65536.0;
video_screen_configure(machine->primary_screen, state->width, state->height, &state->visarea, HZ_TO_ATTOSECONDS(refresh));
video_screen_configure(machine->primary_screen, width, height, visarea, HZ_TO_ATTOSECONDS(refresh));
}
break;
}

View File

@ -465,7 +465,7 @@ void render_container_set_overlay(render_container *container, bitmap_t *bitmap)
/* return a pointer to the UI container */
render_container *render_container_get_ui(void);
/* return a pointer to the indexed screen container */
/* return a pointer to the container for the given screen */
render_container *render_container_get_screen(const device_config *screen);
/* set the opacity of a given palette entry */

View File

@ -263,8 +263,8 @@ INLINE tilemap *indexed_tilemap(int index)
void tilemap_init(running_machine *machine)
{
screen_width = machine->screen[0].width;
screen_height = machine->screen[0].height;
screen_width = video_screen_get_width(machine->primary_screen);
screen_height = video_screen_get_height(machine->primary_screen);
if (screen_width != 0 && screen_height != 0)
{

View File

@ -153,7 +153,7 @@ static INT32 slider_xoffset(running_machine *machine, INT32 newval, char *buffer
static INT32 slider_yoffset(running_machine *machine, INT32 newval, char *buffer, int arg);
static INT32 slider_flicker(running_machine *machine, INT32 newval, char *buffer, int arg);
static INT32 slider_beam(running_machine *machine, INT32 newval, char *buffer, int arg);
static char *slider_get_screen_desc(int arg);
static char *slider_get_screen_desc(const device_config *screen);
#ifdef MAME_DEBUG
static INT32 slider_crossscale(running_machine *machine, INT32 newval, char *buffer, int arg);
static INT32 slider_crossoffset(running_machine *machine, INT32 newval, char *buffer, int arg);
@ -1115,22 +1115,25 @@ int sprintf_game_info(char *buffer)
for (screen = video_screen_first(Machine->config); screen != NULL; screen = video_screen_next(screen))
{
int index = device_list_index(Machine->config->devicelist, VIDEO_SCREEN, screen->tag);
const screen_config *scrconfig = screen->inline_config;
if (scrcount > 1)
bufptr += sprintf(bufptr, "%s: ", slider_get_screen_desc(index));
bufptr += sprintf(bufptr, "%s: ", slider_get_screen_desc(screen));
if (scrconfig->type == SCREEN_TYPE_VECTOR)
bufptr += sprintf(bufptr, "Vector\n");
else
{
const rectangle *visarea = video_screen_get_visible_area(screen);
bufptr += sprintf(bufptr, "%d " UTF8_MULTIPLY " %d (%s) %f" UTF8_NBSP "Hz\n",
Machine->screen[index].visarea.max_x - Machine->screen[index].visarea.min_x + 1,
Machine->screen[index].visarea.max_y - Machine->screen[index].visarea.min_y + 1,
visarea->max_x - visarea->min_x + 1,
visarea->max_y - visarea->min_y + 1,
(Machine->gamedrv->flags & ORIENTATION_SWAP_XY) ? "V" : "H",
ATTOSECONDS_TO_HZ(video_screen_get_frame_period(screen).attoseconds));
}
}
}
return bufptr - buffer;
}
@ -1748,7 +1751,7 @@ static INT32 slider_refresh(running_machine *machine, INT32 newval, char *buffer
const rectangle *visarea = video_screen_get_visible_area(screen);
video_screen_configure(screen, width, height, visarea, HZ_TO_ATTOSECONDS(defrefresh + (double)newval * 0.001));
sprintf(buffer, "%s Refresh Rate %.3ffps", slider_get_screen_desc(arg), ATTOSECONDS_TO_HZ(video_screen_get_frame_period(machine->primary_screen).attoseconds));
sprintf(buffer, "%s Refresh Rate %.3ffps", slider_get_screen_desc(screen), ATTOSECONDS_TO_HZ(video_screen_get_frame_period(machine->primary_screen).attoseconds));
}
refresh = ATTOSECONDS_TO_HZ(video_screen_get_frame_period(machine->primary_screen).attoseconds);
return floor((refresh - defrefresh) * 1000.0f + 0.5f);
@ -1767,7 +1770,7 @@ static INT32 slider_brightness(running_machine *machine, INT32 newval, char *buf
if (buffer != NULL)
{
render_container_set_brightness(container, (float)newval * 0.001f);
sprintf(buffer, "%s Brightness %.3f", slider_get_screen_desc(arg), render_container_get_brightness(container));
sprintf(buffer, "%s Brightness %.3f", slider_get_screen_desc(screen), render_container_get_brightness(container));
}
return floor(render_container_get_brightness(container) * 1000.0f + 0.5f);
}
@ -1785,7 +1788,7 @@ static INT32 slider_contrast(running_machine *machine, INT32 newval, char *buffe
if (buffer != NULL)
{
render_container_set_contrast(container, (float)newval * 0.001f);
sprintf(buffer, "%s Contrast %.3f", slider_get_screen_desc(arg), render_container_get_contrast(container));
sprintf(buffer, "%s Contrast %.3f", slider_get_screen_desc(screen), render_container_get_contrast(container));
}
return floor(render_container_get_contrast(container) * 1000.0f + 0.5f);
}
@ -1802,7 +1805,7 @@ static INT32 slider_gamma(running_machine *machine, INT32 newval, char *buffer,
if (buffer != NULL)
{
render_container_set_gamma(container, (float)newval * 0.001f);
sprintf(buffer, "%s Gamma %.3f", slider_get_screen_desc(arg), render_container_get_gamma(container));
sprintf(buffer, "%s Gamma %.3f", slider_get_screen_desc(screen), render_container_get_gamma(container));
}
return floor(render_container_get_gamma(container) * 1000.0f + 0.5f);
}
@ -1820,7 +1823,7 @@ static INT32 slider_xscale(running_machine *machine, INT32 newval, char *buffer,
if (buffer != NULL)
{
render_container_set_xscale(container, (float)newval * 0.001f);
sprintf(buffer, "%s %s %.3f", slider_get_screen_desc(arg), "Horiz Stretch", render_container_get_xscale(container));
sprintf(buffer, "%s %s %.3f", slider_get_screen_desc(screen), "Horiz Stretch", render_container_get_xscale(container));
}
return floor(render_container_get_xscale(container) * 1000.0f + 0.5f);
}
@ -1838,7 +1841,7 @@ static INT32 slider_yscale(running_machine *machine, INT32 newval, char *buffer,
if (buffer != NULL)
{
render_container_set_yscale(container, (float)newval * 0.001f);
sprintf(buffer, "%s %s %.3f", slider_get_screen_desc(arg), "Vert Stretch", render_container_get_yscale(container));
sprintf(buffer, "%s %s %.3f", slider_get_screen_desc(screen), "Vert Stretch", render_container_get_yscale(container));
}
return floor(render_container_get_yscale(container) * 1000.0f + 0.5f);
}
@ -1856,7 +1859,7 @@ static INT32 slider_xoffset(running_machine *machine, INT32 newval, char *buffer
if (buffer != NULL)
{
render_container_set_xoffset(container, (float)newval * 0.001f);
sprintf(buffer, "%s %s %.3f", slider_get_screen_desc(arg), "Horiz Position", render_container_get_xoffset(container));
sprintf(buffer, "%s %s %.3f", slider_get_screen_desc(screen), "Horiz Position", render_container_get_xoffset(container));
}
return floor(render_container_get_xoffset(container) * 1000.0f + 0.5f);
}
@ -1874,7 +1877,7 @@ static INT32 slider_yoffset(running_machine *machine, INT32 newval, char *buffer
if (buffer != NULL)
{
render_container_set_yoffset(container, (float)newval * 0.001f);
sprintf(buffer, "%s %s %.3f", slider_get_screen_desc(arg), "Vert Position", render_container_get_yoffset(container));
sprintf(buffer, "%s %s %.3f", slider_get_screen_desc(screen), "Vert Position", render_container_get_yoffset(container));
}
return floor(render_container_get_yoffset(container) * 1000.0f + 0.5f);
}
@ -1917,10 +1920,9 @@ static INT32 slider_beam(running_machine *machine, INT32 newval, char *buffer, i
description for a given screen index
-------------------------------------------------*/
static char *slider_get_screen_desc(int arg)
static char *slider_get_screen_desc(const device_config *screen)
{
const device_config *screen = device_list_find_by_index(Machine->config->devicelist, VIDEO_SCREEN, arg);
int screen_count = video_screen_count(Machine->config);
int screen_count = video_screen_count(screen->machine->config);
static char descbuf[256];
if (screen_count > 1)

View File

@ -1033,7 +1033,7 @@ static void tilemap_handle_keys(ui_gfx_state *state, int viswidth, int visheight
static void tilemap_update_bitmap(ui_gfx_state *state, int width, int height)
{
bitmap_format screen_format = Machine->screen[0].format;
bitmap_format screen_format = video_screen_get_format(Machine->primary_screen);
int screen_texformat;
/* convert the screen format to a texture format */

View File

@ -14,6 +14,10 @@
#ifndef __VIDEO_H__
#define __VIDEO_H__
#include "mamecore.h"
#include "devintrf.h"
#include "timer.h"
/***************************************************************************
CONSTANTS
@ -47,6 +51,12 @@ enum
#define video_screen_first(config) device_list_first((config)->devicelist, VIDEO_SCREEN)
#define video_screen_next(previous) device_list_next((previous), VIDEO_SCREEN)
#define video_screen_get_format(screen) (((screen_config *)(screen)->inline_config)->format)
/* allocates a bitmap that has the same dimensions and format as the passed in screen */
#define video_screen_auto_bitmap_alloc(screen) auto_bitmap_alloc(video_screen_get_width(screen), video_screen_get_height(screen), video_screen_get_format(screen))
/***************************************************************************

View File

@ -313,7 +313,7 @@ void generic_video_init(running_machine *machine)
VIDEO_START( generic_bitmapped )
{
/* allocate the temporary bitmap */
tmpbitmap = auto_bitmap_alloc(machine->screen[0].width, machine->screen[0].height, machine->screen[0].format);
tmpbitmap = video_screen_auto_bitmap_alloc(machine->primary_screen);
/* ensure the contents of the bitmap are saved */
state_save_register_bitmap("video", 0, "tmpbitmap", tmpbitmap);
@ -450,8 +450,10 @@ void buffer_spriteram_2(UINT8 *ptr, int length)
static void updateflip(void)
{
screen_state *state = &Machine->screen[0];
rectangle visarea = state->visarea;
int width = video_screen_get_width(Machine->primary_screen);
int height = video_screen_get_height(Machine->primary_screen);
attoseconds_t period = video_screen_get_frame_period(Machine->primary_screen).attoseconds;
rectangle visarea = *video_screen_get_visible_area(Machine->primary_screen);
tilemap_set_flip(ALL_TILEMAPS,(TILEMAP_FLIPX & flip_screen_x) | (TILEMAP_FLIPY & flip_screen_y));
@ -459,20 +461,20 @@ static void updateflip(void)
{
int temp;
temp = state->width - visarea.min_x - 1;
visarea.min_x = state->width - visarea.max_x - 1;
temp = width - visarea.min_x - 1;
visarea.min_x = width - visarea.max_x - 1;
visarea.max_x = temp;
}
if (flip_screen_y)
{
int temp;
temp = state->height - visarea.min_y - 1;
visarea.min_y = state->height - visarea.max_y - 1;
temp = height - visarea.min_y - 1;
visarea.min_y = height - visarea.max_y - 1;
visarea.max_y = temp;
}
video_screen_configure(Machine->primary_screen, state->width, state->height, &visarea, video_screen_get_frame_period(Machine->primary_screen).attoseconds);
video_screen_configure(Machine->primary_screen, width, height, &visarea, period);
}

View File

@ -194,7 +194,8 @@ static void TMS9928A_start (running_machine *machine, const TMS9928a_interface *
tms.visarea.max_y = tms.top_border + 24*8 - 1 + MIN(intf->bordery, tms.bottom_border);
/* configure the screen if we weren't overridden */
if (machine->screen[0].width == LEFT_BORDER+32*8+RIGHT_BORDER && machine->screen[0].height == TOP_BORDER_60HZ+24*8+BOTTOM_BORDER_60HZ)
if (video_screen_get_width(machine->primary_screen) == LEFT_BORDER+32*8+RIGHT_BORDER &&
video_screen_get_height(machine->primary_screen) == TOP_BORDER_60HZ+24*8+BOTTOM_BORDER_60HZ)
video_screen_configure(machine->primary_screen, LEFT_BORDER + 32*8 + RIGHT_BORDER, tms.top_border + 24*8 + tms.bottom_border, &tms.visarea, video_screen_get_frame_period(machine->primary_screen).attoseconds);
/* Video RAM */
@ -206,7 +207,7 @@ static void TMS9928A_start (running_machine *machine, const TMS9928a_interface *
tms.dBackMem = (UINT8*)auto_malloc (IMAGE_SIZE);
/* back bitmap */
tms.tmpbmp = auto_bitmap_alloc (256, 192, machine->screen[0].format);
tms.tmpbmp = auto_bitmap_alloc (256, 192, video_screen_get_format(machine->primary_screen));
TMS9928A_reset ();
tms.LimitSprites = 1;

View File

@ -22,7 +22,6 @@
#include "driver.h"
#include "render.h"
#include "deprecat.h"
#include "includes/amiga.h"
#include "machine/laserdsc.h"
@ -47,16 +46,18 @@ static TIMER_CALLBACK( response_timer );
*
*************************************/
static int get_lightgun_pos(int player, int *x, int *y)
static int get_lightgun_pos(const device_config *screen, int player, int *x, int *y)
{
const rectangle *visarea = video_screen_get_visible_area(screen);
int xpos = readinputportbytag_safe((player == 0) ? "GUN1X" : "GUN2X", -1);
int ypos = readinputportbytag_safe((player == 0) ? "GUN1Y" : "GUN2Y", -1);
if (xpos == -1 || ypos == -1)
return FALSE;
*x = Machine->screen[0].visarea.min_x + xpos * (Machine->screen[0].visarea.max_x - Machine->screen[0].visarea.min_x + 1) / 255;
*y = Machine->screen[0].visarea.min_y + ypos * (Machine->screen[0].visarea.max_y - Machine->screen[0].visarea.min_y + 1) / 255;
*x = visarea->min_x + xpos * (visarea->max_x - visarea->min_x + 1) / 255;
*y = visarea->min_y + ypos * (visarea->max_y - visarea->min_y + 1) / 255;
return TRUE;
}
@ -78,7 +79,7 @@ static VIDEO_START( alg )
add_exit_callback(machine, video_cleanup);
/* allocate Amiga bitmap */
amiga_bitmap = auto_bitmap_alloc(machine->screen[0].width, machine->screen[0].height, machine->screen[0].format);
amiga_bitmap = video_screen_auto_bitmap_alloc(machine->primary_screen);
/* standard video start */
VIDEO_START_CALL(amiga);
@ -242,7 +243,7 @@ static CUSTOM_INPUT( lightgun_pos_r )
int x = 0, y = 0;
/* get the position based on the input select */
get_lightgun_pos(input_select, &x, &y);
get_lightgun_pos(machine->primary_screen, input_select, &x, &y);
return (y << 8) | (x >> 2);
}

View File

@ -48,6 +48,12 @@ static void update_interrupts(running_machine *machine)
}
static WRITE16_HANDLER( blstroid_halt_until_hblank_0_w )
{
atarigen_halt_until_hblank_0(machine->primary_screen);
}
static MACHINE_RESET( blstroid )
{
atarigen_eeprom_reset();
@ -91,7 +97,7 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0xff8800, 0xff89ff) AM_MIRROR(0x7f8000) AM_WRITE(SMH_RAM) AM_BASE(&blstroid_priorityram)
AM_RANGE(0xff8a00, 0xff8a01) AM_MIRROR(0x7f81fe) AM_WRITE(atarigen_sound_w)
AM_RANGE(0xff8c00, 0xff8c01) AM_MIRROR(0x7f81fe) AM_WRITE(atarigen_sound_reset_w)
AM_RANGE(0xff8e00, 0xff8e01) AM_MIRROR(0x7f81fe) AM_WRITE(atarigen_halt_until_hblank_0_w)
AM_RANGE(0xff8e00, 0xff8e01) AM_MIRROR(0x7f81fe) AM_WRITE(blstroid_halt_until_hblank_0_w)
AM_RANGE(0xff9400, 0xff9401) AM_MIRROR(0x7f83fe) AM_READ(atarigen_sound_r)
AM_RANGE(0xff9800, 0xff9801) AM_MIRROR(0x7f83f8) AM_READ(input_port_0_word_r)
AM_RANGE(0xff9804, 0xff9805) AM_MIRROR(0x7f83f8) AM_READ(input_port_1_word_r)

View File

@ -330,7 +330,6 @@ Notes:
#include "driver.h"
#include "cdrom.h"
#include "deprecat.h"
#include "cpu/sh2/sh2.h"
#include "machine/intelfsh.h"
#include "includes/cps3.h"
@ -386,7 +385,7 @@ static rectangle renderbuffer_clip;
#define CPS3_TRANSPARENCY_PEN_INDEX 2
#define CPS3_TRANSPARENCY_PEN_INDEX_BLEND 3
INLINE void cps3_drawgfxzoom( bitmap_t *dest_bmp,const gfx_element *gfx,
INLINE void cps3_drawgfxzoom(running_machine *machine, bitmap_t *dest_bmp,const gfx_element *gfx,
unsigned int code,unsigned int color,int flipx,int flipy,int sx,int sy,
const rectangle *clip,int transparency,int transparent_color,
int scalex, int scaley,bitmap_t *pri_buffer,UINT32 pri_mask)
@ -587,7 +586,7 @@ INLINE void cps3_drawgfxzoom( bitmap_t *dest_bmp,const gfx_element *gfx,
if (c&0x02) dest[x] |= 0x4000;
if (c&0x04) dest[x] |= 0x8000;
if (c&0x08) dest[x] |= 0x10000;
if (c&0xf0) dest[x] |= mame_rand(Machine); // ?? not used?
if (c&0xf0) dest[x] |= mame_rand(machine); // ?? not used?
}
else
{
@ -687,7 +686,7 @@ static const struct game_keys2 keys_table2[] =
{ 0 } // end of table
};
static void cps3_decrypt_bios(void)
static void cps3_decrypt_bios(running_machine *machine)
{
int i;
UINT32 *coderegion = (UINT32*)memory_region(REGION_USER1);
@ -713,7 +712,7 @@ static void cps3_decrypt_bios(void)
/* Dump to file */
{
FILE *fp;
const char *gamename = Machine->gamedrv->name;
const char *gamename = machine->gamedrv->name;
char filename[256];
sprintf(filename, "%s_bios.dump", gamename);
@ -753,7 +752,7 @@ static DRIVER_INIT( cps3crpt )
++k;
}
cps3_decrypt_bios();
cps3_decrypt_bios(machine);
decrypted_gamerom = auto_malloc(0x1000000);
/* just some NOPs for the game to execute if it crashes and starts executing unmapped addresses
@ -812,7 +811,7 @@ static int cps3_ss_ram_is_dirty;
static UINT8* cps3_char_ram_dirty;
static int cps3_char_ram_is_dirty;
static void cps3_set_mame_colours( int colournum, UINT16 data, UINT32 fadeval )
static void cps3_set_mame_colours(running_machine *machine, int colournum, UINT16 data, UINT32 fadeval )
{
int r,g,b;
UINT16* dst = (UINT16*)cps3_colourram;
@ -847,50 +846,9 @@ static void cps3_set_mame_colours( int colournum, UINT16 data, UINT32 fadeval )
cps3_mame_colours[colournum] = (r << (16+3)) | (g << (8+3)) | (b << (0+3));
if (colournum<0x10000) palette_set_color(Machine,colournum,cps3_mame_colours[colournum]/* MAKE_RGB(r<<3,g<<3,b<<3)*/);//cps3_mame_colours[colournum]);
if (colournum<0x10000) palette_set_color(machine,colournum,cps3_mame_colours[colournum]/* MAKE_RGB(r<<3,g<<3,b<<3)*/);//cps3_mame_colours[colournum]);
}
#ifdef UNUSED_FUNCTION
static void decode_ssram(void)
{
if (cps3_ss_ram_dirty)
{
int i;
for (i=0;i<0x400;i++)
{
if (cps3_ss_ram_dirty[i])
{
decodechar(Machine->gfx[0], i, (UINT8*)cps3_ss_ram);
cps3_ss_ram_dirty[i] = 0;
}
}
cps3_ss_ram_is_dirty = 0;
}
return;
}
static void decode_charram(void)
{
if (cps3_char_ram_is_dirty)
{
int i;
for (i=0;i<0x8000;i++)
{
if (cps3_char_ram_dirty[i])
{
decodechar(Machine->gfx[1], i, (UINT8*)cps3_char_ram);
cps3_char_ram_dirty[i] = 0;
}
}
cps3_char_ram_is_dirty = 0;
}
return;
}
#endif
static VIDEO_START(cps3)
{
@ -928,7 +886,7 @@ static VIDEO_START(cps3)
// the renderbuffer can be twice the size of the screen, this allows us to handle framebuffer zoom values
// between 0x00 and 0x80 (0x40 is normal, 0x80 would be 'view twice as much', 0x20 is 'view half as much')
renderbuffer_bitmap = auto_bitmap_alloc(512*2,224*2,machine->screen[0].format);
renderbuffer_bitmap = auto_bitmap_alloc(512*2,224*2,video_screen_get_format(machine->primary_screen));
renderbuffer_clip.min_x = 0;
renderbuffer_clip.max_x = cps3_screenwidth-1;
@ -941,7 +899,7 @@ static VIDEO_START(cps3)
// the 0x400 bit in the tilemap regs is "draw it upside-down" (bios tilemap during flashing, otherwise capcom logo is flipped)
static void cps3_draw_tilemapsprite_line(int tmnum, int drawline, bitmap_t *bitmap, const rectangle *cliprect )
static void cps3_draw_tilemapsprite_line(running_machine *machine, int tmnum, int drawline, bitmap_t *bitmap, const rectangle *cliprect )
{
UINT32* tmapregs[4] = { tilemap20_regs_base, tilemap30_regs_base, tilemap40_regs_base, tilemap50_regs_base };
UINT32* regs;
@ -1015,15 +973,15 @@ static void cps3_draw_tilemapsprite_line(int tmnum, int drawline, bitmap_t *bitm
yflip = (dat & 0x00000800)>>11;
xflip = (dat & 0x00001000)>>12;
if (!bpp) Machine->gfx[1]->color_granularity=256;
else Machine->gfx[1]->color_granularity=64;
if (!bpp) machine->gfx[1]->color_granularity=256;
else machine->gfx[1]->color_granularity=64;
if (cps3_char_ram_dirty[tileno])
{
decodechar(Machine->gfx[1], tileno, (UINT8*)cps3_char_ram);
decodechar(machine->gfx[1], tileno, (UINT8*)cps3_char_ram);
cps3_char_ram_dirty[tileno] = 0;
}
cps3_drawgfxzoom(bitmap, Machine->gfx[1],tileno,colour,xflip,yflip,(x*16)-scrollx%16,drawline-tilesubline,&clip,CPS3_TRANSPARENCY_PEN_INDEX,0, 0x10000, 0x10000, NULL, 0);
cps3_drawgfxzoom(machine, bitmap, machine->gfx[1],tileno,colour,xflip,yflip,(x*16)-scrollx%16,drawline-tilesubline,&clip,CPS3_TRANSPARENCY_PEN_INDEX,0, 0x10000, 0x10000, NULL, 0);
}
}
@ -1032,7 +990,8 @@ static void cps3_draw_tilemapsprite_line(int tmnum, int drawline, bitmap_t *bitm
static VIDEO_UPDATE(cps3)
{
int y,x, count;
// int offset;
attoseconds_t period = video_screen_get_frame_period(screen).attoseconds;
rectangle visarea = *video_screen_get_visible_area(screen);
int bg_drawn[4] = { 0, 0, 0, 0 };
@ -1049,24 +1008,20 @@ static VIDEO_UPDATE(cps3)
{
if (cps3_screenwidth!=496)
{
screen_state *state = &screen->machine->screen[0];
rectangle visarea = state->visarea;
cps3_screenwidth = 496;
visarea.min_x = 0; visarea.max_x = 496-1;
visarea.min_y = 0; visarea.max_y = 224-1;
video_screen_configure(screen, 496, 224, &visarea, video_screen_get_frame_period(screen).attoseconds);
video_screen_configure(screen, 496, 224, &visarea, period);
}
}
else
{
if (cps3_screenwidth!=384)
{
screen_state *state = &screen->machine->screen[0];
rectangle visarea = state->visarea;
cps3_screenwidth = 384;
visarea.min_x = 0; visarea.max_x = 384-1;
visarea.min_y = 0; visarea.max_y = 224-1;
video_screen_configure(screen, 384, 224, &visarea, video_screen_get_frame_period(screen).attoseconds);
video_screen_configure(screen, 384, 224, &visarea, period);
}
}
@ -1183,7 +1138,7 @@ static VIDEO_UPDATE(cps3)
{
for (uu=0;uu<1023;uu++)
{
cps3_draw_tilemapsprite_line( tilemapnum, uu, renderbuffer_bitmap, &renderbuffer_clip );
cps3_draw_tilemapsprite_line(screen->machine, tilemapnum, uu, renderbuffer_bitmap, &renderbuffer_clip );
}
}
bg_drawn[tilemapnum] = 1;
@ -1276,11 +1231,11 @@ static VIDEO_UPDATE(cps3)
if (global_alpha || alpha)
{
cps3_drawgfxzoom(renderbuffer_bitmap, screen->machine->gfx[1],realtileno,actualpal,0^flipx,0^flipy,current_xpos,current_ypos,&renderbuffer_clip,CPS3_TRANSPARENCY_PEN_INDEX_BLEND,0,xinc,yinc, NULL, 0);
cps3_drawgfxzoom(screen->machine, renderbuffer_bitmap, screen->machine->gfx[1],realtileno,actualpal,0^flipx,0^flipy,current_xpos,current_ypos,&renderbuffer_clip,CPS3_TRANSPARENCY_PEN_INDEX_BLEND,0,xinc,yinc, NULL, 0);
}
else
{
cps3_drawgfxzoom(renderbuffer_bitmap, screen->machine->gfx[1],realtileno,actualpal,0^flipx,0^flipy,current_xpos,current_ypos,&renderbuffer_clip,CPS3_TRANSPARENCY_PEN_INDEX,0,xinc,yinc, NULL, 0);
cps3_drawgfxzoom(screen->machine, renderbuffer_bitmap, screen->machine->gfx[1],realtileno,actualpal,0^flipx,0^flipy,current_xpos,current_ypos,&renderbuffer_clip,CPS3_TRANSPARENCY_PEN_INDEX,0,xinc,yinc, NULL, 0);
}
count++;
}
@ -1353,7 +1308,7 @@ static VIDEO_UPDATE(cps3)
cps3_ss_ram_dirty[tile] = 0;
}
cps3_drawgfxzoom(bitmap, screen->machine->gfx[0],tile,pal,flipx,flipy,x*8,y*8,cliprect,CPS3_TRANSPARENCY_PEN,0,0x10000,0x10000,NULL,0);
cps3_drawgfxzoom(screen->machine, bitmap, screen->machine->gfx[0],tile,pal,flipx,flipy,x*8,y*8,cliprect,CPS3_TRANSPARENCY_PEN,0,0x10000,0x10000,NULL,0);
count++;
}
}
@ -2014,11 +1969,11 @@ static WRITE32_HANDLER( cps3_palettedma_w )
//if (paldma_fade!=0) printf("%08x\n",paldma_fade);
cps3_set_mame_colours((paldma_dest+i)^1, coldata, paldma_fade);
cps3_set_mame_colours(machine, (paldma_dest+i)^1, coldata, paldma_fade);
}
cpunum_set_input_line(Machine, 0,10, ASSERT_LINE);
cpunum_set_input_line(machine, 0,10, ASSERT_LINE);
}
@ -2212,7 +2167,7 @@ static void cps3_do_alt_char_dma( UINT32 src, UINT32 real_dest, UINT32 real_leng
}
}
static void cps3_process_character_dma(UINT32 address)
static void cps3_process_character_dma(running_machine *machine, UINT32 address)
{
int i;
@ -2239,14 +2194,14 @@ static void cps3_process_character_dma(UINT32 address)
/* We should probably copy this, but a pointer to it is fine for our purposes as the data doesn't change */
current_table_address = real_source;
}
cpunum_set_input_line(Machine, 0,10, ASSERT_LINE);
cpunum_set_input_line(machine, 0,10, ASSERT_LINE);
}
else if ( (dat1&0x00e00000) ==0x00400000 )
{
/* 6bpp DMA decompression
- this is used for the majority of sprites and backgrounds */
cps3_do_char_dma( real_source, real_destination, real_length );
cpunum_set_input_line(Machine, 0,10, ASSERT_LINE);
cpunum_set_input_line(machine, 0,10, ASSERT_LINE);
}
else if ( (dat1&0x00e00000) ==0x00600000 )
@ -2254,7 +2209,7 @@ static void cps3_process_character_dma(UINT32 address)
/* 8bpp DMA decompression
- this is used on SFIII NG Sean's Stage ONLY */
cps3_do_alt_char_dma( real_source, real_destination, real_length);
cpunum_set_input_line(Machine, 0,10, ASSERT_LINE);
cpunum_set_input_line(machine, 0,10, ASSERT_LINE);
}
else
{
@ -2292,7 +2247,7 @@ static WRITE32_HANDLER( cps3_characterdma_w )
list_address = (chardma_source | ((chardma_other&0x003f0000)));
//printf("chardma_w activated %08x %08x (address = cram %08x)\n", chardma_source, chardma_other, list_address*4 );
cps3_process_character_dma(list_address);
cps3_process_character_dma(machine, list_address);
}
else
{
@ -2311,12 +2266,12 @@ static WRITE32_HANDLER( cps3_characterdma_w )
static WRITE32_HANDLER( cps3_irq10_ack_w )
{
cpunum_set_input_line(Machine, 0,10, CLEAR_LINE); return;
cpunum_set_input_line(machine, 0,10, CLEAR_LINE); return;
}
static WRITE32_HANDLER( cps3_irq12_ack_w )
{
cpunum_set_input_line(Machine, 0,12, CLEAR_LINE); return;
cpunum_set_input_line(machine, 0,12, CLEAR_LINE); return;
}
static WRITE32_HANDLER( cps3_unk_vidregs_w )
@ -2337,12 +2292,12 @@ static WRITE32_HANDLER( cps3_colourram_w )
if (ACCESSING_MSB32)
{
cps3_set_mame_colours(offset*2, (data & 0xffff0000) >> 16, 0);
cps3_set_mame_colours(machine, offset*2, (data & 0xffff0000) >> 16, 0);
}
if (ACCESSING_LSB32)
{
cps3_set_mame_colours(offset*2+1, (data & 0x0000ffff) >> 0, 0);
cps3_set_mame_colours(machine, offset*2+1, (data & 0x0000ffff) >> 0, 0);
}
}
@ -2672,7 +2627,7 @@ static void copy_from_nvram(void)
/*
{
FILE *fp;
const char *gamename = Machine->gamedrv->name;
const char *gamename = machine->gamedrv->name;
char filename[256];
sprintf(filename, "%s_bios.dump", gamename);

View File

@ -36,12 +36,6 @@ Year + Game Board CPU Sound C
98 Reach Ippatsu Z80 YM2413 + M6295 70C160F011
-----------------------------------------------------------------------------------------------------------------------------
Notes:
- the zooming Dynax logo in ddenlovr would flicker because the palette is
updated one frame after the bitmap. This is fixed using a framebuffer but I
don't think it's correct.
TODO:
@ -60,8 +54,6 @@ TODO:
- ddenlovr: sometimes the colors of the girl in the presentation before the
beginning of a stage are wrong, and they correct themselves when the board
is drawn.
- The palette problems mentioned above happen in other games as well, e.g.
quizchq attract mode.
- the registers right after the palette bank selectors (e00048-e0004f in ddenlovr)
are not understood. They are related to the layer enable register and to the
@ -104,7 +96,6 @@ TODO:
UINT8 *ddenlovr_pixmap[8];
static bitmap_t *framebuffer;
static int extra_layers;
@ -171,8 +162,6 @@ VIDEO_START(ddenlovr)
ddenlovr_scroll[i*2+0] = ddenlovr_scroll[i*2+1] = 0;
}
framebuffer = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format);
extra_layers = 0;
// older games do not set these !?
@ -607,7 +596,7 @@ INLINE void log_blit(int data)
#endif
}
static void blitter_w(int blitter, offs_t offset,UINT8 data,int irq_vector)
static void blitter_w(running_machine *machine, int blitter, offs_t offset,UINT8 data,int irq_vector)
{
static int ddenlovr_blit_reg[2];
int hi_bits;
@ -745,14 +734,14 @@ profiler_mark(PROFILER_VIDEO);
if (irq_vector)
/* quizchq */
cpunum_set_input_line_and_vector(Machine, 0, 0, HOLD_LINE, irq_vector);
cpunum_set_input_line_and_vector(machine, 0, 0, HOLD_LINE, irq_vector);
else
{
/* ddenlovr */
if (ddenlovr_blitter_irq_enable)
{
ddenlovr_blitter_irq_flag = 1;
cpunum_set_input_line(Machine, 0,1,HOLD_LINE);
cpunum_set_input_line(machine, 0,1,HOLD_LINE);
}
}
break;
@ -770,7 +759,7 @@ profiler_mark(PROFILER_END);
// differences wrt blitter_data_w: slightly different blitter commands
static void blitter_w_funkyfig(int blitter, offs_t offset,UINT8 data,int irq_vector)
static void blitter_w_funkyfig(running_machine *machine, int blitter, offs_t offset,UINT8 data,int irq_vector)
{
static int ddenlovr_blit_reg[2];
int hi_bits;
@ -912,7 +901,7 @@ profiler_mark(PROFILER_VIDEO);
#endif
}
cpunum_set_input_line_and_vector(Machine, 0, 0, HOLD_LINE, irq_vector);
cpunum_set_input_line_and_vector(machine, 0, 0, HOLD_LINE, irq_vector);
break;
default:
@ -1125,13 +1114,13 @@ profiler_mark(PROFILER_END);
static WRITE8_HANDLER( rongrong_blitter_w )
{
blitter_w(0,offset,data,0xf8);
blitter_w(machine, 0,offset,data,0xf8);
}
static WRITE16_HANDLER( ddenlovr_blitter_w )
{
if (ACCESSING_LSB)
blitter_w(0,offset,data & 0xff,0);
blitter_w(machine, 0,offset,data & 0xff,0);
}
@ -1210,16 +1199,6 @@ static void copylayer(bitmap_t *bitmap,const rectangle *cliprect,int layer)
}
VIDEO_UPDATE(ddenlovr)
{
copybitmap(bitmap,framebuffer,0,0,0,0,cliprect);
return 0;
}
/*
I do the following in a eof handler, to avoid palette/gfx synchronization
issues with frameskipping
*/
VIDEO_EOF(ddenlovr)
{
static const int order[24][4] =
{
@ -1257,7 +1236,7 @@ VIDEO_EOF(ddenlovr)
if (input_code_pressed_once(KEYCODE_F)) { base++; while ((memory_region(REGION_GFX1)[base] & 0xf0) != 0x30) base++; }
#endif
fillbitmap(framebuffer,ddenlovr_bgcolor,&machine->screen[0].visarea);
fillbitmap(bitmap,ddenlovr_bgcolor,cliprect);
#ifdef MAME_DEBUG
if (input_code_pressed(KEYCODE_Z))
@ -1297,10 +1276,10 @@ VIDEO_EOF(ddenlovr)
pri = 0;
}
copylayer(framebuffer,&machine->screen[0].visarea,order[pri][0]);
copylayer(framebuffer,&machine->screen[0].visarea,order[pri][1]);
copylayer(framebuffer,&machine->screen[0].visarea,order[pri][2]);
copylayer(framebuffer,&machine->screen[0].visarea,order[pri][3]);
copylayer(bitmap,cliprect,order[pri][0]);
copylayer(bitmap,cliprect,order[pri][1]);
copylayer(bitmap,cliprect,order[pri][2]);
copylayer(bitmap,cliprect,order[pri][3]);
if (extra_layers)
{
@ -1312,14 +1291,16 @@ VIDEO_EOF(ddenlovr)
pri = 0;
}
copylayer(framebuffer,&machine->screen[0].visarea,order[pri][0]+4);
copylayer(framebuffer,&machine->screen[0].visarea,order[pri][1]+4);
copylayer(framebuffer,&machine->screen[0].visarea,order[pri][2]+4);
copylayer(framebuffer,&machine->screen[0].visarea,order[pri][3]+4);
copylayer(bitmap,cliprect,order[pri][0]+4);
copylayer(bitmap,cliprect,order[pri][1]+4);
copylayer(bitmap,cliprect,order[pri][2]+4);
copylayer(bitmap,cliprect,order[pri][3]+4);
}
ddenlovr_layer_enable = enab;
ddenlovr_layer_enable2 = enab2;
return 0;
}
static READ16_HANDLER( ddenlovr_special_r )
@ -1518,8 +1499,8 @@ static READ8_HANDLER( quiz365_input_r )
if (!(ddenlovr_select & 0x01)) return readinputport(3);
if (!(ddenlovr_select & 0x02)) return readinputport(4);
if (!(ddenlovr_select & 0x04)) return readinputport(5);
if (!(ddenlovr_select & 0x08)) return 0xff;//mame_rand(Machine);
if (!(ddenlovr_select & 0x10)) return 0xff;//mame_rand(Machine);
if (!(ddenlovr_select & 0x08)) return 0xff;//mame_rand(machine);
if (!(ddenlovr_select & 0x10)) return 0xff;//mame_rand(machine);
return 0xff;
}
@ -1831,8 +1812,8 @@ static READ8_HANDLER( rongrong_input_r )
{
if (!(ddenlovr_select & 0x01)) return readinputport(3);
if (!(ddenlovr_select & 0x02)) return readinputport(4);
if (!(ddenlovr_select & 0x04)) return 0xff;//mame_rand(Machine);
if (!(ddenlovr_select & 0x08)) return 0xff;//mame_rand(Machine);
if (!(ddenlovr_select & 0x04)) return 0xff;//mame_rand(machine);
if (!(ddenlovr_select & 0x08)) return 0xff;//mame_rand(machine);
if (!(ddenlovr_select & 0x10)) return readinputport(5);
return 0xff;
}
@ -1971,11 +1952,11 @@ static WRITE8_HANDLER( mmpanic_soundlatch_w )
static WRITE8_HANDLER( mmpanic_blitter_w )
{
blitter_w(0,offset,data,0xdf); // RST 18
blitter_w(machine, 0,offset,data,0xdf); // RST 18
}
static WRITE8_HANDLER( mmpanic_blitter2_w )
{
blitter_w(1,offset,data,0xdf); // RST 18
blitter_w(machine, 1,offset,data,0xdf); // RST 18
}
/* A led for each of the 9 buttons */
@ -2134,7 +2115,7 @@ static READ8_HANDLER( funkyfig_busy_r )
static WRITE8_HANDLER( funkyfig_blitter_w )
{
blitter_w_funkyfig(0,offset,data,0xe0);
blitter_w_funkyfig(machine, 0,offset,data,0xe0);
}
static WRITE8_HANDLER( funkyfig_rombank_w )
@ -2373,7 +2354,7 @@ static WRITE8_HANDLER( hanakanz_palette_w )
int g = ddenlovr_blit_reg & 0x1f;
int r = data & 0x1f;
int b = ((data & 0xe0) >> 5) | ((ddenlovr_blit_reg & 0x60) >> 2);
palette_set_color_rgb(Machine,(palette_index++)&0x1ff,pal5bit(r),pal5bit(g),pal5bit(b));
palette_set_color_rgb(machine,(palette_index++)&0x1ff,pal5bit(r),pal5bit(g),pal5bit(b));
}
}
@ -2384,7 +2365,7 @@ static WRITE8_HANDLER( hanakanz_oki_bank_w )
static READ8_HANDLER( hanakanz_rand_r )
{
return mame_rand(Machine);
return mame_rand(machine);
}
static ADDRESS_MAP_START( hanakanz_readport, ADDRESS_SPACE_IO, 8 ) ADDRESS_MAP_GLOBAL_MASK(0xff)
@ -2553,7 +2534,7 @@ static WRITE8_HANDLER( mjchuuka_palette_w )
int r = (rgb >> 0) & 0x1f;
int g = (rgb >> 8) & 0x1f;
int b = ((rgb >> 5) & 0x07) | ((rgb & 0x6000) >> 10);
palette_set_color_rgb(Machine,(palette_index++)&0x1ff,pal5bit(r),pal5bit(g),pal5bit(b));
palette_set_color_rgb(machine,(palette_index++)&0x1ff,pal5bit(r),pal5bit(g),pal5bit(b));
}
}
@ -2710,7 +2691,7 @@ static WRITE8_HANDLER( mjmyster_coincounter_w )
static WRITE8_HANDLER( mjmyster_blitter_w )
{
blitter_w(0,offset,data,0xfc);
blitter_w(machine, 0,offset,data,0xfc);
}
static ADDRESS_MAP_START( mjmyster_readport, ADDRESS_SPACE_IO, 8 ) ADDRESS_MAP_GLOBAL_MASK(0xff)
@ -2888,7 +2869,7 @@ static WRITE8_HANDLER( hginga_blitter_w )
break;
}
}
blitter_w(0,offset,data,0xfc);
blitter_w(machine, 0,offset,data,0xfc);
}
static ADDRESS_MAP_START( hginga_readport, ADDRESS_SPACE_IO, 8 ) ADDRESS_MAP_GLOBAL_MASK(0xff)
@ -2929,9 +2910,9 @@ ADDRESS_MAP_END
static UINT8 hgokou_hopper;
static UINT8 hgokou_player_r(int player)
static UINT8 hgokou_player_r(running_machine *machine, int player)
{
UINT8 hopper_bit = ((hgokou_hopper && !(video_screen_get_frame_number(Machine->primary_screen)%10)) ? 0 : (1<<6));
UINT8 hopper_bit = ((hgokou_hopper && !(video_screen_get_frame_number(machine->primary_screen)%10)) ? 0 : (1<<6));
if (!(ddenlovr_select2 & 0x01)) return readinputport(player * 5 + 1) | hopper_bit;
if (!(ddenlovr_select2 & 0x02)) return readinputport(player * 5 + 2) | hopper_bit;
@ -2947,8 +2928,8 @@ static READ8_HANDLER( hgokou_input_r )
switch (hginga_select)
{
case 0x20: return readinputport(0);
case 0x21: return hgokou_player_r(1);
case 0x22: return hgokou_player_r(0);
case 0x21: return hgokou_player_r(machine, 1);
case 0x22: return hgokou_player_r(machine, 0);
case 0x23: return hginga_coins;
}
logerror("%06x: warning, unknown bits read, hginga_select = %02x\n", activecpu_get_pc(), hginga_select);
@ -3320,7 +3301,7 @@ static READ8_HANDLER( mjflove_blitter_r )
static WRITE8_HANDLER( mjflove_blitter_w )
{
blitter_w(0,offset,data,0);
blitter_w(machine, 0,offset,data,0);
}
static WRITE8_HANDLER( mjflove_coincounter_w )
@ -6537,8 +6518,8 @@ static MACHINE_DRIVER_START( ddenlovr )
MDRV_PALETTE_LENGTH(0x100)
MDRV_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE)
MDRV_VIDEO_START(ddenlovr)
MDRV_VIDEO_EOF(ddenlovr)
MDRV_VIDEO_UPDATE(ddenlovr)
/* sound hardware */
@ -6652,8 +6633,8 @@ static MACHINE_DRIVER_START( quizchq )
MDRV_PALETTE_LENGTH(0x100)
MDRV_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE)
MDRV_VIDEO_START(ddenlovr)
MDRV_VIDEO_EOF(ddenlovr)
MDRV_VIDEO_UPDATE(ddenlovr)
/* sound hardware */
@ -6727,8 +6708,8 @@ static MACHINE_DRIVER_START( mmpanic )
MDRV_PALETTE_LENGTH(0x100)
MDRV_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE)
MDRV_VIDEO_START(mmpanic) // extra layers
MDRV_VIDEO_EOF(ddenlovr)
MDRV_VIDEO_UPDATE(ddenlovr)
/* sound hardware */
@ -6791,8 +6772,8 @@ static MACHINE_DRIVER_START( hanakanz )
MDRV_PALETTE_LENGTH(0x200)
MDRV_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE)
MDRV_VIDEO_START(hanakanz) // blitter commands in the roms are shuffled around
MDRV_VIDEO_EOF(ddenlovr)
MDRV_VIDEO_UPDATE(ddenlovr)
/* sound hardware */

View File

@ -141,7 +141,8 @@ INLINE int scanline_to_vcount(int scanline)
static TIMER_CALLBACK( ddragon_scanline_callback )
{
int scanline = param;
int vcount_old = scanline_to_vcount((scanline == 0) ? machine->screen[0].height - 1 : scanline - 1);
int screen_height = video_screen_get_height(machine->primary_screen);
int vcount_old = scanline_to_vcount((scanline == 0) ? screen_height - 1 : scanline - 1);
int vcount = scanline_to_vcount(scanline);
/* update to the current point */
@ -156,7 +157,7 @@ static TIMER_CALLBACK( ddragon_scanline_callback )
cpunum_set_input_line(machine, 0, M6809_FIRQ_LINE, ASSERT_LINE);
/* adjust for next scanline */
if (++scanline >= machine->screen[0].height)
if (++scanline >= screen_height)
scanline = 0;
timer_adjust_oneshot(scanline_timer, video_screen_get_time_until_pos(machine->primary_screen, scanline, 0), scanline);
}

View File

@ -280,7 +280,7 @@ static READ32_HANDLER( deco32_irq_controller_r )
/* ZV03082007 - video_screen_get_vblank() doesn't work for Captain America, as it expects
that this bit is NOT set in rows 0-7. */
vblank = video_screen_get_vpos(machine->primary_screen) > machine->screen[0].visarea.max_y;
vblank = video_screen_get_vpos(machine->primary_screen) > video_screen_get_visible_area(machine->primary_screen)->max_y;
if (vblank)
return 0xffffff80 | 0x1 | 0x10; /* Assume VBL takes priority over possible raster/lightgun irq */

View File

@ -307,8 +307,8 @@ INPUT_PORTS_END
static VIDEO_START( dgpix )
{
vram = auto_malloc(0x40000*2);
bitmaps[0] = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format);
bitmaps[1] = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format);
bitmaps[0] = video_screen_auto_bitmap_alloc(machine->primary_screen);
bitmaps[1] = video_screen_auto_bitmap_alloc(machine->primary_screen);
}
static VIDEO_UPDATE( dgpix )

View File

@ -192,7 +192,7 @@ static VIDEO_START( dleuro )
{
VIDEO_START_CALL(dlair);
overlay_bitmap = auto_bitmap_alloc(machine->screen[0].width, machine->screen[0].height, BITMAP_FORMAT_INDEXED16);
overlay_bitmap = auto_bitmap_alloc(video_screen_get_width(machine->primary_screen), video_screen_get_height(machine->primary_screen), BITMAP_FORMAT_INDEXED16);
fillbitmap(overlay_bitmap, 8, NULL);
overlay_texture = render_texture_alloc(NULL, NULL);
}
@ -242,7 +242,7 @@ static VIDEO_UPDATE( dleuro )
}
/* update the overlay */
render_texture_set_bitmap(overlay_texture, overlay_bitmap, &screen->machine->screen[0].visarea, 0, TEXFORMAT_PALETTE16);
render_texture_set_bitmap(overlay_texture, overlay_bitmap, video_screen_get_visible_area(screen), 0, TEXFORMAT_PALETTE16);
/* get the current video and update the bitmap if different */
seqid = laserdisc_get_video(discinfo, &vidbitmap);

View File

@ -4068,9 +4068,9 @@ static MACHINE_DRIVER_START( htengoku )
MDRV_PALETTE_LENGTH(16*256)
MDRV_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE)
MDRV_VIDEO_START(htengoku)
MDRV_VIDEO_UPDATE(ddenlovr)
MDRV_VIDEO_EOF(htengoku)
MDRV_VIDEO_UPDATE(htengoku)
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")

View File

@ -69,8 +69,7 @@ AH
#define SET_VISIBLE_AREA(_x_,_y_) \
{ \
screen_state *state = &machine->screen[0]; \
rectangle visarea = state->visarea; \
rectangle visarea = *video_screen_get_visible_area(machine->primary_screen); \
visarea.min_x = 0; \
visarea.max_x = _x_-1; \
visarea.min_y = 0; \

View File

@ -70,7 +70,9 @@ static WRITE16_HANDLER( fuuki16_vregs_w )
UINT16 new_data = COMBINE_DATA(&fuuki16_vregs[offset]);
if ((offset == 0x1c/2) && old_data != new_data)
{
timer_adjust_periodic(raster_interrupt_timer, video_screen_get_time_until_pos(machine->primary_screen, new_data, Machine->screen[0].visarea.max_x + 1), 0, video_screen_get_frame_period(machine->primary_screen));
const rectangle *visarea = video_screen_get_visible_area(machine->primary_screen);
attotime period = video_screen_get_frame_period(machine->primary_screen);
timer_adjust_periodic(raster_interrupt_timer, video_screen_get_time_until_pos(machine->primary_screen, new_data, visarea->max_x + 1), 0, period);
}
}
@ -530,7 +532,7 @@ static TIMER_CALLBACK( level_1_interrupt_callback )
static TIMER_CALLBACK( vblank_interrupt_callback )
{
cpunum_set_input_line(machine, 0, 3, PULSE_LINE); // VBlank IRQ
timer_set(video_screen_get_time_until_pos(machine->primary_screen, machine->screen[0].visarea.max_y + 1, 0), NULL, 0, vblank_interrupt_callback);
timer_set(video_screen_get_time_until_vblank_start(machine->primary_screen), NULL, 0, vblank_interrupt_callback);
}
@ -550,9 +552,11 @@ static MACHINE_START( fuuki16 )
static MACHINE_RESET( fuuki16 )
{
const rectangle *visarea = video_screen_get_visible_area(machine->primary_screen);
timer_set(video_screen_get_time_until_pos(machine->primary_screen, 248, 0), NULL, 0, level_1_interrupt_callback);
timer_set(video_screen_get_time_until_pos(machine->primary_screen, machine->screen[0].visarea.max_y + 1, 0), NULL, 0, vblank_interrupt_callback);
timer_adjust_oneshot(raster_interrupt_timer, video_screen_get_time_until_pos(machine->primary_screen, 0, machine->screen[0].visarea.max_x + 1), 0);
timer_set(video_screen_get_time_until_vblank_start(machine->primary_screen), NULL, 0, vblank_interrupt_callback);
timer_adjust_oneshot(raster_interrupt_timer, video_screen_get_time_until_pos(machine->primary_screen, 0, visarea->max_x + 1), 0);
}

View File

@ -259,7 +259,9 @@ static WRITE32_HANDLER( fuuki32_vregs_w )
COMBINE_DATA(&fuuki32_vregs[offset]);
if (offset == 0x1c/4)
{
timer_adjust_periodic(raster_interrupt_timer, video_screen_get_time_until_pos(machine->primary_screen, fuuki32_vregs[0x1c/4]>>16, Machine->screen[0].visarea.max_x + 1), 0, video_screen_get_frame_period(machine->primary_screen));
const rectangle *visarea = video_screen_get_visible_area(machine->primary_screen);
attotime period = video_screen_get_frame_period(machine->primary_screen);
timer_adjust_periodic(raster_interrupt_timer, video_screen_get_time_until_pos(machine->primary_screen, fuuki32_vregs[0x1c/4]>>16, visarea->max_x + 1), 0, period);
}
}
}
@ -556,7 +558,7 @@ static TIMER_CALLBACK( level_1_interrupt_callback )
static TIMER_CALLBACK( vblank_interrupt_callback )
{
cpunum_set_input_line(machine, 0, 3, PULSE_LINE); // VBlank IRQ
timer_set(video_screen_get_time_until_pos(machine->primary_screen, machine->screen[0].visarea.max_y + 1, 0), NULL, 0, vblank_interrupt_callback);
timer_set(video_screen_get_time_until_vblank_start(machine->primary_screen), NULL, 0, vblank_interrupt_callback);
}
@ -576,9 +578,11 @@ static MACHINE_START( fuuki32 )
static MACHINE_RESET( fuuki32 )
{
const rectangle *visarea = video_screen_get_visible_area(machine->primary_screen);
timer_set(video_screen_get_time_until_pos(machine->primary_screen, 248, 0), NULL, 0, level_1_interrupt_callback);
timer_set(video_screen_get_time_until_pos(machine->primary_screen, machine->screen[0].visarea.max_y + 1, 0), NULL, 0, vblank_interrupt_callback);
timer_adjust_oneshot(raster_interrupt_timer, video_screen_get_time_until_pos(machine->primary_screen, 0, machine->screen[0].visarea.max_x + 1), 0);
timer_set(video_screen_get_time_until_vblank_start(machine->primary_screen), NULL, 0, vblank_interrupt_callback);
timer_adjust_oneshot(raster_interrupt_timer, video_screen_get_time_until_pos(machine->primary_screen, 0, visarea->max_x + 1), 0);
}

View File

@ -138,7 +138,7 @@ static UINT8 read_port_and_t0(int port)
static UINT8 read_port_and_t0_and_hblank(running_machine *machine, int port)
{
UINT8 val = read_port_and_t0(port);
if (video_screen_get_hpos(machine->primary_screen) < (machine->screen[0].width * 9 / 10))
if (video_screen_get_hpos(machine->primary_screen) < (video_screen_get_width(machine->primary_screen) * 9 / 10))
val ^= 0x04;
return val;
}

View File

@ -369,16 +369,18 @@ static void K037122_tile_update(running_machine *machine, int chip)
static void K037122_tile_draw(int chip, bitmap_t *bitmap, const rectangle *cliprect)
{
const rectangle *visarea = video_screen_get_visible_area(Machine->primary_screen);
if (K037122_reg[chip][0xc] & 0x10000)
{
tilemap_set_scrolldx(K037122_layer[chip][1], Machine->screen[0].visarea.min_x, Machine->screen[0].visarea.min_x);
tilemap_set_scrolldy(K037122_layer[chip][1], Machine->screen[0].visarea.min_y, Machine->screen[0].visarea.min_y);
tilemap_set_scrolldx(K037122_layer[chip][1], visarea->min_x, visarea->min_x);
tilemap_set_scrolldy(K037122_layer[chip][1], visarea->min_y, visarea->min_y);
tilemap_draw(bitmap, cliprect, K037122_layer[chip][1], 0,0);
}
else
{
tilemap_set_scrolldx(K037122_layer[chip][0], Machine->screen[0].visarea.min_x, Machine->screen[0].visarea.min_x);
tilemap_set_scrolldy(K037122_layer[chip][0], Machine->screen[0].visarea.min_y, Machine->screen[0].visarea.min_y);
tilemap_set_scrolldx(K037122_layer[chip][0], visarea->min_x, visarea->min_x);
tilemap_set_scrolldy(K037122_layer[chip][0], visarea->min_y, visarea->min_y);
tilemap_draw(bitmap, cliprect, K037122_layer[chip][0], 0,0);
}
}

View File

@ -216,7 +216,7 @@ static WRITE16_HANDLER( igs_blit_flags_w )
int gfx_size = memory_region_length(REGION_GFX1);
int gfx2_size = memory_region_length(REGION_GFX2);
rectangle clip = Machine->screen[0].visarea;
const rectangle *clip = video_screen_get_visible_area(machine->primary_screen);
COMBINE_DATA(&blitter.flags);
@ -285,7 +285,7 @@ static WRITE16_HANDLER( igs_blit_flags_w )
}
// plot it
if (x >= clip.min_x && x <= clip.max_x && y >= clip.min_y && y <= clip.max_y)
if (x >= clip->min_x && x <= clip->max_x && y >= clip->min_y && y <= clip->max_y)
{
if (clear) dest[x + y * 512] = clear_pen;
else if (pen != trans_pen) dest[x + y * 512] = pen | pen_hi;

View File

@ -143,7 +143,7 @@ static VIDEO_START(igs_majhong)
static VIDEO_UPDATE(igs_majhong)
{
//??????????
fillbitmap(bitmap,get_black_pen(screen->machine),&screen->machine->screen[0].visarea);
fillbitmap(bitmap,get_black_pen(screen->machine),cliprect);
//??????
tilemap_draw(bitmap,cliprect,igs_bg_tilemap,0,0);

View File

@ -502,15 +502,18 @@ static TILE_GET_INFO( get_tile_info )
static VIDEO_START( laserbat )
{
int screen_width = video_screen_get_width(machine->primary_screen);
int screen_height = video_screen_get_height(machine->primary_screen);
bg_tilemap = tilemap_create(get_tile_info,tilemap_scan_rows,8,8,32,32);
videoram = (UINT8 *)auto_malloc(0x400);
colorram = (UINT8 *)auto_malloc(0x400);
/* configure the S2636 chips */
s2636_0 = s2636_config(s2636_0_ram, machine->screen[0].height, machine->screen[0].width, 0, -19);
s2636_1 = s2636_config(s2636_1_ram, machine->screen[0].height, machine->screen[0].width, 0, -19);
s2636_2 = s2636_config(s2636_2_ram, machine->screen[0].height, machine->screen[0].width, 0, -19);
s2636_0 = s2636_config(s2636_0_ram, screen_height, screen_width, 0, -19);
s2636_1 = s2636_config(s2636_1_ram, screen_height, screen_width, 0, -19);
s2636_2 = s2636_config(s2636_2_ram, screen_height, screen_width, 0, -19);
}
static VIDEO_UPDATE( laserbat )

View File

@ -78,7 +78,7 @@ static VIDEO_START( lastfght )
{
int i;
for (i = 0; i < 2; i++)
lastfght_bitmap[i] = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format);
lastfght_bitmap[i] = video_screen_auto_bitmap_alloc(machine->primary_screen);
colorram = auto_malloc(256*3);
}

View File

@ -258,8 +258,7 @@ static UINT32 hit_check_x,hit_check_y;
#define CRT_MODE(_x_,_y_,_flip_) \
{ \
screen_state *state = &Machine->screen[0]; \
rectangle visarea = state->visarea; \
rectangle visarea = *video_screen_get_visible_area(machine->primary_screen); \
visarea.min_x = 0; \
visarea.max_x = _x_-1; \
visarea.min_y = 0; \

View File

@ -69,14 +69,14 @@ static TIMER_CALLBACK( m107_scanline_interrupt )
}
/* VBLANK interrupt */
else if (scanline == machine->screen[0].visarea.max_y + 1)
else if (scanline == video_screen_get_visible_area(machine->primary_screen)->max_y + 1)
{
video_screen_update_partial(machine->primary_screen, scanline);
cpunum_set_input_line_and_vector(machine, 0, 0, HOLD_LINE, M107_IRQ_0);
}
/* adjust for next scanline */
if (++scanline >= machine->screen[0].height)
if (++scanline >= video_screen_get_height(machine->primary_screen))
scanline = 0;
timer_adjust_oneshot(scanline_timer, video_screen_get_time_until_pos(machine->primary_screen, scanline, 0), scanline);
}

View File

@ -137,7 +137,7 @@ static TIMER_CALLBACK( m72_scanline_interrupt )
}
/* adjust for next scanline */
if (++scanline >= machine->screen[0].height)
if (++scanline >= video_screen_get_height(machine->primary_screen))
scanline = 0;
timer_adjust_oneshot(scanline_timer, video_screen_get_time_until_pos(machine->primary_screen, scanline, 0), scanline);
}

View File

@ -249,14 +249,14 @@ static TIMER_CALLBACK( m92_scanline_interrupt )
}
/* VBLANK interrupt */
else if (scanline == machine->screen[0].visarea.max_y + 1)
else if (scanline == video_screen_get_visible_area(machine->primary_screen)->max_y + 1)
{
video_screen_update_partial(machine->primary_screen, scanline);
cpunum_set_input_line_and_vector(machine, 0, 0, HOLD_LINE, M92_IRQ_0);
}
/* adjust for next scanline */
if (++scanline >= machine->screen[0].height)
if (++scanline >= video_screen_get_height(machine->primary_screen))
scanline = 0;
timer_adjust_oneshot(scanline_timer, video_screen_get_time_until_pos(machine->primary_screen, scanline, 0), scanline);
}

View File

@ -456,9 +456,9 @@ static VIDEO_START( marinedt )
tilemap_set_scrolldx(tx_tilemap, 0, 4*8);
tilemap_set_scrolldy(tx_tilemap, 0, -4*8);
tile = auto_bitmap_alloc(32 * 8, 32 * 8, machine->screen[0].format);
obj1 = auto_bitmap_alloc(32,32,machine->screen[0].format);
obj2 = auto_bitmap_alloc(32,32,machine->screen[0].format);
tile = auto_bitmap_alloc(32 * 8, 32 * 8, video_screen_get_format(machine->primary_screen));
obj1 = auto_bitmap_alloc(32,32,video_screen_get_format(machine->primary_screen));
obj2 = auto_bitmap_alloc(32,32,video_screen_get_format(machine->primary_screen));
}

View File

@ -104,10 +104,10 @@ static bitmap_t * tmpbitmaps[4];
static VIDEO_START( mazerbla )
{
tmpbitmaps[0] = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format);
tmpbitmaps[1] = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format);
tmpbitmaps[2] = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format);
tmpbitmaps[3] = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format);
tmpbitmaps[0] = video_screen_auto_bitmap_alloc(machine->primary_screen);
tmpbitmaps[1] = video_screen_auto_bitmap_alloc(machine->primary_screen);
tmpbitmaps[2] = video_screen_auto_bitmap_alloc(machine->primary_screen);
tmpbitmaps[3] = video_screen_auto_bitmap_alloc(machine->primary_screen);
}
#if 0

View File

@ -2567,7 +2567,7 @@ VIDEO_START(megadriv)
{
int x;
render_bitmap = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format);
render_bitmap = video_screen_auto_bitmap_alloc(machine->primary_screen);
megadrive_vdp_vram = auto_malloc(0x10000);
megadrive_vdp_cram = auto_malloc(0x80);

View File

@ -525,7 +525,7 @@ static TIMER_CALLBACK( invasn_gun_callback )
/* generate another interrupt on the next scanline while we are within the BEAM_DY */
beamy++;
if (beamy <= machine->screen[0].visarea.max_y && beamy <= gun_y[player] + BEAM_DY)
if (beamy <= video_screen_get_visible_area(machine->primary_screen)->max_y && beamy <= gun_y[player] + BEAM_DY)
timer_adjust_oneshot(gun_timer[player], video_screen_get_time_until_pos(machine->primary_screen, beamy, MAX(0, gun_x[player] - BEAM_DX)), player);
}
@ -547,7 +547,7 @@ static WRITE32_HANDLER( invasn_gun_w )
UINT8 pmask = 0x04 << player;
if (((old_control ^ gun_control) & pmask) != 0 && (gun_control & pmask) == 0)
{
const rectangle *visarea = &Machine->screen[0].visarea;
const rectangle *visarea = video_screen_get_visible_area(machine->primary_screen);
static const char *const names[2][2] =
{
{ "GUNX1", "GUNY1" },

View File

@ -205,7 +205,7 @@ static VIDEO_START(mlanding)
}
for (i=0;i<8;i++)
ml_bitmap[i] = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format);
ml_bitmap[i] = video_screen_auto_bitmap_alloc(machine->primary_screen);
}
static VIDEO_UPDATE(mlanding)

View File

@ -60,19 +60,21 @@ static VIDEO_START( mogura )
static VIDEO_UPDATE( mogura )
{
const rectangle *visarea = video_screen_get_visible_area(screen);
/* tilemap layout is a bit strange ... */
rectangle clip;
clip.min_x = screen->machine->screen[0].visarea.min_x;
clip.min_x = visarea->min_x;
clip.max_x = 256-1;
clip.min_y = screen->machine->screen[0].visarea.min_y;
clip.max_y = screen->machine->screen[0].visarea.max_y;
clip.min_y = visarea->min_y;
clip.max_y = visarea->max_y;
tilemap_set_scrollx(mogura_tilemap,0, 256);
tilemap_draw(bitmap,&clip,mogura_tilemap,0,0);
clip.min_x = 256;
clip.max_x = 512-1;
clip.min_y = screen->machine->screen[0].visarea.min_y;
clip.max_y = screen->machine->screen[0].visarea.max_y;
clip.min_y = visarea->min_y;
clip.max_y = visarea->max_y;
tilemap_set_scrollx(mogura_tilemap,0, -128);
tilemap_draw(bitmap,&clip,mogura_tilemap,0,0);

View File

@ -342,8 +342,8 @@ static MACHINE_START( namcofl )
static MACHINE_RESET( namcofl )
{
timer_set(video_screen_get_time_until_pos(machine->primary_screen, machine->screen[0].visarea.max_y + 3, 0), NULL, 0, network_interrupt_callback);
timer_set(video_screen_get_time_until_pos(machine->primary_screen, machine->screen[0].visarea.max_y + 1, 0), NULL, 0, vblank_interrupt_callback);
timer_set(video_screen_get_time_until_pos(machine->primary_screen, video_screen_get_visible_area(machine->primary_screen)->max_y + 3, 0), NULL, 0, network_interrupt_callback);
timer_set(video_screen_get_time_until_pos(machine->primary_screen, video_screen_get_visible_area(machine->primary_screen)->max_y + 1, 0), NULL, 0, vblank_interrupt_callback);
}

View File

@ -354,7 +354,7 @@ static VIDEO_START(rabbit)
tilemap_set_transparent_pen(rabbit_tilemap[1],0x0);
tilemap_set_transparent_pen(rabbit_tilemap[2],0x0);
tilemap_set_transparent_pen(rabbit_tilemap[3],0x0);
rabbit_sprite_bitmap = auto_bitmap_alloc(0x1000,0x1000,machine->screen[0].format);
rabbit_sprite_bitmap = auto_bitmap_alloc(0x1000,0x1000,video_screen_get_format(machine->primary_screen));
rabbit_sprite_clip.min_x = 0;
rabbit_sprite_clip.max_x = 0x1000-1;
rabbit_sprite_clip.min_y = 0;
@ -1144,7 +1144,7 @@ static VIDEO_START(tmmjprd)
tilemap_set_transparent_pen(rabbit_tilemap[1],0x0);
tilemap_set_transparent_pen(rabbit_tilemap[2],0x0);
tilemap_set_transparent_pen(rabbit_tilemap[3],0x0);
rabbit_sprite_bitmap = auto_bitmap_alloc(0x1000,0x1000,machine->screen[0].format);
rabbit_sprite_bitmap = auto_bitmap_alloc(0x1000,0x1000,video_screen_get_format(machine->primary_screen));
rabbit_sprite_clip.min_x = 0;
rabbit_sprite_clip.max_x = 0x1000-1;
rabbit_sprite_clip.min_y = 0;

View File

@ -102,7 +102,7 @@ static VIDEO_UPDATE(sbowling)
static VIDEO_START(sbowling)
{
tmpbitmap = auto_bitmap_alloc(32*8,32*8,machine->screen[0].format);
tmpbitmap = auto_bitmap_alloc(32*8,32*8,video_screen_get_format(machine->primary_screen));
sb_tilemap = tilemap_create(get_sb_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
}

View File

@ -123,7 +123,7 @@ static TIMER_CALLBACK( scanline_callback )
DAC_data_w(0, (videoram[0x380 + 0x11] & (scanline >> 2)) ? 255 : 0);
/* on the VBLANK, read the pot and schedule an interrupt time for it */
if (scanline == machine->screen[0].visarea.max_y + 1)
if (scanline == video_screen_get_visible_area(machine->primary_screen)->max_y + 1)
{
UINT8 potvalue = readinputportbytag("PADDLE");
timer_adjust_oneshot(pot_timer, video_screen_get_time_until_pos(machine->primary_screen, 72 + (potvalue / 2), (potvalue % 2) * 128), 0);
@ -131,7 +131,7 @@ static TIMER_CALLBACK( scanline_callback )
/* call us back in 4 scanlines */
scanline += 4;
if (scanline >= machine->screen[0].height)
if (scanline >= video_screen_get_height(machine->primary_screen))
scanline = 0;
timer_adjust_oneshot(scanline_timer, video_screen_get_time_until_pos(machine->primary_screen, scanline, 0), scanline);
}
@ -259,7 +259,7 @@ static WRITE8_HANDLER( coincount_w )
static READ8_HANDLER( sync_r )
{
int hpos = video_screen_get_hpos(machine->primary_screen);
sync2_value = (hpos >= 128 && hpos <= machine->screen[0].visarea.max_x);
sync2_value = (hpos >= 128 && hpos <= video_screen_get_visible_area(machine->primary_screen)->max_x);
return video_screen_get_vpos(machine->primary_screen);
}

View File

@ -716,7 +716,7 @@ static void *start_vdp(running_machine *machine, int type)
memset(chip->sprite_renderline,0x00,256+32);
chip->writemode = 0;
chip->r_bitmap = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format);
chip->r_bitmap = video_screen_auto_bitmap_alloc(machine->primary_screen);
chip->sms_scanline_timer = timer_alloc(sms_scanline_timer_callback, chip);

View File

@ -214,7 +214,7 @@ static TIMER_CALLBACK( scanline_callback )
case 65:
case 129:
case 193:
timer_set(video_screen_get_time_until_pos(machine->primary_screen, scanline, machine->screen[0].visarea.max_x + 1), NULL, 0, irq2_gen);
timer_set(video_screen_get_time_until_pos(machine->primary_screen, scanline, video_screen_get_visible_area(machine->primary_screen)->max_x + 1), NULL, 0, irq2_gen);
next_scanline = scanline + 1;
break;

View File

@ -72,6 +72,12 @@ static void alpha_row_update(const device_config *screen, int scanline)
}
static WRITE16_HANDLER( skullxbo_halt_until_hblank_0_w )
{
atarigen_halt_until_hblank_0(machine->primary_screen);
}
static MACHINE_RESET( skullxbo )
{
atarigen_eeprom_reset();
@ -120,7 +126,7 @@ static WRITE16_HANDLER( skullxbo_mobwr_w )
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0xff0000, 0xff07ff) AM_WRITE(skullxbo_mobmsb_w)
AM_RANGE(0xff0800, 0xff0bff) AM_WRITE(atarigen_halt_until_hblank_0_w)
AM_RANGE(0xff0800, 0xff0bff) AM_WRITE(skullxbo_halt_until_hblank_0_w)
AM_RANGE(0xff0c00, 0xff0fff) AM_WRITE(atarigen_eeprom_enable_w)
AM_RANGE(0xff1000, 0xff13ff) AM_WRITE(atarigen_video_int_ack_w)
AM_RANGE(0xff1400, 0xff17ff) AM_WRITE(atarigen_sound_w)

View File

@ -441,8 +441,8 @@ ADDRESS_MAP_END
static VIDEO_START(sliver)
{
sliver_bitmap_bg = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format);
sliver_bitmap_fg = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format);
sliver_bitmap_bg = video_screen_auto_bitmap_alloc(machine->primary_screen);
sliver_bitmap_fg = video_screen_auto_bitmap_alloc(machine->primary_screen);
}
static VIDEO_UPDATE(sliver)

View File

@ -67,6 +67,7 @@ static VIDEO_UPDATE( srmp5 )
UINT16 *sprite_list=sprram;
UINT16 *sprite_list_end=&sprram[0x1000]; //guess
UINT8 *pixels=(UINT8 *)tileram;
const rectangle *visarea = video_screen_get_visible_area(screen);
fillbitmap(bitmap,0,cliprect);
@ -105,7 +106,7 @@ static VIDEO_UPDATE( srmp5 )
if(pen)
{
if(xb+xs<=screen->machine->screen[0].visarea.max_x && xb+xs>=screen->machine->screen[0].visarea.min_x && yb+ys<=screen->machine->screen[0].visarea.max_y && yb+ys>=screen->machine->screen[0].visarea.min_y )
if(xb+xs<=visarea->max_x && xb+xs>=visarea->min_x && yb+ys<=visarea->max_y && yb+ys>=visarea->min_y )
{
UINT32 pixdata=paletteram32[pen+((sprite_sublist[SPRITE_PALETTE]&0xff)<<8)];
*BITMAP_ADDR32(bitmap, yb+ys, xb+xs) = ((pixdata&0x7c00)>>7) | ((pixdata&0x3e0)<<6) | ((pixdata&0x1f)<<19);

View File

@ -41,8 +41,10 @@ static emu_timer *setup_gun_timer;
INLINE void get_crosshair_xy(running_machine *machine, int player, int *x, int *y)
{
*x = (((readinputport(4 + player * 2) & 0xff) * (machine->screen[0].visarea.max_x - machine->screen[0].visarea.min_x)) >> 8) + machine->screen[0].visarea.min_x;
*y = (((readinputport(5 + player * 2) & 0xff) * (machine->screen[0].visarea.max_y - machine->screen[0].visarea.min_y)) >> 8) + machine->screen[0].visarea.min_y;
const rectangle *visarea = video_screen_get_visible_area(machine->primary_screen);
*x = (((readinputport(4 + player * 2) & 0xff) * (visarea->max_x - visarea->min_x)) >> 8) + visarea->min_x;
*y = (((readinputport(5 + player * 2) & 0xff) * (visarea->max_y - visarea->min_y)) >> 8) + visarea->min_y;
}

View File

@ -193,7 +193,7 @@ static VIDEO_START( tmaster )
{
for (buffer = 0; buffer < 2; buffer++)
{
tmaster_bitmap[layer][buffer] = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format);
tmaster_bitmap[layer][buffer] = video_screen_auto_bitmap_alloc(machine->primary_screen);
bitmap_fill(tmaster_bitmap[layer][buffer], NULL, 0xff);
}
}

View File

@ -155,6 +155,8 @@ static bitmap_t* render_bitmap;
static WRITE16_HANDLER(wheelfir_blit_w)
{
//wheelfir_blitdata[offset]=data;
int width = video_screen_get_width(machine->primary_screen);
int height = video_screen_get_height(machine->primary_screen);
int vpage=0;
COMBINE_DATA(&wheelfir_blitdata[offset]);
@ -263,7 +265,7 @@ static WRITE16_HANDLER(wheelfir_blit_w)
pix = rom[offs];
if(pix && destx >0 && desty >0 && destx<Machine->screen[0].width && desty <Machine->screen[0].height)
if(pix && destx >0 && desty >0 && destx<width && desty <height)
*BITMAP_ADDR16(wheelfir_tmp_bitmap[vpage], desty, destx) = pix;
}
}
@ -275,11 +277,11 @@ static WRITE16_HANDLER(wheelfir_blit_w)
static VIDEO_START(wheelfir)
{
wheelfir_tmp_bitmap[0] = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format);
wheelfir_tmp_bitmap[1] = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format);
wheelfir_tmp_bitmap[2] = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format);
wheelfir_tmp_bitmap[0] = video_screen_auto_bitmap_alloc(machine->primary_screen);
wheelfir_tmp_bitmap[1] = video_screen_auto_bitmap_alloc(machine->primary_screen);
wheelfir_tmp_bitmap[2] = video_screen_auto_bitmap_alloc(machine->primary_screen);
render_bitmap = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format);
render_bitmap = video_screen_auto_bitmap_alloc(machine->primary_screen);
}
@ -304,7 +306,7 @@ static VIDEO_UPDATE(wheelfir)
copybitmap(bitmap, wheelfir_tmp_bitmap[2], 0, 0, 0, 0, cliprect);
//copybitmap_trans(bitmap, wheelfir_tmp_bitmap[1], 0, 0, 0, 0, cliprect, 0);
copybitmap_trans(bitmap, wheelfir_tmp_bitmap[0], 0, 0, 0, 0, cliprect, 0);
fillbitmap(wheelfir_tmp_bitmap[0], 0,&machine->screen[0].visarea);
fillbitmap(wheelfir_tmp_bitmap[0], 0,video_screen_get_visible_area(screen));
if ( input_code_pressed(KEYCODE_R) )
{
@ -606,7 +608,7 @@ static TIMER_CALLBACK( scanline_timer_callback )
static VIDEO_EOF( wheelfir )
{
scanline_counter = -1;
fillbitmap(wheelfir_tmp_bitmap[0], 0,&machine->screen[0].visarea);
fillbitmap(wheelfir_tmp_bitmap[0], 0,video_screen_get_visible_area(machine->primary_screen));
timer_adjust_oneshot(frame_timer, attotime_zero, 0);
timer_adjust_oneshot(scanline_timer, attotime_zero, 0);

View File

@ -306,7 +306,7 @@ static READ32_HANDLER( boardconfig_r )
111----- rev=5
*/
if( Machine->screen[0].height == 1024 )
if( video_screen_get_height(machine->primary_screen) == 1024 )
{
return 64|32|8;
}

View File

@ -68,7 +68,7 @@ VIDEO_UPDATE( hnoridur );
VIDEO_UPDATE( sprtmtch );
VIDEO_UPDATE( mjdialq2 );
VIDEO_UPDATE( jantouki );
VIDEO_EOF( htengoku );
VIDEO_UPDATE( htengoku );
PALETTE_INIT( sprtmtch );
@ -93,5 +93,4 @@ extern UINT8 *ddenlovr_pixmap[8];
VIDEO_START(ddenlovr);
VIDEO_UPDATE(ddenlovr);
VIDEO_EOF(ddenlovr);

View File

@ -1425,25 +1425,26 @@ int atarigen_get_hblank(const device_config *screen)
/*---------------------------------------------------------------
atarigen_halt_until_hblank_0_w: Halts CPU 0 until the
atarigen_halt_until_hblank_0: Halts CPU 0 until the
next HBLANK.
---------------------------------------------------------------*/
WRITE16_HANDLER( atarigen_halt_until_hblank_0_w )
void atarigen_halt_until_hblank_0(const device_config *screen)
{
/* halt the CPU until the next HBLANK */
int hpos = video_screen_get_hpos(machine->primary_screen); /* need to support scrnum */
int hblank = machine->screen[0].width * 9 / 10;
int hpos = video_screen_get_hpos(screen);
int width = video_screen_get_width(screen);
int hblank = width * 9 / 10;
double fraction;
/* if we're in hblank, set up for the next one */
if (hpos >= hblank)
hblank += machine->screen[0].width;
hblank += width;
/* halt and set a timer to wake up */
fraction = (double)(hblank - hpos) / (double)machine->screen[0].width;
timer_set(double_to_attotime(attotime_to_double(video_screen_get_scan_period(machine->primary_screen)) * fraction), NULL, 0, unhalt_cpu);
cpunum_set_input_line(machine, 0, INPUT_LINE_HALT, ASSERT_LINE);
fraction = (double)(hblank - hpos) / (double)width;
timer_set(double_to_attotime(attotime_to_double(video_screen_get_scan_period(screen)) * fraction), NULL, 0, unhalt_cpu);
cpunum_set_input_line(screen->machine, 0, INPUT_LINE_HALT, ASSERT_LINE);
}

View File

@ -220,7 +220,7 @@ WRITE16_HANDLER( atarigen_playfield2_latched_msb_w );
void atarigen_scanline_timer_reset(const device_config *screen, atarigen_scanline_func update_graphics, int frequency);
int atarigen_get_hblank(const device_config *screen);
WRITE16_HANDLER( atarigen_halt_until_hblank_0_w );
void atarigen_halt_until_hblank_0(const device_config *screen);
WRITE16_HANDLER( atarigen_666_paletteram_w );
WRITE16_HANDLER( atarigen_expanded_666_paletteram_w );
WRITE32_HANDLER( atarigen_666_paletteram32_w );

View File

@ -1254,29 +1254,26 @@ VIDEO_UPDATE( mjdialq2 )
// htengoku uses the mixer chip from ddenlovr
static bitmap_t *framebuffer;
VIDEO_START(htengoku)
{
VIDEO_START_CALL(ddenlovr);
VIDEO_START_CALL(hnoridur);
framebuffer = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format);
}
VIDEO_EOF(htengoku)
VIDEO_UPDATE(htengoku)
{
int layer,x,y;
// render the layers, one by one, "dynax.c" style. Then convert the pixmaps to "ddenlovr.c"
// format and let VIDEO_EOF(ddenlovr) do the final compositing (priorities + palettes)
// format and let VIDEO_UPDATE(ddenlovr) do the final compositing (priorities + palettes)
for (layer = 0; layer < 4; layer++)
{
fillbitmap(framebuffer,0,&machine->screen[0].visarea);
hanamai_copylayer( framebuffer, &machine->screen[0].visarea, layer );
fillbitmap(bitmap,0,cliprect);
hanamai_copylayer( bitmap, cliprect, layer );
for (y=0; y < 256; y++)
for (x=0; x < 512; x++)
ddenlovr_pixmap[3-layer][y*512+x] = (UINT8)(*BITMAP_ADDR16(framebuffer, y,x));
ddenlovr_pixmap[3-layer][y*512+x] = (UINT8)(*BITMAP_ADDR16(bitmap, y,x));
}
VIDEO_EOF_CALL(ddenlovr);
return VIDEO_UPDATE_CALL(ddenlovr);
}