mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
viper.cpp: Added audio support, updated inputs, and improved default NVRAM contents. (#8434)
* Updated compatibility lists, added NVRAMs, added more inputs and per-game DIP switches. * Fixed port DIP location values. * Added comment about boxingm's pad controller.
This commit is contained in:
parent
33b27900fd
commit
f0e85a6e54
@ -23,8 +23,6 @@
|
||||
|
||||
#define DEFAULT_SAMPLE_RATE (48000)
|
||||
|
||||
#define BUFFER_SIZE 32768
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
@ -38,8 +36,7 @@
|
||||
|
||||
void dmadac_sound_device::device_start()
|
||||
{
|
||||
/* reset the state */
|
||||
m_volume = 1.0;
|
||||
initialize_state();
|
||||
|
||||
/* allocate a stream channel */
|
||||
m_channel = stream_alloc(0, 1, DEFAULT_SAMPLE_RATE);
|
||||
@ -49,11 +46,18 @@ void dmadac_sound_device::device_start()
|
||||
save_item(NAME(m_bufout));
|
||||
save_item(NAME(m_volume));
|
||||
save_item(NAME(m_enabled));
|
||||
save_item(NAME(m_frequency));
|
||||
save_item(NAME(m_buffer));
|
||||
}
|
||||
|
||||
void dmadac_sound_device::initialize_state()
|
||||
{
|
||||
/* reset the state */
|
||||
m_volume = 1.0;
|
||||
m_bufin = m_bufout = 0;
|
||||
m_enabled = 0;
|
||||
|
||||
std::fill_n(m_buffer.begin(), BUFFER_SIZE, 0);
|
||||
}
|
||||
|
||||
/*************************************
|
||||
*
|
||||
@ -83,66 +87,6 @@ void dmadac_sound_device::flush()
|
||||
m_channel->update();
|
||||
}
|
||||
|
||||
void dmadac_sound_device::transfer(int channel, offs_t channel_spacing, offs_t frame_spacing, offs_t total_frames, int16_t *data)
|
||||
{
|
||||
int j;
|
||||
|
||||
/* loop over all channels and accumulate the data */
|
||||
constexpr stream_buffer::sample_t sample_scale = 1.0 / 32768.0;
|
||||
if (m_enabled)
|
||||
{
|
||||
int maxin = (m_bufout + BUFFER_SIZE - 1) % BUFFER_SIZE;
|
||||
int16_t *src = data + channel * channel_spacing;
|
||||
int curin = m_bufin;
|
||||
|
||||
/* copy the data */
|
||||
for (j = 0; j < total_frames && curin != maxin; j++)
|
||||
{
|
||||
m_buffer[curin] = stream_buffer::sample_t(*src) * sample_scale;
|
||||
curin = (curin + 1) % BUFFER_SIZE;
|
||||
src += frame_spacing;
|
||||
}
|
||||
m_bufin = curin;
|
||||
|
||||
/* log overruns */
|
||||
if (j != total_frames)
|
||||
logerror("dmadac_transfer: buffer overrun (short %d frames)\n", total_frames - j);
|
||||
}
|
||||
|
||||
// FIXME: this line has rotted and can no longer compile - it should be fixed and uncommented or removed
|
||||
//LOG("dmadac_transfer - %d samples, %d effective, %d in buffer\n", total_frames, int(total_frames * double(DEFAULT_SAMPLE_RATE) / dmadac[first_channel].frequency), dmadac[first_channel].curinpos - dmadac[first_channel].curoutpos);
|
||||
}
|
||||
|
||||
void dmadac_sound_device::transfer(int channel, offs_t channel_spacing, offs_t frame_spacing, offs_t total_frames, stream_buffer::sample_t *data)
|
||||
{
|
||||
int j;
|
||||
|
||||
/* loop over all channels and accumulate the data */
|
||||
if (m_enabled)
|
||||
{
|
||||
int maxin = (m_bufout + BUFFER_SIZE - 1) % BUFFER_SIZE;
|
||||
stream_buffer::sample_t *src = data + channel * channel_spacing;
|
||||
int curin = m_bufin;
|
||||
|
||||
/* copy the data */
|
||||
for (j = 0; j < total_frames && curin != maxin; j++)
|
||||
{
|
||||
m_buffer[curin] = *src;
|
||||
curin = (curin + 1) % BUFFER_SIZE;
|
||||
src += frame_spacing;
|
||||
}
|
||||
m_bufin = curin;
|
||||
|
||||
/* log overruns */
|
||||
if (j != total_frames)
|
||||
logerror("dmadac_transfer: buffer overrun (short %d frames)\n", total_frames - j);
|
||||
}
|
||||
|
||||
// FIXME: this line has rotted and can no longer compile - it should be fixed and uncommented or removed
|
||||
//LOG("dmadac_transfer - %d samples, %d effective, %d in buffer\n", total_frames, int(total_frames * double(DEFAULT_SAMPLE_RATE) / dmadac[first_channel].frequency), dmadac[first_channel].curinpos - dmadac[first_channel].curoutpos);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
@ -226,8 +170,7 @@ dmadac_sound_device::dmadac_sound_device(const machine_config &mconfig, const ch
|
||||
m_bufin(0),
|
||||
m_bufout(0),
|
||||
m_volume(0),
|
||||
m_enabled(0),
|
||||
m_frequency(0)
|
||||
m_enabled(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -18,9 +18,35 @@ class dmadac_sound_device : public device_t, public device_sound_interface
|
||||
public:
|
||||
dmadac_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
|
||||
|
||||
void initialize_state();
|
||||
void flush();
|
||||
void transfer(int channel, offs_t channel_spacing, offs_t frame_spacing, offs_t total_frames, int16_t *data);
|
||||
void transfer(int channel, offs_t channel_spacing, offs_t frame_spacing, offs_t total_frames, stream_buffer::sample_t *data);
|
||||
|
||||
template <typename T> void transfer(int channel, offs_t channel_spacing, offs_t frame_spacing, offs_t total_frames, T* data) {
|
||||
int j;
|
||||
|
||||
constexpr stream_buffer::sample_t sample_scale = 1.0 / double(std::numeric_limits<T>::max());
|
||||
|
||||
if (m_enabled)
|
||||
{
|
||||
int maxin = (m_bufout + BUFFER_SIZE - 1) % BUFFER_SIZE;
|
||||
T* src = data + channel * channel_spacing;
|
||||
int curin = m_bufin;
|
||||
|
||||
/* copy the data */
|
||||
for (j = 0; j < total_frames && curin != maxin; j++)
|
||||
{
|
||||
m_buffer[curin] = stream_buffer::sample_t(*src) * sample_scale;
|
||||
curin = (curin + 1) % BUFFER_SIZE;
|
||||
src += frame_spacing;
|
||||
}
|
||||
m_bufin = curin;
|
||||
|
||||
/* log overruns */
|
||||
if (j != total_frames)
|
||||
logerror("dmadac_transfer: buffer overrun (short %d frames)\n", total_frames - j);
|
||||
}
|
||||
}
|
||||
|
||||
void enable(uint8_t enable);
|
||||
void set_frequency(double frequency);
|
||||
void set_volume(uint16_t volume);
|
||||
@ -43,7 +69,8 @@ private:
|
||||
/* per-channel parameters */
|
||||
stream_buffer::sample_t m_volume;
|
||||
uint8_t m_enabled;
|
||||
double m_frequency;
|
||||
|
||||
static constexpr int BUFFER_SIZE = 32768;
|
||||
};
|
||||
|
||||
DECLARE_DEVICE_TYPE(DMADAC, dmadac_sound_device)
|
||||
|
@ -16,7 +16,7 @@
|
||||
IRQ0: ??? (Task 4)
|
||||
IRQ1: unused
|
||||
IRQ2: ??? Possibly UART? Accesses registers at 0xffe00008...f
|
||||
IRQ3: ??? (Task 5, sound?)
|
||||
IRQ3: Sound (Task 5)
|
||||
IRQ4: Voodoo3 Currently only for User Interrupt Command, maybe a more extensive handler gets installed later?
|
||||
|
||||
I2C: ??? (no task switch) what drives this? network? U13 (ADC838) test fails if I2C doesn't work
|
||||
@ -37,6 +37,13 @@
|
||||
0x08: unknown mem pointer, task stack pointer?
|
||||
0x0c: pointer to task PC (also top of stack?)
|
||||
|
||||
Sound:
|
||||
0x00001320: A flag that's used when sound effects(?) are being played
|
||||
0x00001324: Pointer to the data cache buffer to be used for loading and mixing BGM/SE.
|
||||
Each buffer is 0x800 bytes in size and the game will switch between the two every IRQ3(?).
|
||||
The original audio typically seems to be ADPCM which is then decoded and mixed in software.
|
||||
0x00001330: L/R channel PCM data when a sound effect is played? Seems to be the last result when mixing down buffers.
|
||||
|
||||
|
||||
0x00000310: Global timer 0 IRQ handler
|
||||
0x00000320: Global timer 1 IRQ handler
|
||||
@ -75,27 +82,45 @@
|
||||
|
||||
TODO:
|
||||
- needs a proper way to dump security dongles, anything but p9112 has placeholder ROM for ds2430.
|
||||
- figure out why games randomly crash (IRQ related?)
|
||||
|
||||
Other notes:
|
||||
- "Distribution error" means there's a region mismatch.
|
||||
- Games that hang randomly seem to hang on IRQ16 possibly? You can see "IRQ16 taken" but it hangs before you see "IRQ16 cleared".
|
||||
- Hold TEST while booting (from the very start) to initialize the RTC for most games.
|
||||
- It seems that p911 has 3 unique regional images: U/E, K/A, and J. If you try booting, for example, U region on a K/A image, it won't find some files and will error out with "distribution error".
|
||||
|
||||
Game status:
|
||||
ppp2nd Boots in-game, no sound or DVD support, crashes when going into song selection screen
|
||||
boxingm Goes to attract mode when ran with memory card check. Coins up.
|
||||
code1d,b RTC self check bad
|
||||
gticlub2,ea Attract mode works. Coins up. Hangs in car selection.
|
||||
jpark3 POST?: Shows "Now loading..." then black screen (sets global timer 1 on EPIC) - with IRQ3 crashes at first 3d frame
|
||||
mocapglf Sensor I/O error
|
||||
mocapb,j Crash after self checks
|
||||
p911 "Distribution error"
|
||||
p911e,j,uc,kc Hangs at POST, with IRQ3 it crashes at first 3d frame
|
||||
p9112 RTC self check bad
|
||||
boxingm Goes in-game. Controllers are not emulated. Various graphical glitches.
|
||||
jpark3 Goes in-game. Controllers are not emulated. Various graphical glitches.
|
||||
mocapb,j Goes in-game. Controllers are not emulated. Various graphical glitches. Random crashes.
|
||||
ppp2nd,a Fully playable with graphical glitches. No network or DVD support. Crashes when returning to game mode from test menu.
|
||||
p911(all) Goes in-game. Controllers are not emulated. Various graphical glitches.
|
||||
tsurugi,j Goes in-game. Controllers are not emulated. Various graphical glitches.
|
||||
|
||||
gticlub2,ea Attract mode works. Coins up. Hangs in various places. Will crash with "network error" after stage is selected.
|
||||
thrild2,a Attract mode with partial graphics. Coins up. Hangs in various places.
|
||||
|
||||
sscopefh Graphics heavily glitched. Gun controller is not emulated. Sensor error and hopper error stop it from working.
|
||||
|
||||
mfightc,c Requires touch panel emulation. Gets stuck at "Waiting for central monitor, checking serial...".
|
||||
xtrial Hangs at "Please set the time for the bookkeeping" message.
|
||||
|
||||
p9112 RTC self check bad.
|
||||
The game checks the checksum of 0x157d4d0-0x157d4ee against the checksum that should be at 0x157d4ee-0x157d4ef,
|
||||
but this part of memory is never written to after its initial clearing on boot.
|
||||
If 0xffff is placed at 0x157d4ee then the game will pass the RTC check.
|
||||
The game will later complain about "Hardware Error: Security Key Error" if you try starting the game.
|
||||
code1d,b Can boot but crashes randomly and quickly so it's hard to do anything.
|
||||
|
||||
mocapglf Security code error
|
||||
sscopex/sogeki Security code error
|
||||
sscopefh Needs gun inputs.
|
||||
thrild2,a Attract mode with partial graphics. Coins up. Hangs in car selection screen.
|
||||
thrild2c Inf loop on blue screen
|
||||
tsurugi Goes to attract mode when ran with memory card check. Coins up.
|
||||
tsurugij No NVRAM
|
||||
wcombat Stuck on network check
|
||||
xtrial Attract mode. Hangs.
|
||||
mfightc,c Passes POST. Waits for network connection from main unit? Spams writes to 0xffe08000 (8-bit)
|
||||
|
||||
wcombat Can boot into a test menu by using a combination of dipswitches, but it says "serial check bad". Can't boot normally.
|
||||
wcombatu Bootable when dipsw 4 is set to on. Controls not implemented so it's not possible to pass nickname selection screen. Freezes when test button is pressed.
|
||||
thrild2c,ac Inf loop on blue screen
|
||||
|
||||
|
||||
|
||||
===========================================================================================================================
|
||||
|
||||
@ -286,6 +311,16 @@ Player 2 gun connects to the same pin numbers on the solder side.
|
||||
Jurassic Park III also uses 2 additional buttons for escaping left and right. These are wired to buttons on the Jamma
|
||||
connector.
|
||||
|
||||
Additionally on the 28-WAY connector is...
|
||||
Pin 7 parts side - Serial TX
|
||||
Pin 7 solder side - Serial RX
|
||||
Pin 8 solder side - GND (used by serial)
|
||||
|
||||
Pin 9 parts side - SP_LP (outputs to SP-F, front speaker)
|
||||
Pin 9 solder side - SP_LN
|
||||
Pin 9 parts side - SP_RP (output splits into SP-BL and SP-BR, rear speaker(s))
|
||||
Pin 9 solder side - SP_RN
|
||||
|
||||
|
||||
Measurements
|
||||
------------
|
||||
@ -355,6 +390,7 @@ some other components. It will be documented at a later date.
|
||||
#include "machine/lpci.h"
|
||||
#include "machine/timekpr.h"
|
||||
#include "machine/timer.h"
|
||||
#include "sound/dmadac.h"
|
||||
#include "video/voodoo_banshee.h"
|
||||
#include "emupal.h"
|
||||
#include "screen.h"
|
||||
@ -385,7 +421,8 @@ public:
|
||||
m_workram(*this, "workram"),
|
||||
m_ds2430_rom(*this, "ds2430"),
|
||||
m_io_ports(*this, "IN%u", 0U),
|
||||
m_io_ppp_sensors(*this, "SENSOR%u", 1U)
|
||||
m_io_ppp_sensors(*this, "SENSOR%u", 1U),
|
||||
m_dmadac(*this, { "dacr", "dacl" })
|
||||
{
|
||||
}
|
||||
|
||||
@ -395,7 +432,6 @@ public:
|
||||
void init_viper();
|
||||
void init_vipercf();
|
||||
void init_viperhd();
|
||||
void init_viperppp();
|
||||
|
||||
DECLARE_READ_LINE_MEMBER(ds2430_unk_r);
|
||||
|
||||
@ -458,6 +494,10 @@ private:
|
||||
uint16_t m_unk_serial_data_r;
|
||||
uint8_t m_unk_serial_regs[0x80];
|
||||
uint64_t m_e00008_data;
|
||||
uint32_t m_sound_buffer_offset;
|
||||
bool m_sound_irq_enabled;
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(sound_timer_callback);
|
||||
|
||||
// MPC8240 EPIC, to be device-ified
|
||||
enum
|
||||
@ -574,6 +614,7 @@ private:
|
||||
required_region_ptr<uint8_t> m_ds2430_rom;
|
||||
required_ioport_array<8> m_io_ports;
|
||||
optional_ioport_array<4> m_io_ppp_sensors;
|
||||
required_device_array<dmadac_sound_device, 2> m_dmadac;
|
||||
|
||||
uint32_t mpc8240_pci_r(int function, int reg, uint32_t mem_mask);
|
||||
void mpc8240_pci_w(int function, int reg, uint32_t data, uint32_t mem_mask);
|
||||
@ -2074,7 +2115,8 @@ void viper_state::viper_map(address_map &map)
|
||||
map(0xffe00008, 0xffe0000f).rw(FUNC(viper_state::e00008_r), FUNC(viper_state::e00008_w));
|
||||
map(0xffe08000, 0xffe08007).noprw();
|
||||
map(0xffe10000, 0xffe10007).r(FUNC(viper_state::input_r));
|
||||
map(0xffe28000, 0xffe28007).nopw(); // ppp2nd lamps
|
||||
map(0xffe28000, 0xffe28007).nopw(); // ppp2nd leds
|
||||
map(0xffe28008, 0xffe2801f).nopw(); // boxingm reads and writes here to read the pad sensor values
|
||||
map(0xffe30000, 0xffe31fff).rw("m48t58", FUNC(timekeeper_device::read), FUNC(timekeeper_device::write));
|
||||
map(0xffe40000, 0xffe4000f).noprw();
|
||||
map(0xffe50000, 0xffe50007).w(FUNC(viper_state::unk2_w));
|
||||
@ -2084,12 +2126,14 @@ void viper_state::viper_map(address_map &map)
|
||||
map(0xffe88000, 0xffe88007).w(FUNC(viper_state::unk1b_w));
|
||||
map(0xffe98000, 0xffe98007).noprw();
|
||||
map(0xffe9a000, 0xffe9bfff).ram(); // World Combat uses this
|
||||
map(0xffea0000, 0xffea0007).noprw(); // Gun sensor? Read heavily by p9112
|
||||
map(0xfff00000, 0xfff3ffff).rom().region("user1", 0); // Boot ROM
|
||||
}
|
||||
|
||||
void viper_state::viper_ppp_map(address_map &map)
|
||||
{
|
||||
viper_map(map);
|
||||
map(0xff400108, 0xff40012f).nopw(); // ppp2nd lamps
|
||||
map(0xff400200, 0xff40023f).r(FUNC(viper_state::ppp_sensor_r));
|
||||
}
|
||||
|
||||
@ -2114,10 +2158,10 @@ static INPUT_PORTS_START( viper )
|
||||
PORT_DIPNAME( 0x02, 0x02, "DIP3" ) PORT_DIPLOCATION("SW:3")
|
||||
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x04, 0x00, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW:2")
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( Yes ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
|
||||
PORT_DIPNAME( 0x08, 0x00, "DIP1" ) PORT_DIPLOCATION("SW:1")
|
||||
PORT_DIPNAME( 0x04, 0x04, "DIP2" ) PORT_DIPLOCATION("SW:2")
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x08, 0x08, "DIP1" ) PORT_DIPLOCATION("SW:1")
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
|
||||
@ -2127,7 +2171,7 @@ static INPUT_PORTS_START( viper )
|
||||
|
||||
PORT_START("IN3")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 )
|
||||
PORT_SERVICE_NO_TOGGLE( 0x02, IP_ACTIVE_LOW ) /* Test Button */
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Test Button")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
|
||||
@ -2229,6 +2273,14 @@ INPUT_PORTS_END
|
||||
INPUT_PORTS_START( thrild2 )
|
||||
PORT_INCLUDE( viper )
|
||||
|
||||
PORT_MODIFY("IN2")
|
||||
PORT_DIPNAME( 0x04, 0x00, "Calibrate Controls On Boot" ) PORT_DIPLOCATION("SW:2") // Game crashes during boot when this is on
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( Yes ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
|
||||
PORT_DIPNAME( 0x08, 0x00, "Memory Card Check On Boot" ) PORT_DIPLOCATION("SW:1")
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
|
||||
PORT_MODIFY("IN3")
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Shift Down")
|
||||
|
||||
@ -2256,10 +2308,15 @@ INPUT_PORTS_END
|
||||
INPUT_PORTS_START( boxingm )
|
||||
PORT_INCLUDE( viper )
|
||||
|
||||
PORT_MODIFY("IN2")
|
||||
PORT_DIPNAME( 0x04, 0x04, "Calibrate Pads On Boot" ) PORT_DIPLOCATION("SW:2")
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( Yes ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
|
||||
|
||||
PORT_MODIFY("IN4")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("BodyPad L")
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Select R")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Select L")
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Select R")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("BodyPad L")
|
||||
|
||||
PORT_MODIFY("IN5")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("BodyPad R")
|
||||
@ -2283,15 +2340,88 @@ INPUT_PORTS_END
|
||||
INPUT_PORTS_START( p911 )
|
||||
PORT_INCLUDE( viper )
|
||||
|
||||
PORT_MODIFY("IN2")
|
||||
PORT_DIPNAME( 0x04, 0x00, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW:2")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( No ) )
|
||||
PORT_DIPNAME( 0x08, 0x00, "Memory Card Check On Boot" ) PORT_DIPLOCATION("SW:1")
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
|
||||
PORT_MODIFY("IN4")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Gun Trigger")
|
||||
|
||||
PORT_MODIFY("IN5")
|
||||
// one of these is P2 SHT2 (checks and fails serial if pressed)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) // P2 SHT2 (checks and fails serial if pressed)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
INPUT_PORTS_END
|
||||
|
||||
INPUT_PORTS_START( mfightc )
|
||||
PORT_INCLUDE( viper )
|
||||
|
||||
PORT_MODIFY("IN2")
|
||||
PORT_DIPNAME( 0x01, 0x00, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW:2")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
|
||||
PORT_DIPSETTING( 0x01, DEF_STR( No ) )
|
||||
|
||||
PORT_MODIFY("IN4")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // If off, will get stuck after RTC OK
|
||||
|
||||
PORT_MODIFY("IN5")
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) // if off tries to check UART
|
||||
INPUT_PORTS_END
|
||||
|
||||
INPUT_PORTS_START( mocapglf )
|
||||
PORT_INCLUDE( viper )
|
||||
|
||||
PORT_MODIFY("IN4")
|
||||
PORT_DIPNAME( 0x40, 0x40, "Show Diagnostics On Boot" ) // Shows UART status, lamp status, and accelerometer values
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
|
||||
PORT_DIPSETTING( 0x40, DEF_STR( No ) )
|
||||
|
||||
INPUT_PORTS_END
|
||||
|
||||
INPUT_PORTS_START( mocapb )
|
||||
PORT_INCLUDE( viper )
|
||||
|
||||
PORT_MODIFY("IN2")
|
||||
PORT_DIPNAME( 0x08, 0x00, "Memory Card Check On Boot" ) PORT_DIPLOCATION("SW:1")
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
|
||||
PORT_MODIFY("IN4")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Left Button")
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Right Button")
|
||||
|
||||
PORT_MODIFY("IN5")
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) // P2 SHT2 (checks and fails serial if pressed)
|
||||
INPUT_PORTS_END
|
||||
|
||||
INPUT_PORTS_START( sscopefh )
|
||||
PORT_INCLUDE( viper )
|
||||
|
||||
PORT_MODIFY("IN2")
|
||||
PORT_DIPNAME( 0x04, 0x00, "DIP2" ) PORT_DIPLOCATION("SW:2") // Without this switched on, the screen will be static
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x08, 0x00, "Memory Card Check On Boot" ) PORT_DIPLOCATION("SW:1")
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
|
||||
PORT_MODIFY("IN3")
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Refill Key")
|
||||
|
||||
PORT_MODIFY("IN4")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_NAME("Credit 2 Pounds") // Currency probably changes between regions
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_NAME("Credit 1 Pound") // Can be used in refill mode to insert coins into the hopper
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN5 ) PORT_NAME("Credit 0.50 Pounds")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Gun Trigger")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN6 ) PORT_NAME("Credit 0.20 Pounds")
|
||||
|
||||
PORT_MODIFY("IN5")
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) // P2 SHT2 (checks and fails serial if pressed)
|
||||
INPUT_PORTS_END
|
||||
|
||||
INPUT_PORTS_START( tsurugi )
|
||||
PORT_INCLUDE( viper )
|
||||
|
||||
@ -2304,6 +2434,58 @@ INPUT_PORTS_START( tsurugi )
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) // sensor grip (1) horizontal (0) vertical
|
||||
INPUT_PORTS_END
|
||||
|
||||
INPUT_PORTS_START( wcombat )
|
||||
PORT_INCLUDE( viper )
|
||||
|
||||
PORT_MODIFY("IN2")
|
||||
PORT_DIPNAME( 0x01, 0x00, "DIP4" ) PORT_DIPLOCATION("SW:4") // Skip device check? wcombatu is playable when this is set
|
||||
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW:2")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( No ) )
|
||||
PORT_DIPNAME( 0x08, 0x00, "Memory Card Check On Boot" ) PORT_DIPLOCATION("SW:1")
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
|
||||
PORT_MODIFY("IN3")
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
|
||||
|
||||
PORT_MODIFY("IN4")
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // X flip screen
|
||||
INPUT_PORTS_END
|
||||
|
||||
INPUT_PORTS_START( xtrial )
|
||||
PORT_INCLUDE( viper )
|
||||
|
||||
PORT_MODIFY("IN2")
|
||||
PORT_DIPNAME( 0x04, 0x00, "Calibrate Controls On Boot" ) PORT_DIPLOCATION("SW:2") // Game crashes during boot when this is on
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( Yes ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
|
||||
PORT_DIPNAME( 0x08, 0x00, "Memory Card Check On Boot" ) PORT_DIPLOCATION("SW:1") // Crashes at 45% when card checks are enabled
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
INPUT_PORTS_END
|
||||
|
||||
INPUT_PORTS_START( code1d )
|
||||
PORT_INCLUDE( viper )
|
||||
|
||||
PORT_MODIFY("IN2")
|
||||
PORT_DIPNAME( 0x01, 0x00, "DIP4" ) PORT_DIPLOCATION("SW:4") // Unknown, but without this set the game won't display anything besides a blue screen
|
||||
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x04, 0x00, "Calibrate Controls On Boot" ) PORT_DIPLOCATION("SW:2") // Game crashes during boot when this is on
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( Yes ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
|
||||
PORT_DIPNAME( 0x08, 0x00, "Memory Card Check On Boot" ) PORT_DIPLOCATION("SW:1")
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
|
||||
PORT_MODIFY("IN4")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Action Button")
|
||||
|
||||
INPUT_PORTS_END
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
INTERRUPT_GEN_MEMBER(viper_state::viper_vblank)
|
||||
@ -2323,8 +2505,37 @@ WRITE_LINE_MEMBER(viper_state::voodoo_vblank)
|
||||
|
||||
WRITE_LINE_MEMBER(viper_state::voodoo_pciint)
|
||||
{
|
||||
if (state)
|
||||
if (state) {
|
||||
// This is a hack.
|
||||
// There's no obvious (to me) trigger for when it's safe to start the audio interrupts, but after testing all of the games that can boot, it's safe to start audio interrupts once pciint is triggering.
|
||||
m_sound_irq_enabled = true;
|
||||
|
||||
mpc8240_interrupt(MPC8240_IRQ4);
|
||||
}
|
||||
}
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(viper_state::sound_timer_callback)
|
||||
{
|
||||
if (!m_sound_irq_enabled) {
|
||||
// If IRQ3 is triggered too soon into the boot process then it'll freeze on the blue boot screen.
|
||||
return;
|
||||
}
|
||||
|
||||
mpc8240_interrupt(MPC8240_IRQ3);
|
||||
|
||||
// Get samples from memory
|
||||
int32_t* samplePtr = (int32_t*)(m_workram + (m_sound_buffer_offset >> 3));
|
||||
for (int i = 0; i < 2; i++) {
|
||||
m_dmadac[i]->transfer(
|
||||
i,
|
||||
1,
|
||||
2,
|
||||
0x800 / 4 / 2, // Each buffer is 0x800 bytes in size, containing stereo 32-bit audio
|
||||
samplePtr
|
||||
);
|
||||
}
|
||||
|
||||
m_sound_buffer_offset ^= 0x800;
|
||||
}
|
||||
|
||||
void viper_state::machine_start()
|
||||
@ -2346,6 +2557,8 @@ void viper_state::machine_start()
|
||||
save_item(NAME(m_unk_serial_data));
|
||||
save_item(NAME(m_unk_serial_data_r));
|
||||
save_item(NAME(m_unk_serial_regs));
|
||||
save_item(NAME(m_sound_buffer_offset));
|
||||
save_item(NAME(m_sound_irq_enabled));
|
||||
|
||||
save_item(NAME(m_ds2430_unk_status));
|
||||
save_item(NAME(m_ds2430_data));
|
||||
@ -2398,6 +2611,15 @@ void viper_state::machine_reset()
|
||||
identify_device[51] = 0x0200; /* 51: PIO data transfer cycle timing mode */
|
||||
identify_device[67] = 0x00f0; /* 67: minimum PIO transfer cycle time without flow control */
|
||||
|
||||
m_sound_buffer_offset = 0xfff800; // The games swap between 0xfff800 and 0xfff000 every IRQ3 call
|
||||
m_sound_irq_enabled = false;
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
m_dmadac[i]->initialize_state();
|
||||
m_dmadac[i]->set_frequency(44100);
|
||||
m_dmadac[i]->enable(1);
|
||||
}
|
||||
|
||||
m_ds2430_unk_status = 1;
|
||||
}
|
||||
|
||||
@ -2439,8 +2661,16 @@ void viper_state::viper(machine_config &config)
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "lspeaker").front_left();
|
||||
SPEAKER(config, "rspeaker").front_right();
|
||||
DMADAC(config, "dacl").add_route(ALL_OUTPUTS, "lspeaker", 1.0);
|
||||
DMADAC(config, "dacr").add_route(ALL_OUTPUTS, "rspeaker", 1.0);
|
||||
|
||||
M48T58(config, "m48t58", 0);
|
||||
|
||||
// Each IRQ3 will update the data buffers with 256 samples, and the playback rate is always 44100hz.
|
||||
// The frequency is picked such that the DMADAC buffer should never overflow or underflow.
|
||||
// Note that adjusting this value has gameplay consequences for ppp2nd: the gameplay's note and animation timings are tied directly to values updated using IRQ3,
|
||||
// so having IRQ3 trigger too quickly or too slowly will mean that the gameplay will either be too fast or too slow.
|
||||
TIMER(config, "sound_timer").configure_periodic(FUNC(viper_state::sound_timer_callback), attotime::from_hz(44100.0 / 256));
|
||||
}
|
||||
|
||||
void viper_state::viper_ppp(machine_config &config)
|
||||
@ -2678,23 +2908,36 @@ ROM_START(p911) //*
|
||||
ROM_LOAD("ds2430.u3", 0x00, 0x28, BAD_DUMP CRC(f1511505) SHA1(ed7cd9b2763b3e377df9663943160f9871f65105))
|
||||
|
||||
ROM_REGION(0x2000, "m48t58", ROMREGION_ERASE00) /* M48T58 Timekeeper NVRAM */
|
||||
ROM_LOAD("a00uad_nvram.u39", 0x000000, 0x2000, CRC(cca056ca) SHA1(de1a00d84c1311d48bbe6d24f5b36e22ecf5e85a))
|
||||
ROM_LOAD("a00aae_nvram.u39", 0x000000, 0x2000, BAD_DUMP CRC(9ecd75a3) SHA1(f9db35b91d4ef7fd61f21382fc62a6428d0b0c52))
|
||||
|
||||
DISK_REGION( "ata:0:hdd:image" )
|
||||
DISK_IMAGE( "a00uad02", 0, SHA1(6acb8dc41920e7025b87034a3a62b185ef0109d9) )
|
||||
DISK_IMAGE( "a00uad02", 0, SHA1(6acb8dc41920e7025b87034a3a62b185ef0109d9) ) // Actually is AAE/KAE
|
||||
ROM_END
|
||||
|
||||
ROM_START(p911uc) //*
|
||||
ROM_START(p911k) //*
|
||||
VIPER_BIOS
|
||||
|
||||
ROM_REGION(0x28, "ds2430", ROMREGION_ERASE00) /* DS2430 */
|
||||
ROM_LOAD("ds2430.u3", 0x00, 0x28, BAD_DUMP CRC(f1511505) SHA1(ed7cd9b2763b3e377df9663943160f9871f65105))
|
||||
|
||||
ROM_REGION(0x2000, "m48t58", ROMREGION_ERASE00) /* M48T58 Timekeeper NVRAM */
|
||||
ROM_LOAD("a00uac_nvram.u39", 0x000000, 0x2000, NO_DUMP )
|
||||
ROM_LOAD("a00kae_nvram.u39", 0x000000, 0x2000, BAD_DUMP CRC(157e0361) SHA1(a4e301f1c73d148b3c18c9c02b67692ffdd6a664))
|
||||
|
||||
DISK_REGION( "ata:0:hdd:image" )
|
||||
DISK_IMAGE( "a00uac02", 0, SHA1(b268789416dbf8886118a634b911f0ee254970de) )
|
||||
DISK_IMAGE( "a00uad02", 0, SHA1(6acb8dc41920e7025b87034a3a62b185ef0109d9) ) // Actually is AAE/KAE
|
||||
ROM_END
|
||||
|
||||
ROM_START(p911ac) //*
|
||||
VIPER_BIOS
|
||||
|
||||
ROM_REGION(0x28, "ds2430", ROMREGION_ERASE00) /* DS2430 */
|
||||
ROM_LOAD("ds2430.u3", 0x00, 0x28, BAD_DUMP CRC(f1511505) SHA1(ed7cd9b2763b3e377df9663943160f9871f65105))
|
||||
|
||||
ROM_REGION(0x2000, "m48t58", ROMREGION_ERASE00) /* M48T58 Timekeeper NVRAM */
|
||||
ROM_LOAD("a00aac_nvram.u39", 0x000000, 0x2000, BAD_DUMP CRC(d65742ce) SHA1(20055c0b701c62b0f01cfe619d07bd9532cc3b45))
|
||||
|
||||
DISK_REGION( "ata:0:hdd:image" )
|
||||
DISK_IMAGE( "a00uac02", 0, SHA1(b268789416dbf8886118a634b911f0ee254970de) ) // a00uac02 and a00kac02 are the same image
|
||||
ROM_END
|
||||
|
||||
ROM_START(p911kc) //*
|
||||
@ -2710,17 +2953,30 @@ ROM_START(p911kc) //*
|
||||
DISK_IMAGE( "a00kac02", 0, SHA1(b268789416dbf8886118a634b911f0ee254970de) )
|
||||
ROM_END
|
||||
|
||||
ROM_START(p911e) //*
|
||||
ROM_START(p911ud) //*
|
||||
VIPER_BIOS
|
||||
|
||||
ROM_REGION(0x28, "ds2430", ROMREGION_ERASE00) /* DS2430 */
|
||||
ROM_LOAD("ds2430.u3", 0x00, 0x28, BAD_DUMP CRC(f1511505) SHA1(ed7cd9b2763b3e377df9663943160f9871f65105))
|
||||
|
||||
ROM_REGION(0x2000, "m48t58", ROMREGION_ERASE00) /* M48T58 Timekeeper NVRAM */
|
||||
ROM_LOAD("a00eaa_nvram.u39", 0x000000, 0x2000, CRC(4f3497b6) SHA1(3045c54f98dff92cdf3a1fc0cd4c76ba82d632d7) )
|
||||
ROM_LOAD("a00uad_nvram.u39", 0x000000, 0x2000, BAD_DUMP CRC(c4f44a70) SHA1(d7946606bf72ca7a6f391c4832205ae6fb1ebd95) )
|
||||
|
||||
DISK_REGION( "ata:0:hdd:image" )
|
||||
DISK_IMAGE( "a00eaa02", 0, SHA1(81565a2dce2e2b0a7927078a784354948af1f87c) )
|
||||
DISK_IMAGE( "a00eaa02", 0, SHA1(81565a2dce2e2b0a7927078a784354948af1f87c) ) // Is actually UAD/EAD
|
||||
ROM_END
|
||||
|
||||
ROM_START(p911ed) //*
|
||||
VIPER_BIOS
|
||||
|
||||
ROM_REGION(0x28, "ds2430", ROMREGION_ERASE00) /* DS2430 */
|
||||
ROM_LOAD("ds2430.u3", 0x00, 0x28, BAD_DUMP CRC(f1511505) SHA1(ed7cd9b2763b3e377df9663943160f9871f65105))
|
||||
|
||||
ROM_REGION(0x2000, "m48t58", ROMREGION_ERASE00) /* M48T58 Timekeeper NVRAM */
|
||||
ROM_LOAD("a00ead_nvram.u39", 0x000000, 0x2000, BAD_DUMP CRC(0314fc96) SHA1(cbf421bb37f0a122944fbccf8f4c80380c89e094) )
|
||||
|
||||
DISK_REGION( "ata:0:hdd:image" )
|
||||
DISK_IMAGE( "a00eaa02", 0, SHA1(81565a2dce2e2b0a7927078a784354948af1f87c) ) // Is actually UAD/EAD
|
||||
ROM_END
|
||||
|
||||
ROM_START(p911ea)
|
||||
@ -2903,7 +3159,7 @@ ROM_START(tsurugij) //*
|
||||
ROM_LOAD("ds2430.u3", 0x00, 0x28, BAD_DUMP CRC(f1511505) SHA1(ed7cd9b2763b3e377df9663943160f9871f65105))
|
||||
|
||||
ROM_REGION(0x2000, "m48t58", ROMREGION_ERASE00) /* M48T58 Timekeeper NVRAM */
|
||||
ROM_LOAD("a30jac_nvram.u39", 0x00000, 0x2000, NO_DUMP )
|
||||
ROM_LOAD("a30jac_nvram.u39", 0x00000, 0x2000, BAD_DUMP CRC(0e2c0e61) SHA1(d77670e214f618652e67fa91e644750894a0c5c7))
|
||||
|
||||
DISK_REGION( "ata:0:hdd:image" )
|
||||
DISK_IMAGE( "a30c02", 0, SHA1(533b5669b00884a800df9ba29651777a76559862) )
|
||||
@ -2919,7 +3175,7 @@ ROM_START(tsurugie)
|
||||
ROM_LOAD("nvram.u39", 0x000000, 0x2000, NO_DUMP )
|
||||
|
||||
DISK_REGION( "ata:0:hdd:image" )
|
||||
DISK_IMAGE( "a30eab02", 0, SHA1(fcc5b69f89e246f26ca4b8546cc409d3488bbdd9) )
|
||||
DISK_IMAGE( "a30eab02", 0, SHA1(fcc5b69f89e246f26ca4b8546cc409d3488bbdd9) ) // Incomplete dump? Is half the size of the other dumps
|
||||
ROM_END
|
||||
|
||||
/* This CF card has sticker C22D02 */
|
||||
@ -3074,7 +3330,7 @@ ROM_START(mfightcc) //*
|
||||
ROM_LOAD("ds2430.u3", 0x00, 0x28, BAD_DUMP CRC(f1511505) SHA1(ed7cd9b2763b3e377df9663943160f9871f65105))
|
||||
|
||||
ROM_REGION(0x2000, "m48t58", ROMREGION_ERASE00) /* M48T58 Timekeeper NVRAM */
|
||||
ROM_LOAD("c09jac_nvram.u39", 0x00000, 0x2000, NO_DUMP )
|
||||
ROM_LOAD("c09jac_nvram.u39", 0x00000, 0x2000, BAD_DUMP CRC(2d100e2b) SHA1(209764130ec3279fe17fe98de6cd0780b80c148f))
|
||||
|
||||
DISK_REGION( "ata:0:hdd:image" )
|
||||
DISK_IMAGE( "c09c04", 0, SHA1(bf5f7447d74399d34edd4eb6dfcca7f6fc2154f2) )
|
||||
@ -3089,44 +3345,46 @@ ROM_END
|
||||
/* Viper BIOS */
|
||||
GAME(1999, kviper, 0, viper, viper, viper_state, init_viper, ROT0, "Konami", "Konami Viper BIOS", MACHINE_IS_BIOS_ROOT)
|
||||
|
||||
GAME(2001, ppp2nd, kviper, viper_ppp, ppp2nd, viper_state, init_viperhd, ROT0, "Konami", "ParaParaParadise 2nd Mix (JAA)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, ppp2nda, ppp2nd, viper_ppp, ppp2nd, viper_state, init_viperhd, ROT0, "Konami", "ParaParaParadise 2nd Mix (AAA)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, ppp2nd, kviper, viper_ppp, ppp2nd, viper_state, init_viperhd, ROT0, "Konami", "ParaParaParadise 2nd Mix (JAA)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, ppp2nda, ppp2nd, viper_ppp, ppp2nd, viper_state, init_viperhd, ROT0, "Konami", "ParaParaParadise 2nd Mix (AAA)", MACHINE_NOT_WORKING)
|
||||
|
||||
GAME(2001, boxingm, kviper, viper, boxingm, viper_state, init_vipercf, ROT0, "Konami", "Boxing Mania: Ashita no Joe (ver JAA)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2000, code1d, kviper, viper, viper, viper_state, init_vipercf, ROT0, "Konami", "Code One Dispatch (ver D)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2000, code1db, code1d, viper, viper, viper_state, init_vipercf, ROT0, "Konami", "Code One Dispatch (ver B)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, gticlub2, kviper, viper, gticlub2, viper_state, init_vipercf, ROT0, "Konami", "GTI Club: Corso Italiano (ver JAB)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, gticlub2ea,gticlub2, viper, gticlub2ea, viper_state, init_vipercf, ROT0, "Konami", "GTI Club: Corso Italiano (ver EAA)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, jpark3, kviper, viper, jpark3, viper_state, init_vipercf, ROT0, "Konami", "Jurassic Park 3 (ver EBC)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, jpark3u, jpark3, viper, jpark3, viper_state, init_vipercf, ROT0, "Konami", "Jurassic Park 3 (ver UA)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, mocapglf, kviper, viper, viper, viper_state, init_vipercf, ROT90, "Konami", "Mocap Golf (ver UAA)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, mocapb, kviper, viper, viper, viper_state, init_vipercf, ROT90, "Konami", "Mocap Boxing (ver AAA)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, mocapbj, mocapb, viper, viper, viper_state, init_vipercf, ROT90, "Konami", "Mocap Boxing (ver JAA)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, p911, kviper, viper, p911, viper_state, init_vipercf, ROT90, "Konami", "Police 911 (ver UAD)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, p911uc, p911, viper, p911, viper_state, init_vipercf, ROT90, "Konami", "Police 911 (ver UAC)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, p911kc, p911, viper, p911, viper_state, init_vipercf, ROT90, "Konami", "Police 911 (ver KAC)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, p911e, p911, viper, p911, viper_state, init_vipercf, ROT90, "Konami", "Police 24/7 (ver EAA)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, p911ea, p911, viper, p911, viper_state, init_vipercf, ROT90, "Konami", "Police 24/7 (ver EAA, alt)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, p911j, p911, viper, p911, viper_state, init_vipercf, ROT90, "Konami", "Keisatsukan Shinjuku 24ji (ver JAC)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, p9112, kviper, viper, p911, viper_state, init_vipercf, ROT90, "Konami", "Police 911 2 (VER. UAA:B)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, sscopex, kviper, viper, viper, viper_state, init_vipercf, ROT0, "Konami", "Silent Scope EX (ver UAA)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, sogeki, sscopex, viper, viper, viper_state, init_vipercf, ROT0, "Konami", "Sogeki (ver JAA)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2002, sscopefh, kviper, viper, viper, viper_state, init_vipercf, ROT0, "Konami", "Silent Scope Fortune Hunter", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, thrild2, kviper, viper, thrild2, viper_state, init_vipercf, ROT0, "Konami", "Thrill Drive 2 (ver EBB)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, thrild2j, thrild2, viper, thrild2, viper_state, init_vipercf, ROT0, "Konami", "Thrill Drive 2 (ver JAA)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, thrild2a, thrild2, viper, thrild2, viper_state, init_vipercf, ROT0, "Konami", "Thrill Drive 2 (ver AAA)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, thrild2ab, thrild2, viper, thrild2, viper_state, init_vipercf, ROT0, "Konami", "Thrill Drive 2 (ver AAA, alt)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, thrild2ac, thrild2, viper, thrild2, viper_state, init_vipercf, ROT0, "Konami", "Thrill Drive 2 (ver AAA, alt 2)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, thrild2c, thrild2, viper, thrild2, viper_state, init_vipercf, ROT0, "Konami", "Thrill Drive 2 (ver EAA)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2002, tsurugi, kviper, viper, tsurugi, viper_state, init_vipercf, ROT0, "Konami", "Tsurugi (ver EAB)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2002, tsurugie, tsurugi, viper, tsurugi, viper_state, init_vipercf, ROT0, "Konami", "Tsurugi (ver EAB, alt)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2002, tsurugij, tsurugi, viper, tsurugi, viper_state, init_vipercf, ROT0, "Konami", "Tsurugi (ver JAC)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2002, wcombat, kviper, viper, viper, viper_state, init_vipercf, ROT0, "Konami", "World Combat (ver AAD:B)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2002, wcombatb, wcombat, viper, viper, viper_state, init_vipercf, ROT0, "Konami", "World Combat (ver AAD:B, alt)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2002, wcombatk, wcombat, viper, viper, viper_state, init_vipercf, ROT0, "Konami", "World Combat (ver KBC:B)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2002, wcombatu, wcombat, viper, viper, viper_state, init_vipercf, ROT0, "Konami", "World Combat / Warzaid (ver UCD:B)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2002, wcombatj, wcombat, viper, viper, viper_state, init_vipercf, ROT0, "Konami", "World Combat (ver JAA)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2002, xtrial, kviper, viper, viper, viper_state, init_vipercf, ROT0, "Konami", "Xtrial Racing (ver JAB)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2001, boxingm, kviper, viper, boxingm, viper_state, init_vipercf, ROT0, "Konami", "Boxing Mania: Ashita no Joe (ver JAA)", MACHINE_NOT_WORKING)
|
||||
GAME(2000, code1d, kviper, viper, code1d, viper_state, init_vipercf, ROT0, "Konami", "Code One Dispatch Ver 1.21 (ver UAD)", MACHINE_NOT_WORKING)
|
||||
GAME(2000, code1db, code1d, viper, code1d, viper_state, init_vipercf, ROT0, "Konami", "Code One Dispatch Ver 1.16 (ver UAB)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, gticlub2, kviper, viper, gticlub2, viper_state, init_vipercf, ROT0, "Konami", "GTI Club: Corso Italiano (ver JAB)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, gticlub2ea,gticlub2, viper, gticlub2ea, viper_state, init_vipercf, ROT0, "Konami", "GTI Club: Corso Italiano (ver EAA)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, jpark3, kviper, viper, jpark3, viper_state, init_vipercf, ROT0, "Konami", "Jurassic Park 3 (ver EBC)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, jpark3u, jpark3, viper, jpark3, viper_state, init_vipercf, ROT0, "Konami", "Jurassic Park 3 (ver UBC)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, mocapglf, kviper, viper, mocapglf, viper_state, init_vipercf, ROT90, "Konami", "Mocap Golf (ver UAA)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, mocapb, kviper, viper, mocapb, viper_state, init_vipercf, ROT90, "Konami", "Mocap Boxing (ver AAB)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, mocapbj, mocapb, viper, mocapb, viper_state, init_vipercf, ROT90, "Konami", "Mocap Boxing (ver JAA)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, p911, kviper, viper, p911, viper_state, init_vipercf, ROT90, "Konami", "Police 911 (ver AAE)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, p911k, p911, viper, p911, viper_state, init_vipercf, ROT90, "Konami", "Police 911 (ver KAE)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, p911ac, p911, viper, p911, viper_state, init_vipercf, ROT90, "Konami", "Police 911 (ver AAC)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, p911kc, p911, viper, p911, viper_state, init_vipercf, ROT90, "Konami", "Police 911 (ver KAC)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, p911ud, p911, viper, p911, viper_state, init_vipercf, ROT90, "Konami", "Police 24/7 (ver UAD)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, p911ed, p911, viper, p911, viper_state, init_vipercf, ROT90, "Konami", "Police 24/7 (ver EAD)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, p911ea, p911, viper, p911, viper_state, init_vipercf, ROT90, "Konami", "Police 24/7 (ver EAD, alt)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, p911j, p911, viper, p911, viper_state, init_vipercf, ROT90, "Konami", "Keisatsukan Shinjuku 24ji (ver JAE)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, p9112, kviper, viper, p911, viper_state, init_vipercf, ROT90, "Konami", "Police 911 2 (VER. UAA:B)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, sscopex, kviper, viper, viper, viper_state, init_vipercf, ROT0, "Konami", "Silent Scope EX (ver UAA)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, sogeki, sscopex, viper, viper, viper_state, init_vipercf, ROT0, "Konami", "Sogeki (ver JAA)", MACHINE_NOT_WORKING)
|
||||
GAME(2002, sscopefh, kviper, viper, sscopefh, viper_state, init_vipercf, ROT0, "Konami", "Silent Scope Fortune Hunter (ver EAA)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, thrild2, kviper, viper, thrild2, viper_state, init_vipercf, ROT0, "Konami", "Thrill Drive 2 (ver EBB)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, thrild2j, thrild2, viper, thrild2, viper_state, init_vipercf, ROT0, "Konami", "Thrill Drive 2 (ver JAA)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, thrild2a, thrild2, viper, thrild2, viper_state, init_vipercf, ROT0, "Konami", "Thrill Drive 2 (ver AAA)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, thrild2ab, thrild2, viper, thrild2, viper_state, init_vipercf, ROT0, "Konami", "Thrill Drive 2 (ver AAA, alt)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, thrild2ac, thrild2, viper, thrild2, viper_state, init_vipercf, ROT0, "Konami", "Thrill Drive 2 (ver AAA, alt 2)", MACHINE_NOT_WORKING)
|
||||
GAME(2001, thrild2c, thrild2, viper, thrild2, viper_state, init_vipercf, ROT0, "Konami", "Thrill Drive 2 (ver EAA)", MACHINE_NOT_WORKING)
|
||||
GAME(2002, tsurugi, kviper, viper, tsurugi, viper_state, init_vipercf, ROT0, "Konami", "Tsurugi (ver EAB)", MACHINE_NOT_WORKING)
|
||||
GAME(2002, tsurugie, tsurugi, viper, tsurugi, viper_state, init_vipercf, ROT0, "Konami", "Tsurugi (ver EAB, alt)", MACHINE_NOT_WORKING)
|
||||
GAME(2002, tsurugij, tsurugi, viper, tsurugi, viper_state, init_vipercf, ROT0, "Konami", "Tsurugi (ver JAC)", MACHINE_NOT_WORKING)
|
||||
GAME(2002, wcombat, kviper, viper, wcombat, viper_state, init_vipercf, ROT0, "Konami", "World Combat (ver AAD:B)", MACHINE_NOT_WORKING)
|
||||
GAME(2002, wcombatb, wcombat, viper, wcombat, viper_state, init_vipercf, ROT0, "Konami", "World Combat (ver AAD:B, alt)", MACHINE_NOT_WORKING)
|
||||
GAME(2002, wcombatk, wcombat, viper, wcombat, viper_state, init_vipercf, ROT0, "Konami", "World Combat (ver KBC:B)", MACHINE_NOT_WORKING)
|
||||
GAME(2002, wcombatu, wcombat, viper, wcombat, viper_state, init_vipercf, ROT0, "Konami", "World Combat / Warzaid (ver UCD:B)", MACHINE_NOT_WORKING)
|
||||
GAME(2002, wcombatj, wcombat, viper, wcombat, viper_state, init_vipercf, ROT0, "Konami", "World Combat (ver JAA)", MACHINE_NOT_WORKING)
|
||||
GAME(2002, xtrial, kviper, viper, xtrial, viper_state, init_vipercf, ROT0, "Konami", "Xtrial Racing (ver JAB)", MACHINE_NOT_WORKING)
|
||||
|
||||
GAME(2002, mfightc, kviper, viper, viper, viper_state, init_vipercf, ROT0, "Konami", "Mahjong Fight Club (ver JAD)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2002, mfightcc, mfightc, viper, viper, viper_state, init_vipercf, ROT0, "Konami", "Mahjong Fight Club (ver JAC)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
|
||||
GAME(2002, mfightc, kviper, viper, mfightc, viper_state, init_vipercf, ROT0, "Konami", "Mahjong Fight Club (ver JAD)", MACHINE_NOT_WORKING)
|
||||
GAME(2002, mfightcc, mfightc, viper, mfightc, viper_state, init_vipercf, ROT0, "Konami", "Mahjong Fight Club (ver JAC)", MACHINE_NOT_WORKING)
|
||||
|
@ -42095,11 +42095,13 @@ mocapbj // 2001
|
||||
mocapglf // 2001
|
||||
p911 // 2001
|
||||
p9112 // 2001
|
||||
p911e // 2001
|
||||
p911ac // 2001
|
||||
p911ea // 2001
|
||||
p911ed // 2001
|
||||
p911j // 2001
|
||||
p911k // 2001
|
||||
p911kc // 2001
|
||||
p911uc // 2001
|
||||
p911ud // 2001
|
||||
ppp2nd // 2001
|
||||
ppp2nda // 2001
|
||||
sogeki // 2001
|
||||
|
Loading…
Reference in New Issue
Block a user