mirror of
https://github.com/holub/mame
synced 2025-06-08 05:44:09 +03:00
vsystem: improve soundlatch timing where applicable
This commit is contained in:
parent
e273507f1d
commit
baddea6659
@ -5,7 +5,7 @@
|
|||||||
Suwa Seikosha (now Seiko Epson) SMC1102, SMC1112
|
Suwa Seikosha (now Seiko Epson) SMC1102, SMC1112
|
||||||
|
|
||||||
SMC1102 is a CMOS MCU based on TMS1100, keeping the same ALU and opcode mnemonics.
|
SMC1102 is a CMOS MCU based on TMS1100, keeping the same ALU and opcode mnemonics.
|
||||||
The stack(CALL/RETN) works a bit differently. They added a timer, interrupts,
|
The stack(CALL/RETN) works a bit differently. They also added a timer, interrupts,
|
||||||
and a built-in LCD controller.
|
and a built-in LCD controller.
|
||||||
|
|
||||||
In the USA, it was marketed by S-MOS Systems, an affiliate of Seiko Group.
|
In the USA, it was marketed by S-MOS Systems, an affiliate of Seiko Group.
|
||||||
@ -112,16 +112,16 @@ void smc1102_cpu_device::device_reset()
|
|||||||
m_timeout = false;
|
m_timeout = false;
|
||||||
|
|
||||||
// changed/added fixed instructions (mostly handled in op_extra)
|
// changed/added fixed instructions (mostly handled in op_extra)
|
||||||
m_fixed_decode[0x0a] = F_EXTRA;
|
m_fixed_decode[0x0a] = F_EXTRA; // TASR
|
||||||
m_fixed_decode[0x71] = F_EXTRA;
|
m_fixed_decode[0x71] = F_EXTRA; // HALT
|
||||||
m_fixed_decode[0x74] = F_EXTRA;
|
m_fixed_decode[0x74] = F_EXTRA; // INTEN
|
||||||
m_fixed_decode[0x75] = F_EXTRA;
|
m_fixed_decode[0x75] = F_EXTRA; // INTDIS
|
||||||
m_fixed_decode[0x76] = F_RETN;
|
m_fixed_decode[0x76] = F_RETN; // INTRTN
|
||||||
m_fixed_decode[0x78] = F_EXTRA;
|
m_fixed_decode[0x78] = F_EXTRA; // SELIN
|
||||||
m_fixed_decode[0x7b] = F_EXTRA;
|
m_fixed_decode[0x7b] = F_EXTRA; // TMSET
|
||||||
|
|
||||||
m_fixed_decode[0x72] = m_fixed_decode[0x73] = F_EXTRA;
|
m_fixed_decode[0x72] = m_fixed_decode[0x73] = F_EXTRA; // TSG
|
||||||
m_fixed_decode[0x7c] = m_fixed_decode[0x7d] = F_EXTRA;
|
m_fixed_decode[0x7c] = m_fixed_decode[0x7d] = F_EXTRA; // "
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 smc1102_cpu_device::decode_micro(offs_t offset)
|
u32 smc1102_cpu_device::decode_micro(offs_t offset)
|
||||||
|
@ -129,10 +129,10 @@ protected:
|
|||||||
private:
|
private:
|
||||||
|
|
||||||
void pic_register_state();
|
void pic_register_state();
|
||||||
TIMER_CALLBACK_MEMBER( reset_timer );
|
TIMER_CALLBACK_MEMBER(reset_timer);
|
||||||
|
|
||||||
uint16_t m_latch = 0;
|
uint16_t m_latch = 0;
|
||||||
attotime m_latch_expire_time{};
|
attotime m_latch_expire_time;
|
||||||
uint8_t m_state = 0;
|
uint8_t m_state = 0;
|
||||||
uint8_t m_index = 0;
|
uint8_t m_index = 0;
|
||||||
uint8_t m_total = 0;
|
uint8_t m_total = 0;
|
||||||
|
@ -358,6 +358,7 @@ void midzeus2_state::disk_asic_w(offs_t offset, uint32_t data)
|
|||||||
* Disk ASIC JR registers
|
* Disk ASIC JR registers
|
||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
uint32_t midzeus_state::disk_asic_jr_r(offs_t offset)
|
uint32_t midzeus_state::disk_asic_jr_r(offs_t offset)
|
||||||
{
|
{
|
||||||
uint32_t retVal = m_disk_asic_jr[offset];
|
uint32_t retVal = m_disk_asic_jr[offset];
|
||||||
@ -366,19 +367,21 @@ uint32_t midzeus_state::disk_asic_jr_r(offs_t offset)
|
|||||||
// miscellaneous hw wait states
|
// miscellaneous hw wait states
|
||||||
case 1:
|
case 1:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* CMOS/ZPRAM write enable; only low bit is used */
|
/* CMOS/ZPRAM write enable; only low bit is used */
|
||||||
case 2:
|
case 2:
|
||||||
|
//return m_disk_asic_jr[offset] | ~1;
|
||||||
break;
|
break;
|
||||||
// return m_disk_asic_jr[offset] | ~1;
|
|
||||||
|
|
||||||
/* reset status; bit 0 is watchdog reset; mk4/invasn/thegrid read at startup; invasn freaks if it is 1 at startup */
|
/* reset status; bit 0 is watchdog reset; mk4/invasn/thegrid read at startup; invasn freaks if it is 1 at startup */
|
||||||
case 3:
|
case 3:
|
||||||
|
//return m_disk_asic_jr[offset] | ~1;
|
||||||
break;
|
break;
|
||||||
// return m_disk_asic_jr[offset] | ~1;
|
|
||||||
|
|
||||||
/* ROM bank selection on Zeus 2; two bits are used */
|
/* ROM bank selection on Zeus 2; two bits are used */
|
||||||
case 5:
|
case 5:
|
||||||
// return m_disk_asic_jr[offset] | ~3;
|
//return m_disk_asic_jr[offset] | ~3;
|
||||||
|
break;
|
||||||
|
|
||||||
/* disk asic jr id; crusnexo reads at startup: if (val & 0xf0) == 0xa0 it affects */
|
/* disk asic jr id; crusnexo reads at startup: if (val & 0xf0) == 0xa0 it affects */
|
||||||
/* how the Zeus is used (reg 0x5d is set to 0x54580006) */
|
/* how the Zeus is used (reg 0x5d is set to 0x54580006) */
|
||||||
@ -478,29 +481,27 @@ uint32_t midzeus2_state::crusnexo_leds_r(offs_t offset)
|
|||||||
|
|
||||||
void midzeus2_state::crusnexo_leds_w(offs_t offset, uint32_t data)
|
void midzeus2_state::crusnexo_leds_w(offs_t offset, uint32_t data)
|
||||||
{
|
{
|
||||||
int bit, led;
|
|
||||||
|
|
||||||
switch (offset)
|
switch (offset)
|
||||||
{
|
{
|
||||||
case 0: /* unknown purpose */
|
case 0: /* unknown purpose */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1: /* controls lamps */
|
case 1: /* controls lamps */
|
||||||
for (bit = 0; bit < 8; bit++)
|
for (int bit = 0; bit < 8; bit++)
|
||||||
m_lamps[bit] = BIT(data, bit);
|
m_lamps[bit] = BIT(data, bit);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: /* sets state of selected LEDs */
|
case 2: /* sets state of selected LEDs */
|
||||||
|
|
||||||
/* selection bits 4-6 select the 3 7-segment LEDs */
|
/* selection bits 4-6 select the 3 7-segment LEDs */
|
||||||
for (bit = 4; bit < 7; bit++)
|
for (int bit = 4; bit < 7; bit++)
|
||||||
if ((m_crusnexo_leds_select & (1 << bit)) == 0)
|
if ((m_crusnexo_leds_select & (1 << bit)) == 0)
|
||||||
m_digits[bit] = ~data & 0xff;
|
m_digits[bit] = ~data & 0xff;
|
||||||
|
|
||||||
/* selection bits 0-2 select the tachometer LEDs */
|
/* selection bits 0-2 select the tachometer LEDs */
|
||||||
for (bit = 0; bit < 3; bit++)
|
for (int bit = 0; bit < 3; bit++)
|
||||||
if ((m_crusnexo_leds_select & (1 << bit)) == 0)
|
if ((m_crusnexo_leds_select & (1 << bit)) == 0)
|
||||||
for (led = 0; led < 8; led++)
|
for (int led = 0; led < 8; led++)
|
||||||
m_leds[bit * 8 + led] = BIT(~data, led);
|
m_leds[bit * 8 + led] = BIT(~data, led);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -22,8 +22,8 @@
|
|||||||
|
|
||||||
struct mz_poly_extra_data
|
struct mz_poly_extra_data
|
||||||
{
|
{
|
||||||
const void * palbase;
|
const void *palbase;
|
||||||
const void * texbase;
|
const void *texbase;
|
||||||
uint16_t solidcolor = 0;
|
uint16_t solidcolor = 0;
|
||||||
uint16_t voffset = 0;
|
uint16_t voffset = 0;
|
||||||
int16_t zoffset = 0;
|
int16_t zoffset = 0;
|
||||||
@ -65,8 +65,8 @@ class midzeus_state : public driver_device
|
|||||||
friend class midzeus_renderer;
|
friend class midzeus_renderer;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
midzeus_state(const machine_config &mconfig, device_type type, const char *tag)
|
midzeus_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||||
: driver_device(mconfig, type, tag),
|
driver_device(mconfig, type, tag),
|
||||||
m_nvram(*this, "nvram"),
|
m_nvram(*this, "nvram"),
|
||||||
m_ram_base(*this, "ram_base"),
|
m_ram_base(*this, "ram_base"),
|
||||||
m_tms32031_control(*this, "tms32031_ctl"),
|
m_tms32031_control(*this, "tms32031_ctl"),
|
||||||
|
@ -12,10 +12,11 @@
|
|||||||
|
|
||||||
#include "cpu/tms34010/tms34010.h"
|
#include "cpu/tms34010/tms34010.h"
|
||||||
#include "cpu/mcs51/mcs51.h"
|
#include "cpu/mcs51/mcs51.h"
|
||||||
#include "sound/upd7759.h"
|
|
||||||
#include "machine/adc0844.h"
|
#include "machine/adc0844.h"
|
||||||
#include "machine/mc68681.h"
|
#include "machine/mc68681.h"
|
||||||
#include "machine/scn_pci.h"
|
#include "machine/scn_pci.h"
|
||||||
|
#include "sound/upd7759.h"
|
||||||
|
|
||||||
#include "emupal.h"
|
#include "emupal.h"
|
||||||
|
|
||||||
|
|
||||||
@ -36,6 +37,7 @@ public:
|
|||||||
m_upd7759(*this, "upd7759"),
|
m_upd7759(*this, "upd7759"),
|
||||||
m_drmath(*this, "drmath"),
|
m_drmath(*this, "drmath"),
|
||||||
m_vgb(*this, "vgb"),
|
m_vgb(*this, "vgb"),
|
||||||
|
m_vgb_uart(*this, "uart"),
|
||||||
m_palette(*this, "palette"),
|
m_palette(*this, "palette"),
|
||||||
m_duart(*this, "duart"),
|
m_duart(*this, "duart"),
|
||||||
m_noise_1(*this, "noise_1"),
|
m_noise_1(*this, "noise_1"),
|
||||||
@ -48,8 +50,7 @@ public:
|
|||||||
m_joystick_y(*this, "JOYSTICK_Y"),
|
m_joystick_y(*this, "JOYSTICK_Y"),
|
||||||
m_shared_ram(*this, "shared_ram"),
|
m_shared_ram(*this, "shared_ram"),
|
||||||
m_mac_sram(*this, "mac_sram"),
|
m_mac_sram(*this, "mac_sram"),
|
||||||
m_sprite_vram(*this, "sprite_vram"),
|
m_sprite_vram(*this, "sprite_vram")
|
||||||
m_vgb_uart(*this, "uart")
|
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
void micro3d(machine_config &config);
|
void micro3d(machine_config &config);
|
||||||
@ -89,6 +90,7 @@ private:
|
|||||||
required_device<upd7759_device> m_upd7759;
|
required_device<upd7759_device> m_upd7759;
|
||||||
required_device<cpu_device> m_drmath;
|
required_device<cpu_device> m_drmath;
|
||||||
required_device<tms34010_device> m_vgb;
|
required_device<tms34010_device> m_vgb;
|
||||||
|
required_device<scn2651_device> m_vgb_uart;
|
||||||
required_device<palette_device> m_palette;
|
required_device<palette_device> m_palette;
|
||||||
required_device<mc68681_device> m_duart;
|
required_device<mc68681_device> m_duart;
|
||||||
required_device<micro3d_sound_device> m_noise_1;
|
required_device<micro3d_sound_device> m_noise_1;
|
||||||
@ -200,8 +202,6 @@ private:
|
|||||||
void soundmem_io(address_map &map);
|
void soundmem_io(address_map &map);
|
||||||
void soundmem_prg(address_map &map);
|
void soundmem_prg(address_map &map);
|
||||||
void vgbmem(address_map &map);
|
void vgbmem(address_map &map);
|
||||||
|
|
||||||
required_device<scn2651_device> m_vgb_uart;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MAME_MISC_MICRO3D_H
|
#endif // MAME_MISC_MICRO3D_H
|
||||||
|
@ -162,9 +162,10 @@ void micro3d_sound_device::noise_sh_w(u8 data)
|
|||||||
|
|
||||||
DEFINE_DEVICE_TYPE(MICRO3D_SOUND, micro3d_sound_device, "micro3d_sound", "Microprose Custom Sound")
|
DEFINE_DEVICE_TYPE(MICRO3D_SOUND, micro3d_sound_device, "micro3d_sound", "Microprose Custom Sound")
|
||||||
|
|
||||||
micro3d_sound_device::micro3d_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
micro3d_sound_device::micro3d_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) :
|
||||||
: device_t(mconfig, MICRO3D_SOUND, tag, owner, clock),
|
device_t(mconfig, MICRO3D_SOUND, tag, owner, clock),
|
||||||
device_sound_interface(mconfig, *this),
|
device_sound_interface(mconfig, *this),
|
||||||
|
m_dac_data(0),
|
||||||
m_gain(0),
|
m_gain(0),
|
||||||
m_noise_shift(0),
|
m_noise_shift(0),
|
||||||
m_noise_value(0),
|
m_noise_value(0),
|
||||||
@ -172,7 +173,7 @@ micro3d_sound_device::micro3d_sound_device(const machine_config &mconfig, const
|
|||||||
m_stream(nullptr)
|
m_stream(nullptr)
|
||||||
|
|
||||||
{
|
{
|
||||||
memset(m_dac, 0, sizeof(u8)*4);
|
memset(m_dac, 0, sizeof(m_dac));
|
||||||
}
|
}
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
@ -45,23 +45,23 @@ private:
|
|||||||
void init(double fs);
|
void init(double fs);
|
||||||
void recompute(double k, double q, double fc);
|
void recompute(double k, double q, double fc);
|
||||||
|
|
||||||
float history[2 * 2]{};
|
float history[2 * 2];
|
||||||
float coef[4 * 2 + 1]{};
|
float coef[4 * 2 + 1];
|
||||||
double fs = 0;
|
double fs;
|
||||||
biquad proto_coef[2]{};
|
biquad proto_coef[2];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct m3d_filter_state
|
struct m3d_filter_state
|
||||||
{
|
{
|
||||||
void configure(double r, double c);
|
void configure(double r, double c);
|
||||||
|
|
||||||
double capval = 0;
|
double capval;
|
||||||
double exponent = 0;
|
double exponent;
|
||||||
};
|
};
|
||||||
|
|
||||||
u8 m_dac_data = 0;
|
u8 m_dac_data;
|
||||||
|
|
||||||
u8 m_dac[4]{};
|
u8 m_dac[4];
|
||||||
|
|
||||||
float m_gain;
|
float m_gain;
|
||||||
u32 m_noise_shift;
|
u32 m_noise_shift;
|
||||||
|
@ -122,7 +122,6 @@ TODO:
|
|||||||
stage 2: when BOX-MEN gets angry
|
stage 2: when BOX-MEN gets angry
|
||||||
- games using 6bpp gfx switch tilemaps color mode. Only blandia uses both, while the other ones use only mode 1, thus mode 0 is untested for them
|
- games using 6bpp gfx switch tilemaps color mode. Only blandia uses both, while the other ones use only mode 1, thus mode 0 is untested for them
|
||||||
|
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
@ -197,7 +196,6 @@ Custom: X1-001A X1-002A
|
|||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
Athena no Hatena?
|
Athena no Hatena?
|
||||||
@ -539,7 +537,6 @@ X1-010 X1-006
|
|||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
|
|
||||||
Mad Shark
|
Mad Shark
|
||||||
|
|
||||||
Allumer, 1993
|
Allumer, 1993
|
||||||
@ -574,6 +571,7 @@ Notes:
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
Magical Speed
|
Magical Speed
|
||||||
|
|
||||||
(c)1994 Allumer
|
(c)1994 Allumer
|
||||||
@ -699,11 +697,8 @@ ROMs :
|
|||||||
02.bin + 03.bin OKI Samples
|
02.bin + 03.bin OKI Samples
|
||||||
06.bin to 11.bin GFX
|
06.bin to 11.bin GFX
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
Quiz Kokology
|
Quiz Kokology
|
||||||
@ -807,7 +802,6 @@ Notes:
|
|||||||
VSync: 58Hz
|
VSync: 58Hz
|
||||||
HSync: 15.22kHz
|
HSync: 15.22kHz
|
||||||
|
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
@ -878,10 +872,10 @@ BP-U-002.U2 4M mask (40 pin, 512k x 8), read as MX27C4100 /
|
|||||||
|
|
||||||
BP-U-003.U13 8M mask (32 pin, 1M x 8), read as MX27C8000 Sound
|
BP-U-003.U13 8M mask (32 pin, 1M x 8), read as MX27C8000 Sound
|
||||||
|
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
Ultra Toukon Densetsu
|
Ultra Toukon Densetsu
|
||||||
Banpresto, 1993
|
Banpresto, 1993
|
||||||
Hardware info by Guru
|
Hardware info by Guru
|
||||||
@ -976,7 +970,6 @@ X1-010 5168-10 68000-16
|
|||||||
|
|
||||||
***************************************************************************
|
***************************************************************************
|
||||||
|
|
||||||
|
|
||||||
Pairs Love
|
Pairs Love
|
||||||
Allumer, 199x
|
Allumer, 199x
|
||||||
Hardware info by Guru
|
Hardware info by Guru
|
||||||
@ -1012,7 +1005,6 @@ Notes:
|
|||||||
68000 clock: 8.000MHz
|
68000 clock: 8.000MHz
|
||||||
VSync: 60Hz
|
VSync: 60Hz
|
||||||
|
|
||||||
|
|
||||||
***************************************************************************
|
***************************************************************************
|
||||||
|
|
||||||
Rezon (Taito License)
|
Rezon (Taito License)
|
||||||
|
@ -599,7 +599,6 @@ TIMER_CALLBACK_MEMBER( dcs_audio_device::dcs_reset )
|
|||||||
|
|
||||||
/* reset the HLE transfer states */
|
/* reset the HLE transfer states */
|
||||||
m_transfer.dcs_state = m_transfer.state = 0;
|
m_transfer.dcs_state = m_transfer.state = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -83,11 +83,21 @@ void aerofgt_sound_cpu_state::karatblzbl_soundlatch_w(uint8_t data)
|
|||||||
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
|
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t aerofgt_sound_cpu_state::pending_command_r()
|
uint8_t aerofgt_sound_cpu_state::soundlatch_pending_r()
|
||||||
{
|
{
|
||||||
return m_soundlatch->pending_r();
|
return m_soundlatch->pending_r();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void aerofgt_sound_cpu_state::soundlatch_pending_w(int state)
|
||||||
|
{
|
||||||
|
m_audiocpu->set_input_line(INPUT_LINE_NMI, state ? ASSERT_LINE : CLEAR_LINE);
|
||||||
|
|
||||||
|
// sound comms is 2-way (see soundlatch_pending_r),
|
||||||
|
// NMI routine is very short, so briefly set perfect_quantum to make sure that the timing is right
|
||||||
|
if (state)
|
||||||
|
machine().scheduler().perfect_quantum(attotime::from_usec(100));
|
||||||
|
}
|
||||||
|
|
||||||
void aerofgt_banked_sound_state::sh_bankswitch_w(uint8_t data)
|
void aerofgt_banked_sound_state::sh_bankswitch_w(uint8_t data)
|
||||||
{
|
{
|
||||||
m_soundbank->set_entry(data & 0x03);
|
m_soundbank->set_entry(data & 0x03);
|
||||||
@ -159,7 +169,7 @@ void aerofgt_banked_sound_state::pspikes_map(address_map &map)
|
|||||||
map(0xfff002, 0xfff003).portr("IN1");
|
map(0xfff002, 0xfff003).portr("IN1");
|
||||||
map(0xfff003, 0xfff003).w(FUNC(aerofgt_banked_sound_state::pspikes_gfxbank_w));
|
map(0xfff003, 0xfff003).w(FUNC(aerofgt_banked_sound_state::pspikes_gfxbank_w));
|
||||||
map(0xfff004, 0xfff005).portr("DSW").w(FUNC(aerofgt_banked_sound_state::scrolly_w<0>));
|
map(0xfff004, 0xfff005).portr("DSW").w(FUNC(aerofgt_banked_sound_state::scrolly_w<0>));
|
||||||
map(0xfff007, 0xfff007).r(FUNC(aerofgt_banked_sound_state::pending_command_r)).w(m_soundlatch, FUNC(generic_latch_8_device::write)).umask16(0x00ff);
|
map(0xfff007, 0xfff007).r(FUNC(aerofgt_banked_sound_state::soundlatch_pending_r)).w(m_soundlatch, FUNC(generic_latch_8_device::write)).umask16(0x00ff);
|
||||||
map(0xfff400, 0xfff403).w("gga", FUNC(vsystem_gga_device::write)).umask16(0x00ff);
|
map(0xfff400, 0xfff403).w("gga", FUNC(vsystem_gga_device::write)).umask16(0x00ff);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,7 +210,7 @@ void aerofgt_sound_cpu_state::spikes91_map(address_map &map)
|
|||||||
map(0xfff002, 0xfff003).portr("IN1");
|
map(0xfff002, 0xfff003).portr("IN1");
|
||||||
map(0xfff003, 0xfff003).w(FUNC(aerofgt_sound_cpu_state::pspikes_gfxbank_w));
|
map(0xfff003, 0xfff003).w(FUNC(aerofgt_sound_cpu_state::pspikes_gfxbank_w));
|
||||||
map(0xfff004, 0xfff005).portr("DSW").w(FUNC(aerofgt_sound_cpu_state::scrolly_w<0>));
|
map(0xfff004, 0xfff005).portr("DSW").w(FUNC(aerofgt_sound_cpu_state::scrolly_w<0>));
|
||||||
map(0xfff007, 0xfff007).r(FUNC(aerofgt_sound_cpu_state::pending_command_r)).w(m_soundlatch, FUNC(generic_latch_8_device::write)).umask16(0x00ff);
|
map(0xfff007, 0xfff007).r(FUNC(aerofgt_sound_cpu_state::soundlatch_pending_r)).w(m_soundlatch, FUNC(generic_latch_8_device::write)).umask16(0x00ff);
|
||||||
map(0xfff008, 0xfff009).w(FUNC(aerofgt_sound_cpu_state::spikes91_lookup_w));
|
map(0xfff008, 0xfff009).w(FUNC(aerofgt_sound_cpu_state::spikes91_lookup_w));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -237,7 +247,7 @@ void aerofgt_sound_cpu_state::kickball_map(address_map &map)
|
|||||||
map(0xfff002, 0xfff003).portr("IN1");
|
map(0xfff002, 0xfff003).portr("IN1");
|
||||||
map(0xfff003, 0xfff003).w(FUNC(aerofgt_sound_cpu_state::kickball_gfxbank_w));
|
map(0xfff003, 0xfff003).w(FUNC(aerofgt_sound_cpu_state::kickball_gfxbank_w));
|
||||||
map(0xfff004, 0xfff005).portr("DSW").w(FUNC(aerofgt_sound_cpu_state::scrolly_w<0>));
|
map(0xfff004, 0xfff005).portr("DSW").w(FUNC(aerofgt_sound_cpu_state::scrolly_w<0>));
|
||||||
map(0xfff007, 0xfff007).r(FUNC(aerofgt_sound_cpu_state::pending_command_r)).w(m_soundlatch, FUNC(generic_latch_8_device::write)).umask16(0x00ff);
|
map(0xfff007, 0xfff007).r(FUNC(aerofgt_sound_cpu_state::soundlatch_pending_r)).w(m_soundlatch, FUNC(generic_latch_8_device::write)).umask16(0x00ff);
|
||||||
map(0xfff400, 0xfff403).nopw(); // GGA access
|
map(0xfff400, 0xfff403).nopw(); // GGA access
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,7 +271,7 @@ void aerofgt_banked_sound_state::karatblz_map(address_map &map)
|
|||||||
map(0x0ff006, 0x0ff007).portr("IN3");
|
map(0x0ff006, 0x0ff007).portr("IN3");
|
||||||
map(0x0ff007, 0x0ff007).w(m_soundlatch, FUNC(generic_latch_8_device::write));
|
map(0x0ff007, 0x0ff007).w(m_soundlatch, FUNC(generic_latch_8_device::write));
|
||||||
map(0x0ff008, 0x0ff009).portr("DSW").w(FUNC(aerofgt_banked_sound_state::scrollx_w<0>));
|
map(0x0ff008, 0x0ff009).portr("DSW").w(FUNC(aerofgt_banked_sound_state::scrollx_w<0>));
|
||||||
map(0x0ff00b, 0x0ff00b).r(FUNC(aerofgt_banked_sound_state::pending_command_r));
|
map(0x0ff00b, 0x0ff00b).r(FUNC(aerofgt_banked_sound_state::soundlatch_pending_r));
|
||||||
map(0x0ff00a, 0x0ff00b).w(FUNC(aerofgt_banked_sound_state::scrolly_w<0>));
|
map(0x0ff00a, 0x0ff00b).w(FUNC(aerofgt_banked_sound_state::scrolly_w<0>));
|
||||||
map(0x0ff00c, 0x0ff00d).w(FUNC(aerofgt_banked_sound_state::scrollx_w<1>));
|
map(0x0ff00c, 0x0ff00d).w(FUNC(aerofgt_banked_sound_state::scrollx_w<1>));
|
||||||
map(0x0ff00e, 0x0ff00f).w(FUNC(aerofgt_banked_sound_state::scrolly_w<1>));
|
map(0x0ff00e, 0x0ff00f).w(FUNC(aerofgt_banked_sound_state::scrolly_w<1>));
|
||||||
@ -288,7 +298,7 @@ void aerofgt_sound_cpu_state::karatblzbl_map(address_map &map)
|
|||||||
map(0x0ff006, 0x0ff007).portr("IN3");
|
map(0x0ff006, 0x0ff007).portr("IN3");
|
||||||
map(0x0ff007, 0x0ff007).w(FUNC(aerofgt_sound_cpu_state::karatblzbl_soundlatch_w));
|
map(0x0ff007, 0x0ff007).w(FUNC(aerofgt_sound_cpu_state::karatblzbl_soundlatch_w));
|
||||||
map(0x0ff008, 0x0ff009).portr("DSW").w(FUNC(aerofgt_sound_cpu_state::scrollx_w<0>));
|
map(0x0ff008, 0x0ff009).portr("DSW").w(FUNC(aerofgt_sound_cpu_state::scrollx_w<0>));
|
||||||
map(0x0ff00b, 0x0ff00b).r(FUNC(aerofgt_sound_cpu_state::pending_command_r));
|
map(0x0ff00b, 0x0ff00b).r(FUNC(aerofgt_sound_cpu_state::soundlatch_pending_r));
|
||||||
map(0x0ff00a, 0x0ff00b).w(FUNC(aerofgt_sound_cpu_state::scrolly_w<0>));
|
map(0x0ff00a, 0x0ff00b).w(FUNC(aerofgt_sound_cpu_state::scrolly_w<0>));
|
||||||
map(0x0ff00c, 0x0ff00d).w(FUNC(aerofgt_sound_cpu_state::scrollx_w<1>));
|
map(0x0ff00c, 0x0ff00d).w(FUNC(aerofgt_sound_cpu_state::scrollx_w<1>));
|
||||||
map(0x0ff00e, 0x0ff00f).w(FUNC(aerofgt_sound_cpu_state::scrolly_w<1>));
|
map(0x0ff00e, 0x0ff00f).w(FUNC(aerofgt_sound_cpu_state::scrolly_w<1>));
|
||||||
@ -332,7 +342,7 @@ void aerofgt_banked_sound_state::turbofrc_map(address_map &map)
|
|||||||
map(0x0ff001, 0x0ff001).w(FUNC(aerofgt_banked_sound_state::turbofrc_flip_screen_w));
|
map(0x0ff001, 0x0ff001).w(FUNC(aerofgt_banked_sound_state::turbofrc_flip_screen_w));
|
||||||
map(0x0ff002, 0x0ff003).portr("IN1").w(FUNC(aerofgt_banked_sound_state::scrolly_w<0>));
|
map(0x0ff002, 0x0ff003).portr("IN1").w(FUNC(aerofgt_banked_sound_state::scrolly_w<0>));
|
||||||
map(0x0ff004, 0x0ff005).portr("DSW").w(FUNC(aerofgt_banked_sound_state::scrollx_w<1>));
|
map(0x0ff004, 0x0ff005).portr("DSW").w(FUNC(aerofgt_banked_sound_state::scrollx_w<1>));
|
||||||
map(0x0ff007, 0x0ff007).r(FUNC(aerofgt_banked_sound_state::pending_command_r));
|
map(0x0ff007, 0x0ff007).r(FUNC(aerofgt_banked_sound_state::soundlatch_pending_r));
|
||||||
map(0x0ff006, 0x0ff007).w(FUNC(aerofgt_banked_sound_state::scrolly_w<1>));
|
map(0x0ff006, 0x0ff007).w(FUNC(aerofgt_banked_sound_state::scrolly_w<1>));
|
||||||
map(0x0ff008, 0x0ff009).portr("IN2");
|
map(0x0ff008, 0x0ff009).portr("IN2");
|
||||||
map(0x0ff008, 0x0ff00b).w(FUNC(aerofgt_banked_sound_state::turbofrc_gfxbank_w));
|
map(0x0ff008, 0x0ff00b).w(FUNC(aerofgt_banked_sound_state::turbofrc_gfxbank_w));
|
||||||
@ -356,7 +366,7 @@ void aerofgt_banked_sound_state::aerofgtb_map(address_map &map)
|
|||||||
map(0x0fe001, 0x0fe001).w(FUNC(aerofgt_banked_sound_state::turbofrc_flip_screen_w));
|
map(0x0fe001, 0x0fe001).w(FUNC(aerofgt_banked_sound_state::turbofrc_flip_screen_w));
|
||||||
map(0x0fe002, 0x0fe003).portr("IN1").w(FUNC(aerofgt_banked_sound_state::scrolly_w<0>));
|
map(0x0fe002, 0x0fe003).portr("IN1").w(FUNC(aerofgt_banked_sound_state::scrolly_w<0>));
|
||||||
map(0x0fe004, 0x0fe005).portr("DSW1").w(FUNC(aerofgt_banked_sound_state::scrollx_w<1>));
|
map(0x0fe004, 0x0fe005).portr("DSW1").w(FUNC(aerofgt_banked_sound_state::scrollx_w<1>));
|
||||||
map(0x0fe007, 0x0fe007).r(FUNC(aerofgt_banked_sound_state::pending_command_r));
|
map(0x0fe007, 0x0fe007).r(FUNC(aerofgt_banked_sound_state::soundlatch_pending_r));
|
||||||
map(0x0fe006, 0x0fe007).w(FUNC(aerofgt_banked_sound_state::scrolly_w<1>));
|
map(0x0fe006, 0x0fe007).w(FUNC(aerofgt_banked_sound_state::scrolly_w<1>));
|
||||||
map(0x0fe008, 0x0fe009).portr("DSW2");
|
map(0x0fe008, 0x0fe009).portr("DSW2");
|
||||||
map(0x0fe008, 0x0fe00b).w(FUNC(aerofgt_banked_sound_state::turbofrc_gfxbank_w));
|
map(0x0fe008, 0x0fe00b).w(FUNC(aerofgt_banked_sound_state::turbofrc_gfxbank_w));
|
||||||
@ -456,7 +466,7 @@ void aerofgt_sound_cpu_state::wbbc97_map(address_map &map)
|
|||||||
map(0xfff002, 0xfff003).portr("IN1");
|
map(0xfff002, 0xfff003).portr("IN1");
|
||||||
map(0xfff003, 0xfff003).w(FUNC(aerofgt_sound_cpu_state::pspikes_gfxbank_w));
|
map(0xfff003, 0xfff003).w(FUNC(aerofgt_sound_cpu_state::pspikes_gfxbank_w));
|
||||||
map(0xfff004, 0xfff005).portr("DSW").w(FUNC(aerofgt_sound_cpu_state::scrolly_w<0>));
|
map(0xfff004, 0xfff005).portr("DSW").w(FUNC(aerofgt_sound_cpu_state::scrolly_w<0>));
|
||||||
map(0xfff007, 0xfff007).r(FUNC(aerofgt_sound_cpu_state::pending_command_r)).w(m_soundlatch, FUNC(generic_latch_8_device::write)).umask16(0x00ff);
|
map(0xfff007, 0xfff007).r(FUNC(aerofgt_sound_cpu_state::soundlatch_pending_r)).w(m_soundlatch, FUNC(generic_latch_8_device::write)).umask16(0x00ff);
|
||||||
map(0xfff00e, 0xfff00f).w(FUNC(aerofgt_sound_cpu_state::wbbc97_bitmap_enable_w));
|
map(0xfff00e, 0xfff00f).w(FUNC(aerofgt_sound_cpu_state::wbbc97_bitmap_enable_w));
|
||||||
map(0xfff400, 0xfff403).nopw(); // GGA access
|
map(0xfff400, 0xfff403).nopw(); // GGA access
|
||||||
}
|
}
|
||||||
@ -1477,7 +1487,7 @@ void aerofgt_banked_sound_state::pspikes(machine_config &config)
|
|||||||
SPEAKER(config, "rspeaker").front_right();
|
SPEAKER(config, "rspeaker").front_right();
|
||||||
|
|
||||||
GENERIC_LATCH_8(config, m_soundlatch);
|
GENERIC_LATCH_8(config, m_soundlatch);
|
||||||
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI);
|
m_soundlatch->data_pending_callback().set(FUNC(aerofgt_banked_sound_state::soundlatch_pending_w));
|
||||||
m_soundlatch->set_separate_acknowledge(true);
|
m_soundlatch->set_separate_acknowledge(true);
|
||||||
|
|
||||||
ym2610_device &ymsnd(YM2610(config, "ymsnd", 8000000));
|
ym2610_device &ymsnd(YM2610(config, "ymsnd", 8000000));
|
||||||
@ -1598,7 +1608,7 @@ void aerofgt_sound_cpu_state::kickball(machine_config &config)
|
|||||||
SPEAKER(config, "mono").front_center();
|
SPEAKER(config, "mono").front_center();
|
||||||
|
|
||||||
GENERIC_LATCH_8(config, m_soundlatch);
|
GENERIC_LATCH_8(config, m_soundlatch);
|
||||||
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI);
|
m_soundlatch->data_pending_callback().set(FUNC(aerofgt_sound_cpu_state::soundlatch_pending_w));
|
||||||
m_soundlatch->set_separate_acknowledge(true);
|
m_soundlatch->set_separate_acknowledge(true);
|
||||||
|
|
||||||
ym3812_device &ymsnd(YM3812(config, "ymsnd", XTAL(4'000'000))); // K-666 (YM3812)
|
ym3812_device &ymsnd(YM3812(config, "ymsnd", XTAL(4'000'000))); // K-666 (YM3812)
|
||||||
@ -1686,7 +1696,7 @@ void aerofgt_banked_sound_state::karatblz(machine_config &config)
|
|||||||
SPEAKER(config, "rspeaker").front_right();
|
SPEAKER(config, "rspeaker").front_right();
|
||||||
|
|
||||||
GENERIC_LATCH_8(config, m_soundlatch);
|
GENERIC_LATCH_8(config, m_soundlatch);
|
||||||
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI);
|
m_soundlatch->data_pending_callback().set(FUNC(aerofgt_banked_sound_state::soundlatch_pending_w));
|
||||||
m_soundlatch->set_separate_acknowledge(true);
|
m_soundlatch->set_separate_acknowledge(true);
|
||||||
|
|
||||||
ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(8'000'000))); /* verified on pcb */
|
ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(8'000'000))); /* verified on pcb */
|
||||||
@ -1792,7 +1802,7 @@ void aerofgt_banked_sound_state::spinlbrk(machine_config &config)
|
|||||||
SPEAKER(config, "rspeaker").front_right();
|
SPEAKER(config, "rspeaker").front_right();
|
||||||
|
|
||||||
GENERIC_LATCH_8(config, m_soundlatch);
|
GENERIC_LATCH_8(config, m_soundlatch);
|
||||||
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI);
|
m_soundlatch->data_pending_callback().set(FUNC(aerofgt_banked_sound_state::soundlatch_pending_w));
|
||||||
m_soundlatch->set_separate_acknowledge(true);
|
m_soundlatch->set_separate_acknowledge(true);
|
||||||
|
|
||||||
ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(8'000'000))); /* verified on pcb */
|
ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(8'000'000))); /* verified on pcb */
|
||||||
@ -1845,7 +1855,7 @@ void aerofgt_banked_sound_state::turbofrc(machine_config &config)
|
|||||||
SPEAKER(config, "rspeaker").front_right();
|
SPEAKER(config, "rspeaker").front_right();
|
||||||
|
|
||||||
GENERIC_LATCH_8(config, m_soundlatch);
|
GENERIC_LATCH_8(config, m_soundlatch);
|
||||||
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI);
|
m_soundlatch->data_pending_callback().set(FUNC(aerofgt_banked_sound_state::soundlatch_pending_w));
|
||||||
m_soundlatch->set_separate_acknowledge(true);
|
m_soundlatch->set_separate_acknowledge(true);
|
||||||
|
|
||||||
ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(8'000'000))); /* verified on pcb */
|
ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(8'000'000))); /* verified on pcb */
|
||||||
@ -1898,7 +1908,7 @@ void aerofgt_banked_sound_state::aerofgtb(machine_config &config)
|
|||||||
SPEAKER(config, "rspeaker").front_right();
|
SPEAKER(config, "rspeaker").front_right();
|
||||||
|
|
||||||
GENERIC_LATCH_8(config, m_soundlatch);
|
GENERIC_LATCH_8(config, m_soundlatch);
|
||||||
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI);
|
m_soundlatch->data_pending_callback().set(FUNC(aerofgt_banked_sound_state::soundlatch_pending_w));
|
||||||
m_soundlatch->set_separate_acknowledge(true);
|
m_soundlatch->set_separate_acknowledge(true);
|
||||||
|
|
||||||
ym2610_device &ymsnd(YM2610(config, "ymsnd", 8000000));
|
ym2610_device &ymsnd(YM2610(config, "ymsnd", 8000000));
|
||||||
@ -1956,7 +1966,7 @@ void aerofgt_banked_sound_state::aerofgt(machine_config &config)
|
|||||||
SPEAKER(config, "rspeaker").front_right();
|
SPEAKER(config, "rspeaker").front_right();
|
||||||
|
|
||||||
GENERIC_LATCH_8(config, m_soundlatch);
|
GENERIC_LATCH_8(config, m_soundlatch);
|
||||||
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI);
|
m_soundlatch->data_pending_callback().set(FUNC(aerofgt_banked_sound_state::soundlatch_pending_w));
|
||||||
m_soundlatch->set_separate_acknowledge(true);
|
m_soundlatch->set_separate_acknowledge(true);
|
||||||
|
|
||||||
ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(8'000'000))); /* verified on pcb */
|
ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(8'000'000))); /* verified on pcb */
|
||||||
|
@ -142,7 +142,8 @@ protected:
|
|||||||
|
|
||||||
DECLARE_VIDEO_START(wbbc97);
|
DECLARE_VIDEO_START(wbbc97);
|
||||||
|
|
||||||
uint8_t pending_command_r();
|
uint8_t soundlatch_pending_r();
|
||||||
|
void soundlatch_pending_w(int state);
|
||||||
void spinlbrk_flip_screen_w(uint8_t data);
|
void spinlbrk_flip_screen_w(uint8_t data);
|
||||||
|
|
||||||
uint32_t aerofgt_ol2_tile_callback(uint32_t code);
|
uint32_t aerofgt_ol2_tile_callback(uint32_t code);
|
||||||
|
@ -213,6 +213,7 @@ private:
|
|||||||
|
|
||||||
uint32_t tile_callback(uint32_t code);
|
uint32_t tile_callback(uint32_t code);
|
||||||
void sh_bankswitch_w(uint8_t data);
|
void sh_bankswitch_w(uint8_t data);
|
||||||
|
void soundlatch_pending_w(int state);
|
||||||
template <uint8_t Which> void videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) { COMBINE_DATA(&m_videoram[Which][offset]); m_tilemap[Which]->mark_tile_dirty(offset); }
|
template <uint8_t Which> void videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) { COMBINE_DATA(&m_videoram[Which][offset]); m_tilemap[Which]->mark_tile_dirty(offset); }
|
||||||
void roz_bank_w(offs_t offset, uint8_t data);
|
void roz_bank_w(offs_t offset, uint8_t data);
|
||||||
void gfxctrl_w(offs_t offset, uint8_t data);
|
void gfxctrl_w(offs_t offset, uint8_t data);
|
||||||
@ -259,7 +260,6 @@ TILE_GET_INFO_MEMBER(crshrace_state::get_bgtile_info)
|
|||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
uint32_t crshrace_state::tile_callback(uint32_t code)
|
uint32_t crshrace_state::tile_callback(uint32_t code)
|
||||||
{
|
{
|
||||||
return m_spriteram[1]->buffer()[code&0x7fff];
|
return m_spriteram[1]->buffer()[code&0x7fff];
|
||||||
@ -283,7 +283,6 @@ void crshrace_state::video_start()
|
|||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
void crshrace_state::roz_bank_w(offs_t offset, uint8_t data)
|
void crshrace_state::roz_bank_w(offs_t offset, uint8_t data)
|
||||||
{
|
{
|
||||||
if (m_roz_bank != data)
|
if (m_roz_bank != data)
|
||||||
@ -329,8 +328,6 @@ uint32_t crshrace_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
|
|||||||
|
|
||||||
bitmap.fill(0x1ff, cliprect);
|
bitmap.fill(0x1ff, cliprect);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
switch (m_gfxctrl & 0xfb)
|
switch (m_gfxctrl & 0xfb)
|
||||||
{
|
{
|
||||||
case 0x00: // high score screen
|
case 0x00: // high score screen
|
||||||
@ -359,6 +356,16 @@ void crshrace_state::sh_bankswitch_w(uint8_t data)
|
|||||||
m_z80bank->set_entry(data & 0x03);
|
m_z80bank->set_entry(data & 0x03);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void crshrace_state::soundlatch_pending_w(int state)
|
||||||
|
{
|
||||||
|
m_audiocpu->set_input_line(INPUT_LINE_NMI, state ? ASSERT_LINE : CLEAR_LINE);
|
||||||
|
|
||||||
|
// sound comms is 2-way (see pending_r in "DSW2"),
|
||||||
|
// NMI routine is very short, so briefly set perfect_quantum to make sure that the timing is right
|
||||||
|
if (state)
|
||||||
|
machine().scheduler().perfect_quantum(attotime::from_usec(100));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void crshrace_state::main_map(address_map &map)
|
void crshrace_state::main_map(address_map &map)
|
||||||
{
|
{
|
||||||
@ -635,7 +642,7 @@ void crshrace_state::crshrace(machine_config &config) // TODO: PCB sports 32 MHz
|
|||||||
SPEAKER(config, "rspeaker").front_right();
|
SPEAKER(config, "rspeaker").front_right();
|
||||||
|
|
||||||
GENERIC_LATCH_8(config, m_soundlatch);
|
GENERIC_LATCH_8(config, m_soundlatch);
|
||||||
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI);
|
m_soundlatch->data_pending_callback().set(FUNC(crshrace_state::soundlatch_pending_w));
|
||||||
m_soundlatch->set_separate_acknowledge(true);
|
m_soundlatch->set_separate_acknowledge(true);
|
||||||
|
|
||||||
ym2610_device &ymsnd(YM2610(config, "ymsnd", 8'000'000));
|
ym2610_device &ymsnd(YM2610(config, "ymsnd", 8'000'000));
|
||||||
|
@ -122,7 +122,8 @@ protected:
|
|||||||
required_device<acia6850_device> m_acia;
|
required_device<acia6850_device> m_acia;
|
||||||
|
|
||||||
void sh_bankswitch_w(uint8_t data);
|
void sh_bankswitch_w(uint8_t data);
|
||||||
uint8_t command_pending_r();
|
uint8_t soundlatch_pending_r();
|
||||||
|
void soundlatch_pending_w(int state);
|
||||||
void rozvideoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
|
void rozvideoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
|
||||||
void fgvideoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
|
void fgvideoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
|
||||||
void fgscroll_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
|
void fgscroll_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
|
||||||
@ -467,12 +468,21 @@ void f1gp_state::sh_bankswitch_w(uint8_t data)
|
|||||||
m_z80bank->set_entry(data & 0x01);
|
m_z80bank->set_entry(data & 0x01);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t f1gp_state::soundlatch_pending_r()
|
||||||
uint8_t f1gp_state::command_pending_r()
|
|
||||||
{
|
{
|
||||||
return (m_soundlatch->pending_r() ? 0xff : 0);
|
return (m_soundlatch->pending_r() ? 0xff : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void f1gp_state::soundlatch_pending_w(int state)
|
||||||
|
{
|
||||||
|
m_audiocpu->set_input_line(INPUT_LINE_NMI, state ? ASSERT_LINE : CLEAR_LINE);
|
||||||
|
|
||||||
|
// sound comms is 2-way (see soundlatch_pending_r),
|
||||||
|
// NMI routine is very short, so briefly set perfect_quantum to make sure that the timing is right
|
||||||
|
if (state)
|
||||||
|
machine().scheduler().perfect_quantum(attotime::from_usec(100));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void f1gp_state::f1gp_cpu1_map(address_map &map)
|
void f1gp_state::f1gp_cpu1_map(address_map &map)
|
||||||
{
|
{
|
||||||
@ -495,7 +505,7 @@ void f1gp_state::f1gp_cpu1_map(address_map &map)
|
|||||||
map(0xfff004, 0xfff005).portr("DSW1");
|
map(0xfff004, 0xfff005).portr("DSW1");
|
||||||
map(0xfff002, 0xfff005).w(FUNC(f1gp_state::fgscroll_w));
|
map(0xfff002, 0xfff005).w(FUNC(f1gp_state::fgscroll_w));
|
||||||
map(0xfff006, 0xfff007).portr("DSW2");
|
map(0xfff006, 0xfff007).portr("DSW2");
|
||||||
map(0xfff009, 0xfff009).r(FUNC(f1gp_state::command_pending_r)).w(m_soundlatch, FUNC(generic_latch_8_device::write)).umask16(0x00ff);
|
map(0xfff009, 0xfff009).r(FUNC(f1gp_state::soundlatch_pending_r)).w(m_soundlatch, FUNC(generic_latch_8_device::write)).umask16(0x00ff);
|
||||||
map(0xfff020, 0xfff023).w("gga", FUNC(vsystem_gga_device::write)).umask16(0x00ff);
|
map(0xfff020, 0xfff023).w("gga", FUNC(vsystem_gga_device::write)).umask16(0x00ff);
|
||||||
map(0xfff040, 0xfff05f).w(m_k053936, FUNC(k053936_device::ctrl_w));
|
map(0xfff040, 0xfff05f).w(m_k053936, FUNC(k053936_device::ctrl_w));
|
||||||
map(0xfff050, 0xfff051).portr("DSW3");
|
map(0xfff050, 0xfff051).portr("DSW3");
|
||||||
@ -518,7 +528,7 @@ void f1gp2_state::f1gp2_cpu1_map(address_map &map)
|
|||||||
map(0xfff002, 0xfff003).portr("WHEEL");
|
map(0xfff002, 0xfff003).portr("WHEEL");
|
||||||
map(0xfff004, 0xfff005).portr("DSW1");
|
map(0xfff004, 0xfff005).portr("DSW1");
|
||||||
map(0xfff006, 0xfff007).portr("DSW2");
|
map(0xfff006, 0xfff007).portr("DSW2");
|
||||||
map(0xfff009, 0xfff009).r(FUNC(f1gp2_state::command_pending_r)).w(m_soundlatch, FUNC(generic_latch_8_device::write)).umask16(0x00ff);
|
map(0xfff009, 0xfff009).r(FUNC(f1gp2_state::soundlatch_pending_r)).w(m_soundlatch, FUNC(generic_latch_8_device::write)).umask16(0x00ff);
|
||||||
map(0xfff00a, 0xfff00b).portr("DSW3");
|
map(0xfff00a, 0xfff00b).portr("DSW3");
|
||||||
map(0xfff020, 0xfff03f).w(m_k053936, FUNC(k053936_device::ctrl_w));
|
map(0xfff020, 0xfff03f).w(m_k053936, FUNC(k053936_device::ctrl_w));
|
||||||
map(0xfff044, 0xfff047).w(FUNC(f1gp2_state::fgscroll_w));
|
map(0xfff044, 0xfff047).w(FUNC(f1gp2_state::fgscroll_w));
|
||||||
@ -844,7 +854,7 @@ void f1gp_state::f1gp(machine_config &config)
|
|||||||
SPEAKER(config, "rspeaker").front_right();
|
SPEAKER(config, "rspeaker").front_right();
|
||||||
|
|
||||||
GENERIC_LATCH_8(config, m_soundlatch);
|
GENERIC_LATCH_8(config, m_soundlatch);
|
||||||
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI);
|
m_soundlatch->data_pending_callback().set(FUNC(f1gp_state::soundlatch_pending_w));
|
||||||
m_soundlatch->set_separate_acknowledge(true);
|
m_soundlatch->set_separate_acknowledge(true);
|
||||||
|
|
||||||
ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(8'000'000)));
|
ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(8'000'000)));
|
||||||
|
@ -379,8 +379,6 @@ GFXDECODE_END
|
|||||||
|
|
||||||
/*** MEMORY LAYOUTS **********************************************************/
|
/*** MEMORY LAYOUTS **********************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void gstriker_state::twcup94_map(address_map &map)
|
void gstriker_state::twcup94_map(address_map &map)
|
||||||
{
|
{
|
||||||
map(0x000000, 0x0fffff).rom();
|
map(0x000000, 0x0fffff).rom();
|
||||||
@ -1277,7 +1275,6 @@ GAME( 1993, gstriker, 0, gstriker, gstriker, gstriker_state, empty_init,
|
|||||||
GAME( 1993, gstrikera, gstriker, gstriker, gstriker, gstriker_state, empty_init, ROT0, "Human", "Grand Striker (Americas)", MACHINE_NOT_WORKING | MACHINE_NODEVICE_LAN | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
GAME( 1993, gstrikera, gstriker, gstriker, gstriker, gstriker_state, empty_init, ROT0, "Human", "Grand Striker (Americas)", MACHINE_NOT_WORKING | MACHINE_NODEVICE_LAN | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1993, gstrikerj, gstriker, gstriker, gstriker, gstriker_state, empty_init, ROT0, "Human", "Grand Striker (Japan)", MACHINE_NOT_WORKING | MACHINE_NODEVICE_LAN | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
GAME( 1993, gstrikerj, gstriker, gstriker, gstriker, gstriker_state, empty_init, ROT0, "Human", "Grand Striker (Japan)", MACHINE_NOT_WORKING | MACHINE_NODEVICE_LAN | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
||||||
|
|
||||||
|
|
||||||
// Similar, but not identical hardware, appear to be protected by an MCU
|
// Similar, but not identical hardware, appear to be protected by an MCU
|
||||||
GAME( 1994, vgoalsoc, 0, vgoal, vgoalsoc, gstriker_state, init_vgoalsoc, ROT0, "Tecmo", "V Goal Soccer (Europe)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // has ger/hol/arg/bra/ita/eng/spa/fra
|
GAME( 1994, vgoalsoc, 0, vgoal, vgoalsoc, gstriker_state, init_vgoalsoc, ROT0, "Tecmo", "V Goal Soccer (Europe)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // has ger/hol/arg/bra/ita/eng/spa/fra
|
||||||
GAME( 1994, vgoalsoca, vgoalsoc, vgoal, vgoalsoc, gstriker_state, init_vgoalsoc, ROT0, "Tecmo", "V Goal Soccer (US/Japan/Korea)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // has ger/hol/arg/bra/ita/kor/usa/jpn
|
GAME( 1994, vgoalsoca, vgoalsoc, vgoal, vgoalsoc, gstriker_state, init_vgoalsoc, ROT0, "Tecmo", "V Goal Soccer (US/Japan/Korea)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // has ger/hol/arg/bra/ita/kor/usa/jpn
|
||||||
|
@ -115,7 +115,7 @@ public:
|
|||||||
void inufuku(machine_config &config);
|
void inufuku(machine_config &config);
|
||||||
void _3on3dunk(machine_config &config);
|
void _3on3dunk(machine_config &config);
|
||||||
|
|
||||||
int soundflag_r();
|
int soundlatch_pending_r();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void machine_start() override;
|
virtual void machine_start() override;
|
||||||
@ -335,7 +335,7 @@ void inufuku_state::soundrombank_w(u8 data)
|
|||||||
|
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
int inufuku_state::soundflag_r()
|
int inufuku_state::soundlatch_pending_r()
|
||||||
{
|
{
|
||||||
return m_soundlatch->pending_r() ? 0 : 1;
|
return m_soundlatch->pending_r() ? 0 : 1;
|
||||||
}
|
}
|
||||||
@ -460,7 +460,7 @@ static INPUT_PORTS_START( inufuku )
|
|||||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read)
|
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read)
|
||||||
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(inufuku_state, soundflag_r) // pending sound command
|
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(inufuku_state, soundlatch_pending_r) // pending sound command
|
||||||
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) // 3on3dunk cares about something in here, possibly a vblank flag
|
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) // 3on3dunk cares about something in here, possibly a vblank flag
|
||||||
|
|
||||||
PORT_START( "EEPROMOUT" )
|
PORT_START( "EEPROMOUT" )
|
||||||
|
@ -201,7 +201,7 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void bankswitch_w(uint8_t data);
|
void bankswitch_w(uint8_t data);
|
||||||
uint8_t pending_command_r();
|
uint8_t soundlatch_pending_r();
|
||||||
};
|
};
|
||||||
|
|
||||||
class pipedrm_state : public hatris_state
|
class pipedrm_state : public hatris_state
|
||||||
@ -273,7 +273,7 @@ void pipedrm_state::sound_bankswitch_w(uint8_t data)
|
|||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
uint8_t hatris_state::pending_command_r()
|
uint8_t hatris_state::soundlatch_pending_r()
|
||||||
{
|
{
|
||||||
return m_soundlatch->pending_r();
|
return m_soundlatch->pending_r();
|
||||||
}
|
}
|
||||||
@ -342,7 +342,7 @@ void hatris_state::main_portmap(address_map &map)
|
|||||||
map(0x22, 0x22).portr("DSW1");
|
map(0x22, 0x22).portr("DSW1");
|
||||||
map(0x23, 0x23).portr("DSW2");
|
map(0x23, 0x23).portr("DSW2");
|
||||||
map(0x24, 0x24).portr("SYSTEM");
|
map(0x24, 0x24).portr("SYSTEM");
|
||||||
map(0x25, 0x25).r(FUNC(hatris_state::pending_command_r));
|
map(0x25, 0x25).r(FUNC(hatris_state::soundlatch_pending_r));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -376,7 +376,7 @@ void hatris_state::sound_portmap(address_map &map)
|
|||||||
map.global_mask(0xff);
|
map.global_mask(0xff);
|
||||||
map(0x00, 0x03).mirror(0x08).rw("ymsnd", FUNC(ym2608_device::read), FUNC(ym2608_device::write));
|
map(0x00, 0x03).mirror(0x08).rw("ymsnd", FUNC(ym2608_device::read), FUNC(ym2608_device::write));
|
||||||
map(0x04, 0x04).r(m_soundlatch, FUNC(generic_latch_8_device::read));
|
map(0x04, 0x04).r(m_soundlatch, FUNC(generic_latch_8_device::read));
|
||||||
map(0x05, 0x05).r(FUNC(hatris_state::pending_command_r)).w(m_soundlatch, FUNC(generic_latch_8_device::acknowledge_w));
|
map(0x05, 0x05).r(FUNC(hatris_state::soundlatch_pending_r)).w(m_soundlatch, FUNC(generic_latch_8_device::acknowledge_w));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -88,7 +88,8 @@ private:
|
|||||||
void zoomdata_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
|
void zoomdata_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
|
||||||
void gfxbank_w(uint8_t data);
|
void gfxbank_w(uint8_t data);
|
||||||
void sound_bankswitch_w(uint8_t data);
|
void sound_bankswitch_w(uint8_t data);
|
||||||
uint8_t sound_semaphore_r();
|
uint8_t soundlatch_pending_r();
|
||||||
|
void soundlatch_pending_w(int state);
|
||||||
TILE_GET_INFO_MEMBER(get_tile_info);
|
TILE_GET_INFO_MEMBER(get_tile_info);
|
||||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||||
void postload();
|
void postload();
|
||||||
@ -269,11 +270,21 @@ uint32_t tail2nos_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
|
|||||||
|
|
||||||
// machine
|
// machine
|
||||||
|
|
||||||
uint8_t tail2nos_state::sound_semaphore_r()
|
uint8_t tail2nos_state::soundlatch_pending_r()
|
||||||
{
|
{
|
||||||
return m_soundlatch->pending_r();
|
return m_soundlatch->pending_r();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tail2nos_state::soundlatch_pending_w(int state)
|
||||||
|
{
|
||||||
|
m_audiocpu->set_input_line(INPUT_LINE_NMI, state ? ASSERT_LINE : CLEAR_LINE);
|
||||||
|
|
||||||
|
// sound comms is 2-way (see soundlatch_pending_r),
|
||||||
|
// NMI routine is very short, so briefly set perfect_quantum to make sure that the timing is right
|
||||||
|
if (state)
|
||||||
|
machine().scheduler().perfect_quantum(attotime::from_usec(100));
|
||||||
|
}
|
||||||
|
|
||||||
void tail2nos_state::sound_bankswitch_w(uint8_t data)
|
void tail2nos_state::sound_bankswitch_w(uint8_t data)
|
||||||
{
|
{
|
||||||
m_soundbank->set_entry(data & 0x01);
|
m_soundbank->set_entry(data & 0x01);
|
||||||
@ -296,7 +307,7 @@ void tail2nos_state::main_map(address_map &map)
|
|||||||
map(0xfff001, 0xfff001).w(FUNC(tail2nos_state::gfxbank_w));
|
map(0xfff001, 0xfff001).w(FUNC(tail2nos_state::gfxbank_w));
|
||||||
map(0xfff002, 0xfff003).portr("IN1");
|
map(0xfff002, 0xfff003).portr("IN1");
|
||||||
map(0xfff004, 0xfff005).portr("DSW");
|
map(0xfff004, 0xfff005).portr("DSW");
|
||||||
map(0xfff009, 0xfff009).r(FUNC(tail2nos_state::sound_semaphore_r)).w(m_soundlatch, FUNC(generic_latch_8_device::write)).umask16(0x00ff);
|
map(0xfff009, 0xfff009).r(FUNC(tail2nos_state::soundlatch_pending_r)).w(m_soundlatch, FUNC(generic_latch_8_device::write)).umask16(0x00ff);
|
||||||
map(0xfff020, 0xfff023).w("gga", FUNC(vsystem_gga_device::write)).umask16(0x00ff);
|
map(0xfff020, 0xfff023).w("gga", FUNC(vsystem_gga_device::write)).umask16(0x00ff);
|
||||||
map(0xfff030, 0xfff033).rw(m_acia, FUNC(acia6850_device::read), FUNC(acia6850_device::write)).umask16(0x00ff);
|
map(0xfff030, 0xfff033).rw(m_acia, FUNC(acia6850_device::read), FUNC(acia6850_device::write)).umask16(0x00ff);
|
||||||
}
|
}
|
||||||
@ -513,7 +524,7 @@ void tail2nos_state::tail2nos(machine_config &config)
|
|||||||
SPEAKER(config, "rspeaker").front_right();
|
SPEAKER(config, "rspeaker").front_right();
|
||||||
|
|
||||||
GENERIC_LATCH_8(config, m_soundlatch);
|
GENERIC_LATCH_8(config, m_soundlatch);
|
||||||
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI);
|
m_soundlatch->data_pending_callback().set(FUNC(tail2nos_state::soundlatch_pending_w));
|
||||||
m_soundlatch->set_separate_acknowledge(true);
|
m_soundlatch->set_separate_acknowledge(true);
|
||||||
|
|
||||||
ym2608_device &ymsnd(YM2608(config, "ymsnd", XTAL(8'000'000))); // verified on PCB
|
ym2608_device &ymsnd(YM2608(config, "ymsnd", XTAL(8'000'000))); // verified on PCB
|
||||||
|
@ -146,7 +146,8 @@ private:
|
|||||||
uint8_t m_bgbank[8]{};
|
uint8_t m_bgbank[8]{};
|
||||||
tilemap_t *m_bg_tilemap = nullptr;
|
tilemap_t *m_bg_tilemap = nullptr;
|
||||||
|
|
||||||
uint16_t pending_command_r();
|
uint16_t soundlatch_pending_r();
|
||||||
|
void soundlatch_pending_w(int state);
|
||||||
void unknown_output_w(uint8_t data);
|
void unknown_output_w(uint8_t data);
|
||||||
void sh_bankswitch_w(uint8_t data);
|
void sh_bankswitch_w(uint8_t data);
|
||||||
void spritebank_w(offs_t offset, uint8_t data);
|
void spritebank_w(offs_t offset, uint8_t data);
|
||||||
@ -296,12 +297,22 @@ void taotaido_state::machine_start()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uint16_t taotaido_state::pending_command_r()
|
uint16_t taotaido_state::soundlatch_pending_r()
|
||||||
{
|
{
|
||||||
// Only bit 0 is tested
|
// Only bit 0 is tested
|
||||||
return m_soundlatch->pending_r();
|
return m_soundlatch->pending_r();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void taotaido_state::soundlatch_pending_w(int state)
|
||||||
|
{
|
||||||
|
m_audiocpu->set_input_line(INPUT_LINE_NMI, state ? ASSERT_LINE : CLEAR_LINE);
|
||||||
|
|
||||||
|
// sound comms is 2-way (see soundlatch_pending_r),
|
||||||
|
// NMI routine is very short, so briefly set perfect_quantum to make sure that the timing is right
|
||||||
|
if (state)
|
||||||
|
machine().scheduler().perfect_quantum(attotime::from_usec(100));
|
||||||
|
}
|
||||||
|
|
||||||
void taotaido_state::unknown_output_w(uint8_t data)
|
void taotaido_state::unknown_output_w(uint8_t data)
|
||||||
{
|
{
|
||||||
m_watchdog->write_line_ck(BIT(data, 7));
|
m_watchdog->write_line_ck(BIT(data, 7));
|
||||||
@ -325,7 +336,7 @@ void taotaido_state::main_map(address_map &map)
|
|||||||
map(0xffff20, 0xffff21).nopw(); // unknown - flip screen related
|
map(0xffff20, 0xffff21).nopw(); // unknown - flip screen related
|
||||||
map(0xffff40, 0xffff47).w(FUNC(taotaido_state::spritebank_w));
|
map(0xffff40, 0xffff47).w(FUNC(taotaido_state::spritebank_w));
|
||||||
map(0xffffc1, 0xffffc1).w(m_soundlatch, FUNC(generic_latch_8_device::write)); // seems right
|
map(0xffffc1, 0xffffc1).w(m_soundlatch, FUNC(generic_latch_8_device::write)); // seems right
|
||||||
map(0xffffe0, 0xffffe1).r(FUNC(taotaido_state::pending_command_r)); // guess - seems to be needed for all the sounds to work
|
map(0xffffe0, 0xffffe1).r(FUNC(taotaido_state::soundlatch_pending_r)); // guess - seems to be needed for all the sounds to work
|
||||||
}
|
}
|
||||||
|
|
||||||
// sound CPU - same as aerofgt
|
// sound CPU - same as aerofgt
|
||||||
@ -596,7 +607,7 @@ void taotaido_state::taotaido(machine_config &config)
|
|||||||
SPEAKER(config, "rspeaker").front_right();
|
SPEAKER(config, "rspeaker").front_right();
|
||||||
|
|
||||||
GENERIC_LATCH_8(config, m_soundlatch);
|
GENERIC_LATCH_8(config, m_soundlatch);
|
||||||
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI);
|
m_soundlatch->data_pending_callback().set(FUNC(taotaido_state::soundlatch_pending_w));
|
||||||
m_soundlatch->set_separate_acknowledge(true);
|
m_soundlatch->set_separate_acknowledge(true);
|
||||||
|
|
||||||
ym2610_device &ymsnd(YM2610(config, "ymsnd", 8'000'000));
|
ym2610_device &ymsnd(YM2610(config, "ymsnd", 8'000'000));
|
||||||
|
@ -339,6 +339,7 @@ public:
|
|||||||
m_maincpu(*this, "maincpu"),
|
m_maincpu(*this, "maincpu"),
|
||||||
m_audiocpu(*this, "audiocpu"),
|
m_audiocpu(*this, "audiocpu"),
|
||||||
m_spr_old(*this, "vsystem_spr_old"),
|
m_spr_old(*this, "vsystem_spr_old"),
|
||||||
|
m_soundlatch(*this, "soundlatch"),
|
||||||
m_gfxdecode(*this, "gfxdecode"),
|
m_gfxdecode(*this, "gfxdecode"),
|
||||||
m_spriteram(*this, "spriteram"),
|
m_spriteram(*this, "spriteram"),
|
||||||
m_pixelram(*this, "pixelram"),
|
m_pixelram(*this, "pixelram"),
|
||||||
@ -360,6 +361,7 @@ private:
|
|||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
required_device<cpu_device> m_audiocpu;
|
required_device<cpu_device> m_audiocpu;
|
||||||
required_device<vsystem_spr2_device> m_spr_old;
|
required_device<vsystem_spr2_device> m_spr_old;
|
||||||
|
required_device<generic_latch_8_device> m_soundlatch;
|
||||||
required_device<gfxdecode_device> m_gfxdecode;
|
required_device<gfxdecode_device> m_gfxdecode;
|
||||||
|
|
||||||
required_shared_ptr<uint16_t> m_spriteram;
|
required_shared_ptr<uint16_t> m_spriteram;
|
||||||
@ -376,6 +378,7 @@ private:
|
|||||||
int m_scrolly;
|
int m_scrolly;
|
||||||
|
|
||||||
void sound_bankswitch_w(uint8_t data);
|
void sound_bankswitch_w(uint8_t data);
|
||||||
|
void soundlatch_pending_w(int state);
|
||||||
void palette_bank_w(offs_t offset, uint8_t data);
|
void palette_bank_w(offs_t offset, uint8_t data);
|
||||||
void gfxbank_w(offs_t offset, uint8_t data);
|
void gfxbank_w(offs_t offset, uint8_t data);
|
||||||
void scrollreg_w(offs_t offset, uint16_t data);
|
void scrollreg_w(offs_t offset, uint16_t data);
|
||||||
@ -492,6 +495,16 @@ void welltris_state::sound_bankswitch_w(uint8_t data)
|
|||||||
m_soundbank->set_entry(data & 0x03);
|
m_soundbank->set_entry(data & 0x03);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void welltris_state::soundlatch_pending_w(int state)
|
||||||
|
{
|
||||||
|
m_audiocpu->set_input_line(INPUT_LINE_NMI, state ? ASSERT_LINE : CLEAR_LINE);
|
||||||
|
|
||||||
|
// sound comms is 2-way (see pending_r in "SYSTEM"),
|
||||||
|
// NMI routine is very short, so briefly set perfect_quantum to make sure that the timing is right
|
||||||
|
if (state)
|
||||||
|
machine().scheduler().perfect_quantum(attotime::from_usec(100));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void welltris_state::main_map(address_map &map)
|
void welltris_state::main_map(address_map &map)
|
||||||
{
|
{
|
||||||
@ -510,7 +523,7 @@ void welltris_state::main_map(address_map &map)
|
|||||||
map(0xfff004, 0xfff007).w(FUNC(welltris_state::scrollreg_w));
|
map(0xfff004, 0xfff007).w(FUNC(welltris_state::scrollreg_w));
|
||||||
map(0xfff006, 0xfff007).portr("P4"); // right side controls
|
map(0xfff006, 0xfff007).portr("P4"); // right side controls
|
||||||
map(0xfff008, 0xfff009).portr("SYSTEM"); // bit 5 tested at start of IRQ 1 */
|
map(0xfff008, 0xfff009).portr("SYSTEM"); // bit 5 tested at start of IRQ 1 */
|
||||||
map(0xfff009, 0xfff009).w("soundlatch", FUNC(generic_latch_8_device::write));
|
map(0xfff009, 0xfff009).w(m_soundlatch, FUNC(generic_latch_8_device::write));
|
||||||
map(0xfff00a, 0xfff00b).portr("EXTRA"); // P3+P4 coin + start buttons
|
map(0xfff00a, 0xfff00b).portr("EXTRA"); // P3+P4 coin + start buttons
|
||||||
map(0xfff00c, 0xfff00d).portr("DSW1");
|
map(0xfff00c, 0xfff00d).portr("DSW1");
|
||||||
map(0xfff00e, 0xfff00f).portr("DSW2");
|
map(0xfff00e, 0xfff00f).portr("DSW2");
|
||||||
@ -529,8 +542,8 @@ void welltris_state::sound_port_map(address_map &map)
|
|||||||
map.global_mask(0xff);
|
map.global_mask(0xff);
|
||||||
map(0x00, 0x00).w(FUNC(welltris_state::sound_bankswitch_w));
|
map(0x00, 0x00).w(FUNC(welltris_state::sound_bankswitch_w));
|
||||||
map(0x08, 0x0b).rw("ymsnd", FUNC(ym2610_device::read), FUNC(ym2610_device::write));
|
map(0x08, 0x0b).rw("ymsnd", FUNC(ym2610_device::read), FUNC(ym2610_device::write));
|
||||||
map(0x10, 0x10).r("soundlatch", FUNC(generic_latch_8_device::read));
|
map(0x10, 0x10).r(m_soundlatch, FUNC(generic_latch_8_device::read));
|
||||||
map(0x18, 0x18).w("soundlatch", FUNC(generic_latch_8_device::acknowledge_w));
|
map(0x18, 0x18).w(m_soundlatch, FUNC(generic_latch_8_device::acknowledge_w));
|
||||||
}
|
}
|
||||||
|
|
||||||
static INPUT_PORTS_START( welltris )
|
static INPUT_PORTS_START( welltris )
|
||||||
@ -854,9 +867,9 @@ void welltris_state::welltris(machine_config &config)
|
|||||||
// sound hardware
|
// sound hardware
|
||||||
SPEAKER(config, "mono").front_center();
|
SPEAKER(config, "mono").front_center();
|
||||||
|
|
||||||
generic_latch_8_device &soundlatch(GENERIC_LATCH_8(config, "soundlatch"));
|
GENERIC_LATCH_8(config, m_soundlatch);
|
||||||
soundlatch.data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI);
|
m_soundlatch->data_pending_callback().set(FUNC(welltris_state::soundlatch_pending_w));
|
||||||
soundlatch.set_separate_acknowledge(true);
|
m_soundlatch->set_separate_acknowledge(true);
|
||||||
|
|
||||||
ym2610_device &ymsnd(YM2610(config, "ymsnd", 8000000));
|
ym2610_device &ymsnd(YM2610(config, "ymsnd", 8000000));
|
||||||
ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
|
ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user