Fixed colors, sound and identified spriteram in Go 2000 [Angelo Salese]

New games added or promoted from NOT_WORKING status
---------------------------------------------------
Go 2000 [Angelo Salese]

====================================================

Also moved go2000.o to suna.a in the mame.mak, because I believe that should stay there.
Now I'll try to fix the spriteram (even though it seems hard to RLE it, this game hardly uses it)...
This commit is contained in:
Angelo Salese 2009-02-10 22:56:27 +00:00
parent cea86cdab1
commit abe156f2a5
2 changed files with 89 additions and 26 deletions

View File

@ -19,33 +19,63 @@ P1, P2 & P3 4-pin connectors (unkown purpose)
2008-08:
Added Dips and Dip locations based on Service Mode.
Notes:
- Maybe SA stands for SunA? The z80 memory map matches the one seen in Ultra Balloon,
and the only difference stands in the DAC used.
*/
#include "driver.h"
#include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h"
#include "sound/dac.h"
static UINT16* go2000_video;
static UINT16* go2000_video2;
static WRITE16_HANDLER( sound_cmd_w )
{
soundlatch_w(space,offset,data & 0xff);
cpu_set_input_line(space->machine->cpu[1], 0, HOLD_LINE);
}
static ADDRESS_MAP_START( go2000_readmem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x03ffff) AM_READ(SMH_ROM)
AM_RANGE(0x200000, 0x203fff) AM_READ(SMH_RAM)
AM_RANGE(0x600000, 0x60ffff) AM_READ(SMH_RAM)
AM_RANGE(0x610000, 0x61ffff) AM_READ(SMH_RAM)
AM_RANGE(0x800000, 0x800fff) AM_READ(SMH_RAM)
static ADDRESS_MAP_START( go2000_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x200000, 0x203fff) AM_RAM
AM_RANGE(0x600000, 0x60ffff) AM_RAM AM_BASE(&go2000_video)
AM_RANGE(0x610000, 0x61ffff) AM_RAM AM_BASE(&go2000_video2)
AM_RANGE(0x800000, 0x800fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16)
AM_RANGE(0xa00000, 0xa00001) AM_READ_PORT("INPUTS")
AM_RANGE(0xa00002, 0xa00003) AM_READ_PORT("DSW")
AM_RANGE(0x620002, 0x620003) AM_WRITE(sound_cmd_w)
// AM_RANGE(0xe00000, 0xe00001) AM_WRITENOP
// AM_RANGE(0xe00010, 0xe00011) AM_WRITENOP
// AM_RANGE(0xe00020, 0xe00021) AM_WRITENOP
ADDRESS_MAP_END
static ADDRESS_MAP_START( go2000_writemem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x03ffff) AM_WRITE(SMH_ROM)
AM_RANGE(0x200000, 0x203fff) AM_WRITE(SMH_RAM)
AM_RANGE(0x600000, 0x603fff) AM_WRITE(SMH_RAM) AM_BASE(&go2000_video)
AM_RANGE(0x604000, 0x60ffff) AM_WRITE(SMH_RAM)
AM_RANGE(0x610000, 0x613fff) AM_WRITE(SMH_RAM) AM_BASE(&go2000_video2)
AM_RANGE(0x614000, 0x61ffff) AM_WRITE(SMH_RAM)
AM_RANGE(0x800000, 0x800fff) AM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16)
static WRITE8_HANDLER( go2000_dac_w )
{
dac_data_w( 0 , data & 0xff );
}
static WRITE8_HANDLER( go2000_pcm_1_bankswitch_w )
{
UINT8 *RAM = memory_region(space->machine, "sound");
int bank = data & 7;
memory_set_bankptr(space->machine, 1, &RAM[bank * 0x10000 + 0x400]);
}
static ADDRESS_MAP_START( go2000_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x03ff) AM_ROM
AM_RANGE(0x0400, 0xffff) AM_ROMBANK(1)
ADDRESS_MAP_END
static ADDRESS_MAP_START( go2000_sound_io, ADDRESS_SPACE_IO, 8 )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x00) AM_READ(soundlatch_r)
AM_RANGE(0x00, 0x00) AM_WRITE(go2000_dac_w)
AM_RANGE(0x03, 0x03) AM_WRITE(go2000_pcm_1_bankswitch_w)
ADDRESS_MAP_END
@ -55,8 +85,8 @@ static INPUT_PORTS_START( go2000 )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON2 ) // korean symbol
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON3 ) // out
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("P1 High") // high
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("P1 Low") // low
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) // high
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) // low
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED) // unused?
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNUSED) // unused?
@ -121,6 +151,10 @@ static const gfx_layout go2000_layout =
8*32
};
static GFXDECODE_START( go2000 )
GFXDECODE_ENTRY( "gfx1", 0, go2000_layout, 0x0, 0x80 ) /* tiles */
GFXDECODE_END
static VIDEO_START(go2000)
{
}
@ -149,24 +183,49 @@ static VIDEO_UPDATE(go2000)
{
int tile = go2000_video[count];
int attr = go2000_video2[count];
drawgfx(bitmap,screen->machine->gfx[0],tile,attr,0,0,x*8,y*8,cliprect,TRANSPARENCY_PEN,0);
drawgfx(bitmap,screen->machine->gfx[0],tile,attr,0,0,x*8,y*8,cliprect,TRANSPARENCY_PEN,0xf);
count++;
}
}
/*Spriteram, TODO*/
{
int tile,offs;
for(offs=0;offs<(0x800/2);offs+=4)
{
x = go2000_video[(0xf800/2)+offs+1];
y = go2000_video[(0xf800/2)+offs+2]-0x30;
tile = go2000_video[(0xf800/2)+offs+0] & 0x1fff;
drawgfx(bitmap,screen->machine->gfx[0],tile+0,0,0,0,x+0,y+0,cliprect,TRANSPARENCY_PEN,0xf);
drawgfx(bitmap,screen->machine->gfx[0],tile+1,0,0,0,x+8,y+0,cliprect,TRANSPARENCY_PEN,0xf);
drawgfx(bitmap,screen->machine->gfx[0],tile+2,0,0,0,x+0,y+8,cliprect,TRANSPARENCY_PEN,0xf);
drawgfx(bitmap,screen->machine->gfx[0],tile+3,0,0,0,x+8,y+8,cliprect,TRANSPARENCY_PEN,0xf);
}
}
return 0;
}
static GFXDECODE_START( go2000 )
GFXDECODE_ENTRY( "gfx1", 0, go2000_layout, 0x0, 0x80 ) /* tiles */
GFXDECODE_END
static MACHINE_RESET(go2000)
{
const address_space *space = cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM);
go2000_pcm_1_bankswitch_w(space, 0, 0);
}
static MACHINE_DRIVER_START( go2000 )
MDRV_CPU_ADD("main", M68000, 10000000)
MDRV_CPU_PROGRAM_MAP(go2000_readmem,go2000_writemem)
MDRV_CPU_PROGRAM_MAP(go2000_map,0)
MDRV_CPU_VBLANK_INT("main", irq1_line_hold)
MDRV_GFXDECODE(go2000)
MDRV_CPU_ADD("sound", Z80, 4000000)
MDRV_CPU_PROGRAM_MAP(go2000_sound_map,0)
MDRV_CPU_IO_MAP(go2000_sound_io,0)
MDRV_GFXDECODE(go2000)
MDRV_MACHINE_RESET(go2000)
MDRV_SCREEN_ADD("main", RASTER)
MDRV_SCREEN_REFRESH_RATE(60)
@ -181,6 +240,10 @@ static MACHINE_DRIVER_START( go2000 )
MDRV_VIDEO_UPDATE(go2000)
MDRV_SPEAKER_STANDARD_STEREO("left", "right")
MDRV_SOUND_ADD("dac1", DAC, 0)
MDRV_SOUND_ROUTE(0, "left", 0.50)
MDRV_SOUND_ROUTE(1, "right", 0.50)
MACHINE_DRIVER_END
ROM_START( go2000 )
@ -188,13 +251,13 @@ ROM_START( go2000 )
ROM_LOAD16_BYTE( "3.bin", 0x00000, 0x20000, CRC(fe1fb269) SHA1(266b8acddfcfd960b8e44f8606bf0873da42b9f8) )
ROM_LOAD16_BYTE( "4.bin", 0x00001, 0x20000, CRC(d6246ae3) SHA1(f2618dcabaa0c0a6e377e4acd1cdec8bea90bea8) )
ROM_REGION( 0x080000, "cpu1", 0 ) /* Z80? */
ROM_REGION( 0x080000, "sound", 0 ) /* Z80? */
ROM_LOAD( "5.bin", 0x00000, 0x80000, CRC(a32676ee) SHA1(2dab73497c0818fce479be21ed589985db51560b) )
ROM_REGION( 0x40000, "gfx1", 0 )
ROM_REGION( 0x40000, "gfx1", ROMREGION_INVERT )
ROM_LOAD16_BYTE( "1.bin", 0x00000, 0x20000, CRC(96e50aba) SHA1(caa1aadab855c3a758378dc8c48eec859e8110a4) )
ROM_LOAD16_BYTE( "2.bin", 0x00001, 0x20000, CRC(b0adf1cb) SHA1(2afb30691182dbf46be709f0d5b03b0f8ff52790) )
ROM_END
GAME( 2000, go2000, 0, go2000, go2000, 0, ROT0, "SA", "Go 2000", GAME_NO_SOUND|GAME_NOT_WORKING )
GAME( 2000, go2000, 0, go2000, go2000, 0, ROT0, "SA", "Go 2000", GAME_IMPERFECT_GRAPHICS )

View File

@ -1309,6 +1309,7 @@ $(MAMEOBJ)/suna.a: \
$(DRIVERS)/goindol.o $(VIDEO)/goindol.o \
$(DRIVERS)/suna8.o $(AUDIO)/suna8.o $(VIDEO)/suna8.o \
$(DRIVERS)/suna16.o $(VIDEO)/suna16.o \
$(DRIVERS)/go2000.o \
$(MAMEOBJ)/taito.a: \
$(DRIVERS)/40love.o $(VIDEO)/40love.o \
@ -1586,7 +1587,6 @@ $(MAMEOBJ)/misc.a: \
$(DRIVERS)/funworld.o $(VIDEO)/funworld.o \
$(DRIVERS)/galaxi.o \
$(DRIVERS)/gamecstl.o \
$(DRIVERS)/go2000.o \
$(DRIVERS)/good.o \
$(DRIVERS)/goldnpkr.o \
$(DRIVERS)/gotcha.o $(VIDEO)/gotcha.o \