quickpick5: remove trampolines to internal scc r/w handlers

This commit is contained in:
hap 2024-10-30 16:20:27 +01:00
parent cfe90961b1
commit 788f1c7586
3 changed files with 29 additions and 43 deletions

View File

@ -224,7 +224,7 @@ void master_state::master(machine_config &config)
Z80(config, m_maincpu, 8_MHz_XTAL/2); Z80(config, m_maincpu, 8_MHz_XTAL/2);
m_maincpu->z80_set_m1_cycles(4+1); // 1 WAIT CLK per M1 m_maincpu->z80_set_m1_cycles(4+1); // 1 WAIT CLK per M1
m_maincpu->set_addrmap(AS_PROGRAM, &master_state::main_trampoline); m_maincpu->set_addrmap(AS_PROGRAM, &master_state::main_trampoline);
ADDRESS_MAP_BANK(config, "mainmap").set_map(&master_state::main_map).set_options(ENDIANNESS_LITTLE, 8, 16); ADDRESS_MAP_BANK(config, m_mainmap).set_map(&master_state::main_map).set_options(ENDIANNESS_LITTLE, 8, 16);
auto &irq_clock(CLOCK(config, "irq_clock", 418)); // 555 timer (22nF, 150K, 1K5), measured 418Hz auto &irq_clock(CLOCK(config, "irq_clock", 418)); // 555 timer (22nF, 150K, 1K5), measured 418Hz
irq_clock.set_pulse_width(attotime::from_nsec(22870)); // active for 22.87us irq_clock.set_pulse_width(attotime::from_nsec(22870)); // active for 22.87us

View File

@ -26,6 +26,7 @@
#include "konami_helper.h" #include "konami_helper.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "machine/bankdev.h"
#include "machine/eepromser.h" #include "machine/eepromser.h"
#include "machine/k053252.h" #include "machine/k053252.h"
#include "machine/nvram.h" #include "machine/nvram.h"
@ -52,6 +53,7 @@ public:
m_k053245(*this, "k053245"), m_k053245(*this, "k053245"),
m_k051649(*this, "k051649"), m_k051649(*this, "k051649"),
m_k053252(*this, "k053252"), m_k053252(*this, "k053252"),
m_scc_map(*this, "scc_map"),
m_gfxdecode(*this, "gfxdecode"), m_gfxdecode(*this, "gfxdecode"),
m_oki(*this, "oki"), m_oki(*this, "oki"),
m_outport(*this, "OUT"), m_outport(*this, "OUT"),
@ -61,8 +63,14 @@ public:
void quickpick5(machine_config &config); void quickpick5(machine_config &config);
void waijockey(machine_config &config); void waijockey(machine_config &config);
int serial_io_r(); int serial_io_r();
protected:
virtual void machine_start() override ATTR_COLD;
virtual void machine_reset() override ATTR_COLD;
virtual void video_start() override ATTR_COLD;
private: private:
u32 screen_update_quickpick5(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); u32 screen_update_quickpick5(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@ -96,19 +104,17 @@ private:
void serial_io_w(u8 data); void serial_io_w(u8 data);
void out_w(u8 data); void out_w(u8 data);
void scc_map(address_map &map) ATTR_COLD;
void common_map(address_map &map) ATTR_COLD; void common_map(address_map &map) ATTR_COLD;
void quickpick5_main(address_map &map) ATTR_COLD; void quickpick5_main(address_map &map) ATTR_COLD;
void waijockey_main(address_map &map) ATTR_COLD; void waijockey_main(address_map &map) ATTR_COLD;
virtual void machine_start() override ATTR_COLD;
virtual void machine_reset() override ATTR_COLD;
virtual void video_start() override ATTR_COLD;
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<palette_device> m_palette; required_device<palette_device> m_palette;
required_device<k05324x_device> m_k053245; required_device<k05324x_device> m_k053245;
required_device<k051649_device> m_k051649; required_device<k051649_device> m_k051649;
required_device<k053252_device> m_k053252; required_device<k053252_device> m_k053252;
required_device<address_map_bank_device> m_scc_map;
required_device<gfxdecode_device> m_gfxdecode; required_device<gfxdecode_device> m_gfxdecode;
required_device<okim6295_device> m_oki; required_device<okim6295_device> m_oki;
required_ioport m_outport; required_ioport m_outport;
@ -195,22 +201,17 @@ void quickpick5_state::ccu_int_time_w(u8 data)
u8 quickpick5_state::vram_r(address_space &space, offs_t offset) u8 quickpick5_state::vram_r(address_space &space, offs_t offset)
{ {
if ((m_control & 0x10) == 0x10) if ((m_control & 0x10) == 0x10)
{ return m_scc_map->read8(offset & 0xff);
offset |= 0x800;
if ((offset >= 0x800) && (offset <= 0x880))
{
return m_k051649->k051649_waveform_r(offset & 0x7f);
}
else if ((offset >= 0x8e0) && (offset <= 0x8ff))
{
return m_k051649->k051649_test_r(space);
}
}
if ((m_control & 0x60) == 0x60) if ((m_control & 0x60) == 0x60)
{ {
u8 *ROM = memregion("ttl")->base(); const u8 *ROM = memregion("ttl")->base();
return ROM[m_ttlrom_offset++]; u8 ret = ROM[m_ttlrom_offset];
if (!machine().side_effects_disabled())
m_ttlrom_offset++;
return ret;
} }
return m_vram[offset]; return m_vram[offset];
@ -220,29 +221,7 @@ void quickpick5_state::vram_w(offs_t offset, u8 data)
{ {
if ((m_control & 0x10) == 0x10) if ((m_control & 0x10) == 0x10)
{ {
offset |= 0x800; m_scc_map->write8(offset & 0xff, data);
if ((offset >= 0x800) && (offset < 0x880))
{
m_k051649->k051649_waveform_w(offset-0x800, data);
return;
}
else if (offset < 0x88a)
{
m_k051649->k051649_frequency_w(offset-0x880, data);
return;
}
else if (offset < 0x88f)
{
m_k051649->k051649_volume_w(offset-0x88a, data);
return;
}
else if (offset < 0x890)
{
m_k051649->k051649_keyonoff_w(data);
return;
}
m_k051649->k051649_test_w(data);
return; return;
} }
@ -346,6 +325,11 @@ TIMER_DEVICE_CALLBACK_MEMBER(quickpick5_state::scanline)
} }
} }
void quickpick5_state::scc_map(address_map &map)
{
map(0x00, 0xff).m(m_k051649, FUNC(k051649_device::scc_map));
}
void quickpick5_state::common_map(address_map &map) void quickpick5_state::common_map(address_map &map)
{ {
map(0x0000, 0x7fff).rom().region("maincpu", 0); map(0x0000, 0x7fff).rom().region("maincpu", 0);
@ -591,6 +575,8 @@ void quickpick5_state::quickpick5(machine_config &config)
TIMER(config, "scantimer").configure_scanline(FUNC(quickpick5_state::scanline), "screen", 0, 1); TIMER(config, "scantimer").configure_scanline(FUNC(quickpick5_state::scanline), "screen", 0, 1);
HOPPER(config, "hopper", attotime::from_msec(100)); HOPPER(config, "hopper", attotime::from_msec(100));
ADDRESS_MAP_BANK(config, m_scc_map).set_map(&quickpick5_state::scc_map).set_options(ENDIANNESS_LITTLE, 8, 8);
K053252(config, m_k053252, XTAL(32'000'000)/4); /* K053252, xtal verified, divider not verified */ K053252(config, m_k053252, XTAL(32'000'000)/4); /* K053252, xtal verified, divider not verified */
m_k053252->int1_ack().set(FUNC(quickpick5_state::vbl_ack_w)); m_k053252->int1_ack().set(FUNC(quickpick5_state::vbl_ack_w));
m_k053252->int2_ack().set(FUNC(quickpick5_state::nmi_ack_w)); m_k053252->int2_ack().set(FUNC(quickpick5_state::nmi_ack_w));

View File

@ -108,8 +108,8 @@ n = 0/2/4/6 10+n MHz XTAL
b = Playing mode options on the 2nd row b = Playing mode options on the 2nd row
All known chess computers with the A20 ROM have LEDs, and the S/t/b options are All known chess computers with the A20 ROM have LEDs, and the S/t/b options are
either configured as either St, or b. So, none of them that have the Studies configured as either St, or b. So, none of them that have the Studies button and
button and teach mode officially support the extra options and vice versa. teach mode officially support the extra options and vice versa.
H8/3214 A20 MCU is used in: H8/3214 A20 MCU is used in:
- Saitek Centurion (config: StL0_) - Saitek Centurion (config: StL0_)