summaryrefslogtreecommitdiffstats
path: root/src/mame/drivers/twinkle.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/twinkle.cpp')
-rw-r--r--src/mame/drivers/twinkle.cpp378
1 files changed, 145 insertions, 233 deletions
diff --git a/src/mame/drivers/twinkle.cpp b/src/mame/drivers/twinkle.cpp
index 85dbd059fea..5326a791d83 100644
--- a/src/mame/drivers/twinkle.cpp
+++ b/src/mame/drivers/twinkle.cpp
@@ -9,7 +9,7 @@ driver by smf and R. Belmont
TODO:
dvd check for bmiidx, bmiidxa, bmiidxc & bmiidxca
-The first 128k of RF5C400 bank 0 is uploaded by the 68000, the rest is unused. It may be using 16J & 18J
+finish sound board emulation and remove response hle
emulate dvd player and video mixing
16seg led font
@@ -28,14 +28,14 @@ beatmania IIDX + DDR Club Kit(newer) 1999 896 JA BBM *? *
beatmania IIDX Substream 1999 *? GC983 A04 *? ?
beatmania IIDX Club Version 2 1999 GE984 A01(BM) *? *984 A02 ?
+ GE984 A01(DDR)
-beatmania IIDX 2nd Style 1999 GC985 A01 GC985 A04 *? *985 HDD A01
-beatmania IIDX 3rd Style 2000 GC992-JA A01 GC992-JA A04 *? *992 HDD A01
-beatmania IIDX 3rd Style(newer) 2000 GC992-JA C01 GC992-JA A04 *? *992 HDD A01
-beatmania IIDX 4th Style 2000 A03 JA A01 A03 JA A02 A03 A03 JA A03
-beatmania IIDX 5th Style 2001 A17 JA A01 A17 JA A02 A17 *A17 JA A03
-beatmania IIDX 6th Style 2001 B4U JA A01 B4U JA A02 *? B4U JA A03
-beatmania IIDX 6th Style(newer) 2001 B4U JA B01 B4U JA A02 *? B4U JA A03
-beatmania IIDX 7th Style 2002 B44 JA A01 B44 JA A02 *? B44 JA A03
+beatmania IIDX 2nd Style 1999 GC985 A01 GC985 A04 * *985 HDD A01
+beatmania IIDX 3rd Style 2000 GC992-JA A01 GC992-JA A04 * *992 HDD A01
+beatmania IIDX 3rd Style(newer) 2000 GC992-JA C01 GC992-JA A04 * *992 HDD A01
+beatmania IIDX 4th Style 2000 A03 JA A01 A03 JA A02 *A03 A03 JA A03
+beatmania IIDX 5th Style 2001 A17 JA A01 A17 JA A02 * *A17 JA A03
+beatmania IIDX 6th Style 2001 B4U JA A01 B4U JA A02 * B4U JA A03
+beatmania IIDX 6th Style(newer) 2001 B4U JA B01 B4U JA A02 * B4U JA A03
+beatmania IIDX 7th Style 2002 B44 JA A01 B44 JA A02 * B44 JA A03
beatmania IIDX 8th Style 2002 C44 JA A01 C44 JA A02 *C44 C44 JA A03
* = Not dumped.
@@ -247,8 +247,6 @@ Notes:
#include "sound/rf5c400.h"
#include "speaker.h"
-#include "bmiidx.lh"
-
class twinkle_state : public driver_device
{
public:
@@ -258,8 +256,6 @@ public:
m_ata(*this, "ata"),
m_waveram(*this, "rfsnd"),
m_spu_ata_dma(0),
- m_spu_ata_dmarq(0),
- m_wave_bank(0),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu")
{
@@ -267,22 +263,20 @@ public:
required_device<am53cf96_device> m_am53cf96;
required_device<ata_interface_device> m_ata;
- required_shared_ptr<uint16_t> m_waveram;
+ required_region_ptr<uint16_t> m_waveram;
uint16_t m_spu_ctrl; // SPU board control register
uint8_t m_spu_shared[0x400]; // SPU/PSX shared dual-ported RAM
uint32_t m_spu_ata_dma;
int m_spu_ata_dmarq;
- uint32_t m_wave_bank;
int m_io_offset;
int m_output_last[ 0x100 ];
+ int m_last_io_offset;
uint8_t m_sector_buffer[ 4096 ];
DECLARE_WRITE8_MEMBER(twinkle_io_w);
DECLARE_READ8_MEMBER(twinkle_io_r);
DECLARE_WRITE16_MEMBER(twinkle_output_w);
- DECLARE_WRITE16_MEMBER(led_w);
- DECLARE_WRITE16_MEMBER(key_led_w);
DECLARE_WRITE16_MEMBER(serial_w);
DECLARE_WRITE8_MEMBER(shared_psx_w);
DECLARE_READ8_MEMBER(shared_psx_r);
@@ -293,8 +287,6 @@ public:
DECLARE_WRITE16_MEMBER(twinkle_waveram_w);
DECLARE_READ16_MEMBER(shared_68k_r);
DECLARE_WRITE16_MEMBER(shared_68k_w);
- DECLARE_WRITE16_MEMBER(spu_led_w);
- DECLARE_WRITE16_MEMBER(spu_wavebank_w);
DECLARE_READ16_MEMBER(unk_68k_r);
DECLARE_WRITE_LINE_MEMBER(spu_ata_irq);
DECLARE_WRITE_LINE_MEMBER(spu_ata_dmarq);
@@ -312,6 +304,8 @@ public:
int m_output_clock;
};
+/* RTC */
+
#define LED_A1 0x0001
#define LED_A2 0x0002
#define LED_B 0x0004
@@ -338,24 +332,23 @@ public:
static const uint16_t asciicharset[]=
{
-// 0
- 0, // (default on boot)
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
-// 0x10
+ LED_A1 | LED_A2 | LED_B | LED_C | LED_D1 | LED_D2 | LED_E | LED_F | LED_J | LED_M, // 0
+ LED_B | LED_C, // 1
+ LED_A1 | LED_A2 | LED_B | LED_D1 | LED_D2 | LED_E | LED_G1 | LED_G2, // 2
+ LED_A1 | LED_A2 | LED_B | LED_C | LED_D1 | LED_D2 | LED_G2, // 3
+ LED_B | LED_C | LED_F | LED_G1 | LED_G2 , // 4
+ LED_A1 | LED_A2 | LED_D1 | LED_D2 | LED_F | LED_G1 | LED_K, // 5
+ LED_A1 | LED_A2 | LED_C | LED_D1 | LED_D2 | LED_E | LED_F | LED_G1 | LED_G2, // 6
+ LED_A1 | LED_A2 | LED_B | LED_C, // 7
+ LED_A1 | LED_A2 | LED_B | LED_C | LED_D1 | LED_D2 | LED_E | LED_F, // 8
+ LED_A1 | LED_A2 | LED_B | LED_C | LED_D1 | LED_D2 | LED_F, // 9
+ LED_A1 | LED_A2 | LED_B | LED_C | LED_E | LED_F, // A
+ LED_A1 | LED_A2 | LED_B | LED_C | LED_D1 | LED_D2 | LED_G2 | LED_I | LED_L, // B
+ LED_A1 | LED_A2 | LED_D1 | LED_D2 | LED_E | LED_F, // C
+ LED_A1 | LED_A2 | LED_B | LED_C | LED_D1 | LED_D2 | LED_I | LED_L, // D
+ LED_A1 | LED_A2 | LED_D1 | LED_D2 | LED_E | LED_F | LED_G1 | LED_G2, // E
+ LED_A1 | LED_A2 | LED_E | LED_F | LED_G1, // F
+// 16
0,
0,
0,
@@ -372,64 +365,63 @@ static const uint16_t asciicharset[]=
0,
0,
0,
-// 0x20
+// 32
0, // space
- LED_D2 | LED_A2 | LED_I | LED_J, // !
- LED_I | LED_B, // "
+ 0, // !
+ 0, // "
0, // #
0, // $
0, // %
- LED_A1 | LED_A2 | LED_D1 | LED_D2 | LED_H | LED_J | LED_M | LED_K | LED_C, // &
+ 0, // &
0, // '
- LED_J | LED_K, // (
- LED_H | LED_M, // )
- LED_G1 | LED_G2 | LED_H | LED_I | LED_J | LED_K | LED_L | LED_M, // *
+ 0, // (
+ 0, // )
+ 0, // *
0, // +
0, // ,
- LED_G1 | LED_G2, // -
+ 0, // -
0, // .
- LED_J | LED_M, // /
-// 0x30
+ 0, // /
+// 48
LED_A1 | LED_A2 | LED_B | LED_C | LED_D1 | LED_D2 | LED_E | LED_F | LED_J | LED_M, // 0
LED_B | LED_C, // 1
- LED_A1 | LED_A2 | LED_B | LED_D1 | LED_D2 | LED_E | LED_G1 | LED_G2, // 2
- LED_A1 | LED_A2 | LED_B | LED_C | LED_D1 | LED_D2 | LED_G1 | LED_G2, // 3
+ LED_A1 | LED_A2 | LED_B | LED_D1 | LED_D2 | LED_E | LED_G1 | LED_G2, // 2
+ LED_A1 | LED_A2 | LED_B | LED_C | LED_D1 | LED_D2 | LED_G2, // 3
LED_B | LED_C | LED_F | LED_G1 | LED_G2 , // 4
- LED_A1 | LED_A2 | LED_C | LED_D1 | LED_D2 | LED_F | LED_G1 | LED_G2, // 5
- LED_A1 | LED_A2 | LED_C | LED_D1 | LED_D2 | LED_E | LED_F | LED_G1 | LED_G2, // 6
- LED_A1 | LED_A2 | LED_B | LED_C | LED_F, // 7
- LED_A1 | LED_A2 | LED_B | LED_C | LED_D1 | LED_D2 | LED_E | LED_F | LED_G1 | LED_G2, // 8
- LED_A1 | LED_A2 | LED_B | LED_C | LED_D1 | LED_D2 | LED_F | LED_G1 | LED_G2, // 9
+ LED_A1 | LED_A2 | LED_D1 | LED_D2 | LED_F | LED_G1 | LED_K, // 5
+ LED_A1 | LED_A2 | LED_C | LED_D1 | LED_D2 | LED_E | LED_F, // 6
+ LED_A1 | LED_A2 | LED_B | LED_C, // 7
+ LED_A1 | LED_A2 | LED_B | LED_C | LED_D1 | LED_D2 | LED_E | LED_F, // 8
+ LED_A1 | LED_A2 | LED_B | LED_C | LED_D1 | LED_D2 | LED_F, // 9
0, // :
0, // ;
0, // <
0, // =
0, // >
- LED_A1 | LED_A2 | LED_J | LED_D2, // ?
-// 0x40
+ 0, // ?
+// 64
0, // @
- LED_A1 | LED_A2 | LED_B | LED_C | LED_E | LED_F | LED_G1 | LED_G2, // A
- LED_A1 | LED_A2 | LED_D1 | LED_D2 | LED_E | LED_F | LED_G1 | LED_J | LED_K, // B
+ LED_A1 | LED_A2 | LED_B | LED_C | LED_E | LED_F, // A
+ LED_A1 | LED_A2 | LED_B | LED_C | LED_D1 | LED_D2 | LED_G2 | LED_I | LED_L, // B
LED_A1 | LED_A2 | LED_D1 | LED_D2 | LED_E | LED_F, // C
- LED_B | LED_C | LED_D1 | LED_D2 | LED_E | LED_G1 | LED_G2, // D
+ LED_A1 | LED_A2 | LED_B | LED_C | LED_D1 | LED_D2 | LED_I | LED_L, // D
LED_A1 | LED_A2 | LED_D1 | LED_D2 | LED_E | LED_F | LED_G1 | LED_G2, // E
- LED_A1 | LED_A2 | LED_E | LED_F | LED_G1 | LED_G2, // F
+ LED_A1 | LED_A2 | LED_E | LED_F | LED_G1, // F
LED_A1 | LED_A2 | LED_C | LED_D1 | LED_D2 | LED_E | LED_F | LED_G2, // G
LED_B | LED_C | LED_E | LED_F | LED_G1 | LED_G2, // H
- LED_A1 | LED_A2 | LED_D1 | LED_D2 | LED_I | LED_L, // I
- LED_A1 | LED_A2 | LED_I | LED_L | LED_D2, // J
+ LED_I | LED_L, // I
+ LED_B | LED_C | LED_D1 | LED_D2 | LED_E, // J
LED_E | LED_F | LED_G1 | LED_J | LED_K, // K
LED_D1 | LED_D2 | LED_E | LED_F, // L
LED_B | LED_C | LED_E | LED_F | LED_H | LED_J, // M
LED_B | LED_C | LED_E | LED_F | LED_H | LED_K, // N
LED_A1 | LED_A2 | LED_B | LED_C | LED_D1 | LED_D2 | LED_E | LED_F, // O
-// 0x50
- LED_A1 | LED_A2 | LED_B | LED_E | LED_F | LED_G1 | LED_G2, // P
+ LED_A1 | LED_A2 | LED_B | LED_E | LED_F, // P
LED_A1 | LED_A2 | LED_B | LED_C | LED_D1 | LED_D2 | LED_E | LED_F | LED_K, // Q
- LED_A1 | LED_A2 | LED_B | LED_E | LED_F | LED_K | LED_G1 | LED_G2, // R
+ LED_A1 | LED_A2 | LED_B | LED_E | LED_F | LED_K, // R
LED_A1 | LED_A2 | LED_C | LED_D1 | LED_D2 | LED_F | LED_G1 | LED_G2, // S
LED_A1 | LED_A2 | LED_I | LED_L, // T
- LED_B | LED_C | LED_D1 | LED_D2 | LED_E | LED_F, // U
+ LED_B | LED_C | LED_D1 | LED_D2 | LED_E | LED_F, // O
LED_E | LED_F | LED_M | LED_J, // V
LED_B | LED_C | LED_E | LED_F | LED_M | LED_K, // W
LED_H | LED_J | LED_K | LED_M, // X
@@ -440,35 +432,33 @@ static const uint16_t asciicharset[]=
0, // ]
0, // ^
0, // _
-// 0x60
0, // `
- 0, // a
- 0, // b
- 0, // c
- 0, // d
- 0, // e
- 0, // f
- LED_A1 | LED_A2 | LED_B | LED_C | LED_D1 | LED_D2 | LED_E | LED_F | LED_G1 | LED_G2 | LED_H | LED_I | LED_J | LED_K | LED_L | LED_M, // g (16 seg led test)
- 0, // h
- 0, // i
- 0, // j
- 0, // k
- 0, // l
- LED_D2, // m (".")
- 0, // n
- 0, // o
-// 0x70
- 0, // p
- LED_J, // q ("'")
- 0, // r
- 0, // s
- 0, // t
- LED_M, // u (",")
- 0, // v
- 0, // w
- 0, // x
- 0, // y
- 0, // z
+ LED_A1 | LED_A2 | LED_B | LED_C | LED_E | LED_F, // A
+ LED_A1 | LED_A2 | LED_B | LED_C | LED_D1 | LED_D2 | LED_G2 | LED_I | LED_L, // B
+ LED_A1 | LED_A2 | LED_D1 | LED_D2 | LED_E | LED_F, // C
+ LED_A1 | LED_A2 | LED_B | LED_C | LED_D1 | LED_D2 | LED_I | LED_L, // D
+ LED_A1 | LED_A2 | LED_D1 | LED_D2 | LED_E | LED_F | LED_G1 | LED_G2, // E
+ LED_A1 | LED_A2 | LED_E | LED_F | LED_G1, // F
+ LED_A1 | LED_A2 | LED_C | LED_D1 | LED_D2 | LED_E | LED_F | LED_G2, // G
+ LED_B | LED_C | LED_E | LED_F | LED_G1 | LED_G2, // H
+ LED_I | LED_L, // I
+ LED_B | LED_C | LED_D1 | LED_D2 | LED_E, // J
+ LED_E | LED_F | LED_G1 | LED_J | LED_K, // K
+ LED_D1 | LED_D2 | LED_E | LED_F, // L
+ LED_B | LED_C | LED_E | LED_F | LED_H | LED_J, // M
+ LED_B | LED_C | LED_E | LED_F | LED_H | LED_K, // N
+ LED_A1 | LED_A2 | LED_B | LED_C | LED_D1 | LED_D2 | LED_E | LED_F, // O
+ LED_A1 | LED_A2 | LED_B | LED_E | LED_F, // P
+ LED_A1 | LED_A2 | LED_B | LED_C | LED_D1 | LED_D2 | LED_E | LED_F | LED_K, // Q
+ LED_A1 | LED_A2 | LED_B | LED_E | LED_F | LED_K, // R
+ LED_A1 | LED_A2 | LED_C | LED_D1 | LED_D2 | LED_F | LED_G1 | LED_G2, // S
+ LED_A1 | LED_A2 | LED_I | LED_L, // T
+ LED_B | LED_C | LED_D1 | LED_D2 | LED_E | LED_F, // O
+ LED_E | LED_F | LED_M | LED_J, // V
+ LED_B | LED_C | LED_E | LED_F | LED_M | LED_K, // W
+ LED_H | LED_J | LED_K | LED_M, // X
+ LED_H | LED_J | LED_L, // Y
+ LED_A1 | LED_A2 | LED_D1 | LED_D2 | LED_J | LED_M, // Z
0, // {
0, // |
0, // }
@@ -494,25 +484,9 @@ WRITE8_MEMBER(twinkle_state::twinkle_io_w)
case 0x1f:
case 0x27:
case 0x2f:
- if (data != 0xff)
- {
- osd_printf_warning("unknown io %02x = %02x\n", m_io_offset, data);
- }
- break;
-
case 0x37:
- output().set_value("1p", (~data >> 0) & 1);
- output().set_value("2p", (~data >> 1) & 1);
- output().set_value("vefx", (~data >> 2) & 1);
- output().set_value("effect", (~data >> 3) & 1);
- output().set_value("credit", (~data >> 4) & 1);
-
- if ((data & 0xe0) != 0xe0)
- {
- osd_printf_warning("unknown io %02x = %02x\n", m_io_offset, data);
- }
- break;
+ /* led */
case 0x3f:
case 0x47:
case 0x4f:
@@ -522,7 +496,7 @@ WRITE8_MEMBER(twinkle_state::twinkle_io_w)
case 0x6f:
case 0x77:
case 0x7f:
- output().set_indexed_value( "led", ( m_io_offset - 0x3f ) / 8, asciicharset[ ( data ^ 0xff ) & 0x7f ] );
+ output().set_indexed_value( "led", ( m_io_offset - 7 ) / 8, asciicharset[ ( data ^ 0xff ) & 0x7f ] );
break;
case 0x87:
@@ -543,7 +517,7 @@ WRITE8_MEMBER(twinkle_state::twinkle_io_w)
if( ( data & 0xf8 ) != 0xf8 )
{
- osd_printf_warning("unknown io %02x = %02x\n", m_io_offset, data);
+ printf("%02x = %02x\n", m_io_offset, data );
}
break;
@@ -594,7 +568,10 @@ READ8_MEMBER(twinkle_state::twinkle_io_r)
break;
default:
- osd_printf_warning("unknown io 0x%02x\n", m_io_offset);
+ if( m_last_io_offset != m_io_offset )
+ {
+ m_last_io_offset = m_io_offset;
+ }
break;
}
break;
@@ -618,7 +595,7 @@ WRITE16_MEMBER(twinkle_state::twinkle_output_w)
/* data */
break;
case 0x08:
- // overlay enable?
+ /* ?? */
break;
case 0x10:
{
@@ -665,45 +642,6 @@ WRITE16_MEMBER(twinkle_state::twinkle_output_w)
}
}
-WRITE16_MEMBER(twinkle_state::led_w)
-{
- output().set_indexed_value("main_led", 0, (~data >> 0) & 1);
- output().set_indexed_value("main_led", 1, (~data >> 1) & 1);
- output().set_indexed_value("main_led", 2, (~data >> 2) & 1);
- output().set_indexed_value("main_led", 3, (~data >> 3) & 1);
- output().set_indexed_value("main_led", 4, (~data >> 4) & 1);
- output().set_indexed_value("main_led", 5, (~data >> 5) & 1);
- output().set_indexed_value("main_led", 6, (~data >> 6) & 1);
- output().set_indexed_value("main_led", 7, (~data >> 7) & 1);
- output().set_indexed_value("main_led", 8, (~data >> 8) & 1);
-
- if ((data & 0xfe00) != 0xfe00)
- {
- osd_printf_warning("led_w unknown %04x\n", data);
- }
-}
-
-WRITE16_MEMBER(twinkle_state::key_led_w)
-{
- // words are written using a byte write
- output().set_indexed_value("key1-", 1, (data >> 0) & 1);
- output().set_indexed_value("key1-", 2, (data >> 1) & 1);
- output().set_indexed_value("key1-", 3, (data >> 2) & 1);
- output().set_indexed_value("key1-", 4, (data >> 3) & 1);
- output().set_indexed_value("key1-", 5, (data >> 4) & 1);
- output().set_indexed_value("key1-", 6, (data >> 5) & 1);
- output().set_indexed_value("key1-", 7, (data >> 6) & 1);
- output().set_indexed_value("key2-", 1, (data >> 7) & 1);
- output().set_indexed_value("key2-", 2, (data >> 8) & 1);
- output().set_indexed_value("key2-", 3, (data >> 9) & 1);
- output().set_indexed_value("key2-", 4, (data >> 10) & 1);
- output().set_indexed_value("key2-", 5, (data >> 11) & 1);
- output().set_indexed_value("key2-", 6, (data >> 12) & 1);
- output().set_indexed_value("key2-", 7, (data >> 13) & 1);
- output().set_value("unknown3", (data >> 14) & 1);
- output().set_value("unknown4", (data >> 15) & 1);
-}
-
WRITE16_MEMBER(twinkle_state::serial_w)
{
int _do = ( data >> 4 ) & 1;
@@ -765,9 +703,9 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 32, twinkle_state )
AM_RANGE(0x1f218000, 0x1f218003) AM_DEVWRITE8("watchdog", watchdog_timer_device, reset_w, 0x000000ff) /* LTC1232 */
AM_RANGE(0x1f220000, 0x1f220003) AM_WRITE8(twinkle_io_w, 0x00ff00ff)
AM_RANGE(0x1f220004, 0x1f220007) AM_READ8(twinkle_io_r, 0x00ff00ff)
- AM_RANGE(0x1f230000, 0x1f230003) AM_WRITE16(led_w, 0x0000ffff)
+ AM_RANGE(0x1f230000, 0x1f230003) AM_WRITENOP
AM_RANGE(0x1f240000, 0x1f240003) AM_READ_PORT("IN6")
- AM_RANGE(0x1f250000, 0x1f250003) AM_WRITE16(key_led_w, 0x0000ffff)
+ AM_RANGE(0x1f250000, 0x1f250003) AM_WRITENOP
AM_RANGE(0x1f260000, 0x1f260003) AM_WRITE16(serial_w, 0x0000ffff)
AM_RANGE(0x1f270000, 0x1f270003) AM_WRITE_PORT("OUTSEC")
AM_RANGE(0x1f280000, 0x1f280003) AM_READ_PORT("INSEC")
@@ -826,8 +764,7 @@ WRITE16_MEMBER(twinkle_state::spu_ata_dma_low_w)
WRITE16_MEMBER(twinkle_state::spu_ata_dma_high_w)
{
- m_spu_ata_dma = (m_spu_ata_dma & 0xffff) | ((uint32_t)data << 16);
- //printf("DMA now %x\n", m_spu_ata_dma);
+ m_spu_ata_dma = (m_spu_ata_dma & 0xffff) | (data << 16);
}
WRITE_LINE_MEMBER(twinkle_state::spu_ata_dmarq)
@@ -844,10 +781,17 @@ WRITE_LINE_MEMBER(twinkle_state::spu_ata_dmarq)
{
uint16_t data = m_ata->read_dma();
//printf("spu_ata_dmarq %08x %04x\n", m_spu_ata_dma * 2, data);
- m_waveram[m_wave_bank+m_spu_ata_dma] = data; //(data >> 8) | (data << 8);
- m_spu_ata_dma++;
+ //waveram[m_spu_ata_dma++] = (data >> 8) | (data << 8);
// bp 4a0e ;bmiidx4 checksum
// bp 4d62 ;bmiidx4 dma
+
+ // $$$HACK - game DMAs nothing useful to 0x400000 but all sound plays are 0x400000 or above
+ // so limit sound RAM to 4MB (there's 6 MB on the board) and let the 5c400's address masking
+ // work for us until we figure out what's actually going on.
+ if (m_spu_ata_dma < 0x200000)
+ {
+ m_waveram[m_spu_ata_dma++] = data;
+ }
}
m_ata->write_dmack(CLEAR_LINE);
@@ -855,26 +799,14 @@ WRITE_LINE_MEMBER(twinkle_state::spu_ata_dmarq)
}
}
-WRITE16_MEMBER(twinkle_state::spu_wavebank_w)
-{
- //printf("%x to wavebank_w, mask %04x\n", data, mem_mask);
-
- // banks are fairly clearly 8MB, so there's 3 of them in the 24 MB of RAM.
- // the games load up the full 24MB of RAM 8 MB at a time, first to bank 1,
- // then to bank 2, and finally to bank 3.
- //
- // neither the 68k nor DMA access wave RAM when the bank is 0.
- m_wave_bank = data * (4*1024*1024);
-}
-
READ16_MEMBER(twinkle_state::twinkle_waveram_r)
{
- return m_waveram[offset+m_wave_bank];
+ return m_waveram[offset];
}
WRITE16_MEMBER(twinkle_state::twinkle_waveram_w)
{
- COMBINE_DATA(&m_waveram[offset+m_wave_bank]);
+ COMBINE_DATA(&m_waveram[offset]);
}
READ16_MEMBER(twinkle_state::shared_68k_r)
@@ -893,38 +825,27 @@ WRITE16_MEMBER(twinkle_state::shared_68k_w)
m_spu_shared[offset] = data & 0xff;
}
-WRITE16_MEMBER(twinkle_state::spu_led_w)
+READ16_MEMBER(twinkle_state::unk_68k_r)
{
- // upper 8 bits are occassionally written as all zeros
- output().set_indexed_value("spu_led", 0, (~data >> 0) & 1);
- output().set_indexed_value("spu_led", 1, (~data >> 1) & 1);
- output().set_indexed_value("spu_led", 2, (~data >> 2) & 1);
- output().set_indexed_value("spu_led", 3, (~data >> 3) & 1);
- output().set_indexed_value("spu_led", 4, (~data >> 4) & 1);
- output().set_indexed_value("spu_led", 5, (~data >> 5) & 1);
- output().set_indexed_value("spu_led", 6, (~data >> 6) & 1);
- output().set_indexed_value("spu_led", 7, (~data >> 7) & 1);
+ return 0xffff; // must return 0xff for 68000 POST to complete properly
}
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 16, twinkle_state )
AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x100000, 0x13ffff) AM_RAM
- AM_RANGE(0x200000, 0x200001) AM_READ_PORT("SPU_DSW")
- AM_RANGE(0x220000, 0x220001) AM_WRITE(spu_led_w)
+ AM_RANGE(0x200000, 0x200001) AM_READ(unk_68k_r)
+ // 220000 = LEDs?
AM_RANGE(0x230000, 0x230003) AM_WRITE(twinkle_spu_ctrl_w)
- AM_RANGE(0x240000, 0x240003) AM_WRITE(spu_ata_dma_low_w) AM_READNOP
- AM_RANGE(0x250000, 0x250003) AM_WRITE(spu_ata_dma_high_w) AM_READNOP
- AM_RANGE(0x260000, 0x260001) AM_WRITE(spu_wavebank_w) AM_READNOP
+ AM_RANGE(0x240000, 0x240003) AM_WRITE(spu_ata_dma_low_w)
+ AM_RANGE(0x250000, 0x250003) AM_WRITE(spu_ata_dma_high_w)
+ // 260000 = ???
AM_RANGE(0x280000, 0x280fff) AM_READWRITE(shared_68k_r, shared_68k_w)
AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE("ata", ata_interface_device, read_cs0, write_cs0)
// 34000E = ???
AM_RANGE(0x34000e, 0x34000f) AM_WRITENOP
AM_RANGE(0x400000, 0x400fff) AM_DEVREADWRITE("rfsnd", rf5c400_device, rf5c400_r, rf5c400_w)
- AM_RANGE(0x800000, 0xffffff) AM_READWRITE(twinkle_waveram_r, twinkle_waveram_w)
-ADDRESS_MAP_END
-
-static ADDRESS_MAP_START(rf5c400_map, 0, 16, twinkle_state)
- AM_RANGE(0x0000000, 0x1ffffff) AM_RAM AM_SHARE("rfsnd")
+ AM_RANGE(0x800000, 0xbfffff) AM_READWRITE(twinkle_waveram_r, twinkle_waveram_w )
+ AM_RANGE(0xfe0000, 0xffffff) AM_RAM // ...and the RAM test checks this last 128k (mirror of the work RAM at 0x100000?)
ADDRESS_MAP_END
/* SCSI */
@@ -1072,8 +993,7 @@ static MACHINE_CONFIG_START( twinkle )
MCFG_SOUND_ROUTE( 0, "speakerleft", 0.75 )
MCFG_SOUND_ROUTE( 1, "speakerright", 0.75 )
- MCFG_RF5C400_ADD("rfsnd", XTAL_33_8688MHz/2);
- MCFG_DEVICE_ADDRESS_MAP(0, rf5c400_map)
+ MCFG_RF5C400_ADD("rfsnd", 32000000/2)
MCFG_SOUND_ROUTE(0, "speakerleft", 1.0)
MCFG_SOUND_ROUTE(1, "speakerright", 1.0)
MACHINE_CONFIG_END
@@ -1135,16 +1055,6 @@ static INPUT_PORTS_START( twinkle )
PORT_START("OUTSEC")
PORT_START("INSEC")
-
- PORT_START("SPU_DSW")
- PORT_DIPUNKNOWN_DIPLOC( 0x01, IP_ACTIVE_LOW, "SPU DSW:1" )
- PORT_DIPUNKNOWN_DIPLOC( 0x02, IP_ACTIVE_LOW, "SPU DSW:2" )
- PORT_DIPUNKNOWN_DIPLOC( 0x04, IP_ACTIVE_LOW, "SPU DSW:3" )
- PORT_DIPUNKNOWN_DIPLOC( 0x08, IP_ACTIVE_LOW, "SPU DSW:4" )
- PORT_DIPUNKNOWN_DIPLOC( 0x10, IP_ACTIVE_LOW, "SPU DSW:5" )
- PORT_DIPUNKNOWN_DIPLOC( 0x20, IP_ACTIVE_LOW, "SPU DSW:6" )
- PORT_DIPUNKNOWN_DIPLOC( 0x40, IP_ACTIVE_LOW, "SPU DSW:7" )
- PORT_DIPUNKNOWN_DIPLOC( 0x80, IP_ACTIVE_LOW, "SPU DSW:8" )
INPUT_PORTS_END
static INPUT_PORTS_START( twinklex )
@@ -1175,7 +1085,9 @@ INPUT_PORTS_END
ROM_LOAD( "863a03.7b", 0x000000, 0x080000, CRC(81498f73) SHA1(3599b40a5872eab3a00d345287635355fcb25a71) )\
\
ROM_REGION32_LE( 0x080000, "audiocpu", 0 )\
- ROM_LOAD16_WORD_SWAP( "863a05.2x", 0x000000, 0x080000, CRC(6f42a09e) SHA1(cab5209f90f47b9ee6e721479913ad74e3ba84b1) )
+ ROM_LOAD16_WORD_SWAP( "863a05.2x", 0x000000, 0x080000, CRC(6f42a09e) SHA1(cab5209f90f47b9ee6e721479913ad74e3ba84b1) )\
+\
+ ROM_REGION16_LE(0x400000, "rfsnd", ROMREGION_ERASE00)
ROM_START( gq863 )
TWINKLE_BIOS
@@ -1217,7 +1129,7 @@ ROM_START( bmiidx2 )
TWINKLE_BIOS
ROM_REGION( 0x100, "security", 0 )
- ROM_LOAD( "985a02", 0x000000, 0x000100, BAD_DUMP CRC(a290f534) SHA1(e7089f5f9c4c90d6c082539f3d839ac7798a27e4) )
+ ROM_LOAD( "985a02", 0x000000, 0x000100, BAD_DUMP CRC(a35143a9) SHA1(1c0feeab60d9dc50dc4b9a2f3dac73ca619e74b0) )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":cdrom" )
DISK_IMAGE_READONLY( "gc985a01", 0, SHA1(0b783f11317f64552ebf3323459139529e7f315f) )
@@ -1233,7 +1145,7 @@ ROM_START( bmiidx3 )
TWINKLE_BIOS
ROM_REGION( 0x100, "security", 0 )
- ROM_LOAD( "992a02", 0x000000, 0x000100, BAD_DUMP CRC(4b35d2ad) SHA1(4a9015e7f11d1aab9f79f070af9906e71eb4eb6d) )
+ ROM_LOAD( "992a02", 0x000000, 0x000100, BAD_DUMP CRC(51f24913) SHA1(574b555e3d0c234011198d218d7ae5e95091acb1) )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":cdrom" )
DISK_IMAGE_READONLY( "gc992-jac01", 0, SHA1(c02d6e58439be678ec0d7171eae2dfd53a21acc7) )
@@ -1249,7 +1161,7 @@ ROM_START( bmiidx3a )
TWINKLE_BIOS
ROM_REGION( 0x100, "security", 0 )
- ROM_LOAD( "992a02", 0x000000, 0x000100, BAD_DUMP CRC(4b35d2ad) SHA1(4a9015e7f11d1aab9f79f070af9906e71eb4eb6d) )
+ ROM_LOAD( "992a02", 0x000000, 0x000100, BAD_DUMP CRC(51f24913) SHA1(574b555e3d0c234011198d218d7ae5e95091acb1) )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":cdrom" )
DISK_IMAGE_READONLY( "gc992-jaa01", 0, BAD_DUMP SHA1(7e5389735dff379bb286ba3744edf59b7dfcc74b) )
@@ -1265,7 +1177,7 @@ ROM_START( bmiidx4 )
TWINKLE_BIOS
ROM_REGION( 0x100, "security", 0 )
- ROM_LOAD( "a03", 0x000000, 0x000100, CRC(056816a5) SHA1(125d24d1c22b8d3da6fe53f519c8d83eba627e9f) )
+ ROM_LOAD( "a03", 0x000000, 0x000100, BAD_DUMP CRC(8860cfb6) SHA1(85a5b27f24d4baa7960e692b91c0cf3dc5388e72) )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":cdrom" )
DISK_IMAGE_READONLY( "a03jaa01", 0, SHA1(f54fc778c2187ccd950402a159babef956b71492) )
@@ -1281,7 +1193,7 @@ ROM_START( bmiidx5 )
TWINKLE_BIOS
ROM_REGION( 0x100, "security", 0 )
- ROM_LOAD( "a17", 0x000000, 0x000100, CRC(8eef340e) SHA1(631521baf9ec5db111e62cf0439ae31400447a57) )
+ ROM_LOAD( "a17", 0x000000, 0x000100, BAD_DUMP CRC(9428afb0) SHA1(ba907d3361256b022583d6a42fe223e90590e3c6) )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":cdrom" )
DISK_IMAGE_READONLY( "a17jaa01", 0, SHA1(5ac46973b42b2c66ae63297d1a7fd69b33ef4d1d) )
@@ -1297,7 +1209,7 @@ ROM_START( bmiidx6 )
TWINKLE_BIOS
ROM_REGION( 0x100, "security", 0 )
- ROM_LOAD( "b4u", 0x000000, 0x000100, BAD_DUMP CRC(1076cd8d) SHA1(e4bdadbf675221cc0170e5d4a37fe1f439c2e72b) )
+ ROM_LOAD( "b4u", 0x000000, 0x000100, BAD_DUMP CRC(0ab15633) SHA1(df004ff41f35b16089f69808ccf53a5e5cc13ac3) )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":cdrom" )
DISK_IMAGE_READONLY( "b4ujab01", 0, SHA1(aaae77f473c4a44ce6838da3ef6dab27e4afa0e4) )
@@ -1313,7 +1225,7 @@ ROM_START( bmiidx6a )
TWINKLE_BIOS
ROM_REGION( 0x100, "security", 0 )
- ROM_LOAD( "b4u", 0x000000, 0x000100, BAD_DUMP CRC(1076cd8d) SHA1(e4bdadbf675221cc0170e5d4a37fe1f439c2e72b) )
+ ROM_LOAD( "b4u", 0x000000, 0x000100, BAD_DUMP CRC(0ab15633) SHA1(df004ff41f35b16089f69808ccf53a5e5cc13ac3) )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":cdrom" )
DISK_IMAGE_READONLY( "b4ujaa01", 0, BAD_DUMP SHA1(d8f5d56b8728bea761dc4cdbc04851094d276bd6) )
@@ -1329,7 +1241,7 @@ ROM_START( bmiidx7 )
TWINKLE_BIOS
ROM_REGION( 0x100, "security", 0 )
- ROM_LOAD( "b44", 0x000000, 0x000100, BAD_DUMP CRC(4168dcdf) SHA1(66ef68783a69b04af6bc85cef90a36085dfee612) )
+ ROM_LOAD( "b44", 0x000000, 0x000100, BAD_DUMP CRC(5baf4761) SHA1(aa7e07eb2cada03b85bdf11ac6a3de65f4253eef) )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":cdrom" )
DISK_IMAGE_READONLY( "b44jaa01", 0, SHA1(57fb0312d8102e959658e48a97e46aa16e592b60) )
@@ -1345,7 +1257,7 @@ ROM_START( bmiidx8 )
TWINKLE_BIOS
ROM_REGION( 0x100, "security", 0 )
- ROM_LOAD( "c44", 0x000000, 0x000100, BAD_DUMP CRC(198de0a2) SHA1(9526e98aaeb7ab3198e7a63715c4fc2d7c9d6021) )
+ ROM_LOAD( "c44", 0x000000, 0x000100, BAD_DUMP CRC(04c22349) SHA1(d1cb78911cb1ca660d393a81ed3ed07b24c51525) )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":cdrom" )
DISK_IMAGE_READONLY( "c44jaa01", 0, BAD_DUMP SHA1(8b544c81bc56b19e4aa1649e68824811d6d51ce5) )
@@ -1421,20 +1333,20 @@ ROM_START( bmiidxc2 )
DISK_IMAGE_READONLY( "983hdda01", 0, SHA1(bcbbf55acf8bebc5773ffc5769420a0129f4da57) )
ROM_END
-GAMEL( 1999, gq863, 0, twinkle, twinkle, twinkle_state, 0, ROT0, "Konami", "Twinkle System", MACHINE_IS_BIOS_ROOT, layout_bmiidx )
-
-GAMEL( 1999, bmiidx, gq863, twinklex, twinklex, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX (863 JAB)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING, layout_bmiidx )
-GAMEL( 1999, bmiidxa, bmiidx, twinklex, twinklex, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX (863 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING, layout_bmiidx )
-GAMEL( 1999, bmiidxc, gq863, twinklex, twinklex, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX with DDR 2nd Club Version (896 JAB)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING, layout_bmiidx )
-GAMEL( 1999, bmiidxca, bmiidxc, twinklex, twinklex, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX with DDR 2nd Club Version (896 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING, layout_bmiidx )
-GAMEL( 1999, bmiidxs, gq863, twinklex, twinklex, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX Substream (983 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING, layout_bmiidx )
-GAMEL( 1999, bmiidxc2, gq863, twinklex, twinklex, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX Substream with DDR 2nd Club Version 2 (984 A01 BM)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS, layout_bmiidx )
-GAMEL( 1999, bmiidx2, gq863, twinklei, twinklei, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX 2nd style (GC985 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING, layout_bmiidx )
-GAMEL( 2000, bmiidx3, gq863, twinklei, twinklei, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX 3rd style (GC992 JAC)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING, layout_bmiidx )
-GAMEL( 2000, bmiidx3a, bmiidx3, twinklei, twinklei, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX 3rd style (GC992 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING, layout_bmiidx )
-GAMEL( 2000, bmiidx4, gq863, twinklei, twinklei, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX 4th style (GCA03 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS, layout_bmiidx )
-GAMEL( 2001, bmiidx5, gq863, twinklei, twinklei, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX 5th style (GCA17 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING, layout_bmiidx )
-GAMEL( 2001, bmiidx6, gq863, twinklei, twinklei, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX 6th style (GCB4U JAB)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS, layout_bmiidx )
-GAMEL( 2001, bmiidx6a, bmiidx6, twinklei, twinklei, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX 6th style (GCB4U JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS, layout_bmiidx )
-GAMEL( 2002, bmiidx7, gq863, twinklei, twinklei, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX 7th style (GCB44 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS, layout_bmiidx )
-GAMEL( 2002, bmiidx8, gq863, twinklei, twinklei, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX 8th style (GCC44 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS, layout_bmiidx )
+GAME( 1999, gq863, 0, twinkle, twinkle, twinkle_state, 0, ROT0, "Konami", "Twinkle System", MACHINE_IS_BIOS_ROOT )
+
+GAME( 1999, bmiidx, gq863, twinklex, twinklex, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX (863 JAB)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
+GAME( 1999, bmiidxa, bmiidx, twinklex, twinklex, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX (863 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
+GAME( 1999, bmiidxc, gq863, twinklex, twinklex, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX with DDR 2nd Club Version (896 JAB)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
+GAME( 1999, bmiidxca, bmiidxc, twinklex, twinklex, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX with DDR 2nd Club Version (896 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
+GAME( 1999, bmiidxs, gq863, twinklex, twinklex, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX Substream (983 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
+GAME( 1999, bmiidxc2, gq863, twinklex, twinklex, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX Substream with DDR 2nd Club Version 2 (984 A01 BM)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
+GAME( 1999, bmiidx2, gq863, twinklei, twinklei, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX 2nd style (GC985 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
+GAME( 2000, bmiidx3, gq863, twinklei, twinklei, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX 3rd style (GC992 JAC)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
+GAME( 2000, bmiidx3a, bmiidx3, twinklei, twinklei, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX 3rd style (GC992 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
+GAME( 2000, bmiidx4, gq863, twinklei, twinklei, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX 4th style (GCA03 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
+GAME( 2001, bmiidx5, gq863, twinklei, twinklei, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX 5th style (GCA17 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
+GAME( 2001, bmiidx6, gq863, twinklei, twinklei, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX 6th style (GCB4U JAB)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
+GAME( 2001, bmiidx6a, bmiidx6, twinklei, twinklei, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX 6th style (GCB4U JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
+GAME( 2002, bmiidx7, gq863, twinklei, twinklei, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX 7th style (GCB44 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
+GAME( 2002, bmiidx8, gq863, twinklei, twinklei, twinkle_state, 0, ROT0, "Konami", "beatmania IIDX 8th style (GCC44 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )