trunk/src/mame/drivers/twinkle.c
r32688 | r32689 | |
6 | 6 | |
7 | 7 | TODO: |
8 | 8 | |
9 | | sound (IDE DMA, finish comms) |
10 | | dvd |
11 | | hard drive |
| 9 | dvd check for bmiidx, bmiidxa, bmiidxc & bmiidxca |
| 10 | finish sound board emulation and remove response hle |
| 11 | emulate dvd player and video mixing |
12 | 12 | 16seg led font |
13 | 13 | |
14 | 14 | |
15 | | |
16 | 15 | Konami Twinkle Hardware Overview |
17 | 16 | Konami 1999-2002 |
18 | 17 | |
r32688 | r32689 | |
232 | 231 | #include "video/psx.h" |
233 | 232 | #include "bus/scsi/scsi.h" |
234 | 233 | #include "bus/scsi/scsicd.h" |
| 234 | #include "bus/rs232/xvd701.h" |
235 | 235 | #include "machine/am53cf96.h" |
| 236 | #include "machine/ataintf.h" |
| 237 | #include "machine/fdc37c665gt.h" |
| 238 | #include "machine/i2cmem.h" |
236 | 239 | #include "machine/rtc65271.h" |
237 | | #include "machine/i2cmem.h" |
238 | 240 | #include "machine/x76f041.h" |
239 | | #include "machine/ataintf.h" |
240 | 241 | #include "sound/spu.h" |
241 | 242 | #include "sound/cdda.h" |
242 | 243 | #include "sound/rf5c400.h" |
r32688 | r32689 | |
247 | 248 | twinkle_state(const machine_config &mconfig, device_type type, const char *tag) |
248 | 249 | : driver_device(mconfig, type, tag), |
249 | 250 | m_am53cf96(*this, "am53cf96"), |
| 251 | m_ata(*this, "ata"), |
| 252 | m_rfsnd(*this, "rfsnd"), |
| 253 | m_spu_ata_dma(0), |
250 | 254 | m_maincpu(*this, "maincpu"), |
251 | 255 | m_audiocpu(*this, "audiocpu") |
252 | 256 | { |
| 257 | m_spu_hle[0x200] = 0; |
| 258 | m_spu_hle[0x202] = 0; |
253 | 259 | } |
254 | 260 | |
255 | 261 | required_device<am53cf96_device> m_am53cf96; |
| 262 | required_device<ata_interface_device> m_ata; |
| 263 | required_memory_region m_rfsnd; |
256 | 264 | |
257 | 265 | UINT16 m_spu_ctrl; // SPU board control register |
258 | 266 | UINT8 m_spu_shared[0x400]; // SPU/PSX shared dual-ported RAM |
259 | | UINT32 m_unknown; |
| 267 | UINT8 m_spu_hle[0x400]; |
| 268 | UINT32 m_spu_ata_dma; |
| 269 | int m_spu_ata_dmarq; |
260 | 270 | |
261 | 271 | int m_io_offset; |
262 | 272 | int m_output_last[ 0x100 ]; |
r32688 | r32689 | |
269 | 279 | DECLARE_WRITE8_MEMBER(shared_psx_w); |
270 | 280 | DECLARE_READ8_MEMBER(shared_psx_r); |
271 | 281 | DECLARE_WRITE16_MEMBER(twinkle_spu_ctrl_w); |
| 282 | DECLARE_WRITE16_MEMBER(spu_ata_dma_low_w); |
| 283 | DECLARE_WRITE16_MEMBER(spu_ata_dma_high_w); |
272 | 284 | DECLARE_READ16_MEMBER(twinkle_waveram_r); |
273 | 285 | DECLARE_WRITE16_MEMBER(twinkle_waveram_w); |
274 | 286 | DECLARE_READ16_MEMBER(shared_68k_r); |
275 | 287 | DECLARE_WRITE16_MEMBER(shared_68k_w); |
276 | | DECLARE_WRITE_LINE_MEMBER(ide_interrupt); |
| 288 | DECLARE_WRITE_LINE_MEMBER(spu_ata_irq); |
| 289 | DECLARE_WRITE_LINE_MEMBER(spu_ata_dmarq); |
277 | 290 | required_device<cpu_device> m_maincpu; |
278 | 291 | required_device<cpu_device> m_audiocpu; |
279 | 292 | |
r32688 | r32689 | |
495 | 508 | break; |
496 | 509 | |
497 | 510 | case 0x8f: |
498 | | output_set_value( "neonlamp", ~data & 1 ); |
| 511 | output_set_value( "neonlamp", ( ~data >> 0 ) & 1 ); |
| 512 | output_set_value( "unknown1", ( ~data >> 1 ) & 1 ); |
| 513 | output_set_value( "unknown2", ( ~data >> 2 ) & 1 ); |
499 | 514 | |
500 | | if( ( data & 0xfe ) != 0xfe ) |
| 515 | if( ( data & 0xf8 ) != 0xf8 ) |
501 | 516 | { |
502 | 517 | printf("%02x = %02x\n", m_io_offset, data ); |
503 | 518 | } |
r32688 | r32689 | |
656 | 671 | |
657 | 672 | WRITE8_MEMBER(twinkle_state::shared_psx_w) |
658 | 673 | { |
| 674 | //printf("shared_psx_w: %04x, %04x, %04x\n", offset, data, mem_mask); |
| 675 | |
659 | 676 | m_spu_shared[offset] = data; |
660 | | // printf("shared_psx_w: %x to %x, mask %x (PC=%x)\n", data, offset, mem_mask, space.device().safe_pc()); |
| 677 | |
| 678 | // HLE sound board |
| 679 | m_spu_hle[offset] = data; |
| 680 | |
| 681 | if (offset == 0x03fe && data == 0xff) |
| 682 | { |
| 683 | //printf("spu command %02x %02x\n", m_spu_hle[1], m_spu_hle[3]); |
| 684 | |
| 685 | for (int i = 0x200; i < 0x300; i++) m_spu_hle[i] = 0xea; |
| 686 | |
| 687 | switch (m_spu_hle[1]) |
| 688 | { |
| 689 | case 0x91: // hdd sum 1 |
| 690 | m_spu_hle[0x200] = 0; // ? |
| 691 | m_spu_hle[0x202] = 0; // ? |
| 692 | break; |
| 693 | |
| 694 | case 0x9a: // hdd sum 2 |
| 695 | m_spu_hle[0x200] = 0; // ? |
| 696 | m_spu_hle[0x202] = 0; // ? |
| 697 | m_spu_hle[0x203] = 1; // Must be 1 to pass test |
| 698 | break; |
| 699 | |
| 700 | case 0xa1: // version |
| 701 | m_spu_hle[0x200] = 0; // ? |
| 702 | m_spu_hle[0x202] = 0; // ? |
| 703 | |
| 704 | if (strcmp(machine().system().name, "bmiidx") == 0 || |
| 705 | strcmp(machine().system().name, "bmiidxa") == 0 || |
| 706 | strcmp(machine().system().name, "bmiidxc") == 0 || |
| 707 | strcmp(machine().system().name, "bmiidxca") == 0) |
| 708 | { |
| 709 | strcpy((char *)&m_spu_hle[0x204], "GQ863JA_A"); |
| 710 | } |
| 711 | else if (strcmp(machine().system().name, "bmiidxs") == 0) |
| 712 | { |
| 713 | strcpy((char *)&m_spu_hle[0x204], "GC983JA_A"); |
| 714 | } |
| 715 | else if (strcmp(machine().system().name, "bmiidxc2") == 0) |
| 716 | { |
| 717 | strcpy((char *)&m_spu_hle[0x204], "GC983JA_R"); |
| 718 | } |
| 719 | else if (strcmp(machine().system().name, "bmiidx2") == 0) |
| 720 | { |
| 721 | strcpy((char *)&m_spu_hle[0x204], "GC985JA_A"); |
| 722 | } |
| 723 | else if (strcmp(machine().system().name, "bmiidx3") == 0 || |
| 724 | strcmp(machine().system().name, "bmiidx3a") == 0) |
| 725 | { |
| 726 | strcpy((char *)&m_spu_hle[0x204], "GC992JA_A"); |
| 727 | } |
| 728 | else if (strcmp(machine().system().name, "bmiidx4") == 0) |
| 729 | { |
| 730 | strcpy((char *)&m_spu_hle[0x204], "GCA03JA_A"); |
| 731 | } |
| 732 | else if (strcmp(machine().system().name, "bmiidx5") == 0) |
| 733 | { |
| 734 | strcpy((char *)&m_spu_hle[0x204], "GCA17JA_A"); |
| 735 | } |
| 736 | else if (strcmp(machine().system().name, "bmiidx6") == 0 || |
| 737 | strcmp(machine().system().name, "bmiidx6a") == 0) |
| 738 | { |
| 739 | strcpy((char *)&m_spu_hle[0x204], "GCB4UJA_A"); |
| 740 | } |
| 741 | else if (strcmp(machine().system().name, "bmiidx7") == 0) |
| 742 | { |
| 743 | strcpy((char *)&m_spu_hle[0x204], "GCB44JA_A"); |
| 744 | } |
| 745 | else if (strcmp(machine().system().name, "bmiidx8") == 0) |
| 746 | { |
| 747 | strcpy((char *)&m_spu_hle[0x204], "GCC44JA_A"); |
| 748 | } |
| 749 | break; |
| 750 | |
| 751 | case 0x30: // play sound [3]=sound code |
| 752 | case 0x51: // sound off |
| 753 | case 0x25: // spu rom error ([3]==0x0f) |
| 754 | case 0x26: // spu rom error ([3]==0x0f) |
| 755 | case 0x08: // spu rom error |
| 756 | case 0x40: // spu rom error ([3]==0x01 coin sound?) |
| 757 | case 0x2f: // spu rom error |
| 758 | case 0x52: // spu rom error |
| 759 | case 0x04: // spu rom error ([3]==?) |
| 760 | m_spu_hle[0x200] = 0; |
| 761 | m_spu_hle[0x202] = 0; |
| 762 | break; |
| 763 | } |
| 764 | } |
661 | 765 | } |
662 | 766 | |
663 | 767 | READ8_MEMBER(twinkle_state::shared_psx_r) |
664 | 768 | { |
665 | | UINT32 result = m_spu_shared[offset]; |
| 769 | //UINT32 result = m_spu_shared[offset]; |
| 770 | UINT32 result = m_spu_hle[offset]; |
666 | 771 | |
667 | | // printf("shared_psx_r: @ %x, mask %x (PC=%x)\n", offset, mem_mask, result, space.device().safe_pc()); |
| 772 | //printf("shared_psx_r: %04x, %04x, %04x\n", offset, result, mem_mask); |
668 | 773 | |
669 | | result = 0; // HACK to prevent the games from freezing while we sort out the rest of the 68k's boot sequence |
670 | | |
671 | 774 | return result; |
672 | 775 | } |
673 | 776 | |
r32688 | r32689 | |
675 | 778 | AM_RANGE(0x1f000000, 0x1f0007ff) AM_READWRITE8(shared_psx_r, shared_psx_w, 0x00ff00ff) |
676 | 779 | AM_RANGE(0x1f200000, 0x1f20001f) AM_DEVREADWRITE8("am53cf96", am53cf96_device, read, write, 0x00ff00ff) |
677 | 780 | AM_RANGE(0x1f20a01c, 0x1f20a01f) AM_WRITENOP /* scsi? */ |
678 | | AM_RANGE(0x1f210400, 0x1f2107ff) AM_READNOP |
| 781 | AM_RANGE(0x1f210000, 0x1f2107ff) AM_DEVREADWRITE8("fdc37c665gt", fdc37c665gt_device, read, write, 0x00ff00ff) |
679 | 782 | AM_RANGE(0x1f218000, 0x1f218003) AM_WRITE8(watchdog_reset_w, 0x000000ff) /* LTC1232 */ |
680 | 783 | AM_RANGE(0x1f220000, 0x1f220003) AM_WRITE8(twinkle_io_w, 0x00ff00ff) |
681 | 784 | AM_RANGE(0x1f220004, 0x1f220007) AM_READ8(twinkle_io_r, 0x00ff00ff) |
r32688 | r32689 | |
692 | 795 | |
693 | 796 | /* SPU board */ |
694 | 797 | |
695 | | WRITE_LINE_MEMBER(twinkle_state::ide_interrupt) |
| 798 | WRITE_LINE_MEMBER(twinkle_state::spu_ata_irq) |
696 | 799 | { |
697 | 800 | if ((state) && (m_spu_ctrl & 0x0400)) |
698 | 801 | { |
r32688 | r32689 | |
715 | 818 | { |
716 | 819 | if ((!(data & 0x0080)) && (m_spu_ctrl & 0x0080)) |
717 | 820 | { |
718 | | space.device().execute().set_input_line(M68K_IRQ_1, CLEAR_LINE); |
| 821 | m_audiocpu->set_input_line(M68K_IRQ_1, CLEAR_LINE); |
719 | 822 | } |
720 | 823 | else if ((!(data & 0x0100)) && (m_spu_ctrl & 0x0100)) |
721 | 824 | { |
722 | | space.device().execute().set_input_line(M68K_IRQ_2, CLEAR_LINE); |
| 825 | m_audiocpu->set_input_line(M68K_IRQ_2, CLEAR_LINE); |
723 | 826 | } |
724 | 827 | else if ((!(data & 0x0200)) && (m_spu_ctrl & 0x0200)) |
725 | 828 | { |
726 | | space.device().execute().set_input_line(M68K_IRQ_4, CLEAR_LINE); |
| 829 | m_audiocpu->set_input_line(M68K_IRQ_4, CLEAR_LINE); |
727 | 830 | } |
728 | 831 | else if ((!(data & 0x0400)) && (m_spu_ctrl & 0x0400)) |
729 | 832 | { |
730 | | space.device().execute().set_input_line(M68K_IRQ_6, CLEAR_LINE); |
| 833 | m_audiocpu->set_input_line(M68K_IRQ_6, CLEAR_LINE); |
731 | 834 | } |
732 | 835 | |
733 | 836 | m_spu_ctrl = data; |
734 | 837 | } |
735 | 838 | |
| 839 | WRITE16_MEMBER(twinkle_state::spu_ata_dma_low_w) |
| 840 | { |
| 841 | m_spu_ata_dma = (m_spu_ata_dma & ~0xffff) | data; |
| 842 | |
| 843 | //printf("dma_low %08x\n", m_spu_ata_dma * 2); |
| 844 | } |
| 845 | |
| 846 | WRITE16_MEMBER(twinkle_state::spu_ata_dma_high_w) |
| 847 | { |
| 848 | m_spu_ata_dma = (m_spu_ata_dma & 0xffff) | (data << 16); |
| 849 | |
| 850 | //printf("dma_high %08x\n", m_spu_ata_dma * 2); |
| 851 | } |
| 852 | |
| 853 | WRITE_LINE_MEMBER(twinkle_state::spu_ata_dmarq) |
| 854 | { |
| 855 | if (m_spu_ata_dmarq != state) |
| 856 | { |
| 857 | m_spu_ata_dmarq = state; |
| 858 | |
| 859 | if (m_spu_ata_dmarq) |
| 860 | { |
| 861 | UINT16 *waveram = (UINT16 *)m_rfsnd->base(); |
| 862 | |
| 863 | m_ata->write_dmack(ASSERT_LINE); |
| 864 | |
| 865 | while (m_spu_ata_dmarq) |
| 866 | { |
| 867 | UINT16 data = m_ata->read_dma(); |
| 868 | //printf("spu_ata_dmarq %08x %04x\n", m_spu_ata_dma * 2, data); |
| 869 | //waveram[m_spu_ata_dma++] = (data >> 8) | (data << 8); |
| 870 | // bp 4a0e ;bmiidx4 checksum |
| 871 | // bp 4d62 ;bmiidx4 dma |
| 872 | waveram[m_spu_ata_dma++] = data; |
| 873 | } |
| 874 | |
| 875 | m_ata->write_dmack(CLEAR_LINE); |
| 876 | } |
| 877 | } |
| 878 | } |
| 879 | |
736 | 880 | READ16_MEMBER(twinkle_state::twinkle_waveram_r) |
737 | 881 | { |
738 | | UINT16 *waveram = (UINT16 *)memregion("rfsnd")->base(); |
| 882 | UINT16 *waveram = (UINT16 *)m_rfsnd->base(); |
739 | 883 | |
740 | 884 | return waveram[offset]; |
741 | 885 | } |
742 | 886 | |
743 | 887 | WRITE16_MEMBER(twinkle_state::twinkle_waveram_w) |
744 | 888 | { |
745 | | UINT16 *waveram = (UINT16 *)memregion("rfsnd")->base(); |
| 889 | UINT16 *waveram = (UINT16 *)m_rfsnd->base(); |
746 | 890 | |
747 | 891 | COMBINE_DATA(&waveram[offset]); |
748 | 892 | } |
749 | 893 | |
750 | 894 | READ16_MEMBER(twinkle_state::shared_68k_r) |
751 | 895 | { |
752 | | // printf("shared_68k_r: @ %x, mask %x\n", offset, mem_mask); |
| 896 | UINT16 result = m_spu_shared[offset]; |
753 | 897 | |
754 | | return m_spu_shared[offset]; |
| 898 | //printf("shared_68k_r: %04x, %04x, %04x\n", offset, result, mem_mask); |
| 899 | |
| 900 | return result; |
755 | 901 | } |
756 | 902 | |
757 | 903 | WRITE16_MEMBER(twinkle_state::shared_68k_w) |
758 | 904 | { |
759 | | // printf("shared_68k_w: %x to %x, mask %x\n", data, offset, mem_mask); |
| 905 | //printf("shared_68k_w: %04x, %04x, %04x\n", offset, data, mem_mask); |
760 | 906 | |
761 | 907 | m_spu_shared[offset] = data & 0xff; |
762 | 908 | } |
r32688 | r32689 | |
766 | 912 | AM_RANGE(0x100000, 0x13ffff) AM_RAM |
767 | 913 | // 220000 = LEDs? |
768 | 914 | AM_RANGE(0x230000, 0x230003) AM_WRITE(twinkle_spu_ctrl_w) |
769 | | // 240000 = top 16 bits of DMA address? |
770 | | // 250000 = write to initiate DMA? |
| 915 | AM_RANGE(0x240000, 0x240003) AM_WRITE(spu_ata_dma_low_w) |
| 916 | AM_RANGE(0x250000, 0x250003) AM_WRITE(spu_ata_dma_high_w) |
771 | 917 | // 260000 = ??? |
772 | | AM_RANGE(0x280000, 0x280fff) AM_READWRITE(shared_68k_r, shared_68k_w ) |
| 918 | AM_RANGE(0x280000, 0x280fff) AM_READWRITE(shared_68k_r, shared_68k_w) |
773 | 919 | AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE("ata", ata_interface_device, read_cs0, write_cs0) |
774 | 920 | // 34000E = ??? |
775 | 921 | AM_RANGE(0x400000, 0x400fff) AM_DEVREADWRITE("rfsnd", rf5c400_device, rf5c400_r, rf5c400_w) |
r32688 | r32689 | |
886 | 1032 | MCFG_AM53CF96_IRQ_HANDLER(DEVWRITELINE("maincpu:irq", psxirq_device, intin10)) |
887 | 1033 | |
888 | 1034 | MCFG_ATA_INTERFACE_ADD("ata", ata_devices, "hdd", NULL, true) |
889 | | MCFG_ATA_INTERFACE_IRQ_HANDLER(WRITELINE(twinkle_state, ide_interrupt)) |
| 1035 | MCFG_ATA_INTERFACE_IRQ_HANDLER(WRITELINE(twinkle_state, spu_ata_irq)) |
| 1036 | MCFG_ATA_INTERFACE_DMARQ_HANDLER(WRITELINE(twinkle_state, spu_ata_dmarq)) |
890 | 1037 | |
891 | 1038 | MCFG_DEVICE_ADD("rtc", RTC65271, 0) |
892 | 1039 | |
| 1040 | MCFG_DEVICE_ADD("fdc37c665gt", FDC37C665GT, XTAL_24MHz) |
| 1041 | |
| 1042 | MCFG_DEVICE_ADD("rs232", RS232_PORT, 0) |
| 1043 | MCFG_SLOT_OPTION_ADD("xvd701", JVC_XVD701) |
| 1044 | // MCFG_SLOT_OPTION_ADD("xvs1100", JVC_XVS1100) // 8th mix only |
| 1045 | MCFG_SLOT_DEFAULT_OPTION("xvd701") |
| 1046 | MCFG_RS232_RXD_HANDLER(DEVWRITELINE("fdc37c665gt:uart2", ins8250_uart_device, rx_w)) |
| 1047 | MCFG_RS232_DCD_HANDLER(DEVWRITELINE("fdc37c665gt:uart2", ins8250_uart_device, dcd_w)) |
| 1048 | MCFG_RS232_DSR_HANDLER(DEVWRITELINE("fdc37c665gt:uart2", ins8250_uart_device, dsr_w)) |
| 1049 | MCFG_RS232_RI_HANDLER(DEVWRITELINE("fdc37c665gt:uart2", ins8250_uart_device, ri_w)) |
| 1050 | MCFG_RS232_CTS_HANDLER(DEVWRITELINE("fdc37c665gt:uart2", ins8250_uart_device, cts_w)) |
| 1051 | |
| 1052 | MCFG_DEVICE_MODIFY("fdc37c665gt:uart2") |
| 1053 | MCFG_INS8250_OUT_TX_CB(DEVWRITELINE("^rs232", rs232_port_device, write_txd)) |
| 1054 | MCFG_INS8250_OUT_DTR_CB(DEVWRITELINE("^rs232", rs232_port_device, write_dtr)) |
| 1055 | MCFG_INS8250_OUT_RTS_CB(DEVWRITELINE("^rs232", rs232_port_device, write_rts)) |
| 1056 | |
893 | 1057 | /* video hardware */ |
894 | 1058 | MCFG_PSXGPU_ADD( "maincpu", "gpu", CXD8561Q, 0x200000, XTAL_53_693175MHz ) |
895 | 1059 | |
r32688 | r32689 | |
973 | 1137 | PORT_BIT( 0x00000004, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("security", x76f041_device, write_cs) |
974 | 1138 | |
975 | 1139 | PORT_MODIFY("INSEC") |
976 | | PORT_BIT( 0x00001000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_READ_LINE_DEVICE_MEMBER("security", x76f041_device, read_sda) |
| 1140 | PORT_BIT( 0x00001000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("security", x76f041_device, read_sda) |
977 | 1141 | INPUT_PORTS_END |
978 | 1142 | |
979 | 1143 | static INPUT_PORTS_START( twinklei ) |
r32688 | r32689 | |
1189 | 1353 | DISK_IMAGE_READONLY( "896jaa04", 0, NO_DUMP ) |
1190 | 1354 | |
1191 | 1355 | DISK_REGION( "ata:0:hdd:image" ) |
1192 | | DISK_IMAGE_READONLY( "896hdda01", 0, NO_DUMP ) |
| 1356 | DISK_IMAGE_READONLY( "863hdda01", 0, SHA1(0b8dbf1c9caf4abf965dbc6e1a8e6329d48b1c90) ) |
1193 | 1357 | ROM_END |
1194 | 1358 | |
1195 | 1359 | ROM_START( bmiidxca ) |
r32688 | r32689 | |
1205 | 1369 | DISK_IMAGE_READONLY( "896jaa04", 0, NO_DUMP ) |
1206 | 1370 | |
1207 | 1371 | DISK_REGION( "ata:0:hdd:image" ) |
1208 | | DISK_IMAGE_READONLY( "896hdda01", 0, NO_DUMP ) |
| 1372 | DISK_IMAGE_READONLY( "863hdda01", 0, SHA1(0b8dbf1c9caf4abf965dbc6e1a8e6329d48b1c90) ) |
1209 | 1373 | ROM_END |
1210 | 1374 | |
1211 | 1375 | ROM_START( bmiidxs ) |
r32688 | r32689 | |
1244 | 1408 | |
1245 | 1409 | GAME( 1999, bmiidx, gq863, twinklex, twinklex, driver_device, 0, ROT0, "Konami", "beatmania IIDX (863 JAB)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
1246 | 1410 | GAME( 1999, bmiidxa, bmiidx, twinklex, twinklex, driver_device, 0, ROT0, "Konami", "beatmania IIDX (863 JAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
1247 | | GAME( 1999, bmiidxc, gq863, twinklex, twinklex, driver_device, 0, ROT0, "Konami", "beatmania IIDX with DDR 2nd Club Version (896 JAB)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
1248 | | GAME( 1999, bmiidxca, bmiidxc, twinklex, twinklex, driver_device, 0, ROT0, "Konami", "beatmania IIDX with DDR 2nd Club Version (896 JAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
1249 | | GAME( 1999, bmiidxs, gq863, twinklex, twinklex, driver_device, 0, ROT0, "Konami", "beatmania IIDX Substream (983 JAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
1250 | | GAME( 1999, bmiidxc2, gq863, twinklex, twinklex, driver_device, 0, ROT0, "Konami", "Beatmania IIDX Substream with DDR 2nd Club Version 2 (984 A01 BM)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
1251 | | GAME( 1999, bmiidx2, gq863, twinklei, twinklei, driver_device, 0, ROT0, "Konami", "beatmania IIDX 2nd style (GC985 JAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
1252 | | GAME( 2000, bmiidx3, gq863, twinklei, twinklei, driver_device, 0, ROT0, "Konami", "beatmania IIDX 3rd style (GC992 JAC)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
1253 | | GAME( 2000, bmiidx3a, bmiidx3, twinklei, twinklei, driver_device, 0, ROT0, "Konami", "beatmania IIDX 3rd style (GC992 JAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
1254 | | GAME( 2000, bmiidx4, gq863, twinklei, twinklei, driver_device, 0, ROT0, "Konami", "beatmania IIDX 4th style (GCA03 JAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
1255 | | GAME( 2001, bmiidx5, gq863, twinklei, twinklei, driver_device, 0, ROT0, "Konami", "beatmania IIDX 5th style (GCA17 JAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
1256 | | GAME( 2001, bmiidx6, gq863, twinklei, twinklei, driver_device, 0, ROT0, "Konami", "beatmania IIDX 6th style (GCB4U JAB)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
1257 | | GAME( 2001, bmiidx6a, bmiidx6, twinklei, twinklei, driver_device, 0, ROT0, "Konami", "beatmania IIDX 6th style (GCB4U JAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
1258 | | GAME( 2002, bmiidx7, gq863, twinklei, twinklei, driver_device, 0, ROT0, "Konami", "beatmania IIDX 7th style (GCB44 JAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
1259 | | GAME( 2002, bmiidx8, gq863, twinklei, twinklei, driver_device, 0, ROT0, "Konami", "beatmania IIDX 8th style (GCC44 JAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
| 1411 | GAME( 1999, bmiidxc, gq863, twinklex, twinklex, driver_device, 0, ROT0, "Konami", "beatmania IIDX with DDR 2nd Club Version (896 JAB)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
| 1412 | GAME( 1999, bmiidxca, bmiidxc, twinklex, twinklex, driver_device, 0, ROT0, "Konami", "beatmania IIDX with DDR 2nd Club Version (896 JAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
| 1413 | GAME( 1999, bmiidxs, gq863, twinklex, twinklex, driver_device, 0, ROT0, "Konami", "beatmania IIDX Substream (983 JAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
| 1414 | GAME( 1999, bmiidxc2, gq863, twinklex, twinklex, driver_device, 0, ROT0, "Konami", "Beatmania IIDX Substream with DDR 2nd Club Version 2 (984 A01 BM)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
| 1415 | GAME( 1999, bmiidx2, gq863, twinklei, twinklei, driver_device, 0, ROT0, "Konami", "beatmania IIDX 2nd style (GC985 JAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
| 1416 | GAME( 2000, bmiidx3, gq863, twinklei, twinklei, driver_device, 0, ROT0, "Konami", "beatmania IIDX 3rd style (GC992 JAC)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
| 1417 | GAME( 2000, bmiidx3a, bmiidx3, twinklei, twinklei, driver_device, 0, ROT0, "Konami", "beatmania IIDX 3rd style (GC992 JAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
| 1418 | GAME( 2000, bmiidx4, gq863, twinklei, twinklei, driver_device, 0, ROT0, "Konami", "beatmania IIDX 4th style (GCA03 JAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
| 1419 | GAME( 2001, bmiidx5, gq863, twinklei, twinklei, driver_device, 0, ROT0, "Konami", "beatmania IIDX 5th style (GCA17 JAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
| 1420 | GAME( 2001, bmiidx6, gq863, twinklei, twinklei, driver_device, 0, ROT0, "Konami", "beatmania IIDX 6th style (GCB4U JAB)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
| 1421 | GAME( 2001, bmiidx6a, bmiidx6, twinklei, twinklei, driver_device, 0, ROT0, "Konami", "beatmania IIDX 6th style (GCB4U JAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
| 1422 | GAME( 2002, bmiidx7, gq863, twinklei, twinklei, driver_device, 0, ROT0, "Konami", "beatmania IIDX 7th style (GCB44 JAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
| 1423 | GAME( 2002, bmiidx8, gq863, twinklei, twinklei, driver_device, 0, ROT0, "Konami", "beatmania IIDX 8th style (GCC44 JAA)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |