diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index b1cfe495e65..235f6ee205e 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -3432,6 +3432,7 @@ createMESSProjects(_target, _subtarget, "visual") files { MAME_DIR .. "src/mame/drivers/v100.cpp", MAME_DIR .. "src/mame/drivers/v102.cpp", + MAME_DIR .. "src/mame/drivers/v550.cpp", MAME_DIR .. "src/mame/drivers/v1050.cpp", MAME_DIR .. "src/mame/includes/v1050.h", MAME_DIR .. "src/mame/machine/v1050kb.cpp", diff --git a/src/mame/drivers/v550.cpp b/src/mame/drivers/v550.cpp new file mode 100644 index 00000000000..46992ef98d0 --- /dev/null +++ b/src/mame/drivers/v550.cpp @@ -0,0 +1,128 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/*********************************************************************************************************************************** + + The Visual 500 and 550 are the graphical members of the third series of display terminals released by Visual Technology. + While they appear to use the same character generators as the text-mode-only Visual 300 and 330 and have similar detachable + keyboards, they uniquely feature high-definition green-screen (P39 phosphor) monitors and support Tektronix 4010/4014- + compatible graphics at a resolution of 768 x 555 pixels. + + The VT100-compatible Visual 550 was released first, and conforms to the ANSI X3.64 standard (like the Visual 300). + The Visual 500 instead emulates the ADM3A, D200, Hazeltine 1500 and VT52 terminals (like the Visual 330). + +***********************************************************************************************************************************/ + +#include "emu.h" +//include "bus/rs232/rs232.h" +#include "cpu/z80/z80.h" +//#include "machine/com8116.h" +#include "machine/nvram.h" +#include "machine/i8251.h" +#include "machine/i8255.h" +#include "machine/z80sio.h" +#include "video/scn2674.h" +#include "video/upd7220.h" +#include "screen.h" + +class v550_state : public driver_device +{ +public: + v550_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_screen(*this, "screen") + , m_chargen(*this, "chargen") + { } + + void v550(machine_config &config); + + u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { return 0; } +private: + void mem_map(address_map &map); + void io_map(address_map &map); + + virtual void machine_start() override; + + required_device m_maincpu; + required_device m_screen; + required_region_ptr m_chargen; +}; + + +void v550_state::mem_map(address_map &map) +{ + map(0x0000, 0x7bff).rom().region("maincpu", 0); + map(0x7c00, 0x7fff).ram().share("nvram"); // actually 4 bits wide + map(0x8000, 0x87ff).ram(); +} + +void v550_state::io_map(address_map &map) +{ + map.global_mask(0xff); + map(0x00, 0x01).rw("gdc", FUNC(upd7220_device::read), FUNC(upd7220_device::write)); + map(0x20, 0x23).rw("ppi", FUNC(i8255_device::read), FUNC(i8255_device::write)); + map(0x30, 0x30).rw("usart", FUNC(i8251_device::data_r), FUNC(i8251_device::data_w)); + map(0x31, 0x31).rw("usart", FUNC(i8251_device::status_r), FUNC(i8251_device::control_w)); + map(0x40, 0x40).rw("mpsc", FUNC(upd7201_new_device::da_r), FUNC(upd7201_new_device::da_w)); + map(0x41, 0x41).rw("mpsc", FUNC(upd7201_new_device::ca_r), FUNC(upd7201_new_device::ca_w)); + map(0x48, 0x48).rw("mpsc", FUNC(upd7201_new_device::db_r), FUNC(upd7201_new_device::db_w)); + map(0x49, 0x49).rw("mpsc", FUNC(upd7201_new_device::cb_r), FUNC(upd7201_new_device::cb_w)); + map(0x60, 0x67).rw("pvtc", FUNC(scn2672_device::read), FUNC(scn2672_device::write)); + map(0x70, 0x70).nopw(); // DRAM refresh address? +} + + +INPUT_PORTS_START(v550) +INPUT_PORTS_END + + +void v550_state::machine_start() +{ + subdevice("usart")->write_cts(0); +} + +MACHINE_CONFIG_START(v550_state::v550) + MCFG_DEVICE_ADD("maincpu", Z80, 4'000'000) // NEC D780C + MCFG_DEVICE_PROGRAM_MAP(mem_map) + MCFG_DEVICE_IO_MAP(io_map) + + MCFG_NVRAM_ADD_0FILL("nvram") // NEC D446-2 + battery + + MCFG_DEVICE_ADD("gdc", UPD7220, 4'000'000) // NEC D7220D + MCFG_VIDEO_SET_SCREEN("screen") + + MCFG_DEVICE_ADD("ppi", I8255, 0) // NEC D8255AC-5 + + MCFG_DEVICE_ADD("usart", I8251, 4'000'000) // NEC D8251AC + + MCFG_DEVICE_ADD("mpsc", UPD7201_NEW, 4'000'000) // NEC D7201C + MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) + + //MCFG_DEVICE_ADD("brg1", COM8116_020, 5068800) + //MCFG_DEVICE_ADD("brg2", COM8116_020, 5068800) + + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_RAW_PARAMS(16'248'600, 918, 0, 720, 295, 0, 272) + MCFG_SCREEN_UPDATE_DRIVER(v550_state, screen_update) + + MCFG_DEVICE_ADD("pvtc", SCN2672, 1'805'400) + MCFG_SCN2672_CHARACTER_WIDTH(9) + MCFG_SCN2672_INTR_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI)) + MCFG_VIDEO_SET_SCREEN("screen") +MACHINE_CONFIG_END + + +ROM_START( v550 ) + // Silkscreened on bottom left of PCB: "PA016-A REV B" + + ROM_REGION(0x8000, "maincpu", 0) + ROM_LOAD("e244-001_r07_u42.bin", 0x0000, 0x2000, CRC(d18a8b62) SHA1(7faf8a9f1ae3148adacbff960a2663793710cef2)) + ROM_LOAD("e244-002_r07_u43.bin", 0x2000, 0x2000, CRC(1b62db47) SHA1(7ad69aea6088545d843c2e95737895f81c269ccc)) + ROM_LOAD("e244-003_r07_u44.bin", 0x4000, 0x2000, CRC(f6d6f734) SHA1(a9efa8ebe86addb77872dbe9863ea7f75b33a2b9)) + ROM_LOAD("e244-017_r07_u45.bin", 0x6000, 0x2000, CRC(b0dcd535) SHA1(9237723d01a720217f50f756bb55c7e5ed05a594)) + + ROM_REGION(0x1000, "chargen", 0) + ROM_LOAD("e242-085_r03_u97.bin", 0x0000, 0x1000, CRC(8a491cee) SHA1(d8a9546a7dd2ffc0a5e54524ee16068dde56975c)) +ROM_END + +COMP( 1982, v550, 0, 0, v550, v550, v550_state, empty_init, "Visual Technology", "Visual 550", MACHINE_IS_SKELETON ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index a12e1219c22..7ab004726e9 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -37808,6 +37808,9 @@ v100 // @source:v102.cpp v102 // +@source:v550.cpp +v550 // + @source:v1050.cpp v1050 // diff --git a/src/mame/mess.flt b/src/mame/mess.flt index 8143efea9e3..549d216b869 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -750,6 +750,7 @@ ut88.cpp uzebox.cpp v100.cpp v102.cpp +v550.cpp v1050.cpp v6809.cpp vax11.cpp