mirror of
https://github.com/holub/mame
synced 2025-05-21 13:18:56 +03:00
Implemented basic blitter support in Gunpey [Tomasz Slanina]
This commit is contained in:
parent
a9c5a5a27e
commit
30d7972c6a
@ -50,13 +50,35 @@ Notes:
|
||||
#include "sound/okim6295.h"
|
||||
#include "sound/ymz280b.h"
|
||||
|
||||
static UINT8 *blit_buffer;
|
||||
|
||||
|
||||
static VIDEO_START( gunpey )
|
||||
{
|
||||
blit_buffer = auto_alloc_array(machine, UINT8, 512*512);
|
||||
}
|
||||
|
||||
static VIDEO_UPDATE( gunpey )
|
||||
{
|
||||
int x,y;
|
||||
int count;
|
||||
|
||||
count = 0;
|
||||
|
||||
for(y=0;y<512;y++)
|
||||
{
|
||||
for(x=0;x<512;x++)
|
||||
{
|
||||
UINT32 color;
|
||||
color = (blit_buffer[count] & 0xff);
|
||||
|
||||
if(x<video_screen_get_visible_area(screen)->max_x && y<video_screen_get_visible_area(screen)->max_y)
|
||||
*BITMAP_ADDR32(bitmap, y, x) = screen->machine->pens[color];
|
||||
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -89,12 +111,38 @@ static READ8_HANDLER( gunpey_inputs_r )
|
||||
static WRITE8_HANDLER( gunpey_blitter_w )
|
||||
{
|
||||
static UINT16 blit_ram[0x10];
|
||||
UINT8 *blit_rom = memory_region(space->machine, "blit_data");
|
||||
int x,y;
|
||||
|
||||
blit_ram[offset] = data;
|
||||
|
||||
if(offset == 0 && data) // blitter trigger
|
||||
if(offset == 0 && data == 2) // blitter trigger
|
||||
{
|
||||
// ...
|
||||
int srcx = blit_ram[0x04]+(blit_ram[0x05]<<8);
|
||||
int srcy = blit_ram[0x06]+(blit_ram[0x07]<<8);
|
||||
int dstx = blit_ram[0x08]+((blit_ram[0x09] & 0x01) <<8);
|
||||
int dsty = blit_ram[0x0a]+((blit_ram[0x0b] & 0x01) <<8);
|
||||
int xsize = blit_ram[0x0c]+1;
|
||||
int ysize = blit_ram[0x0e]+1;
|
||||
|
||||
if(blit_ram[0x01] == 8) //1bpp?
|
||||
{
|
||||
// ...
|
||||
}
|
||||
else
|
||||
{
|
||||
for(y=0;y<ysize;y++)
|
||||
{
|
||||
for(x=0;x<xsize;x++)
|
||||
{
|
||||
UINT32 src_index = ((srcy+y)*2048+(srcx+x)) & 0x3fffff;
|
||||
UINT32 dst_index = ((dsty+y)*512+(dstx+x)) & 0x3ffff;
|
||||
|
||||
blit_buffer[dst_index] = blit_rom[src_index];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
printf("%02x %02x %02x %02x|%02x %02x %02x %02x|%02x %02x %02x %02x|%02x %02x %02x %02x\n"
|
||||
,blit_ram[0],blit_ram[1],blit_ram[2],blit_ram[3]
|
||||
@ -225,6 +273,28 @@ INPUT_PORTS_END
|
||||
|
||||
/***************************************************************************************/
|
||||
|
||||
/* test hack */
|
||||
static PALETTE_INIT( gunpey )
|
||||
{
|
||||
int i,r,g,b,val;
|
||||
UINT8 *blit_rom = memory_region(machine, "blit_data");
|
||||
|
||||
for (i = 0; i < 512; i+=2)
|
||||
{
|
||||
val = (blit_rom[i+0x3B1DFD]) | (blit_rom[i+0x3B1DFD+1]<<8);
|
||||
|
||||
b = (val & 0x001f) >> 0;
|
||||
b<<=3;
|
||||
g = (val & 0x03e0) >> 5;
|
||||
g<<=3;
|
||||
r = (val & 0x7c00) >> 10;
|
||||
r<<=3;
|
||||
|
||||
palette_set_color(machine, i/2, MAKE_RGB(r, g, b));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static INTERRUPT_GEN( gunpey_interrupt )
|
||||
{
|
||||
cpu_set_input_line_and_vector(device,0,HOLD_LINE,0x200/4);
|
||||
@ -243,24 +313,27 @@ static MACHINE_DRIVER_START( gunpey )
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(60)
|
||||
MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
|
||||
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
|
||||
MDRV_SCREEN_SIZE(32*8, 32*8)
|
||||
MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1)
|
||||
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)
|
||||
MDRV_SCREEN_SIZE(512, 512)
|
||||
MDRV_SCREEN_VISIBLE_AREA(0*8, 512-1, 0*8, 512-1)
|
||||
|
||||
MDRV_PALETTE_LENGTH(0x800)
|
||||
MDRV_PALETTE_INIT(gunpey)
|
||||
|
||||
MDRV_VIDEO_START(gunpey)
|
||||
MDRV_VIDEO_UPDATE(gunpey)
|
||||
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
MDRV_SPEAKER_STANDARD_STEREO("lspeaker","rspeaker")
|
||||
|
||||
MDRV_SOUND_ADD("oki", OKIM6295, XTAL_16_9344MHz / 8 / 165)
|
||||
MDRV_SOUND_CONFIG(okim6295_interface_pin7high)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
MDRV_SOUND_ROUTE(0, "lspeaker", 0.25)
|
||||
MDRV_SOUND_ROUTE(1, "rspeaker", 0.25)
|
||||
|
||||
MDRV_SOUND_ADD("ymz", YMZ280B, XTAL_16_9344MHz)
|
||||
MDRV_SOUND_CONFIG(ymz280b_intf)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
MDRV_SOUND_ROUTE(0, "lspeaker", 0.25)
|
||||
MDRV_SOUND_ROUTE(1, "rspeaker", 0.25)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
@ -272,7 +345,7 @@ ROM_START( gunpey )
|
||||
ROM_LOAD16_BYTE( "gp_rom1.021", 0x00000, 0x80000, CRC(07a589a7) SHA1(06c4140ffd5f74b3d3ddfc424f43fcd08d903490) )
|
||||
ROM_LOAD16_BYTE( "gp_rom2.022", 0x00001, 0x80000, CRC(f66bc4cf) SHA1(54931d878d228c535b9e2bf22a0a3e41756f0fe5) )
|
||||
|
||||
ROM_REGION( 0x400000, "gfx1", 0 )
|
||||
ROM_REGION( 0x400000, "blit_data", 0 )
|
||||
ROM_LOAD( "gp_rom3.025", 0x00000, 0x400000, CRC(f2d1f9f0) SHA1(0d20301fd33892074508b9d127456eae80cc3a1c) )
|
||||
|
||||
ROM_REGION( 0x400000, "ymz", 0 )
|
||||
|
Loading…
Reference in New Issue
Block a user