summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2026-03-08 13:29:46 +0100
committer hap <happppp@users.noreply.github.com>2026-03-08 13:29:59 +0100
commit0a88465813915b7e617d98020ad1ef5d73d4d54c (patch)
tree514c9533e1b2dce43a59bcd792ea991be1338c49
parentdc9cda9954529029d308087e9df7d3168d015373 (diff)
vlm5030: fix pin rising edge detect if state high val is not 1, add _r/_w to handlers
-rw-r--r--src/devices/bus/msx/cart/konami.cpp8
-rw-r--r--src/devices/sound/vlm5030.cpp122
-rw-r--r--src/devices/sound/vlm5030.h12
-rw-r--r--src/mame/konami/ddribble.cpp9
-rw-r--r--src/mame/konami/jailbrek.cpp10
-rw-r--r--src/mame/konami/nemesis.cpp12
-rw-r--r--src/mame/konami/rockrage.cpp6
-rw-r--r--src/mame/konami/trackfld.cpp19
-rw-r--r--src/mame/konami/trackfld_a.cpp36
-rw-r--r--src/mame/konami/trackfld_a.h3
-rw-r--r--src/mame/konami/yiear.cpp9
-rw-r--r--src/mame/nintendo/punchout.cpp10
12 files changed, 106 insertions, 150 deletions
diff --git a/src/devices/bus/msx/cart/konami.cpp b/src/devices/bus/msx/cart/konami.cpp
index 6e0cb011326..41eee56630f 100644
--- a/src/devices/bus/msx/cart/konami.cpp
+++ b/src/devices/bus/msx/cart/konami.cpp
@@ -840,14 +840,14 @@ uint8_t msx_cart_keyboard_master_device::read_vlm(offs_t offset)
void msx_cart_keyboard_master_device::io_20_w(uint8_t data)
{
- m_vlm5030->rst(BIT(data, 0) ? 1 : 0);
- m_vlm5030->vcu(BIT(data, 2) ? 1 : 0);
- m_vlm5030->st(BIT(data, 1) ? 1 : 0);
+ m_vlm5030->rst_w(BIT(data, 0));
+ m_vlm5030->vcu_w(BIT(data, 2));
+ m_vlm5030->st_w(BIT(data, 1));
}
uint8_t msx_cart_keyboard_master_device::io_00_r()
{
- return m_vlm5030->bsy() ? 0x10 : 0x00;
+ return m_vlm5030->bsy_r() ? 0x10 : 0x00;
}
diff --git a/src/devices/sound/vlm5030.cpp b/src/devices/sound/vlm5030.cpp
index 8f6e3715360..ff2e7e04601 100644
--- a/src/devices/sound/vlm5030.cpp
+++ b/src/devices/sound/vlm5030.cpp
@@ -264,7 +264,16 @@ void vlm5030_device::device_reset()
void vlm5030_device::device_post_load()
{
- restore_state();
+ int interp_effect = FR_SIZE - (m_interp_count%FR_SIZE);
+ /* restore parameter data */
+ setup_parameter(m_parameter);
+
+ /* restore current energy,pitch & filter */
+ m_current_energy = m_old_energy + (m_target_energy - m_old_energy) * interp_effect / FR_SIZE;
+ if (m_old_pitch > 1)
+ m_current_pitch = m_old_pitch + (m_target_pitch - m_old_pitch) * interp_effect / FR_SIZE;
+ for (int i = 0; i <= 9; i++)
+ m_current_k[i] = m_old_k[i] + (m_target_k[i] - m_old_k[i]) * interp_effect / FR_SIZE;
}
void vlm5030_device::rom_bank_pre_change()
@@ -272,14 +281,13 @@ void vlm5030_device::rom_bank_pre_change()
m_channel->update();
}
-int vlm5030_device::get_bits(int sbit,int bits)
+int vlm5030_device::get_bits(int sbit, int bits)
{
- int offset = m_address + (sbit>>3);
- int data;
+ const int offset = m_address + (sbit >> 3);
- data = read_byte(offset) | (read_byte(offset+1)<<8);
- data >>= (sbit&7);
- data &= (0xff>>(8-bits));
+ int data = read_byte(offset) | (read_byte(offset + 1) << 8);
+ data >>= (sbit & 7);
+ data &= (0xff >> (8 - bits));
return data;
}
@@ -326,16 +334,16 @@ int vlm5030_device::parse_frame()
m_new_energy = m_coeff->energytable[get_bits(6,m_coeff->energy_bits)];
/* 10 K's */
- m_new_k[9] = m_coeff->ktable[9][get_bits(11,m_coeff->kbits[9])];
- m_new_k[8] = m_coeff->ktable[8][get_bits(14,m_coeff->kbits[8])];
- m_new_k[7] = m_coeff->ktable[7][get_bits(17,m_coeff->kbits[7])];
- m_new_k[6] = m_coeff->ktable[6][get_bits(20,m_coeff->kbits[6])];
- m_new_k[5] = m_coeff->ktable[5][get_bits(23,m_coeff->kbits[5])];
- m_new_k[4] = m_coeff->ktable[4][get_bits(26,m_coeff->kbits[4])];
- m_new_k[3] = m_coeff->ktable[3][get_bits(29,m_coeff->kbits[3])];
- m_new_k[2] = m_coeff->ktable[2][get_bits(33,m_coeff->kbits[2])];
- m_new_k[1] = m_coeff->ktable[1][get_bits(37,m_coeff->kbits[1])];
- m_new_k[0] = m_coeff->ktable[0][get_bits(42,m_coeff->kbits[0])];
+ m_new_k[9] = m_coeff->ktable[9][get_bits(11, m_coeff->kbits[9])];
+ m_new_k[8] = m_coeff->ktable[8][get_bits(14, m_coeff->kbits[8])];
+ m_new_k[7] = m_coeff->ktable[7][get_bits(17, m_coeff->kbits[7])];
+ m_new_k[6] = m_coeff->ktable[6][get_bits(20, m_coeff->kbits[6])];
+ m_new_k[5] = m_coeff->ktable[5][get_bits(23, m_coeff->kbits[5])];
+ m_new_k[4] = m_coeff->ktable[4][get_bits(26, m_coeff->kbits[4])];
+ m_new_k[3] = m_coeff->ktable[3][get_bits(29, m_coeff->kbits[3])];
+ m_new_k[2] = m_coeff->ktable[2][get_bits(33, m_coeff->kbits[2])];
+ m_new_k[1] = m_coeff->ktable[1][get_bits(37, m_coeff->kbits[1])];
+ m_new_k[0] = m_coeff->ktable[0][get_bits(42, m_coeff->kbits[0])];
m_address += 6;
logerror("VLM5030 %04X voice \n", m_address);
@@ -343,12 +351,6 @@ int vlm5030_device::parse_frame()
return FR_SIZE;
}
-/* realtime update */
-void vlm5030_device::update()
-{
- m_channel->update();
-}
-
/* setup parameteroption when RST=H */
void vlm5030_device::setup_parameter(uint8_t param)
{
@@ -364,7 +366,7 @@ void vlm5030_device::setup_parameter(uint8_t param)
m_interp_step = 1; /* 2400bps : 4 interpolator */
/* bit 3,4,5 : speed (frame size) */
- m_frame_size = vlm5030_speed_table[(param>>3) & 7];
+ m_frame_size = vlm5030_speed_table[(param >> 3) & 7];
/* bit 6,7 : low / high pitch */
if (param & 0x80) /* bit7=1 , high pitch */
@@ -376,24 +378,10 @@ void vlm5030_device::setup_parameter(uint8_t param)
}
-void vlm5030_device::restore_state()
-{
- int interp_effect = FR_SIZE - (m_interp_count%FR_SIZE);
- /* restore parameter data */
- setup_parameter(m_parameter);
-
- /* restore current energy,pitch & filter */
- m_current_energy = m_old_energy + (m_target_energy - m_old_energy) * interp_effect / FR_SIZE;
- if (m_old_pitch > 1)
- m_current_pitch = m_old_pitch + (m_target_pitch - m_old_pitch) * interp_effect / FR_SIZE;
- for (int i = 0; i <= 9 ; i++)
- m_current_k[i] = m_old_k[i] + (m_target_k[i] - m_old_k[i]) * interp_effect / FR_SIZE;
-}
-
/* get BSY pin level */
-int vlm5030_device::bsy()
+int vlm5030_device::bsy_r()
{
- update();
+ m_channel->update();
return m_pin_BSY;
}
@@ -404,23 +392,24 @@ void vlm5030_device::data_w(uint8_t data)
}
/* set RST pin level : reset / set table address A8-A15 */
-void vlm5030_device::rst(int state)
+void vlm5030_device::rst_w(int state)
{
+ state = state ? 1 : 0;
+
if (m_pin_RST != state)
{
/* pin level is changed */
- update();
+ m_channel->update();
+ m_pin_RST = state;
if (!state)
{
/* H -> L : latch parameters */
- m_pin_RST = 0;
setup_parameter(m_latch_data);
}
else
{
/* L -> H : reset chip */
- m_pin_RST = 1;
if (m_pin_BSY)
{
device_reset();
@@ -430,29 +419,30 @@ void vlm5030_device::rst(int state)
}
/* set VCU pin level : ?? unknown */
-void vlm5030_device::vcu(int state)
+void vlm5030_device::vcu_w(int state)
{
/* direct mode / indirect mode */
- m_pin_VCU = state;
+ m_pin_VCU = state ? 1 : 0;
}
/* set ST pin level : set table address A0-A7 / start speech */
-void vlm5030_device::st(int state)
+void vlm5030_device::st_w(int state)
{
+ state = state ? 1 : 0;
+
if (m_pin_ST != state)
{
/* pin level is changed */
- update();
+ m_channel->update();
+ m_pin_ST = state;
if (!state)
{
/* H -> L */
- m_pin_ST = 0;
-
if (m_pin_VCU)
{
/* direct access mode & address High */
- m_vcu_addr_h = ((int)m_latch_data<<8) + 0x01;
+ m_vcu_addr_h = ((int)m_latch_data << 8) + 0x01;
}
else
{
@@ -461,14 +451,14 @@ void vlm5030_device::st(int state)
if (m_vcu_addr_h)
{
/* direct access mode */
- m_address = (m_vcu_addr_h&0xff00) + m_latch_data;
+ m_address = (m_vcu_addr_h & 0xff00) + m_latch_data;
m_vcu_addr_h = 0;
}
else
{
/* indirect access mode */
- int table = (m_latch_data&0xfe) + (((int)m_latch_data&1)<<8);
- m_address = (read_byte(table)<<8) | read_byte(table+1);
+ int table = (m_latch_data & 0xfe) + (((int)m_latch_data & 1) << 8);
+ m_address = (read_byte(table) << 8) | read_byte(table + 1);
/* show unsupported parameter message */
/* if (m_interp_step != 1) popmessage("No %d %dBPS parameter",table/2,m_interp_step*2400); */
}
@@ -484,7 +474,6 @@ void vlm5030_device::st(int state)
else
{
/* L -> H */
- m_pin_ST = 1;
/* setup speech , BSY on after 30ms? */
m_phase = PH_SETUP;
m_sample_count = 1; /* wait time for busy on */
@@ -500,16 +489,13 @@ void vlm5030_device::st(int state)
void vlm5030_device::sound_stream_update(sound_stream &stream)
{
- int interp_effect;
- int i;
- int u[11];
-
/* running */
- int sampindex = 0;
if (m_phase == PH_RUN || m_phase == PH_STOP)
{
+ int u[11];
+
/* playing speech */
- for ( ; sampindex < stream.samples(); sampindex++)
+ for (int sampindex = 0; sampindex < stream.samples(); sampindex++)
{
int current_val;
@@ -540,7 +526,7 @@ void vlm5030_device::sound_stream_update(sound_stream &stream)
/* Set old target as new start of frame */
m_current_energy = m_old_energy;
m_current_pitch = m_old_pitch;
- for (i = 0; i <= 9; i++)
+ for (int i = 0; i <= 9; i++)
m_current_k[i] = m_old_k[i];
/* is this a zero energy frame? */
@@ -549,7 +535,7 @@ void vlm5030_device::sound_stream_update(sound_stream &stream)
/*osd_printf_debug("processing frame: zero energy\n");*/
m_target_energy = 0;
m_target_pitch = m_current_pitch;
- for (i = 0; i <= 9; i++)
+ for (int i = 0; i <= 9; i++)
m_target_k[i] = m_current_k[i];
}
else
@@ -559,7 +545,7 @@ void vlm5030_device::sound_stream_update(sound_stream &stream)
/*osd_printf_debug("proc: %d %d\n",last_fbuf_head,fbuf_head);*/
m_target_energy = m_new_energy;
m_target_pitch = m_new_pitch;
- for (i = 0; i <= 9; i++)
+ for (int i = 0; i <= 9; i++)
m_target_k[i] = m_new_k[i];
}
}
@@ -568,11 +554,11 @@ void vlm5030_device::sound_stream_update(sound_stream &stream)
/* Update values based on step values 25% , 50% , 75% , 100% */
m_interp_count -= m_interp_step;
/* 3,2,1,0 -> 1,2,3,4 */
- interp_effect = FR_SIZE - (m_interp_count%FR_SIZE);
+ int interp_effect = FR_SIZE - (m_interp_count % FR_SIZE);
m_current_energy = m_old_energy + (m_target_energy - m_old_energy) * interp_effect / FR_SIZE;
if (m_old_pitch > 1)
m_current_pitch = m_old_pitch + (m_target_pitch - m_old_pitch) * interp_effect / FR_SIZE;
- for (i = 0; i <= 9 ; i++)
+ for (int i = 0; i <= 9; i++)
m_current_k[i] = m_old_k[i] + (m_target_k[i] - m_old_k[i]) * interp_effect / FR_SIZE;
}
@@ -595,9 +581,9 @@ void vlm5030_device::sound_stream_update(sound_stream &stream)
/* Lattice filter here */
u[10] = current_val;
- for (i = 9; i >= 0; i--)
+ for (int i = 9; i >= 0; i--)
u[i] = u[i+1] - ((-m_current_k[i] * m_x[i]) / 512);
- for (i = 9; i >= 1; i--)
+ for (int i = 9; i >= 1; i--)
m_x[i] = m_x[i-1] + ((-m_current_k[i-1] * u[i-1]) / 512);
m_x[0] = u[0];
diff --git a/src/devices/sound/vlm5030.h b/src/devices/sound/vlm5030.h
index f9d05749882..9ccee24bfd7 100644
--- a/src/devices/sound/vlm5030.h
+++ b/src/devices/sound/vlm5030.h
@@ -13,19 +13,19 @@ public:
vlm5030_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
/* get BSY pin level */
- int bsy();
+ int bsy_r();
/* latch contoll data */
void data_w(uint8_t data);
/* set RST pin level : reset / set table address A8-A15 */
- void rst(int state);
+ void rst_w(int state);
/* set VCU pin level : ?? unknown */
- void vcu(int state);
+ void vcu_w(int state);
/* set ST pin level : set table address A0-A7 / start speech */
- void st(int state);
+ void st_w(int state);
protected:
// device-level overrides
@@ -88,11 +88,9 @@ private:
int32_t m_x[10];
- int get_bits(int sbit,int bits);
+ int get_bits(int sbit, int bits);
int parse_frame();
- void update();
void setup_parameter(uint8_t param);
- void restore_state();
};
DECLARE_DEVICE_TYPE(VLM5030, vlm5030_device)
diff --git a/src/mame/konami/ddribble.cpp b/src/mame/konami/ddribble.cpp
index 39bd1f5005f..9ef896ef31b 100644
--- a/src/mame/konami/ddribble.cpp
+++ b/src/mame/konami/ddribble.cpp
@@ -349,8 +349,7 @@ uint8_t ddribble_state::vlm5030_busy_r()
return machine().rand(); // patch
// FIXME: remove ?
#if 0
- if (m_vlm->bsy()) return 1;
- else return 0;
+ return m_vlm->bsy_r();
#endif
}
@@ -359,13 +358,13 @@ void ddribble_state::vlm5030_ctrl_w(uint8_t data)
// b7 : vlm data bus OE
// b6 : VLM5030-RST
- m_vlm->rst(BIT(data, 6));
+ m_vlm->rst_w(BIT(data, 6));
// b5 : VLM5030-ST
- m_vlm->st(BIT(data, 5));
+ m_vlm->st_w(BIT(data, 5));
// b4 : VLM5300-VCU
- m_vlm->vcu(BIT(data, 4));
+ m_vlm->vcu_w(BIT(data, 4));
// b3 : ROM bank select
m_vlmbank->set_entry(BIT(data, 3));
diff --git a/src/mame/konami/jailbrek.cpp b/src/mame/konami/jailbrek.cpp
index 35a1f7db216..1145c3e6d53 100644
--- a/src/mame/konami/jailbrek.cpp
+++ b/src/mame/konami/jailbrek.cpp
@@ -268,20 +268,20 @@ uint32_t jailbrek_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
void jailbrek_state::coin_w(uint8_t data)
{
- machine().bookkeeping().coin_counter_w(0, data & 0x01);
- machine().bookkeeping().coin_counter_w(1, data & 0x02);
+ machine().bookkeeping().coin_counter_w(0, BIT(data, 0));
+ machine().bookkeeping().coin_counter_w(1, BIT(data, 1));
}
uint8_t jailbrek_state::speech_r()
{
- return (m_vlm->bsy() ? 1 : 0);
+ return m_vlm->bsy_r();
}
void jailbrek_state::speech_w(uint8_t data)
{
// bit 0 is latch direction like in yiear
- m_vlm->st((data >> 1) & 1);
- m_vlm->rst((data >> 2) & 1);
+ m_vlm->st_w(BIT(data, 1));
+ m_vlm->rst_w(BIT(data, 2));
}
void jailbrek_state::prg_map(address_map &map)
diff --git a/src/mame/konami/nemesis.cpp b/src/mame/konami/nemesis.cpp
index 167a3707581..4c14bb729c4 100644
--- a/src/mame/konami/nemesis.cpp
+++ b/src/mame/konami/nemesis.cpp
@@ -386,22 +386,22 @@ void gx400_state::speech_w(offs_t offset, uint8_t data)
m_vlm->data_w(data);
// bit 5: ST, bit 6: RST
- m_vlm->st(BIT(offset, 5));
- m_vlm->rst(BIT(offset, 6));
+ m_vlm->st_w(BIT(offset, 5));
+ m_vlm->rst_w(BIT(offset, 6));
m_speech_offset = offset;
}
void salamand_state::speech_start_w(uint8_t data)
{
- m_vlm->rst(BIT(data, 0));
- m_vlm->st(BIT(data, 1));
+ m_vlm->rst_w(BIT(data, 0));
+ m_vlm->st_w(BIT(data, 1));
// bit 2 is OE for VLM data
}
uint8_t salamand_state::speech_busy_r()
{
- return m_vlm->bsy();
+ return m_vlm->bsy_r();
}
uint8_t gx400_state::nemesis_portA_r()
@@ -416,7 +416,7 @@ uint8_t gx400_state::nemesis_portA_r()
res |= 0xd0;
- if (m_vlm != nullptr && m_vlm->bsy())
+ if (m_vlm != nullptr && m_vlm->bsy_r())
res |= 0x20;
return res;
diff --git a/src/mame/konami/rockrage.cpp b/src/mame/konami/rockrage.cpp
index 58335b4460e..c1b0c83a313 100644
--- a/src/mame/konami/rockrage.cpp
+++ b/src/mame/konami/rockrage.cpp
@@ -219,14 +219,14 @@ void rockrage_state::bankswitch_w(uint8_t data)
uint8_t rockrage_state::vlm5030_busy_r()
{
- return (m_vlm->bsy() ? 1 : 0);
+ return m_vlm->bsy_r();
}
void rockrage_state::speech_w(uint8_t data)
{
// bit2 = data bus enable
- m_vlm->rst((data >> 1) & 0x01);
- m_vlm->st((data >> 0) & 0x01);
+ m_vlm->rst_w(BIT(data, 1));
+ m_vlm->st_w(BIT(data, 0));
}
void rockrage_state::main_map(address_map &map)
diff --git a/src/mame/konami/trackfld.cpp b/src/mame/konami/trackfld.cpp
index 8cc9eb51b69..f340fdbac9b 100644
--- a/src/mame/konami/trackfld.cpp
+++ b/src/mame/konami/trackfld.cpp
@@ -489,9 +489,8 @@ void trackfld_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &clipre
{
uint8_t *spriteram = m_spriteram;
uint8_t *spriteram_2 = m_spriteram2;
- int offs;
- for (offs = m_spriteram.bytes() - 2; offs >= 0; offs -= 2)
+ for (int offs = m_spriteram.bytes() - 2; offs >= 0; offs -= 2)
{
int attr = spriteram_2[offs];
int code = spriteram[offs + 1];
@@ -520,17 +519,14 @@ void trackfld_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &clipre
// sy++; /* fix title screen & garbage at the bottom of the screen */
//}
-
-
- m_gfxdecode->gfx(0)->transmask(bitmap,cliprect,
+ m_gfxdecode->gfx(0)->transmask(bitmap,cliprect,
code + m_sprite_bank1 + m_sprite_bank2, color,
flipx, flipy,
sx, sy,
m_palette->transpen_mask(*m_gfxdecode->gfx(0), color, 0));
/* redraw with wraparound */
-
- m_gfxdecode->gfx(0)->transmask(bitmap,cliprect,
+ m_gfxdecode->gfx(0)->transmask(bitmap,cliprect,
code + m_sprite_bank1 + m_sprite_bank2, color,
flipx, flipy,
sx - 256, sy,
@@ -617,17 +613,14 @@ void trackfld_state::nmi_mask_w(int state)
uint8_t trackfld_state::trackfld_speech_r()
{
- if (m_vlm->bsy())
- return 1;
- else
- return 0;
+ return m_vlm->bsy_r();
}
void trackfld_state::trackfld_VLM5030_control_w(uint8_t data)
{
/* bit 0 is latch direction */
- m_vlm->st((data >> 1) & 1);
- m_vlm->rst((data >> 2) & 1);
+ m_vlm->st_w(BIT(data, 1));
+ m_vlm->rst_w(BIT(data, 2));
}
diff --git a/src/mame/konami/trackfld_a.cpp b/src/mame/konami/trackfld_a.cpp
index 62d0ba911df..fea1eea2f2f 100644
--- a/src/mame/konami/trackfld_a.cpp
+++ b/src/mame/konami/trackfld_a.cpp
@@ -6,15 +6,12 @@
constexpr unsigned TIMER_RATE = 4096 / 4;
-
-
DEFINE_DEVICE_TYPE(TRACKFLD_AUDIO, trackfld_audio_device, "trackfld_audio", "Track And Field Audio")
trackfld_audio_device::trackfld_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, TRACKFLD_AUDIO, tag, owner, clock)
, m_audiocpu(*this, finder_base::DUMMY_TAG)
, m_vlm(*this, finder_base::DUMMY_TAG)
- , m_last_addr(0)
, m_last_irq(0)
{
}
@@ -25,7 +22,6 @@ trackfld_audio_device::trackfld_audio_device(const machine_config &mconfig, cons
void trackfld_audio_device::device_start()
{
- save_item(NAME(m_last_addr));
save_item(NAME(m_last_irq));
}
@@ -52,31 +48,25 @@ uint8_t trackfld_audio_device::trackfld_sh_timer_r()
{
uint32_t clock = m_audiocpu->total_cycles() / TIMER_RATE;
- return clock & 0xF;
+ return clock & 0xf;
}
uint8_t trackfld_audio_device::trackfld_speech_r()
{
- return m_vlm->bsy() ? 0x10 : 0;
+ return m_vlm->bsy_r() ? 0x10 : 0;
}
void trackfld_audio_device::trackfld_sound_w(offs_t offset, uint8_t data)
{
- const uint8_t changes = offset ^ m_last_addr;
-
// A7 = data enable for VLM5030 (don't care)
- // A8 = STA pin (1->0 data data , 0->1 start speech
+ // A8 = STA pin (1->0 data data, 0->1 start speech)
// A9 = RST pin 1=reset
// A8 VLM5030 ST pin
- if (changes & 0x100)
- m_vlm->st(offset & 0x100);
+ m_vlm->st_w(BIT(offset, 8));
// A9 VLM5030 RST pin
- if (changes & 0x200)
- m_vlm->rst(offset & 0x200);
-
- m_last_addr = offset;
+ m_vlm->rst_w(BIT(offset, 9));
}
uint8_t trackfld_audio_device::hyperspt_sh_timer_r()
@@ -84,31 +74,25 @@ uint8_t trackfld_audio_device::hyperspt_sh_timer_r()
uint32_t clock = m_audiocpu->total_cycles() / TIMER_RATE;
if (m_vlm != nullptr)
- return (clock & 0x3) | (m_vlm->bsy() ? 0x04 : 0);
+ return (clock & 0x3) | (m_vlm->bsy_r() ? 0x04 : 0);
else
return (clock & 0x3);
}
void trackfld_audio_device::hyperspt_sound_w(offs_t offset, uint8_t data)
{
- const uint8_t changes = offset ^ m_last_addr;
-
// A3 = data enable for VLM5030 (don't care )
- // A4 = STA pin (1->0 data data , 0->1 start speech
+ // A4 = STA pin (1->0 data data, 0->1 start speech)
// A5 = RST pin 1=reset
// A6 = VLM5030 output disable (don't care )
// A7 = kONAMI DAC output disable (don't care )
// A8 = SN76489AN output disable (don't care )
// A4 VLM5030 ST pin
- if (changes & 0x10)
- m_vlm->st(offset & 0x10);
+ m_vlm->st_w(BIT(offset, 4));
// A5 VLM5030 RST pin
- if( changes & 0x20 )
- m_vlm->rst(offset & 0x20);
-
- m_last_addr = offset;
+ m_vlm->rst_w(BIT(offset, 5));
}
@@ -116,7 +100,7 @@ void trackfld_audio_device::hyperspt_sound_w(offs_t offset, uint8_t data)
void trackfld_audio_device::sh_irqtrigger_w(int state)
{
// setting bit 0 low then high triggers IRQ on the sound CPU
- if (m_last_irq == 0 && state)
+ if (!m_last_irq && state)
m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); // Z80
m_last_irq = state;
diff --git a/src/mame/konami/trackfld_a.h b/src/mame/konami/trackfld_a.h
index a7dd896011b..808244b4059 100644
--- a/src/mame/konami/trackfld_a.h
+++ b/src/mame/konami/trackfld_a.h
@@ -38,8 +38,7 @@ private:
optional_device<vlm5030_device> m_vlm;
// internal state
- int m_last_addr;
- int m_last_irq;
+ uint8_t m_last_irq;
};
DECLARE_DEVICE_TYPE(TRACKFLD_AUDIO, trackfld_audio_device)
diff --git a/src/mame/konami/yiear.cpp b/src/mame/konami/yiear.cpp
index 5643f468a7c..23f28be0ae6 100644
--- a/src/mame/konami/yiear.cpp
+++ b/src/mame/konami/yiear.cpp
@@ -315,17 +315,14 @@ uint32_t yiear_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap,
uint8_t yiear_state::speech_r()
{
- if (m_vlm->bsy())
- return 1;
- else
- return 0;
+ return m_vlm->bsy_r();
}
void yiear_state::vlm5030_control_w(uint8_t data)
{
// bit 0 is latch direction
- m_vlm->st((data >> 1) & 1);
- m_vlm->rst((data >> 2) & 1);
+ m_vlm->st_w(BIT(data, 1));
+ m_vlm->rst_w(BIT(data, 2));
}
void yiear_state::vblank_irq(int state)
diff --git a/src/mame/nintendo/punchout.cpp b/src/mame/nintendo/punchout.cpp
index f8649010ebc..1b4db1cc715 100644
--- a/src/mame/nintendo/punchout.cpp
+++ b/src/mame/nintendo/punchout.cpp
@@ -329,7 +329,7 @@ static INPUT_PORTS_START( punchout )
PORT_DIPSETTING( 0x0a, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x07, DEF_STR( 1C_6C ) )
PORT_DIPSETTING( 0x0f, DEF_STR( Free_Play ) )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("vlm", FUNC(vlm5030_device::bsy)) /* VLM5030 busy signal */
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("vlm", FUNC(vlm5030_device::bsy_r)) /* VLM5030 busy signal */
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_DIPUNUSED_DIPLOC( 0x40, 0x00, "R18:!1" ) /* Not documented, R18 resistor */
PORT_DIPNAME( 0x80, 0x00, "Copyright" ) PORT_DIPLOCATION("R19:!1") /* Not documented, R19 resistor */
@@ -562,7 +562,7 @@ bit 3210 5432 L R C
PORT_DIPSETTING( 0x0d, "1101" )
PORT_DIPSETTING( 0x0e, "1110" )
PORT_DIPSETTING( 0x0f, "1111" )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("vlm", FUNC(vlm5030_device::bsy)) /* VLM5030 busy signal */
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("vlm", FUNC(vlm5030_device::bsy_r)) /* VLM5030 busy signal */
PORT_DIPNAME( 0x40, 0x00, "Coin Slots" ) PORT_DIPLOCATION("R18:!1") /* R18 resistor */
PORT_DIPSETTING( 0x40, "1" )
PORT_DIPSETTING( 0x00, "2" )
@@ -623,9 +623,9 @@ void punchout_state::punchout(machine_config &config)
mainlatch.q_out_cb<1>().set_nop(); // watchdog reset, seldom used because 08 clears the watchdog as well
mainlatch.q_out_cb<2>().set_nop(); // ?
mainlatch.q_out_cb<3>().set_inputline("audiocpu", INPUT_LINE_RESET);
- mainlatch.q_out_cb<4>().set("vlm", FUNC(vlm5030_device::rst));
- mainlatch.q_out_cb<5>().set("vlm", FUNC(vlm5030_device::st));
- mainlatch.q_out_cb<6>().set("vlm", FUNC(vlm5030_device::vcu));
+ mainlatch.q_out_cb<4>().set("vlm", FUNC(vlm5030_device::rst_w));
+ mainlatch.q_out_cb<5>().set("vlm", FUNC(vlm5030_device::st_w));
+ mainlatch.q_out_cb<6>().set("vlm", FUNC(vlm5030_device::vcu_w));
mainlatch.q_out_cb<7>().set_nop(); // enable NVRAM?
/* video hardware */