summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/zorba.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/zorba.cpp')
-rw-r--r--src/mame/drivers/zorba.cpp563
1 files changed, 0 insertions, 563 deletions
diff --git a/src/mame/drivers/zorba.cpp b/src/mame/drivers/zorba.cpp
deleted file mode 100644
index fb84b16637e..00000000000
--- a/src/mame/drivers/zorba.cpp
+++ /dev/null
@@ -1,563 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Robbbert, Vas Crabb
-/************************************************************************************************************
-
-Telcon Industries/Modular Micros/Gemini Electronics Zorba
-http://www.zorba.z80.de
-
-2013-08-25 Skeleton
-2015-02-20 Boots from floppy, is now usable.
-
-This was one of the last CP/M-based systems, already out of date when it was released.
-Because it doesn't use the standard Z80 peripherals, it uses a homebrew interrupt controller to make use
-of the Z80's IM2.
-
-The keyboard is an intelligent serial device like the Kaypro's keyboard. They even have the same plug,
-and might be swappable. Need a schematic.
-
-Instead of using a daisy chain, the IM2 vectors are calculated by a prom (u77). Unfortunately, the prom
-contents make no sense at all (mostly FF), so the vectors for IRQ0 and IRQ2 are hard-coded. Other IRQ
-vectors are not used as yet.
-
-Three companies are known to have sold the Zorba over its lifetime: Telcon Industries, Modular Micros
-(a subsidiary of Modular Computers (ModComp)), and Gemini Electronics. 7-inch and 9-inch models were
-available from Telcon and Modular Micros, while Gemini exclusively sold the 9-inch version. The ROM dumps
-currently used in this emulation originate from a Modular Micros Zorba.
-
-The two versions of the Zorba were sold by Modular Micros were:
-- Zorba 7: 7" CRT, 2 410K floppies, 22 lbs, $1595
-- Zorba 2000: 9" CRT, 2 820K floppies, 10M HD optional, 25 lbs, ~$2000
-
-The 7-inch version has the screen on the left, the floppy drives on the right, and a Zorba logo on the
-far right; on the 9-inch version this arrangement is reversed and the logo is removed.
-
-The startup screen varies across each company:
-- Telcon: "TELCON ZORBA" graphical logo
-- Modular Micros: "ZORBA" graphical logo with "MODULAR MICROS, INC." below in normal text
-- Gemini: "GEMINI ZORBA" graphical logo
-
-Status:
-- Boots up, and the keyboard works
-
-ToDo:
-- Need software that does more than plain text (such as games)
-- Add masking feature (only used for the UARTs)
-- Connect devices to the above hardware
-- Dump Telcon and Gemini BIOSes
-- Emulate the Co-Power-88 expansion (allows PC-DOS, CP/M-86, etc. to be used)
-- Probably lots of other things
-- Press F3 and screen turns into garbage. This breakage started in the 0.198 to 0.199 cycle.
-
-
-*************************************************************************************************************/
-
-#include "emu.h"
-#include "includes/zorba.h"
-
-#include "machine/zorbakbd.h"
-
-#include "bus/centronics/ctronics.h"
-#include "bus/rs232/rs232.h"
-
-#include "cpu/z80/z80.h"
-#include "cpu/m6805/m68705.h"
-
-#include "machine/input_merger.h"
-#include "machine/output_latch.h"
-#include "machine/pit8253.h"
-
-#include "screen.h"
-#include "softlist.h"
-#include "speaker.h"
-
-
-void zorba_state::zorba_mem(address_map &map)
-{
- map(0x0000, 0x3fff).bankr(m_read_bank).bankw("bankw0");
- map(0x4000, 0xffff).ram();
-}
-
-
-void zorba_state::zorba_io(address_map &map)
-{
- map.global_mask(0xff);
- map(0x00, 0x03).rw("pit", FUNC(pit8254_device::read), FUNC(pit8254_device::write));
- map(0x04, 0x04).rw(FUNC(zorba_state::rom_r), FUNC(zorba_state::rom_w));
- map(0x05, 0x05).rw(FUNC(zorba_state::ram_r), FUNC(zorba_state::ram_w));
- map(0x10, 0x11).rw(m_crtc, FUNC(i8275_device::read), FUNC(i8275_device::write));
- map(0x20, 0x21).rw(m_uart0, FUNC(i8251_device::read), FUNC(i8251_device::write));
- map(0x22, 0x23).rw(m_uart1, FUNC(i8251_device::read), FUNC(i8251_device::write));
- map(0x24, 0x25).rw(m_uart2, FUNC(i8251_device::read), FUNC(i8251_device::write));
- map(0x26, 0x26).w(FUNC(zorba_state::intmask_w));
- map(0x30, 0x30).rw(m_dma, FUNC(z80dma_device::bus_r), FUNC(z80dma_device::bus_w));
- map(0x40, 0x43).rw(m_fdc, FUNC(fd1793_device::read), FUNC(fd1793_device::write));
- map(0x50, 0x53).rw(m_pia0, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
- map(0x60, 0x63).rw(m_pia1, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
-}
-
-namespace {
-
-INPUT_PORTS_START( zorba )
- PORT_START("CNF")
- PORT_CONFNAME(0x01, 0x00, "Parallel Printer") PORT_CHANGED_MEMBER(DEVICE_SELF, zorba_state, printer_type, 0)
- PORT_CONFSETTING(0x00, "Centronics")
- PORT_CONFSETTING(0x01, "Prowriter")
-INPUT_PORTS_END
-
-
-void zorba_floppies(device_slot_interface &device)
-{
- device.option_add("525dd", FLOPPY_525_DD);
-}
-
-
-// F4 Character Displayer
-const gfx_layout u5_charlayout =
-{
- 8, 11, // 8 x 11 characters
- 256, // 256 characters
- 1, // 1 bits per pixel
- { 0 }, // no bitplanes
- /* x offsets */
- { 0, 1, 2, 3, 4, 5, 6, 7 },
- /* y offsets */
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8, 10*8 },
- 8*16 // every char takes 16 bytes
-};
-
-GFXDECODE_START( gfx_zorba )
- GFXDECODE_ENTRY( "chargen", 0x0000, u5_charlayout, 0, 1 )
-GFXDECODE_END
-
-} // anonymous namespace
-
-
-void zorba_state::zorba(machine_config &config)
-{
- // basic machine hardware
- Z80(config, m_maincpu, 24_MHz_XTAL / 6);
- m_maincpu->set_addrmap(AS_PROGRAM, &zorba_state::zorba_mem);
- m_maincpu->set_addrmap(AS_IO, &zorba_state::zorba_io);
-
- /* video hardware */
- screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
- screen.set_color(rgb_t::green());
- screen.set_refresh_hz(50);
- screen.set_screen_update("crtc", FUNC(i8275_device::screen_update));
- GFXDECODE(config, "gfxdecode", m_palette, gfx_zorba);
- PALETTE(config, m_palette, palette_device::MONOCHROME_HIGHLIGHT);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
- BEEP(config, m_beep, 800).add_route(ALL_OUTPUTS, "mono", 1.00); // should be horizontal frequency / 16, so depends on CRTC parameters
-
- INPUT_MERGER_ANY_HIGH(config, "irq0").output_handler().set(FUNC(zorba_state::irq_w<0>));
- INPUT_MERGER_ANY_HIGH(config, "irq1").output_handler().set(FUNC(zorba_state::irq_w<1>));
- INPUT_MERGER_ANY_HIGH(config, "irq2").output_handler().set(FUNC(zorba_state::irq_w<2>));
-
- /* devices */
- Z80DMA(config, m_dma, 24_MHz_XTAL / 6);
- // busack on cpu connects to bai pin
- m_dma->out_busreq_callback().set(FUNC(zorba_state::busreq_w)); //connects to busreq on cpu
- m_dma->out_int_callback().set("irq0", FUNC(input_merger_device::in_w<0>));
- //ba0 - not connected
- m_dma->in_mreq_callback().set(FUNC(zorba_state::memory_read_byte));
- m_dma->out_mreq_callback().set(FUNC(zorba_state::memory_write_byte));
- m_dma->in_iorq_callback().set(FUNC(zorba_state::io_read_byte));
- m_dma->out_iorq_callback().set(FUNC(zorba_state::io_write_byte));
-
- I8251(config, m_uart0, 24_MHz_XTAL / 12); // U32 COM port J2
- m_uart0->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); // TODO: this line has a LED attached
- m_uart0->dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
- m_uart0->rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
- m_uart0->rxrdy_handler().set(FUNC(zorba_state::tx_rx_rdy_w<1>));
- m_uart0->txrdy_handler().set(FUNC(zorba_state::tx_rx_rdy_w<0>));
-
- I8251(config, m_uart1, 24_MHz_XTAL / 12); // U31 printer port J3
- m_uart1->txd_handler().set("serprn", FUNC(rs232_port_device::write_txd));
- m_uart1->rts_handler().set("serprn", FUNC(rs232_port_device::write_rts));
- m_uart1->rxrdy_handler().set(FUNC(zorba_state::tx_rx_rdy_w<3>));
- m_uart1->txrdy_handler().set(FUNC(zorba_state::tx_rx_rdy_w<2>));
-
- I8251(config, m_uart2, 24_MHz_XTAL / 12); // U30 serial keyboard J6
- m_uart2->txd_handler().set("keyboard", FUNC(zorba_keyboard_device::txd_w));
- m_uart2->rxrdy_handler().set(FUNC(zorba_state::tx_rx_rdy_w<5>));
- m_uart2->txrdy_handler().set(FUNC(zorba_state::tx_rx_rdy_w<4>));
-
- // port A - disk select etc, beeper
- // port B - parallel interface
- PIA6821(config, m_pia0, 0);
- m_pia0->writepa_handler().set(FUNC(zorba_state::pia0_porta_w));
- m_pia0->writepb_handler().set("parprndata", FUNC(output_latch_device::bus_w));
- m_pia0->cb2_handler().set("parprn", FUNC(centronics_device::write_strobe));
-
- // IEEE488 interface
- PIA6821(config, m_pia1, 0);
- m_pia1->readpa_handler().set(m_ieee, FUNC(ieee488_device::dio_r)); // TODO: gated with PB1
- m_pia1->writepa_handler().set(m_ieee, FUNC(ieee488_device::host_dio_w)); // TODO: gated with PB1
- m_pia1->readpb_handler().set(FUNC(zorba_state::pia1_portb_r));
- m_pia1->writepb_handler().set(FUNC(zorba_state::pia1_portb_w));
- m_pia1->ca2_handler().set(m_ieee, FUNC(ieee488_device::host_ifc_w));
- m_pia1->cb2_handler().set(m_ieee, FUNC(ieee488_device::host_ren_w));
- m_pia1->irqa_handler().set("irq1", FUNC(input_merger_device::in_w<0>));
- m_pia1->irqb_handler().set("irq1", FUNC(input_merger_device::in_w<1>));
-
- // PIT
- pit8254_device &pit(PIT8254(config, "pit", 0));
- pit.set_clk<0>(24_MHz_XTAL / 3);
- pit.set_clk<1>(24_MHz_XTAL / 3);
- pit.set_clk<2>(24_MHz_XTAL / 3);
- pit.out_handler<0>().set(FUNC(zorba_state::br1_w));
- pit.out_handler<1>().set(m_uart1, FUNC(i8251_device::write_txc));
- pit.out_handler<1>().append(m_uart1, FUNC(i8251_device::write_rxc));
- pit.out_handler<2>().set(m_uart2, FUNC(i8251_device::write_txc));
- pit.out_handler<2>().append(m_uart2, FUNC(i8251_device::write_rxc));
-
- // CRTC
- I8275(config, m_crtc, 14.318'181_MHz_XTAL / 8); // TODO: character clock divider is 9 during HRTC
- m_crtc->set_character_width(8);
- m_crtc->set_refresh_hack(true);
- m_crtc->set_display_callback(FUNC(zorba_state::zorba_update_chr));
- m_crtc->drq_wr_callback().set(m_dma, FUNC(z80dma_device::rdy_w));
- m_crtc->irq_wr_callback().set("irq0", FUNC(input_merger_device::in_w<1>));
- m_crtc->set_screen("screen");
-
- // Floppies
- FD1793(config, m_fdc, 24_MHz_XTAL / 24);
- m_fdc->intrq_wr_callback().set("irq2", FUNC(input_merger_device::in_w<0>));
- m_fdc->drq_wr_callback().set("irq2", FUNC(input_merger_device::in_w<1>));
- FLOPPY_CONNECTOR(config, m_floppy0, zorba_floppies, "525dd", floppy_image_device::default_floppy_formats).enable_sound(true);
- FLOPPY_CONNECTOR(config, m_floppy1, zorba_floppies, "525dd", floppy_image_device::default_floppy_formats).enable_sound(true);
-
- // J1 IEEE-488
- IEEE488(config, m_ieee);
- m_ieee->srq_callback().set(m_pia1, FUNC(pia6821_device::ca2_w)); // TODO: gated with PB1 from PIA
-
- // J2 EIA RS232/internal modem
- // TODO: this has additional lines compared to a regular RS232 port (TxC in, RxC in, RxC out, speaker in, power)
- rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, nullptr));
- rs232.rxd_handler().set(m_uart0, FUNC(i8251_device::write_rxd)); // TODO: this line has a LED attached
- rs232.cts_handler().set(m_uart0, FUNC(i8251_device::write_cts)); // TODO: this line has a LED attached
- rs232.dsr_handler().set(m_uart0, FUNC(i8251_device::write_dsr));
-
- // J3 Parallel printer
- centronics_device &parprn(CENTRONICS(config, "parprn", centronics_devices, "printer"));
- parprn.busy_handler().set(m_uart1, FUNC(i8251_device::write_cts));
- parprn.busy_handler().append(m_uart1, FUNC(i8251_device::write_dsr)); // TODO: shared with serial CTS
- parprn.fault_handler().set(FUNC(zorba_state::printer_fault_w));
- parprn.select_handler().set(FUNC(zorba_state::printer_select_w));
-
- output_latch_device &parprndata(OUTPUT_LATCH(config, "parprndata"));
- parprn.set_output_latch(parprndata);
-
- // J3 Serial printer
- rs232_port_device &serprn(RS232_PORT(config, "serprn", default_rs232_devices, nullptr));
- serprn.rxd_handler().set(m_uart1, FUNC(i8251_device::write_rxd)); // TODO: this line has a LED attached
-
- // J6 TTL-level serial keyboard
- ZORBA_KEYBOARD(config, "keyboard").rxd_cb().set(m_uart2, FUNC(i8251_device::write_rxd));
-
- SOFTWARE_LIST(config, "flop_list").set_original("zorba");
-}
-
-
-//-------------------------------------------------
-// Initialise/reset
-//-------------------------------------------------
-
-void zorba_state::machine_start()
-{
- uint8_t *main = memregion("maincpu")->base();
-
- m_read_bank->configure_entry(0, &main[0x0000]);
- m_read_bank->configure_entry(1, &main[0x10000]);
- membank("bankw0")->configure_entry(0, &main[0x0000]);
-
- save_item(NAME(m_intmask));
- save_item(NAME(m_tx_rx_rdy));
- save_item(NAME(m_irq));
-
- save_item(NAME(m_printer_prowriter));
- save_item(NAME(m_printer_fault));
- save_item(NAME(m_printer_select));
-
- save_item(NAME(m_term_data));
-
- m_printer_prowriter = false;
- m_printer_fault = 0;
- m_printer_select = 0;
-}
-
-void zorba_state::machine_reset()
-{
- m_uart2->write_cts(0); // always asserted
-
- m_intmask = 0x00;
- m_tx_rx_rdy = 0x00;
- m_irq = 0x00;
-
- m_printer_prowriter = BIT(m_config_port->read(), 0);
- m_pia0->cb1_w(m_printer_prowriter ? m_printer_select : m_printer_fault);
-
- m_read_bank->set_entry(1); // point at rom
- membank("bankw0")->set_entry(0); // always write to RAM
-
- m_maincpu->reset();
-}
-
-
-//-------------------------------------------------
-// Memory banking control
-//-------------------------------------------------
-
-READ8_MEMBER( zorba_state::ram_r )
-{
- if (!machine().side_effects_disabled())
- m_read_bank->set_entry(0);
- return 0;
-}
-
-WRITE8_MEMBER( zorba_state::ram_w )
-{
- m_read_bank->set_entry(0);
-}
-
-READ8_MEMBER( zorba_state::rom_r )
-{
- if (!machine().side_effects_disabled())
- m_read_bank->set_entry(1);
- return 0;
-}
-
-WRITE8_MEMBER( zorba_state::rom_w )
-{
- m_read_bank->set_entry(1);
-}
-
-
-//-------------------------------------------------
-// Interrupt vectoring glue
-//-------------------------------------------------
-
-WRITE8_MEMBER( zorba_state::intmask_w )
-{
- m_intmask = data & 0x3f; // only six lines physically present
- irq_w<3>(BIT(m_intmask & m_tx_rx_rdy, 0) | BIT(m_intmask & m_tx_rx_rdy, 1));
- irq_w<4>(BIT(m_intmask & m_tx_rx_rdy, 2) | BIT(m_intmask & m_tx_rx_rdy, 3));
- irq_w<5>(BIT(m_intmask & m_tx_rx_rdy, 4) | BIT(m_intmask & m_tx_rx_rdy, 5));
-}
-
-template <unsigned N> WRITE_LINE_MEMBER( zorba_state::tx_rx_rdy_w )
-{
- m_tx_rx_rdy = (m_tx_rx_rdy & ~(1 << N)) | ((state ? 1 : 0) << N);
- irq_w<(N >> 1) + 3>(BIT(m_intmask & m_tx_rx_rdy, N & ~1) | BIT(m_intmask & m_tx_rx_rdy, N | 1));
-}
-
-template <unsigned N> WRITE_LINE_MEMBER( zorba_state::irq_w )
-{
- m_irq = (m_irq & ~(1 << N)) | ((state ? 1 : 0) << N);
-
- // TODO: get a good dump of the interrupt vector PROM and get rid of this hack
- // There are six interrupt sources:
- // * IRQ0: DMAC/CRTC shared
- // * IRQ1: IEEE488 (PIA IRQA/IRQB shared)
- // * IRQ2: FDC INTRQ/DRQ shared
- // * IRQ3: RS232 TXRDY/RXRDY selectable
- // * IRQ4: Serial printer TXRDY/RXRDY selectable
- // * IRQ5: Keyboard TXRDY/RXRDY selectable
- // Valid vectors are 0x80, 0x84, 0x88, 0x8c, 0x90 and 0x94
- // Floppy needs to be on 0x80, and RS232 is apparently on 0x88
- // Everything else, including priority, is a complete guess
- u8 vector;
- if (BIT(m_irq, 2)) vector = 0x80;
- else if (BIT(m_irq, 3)) vector = 0x88;
- else vector = 0x84; // very wrong, need test cases for other things
-
- m_maincpu->set_input_line_and_vector(INPUT_LINE_IRQ0, m_irq ? ASSERT_LINE : CLEAR_LINE, vector); // Z80
-}
-
-
-//-------------------------------------------------
-// DMA controller handlers
-//-------------------------------------------------
-
-WRITE_LINE_MEMBER( zorba_state::busreq_w )
-{
-// since our Z80 has no support for BUSACK, we assume it is granted immediately
- m_maincpu->set_input_line(Z80_INPUT_LINE_BUSRQ, state);
- m_dma->bai_w(state); // tell dma that bus has been granted
-}
-
-READ8_MEMBER(zorba_state::memory_read_byte)
-{
- return m_maincpu->space(AS_PROGRAM).read_byte(offset);
-}
-
-WRITE8_MEMBER(zorba_state::memory_write_byte)
-{
- m_maincpu->space(AS_PROGRAM).write_byte(offset, data);
-}
-
-READ8_MEMBER(zorba_state::io_read_byte)
-{
- address_space& prog_space = m_maincpu->space(AS_IO);
- return prog_space.read_byte(offset);
-}
-
-WRITE8_MEMBER(zorba_state::io_write_byte)
-{
- address_space& prog_space = m_maincpu->space(AS_IO);
-
- if (offset == 0x10)
- m_crtc->dack_w(data);
- else
- prog_space.write_byte(offset, data);
-}
-
-
-//-------------------------------------------------
-// PIT handlers
-//-------------------------------------------------
-
-WRITE_LINE_MEMBER( zorba_state::br1_w )
-{
- // TODO: these can be jumpered to inputs from J2 so a modem can generate Baud rates
- // TODO: receive clock is exposed on J2 for external devices without Baud rate generators
- m_uart0->write_txc(state);
- m_uart0->write_rxc(state);
-}
-
-
-//-------------------------------------------------
-// PIA handlers
-//-------------------------------------------------
-
-WRITE8_MEMBER( zorba_state::pia0_porta_w )
-{
- m_beep->set_state(BIT(data, 7));
- m_fdc->dden_w(BIT(data, 6));
-
- floppy_image_device *floppy = nullptr;
- if (!BIT(data, 0)) floppy = m_floppy0->get_device();
- if (!BIT(data, 1)) floppy = m_floppy1->get_device();
-
- m_fdc->set_floppy(floppy);
-
- if (floppy)
- floppy->ss_w(!BIT(data, 5));
-
- m_floppy0->get_device()->mon_w(BIT(data, 4));
- m_floppy1->get_device()->mon_w(BIT(data, 4));
-}
-
-READ8_MEMBER( zorba_state::pia1_portb_r )
-{
- // 0 (output only)
- // 1 (output only)
- // 2 (output only)
- // 3 EOI gated with PB2 (active high)
- // 4 (output only)
- // 5 DAV gated with PB2 (active high)
- // 6 NDAC gated with PB1 (active high)
- // 7 NRFD gated with PB1 (active high)
-
- const uint8_t outputs(m_pia0->b_output());
- return
- (m_ieee->eoi_r() << 3) |
- (m_ieee->dav_r() << 5) |
- (m_ieee->ndac_r() << 6) |
- (m_ieee->nrfd_r() << 7) |
- (BIT(outputs, 1) ? 0x00 : 0xc0) |
- (BIT(outputs, 2) ? 0x00 : 0x28);
-}
-
-WRITE8_MEMBER( zorba_state::pia1_portb_w )
-{
- // 0 DIO direction
- // 1 NDAC/NRFD data direction, SRQ gate
- // 2 EOI/DAV data direction
- // 3 EOI gated with PB2 (active low)
- // 4 ATN
- // 5 DAV gated with PB2 (active low)
- // 6 NDAC gated with PB1 (active low)
- // 7 NRFD gated with PB1 (active low)
-
- m_ieee->host_eoi_w(BIT(data, 3) & BIT(~data, 2));
- m_ieee->host_atn_w(BIT(data, 4));
- m_ieee->host_dav_w(BIT(data, 5) & BIT(~data, 2));
- m_ieee->host_ndac_w(BIT(data, 6) & BIT(~data, 1));
- m_ieee->host_nrfd_w(BIT(data, 7) & BIT(~data, 1));
-}
-
-
-//-------------------------------------------------
-// Video
-//-------------------------------------------------
-
-I8275_DRAW_CHARACTER_MEMBER( zorba_state::zorba_update_chr )
-{
- int i;
- const rgb_t *palette = m_palette->palette()->entry_list_raw();
-
- uint8_t gfx = m_p_chargen[(linecount & 15) + (charcode << 4) + ((gpa & 1) << 11)];
-
- if (rvv)
- gfx ^= 0xff;
-
- // VSP actually overrides reverse video here
- if (vsp)
- gfx = 0;
-
- if (lten)
- gfx = 0xff;
-
- for(i=0;i<8;i++)
- bitmap.pix32(y, x + 7 - i) = palette[BIT(gfx, i) ? (hlgt ? 2 : 1) : 0];
-}
-
-
-//-------------------------------------------------
-// Printer port glue
-//-------------------------------------------------
-
-WRITE_LINE_MEMBER( zorba_state::printer_fault_w )
-{
- // connects to CB1 for Centronics
- m_printer_fault = state;
- if (!m_printer_prowriter)
- m_pia0->cb1_w(state);
-}
-
-WRITE_LINE_MEMBER( zorba_state::printer_select_w )
-{
- // connects to CB1 for Prowriter
- m_printer_select = state;
- if (m_printer_prowriter)
- m_pia0->cb1_w(state);
-}
-
-INPUT_CHANGED_MEMBER( zorba_state::printer_type )
-{
- m_printer_prowriter = newval;
- m_pia0->cb1_w(m_printer_prowriter ? m_printer_select : m_printer_fault);
-}
-
-
-ROM_START( zorba )
- ROM_REGION( 0x14000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "780000.u47", 0x10000, 0x1000, CRC(6d58f2c5) SHA1(7763f08c801cd36e5a761c6dc9f30a50b3bc482d) )
-
- ROM_REGION( 0x1000, "chargen", 0 )
- ROM_LOAD( "773000.u5", 0x0000, 0x1000, CRC(d0a2f8fc) SHA1(29aee7ee657778c46e9800abd4955e6d4b33ef68) )
-
- ROM_REGION( 0x60, "proms", 0 )
- ROM_LOAD( "74ls288.u37", 0x0000, 0x0020, CRC(0a67edd6) SHA1(c1ece8978a3a061e0130d43907fa63a71e75e75d) BAD_DUMP ) // looks like interrupt vector PROM dumped with scrambled lines
- ROM_LOAD( "74ls288.u38", 0x0020, 0x0020, CRC(5ec93ea7) SHA1(3a84c098474b05d5cbe1939a3e15f66d06470581) BAD_DUMP ) // looks like bad dump of address decode PROM
- ROM_LOAD( "74ls288.u77", 0x0040, 0x0020, CRC(946e03b0) SHA1(24240bdd7bdf507a5b51628fb36ad1266fc53a28) BAD_DUMP ) // looks like bad dump of address decode PROM
-ROM_END
-
-COMP( 1984?, zorba, 0, 0, zorba, zorba, zorba_state, empty_init, "Modular Micros", "Zorba (Modular Micros)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
-
-// Undumped versions (see startup screen notes at top of file)
-// COMP( 1983, zorbat, zorba, 0, zorba, zorba, zorba_state, empty_init, "Telcon Industries", "Zorba (Telcon Industries)", MACHINE_NOT_WORKING )
-// COMP( 1984, zorbag, zorba, 0, zorba, zorba, zorba_state, empty_init, "Gemini Electronics", "Zorba (Gemini Electronics)", MACHINE_NOT_WORKING )