-konami/konamigq.cpp, konami/konamigv.cpp: Use "new SCSI" 53CF96 and drives. [Windy Fairy]

* Marked games as not supporting save states due to DMA pointer in
  member variable, and marked kdeadeye as having imperfect graphics due
  existing texturing issues that cause in-game text to be jumbled.

-konami/konamigv.cpp: Redumped CD for kdeadeye. [Brian Troha]
This commit is contained in:
Vas Crabb 2024-04-09 16:28:20 +10:00
parent c895c5e198
commit a6a81a6929
2 changed files with 186 additions and 151 deletions

View File

@ -69,21 +69,23 @@
*/
#include "emu.h"
#include "bus/scsi/scsi.h"
#include "bus/scsi/scsihd.h"
#include "bus/nscsi/hd.h"
#include "cpu/m68000/m68000.h"
#include "cpu/psx/psx.h"
#include "cpu/tms57002/tms57002.h"
#include "machine/am53cf96.h"
#include "machine/eepromser.h"
#include "machine/mb89371.h"
#include "machine/ncr53c90.h"
#include "machine/ram.h"
#include "sound/k054539.h"
#include "sound/k056800.h"
#include "video/psx.h"
#include "screen.h"
#include "speaker.h"
#include "endianness.h"
#include "multibyte.h"
@ -97,7 +99,7 @@ public:
m_maincpu(*this, "maincpu"),
m_soundcpu(*this, "soundcpu"),
m_dasp(*this, "dasp"),
m_am53cf96(*this, "am53cf96"),
m_ncr53cf96(*this, "scsi:7:ncr53cf96"),
m_k056800(*this, "k056800"),
m_pcmram(*this, "pcmram")
{
@ -107,18 +109,26 @@ public:
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
private:
emu_timer *m_dma_timer;
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_soundcpu;
required_device<tms57002_device> m_dasp;
required_device<am53cf96_device> m_am53cf96;
required_device<ncr53cf96_device> m_ncr53cf96;
required_device<k056800_device> m_k056800;
required_shared_ptr<uint8_t> m_pcmram;
uint8_t m_sector_buffer[ 512 ]{};
uint8_t m_sound_ctrl = 0;
uint8_t m_sound_intck = 0;
uint8_t m_sound_ctrl;
uint8_t m_sound_intck;
uint32_t *m_dma_data_ptr;
uint32_t m_dma_offset;
int32_t m_dma_size;
bool m_dma_is_write;
bool m_dma_requested;
void eeprom_w(uint16_t data);
void pcmram_w(offs_t offset, uint8_t data);
@ -128,8 +138,12 @@ private:
INTERRUPT_GEN_MEMBER(tms_sync);
void k054539_irq_gen(int state);
TIMER_CALLBACK_MEMBER(scsi_dma_transfer);
void scsi_dma_read( uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size );
void scsi_dma_write( uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size );
void scsi_drq(int state);
void konamigq_dasp_map(address_map &map);
void konamigq_k054539_map(address_map &map);
void konamigq_map(address_map &map);
@ -173,7 +187,7 @@ uint8_t konamigq_state::pcmram_r(offs_t offset)
void konamigq_state::konamigq_map(address_map &map)
{
map(0x1f000000, 0x1f00001f).rw(m_am53cf96, FUNC(am53cf96_device::read), FUNC(am53cf96_device::write)).umask32(0x00ff00ff);
map(0x1f000000, 0x1f00001f).m(m_ncr53cf96, FUNC(ncr53cf96_device::map)).umask16(0x00ff);
map(0x1f100000, 0x1f10001f).rw(m_k056800, FUNC(k056800_device::host_r), FUNC(k056800_device::host_w)).umask32(0x00ff00ff);
map(0x1f180000, 0x1f180001).w(FUNC(konamigq_state::eeprom_w));
map(0x1f198000, 0x1f198003).nopw(); /* cabinet lamps? */
@ -269,43 +283,66 @@ void konamigq_state::k054539_irq_gen(int state)
void konamigq_state::scsi_dma_read( uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size )
{
uint8_t *sector_buffer = m_sector_buffer;
int i;
int n_this;
while( n_size > 0 )
{
if( n_size > sizeof( m_sector_buffer ) / 4 )
{
n_this = sizeof( m_sector_buffer ) / 4;
}
else
{
n_this = n_size;
}
m_am53cf96->dma_read_data( n_this * 4, sector_buffer );
n_size -= n_this;
i = 0;
while( n_this > 0 )
{
p_n_psxram[ n_address / 4 ] = get_u32le( &sector_buffer[ i ] );
n_address += 4;
i += 4;
n_this--;
}
}
m_dma_data_ptr = p_n_psxram;
m_dma_offset = n_address;
m_dma_size = n_size * 4;
m_dma_is_write = false;
m_dma_timer->adjust(attotime::from_usec(10));
}
void konamigq_state::scsi_dma_write( uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size )
{
m_dma_data_ptr = p_n_psxram;
m_dma_offset = n_address;
m_dma_size = n_size * 4;
m_dma_is_write = true;
m_dma_timer->adjust(attotime::from_usec(10));
}
TIMER_CALLBACK_MEMBER(konamigq_state::scsi_dma_transfer)
{
if (m_dma_requested && m_dma_data_ptr != nullptr && m_dma_size > 0)
{
if (m_dma_is_write)
m_ncr53cf96->dma_w(util::little_endian_cast<const uint8_t>(m_dma_data_ptr)[m_dma_offset]);
else
util::little_endian_cast<uint8_t>(m_dma_data_ptr)[m_dma_offset] = m_ncr53cf96->dma_r();
m_dma_offset++;
m_dma_size--;
}
if (m_dma_requested && m_dma_size > 0)
m_dma_timer->adjust(attotime::from_usec(10));
}
void konamigq_state::scsi_drq(int state)
{
if (!m_dma_requested && state)
m_dma_timer->adjust(attotime::from_usec(10));
m_dma_requested = state;
}
void konamigq_state::machine_start()
{
save_item(NAME(m_sector_buffer));
save_item(NAME(m_sound_ctrl));
save_item(NAME(m_sound_intck));
m_dma_timer = timer_alloc(FUNC(konamigq_state::scsi_dma_transfer), this);
m_dma_timer->adjust(attotime::never);
}
void konamigq_state::machine_reset()
{
m_sound_ctrl = 0;
m_sound_intck = 0;
m_dma_timer->adjust(attotime::never);
m_dma_data_ptr = nullptr;
m_dma_offset = 0;
m_dma_size = 0;
m_dma_requested = m_dma_is_write = false;
}
void konamigq_state::konamigq(machine_config &config)
@ -328,12 +365,15 @@ void konamigq_state::konamigq(machine_config &config)
EEPROM_93C46_16BIT(config, "eeprom").default_data(konamigq_def_eeprom, 128);
scsi_port_device &scsi(SCSI_PORT(config, "scsi", 0));
scsi.set_slot_device(1, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_0));
AM53CF96(config, m_am53cf96, 0);
m_am53cf96->set_scsi_port("scsi");
m_am53cf96->irq_handler().set("maincpu:irq", FUNC(psxirq_device::intin10));
NSCSI_BUS(config, "scsi");
NSCSI_CONNECTOR(config, "scsi:0").option_set("harddisk", NSCSI_HARDDISK);
NSCSI_CONNECTOR(config, "scsi:7").option_set("ncr53cf96", NCR53CF96).clock(32_MHz_XTAL/2).machine_config(
[this] (device_t *device)
{
ncr53cf96_device &adapter = downcast<ncr53cf96_device &>(*device);
adapter.irq_handler_cb().set(":maincpu:irq", FUNC(psxirq_device::intin10));
adapter.drq_handler_cb().set(*this, FUNC(konamigq_state::scsi_drq));
});
/* video hardware */
CXD8538Q(config, "gpu", XTAL(53'693'175), 0x200000, subdevice<psxcpu_device>("maincpu")).set_screen("screen");
@ -453,7 +493,7 @@ ROM_START( cryptklr )
ROM_REGION32_LE( 0x080000, "maincpu:rom", 0 ) /* bios */
ROM_LOAD( "420b03.27p", 0x0000000, 0x080000, CRC(aab391b1) SHA1(bf9dc7c0c8168c22a4be266fe6a66d3738df916b) )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":harddisk" )
DISK_REGION( "scsi:0:harddisk:image" )
DISK_IMAGE( "420uaa04", 0, SHA1(67cb1418fc0de2a89fc61847dc9efb9f1bebb347) )
ROM_END

View File

@ -44,6 +44,10 @@ The Simpsons Bowling uses an extra PCB plugged in on top containing flash ROMs a
Some of the other games may also have extra PCBs.
Have seen two different CD-ROM drives:
- Sony CDU-76S (found in Hyper Athlete)
- Toshiba XM-5401B (found in Tokimeki Memorial Oshiete Your Heart)
PCB Layouts
@ -62,7 +66,7 @@ ZV610 PWB301331
|A CXD2923AR 058239 |
|M |
|M CXD8530BQ |
|A D482445LGW-A70 93CF96-2 |
|A D482445LGW-A70 53CF96-2 |
| CXD8514Q S|
| D482445LGW-A70 C|
| 67.7376MHz S|
@ -86,7 +90,7 @@ GV999 PWB301949A
|A 058239 |
|M 53.693175MHz |
|M CXD8530CQ |
|A 93CF96-2 |
|A 53CF96-2 |
| CXD8561Q S|
| KM4132G271Q-12 C|
| 67.7376MHz S|
@ -214,23 +218,24 @@ Notes:
#include "emu.h"
#include "bus/scsi/scsi.h"
#include "bus/scsi/scsicd.h"
#include "bus/nscsi/cd.h"
#include "cpu/psx/psx.h"
#include "machine/am53cf96.h"
#include "machine/eepromser.h"
#include "machine/intelfsh.h"
#include "machine/mb89371.h"
#include "machine/ncr53c90.h"
#include "machine/upd4701.h"
#include "machine/ram.h"
#include "sound/cdda.h"
#include "sound/spu.h"
#include "video/psx.h"
#include "screen.h"
#include "speaker.h"
#include "cdrom.h"
#include "multibyte.h"
#include "cdrom.h"
#include "endianness.h"
namespace {
@ -240,7 +245,7 @@ class konamigv_state : public driver_device
public:
konamigv_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_am53cf96(*this, "am53cf96")
, m_ncr53cf96(*this, "scsi:7:ncr53cf96")
, m_btc_trackball(*this, "upd%u", 1)
, m_maincpu(*this, "maincpu")
{
@ -255,24 +260,33 @@ protected:
void konamigv_map(address_map &map);
virtual void machine_start() override;
virtual void machine_reset() override;
void btc_trackball_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
uint16_t tokimeki_serial_r();
void tokimeki_serial_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
void scsi_dma_read( uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size );
void scsi_dma_write( uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size );
void scsi_dma_read(uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size);
void scsi_dma_write(uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size);
void scsi_drq(int state);
void btchamp_map(address_map &map);
void kdeadeye_map(address_map &map);
void tmosh_map(address_map &map);
static void cdrom_config(device_t *device);
TIMER_CALLBACK_MEMBER(scsi_dma_transfer);
required_device<am53cf96_device> m_am53cf96;
required_device<ncr53cf96_device> m_ncr53cf96;
optional_device_array<upd4701_device, 2> m_btc_trackball;
uint8_t m_sector_buffer[ 4096 ];
required_device<cpu_device> m_maincpu;
uint32_t *m_dma_data_ptr;
uint32_t m_dma_offset;
int32_t m_dma_size;
bool m_dma_is_write;
bool m_dma_requested;
emu_timer *m_dma_timer;
};
class simpbowl_state : public konamigv_state
@ -301,7 +315,7 @@ private:
void konamigv_state::konamigv_map(address_map &map)
{
map(0x1f000000, 0x1f00001f).rw(m_am53cf96, FUNC(am53cf96_device::read), FUNC(am53cf96_device::write)).umask32(0x00ff00ff);
map(0x1f000000, 0x1f00001f).m(m_ncr53cf96, FUNC(ncr53cf96_device::map)).umask16(0x00ff);
map(0x1f100000, 0x1f100003).portr("P1");
map(0x1f100004, 0x1f100007).portr("P2");
map(0x1f100008, 0x1f10000b).portr("P3_P4");
@ -353,80 +367,61 @@ void konamigv_state::tmosh_map(address_map &map)
// SCSI
void konamigv_state::scsi_dma_read( uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size )
void konamigv_state::scsi_dma_read(uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size)
{
uint8_t *sector_buffer = m_sector_buffer;
int i;
int n_this;
while( n_size > 0 )
{
if( n_size > sizeof( m_sector_buffer ) / 4 )
{
n_this = sizeof( m_sector_buffer ) / 4;
}
else
{
n_this = n_size;
}
if( n_this < 2048 / 4 )
{
// non-READ commands
m_am53cf96->dma_read_data( n_this * 4, sector_buffer );
}
else
{
// assume normal 2048 byte data for now
m_am53cf96->dma_read_data( 2048, sector_buffer );
n_this = 2048 / 4;
}
n_size -= n_this;
i = 0;
while( n_this > 0 )
{
p_n_psxram[ n_address / 4 ] = get_u32le( &sector_buffer[ i ] );
n_address += 4;
i += 4;
n_this--;
}
}
m_dma_data_ptr = p_n_psxram;
m_dma_offset = n_address;
m_dma_size = n_size * 4;
m_dma_is_write = false;
m_dma_timer->adjust(attotime::from_usec(10));
}
void konamigv_state::scsi_dma_write( uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size )
void konamigv_state::scsi_dma_write(uint32_t *p_n_psxram, uint32_t n_address, int32_t n_size)
{
uint8_t *sector_buffer = m_sector_buffer;
int i;
int n_this;
m_dma_data_ptr = p_n_psxram;
m_dma_offset = n_address;
m_dma_size = n_size * 4;
m_dma_is_write = true;
m_dma_timer->adjust(attotime::from_usec(10));
}
while( n_size > 0 )
TIMER_CALLBACK_MEMBER(konamigv_state::scsi_dma_transfer)
{
if (m_dma_requested && m_dma_data_ptr != nullptr && m_dma_size > 0)
{
if( n_size > sizeof( m_sector_buffer ) / 4 )
{
n_this = sizeof( m_sector_buffer ) / 4;
}
if (m_dma_is_write)
m_ncr53cf96->dma_w(util::little_endian_cast<const uint8_t>(m_dma_data_ptr)[m_dma_offset]);
else
{
n_this = n_size;
}
n_size -= n_this;
util::little_endian_cast<uint8_t>(m_dma_data_ptr)[m_dma_offset] = m_ncr53cf96->dma_r();
i = 0;
while( n_this > 0 )
{
put_u32le( &sector_buffer[ i ], p_n_psxram[ n_address / 4 ] );
n_address += 4;
i += 4;
n_this--;
}
m_am53cf96->dma_write_data( i, sector_buffer );
m_dma_offset++;
m_dma_size--;
}
if (m_dma_requested && m_dma_size > 0)
m_dma_timer->adjust(attotime::from_usec(10));
}
void konamigv_state::scsi_drq(int state)
{
if (!m_dma_requested && state)
m_dma_timer->adjust(attotime::from_usec(10));
m_dma_requested = state;
}
void konamigv_state::machine_start()
{
save_item(NAME(m_sector_buffer));
m_dma_timer = timer_alloc(FUNC(konamigv_state::scsi_dma_transfer), this);
}
void konamigv_state::machine_reset()
{
m_dma_timer->adjust(attotime::never);
m_dma_data_ptr = nullptr;
m_dma_offset = 0;
m_dma_size = 0;
m_dma_requested = m_dma_is_write = false;
}
void simpbowl_state::machine_start()
@ -435,13 +430,6 @@ void simpbowl_state::machine_start()
save_item(NAME(m_flash_address));
}
void konamigv_state::cdrom_config(device_t *device)
{
device->subdevice<cdda_device>("cdda")->add_route(0, "^^lspeaker", 1.0);
device->subdevice<cdda_device>("cdda")->add_route(1, "^^rspeaker", 1.0);
device = device->subdevice("cdda");
}
void konamigv_state::konamigv(machine_config &config)
{
// basic machine hardware
@ -454,13 +442,20 @@ void konamigv_state::konamigv(machine_config &config)
MB89371(config, "mb89371", 0);
EEPROM_93C46_16BIT(config, "eeprom");
scsi_port_device &scsi(SCSI_PORT(config, "scsi", 0));
scsi.set_slot_device(1, "cdrom", SCSICD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_4));
scsi.slot(1).set_option_machine_config("cdrom", cdrom_config);
AM53CF96(config, m_am53cf96, 0);
m_am53cf96->set_scsi_port("scsi");
m_am53cf96->irq_handler().set("maincpu:irq", FUNC(psxirq_device::intin10));
NSCSI_BUS(config, "scsi");
NSCSI_CONNECTOR(config, "scsi:4").option_set("cdrom", NSCSI_XM5401).machine_config(
[](device_t *device)
{
device->subdevice<cdda_device>("cdda")->add_route(0, "^^lspeaker", 1.0);
device->subdevice<cdda_device>("cdda")->add_route(1, "^^rspeaker", 1.0);
});
NSCSI_CONNECTOR(config, "scsi:7").option_set("ncr53cf96", NCR53CF96).clock(32_MHz_XTAL/2).machine_config(
[this](device_t *device)
{
ncr53cf96_device &adapter = downcast<ncr53cf96_device &>(*device);
adapter.irq_handler_cb().set(":maincpu:irq", FUNC(psxirq_device::intin10));
adapter.drq_handler_cb().set(*this, FUNC(konamigv_state::scsi_drq));
});
// video hardware
CXD8514Q(config, "gpu", XTAL(53'693'175), 0x100000, subdevice<psxcpu_device>("maincpu")).set_screen("screen");
@ -823,7 +818,7 @@ ROM_START( lacrazyc )
ROM_REGION16_BE( 0x0000080, "eeprom", 0 ) // default EEPROM
ROM_LOAD( "lacrazyc.25c", 0x000000, 0x000080, CRC(e20e5730) SHA1(066b49236c658a4ef2930f7bacc4b2354dd7f240) )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":cdrom" )
DISK_REGION( "scsi:4:cdrom" )
DISK_IMAGE_READONLY( "gv027-a1", 0, BAD_DUMP SHA1(840d0d4876cf1b814c9d8db975aa6c92e1fe4039) )
ROM_END
@ -833,7 +828,7 @@ ROM_START( susume )
ROM_REGION16_BE( 0x0000080, "eeprom", 0 ) // default EEPROM
ROM_LOAD( "susume.25c", 0x000000, 0x000080, CRC(52f17df7) SHA1(b8ad7787b0692713439d7d9bebfa0c801c806006) )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":cdrom" )
DISK_REGION( "scsi:4:cdrom" )
DISK_IMAGE_READONLY( "gv027j1", 0, BAD_DUMP SHA1(e7e6749ac65de7771eb8fed7d5eefaec3f902255) )
ROM_END
@ -843,7 +838,7 @@ ROM_START( hyperath )
ROM_REGION16_BE( 0x0000080, "eeprom", 0 ) // default EEPROM
ROM_LOAD( "hyperath.25c", 0x000000, 0x000080, CRC(20a8c435) SHA1(a0f203a999757fba68b391c525ac4b9684a57ba9) )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":cdrom" )
DISK_REGION( "scsi:4:cdrom" )
DISK_IMAGE_READONLY( "gv021-j1", 0, SHA1(579442444025b18da658cd6455c51459fbc3de0e) )
ROM_END
@ -853,7 +848,7 @@ ROM_START( powyak96 )
ROM_REGION16_BE( 0x0000080, "eeprom", 0 ) // default EEPROM
ROM_LOAD( "powyak96.25c", 0x000000, 0x000080, CRC(405a7fc9) SHA1(e2d978f49748ba3c4a425188abcd3d272ec23907) )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":cdrom" )
DISK_REGION( "scsi:4:cdrom" )
DISK_IMAGE_READONLY( "powyak96", 0, BAD_DUMP SHA1(ebd0ea18ff9ce300ea1e30d66a739a96acfb0621) )
ROM_END
@ -863,7 +858,7 @@ ROM_START( weddingr )
ROM_REGION16_BE( 0x0000080, "eeprom", 0 ) // default EEPROM
ROM_LOAD( "weddingr.25c", 0x000000, 0x000080, CRC(b90509a0) SHA1(41510a0ceded81dcb26a70eba97636d38d3742c3) )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":cdrom" )
DISK_REGION( "scsi:4:cdrom" )
DISK_IMAGE_READONLY( "weddingr", 0, BAD_DUMP SHA1(4e7122b191747ab7220fe4ce1b4483d62ab579af) )
ROM_END
@ -873,7 +868,7 @@ ROM_START( simpbowl )
ROM_REGION16_BE( 0x0000080, "eeprom", 0 ) // default EEPROM
ROM_LOAD( "simpbowl.25c", 0x000000, 0x000080, CRC(2c61050c) SHA1(16ae7f81cbe841c429c5c7326cf83e87db1782bf) )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":cdrom" )
DISK_REGION( "scsi:4:cdrom" )
DISK_IMAGE_READONLY( "829uaa02", 0, SHA1(2ec4cc608d5582e478ee047b60ccee67b52f060c) )
ROM_END
@ -883,7 +878,7 @@ ROM_START( btchamp )
ROM_REGION16_BE( 0x0000080, "eeprom", 0 ) // default EEPROM
ROM_LOAD( "btchmp.25c", 0x000000, 0x000080, CRC(6d02ea54) SHA1(d3babf481fd89db3aec17f589d0d3d999a2aa6e1) )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":cdrom" )
DISK_REGION( "scsi:4:cdrom" )
DISK_IMAGE_READONLY( "btchamp", 0, BAD_DUMP SHA1(c9c858e9034826e1a12c3c003dd068a49a3577e1) )
ROM_END
@ -893,8 +888,8 @@ ROM_START( kdeadeye )
ROM_REGION16_BE( 0x0000080, "eeprom", 0 ) // default EEPROM
ROM_LOAD( "kdeadeye.25c", 0x000000, 0x000080, CRC(3935d2df) SHA1(cbb855c475269077803c380dbc3621e522efe51e) )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":cdrom" )
DISK_IMAGE_READONLY( "kdeadeye", 0, BAD_DUMP SHA1(3c737c51717925be724dcb93d30769649029b8ce) )
DISK_REGION( "scsi:4:cdrom" )
DISK_IMAGE_READONLY( "054uaa01", 0, SHA1(84ff29b6ca0282b8d3ffac8c8a1a1c58085fd469) )
ROM_END
ROM_START( nagano98 )
@ -903,7 +898,7 @@ ROM_START( nagano98 )
ROM_REGION16_BE( 0x0000080, "eeprom", 0 ) // default EEPROM
ROM_LOAD( "nagano98.25c", 0x000000, 0x000080, CRC(b64b7451) SHA1(a77a37e0cc580934d1e7e05d523bae0acd2c1480) )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":cdrom" )
DISK_REGION( "scsi:4:cdrom" )
DISK_IMAGE_READONLY( "nagano98", 0, BAD_DUMP SHA1(1be7bd4531f249ff2233dd40a206c8d60054a8c6) )
ROM_END
@ -913,7 +908,7 @@ ROM_START( naganoj )
ROM_REGION16_BE( 0x0000080, "eeprom", 0 ) // default EEPROM
ROM_LOAD( "720ja.25c", 0x000000, 0x000080, CRC(34c473ba) SHA1(768225b04a293bdbc114a092d14dee28d52044e9) )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":cdrom" )
DISK_REGION( "scsi:4:cdrom" )
DISK_IMAGE_READONLY( "720jaa01", 0, SHA1(437160996551ef4dfca43899d1d14beca62eb4c9) )
ROM_END
@ -923,7 +918,7 @@ ROM_START( tmosh )
ROM_REGION16_BE( 0x0000080, "eeprom", 0 ) // default EEPROM
ROM_LOAD( "tmosh.25c", 0x000000, 0x000080, NO_DUMP )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":cdrom" )
DISK_REGION( "scsi:4:cdrom" )
DISK_IMAGE_READONLY( "673jaa01", 0, SHA1(eaa76073749f9db48c1bee3dff9bea955683c8a8) )
ROM_END
@ -933,7 +928,7 @@ ROM_START( tmoshs )
ROM_REGION16_BE( 0x0000080, "eeprom", 0 ) // default EEPROM
ROM_LOAD( "tmoshs.25c", 0x000000, 0x000080, CRC(e57b833f) SHA1(f18a0974a6be69dc179706643aab837ff61c2738) )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":cdrom" )
DISK_REGION( "scsi:4:cdrom" )
DISK_IMAGE_READONLY( "755jaa01", 0, SHA1(fc742a0b763ba38350ba7eb5d775948632aafd9d) )
ROM_END
@ -943,7 +938,7 @@ ROM_START( tmoshsp )
ROM_REGION16_BE( 0x0000080, "eeprom", 0 ) // default EEPROM
ROM_LOAD( "tmoshsp.25c", 0x000000, 0x000080, CRC(af4cdd87) SHA1(97041e287e4c80066043967450779b81b62b2b8e) )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":cdrom" )
DISK_REGION( "scsi:4:cdrom" )
DISK_IMAGE_READONLY( "756jab01", 0, SHA1(b2c59b9801debccbbd986728152f314535c67e53) )
ROM_END
@ -953,7 +948,7 @@ ROM_START( tmoshspa )
ROM_REGION16_BE( 0x0000080, "eeprom", 0 ) // default EEPROM
ROM_LOAD( "tmoshsp.25c", 0x000000, 0x000080, CRC(af4cdd87) SHA1(97041e287e4c80066043967450779b81b62b2b8e) )
DISK_REGION( "scsi:" SCSI_PORT_DEVICE1 ":cdrom" )
DISK_REGION( "scsi:4:cdrom" )
DISK_IMAGE_READONLY( "756jaa01", 0, BAD_DUMP SHA1(5e6d349ad1a22c0dbb1ec26aa05febc830254339) ) // The CD was damaged
ROM_END
@ -968,12 +963,12 @@ GAME( 1996, hyperath, konamigv, konamigv, konamigv, konamigv_state, empty_init,
GAME( 1996, lacrazyc, konamigv, konamigv, konamigv, konamigv_state, empty_init, ROT0, "Konami", "Let's Attack Crazy Cross (GV027 Asia 1.10)", MACHINE_IMPERFECT_SOUND )
GAME( 1996, susume, lacrazyc, konamigv, konamigv, konamigv_state, empty_init, ROT0, "Konami", "Susume! Taisen Puzzle-Dama (GV027 Japan 1.20)", MACHINE_IMPERFECT_SOUND )
GAME( 1996, btchamp, konamigv, btchamp, btchamp, konamigv_state, empty_init, ROT0, "Konami", "Beat the Champ (GV053 UAA01)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
GAME( 1996, kdeadeye, konamigv, kdeadeye, kdeadeye, konamigv_state, empty_init, ROT0, "Konami", "Dead Eye (GV054 UAA01)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
GAME( 1996, kdeadeye, konamigv, kdeadeye, kdeadeye, konamigv_state, empty_init, ROT0, "Konami", "Dead Eye (GV054 UAA01)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1997, weddingr, konamigv, konamigv, weddingr, konamigv_state, empty_init, ROT0, "Konami", "Wedding Rhapsody (GX624 JAA)", MACHINE_IMPERFECT_SOUND )
GAME( 1997, tmosh, konamigv, tmosh, konamigv, konamigv_state, empty_init, ROT0, "Konami", "Tokimeki Memorial Oshiete Your Heart (GQ673 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
GAME( 1997, tmoshs, konamigv, tmosh, konamigv, konamigv_state, empty_init, ROT0, "Konami", "Tokimeki Memorial Oshiete Your Heart Seal Version (GE755 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
GAME( 1997, tmoshsp, konamigv, tmosh, konamigv, konamigv_state, empty_init, ROT0, "Konami", "Tokimeki Memorial Oshiete Your Heart Seal Version Plus (GE756 JAB)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
GAME( 1997, tmoshspa, tmoshsp, tmosh, konamigv, konamigv_state, empty_init, ROT0, "Konami", "Tokimeki Memorial Oshiete Your Heart Seal Version Plus (GE756 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
GAME( 1998, nagano98, konamigv, konamigv, konamigv, konamigv_state, empty_init, ROT0, "Konami", "Nagano Winter Olympics '98 (GX720 EAA)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE)
GAME( 1998, naganoj, nagano98, konamigv, konamigv, konamigv_state, empty_init, ROT0, "Konami", "Hyper Olympic in Nagano (GX720 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE)
GAME( 2000, simpbowl, konamigv, simpbowl, simpbowl, simpbowl_state, empty_init, ROT0, "Konami", "The Simpsons Bowling (GQ829 UAA)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE)
GAME( 1998, nagano98, konamigv, konamigv, konamigv, konamigv_state, empty_init, ROT0, "Konami", "Nagano Winter Olympics '98 (GX720 EAA)", MACHINE_IMPERFECT_SOUND)
GAME( 1998, naganoj, nagano98, konamigv, konamigv, konamigv_state, empty_init, ROT0, "Konami", "Hyper Olympic in Nagano (GX720 JAA)", MACHINE_IMPERFECT_SOUND)
GAME( 2000, simpbowl, konamigv, simpbowl, simpbowl, simpbowl_state, empty_init, ROT0, "Konami", "The Simpsons Bowling (GQ829 UAA)", MACHINE_IMPERFECT_SOUND)