From d0cb917f3f91701c602020930f64655687604403 Mon Sep 17 00:00:00 2001 From: AJR Date: Sat, 23 Feb 2019 00:51:10 -0500 Subject: wyse.cpp: Descramble all remaining sets and move to separate drivers --- scripts/target/mame/mess.lua | 3 +- src/mame/drivers/wy55.cpp | 104 +++++++++++++++++++++++++++++++++++++ src/mame/drivers/wy60.cpp | 121 +++++++++++++++++++++++++++++++++++++++++++ src/mame/drivers/wyse.cpp | 70 ------------------------- src/mame/mame.lst | 11 ++-- src/mame/mess.flt | 3 +- 6 files changed, 236 insertions(+), 76 deletions(-) create mode 100644 src/mame/drivers/wy55.cpp create mode 100644 src/mame/drivers/wy60.cpp delete mode 100644 src/mame/drivers/wyse.cpp diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 8fb228ded61..f13585953ae 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -3692,8 +3692,9 @@ files { MAME_DIR .. "src/mame/drivers/wy150.cpp", MAME_DIR .. "src/mame/drivers/wy30p.cpp", MAME_DIR .. "src/mame/drivers/wy50.cpp", + MAME_DIR .. "src/mame/drivers/wy55.cpp", + MAME_DIR .. "src/mame/drivers/wy60.cpp", MAME_DIR .. "src/mame/drivers/wy85.cpp", - MAME_DIR .. "src/mame/drivers/wyse.cpp", MAME_DIR .. "src/mame/machine/wy50kb.cpp", MAME_DIR .. "src/mame/machine/wy50kb.h", } diff --git a/src/mame/drivers/wy55.cpp b/src/mame/drivers/wy55.cpp new file mode 100644 index 00000000000..3ee6c66a20d --- /dev/null +++ b/src/mame/drivers/wy55.cpp @@ -0,0 +1,104 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/*********************************************************************************************************************************** + + Skeleton driver for Wyse WY-55 and related terminals. + + The WY-55's custom video gate array is numbered 211019-05. The WY-185 is believed to run on similar hardware. + +***********************************************************************************************************************************/ + +#include "emu.h" +#include "cpu/mcs51/mcs51.h" +//#include "machine/ins8250.h" +//#include "machine/nvram.h" +#include "screen.h" + +class wy55_state : public driver_device +{ +public: + wy55_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_screen(*this, "screen") + { + } + + void wy55(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void driver_start() override; + +private: + u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + void prog_map(address_map &map); + void ext_map(address_map &map); + + required_device m_maincpu; + required_device m_screen; +}; + + +void wy55_state::machine_start() +{ +} + +u32 wy55_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + return 0; +} + +void wy55_state::prog_map(address_map &map) +{ + // TODO: banking (probably selected by a port pin) + map(0x0000, 0xffff).rom().region("program", 0); +} + +void wy55_state::ext_map(address_map &map) +{ + map(0x0000, 0x1fff).ram(); + map(0x8000, 0x97ff).ram(); + //map(0xf028, 0xf037).rw("uart", FUNC(pc16552_device::read), FUNC(pc16552_device::write)); +} + + +static INPUT_PORTS_START(wy55) +INPUT_PORTS_END + +void wy55_state::wy55(machine_config &config) +{ + I8032(config, m_maincpu, 14.7456_MHz_XTAL); // exact type and clock divider not verified + m_maincpu->set_addrmap(AS_PROGRAM, &wy55_state::prog_map); + m_maincpu->set_addrmap(AS_IO, &wy55_state::ext_map); + + //NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // 8K SRAM + battery? + + //PC16552D(config, "uart", 14.7456_MHz_XTAL / 2); // 16C452 (divider not verified) + + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(49.4235_MHz_XTAL, 1530, 0, 1200, 369, 0, 338); + //m_screen->set_raw(49.4235_MHz_XTAL * 2 / 3, 1050, 0, 800, 523, 0, 338); + m_screen->set_screen_update(FUNC(wy55_state::screen_update)); +} + + +ROM_START(wy55) + ROM_REGION(0x20000, "program", 0) + ROM_LOAD("251352-12.bin", 0x0000, 0x20000, CRC(efe41862) SHA1(52ee76d636b166fa10a37356aef81011a9b079cc)) // v2.1 +ROM_END + +void wy55_state::driver_start() +{ + uint8_t *rom = memregion("program")->base(); + for (offs_t base = 0x00000; base < 0x20000; base += 0x4000) + { + std::vector orig(&rom[base], &rom[base + 0x4000]); + + for (offs_t offset = 0; offset < 0x4000; offset++) + rom[base | offset] = bitswap<8>(orig[bitswap<14>(offset, 3, 8, 2, 0, 7, 4, 9, 10, 11, 12, 13, 5, 1, 6)], 3, 4, 5, 2, 6, 1, 7, 0); + } +} + +COMP(1993, wy55, 0, 0, wy55, wy55, wy55_state, empty_init, "Wyse Technology", "WY-55 (v2.1)", MACHINE_IS_SKELETON) diff --git a/src/mame/drivers/wy60.cpp b/src/mame/drivers/wy60.cpp new file mode 100644 index 00000000000..09381d15ba6 --- /dev/null +++ b/src/mame/drivers/wy60.cpp @@ -0,0 +1,121 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/*********************************************************************************************************************************** + + Skeleton driver for Wyse WY-60 terminal. + +***********************************************************************************************************************************/ + +#include "emu.h" +#include "cpu/mcs51/mcs51.h" +//#include "machine/i2cmem.h" +#include "machine/mc2661.h" +#include "screen.h" + +class wy60_state : public driver_device +{ +public: + wy60_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_screen(*this, "screen") + , m_sio(*this, "sio") + { + } + + void wy60(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void driver_start() override; + +private: + u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + void prog_map(address_map &map); + void ext_map(address_map &map); + + required_device m_screen; + required_device m_sio; +}; + + +void wy60_state::machine_start() +{ +} + +u32 wy60_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + return 0; +} + +void wy60_state::prog_map(address_map &map) +{ + // TODO: EA banking? + map(0x0000, 0xffff).rom().region("wyseprog", 0); +} + +void wy60_state::ext_map(address_map &map) +{ +} + + +static INPUT_PORTS_START(wy60) +INPUT_PORTS_END + +void wy60_state::wy60(machine_config &config) +{ + i8051_device &maincpu(I8051(config, "maincpu", 11_MHz_XTAL)); // P8051AN-40196 + maincpu.set_addrmap(AS_PROGRAM, &wy60_state::prog_map); + maincpu.set_addrmap(AS_IO, &wy60_state::ext_map); + + //X2404(config, m_eeprom); + + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(26.58_MHz_XTAL, 1000, 0, 800, 443, 0, 416); // 26.580 kHz horizontal + //m_screen->set_raw(39.71_MHz_XTAL, 1494, 0, 1188, 443, 0, 416); + m_screen->set_screen_update(FUNC(wy60_state::screen_update)); + + MC2661(config, m_sio, 4.9152_MHz_XTAL); // SCN2661B +} + +// CPU: 8051(202008-03) +// EPROM: 27512(193003-01) +// Video: 211003-02/205001-02 +// RAM: 2064 (2064/2016/2016/2064) +// NVRAM: X2404 +// UART: 2661 +// XTALs: 39.710, 26.580, 11.000, 4.9152 + +ROM_START(wy60) + ROM_REGION(0x1000, "maincpu", 0) + ROM_LOAD("202008-03.bin", 0x0000, 0x1000, NO_DUMP) + + ROM_REGION(0x10000, "wyseprog", 0) + ROM_LOAD("193003-01.u9", 0x00000, 0x10000, CRC(26de0ea4) SHA1(91409f98a3990b514fbcb7de2eb45944bf5b95bc)) +ROM_END + +ROM_START(wy60a) + ROM_REGION(0x1000, "maincpu", 0) + ROM_LOAD("202008-03.bin", 0x0000, 0x1000, NO_DUMP) + + ROM_REGION(0x10000, "wyseprog", 0) + ROM_LOAD("wy-60_4k.u6", 0x00000, 0x10000, CRC(6daf2824) SHA1(23cd039ec7ae71b0742e8eebf75be8cd5992e3fd)) +ROM_END + +void wy60_state::driver_start() +{ + uint8_t *rom = memregion("wyseprog")->base(); + for (offs_t base = 0x00000; base < 0x10000; base += 0x2000) + { + std::vector orig(&rom[base], &rom[base + 0x2000]); + + for (offs_t offset = 0; offset < 0x2000; offset++) + rom[base | offset] = bitswap<8>(orig[bitswap<13>(offset, 0, 6, 9, 4, 2, 1, 3, 5, 7, 8, 10, 11, 12)], 6, 0, 5, 1, 4, 2, 3, 7); + } + + // FIXME: remove once internal ROM is dumped + std::copy_n(rom, 0x1000, memregion("maincpu")->base()); +} + +COMP(1986, wy60, 0, 0, wy60, wy60, wy60_state, empty_init, "Wyse Technology", "WY-60 (set 1)", MACHINE_IS_SKELETON) +COMP(1986, wy60a, wy60, 0, wy60, wy60, wy60_state, empty_init, "Wyse Technology", "WY-60 (set 2)", MACHINE_IS_SKELETON) diff --git a/src/mame/drivers/wyse.cpp b/src/mame/drivers/wyse.cpp deleted file mode 100644 index 5929fde143f..00000000000 --- a/src/mame/drivers/wyse.cpp +++ /dev/null @@ -1,70 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders: -/*********************************************************************************************************************************** - -2017-10-27 Skeleton - -Wyse terminals. - -WY-60: SC67336P, P8051AN-40196, SCN2661B, 7219-0629, 4.9152, 11.000, 39.710, 26.580, Beeper - - CPU EPROM VIDEO RAM Row Buffer Font RAM NVRAM Serial Dot Clk CPU Clk Ser Clk -WY-55 8032 (251352-12) 211019-05 8k (8kx2) battery 16C452 49.423 14.7456 -WY-60 8051(202008-03) 27512(193003-01) 211003-02/205001-02 2064 ( 2064/2016/2016/2064) X24C04 2661 39.710/26.580 11.000 4.9152 - - -************************************************************************************************************************************/ - -#include "emu.h" -#include "cpu/mcs51/mcs51.h" - -class wyse_state : public driver_device -{ -public: - wyse_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) - // , m_maincpu(*this, "maincpu") - { } - - void wyse(machine_config &config); - -private: - void io_map(address_map &map); - void mem_map(address_map &map); - - // required_device m_maincpu; -}; - -void wyse_state::mem_map(address_map &map) -{ - map(0x0000, 0xffff).rom(); -} - -void wyse_state::io_map(address_map &map) -{ -} - -static INPUT_PORTS_START( wyse ) -INPUT_PORTS_END - -void wyse_state::wyse(machine_config &config) -{ - i8031_device &maincpu(I8031(config, "maincpu", 11'000'000)); - maincpu.set_addrmap(AS_PROGRAM, &wyse_state::mem_map); - maincpu.set_addrmap(AS_IO, &wyse_state::io_map); -} - -ROM_START( wy55 ) - ROM_REGION( 0x20000, "maincpu", 0 ) - ROM_LOAD( "251352-12.bin", 0x0000, 0x20000, CRC(efe41862) SHA1(52ee76d636b166fa10a37356aef81011a9b079cc) ) // v2.1 -ROM_END - -ROM_START( wy60 ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "193003-01.u9", 0x0000, 0x10000, CRC(26de0ea4) SHA1(91409f98a3990b514fbcb7de2eb45944bf5b95bc) ) - ROM_REGION( 0x10000, "user1", 0 ) - ROM_LOAD( "wy-60_4k.u6", 0x0000, 0x10000, CRC(6daf2824) SHA1(23cd039ec7ae71b0742e8eebf75be8cd5992e3fd) ) -ROM_END - -COMP( 1986, wy60, 0, 0, wyse, wyse, wyse_state, empty_init, "Wyse Technology", "WY-60", MACHINE_IS_SKELETON ) -COMP( 1993, wy55, 0, 0, wyse, wyse, wyse_state, empty_init, "Wyse Technology", "WY-55", MACHINE_IS_SKELETON ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 93e02a192a1..d15a8aac8c4 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -39847,12 +39847,15 @@ wy30p // WY-30+ wy50 // WY-50 wy75 // WY-75 -@source:wy85.cpp -wy85 // WY-85 - -@source:wyse.cpp +@source:wy55.cpp wy55 // WY-55 + +@source:wy60.cpp wy60 // WY-60 +wy60a // WY-60 + +@source:wy85.cpp +wy85 // WY-85 @source:wyvernf0.cpp wyvernf0 // A39 (c) 1985 Taito Corporation (Japan) diff --git a/src/mame/mess.flt b/src/mame/mess.flt index a91f493b67c..adfa1266be6 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -877,8 +877,9 @@ wy100.cpp wy150.cpp wy30p.cpp wy50.cpp +wy55.cpp +wy60.cpp wy85.cpp -wyse.cpp x07.cpp x1.cpp x1twin.cpp -- cgit v1.2.3