From a0f5fd65b266dc1476b79fd65c5863c3a4c10262 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Fri, 22 Jun 2018 22:03:11 +1000 Subject: [PATCH] New NOT WORKING computer: Olympia Olytext 20 --- scripts/target/mame/mess.lua | 1 + src/mame/drivers/olytext.cpp | 196 +++++++++++++++++++++++++++++++++++ src/mame/mame.lst | 3 + src/mame/mess.flt | 1 + 4 files changed, 201 insertions(+) create mode 100644 src/mame/drivers/olytext.cpp diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index c507a797bb1..b51965ff981 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -2630,6 +2630,7 @@ files { createMESSProjects(_target, _subtarget, "olympia") files { MAME_DIR .. "src/mame/drivers/olyboss.cpp", + MAME_DIR .. "src/mame/drivers/olytext.cpp", MAME_DIR .. "src/mame/drivers/peoplepc.cpp", } diff --git a/src/mame/drivers/olytext.cpp b/src/mame/drivers/olytext.cpp new file mode 100644 index 00000000000..71d99d5ff4c --- /dev/null +++ b/src/mame/drivers/olytext.cpp @@ -0,0 +1,196 @@ +// license:BSD-3-Clause +// copyright-holders: Robbbert +/* + + If you want to "own" this, go ahead, it's yours. + + Olympia Olytext 20 Screen-Typing System + Made in Germany + + Major Chips: Z80A, Z80PIO x2, Z80SCC, WD1772, National Semiconductor NS405-B18N + Crystals: 16.000, 18.000 + Piezo-Beeper + RAM: 128k dynamic (16x 4164), 8k static (4x MB8128-10) + Keyboard: 3870 with 4.000 crystal, 3 dipswitches + + The NS405 is a Terminal Management Processor which provides complete video functionality. + It is modelled on the 8048, and requires an external rom. All other functions (cpu, timing, + character generation, uart, dma, crtc, etc) are internal. Data is sent to it in parallel + from the pio, something like a printer, but there's no handshake. Apparently the TMP is + fast enough to accept all data as it arrives. + +*/ + +#include "emu.h" +#include "cpu/z80/z80.h" +#include "machine/wd_fdc.h" +#include "machine/keyboard.h" +#include "emupal.h" +#include "screen.h" + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class olytext_state : public driver_device +{ +public: + olytext_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") +// , m_fdd0(*this, "fdc:0"), +// , m_fdd1(*this, "fdc:1"), +// , m_rom(*this, "mainrom"), +// , m_lowram(*this, "lowram"), + { } + + void olytext(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; +// virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + +private: + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + void keyboard_put(u8 data); + + void mem_map(address_map &map); + void io_map(address_map &map); + + required_device m_maincpu; +// required_device m_fdd0; +// optional_device m_fdd1; +// required_memory_region m_rom; +// required_shared_ptr m_lowram; +}; + +void olytext_state::machine_reset() +{ +} + + +//************************************************************************** +// ADDRESS MAPS +//************************************************************************** + +void olytext_state::mem_map(address_map &map) +{ + map(0x0000, 0x0fff).rom(); + map(0x1000, 0xffff).ram(); +} + +void olytext_state::io_map(address_map &map) +{ + map.global_mask(0xff); + map.unmap_value_high(); + map(0x20, 0x23); // pio? data, ctrl, data, ctrl // all text is sent as ascii (including control codes) to 0x20 + map(0x30, 0x30); // .w (device) .r(get keyboard status, if bit 0 high then read keyboard data from port 0x31) + map(0x32, 0x32); // .w (device) + map(0x40, 0x40); // .w (banking?) +} + + +static INPUT_PORTS_START( olytext ) +INPUT_PORTS_END + + +//************************************************************************** +// VIDEO +//************************************************************************** + +uint32_t olytext_state::screen_update( screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect ) +{ + return 0; +} + + +//************************************************************************** +// KEYBOARD +//************************************************************************** + +void olytext_state::machine_start() +{ + //m_timer = timer_alloc(); + //const char *type = m_fdd0->get_device()->shortname(); + //if(!strncmp(type, "floppy_525_qd", 13)) + //m_fdctype = 0xa0; + //else + //m_fdctype = 0x80; +} + +void olytext_state::keyboard_put(u8 data) +{ +// if (data) +// { +// m_keystroke=data; +// } +} + +//WRITE8_MEMBER( olytext_state::fdcctrl_w ) +//{ +// m_fdcctrl = data; +// m_romen = (m_fdcctrl & 1) ? false : true; +// m_fdd0->get_device()->mon_w(!(data & 2)); +// if(m_fdd1) +// m_fdd1->get_device()->mon_w(!(data & 4)); +//} + +static void olytext_floppies(device_slot_interface &device) +{ + device.option_add("525qd", FLOPPY_525_QD); +} + + +//************************************************************************** +// MACHINE CONFIGURATION +//************************************************************************** + +MACHINE_CONFIG_START( olytext_state::olytext ) + MCFG_DEVICE_ADD("maincpu", Z80, 16_MHz_XTAL / 4) + MCFG_DEVICE_PROGRAM_MAP(mem_map) + MCFG_DEVICE_IO_MAP(io_map) + + /* video hardware */ + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_SIZE(80*8, 28*11) + MCFG_SCREEN_VISIBLE_AREA(0, (80*8)-1, 0, (28*11)-1) + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ + MCFG_SCREEN_UPDATE_DRIVER(olytext_state, screen_update) + //MCFG_SCREEN_PALETTE("palette") + MCFG_PALETTE_ADD_MONOCHROME("palette") + + /* devices */ + MCFG_DEVICE_ADD("fdc", WD1772, 16_MHz_XTAL / 8) // divisor guess + MCFG_FLOPPY_DRIVE_ADD("fdc:0", olytext_floppies, "525qd", floppy_image_device::default_floppy_formats) + MCFG_FLOPPY_DRIVE_SOUND(true) + MCFG_FLOPPY_DRIVE_ADD("fdc:1", olytext_floppies, "525qd", floppy_image_device::default_floppy_formats) + MCFG_FLOPPY_DRIVE_SOUND(true) + + /* keyboard */ + MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) + MCFG_GENERIC_KEYBOARD_CB(PUT(olytext_state, keyboard_put)) +MACHINE_CONFIG_END + + +//************************************************************************** +// ROM DEFINITIONS +//************************************************************************** + +ROM_START( olytext ) + ROM_REGION( 0x1000, "maincpu", 0) + ROM_LOAD( "1220-040_700.bin", 0x0000, 0x1000, CRC(1df4b31f) SHA1(af3a275d9853d8d23ef091549d7c659cbdb257f3) ) + + ROM_REGION( 0x1000, "chargen", 0) // this is firmware for the NS405 cpu + ROM_LOAD( "1220-041_33702.bin", 0x0000, 0x1000, CRC(a6d39c2a) SHA1(b7a4c65edc7d46d1ab8b0b3aa52141c61c66bf32) ) +ROM_END + + +//************************************************************************** +// SYSTEM DRIVERS +//************************************************************************** + +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS +COMP(1985, olytext, 0, 0, olytext, olytext, olytext_state, empty_init, "Olympia International", "Olympia Olytext 20", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index b5d80683afb..d5cabff801f 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -30375,6 +30375,9 @@ olybossd // Olympia BOSS D bossa85 // Olympia BOSS A 8085 bossb85 // Olympia BOSS B 8085 +@source:olytext.cpp +olytext // Olympia Olytext 20 + @source:omegrace.cpp deltrace // bootleg omegrace // (c) 1981 Midway diff --git a/src/mame/mess.flt b/src/mame/mess.flt index 61040b9ef5a..48ce60ed4fa 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -470,6 +470,7 @@ octopus.cpp odyssey2.cpp okean240.cpp olyboss.cpp +olytext.cpp ondra.cpp onyx.cpp orao.cpp