- Converted Amiga based games to partial updating and proper scanline based timers

- Beginning of the clean-up of Space Guerilla - fixed rotation, some other stuff
- Removed tmpbitmap from some drivers
This commit is contained in:
Zsolt Vasvari 2008-02-29 01:42:25 +00:00
parent 9d6f8060d6
commit a3aef48df5
19 changed files with 297 additions and 332 deletions

1
.gitattributes vendored
View File

@ -2902,7 +2902,6 @@ src/mame/video/m57.c svneol=native#text/plain
src/mame/video/m58.c svneol=native#text/plain
src/mame/video/m62.c svneol=native#text/plain
src/mame/video/m72.c svneol=native#text/plain
src/mame/video/m79amb.c svneol=native#text/plain
src/mame/video/m90.c svneol=native#text/plain
src/mame/video/m92.c svneol=native#text/plain
src/mame/video/macrossp.c svneol=native#text/plain

View File

@ -28,6 +28,11 @@ ADDRESS_MAP_END
static INPUT_PORTS_START( 39in1 )
INPUT_PORTS_END
static VIDEO_UPDATE( 39in1 )
{
return 0;
}
static MACHINE_DRIVER_START( 39in1 )
MDRV_CPU_ADD(ARM7, 200000000) // actually Xscale PXA255, but ARM7 is a compatible subset
MDRV_CPU_PROGRAM_MAP(39in1_map,0)
@ -38,8 +43,7 @@ static MACHINE_DRIVER_START( 39in1 )
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
MDRV_SCREEN_RAW_PARAMS(16777216/4, 308, 0, 240, 228, 0, 160) // completely bogus for this h/w
MDRV_VIDEO_START(generic_bitmapped)
MDRV_VIDEO_UPDATE(generic_bitmapped)
MDRV_VIDEO_UPDATE(39in1)
MDRV_SPEAKER_STANDARD_STEREO("left", "right")
MACHINE_DRIVER_END

View File

@ -32,6 +32,7 @@ static emu_timer *serial_timer;
static UINT8 serial_timer_active;
static UINT16 input_select;
static bitmap_t *amiga_bitmap;
static render_texture *video_texture;
static render_texture *overlay_texture;
@ -76,6 +77,9 @@ static VIDEO_START( alg )
/* configure for cleanup */
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);
/* standard video start */
VIDEO_START_CALL(amiga);
@ -103,8 +107,14 @@ static void video_cleanup(running_machine *machine)
static VIDEO_UPDATE( alg )
{
/* composite the video */
if (!video_skip_this_frame())
int y;
/* update the Amiga video */
for (y = cliprect->min_y; y <= cliprect->max_y; y++)
amiga_render_scanline(amiga_bitmap, y);
/* at the end of the frame, composite the video */
if (!video_skip_this_frame() && (cliprect->max_y == machine->screen[screen].visarea.max_y))
{
mame_bitmap *vidbitmap;
rectangle fixedvis = machine->screen[screen].visarea;
@ -120,17 +130,17 @@ static VIDEO_UPDATE( alg )
/* then overlay the Amiga video */
if (overlay_texture == NULL)
overlay_texture = render_texture_alloc(NULL, NULL);
render_texture_set_bitmap(overlay_texture, tmpbitmap, &fixedvis, 0, TEXFORMAT_PALETTEA16);
render_texture_set_bitmap(overlay_texture, amiga_bitmap, &fixedvis, 0, TEXFORMAT_PALETTEA16);
/* add both quads to the screen */
render_container_empty(render_container_get_screen(screen));
render_screen_add_quad(screen, 0.0f, 0.0f, 1.0f, 1.0f, MAKE_ARGB(0xff,0xff,0xff,0xff), video_texture, PRIMFLAG_BLENDMODE(BLENDMODE_NONE) | PRIMFLAG_SCREENTEX(1));
render_screen_add_quad(screen, 0.0f, 0.0f, 1.0f, 1.0f, MAKE_ARGB(0xff,0xff,0xff,0xff), overlay_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_SCREENTEX(1));
}
/* display disc information */
if (discinfo != NULL)
popmessage("%s", laserdisc_describe_state(discinfo));
/* display disc information */
if (discinfo != NULL)
popmessage("%s", laserdisc_describe_state(discinfo));
}
return 0;
}
@ -455,7 +465,6 @@ static MACHINE_DRIVER_START( alg_r1 )
/* basic machine hardware */
MDRV_CPU_ADD_TAG("main", M68000, AMIGA_68000_NTSC_CLOCK)
MDRV_CPU_PROGRAM_MAP(main_map_r1,0)
MDRV_CPU_VBLANK_INT(amiga_scanline_callback, 262)
MDRV_MACHINE_START(alg)
MDRV_MACHINE_RESET(alg)
@ -507,7 +516,6 @@ static MACHINE_DRIVER_START( picmatic )
/* adjust for PAL specs */
MDRV_CPU_REPLACE("main", M68000, AMIGA_68000_PAL_CLOCK)
MDRV_CPU_PROGRAM_MAP(main_map_picmatic,0)
MDRV_CPU_VBLANK_INT(amiga_scanline_callback, 312)
MDRV_SCREEN_MODIFY("main")
MDRV_SCREEN_REFRESH_RATE(50)

View File

@ -291,7 +291,6 @@ static MACHINE_DRIVER_START( arcadia )
/* basic machine hardware */
MDRV_CPU_ADD(M68000, AMIGA_68000_NTSC_CLOCK)
MDRV_CPU_PROGRAM_MAP(amiga_map,0)
MDRV_CPU_VBLANK_INT(amiga_scanline_callback, 262)
MDRV_MACHINE_RESET(amiga)
MDRV_NVRAM_HANDLER(generic_0fill)
@ -309,7 +308,7 @@ static MACHINE_DRIVER_START( arcadia )
MDRV_PALETTE_INIT(amiga)
MDRV_VIDEO_START(amiga)
MDRV_VIDEO_UPDATE(generic_bitmapped)
MDRV_VIDEO_UPDATE(amiga)
/* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("left", "right")

View File

@ -267,7 +267,6 @@ static MACHINE_DRIVER_START( cd32 )
/* basic machine hardware */
MDRV_CPU_ADD(M68EC020, AMIGA_68EC020_PAL_CLOCK) /* 14.3 Mhz */
MDRV_CPU_PROGRAM_MAP(cd32_map,0)
MDRV_CPU_VBLANK_INT(amiga_scanline_callback, 312)
MDRV_MACHINE_RESET(amiga)
MDRV_NVRAM_HANDLER(cd32)
@ -286,7 +285,7 @@ static MACHINE_DRIVER_START( cd32 )
MDRV_PALETTE_INIT(amiga)
MDRV_VIDEO_START(amiga)
MDRV_VIDEO_UPDATE(generic_bitmapped)
MDRV_VIDEO_UPDATE(amiga)
/* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("left", "right")

View File

@ -31,31 +31,10 @@ TODO:
#include "cpu/arm/arm.h"
static UINT32 *ertictac_mainram;
static UINT32 *ram;
static UINT32 *ertictac_videoram;
static UINT32 IRQSTA, IRQMSKA, IRQMSKB, FIQMSK, T1low, T1high;
static UINT32 vidFIFO[256];
static READ32_HANDLER(ram_r)
{
return ram[offset];
}
static WRITE32_HANDLER(ram_w)
{
COMBINE_DATA(&ram[offset]);
if(offset>=vidFIFO[0x88]/4 && offset<( (vidFIFO[0x88]/4) + 0x28000/4))
{
int tmp=offset-vidFIFO[0x88]/4;
int x=(tmp%80)<<2;
int y=(tmp/80)&0xff;
*BITMAP_ADDR16(tmpbitmap, y, x++) = (ram[offset]>> 0)&0xff;
*BITMAP_ADDR16(tmpbitmap, y, x++) = (ram[offset]>> 8)&0xff;
*BITMAP_ADDR16(tmpbitmap, y, x++) = (ram[offset]>>16)&0xff;
*BITMAP_ADDR16(tmpbitmap, y, x ) = (ram[offset]>>24)&0xff;
}
}
static WRITE32_HANDLER(video_fifo_w)
{
vidFIFO[data>>24]=data&0xffffff;
@ -172,7 +151,7 @@ static WRITE32_HANDLER(T1GO_w)
static ADDRESS_MAP_START( ertictac_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x00000000, 0x0007ffff) AM_RAM AM_BASE (&ertictac_mainram)
AM_RANGE(0x01f00000, 0x01ffffff) AM_READWRITE(ram_r, ram_w) AM_BASE (&ram)
AM_RANGE(0x01f00000, 0x01ffffff) AM_RAM AM_BASE (&ertictac_videoram)
AM_RANGE(0x03200000, 0x03200003) AM_READWRITE(IOCR_r, IOCR_w)
AM_RANGE(0x03200010, 0x03200013) AM_READ(IRQSTA_r)
AM_RANGE(0x03200014, 0x03200017) AM_READWRITE(IRQRQA_r, IRQRQA_w)
@ -360,23 +339,47 @@ static INTERRUPT_GEN( ertictac_interrupt )
}
}
static PALETTE_INIT(ertictac)
#define NUM_PENS (0x100)
static void get_pens(pen_t *pens)
{
int c;
int color;
for (c = 0; c < 256; c++)
for (color = 0; color < NUM_PENS; color++)
{
int r,g,b,i;
UINT8 i = color & 0x03;
UINT8 r = ((color & 0x04) >> 0) | ((color & 0x10) >> 1) | i;
UINT8 g = ((color & 0x20) >> 3) | ((color & 0x40) >> 3) | i;
UINT8 b = ((color & 0x08) >> 1) | ((color & 0x80) >> 4) | i;
i = c & 0x03;
r = ((c & 0x04) >> 0) | ((c & 0x10) >> 1) | i;
g = ((c & 0x20) >> 3) | ((c & 0x40) >> 3) | i;
b = ((c & 0x08) >> 1) | ((c & 0x80) >> 4) | i;
palette_set_color_rgb(machine, c, pal4bit(r), pal4bit(g), pal4bit(b));
pens[color] = MAKE_RGB(pal4bit(r), pal4bit(g), pal4bit(b));
}
}
static VIDEO_UPDATE( ertictac )
{
int y, x;
pen_t pens[NUM_PENS];
get_pens(pens);
for (y = cliprect->min_y; y <= cliprect->max_y; y++)
for (x = 0; x < 0x140; x += 4)
{
offs_t offs = (y * 0x50) + (x >> 2) + (vidFIFO[0x88] >> 2);
*BITMAP_ADDR32(bitmap, y, x + 0) = pens[(ertictac_videoram[offs] >> 0) & 0xff];
*BITMAP_ADDR32(bitmap, y, x + 1) = pens[(ertictac_videoram[offs] >> 8) & 0xff];
*BITMAP_ADDR32(bitmap, y, x + 2) = pens[(ertictac_videoram[offs] >> 16) & 0xff];
*BITMAP_ADDR32(bitmap, y, x + 3) = pens[(ertictac_videoram[offs] >> 24) & 0xff];
}
return 0;
}
static MACHINE_DRIVER_START( ertictac )
MDRV_CPU_ADD(ARM, 16000000) /* guess */
@ -389,15 +392,11 @@ static MACHINE_DRIVER_START( ertictac )
MDRV_SCREEN_ADD("main", RASTER)
MDRV_SCREEN_REFRESH_RATE(60)
MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)
MDRV_SCREEN_SIZE(320, 256)
MDRV_SCREEN_VISIBLE_AREA(0, 319, 0, 255)
MDRV_PALETTE_LENGTH(256)
MDRV_PALETTE_INIT(ertictac)
MDRV_VIDEO_START(generic_bitmapped)
MDRV_VIDEO_UPDATE(generic_bitmapped)
MDRV_VIDEO_UPDATE(ertictac)
MACHINE_DRIVER_END
ROM_START( ertictac )

View File

@ -16,7 +16,7 @@
#include "sound/2151intf.h"
#include "sound/okim6295.h"
static UINT32 *vram;
static UINT32 *mosaicf2_videoram;
static READ32_HANDLER( oki_32bit_r )
{
@ -43,22 +43,6 @@ static WRITE32_HANDLER( ym2151_register_32bit_w )
YM2151_register_port_0_w(0,data & 0xff);
}
static WRITE32_HANDLER( vram_w )
{
int x,y;
COMBINE_DATA(&vram[offset]);
y = offset >> 8;
x = offset & 0xff;
if(x < 320/2 && y < 224)
{
*BITMAP_ADDR16(tmpbitmap, y, x*2+0) = (vram[offset] >> 16) & 0x7fff;
*BITMAP_ADDR16(tmpbitmap, y, x*2+1) = vram[offset] & 0x7fff;
}
}
static READ32_HANDLER( eeprom_r )
{
return EEPROM_read_bit();
@ -80,9 +64,30 @@ static WRITE32_HANDLER( eeprom_clock_line_w )
}
static VIDEO_UPDATE( mosaicf2 )
{
offs_t offs;
for (offs = 0; offs < 0x10000; offs++)
{
int y = offs >> 8;
int x = offs & 0xff;
if ((x < 0xa0) && (y < 0xe0))
{
*BITMAP_ADDR16(bitmap, y, (x * 2) + 0) = (mosaicf2_videoram[offs] >> 16) & 0x7fff;
*BITMAP_ADDR16(bitmap, y, (x * 2) + 1) = (mosaicf2_videoram[offs] >> 0) & 0x7fff;
}
}
return 0;
}
static ADDRESS_MAP_START( common_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x00000000, 0x001fffff) AM_RAM
AM_RANGE(0x40000000, 0x4003ffff) AM_WRITE(vram_w) AM_BASE(&vram)
AM_RANGE(0x40000000, 0x4003ffff) AM_RAM AM_BASE(&mosaicf2_videoram)
AM_RANGE(0x80000000, 0x80ffffff) AM_ROM AM_REGION(REGION_USER2,0)
AM_RANGE(0xfff00000, 0xffffffff) AM_ROM AM_REGION(REGION_USER1,0)
ADDRESS_MAP_END
@ -159,8 +164,7 @@ static MACHINE_DRIVER_START( mosaicf2 )
MDRV_SCREEN_SIZE(512, 512)
MDRV_SCREEN_VISIBLE_AREA(0, 319, 0, 223)
MDRV_VIDEO_START(generic_bitmapped)
MDRV_VIDEO_UPDATE(generic_bitmapped)
MDRV_VIDEO_UPDATE(mosaicf2)
/* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("left", "right")

View File

@ -25,11 +25,12 @@ TODO:
#include "sound/3812intf.h"
extern UINT16 *galspnbl_bgvideoram,*galspnbl_videoram,*galspnbl_colorram;
extern UINT16 *galspnbl_bgvideoram;
extern UINT16 *galspnbl_videoram;
extern UINT16 *galspnbl_colorram;
extern UINT16 *galspnbl_scroll;
PALETTE_INIT( galspnbl );
WRITE16_HANDLER( galspnbl_bgvideoram_w );
WRITE16_HANDLER( galspnbl_scroll_w );
VIDEO_UPDATE( galspnbl );
@ -43,60 +44,38 @@ static WRITE16_HANDLER( soundcommand_w )
}
static ADDRESS_MAP_START( readmem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x3fffff) AM_READ(MRA16_ROM)
AM_RANGE(0x700000, 0x703fff) AM_READ(MRA16_RAM) /* galspnbl */
AM_RANGE(0x708000, 0x70ffff) AM_READ(MRA16_RAM) /* galspnbl */
AM_RANGE(0x800000, 0x803fff) AM_READ(MRA16_RAM) /* hotpinbl */
AM_RANGE(0x808000, 0x80ffff) AM_READ(MRA16_RAM) /* hotpinbl */
AM_RANGE(0x880000, 0x880fff) AM_READ(MRA16_RAM)
AM_RANGE(0x900000, 0x900fff) AM_READ(MRA16_RAM)
AM_RANGE(0x904000, 0x904fff) AM_READ(MRA16_RAM)
AM_RANGE(0x980000, 0x9bffff) AM_READ(MRA16_RAM)
AM_RANGE(0xa80000, 0xa80001) AM_READ(input_port_0_word_r)
AM_RANGE(0xa80010, 0xa80011) AM_READ(input_port_1_word_r)
AM_RANGE(0xa80020, 0xa80021) AM_READ(input_port_2_word_r)
AM_RANGE(0xa80030, 0xa80031) AM_READ(input_port_3_word_r)
AM_RANGE(0xa80040, 0xa80041) AM_READ(input_port_4_word_r)
ADDRESS_MAP_END
static ADDRESS_MAP_START( writemem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x3fffff) AM_WRITE(MWA16_ROM)
AM_RANGE(0x700000, 0x703fff) AM_WRITE(MWA16_RAM) /* galspnbl work RAM */
AM_RANGE(0x708000, 0x70ffff) AM_WRITE(MWA16_RAM) /* galspnbl work RAM, bitmaps are decompressed here */
AM_RANGE(0x800000, 0x803fff) AM_WRITE(MWA16_RAM) /* hotpinbl work RAM */
AM_RANGE(0x808000, 0x80ffff) AM_WRITE(MWA16_RAM) /* hotpinbl work RAM, bitmaps are decompressed here */
AM_RANGE(0x880000, 0x880fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size)
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x3fffff) AM_ROM
AM_RANGE(0x700000, 0x703fff) AM_RAM /* galspnbl work RAM */
AM_RANGE(0x708000, 0x70ffff) AM_RAM /* galspnbl work RAM, bitmaps are decompressed here */
AM_RANGE(0x800000, 0x803fff) AM_RAM /* hotpinbl work RAM */
AM_RANGE(0x808000, 0x80ffff) AM_RAM /* hotpinbl work RAM, bitmaps are decompressed here */
AM_RANGE(0x880000, 0x880fff) AM_RAM AM_BASE(&spriteram16) AM_SIZE(&spriteram_size)
AM_RANGE(0x8ff400, 0x8fffff) AM_WRITE(MWA16_NOP) /* ??? */
AM_RANGE(0x900000, 0x900fff) AM_WRITE(MWA16_RAM) AM_BASE(&galspnbl_colorram)
AM_RANGE(0x900000, 0x900fff) AM_RAM AM_BASE(&galspnbl_colorram)
AM_RANGE(0x901000, 0x903fff) AM_WRITE(MWA16_NOP) /* ??? */
AM_RANGE(0x904000, 0x904fff) AM_WRITE(MWA16_RAM) AM_BASE(&galspnbl_videoram)
AM_RANGE(0x904000, 0x904fff) AM_RAM AM_BASE(&galspnbl_videoram)
AM_RANGE(0x905000, 0x907fff) AM_WRITE(MWA16_NOP) /* ??? */
AM_RANGE(0x980000, 0x9bffff) AM_WRITE(galspnbl_bgvideoram_w) AM_BASE(&galspnbl_bgvideoram)
AM_RANGE(0x980000, 0x9bffff) AM_RAM AM_BASE(&galspnbl_bgvideoram)
AM_RANGE(0xa00000, 0xa00fff) AM_WRITE(MWA16_NOP) /* more palette ? */
AM_RANGE(0xa01000, 0xa017ff) AM_WRITE(paletteram16_xxxxBBBBGGGGRRRR_word_w) AM_BASE(&paletteram16)
AM_RANGE(0xa01800, 0xa027ff) AM_WRITE(MWA16_NOP) /* more palette ? */
AM_RANGE(0xa80010, 0xa80011) AM_WRITE(soundcommand_w)
AM_RANGE(0xa80020, 0xa80021) AM_WRITE(MWA16_NOP) /* could be watchdog, but causes resets when picture is shown */
AM_RANGE(0xa80030, 0xa80031) AM_WRITE(MWA16_NOP) /* irq ack? */
AM_RANGE(0xa80050, 0xa80051) AM_WRITE(galspnbl_scroll_w)
AM_RANGE(0xa80000, 0xa80001) AM_READ(input_port_0_word_r)
AM_RANGE(0xa80010, 0xa80011) AM_READWRITE(input_port_1_word_r, soundcommand_w)
AM_RANGE(0xa80020, 0xa80021) AM_READWRITE(input_port_2_word_r, MWA16_NOP) /* w - could be watchdog, but causes resets when picture is shown */
AM_RANGE(0xa80030, 0xa80031) AM_READWRITE(input_port_3_word_r, MWA16_NOP) /* w - irq ack? */
AM_RANGE(0xa80040, 0xa80041) AM_READ(input_port_4_word_r)
AM_RANGE(0xa80050, 0xa80051) AM_WRITE(MWA16_RAM) AM_BASE(&galspnbl_scroll) /* ??? */
ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_readmem, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0xefff) AM_READ(MRA8_ROM)
AM_RANGE(0xf000, 0xf7ff) AM_READ(MRA8_RAM)
AM_RANGE(0xf800, 0xf800) AM_READ(OKIM6295_status_0_r)
AM_RANGE(0xfc00, 0xfc00) AM_READ(MRA8_NOP) /* irq ack ?? */
AM_RANGE(0xfc20, 0xfc20) AM_READ(soundlatch_r)
ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_writemem, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0xefff) AM_WRITE(MWA8_ROM)
AM_RANGE(0xf000, 0xf7ff) AM_WRITE(MWA8_RAM)
AM_RANGE(0xf800, 0xf800) AM_WRITE(OKIM6295_data_0_w)
static ADDRESS_MAP_START( audio_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0xefff) AM_ROM
AM_RANGE(0xf000, 0xf7ff) AM_RAM
AM_RANGE(0xf800, 0xf800) AM_READWRITE(OKIM6295_status_0_r, OKIM6295_data_0_w)
AM_RANGE(0xf810, 0xf810) AM_WRITE(YM3812_control_port_0_w)
AM_RANGE(0xf811, 0xf811) AM_WRITE(YM3812_write_port_0_w)
AM_RANGE(0xfc00, 0xfc00) AM_WRITE(MWA8_NOP) /* irq ack ?? */
AM_RANGE(0xfc00, 0xfc00) AM_READWRITE(MRA8_NOP, MWA8_NOP) /* irq ack ?? */
AM_RANGE(0xfc20, 0xfc20) AM_READ(soundlatch_r)
ADDRESS_MAP_END
@ -301,12 +280,12 @@ static MACHINE_DRIVER_START( galspnbl )
/* basic machine hardware */
MDRV_CPU_ADD(M68000, 10000000) /* 10 MHz ??? */
MDRV_CPU_PROGRAM_MAP(readmem,writemem)
MDRV_CPU_PROGRAM_MAP(main_map,0)
MDRV_CPU_VBLANK_INT(irq3_line_hold,1)/* also has vector for 6, but it does nothing */
MDRV_CPU_ADD(Z80, 4000000)
/* audio CPU */ /* 4 MHz ??? */
MDRV_CPU_PROGRAM_MAP(sound_readmem,sound_writemem)
MDRV_CPU_PROGRAM_MAP(audio_map,0)
/* NMI is caused by the main CPU */
/* video hardware */
@ -321,7 +300,6 @@ static MACHINE_DRIVER_START( galspnbl )
MDRV_PALETTE_LENGTH(1024 + 32768)
MDRV_PALETTE_INIT(galspnbl)
MDRV_VIDEO_START(generic_bitmapped)
MDRV_VIDEO_UPDATE(galspnbl)
/* sound hardware */

View File

@ -51,16 +51,57 @@ Ports:
*/
#include "driver.h"
WRITE8_HANDLER( ramtek_videoram_w );
INTERRUPT_GEN( invaders_interrupt );
void ramtek_sh_update(void);
WRITE8_HANDLER( ramtek_mask_w );
/*
* since these functions aren't used anywhere else, i've made them
* static, and included them here
*/
/***************************************************************************
video.c
Functions to emulate the video hardware of the machine.
***************************************************************************/
#include "driver.h"
static UINT8 *ramtek_videoram;
static UINT8 *mask;
static WRITE8_HANDLER( ramtek_videoram_w )
{
ramtek_videoram[offset] = data & ~*mask;
}
static VIDEO_UPDATE( ramtek )
{
offs_t offs;
for (offs = 0; offs < 0x2000; offs++)
{
int i;
UINT8 data = ramtek_videoram[offs];
int y = offs >> 5;
int x = (offs & 0x1f) << 3;
for (i = 0; i < 8; i++)
{
pen_t pen = (data & 0x80) ? RGB_WHITE : RGB_BLACK;
*BITMAP_ADDR32(bitmap, y, x) = pen;
x++;
data <<= 1;
}
}
return 0;
}
static const int ControllerTable[32] = {
0 , 1 , 3 , 2 , 6 , 7 , 5 , 4 ,
12 , 13 , 15 , 14 , 10 , 11 , 9 , 8 ,
@ -78,34 +119,26 @@ static READ8_HANDLER( gray5bit_controller1_r )
return (input_port_3_r(0) & 0xe0) | (~ControllerTable[input_port_3_r(0) & 0x1f] & 0x1f);
}
static ADDRESS_MAP_START( readmem, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x1fff) AM_READ(MRA8_ROM)
AM_RANGE(0x4000, 0x63ff) AM_READ(MRA8_RAM)
AM_RANGE(0x8000, 0x8000) AM_READ(input_port_0_r)
AM_RANGE(0x8002, 0x8002) AM_READ(input_port_1_r)
AM_RANGE(0x8004, 0x8004) AM_READ(gray5bit_controller0_r)
AM_RANGE(0x8005, 0x8005) AM_READ(gray5bit_controller1_r)
AM_RANGE(0xC000, 0xC07f) AM_READ(MRA8_RAM) /* ?? */
AM_RANGE(0xC200, 0xC27f) AM_READ(MRA8_RAM) /* ?? */
ADDRESS_MAP_END
static WRITE8_HANDLER( sound_w )
{
}
static ADDRESS_MAP_START( writemem, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x1fff) AM_WRITE(MWA8_ROM)
AM_RANGE(0x4000, 0x43ff) AM_WRITE(MWA8_RAM)
AM_RANGE(0x4400, 0x5fff) AM_WRITE(ramtek_videoram_w) AM_BASE(&videoram)
AM_RANGE(0x6000, 0x63ff) AM_WRITE(MWA8_RAM) /* ?? */
AM_RANGE(0x8001, 0x8001) AM_WRITE(ramtek_mask_w)
AM_RANGE(0x8000, 0x8000) AM_WRITE(sound_w) /* sound_w listed twice?? */
AM_RANGE(0x8002, 0x8003) AM_WRITE(sound_w) /* Manual Shows sound control at 0x8002 */
AM_RANGE(0xC000, 0xC07f) AM_WRITE(MWA8_RAM) /* ?? */
AM_RANGE(0xC200, 0xC27f) AM_WRITE(MWA8_RAM) /* ?? */
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x4000, 0x5fff) AM_READWRITE(MRA8_RAM, ramtek_videoram_w) AM_BASE(&ramtek_videoram)
AM_RANGE(0x6000, 0x63ff) AM_RAM /* ?? */
AM_RANGE(0x8000, 0x8000) AM_READWRITE(input_port_0_r, sound_w) /* sound_w listed twice?? */
AM_RANGE(0x8001, 0x8001) AM_WRITE(MWA8_RAM) AM_BASE(&mask)
AM_RANGE(0x8002, 0x8002) AM_READWRITE(input_port_1_r, sound_w)
AM_RANGE(0x8003, 0x8003) AM_WRITE(sound_w) /* Manual Shows sound control at 0x8002 */
AM_RANGE(0x8004, 0x8004) AM_READ(gray5bit_controller0_r)
AM_RANGE(0x8005, 0x8005) AM_READ(gray5bit_controller1_r)
AM_RANGE(0xc000, 0xc07f) AM_RAM /* ?? */
AM_RANGE(0xc200, 0xc27f) AM_RAM /* ?? */
ADDRESS_MAP_END
static INPUT_PORTS_START( m79amb )
PORT_START /* 8000 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* dip switch */
@ -142,7 +175,7 @@ static INPUT_PORTS_START( m79amb )
INPUT_PORTS_END
static INTERRUPT_GEN( M79_interrupt )
static INTERRUPT_GEN( m79amb_interrupt )
{
cpunum_set_input_line_and_vector(machine, 0, 0, HOLD_LINE, 0xcf); /* RST 08h */
}
@ -161,19 +194,18 @@ static MACHINE_DRIVER_START( m79amb )
/* basic machine hardware */
MDRV_CPU_ADD(8080, 1996800)
MDRV_CPU_PROGRAM_MAP(readmem,writemem)
MDRV_CPU_VBLANK_INT(M79_interrupt,1)
MDRV_CPU_PROGRAM_MAP(main_map,0)
MDRV_CPU_VBLANK_INT(m79amb_interrupt,1)
/* video hardware */
MDRV_SCREEN_ADD("main", RASTER)
MDRV_SCREEN_REFRESH_RATE(60)
MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)
MDRV_SCREEN_SIZE(32*8, 28*8)
MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 28*8-1)
MDRV_SCREEN_SIZE(32*8, 32*8)
MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 4*8, 32*8-1)
MDRV_VIDEO_START(generic_bitmapped)
MDRV_VIDEO_UPDATE(generic_bitmapped)
MDRV_VIDEO_UPDATE(ramtek)
/* sound hardware */
MACHINE_DRIVER_END
@ -202,4 +234,4 @@ ROM_END
GAME( 1977, m79amb, 0, m79amb, m79amb, m79amb, ROT0, "RamTek", "M79 Ambush", GAME_NO_SOUND )
GAME( 1977, m79amb, 0, m79amb, m79amb, m79amb, ROT0, "Ramtek", "M-79 Ambush", GAME_NO_SOUND )

View File

@ -352,7 +352,6 @@ static MACHINE_DRIVER_START( mquake )
/* basic machine hardware */
MDRV_CPU_ADD(M68000, AMIGA_68000_NTSC_CLOCK)
MDRV_CPU_PROGRAM_MAP(main_map,0)
MDRV_CPU_VBLANK_INT(amiga_scanline_callback, 262)
MDRV_MACHINE_RESET(mquake)
MDRV_NVRAM_HANDLER(generic_0fill)
@ -371,7 +370,7 @@ static MACHINE_DRIVER_START( mquake )
MDRV_PALETTE_INIT(amiga)
MDRV_VIDEO_START(amiga)
MDRV_VIDEO_UPDATE(generic_bitmapped)
MDRV_VIDEO_UPDATE(amiga)
/* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("left", "right")

View File

@ -170,10 +170,10 @@ Notes:
static UINT8 unkram[65536];
static UINT8 *unkram;
static int io9400;
static int io9401;
static UINT8 *io9400;
static UINT8 *io9401;
static PALETTE_INIT( spaceg )
{
@ -205,7 +205,7 @@ static PALETTE_INIT( spaceg )
static WRITE8_HANDLER( zvideoram_w )
{
int i,x,y,col;
int col;
col = unkram[0x400];
@ -213,7 +213,7 @@ static WRITE8_HANDLER( zvideoram_w )
col &=0x0f;
switch(io9401)
switch(*io9401)
{
case 0x0d: /* 1101 */
videoram[offset] &= ~data;
@ -226,28 +226,14 @@ static WRITE8_HANDLER( zvideoram_w )
break;
default:
logerror("mode =%02x pc=%04x\n",io9401,activecpu_get_pc() );
popmessage("mode =%02x pc=%04x\n",io9401,activecpu_get_pc() );
logerror("mode =%02x pc=%04x\n",*io9401,activecpu_get_pc() );
popmessage("mode =%02x pc=%04x\n",*io9401,activecpu_get_pc() );
return;
break;
}
unkram [offset] = col;
y= 255 - (offset & 0xff);
x= 255 - ((offset>>8)*8);
x -= ((io9400&0xe0)>>5);
/* draw modified eight pixels */
if (y >= 0 && y < tmpbitmap->height)
for (i = 0; i < 8; i++)
{
if (x >= 0 && y < tmpbitmap->width)
*BITMAP_ADDR16(tmpbitmap, y, x) = (data&1)? col : 0;
x++;
data >>= 1;
}
}
static READ8_HANDLER(fake_r)
@ -283,83 +269,49 @@ int rgbcolor;
logerror("palette? read from unkram offset = %04x\n",offset);
}
if (io9401!=0x40)
logerror("unkram read in mode: 9401 = %02x (offset=%04x)\n",io9401,offset);
if (*io9401!=0x40)
logerror("unkram read in mode: 9401 = %02x (offset=%04x)\n",*io9401,offset);
return unkram[offset];
}
static WRITE8_HANDLER(spaceg_colorram_w)
static VIDEO_UPDATE( spaceg )
{
int i,x,y,col;
offs_t offs;
unkram[offset] = data;
for (offs = 0; offs < 0x2000; offs++)
{
int i;
UINT8 data = videoram[offs];
int y = offs & 0xff;
UINT8 x = ((offs >> 8) << 3) - ((*io9400 & 0xe0) >> 5);
/* refresh eight pixels because the color might have just been changed */
data = videoram[offset];
col = unkram [offset];
y= 255 - (offset & 0xff);
x= 255 - ((offset>>8)*8);
x -= ((io9400&0xe0)>>5);
/* draw modified eight pixels */
if (y >= 0 && y < tmpbitmap->height)
for (i = 0; i < 8; i++)
{
if (x >= 0 && x < tmpbitmap->width)
*BITMAP_ADDR16(tmpbitmap, y, x) = (data&1)? col : 0;
*BITMAP_ADDR16(bitmap, y, x) = (data & 0x80) ? unkram[offs] : 0;
x++;
data >>= 1;
data <<= 1;
}
}
static READ8_HANDLER(zr_r)
{
return videoram[offset];
}
static WRITE8_HANDLER(io9400_w)
{
io9400=data;
if (io9400 & 0x1f)
{
logerror("!!9400 =%02x pc=%04x\n",io9400,activecpu_get_pc() );
}
return 0;
}
static WRITE8_HANDLER(io9401_w)
{
io9401 = data;
//0x40 - loads the palette on READ, address line 0x100 is the ninth bit (3rd bit of the red component)
switch(io9401)
{
case 0x0d:
case 0x01:
case 0x00:
break;
default:
logerror("!!9401 mode =%02x pc=%04x\n",io9401,activecpu_get_pc() );
break;
}
}
static ADDRESS_MAP_START( readwritemem, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x3000, 0x3fff) AM_ROM
AM_RANGE(0x7000, 0x77ff) AM_RAM
AM_RANGE(0xc000, 0xdfff) AM_READWRITE(zr_r, zvideoram_w) AM_BASE(&videoram)
AM_RANGE(0xa000, 0xbfff) AM_READWRITE(spaceg_colorram_r, spaceg_colorram_w)
AM_RANGE(0xc000, 0xdfff) AM_READWRITE(MRA8_RAM, zvideoram_w) AM_BASE(&videoram)
AM_RANGE(0xa000, 0xbfff) AM_READWRITE(spaceg_colorram_r, MWA8_RAM) AM_BASE(&unkram)
AM_RANGE(0x9400, 0x9400) AM_WRITE(io9400_w) /* gfx ctrl */
AM_RANGE(0x9401, 0x9401) AM_WRITE(io9401_w) /* gfx ctrl */
AM_RANGE(0x9400, 0x9400) AM_WRITE(MWA8_RAM) AM_BASE(&io9400) /* gfx ctrl */
AM_RANGE(0x9401, 0x9401) AM_WRITE(MWA8_RAM) AM_BASE(&io9401) /* gfx ctrl */
/* 9402 -
bits 0 and 1 probably control the lamps under the player 1 and player 2 start buttons
bit 3 is probably a flip screen
@ -422,12 +374,11 @@ static MACHINE_DRIVER_START( spaceg )
MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
MDRV_SCREEN_SIZE(256, 256)
MDRV_SCREEN_VISIBLE_AREA(0, 256-1, 0, 256-1-3*8)
MDRV_SCREEN_VISIBLE_AREA(0, 255, 32, 255)
MDRV_PALETTE_LENGTH(16+128-16)
MDRV_PALETTE_INIT( spaceg )
MDRV_VIDEO_START(generic_bitmapped)
MDRV_VIDEO_UPDATE( generic_bitmapped )
MDRV_VIDEO_UPDATE( spaceg )
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")
@ -469,4 +420,4 @@ ROM_START( spaceg )
ROM_END
GAME( 1979, spaceg, 0, spaceg, spaceg, 0, ROT90, "Omori", "Space Guerrilla", GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND)
GAME( 1979, spaceg, 0, spaceg, spaceg, 0, ROT270, "Omori", "Space Guerrilla", GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND)

View File

@ -290,7 +290,6 @@ static MACHINE_DRIVER_START( upscope )
/* basic machine hardware */
MDRV_CPU_ADD(M68000, AMIGA_68000_NTSC_CLOCK)
MDRV_CPU_PROGRAM_MAP(main_map,0)
MDRV_CPU_VBLANK_INT(amiga_scanline_callback, 262)
MDRV_MACHINE_RESET(amiga)
MDRV_NVRAM_HANDLER(generic_0fill)
@ -309,7 +308,7 @@ static MACHINE_DRIVER_START( upscope )
MDRV_PALETTE_INIT(amiga)
MDRV_VIDEO_START(amiga)
MDRV_VIDEO_UPDATE(generic_bitmapped)
MDRV_VIDEO_UPDATE(amiga)
/* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("left", "right")

View File

@ -88,6 +88,10 @@ ADDRESS_MAP_END
static INPUT_PORTS_START( vcombat )
INPUT_PORTS_END
static VIDEO_UPDATE( vcombat )
{
return 0;
}
static MACHINE_DRIVER_START( vcombat )
MDRV_CPU_ADD_TAG("main", M68000, XTAL_12MHz)
@ -110,8 +114,7 @@ static MACHINE_DRIVER_START( vcombat )
MDRV_PALETTE_LENGTH(0x100)
MDRV_VIDEO_START(generic_bitmapped)
MDRV_VIDEO_UPDATE(generic_bitmapped)
MDRV_VIDEO_UPDATE(vcombat)
MACHINE_DRIVER_END

View File

@ -377,7 +377,6 @@ extern void (*amiga_chip_ram_w)(offs_t offset, UINT16 data);
void amiga_machine_config(const amiga_machine_interface *intf);
MACHINE_RESET( amiga );
INTERRUPT_GEN( amiga_scanline_callback );
CUSTOM_INPUT( amiga_joystick_convert );
@ -408,11 +407,12 @@ void amiga_audio_data_w(int which, UINT16 data);
PALETTE_INIT( amiga );
VIDEO_START( amiga );
VIDEO_UPDATE( amiga );
UINT32 amiga_gethvpos(void);
void copper_setpc(UINT32 pc);
void amiga_set_genlock_color(UINT16 color);
void amiga_render_scanline(int scanline);
void amiga_render_scanline(bitmap_t *bitmap, int scanline);
void amiga_sprite_dma_reset(int which);
void amiga_sprite_enable_comparitor(int which, int enable);

View File

@ -43,6 +43,7 @@
#define BLITTER_NASTY_DELAY 16
/*************************************
*
* Type definitions
@ -178,6 +179,9 @@ static void amiga_cia_0_irq(int state);
static void amiga_cia_1_irq(int state);
static TIMER_CALLBACK( amiga_irq_proc );
static TIMER_CALLBACK( amiga_blitter_proc );
static TIMER_CALLBACK( scanline_callback );
/*************************************
*
@ -247,6 +251,7 @@ static void amiga_chip_ram32_w(offs_t offset, UINT16 data)
}
/*************************************
*
* Machine config/reset
@ -346,6 +351,9 @@ MACHINE_RESET( amiga )
/* call the system-specific callback */
if (amiga_intf->reset_callback)
(*amiga_intf->reset_callback)();
/* start the scanline timer */
timer_set(video_screen_get_time_until_pos(0, 0, 0), NULL, 0, scanline_callback);
}
@ -356,9 +364,9 @@ MACHINE_RESET( amiga )
*
*************************************/
INTERRUPT_GEN( amiga_scanline_callback )
static TIMER_CALLBACK( scanline_callback )
{
int scanline = machine->screen[0].height - 1 - cpu_getiloops();
int scanline = param;
/* on the first scanline, we do some extra bookkeeping */
if (scanline == 0)
@ -377,11 +385,18 @@ INTERRUPT_GEN( amiga_scanline_callback )
/* on every scanline, clock the second CIA TOD */
cia_clock_tod(1);
/* render this scanline */
amiga_render_scanline(scanline);
/* render up to this scanline */
if (scanline < machine->screen[0].visarea.min_y)
amiga_render_scanline(NULL, scanline);
else
video_screen_update_partial(0, scanline);
/* force a sound update */
amiga_audio_update();
/* set timer for next line */
scanline = (scanline + 1) % machine->screen[0].height;
timer_set(video_screen_get_time_until_pos(0, scanline, 0), NULL, scanline, scanline_callback);
}
@ -432,12 +447,15 @@ static void update_irqs(void)
cpunum_set_input_line(Machine, 0, 7, CLEAR_LINE);
}
static TIMER_CALLBACK( amiga_irq_proc )
{
update_irqs();
timer_reset( amiga_irq_timer, attotime_never);
}
/*************************************
*
* Standard joystick conversion

View File

@ -926,7 +926,7 @@ $(MAMEOBJ)/midcoin.a: \
$(MAMEOBJ)/midw8080.a: \
$(DRIVERS)/8080bw.o $(AUDIO)/8080bw.o $(VIDEO)/8080bw.o \
$(DRIVERS)/m79amb.o $(VIDEO)/m79amb.o \
$(DRIVERS)/m79amb.o \
$(DRIVERS)/mw8080bw.o $(MACHINE)/mw8080bw.o $(AUDIO)/mw8080bw.o $(VIDEO)/mw8080bw.o \
$(DRIVERS)/rotaryf.o \
$(DRIVERS)/sspeedr.o $(VIDEO)/sspeedr.o \

View File

@ -155,8 +155,6 @@ VIDEO_START( amiga )
/* reset the genlock color */
genlock_color = 0xffff;
VIDEO_START_CALL(generic_bitmapped);
}
@ -609,7 +607,7 @@ INLINE int update_ham(int newpix)
*
*************************************/
void amiga_render_scanline(int scanline)
void amiga_render_scanline(bitmap_t *bitmap, int scanline)
{
UINT16 save_color0 = CUSTOM_REG(REG_COLOR00);
int ddf_start_pixel = 0, ddf_stop_pixel = 0;
@ -620,7 +618,7 @@ void amiga_render_scanline(int scanline)
int planes = 0;
int x;
UINT16 *dst;
UINT16 *dst = NULL;
int ebitoffs = 0, obitoffs = 0;
int ecolmask = 0, ocolmask = 0;
int edelay = 0, odelay = 0;
@ -640,7 +638,8 @@ void amiga_render_scanline(int scanline)
update_sprite_dma(scanline);
/* start of a new line, signal we're not done with it and fill up vars */
dst = BITMAP_ADDR16(tmpbitmap, scanline, 0);
if (bitmap != NULL)
dst = BITMAP_ADDR16(bitmap, scanline, 0);
/* all sprites off at the start of the line */
memset(sprite_remain, 0, sizeof(sprite_remain));
@ -697,8 +696,9 @@ void amiga_render_scanline(int scanline)
}
/* clear the target pixels to the background color as a starting point */
dst[x*2+0] =
dst[x*2+1] = CUSTOM_REG(REG_COLOR00);
if (dst != NULL)
dst[x*2+0] =
dst[x*2+1] = CUSTOM_REG(REG_COLOR00);
/* if we hit the first fetch pixel, reset the counters and latch the delays */
if (x == ddf_start_pixel)
@ -838,7 +838,7 @@ void amiga_render_scanline(int scanline)
CUSTOM_REG(REG_CLXDAT) |= 0x001;
/* if we are within the display region, render */
if (x >= hstart && x < hstop)
if (dst != NULL && x >= hstart && x < hstop)
{
/* hold-and-modify mode -- assume low-res (hi-res not supported by the hardware) */
if (ham)
@ -969,3 +969,22 @@ void amiga_render_scanline(int scanline)
}
#endif
}
/*************************************
*
* Update
*
*************************************/
VIDEO_UPDATE( amiga )
{
int y;
/* render each scanline in the visible region */
for (y = cliprect->min_y; y <= cliprect->max_y; y++)
amiga_render_scanline(bitmap, y);
return 0;
}

View File

@ -2,9 +2,10 @@
#include "deprecat.h"
UINT16 *galspnbl_bgvideoram,*galspnbl_videoram,*galspnbl_colorram;
static int screenscroll;
UINT16 *galspnbl_bgvideoram;
UINT16 *galspnbl_videoram;
UINT16 *galspnbl_colorram;
UINT16 *galspnbl_scroll;
PALETTE_INIT( galspnbl )
@ -18,27 +19,6 @@ PALETTE_INIT( galspnbl )
WRITE16_HANDLER( galspnbl_bgvideoram_w )
{
int sx,sy;
data = COMBINE_DATA(&galspnbl_bgvideoram[offset]);
sx = offset % 512;
sy = offset / 512;
*BITMAP_ADDR16(tmpbitmap, sy, sx) = 1024 + (data >> 1);
}
WRITE16_HANDLER( galspnbl_scroll_w )
{
if (ACCESSING_LSB)
screenscroll = 4-(data & 0xff);
}
/* sprite format (see also Ninja Gaiden):
*
* word bit usage
@ -84,7 +64,8 @@ static void draw_sprites(running_machine *machine, mame_bitmap *bitmap, const re
color = spriteram16[offs+2];
size = 1 << (color & 0x0003); // 1,2,4,8
color = (color & 0x00f0) >> 4;
sx = spriteram16[offs+4] + screenscroll;
// sx = spriteram16[offs+4] + screenscroll;
sx = spriteram16[offs+4];
sy = spriteram16[offs+3];
flipx = attr & 0x0001;
flipy = attr & 0x0002;
@ -108,13 +89,27 @@ static void draw_sprites(running_machine *machine, mame_bitmap *bitmap, const re
}
static void draw_background(mame_bitmap *bitmap, const rectangle *cliprect)
{
offs_t offs;
// int screenscroll = 4 - (galspnbl_scroll[0] & 0xff);
for (offs = 0; offs < 0x20000; offs++)
{
int y = offs >> 9;
int x = offs & 0x1ff;
*BITMAP_ADDR16(bitmap, y, x) = 1024 + (galspnbl_bgvideoram[offs] >> 1);
}
}
VIDEO_UPDATE( galspnbl )
{
int offs;
/* copy the temporary bitmap to the screen */
copyscrollbitmap(bitmap,tmpbitmap,1,&screenscroll,0,0,cliprect);
draw_background(bitmap, cliprect);
draw_sprites(machine,bitmap,cliprect,0);
@ -135,7 +130,8 @@ VIDEO_UPDATE( galspnbl )
code,
color,
0,0,
16*sx + screenscroll,8*sy,
// 16*sx + screenscroll,8*sy,
16*sx,8*sy,
cliprect,TRANSPARENCY_PEN,0);
}
}

View File

@ -1,42 +0,0 @@
/***************************************************************************
video.c
Functions to emulate the video hardware of the machine.
***************************************************************************/
#include "driver.h"
static UINT8 mask = 0;
WRITE8_HANDLER( ramtek_mask_w )
{
mask = data;
}
WRITE8_HANDLER( ramtek_videoram_w )
{
data = data & ~mask;
if (videoram[offset] != data)
{
int i,x,y;
videoram[offset] = data;
y = offset / 32;
x = 8 * (offset % 32);
for (i = 0; i < 8; i++)
{
pen_t pen = (data & 0x80) ? RGB_WHITE : RGB_BLACK;
*BITMAP_ADDR32(tmpbitmap, y, x) = pen;
x++;
data <<= 1;
}
}
}