summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/tv912.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/tv912.cpp')
-rw-r--r--src/mame/drivers/tv912.cpp940
1 files changed, 0 insertions, 940 deletions
diff --git a/src/mame/drivers/tv912.cpp b/src/mame/drivers/tv912.cpp
deleted file mode 100644
index 5bdeb30bd79..00000000000
--- a/src/mame/drivers/tv912.cpp
+++ /dev/null
@@ -1,940 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:AJR
-/*******************************************************************************
-
- TeleVideo TVI-912/TVI-920 terminals
-
- This was the first series of terminals from TeleVideo. The models differed
- from each other in the number and pattern of keys on the nondetachable
- keyboard. Those with a B suffix had a TTY-style keyboard, while the C
- suffix indicated a typewriter-style keyboard. The TVI-920 added a row of
- function keys but was otherwise mostly identical to the TVI-912. The
- TVI-912C keyboard matrix and ribbon connector pinout are almost the same
- as in the TVI-910. The system self-test can be triggered by shorting two
- wires on the keyboard unit near the connector (TODO: figure out how to do
- this on the emulated system).
-
- Settings for these terminals are controlled by DIP switches, which are not
- read by the CPU except for those of S4 (which is usually left as a block of
- bare jumpers) and the half-duplex and 50/60 Hz switches of S2. Four to five
- of the S2 switches directly manipulate UART pins to select the number and
- framing of data bits. Position 8 (NB2) is deliberately disconnected on
- later revisions to restrict communications to 7 or 8 data bits, likely
- because of known incompatibilities between UART models in 5-bit data mode.
- (For reasons that are less clear, the 19,200 baud option is also commonly
- omitted from documentation.)
-
- The baud rate switches (S1/S3) are mounted vertically at the rear of the
- unit. As these are connected directly to the frequency outputs of the baud
- rate generation circuit (which consists mainly of the LS163s at A73, A70,
- A71 and A72), only one switch may be down (closed) at a time. (The nominal
- "75 baud" output of this circuit doubles as the beep sound frequency.)
- Originally the UART was connected to receive and transmit data at the
- printer rate when the printer was selected, even though it did not receive
- any data through the printer connector. Later board revisions fixed this
- by tying the signal selected by S1 to the UART's RCP; S3 could be similarly
- tied to TCP by modifying a couple of jumpers.
-
- The hardware appears to have been originally designed to access two 2316E
- program ROMs (alternatively 8316E or 2716), with the lower 2K at A50 and
- upper 2K at A49. These were ultimately merged into a single 2332 or 8332A
- at A49; several jumpers in the area could be inserted or removed to
- accommodate these different ROM types. At least the later A49B1 and A49C1
- mask ROMs (both MM52132 types) were apparently interchangeable between
- TVI-912B/C and TVI-920B/C. Part or all of the program ROM could also be
- made internal to the CPU by replacing the 8035 with a 8048, 8748 or 8049
- and grounding the EA pin by inserting a jumper at W1.
-
- Each displayed character nominally consists of 6 x 8 dots within a 7 x 10
- cell. However, the lowest two bits of each row of character data may be
- set to shift either the first three dots, the last three dots or both
- forward by half a dot, thus effectively doubling horizontal resolution.
-
-*******************************************************************************/
-
-#include "emu.h"
-#include "cpu/mcs48/mcs48.h"
-#include "bus/rs232/rs232.h"
-#include "machine/ay31015.h"
-#include "machine/bankdev.h"
-#include "sound/beep.h"
-#include "video/tms9927.h"
-#include "screen.h"
-#include "speaker.h"
-
-#define TV912_CH_WIDTH 14
-#define CHARSET_TEST 0
-
-class tv912_state : public driver_device
-{
-public:
- tv912_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag)
- , m_maincpu(*this, "maincpu")
- , m_crtc(*this, "crtc")
- , m_uart(*this, "uart")
- , m_rs232(*this, "rs232")
- , m_bankdev(*this, "bankdev")
- , m_beep(*this, "beep")
- , m_dispram_bank(*this, "dispram")
- , m_p_chargen(*this, "chargen")
- , m_keys(*this, "KEY%u", 0)
- , m_modem_baud(*this, "MODEMBAUD")
- , m_printer_baud(*this, "PRINTBAUD")
- , m_uart_control(*this, "UARTCTRL")
- , m_video_control(*this, "VIDEOCTRL")
- , m_modifiers(*this, "MODIFIERS")
- , m_half_duplex(*this, "HALFDUP")
- , m_jumpers(*this, "JUMPERS")
- , m_option(*this, "OPTION")
- , m_dtr(*this, "DTR")
- , m_baudgen_timer(nullptr)
- { }
-
- void tv912(machine_config &config);
-
- DECLARE_INPUT_CHANGED_MEMBER(uart_settings_changed);
-
-private:
- DECLARE_WRITE8_MEMBER(p1_w);
- DECLARE_READ8_MEMBER(p2_r);
- DECLARE_WRITE8_MEMBER(p2_w);
- DECLARE_READ8_MEMBER(crtc_r);
- DECLARE_WRITE8_MEMBER(crtc_w);
- DECLARE_READ8_MEMBER(uart_status_r);
- DECLARE_READ8_MEMBER(keyboard_r);
- DECLARE_WRITE8_MEMBER(output_40c);
-
- u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
-
- void bank_map(address_map &map);
- void io_map(address_map &map);
- void prog_map(address_map &map);
-
- enum
- {
- TIMER_BAUDGEN
- };
-
- 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;
-
- required_device<cpu_device> m_maincpu;
- required_device<tms9927_device> m_crtc;
- required_device<ay51013_device> m_uart;
- required_device<rs232_port_device> m_rs232;
- required_device<address_map_bank_device> m_bankdev;
- required_device<beep_device> m_beep;
- required_memory_bank m_dispram_bank;
- required_region_ptr<u8> m_p_chargen;
- required_ioport_array<32> m_keys;
- required_ioport m_modem_baud;
- required_ioport m_printer_baud;
- required_ioport m_uart_control;
- required_ioport m_video_control;
- required_ioport m_modifiers;
- required_ioport m_half_duplex;
- required_ioport m_jumpers;
- required_ioport m_option;
- required_ioport m_dtr;
-
- emu_timer *m_baudgen_timer;
-
- bool m_force_blank;
- bool m_4hz_flasher;
- bool m_lpt_select;
- u8 m_keyboard_scan;
- std::unique_ptr<u8[]> m_dispram;
-};
-
-WRITE8_MEMBER(tv912_state::p1_w)
-{
- m_keyboard_scan = data;
-}
-
-READ8_MEMBER(tv912_state::p2_r)
-{
- ioport_value dup = m_half_duplex->read();
-
- // P27: -HALF DUPLEX
- u8 result = BIT(dup, 0) << 7;
-
- // P26: -PTR RDY
-
- // P25: -DCR
- if (!BIT(dup, 1))
- result |= m_rs232->dsr_r() << 5;
- if (!BIT(dup, 2))
- result |= m_rs232->dcd_r() << 5;
-
- return result | 0x5f;
-}
-
-WRITE8_MEMBER(tv912_state::p2_w)
-{
- // P20-P23: Address Signals (4MSBS)
- m_bankdev->set_bank(data & 0x0f);
-
- // P24: +4Hz Flasher
- m_4hz_flasher = BIT(data, 4);
-}
-
-READ8_MEMBER(tv912_state::crtc_r)
-{
- return m_crtc->read(space, bitswap<4>(offset, 5, 4, 1, 0));
-}
-
-WRITE8_MEMBER(tv912_state::crtc_w)
-{
- m_crtc->write(space, bitswap<4>(offset, 5, 4, 1, 0), data);
-}
-
-READ8_MEMBER(tv912_state::keyboard_r)
-{
- u8 result = m_modifiers->read();
-
- for (int b = 0; b < 8; b++)
- if (!BIT(m_keyboard_scan, b))
- result &= m_keys[b * 4 + offset]->read();
-
- return result;
-}
-
-READ8_MEMBER(tv912_state::uart_status_r)
-{
- m_uart->write_swe(0);
- u8 status = m_uart->dav_r() << 0;
- status |= m_uart->tbmt_r() << 1;
- status |= m_uart->pe_r() << 2;
- status |= m_uart->fe_r() << 3;
- status |= BIT(m_jumpers->read(), offset) << 4;
- status |= m_option->read();
- m_uart->write_swe(1);
- return status;
-}
-
-WRITE8_MEMBER(tv912_state::output_40c)
-{
- // DB6: -PRTOL
-
- // DB5: +FORCE BLANK
- m_force_blank = BIT(data, 5);
-
- // DB4: +SEL LPT
- m_lpt_select = BIT(data, 4);
-
- // DB3: -BREAK
-
- // DB2: -RQS
- ioport_value dtr = m_dtr->read();
- m_rs232->write_rts(BIT(data, 2));
- if (!BIT(dtr, 0))
- m_rs232->write_dtr(BIT(data, 2));
- if (!BIT(dtr, 1))
- m_rs232->write_dtr(0);
-
- // DB1: +BEEP
- m_beep->set_state(BIT(data, 1));
-
- // DB0: +PG SEL
- m_dispram_bank->set_entry(BIT(data, 0));
-}
-
-void tv912_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
-{
- switch (id)
- {
- case TIMER_BAUDGEN:
- m_uart->write_rcp(param);
- m_uart->write_tcp(param);
-
- ioport_value sel = (m_lpt_select ? m_printer_baud : m_modem_baud)->read();
- for (int b = 0; b < 10; b++)
- {
- if (!BIT(sel, b))
- {
- unsigned divisor = 11 * (b < 9 ? 1 << b : 176);
- m_baudgen_timer->adjust(attotime::from_hz(23.814_MHz_XTAL / 3.5 / divisor), !param);
- break;
- }
- }
-
- break;
- }
-}
-
-u32 tv912_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
-{
- if (m_crtc->screen_reset() || m_force_blank)
- {
- bitmap.fill(rgb_t::black(), cliprect);
- return 0;
- }
-
- const u8 *dispram = static_cast<u8 *>(m_dispram_bank->base());
- ioport_value videoctrl = m_video_control->read();
-
- rectangle curs;
- m_crtc->cursor_bounds(curs);
-
- int scroll = m_crtc->upscroll_offset();
-
- for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
- {
- int row = ((y / 10) + scroll) % 24;
- int ra = y % 10;
- int x = 0;
- u8 *charbase = &m_p_chargen[(ra & 7) | BIT(videoctrl, 1) << 10];
-
- for (int pos = 0; pos < 80; pos++)
- {
- u8 ch = (pos < 64)
- ? dispram[(row << 6) | pos]
- : dispram[0x600 | ((row & 0x07) << 6) | ((row & 0x18) << 1) | (pos & 0x0f)];
-
- if (CHARSET_TEST && pos >= 32 && pos < 64)
- ch = (pos & 0x1f) | (row & 7) << 5;
-
- u8 data = (ra > 0 && ra < 9) ? charbase[(ch & 0x7f) << 3] : 0;
- u8 dots = (data & 0xfc) >> 1;
- bool adv = BIT(data, 1);
-
- if (x == curs.left() && y >= curs.top() && y <= curs.bottom())
- {
- if (BIT(videoctrl, 0) || !m_4hz_flasher)
- dots ^= 0xff;
- }
-
- for (int d = 0; d < TV912_CH_WIDTH / 2; d++)
- {
- if (x >= cliprect.left() && x <= cliprect.right())
- bitmap.pix(y, x) = BIT(dots, 7) ? rgb_t::white() : rgb_t::black();
- x++;
- if (adv)
- dots <<= 1;
- if (x >= cliprect.left() && x <= cliprect.right())
- bitmap.pix(y, x) = BIT(dots, 7) ? rgb_t::white() : rgb_t::black();
- x++;
- if (!adv)
- dots <<= 1;
-
- if (d == 2)
- adv = BIT(data, 0);
- }
- }
- }
-
- return 0;
-}
-
-void tv912_state::machine_start()
-{
- m_dispram = make_unique_clear<u8[]>(0x1000);
- m_dispram_bank->configure_entries(0, 2, m_dispram.get(), 0x800);
-
- m_baudgen_timer = timer_alloc(TIMER_BAUDGEN);
- m_baudgen_timer->adjust(attotime::zero, 0);
-
- save_item(NAME(m_force_blank));
- save_item(NAME(m_lpt_select));
- save_item(NAME(m_4hz_flasher));
- save_item(NAME(m_keyboard_scan));
- save_pointer(NAME(m_dispram), 0x1000);
-}
-
-void tv912_state::machine_reset()
-{
- ioport_value uart_ctrl = m_uart_control->read();
- m_uart->write_np(BIT(uart_ctrl, 4));
- m_uart->write_tsb(BIT(uart_ctrl, 3));
- m_uart->write_nb1(BIT(uart_ctrl, 2));
- m_uart->write_nb2(BIT(uart_ctrl, 1));
- m_uart->write_eps(BIT(uart_ctrl, 0));
- m_uart->write_cs(1);
-}
-
-void tv912_state::prog_map(address_map &map)
-{
- map(0x000, 0xfff).rom().region("maincpu", 0);
-}
-
-void tv912_state::io_map(address_map &map)
-{
- map(0x00, 0xff).m(m_bankdev, FUNC(address_map_bank_device::amap8));
-}
-
-void tv912_state::bank_map(address_map &map)
-{
- map(0x000, 0x0ff).mirror(0x300).ram();
- map(0x400, 0x403).mirror(0x3c0).select(0x030).rw(FUNC(tv912_state::crtc_r), FUNC(tv912_state::crtc_w));
- map(0x404, 0x404).mirror(0x3f3).r(m_uart, FUNC(ay51013_device::receive));
- map(0x408, 0x40b).mirror(0x3f0).r(FUNC(tv912_state::uart_status_r));
- map(0x408, 0x408).mirror(0x3f3).w(m_uart, FUNC(ay51013_device::transmit));
- map(0x40c, 0x40f).mirror(0x3f0).r(FUNC(tv912_state::keyboard_r));
- map(0x40c, 0x40c).mirror(0x3f3).w(FUNC(tv912_state::output_40c));
- map(0x800, 0xfff).bankrw("dispram");
-}
-
-INPUT_CHANGED_MEMBER(tv912_state::uart_settings_changed)
-{
- ioport_value uart_ctrl = m_uart_control->read();
- m_uart->write_np(BIT(uart_ctrl, 4));
- m_uart->write_tsb(BIT(uart_ctrl, 3));
- m_uart->write_nb1(BIT(uart_ctrl, 2));
- m_uart->write_nb2(BIT(uart_ctrl, 1));
- m_uart->write_eps(BIT(uart_ctrl, 0));
-}
-
-static INPUT_PORTS_START( switches )
- PORT_START("MODEMBAUD")
- PORT_DIPNAME(0x3ff, 0x3fd, "Modem Port Baud Rate") PORT_DIPLOCATION("S1:1,2,3,4,5,6,7,8,9,10")
- PORT_DIPSETTING(0x2ff, "75") // actual rate: 1,208 ÷ 16 ≈ 75.5
- PORT_DIPSETTING(0x1ff, "110") // actual rate: 1,757 ÷ 16 ≈ 109.8
- PORT_DIPSETTING(0x37f, "150") // actual rate: 2,416 ÷ 16 ≈ 151
- PORT_DIPSETTING(0x3bf, "300") // actual rate: 4,832 ÷ 16 ≈ 302
- PORT_DIPSETTING(0x3df, "600") // actual rate: 9,665 ÷ 16 ≈ 604
- PORT_DIPSETTING(0x3ef, "1200") // actual rate: 19,330 ÷ 16 ≈ 1,208
- PORT_DIPSETTING(0x3f7, "2400") // actual rate: 38,659 ÷ 16 ≈ 2,416
- PORT_DIPSETTING(0x3fb, "4800") // actual rate: 77,318 ÷ 16 ≈ 4,832
- PORT_DIPSETTING(0x3fd, "9600") // actual rate: 154,636 ÷ 16 ≈ 9,665
- PORT_DIPSETTING(0x3fe, "19200") // actual rate: 309,273 ÷ 16 ≈ 19,330
-
- PORT_START("PRINTBAUD")
- PORT_DIPNAME(0x3ff, 0x3fd, "Printer Port Baud Rate") PORT_DIPLOCATION("S3:1,2,3,4,5,6,7,8,9,10")
- PORT_DIPSETTING(0x2ff, "75")
- PORT_DIPSETTING(0x1ff, "110")
- PORT_DIPSETTING(0x37f, "150")
- PORT_DIPSETTING(0x3bf, "300")
- PORT_DIPSETTING(0x3df, "600")
- PORT_DIPSETTING(0x3ef, "1200")
- PORT_DIPSETTING(0x3f7, "2400")
- PORT_DIPSETTING(0x3fb, "4800")
- PORT_DIPSETTING(0x3fd, "9600")
- PORT_DIPSETTING(0x3fe, "19200")
-
- PORT_START("VIDEOCTRL")
- PORT_DIPUNUSED_DIPLOC(0x04, 0x04, "S2:1") // disables TTL video output on earlier revisions
- PORT_DIPNAME(0x02, 0x00, "Character Set") PORT_DIPLOCATION("S2:2")
- PORT_DIPSETTING(0x00, "Standard")
- PORT_DIPSETTING(0x02, "Alternate")
- PORT_DIPNAME(0x01, 0x00, "Cursor Flash") PORT_DIPLOCATION("S2:10") // originally jumper W25
- PORT_DIPSETTING(0x01, DEF_STR(Off))
- PORT_DIPSETTING(0x00, DEF_STR(On))
- // S2:10 was previously used to short out 270 ohm resistor in video section
-
- PORT_START("UARTCTRL")
- PORT_DIPNAME(0x11, 0x11, "Parity Select") PORT_DIPLOCATION("S2:9,5") PORT_CHANGED_MEMBER(DEVICE_SELF, tv912_state, uart_settings_changed, 0)
- PORT_DIPSETTING(0x11, "None")
- PORT_DIPSETTING(0x01, "Even")
- PORT_DIPSETTING(0x00, "Odd")
- PORT_DIPNAME(0x08, 0x00, "Stop Bits") PORT_DIPLOCATION("S2:6") PORT_CHANGED_MEMBER(DEVICE_SELF, tv912_state, uart_settings_changed, 0)
- PORT_DIPSETTING(0x00, "1")
- PORT_DIPSETTING(0x08, "2")
- PORT_DIPNAME(0x06, 0x06, "Data Bits") PORT_DIPLOCATION("S2:8,7") PORT_CHANGED_MEMBER(DEVICE_SELF, tv912_state, uart_settings_changed, 0)
- PORT_DIPSETTING(0x00, "5")
- PORT_DIPSETTING(0x04, "6")
- PORT_DIPSETTING(0x02, "7")
- PORT_DIPSETTING(0x06, "8")
-
- PORT_START("MODIFIERS")
- PORT_DIPNAME(0x80, 0x80, "Refresh Rate") PORT_DIPLOCATION("S2:4")
- PORT_DIPSETTING(0x00, "50 Hz")
- PORT_DIPSETTING(0x80, "60 Hz")
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Alpha Lock") PORT_CODE(KEYCODE_CAPSLOCK)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CHAR(UCHAR_SHIFT_1) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CHAR(UCHAR_SHIFT_2) PORT_CODE(KEYCODE_LCONTROL)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Funct") PORT_CODE(KEYCODE_LALT)
- PORT_BIT(0x23, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("HALFDUP")
- PORT_DIPNAME(0x01, 0x01, "Conversation Mode") PORT_DIPLOCATION("S2:3")
- PORT_DIPSETTING(0x00, "Half Duplex")
- PORT_DIPSETTING(0x01, "Full Duplex")
- PORT_DIPNAME(0x06, 0x04, "DCR (RS232)") PORT_DIPLOCATION("S5:1,2")
- PORT_DIPSETTING(0x04, "DSR") // at P3-6
- PORT_DIPSETTING(0x02, "DCD") // at P3-8
-
- PORT_START("JUMPERS")
- PORT_DIPNAME(0x08, 0x00, "Automatic CRLF") PORT_DIPLOCATION("S4:1") // or jumper W31
- PORT_DIPSETTING(0x08, DEF_STR(Off))
- PORT_DIPSETTING(0x00, DEF_STR(On))
- PORT_DIPNAME(0x04, 0x04, "End of Send Character") PORT_DIPLOCATION("S4:2") // or jumper W32
- PORT_DIPSETTING(0x04, "CR")
- PORT_DIPSETTING(0x00, "EOT")
- PORT_DIPNAME(0x02, 0x02, "Column 80 CRLF") PORT_DIPLOCATION("S4:3") // or jumper W33
- PORT_DIPSETTING(0x00, DEF_STR(Off))
- PORT_DIPSETTING(0x02, DEF_STR(On))
- PORT_DIPNAME(0x01, 0x01, "Terminal Mode") PORT_DIPLOCATION("S4:4") // or jumper W34
- PORT_DIPSETTING(0x01, "Extension")
- PORT_DIPSETTING(0x00, "Page Print")
-
- PORT_START("OPTION")
- PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "S4:5")
- PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "S4:6")
- PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "S4:7")
-
- PORT_START("DTR")
- PORT_DIPNAME(0x03, 0x02, "DTR (RS232)") PORT_DIPLOCATION("S5:3,4")
- PORT_DIPSETTING(0x02, "Tied to RTS")
- PORT_DIPSETTING(0x01, "Pulled to +12V")
-INPUT_PORTS_END
-
-static INPUT_PORTS_START( tv912b )
- PORT_INCLUDE(switches)
-
- PORT_START("KEY0")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('n') PORT_CHAR('N') PORT_CHAR(0x0e) PORT_CODE(KEYCODE_N)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('x') PORT_CHAR('X') PORT_CHAR(0x18) PORT_CODE(KEYCODE_X)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN) // some non-printing character
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY1")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('m') PORT_CHAR('M') PORT_CODE(KEYCODE_M)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('c') PORT_CHAR('C') PORT_CHAR(0x03) PORT_CODE(KEYCODE_C)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY2")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(',') PORT_CHAR('<') PORT_CODE(KEYCODE_COMMA) PORT_CODE(KEYCODE_COMMA_PAD)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('v') PORT_CHAR('V') PORT_CHAR(0x16) PORT_CODE(KEYCODE_V)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY3")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('.') PORT_CHAR('>') PORT_CODE(KEYCODE_STOP) PORT_CODE(KEYCODE_DEL_PAD)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('b') PORT_CHAR('B') PORT_CHAR(0x02) PORT_CODE(KEYCODE_B)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY4")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('4') PORT_CHAR('$') PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(0x09) PORT_CODE(KEYCODE_ESC) PORT_CODE(KEYCODE_TAB_PAD)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN) // some non-printing character
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY5")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('5') PORT_CHAR('%') PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('1') PORT_CHAR('!') PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY6")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('6') PORT_CHAR('&') PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('2') PORT_CHAR('\"') PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY7")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('7') PORT_CHAR('\'') PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('3') PORT_CHAR('#') PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY8")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('r') PORT_CHAR('R') PORT_CHAR(0x12) PORT_CODE(KEYCODE_R)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(0x1b) PORT_CODE(KEYCODE_TAB)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN) // some non-printing character
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY9")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('t') PORT_CHAR('T') PORT_CHAR(0x14) PORT_CODE(KEYCODE_T)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('q') PORT_CHAR('Q') PORT_CHAR(0x11) PORT_CODE(KEYCODE_Q)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY10")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('y') PORT_CHAR('Y') PORT_CHAR(0x19) PORT_CODE(KEYCODE_Y)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('w') PORT_CHAR('W') PORT_CHAR(0x17) PORT_CODE(KEYCODE_W)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY11")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('u') PORT_CHAR('U') PORT_CHAR(0x15) PORT_CODE(KEYCODE_U)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('e') PORT_CHAR('E') PORT_CHAR(0x05) PORT_CODE(KEYCODE_E)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY12")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('g') PORT_CHAR('G') PORT_CHAR(0x07) PORT_CODE(KEYCODE_G)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('a') PORT_CHAR('A') PORT_CHAR(0x01) PORT_CODE(KEYCODE_A)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN) // control character 0xc2
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY13")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('h') PORT_CHAR('H') PORT_CHAR(0x08) PORT_CODE(KEYCODE_H)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('s') PORT_CHAR('S') PORT_CHAR(0x13) PORT_CODE(KEYCODE_S)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY14")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('j') PORT_CHAR('J') PORT_CODE(KEYCODE_J)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('d') PORT_CHAR('D') PORT_CHAR(0x04) PORT_CODE(KEYCODE_D)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY15")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('k') PORT_CHAR('K') PORT_CHAR(0x0b) PORT_CODE(KEYCODE_K)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('f') PORT_CHAR('F') PORT_CHAR(0x06) PORT_CODE(KEYCODE_F)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY16")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Return") PORT_CHAR(0x0d) PORT_CODE(KEYCODE_ENTER)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('i') PORT_CHAR('I') PORT_CODE(KEYCODE_I)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN) // control character 0xc9
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY17")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) // control character 0xd0 (PRINT)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('o') PORT_CHAR('O') PORT_CHAR(0x0f) PORT_CODE(KEYCODE_O)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN) // control character 0xd1
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY18")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Rub Out") PORT_CHAR(UCHAR_MAMEKEY(DEL)) PORT_CODE(KEYCODE_QUOTE)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('p') PORT_CHAR('P') PORT_CHAR(0x10) PORT_CODE(KEYCODE_P)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY19")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) // control character 0x9a (BREAK)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Line Feed") PORT_CHAR(0x0a) PORT_CODE(KEYCODE_INSERT)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY20")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) // control character 0x1f (PAGE)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('l') PORT_CHAR('L') PORT_CHAR(0x0c) PORT_CODE(KEYCODE_L)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN) // control character 0xb5
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY21")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_CODE(KEYCODE_LEFT)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(';') PORT_CHAR('+') PORT_CODE(KEYCODE_COLON)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY22")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('/') PORT_CHAR('?') PORT_CODE(KEYCODE_SLASH)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('@') PORT_CHAR('`') PORT_CODE(KEYCODE_TILDE)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY23")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(' ') PORT_CODE(KEYCODE_SPACE)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('\\') PORT_CHAR('|') PORT_CHAR(0x1c) PORT_CODE(KEYCODE_BACKSLASH)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY24")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(']') PORT_CHAR('}') PORT_CHAR(0x1d) PORT_CODE(KEYCODE_CLOSEBRACE)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(':') PORT_CHAR('*') PORT_CODE(KEYCODE_MINUS)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN) // control character 0xb4
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY25")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('8') PORT_CHAR('(') PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('-') PORT_CHAR('=') PORT_CODE(KEYCODE_EQUALS)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY26")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('9') PORT_CHAR(')') PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('0') PORT_CHAR('_') PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY27")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('^') PORT_CHAR('~') PORT_CODE(KEYCODE_BACKSPACE)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('[') PORT_CHAR('{') PORT_CODE(KEYCODE_OPENBRACE)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY28")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_CODE(KEYCODE_RIGHT)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('z') PORT_CHAR('Z') PORT_CHAR(0x1a) PORT_CODE(KEYCODE_Z)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN) // control character 0xd9
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY29")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(UP)) PORT_CODE(KEYCODE_UP)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) // control character 0xbb (CLEAR)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY30")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_CODE(KEYCODE_DOWN)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) // control character (CLR TAB)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY31")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(HOME)) PORT_CODE(KEYCODE_RALT)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) // control character (PROT MODE)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-INPUT_PORTS_END
-
-static INPUT_PORTS_START( tv912c )
- PORT_INCLUDE(switches)
-
- PORT_START("KEY0")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('n') PORT_CHAR('N') PORT_CHAR(0x0e) PORT_CODE(KEYCODE_N)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('x') PORT_CHAR('X') PORT_CHAR(0x18) PORT_CODE(KEYCODE_X)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY1")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('m') PORT_CHAR('M') PORT_CODE(KEYCODE_M)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('c') PORT_CHAR('C') PORT_CHAR(0x03) PORT_CODE(KEYCODE_C)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY2")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(',') PORT_CHAR('<') PORT_CODE(KEYCODE_COMMA)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('v') PORT_CHAR('V') PORT_CHAR(0x16) PORT_CODE(KEYCODE_V)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY3")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('.') PORT_CHAR('>') PORT_CODE(KEYCODE_STOP) PORT_CODE(KEYCODE_DEL_PAD)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('b') PORT_CHAR('B') PORT_CHAR(0x02) PORT_CODE(KEYCODE_B)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY4")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('4') PORT_CHAR('$') PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(0x1b) PORT_CODE(KEYCODE_ESC)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY5")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('5') PORT_CHAR('%') PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('1') PORT_CHAR('!') PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY6")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('6') PORT_CHAR('^') PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('2') PORT_CHAR('@') PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY7")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('7') PORT_CHAR('&') PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('3') PORT_CHAR('#') PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY8")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('r') PORT_CHAR('R') PORT_CHAR(0x12) PORT_CODE(KEYCODE_R)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(0x09) PORT_CODE(KEYCODE_TAB)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY9")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('t') PORT_CHAR('T') PORT_CHAR(0x14) PORT_CODE(KEYCODE_T)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('q') PORT_CHAR('Q') PORT_CHAR(0x11) PORT_CODE(KEYCODE_Q)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY10")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('y') PORT_CHAR('Y') PORT_CHAR(0x19) PORT_CODE(KEYCODE_Y)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('w') PORT_CHAR('W') PORT_CHAR(0x17) PORT_CODE(KEYCODE_W)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY11")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('u') PORT_CHAR('U') PORT_CHAR(0x15) PORT_CODE(KEYCODE_U)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('e') PORT_CHAR('E') PORT_CHAR(0x05) PORT_CODE(KEYCODE_E)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY12")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('g') PORT_CHAR('G') PORT_CHAR(0x07) PORT_CODE(KEYCODE_G)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('a') PORT_CHAR('A') PORT_CHAR(0x01) PORT_CODE(KEYCODE_A)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY13")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('h') PORT_CHAR('H') PORT_CODE(KEYCODE_H)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('s') PORT_CHAR('S') PORT_CHAR(0x13) PORT_CODE(KEYCODE_S)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY14")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('j') PORT_CHAR('J') PORT_CODE(KEYCODE_J)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('d') PORT_CHAR('D') PORT_CHAR(0x04) PORT_CODE(KEYCODE_D)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY15")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('k') PORT_CHAR('K') PORT_CHAR(0x0b) PORT_CODE(KEYCODE_K)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('f') PORT_CHAR('F') PORT_CHAR(0x06) PORT_CODE(KEYCODE_F)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY16")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Line Feed") PORT_CHAR(0x0a) PORT_CODE(KEYCODE_INSERT)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('i') PORT_CHAR('I') PORT_CODE(KEYCODE_I)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY17")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('o') PORT_CHAR('O') PORT_CHAR(0x0f) PORT_CODE(KEYCODE_O)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY18")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('\'') PORT_CHAR('\"') PORT_CODE(KEYCODE_QUOTE)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('p') PORT_CHAR('P') PORT_CHAR(0x10) PORT_CODE(KEYCODE_P)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY19")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) // control character 0x9a (BREAK)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('[') PORT_CHAR(']') PORT_CHAR(0x1d) PORT_CODE(KEYCODE_CLOSEBRACE)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY20")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) // (BLOCK CONV)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('l') PORT_CHAR('L') PORT_CHAR(0x0c) PORT_CODE(KEYCODE_L)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY21")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_CODE(KEYCODE_LEFT)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(';') PORT_CHAR(':') PORT_CODE(KEYCODE_COLON)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY22")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('/') PORT_CHAR('?') PORT_CODE(KEYCODE_SLASH)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD)) PORT_CODE(KEYCODE_ENTER_PAD)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY23")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(' ') PORT_CODE(KEYCODE_SPACE)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Return") PORT_CHAR(0x0d) PORT_CODE(KEYCODE_ENTER)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY24")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('\\') PORT_CHAR('|') PORT_CHAR(0x1c) PORT_CODE(KEYCODE_BACKSLASH)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('-') PORT_CHAR('_') PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_TAB_PAD)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY25")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('8') PORT_CHAR('*') PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('=') PORT_CHAR('+') PORT_CODE(KEYCODE_EQUALS)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY26")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('9') PORT_CHAR('(') PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('0') PORT_CHAR(')') PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY27")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Back Space") PORT_CHAR(0x08) PORT_CODE(KEYCODE_BACKSPACE)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('`') PORT_CHAR('~') PORT_CODE(KEYCODE_TILDE)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY28")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_CODE(KEYCODE_RIGHT)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('z') PORT_CHAR('Z') PORT_CHAR(0x1a) PORT_CODE(KEYCODE_Z)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY29")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(UP)) PORT_CODE(KEYCODE_UP)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) // control character 0xbb (CLEAR)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY30")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_CODE(KEYCODE_DOWN)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) // (DEL)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("KEY31")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(HOME)) PORT_CODE(KEYCODE_RALT)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('{') PORT_CHAR('}') PORT_CODE(KEYCODE_OPENBRACE)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xdc, IP_ACTIVE_LOW, IPT_UNUSED)
-INPUT_PORTS_END
-
-void tv912_state::tv912(machine_config &config)
-{
- i8035_device &maincpu(I8035(config, m_maincpu, 23.814_MHz_XTAL / 4)); // nominally +6MHz, actually 5.9535 MHz
- maincpu.set_addrmap(AS_PROGRAM, &tv912_state::prog_map);
- maincpu.set_addrmap(AS_IO, &tv912_state::io_map);
- maincpu.p1_out_cb().set(FUNC(tv912_state::p1_w));
- maincpu.p2_in_cb().set(FUNC(tv912_state::p2_r));
- maincpu.p2_out_cb().set(FUNC(tv912_state::p2_w));
- maincpu.t0_in_cb().set(m_rs232, FUNC(rs232_port_device::cts_r));
- maincpu.t1_in_cb().set(m_crtc, FUNC(tms9927_device::bl_r)).invert();
- maincpu.prog_out_cb().set(m_uart, FUNC(ay51013_device::write_xr)).invert();
-
- ADDRESS_MAP_BANK(config, m_bankdev);
- m_bankdev->set_addrmap(0, &tv912_state::bank_map);
- m_bankdev->set_data_width(8);
- m_bankdev->set_addr_width(12);
- m_bankdev->set_stride(0x100);
-
- screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
- screen.set_raw(23.814_MHz_XTAL, 105 * TV912_CH_WIDTH, 0, 80 * TV912_CH_WIDTH, 270, 0, 240);
- screen.set_screen_update(FUNC(tv912_state::screen_update));
-
- TMS9927(config, m_crtc, 23.814_MHz_XTAL / TV912_CH_WIDTH);
- m_crtc->set_char_width(TV912_CH_WIDTH);
- m_crtc->vsyn_callback().set_inputline(m_maincpu, MCS48_INPUT_IRQ);
- m_crtc->set_screen("screen");
-
- AY51013(config, m_uart);
- m_uart->read_si_callback().set(m_rs232, FUNC(rs232_port_device::rxd_r));
- m_uart->write_so_callback().set(m_rs232, FUNC(rs232_port_device::write_txd));
- m_uart->set_auto_rdav(true);
-
- RS232_PORT(config, m_rs232, default_rs232_devices, "loopback");
-
- SPEAKER(config, "mono").front_center();
- BEEP(config, m_beep, 23.814_MHz_XTAL / 7 / 11 / 256); // nominally 1200 Hz
- m_beep->add_route(ALL_OUTPUTS, "mono", 0.50);
-}
-
-/**************************************************************************************************************
-
-Televideo TVI-912C.
-Chips: i8035, TMS9927NL, AY5-1013A (COM2502)
-Crystals: 23.814 (divide by 4 for CPU clock)
-Other: 1x 8-sw DIP, 1x 10-sw DIP (internal), 2x 10-sw DIP (available to user at the back)
-
-***************************************************************************************************************/
-
-ROM_START( tv912c )
- ROM_REGION(0x1000, "maincpu", 0)
- ROM_LOAD( "a49c1.bin", 0x0000, 0x1000, CRC(40068371) SHA1(44c32f8c3980acebe28fa48f98479910af2eb4ae) ) // MM52132
-
- ROM_REGION(0x0800, "chargen", 0)
- ROM_LOAD( "a3-2.bin", 0x0000, 0x0800, CRC(bb9a7fbd) SHA1(5f1c4d41b25bd3ca4dbc336873362935daf283da) ) // EA8316
-ROM_END
-
-ROM_START( tv912b )
- ROM_REGION(0x1000, "maincpu", 0)
- ROM_LOAD( "televideo912b_rom_a49.bin", 0x0000, 0x1000, CRC(2c95e995) SHA1(77cda383d68b0bbbb783026d8fde679f10f9eded) ) // MM52132 (TVI A49B1)
-
- ROM_REGION(0x0800, "chargen", 0)
- ROM_LOAD( "televideo912b_rom_a3.bin", 0x0000, 0x0800, CRC(bb9a7fbd) SHA1(5f1c4d41b25bd3ca4dbc336873362935daf283da) ) // AMI 8110QV (A3-2)
-ROM_END
-
-COMP( 1978, tv912c, 0, 0, tv912, tv912c, tv912_state, empty_init, "TeleVideo Systems", "TVI-912C", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) // attributes not emulated
-COMP( 1978, tv912b, tv912c, 0, tv912, tv912b, tv912_state, empty_init, "TeleVideo Systems", "TVI-912B", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) // attributes not emulated