diff options
-rw-r--r-- | scripts/src/video.lua | 12 | ||||
-rw-r--r-- | src/devices/bus/pci/zr36057.cpp | 24 | ||||
-rw-r--r-- | src/devices/bus/pci/zr36057.h | 13 | ||||
-rw-r--r-- | src/devices/video/saa7110.cpp | 38 | ||||
-rw-r--r-- | src/devices/video/saa7110.h | 33 | ||||
-rw-r--r-- | src/emu/xtal.cpp | 3 |
6 files changed, 115 insertions, 8 deletions
diff --git a/scripts/src/video.lua b/scripts/src/video.lua index 6a9037fa240..cbeb2153db7 100644 --- a/scripts/src/video.lua +++ b/scripts/src/video.lua @@ -1114,6 +1114,18 @@ end -------------------------------------------------- -- +--@src/devices/video/saa7110.h,VIDEOS["SAA7110"] = true +-------------------------------------------------- + +if (VIDEOS["SAA7110"]~=null) then + files { + MAME_DIR .. "src/devices/video/saa7110.cpp", + MAME_DIR .. "src/devices/video/saa7110.h", + } +end + +-------------------------------------------------- +-- --@src/devices/video/sn74s262.h,VIDEOS["SN74S262"] = true -------------------------------------------------- diff --git a/src/devices/bus/pci/zr36057.cpp b/src/devices/bus/pci/zr36057.cpp index b7aacba98b2..dff2bf68c96 100644 --- a/src/devices/bus/pci/zr36057.cpp +++ b/src/devices/bus/pci/zr36057.cpp @@ -48,6 +48,7 @@ DEFINE_DEVICE_TYPE(ZR36057_PCI, zr36057_device, "zr36057", "Zoran ZR36057-ba zr36057_device::zr36057_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : pci_card_device(mconfig, type, tag, owner, clock) + , m_decoder(*this, "decoder") { // ZR36057PQC Video cutting chipset // device ID reportedly same for ZR36057 and ZR36067, revision 0x02 for latter. @@ -69,7 +70,17 @@ zr36057_device::zr36057_device(const machine_config &mconfig, const char *tag, d void zr36057_device::device_add_mconfig(machine_config &config) { + // 27'000'000 xtal near ZR36060 + SAA7110A(config, m_decoder, XTAL(26'800'000)); + m_decoder->sda_callback().set([this](int state) { m_decoder_sdao_state = state; }); + + // S-Video input/output + // composite video input/output + + // video and audio input/output pins on PCB, for cross connection with other boards + + // DC30 combines the two audio input/output as an external jack option } void zr36057_device::device_start() @@ -199,11 +210,20 @@ void zr36057_device::asr_map(address_map &map) }) ); - map(0x044, 0x047).lr32( + map(0x044, 0x047).lrw32( NAME([this] (offs_t offset) { LOG("I2C R\n"); // avoid win98 stall for now - return 0x3; + return m_decoder_sdao_state << 1 | 1; + //return 3; + }), + NAME([this] (offs_t offset, u32 data, u32 mem_mask) { + //printf("I2C %02x %08x\n", data, mem_mask); + if (ACCESSING_BITS_0_7) + { + m_decoder->sda_write(BIT(data, 1)); + m_decoder->scl_write(BIT(data, 0)); + } }) ); } diff --git a/src/devices/bus/pci/zr36057.h b/src/devices/bus/pci/zr36057.h index 379b9285ae5..94b3b436633 100644 --- a/src/devices/bus/pci/zr36057.h +++ b/src/devices/bus/pci/zr36057.h @@ -7,7 +7,7 @@ #pragma once #include "pci_slot.h" - +#include "video/saa7110.h" class zr36057_device : public pci_card_device { @@ -31,9 +31,10 @@ protected: virtual void config_map(address_map &map) override ATTR_COLD; private: + required_device<saa7110a_device> m_decoder; void asr_map(address_map &map) ATTR_COLD; - void software_reset(); + void software_reset(); struct { u32 horizontal_config; @@ -43,9 +44,11 @@ private: bool m_softreset; u8 m_gpio_ddr, m_pci_waitstate_control; - struct { - u8 time[4]; - } m_guestbus; + struct { + u8 time[4]; + } m_guestbus; + + int m_decoder_sdao_state; }; DECLARE_DEVICE_TYPE(ZR36057_PCI, zr36057_device) diff --git a/src/devices/video/saa7110.cpp b/src/devices/video/saa7110.cpp new file mode 100644 index 00000000000..dda0dac2076 --- /dev/null +++ b/src/devices/video/saa7110.cpp @@ -0,0 +1,38 @@ +// license: BSD-3-Clause +// copyright-holders: Angelo Salese + +#include "emu.h" +#include "saa7110.h" + +#define VERBOSE (1) +#include "logmacro.h" + +DEFINE_DEVICE_TYPE(SAA7110A, saa7110a_device, "saa7110a", "SAA7110A OCF1") + +// TODO: pin address overridable with SA pin = 1 (0x9e >> 1) +saa7110a_device::saa7110a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, SAA7110A, tag, owner, clock) + , i2c_hle_interface(mconfig, *this, 0x9c >> 1) + //, device_memory_interface(mconfig, *this) +{} + +void saa7110a_device::device_start() +{ +} + +void saa7110a_device::device_reset() +{ + +} + +u8 saa7110a_device::read_data(u16 offset) +{ + //printf("%02x\n", offset); + return 0xff; +} + +void saa7110a_device::write_data(u16 offset, u8 data) +{ + //printf("%02x %02x\n", offset, data); +} + diff --git a/src/devices/video/saa7110.h b/src/devices/video/saa7110.h new file mode 100644 index 00000000000..d74976ba4f0 --- /dev/null +++ b/src/devices/video/saa7110.h @@ -0,0 +1,33 @@ +// license: BSD-3-Clause +// copyright-holders: Angelo Salese + +#ifndef MAME_VIDEO_SAA7110_H +#define MAME_VIDEO_SAA7110_H + +#pragma once + +#include "machine/i2chle.h" + +class saa7110a_device : + public device_t, + public i2c_hle_interface +// public device_memory_interface +{ +public: + saa7110a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: +// saa7110a_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; + +// virtual space_config_vector memory_space_config() const override; + virtual u8 read_data(u16 offset) override; + virtual void write_data(u16 offset, u8 data) override; + +}; + +DECLARE_DEVICE_TYPE(SAA7110A, saa7110a_device) +//DECLARE_DEVICE_TYPE(SAA7110, saa7110_device) + +#endif // MAME_VIDEO_SAA7110_H diff --git a/src/emu/xtal.cpp b/src/emu/xtal.cpp index 0af864ce6fb..271a4fcc4c5 100644 --- a/src/emu/xtal.cpp +++ b/src/emu/xtal.cpp @@ -388,10 +388,11 @@ const double XTAL::known_xtals[] = { 26'666'666, // 26.666666_MHz_XTAL Irem M92 but most use 27MHz 26'670'000, // 26.670_MHz_XTAL Namco EVA 26'686'000, // 26.686_MHz_XTAL Typically used on 90's Taito PCBs to drive the custom chips + 26'800'000, // 26.8_MHz_XTAL SAA7110 TV decoder 26'824'000, // 26.824_MHz_XTAL Astro Corp.'s Zoo 26'880'000, // 26.88_MHz_XTAL Roland RF5C36/SA-16 clock (30000 * 896) 26'989'200, // 26.9892_MHz_XTAL TeleVideo 965 - 27'000'000, // 27_MHz_XTAL Some Banpresto games macrossp, Irem M92 and 90's Toaplan games + 27'000'000, // 27_MHz_XTAL Some Banpresto games macrossp, Irem M92 and 90's Toaplan games, Pinnacle Zoran based PCI cards 27'164'000, // 27.164_MHz_XTAL Typically used on 90's Taito PCBs to drive the custom chips 27'210'900, // 27.2109_MHz_XTAL LA Girl 27'562'000, // 27.562_MHz_XTAL Visual 220 |