summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/tetriunk.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/tetriunk.c')
-rw-r--r--src/mame/drivers/tetriunk.c245
1 files changed, 245 insertions, 0 deletions
diff --git a/src/mame/drivers/tetriunk.c b/src/mame/drivers/tetriunk.c
new file mode 100644
index 00000000000..d830c0c18ae
--- /dev/null
+++ b/src/mame/drivers/tetriunk.c
@@ -0,0 +1,245 @@
+/*
+ Tetris - Unknown manufacturer
+
+ PC based hardware
+
+ David Haywood
+ Tomasz Slanina
+
+*/
+
+#include "driver.h"
+
+static int crtindex;
+static int crtdata[256];
+
+static UINT8 * tetriunk_videoram;
+static UINT8 * tetriunk_attribram;
+
+static int bitmap_offset=0;
+
+static READ8_HANDLER( tetriunk_random_r )
+{
+ return mame_rand(Machine);
+}
+
+static WRITE8_HANDLER(crt_index_w)
+{
+ crtindex=data;
+}
+
+static WRITE8_HANDLER(crt_data_w)
+{
+ crtdata[crtindex]=data;
+}
+
+static READ8_HANDLER(crt_index_r)
+{
+ return crtindex;
+}
+
+static READ8_HANDLER(crt_data_r)
+{
+ return crtdata[crtindex];
+}
+
+static WRITE8_HANDLER(txtram_w)
+{
+ int address=(crtdata[0x0e]<<8)+crtdata[0x0f];
+ if(offset&1)
+ {
+ tetriunk_attribram[((offset>>1)+address)&0x1fff]=data;
+ }
+ else
+ {
+ tetriunk_videoram[((offset>>1)+address)&0x1fff]=data;
+ }
+}
+
+static ADDRESS_MAP_START( tetriunk_io, ADDRESS_SPACE_IO, 8 )
+ AM_RANGE(0x000, 0x00f) AM_RAM //AM_RANGE(0x000, 0x00f) AM_READWRITE(dma8237_0_r, dma8237_0_w)
+ AM_RANGE(0x020, 0x021) AM_RAM //AM_RANGE(0x020, 0x021) AM_READWRITE(pic8259_0_r, pic8259_0_w)
+ AM_RANGE(0x040, 0x043) AM_READ(tetriunk_random_r) AM_WRITENOP //AM_RANGE(0x040, 0x043) AM_READWRITE(pit8253_0_r, pit8253_0_w)
+ AM_RANGE(0x061, 0x061) AM_READ(tetriunk_random_r) AM_WRITENOP //AM_RANGE(0x060, 0x063) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
+ AM_RANGE(0x062, 0x063) AM_RAM
+ AM_RANGE(0x0a0, 0x0a0) AM_RAM
+ AM_RANGE(0x200, 0x207) AM_RAM //AM_READWRITE(pc_JOY_r, pc_JOY_w)
+ AM_RANGE(0x3b8, 0x3cf) AM_READ(tetriunk_random_r) AM_WRITENOP
+ AM_RANGE(0x3c0, 0x3c0) AM_RAM
+ AM_RANGE(0x3d4, 0x3d4) AM_READWRITE(crt_index_r, crt_index_w)
+ AM_RANGE(0x3d5, 0x3d5) AM_READWRITE(crt_data_r, crt_data_w)
+ AM_RANGE(0x3d8, 0x3d8) AM_NOP //AM_WRITE(crt_control_w)
+ AM_RANGE(0x3d9, 0x3d9) AM_NOP //AM_WRITE(color_select_w)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( tetriunk_mem, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x00000, 0x0ffff) AM_RAM
+ AM_RANGE(0xb0000, 0xbffff) AM_READ(MRA8_RAM) AM_WRITE(txtram_w)
+ AM_RANGE(0xf0000, 0xfffff) AM_ROM
+ADDRESS_MAP_END
+
+static VIDEO_START(tetriunk)
+{
+}
+
+static VIDEO_UPDATE(tetriunk)
+{
+ int x,y,z;
+ int count = 0;
+ UINT8 *region = memory_region(REGION_USER1);
+
+ if(input_code_pressed_once(KEYCODE_Z))
+ {
+ bitmap_offset+=0x10000;
+ bitmap_offset&=0xf0000;
+ }
+
+ if(input_code_pressed_once(KEYCODE_X))
+ {
+ bitmap_offset-=0x10000;
+ bitmap_offset&=0xf0000;
+ }
+
+ for(y=0;y<200;y+=8)
+ {
+ for(z=0;z<8;z++)
+ for(x=0;x<320;x++)
+ {
+ *BITMAP_ADDR16(bitmap, y+z, x) = region[y*320/8+x+z*0x2000+bitmap_offset+8];
+ }
+ }
+
+ for (y=0;y<32;y++)
+ {
+ for (x=0;x<40;x++)
+ {
+ int tile = tetriunk_videoram[count<<1];
+ int color = tetriunk_attribram[count<<1]&7;
+ int color2 = (tetriunk_attribram[count<<1]>>4)&7;
+ if(color2!=0)
+ {
+ drawgfx(bitmap,machine->gfx[0],0x100,color2,0,0,x<<3,y<<3,cliprect,TRANSPARENCY_NONE,0);
+ }
+ drawgfx(bitmap,machine->gfx[0],tile&0xff,color,0,0,x<<3,y<<3,cliprect,TRANSPARENCY_PEN,0);
+ count++;
+ }
+ }
+ return 0;
+}
+
+static const rgb_t tmpcolors[]= //fake colors
+{
+ MAKE_RGB(0x00,0x00,0x00),
+ MAKE_RGB(0x00,0x00,0xaa),
+ MAKE_RGB(0x00,0xaa,0x00),
+ MAKE_RGB(0x00,0xaa,0xaa),
+ MAKE_RGB(0xaa,0x00,0x00),
+ MAKE_RGB(0xaa,0x00,0xaa),
+ MAKE_RGB(0xaa,0xaa,0x00),
+ MAKE_RGB(0xaa,0xaa,0xaa),
+ MAKE_RGB(0x55,0x55,0x55),
+ MAKE_RGB(0x55,0x55,0xff),
+ MAKE_RGB(0x55,0xff,0x55),
+ MAKE_RGB(0x55,0xff,0xff),
+ MAKE_RGB(0xff,0x55,0x55),
+ MAKE_RGB(0xff,0x55,0xff),
+ MAKE_RGB(0xff,0xff,0x55),
+ MAKE_RGB(0xff,0xff,0xff)
+};
+
+static PALETTE_INIT(tetrisunk)
+{
+ int i;
+ for(i=0;i<16;i++)
+ {
+ palette_set_color(machine,i,tmpcolors[i]);
+ }
+}
+
+static const gfx_layout tiles8x8_layout =
+{
+ 8,8,
+ RGN_FRAC(1,1),
+ 1,
+ { 0 },
+ { 0, 1, 2, 3, 4, 5, 6, 7 },
+ { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
+ 8*8
+};
+
+static GFXDECODE_START( tetriunk )
+ GFXDECODE_ENTRY( REGION_GFX1, 0, tiles8x8_layout, 0, 16 )
+GFXDECODE_END
+
+static INPUT_PORTS_START( tetriunk )
+INPUT_PORTS_END
+
+static MACHINE_DRIVER_START( tetriunk )
+ /* basic machine hardware */
+ MDRV_CPU_ADD(I8088, 8000000)
+ MDRV_CPU_PROGRAM_MAP(tetriunk_mem, 0)
+ MDRV_CPU_IO_MAP(tetriunk_io, 0)
+ MDRV_SCREEN_REFRESH_RATE(60)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(320,200)
+ MDRV_SCREEN_VISIBLE_AREA(0, 320-1, 0, 200-1)
+ MDRV_GFXDECODE(tetriunk)
+ MDRV_PALETTE_LENGTH(256)
+ MDRV_PALETTE_INIT(tetrisunk)
+
+ MDRV_VIDEO_START(tetriunk)
+ MDRV_VIDEO_UPDATE(tetriunk)
+MACHINE_DRIVER_END
+
+ROM_START( tetriunk )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* code */
+ ROM_LOAD( "b-10.u10", 0xf0000, 0x10000, CRC(efc2a0f6) SHA1(5f0f1e90237bee9b78184035a32055b059a91eb3) )
+
+ ROM_REGION( 0x10000, REGION_GFX1,0 ) /* gfx - 1bpp font*/
+ ROM_LOAD( "b-3.u36", 0x00000, 0x2000, CRC(1a636f9a) SHA1(a356cc57914d0c9b9127670b55d1f340e64b1ac9) )
+
+ ROM_REGION( 0x80000, REGION_GFX2,ROMREGION_INVERT )
+ ROM_LOAD( "b-1.u59", 0x00000, 0x10000, CRC(4719d986) SHA1(6e0499944b968d96fbbfa3ead6237d69c769d634))
+ ROM_LOAD( "b-2.u58", 0x10000, 0x10000, CRC(599e1154) SHA1(14d99f90b4fedeab0ac24ffa9b1fd9ad0f0ba699))
+ ROM_LOAD( "b-4.u54", 0x20000, 0x10000, CRC(e112c450) SHA1(dfdecfc6bd617ec520b7563b7caf44b79d498bd3))
+ ROM_LOAD( "b-5.u53", 0x30000, 0x10000, CRC(050b7650) SHA1(5981dda4ed43b6e81fbe48bfba90a8775d5ecddf))
+ ROM_LOAD( "b-6.u49", 0x40000, 0x10000, CRC(d596ceb0) SHA1(8c82fb638688971ef11159a6b240253e63f0949d))
+ ROM_LOAD( "b-7.u48", 0x50000, 0x10000, CRC(79336b6c) SHA1(7a95875f3071bdc3ee25c0e6a5a3c00ef02dc977))
+ ROM_LOAD( "b-8.u44", 0x60000, 0x10000, CRC(1f82121a) SHA1(106da0f39f1260d0761217ed0a24c1611bfd7f05))
+ ROM_LOAD( "b-9.u43", 0x70000, 0x10000, CRC(4ea22349) SHA1(14dfd3dbd51f8bd6f3290293b8ea1c165e8cf7fd))
+
+ ROM_REGION( 0x180000, REGION_USER1, ROMREGION_ERASEFF )
+ROM_END
+
+static DRIVER_INIT (tetriunk)
+{
+ int i,j,k;
+ int index=0;
+ UINT8 *region = memory_region(REGION_USER1);
+ for(i=0;i<0x20000;i++)
+ {
+ //8 pixels/byte
+ for(j=0;j<8;j++)
+ {
+ int mask=(1<<(7-j));
+ int pixel=0;
+ for(k=0;k<4;k++)
+ {
+ if(memory_region(REGION_GFX2)[k*0x20000+i]&mask)
+ {
+ pixel|=(1<<k);
+ }
+ }
+ region[index++]=pixel;
+ }
+ }
+
+ tetriunk_videoram=auto_malloc(0x2000);
+ tetriunk_attribram=auto_malloc(0x2000);
+}
+
+GAME( 1989, tetriunk, 0, tetriunk, tetriunk, tetriunk, ROT0, "Unknown", "Tetris (Unknown Manufacturer)" , GAME_NOT_WORKING | GAME_NO_SOUND)