diff options
Diffstat (limited to 'src/mame/machine/nes_vt32_soc.cpp')
-rw-r--r-- | src/mame/machine/nes_vt32_soc.cpp | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/src/mame/machine/nes_vt32_soc.cpp b/src/mame/machine/nes_vt32_soc.cpp new file mode 100644 index 00000000000..4e15e33433c --- /dev/null +++ b/src/mame/machine/nes_vt32_soc.cpp @@ -0,0 +1,115 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood + +// used by fcpocket, dgun2573, rminitv + +#include "emu.h" +#include "nes_vt32_soc.h" + +// these have RGB12 output mode +DEFINE_DEVICE_TYPE(NES_VT32_SOC, nes_vt32_soc_device, "nes_vt32_soc", "VT32 series System on a Chip (FP) (NTSC)") +DEFINE_DEVICE_TYPE(NES_VT32_SOC_PAL, nes_vt32_soc_pal_device, "nes_vt32_soc_pal", "VT32 series System on a Chip (FP) (PAL)") + +nes_vt32_soc_device::nes_vt32_soc_device(const machine_config& mconfig, device_type type, const char* tag, device_t* owner, uint32_t clock) : + nes_vt09_soc_device(mconfig, type, tag, owner, clock) +{ +} + +nes_vt32_soc_device::nes_vt32_soc_device(const machine_config& mconfig, const char* tag, device_t* owner, uint32_t clock) : + nes_vt32_soc_device(mconfig, NES_VT32_SOC, tag, owner, clock) +{ +} + +nes_vt32_soc_pal_device::nes_vt32_soc_pal_device(const machine_config& mconfig, const char* tag, device_t* owner, uint32_t clock) : + nes_vt32_soc_device(mconfig, NES_VT32_SOC_PAL, tag, owner, clock) +{ +} + +void nes_vt32_soc_device::device_add_mconfig(machine_config& config) +{ + nes_vt02_vt03_soc_device::device_add_mconfig(config); + + M6502_VTSCR(config.replace(), m_maincpu, NTSC_APU_CLOCK); // are these later chips N2A03 core, or 6502 core derived? + m_maincpu->set_addrmap(AS_PROGRAM, &nes_vt32_soc_device::nes_vt_fp_map); +} + +void nes_vt32_soc_pal_device::device_add_mconfig(machine_config& config) +{ + nes_vt32_soc_device::device_add_mconfig(config); + do_pal_timings_and_ppu_replacement(config); +} + + +uint8_t nes_vt32_soc_device::vtfp_4119_r() +{ + // would be PAL/NTSC etc. in base system, maybe different here? + return 0x00; +} + +void nes_vt32_soc_device::vtfp_411e_w(uint8_t data) +{ + logerror("411e_w %02x\n", data); + if (data == 0x05) + dynamic_cast<m6502_vtscr&>(*m_maincpu).set_next_scramble(true); + else if (data == 0x00) + dynamic_cast<m6502_vtscr&>(*m_maincpu).set_next_scramble(false); +} + +void nes_vt32_soc_device::vtfp_4a00_w(uint8_t data) +{ + logerror("4a00_w %02x\n", data); + //if(data == 0x80) + // dynamic_cast<m6502_vtscr&>(*m_maincpu).set_scramble(false); +} + + +void nes_vt32_soc_device::vtfp_412c_extbank_w(uint8_t data) +{ + m_upper_write_412c_callback(data); +} + +uint8_t nes_vt32_soc_device::vtfp_412d_r() +{ + return m_upper_read_412d_callback(); +} + +void nes_vt32_soc_device::vtfp_4242_w(uint8_t data) +{ + logerror("vtfp_4242_w %02x\n", data); + m_4242 = data; +} + +void nes_vt32_soc_device::vtfp_411d_w(uint8_t data) +{ + // controls chram access and mapper emulation modes in later models + logerror("vtfp_411d_w %02x\n", data); + m_411d = data; + update_banks(); +} + +uint8_t nes_vt32_soc_device::vthh_414a_r() +{ + return 0x80; +} + + +void nes_vt32_soc_device::nes_vt_fp_map(address_map &map) +{ + nes_vt02_vt03_soc_device::nes_vt_map(map); + + map(0x0000, 0x1fff).mask(0x0fff).ram(); + + map(0x414a, 0x414a).r(FUNC(nes_vt32_soc_device::vthh_414a_r)); + map(0x411d, 0x411d).w(FUNC(nes_vt32_soc_device::vtfp_411d_w)); + + map(0x4119, 0x4119).r(FUNC(nes_vt32_soc_device::vtfp_4119_r)); + map(0x411e, 0x411e).w(FUNC(nes_vt32_soc_device::vtfp_411e_w)); // encryption toggle + + map(0x412c, 0x412c).w(FUNC(nes_vt32_soc_device::vtfp_412c_extbank_w)); // GPIO + map(0x412d, 0x412d).r(FUNC(nes_vt32_soc_device::vtfp_412d_r)); // GPIO + + map(0x4242, 0x4242).w(FUNC(nes_vt32_soc_device::vtfp_4242_w)); + + map(0x4a00, 0x4a00).w(FUNC(nes_vt32_soc_device::vtfp_4a00_w)); +} + |