summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Angelo Salese <angelosa@users.noreply.github.com>2010-01-11 21:09:55 +0000
committer Angelo Salese <angelosa@users.noreply.github.com>2010-01-11 21:09:55 +0000
commit30d7972c6ad6d3e5cf7e85a502207f76d52a7dd1 (patch)
treeb35166902779cadf87fbe578151c900ee4f687c2 /src
parenta9c5a5a27e0511163a774525f86cd9b66e497944 (diff)
Implemented basic blitter support in Gunpey [Tomasz Slanina]
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/gunpey.c91
1 files changed, 82 insertions, 9 deletions
diff --git a/src/mame/drivers/gunpey.c b/src/mame/drivers/gunpey.c
index 245a23153fa..929dbc21efd 100644
--- a/src/mame/drivers/gunpey.c
+++ b/src/mame/drivers/gunpey.c
@@ -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 )