From f0080fce5481a82120399a2b1071cf53e7b59e80 Mon Sep 17 00:00:00 2001 From: angelosa Date: Sat, 16 Nov 2024 12:58:30 +0100 Subject: [PATCH] bus/isa/svga_tseng: ET4000AX is a ISA16 card --- src/devices/bus/isa/isa_cards.cpp | 6 ++--- src/devices/bus/isa/svga_tseng.cpp | 42 +++++++++++++++--------------- src/devices/bus/isa/svga_tseng.h | 20 +++++++------- src/devices/video/pc_vga_tseng.cpp | 22 ++-------------- 4 files changed, 35 insertions(+), 55 deletions(-) diff --git a/src/devices/bus/isa/isa_cards.cpp b/src/devices/bus/isa/isa_cards.cpp index 8ad01bcef63..95e4fb6e657 100644 --- a/src/devices/bus/isa/isa_cards.cpp +++ b/src/devices/bus/isa/isa_cards.cpp @@ -105,8 +105,6 @@ void pc_isa8_cards(device_slot_interface &device) device.option_add("ega", ISA8_EGA); device.option_add("pgc", ISA8_PGC); device.option_add("vga", ISA8_VGA); - device.option_add("svga_et4k", ISA8_SVGA_ET4K); - device.option_add("svga_et4k_kasan16", ISA8_SVGA_ET4K_KASAN16); device.option_add("wd90c90_jk", ISA8_WD90C90_JK); device.option_add("num9rev",ISA8_NUM_9_REV); device.option_add("com", ISA8_COM); @@ -160,8 +158,6 @@ void pc_isa16_cards(device_slot_interface &device) device.option_add("ega", ISA8_EGA); device.option_add("pgc", ISA8_PGC); device.option_add("vga", ISA8_VGA); - device.option_add("svga_et4k", ISA8_SVGA_ET4K); - device.option_add("svga_et4k_kasan16", ISA8_SVGA_ET4K_KASAN16); device.option_add("wd90c90_jk", ISA8_WD90C90_JK); device.option_add("num9rev",ISA8_NUM_9_REV); device.option_add("com", ISA8_COM); @@ -219,6 +215,8 @@ void pc_isa16_cards(device_slot_interface &device) // device.option_add("tgui9680",ISA16_SVGA_TGUI9680); device.option_add("pvga1a", ISA16_PVGA1A); device.option_add("pvga1a_jk", ISA16_PVGA1A_JK); + device.option_add("svga_et4k", ISA16_SVGA_ET4K); + device.option_add("svga_et4k_kasan16", ISA16_SVGA_ET4K_KASAN16); device.option_add("wd90c00_jk", ISA16_WD90C00_JK); device.option_add("wd90c11_lr", ISA16_WD90C11_LR); device.option_add("wd90c30_lr", ISA16_WD90C30_LR); diff --git a/src/devices/bus/isa/svga_tseng.cpp b/src/devices/bus/isa/svga_tseng.cpp index 39a6533f3c7..298dee2ee9e 100644 --- a/src/devices/bus/isa/svga_tseng.cpp +++ b/src/devices/bus/isa/svga_tseng.cpp @@ -32,15 +32,15 @@ ROM_END // GLOBAL VARIABLES //************************************************************************** -DEFINE_DEVICE_TYPE(ISA8_SVGA_ET4K, isa8_svga_et4k_device, "et4000", "SVGA Tseng ET4000AX Graphics Card") -DEFINE_DEVICE_TYPE(ISA8_SVGA_ET4K_KASAN16, isa8_svga_et4k_kasan16_device, "et4000_kasan16", "SVGA Kasan Hangulmadang-16 ET4000AX Graphics Card") +DEFINE_DEVICE_TYPE(ISA16_SVGA_ET4K, isa16_svga_et4k_device, "et4000", "SVGA Tseng ET4000AX Graphics Card") +DEFINE_DEVICE_TYPE(ISA16_SVGA_ET4K_KASAN16, isa16_svga_et4k_kasan16_device, "et4000_kasan16", "SVGA Kasan Hangulmadang-16 ET4000AX Graphics Card") //------------------------------------------------- // device_add_mconfig - add device configuration //------------------------------------------------- -void isa8_svga_et4k_device::device_add_mconfig(machine_config &config) +void isa16_svga_et4k_device::device_add_mconfig(machine_config &config) { screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_raw(25.175_MHz_XTAL, 800, 0, 640, 524, 0, 480); @@ -55,7 +55,7 @@ void isa8_svga_et4k_device::device_add_mconfig(machine_config &config) // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *isa8_svga_et4k_device::device_rom_region() const +const tiny_rom_entry *isa16_svga_et4k_device::device_rom_region() const { return ROM_NAME( et4000 ); } @@ -65,17 +65,17 @@ const tiny_rom_entry *isa8_svga_et4k_device::device_rom_region() const //************************************************************************** //------------------------------------------------- -// isa8_vga_device - constructor +// isa16_vga_device - constructor //------------------------------------------------- -isa8_svga_et4k_device::isa8_svga_et4k_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - isa8_svga_et4k_device(mconfig, ISA8_SVGA_ET4K, tag, owner, clock) +isa16_svga_et4k_device::isa16_svga_et4k_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + isa16_svga_et4k_device(mconfig, ISA16_SVGA_ET4K, tag, owner, clock) { } -isa8_svga_et4k_device::isa8_svga_et4k_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) +isa16_svga_et4k_device::isa16_svga_et4k_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, type, tag, owner, clock) - , device_isa8_card_interface(mconfig, *this) + , device_isa16_card_interface(mconfig, *this) , m_vga(*this, "vga") { } @@ -83,9 +83,9 @@ isa8_svga_et4k_device::isa8_svga_et4k_device(const machine_config &mconfig, devi //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- -uint8_t isa8_svga_et4k_device::input_port_0_r() { return 0xff; } //return machine().root_device().ioport("IN0")->read(); } +uint8_t isa16_svga_et4k_device::input_port_0_r() { return 0xff; } //return machine().root_device().ioport("IN0")->read(); } -void isa8_svga_et4k_device::device_start() +void isa16_svga_et4k_device::device_start() { set_isa_device(); @@ -98,7 +98,7 @@ void isa8_svga_et4k_device::device_start() // device_reset - device-specific reset //------------------------------------------------- -void isa8_svga_et4k_device::device_reset() +void isa16_svga_et4k_device::device_reset() { } @@ -107,7 +107,7 @@ void isa8_svga_et4k_device::device_reset() // could have unmapped it //------------------------------------------------- -void isa8_svga_et4k_device::remap(int space_id, offs_t start, offs_t end) +void isa16_svga_et4k_device::remap(int space_id, offs_t start, offs_t end) { if (space_id == AS_PROGRAM) { @@ -118,22 +118,22 @@ void isa8_svga_et4k_device::remap(int space_id, offs_t start, offs_t end) map_io(); } -void isa8_svga_et4k_device::io_isa_map(address_map &map) +void isa16_svga_et4k_device::io_isa_map(address_map &map) { map(0x00, 0x2f).m(m_vga, FUNC(tseng_vga_device::io_map)); } -void isa8_svga_et4k_device::map_io() +void isa16_svga_et4k_device::map_io() { - m_isa->install_device(0x03b0, 0x03df, *this, &isa8_svga_et4k_device::io_isa_map); + m_isa->install_device(0x03b0, 0x03df, *this, &isa16_svga_et4k_device::io_isa_map); } -void isa8_svga_et4k_device::map_ram() +void isa16_svga_et4k_device::map_ram() { m_isa->install_memory(0xa0000, 0xbffff, read8sm_delegate(*m_vga, FUNC(tseng_vga_device::mem_r)), write8sm_delegate(*m_vga, FUNC(tseng_vga_device::mem_w))); } -void isa8_svga_et4k_device::map_rom() +void isa16_svga_et4k_device::map_rom() { m_isa->install_rom(this, 0xc0000, 0xc7fff, "et4000"); } @@ -144,8 +144,8 @@ void isa8_svga_et4k_device::map_rom() * Same as regular ET4000AX with extra font I/Os */ -isa8_svga_et4k_kasan16_device::isa8_svga_et4k_kasan16_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : isa8_svga_et4k_device(mconfig, ISA8_SVGA_ET4K_KASAN16, tag, owner, clock) +isa16_svga_et4k_kasan16_device::isa16_svga_et4k_kasan16_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : isa16_svga_et4k_device(mconfig, ISA16_SVGA_ET4K_KASAN16, tag, owner, clock) , m_hangul_rom(*this, "hangul") { } @@ -159,7 +159,7 @@ ROM_START( kasan16 ) ROM_LOAD("kasan_ksc5601.rom", 0x00000, 0x80000, CRC(a547c5ec) SHA1(1358feb2ccaca040a176bedc7c256ec481351b41) ) ROM_END -const tiny_rom_entry *isa8_svga_et4k_kasan16_device::device_rom_region() const +const tiny_rom_entry *isa16_svga_et4k_kasan16_device::device_rom_region() const { return ROM_NAME( kasan16 ); } diff --git a/src/devices/bus/isa/svga_tseng.h b/src/devices/bus/isa/svga_tseng.h index 6d1a86d9108..081f0033ab0 100644 --- a/src/devices/bus/isa/svga_tseng.h +++ b/src/devices/bus/isa/svga_tseng.h @@ -16,22 +16,22 @@ // TYPE DEFINITIONS //************************************************************************** -// ======================> isa8_vga_device +// ======================> isa16_vga_device -class isa8_svga_et4k_device : +class isa16_svga_et4k_device : public device_t, - public device_isa8_card_interface + public device_isa16_card_interface { public: // construction/destruction - isa8_svga_et4k_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + isa16_svga_et4k_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); uint8_t input_port_0_r(); virtual void remap(int space_id, offs_t start, offs_t end) override; protected: - isa8_svga_et4k_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + isa16_svga_et4k_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); // device-level overrides virtual void device_start() override ATTR_COLD; @@ -50,11 +50,11 @@ private: required_device m_vga; }; -class isa8_svga_et4k_kasan16_device : - public isa8_svga_et4k_device +class isa16_svga_et4k_kasan16_device : + public isa16_svga_et4k_device { public: - isa8_svga_et4k_kasan16_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + isa16_svga_et4k_kasan16_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; @@ -64,7 +64,7 @@ private: }; // device type definition -DECLARE_DEVICE_TYPE(ISA8_SVGA_ET4K, isa8_svga_et4k_device) -DECLARE_DEVICE_TYPE(ISA8_SVGA_ET4K_KASAN16, isa8_svga_et4k_kasan16_device) +DECLARE_DEVICE_TYPE(ISA16_SVGA_ET4K, isa16_svga_et4k_device) +DECLARE_DEVICE_TYPE(ISA16_SVGA_ET4K_KASAN16, isa16_svga_et4k_kasan16_device) #endif // MAME_BUS_ISA_SVGA_TSENG_H diff --git a/src/devices/video/pc_vga_tseng.cpp b/src/devices/video/pc_vga_tseng.cpp index 288ac1bc850..06c2df87aae 100644 --- a/src/devices/video/pc_vga_tseng.cpp +++ b/src/devices/video/pc_vga_tseng.cpp @@ -178,26 +178,7 @@ void tseng_vga_device::attribute_map(address_map &map) NAME([this] (offs_t offset) { return et4k.misc1; }), NAME([this] (offs_t offset, u8 data) { et4k.misc1 = data; - // TODO: this should be taken into account for recompute_params - #if 0 - svga.rgb8_en = 0; - svga.rgb15_en = 0; - svga.rgb16_en = 0; - svga.rgb32_en = 0; - switch(et4k.misc1 & 0x30) - { - case 0: - // normal power-up mode - break; - case 0x10: - svga.rgb8_en = 1; - break; - case 0x20: - case 0x30: - popmessage("Tseng 15/16 bit HiColor mode, contact MAMEdev"); - break; - } - #endif + recompute_params(); }) ); // Miscellaneous 2 @@ -245,6 +226,7 @@ void tseng_vga_device::recompute_params() xtal = 38000000; break; } + // TODO: also read et4k.misc1? switch(et4k.dac_ctrl & 0xe0) { case 0xa0: