mirror of
https://github.com/holub/mame
synced 2025-05-19 20:29:09 +03:00
New driver: sigmab98.c [Luca Elia]
New games added or promoted from NOT_WORKING status --------------------------------------------------- GeGeGe no Kitarou Youkai Slot [A. Hoekman, ranger_lennier, Smitdogg, The Dumping Union, Luca Elia] New games marked as GAME_NOT_WORKING ------------------------------------ Win Win Bingo (2 sets) [f205v, Filippo Tarderia] Zoo [Brian Troha, The Dumping Union]
This commit is contained in:
parent
d99ab5cd26
commit
ede9da11b2
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -2107,6 +2107,7 @@ src/mame/drivers/shuuz.c svneol=native#text/plain
|
||||
src/mame/drivers/sidearms.c svneol=native#text/plain
|
||||
src/mame/drivers/sidepckt.c svneol=native#text/plain
|
||||
src/mame/drivers/sigmab52.c svneol=native#text/plain
|
||||
src/mame/drivers/sigmab98.c svneol=native#text/plain
|
||||
src/mame/drivers/silkroad.c svneol=native#text/plain
|
||||
src/mame/drivers/simpl156.c svneol=native#text/plain
|
||||
src/mame/drivers/simpsons.c svneol=native#text/plain
|
||||
|
@ -106,23 +106,25 @@ const eeprom_interface eeprom_interface_93C46 =
|
||||
"*111", // erase 1 11 aaaaaa
|
||||
"*10000xxxx", // lock 1 00 00xxxx
|
||||
"*10011xxxx", // unlock 1 00 11xxxx
|
||||
1,
|
||||
1, // enable_multi_read
|
||||
0 // reset_delay
|
||||
// "*10001xxxx" // write all 1 00 01xxxx dddddddddddddddd
|
||||
// "*10010xxxx" // erase all 1 00 10xxxx
|
||||
};
|
||||
|
||||
const eeprom_interface eeprom_interface_93C66B =
|
||||
{
|
||||
8, /* address bits */
|
||||
16, /* data bits */
|
||||
"*110", /* read command */
|
||||
"*101", /* write command */
|
||||
"*111", /* erase command */
|
||||
"*10000xxxxxx", /* lock command */
|
||||
"*10011xxxxxx", /* unlock command */
|
||||
1,
|
||||
// "*10001xxxxxx", /* write all */
|
||||
// "*10010xxxxxx", /* erase all */
|
||||
8, // address bits
|
||||
16, // data bits
|
||||
"*110", // read command
|
||||
"*101", // write command
|
||||
"*111", // erase command
|
||||
"*10000xxxxxx", // lock command
|
||||
"*10011xxxxxx", // unlock command
|
||||
1, // enable_multi_read
|
||||
0 // reset_delay
|
||||
// "*10001xxxxxx", // write all
|
||||
// "*10010xxxxxx", // erase all
|
||||
};
|
||||
|
||||
static void eeprom_write(running_device *device, int bit)
|
||||
|
@ -927,6 +927,12 @@ WRITE8_HANDLER( paletteram_xRRRRRGGGGGBBBBB_le_w )
|
||||
set_color_555(space->machine, offset / 2, 10, 5, 0, paletteram16_le(space->machine, offset));
|
||||
}
|
||||
|
||||
WRITE8_HANDLER( paletteram_xRRRRRGGGGGBBBBB_be_w )
|
||||
{
|
||||
space->machine->generic.paletteram.u8[offset] = data;
|
||||
set_color_555(space->machine, offset / 2, 10, 5, 0, paletteram16_be(space->machine, offset));
|
||||
}
|
||||
|
||||
WRITE8_HANDLER( paletteram_xRRRRRGGGGGBBBBB_split1_w )
|
||||
{
|
||||
space->machine->generic.paletteram.u8[offset] = data;
|
||||
|
@ -142,6 +142,7 @@ WRITE8_HANDLER( paletteram_xBBBBBRRRRRGGGGG_split1_w ); /* uses paletteram */
|
||||
WRITE8_HANDLER( paletteram_xBBBBBRRRRRGGGGG_split2_w ); /* uses paletteram2 */
|
||||
|
||||
WRITE8_HANDLER( paletteram_xRRRRRGGGGGBBBBB_le_w );
|
||||
WRITE8_HANDLER( paletteram_xRRRRRGGGGGBBBBB_be_w );
|
||||
WRITE8_HANDLER( paletteram_xRRRRRGGGGGBBBBB_split1_w );
|
||||
WRITE8_HANDLER( paletteram_xRRRRRGGGGGBBBBB_split2_w );
|
||||
WRITE16_HANDLER( paletteram16_xRRRRRGGGGGBBBBB_word_w );
|
||||
|
@ -1,21 +1,31 @@
|
||||
/***************************************************************************
|
||||
/*************************************************************************************************************
|
||||
|
||||
-= Astro Corp. Hardware =-
|
||||
-= Astro Corp. CGA Hardware =-
|
||||
|
||||
driver by Luca Elia (l.elia@tin.it)
|
||||
driver by Luca Elia (l.elia@tin.it)
|
||||
|
||||
CPU: 68000
|
||||
GFX: ASTRO V01 0005 or ASTRO V02 0022
|
||||
GFX: ASTRO V01 or V02 or V06
|
||||
SOUND: OKI M6295 (AD-65)
|
||||
OTHER: EEPROM, Battery
|
||||
|
||||
512 sprites, each made of N x M tiles. Tiles are 16x16x8
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------------
|
||||
Year + Game PCB ID CPU Video Chips Notes
|
||||
-------------------------------------------------------------------------------------------------------------------
|
||||
00 Show Hand CHE-B50-4002A 68000 ASTRO V01 ASTRO 0001B (28 pins), pLSI1016-60LJ
|
||||
00 Wang Pai Dui J. CHE-B50-4002A 68000 ASTRO V01 MDT2020AP MCU (28 pins), pLSI1016
|
||||
02 Skill Drop GA None JX-1689F1028N ASTRO V02 pLSI1016-60LJ
|
||||
05? Zoo M1.1 ASTRO V102PX-005? ASTRO V06 ASTRO F02 2005-02-18 Encrypted
|
||||
05? Win Win Bingo M1.2 ASTRO V102PX-006? ASTRO V06 ASTRO F02 2005-09-17 Encrypted
|
||||
-------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
To do:
|
||||
|
||||
- Find source of level 2 interrupt
|
||||
|
||||
***************************************************************************/
|
||||
*************************************************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "deprecat.h"
|
||||
@ -62,17 +72,19 @@ static VIDEO_START( astrocorp )
|
||||
|
||||
Offset: Bits: Value:
|
||||
|
||||
0.w f--- ---- ---- ---- Show This Sprite
|
||||
0 f--- ---- ---- ---- Show This Sprite
|
||||
-edc ba98 7654 3210 X
|
||||
|
||||
1.w Code
|
||||
1 Code
|
||||
|
||||
2.w f--- ---- ---- ---- -
|
||||
2 f--- ---- ---- ---- -
|
||||
-edc ba98 7654 3210 Y
|
||||
|
||||
3.w fedc ba98 ---- ---- X Size
|
||||
3 fedc ba98 ---- ---- X Size
|
||||
---- ---- 7654 3210 Y Size
|
||||
|
||||
If the first two words are zero, the sprite list ends
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect )
|
||||
@ -529,7 +541,7 @@ MACHINE_DRIVER_END
|
||||
/***************************************************************************
|
||||
|
||||
Show Hand
|
||||
(C) 1999? Astro Corp.
|
||||
(C) 2000? Astro Corp.
|
||||
|
||||
PCB CHE-B50-4002A 88 94V-0 0002
|
||||
|
||||
@ -687,6 +699,167 @@ ROM_START( skilldrp )
|
||||
ROM_LOAD( "skilldrp.u6", 0x00, 0x80, CRC(57886a3d) SHA1(bad8fa2ec2262ccb5ef8ec50959aec3f3bf8b90b) )
|
||||
ROM_END
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Win Win Bingo
|
||||
|
||||
------------------------------------------------------------------------
|
||||
ASTRO M1.2
|
||||
|
||||
------
|
||||
| |
|
||||
| os1|
|
||||
| |
|
||||
------
|
||||
|
||||
|
||||
|
||||
--------- --------- ---------
|
||||
| | | | | |
|
||||
| U1 | | U24 | | U30 |
|
||||
| | | | | |
|
||||
| | | | | |
|
||||
--------- --------- ---------
|
||||
|
||||
--------- ---------
|
||||
| | | |
|
||||
| U25 | | U26 |
|
||||
| | | |
|
||||
| | | |
|
||||
--------- ---------
|
||||
------
|
||||
| |
|
||||
| U10 |
|
||||
| |
|
||||
------
|
||||
|
||||
|
||||
--------- ---------
|
||||
| | | |
|
||||
| U31 | | U32 |
|
||||
| | | |
|
||||
| | | |
|
||||
--------- ---------
|
||||
|
||||
|
||||
--------- ---------
|
||||
| | | |
|
||||
| U27 | | U35 |
|
||||
| | | |
|
||||
| | | |
|
||||
--------- ---------
|
||||
|
||||
--------- --------- ---------
|
||||
| | | | | |
|
||||
| U28 | | U33 | | U39 |
|
||||
| | | | | |
|
||||
| | | | | |
|
||||
--------- --------- ---------
|
||||
|
||||
--------- --------- ---------
|
||||
| | | | | |
|
||||
| U29 | | U34 | | U41 |
|
||||
| | | | | |
|
||||
| | | | | |
|
||||
--------- --------- ---------
|
||||
--------------------------------------------------------------------
|
||||
|
||||
U1= ASTRO F02 2005-09-17
|
||||
U10= ASTRO V102PX-006
|
||||
U32= ASTRO V06 0430
|
||||
OS1= QUARTZ 24.000MHZ
|
||||
U25= SYNCMOS F29C51001T
|
||||
U31= SYNCMOS F29C51001T
|
||||
U30= MX 29F1610MC
|
||||
U26= MX 29F1610MC
|
||||
U35= MX 27C4000PC-12
|
||||
U24= HMI HM62C64P
|
||||
U27= HMI HM62C64P
|
||||
U28= HMI HM6116P
|
||||
U29= HMI HM6116P
|
||||
U33= HMI HM6116P
|
||||
U34= HMI HM6116P
|
||||
U39= BSI BS62LV1023SC
|
||||
U41= BSI BS62LV1023SC
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
ROM_START( winbingo )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 )
|
||||
ROM_LOAD16_BYTE( "f29c51001t.u31", 0x00000, 0x20000, CRC(964cfdb5) SHA1(01109466e07f5e906be300bc69310171d34f2e6c) )
|
||||
ROM_LOAD16_BYTE( "f29c51001t.u25", 0x00001, 0x20000, CRC(4ebeec72) SHA1(c603265e6319cff94a0c75017a12c6d86787f906) )
|
||||
|
||||
ROM_REGION( 0x400000, "sprites", ROMREGION_ERASE )
|
||||
ROM_LOAD( "mxf291610mc.u26", 0x000000, 0x200000, CRC(ad1f61e7) SHA1(845aa01d49c50bcadaed16d76c0dd9131a425b46) )
|
||||
ROM_LOAD( "mx29f1610mc.u30.bad.dump", 0x200000, 0x0a0000, BAD_DUMP CRC(6da439c5) SHA1(6afc0c800fe57b9b34ca317f4d1c040b11d3d988) )
|
||||
|
||||
ROM_REGION( 0x80000, "oki", 0 )
|
||||
ROM_LOAD( "mx27c4000pc.u35", 0x00000, 0x80000, CRC(445d81c0) SHA1(cacb9c262740c31ea42f406e9f960a1edd1b3ead) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( winbingoa )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 )
|
||||
ROM_LOAD16_BYTE( "f29c51001t.u31", 0x00000, 0x20000, CRC(c33676c3) SHA1(9f5b7d05d187cf59948a572f80c55cb8fa1f656f) )
|
||||
ROM_LOAD16_BYTE( "f29c51001t.u25", 0x00001, 0x20000, CRC(43c7b2d8) SHA1(16ee79c34b7c485dfccecdf3e0ae9f18f8a20150) )
|
||||
|
||||
ROM_REGION( 0x400000, "sprites", 0 )
|
||||
ROM_LOAD( "mx29f1610mc.u26", 0x000000, 0x200000, CRC(ad1f61e7) SHA1(845aa01d49c50bcadaed16d76c0dd9131a425b46) )
|
||||
ROM_LOAD( "mx29f1610mc.u30", 0x200000, 0x200000, CRC(31613d99) SHA1(1c720f8d981c3e9cb9d9b3b27eb95e7f72ccfc93) )
|
||||
|
||||
ROM_REGION( 0x80000, "oki", 0 )
|
||||
ROM_LOAD( "mx27c4000pc.u35", 0x00000, 0x80000, CRC(e48ed57d) SHA1(11995b90e70e010b292ba9db2da0af4ebf795c1a) )
|
||||
ROM_END
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Zoo by Astro
|
||||
|
||||
Astro M1.1 PCB
|
||||
Astro V06 0430 160pin PQFP ("ASTRO02" silkscreened under chip)
|
||||
Astro V102PX-005 T042652846 at U10 (68K core? has direct connection to program roms)
|
||||
Astro F02 2005-02-18 socketted FPGA type chip
|
||||
OKI 6295 clone chip (AD-65)
|
||||
|
||||
RAM:
|
||||
2 x KTC KT76C88-70LL
|
||||
4 x HM6116L-70
|
||||
2 x BSI BS62LV1025SC-70
|
||||
|
||||
EEPROM
|
||||
Atmel 93C46
|
||||
|
||||
OSC
|
||||
26.824MHz
|
||||
|
||||
Battery
|
||||
3.6V
|
||||
|
||||
One push button for reset or test mode
|
||||
One VR pot for sound volume
|
||||
|
||||
ZOO Z0.02.D at both U25 & U26 are Winbond W27C512 roms and are program code
|
||||
5 ZOO is a MX 27C4000 rom and is the sample rom
|
||||
29F1610mc at U26 (yes "U26" is present twice on the PCB) are the graphics
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
ROM_START( zoo )
|
||||
ROM_REGION( 0x20000, "maincpu", 0 )
|
||||
ROM_LOAD16_BYTE( "zoo_zo.02.d.u25", 0x00000, 0x10000, CRC(8566aa21) SHA1(319192e2074f3bdda6001d8e9a4b97e98826d7ce) )
|
||||
ROM_LOAD16_BYTE( "zoo_zo.02.d.u26", 0x00001, 0x10000, CRC(1a3be45a) SHA1(877be4c9e8d5e7c4644e7bcb9a6729443ed772a4) )
|
||||
|
||||
ROM_REGION( 0x200000, "sprites", 0 )
|
||||
ROM_LOAD( "29f1610mc.u26", 0x000000, 0x200000, CRC(f5cfd915) SHA1(ec869b47d0762102509dcfc1349d94340037fad5) )
|
||||
|
||||
ROM_REGION( 0x80000, "oki", 0 )
|
||||
ROM_LOAD( "5_zoo", 0x00000, 0x80000, CRC(b0c9f7aa) SHA1(99345ba0f8da3907f26c9bd29d70135f3ab7cd60) )
|
||||
|
||||
ROM_REGION16_BE( 0x80, "eeprom", 0 )
|
||||
ROM_LOAD( "zoo_93c46", 0x00, 0x80, CRC(0053fcc4) SHA1(e67a495f9586dd3946f79d50506fba1ae913f6ec) )
|
||||
ROM_END
|
||||
|
||||
|
||||
|
||||
static DRIVER_INIT( showhand )
|
||||
{
|
||||
#if 0
|
||||
@ -716,6 +889,9 @@ static DRIVER_INIT( showhanc )
|
||||
#endif
|
||||
}
|
||||
|
||||
GAME( 1999?, showhand, 0, showhand, showhand, showhand, ROT0, "Astro Corp.", "Show Hand (Italy)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1999?, showhanc, showhand, showhanc, showhanc, showhanc, ROT0, "Astro Corp.", "Wang Pai Dui Jue", GAME_SUPPORTS_SAVE )
|
||||
GAME( 2002, skilldrp, 0, skilldrp, skilldrp, 0, ROT0, "Astro Corp.", "Skill Drop Georgia", GAME_SUPPORTS_SAVE )
|
||||
GAME( 2000, showhand, 0, showhand, showhand, showhand, ROT0, "Astro Corp.", "Show Hand (Italy)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 2000, showhanc, showhand, showhanc, showhanc, showhanc, ROT0, "Astro Corp.", "Wang Pai Dui Jue", GAME_SUPPORTS_SAVE )
|
||||
GAME( 2002, skilldrp, 0, skilldrp, skilldrp, 0, ROT0, "Astro Corp.", "Skill Drop Georgia", GAME_SUPPORTS_SAVE )
|
||||
GAME( 2005?, winbingo, 0, showhand, showhand, 0, ROT0, "Astro Corp.", "Win Win Bingo (set 1)", GAME_NOT_WORKING )
|
||||
GAME( 2005?, winbingoa, winbingo, showhand, showhand, 0, ROT0, "Astro Corp.", "Win Win Bingo (set 2)", GAME_NOT_WORKING )
|
||||
GAME( 2005?, zoo, 0, showhand, showhand, 0, ROT0, "Astro Corp.", "Zoo", GAME_NOT_WORKING )
|
||||
|
582
src/mame/drivers/sigmab98.c
Normal file
582
src/mame/drivers/sigmab98.c
Normal file
@ -0,0 +1,582 @@
|
||||
/*************************************************************************************************************
|
||||
|
||||
-= Sigma B-98 Hardware =-
|
||||
|
||||
driver by Luca Elia
|
||||
|
||||
CPU : Z80
|
||||
Custom : TAXAN KY-3211, TAXAN KY-80 (Yamaha)
|
||||
Sound : YMZ280B
|
||||
NVRAM : 93C46, Battery
|
||||
|
||||
Graphics are made of sprites only.
|
||||
Each sprite is composed of X x Y tiles and can be zoomed / shrunk.
|
||||
Tiles can be 16x16x4 or 16x16x8.
|
||||
|
||||
To Do:
|
||||
|
||||
- Remove ROM patches from gegege
|
||||
- gegege checks the EEPROM output after reset, and wants a timed 0->1 transition or locks up while
|
||||
saving setting in service mode. Using a reset_delay of 7 works, unless when "play style" is set
|
||||
to "coin" (it probably changes the number of reads from port $C0).
|
||||
I guess the reset_delay mechanism should be implemented with a timer in eeprom.c.
|
||||
|
||||
*************************************************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "sound/ymz280b.h"
|
||||
#include "machine/eeprom.h"
|
||||
#include "machine/ticket.h"
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Video
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Sprites
|
||||
|
||||
Offset: Bits: Value:
|
||||
|
||||
0 7654 ----
|
||||
---- 3210 Color
|
||||
1 7--- ----
|
||||
-6-- ---- 256 Color Sprite
|
||||
--5- ----
|
||||
---4 ---- ?
|
||||
---- 3---
|
||||
---- -2-- Draw Sprite
|
||||
---- --10
|
||||
2 Tile Code (High)
|
||||
3 Tile Code (Low)
|
||||
4 7654 3--- Number of X Tiles - 1
|
||||
---- -210 X (High)
|
||||
5 X (Low)
|
||||
6 7654 3--- Number of Y Tiles - 1
|
||||
---- -210 Y (High)
|
||||
7 Y (Low)
|
||||
8 Zoom Factor (<< 8, High)
|
||||
9 Zoom Factor (<< 8, Low)
|
||||
a
|
||||
b
|
||||
c 7654 3---
|
||||
---- -210 Delta X (High)
|
||||
d Delta X (Low)
|
||||
e 7654 3---
|
||||
---- -210 Delta Y (High)
|
||||
f Delta Y (Low)
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
|
||||
{
|
||||
UINT8 *end = machine->generic.spriteram.u8 - 0x10;
|
||||
UINT8 *s = end + machine->generic.spriteram_size;
|
||||
|
||||
for ( ; s != end; s -= 0x10 )
|
||||
{
|
||||
int gfx, code, color, zoom, dim, scale;
|
||||
int sx, nx, x, x0, x1, dx, flipx;
|
||||
int sy, ny, y, y0, y1, dy, flipy;
|
||||
|
||||
if ( (s[ 0x01 ] & 0x04) == 0)
|
||||
continue;
|
||||
|
||||
color = s[ 0x00 ] & 0xf;
|
||||
|
||||
gfx = (s[ 0x01 ] & 0x40 ) ? 1 : 0;
|
||||
|
||||
code = s[ 0x02 ] * 256 + s[ 0x03 ];
|
||||
|
||||
nx = ((s[ 0x04 ] & 0xf8) >> 3) + 1;
|
||||
|
||||
sx = (s[ 0x04 ] & 0x03) * 256 + s[ 0x05 ];
|
||||
|
||||
ny = ((s[ 0x06 ] & 0xf8) >> 3) + 1;
|
||||
|
||||
sy = (s[ 0x06 ] & 0x03) * 256 + s[ 0x07 ];
|
||||
|
||||
zoom = (s[ 0x08 ] & 0xff) * 256 + s[ 0x09 ];
|
||||
|
||||
dx = (s[ 0x0c ] & 0x03) * 256 + s[ 0x0d ];
|
||||
dy = (s[ 0x0e ] & 0x03) * 256 + s[ 0x0f ];
|
||||
|
||||
// Sign extend the position
|
||||
sx = (sx & 0x1ff) - (sx & 0x200);
|
||||
sy = (sy & 0x1ff) - (sy & 0x200);
|
||||
dx = (dx & 0x1ff) - (dx & 0x200);
|
||||
dy = (dy & 0x1ff) - (dy & 0x200);
|
||||
|
||||
// Add shift
|
||||
sx += dx;
|
||||
sy += dy;
|
||||
|
||||
// Use fixed point values (16.16), for accuracy
|
||||
sx <<= 16;
|
||||
sy <<= 16;
|
||||
|
||||
dim = (0x10 << 8) * zoom;
|
||||
scale = dim / 0x10;
|
||||
|
||||
// Let's approximate to the nearest greater integer value
|
||||
// to avoid holes in between tiles
|
||||
if (scale & 0xffff) scale += (1<<16) / 0x10;
|
||||
|
||||
flipx = 0; // ?
|
||||
flipy = 0; // ?
|
||||
|
||||
if ( flipx ) { x0 = nx - 1; x1 = -1; dx = -1; }
|
||||
else { x0 = 0; x1 = nx; dx = +1; }
|
||||
|
||||
if ( flipy ) { y0 = ny - 1; y1 = -1; dy = -1; }
|
||||
else { y0 = 0; y1 = ny; dy = +1; }
|
||||
|
||||
for (y = y0; y != y1; y += dy)
|
||||
{
|
||||
for (x = x0; x != x1; x += dx)
|
||||
{
|
||||
drawgfxzoom_transpen( bitmap, cliprect, machine->gfx[gfx],
|
||||
code++, color,
|
||||
flipx, flipy,
|
||||
(sx + x * dim) / 0x10000, (sy + y * dim) / 0x10000,
|
||||
scale, scale, 0 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
VIDEO_UPDATE(sigmab98)
|
||||
{
|
||||
bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine));
|
||||
draw_sprites(screen->machine, bitmap, cliprect);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Memory Maps
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
static UINT8 reg, rombank;
|
||||
static UINT8 reg2, rambank;
|
||||
|
||||
// rombank
|
||||
static WRITE8_HANDLER( regs_w )
|
||||
{
|
||||
if (offset == 0)
|
||||
{
|
||||
reg = data;
|
||||
return;
|
||||
}
|
||||
|
||||
switch ( reg )
|
||||
{
|
||||
case 0x1f:
|
||||
rombank = data;
|
||||
if (data >= 0x18)
|
||||
logerror("%s: unknown rom bank = %02x\n", cpuexec_describe_context(space->machine), data);
|
||||
else
|
||||
memory_set_bank(space->machine, "rombank", data);
|
||||
break;
|
||||
|
||||
default:
|
||||
logerror("%s: unknown reg written: %02x = %02x\n", cpuexec_describe_context(space->machine), reg, data);
|
||||
}
|
||||
}
|
||||
static READ8_HANDLER( regs_r )
|
||||
{
|
||||
if (offset == 0)
|
||||
return reg;
|
||||
|
||||
switch ( reg )
|
||||
{
|
||||
case 0x1f:
|
||||
return rombank;
|
||||
|
||||
default:
|
||||
logerror("%s: unknown reg read: %02x\n", cpuexec_describe_context(space->machine), reg);
|
||||
return 0x00;
|
||||
}
|
||||
}
|
||||
|
||||
// rambank
|
||||
static WRITE8_HANDLER( regs2_w )
|
||||
{
|
||||
if (offset == 0)
|
||||
{
|
||||
reg2 = data;
|
||||
return;
|
||||
}
|
||||
|
||||
switch ( reg2 )
|
||||
{
|
||||
case 0xb5:
|
||||
rambank = data;
|
||||
switch (data)
|
||||
{
|
||||
case 0x32:
|
||||
memory_set_bank(space->machine, "rambank", 0);
|
||||
break;
|
||||
case 0x36:
|
||||
memory_set_bank(space->machine, "rambank", 1);
|
||||
break;
|
||||
default:
|
||||
logerror("%s: unknown ram bank = %02x\n", cpuexec_describe_context(space->machine), data);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
logerror("%s: unknown reg2 written: %02x = %02x\n", cpuexec_describe_context(space->machine), reg2, data);
|
||||
}
|
||||
}
|
||||
static READ8_HANDLER( regs2_r )
|
||||
{
|
||||
if (offset == 0)
|
||||
return reg2;
|
||||
|
||||
switch ( reg2 )
|
||||
{
|
||||
case 0xb5:
|
||||
return rambank;
|
||||
|
||||
default:
|
||||
logerror("%s: unknown reg2 read: %02x\n", cpuexec_describe_context(space->machine), reg2);
|
||||
return 0x00;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Outputs
|
||||
|
||||
UINT8 c0,c4,c6,c8;
|
||||
static void show_outputs()
|
||||
{
|
||||
#ifdef MAME_DEBUG
|
||||
popmessage("0: %02X 4: %02X 6: %02X 8: %02X",c0,c4,c6,c8);
|
||||
#endif
|
||||
}
|
||||
|
||||
// Port c0
|
||||
static WRITE8_DEVICE_HANDLER( eeprom_w )
|
||||
{
|
||||
// latch the bit
|
||||
eeprom_write_bit(device, data & 0x40);
|
||||
|
||||
// reset line asserted: reset.
|
||||
// if ((c0 ^ data) & 0x20)
|
||||
eeprom_set_cs_line(device, (data & 0x20) ? CLEAR_LINE : ASSERT_LINE);
|
||||
|
||||
// clock line asserted: write latch or select next bit to read
|
||||
eeprom_set_clock_line(device, (data & 0x10) ? ASSERT_LINE : CLEAR_LINE);
|
||||
|
||||
c0 = data;
|
||||
show_outputs();
|
||||
}
|
||||
|
||||
// Port c4
|
||||
// 10 led?
|
||||
static WRITE8_HANDLER( c4_w )
|
||||
{
|
||||
set_led_status(space->machine, 0, (data & 0x10));
|
||||
|
||||
c4 = data;
|
||||
show_outputs();
|
||||
}
|
||||
|
||||
// Port c6
|
||||
// 03 lockout (active low, 02 is cleared when reaching 99 credits)
|
||||
// 04 pulsed on coin in
|
||||
// 08 always blinks
|
||||
// 10 led?
|
||||
// 20 blinks after coin up
|
||||
static WRITE8_HANDLER( c6_w )
|
||||
{
|
||||
coin_lockout_w(space->machine, 0, (~data) & 0x02);
|
||||
|
||||
coin_counter_w(space->machine, 0, data & 0x04);
|
||||
|
||||
set_led_status(space->machine, 1, data & 0x08);
|
||||
set_led_status(space->machine, 2, data & 0x10);
|
||||
set_led_status(space->machine, 3, data & 0x20); //
|
||||
|
||||
c6 = data;
|
||||
show_outputs();
|
||||
}
|
||||
|
||||
// Port c8
|
||||
// 01 hopper enable?
|
||||
// 02 hopper motor on (active low)?
|
||||
static WRITE8_HANDLER( c8_w )
|
||||
{
|
||||
ticket_dispenser_w(devtag_get_device(space->machine, "hopper"), 0, (!(data & 0x02) && (data & 0x01)) ? 0x00 : 0x80);
|
||||
|
||||
c8 = data;
|
||||
show_outputs();
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( gegege_mem_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE( 0x0000, 0x7fff ) AM_ROM
|
||||
AM_RANGE( 0x8000, 0x9fff ) AM_ROMBANK("rombank")
|
||||
|
||||
AM_RANGE( 0xa000, 0xafff ) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
|
||||
|
||||
AM_RANGE( 0xc000, 0xc1ff ) AM_RAM_WRITE(paletteram_xRRRRRGGGGGBBBBB_be_w) AM_BASE_GENERIC(paletteram)
|
||||
|
||||
AM_RANGE( 0xc800, 0xc87f ) AM_RAM
|
||||
|
||||
// AM_RANGE( 0xd001, 0xd021 ) AM_RAM
|
||||
AM_RANGE( 0xd800, 0xdfff ) AM_RAMBANK("rambank")
|
||||
|
||||
AM_RANGE( 0xe000, 0xefff ) AM_RAM AM_BASE_SIZE_GENERIC(nvram) // battery
|
||||
|
||||
AM_RANGE( 0xf000, 0xffff ) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( gegege_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
|
||||
AM_RANGE( 0x00, 0x01 ) AM_DEVWRITE( "ymz", ymz280b_w )
|
||||
|
||||
AM_RANGE( 0xa0, 0xa1 ) AM_READWRITE( regs_r, regs_w )
|
||||
// AM_RANGE( 0xa2, 0xa3 )
|
||||
AM_RANGE( 0xa4, 0xa5 ) AM_READWRITE( regs2_r, regs2_w )
|
||||
|
||||
AM_RANGE( 0xc0, 0xc0 ) AM_READ_PORT( "EEPROM" )
|
||||
AM_RANGE( 0xc0, 0xc0 ) AM_DEVWRITE("eeprom", eeprom_w)
|
||||
|
||||
AM_RANGE( 0xc2, 0xc2 ) AM_READ_PORT( "IN1" )
|
||||
|
||||
AM_RANGE( 0xc4, 0xc4 ) AM_READ_PORT( "IN2" )
|
||||
AM_RANGE( 0xc4, 0xc4 ) AM_WRITE( c4_w )
|
||||
|
||||
AM_RANGE( 0xc6, 0xc6 ) AM_WRITE( c6_w )
|
||||
|
||||
AM_RANGE( 0xc8, 0xc8 ) AM_WRITE( c8_w )
|
||||
|
||||
AM_RANGE( 0xe5, 0xe5 ) AM_READNOP // during irq
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Graphics Layout
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
static const gfx_layout sigmab98_16x16x4_layout =
|
||||
{
|
||||
16,16,
|
||||
RGN_FRAC(1,1),
|
||||
4,
|
||||
{ STEP4(0,1) },
|
||||
{ 4*1,4*0, 4*3,4*2, 4*5,4*4, 4*7,4*6, 4*9,4*8, 4*11,4*10, 4*13,4*12, 4*15,4*14 },
|
||||
{ STEP16(0,16*4) },
|
||||
16*16*4
|
||||
};
|
||||
|
||||
static const gfx_layout sigmab98_16x16x8_layout =
|
||||
{
|
||||
16,16,
|
||||
RGN_FRAC(1,1),
|
||||
8,
|
||||
{ STEP8(0,1) },
|
||||
{ STEP16(0,8) },
|
||||
{ STEP16(0,16*8) },
|
||||
16*16*8
|
||||
};
|
||||
|
||||
static GFXDECODE_START( sigmab98 )
|
||||
GFXDECODE_ENTRY( "sprites", 0, sigmab98_16x16x4_layout, 0, 0x100/16 )
|
||||
GFXDECODE_ENTRY( "sprites", 0, sigmab98_16x16x8_layout, 0, 0x100/256 )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Input Ports
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
static INPUT_PORTS_START( gegege )
|
||||
|
||||
PORT_START("EEPROM")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) // protection? checks. Must be 0
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) // protection? checks. Must be 0
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("eeprom", eeprom_read_bit)
|
||||
|
||||
PORT_START("IN1")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) // ? (coin error, pulses mask 4 of port c6)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) // coin/medal in (coin error)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("hopper", ticket_dispenser_line_r)
|
||||
PORT_SERVICE( 0x08, IP_ACTIVE_LOW )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Bet") // bet / select in test menu
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Play") // play game / select in test menu
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
|
||||
PORT_START("IN2")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Pay Out") // pay out / change option in test menu
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Machine Drivers
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
const eeprom_interface eeprom_intf =
|
||||
{
|
||||
6, // address bits 6
|
||||
16, // data bits 16
|
||||
"*110", // read 1 10 aaaaaa
|
||||
"*101", // write 1 01 aaaaaa dddddddddddddddd
|
||||
"*111", // erase 1 11 aaaaaa
|
||||
"*10000xxxx", // lock 1 00 00xxxx
|
||||
"*10011xxxx", // unlock 1 00 11xxxx
|
||||
0, // enable_multi_read
|
||||
7 // reset_delay (otherwise gegege will hang when saving settings)
|
||||
};
|
||||
|
||||
static INTERRUPT_GEN( gegege_vblank_interrupt )
|
||||
{
|
||||
cpu_set_input_line_and_vector(device, 0, HOLD_LINE, 0x5a);
|
||||
}
|
||||
|
||||
static MACHINE_DRIVER_START( gegege )
|
||||
MDRV_CPU_ADD("maincpu", Z80, XTAL_27MHz / 4) // ?
|
||||
MDRV_CPU_PROGRAM_MAP(gegege_mem_map)
|
||||
MDRV_CPU_IO_MAP(gegege_io_map)
|
||||
MDRV_CPU_VBLANK_INT("screen", gegege_vblank_interrupt)
|
||||
|
||||
MDRV_NVRAM_HANDLER(generic_0fill)
|
||||
MDRV_EEPROM_ADD("eeprom", eeprom_intf)
|
||||
|
||||
MDRV_TICKET_DISPENSER_ADD("hopper", 200, TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_LOW )
|
||||
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(60) // ?
|
||||
MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
||||
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
|
||||
MDRV_SCREEN_SIZE(0x200, 0x200)
|
||||
MDRV_SCREEN_VISIBLE_AREA(0,0x140-1, 0,0xf0-1)
|
||||
|
||||
MDRV_GFXDECODE(sigmab98)
|
||||
MDRV_PALETTE_LENGTH(0x100)
|
||||
|
||||
MDRV_VIDEO_UPDATE(sigmab98)
|
||||
|
||||
// sound hardware
|
||||
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
|
||||
MDRV_SOUND_ADD("ymz", YMZ280B, XTAL_27MHz / 2) // ?
|
||||
MDRV_SOUND_ROUTE(0, "lspeaker", 1.0)
|
||||
MDRV_SOUND_ROUTE(1, "rspeaker", 1.0)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
ROMs Loading
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
GeGeGe no Kitarou Youkai Slot
|
||||
|
||||
(C) 1997 Banpresto, Sigma
|
||||
|
||||
PCB B-98-1 / 970703 (c) 1997 Sigma:
|
||||
|
||||
XTAL 27MHz
|
||||
|
||||
Battery
|
||||
|
||||
93C46 EEPROM
|
||||
|
||||
YMZ280B
|
||||
|
||||
TAXAN Japan
|
||||
KY-3211
|
||||
9722 AZGC
|
||||
QFP(PULL), ASIC for TFT-LCD
|
||||
|
||||
TAXAN
|
||||
KY-80
|
||||
YAMAHA
|
||||
9650 AZGC
|
||||
QFP(PULL) 50, Video IC for LCD
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
ROM_START( gegege )
|
||||
ROM_REGION( 0x20000, "maincpu", 0 )
|
||||
ROM_LOAD( "b9804-1.ic7", 0x00000, 0x20000, CRC(f8b4f855) SHA1(598bd9f91123e9ab539ce3f33779bff2d072e731) )
|
||||
|
||||
ROM_REGION( 0x100000, "sprites", 0 )
|
||||
ROM_LOAD( "b9804-2.ic12", 0x00000, 0x80000, CRC(4211079d) SHA1(d601c623fb909f1346fd02b8fb37b67956e2cd4e) )
|
||||
ROM_LOAD( "b9804-3.ic13", 0x80000, 0x80000, CRC(54aeb2aa) SHA1(ccf939111f6288a889846d51bab47ff4e992c542) )
|
||||
|
||||
ROM_REGION( 0x80000, "ymz", 0 )
|
||||
ROM_LOAD( "b9804-5.ic16", 0x00000, 0x80000, CRC(ddd7984c) SHA1(3558c495776671ffd3cd5c665b87827b3959b360) )
|
||||
ROM_END
|
||||
|
||||
static DRIVER_INIT( gegege )
|
||||
{
|
||||
UINT8 *rom = memory_region(machine, "maincpu");
|
||||
|
||||
// Protection?
|
||||
rom[0xbd3] = 0x18;
|
||||
rom[0xbd4] = 0x14;
|
||||
|
||||
rom[0xbef] = 0x18;
|
||||
rom[0xbf0] = 0x14;
|
||||
|
||||
rom[0xdec] = 0x00;
|
||||
rom[0xded] = 0x00;
|
||||
|
||||
// EEPROM timing checks
|
||||
rom[0x8138] = 0x00;
|
||||
rom[0x8139] = 0x00;
|
||||
|
||||
rom[0x8164] = 0x00;
|
||||
rom[0x8165] = 0x00;
|
||||
|
||||
// ROM banks
|
||||
memory_configure_bank(machine, "rombank", 0, 0x18, rom + 0x8000, 0x1000);
|
||||
memory_set_bank(machine, "rombank", 0);
|
||||
|
||||
// RAM banks
|
||||
UINT8 *bankedram = auto_alloc_array(machine, UINT8, 0x800 * 2);
|
||||
|
||||
memory_configure_bank(machine, "rambank", 0, 2, bankedram, 0x800);
|
||||
memory_set_bank(machine, "rambank", 0);
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Game Drivers
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
GAME( 1997, gegege, 0, gegege, gegege, gegege, ROT0, "Banpresto / Sigma", "GeGeGe no Kitarou Youkai Slot", 0 )
|
@ -1213,6 +1213,7 @@ $(MAMEOBJ)/sigma.a: \
|
||||
$(DRIVERS)/nyny.o \
|
||||
$(DRIVERS)/r2dtank.o \
|
||||
$(DRIVERS)/sigmab52.o \
|
||||
$(DRIVERS)/sigmab98.o \
|
||||
$(DRIVERS)/spiders.o $(AUDIO)/spiders.o \
|
||||
$(DRIVERS)/sub.o \
|
||||
|
||||
|
@ -8308,6 +8308,9 @@ Other Sun games
|
||||
DRIVER( jwildb52a ) /* (c) 199? Sigma */
|
||||
DRIVER( jwildb52h ) /* (c) 199? Sigma */
|
||||
|
||||
/* Sigma B98 */
|
||||
DRIVER( gegege ) /* (c) 1997 Banpresto / Sigma */
|
||||
|
||||
/* IGS games ( www.igs.com.tw ) */
|
||||
DRIVER( goldstar ) /* (c) 198? IGS */
|
||||
DRIVER( goldstbl ) /* (c) 198? IGS */
|
||||
@ -9568,9 +9571,11 @@ Other Sun games
|
||||
DRIVER( supjolly ) /* (c) 200? unknown */
|
||||
|
||||
/* Astro Corp. */
|
||||
DRIVER( showhand ) /* (c) 1999? Astro Corp. */
|
||||
DRIVER( showhanc ) /* (c) 1999? Astro Corp. */
|
||||
DRIVER( showhand ) /* (c) 2000 Astro Corp. */
|
||||
DRIVER( showhanc ) /* (c) 2000 Astro Corp. */
|
||||
DRIVER( skilldrp ) /* (c) 2002 Astro Corp. */
|
||||
DRIVER( winbingo ) /* (c) 2005? Astro Corp. */
|
||||
DRIVER( winbingoa ) /* (c) 2005? Astro Corp. */
|
||||
|
||||
/* Dyna */
|
||||
DRIVER( ncb3 ) /* (c) 199? Dyna Electronics */
|
||||
|
Loading…
Reference in New Issue
Block a user