mirror of
https://github.com/holub/mame
synced 2025-06-29 23:48:56 +03:00
New machines marked as NOT_WORKING
---------------------------------- Poly Proteus (Standalone) [Nigel Barnes, Andrew Trotman]
This commit is contained in:
parent
8f7c57d799
commit
7ad824c85b
@ -1349,6 +1349,18 @@ if (FORMATS["PMD_CAS"]~=null or _OPTIONS["with-tools"]) then
|
||||
}
|
||||
end
|
||||
|
||||
--------------------------------------------------
|
||||
--
|
||||
--@src/lib/formats/poly_dsk.h,FORMATS["POLY_DSK"] = true
|
||||
--------------------------------------------------
|
||||
|
||||
if (FORMATS["POLY_DSK"]~=null or _OPTIONS["with-tools"]) then
|
||||
files {
|
||||
MAME_DIR.. "src/lib/formats/poly_dsk.cpp",
|
||||
MAME_DIR.. "src/lib/formats/poly_dsk.h",
|
||||
}
|
||||
end
|
||||
|
||||
--------------------------------------------------
|
||||
--
|
||||
--@src/lib/formats/ppg_dsk.h,FORMATS["PPG_DSK"] = true
|
||||
|
@ -879,6 +879,7 @@ FORMATS["PC98_DSK"] = true
|
||||
FORMATS["PC_DSK"] = true
|
||||
FORMATS["PHC25_CAS"] = true
|
||||
FORMATS["PK8020_DSK"] = true
|
||||
FORMATS["POLY_DSK"] = true
|
||||
FORMATS["PPG_DSK"] = true
|
||||
FORMATS["PMD_CAS"] = true
|
||||
FORMATS["PRIMOPTP"] = true
|
||||
@ -1069,6 +1070,7 @@ function linkProjects_mame_mess(_target, _subtarget)
|
||||
"pel",
|
||||
"philips",
|
||||
"pitronic",
|
||||
"poly",
|
||||
"poly88",
|
||||
"prodigy",
|
||||
"psion",
|
||||
@ -2684,7 +2686,7 @@ files {
|
||||
MAME_DIR .. "src/mame/drivers/galeb.cpp",
|
||||
MAME_DIR .. "src/mame/includes/galeb.h",
|
||||
MAME_DIR .. "src/mame/video/galeb.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/orao.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/orao.cpp",
|
||||
MAME_DIR .. "src/mame/includes/orao.h",
|
||||
MAME_DIR .. "src/mame/machine/orao.cpp",
|
||||
MAME_DIR .. "src/mame/video/orao.cpp",
|
||||
@ -2699,6 +2701,11 @@ files {
|
||||
MAME_DIR .. "src/mame/drivers/vg5k.cpp",
|
||||
}
|
||||
|
||||
createMESSProjects(_target, _subtarget, "poly")
|
||||
files {
|
||||
MAME_DIR .. "src/mame/drivers/proteus.cpp",
|
||||
}
|
||||
|
||||
createMESSProjects(_target, _subtarget, "poly88")
|
||||
files {
|
||||
MAME_DIR .. "src/mame/drivers/poly88.cpp",
|
||||
|
118
src/lib/formats/poly_dsk.cpp
Normal file
118
src/lib/formats/poly_dsk.cpp
Normal file
@ -0,0 +1,118 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/***************************************************************************
|
||||
|
||||
Poly CP/M Disk image format
|
||||
|
||||
FLEX-POLYSYS image formats are handled in flex_dsk.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "poly_dsk.h"
|
||||
|
||||
poly_cpm_format::poly_cpm_format()
|
||||
{
|
||||
}
|
||||
|
||||
const char *poly_cpm_format::name() const
|
||||
{
|
||||
return "cpm";
|
||||
}
|
||||
|
||||
const char *poly_cpm_format::description() const
|
||||
{
|
||||
return "Poly CP/M disk image";
|
||||
}
|
||||
|
||||
const char *poly_cpm_format::extensions() const
|
||||
{
|
||||
return "cpm";
|
||||
}
|
||||
|
||||
bool poly_cpm_format::supports_save() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
int poly_cpm_format::identify(io_generic *io, uint32_t form_factor)
|
||||
{
|
||||
uint8_t boot[16];
|
||||
uint64_t size = io_generic_size(io);
|
||||
|
||||
// check for valid sizes
|
||||
if (size == 630784 || size == 622592 || size == 256256)
|
||||
{
|
||||
// check for Poly CP/M boot sector
|
||||
io_generic_read(io, boot, 0, 16);
|
||||
if (memcmp(boot, "\x86\xc3\xb7\x00\x00\x8e\x10\xc0\xbf\x00\x01\xbf\xe0\x60\x00\x00", 16) == 0)
|
||||
{
|
||||
return 100;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool poly_cpm_format::load(io_generic *io, uint32_t form_factor, floppy_image *image)
|
||||
{
|
||||
int total_tracks, spt, bps, head_num;
|
||||
|
||||
uint64_t size = io_generic_size(io);
|
||||
|
||||
switch (size)
|
||||
{
|
||||
case 622592:
|
||||
// CP/M 3" disk DSSD
|
||||
total_tracks = 76;
|
||||
spt = 8;
|
||||
bps = 512;
|
||||
head_num = 2;
|
||||
break;
|
||||
case 256256:
|
||||
// CP/M 8" disk SDSD
|
||||
total_tracks = 77;
|
||||
spt = 26;
|
||||
bps = 128;
|
||||
head_num = 1;
|
||||
break;
|
||||
default:
|
||||
// CP/M 8" disk DSSD
|
||||
total_tracks = 77;
|
||||
spt = 8;
|
||||
bps = 512;
|
||||
head_num = 2;
|
||||
break;
|
||||
}
|
||||
|
||||
int cell_count = (form_factor == floppy_image::FF_525) ? 50000 : 100000;
|
||||
int offset = 0;
|
||||
|
||||
for (int track = 0; track < total_tracks; track++)
|
||||
for (int head = 0; head < head_num; head++)
|
||||
{
|
||||
desc_pc_sector sects[80];
|
||||
uint8_t sect_data[20000];
|
||||
int sdatapos = 0;
|
||||
for (int i = 0; i<spt; i++)
|
||||
{
|
||||
sects[i].track = track;
|
||||
sects[i].head = head;
|
||||
if (head == 0)
|
||||
sects[i].sector = i + 1;
|
||||
else
|
||||
sects[i].sector = i + 1 + spt;
|
||||
sects[i].actual_size = bps;
|
||||
sects[i].size = bps >> 8;
|
||||
sects[i].deleted = false;
|
||||
sects[i].bad_crc = false;
|
||||
sects[i].data = §_data[sdatapos];
|
||||
io_generic_read(io, sects[i].data, offset, bps);
|
||||
offset += bps;
|
||||
sdatapos += bps;
|
||||
}
|
||||
// gap sizes unverified
|
||||
build_wd_track_fm(track, head, image, cell_count, spt, sects, 24, 16, 11);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
const floppy_format_type FLOPPY_POLY_CPM_FORMAT = &floppy_image_format_creator<poly_cpm_format>;
|
29
src/lib/formats/poly_dsk.h
Normal file
29
src/lib/formats/poly_dsk.h
Normal file
@ -0,0 +1,29 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/***************************************************************************
|
||||
|
||||
Poly Disk image formats
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef POLY_DSK_H_
|
||||
#define POLY_DSK_H_
|
||||
|
||||
#include "flopimg.h"
|
||||
|
||||
class poly_cpm_format : public floppy_image_format_t
|
||||
{
|
||||
public:
|
||||
poly_cpm_format();
|
||||
|
||||
virtual const char *name() const override;
|
||||
virtual const char *description() const override;
|
||||
virtual const char *extensions() const override;
|
||||
virtual int identify(io_generic *io, uint32_t form_factor) override;
|
||||
virtual bool load(io_generic *io, uint32_t form_factor, floppy_image *image) override;
|
||||
virtual bool supports_save() const override;
|
||||
};
|
||||
|
||||
extern const floppy_format_type FLOPPY_POLY_CPM_FORMAT;
|
||||
|
||||
#endif /* POLY_DSK_H_ */
|
430
src/mame/drivers/proteus.cpp
Normal file
430
src/mame/drivers/proteus.cpp
Normal file
@ -0,0 +1,430 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
// thanks-to:Andrew Trotman
|
||||
/**********************************************************************
|
||||
|
||||
Poly Proteus Computer
|
||||
|
||||
http://www.cs.otago.ac.nz/homepages/andrew/poly/Poly.htm
|
||||
|
||||
Specifications:
|
||||
|
||||
Processors 6809,Z80
|
||||
|
||||
RAM 64 Kbytes
|
||||
|
||||
ROM 4 Kbytes
|
||||
|
||||
Clock Z80 4 MHz (1 wait state per machine cycle)
|
||||
6809 4 MHz clock, 1 MHz cycle
|
||||
|
||||
Disk Drives One or two 8" half height drives (Shugart SA860)
|
||||
Double sided single density
|
||||
Capacity 630 Kbytes per disk (CP/M)
|
||||
590 Kbytes (Flex,Polysys)
|
||||
Single sided can be used for compatibility
|
||||
|
||||
Ports Standard One RS232
|
||||
One Poly network
|
||||
Optional Total 3 RS232
|
||||
One Poly network
|
||||
One parallel
|
||||
One disk drive extension
|
||||
|
||||
Operating systems
|
||||
CP/M. The standard operating system for 8080/Z80 micros.
|
||||
FLEX. The standard operating system for 6809 micros.
|
||||
POLYSYS. The operating system for the POLY network.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/m6809/m6809.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/6821pia.h"
|
||||
#include "machine/6840ptm.h"
|
||||
#include "machine/6850acia.h"
|
||||
#include "machine/mc6854.h"
|
||||
#include "machine/ram.h"
|
||||
#include "machine/input_merger.h"
|
||||
#include "machine/clock.h"
|
||||
#include "machine/wd_fdc.h"
|
||||
#include "bus/rs232/rs232.h"
|
||||
#include "bus/centronics/ctronics.h"
|
||||
#include "formats/flex_dsk.h"
|
||||
#include "formats/poly_dsk.h"
|
||||
#include "softlist.h"
|
||||
|
||||
|
||||
class proteus_state : public driver_device
|
||||
{
|
||||
public:
|
||||
proteus_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_z80(*this, "z80")
|
||||
, m_adlc(*this, "mc6854")
|
||||
, m_ptm(*this, "ptm")
|
||||
, m_irqs(*this, "irqs")
|
||||
, m_pia(*this, "pia")
|
||||
, m_acia(*this, "acia%u", 0)
|
||||
, m_fdc(*this, "fdc")
|
||||
, m_floppy0(*this, "fdc:0")
|
||||
, m_floppy1(*this, "fdc:1")
|
||||
, m_floppy(nullptr)
|
||||
{ }
|
||||
|
||||
virtual void machine_reset() override;
|
||||
virtual void machine_start() override;
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(ptm_o2_callback);
|
||||
DECLARE_WRITE_LINE_MEMBER(ptm_o3_callback);
|
||||
DECLARE_READ8_MEMBER(network_r);
|
||||
DECLARE_WRITE8_MEMBER(network_w);
|
||||
|
||||
DECLARE_READ8_MEMBER(drive_register_r);
|
||||
DECLARE_WRITE8_MEMBER(drive_register_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(motor_w);
|
||||
DECLARE_READ8_MEMBER(fdc_inv_r);
|
||||
DECLARE_WRITE8_MEMBER(fdc_inv_w);
|
||||
DECLARE_FLOPPY_FORMATS(floppy_formats);
|
||||
|
||||
DECLARE_WRITE8_MEMBER(enable_z80_w);
|
||||
DECLARE_WRITE8_MEMBER(enable_6809_w);
|
||||
|
||||
void proteus(machine_config &config);
|
||||
void proteus_6809_mem(address_map &map);
|
||||
void proteus_z80_mem(address_map &map);
|
||||
void proteus_z80_io(address_map &map);
|
||||
|
||||
protected:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_z80;
|
||||
required_device<mc6854_device> m_adlc;
|
||||
required_device<ptm6840_device> m_ptm;
|
||||
required_device<input_merger_device> m_irqs;
|
||||
required_device<pia6821_device> m_pia;
|
||||
required_device_array<acia6850_device, 3> m_acia;
|
||||
required_device<fd1771_device> m_fdc;
|
||||
required_device<floppy_connector> m_floppy0;
|
||||
required_device<floppy_connector> m_floppy1;
|
||||
floppy_image_device *m_floppy;
|
||||
};
|
||||
|
||||
|
||||
void proteus_state::machine_start()
|
||||
{
|
||||
uint8_t bitswapped[0x1000];
|
||||
uint8_t *rom;
|
||||
|
||||
/* bios rom region */
|
||||
rom = memregion("bios")->base();
|
||||
|
||||
/* decrypt rom data lines */
|
||||
for (int i = 0x0000; i<0x1000; i++)
|
||||
bitswapped[i] = bitswap<8>(rom[i], 3, 4, 2, 5, 1, 6, 0, 7);
|
||||
|
||||
/* decrypt rom address lines */
|
||||
for (int i = 0x0000; i<0x1000; i++)
|
||||
rom[i] = bitswapped[bitswap<16>(i, 15, 14, 13, 12, 10, 8, 4, 2, 0, 1, 3, 5, 6, 7, 9, 11)];
|
||||
|
||||
/*
|
||||
The Proteus BIOS contains a serial ID for copy protection. Disks also contain the
|
||||
OS serial ID which must match the BIOS serial ID. This can be negated by patching the
|
||||
serial in the BIOS to 0x0000.
|
||||
*/
|
||||
rom[0x02] = 0x00;
|
||||
rom[0x03] = 0x00;
|
||||
}
|
||||
|
||||
|
||||
void proteus_state::machine_reset()
|
||||
{
|
||||
/* system starts with 6809 running and the Z80 remains reset */
|
||||
m_z80->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(proteus_state::ptm_o2_callback)
|
||||
{
|
||||
m_ptm->set_c1(state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(proteus_state::ptm_o3_callback)
|
||||
{
|
||||
m_adlc->txc_w(state);
|
||||
m_adlc->rxc_w(!state);
|
||||
}
|
||||
|
||||
|
||||
READ8_MEMBER(proteus_state::network_r)
|
||||
{
|
||||
return m_adlc->read(space, offset >> 1);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(proteus_state::network_w)
|
||||
{
|
||||
m_adlc->write(space, offset >> 1, data);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(proteus_state::drive_register_w)
|
||||
{
|
||||
/* drive select */
|
||||
switch (data & 0x03)
|
||||
{
|
||||
case 0:
|
||||
m_floppy = m_floppy0->get_device();
|
||||
break;
|
||||
|
||||
case 1:
|
||||
m_floppy = m_floppy1->get_device();
|
||||
break;
|
||||
|
||||
default:
|
||||
m_floppy = nullptr;
|
||||
break;
|
||||
}
|
||||
m_fdc->set_floppy(m_floppy);
|
||||
|
||||
if (m_floppy)
|
||||
{
|
||||
/* side select */
|
||||
m_floppy->ss_w(BIT(data, 6));
|
||||
}
|
||||
}
|
||||
|
||||
READ8_MEMBER(proteus_state::drive_register_r)
|
||||
{
|
||||
/* disk change */
|
||||
return (m_floppy ? m_floppy->dskchg_r() : 1) << 1;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(proteus_state::motor_w)
|
||||
{
|
||||
if (m_floppy) m_floppy->mon_w(!state);
|
||||
}
|
||||
|
||||
READ8_MEMBER(proteus_state::fdc_inv_r)
|
||||
{
|
||||
return m_fdc->gen_r(offset) ^ 0xff;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(proteus_state::fdc_inv_w)
|
||||
{
|
||||
m_fdc->gen_w(offset, data ^ 0xff);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(proteus_state::enable_z80_w)
|
||||
{
|
||||
logerror("%04X enable z80\n", m_maincpu->pc());
|
||||
// Enable Z80 (store an address at E060 and when the 6809 comes back it'll load PC with that address)
|
||||
m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
|
||||
m_z80->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(proteus_state::enable_6809_w)
|
||||
{
|
||||
logerror("%04X enable 6809\n", m_z80->pc());
|
||||
// TODO: this is untested, not aware of any software that uses it
|
||||
m_z80->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
|
||||
m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
|
||||
}
|
||||
|
||||
|
||||
void proteus_state::proteus_6809_mem(address_map &map)
|
||||
{
|
||||
map(0x0000, 0xffff).ram().share(RAM_TAG);
|
||||
map(0xe000, 0xe003).rw(m_pia, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // Parallel port
|
||||
map(0xe004, 0xe005).rw(m_acia[0], FUNC(acia6850_device::read), FUNC(acia6850_device::write)); // Terminal
|
||||
map(0xe008, 0xe009).rw(m_acia[1], FUNC(acia6850_device::read), FUNC(acia6850_device::write)); // Printer
|
||||
map(0xe00c, 0xe00d).rw(m_acia[2], FUNC(acia6850_device::read), FUNC(acia6850_device::write)); // Modem
|
||||
map(0xe014, 0xe014).rw(this, FUNC(proteus_state::drive_register_r), FUNC(proteus_state::drive_register_w));
|
||||
map(0xe018, 0xe01b).rw(this, FUNC(proteus_state::fdc_inv_r), FUNC(proteus_state::fdc_inv_w)); // Floppy control
|
||||
map(0xe020, 0xe027).rw(m_ptm, FUNC(ptm6840_device::read), FUNC(ptm6840_device::write)); // Timer
|
||||
map(0xe030, 0xe036).rw(this, FUNC(proteus_state::network_r), FUNC(proteus_state::network_w)); // Poly network
|
||||
map(0xe060, 0xe060).w(this, FUNC(proteus_state::enable_z80_w));
|
||||
map(0xf000, 0xffff).rom().region("bios", 0);
|
||||
}
|
||||
|
||||
|
||||
void proteus_state::proteus_z80_mem(address_map &map)
|
||||
{
|
||||
map(0x0000, 0xffff).ram().share(RAM_TAG);
|
||||
}
|
||||
|
||||
|
||||
void proteus_state::proteus_z80_io(address_map &map)
|
||||
{
|
||||
map(0x00, 0x03).mirror(0xff00).rw(m_pia, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // Parallel port
|
||||
map(0x04, 0x05).mirror(0xff00).rw(m_acia[0], FUNC(acia6850_device::read), FUNC(acia6850_device::write)); // Terminal
|
||||
map(0x08, 0x09).mirror(0xff00).rw(m_acia[1], FUNC(acia6850_device::read), FUNC(acia6850_device::write)); // Printer
|
||||
map(0x0c, 0x0d).mirror(0xff00).rw(m_acia[2], FUNC(acia6850_device::read), FUNC(acia6850_device::write)); // Modem
|
||||
map(0x14, 0x14).mirror(0xff00).rw(this, FUNC(proteus_state::drive_register_r), FUNC(proteus_state::drive_register_w));
|
||||
map(0x18, 0x1b).mirror(0xff00).rw(this, FUNC(proteus_state::fdc_inv_r), FUNC(proteus_state::fdc_inv_w)); // Floppy control
|
||||
map(0x20, 0x27).mirror(0xff00).rw(m_ptm, FUNC(ptm6840_device::read), FUNC(ptm6840_device::write)); // Timer
|
||||
map(0x30, 0x36).mirror(0xff00).rw(this, FUNC(proteus_state::network_r), FUNC(proteus_state::network_w)); // Poly network
|
||||
map(0x50, 0x50).mirror(0xff00).w(this, FUNC(proteus_state::enable_6809_w));
|
||||
}
|
||||
|
||||
|
||||
//Parameter 1: Baud Rate from BIOS
|
||||
// 00 = 9600
|
||||
// 02 = 4800
|
||||
// 04 = 2400
|
||||
// 06 = 1200
|
||||
// 08 = 600
|
||||
// 0A = 300
|
||||
static INPUT_PORTS_START(proteus)
|
||||
PORT_START("TERM_BAUD")
|
||||
PORT_CONFNAME(0x07, 0x00, "Terminal Baud Rate")
|
||||
PORT_CONFSETTING(0x00, "9600")
|
||||
PORT_CONFSETTING(0x01, "4800")
|
||||
PORT_CONFSETTING(0x02, "2400")
|
||||
PORT_CONFSETTING(0x03, "1200")
|
||||
PORT_CONFSETTING(0x04, "600")
|
||||
PORT_CONFSETTING(0x05, "300")
|
||||
PORT_CONFSETTING(0x06, "150")
|
||||
|
||||
PORT_START("J1")
|
||||
PORT_CONFNAME(0x07, 0x00, "J1 Modem Baud Rate")
|
||||
PORT_CONFSETTING(0x00, "9600")
|
||||
PORT_CONFSETTING(0x01, "4800")
|
||||
PORT_CONFSETTING(0x02, "2400")
|
||||
PORT_CONFSETTING(0x03, "1200")
|
||||
PORT_CONFSETTING(0x04, "600")
|
||||
PORT_CONFSETTING(0x05, "300")
|
||||
|
||||
PORT_START("J2")
|
||||
PORT_CONFNAME(0x07, 0x00, "J2 Printer Baud Rate")
|
||||
PORT_CONFSETTING(0x00, "9600")
|
||||
PORT_CONFSETTING(0x01, "4800")
|
||||
PORT_CONFSETTING(0x02, "2400")
|
||||
PORT_CONFSETTING(0x03, "1200")
|
||||
PORT_CONFSETTING(0x04, "600")
|
||||
PORT_CONFSETTING(0x05, "300")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
FLOPPY_FORMATS_MEMBER(proteus_state::floppy_formats)
|
||||
FLOPPY_FLEX_FORMAT,
|
||||
FLOPPY_POLY_CPM_FORMAT
|
||||
FLOPPY_FORMATS_END
|
||||
|
||||
static SLOT_INTERFACE_START(proteus_floppies)
|
||||
SLOT_INTERFACE("8dssd", FLOPPY_8_DSSD) // Shugart SA-860
|
||||
SLOT_INTERFACE_END
|
||||
|
||||
|
||||
MACHINE_CONFIG_START(proteus_state::proteus)
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", MC6809, 4_MHz_XTAL)
|
||||
MCFG_CPU_PROGRAM_MAP(proteus_6809_mem)
|
||||
|
||||
MCFG_CPU_ADD("z80", Z80, 4_MHz_XTAL)
|
||||
MCFG_CPU_PROGRAM_MAP(proteus_z80_mem)
|
||||
MCFG_CPU_IO_MAP(proteus_z80_io)
|
||||
|
||||
MCFG_INPUT_MERGER_ANY_HIGH("irqs")
|
||||
MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", M6809_IRQ_LINE))
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("z80", INPUT_LINE_IRQ0))
|
||||
|
||||
/* fdc */
|
||||
MCFG_FD1771_ADD("fdc", 4_MHz_XTAL / 2)
|
||||
MCFG_WD_FDC_HLD_CALLBACK(WRITELINE(proteus_state, motor_w))
|
||||
MCFG_WD_FDC_FORCE_READY
|
||||
|
||||
MCFG_FLOPPY_DRIVE_ADD("fdc:0", proteus_floppies, "8dssd", proteus_state::floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_SOUND(true)
|
||||
MCFG_FLOPPY_DRIVE_ADD("fdc:1", proteus_floppies, "8dssd", proteus_state::floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_SOUND(true)
|
||||
|
||||
/* ram */
|
||||
MCFG_RAM_ADD(RAM_TAG)
|
||||
MCFG_RAM_DEFAULT_SIZE("64K")
|
||||
|
||||
/* network */
|
||||
MCFG_DEVICE_ADD("mc6854", MC6854, 0)
|
||||
MCFG_MC6854_OUT_IRQ_CB(DEVWRITELINE("irqs", input_merger_device, in_w<0>))
|
||||
|
||||
MCFG_DEVICE_ADD("ptm", PTM6840, 4_MHz_XTAL / 2)
|
||||
MCFG_PTM6840_EXTERNAL_CLOCKS(0, 0, 0)
|
||||
MCFG_PTM6840_O2_CB(WRITELINE(proteus_state, ptm_o2_callback))
|
||||
MCFG_PTM6840_O3_CB(WRITELINE(proteus_state, ptm_o3_callback))
|
||||
MCFG_PTM6840_IRQ_CB(DEVWRITELINE("irqs", input_merger_device, in_w<1>))
|
||||
|
||||
/* parallel port */
|
||||
MCFG_DEVICE_ADD("pia", PIA6821, 0)
|
||||
//MCFG_PIA_READPB_HANDLER(READ8(proteus_state, pia_pb_r))
|
||||
//MCFG_PIA_WRITEPA_HANDLER(WRITE8(proteus_state, pia_pa_w))
|
||||
//MCFG_PIA_WRITEPB_HANDLER(WRITE8(proteus_state, pia_pb_w))
|
||||
//MCFG_PIA_CA2_HANDLER(DEVWRITELINE(CENTRONICS_TAG, centronics_device, write_strobe))
|
||||
MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("irqs", input_merger_device, in_w<2>))
|
||||
MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("irqs", input_merger_device, in_w<3>))
|
||||
|
||||
MCFG_CENTRONICS_ADD("parallel", centronics_devices, "printer")
|
||||
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE("pia", pia6821_device, ca1_w))
|
||||
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "parallel")
|
||||
|
||||
/* terminal port */
|
||||
MCFG_DEVICE_ADD("acia0", ACIA6850, 0)
|
||||
MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("terminal", rs232_port_device, write_txd))
|
||||
MCFG_ACIA6850_RTS_HANDLER(DEVWRITELINE("terminal", rs232_port_device, write_rts))
|
||||
MCFG_ACIA6850_IRQ_HANDLER(DEVWRITELINE("irqs", input_merger_device, in_w<4>))
|
||||
|
||||
MCFG_RS232_PORT_ADD("terminal", default_rs232_devices, "terminal") // TODO: ADM-31 terminal required
|
||||
MCFG_RS232_RXD_HANDLER(DEVWRITELINE("acia0", acia6850_device, write_rxd))
|
||||
MCFG_RS232_CTS_HANDLER(DEVWRITELINE("acia0", acia6850_device, write_cts))
|
||||
|
||||
MCFG_DEVICE_ADD("acia0_clock", CLOCK, 4_MHz_XTAL / 2 / 13) // TODO: this is set using jumpers
|
||||
MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("acia0", acia6850_device, write_txc))
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia0", acia6850_device, write_rxc))
|
||||
|
||||
/* printer port */
|
||||
MCFG_DEVICE_ADD("acia1", ACIA6850, 0)
|
||||
MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("printer", rs232_port_device, write_txd))
|
||||
MCFG_ACIA6850_RTS_HANDLER(DEVWRITELINE("printer", rs232_port_device, write_rts))
|
||||
MCFG_ACIA6850_IRQ_HANDLER(DEVWRITELINE("irqs", input_merger_device, in_w<5>))
|
||||
|
||||
MCFG_RS232_PORT_ADD("printer", default_rs232_devices, nullptr)
|
||||
MCFG_RS232_RXD_HANDLER(DEVWRITELINE("acia1", acia6850_device, write_rxd))
|
||||
MCFG_RS232_CTS_HANDLER(DEVWRITELINE("acia1", acia6850_device, write_cts))
|
||||
|
||||
MCFG_DEVICE_ADD("acia1_clock", CLOCK, 4_MHz_XTAL / 2 / 13) // TODO: this is set using jumpers J2
|
||||
MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("acia1", acia6850_device, write_txc))
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia1", acia6850_device, write_rxc))
|
||||
|
||||
/* modem port */
|
||||
MCFG_DEVICE_ADD("acia2", ACIA6850, 0)
|
||||
MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("modem", rs232_port_device, write_txd))
|
||||
MCFG_ACIA6850_RTS_HANDLER(DEVWRITELINE("modem", rs232_port_device, write_rts))
|
||||
MCFG_ACIA6850_IRQ_HANDLER(DEVWRITELINE("irqs", input_merger_device, in_w<6>))
|
||||
|
||||
MCFG_RS232_PORT_ADD("modem", default_rs232_devices, nullptr)
|
||||
MCFG_RS232_RXD_HANDLER(DEVWRITELINE("acia2", acia6850_device, write_rxd))
|
||||
MCFG_RS232_CTS_HANDLER(DEVWRITELINE("acia2", acia6850_device, write_cts))
|
||||
|
||||
MCFG_DEVICE_ADD("acia2_clock", CLOCK, 4_MHz_XTAL / 2 / 13) // TODO: this is set using jumpers J1
|
||||
MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("acia2", acia6850_device, write_txc))
|
||||
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia2", acia6850_device, write_rxc))
|
||||
|
||||
/* software lists */
|
||||
MCFG_SOFTWARE_LIST_ADD("flop_list", "poly_flop")
|
||||
MCFG_SOFTWARE_LIST_FILTER("flop_list", "PROTEUS")
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
ROM_START(proteus)
|
||||
ROM_REGION(0x1000, "bios", 0)
|
||||
ROM_DEFAULT_BIOS("82")
|
||||
ROM_SYSTEM_BIOS(0, "82", "030982")
|
||||
ROMX_LOAD("proteusv30.u28", 0x0000, 0x1000, CRC(ad02dc36) SHA1(f73aff8b3d85448f603a2fe807e3a7e02550db27), ROM_BIOS(1))
|
||||
ROM_SYSTEM_BIOS(1, "86", "300986")
|
||||
ROMX_LOAD("300986.u28", 0x0000, 0x1000, CRC(f607d396) SHA1(0b9d9d3178b5587e60da56885b9e8a83f7d5dd26), ROM_BIOS(2))
|
||||
ROM_END
|
||||
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
||||
COMP( 1982, proteus, 0, 0, proteus, proteus, proteus_state, 0, "Polycorp", "Poly Proteus (Standalone)", MACHINE_NOT_WORKING )
|
@ -21334,7 +21334,7 @@ bel // 1998.12 Behind Enemy Lines
|
||||
daytona // 1994.03 Daytona USA (Japan, Revision A)
|
||||
daytona93 // 1993 Japan
|
||||
daytonam // 2001 Kyle Hodgetts hack
|
||||
daytonas //
|
||||
daytonas //
|
||||
daytonase // 1994 Daytona USA Special Edition (Japan, Revision A)
|
||||
daytonat // 1994? Kyle Hodgetts hack
|
||||
daytonata // 1994? Kyle Hodgetts hack
|
||||
@ -32295,6 +32295,9 @@ progolfa // (c) 1981
|
||||
@source:prophet600.cpp
|
||||
prpht600 // 1983 Sequential Circuits
|
||||
|
||||
@source:proteus.cpp
|
||||
proteus // Poly Proteus
|
||||
|
||||
@source:proteus3.cpp
|
||||
proteus3 //
|
||||
|
||||
|
@ -554,6 +554,7 @@ prodigy.cpp
|
||||
prof180x.cpp
|
||||
prof80.cpp
|
||||
prophet600.cpp
|
||||
proteus.cpp
|
||||
proteus3.cpp
|
||||
ps2.cpp
|
||||
ps2sony.cpp
|
||||
|
Loading…
Reference in New Issue
Block a user