From ba4b7c7d8458e3197cfaf641b320d6a4a18d0589 Mon Sep 17 00:00:00 2001 From: AJR Date: Sat, 30 Oct 2021 15:50:48 -0400 Subject: New machines marked as NOT_WORKING ---------------------------------- F387X PEP System [Bitsavers] --- scripts/target/mame/mess.lua | 1 + src/mame/drivers/f387x.cpp | 173 +++++++++++++++++++++++++++++++++++++++++++ src/mame/mame.lst | 3 + src/mame/mess.flt | 1 + 4 files changed, 178 insertions(+) create mode 100644 src/mame/drivers/f387x.cpp diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 0694b048902..9e3b26b1748 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -2439,6 +2439,7 @@ files { MAME_DIR .. "src/mame/audio/channelf.cpp", MAME_DIR .. "src/mame/audio/channelf.h", MAME_DIR .. "src/mame/video/channelf.cpp", + MAME_DIR .. "src/mame/drivers/f387x.cpp", } createMESSProjects(_target, _subtarget, "fairlight") diff --git a/src/mame/drivers/f387x.cpp b/src/mame/drivers/f387x.cpp new file mode 100644 index 00000000000..077ec5c308c --- /dev/null +++ b/src/mame/drivers/f387x.cpp @@ -0,0 +1,173 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/************************************************************************************************************ + + Skeleton driver for Fairchild F387X PEP (Prototyping, Emulating and Programming) System. + +************************************************************************************************************/ + +#include "emu.h" +#include "bus/rs232/rs232.h" +#include "cpu/f8/f8.h" +#include "machine/f3853.h" + + +class f387x_state : public driver_device +{ +public: + f387x_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_rs232c(*this, "rs232c") + , m_keypad(*this, "ROW%u", 0U) + { + } + + void f387x(machine_config &config); + +private: + u8 p8_r(); + void p8_w(u8 data); + u8 p9_r(); + void p9_w(u8 data); + u8 ipor_r(); + void opor_w(u8 data); + + void mem_map(address_map &map); + void io_map(address_map &map); + + required_device m_maincpu; + required_device m_rs232c; + required_ioport_array<6> m_keypad; +}; + + +u8 f387x_state::p8_r() +{ + return 0; +} + +void f387x_state::p8_w(u8 data) +{ +} + +u8 f387x_state::p9_r() +{ + return 0; +} + +void f387x_state::p9_w(u8 data) +{ +} + +u8 f387x_state::ipor_r() +{ + return m_rs232c->rxd_r() ? 0x80 : 0; +} + +void f387x_state::opor_w(u8 data) +{ + m_rs232c->write_txd(BIT(data, 0)); +} + +void f387x_state::mem_map(address_map &map) +{ + map(0x0000, 0x0002).lr8(NAME([](offs_t offset) { return offset == 0 ? 0x29 : 0x80; })); // FIXME: actually done by decoding ROMC and masking D7 + map(0x2b80, 0x2bff).ram(); // F6810 + map(0x8000, 0x87ff).rom().region("pepbug", 0); +} + +void f387x_state::io_map(address_map &map) +{ + map(0x20, 0x20).rw(FUNC(f387x_state::p8_r), FUNC(f387x_state::p8_w)); + map(0x21, 0x21).rw(FUNC(f387x_state::p9_r), FUNC(f387x_state::p9_w)); + map(0x24, 0x24).rw(FUNC(f387x_state::ipor_r), FUNC(f387x_state::opor_w)); + map(0xeb, 0xeb).nopw(); // code deliberately outputs to nonexistent port here +} + + +static INPUT_PORTS_START(f387x) + PORT_START("ROW0") + PORT_BIT(0x0f, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("C/R") PORT_CODE(KEYCODE_ENTER) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("DEL") PORT_CODE(KEYCODE_BACKSPACE) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("CHG") PORT_CODE(KEYCODE_BACKSLASH) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("+") PORT_CODE(KEYCODE_EQUALS) + + PORT_START("ROW1") + PORT_BIT(0x0f, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("MEM") PORT_CODE(KEYCODE_M) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("REG") PORT_CODE(KEYCODE_R) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("PORT") PORT_CODE(KEYCODE_O) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS) + + PORT_START("ROW2") + PORT_BIT(0x0f, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("3 NEXT") PORT_CODE(KEYCODE_3) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("7 ACC") PORT_CODE(KEYCODE_7) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("B FIND") PORT_CODE(KEYCODE_B) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("F GO") PORT_CODE(KEYCODE_F) + + PORT_START("ROW3") + PORT_BIT(0x0f, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("2 PREV") PORT_CODE(KEYCODE_2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("6 W") PORT_CODE(KEYCODE_6) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("A MOVE") PORT_CODE(KEYCODE_A) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("E LOAD") PORT_CODE(KEYCODE_E) + + PORT_START("ROW4") + PORT_BIT(0x0f, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("1 DC") PORT_CODE(KEYCODE_1) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("5 ISAR") PORT_CODE(KEYCODE_5) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("9 HEX") PORT_CODE(KEYCODE_9) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("D B CLR") PORT_CODE(KEYCODE_D) + + PORT_START("ROW5") + PORT_BIT(0x0f, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("0 PC") PORT_CODE(KEYCODE_0) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("4 2716") PORT_CODE(KEYCODE_4) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("8 E70") PORT_CODE(KEYCODE_8) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("C BRPT") PORT_CODE(KEYCODE_C) + + PORT_START("SW3") + PORT_DIPNAME(1, 1, DEF_STR(Unknown)) PORT_DIPLOCATION("SW3:1") + PORT_DIPSETTING(1, DEF_STR(Off)) + PORT_DIPSETTING(0, DEF_STR(On)) + PORT_DIPNAME(2, 2, DEF_STR(Unknown)) PORT_DIPLOCATION("SW3:2") + PORT_DIPSETTING(2, DEF_STR(Off)) + PORT_DIPSETTING(0, DEF_STR(On)) + PORT_DIPNAME(4, 4, DEF_STR(Unknown)) PORT_DIPLOCATION("SW3:3") + PORT_DIPSETTING(4, DEF_STR(Off)) + PORT_DIPSETTING(0, DEF_STR(On)) + PORT_DIPNAME(8, 8, DEF_STR(Unknown)) PORT_DIPLOCATION("SW3:4") + PORT_DIPSETTING(8, DEF_STR(Off)) + PORT_DIPSETTING(0, DEF_STR(On)) +INPUT_PORTS_END + +static DEVICE_INPUT_DEFAULTS_START(terminal) + DEVICE_INPUT_DEFAULTS("RS232_RXBAUD", 0xff, RS232_BAUD_110) + DEVICE_INPUT_DEFAULTS("RS232_TXBAUD", 0xff, RS232_BAUD_110) + DEVICE_INPUT_DEFAULTS("RS232_DATABITS", 0xff, RS232_DATABITS_8) + DEVICE_INPUT_DEFAULTS("RS232_PARITY", 0xff, RS232_PARITY_NONE) + DEVICE_INPUT_DEFAULTS("RS232_STOPBITS", 0xff, RS232_STOPBITS_2) +DEVICE_INPUT_DEFAULTS_END + +void f387x_state::f387x(machine_config &config) +{ + F8(config, m_maincpu, 2_MHz_XTAL); // F3850PC + m_maincpu->set_addrmap(AS_PROGRAM, &f387x_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &f387x_state::io_map); + + F3853(config, "smi", 0); + + RS232_PORT(config, m_rs232c, default_rs232_devices, "terminal"); + m_rs232c->set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal)); +} + +ROM_START(f387x) + ROM_REGION(0x1800, "pepbug", 0) + ROM_LOAD("pepbug.u16", 0x0000, 0x0800, CRC(de05ac6d) SHA1(220281a7016aae785417bbfe8383c76f72f8fac2)) + // 2716 sockets at U14 and U15 are not populated +ROM_END + +COMP(1979, f387x, 0, 0, f387x, f387x, f387x_state, empty_init, "Fairchild Instrument & Camera Corporation", "F387X PEP System", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index a3ff8d68545..41658d85cb4 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -13706,6 +13706,9 @@ f1gpb // bootleg mosaicf2 // (c) 1999 F2 System royalpk2 // +@source:f387x.cpp +f387x // (c) 1979 Fairchild + @source:facit4440.cpp facit4440 // 1984 diff --git a/src/mame/mess.flt b/src/mame/mess.flt index f10c87b6eb6..f7c88619f9d 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -304,6 +304,7 @@ exelv.cpp exorciser.cpp exorterm.cpp exp85.cpp +f387x.cpp facit4440.cpp falco5220.cpp falcots.cpp -- cgit v1.2.3