mirror of
https://github.com/holub/mame
synced 2025-06-30 16:00:01 +03:00
New machines marked as NOT_WORKING
---------------------------------- Epic 14E [Al Kossow]
This commit is contained in:
parent
f99c502820
commit
a840132995
@ -3736,6 +3736,7 @@ files {
|
||||
MAME_DIR .. "src/mame/drivers/eacc.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/elwro800.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/emate.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/epic14e.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/esprit.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/eti660.cpp",
|
||||
MAME_DIR .. "src/mame/includes/eti660.h",
|
||||
|
@ -223,6 +223,7 @@ const double XTAL::known_xtals[] = {
|
||||
16'670'000, /* 16.67_MHz_XTAL - */
|
||||
16'777'216, /* 16.777216_MHz_XTAL Nintendo Game Boy Advance */
|
||||
16'934'400, /* 16.9344_MHz_XTAL Usually used to drive 90's Yamaha OPL/FM chips (44100 * 384) */
|
||||
17'010'000, /* 17.01_MHz_XTAL Epic 14E */
|
||||
17'064'000, /* 17.064_MHz_XTAL Memorex 1377 */
|
||||
17'350'000, /* 17.35_MHz_XTAL ITT Courier 1700 */
|
||||
17'360'000, /* 17.36_MHz_XTAL OMTI Series 10 SCSI controller */
|
||||
|
246
src/mame/drivers/epic14e.cpp
Normal file
246
src/mame/drivers/epic14e.cpp
Normal file
@ -0,0 +1,246 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:AJR
|
||||
/***************************************************************************
|
||||
|
||||
Skeleton driver for Epic 14E video display terminal.
|
||||
|
||||
This green-screen terminal emulates the TeleVideo 925. It was later
|
||||
acquired by ADDS and rereleased as the Viewpoint/925+.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
//#include "bus/rs232/rs232.h"
|
||||
#include "cpu/m6502/m6502.h"
|
||||
#include "machine/input_merger.h"
|
||||
#include "machine/6522via.h"
|
||||
#include "machine/mos6551.h"
|
||||
#include "video/scn2674.h"
|
||||
#include "screen.h"
|
||||
|
||||
class epic14e_state : public driver_device
|
||||
{
|
||||
public:
|
||||
epic14e_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_via(*this, "via")
|
||||
, m_charram(*this, "charram")
|
||||
, m_attrram(*this, "attrram")
|
||||
, m_chargen(*this, "chargen")
|
||||
, m_dsw(*this, "DSW%u", 1U)
|
||||
{
|
||||
}
|
||||
|
||||
void epic14e(machine_config &config);
|
||||
|
||||
private:
|
||||
SCN2672_DRAW_CHARACTER_MEMBER(draw_character);
|
||||
|
||||
u8 vram_r(offs_t offset);
|
||||
void vram_w(offs_t offset, u8 data);
|
||||
|
||||
void cpu_map(address_map &map);
|
||||
void char_map(address_map &map);
|
||||
void attr_map(address_map &map);
|
||||
|
||||
required_device<m6502_device> m_maincpu;
|
||||
required_device<via6522_device> m_via;
|
||||
required_shared_ptr<u8> m_charram;
|
||||
required_shared_ptr<u8> m_attrram;
|
||||
required_region_ptr<u8> m_chargen;
|
||||
required_ioport_array<3> m_dsw;
|
||||
};
|
||||
|
||||
|
||||
SCN2672_DRAW_CHARACTER_MEMBER(epic14e_state::draw_character)
|
||||
{
|
||||
const u8 chardata = m_chargen[charcode << 4 | linecount];
|
||||
u16 dots = ((chardata & 0x7f) << 2) | (BIT(chardata, 7) ? 3 : 0);
|
||||
|
||||
for (int i = 0; i < 9; i++)
|
||||
{
|
||||
bitmap.pix32(y, x++) = BIT(dots, 8) ? rgb_t::white() : rgb_t::black();
|
||||
dots <<= 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
u8 epic14e_state::vram_r(offs_t offset)
|
||||
{
|
||||
return (BIT(offset, 0) ? m_charram : m_attrram)[offset >> 1];
|
||||
}
|
||||
|
||||
void epic14e_state::vram_w(offs_t offset, u8 data)
|
||||
{
|
||||
(BIT(offset, 0) ? m_charram : m_attrram)[offset >> 1] = data;
|
||||
}
|
||||
|
||||
void epic14e_state::cpu_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x07ff).ram();
|
||||
map(0x2000, 0x3fff).rw(FUNC(epic14e_state::vram_r), FUNC(epic14e_state::vram_w));
|
||||
map(0x6000, 0x6007).rw("pvtc", FUNC(scn2672_device::read), FUNC(scn2672_device::write));
|
||||
map(0x8000, 0x8003).rw("acia1", FUNC(mos6551_device::read), FUNC(mos6551_device::write));
|
||||
map(0x9000, 0x9003).rw("acia2", FUNC(mos6551_device::read), FUNC(mos6551_device::write));
|
||||
map(0xa010, 0xa01f).rw(m_via, FUNC(via6522_device::read), FUNC(via6522_device::write));
|
||||
map(0xe000, 0xffff).rom().region("program", 0);
|
||||
}
|
||||
|
||||
void epic14e_state::char_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x0fff).ram().share("charram");
|
||||
}
|
||||
|
||||
void epic14e_state::attr_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x0fff).ram().share("attrram");
|
||||
}
|
||||
|
||||
|
||||
static INPUT_PORTS_START(epic14e)
|
||||
PORT_START("DSW1")
|
||||
PORT_DIPNAME(0x001, 0x001, DEF_STR(Unknown)) PORT_DIPLOCATION("SW1:1")
|
||||
PORT_DIPSETTING(0x001, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x002, 0x002, DEF_STR(Unknown)) PORT_DIPLOCATION("SW1:2")
|
||||
PORT_DIPSETTING(0x002, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x004, 0x004, DEF_STR(Unknown)) PORT_DIPLOCATION("SW1:3")
|
||||
PORT_DIPSETTING(0x004, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x008, 0x008, DEF_STR(Unknown)) PORT_DIPLOCATION("SW1:4")
|
||||
PORT_DIPSETTING(0x008, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x010, 0x010, DEF_STR(Unknown)) PORT_DIPLOCATION("SW1:5")
|
||||
PORT_DIPSETTING(0x010, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x020, 0x020, DEF_STR(Unknown)) PORT_DIPLOCATION("SW1:6")
|
||||
PORT_DIPSETTING(0x020, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x040, 0x040, DEF_STR(Unknown)) PORT_DIPLOCATION("SW1:7")
|
||||
PORT_DIPSETTING(0x040, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x080, 0x080, DEF_STR(Unknown)) PORT_DIPLOCATION("SW1:8")
|
||||
PORT_DIPSETTING(0x080, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x100, 0x100, DEF_STR(Unknown)) PORT_DIPLOCATION("SW1:9")
|
||||
PORT_DIPSETTING(0x100, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x200, 0x200, DEF_STR(Unknown)) PORT_DIPLOCATION("SW1:10")
|
||||
PORT_DIPSETTING(0x200, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
|
||||
PORT_START("DSW2")
|
||||
PORT_DIPNAME(0x001, 0x001, DEF_STR(Unknown)) PORT_DIPLOCATION("SW2:1")
|
||||
PORT_DIPSETTING(0x001, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x002, 0x002, DEF_STR(Unknown)) PORT_DIPLOCATION("SW2:2")
|
||||
PORT_DIPSETTING(0x002, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x004, 0x004, DEF_STR(Unknown)) PORT_DIPLOCATION("SW2:3")
|
||||
PORT_DIPSETTING(0x004, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x008, 0x008, DEF_STR(Unknown)) PORT_DIPLOCATION("SW2:4")
|
||||
PORT_DIPSETTING(0x008, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x010, 0x010, DEF_STR(Unknown)) PORT_DIPLOCATION("SW2:5")
|
||||
PORT_DIPSETTING(0x010, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x020, 0x020, DEF_STR(Unknown)) PORT_DIPLOCATION("SW2:6")
|
||||
PORT_DIPSETTING(0x020, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x040, 0x040, DEF_STR(Unknown)) PORT_DIPLOCATION("SW2:7")
|
||||
PORT_DIPSETTING(0x040, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x080, 0x080, DEF_STR(Unknown)) PORT_DIPLOCATION("SW2:8")
|
||||
PORT_DIPSETTING(0x080, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x100, 0x100, DEF_STR(Unknown)) PORT_DIPLOCATION("SW2:9")
|
||||
PORT_DIPSETTING(0x100, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x200, 0x200, DEF_STR(Unknown)) PORT_DIPLOCATION("SW2:10")
|
||||
PORT_DIPSETTING(0x200, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
|
||||
PORT_START("DSW3")
|
||||
PORT_DIPNAME(0x001, 0x001, DEF_STR(Unknown)) PORT_DIPLOCATION("SW3:1")
|
||||
PORT_DIPSETTING(0x001, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x002, 0x002, DEF_STR(Unknown)) PORT_DIPLOCATION("SW3:2")
|
||||
PORT_DIPSETTING(0x002, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x004, 0x004, DEF_STR(Unknown)) PORT_DIPLOCATION("SW3:3")
|
||||
PORT_DIPSETTING(0x004, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x008, 0x008, DEF_STR(Unknown)) PORT_DIPLOCATION("SW3:4")
|
||||
PORT_DIPSETTING(0x008, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x010, 0x010, DEF_STR(Unknown)) PORT_DIPLOCATION("SW3:5")
|
||||
PORT_DIPSETTING(0x010, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x020, 0x020, DEF_STR(Unknown)) PORT_DIPLOCATION("SW3:6")
|
||||
PORT_DIPSETTING(0x020, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x040, 0x040, DEF_STR(Unknown)) PORT_DIPLOCATION("SW3:7")
|
||||
PORT_DIPSETTING(0x040, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x080, 0x080, DEF_STR(Unknown)) PORT_DIPLOCATION("SW3:8")
|
||||
PORT_DIPSETTING(0x080, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x100, 0x100, DEF_STR(Unknown)) PORT_DIPLOCATION("SW3:9")
|
||||
PORT_DIPSETTING(0x100, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
PORT_DIPNAME(0x200, 0x200, DEF_STR(Unknown)) PORT_DIPLOCATION("SW3:10")
|
||||
PORT_DIPSETTING(0x200, DEF_STR(Off))
|
||||
PORT_DIPSETTING(0x000, DEF_STR(On))
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
void epic14e_state::epic14e(machine_config &config)
|
||||
{
|
||||
M6502(config, m_maincpu, 17.01_MHz_XTAL / 9); // SY6502A (1.89 MHz confirmed)
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &epic14e_state::cpu_map);
|
||||
|
||||
INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, m6502_device::IRQ_LINE);
|
||||
|
||||
VIA6522(config, m_via, 17.01_MHz_XTAL / 9); // SY6522A
|
||||
m_via->irq_handler().set("mainirq", FUNC(input_merger_device::in_w<0>));
|
||||
|
||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||
screen.set_raw(17.01_MHz_XTAL, 900, 0, 720, 315, 0, 300);
|
||||
screen.set_screen_update("pvtc", FUNC(scn2672_device::screen_update));
|
||||
|
||||
scn2672_device &pvtc(SCN2672(config, "pvtc", 17.01_MHz_XTAL / 9));
|
||||
pvtc.intr_callback().set_inputline(m_maincpu, m6502_device::NMI_LINE);
|
||||
pvtc.set_character_width(9);
|
||||
pvtc.set_display_callback(FUNC(epic14e_state::draw_character));
|
||||
pvtc.set_addrmap(0, &epic14e_state::char_map);
|
||||
pvtc.set_addrmap(1, &epic14e_state::attr_map);
|
||||
pvtc.set_screen("screen");
|
||||
// TODO: Serial keyboard clocked at 60 Hz frame rate
|
||||
|
||||
mos6551_device &acia1(MOS6551(config, "acia1", 17.01_MHz_XTAL / 9)); // SY6551A
|
||||
acia1.set_xtal(1.8432_MHz_XTAL);
|
||||
acia1.irq_handler().set("mainirq", FUNC(input_merger_device::in_w<1>));
|
||||
|
||||
mos6551_device &acia2(MOS6551(config, "acia2", 17.01_MHz_XTAL / 9)); // SY6551A
|
||||
acia2.set_xtal(1.8432_MHz_XTAL); // each ACIA has its own XTAL
|
||||
acia2.irq_handler().set("mainirq", FUNC(input_merger_device::in_w<2>));
|
||||
|
||||
//RS232_PORT(config, "modem", default_rs232_devices, nullptr);
|
||||
//RS232_PORT(config, "aux", default_rs232_devices, nullptr);
|
||||
}
|
||||
|
||||
|
||||
ROM_START(epic14e)
|
||||
ROM_REGION(0x2000, "program", 0)
|
||||
ROM_LOAD("u6.bin", 0x0000, 0x1000, CRC(014b5da0) SHA1(190c2d48c6928d143458ba094f785d40ac29f2c0))
|
||||
ROM_LOAD("u13.bin", 0x1000, 0x1000, CRC(2b406a88) SHA1(e619cc020ab5eabad99967b27cb969ceb191f5ee))
|
||||
|
||||
ROM_REGION(0x1000, "chargen", 0)
|
||||
ROM_LOAD("u24.bin", 0x0000, 0x1000, CRC(da409f03) SHA1(5a90a6b865dad20dc3f455448670b4f5baa55028))
|
||||
ROM_END
|
||||
|
||||
|
||||
COMP(1982, epic14e, 0, 0, epic14e, epic14e, epic14e_state, empty_init, "Epic Computer Systems", "Epic 14E (v1.0)", MACHINE_IS_SKELETON)
|
@ -12394,6 +12394,9 @@ ep128 // Enterprise 128
|
||||
ep64 // Enterprise 64
|
||||
phc64 // Hegener & Glaser Mephisto PHC 64
|
||||
|
||||
@source:epic14e.cpp
|
||||
epic14e //
|
||||
|
||||
@source:epos.cpp
|
||||
catapult // (c) 1982
|
||||
dealer // (c) 198?
|
||||
|
@ -208,6 +208,7 @@ emate.cpp
|
||||
emma2.cpp
|
||||
enmirage.cpp
|
||||
ep64.cpp
|
||||
epic14e.cpp
|
||||
esprit.cpp
|
||||
esq1.cpp
|
||||
esq5505.cpp
|
||||
|
Loading…
Reference in New Issue
Block a user