diff options
author | 2014-03-17 22:06:26 +0000 | |
---|---|---|
committer | 2014-03-17 22:06:26 +0000 | |
commit | 4bba3f6e421184a50d035b33c04e7fef98160809 (patch) | |
tree | ec1ca778b330d7ce4c5a2c310e0eae8502e9e9d5 /src/mess/machine | |
parent | f3fe1ab6443027aef68590c7391b43dea0580c06 (diff) |
(MESS) Moved the remaining slot interfaces to emu/bus. (nw)
Diffstat (limited to 'src/mess/machine')
61 files changed, 2 insertions, 10421 deletions
diff --git a/src/mess/machine/abc77.c b/src/mess/machine/abc77.c deleted file mode 100644 index 8d1ad08d1d9..00000000000 --- a/src/mess/machine/abc77.c +++ /dev/null @@ -1,659 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Curt Coder -/********************************************************************** - - Luxor ABC-55/77 keyboard emulation - - Copyright MESS Team. - Visit http://mamedev.org for licensing and usage restrictions. - -*********************************************************************/ - -/* - -PCB Layout ----------- - -KTC A65-02486-232 - -|-----------------------------------------------------------------------| -| SW1 CN1 LS393 | -| 4020 7406 LS132 7407 LS02 7407 NE556 LS1 | -| | -| 22-950-3B XTAL CPU ROM0 ROM1 LS373 LS240 22-908-03 | -| | -| | -| | -| | -| | -| | -| | -|-----------------------------------------------------------------------| - -Notes: - All IC's shown. - - CPU - Signetics SCN8035A 8035 CPU - ROM0 - NEC D2716D 2Kx8 ROM "-78" - ROM1 - not populated - 22-950-3B - Exar Semiconductor XR22-950-3B keyboard matrix row driver with 4 to 12 decoder/demultiplexer - 22-908-03 - Exar Semiconductor XR22-908-03 keyboard matrix capacitive readout latch - CN1 - 1x12 PCB header - LS1 - loudspeaker - SW1 - reset switch - -*/ - -#include "abc77.h" - - - -//************************************************************************** -// MACROS / CONSTANTS -//************************************************************************** - -#define I8035_TAG "z16" -#define DISCRETE_TAG "discrete" - - - -//************************************************************************** -// DEVICE DEFINITIONS -//************************************************************************** - -const device_type ABC77 = &device_creator<abc77_device>; -const device_type ABC55 = &device_creator<abc55_device>; - - -//------------------------------------------------- -// ROM( abc77 ) -//------------------------------------------------- - -ROM_START( abc77 ) - ROM_REGION( 0x1000, I8035_TAG, 0 ) - ROM_LOAD( "-78.z10", 0x000, 0x800, CRC(635986ce) SHA1(04a30141ac611d0544bbb786061515040c23480c) ) -// ROM_LOAD( "keyboard.z14", 0x0800, 0x0800, NO_DUMP ) // non-Swedish keyboard encoding ROM -ROM_END - - -//------------------------------------------------- -// rom_region - device-specific ROM region -//------------------------------------------------- - -const rom_entry *abc77_device::device_rom_region() const -{ - return ROM_NAME( abc77 ); -} - - -//------------------------------------------------- -// ADDRESS_MAP( abc77_mem ) -//------------------------------------------------- - -static ADDRESS_MAP_START( abc77_map, AS_PROGRAM, 8, abc77_device ) - AM_RANGE(0x000, 0xfff) AM_ROM AM_REGION("z16", 0) -ADDRESS_MAP_END - - -//------------------------------------------------- -// ADDRESS_MAP( abc77_io ) -//------------------------------------------------- - -static ADDRESS_MAP_START( abc77_io, AS_IO, 8, abc77_device ) - AM_RANGE(0x00, 0x00) AM_MIRROR(0xff) AM_WRITE(j3_w) - AM_RANGE(0x00, 0x00) AM_MIRROR(0xff) AM_READ_PORT("DSW") - AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READ(p1_r) - AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE(p2_w) - AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(t1_r) - AM_RANGE(MCS48_PORT_PROG, MCS48_PORT_PROG) AM_WRITE(prog_w) -ADDRESS_MAP_END - - -//------------------------------------------------- -// DISCRETE_SOUND( abc77 ) -//------------------------------------------------- - -static const discrete_555_desc abc77_ne556_a = -{ - DISC_555_OUT_SQW | DISC_555_OUT_DC, - 5, // B+ voltage of 555 - DEFAULT_555_VALUES -}; - - -static DISCRETE_SOUND_START( abc77 ) - DISCRETE_INPUT_LOGIC(NODE_01) - DISCRETE_555_ASTABLE(NODE_02, NODE_01, RES_K(2.7), RES_K(15), CAP_N(22), &abc77_ne556_a) - DISCRETE_OUTPUT(NODE_02, 5000) -DISCRETE_SOUND_END - - -//------------------------------------------------- -// MACHINE_DRIVER( abc77 ) -//------------------------------------------------- - -static MACHINE_CONFIG_FRAGMENT( abc77 ) - // keyboard cpu - MCFG_CPU_ADD(I8035_TAG, I8035, XTAL_4_608MHz) - MCFG_CPU_PROGRAM_MAP(abc77_map) - MCFG_CPU_IO_MAP(abc77_io) - - // watchdog - MCFG_WATCHDOG_TIME_INIT(attotime::from_hz(XTAL_4_608MHz/3/5/4096)) - - // discrete sound - MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_SOUND_ADD(DISCRETE_TAG, DISCRETE, 0) - MCFG_SOUND_CONFIG_DISCRETE(abc77) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) -MACHINE_CONFIG_END - - -//------------------------------------------------- -// machine_config_additions - device-specific -// machine configurations -//------------------------------------------------- - -machine_config_constructor abc77_device::device_mconfig_additions() const -{ - return MACHINE_CONFIG_NAME( abc77 ); -} - - -//------------------------------------------------- -// INPUT_CHANGED_MEMBER( keyboard_reset ) -//------------------------------------------------- - -INPUT_CHANGED_MEMBER( abc77_device::keyboard_reset ) -{ - if (oldval && !newval) - { - device_reset(); - } -} - - -//------------------------------------------------- -// INPUT_PORTS( abc55 ) -//------------------------------------------------- - -INPUT_PORTS_START( abc55 ) - PORT_START("X0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CAPS LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("RIGHT SHIFT") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("LEFT SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1) - - PORT_START("X1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("X2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH2) PORT_CHAR('<') PORT_CHAR('>') - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("RETURN") PORT_CODE(KEYCODE_ENTER) PORT_CHAR('\r') - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("\xE2\x86\x90") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("\xE2\x86\x92") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) - - PORT_START("X3") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR(0x00E9) PORT_CHAR(0x00C9) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('+') PORT_CHAR('?') - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR(0x00E5) PORT_CHAR(0x00C5) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(0x00FC) PORT_CHAR(0x00DC) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(0x00E4) PORT_CHAR(0x00C4) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\'') PORT_CHAR('*') - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SPACE") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') - - PORT_START("X4") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('=') - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')') - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(0x00F6) PORT_CHAR(0x00D6) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR(':') - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('-') PORT_CHAR('_') - - PORT_START("X5") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('/') - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR(';') - - PORT_START("X6") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&') - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') - - PORT_START("X7") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("4 \xC2\xA4") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR(0x00A4) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') - - PORT_START("X8") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"') - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') - - PORT_START("X9") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("X10") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("X11") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PF1") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PF2") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PF3") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PF4") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4)) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PF5") PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5)) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PF6") PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6)) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PF7") PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7)) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PF8") PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8)) - - PORT_START("DSW") - PORT_DIPNAME( 0x01, 0x01, "Keyboard Program" ) - PORT_DIPSETTING( 0x00, "Internal (8048)" ) - PORT_DIPSETTING( 0x01, "External PROM" ) // @ Z10 - PORT_DIPNAME( 0x02, 0x02, "Character Set" ) - PORT_DIPSETTING( 0x02, "Swedish" ) - PORT_DIPSETTING( 0x00, "US ASCII" ) - PORT_DIPNAME( 0x04, 0x04, "External Encoding PROM" ) // @ Z14 - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x18, 0x18, "Keyboard Language" ) PORT_CONDITION("DSW", 0x04, EQUALS, 0x00) - PORT_DIPSETTING( 0x00, "Danish" ) - PORT_DIPSETTING( 0x10, DEF_STR( French ) ) - PORT_DIPSETTING( 0x08, DEF_STR( German ) ) - PORT_DIPSETTING( 0x18, DEF_STR( Spanish ) ) - PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED) - - PORT_START("SW1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_NAME("Keyboard Reset") PORT_CHANGED_MEMBER(DEVICE_SELF, abc77_device, keyboard_reset, 0) -INPUT_PORTS_END - - -//------------------------------------------------- -// input_ports - device-specific input ports -//------------------------------------------------- - -ioport_constructor abc55_device::device_input_ports() const -{ - return INPUT_PORTS_NAME( abc55 ); -} - - -//------------------------------------------------- -// INPUT_PORTS( abc77 ) -//------------------------------------------------- - -INPUT_PORTS_START( abc77 ) - PORT_INCLUDE( abc55 ) - - PORT_MODIFY("X9") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 9") PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD)) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad +") PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD)) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 6") PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD)) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad -") PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 3") PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD)) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad RETURN") PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD)) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad .") PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD)) - - PORT_MODIFY("X10") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 7") PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD)) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 8") PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 4") PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD)) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 5") PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD)) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 1") PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 2") PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD)) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 0") PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD)) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) -INPUT_PORTS_END - - -//------------------------------------------------- -// input_ports - device-specific input ports -//------------------------------------------------- - -ioport_constructor abc77_device::device_input_ports() const -{ - return INPUT_PORTS_NAME( abc77 ); -} - - - -//************************************************************************** -// INLINE HELPERS -//************************************************************************** - -//------------------------------------------------- -// serial_output - -//------------------------------------------------- - -inline void abc77_device::serial_output(int state) -{ - if (m_txd != state) - { - m_txd = state; - - m_slot->write_rx(m_txd); - } -} - - -//------------------------------------------------- -// serial_clock - -//------------------------------------------------- - -inline void abc77_device::serial_clock() -{ - m_clock = !m_clock; - - m_slot->trxc_w(!m_clock); -} - - -//------------------------------------------------- -// keydown - -//------------------------------------------------- - -inline void abc77_device::key_down(int state) -{ - if (m_keydown != state) - { - m_slot->keydown_w(state); - m_keydown = state; - } -} - - - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -//------------------------------------------------- -// abc77_device - constructor -//------------------------------------------------- - -abc77_device::abc77_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, ABC77, "Luxor ABC 77", tag, owner, clock, "abc77", __FILE__), - abc_keyboard_interface(mconfig, *this), - m_maincpu(*this, I8035_TAG), - m_discrete(*this, DISCRETE_TAG), - m_x0(*this, "X0"), - m_x1(*this, "X1"), - m_x2(*this, "X2"), - m_x3(*this, "X3"), - m_x4(*this, "X4"), - m_x5(*this, "X5"), - m_x6(*this, "X6"), - m_x7(*this, "X7"), - m_x8(*this, "X8"), - m_x9(*this, "X9"), - m_x10(*this, "X10"), - m_x11(*this, "X11"), - m_dsw(*this, "DSW"), - m_txd(1), - m_keydown(1), - m_clock(0), - m_stb(1) -{ -} - -abc77_device::abc77_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) - : device_t(mconfig, type, name, tag, owner, clock, shortname, source), - abc_keyboard_interface(mconfig, *this), - m_maincpu(*this, I8035_TAG), - m_discrete(*this, DISCRETE_TAG), - m_x0(*this, "X0"), - m_x1(*this, "X1"), - m_x2(*this, "X2"), - m_x3(*this, "X3"), - m_x4(*this, "X4"), - m_x5(*this, "X5"), - m_x6(*this, "X6"), - m_x7(*this, "X7"), - m_x8(*this, "X8"), - m_x9(*this, "X9"), - m_x10(*this, "X10"), - m_x11(*this, "X11"), - m_dsw(*this, "DSW"), - m_txd(1), - m_keydown(1), - m_clock(0), - m_stb(1) -{ -} - -abc55_device::abc55_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : abc77_device(mconfig, ABC55, "Luxor ABC 55", tag, owner, clock, "abc55", __FILE__) { } - - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void abc77_device::device_start() -{ - // allocate timers - m_serial_timer = timer_alloc(TIMER_SERIAL); - m_serial_timer->adjust(attotime::from_hz(19200), 0, attotime::from_hz(19200)); // ALE/32 - - m_reset_timer = timer_alloc(TIMER_RESET); -} - - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void abc77_device::device_reset() -{ - int t = 1.1 * RES_K(100) * CAP_N(100) * 1000; // t = 1.1 * R1 * C1 - int ea = BIT(m_dsw->read(), 7); - - // trigger reset - m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); - m_reset_timer->adjust(attotime::from_msec(t)); - - m_maincpu->set_input_line(MCS48_INPUT_EA, ea ? CLEAR_LINE : ASSERT_LINE); -} - - -//------------------------------------------------- -// device_timer - handler timer events -//------------------------------------------------- - -void abc77_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) -{ - switch (id) - { - case TIMER_SERIAL: - serial_clock(); - break; - - case TIMER_RESET: - m_maincpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); - break; - } -} - - -//------------------------------------------------- -// txd_w - -//------------------------------------------------- - -void abc77_device::txd_w(int state) -{ - m_maincpu->set_input_line(MCS48_INPUT_IRQ, state ? CLEAR_LINE : ASSERT_LINE); -} - - -//------------------------------------------------- -// p1_r - -//------------------------------------------------- - -READ8_MEMBER( abc77_device::p1_r ) -{ - /* - - bit description - - P10 Z17 Y0 - P11 Z17 Y1 - P12 Z17 Y2 - P13 Z17 Y3 - P14 Z17 Y4 - P15 Z17 Y5 - P16 Z17 Y6 - P17 Z17 Y7 - - */ - - UINT8 data = 0xff; - - if (m_stb) - { - switch (m_keylatch) - { - case 0: data = m_x0->read(); break; - case 1: data = m_x1->read(); break; - case 2: data = m_x2->read(); break; - case 3: data = m_x3->read(); break; - case 4: data = m_x4->read(); break; - case 5: data = m_x5->read(); break; - case 6: data = m_x6->read(); break; - case 7: data = m_x7->read(); break; - case 8: data = m_x8->read(); break; - case 9: data = m_x9->read(); break; - case 10: data = m_x10->read(); break; - case 11: data = m_x11->read(); break; - } - } - - return data; -} - - -//------------------------------------------------- -// p2_w - -//------------------------------------------------- - -WRITE8_MEMBER( abc77_device::p2_w ) -{ - /* - - bit description - - P20 Z2 A0 - P21 Z2 A1 - P22 Z2 A2 - P23 Z2 A3 - P24 NE556 2,6 - P25 TxD - P26 _KEYDOWN - P27 Z17 HYS - - */ - - if (!m_stb) - { - m_keylatch = data & 0x0f; - - if (m_keylatch == 1) - { - machine().watchdog_reset(); - } - } - - // beep - discrete_sound_w(m_discrete, space, NODE_01, BIT(data, 4)); - - // transmit data - serial_output(BIT(data, 5)); - - // key down - key_down(BIT(data, 6)); - - // hysteresis - m_hys = BIT(data, 7); -} - - -//------------------------------------------------- -// t1_r - -//------------------------------------------------- - -READ8_MEMBER( abc77_device::t1_r ) -{ - return m_clock; -} - - -//------------------------------------------------- -// prog_w - -//------------------------------------------------- - -WRITE8_MEMBER( abc77_device::prog_w ) -{ - m_stb = BIT(data, 0); -} - - -//------------------------------------------------- -// j3_w - -//------------------------------------------------- - -WRITE8_MEMBER( abc77_device::j3_w ) -{ - m_j3 = data; -} diff --git a/src/mess/machine/abc77.h b/src/mess/machine/abc77.h deleted file mode 100644 index d7a23f5d360..00000000000 --- a/src/mess/machine/abc77.h +++ /dev/null @@ -1,119 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Curt Coder -/********************************************************************** - - Luxor ABC-55/77 keyboard emulation - - Copyright MESS Team. - Visit http://mamedev.org for licensing and usage restrictions. - -*********************************************************************/ - -#pragma once - -#ifndef __ABC77__ -#define __ABC77__ - -#include "emu.h" -#include "cpu/mcs48/mcs48.h" -#include "machine/abckb.h" -#include "sound/discrete.h" -#include "sound/speaker.h" - - - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -// ======================> abc77_device - -class abc77_device : public device_t, - public abc_keyboard_interface -{ -public: - // construction/destruction - abc77_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); - abc77_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // optional information overrides - virtual const rom_entry *device_rom_region() const; - virtual machine_config_constructor device_mconfig_additions() const; - virtual ioport_constructor device_input_ports() const; - - // abc_keyboard_interface overrides - virtual void txd_w(int state); - - DECLARE_INPUT_CHANGED_MEMBER( keyboard_reset ); - - DECLARE_READ8_MEMBER( p1_r ); - DECLARE_WRITE8_MEMBER( p2_w ); - DECLARE_READ8_MEMBER( t1_r ); - DECLARE_WRITE8_MEMBER( prog_w ); - DECLARE_WRITE8_MEMBER( j3_w ); - -protected: - // device-level overrides - virtual void device_start(); - virtual void device_reset(); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); - - enum - { - TIMER_SERIAL, - TIMER_RESET - }; - - inline void serial_output(int state); - inline void serial_clock(); - inline void key_down(int state); - - required_device<cpu_device> m_maincpu; - required_device<discrete_sound_device> m_discrete; - required_ioport m_x0; - required_ioport m_x1; - required_ioport m_x2; - required_ioport m_x3; - required_ioport m_x4; - required_ioport m_x5; - required_ioport m_x6; - required_ioport m_x7; - required_ioport m_x8; - required_ioport m_x9; - required_ioport m_x10; - required_ioport m_x11; - required_ioport m_dsw; - - int m_txd; // transmit data - int m_keylatch; // keyboard row latch - int m_keydown; // key down - int m_clock; // transmit clock - int m_hys; // hysteresis - int m_reset; // reset - int m_stb; // strobe - UINT8 m_j3; - - // timers - emu_timer *m_serial_timer; - emu_timer *m_reset_timer; -}; - - -class abc55_device : public abc77_device -{ -public: - // construction/destruction - abc55_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // optional information overrides - virtual ioport_constructor device_input_ports() const; -}; - - -// device type definition -extern const device_type ABC77; -extern const device_type ABC55; - - - -#endif diff --git a/src/mess/machine/abc800kb.c b/src/mess/machine/abc800kb.c deleted file mode 100644 index 55a18604f86..00000000000 --- a/src/mess/machine/abc800kb.c +++ /dev/null @@ -1,510 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Curt Coder -/********************************************************************** - - Luxor ABC-800 keyboard emulation - - Copyright MESS Team. - Visit http://mamedev.org for licensing and usage restrictions. - -**********************************************************************/ - -/* - -PCB Layout ----------- - -KTC A65-02201-201K - - |---------------| -|---| CN1 |---------------------------------------------------| -| | -| LS193 LS374 8048 22-008-03 | -| LS13 LS193 22-050-3B 5.9904MHz | -| | -| | -| | -| | -| | -| | -| | -| | -|-----------------------------------------------------------------------| - -Notes: - All IC's shown. - - 8048 - National Semiconductor INS8048 MCU "8048-132" - 22-008-03 - Exar Semiconductor XR22-008-03 keyboard matrix capacitive readout latch - 22-050-3B - Exar Semiconductor XR22-050-3B keyboard matrix row driver with 4 to 12 decoder/demultiplexer - CN1 - keyboard data connector - - -XR22-008-03 Pinout ------------------- - _____ _____ - D0 1 |* \_/ | 20 Vcc - D1 2 | | 19 _CLR - D2 3 | | 18 Q0 - D3 4 | | 17 Q1 - HYS 5 | 22-008-03 | 16 Q2 - D4 6 | | 15 Q3 - D5 7 | | 14 Q4 - D6 8 | | 13 Q5 - D7 9 | | 12 Q6 - GND 10 |_____________| 11 Q7 - - -XR22-050-3B Pinout ------------------- - _____ _____ - Y8 1 |* \_/ | 20 Vcc - Y9 2 | | 19 Y7 - Y10 3 | | 18 Y6 - Y11 4 | | 17 Y5 - _STB 5 | 22-050-3B | 16 Y4 - A0 6 | | 15 Y3 - A1 7 | | 14 Y2 - A2 8 | | 13 Y1 - A3 9 | | 12 Y0 - GND 10 |_____________| 11 OE? - -*/ - -#include "abc800kb.h" - - - -//************************************************************************** -// MACROS / CONSTANTS -//************************************************************************** - -#define I8048_TAG "i8048" - - - -//************************************************************************** -// DEVICE DEFINITIONS -//************************************************************************** - -const device_type ABC800_KEYBOARD = &device_creator<abc800_keyboard_device>; - - -//------------------------------------------------- -// ROM( abc800_keyboard ) -//------------------------------------------------- - -ROM_START( abc800_keyboard ) - ROM_REGION( 0x400, I8048_TAG, 0 ) - ROM_LOAD( "8048-132.z9", 0x0000, 0x0400, CRC(05c4dce5) SHA1(1824c5d304bbd09f97056cfa408e1b18b5219ba2) ) -ROM_END - - -//------------------------------------------------- -// rom_region - device-specific ROM region -//------------------------------------------------- - -const rom_entry *abc800_keyboard_device::device_rom_region() const -{ - return ROM_NAME( abc800_keyboard ); -} - - -//------------------------------------------------- -// ADDRESS_MAP( abc800_keyboard_io ) -//------------------------------------------------- - -static ADDRESS_MAP_START( abc800_keyboard_io, AS_IO, 8, abc800_keyboard_device ) - AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READWRITE(kb_p1_r, kb_p1_w) - AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE(kb_p2_w) - AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(kb_t1_r) -ADDRESS_MAP_END - - -//------------------------------------------------- -// MACHINE_DRIVER( abc800_keyboard ) -//------------------------------------------------- - -static MACHINE_CONFIG_FRAGMENT( abc800_keyboard ) - MCFG_CPU_ADD(I8048_TAG, I8048, XTAL_5_9904MHz) - MCFG_CPU_IO_MAP(abc800_keyboard_io) -MACHINE_CONFIG_END - - -//------------------------------------------------- -// machine_config_additions - device-specific -// machine configurations -//------------------------------------------------- - -machine_config_constructor abc800_keyboard_device::device_mconfig_additions() const -{ - return MACHINE_CONFIG_NAME( abc800_keyboard ); -} - - -//------------------------------------------------- -// INPUT_PORTS( abc800_keyboard ) -//------------------------------------------------- - -INPUT_PORTS_START( abc800_keyboard ) - PORT_START("X0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CAPS LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Left SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) // 80 - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) // 81 - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) // 82 - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) // 83 - - PORT_START("X1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"') - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad -") PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad RETURN") PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD)) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) // 84 - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) // 85 - - PORT_START("X2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) // 18 - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 6") PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD)) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 3") PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD)) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) // 86 - - PORT_START("X3") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("4 \xC2\xA4") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR(0x00A4) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 9") PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD)) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 5") PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD)) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 2") PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD)) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SPACE") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') - - PORT_START("X4") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 8") PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 4") PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD)) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 1") PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad .") PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD)) - - PORT_START("X5") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&') - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 7") PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD)) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PF4") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4)) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PF6") PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6)) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 0") PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD)) - - PORT_START("X6") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('/') - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PF2") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PF3") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PF5") PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5)) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PF8") PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8)) - - PORT_START("X7") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PF1") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("RETURN") PORT_CODE(KEYCODE_ENTER) PORT_CHAR('\r') - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PF7") PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7)) - - PORT_START("X8") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')') - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR(';') - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('<') PORT_CHAR('>') - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(u_UMLAUT " " U_UMLAUT) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(0x00FC) PORT_CHAR(0x00DC) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH2) PORT_CHAR('\'') PORT_CHAR('*') - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_TAB) PORT_CHAR(UCHAR_MAMEKEY(TAB)) - - PORT_START("X9") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('=') - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR(':') - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(e_ACUTE " " E_ACUTE) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR(0x00E9) PORT_CHAR(0x00C9) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(a_RING " " A_RING) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR(0x00E5) PORT_CHAR(0x00C5) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(a_UMLAUT " " A_UMLAUT) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(0x00E4) PORT_CHAR(0x00C4) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Right SHIFT") PORT_CODE(KEYCODE_RSHIFT) - - PORT_START("X10") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('+') PORT_CHAR('?') - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(o_UMLAUT " " O_UMLAUT) PORT_CODE(KEYCODE_COLON) PORT_CHAR(0x00F6) PORT_CHAR(0x00D6) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('-') PORT_CHAR('_') - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) // 87 - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) // 88 - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) // 89 - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) // 8a - - PORT_START("X11") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) // 03 - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) // 23 - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) // 96 - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) // 8b - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) // 8c - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) // 8d - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) // 8e - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) // 8f -INPUT_PORTS_END - - -//------------------------------------------------- -// input_ports - device-specific input ports -//------------------------------------------------- - -ioport_constructor abc800_keyboard_device::device_input_ports() const -{ - return INPUT_PORTS_NAME( abc800_keyboard ); -} - - - -//************************************************************************** -// INLINE HELPERS -//************************************************************************** - -//------------------------------------------------- -// serial_output - -//------------------------------------------------- - -inline void abc800_keyboard_device::serial_output(int state) -{ - if (m_txd != state) - { - m_txd = state; - - m_slot->write_rx(m_txd); - } -} - - -//------------------------------------------------- -// serial_clock - -//------------------------------------------------- - -inline void abc800_keyboard_device::serial_clock() -{ - m_clk = !m_clk; - - m_slot->trxc_w(!m_clk); -} - - -//------------------------------------------------- -// keydown - -//------------------------------------------------- - -inline void abc800_keyboard_device::key_down(int state) -{ - if (m_keydown != state) - { - m_keydown = state; - - m_slot->keydown_w(state); - } -} - - - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -//------------------------------------------------- -// abc800_keyboard_device - constructor -//------------------------------------------------- - -abc800_keyboard_device::abc800_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, ABC800_KEYBOARD, "ABC-800 Keyboard", tag, owner, clock, "abc800kb", __FILE__), - abc_keyboard_interface(mconfig, *this), - m_maincpu(*this, I8048_TAG), - m_x0(*this, "X0"), - m_x1(*this, "X1"), - m_x2(*this, "X2"), - m_x3(*this, "X3"), - m_x4(*this, "X4"), - m_x5(*this, "X5"), - m_x6(*this, "X6"), - m_x7(*this, "X7"), - m_x8(*this, "X8"), - m_x9(*this, "X9"), - m_x10(*this, "X10"), - m_x11(*this, "X11"), - m_row(0), - m_txd(1), - m_clk(0), - m_stb(1), - m_keydown(1) -{ -} - - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void abc800_keyboard_device::device_start() -{ - // allocate timers - m_serial_timer = timer_alloc(); - m_serial_timer->adjust(attotime::from_hz(XTAL_5_9904MHz/(3*5)/20), 0, attotime::from_hz(XTAL_5_9904MHz/(3*5)/20)); // ??? - - // state saving - save_item(NAME(m_row)); - save_item(NAME(m_clk)); - save_item(NAME(m_txd)); - save_item(NAME(m_stb)); - save_item(NAME(m_keydown)); -} - - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void abc800_keyboard_device::device_reset() -{ -} - - -//------------------------------------------------- -// device_timer - handler timer events -//------------------------------------------------- - -void abc800_keyboard_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) -{ - serial_clock(); -} - - -//------------------------------------------------- -// txd_w - -//------------------------------------------------- - -void abc800_keyboard_device::txd_w(int state) -{ - m_maincpu->set_input_line(MCS48_INPUT_IRQ, state ? CLEAR_LINE : ASSERT_LINE); -} - - -//------------------------------------------------- -// kb_p1_r - keyboard column data read -//------------------------------------------------- - -READ8_MEMBER( abc800_keyboard_device::kb_p1_r ) -{ - UINT8 data = 0xff; - - if (m_stb) - { - switch (m_row) - { - case 0: data = m_x0->read(); break; - case 1: data = m_x1->read(); break; - case 2: data = m_x2->read(); break; - case 3: data = m_x3->read(); break; - case 4: data = m_x4->read(); break; - case 5: data = m_x5->read(); break; - case 6: data = m_x6->read(); break; - case 7: data = m_x7->read(); break; - case 8: data = m_x8->read(); break; - case 9: data = m_x9->read(); break; - case 10: data = m_x10->read(); break; - case 11: data = m_x11->read(); break; - } - } - - return data; -} - - -//------------------------------------------------- -// kb_p1_w - keyboard row write -//------------------------------------------------- - -WRITE8_MEMBER( abc800_keyboard_device::kb_p1_w ) -{ - /* - - bit description - - 0 A0 - 1 A1 - 2 A2 - 3 A3 - 4 ? - 5 ? - 6 - 7 - - */ - - // keyboard row - if (!m_stb) - { - m_row = data & 0x0f; - } -} - - -//------------------------------------------------- -// kb_p2_w - keyboard control write -//------------------------------------------------- - -WRITE8_MEMBER( abc800_keyboard_device::kb_p2_w ) -{ - /* - - bit description - - 0 - 1 - 2 - 3 - 4 TxD - 5 ? - 6 22-008-03 CLR, 22-050-3B STB - 7 22-008-03 HYS - - */ - - // TxD - serial_output(!BIT(data, 4)); - - // keydown - key_down(!BIT(data, 5)); - - // strobe - m_stb = BIT(data, 6); -} - - -//------------------------------------------------- -// kb_t1_r - keyboard T1 timer read -//------------------------------------------------- - -READ8_MEMBER( abc800_keyboard_device::kb_t1_r ) -{ - return m_clk; -} diff --git a/src/mess/machine/abc800kb.h b/src/mess/machine/abc800kb.h deleted file mode 100644 index 939a642e46e..00000000000 --- a/src/mess/machine/abc800kb.h +++ /dev/null @@ -1,93 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Curt Coder -/********************************************************************** - - Luxor ABC-800 keyboard emulation - - Copyright MESS Team. - Visit http://mamedev.org for licensing and usage restrictions. - -**********************************************************************/ - -#pragma once - -#ifndef __ABC800_KEYBOARD__ -#define __ABC800_KEYBOARD__ - - -#include "emu.h" -#include "cpu/mcs48/mcs48.h" -#include "machine/abckb.h" -#include "sound/discrete.h" - - - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -// ======================> abc800_keyboard_device - -class abc800_keyboard_device : public device_t, - public abc_keyboard_interface -{ -public: - // construction/destruction - abc800_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // optional information overrides - virtual const rom_entry *device_rom_region() const; - virtual machine_config_constructor device_mconfig_additions() const; - virtual ioport_constructor device_input_ports() const; - - // abc_keyboard_interface overrides - virtual void txd_w(int state); - - // not really public - DECLARE_READ8_MEMBER( kb_p1_r ); - DECLARE_WRITE8_MEMBER( kb_p1_w ); - DECLARE_WRITE8_MEMBER( kb_p2_w ); - DECLARE_READ8_MEMBER( kb_t1_r ); - -protected: - // device-level overrides - virtual void device_start(); - virtual void device_reset(); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); - -private: - inline void serial_output(int state); - inline void serial_clock(); - inline void key_down(int state); - - required_device<cpu_device> m_maincpu; - required_ioport m_x0; - required_ioport m_x1; - required_ioport m_x2; - required_ioport m_x3; - required_ioport m_x4; - required_ioport m_x5; - required_ioport m_x6; - required_ioport m_x7; - required_ioport m_x8; - required_ioport m_x9; - required_ioport m_x10; - required_ioport m_x11; - - int m_row; - int m_txd; - int m_clk; - int m_stb; - int m_keydown; - - // timers - emu_timer *m_serial_timer; -}; - - -// device type definition -extern const device_type ABC800_KEYBOARD; - - - -#endif diff --git a/src/mess/machine/abc99.c b/src/mess/machine/abc99.c deleted file mode 100644 index a4272a52213..00000000000 --- a/src/mess/machine/abc99.c +++ /dev/null @@ -1,783 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Curt Coder -/********************************************************************** - - Luxor ABC-99 keyboard and mouse emulation - - Copyright MESS Team. - Visit http://mamedev.org for licensing and usage restrictions. - -*********************************************************************/ - -/* - -Keyboard PCB Layout -------------------- - -|-----------------------------------------------------------------------| -| CN1 CN2 CPU1 ROM1 SW1 | -| | -| 6MHz CPU0 ROM0 GI | -| | -| | -| | -| | -| | -| | -| | -| | -|-----------------------------------------------------------------------| - -Notes: - Relevant IC's shown. - - CPU0 - STMicro ET8035N-6 8035 CPU - CPU1 - STMicro ET8035N-6 8035 CPU - ROM0 - Texas Instruments TMS2516JL-16 2Kx8 ROM "107268-16" - ROM1 - STMicro ET2716Q-1 2Kx8 ROM "107268-17" - GI - General Instruments 321239007 keyboard chip "4=7" - CN1 - DB15 connector, Luxor ABC R8 (3 button mouse) - CN2 - 12 pin PCB header, keyboard data cable - SW1 - reset switch? - -*/ - -/* - - TODO: - - - verify cursor keys - - language DIP - - mouse - - investigate unknown ROMs - - MCS-48 PC:01DC - Unimplemented opcode = 75 - - 75 = ENT0 CLK : enable CLK (unscaled_clock/3) output on T0 - - halt Z2 when Z5 is reset, resume Z2 when Z5 executes ENT0 CLK instruction - -*/ - -#include "abc99.h" - - - -//************************************************************************** -// MACROS / CONSTANTS -//************************************************************************** - -#define I8035_Z2_TAG "z2" -#define I8035_Z5_TAG "z5" - - - -//************************************************************************** -// DEVICE DEFINITIONS -//************************************************************************** - -const device_type ABC99 = &device_creator<abc99_device>; - - -//------------------------------------------------- -// ROM( abc99 ) -//------------------------------------------------- - -ROM_START( abc99 ) - ROM_REGION( 0x800, I8035_Z2_TAG, 0 ) - ROM_LOAD( "107268-17.z3", 0x000, 0x800, CRC(2f60cc35) SHA1(ebc6af9cd0a49a0d01698589370e628eebb6221c) ) - - ROM_REGION( 0x800, I8035_Z5_TAG, 0 ) - ROM_LOAD( "107268-16.z6", 0x000, 0x800, CRC(785ec0c6) SHA1(0b261beae20dbc06fdfccc50b19ea48b5b6e22eb) ) - - ROM_REGION( 0x1800, "unknown", 0) - ROM_LOAD( "106819-09.bin", 0x0000, 0x1000, CRC(ffe32a71) SHA1(fa2ce8e0216a433f9bbad0bdd6e3dc0b540f03b7) ) - ROM_LOAD( "107268-64.bin", 0x1000, 0x0800, CRC(e33683ae) SHA1(0c1d9e320f82df05f4804992ef6f6f6cd20623f3) ) -ROM_END - - -//------------------------------------------------- -// rom_region - device-specific ROM region -//------------------------------------------------- - -const rom_entry *abc99_device::device_rom_region() const -{ - return ROM_NAME( abc99 ); -} - - -//------------------------------------------------- -// ADDRESS_MAP( abc99_z2_mem ) -//------------------------------------------------- - -static ADDRESS_MAP_START( abc99_z2_mem, AS_PROGRAM, 8, abc99_device ) - AM_RANGE(0x0000, 0x07ff) AM_ROM AM_REGION(I8035_Z2_TAG, 0) -ADDRESS_MAP_END - - -//------------------------------------------------- -// ADDRESS_MAP( abc99_z2_io ) -//------------------------------------------------- - -static ADDRESS_MAP_START( abc99_z2_io, AS_IO, 8, abc99_device ) - AM_RANGE(0x21, 0x21) AM_WRITE(z2_led_w) - AM_RANGE(0x30, 0x30) AM_READ_PORT("X0") AM_WRITENOP - AM_RANGE(0x31, 0x31) AM_READ_PORT("X1") AM_WRITENOP - AM_RANGE(0x32, 0x32) AM_READ_PORT("X2") AM_WRITENOP - AM_RANGE(0x33, 0x33) AM_READ_PORT("X3") AM_WRITENOP - AM_RANGE(0x34, 0x34) AM_READ_PORT("X4") AM_WRITENOP - AM_RANGE(0x35, 0x35) AM_READ_PORT("X5") AM_WRITENOP - AM_RANGE(0x36, 0x36) AM_READ_PORT("X6") AM_WRITENOP - AM_RANGE(0x37, 0x37) AM_READ_PORT("X7") AM_WRITENOP - AM_RANGE(0x38, 0x38) AM_READ_PORT("X8") AM_WRITENOP - AM_RANGE(0x39, 0x39) AM_READ_PORT("X9") AM_WRITENOP - AM_RANGE(0x3a, 0x3a) AM_READ_PORT("X10") AM_WRITENOP - AM_RANGE(0x3b, 0x3b) AM_READ_PORT("X11") AM_WRITENOP - AM_RANGE(0x3c, 0x3c) AM_READ_PORT("X12") AM_WRITENOP - AM_RANGE(0x3d, 0x3d) AM_READ_PORT("X13") AM_WRITENOP - AM_RANGE(0x3e, 0x3e) AM_READ_PORT("X14") AM_WRITENOP - AM_RANGE(0x3f, 0x3f) AM_READ_PORT("X15") AM_WRITENOP - AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_WRITE(z2_p1_w) - AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READ(z2_p2_r) - AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(z2_t0_r) - AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(z2_t1_r) -ADDRESS_MAP_END - - -//------------------------------------------------- -// ADDRESS_MAP( abc99_z5_mem ) -//------------------------------------------------- - -static ADDRESS_MAP_START( abc99_z5_mem, AS_PROGRAM, 8, abc99_device ) - AM_RANGE(0x0000, 0x07ff) AM_ROM AM_REGION(I8035_Z5_TAG, 0) -ADDRESS_MAP_END - - -//------------------------------------------------- -// ADDRESS_MAP( abc99_z5_io ) -//------------------------------------------------- - -static ADDRESS_MAP_START( abc99_z5_io, AS_IO, 8, abc99_device ) -/* AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READ(z5_p1_r) - AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE(z5_p2_w) - AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_WRITENOP // Z2 CLK - AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(z5_t1_r)*/ -ADDRESS_MAP_END - - -//------------------------------------------------- -// MACHINE_DRIVER( abc99 ) -//------------------------------------------------- - -static MACHINE_CONFIG_FRAGMENT( abc99 ) - // keyboard CPU - MCFG_CPU_ADD(I8035_Z2_TAG, I8035, XTAL_6MHz/3) // from Z5 T0 output - MCFG_CPU_PROGRAM_MAP(abc99_z2_mem) - MCFG_CPU_IO_MAP(abc99_z2_io) - - // mouse CPU - MCFG_CPU_ADD(I8035_Z5_TAG, I8035, XTAL_6MHz) - MCFG_CPU_PROGRAM_MAP(abc99_z5_mem) - MCFG_CPU_IO_MAP(abc99_z5_io) - MCFG_DEVICE_DISABLE() // HACK fix for broken serial I/O - - // sound hardware - MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) -MACHINE_CONFIG_END - - -//------------------------------------------------- -// machine_config_additions - device-specific -// machine configurations -//------------------------------------------------- - -machine_config_constructor abc99_device::device_mconfig_additions() const -{ - return MACHINE_CONFIG_NAME( abc99 ); -} - - -//------------------------------------------------- -// INPUT_CHANGED_MEMBER( keyboard_reset ) -//------------------------------------------------- - -INPUT_CHANGED_MEMBER( abc99_device::keyboard_reset ) -{ - if (newval) - { - m_mousecpu->reset(); - } -} - - -//------------------------------------------------- -// INPUT_PORTS( abc99 ) -//------------------------------------------------- - -INPUT_PORTS_START( abc99 ) - PORT_START("X0") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF13") PORT_CODE(KEYCODE_PRTSCR) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(UTF8_RIGHT"|") PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t') - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("RETURN") PORT_CODE(KEYCODE_ENTER) PORT_CHAR('\r') - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("LF") PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(RCONTROL)) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH2) PORT_CHAR('<') PORT_CHAR('>') - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("X1") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("ALT") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT)) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad CE") PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad RETURN") PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD)) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("X2") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PRINT") PORT_CODE(KEYCODE_PGUP) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 9") PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD)) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 6") PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD)) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 3") PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD)) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad .") PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD)) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Left SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("X3") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("HELP") PORT_CODE(KEYCODE_HOME) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 7") PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD)) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 4") PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD)) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 1") PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 0") PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD)) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("X4") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF15") PORT_CODE(KEYCODE_PAUSE) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("DEL") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL)) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) // cursor B - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) // cursor D - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("X5") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF12") PORT_CODE(KEYCODE_F12) PORT_CHAR(UCHAR_MAMEKEY(F12)) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("BS") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(0x00FC) PORT_CHAR(0x00DC) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\'') PORT_CHAR('*') - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Right SHIFT") PORT_CODE(KEYCODE_RSHIFT) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') - - PORT_START("X6") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF14") PORT_CODE(KEYCODE_SCRLOCK) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("INS") PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT)) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) // cursor A - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(UTF8_DOWN) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) // cursor C - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("CAPS LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) - - PORT_START("X7") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF11") PORT_CODE(KEYCODE_F11) PORT_CHAR(UCHAR_MAMEKEY(F11)) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR(0x00E9) PORT_CHAR(0x00C9) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR(0x00E5) PORT_CHAR(0x00C5) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(0x00E4) PORT_CHAR(0x00C4) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('-') PORT_CHAR('_') - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') - - PORT_START("X8") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("STOP") PORT_CODE(KEYCODE_END) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 8") PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 5") PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD)) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 2") PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD)) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("|"UTF8_LEFT) PORT_CODE(KEYCODE_RALT) PORT_CHAR(UCHAR_MAMEKEY(RALT)) - - PORT_START("X9") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('+') PORT_CHAR('?') - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(0x00F6) PORT_CHAR(0x00D6) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR(':') - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') - - PORT_START("X10") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF10") PORT_CODE(KEYCODE_F10) PORT_CHAR(UCHAR_MAMEKEY(F10)) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('=') - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR(';') - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF1") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("ESC") PORT_CODE(KEYCODE_ESC) - - PORT_START("X11") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF9") PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(F9)) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')') - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF2") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') - - PORT_START("X12") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("SPACE") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') - - PORT_START("X13") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF6") PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6)) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&') - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF5") PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5)) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("4 \xC2\xA4") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR(0x00A4) - - PORT_START("X14") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF7") PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7)) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('/') - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF4") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4)) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') - - PORT_START("X15") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF8") PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8)) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(') - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF3") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"') - - PORT_START("Z14") - PORT_DIPNAME( 0x07, 0x00, DEF_STR( Language ) ) PORT_DIPLOCATION("Z14:1,2,3") - PORT_DIPSETTING( 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x01, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x03, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x05, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x06, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x07, DEF_STR( Unknown ) ) - PORT_DIPNAME( 0x08, 0x08, "Keyboard Program" ) PORT_DIPLOCATION("Z14:4") - PORT_DIPSETTING( 0x00, "Internal (8048)" ) - PORT_DIPSETTING( 0x08, "External PROM" ) - - PORT_START("MOUSEB") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_NAME("Left Mouse Button") PORT_CODE(MOUSECODE_BUTTON1) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_NAME("Middle Mouse Button") PORT_CODE(MOUSECODE_BUTTON3) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_NAME("Right Mouse Button") PORT_CODE(MOUSECODE_BUTTON2) - - PORT_START("MOUSEX") - PORT_BIT( 0xff, 0x00, IPT_MOUSE_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(1) - - PORT_START("MOUSEY") - PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y ) PORT_SENSITIVITY(100) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(1) - - PORT_START("J4") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_NAME("Keyboard Reset") PORT_CHANGED_MEMBER(DEVICE_SELF, abc99_device, keyboard_reset, 0) -INPUT_PORTS_END - - -//------------------------------------------------- -// input_ports - device-specific input ports -//------------------------------------------------- - -ioport_constructor abc99_device::device_input_ports() const -{ - return INPUT_PORTS_NAME( abc99 ); -} - - - -//************************************************************************** -// INLINE HELPERS -//************************************************************************** - -//------------------------------------------------- -// serial_input - -//------------------------------------------------- - -inline void abc99_device::serial_input() -{ - m_maincpu->set_input_line(MCS48_INPUT_IRQ, (m_si || m_si_en) ? CLEAR_LINE : ASSERT_LINE); - m_mousecpu->set_input_line(MCS48_INPUT_IRQ, m_si ? CLEAR_LINE : ASSERT_LINE); -} - - -//------------------------------------------------- -// serial_output - -//------------------------------------------------- - -inline void abc99_device::serial_output(int state) -{ - if (m_txd != state) - { - m_txd = state; - - m_slot->write_rx(m_txd); - } -} - - -//------------------------------------------------- -// serial_clock - -//------------------------------------------------- - -inline void abc99_device::serial_clock() -{ - m_slot->trxc_w(1); - m_slot->trxc_w(0); -} - - -//------------------------------------------------- -// keydown - -//------------------------------------------------- - -inline void abc99_device::key_down(int state) -{ - if (m_keydown != state) - { - m_slot->keydown_w(state); - m_keydown = state; - } -} - - -//------------------------------------------------- -// scan_mouse - -//------------------------------------------------- - -inline void abc99_device::scan_mouse() -{ -} - - - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -//------------------------------------------------- -// abc99_device - constructor -//------------------------------------------------- - -abc99_device::abc99_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, ABC99, "Luxor ABC 99", tag, owner, clock, "abc99", __FILE__), - abc_keyboard_interface(mconfig, *this), - m_maincpu(*this, I8035_Z2_TAG), - m_mousecpu(*this, I8035_Z5_TAG), - m_speaker(*this, "speaker"), - m_z14(*this, "Z14"), - m_mouseb(*this, "MOUSEB"), - m_si(1), - m_si_en(1), - m_so_z2(1), - m_so_z5(1), - m_keydown(0), - m_t1_z2(0), - m_t1_z5(0), - m_led_en(0), - m_reset(1), - m_txd(1) -{ -} - - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void abc99_device::device_start() -{ - // allocate timers - m_serial_timer = timer_alloc(TIMER_SERIAL); - m_serial_timer->adjust(MCS48_ALE_CLOCK(XTAL_6MHz/3), 0, MCS48_ALE_CLOCK(XTAL_6MHz/3)); - - m_mouse_timer = timer_alloc(TIMER_MOUSE); - - // state saving - save_item(NAME(m_si)); - save_item(NAME(m_si_en)); - save_item(NAME(m_so_z2)); - save_item(NAME(m_so_z5)); - save_item(NAME(m_keydown)); - save_item(NAME(m_t1_z2)); - save_item(NAME(m_t1_z5)); - save_item(NAME(m_led_en)); - save_item(NAME(m_reset)); - save_item(NAME(m_txd)); -} - - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void abc99_device::device_reset() -{ - // set EA lines - m_maincpu->set_input_line(MCS48_INPUT_EA, ASSERT_LINE); - m_mousecpu->set_input_line(MCS48_INPUT_EA, ASSERT_LINE); -} - - -//------------------------------------------------- -// device_timer - handler timer events -//------------------------------------------------- - -void abc99_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) -{ - switch (id) - { - case TIMER_SERIAL: - serial_clock(); - break; - - case TIMER_MOUSE: - scan_mouse(); - break; - } -} - - -//------------------------------------------------- -// txd_w - -//------------------------------------------------- - -void abc99_device::txd_w(int state) -{ - if (m_si != state) - { - m_si = state; - serial_input(); - } -} - - -//------------------------------------------------- -// z2_bus_w - -//------------------------------------------------- - -WRITE8_MEMBER( abc99_device::z2_led_w ) -{ - if (m_led_en) return; - - output_set_led_value(LED_1, BIT(data, 0)); - output_set_led_value(LED_2, BIT(data, 1)); - output_set_led_value(LED_3, BIT(data, 2)); - output_set_led_value(LED_4, BIT(data, 3)); - output_set_led_value(LED_5, BIT(data, 4)); - output_set_led_value(LED_6, BIT(data, 5)); - output_set_led_value(LED_7, BIT(data, 6)); - output_set_led_value(LED_8, BIT(data, 7)); -} - - -//------------------------------------------------- -// z2_p1_w - -//------------------------------------------------- - -WRITE8_MEMBER( abc99_device::z2_p1_w ) -{ - /* - - bit description - - P10 serial output - P11 KEY DOWN - P12 transmit -> Z5 T1 - P13 INS led - P14 ALT led - P15 CAPS LOCK led - P16 speaker output - P17 Z8 enable - - */ - - // serial output - m_so_z2 = BIT(data, 0); - serial_output(m_so_z2 && m_so_z5); - - // key down - key_down(!BIT(data, 1)); - - // master T1 - m_t1_z5 = BIT(data, 2); - - // key LEDs - output_set_led_value(LED_INS, BIT(data, 3)); - output_set_led_value(LED_ALT, BIT(data, 4)); - output_set_led_value(LED_CAPS_LOCK, BIT(data, 5)); - - // speaker output - m_speaker->level_w(!BIT(data, 6)); - - // Z8 enable - m_led_en = BIT(data, 7); -} - - -//------------------------------------------------- -// z2_p2_r - -//------------------------------------------------- - -READ8_MEMBER( abc99_device::z2_p2_r ) -{ - /* - - bit description - - P20 - P21 - P22 - P23 - P24 - P25 DIP0 - P26 DIP1 - P27 DIP2 - - */ - - UINT8 data = m_z14->read() << 5; - - return data; -} - - -//------------------------------------------------- -// z2_t0_r - -//------------------------------------------------- - -READ8_MEMBER( abc99_device::z2_t0_r ) -{ - return 1; // 0=mouse connected, 1=no mouse -} - - -//------------------------------------------------- -// z2_t1_r - -//------------------------------------------------- - -READ8_MEMBER( abc99_device::z2_t1_r ) -{ - return m_t1_z2; -} - - -//------------------------------------------------- -// z5_p1_r - -//------------------------------------------------- - -READ8_MEMBER( abc99_device::z5_p1_r ) -{ - /* - - bit description - - P10 XA - P11 XB - P12 YA - P13 YB - P14 LB - P15 MB - P16 RB - P17 input from host - - */ - - UINT8 data = 0; - - // mouse buttons - data |= (m_mouseb->read() & 0x07) << 4; - - // serial input - data |= m_si << 7; - - return data; -} - - -//------------------------------------------------- -// z5_p2_w - -//------------------------------------------------- - -WRITE8_MEMBER( abc99_device::z5_p2_w ) -{ - /* - - bit description - - P20 - P21 - P22 - P23 - P24 Z2 serial input enable - P25 Z2 RESET - P26 serial output - P27 Z2 T1 - - */ - - // serial input enable - int si_en = BIT(data, 4); - - if (m_si_en != si_en) - { - m_si_en = si_en; - serial_input(); - } - - // Z2 reset - int reset = BIT(data, 5); - - if (!m_reset && reset) - { - m_maincpu->reset(); - } - - m_reset = reset; - - // serial output - m_so_z5 = BIT(data, 6); - serial_output(m_so_z2 && m_so_z5); - - // keyboard CPU T1 - m_t1_z2 = BIT(data, 7); -} - - -//------------------------------------------------- -// z5_t1_r - -//------------------------------------------------- - -READ8_MEMBER( abc99_device::z5_t1_r ) -{ - return m_t1_z5; -} diff --git a/src/mess/machine/abc99.h b/src/mess/machine/abc99.h deleted file mode 100644 index de47c7ed1a5..00000000000 --- a/src/mess/machine/abc99.h +++ /dev/null @@ -1,117 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Curt Coder -/********************************************************************** - - Luxor ABC-99 keyboard and mouse emulation - - Copyright MESS Team. - Visit http://mamedev.org for licensing and usage restrictions. - -*********************************************************************/ - -#pragma once - -#ifndef __ABC99__ -#define __ABC99__ - -#include "emu.h" -#include "cpu/mcs48/mcs48.h" -#include "machine/abckb.h" -#include "sound/speaker.h" - - - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -// ======================> abc99_device - -class abc99_device : public device_t, - public abc_keyboard_interface -{ -public: - // construction/destruction - abc99_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // optional information overrides - virtual const rom_entry *device_rom_region() const; - virtual machine_config_constructor device_mconfig_additions() const; - virtual ioport_constructor device_input_ports() const; - - // abc_keyboard_interface overrides - virtual void txd_w(int state); - - DECLARE_INPUT_CHANGED_MEMBER( keyboard_reset ); - - DECLARE_WRITE8_MEMBER( z2_led_w ); - DECLARE_WRITE8_MEMBER( z2_p1_w ); - DECLARE_READ8_MEMBER( z2_p2_r ); - DECLARE_READ8_MEMBER( z2_t0_r ); - DECLARE_READ8_MEMBER( z2_t1_r ); - DECLARE_READ8_MEMBER( z5_p1_r ); - DECLARE_WRITE8_MEMBER( z5_p2_w ); - DECLARE_READ8_MEMBER( z5_t1_r ); - -protected: - // device-level overrides - virtual void device_start(); - virtual void device_reset(); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); - -private: - enum - { - TIMER_SERIAL, - TIMER_MOUSE - }; - - enum - { - LED_1 = 0, - LED_2, - LED_3, - LED_4, - LED_5, - LED_6, - LED_7, - LED_8, - LED_INS, - LED_ALT, - LED_CAPS_LOCK - }; - - inline void serial_input(); - inline void serial_output(int state); - inline void serial_clock(); - inline void key_down(int state); - inline void scan_mouse(); - - emu_timer *m_serial_timer; - emu_timer *m_mouse_timer; - - required_device<cpu_device> m_maincpu; - required_device<cpu_device> m_mousecpu; - required_device<speaker_sound_device> m_speaker; - required_ioport m_z14; - required_ioport m_mouseb; - - int m_si; - int m_si_en; - int m_so_z2; - int m_so_z5; - int m_keydown; - int m_t1_z2; - int m_t1_z5; - int m_led_en; - int m_reset; - int m_txd; -}; - - -// device type definition -extern const device_type ABC99; - - - -#endif diff --git a/src/mess/machine/abckb.c b/src/mess/machine/abckb.c deleted file mode 100644 index 60319fd7ecd..00000000000 --- a/src/mess/machine/abckb.c +++ /dev/null @@ -1,139 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Curt Coder -/********************************************************************** - - Luxor ABC 800/802/806/1600 keyboard port emulation - - Copyright MESS Team. - Visit http://mamedev.org for licensing and usage restrictions. - -**********************************************************************/ - -#include "abckb.h" - -// supported devices -#include "machine/abc800kb.h" -#include "machine/abc77.h" -#include "machine/abc99.h" - - -//************************************************************************** -// DEVICE DEFINITIONS -//************************************************************************** - -// device type definition -const device_type ABC_KEYBOARD_PORT = &device_creator<abc_keyboard_port_device>; - - - -//************************************************************************** -// CARD INTERFACE -//************************************************************************** - -//------------------------------------------------- -// abc_keyboard_interface - constructor -//------------------------------------------------- - -abc_keyboard_interface::abc_keyboard_interface(const machine_config &mconfig, device_t &device) - : device_slot_card_interface(mconfig,device) -{ - m_slot = dynamic_cast<abc_keyboard_port_device *>(device.owner()); -} - - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -//------------------------------------------------- -// abc_keyboard_port_device - constructor -//------------------------------------------------- - -abc_keyboard_port_device::abc_keyboard_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - device_t(mconfig, ABC_KEYBOARD_PORT, "Luxor ABC keyboard port", tag, owner, clock, "abc_keyboard_port", __FILE__), - device_slot_interface(mconfig, *this), - m_out_rx_handler(*this), - m_out_trxc_handler(*this), - m_out_keydown_handler(*this) -{ -} - - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void abc_keyboard_port_device::device_start() -{ - m_card = dynamic_cast<abc_keyboard_interface *>(get_card_device()); - - // resolve callbacks - m_out_rx_handler.resolve_safe(); - m_out_trxc_handler.resolve_safe(); - m_out_keydown_handler.resolve_safe(); -} - - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void abc_keyboard_port_device::device_reset() -{ - if (m_card != NULL) - get_card_device()->reset(); -} - - -//------------------------------------------------- -// write_rx - -//------------------------------------------------- - -WRITE_LINE_MEMBER( abc_keyboard_port_device::write_rx ) -{ - m_out_rx_handler(state); -} - - -//------------------------------------------------- -// txd_w - -//------------------------------------------------- - -WRITE_LINE_MEMBER( abc_keyboard_port_device::txd_w ) -{ - if (m_card != NULL) - m_card->txd_w(state); -} - - -//------------------------------------------------- -// trxc_w - -//------------------------------------------------- - -WRITE_LINE_MEMBER( abc_keyboard_port_device::trxc_w ) -{ - m_out_trxc_handler(state); -} - - -//------------------------------------------------- -// keydown_w - -//------------------------------------------------- - -WRITE_LINE_MEMBER( abc_keyboard_port_device::keydown_w ) -{ - m_out_keydown_handler(state); -} - - - -//************************************************************************** -// SLOT INTERFACE -//************************************************************************** - -SLOT_INTERFACE_START( abc_keyboard_devices ) - SLOT_INTERFACE("abc800", ABC800_KEYBOARD) - SLOT_INTERFACE("abc55", ABC55) - SLOT_INTERFACE("abc77", ABC77) - SLOT_INTERFACE("abc99", ABC99) -SLOT_INTERFACE_END diff --git a/src/mess/machine/abckb.h b/src/mess/machine/abckb.h deleted file mode 100644 index f9c050b11ed..00000000000 --- a/src/mess/machine/abckb.h +++ /dev/null @@ -1,100 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Curt Coder -/********************************************************************** - - Luxor ABC 800/802/806/1600 keyboard port emulation - - Copyright MESS Team. - Visit http://mamedev.org for licensing and usage restrictions. - -**********************************************************************/ - -#pragma once - -#ifndef __ABC_KEYBOARD_PORT__ -#define __ABC_KEYBOARD_PORT__ - -#include "emu.h" - - - -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_ABC_KEYBOARD_PORT_ADD(_tag, _def_slot) \ - MCFG_DEVICE_ADD(_tag, ABC_KEYBOARD_PORT, 0) \ - MCFG_DEVICE_SLOT_INTERFACE(abc_keyboard_devices, _def_slot, false) - -#define MCFG_ABC_KEYBOARD_OUT_RX_HANDLER(_devcb) \ - devcb = &abc_keyboard_port_device::set_out_rx_handler(*device, DEVCB2_##_devcb); - -#define MCFG_ABC_KEYBOARD_OUT_TRXC_HANDLER(_devcb) \ - devcb = &abc_keyboard_port_device::set_out_trxc_handler(*device, DEVCB2_##_devcb); - -#define MCFG_ABC_KEYBOARD_OUT_KEYDOWN_HANDLER(_devcb) \ - devcb = &abc_keyboard_port_device::set_out_keydown_handler(*device, DEVCB2_##_devcb); - - - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class abc_keyboard_interface; - -class abc_keyboard_port_device : public device_t, - public device_slot_interface -{ -public: - // construction/destruction - abc_keyboard_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - template<class _Object> static devcb2_base &set_out_rx_handler(device_t &device, _Object object) { return downcast<abc_keyboard_port_device &>(device).m_out_rx_handler.set_callback(object); } - template<class _Object> static devcb2_base &set_out_trxc_handler(device_t &device, _Object object) { return downcast<abc_keyboard_port_device &>(device).m_out_trxc_handler.set_callback(object); } - template<class _Object> static devcb2_base &set_out_keydown_handler(device_t &device, _Object object) { return downcast<abc_keyboard_port_device &>(device).m_out_keydown_handler.set_callback(object); } - - // computer interface - DECLARE_WRITE_LINE_MEMBER( txd_w ); - - // peripheral interface - DECLARE_WRITE_LINE_MEMBER( write_rx ); - DECLARE_WRITE_LINE_MEMBER( trxc_w ); - DECLARE_WRITE_LINE_MEMBER( keydown_w ); - -protected: - // device-level overrides - virtual void device_start(); - virtual void device_reset(); - - devcb2_write_line m_out_rx_handler; - devcb2_write_line m_out_trxc_handler; - devcb2_write_line m_out_keydown_handler; - - abc_keyboard_interface *m_card; -}; - - -class abc_keyboard_interface : public device_slot_card_interface -{ -public: - // construction/destruction - abc_keyboard_interface(const machine_config &mconfig, device_t &device); - - virtual void txd_w(int state) { }; - -protected: - abc_keyboard_port_device *m_slot; -}; - - -// device type definition -extern const device_type ABC_KEYBOARD_PORT; - - -// supported devices -SLOT_INTERFACE_EXTERN( abc_keyboard_devices ); - - - -#endif diff --git a/src/mess/machine/amstrad.c b/src/mess/machine/amstrad.c index b3650359a7d..48afac95ae1 100644 --- a/src/mess/machine/amstrad.c +++ b/src/mess/machine/amstrad.c @@ -41,8 +41,8 @@ This gives a total of 19968 NOPs per frame. #include "machine/mc146818.h" #include "machine/upd765.h" #include "bus/centronics/ctronics.h" -#include "machine/cpc_rom.h" -#include "machine/mface2.h" +#include "bus/cpc/cpc_rom.h" +#include "bus/cpc/mface2.h" #include "imagedev/cassette.h" #include "imagedev/snapquik.h" #include "includes/amstrad.h" diff --git a/src/mess/machine/bml3bus.c b/src/mess/machine/bml3bus.c deleted file mode 100644 index c5eeea04305..00000000000 --- a/src/mess/machine/bml3bus.c +++ /dev/null @@ -1,257 +0,0 @@ -/*************************************************************************** - - bml3bus.c - Hitachi MB-6890 slot bus and card emulation - - Adapted from a2bus by Jonathan Edwards - - Pinout (/ indicates an inverted signal, ie, one that would have a bar over it - on a schematic diagram) - - out <-> CPU CPU <-> out - ---------- ----------- - +5V <-- 1 2 <-> GND - D0 <-> 3 4 <-> D1 - D2 <-> 5 6 <-> D3 - D4 <-> 7 8 <-> D5 - D6 <-> 9 10 <-> D7 - A0 <-> 11 12 <-> A1 - A2 <-> 13 14 <-> A3 - A4 <-> 15 16 <-> A5 - A6 <-> 17 18 <-> A7 - A8 <-> 19 20 <-> A9 - A10 <-> 21 22 <-> A11 - A12 <-> 23 24 <-> A13 - A14 <-> 25 26 <-> A15 - BA <-- 27 28 --> BS - /ROM-KIL --> 29 30 --> EXROM-KIL - R/W IN --> 31 32 --> /EX-I/O - R/W OUT <-- 33 34 --> VMA OUT - E <-- 35 36 --> Q - /RES <-- 37 38 <-- /NMI - /IRQ --> 39 40 <-- /FIRQ - /HALT --> 41 42 <-- /VMA CTRL - /DMA --> 43 44 --> /BANK-SW - HALT ACK <-- 45 46 <-- SOUND IN - 16MCK <-- 47 48 <-> GND - 2MCK <-- 49 50 <-> GND - -5V <-- 51 52 --> /EX-I/O2 - -12V <-- 53 54 --> +12V - GND <-> 55 56 --> +5V - -***************************************************************************/ - -#include "emu.h" -#include "emuopts.h" -#include "machine/bml3bus.h" - - -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -const device_type BML3BUS_SLOT = &device_creator<bml3bus_slot_device>; - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -//------------------------------------------------- -// bml3bus_slot_device - constructor -//------------------------------------------------- -bml3bus_slot_device::bml3bus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - device_t(mconfig, BML3BUS_SLOT, "Hitachi MB-6890 Slot", tag, owner, clock, "bml3bus_slot", __FILE__), - device_slot_interface(mconfig, *this) -{ -} - -bml3bus_slot_device::bml3bus_slot_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) : - device_t(mconfig, type, name, tag, owner, clock, shortname, source), - device_slot_interface(mconfig, *this) -{ -} - -void bml3bus_slot_device::static_set_bml3bus_slot(device_t &device, const char *tag, const char *slottag) -{ - bml3bus_slot_device &bml3bus_card = dynamic_cast<bml3bus_slot_device &>(device); - bml3bus_card.m_bml3bus_tag = tag; - bml3bus_card.m_bml3bus_slottag = slottag; -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void bml3bus_slot_device::device_start() -{ - device_bml3bus_card_interface *dev = dynamic_cast<device_bml3bus_card_interface *>(get_card_device()); - - if (dev) device_bml3bus_card_interface::static_set_bml3bus_tag(*dev, m_bml3bus_tag, m_bml3bus_slottag); -} - -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -const device_type BML3BUS = &device_creator<bml3bus_device>; - -void bml3bus_device::static_set_cputag(device_t &device, const char *tag) -{ - bml3bus_device &bml3bus = downcast<bml3bus_device &>(device); - bml3bus.m_cputag = tag; -} - -//------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void bml3bus_device::device_config_complete() -{ - // inherit a copy of the static data - const bml3bus_interface *intf = reinterpret_cast<const bml3bus_interface *>(static_config()); - if (intf != NULL) - { - *static_cast<bml3bus_interface *>(this) = *intf; - } - - // or initialize to defaults if none provided - else - { - memset(&m_out_nmi_cb, 0, sizeof(m_out_nmi_cb)); - memset(&m_out_irq_cb, 0, sizeof(m_out_irq_cb)); - memset(&m_out_firq_cb, 0, sizeof(m_out_firq_cb)); - } -} - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -//------------------------------------------------- -// bml3bus_device - constructor -//------------------------------------------------- - -bml3bus_device::bml3bus_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - device_t(mconfig, BML3BUS, "Hitachi MB-6890 Bus", tag, owner, clock, "bml3bus", __FILE__) -{ -} - -bml3bus_device::bml3bus_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) : - device_t(mconfig, type, name, tag, owner, clock, shortname, source) -{ -} -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void bml3bus_device::device_start() -{ - m_maincpu = machine().device<cpu_device>(m_cputag); - - // resolve callbacks - m_out_nmi_func.resolve(m_out_nmi_cb, *this); - m_out_irq_func.resolve(m_out_irq_cb, *this); - m_out_firq_func.resolve(m_out_firq_cb, *this); - - // clear slots - for (int i = 0; i < BML3BUS_MAX_SLOTS; i++) - { - m_device_list[i] = NULL; - } -} - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void bml3bus_device::device_reset() -{ -} - -device_bml3bus_card_interface *bml3bus_device::get_bml3bus_card(int slot) -{ - if (slot < 0) - { - return NULL; - } - - return m_device_list[slot]; -} - -void bml3bus_device::add_bml3bus_card(int slot, device_bml3bus_card_interface *card) -{ - m_device_list[slot] = card; -} - -void bml3bus_device::set_nmi_line(int state) -{ - m_out_nmi_func(state); -} - -void bml3bus_device::set_irq_line(int state) -{ - m_out_irq_func(state); -} - -void bml3bus_device::set_firq_line(int state) -{ - m_out_firq_func(state); -} - -// interrupt request from bml3bus card -WRITE_LINE_MEMBER( bml3bus_device::nmi_w ) { m_out_nmi_func(state); } -WRITE_LINE_MEMBER( bml3bus_device::irq_w ) { m_out_irq_func(state); } -WRITE_LINE_MEMBER( bml3bus_device::firq_w ) { m_out_firq_func(state); } - -//************************************************************************** -// DEVICE CONFIG BML3BUS CARD INTERFACE -//************************************************************************** - - -//************************************************************************** -// DEVICE BML3BUS CARD INTERFACE -//************************************************************************** - -//------------------------------------------------- -// device_bml3bus_card_interface - constructor -//------------------------------------------------- - -device_bml3bus_card_interface::device_bml3bus_card_interface(const machine_config &mconfig, device_t &device) - : device_slot_card_interface(mconfig, device), - m_bml3bus(NULL), - m_bml3bus_tag(NULL) -{ -} - - -//------------------------------------------------- -// ~device_bml3bus_card_interface - destructor -//------------------------------------------------- - -device_bml3bus_card_interface::~device_bml3bus_card_interface() -{ -} - -void device_bml3bus_card_interface::static_set_bml3bus_tag(device_t &device, const char *tag, const char *slottag) -{ - device_bml3bus_card_interface &bml3bus_card = dynamic_cast<device_bml3bus_card_interface &>(device); - bml3bus_card.m_bml3bus_tag = tag; - bml3bus_card.m_bml3bus_slottag = slottag; -} - -void device_bml3bus_card_interface::set_bml3bus_device() -{ - // extract the slot number from the last digit of the slot tag - int tlen = strlen(m_bml3bus_slottag); - - m_slot = (m_bml3bus_slottag[tlen-1] - '1'); - - if (m_slot < 0 || m_slot >= BML3BUS_MAX_SLOTS) - { - fatalerror("Slot %x out of range for Hitachi MB-6890 Bus\n", m_slot); - } - - m_bml3bus = dynamic_cast<bml3bus_device *>(device().machine().device(m_bml3bus_tag)); - m_bml3bus->add_bml3bus_card(m_slot, this); -} diff --git a/src/mess/machine/bml3bus.h b/src/mess/machine/bml3bus.h deleted file mode 100644 index 66a5660bbd2..00000000000 --- a/src/mess/machine/bml3bus.h +++ /dev/null @@ -1,151 +0,0 @@ -/*************************************************************************** - - bml3bus.h - Hitachi MB-6890 slot bus and card emulation - - Adapted from a2bus by Jonathan Edwards - -***************************************************************************/ - -#pragma once - -#ifndef __BML3BUS_H__ -#define __BML3BUS_H__ - -#include "emu.h" - -#define BML3BUS_MAX_SLOTS 6 - -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_BML3BUS_BUS_ADD(_tag, _cputag, _config) \ - MCFG_DEVICE_ADD(_tag, BML3BUS, 0) \ - MCFG_DEVICE_CONFIG(_config) \ - bml3bus_device::static_set_cputag(*device, _cputag); -#define MCFG_BML3BUS_SLOT_ADD(_nbtag, _tag, _slot_intf, _def_slot) \ - MCFG_DEVICE_ADD(_tag, BML3BUS_SLOT, 0) \ - MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \ - bml3bus_slot_device::static_set_bml3bus_slot(*device, _nbtag, _tag); -#define MCFG_BML3BUS_SLOT_REMOVE(_tag) \ - MCFG_DEVICE_REMOVE(_tag) - -#define MCFG_BML3BUS_ONBOARD_ADD(_nbtag, _tag, _dev_type) \ - MCFG_DEVICE_ADD(_tag, _dev_type, 0) \ - device_bml3bus_card_interface::static_set_bml3bus_tag(*device, _nbtag, _tag); - -#define MCFG_BML3BUS_BUS_REMOVE(_tag) \ - MCFG_DEVICE_REMOVE(_tag) - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class bml3bus_device; - -class bml3bus_slot_device : public device_t, - public device_slot_interface -{ -public: - // construction/destruction - bml3bus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - bml3bus_slot_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); - - // device-level overrides - virtual void device_start(); - - // inline configuration - static void static_set_bml3bus_slot(device_t &device, const char *tag, const char *slottag); -protected: - // configuration - const char *m_bml3bus_tag, *m_bml3bus_slottag; -}; - -// device type definition -extern const device_type BML3BUS_SLOT; - -// ======================> bml3bus_interface - -struct bml3bus_interface -{ - devcb_write_line m_out_nmi_cb; - devcb_write_line m_out_irq_cb; - devcb_write_line m_out_firq_cb; -}; - -class device_bml3bus_card_interface; -// ======================> bml3bus_device -class bml3bus_device : public device_t, - public bml3bus_interface -{ -public: - // construction/destruction - bml3bus_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - bml3bus_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); - // inline configuration - static void static_set_cputag(device_t &device, const char *tag); - - void add_bml3bus_card(int slot, device_bml3bus_card_interface *card); - device_bml3bus_card_interface *get_bml3bus_card(int slot); - - void set_nmi_line(int state); - void set_irq_line(int state); - void set_firq_line(int state); - - DECLARE_WRITE_LINE_MEMBER( nmi_w ); - DECLARE_WRITE_LINE_MEMBER( irq_w ); - DECLARE_WRITE_LINE_MEMBER( firq_w ); - -protected: - // device-level overrides - virtual void device_start(); - virtual void device_reset(); - virtual void device_config_complete(); - - // internal state - cpu_device *m_maincpu; - - devcb_resolved_write_line m_out_nmi_func; - devcb_resolved_write_line m_out_irq_func; - devcb_resolved_write_line m_out_firq_func; - - device_bml3bus_card_interface *m_device_list[BML3BUS_MAX_SLOTS]; - const char *m_cputag; -}; - - -// device type definition -extern const device_type BML3BUS; - -// ======================> device_bml3bus_card_interface - -// class representing interface-specific live bml3bus card -class device_bml3bus_card_interface : public device_slot_card_interface -{ - friend class bml3bus_device; -public: - // construction/destruction - device_bml3bus_card_interface(const machine_config &mconfig, device_t &device); - virtual ~device_bml3bus_card_interface(); - - device_bml3bus_card_interface *next() const { return m_next; } - - void set_bml3bus_device(); - - void raise_slot_nmi() { m_bml3bus->set_nmi_line(ASSERT_LINE); } - void lower_slot_nmi() { m_bml3bus->set_nmi_line(CLEAR_LINE); } - void raise_slot_irq() { m_bml3bus->set_irq_line(ASSERT_LINE); } - void lower_slot_irq() { m_bml3bus->set_irq_line(CLEAR_LINE); } - void raise_slot_firq() { m_bml3bus->set_firq_line(ASSERT_LINE); } - void lower_slot_firq() { m_bml3bus->set_firq_line(CLEAR_LINE); } - - // inline configuration - static void static_set_bml3bus_tag(device_t &device, const char *tag, const char *slottag); -public: - bml3bus_device *m_bml3bus; - const char *m_bml3bus_tag, *m_bml3bus_slottag; - int m_slot; - device_bml3bus_card_interface *m_next; -}; - -#endif /* __BML3BUS_H__ */ diff --git a/src/mess/machine/bml3kanji.c b/src/mess/machine/bml3kanji.c deleted file mode 100644 index e13f07e28ff..00000000000 --- a/src/mess/machine/bml3kanji.c +++ /dev/null @@ -1,99 +0,0 @@ -/********************************************************************* - - bml3kanji.c - - Hitachi MP-9740 (?) kanji character ROM for the MB-689x - -*********************************************************************/ - -#include "emu.h" -#include "bml3kanji.h" - - -/*************************************************************************** - PARAMETERS -***************************************************************************/ - -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -const device_type BML3BUS_KANJI = &device_creator<bml3bus_kanji_device>; - -#define KANJI_ROM_REGION "kanji_rom" - -ROM_START( kanji ) - ROM_REGION( 0x20000, KANJI_ROM_REGION, ROMREGION_ERASEFF ) - ROM_LOAD("kanji.rom", 0x00000, 0x20000, BAD_DUMP CRC(de99a726) SHA1(65fead5d0d779b242f6e0ac25fcc9899dc343101)) -ROM_END - -MACHINE_CONFIG_FRAGMENT( kanji ) - // nothing to add -MACHINE_CONFIG_END - -/*************************************************************************** - FUNCTION PROTOTYPES -***************************************************************************/ - -//------------------------------------------------- -// machine_config_additions - device-specific -// machine configurations -//------------------------------------------------- - -machine_config_constructor bml3bus_kanji_device::device_mconfig_additions() const -{ - return MACHINE_CONFIG_NAME( kanji ); -} - -//------------------------------------------------- -// rom_region - device-specific ROM region -//------------------------------------------------- - -const rom_entry *bml3bus_kanji_device::device_rom_region() const -{ - return ROM_NAME( kanji ); -} - -READ8_MEMBER( bml3bus_kanji_device::bml3_kanji_r ) -{ - return m_rom[((UINT32)m_kanji_addr << 1) + offset]; -} - -WRITE8_MEMBER( bml3bus_kanji_device::bml3_kanji_w ) -{ - m_kanji_addr &= (0xff << (offset*8)); - m_kanji_addr |= (data << ((offset^1)*8)); -} - - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -bml3bus_kanji_device::bml3bus_kanji_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - device_t(mconfig, BML3BUS_KANJI, "Hitachi MP-9740 Kanji Character ROM Card", tag, owner, clock, "bml3kanji", __FILE__), - device_bml3bus_card_interface(mconfig, *this) -{ -} - - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void bml3bus_kanji_device::device_start() -{ - // set_bml3bus_device makes m_slot valid - set_bml3bus_device(); - - m_rom = memregion(KANJI_ROM_REGION)->base(); - - // install into memory - address_space &space_prg = machine().firstcpu->space(AS_PROGRAM); - space_prg.install_readwrite_handler(0xff75, 0xff76, read8_delegate( FUNC(bml3bus_kanji_device::bml3_kanji_r), this), write8_delegate(FUNC(bml3bus_kanji_device::bml3_kanji_w), this) ); -} - -void bml3bus_kanji_device::device_reset() -{ - m_kanji_addr = 0; -} diff --git a/src/mess/machine/bml3kanji.h b/src/mess/machine/bml3kanji.h deleted file mode 100644 index 3f5c009eeba..00000000000 --- a/src/mess/machine/bml3kanji.h +++ /dev/null @@ -1,47 +0,0 @@ -/********************************************************************* - - bml3kanji.h - - Hitachi MP-9740 (?) kanji character ROM for the MB-689x - -*********************************************************************/ - -#ifndef __BML3BUS_KANJI__ -#define __BML3BUS_KANJI__ - -#include "emu.h" -#include "machine/bml3bus.h" - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class bml3bus_kanji_device: - public device_t, - public device_bml3bus_card_interface -{ -public: - // construction/destruction - bml3bus_kanji_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // optional information overrides - virtual machine_config_constructor device_mconfig_additions() const; - virtual const rom_entry *device_rom_region() const; - - DECLARE_READ8_MEMBER(bml3_kanji_r); - DECLARE_WRITE8_MEMBER(bml3_kanji_w); - -protected: - virtual void device_start(); - virtual void device_reset(); - - UINT16 m_kanji_addr; - -private: - UINT8 *m_rom; -}; - -// device type definition -extern const device_type BML3BUS_KANJI; - -#endif /* __BML3BUS_KANJI__ */ diff --git a/src/mess/machine/bml3mp1802.c b/src/mess/machine/bml3mp1802.c deleted file mode 100644 index 3d20f77f122..00000000000 --- a/src/mess/machine/bml3mp1802.c +++ /dev/null @@ -1,155 +0,0 @@ -/********************************************************************* - - bml3mp1802.c - - Hitachi MP-1802 floppy disk controller card for the MB-6890 - Hitachi MP-3550 floppy drive is attached - -*********************************************************************/ - -#include "emu.h" -#include "bml3mp1802.h" - - -/*************************************************************************** - PARAMETERS -***************************************************************************/ - -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -const device_type BML3BUS_MP1802 = &device_creator<bml3bus_mp1802_device>; - -static const floppy_interface bml3_mp1802_floppy_interface = -{ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - FLOPPY_STANDARD_5_25_DSDD, - LEGACY_FLOPPY_OPTIONS_NAME(default), - NULL -}; - -WRITE_LINE_MEMBER( bml3bus_mp1802_device::bml3_wd17xx_intrq_w ) -{ - if (state) { - m_bml3bus->set_nmi_line(PULSE_LINE); - } -} - -const wd17xx_interface bml3_wd17xx_interface = -{ - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, bml3bus_mp1802_device, bml3_wd17xx_intrq_w), - DEVCB_NULL, - {FLOPPY_0, FLOPPY_1} -}; - - -#define MP1802_ROM_REGION "mp1802_rom" - -ROM_START( mp1802 ) - ROM_REGION(0x10000, MP1802_ROM_REGION, 0) - // MP-1802 disk controller ROM, which replaces part of the system ROM - ROM_LOAD( "mp1802.rom", 0xf800, 0x800, BAD_DUMP CRC(8d0dc101) SHA1(92f7d1cebecafa7472e45c4999520de5c01c6dbc)) -ROM_END - -MACHINE_CONFIG_FRAGMENT( mp1802 ) - MCFG_MB8866_ADD("wd17xx", bml3_wd17xx_interface ) - MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(bml3_mp1802_floppy_interface) -MACHINE_CONFIG_END - -/*************************************************************************** - FUNCTION PROTOTYPES -***************************************************************************/ - -//------------------------------------------------- -// machine_config_additions - device-specific -// machine configurations -//------------------------------------------------- - -machine_config_constructor bml3bus_mp1802_device::device_mconfig_additions() const -{ - return MACHINE_CONFIG_NAME( mp1802 ); -} - -//------------------------------------------------- -// rom_region - device-specific ROM region -//------------------------------------------------- - -const rom_entry *bml3bus_mp1802_device::device_rom_region() const -{ - return ROM_NAME( mp1802 ); -} - -READ8_MEMBER( bml3bus_mp1802_device::bml3_mp1802_r) -{ - return wd17xx_drq_r(m_wd17xx) ? 0x00 : 0x80; -} - -WRITE8_MEMBER( bml3bus_mp1802_device::bml3_mp1802_w) -{ - int drive = data & 0x03; - int side = BIT(data, 4); - int motor = BIT(data, 3); - const char *floppy_name = NULL; - switch (drive) { - case 0: - floppy_name = FLOPPY_0; - break; - case 1: - floppy_name = FLOPPY_1; - break; - case 2: - floppy_name = FLOPPY_2; - break; - case 3: - floppy_name = FLOPPY_3; - break; - } - device_t *floppy = subdevice(floppy_name); - wd17xx_set_drive(m_wd17xx,drive); - floppy_mon_w(floppy, !motor); - floppy_drive_set_ready_state(floppy, ASSERT_LINE, 0); - wd17xx_set_side(m_wd17xx,side); -} - - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -bml3bus_mp1802_device::bml3bus_mp1802_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - device_t(mconfig, BML3BUS_MP1802, "Hitachi MP-1802 Floppy Controller Card", tag, owner, clock, "bml3mp1802", __FILE__), - device_bml3bus_card_interface(mconfig, *this), - m_wd17xx(*this, "wd17xx") -{ -} - - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void bml3bus_mp1802_device::device_start() -{ - // set_bml3bus_device makes m_slot valid - set_bml3bus_device(); - - m_rom = memregion(MP1802_ROM_REGION)->base(); - - // install into memory - address_space &space_prg = machine().firstcpu->space(AS_PROGRAM); - space_prg.install_legacy_readwrite_handler(m_wd17xx, 0xff00, 0xff03, FUNC(wd17xx_r), FUNC(wd17xx_w)); - space_prg.install_readwrite_handler(0xff04, 0xff04, read8_delegate( FUNC(bml3bus_mp1802_device::bml3_mp1802_r), this), write8_delegate(FUNC(bml3bus_mp1802_device::bml3_mp1802_w), this) ); - // overwriting the main ROM (rather than using e.g. install_rom) should mean that bank switches for RAM expansion still work... - UINT8 *mainrom = device().machine().root_device().memregion("maincpu")->base(); - memcpy(mainrom + 0xf800, m_rom + 0xf800, 0x800); -} - -void bml3bus_mp1802_device::device_reset() -{ -} diff --git a/src/mess/machine/bml3mp1802.h b/src/mess/machine/bml3mp1802.h deleted file mode 100644 index ae6b829fb21..00000000000 --- a/src/mess/machine/bml3mp1802.h +++ /dev/null @@ -1,50 +0,0 @@ -/********************************************************************* - - bml3mp1802.h - - Hitachi MP-1802 floppy disk controller card for the MB-6890 - Hitachi MP-3550 floppy drive is attached - -*********************************************************************/ - -#ifndef __BML3BUS_MP1802__ -#define __BML3BUS_MP1802__ - -#include "emu.h" -#include "machine/bml3bus.h" -#include "imagedev/flopdrv.h" -#include "machine/wd17xx.h" - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class bml3bus_mp1802_device: - public device_t, - public device_bml3bus_card_interface -{ -public: - // construction/destruction - bml3bus_mp1802_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // optional information overrides - virtual machine_config_constructor device_mconfig_additions() const; - virtual const rom_entry *device_rom_region() const; - - DECLARE_READ8_MEMBER(bml3_mp1802_r); - DECLARE_WRITE8_MEMBER(bml3_mp1802_w); - DECLARE_WRITE_LINE_MEMBER(bml3_wd17xx_intrq_w); -protected: - virtual void device_start(); - virtual void device_reset(); - - required_device<mb8866_device> m_wd17xx; - -private: - UINT8 *m_rom; -}; - -// device type definition -extern const device_type BML3BUS_MP1802; - -#endif /* __BML3BUS_MP1802__ */ diff --git a/src/mess/machine/bml3mp1805.c b/src/mess/machine/bml3mp1805.c deleted file mode 100644 index 2fb71c1605a..00000000000 --- a/src/mess/machine/bml3mp1805.c +++ /dev/null @@ -1,178 +0,0 @@ -/********************************************************************* - - bml3mp1805.c - - Hitachi MP-1805 floppy disk controller card for the MB-6890 - Floppy drive is attached - -*********************************************************************/ - -#include "emu.h" -#include "bml3mp1805.h" - - -/*************************************************************************** - PARAMETERS -***************************************************************************/ - -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -const device_type BML3BUS_MP1805 = &device_creator<bml3bus_mp1805_device>; - -static const floppy_interface bml3_mp1805_floppy_interface = -{ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - FLOPPY_STANDARD_3_SSDD, - LEGACY_FLOPPY_OPTIONS_NAME(default), - NULL -}; - -WRITE_LINE_MEMBER( bml3bus_mp1805_device::bml3_mc6843_intrq_w ) -{ - if (state) { - m_bml3bus->set_nmi_line(PULSE_LINE); - } -} - -const mc6843_interface bml3_6843_if = -{ - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, bml3bus_mp1805_device, bml3_mc6843_intrq_w) -}; - - -#define MP1805_ROM_REGION "mp1805_rom" - -ROM_START( mp1805 ) - ROM_REGION(0x10000, MP1805_ROM_REGION, 0) - // MP-1805 disk controller ROM, which replaces part of the system ROM - ROM_LOAD( "mp1805.rom", 0xf800, 0x0800, BAD_DUMP CRC(b532d8d9) SHA1(6f1160356d5bf64b5926b1fdb60db414edf65f22)) -ROM_END - -MACHINE_CONFIG_FRAGMENT( mp1805 ) - MCFG_MC6843_ADD( "mc6843", bml3_6843_if ) - MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(bml3_mp1805_floppy_interface) -MACHINE_CONFIG_END - -/*************************************************************************** - FUNCTION PROTOTYPES -***************************************************************************/ - -//------------------------------------------------- -// machine_config_additions - device-specific -// machine configurations -//------------------------------------------------- - -machine_config_constructor bml3bus_mp1805_device::device_mconfig_additions() const -{ - return MACHINE_CONFIG_NAME( mp1805 ); -} - -//------------------------------------------------- -// rom_region - device-specific ROM region -//------------------------------------------------- - -const rom_entry *bml3bus_mp1805_device::device_rom_region() const -{ - return ROM_NAME( mp1805 ); -} - -READ8_MEMBER( bml3bus_mp1805_device::bml3_mp1805_r) -{ - // TODO: read supported or not? - // return mc6843_drq_r(m_mc6843) ? 0x00 : 0x80; - return -1; -} - -WRITE8_MEMBER( bml3bus_mp1805_device::bml3_mp1805_w) -{ - // b7 b6 b5 b4 b3 b2 b1 b0 - // MT ? ? ? D3 D2 D1 D0 - // MT: 0=motor off, 1=motor on - // Dn: 1=select drive <n> - int drive_select = data & 0x0f; - int drive; - // TODO: MESS UI for flipping disk? Note that D88 images are double-sided, but the physical drive is single-sided - int side = 0; - int motor = BIT(data, 7); - const char *floppy_name = NULL; - switch (drive_select) { - case 1: - drive = 0; - break; - case 2: - drive = 1; - break; - case 4: - drive = 2; - break; - case 8: - drive = 3; - break; - default: - // TODO: what's the correct behaviour if more than one drive select bit is set? Or no bit set? - drive = 0; - break; - } - switch (drive) { - case 0: - floppy_name = FLOPPY_0; - break; - case 1: - floppy_name = FLOPPY_1; - break; - case 2: - floppy_name = FLOPPY_2; - break; - case 3: - floppy_name = FLOPPY_3; - break; - } - device_t *floppy = subdevice(floppy_name); - m_mc6843->set_drive(drive); - floppy_mon_w(floppy, motor); - floppy_drive_set_ready_state(floppy, ASSERT_LINE, 0); - m_mc6843->set_side(side); -} - - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -bml3bus_mp1805_device::bml3bus_mp1805_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - device_t(mconfig, BML3BUS_MP1805, "Hitachi MP-1805 Floppy Controller Card", tag, owner, clock, "bml3mp1805", __FILE__), - device_bml3bus_card_interface(mconfig, *this), - m_mc6843(*this, "mc6843") -{ -} - - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void bml3bus_mp1805_device::device_start() -{ - // set_bml3bus_device makes m_slot valid - set_bml3bus_device(); - - m_rom = memregion(MP1805_ROM_REGION)->base(); - - // install into memory - address_space &space_prg = machine().firstcpu->space(AS_PROGRAM); - space_prg.install_readwrite_handler(0xff18, 0xff1f, read8_delegate( FUNC(mc6843_device::read), (mc6843_device*)m_mc6843), write8_delegate(FUNC(mc6843_device::write), (mc6843_device*)m_mc6843) ); - space_prg.install_readwrite_handler(0xff20, 0xff20, read8_delegate( FUNC(bml3bus_mp1805_device::bml3_mp1805_r), this), write8_delegate(FUNC(bml3bus_mp1805_device::bml3_mp1805_w), this) ); - // overwriting the main ROM (rather than using e.g. install_rom) should mean that bank switches for RAM expansion still work... - UINT8 *mainrom = device().machine().root_device().memregion("maincpu")->base(); - memcpy(mainrom + 0xf800, m_rom + 0xf800, 0x800); -} - -void bml3bus_mp1805_device::device_reset() -{ -} diff --git a/src/mess/machine/bml3mp1805.h b/src/mess/machine/bml3mp1805.h deleted file mode 100644 index ba3559e4e78..00000000000 --- a/src/mess/machine/bml3mp1805.h +++ /dev/null @@ -1,52 +0,0 @@ -/********************************************************************* - - bml3mp1805.h - - Hitachi MP-1805 floppy disk controller card for the MB-6890 - Floppy drive is attached - -*********************************************************************/ - -#ifndef __BML3BUS_MP1805__ -#define __BML3BUS_MP1805__ - -#include "emu.h" -#include "machine/bml3bus.h" -#include "imagedev/flopdrv.h" -#include "machine/mc6843.h" - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class bml3bus_mp1805_device: - public device_t, - public device_bml3bus_card_interface -{ -public: - // construction/destruction - bml3bus_mp1805_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // optional information overrides - virtual machine_config_constructor device_mconfig_additions() const; - virtual const rom_entry *device_rom_region() const; - - DECLARE_READ8_MEMBER(bml3_mp1805_r); - DECLARE_WRITE8_MEMBER(bml3_mp1805_w); - - DECLARE_WRITE_LINE_MEMBER( bml3_mc6843_intrq_w ); - -protected: - virtual void device_start(); - virtual void device_reset(); - - required_device<mc6843_device> m_mc6843; - -private: - UINT8 *m_rom; -}; - -// device type definition -extern const device_type BML3BUS_MP1805; - -#endif /* __BML3BUS_MP1805__ */ diff --git a/src/mess/machine/coco_232.c b/src/mess/machine/coco_232.c deleted file mode 100644 index 14cc989f9cd..00000000000 --- a/src/mess/machine/coco_232.c +++ /dev/null @@ -1,90 +0,0 @@ -/*************************************************************************** - - coco_232.c - - Code for emulating the CoCo RS-232 PAK - -***************************************************************************/ - -#include "emu.h" -#include "coco_232.h" - - -/*************************************************************************** - CONSTANTS -***************************************************************************/ - -#define UART_TAG "uart" - -/*************************************************************************** - IMPLEMENTATION -***************************************************************************/ - -static MACHINE_CONFIG_FRAGMENT(coco_rs232) - MCFG_DEVICE_ADD(UART_TAG, MOS6551, 0) - MCFG_MOS6551_XTAL(XTAL_1_8432MHz) -MACHINE_CONFIG_END - -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -const device_type COCO_232 = &device_creator<coco_232_device>; - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -//------------------------------------------------- -// coco_232_device - constructor -//------------------------------------------------- - -coco_232_device::coco_232_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, COCO_232, "CoCo RS-232 PAK", tag, owner, clock, "coco_232", __FILE__), - device_cococart_interface( mconfig, *this ), - m_uart(*this, UART_TAG) -{ -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void coco_232_device::device_start() -{ -} - -//------------------------------------------------- -// machine_config_additions - device-specific -// machine configurations -//------------------------------------------------- - -machine_config_constructor coco_232_device::device_mconfig_additions() const -{ - return MACHINE_CONFIG_NAME( coco_rs232 ); -} - -/*------------------------------------------------- - read --------------------------------------------------*/ - -READ8_MEMBER(coco_232_device::read) -{ - UINT8 result = 0x00; - - if ((offset >= 0x28) && (offset <= 0x2F)) - result = m_uart->read(space, offset - 0x28); - - return result; -} - - -/*------------------------------------------------- - write --------------------------------------------------*/ - -WRITE8_MEMBER(coco_232_device::write) -{ - if ((offset >= 0x28) && (offset <= 0x2F)) - m_uart->write(space, offset - 0x28, data); -} diff --git a/src/mess/machine/coco_232.h b/src/mess/machine/coco_232.h deleted file mode 100644 index ee4dbac2ff0..00000000000 --- a/src/mess/machine/coco_232.h +++ /dev/null @@ -1,40 +0,0 @@ -#pragma once - -#ifndef __COCO_232_H__ -#define __COCO_232_H__ - -#include "emu.h" -#include "machine/cococart.h" -#include "machine/mos6551.h" - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -// ======================> coco_232_device - -class coco_232_device : - public device_t, - public device_cococart_interface -{ -public: - // construction/destruction - coco_232_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // optional information overrides - virtual machine_config_constructor device_mconfig_additions() const; -protected: - // device-level overrides - virtual void device_start(); - virtual DECLARE_READ8_MEMBER(read); - virtual DECLARE_WRITE8_MEMBER(write); -private: - // internal state - required_device<mos6551_device> m_uart; -}; - - -// device type definition -extern const device_type COCO_232; - -#endif /* __COCO_232_H__ */ diff --git a/src/mess/machine/coco_fdc.c b/src/mess/machine/coco_fdc.c deleted file mode 100644 index d8e559c371a..00000000000 --- a/src/mess/machine/coco_fdc.c +++ /dev/null @@ -1,672 +0,0 @@ -/********************************************************************* - - coco_fdc.c - - CoCo/Dragon FDC - - The CoCo and Dragon both use the Western Digital floppy disk controllers. - The CoCo uses either the WD1793 or the WD1773, the Dragon uses the WD2797, - which mostly uses the same command set with some subtle differences, most - notably the 2797 handles disk side select internally. The Dragon Alpha also - uses the WD2797, however as this is a built in interface and not an external - cartrige, it is dealt with in the main coco.c file. - - The wd's variables are mapped to $FF48-$FF4B on the CoCo and on $FF40-$FF43 - on the Dragon. In addition, there is another register - called DSKREG that controls the interface with the wd1793. DSKREG is - detailed below: But they appear to be - - References: - CoCo: Disk Basic Unravelled - Dragon: Inferences from the PC-Dragon source code - DragonDos Controller, Disk and File Formats by Graham E Kinns - - --------------------------------------------------------------------------- - - DSKREG - the control register - CoCo ($FF40) Dragon ($FF48) - - Bit Bit - 7 halt enable flag 7 not used - 6 drive select #3 6 not used - 5 density (0=single, 1=double) 5 NMI enable flag - and NMI enable flag - 4 write precompensation 4 write precompensation - 3 drive motor activation 3 single density enable - 2 drive select #2 2 drive motor activation - 1 drive select #1 1 drive select high bit - 0 drive select #0 0 drive select low bit - - Reading from $FF48-$FF4F clears bit 7 of DSKREG ($FF40) - - --------------------------------------------------------------------------- - - 2007-02-22, P.Harvey-Smith - - Began implementing the Dragon Delta Dos controler, this was actually the first - Dragon disk controler to market, beating Dragon Data's by a couple of months, - it is based around the WD2791 FDC, which is compatible with the WD1793/WD2797 used - by the standard CoCo and Dragon disk controlers except that it used an inverted - data bus, which is the reason the read/write handlers invert the data. This - controler like, the DragonDos WD2797 is mapped at $FF40-$FF43, in the normal - register order. - - The Delta cart also has a register (74LS174 hex flipflop) at $FF44 encoded as - follows :- - - Bit - 7 not used - 6 not used - 5 not used - 4 Single (0) / Double (1) density select - 3 5.25"(0) / 8"(1) Clock select - 2 Side select - 1 Drive select ms bit - 0 Drive select ls bit - -*********************************************************************/ - -#include "emu.h" -#include "coco_fdc.h" -#include "imagedev/flopdrv.h" -#include "includes/coco.h" -#include "machine/wd17xx.h" -#include "imagedev/flopdrv.h" -#include "formats/coco_dsk.h" - - -/*************************************************************************** - PARAMETERS -***************************************************************************/ - -#define LOG_FDC 0 -#define WD_TAG "wd17xx" -#define DISTO_TAG "disto" -#define CLOUD9_TAG "cloud9" - -/*************************************************************************** - TYPE DEFINITIONS -***************************************************************************/ - -/*************************************************************************** - LOCAL VARIABLES -***************************************************************************/ - -static const floppy_interface coco_floppy_interface = -{ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - FLOPPY_STANDARD_5_25_DSHD, - LEGACY_FLOPPY_OPTIONS_NAME(coco), - "floppy_5_25", - NULL -}; - - -/*************************************************************************** - IMPLEMENTATION -***************************************************************************/ -/*------------------------------------------------- - real_time_clock --------------------------------------------------*/ - -coco_rtc_type_t coco_fdc_device::real_time_clock() -{ - coco_rtc_type_t result = (coco_rtc_type_t) machine().root_device().ioport("real_time_clock")->read_safe(RTC_NONE); - - /* check to make sure we don't have any invalid values */ - if (((result == RTC_DISTO) && (m_disto_msm6242 == NULL)) - || ((result == RTC_CLOUD9) && (m_ds1315 == NULL))) - { - result = RTC_NONE; - } - - return result; -} -/*------------------------------------------------- - fdc_intrq_w - callback from the FDC --------------------------------------------------*/ - -WRITE_LINE_MEMBER( coco_fdc_device::fdc_intrq_w ) -{ - set_intrq(state); - update_lines(); -} - - -/*------------------------------------------------- - fdc_drq_w - callback from the FDC --------------------------------------------------*/ - -WRITE_LINE_MEMBER( coco_fdc_device::fdc_drq_w ) -{ - set_drq(state); - update_lines(); -} - - -//************************************************************************** -// COCO FDC -//************************************************************************** - -static const wd17xx_interface coco_wd17xx_interface = -{ - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, coco_fdc_device, fdc_intrq_w), - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, coco_fdc_device, fdc_drq_w), - {FLOPPY_0,FLOPPY_1,FLOPPY_2,FLOPPY_3} -}; - -static MACHINE_CONFIG_FRAGMENT(coco_fdc) - MCFG_WD1773_ADD(WD_TAG, coco_wd17xx_interface) - MCFG_DEVICE_ADD(DISTO_TAG, MSM6242, XTAL_32_768kHz) - MCFG_DS1315_ADD(CLOUD9_TAG) - - MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(coco_floppy_interface) -MACHINE_CONFIG_END - -ROM_START( coco_fdc ) - ROM_REGION(0x4000,"eprom",ROMREGION_ERASE00) - ROM_LOAD_OPTIONAL( "disk10.rom", 0x0000, 0x2000, CRC(b4f9968e) SHA1(04115be3f97952b9d9310b52f806d04f80b40d03)) -ROM_END - -const device_type COCO_FDC = &device_creator<coco_fdc_device>; - -//------------------------------------------------- -// coco_fdc_device - constructor -//------------------------------------------------- -coco_fdc_device::coco_fdc_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) - : device_t(mconfig, type, name, tag, owner, clock, shortname, source), - device_cococart_interface( mconfig, *this ) -{ -} - -coco_fdc_device::coco_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, COCO_FDC, "CoCo FDC", tag, owner, clock, "coco_fdc", __FILE__), - device_cococart_interface( mconfig, *this ) -{ -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void coco_fdc_device::device_start() -{ - m_owner = dynamic_cast<cococart_slot_device *>(owner()); - m_drq = 1; - m_disto_msm6242 = subdevice<msm6242_device>(DISTO_TAG); - m_ds1315 = subdevice<ds1315_device>(CLOUD9_TAG); - m_wd17xx = subdevice(WD_TAG); - m_dskreg = 0x00; - m_intrq = 0; - m_msm6242_rtc_address = 0; -} - -//------------------------------------------------- -// machine_config_additions - device-specific -// machine configurations -//------------------------------------------------- - -machine_config_constructor coco_fdc_device::device_mconfig_additions() const -{ - return MACHINE_CONFIG_NAME( coco_fdc ); -} - -//------------------------------------------------- -// rom_region - device-specific ROM region -//------------------------------------------------- - -const rom_entry *coco_fdc_device::device_rom_region() const -{ - return ROM_NAME( coco_fdc ); -} - -/*------------------------------------------------- - get_cart_base --------------------------------------------------*/ - -UINT8* coco_fdc_device::get_cart_base() -{ - return memregion("eprom")->base(); -} - -/*------------------------------------------------- - update_lines - CoCo specific disk - controller lines --------------------------------------------------*/ - -void coco_fdc_device::update_lines() -{ - /* clear HALT enable under certain circumstances */ - if ((m_intrq != 0) && (m_dskreg & 0x20)) - m_dskreg &= ~0x80; /* clear halt enable */ - - /* set the NMI line */ - m_owner->cart_set_line(COCOCART_LINE_NMI, - ((m_intrq != 0) && (m_dskreg & 0x20)) ? COCOCART_LINE_VALUE_ASSERT : COCOCART_LINE_VALUE_CLEAR); - - /* set the HALT line */ - m_owner->cart_set_line(COCOCART_LINE_HALT, - ((m_drq == 0) && (m_dskreg & 0x80)) ? COCOCART_LINE_VALUE_ASSERT : COCOCART_LINE_VALUE_CLEAR); -} - -/*------------------------------------------------- - dskreg_w - function to write to CoCo - dskreg --------------------------------------------------*/ - -void coco_fdc_device::dskreg_w(UINT8 data) -{ - UINT8 drive = 0; - UINT8 head = 0; - - if (LOG_FDC) - { - logerror("fdc_coco_dskreg_w(): %c%c%c%c%c%c%c%c ($%02x)\n", - data & 0x80 ? 'H' : 'h', - data & 0x40 ? '3' : '.', - data & 0x20 ? 'D' : 'S', - data & 0x10 ? 'P' : 'p', - data & 0x08 ? 'M' : 'm', - data & 0x04 ? '2' : '.', - data & 0x02 ? '1' : '.', - data & 0x01 ? '0' : '.', - data); - } - - /* An email from John Kowalski informed me that if the DS3 is - * high, and one of the other drive bits is selected (DS0-DS2), then the - * second side of DS0, DS1, or DS2 is selected. If multiple bits are - * selected in other situations, then both drives are selected, and any - * read signals get yucky. - */ - - if (data & 0x04) - drive = 2; - else if (data & 0x02) - drive = 1; - else if (data & 0x01) - drive = 0; - else if (data & 0x40) - drive = 3; - - device_t *floppy[4]; - - floppy[0] = subdevice(FLOPPY_0); - floppy[1] = subdevice(FLOPPY_1); - floppy[2] = subdevice(FLOPPY_2); - floppy[3] = subdevice(FLOPPY_3); - - for (int i = 0; i < 4; i++) - { - floppy_mon_w(floppy[i], i == drive ? CLEAR_LINE : ASSERT_LINE); - } - - head = ((data & 0x40) && (drive != 3)) ? 1 : 0; - - m_dskreg = data; - - update_lines(); - - wd17xx_set_drive(m_wd17xx, drive); - wd17xx_set_side(m_wd17xx, head); - wd17xx_dden_w(m_wd17xx, !BIT(m_dskreg, 5)); -} - -/*------------------------------------------------- - read --------------------------------------------------*/ - -READ8_MEMBER(coco_fdc_device::read) -{ - UINT8 result = 0; - - switch(offset & 0xEF) - { - case 8: - result = wd17xx_status_r(m_wd17xx, space, 0); - break; - case 9: - result = wd17xx_track_r(m_wd17xx, space, 0); - break; - case 10: - result = wd17xx_sector_r(m_wd17xx, space, 0); - break; - case 11: - result = wd17xx_data_r(m_wd17xx, space, 0); - break; - } - - /* other stuff for RTCs */ - switch(offset) - { - case 0x10: /* FF50 */ - if (real_time_clock() == RTC_DISTO) - result = m_disto_msm6242->read(space,m_msm6242_rtc_address); - break; - - case 0x38: /* FF78 */ - if (real_time_clock() == RTC_CLOUD9) - m_ds1315->read_0(space, offset); - break; - - case 0x39: /* FF79 */ - if (real_time_clock() == RTC_CLOUD9) - m_ds1315->read_1(space, offset); - break; - - case 0x3C: /* FF7C */ - if (real_time_clock() == RTC_CLOUD9) - result = m_ds1315->read_data(space, offset); - break; - } - return result; -} - - - -/*------------------------------------------------- - write --------------------------------------------------*/ - -WRITE8_MEMBER(coco_fdc_device::write) -{ - switch(offset & 0x1F) - { - case 0: case 1: case 2: case 3: - case 4: case 5: case 6: case 7: - dskreg_w(data); - break; - case 8: - wd17xx_command_w(m_wd17xx, space, 0, data); - break; - case 9: - wd17xx_track_w(m_wd17xx, space, 0, data); - break; - case 10: - wd17xx_sector_w(m_wd17xx, space, 0, data); - break; - case 11: - wd17xx_data_w(m_wd17xx, space, 0, data); - break; - }; - - /* other stuff for RTCs */ - switch(offset) - { - case 0x10: /* FF50 */ - if (real_time_clock() == RTC_DISTO) - m_disto_msm6242->write(space,m_msm6242_rtc_address, data); - break; - - case 0x11: /* FF51 */ - if (real_time_clock() == RTC_DISTO) - m_msm6242_rtc_address = data & 0x0f; - break; - } -} - - -//************************************************************************** -// DRAGON FDC -//************************************************************************** - -static MACHINE_CONFIG_FRAGMENT(dragon_fdc) - MCFG_WD2797_ADD(WD_TAG, coco_wd17xx_interface) - MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(coco_floppy_interface) -MACHINE_CONFIG_END - - -ROM_START( dragon_fdc ) - ROM_REGION(0x4000,"eprom",ROMREGION_ERASE00) - ROM_LOAD_OPTIONAL( "ddos10.rom", 0x0000, 0x2000, CRC(b44536f6) SHA1(a8918c71d319237c1e3155bb38620acb114a80bc)) -ROM_END - -const device_type DRAGON_FDC = &device_creator<dragon_fdc_device>; - -//------------------------------------------------- -// dragon_fdc_device - constructor -//------------------------------------------------- -dragon_fdc_device::dragon_fdc_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) - : coco_fdc_device(mconfig, type, name, tag, owner, clock, shortname, source) -{ -} -dragon_fdc_device::dragon_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : coco_fdc_device(mconfig, DRAGON_FDC, "Dragon FDC", tag, owner, clock, "dragon_fdc", __FILE__) -{ -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void dragon_fdc_device::device_start() -{ - m_owner = dynamic_cast<cococart_slot_device *>(owner()); - m_drq = 0; - m_wd17xx = subdevice(WD_TAG); - m_dskreg = 0x00; - m_intrq = 0; - m_msm6242_rtc_address = 0; -} - -//------------------------------------------------- -// machine_config_additions - device-specific -// machine configurations -//------------------------------------------------- - -machine_config_constructor dragon_fdc_device::device_mconfig_additions() const -{ - return MACHINE_CONFIG_NAME( dragon_fdc ); -} - -//------------------------------------------------- -// rom_region - device-specific ROM region -//------------------------------------------------- - -const rom_entry *dragon_fdc_device::device_rom_region() const -{ - return ROM_NAME( dragon_fdc ); -} - - - -/*------------------------------------------------- - update_lines - Dragon specific disk - controller lines --------------------------------------------------*/ - -void dragon_fdc_device::update_lines() -{ - /* set the NMI line */ - m_owner->cart_set_line(COCOCART_LINE_NMI, - ((m_intrq != 0) && (m_dskreg & 0x20)) ? COCOCART_LINE_VALUE_ASSERT : COCOCART_LINE_VALUE_CLEAR); - - /* set the CART line */ - m_owner->cart_set_line(COCOCART_LINE_CART, - (m_drq != 0) ? COCOCART_LINE_VALUE_ASSERT : COCOCART_LINE_VALUE_CLEAR); -} - - -/*------------------------------------------------- - dskreg_w - function to write to - Dragon dskreg --------------------------------------------------*/ - -void dragon_fdc_device::dskreg_w(UINT8 data) -{ - if (LOG_FDC) - { - logerror("fdc_dragon_dskreg_w(): %c%c%c%c%c%c%c%c ($%02x)\n", - data & 0x80 ? 'X' : 'x', - data & 0x40 ? 'X' : 'x', - data & 0x20 ? 'N' : 'n', - data & 0x10 ? 'P' : 'p', - data & 0x08 ? 'S' : 'D', - data & 0x04 ? 'M' : 'm', - data & 0x02 ? '1' : '0', - data & 0x01 ? '1' : '0', - data); - } - - if (data & 0x04) - wd17xx_set_drive(m_wd17xx, data & 0x03); - - wd17xx_dden_w(m_wd17xx, BIT(data, 3)); - m_dskreg = data; -} - - - -/*------------------------------------------------- - read --------------------------------------------------*/ - -READ8_MEMBER(dragon_fdc_device::read) -{ - UINT8 result = 0; - switch(offset & 0xEF) - { - case 0: - result = wd17xx_status_r(m_wd17xx, space, 0); - break; - case 1: - result = wd17xx_track_r(m_wd17xx, space, 0); - break; - case 2: - result = wd17xx_sector_r(m_wd17xx, space, 0); - break; - case 3: - result = wd17xx_data_r(m_wd17xx, space, 0); - break; - } - return result; -} - - - -/*------------------------------------------------- - write --------------------------------------------------*/ - -WRITE8_MEMBER(dragon_fdc_device::write) -{ - switch(offset & 0xEF) - { - case 0: - wd17xx_command_w(m_wd17xx, space, 0, data); - - /* disk head is encoded in the command byte */ - /* Only for type 3 & 4 commands */ - if (data & 0x80) - wd17xx_set_side(m_wd17xx, (data & 0x02) ? 1 : 0); - break; - case 1: - wd17xx_track_w(m_wd17xx, space, 0, data); - break; - case 2: - wd17xx_sector_w(m_wd17xx, space, 0, data); - break; - case 3: - wd17xx_data_w(m_wd17xx, space, 0, data); - break; - case 8: case 9: case 10: case 11: - case 12: case 13: case 14: case 15: - dskreg_w(data); - break; - }; -} - -//************************************************************************** -// SDTANDY FDC -//************************************************************************** - -ROM_START( sdtandy_fdc ) - ROM_REGION(0x4000,"eprom",ROMREGION_ERASE00) - ROM_LOAD_OPTIONAL( "sdtandy.rom", 0x0000, 0x2000, CRC(5d7779b7) SHA1(ca03942118f2deab2f6c8a89b8a4f41f2d0b94f1)) -ROM_END - -const device_type SDTANDY_FDC = &device_creator<sdtandy_fdc_device>; - -//------------------------------------------------- -// sdtandy_fdc_device - constructor -//------------------------------------------------- - -sdtandy_fdc_device::sdtandy_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : dragon_fdc_device(mconfig, SDTANDY_FDC, "SDTANDY FDC", tag, owner, clock, "sdtandy_fdc", __FILE__) -{ -} - -//------------------------------------------------- -// rom_region - device-specific ROM region -//------------------------------------------------- - -const rom_entry *sdtandy_fdc_device::device_rom_region() const -{ - return ROM_NAME( sdtandy_fdc ); -} - -//************************************************************************** -// COCO FDC v1.1 -//************************************************************************** - -ROM_START( coco_fdc_v11 ) - ROM_REGION(0x8000,"eprom",ROMREGION_ERASE00) - ROM_LOAD_OPTIONAL( "disk11.rom", 0x0000, 0x2000, CRC(0b9c5415) SHA1(10bdc5aa2d7d7f205f67b47b19003a4bd89defd1)) - ROM_RELOAD(0x2000, 0x2000) - ROM_RELOAD(0x4000, 0x2000) - ROM_RELOAD(0x6000, 0x2000) -ROM_END - -const device_type COCO_FDC_V11 = &device_creator<coco_fdc_v11_device>; - -//------------------------------------------------- -// coco_fdc_v11_device - constructor -//------------------------------------------------- - -coco_fdc_v11_device::coco_fdc_v11_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : coco_fdc_device(mconfig, COCO_FDC_V11, "CoCo FDC v1.1", tag, owner, clock, "coco_fdc_v11", __FILE__) -{ -} - -//------------------------------------------------- -// rom_region - device-specific ROM region -//------------------------------------------------- - -const rom_entry *coco_fdc_v11_device::device_rom_region() const -{ - return ROM_NAME( coco_fdc_v11 ); -} - -//************************************************************************** -// CP400 FDC -//************************************************************************** - -ROM_START( cp400_fdc ) - ROM_REGION(0x4000,"eprom",ROMREGION_ERASE00) - ROM_LOAD("cp400dsk.rom", 0x0000, 0x2000, CRC(e9ad60a0) SHA1(827697fa5b755f5dc1efb054cdbbeb04e405405b)) -ROM_END - -const device_type CP400_FDC = &device_creator<cp400_fdc_device>; - -//------------------------------------------------- -// cp400_fdc_device - constructor -//------------------------------------------------- - -cp400_fdc_device::cp400_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : coco_fdc_device(mconfig, CP400_FDC, "CP400 FDC", tag, owner, clock, "cp400_fdc", __FILE__) -{ -} - -//------------------------------------------------- -// rom_region - device-specific ROM region -//------------------------------------------------- - -const rom_entry *cp400_fdc_device::device_rom_region() const -{ - return ROM_NAME( cp400_fdc ); -} diff --git a/src/mess/machine/coco_fdc.h b/src/mess/machine/coco_fdc.h deleted file mode 100644 index 028bf4e39e5..00000000000 --- a/src/mess/machine/coco_fdc.h +++ /dev/null @@ -1,155 +0,0 @@ -#pragma once - -#ifndef __COCO_FDC_H__ -#define __COCO_FDC_H__ - -#include "emu.h" -#include "machine/cococart.h" -#include "machine/msm6242.h" -#include "machine/ds1315.h" - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -// ======================> coco_rtc_type_t - -enum coco_rtc_type_t -{ - RTC_DISTO = 0x00, - RTC_CLOUD9 = 0x01, - - RTC_NONE = 0xFF -}; - -// ======================> coco_fdc_device - -class coco_fdc_device : - public device_t, - public device_cococart_interface -{ -public: - // construction/destruction - coco_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - coco_fdc_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); - - // optional information overrides - virtual machine_config_constructor device_mconfig_additions() const; - virtual const rom_entry *device_rom_region() const; - - virtual UINT8* get_cart_base(); - - virtual void update_lines(); - virtual void dskreg_w(UINT8 data); - - void set_intrq(UINT8 val) { m_intrq = val; } - void set_drq(UINT8 val) { m_drq = val; } - - DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w); - DECLARE_WRITE_LINE_MEMBER(fdc_drq_w); -protected: - // device-level overrides - virtual void device_start(); - virtual DECLARE_READ8_MEMBER(read); - virtual DECLARE_WRITE8_MEMBER(write); - - coco_rtc_type_t real_time_clock(); - - // internal state - cococart_slot_device *m_owner; - - UINT8 m_dskreg; - UINT8 m_drq : 1; - UINT8 m_intrq : 1; - - device_t *m_wd17xx; /* WD17xx */ - ds1315_device *m_ds1315; /* DS1315 */ - - /* Disto RTC */ - msm6242_device *m_disto_msm6242; /* 6242 RTC on Disto interface */ - offs_t m_msm6242_rtc_address; -}; - - -// device type definition -extern const device_type COCO_FDC; - -// ======================> coco_fdc_v11_device - -class coco_fdc_v11_device : - public coco_fdc_device -{ -public: - // construction/destruction - coco_fdc_v11_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // optional information overrides - virtual const rom_entry *device_rom_region() const; -}; - - -// device type definition -extern const device_type COCO_FDC_V11; - -// ======================> cp400_fdc_device - -class cp400_fdc_device : - public coco_fdc_device -{ -public: - // construction/destruction - cp400_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // optional information overrides - virtual const rom_entry *device_rom_region() const; -}; - - -// device type definition -extern const device_type CP400_FDC; - -// ======================> dragon_fdc_device - -class dragon_fdc_device : - public coco_fdc_device -{ -public: - // construction/destruction - dragon_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - dragon_fdc_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); - - // optional information overrides - virtual machine_config_constructor device_mconfig_additions() const; - virtual const rom_entry *device_rom_region() const; - virtual void update_lines(); - virtual void dskreg_w(UINT8 data); -protected: - // device-level overrides - virtual void device_start(); - virtual DECLARE_READ8_MEMBER(read); - virtual DECLARE_WRITE8_MEMBER(write); -private: -}; - - -// device type definition -extern const device_type DRAGON_FDC; - -// ======================> sdtandy_fdc_device - -class sdtandy_fdc_device : - public dragon_fdc_device -{ -public: - // construction/destruction - sdtandy_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // optional information overrides - virtual const rom_entry *device_rom_region() const; -}; - - -// device type definition -extern const device_type SDTANDY_FDC; - -#endif /* __COCO_FDC_H__ */ diff --git a/src/mess/machine/coco_multi.c b/src/mess/machine/coco_multi.c deleted file mode 100644 index 0f71766b516..00000000000 --- a/src/mess/machine/coco_multi.c +++ /dev/null @@ -1,266 +0,0 @@ -/*************************************************************************** - - coco_multi.c - - Code for emulating CoCo's Multi-Pak Interface - - The Multi-Pak interface multiplexes all I/O lines from the Color - Computer's expansion port to four identical ports. All I/O lines - are continuously multiplexed except: - - Pin 36 - *SCS - Pin 32 - *CTS - Pin 8 - *CART - - These I/O lines are switched in one of two ways. First, is the front - panel, four position switch. When adjusted the switch will direct the - MPI to target these three I/O lines to the selected slot. - - Second, the MPI will listen to writes to 0xff7f and respond accordingly: - - bit 0 --\___ Target *SCS to this slot number - bit 1 --/ - bit 2 ------ Ignore - bit 3 ------ Ignore - bit 4 --\___ Target *CTS and *CART to this slot number - bit 5 --/ - bit 6 ------ Ignore - bit 7 ------ Ignore - - After writing to 0xff7f, the position of the physical switch has no - effect until reset. - - Reading is supported on 0xff7f. It will reflect the position of the - physical switch. Until data is written to 0xff7f, then it will only - reflect what has been written until a reset. - - A common modification users of the OS-9 operating system made was to - tie all of the *CART pins together on the MPI motherboard. The *CART - line is connected to the 6809's IRQ line. This allowed any hardware - device in any slot to signal an IRQ to the CPU, no matter what the - switch position was. OS-9 was designed from the very start to poll - each device attached on every IRQ signal. - - Because of sloppy address decoding the original MPI also responds to - $FF9F. No software is known to take advantage of this. After the - introduction of the CoCo 3, which uses $FF9F internally, Tandy provided - free upgrades to any MPI to fix this problem. - - -***************************************************************************/ - -#include "emu.h" -#include "includes/coco.h" -#include "coco_multi.h" -#include "coco_232.h" -#include "coco_orch90.h" -#include "coco_pak.h" -#include "coco_fdc.h" - -#define SLOT1_TAG "slot1" -#define SLOT2_TAG "slot2" -#define SLOT3_TAG "slot3" -#define SLOT4_TAG "slot4" - - - -/*************************************************************************** - IMPLEMENTATION -***************************************************************************/ - -static SLOT_INTERFACE_START(coco_cart_slot1_3) - SLOT_INTERFACE("rs232", COCO_232) - SLOT_INTERFACE("orch90", COCO_ORCH90) - SLOT_INTERFACE("banked_16k", COCO_PAK_BANKED) - SLOT_INTERFACE("pak", COCO_PAK) -SLOT_INTERFACE_END -static SLOT_INTERFACE_START(coco_cart_slot4) - SLOT_INTERFACE("fdcv11", COCO_FDC_V11) - SLOT_INTERFACE("rs232", COCO_232) - SLOT_INTERFACE("orch90", COCO_ORCH90) - SLOT_INTERFACE("banked_16k", COCO_PAK_BANKED) - SLOT_INTERFACE("pak", COCO_PAK) -SLOT_INTERFACE_END - -WRITE_LINE_MEMBER(coco_multipak_device::multi_cart_w) -{ - cococart_slot_device *cart = dynamic_cast<cococart_slot_device *>(owner()); - cart->m_cart_callback.writeline(this,state); -} - -WRITE_LINE_MEMBER(coco_multipak_device::multi_nmi_w) -{ - cococart_slot_device *cart = dynamic_cast<cococart_slot_device *>(owner()); - cart->m_nmi_callback.writeline(this,state); -} - -WRITE_LINE_MEMBER(coco_multipak_device::multi_halt_w) -{ - cococart_slot_device *cart = dynamic_cast<cococart_slot_device *>(owner()); - cart->m_halt_callback.writeline(this,state); -} - -static const cococart_interface multi_cococart_interface = -{ - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, coco_multipak_device, multi_cart_w), - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, coco_multipak_device, multi_nmi_w), - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, coco_multipak_device, multi_halt_w) -}; - -static MACHINE_CONFIG_FRAGMENT(coco_multi) - MCFG_COCO_CARTRIDGE_ADD(SLOT1_TAG, multi_cococart_interface, coco_cart_slot1_3, NULL) - MCFG_COCO_CARTRIDGE_ADD(SLOT2_TAG, multi_cococart_interface, coco_cart_slot1_3, NULL) - MCFG_COCO_CARTRIDGE_ADD(SLOT3_TAG, multi_cococart_interface, coco_cart_slot1_3, NULL) - MCFG_COCO_CARTRIDGE_ADD(SLOT4_TAG, multi_cococart_interface, coco_cart_slot4, "fdcv11") -MACHINE_CONFIG_END - -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -const device_type COCO_MULTIPAK = &device_creator<coco_multipak_device>; - - - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -//------------------------------------------------- -// coco_multipak_device - constructor -//------------------------------------------------- - -coco_multipak_device::coco_multipak_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, COCO_MULTIPAK, "CoCo Multi-Pak Interface", tag, owner, clock, "coco_multipak", __FILE__), - device_cococart_interface( mconfig, *this ) -{ -} - - - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void coco_multipak_device::device_start() -{ - // identify slots - m_slots[0] = dynamic_cast<cococart_slot_device *>(subdevice(SLOT1_TAG)); - m_slots[1] = dynamic_cast<cococart_slot_device *>(subdevice(SLOT2_TAG)); - m_slots[2] = dynamic_cast<cococart_slot_device *>(subdevice(SLOT3_TAG)); - m_slots[3] = dynamic_cast<cococart_slot_device *>(subdevice(SLOT4_TAG)); - m_owner = dynamic_cast<cococart_slot_device *>(owner()); - - // install $FF7F handler - write8_delegate wh = write8_delegate(FUNC(coco_multipak_device::ff7f_write), this); - machine().device(MAINCPU_TAG)->memory().space(AS_PROGRAM).install_write_handler(0xFF7F, 0xFF7F, wh); - - // initial state - m_select = 0xFF; - - // save state - save_item(NAME(m_select)); -} - - - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void coco_multipak_device::device_reset() -{ - m_select = 0xFF; -} - - - -//------------------------------------------------- -// machine_config_additions - device-specific -// machine configurations -//------------------------------------------------- - -machine_config_constructor coco_multipak_device::device_mconfig_additions() const -{ - return MACHINE_CONFIG_NAME( coco_multi ); -} - - - -//------------------------------------------------- -// get_cart_base -//------------------------------------------------- - -UINT8* coco_multipak_device::get_cart_base() -{ - return active_cts_slot()->get_cart_base(); -} - - - -//------------------------------------------------- -// read -//------------------------------------------------- - -READ8_MEMBER(coco_multipak_device::read) -{ - return active_scs_slot()->read(space,offset); -} - - - -//------------------------------------------------- -// write -//------------------------------------------------- - -WRITE8_MEMBER(coco_multipak_device::write) -{ - active_scs_slot()->write(space,offset,data); -} - - - -//------------------------------------------------- -// ff7f_write -//------------------------------------------------- - -WRITE8_MEMBER(coco_multipak_device::ff7f_write) -{ - set_select(data); -} - - - -//------------------------------------------------- -// set_select -//------------------------------------------------- - -void coco_multipak_device::set_select(UINT8 new_select) -{ - UINT8 xorval = m_select ^ new_select; - m_select = new_select; - if (xorval & 0x30) - cart_base_changed(); -} - - - -//------------------------------------------------- -// active_scs_slot -//------------------------------------------------- - -cococart_slot_device *coco_multipak_device::active_scs_slot(void) -{ - return m_slots[(m_select >> 0) & 0x03]; -} - - - -//------------------------------------------------- -// active_cts_slot -//------------------------------------------------- - -cococart_slot_device *coco_multipak_device::active_cts_slot(void) -{ - return m_slots[(m_select >> 4) & 0x03]; -} diff --git a/src/mess/machine/coco_multi.h b/src/mess/machine/coco_multi.h deleted file mode 100644 index a6aaf9beff0..00000000000 --- a/src/mess/machine/coco_multi.h +++ /dev/null @@ -1,67 +0,0 @@ -/*************************************************************************** - - coco_multi.h - - Multi-Pak interface emulation - -***************************************************************************/ - -#pragma once - -#ifndef __COCO_MULTI_H__ -#define __COCO_MULTI_H__ - -#include "emu.h" -#include "machine/cococart.h" - - - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -// ======================> coco_multipak_device - -class coco_multipak_device : - public device_t, - public device_cococart_interface -{ -public: - // construction/destruction - coco_multipak_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // optional information overrides - virtual machine_config_constructor device_mconfig_additions() const; - - virtual UINT8* get_cart_base(); - - DECLARE_WRITE_LINE_MEMBER(multi_cart_w); - DECLARE_WRITE_LINE_MEMBER(multi_nmi_w); - DECLARE_WRITE_LINE_MEMBER(multi_halt_w); -protected: - // device-level overrides - virtual void device_start(); - virtual void device_reset(); - virtual DECLARE_READ8_MEMBER(read); - virtual DECLARE_WRITE8_MEMBER(write); - -private: - // device references - cococart_slot_device *m_owner; - cococart_slot_device *m_slots[4]; - - // internal state - UINT8 m_select; - - // methods - DECLARE_WRITE8_MEMBER(ff7f_write); - cococart_slot_device *active_scs_slot(void); - cococart_slot_device *active_cts_slot(void); - void set_select(UINT8 new_select); -}; - - -// device type definition -extern const device_type COCO_MULTIPAK; - -#endif /* __COCO_MULTI_H__ */ diff --git a/src/mess/machine/coco_orch90.c b/src/mess/machine/coco_orch90.c deleted file mode 100644 index ba1aa29cf69..00000000000 --- a/src/mess/machine/coco_orch90.c +++ /dev/null @@ -1,83 +0,0 @@ -/*************************************************************************** - - orch90.c - - Code for emulating the CoCo Orch-90 (Orchestra 90) sound cartridge - - The Orch-90 was a simple sound cartridge; it had two 8-bit DACs - supporting stereo sound. The left channel was at $FF7A, and the right - channel was at $FF7B - -***************************************************************************/ - -#include "emu.h" -#include "coco_orch90.h" -#include "sound/dac.h" - -static MACHINE_CONFIG_FRAGMENT(coco_orch90) - MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MCFG_SOUND_ADD("dac_left", DAC, 0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) - MCFG_SOUND_ADD("dac_right", DAC, 0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) -MACHINE_CONFIG_END - -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -const device_type COCO_ORCH90 = &device_creator<coco_orch90_device>; - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -//------------------------------------------------- -// coco_orch90_device - constructor -//------------------------------------------------- - -coco_orch90_device::coco_orch90_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, COCO_ORCH90, "CoCo Orch-90 PAK", tag, owner, clock, "coco_orch90", __FILE__), - device_cococart_interface( mconfig, *this ) -{ -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void coco_orch90_device::device_start() -{ - m_left_dac = subdevice<dac_device>("dac_left"); - m_right_dac = subdevice<dac_device>("dac_right"); -} - -//------------------------------------------------- -// machine_config_additions - device-specific -// machine configurations -//------------------------------------------------- - -machine_config_constructor coco_orch90_device::device_mconfig_additions() const -{ - return MACHINE_CONFIG_NAME( coco_orch90 ); -} - -/*------------------------------------------------- - write --------------------------------------------------*/ - -WRITE8_MEMBER(coco_orch90_device::write) -{ - switch(offset) - { - case 0x3A: - /* left channel write */ - m_left_dac->write_unsigned8(data); - break; - - case 0x3B: - /* right channel write */ - m_right_dac->write_unsigned8(data); - break; - } -} diff --git a/src/mess/machine/coco_orch90.h b/src/mess/machine/coco_orch90.h deleted file mode 100644 index 2c285b4ff1b..00000000000 --- a/src/mess/machine/coco_orch90.h +++ /dev/null @@ -1,40 +0,0 @@ -#pragma once - -#ifndef __COCO_ORCH90_H__ -#define __COCO_ORCH90_H__ - -#include "emu.h" -#include "sound/dac.h" -#include "machine/cococart.h" - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -// ======================> coco_orch90_device - -class coco_orch90_device : - public device_t, - public device_cococart_interface -{ -public: - // construction/destruction - coco_orch90_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // optional information overrides - virtual machine_config_constructor device_mconfig_additions() const; -protected: - // device-level overrides - virtual void device_start(); - virtual DECLARE_WRITE8_MEMBER(write); -private: - // internal state - dac_device *m_left_dac; - dac_device *m_right_dac; -}; - - -// device type definition -extern const device_type COCO_ORCH90; - -#endif /* __COCO_ORCH90_H__ */ diff --git a/src/mess/machine/coco_pak.c b/src/mess/machine/coco_pak.c deleted file mode 100644 index f106d7617cc..00000000000 --- a/src/mess/machine/coco_pak.c +++ /dev/null @@ -1,178 +0,0 @@ -/*************************************************************************** - - coco_pak.c - - Code for emulating standard CoCo cartridges - -***************************************************************************/ - -#include "emu.h" -#include "coco_pak.h" -#include "includes/coco.h" -#include "imagedev/cartslot.h" - -#define CARTSLOT_TAG "cart" - -/*************************************************************************** - IMPLEMENTATION -***************************************************************************/ - -static MACHINE_CONFIG_FRAGMENT(coco_pak) -MACHINE_CONFIG_END - -ROM_START( coco_pak ) - ROM_REGION(0x8000,CARTSLOT_TAG,ROMREGION_ERASE00) - ROM_CART_LOAD(CARTSLOT_TAG, 0x0000, 0x8000, ROM_OPTIONAL | ROM_MIRROR) -ROM_END - -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -const device_type COCO_PAK = &device_creator<coco_pak_device>; - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -//------------------------------------------------- -// coco_pak_device - constructor -//------------------------------------------------- -coco_pak_device::coco_pak_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) - : device_t(mconfig, type, name, tag, owner, clock, shortname, source), - device_cococart_interface( mconfig, *this ) -{ -} - -coco_pak_device::coco_pak_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, COCO_PAK, "CoCo Program PAK", tag, owner, clock, "cocopak", __FILE__), - device_cococart_interface( mconfig, *this ) -{ -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void coco_pak_device::device_start() -{ - m_cart = dynamic_cast<device_image_interface *>(owner()); - m_owner = dynamic_cast<cococart_slot_device *>(owner()); -} - -//------------------------------------------------- -// machine_config_additions - device-specific -// machine configurations -//------------------------------------------------- - -machine_config_constructor coco_pak_device::device_mconfig_additions() const -{ - return MACHINE_CONFIG_NAME( coco_pak ); -} - -//------------------------------------------------- -// rom_region - device-specific ROM region -//------------------------------------------------- - -const rom_entry *coco_pak_device::device_rom_region() const -{ - return ROM_NAME( coco_pak ); -} - -/*------------------------------------------------- - device_reset - device-specific startup --------------------------------------------------*/ - -void coco_pak_device::device_reset() -{ - if (m_cart->exists()) { - cococart_line_value cart_line; - - cart_line = machine().root_device().ioport(CART_AUTOSTART_TAG)->read_safe(0x01) - ? COCOCART_LINE_VALUE_Q - : COCOCART_LINE_VALUE_CLEAR; - - /* normal CoCo PAKs tie their CART line to Q - the system clock */ - m_owner->cart_set_line(COCOCART_LINE_CART,cart_line); - } -} - -/*------------------------------------------------- - get_cart_base --------------------------------------------------*/ - -UINT8* coco_pak_device::get_cart_base() -{ - return memregion(CARTSLOT_TAG)->base(); -} - -/*************************************************************************** - BANKED CARTRIDGES -***************************************************************************/ - -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -const device_type COCO_PAK_BANKED = &device_creator<coco_pak_banked_device>; - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -//------------------------------------------------- -// coco_pak_device - constructor -//------------------------------------------------- - -coco_pak_banked_device::coco_pak_banked_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : coco_pak_device(mconfig, COCO_PAK_BANKED, "CoCo Program PAK (Banked)", tag, owner, clock, "cocopak_banked", __FILE__) -{ -} - -/*------------------------------------------------- - device_reset - device-specific startup --------------------------------------------------*/ - -void coco_pak_banked_device::device_reset() -{ - coco_pak_device::device_reset(); - - banked_pak_set_bank(0); -} - -/*------------------------------------------------- - banked_pak_set_bank - function to set the bank --------------------------------------------------*/ - -void coco_pak_banked_device::banked_pak_set_bank(UINT32 bank) -{ - UINT64 pos; - UINT32 i; - UINT8 *rom = memregion(CARTSLOT_TAG)->base(); - UINT32 rom_length = memregion(CARTSLOT_TAG)->bytes(); - - if (m_cart->exists()) { - pos = (bank * 0x4000) % m_cart->length(); - - for (i = 0; i < rom_length / 0x4000; i++) - { - m_cart->fseek(pos, SEEK_SET); - m_cart->fread(&rom[i * 0x4000], 0x4000); - } - } -} - -/*------------------------------------------------- - write --------------------------------------------------*/ - -WRITE8_MEMBER(coco_pak_banked_device::write) -{ - switch(offset) - { - case 0: - /* set the bank */ - banked_pak_set_bank(data); - break; - } -} diff --git a/src/mess/machine/coco_pak.h b/src/mess/machine/coco_pak.h deleted file mode 100644 index d4b37a7d2fb..00000000000 --- a/src/mess/machine/coco_pak.h +++ /dev/null @@ -1,63 +0,0 @@ -#pragma once - -#ifndef __COCO_PAK_H__ -#define __COCO_PAK_H__ - -#include "emu.h" -#include "machine/cococart.h" - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -// ======================> coco_pak_device - -class coco_pak_device : - public device_t, - public device_cococart_interface -{ -public: - // construction/destruction - coco_pak_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - coco_pak_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); - - // optional information overrides - virtual machine_config_constructor device_mconfig_additions() const; - virtual const rom_entry *device_rom_region() const; - - virtual UINT8* get_cart_base(); -protected: - // device-level overrides - virtual void device_start(); - virtual void device_reset(); - - // internal state - device_image_interface *m_cart; - cococart_slot_device *m_owner; -}; - - -// device type definition -extern const device_type COCO_PAK; - -// ======================> coco_pak_banked_device - -class coco_pak_banked_device : - public coco_pak_device -{ -public: - // construction/destruction - coco_pak_banked_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - -protected: - // device-level overrides - virtual void device_reset(); - virtual DECLARE_WRITE8_MEMBER(write); -private: - void banked_pak_set_bank(UINT32 bank); -}; - - -// device type definition -extern const device_type COCO_PAK_BANKED; -#endif /* __COCO_PAK_H__ */ diff --git a/src/mess/machine/cococart.c b/src/mess/machine/cococart.c deleted file mode 100644 index 85c8844e0e0..00000000000 --- a/src/mess/machine/cococart.c +++ /dev/null @@ -1,459 +0,0 @@ -/********************************************************************* - - cococart.c - - CoCo/Dragon cartridge management - -*********************************************************************/ - -#include "emu.h" -#include "cococart.h" -#include "emuopts.h" - -/*************************************************************************** - PARAMETERS -***************************************************************************/ - -#define LOG_LINE 0 - - - -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -const device_type COCOCART_SLOT = &device_creator<cococart_slot_device>; - - - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -//------------------------------------------------- -// cococart_slot_device - constructor -//------------------------------------------------- -cococart_slot_device::cococart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - device_t(mconfig, COCOCART_SLOT, "CoCo Cartridge Slot", tag, owner, clock, "cococart_slot", __FILE__), - device_slot_interface(mconfig, *this), - device_image_interface(mconfig, *this) -{ -} - - - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void cococart_slot_device::device_start() -{ - for(int i=0; i<TIMER_POOL; i++ ) - { - m_cart_line.timer[i] = timer_alloc(TIMER_CART); - m_nmi_line.timer[i] = timer_alloc(TIMER_NMI); - m_halt_line.timer[i] = timer_alloc(TIMER_HALT); - } - - m_cart_line.timer_index = 0; - m_cart_line.delay = 0; - m_cart_line.value = COCOCART_LINE_VALUE_CLEAR; - m_cart_line.line = 0; - m_cart_line.q_count = 0; - m_cart_line.callback.resolve(m_cart_callback, *this); - - m_nmi_line.timer_index = 0; - /* 12 allowed one more instruction to finished after the line is pulled */ - m_nmi_line.delay = 12; - m_nmi_line.value = COCOCART_LINE_VALUE_CLEAR; - m_nmi_line.line = 0; - m_nmi_line.q_count = 0; - m_nmi_line.callback.resolve(m_nmi_callback, *this); - - m_halt_line.timer_index = 0; - /* 6 allowed one more instruction to finished after the line is pulled */ - m_halt_line.delay = 6; - m_halt_line.value = COCOCART_LINE_VALUE_CLEAR; - m_halt_line.line = 0; - m_halt_line.q_count = 0; - m_halt_line.callback.resolve(m_halt_callback, *this); - - m_cart = dynamic_cast<device_cococart_interface *>(get_card_device()); -} - - - -//------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void cococart_slot_device::device_config_complete() -{ - // inherit a copy of the static data - const cococart_interface *intf = reinterpret_cast<const cococart_interface *>(static_config()); - if (intf != NULL) - { - *static_cast<cococart_interface *>(this) = *intf; - } - - // or initialize to defaults if none provided - else - { - memset(&m_cart_callback, 0, sizeof(m_cart_callback)); - memset(&m_nmi_callback, 0, sizeof(m_nmi_callback)); - memset(&m_halt_callback, 0, sizeof(m_halt_callback)); - } - - // set brief and instance name - update_names(); -} - - - -//------------------------------------------------- -// device_timer - handle timer callbacks -//------------------------------------------------- - -void cococart_slot_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) -{ - switch(id) - { - case TIMER_CART: - set_line("CART", m_cart_line, (cococart_line_value) param); - break; - - case TIMER_NMI: - set_line("NMI", m_nmi_line, (cococart_line_value) param); - break; - - case TIMER_HALT: - set_line("HALT", m_halt_line, (cococart_line_value) param); - break; - } -} - - - -//------------------------------------------------- -// coco_cartridge_r -//------------------------------------------------- - -READ8_MEMBER(cococart_slot_device::read) -{ - UINT8 result = 0x00; - if (m_cart) - result = m_cart->read(space, offset); - return result; -} - - -//------------------------------------------------- -// coco_cartridge_w -//------------------------------------------------- - -WRITE8_MEMBER(cococart_slot_device::write) -{ - if (m_cart) - m_cart->write(space, offset, data); -} - - - -//------------------------------------------------- -// line_value_string -//------------------------------------------------- - -static const char *line_value_string(cococart_line_value value) -{ - const char *s = NULL; - switch(value) - { - case COCOCART_LINE_VALUE_CLEAR: - s = "CLEAR"; - break; - case COCOCART_LINE_VALUE_ASSERT: - s = "ASSERT"; - break; - case COCOCART_LINE_VALUE_Q: - s = "Q"; - break; - default: - fatalerror("Invalid value\n"); - break; - } - return s; -} - - - -//------------------------------------------------- -// set_line -//------------------------------------------------- - -void cococart_slot_device::set_line(const char *line_name, coco_cartridge_line &line, cococart_line_value value) -{ - if ((line.value != value) || (value == COCOCART_LINE_VALUE_Q)) - { - line.value = value; - - if (LOG_LINE) - logerror("[%s]: set_line(): %s <= %s\n", machine().describe_context(), line_name, line_value_string(value)); - /* engage in a bit of gymnastics for this odious 'Q' value */ - switch(line.value) - { - case COCOCART_LINE_VALUE_CLEAR: - line.line = 0x00; - line.q_count = 0; - break; - - case COCOCART_LINE_VALUE_ASSERT: - line.line = 0x01; - line.q_count = 0; - break; - - case COCOCART_LINE_VALUE_Q: - line.line = line.line ? 0x00 : 0x01; - if (line.q_count++ < 4) - set_line_timer(line, value); - break; - } - - /* invoke the callback, if present */ - if (!line.callback.isnull()) - line.callback(line.line); - } -} - - - -//------------------------------------------------- -// set_line_timer() -//------------------------------------------------- - -void cococart_slot_device::set_line_timer(coco_cartridge_line &line, cococart_line_value value) -{ - /* calculate delay; delay dependant on cycles per second */ - attotime delay = (line.delay != 0) - ? machine().firstcpu->cycles_to_attotime(line.delay) - : attotime::zero; - - line.timer[line.timer_index]->adjust(delay, (int) value); - line.timer_index = (line.timer_index + 1) % TIMER_POOL; -} - - - -//------------------------------------------------- -// twiddle_line_if_q -//------------------------------------------------- - -void cococart_slot_device::twiddle_line_if_q(coco_cartridge_line &line) -{ - if (line.value == COCOCART_LINE_VALUE_Q) - { - line.q_count = 0; - set_line_timer(line, COCOCART_LINE_VALUE_Q); - } -} - - - -//------------------------------------------------- -// coco_cartridge_twiddle_q_lines - hack to -// support twiddling the Q line -//------------------------------------------------- - -void cococart_slot_device::twiddle_q_lines() -{ - twiddle_line_if_q(m_cart_line); - twiddle_line_if_q(m_nmi_line); - twiddle_line_if_q(m_halt_line); -} - - -//------------------------------------------------- -// coco_cartridge_set_line -//------------------------------------------------- - -void cococart_slot_device::cart_set_line(cococart_line line, cococart_line_value value) -{ - switch (line) - { - case COCOCART_LINE_CART: - set_line_timer(m_cart_line, value); - break; - - case COCOCART_LINE_NMI: - set_line_timer(m_nmi_line, value); - break; - - case COCOCART_LINE_HALT: - set_line_timer(m_halt_line, value); - break; - - case COCOCART_LINE_SOUND_ENABLE: - // do nothing for now - break; - } -} - - - -//------------------------------------------------- -// get_cart_base -//------------------------------------------------- - -UINT8* cococart_slot_device::get_cart_base() -{ - if (m_cart != NULL) - return m_cart->get_cart_base(); - return NULL; -} - - - -//------------------------------------------------- -// set_cart_base_update -//------------------------------------------------- - -void cococart_slot_device::set_cart_base_update(cococart_base_update_delegate update) -{ - if (m_cart != NULL) - m_cart->set_cart_base_update(update); -} - - - -//------------------------------------------------- -// call_load -//------------------------------------------------- - -bool cococart_slot_device::call_load() -{ - if (m_cart) - { - offs_t read_length = 0; - if (software_entry() == NULL) - { - read_length = fread(m_cart->get_cart_base(), 0x8000); - } - else - { - read_length = get_software_region_length("rom"); - memcpy(m_cart->get_cart_base(), get_software_region("rom"), read_length); - } - while(read_length < 0x8000) - { - offs_t len = MIN(read_length, 0x8000 - read_length); - memcpy(m_cart->get_cart_base() + read_length, m_cart->get_cart_base(), len); - read_length += len; - } - } - return IMAGE_INIT_PASS; -} - - - -//------------------------------------------------- -// call_softlist_load -//------------------------------------------------- - -bool cococart_slot_device::call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry) -{ - load_software_part_region(*this, swlist, swname, start_entry ); - return TRUE; -} - - - -//------------------------------------------------- -// get_default_card_software -//------------------------------------------------- - -void cococart_slot_device::get_default_card_software(astring &result) -{ - software_get_default_slot(result, "pak"); -} - - - - -//************************************************************************** -// DEVICE COCO CART INTERFACE -//************************************************************************** - -//------------------------------------------------- -// device_cococart_interface - constructor -//------------------------------------------------- - -device_cococart_interface::device_cococart_interface(const machine_config &mconfig, device_t &device) - : device_slot_card_interface(mconfig, device) -{ -} - - - -//------------------------------------------------- -// ~device_cococart_interface - destructor -//------------------------------------------------- - -device_cococart_interface::~device_cococart_interface() -{ -} - - - -//------------------------------------------------- -// read -//------------------------------------------------- - -READ8_MEMBER(device_cococart_interface::read) -{ - return 0x00; -} - - - -//------------------------------------------------- -// write -//------------------------------------------------- - -WRITE8_MEMBER(device_cococart_interface::write) -{ -} - - - -//------------------------------------------------- -// get_cart_base -//------------------------------------------------- - -UINT8* device_cococart_interface::get_cart_base() -{ - return NULL; -} - - - -//------------------------------------------------- -// set_cart_base_update -//------------------------------------------------- - -void device_cococart_interface::set_cart_base_update(cococart_base_update_delegate update) -{ - m_update = update; -} - - - -//------------------------------------------------- -// cart_base_changed -//------------------------------------------------- - -void device_cococart_interface::cart_base_changed(void) -{ - if (!m_update.isnull()) - m_update(get_cart_base()); -} diff --git a/src/mess/machine/cococart.h b/src/mess/machine/cococart.h deleted file mode 100644 index e207ae26068..00000000000 --- a/src/mess/machine/cococart.h +++ /dev/null @@ -1,175 +0,0 @@ -/********************************************************************* - - cococart.h - - CoCo/Dragon cartridge management - -*********************************************************************/ - -#ifndef __COCOCART_H__ -#define __COCOCART_H__ - - -/*************************************************************************** - CONSTANTS -***************************************************************************/ - -/* TIMER_POOL: Must be power of two */ -#define TIMER_POOL 2 - -/*************************************************************************** - TYPE DEFINITIONS -***************************************************************************/ - -/* output lines on the CoCo cartridge slot */ -enum cococart_line -{ - COCOCART_LINE_CART, /* connects to PIA1 CB1 */ - COCOCART_LINE_NMI, /* connects to NMI line on CPU */ - COCOCART_LINE_HALT, /* connects to HALT line on CPU */ - COCOCART_LINE_SOUND_ENABLE /* sound enable */ -}; - -/* since we have a special value "Q" - we have to use a special enum here */ -enum cococart_line_value -{ - COCOCART_LINE_VALUE_CLEAR, - COCOCART_LINE_VALUE_ASSERT, - COCOCART_LINE_VALUE_Q -}; - -struct coco_cartridge_line -{ - emu_timer *timer[TIMER_POOL]; - int timer_index; - int delay; - cococart_line_value value; - int line; - int q_count; - devcb_resolved_write_line callback; -}; - -// ======================> cococart_interface - -struct cococart_interface -{ - devcb_write_line m_cart_callback; - devcb_write_line m_nmi_callback; - devcb_write_line m_halt_callback; -}; - -// ======================> cococart_base_update_delegate - -// direct region update handler -typedef delegate<void (UINT8 *)> cococart_base_update_delegate; - - -// ======================> cococart_slot_device -class device_cococart_interface; - -class cococart_slot_device : public device_t, - public cococart_interface, - public device_slot_interface, - public device_image_interface -{ -public: - // construction/destruction - cococart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // device-level overrides - virtual void device_start(); - virtual void device_config_complete(); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); - - // image-level overrides - virtual bool call_load(); - virtual bool call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry); - - virtual iodevice_t image_type() const { return IO_CARTSLOT; } - - virtual bool is_readable() const { return 1; } - virtual bool is_writeable() const { return 0; } - virtual bool is_creatable() const { return 0; } - virtual bool must_be_loaded() const { return 0; } - virtual bool is_reset_on_load() const { return 1; } - virtual const char *image_interface() const { return "coco_cart"; } - virtual const char *file_extensions() const { return "ccc,rom"; } - virtual const option_guide *create_option_guide() const { return NULL; } - - // slot interface overrides - virtual void get_default_card_software(astring &result); - - // reading and writing to $FF40-$FF7F - DECLARE_READ8_MEMBER(read); - DECLARE_WRITE8_MEMBER(write); - - // sets a cartridge line - void cart_set_line(cococart_line line, cococart_line_value value); - - // hack to support twiddling the Q line - void twiddle_q_lines(); - - // cart base - UINT8* get_cart_base(); - void set_cart_base_update(cococart_base_update_delegate update); - -private: - enum - { - TIMER_CART, - TIMER_NMI, - TIMER_HALT - }; - - // configuration - coco_cartridge_line m_cart_line; - coco_cartridge_line m_nmi_line; - coco_cartridge_line m_halt_line; - - // cartridge - device_cococart_interface *m_cart; - - // methods - void set_line(const char *line_name, coco_cartridge_line &line, cococart_line_value value); - void set_line_timer(coco_cartridge_line &line, cococart_line_value value); - void twiddle_line_if_q(coco_cartridge_line &line); -}; - -// device type definition -extern const device_type COCOCART_SLOT; - -// ======================> device_cococart_interface - -class device_cococart_interface : public device_slot_card_interface -{ -public: - // construction/destruction - device_cococart_interface(const machine_config &mconfig, device_t &device); - virtual ~device_cococart_interface(); - - virtual DECLARE_READ8_MEMBER(read); - virtual DECLARE_WRITE8_MEMBER(write); - - virtual UINT8* get_cart_base(); - void set_cart_base_update(cococart_base_update_delegate update); - -protected: - void cart_base_changed(void); - -private: - cococart_base_update_delegate m_update; -}; - -/*************************************************************************** - DEVICE CONFIGURATION MACROS -***************************************************************************/ - -#define MCFG_COCO_CARTRIDGE_ADD(_tag,_config,_slot_intf,_def_slot) \ - MCFG_DEVICE_ADD(_tag, COCOCART_SLOT, 0) \ - MCFG_DEVICE_CONFIG(_config) \ - MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) - -#define MCFG_COCO_CARTRIDGE_REMOVE(_tag) \ - MCFG_DEVICE_REMOVE(_tag) - -#endif /* __COCOCART_H__ */ diff --git a/src/mess/machine/compclr_flp.c b/src/mess/machine/compclr_flp.c deleted file mode 100644 index c38ea54b78c..00000000000 --- a/src/mess/machine/compclr_flp.c +++ /dev/null @@ -1,255 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Curt Coder -/********************************************************************** - - Compucolor Floppy Disk Drive emulation - - Copyright MESS Team. - Visit http://mamedev.org for licensing and usage restrictions. - -*********************************************************************/ - -#include "compclr_flp.h" - - - -//************************************************************************** -// DEVICE DEFINITIONS -//************************************************************************** - -const device_type COMPUCOLOR_FLOPPY_PORT = &device_creator<compucolor_floppy_port_device>; -const device_type COMPUCOLOR_FLOPPY = &device_creator<compucolor_floppy_device>; - - -//------------------------------------------------- -// SLOT_INTERFACE( compucolor_floppy_port_devices ) -//------------------------------------------------- - -SLOT_INTERFACE_START( compucolor_floppy_port_devices ) - SLOT_INTERFACE("floppy", COMPUCOLOR_FLOPPY) -SLOT_INTERFACE_END - - -//------------------------------------------------- -// FLOPPY_FORMATS( floppy_formats ) -//------------------------------------------------- - -FLOPPY_FORMATS_MEMBER( compucolor_floppy_device::floppy_formats ) - FLOPPY_CCVF_FORMAT -FLOPPY_FORMATS_END - - -//------------------------------------------------- -// SLOT_INTERFACE( compucolor_floppies ) -//------------------------------------------------- - -static SLOT_INTERFACE_START( compucolor_floppies ) - SLOT_INTERFACE_INTERNAL( "525sssd", FLOPPY_525_SSSD ) -SLOT_INTERFACE_END - - -//------------------------------------------------- -// MACHINE_DRIVER( compucolor_floppy ) -//------------------------------------------------- - -static MACHINE_CONFIG_FRAGMENT( compucolor_floppy ) - MCFG_FLOPPY_DRIVE_ADD("floppy", compucolor_floppies, "525sssd", compucolor_floppy_device::floppy_formats) -MACHINE_CONFIG_END - - -//------------------------------------------------- -// machine_config_additions - device-specific -// machine configurations -//------------------------------------------------- - -machine_config_constructor compucolor_floppy_device::device_mconfig_additions() const -{ - return MACHINE_CONFIG_NAME( compucolor_floppy ); -} - - - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -//------------------------------------------------- -// device_compucolor_floppy_port_interface - constructor -//------------------------------------------------- - -device_compucolor_floppy_port_interface::device_compucolor_floppy_port_interface(const machine_config &mconfig, device_t &device) - : device_rs232_port_interface(mconfig, device) -{ -} - - -//------------------------------------------------- -// compucolor_floppy_port_device - constructor -//------------------------------------------------- - -compucolor_floppy_port_device::compucolor_floppy_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : rs232_port_device(mconfig, COMPUCOLOR_FLOPPY_PORT, "Compucolor Floppy Port", tag, owner, clock, "compclr_flp_port", __FILE__) -{ -} - - -//------------------------------------------------- -// compucolor_floppy_device - constructor -//------------------------------------------------- - -compucolor_floppy_device::compucolor_floppy_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, COMPUCOLOR_FLOPPY, "Compucolor floppy", tag, owner, clock, "compclr_flp", __FILE__), - device_compucolor_floppy_port_interface(mconfig, *this), - m_floppy(*this, "floppy:525sssd"), - m_rw(1), - m_stp(0), - m_sel(1), - m_period(attotime::from_hz(9600*8)) -{ - m_owner = dynamic_cast<compucolor_floppy_port_device *>(this->owner()); -} - - -//------------------------------------------------- -// device_config_complete - -//------------------------------------------------- - -void compucolor_floppy_port_device::device_config_complete() -{ - rs232_port_device::device_config_complete(); - - m_dev = dynamic_cast<device_compucolor_floppy_port_interface *>(get_card_device()); -} - - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void compucolor_floppy_port_device::device_start() -{ - rs232_port_device::device_start(); -} - - -void compucolor_floppy_device::device_start() -{ - // allocate timer - m_timer = timer_alloc(); - m_timer->adjust(attotime::from_hz(9600*8), 0, attotime::from_hz(9600*8)); - - // state saving - save_item(NAME(m_rw)); - save_item(NAME(m_stp)); - save_item(NAME(m_sel)); -} - - -//------------------------------------------------- -// device_timer - handle timer events -//------------------------------------------------- - -void compucolor_floppy_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) -{ - if (!m_sel && !m_rw) - { - output_rxd(read_bit()); - } -} - - -//------------------------------------------------- -// tx_w - -//------------------------------------------------- - -void compucolor_floppy_device::tx(UINT8 state) -{ - if (!m_sel && m_rw) - { - write_bit(state); - } -} - - -//------------------------------------------------- -// rw_w - -//------------------------------------------------- - -void compucolor_floppy_device::rw_w(int state) -{ - if (!m_rw && state) - { - output_rxd(1); - } - - m_rw = state; -} - - -//------------------------------------------------- -// stepper_w - -//------------------------------------------------- - -void compucolor_floppy_device::stepper_w(UINT8 data) -{ - if (!m_sel) - { - if ((m_stp == 1 && data == 4) || (m_stp == 2 && data == 1) || (m_stp == 4 && data == 2)) - { - // step in - m_floppy->dir_w(1); - m_floppy->stp_w(0); - m_floppy->stp_w(1); - } - else if ((m_stp == 1 && data == 2) || (m_stp == 2 && data == 4) || (m_stp == 4 && data == 1)) - { - // step out - m_floppy->dir_w(0); - m_floppy->stp_w(0); - m_floppy->stp_w(1); - } - } - - m_stp = data; -} - - -//------------------------------------------------- -// select_w - -//------------------------------------------------- - -void compucolor_floppy_device::select_w(int state) -{ - m_floppy->mon_w(state); - - if (!m_sel && state) - { - output_rxd(1); - } - - m_sel = state; -} - - -//------------------------------------------------- -// read_bit - -//------------------------------------------------- - -bool compucolor_floppy_device::read_bit() -{ - attotime when = machine().time(); - attotime edge = m_floppy->get_next_transition(when); - attotime next = when + m_period; - - return (edge.is_never() || edge >= next) ? 0 : 1; -} - - -//------------------------------------------------- -// write_bit - -//------------------------------------------------- - -void compucolor_floppy_device::write_bit(bool bit) -{ - // TODO -} diff --git a/src/mess/machine/compclr_flp.h b/src/mess/machine/compclr_flp.h deleted file mode 100644 index 4d75e3ca923..00000000000 --- a/src/mess/machine/compclr_flp.h +++ /dev/null @@ -1,126 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Curt Coder -/********************************************************************** - - Compucolor Floppy Disk Drive emulation - - Copyright MESS Team. - Visit http://mamedev.org for licensing and usage restrictions. - -*********************************************************************/ - -#pragma once - -#ifndef __COMPCLR_FLP__ -#define __COMPCLR_FLP__ - -#include "bus/rs232/rs232.h" -#include "formats/ccvf_dsk.h" -#include "imagedev/floppy.h" - - - -//************************************************************************** -// INTERFACE MACROS -//************************************************************************** - -#define MCFG_COMPUCOLOR_FLOPPY_PORT_ADD(_tag, _slot_intf, _def_slot) \ - MCFG_DEVICE_ADD(_tag, COMPUCOLOR_FLOPPY_PORT, 0) \ - MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) - - - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -// ======================> device_compucolor_floppy_port_interface - -class device_compucolor_floppy_port_interface : public device_rs232_port_interface -{ -public: - device_compucolor_floppy_port_interface(const machine_config &mconfig, device_t &device); - virtual ~device_compucolor_floppy_port_interface() { } - - virtual void rw_w(int state) = 0; - virtual void stepper_w(UINT8 data) = 0; - virtual void select_w(int state) = 0; -}; - - -// ======================> compucolor_floppy_port_device - -class compucolor_floppy_port_device : public rs232_port_device -{ -public: - compucolor_floppy_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - virtual ~compucolor_floppy_port_device() { } - - DECLARE_WRITE_LINE_MEMBER( rw_w ) { if (m_dev) m_dev->rw_w(state); } - void stepper_w(UINT8 data) { if (m_dev) m_dev->stepper_w(data); } - DECLARE_WRITE_LINE_MEMBER( select_w ) { if (m_dev) m_dev->select_w(state); } - -protected: - // device-level overrides - virtual void device_start(); - virtual void device_config_complete(); - -private: - device_compucolor_floppy_port_interface *m_dev; -}; - - -// ======================> compucolor_floppy_device - -class compucolor_floppy_device : public device_t, - public device_compucolor_floppy_port_interface -{ -public: - // construction/destruction - compucolor_floppy_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - DECLARE_FLOPPY_FORMATS( floppy_formats ); - - // optional information overrides - virtual machine_config_constructor device_mconfig_additions() const; - -protected: - // device-level overrides - virtual void device_start(); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); - - // device_serial_port_interface overrides - virtual void tx(UINT8 state); - - // device_compucolor_floppy_port_interface overrides - virtual void rw_w(int state); - virtual void stepper_w(UINT8 data); - virtual void select_w(int state); - -private: - required_device<floppy_image_device> m_floppy; - - bool read_bit(); - void write_bit(bool bit); - - int m_rw; - int m_stp; - int m_sel; - - attotime m_period; - - compucolor_floppy_port_device *m_owner; - - emu_timer *m_timer; -}; - - -// device type definition -extern const device_type COMPUCOLOR_FLOPPY_PORT; -extern const device_type COMPUCOLOR_FLOPPY; - - -// slot devices -SLOT_INTERFACE_EXTERN( compucolor_floppy_port_devices ); - -#endif diff --git a/src/mess/machine/cpc_pds.c b/src/mess/machine/cpc_pds.c deleted file mode 100644 index 19cb0bd1031..00000000000 --- a/src/mess/machine/cpc_pds.c +++ /dev/null @@ -1,87 +0,0 @@ -/* - * cpc_pds.c -- CPC interface hardware for the Programmers Development System - * - * Created on: 10/02/2014 - */ - -#include "emu.h" -#include "cpc_pds.h" -#include "includes/amstrad.h" - - -//************************************************************************** -// DEVICE DEFINITIONS -//************************************************************************** - -const device_type CPC_PDS = &device_creator<cpc_pds_device>; - - -static Z80PIO_INTERFACE( pio_intf ) -{ - DEVCB_NULL, //m_out_int_cb; - - DEVCB_NULL, //m_in_pa_cb; - DEVCB_NULL, //m_out_pa_cb; - DEVCB_NULL, //m_out_ardy_cb; - - DEVCB_NULL, //m_in_pb_cb; - DEVCB_NULL, //m_out_pb_cb; - DEVCB_NULL, //m_out_brdy_cb; -}; - -static MACHINE_CONFIG_FRAGMENT( cpc_pds ) - MCFG_Z80PIO_ADD("pio",XTAL_4MHz,pio_intf) // no clock on the PCB, so will presume that it uses the CPC's clock - - // no pass-through seen on remake PCBs, unknown if actual hardware had a pass-through port or not -MACHINE_CONFIG_END - - -machine_config_constructor cpc_pds_device::device_mconfig_additions() const -{ - return MACHINE_CONFIG_NAME( cpc_pds ); -} - - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -cpc_pds_device::cpc_pds_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - device_t(mconfig, CPC_PDS, "Programmers Development System (CPC Target)", tag, owner, clock, "cpc_pds", __FILE__), - device_cpc_expansion_card_interface(mconfig, *this), - m_pio(*this,"pio") -{ -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void cpc_pds_device::device_start() -{ - device_t* cpu = machine().device("maincpu"); - address_space& space = cpu->memory().space(AS_IO); - m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); - - space.install_readwrite_handler(0xfbec,0xfbef,0,0,read8_delegate(FUNC(cpc_pds_device::pio_r),this),write8_delegate(FUNC(cpc_pds_device::pio_w),this)); -} - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void cpc_pds_device::device_reset() -{ - // TODO -} - - -READ8_MEMBER(cpc_pds_device::pio_r) -{ - return m_pio->read(space,offset); -} - -WRITE8_MEMBER(cpc_pds_device::pio_w) -{ - m_pio->write(space,offset,data); -} diff --git a/src/mess/machine/cpc_pds.h b/src/mess/machine/cpc_pds.h deleted file mode 100644 index a1b5023ba29..00000000000 --- a/src/mess/machine/cpc_pds.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * cpc_pds.h -- CPC interface hardware for the Programmers Development System - * - * Created on: 10/02/2014 - * - * Contains a Z80 PIO used to communicate with PC-side hardware (8-bit ISA card containing an 8255 PPI), - * connected via a 16-pin cable. Although it would seem that the C64 has a different cable that directly - * interfaces with the user port. - * - * The Z80 PIO is mapped to the CPC at: - * FBEC Z80 PIO Port A Data (8bit data to/from PC) - * FBED Z80 PIO Port B Data (handshake to/from PC) - * FBEE Z80 PIO Port A Control - * FBEF Z80 PIO Port B Control - * - * More info: http://cpcwiki.eu/index.php/PDS_development_system - * - * TODO: Come up with some way to connect two instances of MESS, one running the PC software, the other - * running the target side - */ - -#ifndef CPC_PDS_H_ -#define CPC_PDS_H_ - -#include "emu.h" -#include "machine/cpcexp.h" -#include "machine/z80pio.h" - -class cpc_pds_device : public device_t, - public device_cpc_expansion_card_interface -{ -public: - // construction/destruction - cpc_pds_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // optional information overrides - virtual machine_config_constructor device_mconfig_additions() const; - - DECLARE_READ8_MEMBER(pio_r); - DECLARE_WRITE8_MEMBER(pio_w); - -protected: - // device-level overrides - virtual void device_start(); - virtual void device_reset(); - -private: - cpc_expansion_slot_device *m_slot; - - required_device<z80pio_device> m_pio; -}; - -// device type definition -extern const device_type CPC_PDS; - -#endif /* CPC_PDS_H_ */ diff --git a/src/mess/machine/cpc_rom.c b/src/mess/machine/cpc_rom.c deleted file mode 100644 index f671314b347..00000000000 --- a/src/mess/machine/cpc_rom.c +++ /dev/null @@ -1,136 +0,0 @@ -/* - * cpc_rom.c - * Amstrad CPC mountable ROM image device - * - */ - -#include "emu.h" -#include "machine/cpc_rom.h" -#include "includes/amstrad.h" - -const device_type CPC_ROM = &device_creator<cpc_rom_device>; - - -//************************************************************************** -// DEVICE CONFIG INTERFACE -//************************************************************************** - -CPC_EXPANSION_INTERFACE(sub_exp_intf) -{ - DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, irq_w), - DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, nmi_w), - DEVCB_NULL, // RESET - DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, romdis_w), // ROMDIS - DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, romen_w) // /ROMEN -}; - -// device machine config -static MACHINE_CONFIG_FRAGMENT( cpc_rom ) - MCFG_ROMSLOT_ADD("rom1") - MCFG_ROMSLOT_ADD("rom2") - MCFG_ROMSLOT_ADD("rom3") - MCFG_ROMSLOT_ADD("rom4") - MCFG_ROMSLOT_ADD("rom5") - MCFG_ROMSLOT_ADD("rom6") - - // pass-through - MCFG_CPC_EXPANSION_SLOT_ADD("exp",sub_exp_intf,cpc_exp_cards,NULL) - -MACHINE_CONFIG_END - - -machine_config_constructor cpc_rom_device::device_mconfig_additions() const -{ - return MACHINE_CONFIG_NAME( cpc_rom ); -} - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -cpc_rom_device::cpc_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - device_t(mconfig, CPC_ROM, "ROM Box", tag, owner, clock, "cpc_rom", __FILE__), - device_cpc_expansion_card_interface(mconfig, *this) -{ -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void cpc_rom_device::device_start() -{ -} - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void cpc_rom_device::device_reset() -{ -} - - -/*** ROM image device ***/ - -// device type definition -const device_type ROMSLOT = &device_creator<rom_image_device>; - -//------------------------------------------------- -// rom_image_device - constructor -//------------------------------------------------- - -rom_image_device::rom_image_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, ROMSLOT, "ROM image", tag, owner, clock, "rom_image", __FILE__), - device_image_interface(mconfig, *this) -{ -} - -//------------------------------------------------- -// rom_image_device - destructor -//------------------------------------------------- - -rom_image_device::~rom_image_device() -{ -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void rom_image_device::device_start() -{ - m_base = NULL; -} - -/*------------------------------------------------- - DEVICE_IMAGE_LOAD( rom ) --------------------------------------------------*/ -bool rom_image_device::call_load() -{ - device_image_interface* image = this; - UINT64 size = image->length(); - - m_base = (UINT8*)malloc(16384); - if(size <= 16384) - { - image->fread(m_base,size); - } - else - { - image->fseek(size-16384,SEEK_SET); - image->fread(m_base,16384); - } - - return IMAGE_INIT_PASS; -} - - -/*------------------------------------------------- - DEVICE_IMAGE_UNLOAD( rom ) --------------------------------------------------*/ -void rom_image_device::call_unload() -{ - free(m_base); - m_base = NULL; -} diff --git a/src/mess/machine/cpc_rom.h b/src/mess/machine/cpc_rom.h deleted file mode 100644 index be827da0cae..00000000000 --- a/src/mess/machine/cpc_rom.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * cpc_rom.h - * Amstrad CPC mountable ROM image device - * - */ - -#ifndef CPC_ROM_H_ -#define CPC_ROM_H_ - -#include "emu.h" -#include "machine/cpcexp.h" - -/*** ROM image device ***/ - -// ======================> rom_image_device - -class rom_image_device : public device_t, - public device_image_interface -{ -public: - // construction/destruction - rom_image_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - virtual ~rom_image_device(); - - // image-level overrides - virtual bool call_load(); - virtual void call_unload(); - - virtual iodevice_t image_type() const { return IO_ROM; } - - virtual bool is_readable() const { return 1; } - virtual bool is_writeable() const { return 0; } - virtual bool is_creatable() const { return 0; } - virtual bool must_be_loaded() const { return 0; } - virtual bool is_reset_on_load() const { return 1; } - virtual const char *image_interface() const { return "cpc_rom"; } - virtual const char *file_extensions() const { return "rom,bin"; } - virtual const option_guide *create_option_guide() const { return NULL; } - - UINT8* base() { return m_base; } - -protected: - // device-level overrides - virtual void device_config_complete() { update_names(); } - virtual void device_start(); - -private: - UINT8* m_base; -}; - - -// device type definition -extern const device_type ROMSLOT; - - -#define MCFG_ROMSLOT_ADD(_tag) \ - MCFG_DEVICE_ADD(_tag, ROMSLOT, 0) - -/*** ROM box device ***/ - -class cpc_rom_device : public device_t, - public device_cpc_expansion_card_interface -{ -public: - // construction/destruction - cpc_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // optional information overrides - virtual machine_config_constructor device_mconfig_additions() const; - - UINT8* base(UINT8 slot) { if(slot >=1 && slot <= 6) return m_rom[slot]->base(); else return NULL; } - -protected: - // device-level overrides - virtual void device_start(); - virtual void device_reset(); - -private: - //cpc_expansion_slot_device *m_slot; - - rom_image_device* m_rom[6]; -}; - -// device type definition -extern const device_type CPC_ROM; - - -#endif diff --git a/src/mess/machine/cpc_ssa1.c b/src/mess/machine/cpc_ssa1.c deleted file mode 100644 index 7e855493c66..00000000000 --- a/src/mess/machine/cpc_ssa1.c +++ /dev/null @@ -1,216 +0,0 @@ -/* - * cpc_ssa1.c -- Amstrad SSA-1 Speech Synthesiser, dk'Tronics Speech Synthesiser - * - * Created on: 16/07/2011 - * - */ - - -#include "emu.h" -#include "cpc_ssa1.h" -#include "includes/amstrad.h" - -//************************************************************************** -// DEVICE DEFINITIONS -//************************************************************************** - -const device_type CPC_SSA1 = &device_creator<cpc_ssa1_device>; -const device_type CPC_DKSPEECH = &device_creator<cpc_dkspeech_device>; - -CPC_EXPANSION_INTERFACE(sub_exp_intf) -{ - DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, irq_w), - DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, nmi_w), - DEVCB_NULL, // RESET - DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, romdis_w), // ROMDIS - DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, romen_w) // /ROMEN -}; - -//------------------------------------------------- -// device I/O handlers -//------------------------------------------------- - -READ8_MEMBER(cpc_ssa1_device::ssa1_r) -{ - UINT8 ret = 0xff; - - if(get_sby() == 0) - ret &= ~0x80; - - if(get_lrq() != 0) - ret &= ~0x40; - - return ret; -} - -WRITE8_MEMBER(cpc_ssa1_device::ssa1_w) -{ - m_sp0256_device->ald_w(space, 0, data); -} - -READ8_MEMBER(cpc_dkspeech_device::dkspeech_r) -{ - UINT8 ret = 0xff; - - // SBY is not connected - - if(get_lrq() != 0) - ret &= ~0x80; - - return ret; -} - -WRITE8_MEMBER(cpc_dkspeech_device::dkspeech_w) -{ - m_sp0256_device->ald_w(space, 0, data & 0x3f); -} - -WRITE_LINE_MEMBER(cpc_ssa1_device::lrq_cb) -{ - set_lrq(state); -} - -WRITE_LINE_MEMBER(cpc_ssa1_device::sby_cb) -{ - set_sby(state); -} - -WRITE_LINE_MEMBER(cpc_dkspeech_device::lrq_cb) -{ - set_lrq(state); -} - -WRITE_LINE_MEMBER(cpc_dkspeech_device::sby_cb) -{ - set_sby(state); -} - -//------------------------------------------------- -// Device ROM definition -//------------------------------------------------- - -// Has no actual ROM, just that internal to the SP0256 -ROM_START( cpc_ssa1 ) - ROM_REGION( 0x10000, "sp0256", 0 ) - ROM_LOAD( "sp0256-al2.bin", 0x1000, 0x0800, CRC(b504ac15) SHA1(e60fcb5fa16ff3f3b69d36c7a6e955744d3feafc) ) -ROM_END - -// Available in ROM and cassette versions. For now, we'll let the user choose to load the software via ROM (using a ROM box slot device) or cassette. -ROM_START( cpc_dkspeech ) - ROM_REGION( 0x10000, "sp0256", 0 ) - ROM_LOAD( "sp0256-al2.bin", 0x1000, 0x0800, CRC(b504ac15) SHA1(e60fcb5fa16ff3f3b69d36c7a6e955744d3feafc) ) -ROM_END - -//------------------------------------------------- -// rom_region - device-specific ROM region -//------------------------------------------------- - -const rom_entry *cpc_ssa1_device::device_rom_region() const -{ - return ROM_NAME( cpc_ssa1 ); -} - -const rom_entry *cpc_dkspeech_device::device_rom_region() const -{ - return ROM_NAME( cpc_dkspeech ); -} - -// device machine config -static MACHINE_CONFIG_FRAGMENT( cpc_ssa1 ) - MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_SOUND_ADD("sp0256",SP0256,XTAL_3_12MHz) - MCFG_SP0256_DATA_REQUEST_CB(WRITELINE(cpc_ssa1_device, lrq_cb)) - MCFG_SP0256_STANDBY_CB(WRITELINE(cpc_ssa1_device, sby_cb)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) - - // pass-through - MCFG_CPC_EXPANSION_SLOT_ADD("exp",sub_exp_intf,cpc_exp_cards,NULL) - -MACHINE_CONFIG_END - -static MACHINE_CONFIG_FRAGMENT( cpc_dkspeech ) - MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_SOUND_ADD("sp0256",SP0256,XTAL_4MHz) // uses the CPC's clock from pin 50 of the expansion port - MCFG_SP0256_DATA_REQUEST_CB(WRITELINE(cpc_dkspeech_device, lrq_cb)) - MCFG_SP0256_STANDBY_CB(WRITELINE(cpc_dkspeech_device, sby_cb)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) - - // pass-through - MCFG_CPC_EXPANSION_SLOT_ADD("exp",sub_exp_intf,cpc_exp_cards,NULL) - -MACHINE_CONFIG_END - -machine_config_constructor cpc_ssa1_device::device_mconfig_additions() const -{ - return MACHINE_CONFIG_NAME( cpc_ssa1 ); -} - -machine_config_constructor cpc_dkspeech_device::device_mconfig_additions() const -{ - return MACHINE_CONFIG_NAME( cpc_dkspeech ); -} - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -cpc_ssa1_device::cpc_ssa1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - device_t(mconfig, CPC_SSA1, "SSA-1", tag, owner, clock, "cpc_ssa1", __FILE__), - device_cpc_expansion_card_interface(mconfig, *this), - m_lrq(1), - m_sp0256_device(*this,"sp0256") -{ -} - -cpc_dkspeech_device::cpc_dkspeech_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - device_t(mconfig, CPC_DKSPEECH, "DK'Tronics Speech Synthesiser", tag, owner, clock, "cpc_dkspeech", __FILE__), - device_cpc_expansion_card_interface(mconfig, *this), - m_lrq(1), - m_sp0256_device(*this,"sp0256") -{ -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void cpc_ssa1_device::device_start() -{ - device_t* cpu = machine().device("maincpu"); - address_space& space = cpu->memory().space(AS_IO); - m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); - - m_rom = memregion("sp0256")->base(); - -// m_sp0256_device = subdevice("sp0256"); - - space.install_readwrite_handler(0xfaee,0xfaee,0,0,read8_delegate(FUNC(cpc_ssa1_device::ssa1_r),this),write8_delegate(FUNC(cpc_ssa1_device::ssa1_w),this)); - space.install_readwrite_handler(0xfbee,0xfbee,0,0,read8_delegate(FUNC(cpc_ssa1_device::ssa1_r),this),write8_delegate(FUNC(cpc_ssa1_device::ssa1_w),this)); -} - -void cpc_dkspeech_device::device_start() -{ - device_t* cpu = machine().device("maincpu"); - address_space& space = cpu->memory().space(AS_IO); - m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); - - m_rom = memregion("sp0256")->base(); - -// m_sp0256_device = subdevice("sp0256"); - - space.install_readwrite_handler(0xfbfe,0xfbfe,0,0,read8_delegate(FUNC(cpc_dkspeech_device::dkspeech_r),this),write8_delegate(FUNC(cpc_dkspeech_device::dkspeech_w),this)); -} - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void cpc_ssa1_device::device_reset() -{ - m_sp0256_device->reset(); -} - -void cpc_dkspeech_device::device_reset() -{ - m_sp0256_device->reset(); -} diff --git a/src/mess/machine/cpc_ssa1.h b/src/mess/machine/cpc_ssa1.h deleted file mode 100644 index 51f77367676..00000000000 --- a/src/mess/machine/cpc_ssa1.h +++ /dev/null @@ -1,126 +0,0 @@ -/* - * cpc_ssa1.h -- Amstrad SSA-1 Speech Synthesiser, dk'Tronics Speech Synthesiser - * - * Created on: 16/07/2011 - * - * Amstrad SSA-1 - SP0256-AL2 based Speech Synthesiser and Sound Amplifier - * - * Uses on-board resonator, clocked at 3.12MHz - * - * Decodes only I/O lines A10, A4 and A0 - * Official I/O ports: - * &FBEE (read) - * - bit 7: SP0256 Status 1 (SBY) - * - bit 6: SP0256 Status 2 (/LRQ) - * - * &FBEE (write) - * - bits 7-0: SP0256 Allophone number (must be 0x00 to 0x3f, however, all data lines are hooked up) - * - * &FAEE (write) - * - same as above, used because of a bug in the driver software, but still works due to the way the I/O ports are - * decoded on the CPC. - * - * More info and PCB pics at http://www.cpcwiki.eu/index.php/Amstrad_SSA-1_Speech_Synthesizer - * - * - * dk'Tronics Speech Synthesiser - SP0256-AL2 based speech synthesiser - * - * Uses the CPC's clock of 4MHz from pin 50 of the expansion port, gives faster and higher pitched voices than the SSA-1 - * - * Official I/O ports: - * &FBFE (read) - * - bit 7: SP0256 Status 2 (/LRQ) - * - * &FBFE (write) - * - bits 5-0: SP0256 Allophone number - * - * More info and PCB pics at http://www.cpcwiki.eu/index.php/Dk%27tronics_Speech_Synthesizer - * - */ - -#ifndef CPC_SSA1_H_ -#define CPC_SSA1_H_ - - -#include "emu.h" -#include "machine/cpcexp.h" -#include "sound/sp0256.h" - -class cpc_ssa1_device : public device_t, - public device_cpc_expansion_card_interface -{ -public: - // construction/destruction - cpc_ssa1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // optional information overrides - virtual const rom_entry *device_rom_region() const; - virtual machine_config_constructor device_mconfig_additions() const; - - void set_lrq(UINT8 state) { m_lrq = state; } - UINT8 get_lrq() { return m_lrq; } - void set_sby(UINT8 state) { m_sby = state; } - UINT8 get_sby() { return m_sby; } - - DECLARE_READ8_MEMBER(ssa1_r); - DECLARE_WRITE8_MEMBER(ssa1_w); - DECLARE_WRITE_LINE_MEMBER(lrq_cb); - DECLARE_WRITE_LINE_MEMBER(sby_cb); - -protected: - // device-level overrides - virtual void device_start(); - virtual void device_reset(); - -private: - cpc_expansion_slot_device *m_slot; - - UINT8 *m_rom; - UINT8 m_lrq; - UINT8 m_sby; - - required_device<sp0256_device> m_sp0256_device; -}; - -class cpc_dkspeech_device : public device_t, - public device_cpc_expansion_card_interface -{ -public: - // construction/destruction - cpc_dkspeech_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // optional information overrides - virtual const rom_entry *device_rom_region() const; - virtual machine_config_constructor device_mconfig_additions() const; - - void set_lrq(UINT8 state) { m_lrq = state; } - UINT8 get_lrq() { return m_lrq; } - void set_sby(UINT8 state) { m_sby = state; } - UINT8 get_sby() { return m_sby; } - - DECLARE_READ8_MEMBER(dkspeech_r); - DECLARE_WRITE8_MEMBER(dkspeech_w); - DECLARE_WRITE_LINE_MEMBER(lrq_cb); - DECLARE_WRITE_LINE_MEMBER(sby_cb); - -protected: - // device-level overrides - virtual void device_start(); - virtual void device_reset(); - -private: - cpc_expansion_slot_device *m_slot; - - UINT8 *m_rom; - UINT8 m_lrq; - UINT8 m_sby; - - required_device<sp0256_device> m_sp0256_device; -}; - -// device type definition -extern const device_type CPC_SSA1; -extern const device_type CPC_DKSPEECH; - - -#endif /* CPC_SSA1_H_ */ diff --git a/src/mess/machine/cpcexp.c b/src/mess/machine/cpcexp.c deleted file mode 100644 index 6c2115d4dc3..00000000000 --- a/src/mess/machine/cpcexp.c +++ /dev/null @@ -1,109 +0,0 @@ -/* - * cpcexp.c -- Amstrad CPC Expansion port - * - * Created on: 16/07/2011 - * - */ - - -#include "emu.h" -#include "emuopts.h" -#include "machine/cpcexp.h" - - -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -const device_type CPC_EXPANSION_SLOT = &device_creator<cpc_expansion_slot_device>; - - -//************************************************************************** -// DEVICE CPC_EXPANSION CARD INTERFACE -//************************************************************************** - - -device_cpc_expansion_card_interface::device_cpc_expansion_card_interface(const machine_config &mconfig, device_t &device) - : device_slot_card_interface(mconfig,device) -{ -} - - -device_cpc_expansion_card_interface::~device_cpc_expansion_card_interface() -{ -} - - - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -cpc_expansion_slot_device::cpc_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - device_t(mconfig, CPC_EXPANSION_SLOT, "Amstrad CPC expansion port", tag, owner, clock, "cpc_expansion_slot", __FILE__), - device_slot_interface(mconfig, *this) -{ -} - -cpc_expansion_slot_device::~cpc_expansion_slot_device() -{ -} - -//------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void cpc_expansion_slot_device::device_config_complete() -{ - // inherit a copy of the static data - const cpc_expansion_slot_interface *intf = reinterpret_cast<const cpc_expansion_slot_interface *>(static_config()); - if (intf != NULL) - { - *static_cast<cpc_expansion_slot_interface *>(this) = *intf; - } - - // or initialize to defaults if none provided - else - { - memset(&m_out_irq_cb, 0, sizeof(m_out_irq_cb)); - memset(&m_out_nmi_cb, 0, sizeof(m_out_nmi_cb)); - memset(&m_out_reset_cb, 0, sizeof(m_out_reset_cb)); - memset(&m_out_romdis_cb, 0, sizeof(m_out_romdis_cb)); - memset(&m_out_romen_cb, 0, sizeof(m_out_romen_cb)); - } -} - - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void cpc_expansion_slot_device::device_start() -{ - m_card = dynamic_cast<device_cpc_expansion_card_interface *>(get_card_device()); - - // resolve callbacks - m_out_irq_func.resolve(m_out_irq_cb, *this); - m_out_nmi_func.resolve(m_out_nmi_cb, *this); - m_out_reset_func.resolve(m_out_reset_cb, *this); - m_out_romdis_func.resolve(m_out_romdis_cb, *this); - m_out_romen_func.resolve(m_out_romen_cb, *this); -} - - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void cpc_expansion_slot_device::device_reset() -{ -} - - -WRITE_LINE_MEMBER( cpc_expansion_slot_device::irq_w ) { m_out_irq_func(state); } -WRITE_LINE_MEMBER( cpc_expansion_slot_device::nmi_w ) { m_out_nmi_func(state); } -WRITE_LINE_MEMBER( cpc_expansion_slot_device::reset_w ) { m_out_reset_func(state); } -WRITE_LINE_MEMBER( cpc_expansion_slot_device::romdis_w ) { m_out_romdis_func(state); } -WRITE_LINE_MEMBER( cpc_expansion_slot_device::romen_w ) { m_out_romen_func(state); } diff --git a/src/mess/machine/cpcexp.h b/src/mess/machine/cpcexp.h deleted file mode 100644 index 3e4df4f51a8..00000000000 --- a/src/mess/machine/cpcexp.h +++ /dev/null @@ -1,131 +0,0 @@ -/* - * cpcexp.h -- Amstrad CPC Expansion port - * - * Created on: 16/07/2011 - * - * Pinout from CPC6128 User's Manual - * SOUND 1 2 GND - * A15 3 4 A14 - * A13 5 6 A12 - * A11 7 8 A10 - * A9 9 10 A8 - * A7 11 12 A6 - * A5 13 14 A4 - * A3 15 16 A2 - * A1 17 18 A0 - * D7 19 20 D6 - * D5 21 22 D4 - * D3 23 24 D2 - * D1 25 26 D0 - * +5v 27 28 _MREQ - * _M1 29 30 _RFSH - * _IORQ 31 32 _RD - * _WR 33 34 _HALT - * _INT 35 36 _NMI - * _BUSR2 37 38 _BUSAK - * READY 39 40 _BUS RESET - * _RESET 41 42 _ROMEN - * ROMDIS 43 44 _RAMRD - * RAMDIS 45 46 CURSOR - * L.PEN 47 48 _EXP - * GND 49 50 CLOCK - */ - -#pragma once - -#ifndef CPCEXP_H_ -#define CPCEXP_H_ - -#include "emu.h" - -//************************************************************************** -// CONSTANTS -//************************************************************************** - -#define CPC_EXP_SLOT_TAG "cpcexp" - - - -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define CPC_EXPANSION_INTERFACE(_name) \ - const cpc_expansion_slot_interface (_name) = - - -#define MCFG_CPC_EXPANSION_SLOT_ADD(_tag, _config, _slot_intf, _def_slot) \ - MCFG_DEVICE_ADD(_tag, CPC_EXPANSION_SLOT, 0) \ - MCFG_DEVICE_CONFIG(_config) \ - MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) - - - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -// expansion slot interface - -struct cpc_expansion_slot_interface -{ - devcb_write_line m_out_irq_cb; - devcb_write_line m_out_nmi_cb; - devcb_write_line m_out_reset_cb; - devcb_write_line m_out_romdis_cb; - devcb_write_line m_out_romen_cb; -}; - - -// ======================> device_cpc_expansion_card_interface - -// class representing interface-specific live cpc_expansion card -class device_cpc_expansion_card_interface : public device_slot_card_interface -{ -public: - // construction/destruction - device_cpc_expansion_card_interface(const machine_config &mconfig, device_t &device); - virtual ~device_cpc_expansion_card_interface(); - - // reset - virtual void cpc_reset_w() { }; -}; - - -// ======================> cpc_expansion_slot_device - -class cpc_expansion_slot_device : public device_t, - public cpc_expansion_slot_interface, - public device_slot_interface -{ -public: - // construction/destruction - cpc_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - virtual ~cpc_expansion_slot_device(); - - DECLARE_WRITE_LINE_MEMBER( irq_w ); - DECLARE_WRITE_LINE_MEMBER( nmi_w ); - DECLARE_WRITE_LINE_MEMBER( reset_w ); - DECLARE_WRITE_LINE_MEMBER( romdis_w ); - DECLARE_WRITE_LINE_MEMBER( romen_w ); - -protected: - // device-level overrides - virtual void device_start(); - virtual void device_reset(); - virtual void device_config_complete(); - - devcb_resolved_write_line m_out_irq_func; - devcb_resolved_write_line m_out_nmi_func; - devcb_resolved_write_line m_out_reset_func; - devcb_resolved_write_line m_out_romdis_func; - devcb_resolved_write_line m_out_romen_func; - - device_cpc_expansion_card_interface *m_card; -}; - - -// device type definition -extern const device_type CPC_EXPANSION_SLOT; - -#endif /* CPCEXP_H_ */ diff --git a/src/mess/machine/ds1315.c b/src/mess/machine/ds1315.c deleted file mode 100644 index c64ee315962..00000000000 --- a/src/mess/machine/ds1315.c +++ /dev/null @@ -1,218 +0,0 @@ -/********************************************************************* - - ds1315.c - - Dallas Semiconductor's Phantom Time Chip DS1315. - - by tim lindner, November 2001. - -*********************************************************************/ - -#include "ds1315.h" -#include "coreutil.h" - - -const device_type DS1315 = &device_creator<ds1315_device>; - -ds1315_device::ds1315_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, DS1315, "Dallas Semiconductor DS1315", tag, owner, clock, "ds1315", __FILE__) -{ -} - -//------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void ds1315_device::device_config_complete() -{ -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void ds1315_device::device_start() -{ - save_item(NAME(m_count)); - save_item(NAME(m_mode)); - save_item(NAME(m_raw_data)); -} - - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void ds1315_device::device_reset() -{ - memset(m_raw_data, 0, sizeof(m_raw_data)); - m_count = 0; - m_mode = DS_SEEK_MATCHING; -} - - -/*************************************************************************** - LOCAL VARIABLES -***************************************************************************/ - -static const UINT8 ds1315_pattern[] = -{ - 1, 0, 1, 0, 0, 0, 1, 1, - 0, 1, 0, 1, 1, 1, 0, 0, - 1, 1, 0, 0, 0, 1, 0, 1, - 0, 0, 1, 1, 1, 0, 1, 0, - 1, 0, 1, 0, 0, 0, 1, 1, - 0, 1, 0, 1, 1, 1, 0, 0, - 1, 1, 0, 0, 0, 1, 0, 1, - 0, 0, 1, 1, 1, 0, 1, 0 -}; - - -/*************************************************************************** - IMPLEMENTATION -***************************************************************************/ - -/*------------------------------------------------- - read_0 - -------------------------------------------------*/ - -READ8_MEMBER( ds1315_device::read_0 ) -{ - if (ds1315_pattern[m_count++] == 0) - { - if (m_count == 64) - { - /* entire pattern matched */ - m_count = 0; - m_mode = DS_CALENDAR_IO; - fill_raw_data(); - } - - return 0; - } - - m_count = 0; - m_mode = DS_SEEK_MATCHING; - return 0; -} - - -/*------------------------------------------------- - read_1 --------------------------------------------------*/ - -READ8_MEMBER( ds1315_device::read_1 ) -{ - if (ds1315_pattern[m_count++] == 1) - { - m_count %= 64; - return 0; - } - - m_count = 0; - m_mode = DS_SEEK_MATCHING; - return 0; -} - - -/*------------------------------------------------- - read_data --------------------------------------------------*/ - -READ8_MEMBER( ds1315_device::read_data ) -{ - UINT8 result; - - if (m_mode == DS_CALENDAR_IO) - { - result = m_raw_data[m_count++]; - - if (m_count == 64) - { - m_mode = DS_SEEK_MATCHING; - m_count = 0; - } - - return result; - } - - m_count = 0; - return 0; -} - - -/*------------------------------------------------- - write_data --------------------------------------------------*/ - -WRITE8_MEMBER( ds1315_device::write_data ) -{ - if (m_mode == DS_CALENDAR_IO) - { - m_raw_data[m_count++] = data & 0x01; - - if (m_count == 64) - { - m_mode = DS_SEEK_MATCHING; - m_count = 0; - input_raw_data(); - } - return; - } - - m_count = 0; -} - - -/*------------------------------------------------- - fill_raw_data --------------------------------------------------*/ - -void ds1315_device::fill_raw_data() -{ - /* This routine will (hopefully) call a standard 'C' library routine to get the current - date and time and then fill in the raw data struct. - */ - - system_time systime; - int raw[8], i, j; - - /* get the current date/time from the core */ - machine().current_datetime(systime); - - raw[0] = 0; /* tenths and hundreths of seconds are always zero */ - raw[1] = dec_2_bcd(systime.local_time.second); - raw[2] = dec_2_bcd(systime.local_time.minute); - raw[3] = dec_2_bcd(systime.local_time.hour); - - raw[4] = dec_2_bcd((systime.local_time.weekday != 0) ? systime.local_time.weekday : 7); - raw[5] = dec_2_bcd(systime.local_time.mday); - raw[6] = dec_2_bcd(systime.local_time.month + 1); - raw[7] = dec_2_bcd(systime.local_time.year - 1900); /* Epoch is 1900 */ - - /* Ok now we have the raw bcd bytes. Now we need to push them into our bit array */ - - for (i = 0; i < 64; i++) - { - j = i / 8; - m_raw_data[i] = (raw[j] & 0x0001); - raw[j] = raw[j] >> 1; - } -} - - -/*------------------------------------------------- - ds1315_input_raw_data --------------------------------------------------*/ - -void ds1315_device::input_raw_data() -{ - /* This routine is called when new date and time has been written to the - clock chip. Currently we ignore setting the date and time in the clock - chip. - - We always return the host's time when asked. - */ -} diff --git a/src/mess/machine/ds1315.h b/src/mess/machine/ds1315.h deleted file mode 100644 index d4ab0cfb967..00000000000 --- a/src/mess/machine/ds1315.h +++ /dev/null @@ -1,67 +0,0 @@ -/********************************************************************* - - ds1315.h - - Dallas Semiconductor's Phantom Time Chip DS1315. - - by tim lindner, November 2001. - -*********************************************************************/ - -#ifndef __DS1315_H__ -#define __DS1315_H__ - -#include "emu.h" - - -/*************************************************************************** - MACROS -***************************************************************************/ - -enum ds1315_mode_t -{ - DS_SEEK_MATCHING, - DS_CALENDAR_IO -}; - -ALLOW_SAVE_TYPE(ds1315_mode_t); - -class ds1315_device : public device_t -{ -public: - ds1315_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - ~ds1315_device() {} - - DECLARE_READ8_MEMBER(read_0); - DECLARE_READ8_MEMBER(read_1); - DECLARE_READ8_MEMBER(read_data); - DECLARE_WRITE8_MEMBER(write_data); - -protected: - // device-level overrides - virtual void device_config_complete(); - virtual void device_start(); - virtual void device_reset(); - -private: - // internal state - - void fill_raw_data(); - void input_raw_data(); - - int m_count; - ds1315_mode_t m_mode; - UINT8 m_raw_data[8*8]; -}; - -extern const device_type DS1315; - -/*************************************************************************** - DEVICE CONFIGURATION MACROS -***************************************************************************/ - -#define MCFG_DS1315_ADD(_tag) \ - MCFG_DEVICE_ADD(_tag, DS1315, 0) - - -#endif /* __DS1315_H__ */ diff --git a/src/mess/machine/epson_sio.c b/src/mess/machine/epson_sio.c deleted file mode 100644 index 1200e904f78..00000000000 --- a/src/mess/machine/epson_sio.c +++ /dev/null @@ -1,116 +0,0 @@ -/********************************************************************** - - EPSON SIO port emulation - - license: MAME, GPL-2.0+ - copyright-holders: Dirk Best - -**********************************************************************/ - -#include "epson_sio.h" - -// supported devices -#include "machine/pf10.h" -#include "machine/tf20.h" - - -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -const device_type EPSON_SIO = &device_creator<epson_sio_device>; - - -//************************************************************************** -// CARD INTERFACE -//************************************************************************** - -//------------------------------------------------- -// device_epson_sio_interface - constructor -//------------------------------------------------- - -device_epson_sio_interface::device_epson_sio_interface(const machine_config &mconfig, device_t &device) : - device_slot_card_interface(mconfig, device) -{ - m_slot = dynamic_cast<epson_sio_device *>(device.owner()); -} - - -//------------------------------------------------- -// ~device_epson_sio_interface - destructor -//------------------------------------------------- - -device_epson_sio_interface::~device_epson_sio_interface() -{ -} - - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -//------------------------------------------------- -// epson_sio_device - constructor -//------------------------------------------------- - -epson_sio_device::epson_sio_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - device_t(mconfig, EPSON_SIO, "EPSON SIO port", tag, owner, clock, "epson_sio", __FILE__), - device_slot_interface(mconfig, *this), - m_write_rx(*this), - m_write_pin(*this) -{ -} - - -//------------------------------------------------- -// epson_sio_device - destructor -//------------------------------------------------- - -epson_sio_device::~epson_sio_device() -{ -} - - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void epson_sio_device::device_start() -{ - m_cart = dynamic_cast<device_epson_sio_interface *>(get_card_device()); - - m_write_rx.resolve_safe(); - m_write_pin.resolve_safe(); -} - - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void epson_sio_device::device_reset() -{ -} - - -WRITE_LINE_MEMBER( epson_sio_device::tx_w ) -{ - if (m_cart != NULL) - m_cart->tx_w(state); -} - -WRITE_LINE_MEMBER( epson_sio_device::pout_w ) -{ - if (m_cart != NULL) - m_cart->pout_w(state); -} - - -//************************************************************************** -// SLOT INTERFACE -//************************************************************************** - -SLOT_INTERFACE_START( epson_sio_devices ) - SLOT_INTERFACE("pf10", EPSON_PF10) - SLOT_INTERFACE("tf20", EPSON_TF20) -SLOT_INTERFACE_END diff --git a/src/mess/machine/epson_sio.h b/src/mess/machine/epson_sio.h deleted file mode 100644 index f398d4d1ea1..00000000000 --- a/src/mess/machine/epson_sio.h +++ /dev/null @@ -1,97 +0,0 @@ -/********************************************************************** - - EPSON SIO port emulation - - license: MAME, GPL-2.0+ - copyright-holders: Dirk Best - -**********************************************************************/ - -#pragma once - -#ifndef __EPSON_SIO_H__ -#define __EPSON_SIO_H__ - -#include "emu.h" - - -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_EPSON_SIO_ADD(_tag, _def_slot) \ - MCFG_DEVICE_ADD(_tag, EPSON_SIO, 0) \ - MCFG_DEVICE_SLOT_INTERFACE(epson_sio_devices, _def_slot, false) - -#define MCFG_EPSON_SIO_RX(_rx) \ - downcast<epson_sio_device *>(device)->set_rx_callback(DEVCB2_##_rx); - -#define MCFG_EPSON_SIO_PIN(_pin) \ - downcast<epson_sio_device *>(device)->set_pin_callback(DEVCB2_##_pin); - - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class device_epson_sio_interface; - - -class epson_sio_device : public device_t, - public device_slot_interface -{ -public: - // construction/destruction - epson_sio_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - virtual ~epson_sio_device(); - - // callbacks - template<class _rx> void set_rx_callback(_rx rx) { m_write_rx.set_callback(rx); } - template<class _pin> void set_pin_callback(_pin pin) { m_write_pin.set_callback(pin); } - - // called from owner - DECLARE_WRITE_LINE_MEMBER( tx_w ); - DECLARE_WRITE_LINE_MEMBER( pout_w ); - - // called from subdevice - DECLARE_WRITE_LINE_MEMBER( rx_w ) { m_write_rx(state); } - DECLARE_WRITE_LINE_MEMBER( pin_w ) { m_write_pin(state); } - -protected: - // device-level overrides - virtual void device_start(); - virtual void device_reset(); - - device_epson_sio_interface *m_cart; - -private: - devcb2_write_line m_write_rx; - devcb2_write_line m_write_pin; -}; - - -// class representing interface-specific live sio device -class device_epson_sio_interface : public device_slot_card_interface -{ -public: - // construction/destruction - device_epson_sio_interface(const machine_config &mconfig, device_t &device); - virtual ~device_epson_sio_interface(); - - virtual void tx_w(int state) { }; - virtual void pout_w(int state) { }; - -protected: - epson_sio_device *m_slot; -}; - - -// device type definition -extern const device_type EPSON_SIO; - - -// supported devices -SLOT_INTERFACE_EXTERN( epson_sio_devices ); - - -#endif // __EPSON_SIO_H__ diff --git a/src/mess/machine/mface2.c b/src/mess/machine/mface2.c deleted file mode 100644 index 9ee9006037f..00000000000 --- a/src/mess/machine/mface2.c +++ /dev/null @@ -1,348 +0,0 @@ -/* - * mface2.c -- Romantic Robot Multiface II expansion device for the Amstrad CPC/CPC+ - * - * Created on: 31/07/2011 - */ - -#include "emu.h" -#include "machine/mface2.h" -#include "includes/amstrad.h" - -//************************************************************************** -// DEVICE DEFINITIONS -//************************************************************************** - -const device_type CPC_MFACE2 = &device_creator<cpc_multiface2_device>; - -CPC_EXPANSION_INTERFACE(sub_exp_intf) -{ - DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, irq_w), - DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, nmi_w), - DEVCB_NULL, // RESET - DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, romdis_w), // ROMDIS - DEVCB_DEVICE_LINE_MEMBER("^^", cpc_expansion_slot_device, romen_w) // /ROMEN -}; - -// device machine config -static MACHINE_CONFIG_FRAGMENT( cpc_mface2 ) - // pass-through - MCFG_CPC_EXPANSION_SLOT_ADD("exp",sub_exp_intf,cpc_exp_cards,NULL) -MACHINE_CONFIG_END - -DIRECT_UPDATE_MEMBER( cpc_multiface2_device::amstrad_default ) -{ - return address; -} - -/* used to setup computer if a snapshot was specified */ -DIRECT_UPDATE_MEMBER( cpc_multiface2_device::amstrad_multiface_directoverride ) -{ - int pc; - - pc = machine().device("maincpu")->safe_pc(); - /* there are two places where CALL &0065 can be found - in the multiface rom. At this address there is a RET. - - To disable the multiface from being detected, the multiface - stop button must be pressed, then the program that was stopped - must be returned to. When this is done, the multiface cannot - be detected and the out operations to page the multiface - ram/rom into the address space will not work! */ - - /* I assume that the hardware in the multiface detects - the PC set to 0x065 and uses this to enable/disable the multiface - */ - - /* I also use this to allow the stop button to be pressed again */ - if (pc==0x0164) - { - /* first call? */ - m_multiface_flags |= MULTIFACE_VISIBLE; - } - else if (pc==0x0c98) - { - /* second call */ - - /* no longer visible */ - m_multiface_flags &= ~(MULTIFACE_VISIBLE|MULTIFACE_STOP_BUTTON_PRESSED); - - m_romdis=0; - m_slot->romen_w(0); - - /* clear op base override */ - machine().device("maincpu")->memory().space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(FUNC(cpc_multiface2_device::amstrad_default),this)); - } - - return pc; -} - -int cpc_multiface2_device::multiface_hardware_enabled() -{ - if (m_multiface_ram!=NULL) - { - if ((ioport("multiface")->read() & 0x01)!=0) - { - return 1; - } - } - - return 0; -} - -/* multiface traps calls to 0x0065 when it is active. -This address has a RET and so executes no code. - -It is believed that it is used to make multiface invisible to programs */ - -/*#define MULTIFACE_0065_TOGGLE 0x0008*/ - - -void cpc_multiface2_device::multiface_rethink_memory() -{ - unsigned char *multiface_rom; - - /* multiface hardware enabled? */ - if (!multiface_hardware_enabled()) - return; - - multiface_rom = memregion("multiface")->base(); - - if ((m_multiface_flags & MULTIFACE_RAM_ROM_ENABLED)!=0 && m_romdis != 0) - { - /* set bank addressess */ - machine().root_device().membank("bank1")->set_base(multiface_rom); - machine().root_device().membank("bank2")->set_base(m_multiface_ram); - machine().root_device().membank("bank9")->set_base(multiface_rom); - machine().root_device().membank("bank10")->set_base(m_multiface_ram); - } -} - -machine_config_constructor cpc_multiface2_device::device_mconfig_additions() const -{ - return MACHINE_CONFIG_NAME( cpc_mface2 ); -} - -void cpc_multiface2_device::check_button_state() -{ - if(!multiface_hardware_enabled()) - return; - // TODO: reset button - if (ioport("multiface")->read() & 0x02) - { - multiface_stop(); - } -} - -/* simulate the stop button has been pressed */ -void cpc_multiface2_device::multiface_stop() -{ - /* multiface hardware enabled? */ - if (!multiface_hardware_enabled()) - return; - - /* if stop button not already pressed, do press action */ - /* pressing stop button while multiface is running has no effect */ - if ((m_multiface_flags & MULTIFACE_STOP_BUTTON_PRESSED)==0) - { - /* initialise 0065 toggle */ - /*state->m_multiface_flags &= ~MULTIFACE_0065_TOGGLE;*/ - - m_multiface_flags |= MULTIFACE_RAM_ROM_ENABLED; - - /* stop button has been pressed, furthur pressess will not issue a NMI */ - m_multiface_flags |= MULTIFACE_STOP_BUTTON_PRESSED; - - m_romdis = 1; - m_slot->romen_w(1); - - /* page rom into memory */ - multiface_rethink_memory(); - - /* pulse the nmi line */ - m_slot->nmi_w(1); - m_slot->nmi_w(0); - - /* initialise 0065 override to monitor calls to 0065 */ - machine().device("maincpu")->memory().space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(FUNC(cpc_multiface2_device::amstrad_multiface_directoverride),this)); - } -} - -/* any io writes are passed through here */ -int cpc_multiface2_device::multiface_io_write(UINT16 offset, UINT8 data) -{ - int ret = 0; - - /* multiface hardware enabled? */ - if (!multiface_hardware_enabled()) - return 0; - - /* visible? */ - if (m_multiface_flags & MULTIFACE_VISIBLE) - { - if (offset==0x0fee8) - { - m_multiface_flags |= MULTIFACE_RAM_ROM_ENABLED; - ret = 1; - } - - if (offset==0x0feea) - { - m_multiface_flags &= ~MULTIFACE_RAM_ROM_ENABLED; - ret = 1; - } - } - - /* update multiface ram with data */ - /* these are decoded fully! */ - switch ((offset>>8) & 0x0ff) - { - /* gate array */ - case 0x07f: - { - switch (data & 0x0c0) - { - /* pen index */ - case 0x00: - { - m_multiface_ram[0x01fcf] = data; - } - break; - /* pen colour */ - case 0x040: - { - int pen_index; - pen_index = m_multiface_ram[0x01fcf] & 0x0f; - if (m_multiface_ram[0x01fcf] & 0x010) - { - m_multiface_ram[0x01fdf + pen_index] = data; - } - else - { - m_multiface_ram[0x01f90 + pen_index] = data & 0x01f; - } - } - break; - /* rom/mode selection */ - case 0x080: - { - m_multiface_ram[0x01fef] = data; - } - break; - /* ram configuration */ - case 0x0c0: - { - m_multiface_ram[0x01fff] = data; - } - break; - default: - break; - } - } - break; - - /* crtc register index */ - case 0x0bc: - { - m_multiface_ram[0x01cff] = data; - } - break; - /* crtc register write */ - case 0x0bd: - { - int reg_index; - reg_index = m_multiface_ram[0x01cff] & 0x0f; - m_multiface_ram[0x01db0 + reg_index] = data; - } - break; - - - /* 8255 ppi control */ - case 0x0f7: - { - m_multiface_ram[0x017ff] = data; - } - break; - /* rom select */ - case 0x0df: - { - m_multiface_ram[0x01aac] = data; - } - break; - default: - break; - } - return ret; -} - -static INPUT_PORTS_START(cpc_mface2) - PORT_START("multiface") - PORT_CONFNAME(0x01, 0x00, "Multiface Two" ) - PORT_CONFSETTING(0x00, DEF_STR( Off) ) - PORT_CONFSETTING(0x01, DEF_STR( On) ) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Multiface Two's Stop Button") PORT_CODE(KEYCODE_F6) - // PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Multiface Two's Reset Button") PORT_CODE(KEYCODE_F3) Not implemented -INPUT_PORTS_END - - - -//------------------------------------------------- -// Device ROM definition -//------------------------------------------------- - -// Second known revision (1988) -ROM_START( cpc_mface2 ) - ROM_REGION( 0x2000, "multiface", 0 ) - ROM_LOAD("multface.rom", 0x0000, 0x2000, CRC(f36086de) SHA1(1431ec628d38f000715545dd2186b684c5fe5a6f)) -ROM_END - -//------------------------------------------------- -// rom_region - device-specific ROM region -//------------------------------------------------- - -const rom_entry *cpc_multiface2_device::device_rom_region() const -{ - return ROM_NAME( cpc_mface2 ); -} - -ioport_constructor cpc_multiface2_device::device_input_ports() const -{ - return INPUT_PORTS_NAME( cpc_mface2 ); -} - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -cpc_multiface2_device::cpc_multiface2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - device_t(mconfig, CPC_MFACE2, "Multiface II", tag, owner, clock, "cpc_mf2", __FILE__), - device_cpc_expansion_card_interface(mconfig, *this) -{ -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void cpc_multiface2_device::device_start() -{ - m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner()); - - /* after a reset the multiface is visible */ - m_multiface_flags = MULTIFACE_VISIBLE; - - /* allocate ram */ - m_multiface_ram = auto_alloc_array(machine(), UINT8, 8192); -} - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void cpc_multiface2_device::device_reset() -{ - /* stop button not pressed and ram/rom disabled */ - m_multiface_flags &= ~(MULTIFACE_STOP_BUTTON_PRESSED | - MULTIFACE_RAM_ROM_ENABLED); - /* as on the real hardware the multiface is visible after a reset! */ - m_multiface_flags |= MULTIFACE_VISIBLE; -} diff --git a/src/mess/machine/mface2.h b/src/mess/machine/mface2.h deleted file mode 100644 index 01558ed7d60..00000000000 --- a/src/mess/machine/mface2.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * mface2.h -- Romantic Robot Multiface II expansion device for the Amstrad CPC/CPC+ - * - * Created on: 31/07/2011 - * - * I/O Ports: - * - FEE8: Enables Multiface ROM and RAM - * - FEEA: Disables Multiface ROM and RAM - * - * When enabled, Multiface ROM is mapped to &0000, and RAM to &2000 - * - * When the Stop button is pressed, the Multiface II will generate an NMI - * (I guess the ROM/RAM is enabled when you do this also?) - * - * It also monitors all I/O port writes, so that it can restore them when resuming the current application. - */ - -#ifndef MFACE2_H_ -#define MFACE2_H_ - -#include "emu.h" -#include "machine/cpcexp.h" - -/* stop button has been pressed */ -#define MULTIFACE_STOP_BUTTON_PRESSED 0x0001 -/* ram/rom is paged into memory space */ -#define MULTIFACE_RAM_ROM_ENABLED 0x0002 -/* when visible OUT commands are performed! */ -#define MULTIFACE_VISIBLE 0x0004 - - -class cpc_multiface2_device : public device_t, - public device_cpc_expansion_card_interface -{ -public: - // construction/destruction - cpc_multiface2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // optional information overrides - virtual const rom_entry *device_rom_region() const; - virtual ioport_constructor device_input_ports() const; - virtual machine_config_constructor device_mconfig_additions() const; - - int multiface_hardware_enabled(); - void multiface_rethink_memory(); - void multiface_stop(); - int multiface_io_write(UINT16 offset, UINT8 data); - void check_button_state(); -protected: - // device-level overrides - virtual void device_start(); - virtual void device_reset(); - -private: - cpc_expansion_slot_device *m_slot; - - DIRECT_UPDATE_MEMBER( amstrad_default ); - DIRECT_UPDATE_MEMBER( amstrad_multiface_directoverride ); - - unsigned char *m_multiface_ram; - unsigned long m_multiface_flags; - - UINT8 m_romdis; -}; - -// device type definition -extern const device_type CPC_MFACE2; - -#endif /* MFACE2_H_ */ diff --git a/src/mess/machine/pce_rom.c b/src/mess/machine/pce_rom.c deleted file mode 100644 index 076c0a0adf9..00000000000 --- a/src/mess/machine/pce_rom.c +++ /dev/null @@ -1,124 +0,0 @@ -/*********************************************************************************************************** - - - PC-Engine & Turbografx-16 cart emulation - - - ***********************************************************************************************************/ - - -#include "emu.h" -#include "machine/pce_rom.h" - - -//------------------------------------------------- -// pce_rom_device - constructor -//------------------------------------------------- - -const device_type PCE_ROM_STD = &device_creator<pce_rom_device>; -const device_type PCE_ROM_CDSYS3 = &device_creator<pce_cdsys3_device>; -const device_type PCE_ROM_POPULOUS = &device_creator<pce_populous_device>; -const device_type PCE_ROM_SF2 = &device_creator<pce_sf2_device>; - - -pce_rom_device::pce_rom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) - : device_t(mconfig, type, name, tag, owner, clock, shortname, source), - device_pce_cart_interface( mconfig, *this ) -{ -} - -pce_rom_device::pce_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, PCE_ROM_STD, "PCE & TG16 Carts", tag, owner, clock, "pce_rom", __FILE__), - device_pce_cart_interface( mconfig, *this ) -{ -} - -pce_cdsys3_device::pce_cdsys3_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : pce_rom_device(mconfig, PCE_ROM_CDSYS3, "PCE & TG16 CD-System Cart v3.00", tag, owner, clock, "pce_cdsys3", __FILE__) -{ -} - -pce_populous_device::pce_populous_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : pce_rom_device(mconfig, PCE_ROM_POPULOUS, "PCE Populous Cart", tag, owner, clock, "pce_populous", __FILE__) -{ -} - -pce_sf2_device::pce_sf2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : pce_rom_device(mconfig, PCE_ROM_SF2, "PCE Street Fighters 2 Cart", tag, owner, clock, "pce_sf2", __FILE__) -{ -} - - -//------------------------------------------------- -// mapper specific start/reset -//------------------------------------------------- - - -void pce_sf2_device::device_start() -{ - save_item(NAME(m_bank_base)); -} - -void pce_sf2_device::device_reset() -{ - m_bank_base = 0; -} - - - -/*------------------------------------------------- - mapper specific handlers - -------------------------------------------------*/ - -READ8_MEMBER(pce_rom_device::read_cart) -{ - int bank = offset / 0x20000; - return m_rom[rom_bank_map[bank] * 0x20000 + (offset & 0x1ffff)]; -} - - -READ8_MEMBER(pce_cdsys3_device::read_cart) -{ - int bank = offset / 0x20000; - if (m_ram && offset >= 0xd0000) - return m_ram[offset - 0xd0000]; - - return m_rom[rom_bank_map[bank] * 0x20000 + (offset & 0x1ffff)]; -} - -WRITE8_MEMBER(pce_cdsys3_device::write_cart) -{ - if (m_ram && offset >= 0xd0000) - m_ram[offset - 0xd0000] = data; -} - - -READ8_MEMBER(pce_populous_device::read_cart) -{ - int bank = offset / 0x20000; - if (m_ram && offset >= 0x80000 && offset < 0x88000) - return m_ram[offset & 0x7fff]; - - return m_rom[rom_bank_map[bank] * 0x20000 + (offset & 0x1ffff)]; -} - -WRITE8_MEMBER(pce_populous_device::write_cart) -{ - if (m_ram && offset >= 0x80000 && offset < 0x88000) - m_ram[offset & 0x7fff] = data; -} - - -READ8_MEMBER(pce_sf2_device::read_cart) -{ - if (offset < 0x80000) - return m_rom[offset]; - else - return m_rom[0x80000 + m_bank_base * 0x80000 + (offset & 0x7ffff)]; -} - -WRITE8_MEMBER(pce_sf2_device::write_cart) -{ - if (offset >= 0x1ff0 && offset < 0x1ff4) - m_bank_base = offset & 3; -} diff --git a/src/mess/machine/pce_rom.h b/src/mess/machine/pce_rom.h deleted file mode 100644 index caaa1bcc7c7..00000000000 --- a/src/mess/machine/pce_rom.h +++ /dev/null @@ -1,83 +0,0 @@ -#ifndef __PCE_ROM_H -#define __PCE_ROM_H - -#include "machine/pce_slot.h" - - -// ======================> pce_rom_device - -class pce_rom_device : public device_t, - public device_pce_cart_interface -{ -public: - // construction/destruction - pce_rom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); - pce_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // device-level overrides - virtual void device_start() {} - virtual void device_reset() {} - - // reading and writing - virtual DECLARE_READ8_MEMBER(read_cart); -}; - -// ======================> pce_cdsys3_device - -class pce_cdsys3_device : public pce_rom_device -{ -public: - // construction/destruction - pce_cdsys3_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // reading and writing - virtual DECLARE_READ8_MEMBER(read_cart); - virtual DECLARE_WRITE8_MEMBER(write_cart); -}; - - -// ======================> pce_populous_device - -class pce_populous_device : public pce_rom_device -{ -public: - // construction/destruction - pce_populous_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // reading and writing - virtual DECLARE_READ8_MEMBER(read_cart); - virtual DECLARE_WRITE8_MEMBER(write_cart); -}; - - -// ======================> pce_sf2_device - -class pce_sf2_device : public pce_rom_device -{ -public: - // construction/destruction - pce_sf2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // device-level overrides - virtual void device_start(); - virtual void device_reset(); - - // reading and writing - virtual DECLARE_READ8_MEMBER(read_cart); - virtual DECLARE_WRITE8_MEMBER(write_cart); - -private: - UINT8 m_bank_base; -}; - - - -// device type definition -extern const device_type PCE_ROM_STD; -extern const device_type PCE_ROM_CDSYS3; -extern const device_type PCE_ROM_POPULOUS; -extern const device_type PCE_ROM_SF2; - - - -#endif diff --git a/src/mess/machine/pce_slot.c b/src/mess/machine/pce_slot.c deleted file mode 100644 index 642545cf346..00000000000 --- a/src/mess/machine/pce_slot.c +++ /dev/null @@ -1,384 +0,0 @@ -/*********************************************************************************************************** - - - PC-Engine / Turbografx-16 cart emulation - (through slot devices) - - ***********************************************************************************************************/ - - -#include "emu.h" -#include "machine/pce_slot.h" - -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -const device_type PCE_CART_SLOT = &device_creator<pce_cart_slot_device>; - -//************************************************************************** -// PCE cartridges Interface -//************************************************************************** - -//------------------------------------------------- -// device_pce_cart_interface - constructor -//------------------------------------------------- - -device_pce_cart_interface::device_pce_cart_interface(const machine_config &mconfig, device_t &device) - : device_slot_card_interface(mconfig, device), - m_rom(NULL), - m_ram(NULL), - m_rom_size(0), - m_ram_size(0) -{ -} - - -//------------------------------------------------- -// ~device_pce_cart_interface - destructor -//------------------------------------------------- - -device_pce_cart_interface::~device_pce_cart_interface() -{ -} - -//------------------------------------------------- -// rom_alloc - alloc the space for the cart -//------------------------------------------------- - -void device_pce_cart_interface::rom_alloc(running_machine &machine, UINT32 size) -{ - if (m_rom == NULL) - { - m_rom = auto_alloc_array_clear(machine, UINT8, size); - m_rom_size = size; - } -} - - -//------------------------------------------------- -// ram_alloc - alloc the space for the ram -//------------------------------------------------- - -void device_pce_cart_interface::ram_alloc(running_machine &machine, UINT32 size) -{ - if (m_ram == NULL) - { - m_ram = auto_alloc_array_clear(machine, UINT8, size); - m_ram_size = size; - state_save_register_item_pointer(machine, "PCE_CART", this->device().tag(), 0, m_ram, m_ram_size); - } -} - -//------------------------------------------------- -// rom_map_setup - setup map of rom banks in 128K -// blocks, so to simplify ROM access to mirror -//------------------------------------------------- - -void device_pce_cart_interface::rom_map_setup(UINT32 size) -{ - int i; - - if (size == 0x60000) - { - // HuCard 384K are mapped with mirrored pieces - rom_bank_map[0] = 0; - rom_bank_map[1] = 1; - rom_bank_map[2] = 0; - rom_bank_map[3] = 1; - rom_bank_map[4] = 2; - rom_bank_map[5] = 2; - rom_bank_map[6] = 2; - rom_bank_map[7] = 2; - } - else - { - // setup the rom_bank_map array to faster ROM read - for (i = 0; i < size / 0x20000 && i < 8; i++) - rom_bank_map[i] = i; - - // fill up remaining blocks with mirrors - while (i % 8) - { - int j = 0, repeat_banks; - while ((i % (8 >> j)) && j < 3) - j++; - repeat_banks = i % (8 >> (j - 1)); - for (int k = 0; k < repeat_banks; k++) - rom_bank_map[i + k] = rom_bank_map[i + k - repeat_banks]; - i += repeat_banks; - } - } - // check bank map! -// for (i = 0; i < 8; i++) -// { -// printf("bank %3d = %3d\t", i, rom_bank_map[i]); -// } -} - - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -//------------------------------------------------- -// pce_cart_slot_device - constructor -//------------------------------------------------- -pce_cart_slot_device::pce_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - device_t(mconfig, PCE_CART_SLOT, "PCE & TG16 Cartridge Slot", tag, owner, clock, "pce_cart_slot", __FILE__), - device_image_interface(mconfig, *this), - device_slot_interface(mconfig, *this), - m_interface("pce_cart"), - m_type(PCE_STD) -{ -} - - -//------------------------------------------------- -// pce_cart_slot_device - destructor -//------------------------------------------------- - -pce_cart_slot_device::~pce_cart_slot_device() -{ -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void pce_cart_slot_device::device_start() -{ - m_cart = dynamic_cast<device_pce_cart_interface *>(get_card_device()); -} - -//------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void pce_cart_slot_device::device_config_complete() -{ - // set brief and instance name - update_names(); -} - - -//------------------------------------------------- -// PCE PCB -//------------------------------------------------- - -struct pce_slot -{ - int pcb_id; - const char *slot_option; -}; - -// Here, we take the feature attribute from .xml (i.e. the PCB name) and we assign a unique ID to it -static const pce_slot slot_list[] = -{ - { PCE_STD, "rom" }, - { PCE_CDSYS3U, "cdsys3u" }, - { PCE_CDSYS3J, "cdsys3j" }, - { PCE_POPULOUS, "populous" }, - { PCE_SF2, "sf2" }, -}; - -static int pce_get_pcb_id(const char *slot) -{ - for (int i = 0; i < ARRAY_LENGTH(slot_list); i++) - { - if (!mame_stricmp(slot_list[i].slot_option, slot)) - return slot_list[i].pcb_id; - } - - return 0; -} - -static const char *pce_get_slot(int type) -{ - for (int i = 0; i < ARRAY_LENGTH(slot_list); i++) - { - if (slot_list[i].pcb_id == type) - return slot_list[i].slot_option; - } - - return "rom"; -} - - -/*------------------------------------------------- - call load - -------------------------------------------------*/ - -bool pce_cart_slot_device::call_load() -{ - if (m_cart) - { - UINT32 offset = 0; - UINT32 len = (software_entry() == NULL) ? length() : get_software_region_length("rom"); - UINT8 *ROM; - - // From fullpath, check for presence of a header and skip it - if (software_entry() == NULL && (len % 0x4000) == 512) - { - logerror("Rom-header found, skipping\n"); - offset = 512; - len -= offset; - fseek(offset, SEEK_SET); - } - - m_cart->rom_alloc(machine(), len); - ROM = m_cart->get_rom_base(); - - if (software_entry() == NULL) - fread(ROM, len); - else - memcpy(ROM, get_software_region("rom"), len); - - // check for encryption (US carts) - if (ROM[0x1fff] < 0xe0) - { - UINT8 decrypted[256]; - - /* Initialize decryption table */ - for (int i = 0; i < 256; i++) - decrypted[i] = ((i & 0x01) << 7) | ((i & 0x02) << 5) | ((i & 0x04) << 3) | ((i & 0x08) << 1) | ((i & 0x10) >> 1) | ((i & 0x20 ) >> 3) | ((i & 0x40) >> 5) | ((i & 0x80) >> 7); - - /* Decrypt ROM image */ - for (int i = 0; i < len; i++) - ROM[i] = decrypted[ROM[i]]; - } - - m_cart->rom_map_setup(len); - - if (software_entry() == NULL) - m_type = get_cart_type(ROM, len); - else - { - const char *pcb_name = get_feature("slot"); - if (pcb_name) - m_type = pce_get_pcb_id(pcb_name); - } - //printf("Type: %s\n", pce_get_slot(m_type)); - - if (m_type == PCE_POPULOUS) - m_cart->ram_alloc(machine(), 0x8000); - if (m_type == PCE_CDSYS3J || m_type == PCE_CDSYS3U) - m_cart->ram_alloc(machine(), 0x30000); - - return IMAGE_INIT_PASS; - } - - return IMAGE_INIT_PASS; -} - - -/*------------------------------------------------- - call_unload - -------------------------------------------------*/ - -void pce_cart_slot_device::call_unload() -{ -} - - -/*------------------------------------------------- - call softlist load - -------------------------------------------------*/ - -bool pce_cart_slot_device::call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry) -{ - load_software_part_region(*this, swlist, swname, start_entry ); - return TRUE; -} - - - -/*------------------------------------------------- - get_cart_type - code to detect NVRAM type from - fullpath - -------------------------------------------------*/ - -int pce_cart_slot_device::get_cart_type(UINT8 *ROM, UINT32 len) -{ - int type = PCE_STD; - - /* Check for Street fighter 2 */ - if (len == 0x280000) - type = PCE_SF2; - - /* Check for Populous */ - if (len >= 0x1f26 + 8 && !memcmp(ROM + 0x1f26, "POPULOUS", 8)) - type = PCE_POPULOUS; - - // Check for CD system card v3 which adds on-cart RAM to the system - if (!memcmp(ROM + 0x3FFB6, "PC Engine CD-ROM SYSTEM", 23)) - { - /* Check if 192KB additional system card ram should be used */ - if(!memcmp(ROM + 0x29D1, "VER. 3.", 7)) { type = PCE_CDSYS3J; } // JP version - else if(!memcmp(ROM + 0x29C4, "VER. 3.", 7 )) { type = PCE_CDSYS3U; } // US version - } - - return type; -} - - -/*------------------------------------------------- - get default card software - -------------------------------------------------*/ - -void pce_cart_slot_device::get_default_card_software(astring &result) -{ - if (open_image_file(mconfig().options())) - { - const char *slot_string = "rom"; - UINT32 len = core_fsize(m_file); - dynamic_buffer rom(len); - int type; - - core_fread(m_file, rom, len); - - type = get_cart_type(rom, len); - slot_string = pce_get_slot(type); - - //printf("type: %s\n", slot_string); - clear(); - - result.cpy(slot_string); - return; - } - - software_get_default_slot(result, "rom"); -} - -/*------------------------------------------------- - read - -------------------------------------------------*/ - -READ8_MEMBER(pce_cart_slot_device::read_cart) -{ - if (m_cart) - return m_cart->read_cart(space, offset); - else - return 0xff; -} - -/*------------------------------------------------- - write - -------------------------------------------------*/ - -WRITE8_MEMBER(pce_cart_slot_device::write_cart) -{ - if (m_cart) - m_cart->write_cart(space, offset, data); -} - - -/*------------------------------------------------- - Internal header logging - -------------------------------------------------*/ - -void pce_cart_slot_device::internal_header_logging(UINT8 *ROM, UINT32 len) -{ -} diff --git a/src/mess/machine/pce_slot.h b/src/mess/machine/pce_slot.h deleted file mode 100644 index 655fffa57da..00000000000 --- a/src/mess/machine/pce_slot.h +++ /dev/null @@ -1,126 +0,0 @@ -#ifndef __PCE_SLOT_H -#define __PCE_SLOT_H - -/*************************************************************************** - TYPE DEFINITIONS - ***************************************************************************/ - - -/* PCB */ -enum -{ - PCE_STD = 0, - PCE_CDSYS3J, - PCE_CDSYS3U, - PCE_POPULOUS, - PCE_SF2 -}; - - -// ======================> device_pce_cart_interface - -class device_pce_cart_interface : public device_slot_card_interface -{ -public: - // construction/destruction - device_pce_cart_interface(const machine_config &mconfig, device_t &device); - virtual ~device_pce_cart_interface(); - - // reading and writing - virtual DECLARE_READ8_MEMBER(read_cart) { return 0xff; } - virtual DECLARE_WRITE8_MEMBER(write_cart) {}; - - void rom_alloc(running_machine &machine, UINT32 size); - void ram_alloc(running_machine &machine, UINT32 size); - UINT8* get_rom_base() { return m_rom; } - UINT8* get_ram_base() { return m_ram; } - UINT32 get_rom_size() { return m_rom_size; } - UINT32 get_ram_size() { return m_ram_size; } - - // internal state - UINT8 *m_rom; - UINT8 *m_ram; - UINT32 m_rom_size; - UINT32 m_ram_size; - - void rom_map_setup(UINT32 size); - - UINT8 rom_bank_map[8]; // 128K chunks of rom -}; - - -// ======================> pce_cart_slot_device - -class pce_cart_slot_device : public device_t, - public device_image_interface, - public device_slot_interface -{ -public: - // construction/destruction - pce_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - virtual ~pce_cart_slot_device(); - - // device-level overrides - virtual void device_start(); - virtual void device_config_complete(); - - // image-level overrides - virtual bool call_load(); - virtual void call_unload(); - virtual bool call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry); - - int get_type() { return m_type; } - int get_cart_type(UINT8 *ROM, UINT32 len); - - void setup_ram(UINT8 banks); - void internal_header_logging(UINT8 *ROM, UINT32 len); - - void set_intf(const char * interface) { m_interface = interface; } - - virtual iodevice_t image_type() const { return IO_CARTSLOT; } - virtual bool is_readable() const { return 1; } - virtual bool is_writeable() const { return 0; } - virtual bool is_creatable() const { return 0; } - virtual bool must_be_loaded() const { return 1; } - virtual bool is_reset_on_load() const { return 1; } - virtual const option_guide *create_option_guide() const { return NULL; } - virtual const char *image_interface() const { return m_interface; } - virtual const char *file_extensions() const { return "pce,bin"; } - - // slot interface overrides - virtual void get_default_card_software(astring &result); - - // reading and writing - virtual DECLARE_READ8_MEMBER(read_cart); - virtual DECLARE_WRITE8_MEMBER(write_cart); - - -protected: - - const char *m_interface; - int m_type; - device_pce_cart_interface* m_cart; -}; - - - -// device type definition -extern const device_type PCE_CART_SLOT; - - -/*************************************************************************** - DEVICE CONFIGURATION MACROS - ***************************************************************************/ - -#define MCFG_PCE_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \ - MCFG_DEVICE_ADD(_tag, PCE_CART_SLOT, 0) \ - MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \ - static_cast<pce_cart_slot_device *>(device)->set_intf("pce_cart"); - -#define MCFG_TG16_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \ - MCFG_DEVICE_ADD(_tag, PCE_CART_SLOT, 0) \ - MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \ - static_cast<pce_cart_slot_device *>(device)->set_intf("tg16_cart"); - - -#endif diff --git a/src/mess/machine/pf10.c b/src/mess/machine/pf10.c deleted file mode 100644 index 1faf656637d..00000000000 --- a/src/mess/machine/pf10.c +++ /dev/null @@ -1,242 +0,0 @@ -/********************************************************************** - - EPSON PF-10 - - license: MAME, GPL-2.0+ - copyright-holders: Dirk Best - - Battery operated portable 3.5" floppy drive - - Status: Needs lots of work. - -**********************************************************************/ - -#include "pf10.h" - - -//************************************************************************** -// DEVICE DEFINITIONS -//************************************************************************** - -const device_type EPSON_PF10 = &device_creator<epson_pf10_device>; - - -//------------------------------------------------- -// address maps -//------------------------------------------------- - -static ADDRESS_MAP_START( cpu_mem, AS_PROGRAM, 8, epson_pf10_device ) - AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE("maincpu", hd6303y_cpu_device, m6801_io_r, m6801_io_w) - AM_RANGE(0x0040, 0x00ff) AM_RAM /* 192 bytes internal ram */ - AM_RANGE(0x0800, 0x0fff) AM_RAM /* external 2k ram */ - AM_RANGE(0x1000, 0x17ff) AM_READWRITE(fdc_r, fdc_w) - AM_RANGE(0x1800, 0x1fff) AM_WRITE(fdc_tc_w) - AM_RANGE(0xe000, 0xffff) AM_ROM AM_REGION("maincpu", 0) -ADDRESS_MAP_END - -static ADDRESS_MAP_START( cpu_io, AS_IO, 8, epson_pf10_device ) - AM_RANGE(M6801_PORT1, M6801_PORT1) AM_READWRITE(port1_r, port1_w) - AM_RANGE(M6801_PORT2, M6801_PORT2) AM_READWRITE(port2_r, port2_w) -ADDRESS_MAP_END - - -//------------------------------------------------- -// rom_region - device-specific ROM region -//------------------------------------------------- - -ROM_START( pf10 ) - ROM_REGION(0x2000, "maincpu", 0) - ROM_LOAD("k3pf1.bin", 0x0000, 0x2000, CRC(eef4593a) SHA1(bb176e4baf938fe58c2d32f7c46d7bb7b0627755)) -ROM_END - -const rom_entry *epson_pf10_device::device_rom_region() const -{ - return ROM_NAME( pf10 ); -} - - -//------------------------------------------------- -// machine_config_additions - device-specific -// machine configurations -//------------------------------------------------- - -static SLOT_INTERFACE_START( pf10_floppies ) - SLOT_INTERFACE( "smd165", EPSON_SMD_165 ) -SLOT_INTERFACE_END - -static MACHINE_CONFIG_FRAGMENT( pf10 ) - MCFG_CPU_ADD("maincpu", HD6303Y, XTAL_4_9152MHz) // HD63A03XF - MCFG_CPU_PROGRAM_MAP(cpu_mem) - MCFG_CPU_IO_MAP(cpu_io) - MCFG_M6801_SER_TX(DEVWRITELINE(DEVICE_SELF, epson_pf10_device, hd6303_tx_w)) - - MCFG_UPD765A_ADD("upd765a", false, true) - MCFG_FLOPPY_DRIVE_ADD("upd765a:0", pf10_floppies, "smd165", floppy_image_device::default_floppy_formats) - - MCFG_EPSON_SIO_ADD("sio", NULL) - MCFG_EPSON_SIO_RX(DEVWRITELINE(DEVICE_SELF, epson_pf10_device, rxc_w)) - MCFG_EPSON_SIO_PIN(DEVWRITELINE(DEVICE_SELF, epson_pf10_device, pinc_w)) -MACHINE_CONFIG_END - -machine_config_constructor epson_pf10_device::device_mconfig_additions() const -{ - return MACHINE_CONFIG_NAME( pf10 ); -} - - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -//------------------------------------------------- -// epson_pf10_device - constructor -//------------------------------------------------- - -epson_pf10_device::epson_pf10_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - device_t(mconfig, EPSON_PF10, "EPSON PF-10 Portable Floppy Unit", tag, owner, clock, "epson_pf10", __FILE__), - device_epson_sio_interface(mconfig, *this), - m_cpu(*this, "maincpu"), - m_fdc(*this, "upd765a"), - m_sio_output(*this, "sio"), - m_port1(0xff), - m_port2(0xff), - m_rxc(1) -{ - m_sio_input = dynamic_cast<epson_sio_device *>(owner); -} - - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void epson_pf10_device::device_start() -{ - m_timer = timer_alloc(0, NULL); - m_floppy = subdevice<floppy_connector>("upd765a:0")->get_device(); -} - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void epson_pf10_device::device_reset() -{ - m_timer->adjust(attotime::zero, 0, attotime::from_hz(38400 * 8)); -} - -//------------------------------------------------- -// device_timer - handler timer events -//------------------------------------------------- - -void epson_pf10_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) -{ - switch (id) - { - case 0: - m_cpu->m6801_clock_serial(); - break; - } -} - - -//************************************************************************** -// CPU -//************************************************************************** - -READ8_MEMBER( epson_pf10_device::port1_r ) -{ - logerror("%s: port1_r(%02x)\n", tag(), m_port1); - return m_port1; -} - -WRITE8_MEMBER( epson_pf10_device::port1_w ) -{ - logerror("%s: port1_w(%02x)\n", tag(), data); -} - -READ8_MEMBER( epson_pf10_device::port2_r ) -{ - logerror("%s: port2_r(%02x)\n", tag(), m_port2); - return m_port2; -} - -WRITE8_MEMBER( epson_pf10_device::port2_w ) -{ - m_floppy->mon_w(data & PORT2_MON); - logerror("%s: port2_w(%02x)\n", tag(), data); -} - -READ8_MEMBER( epson_pf10_device::fdc_r ) -{ - logerror("%s: fdc_r @ %04x\n", tag(), offset); - return 0xff; -} - -WRITE8_MEMBER( epson_pf10_device::fdc_w ) -{ - logerror("%s: fdc_w @ %04x (%02x)\n", tag(), offset, data); -} - -WRITE8_MEMBER( epson_pf10_device::fdc_tc_w ) -{ - logerror("%s: fdc_tc_w(%02x)\n", tag(), data); -} - - -//************************************************************************** -// SIO INTERFACE -//************************************************************************** - -//------------------------------------------------- -// rxc_w - rx input -//------------------------------------------------- - -WRITE_LINE_MEMBER( epson_pf10_device::rxc_w ) -{ - m_rxc = state; - m_sio_input->rx_w(m_hd6303_tx & m_rxc); -} - -//------------------------------------------------- -// pinc_w - pin input -//------------------------------------------------- - -WRITE_LINE_MEMBER( epson_pf10_device::pinc_w ) -{ - m_pinc = state; - m_sio_input->pin_w(m_pinc); -} - -//------------------------------------------------- -// hd6303_tx_w - rx output -//------------------------------------------------- - -WRITE_LINE_MEMBER( epson_pf10_device::hd6303_tx_w ) -{ - m_hd6303_tx = state; - m_sio_input->rx_w(m_hd6303_tx & m_rxc); -} - -//------------------------------------------------- -// tx_w - tx input -//------------------------------------------------- - -void epson_pf10_device::tx_w(int level) -{ - if (level) - m_port2 |= PORT2_RXD; - else - m_port2 &= ~PORT2_RXD; - - m_sio_output->tx_w(level); -} - -//------------------------------------------------- -// pout_w - pout input -//------------------------------------------------- - -void epson_pf10_device::pout_w(int level) -{ - m_sio_output->pout_w(level); -} diff --git a/src/mess/machine/pf10.h b/src/mess/machine/pf10.h deleted file mode 100644 index 5504bfedcdb..00000000000 --- a/src/mess/machine/pf10.h +++ /dev/null @@ -1,102 +0,0 @@ -/********************************************************************** - - EPSON PF-10 - - license: MAME, GPL-2.0+ - copyright-holders: Dirk Best - - Battery operated portable 3.5" floppy drive - -**********************************************************************/ - -#pragma once - -#ifndef __PF10_H__ -#define __PF10_H__ - -#include "emu.h" -#include "cpu/m6800/m6800.h" -#include "machine/upd765.h" -#include "machine/epson_sio.h" - - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class epson_pf10_device : public device_t, - public device_epson_sio_interface -{ -public: - // construction/destruction - epson_pf10_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // optional information overrides - virtual const rom_entry *device_rom_region() const; - virtual machine_config_constructor device_mconfig_additions() const; - - // floppy disk controller - DECLARE_READ8_MEMBER( fdc_r ); - DECLARE_WRITE8_MEMBER( fdc_w ); - DECLARE_WRITE8_MEMBER( fdc_tc_w ); - - // hd6303 i/o - DECLARE_READ8_MEMBER( port1_r ); - DECLARE_WRITE8_MEMBER( port1_w ); - DECLARE_READ8_MEMBER( port2_r ); - DECLARE_WRITE8_MEMBER( port2_w ); - - // serial output from main cpu - DECLARE_WRITE_LINE_MEMBER( hd6303_tx_w ); - - // from sio output - DECLARE_WRITE_LINE_MEMBER( rxc_w ); - DECLARE_WRITE_LINE_MEMBER( pinc_w ); - -protected: - // device-level overrides - virtual void device_start(); - virtual void device_reset(); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); - - // device_epson_sio_interface overrides - virtual void tx_w(int level); - virtual void pout_w(int level); - -private: - required_device<hd6303y_cpu_device> m_cpu; - required_device<upd765a_device> m_fdc; - required_device<epson_sio_device> m_sio_output; - - epson_sio_device *m_sio_input; - floppy_image_device *m_floppy; - - emu_timer *m_timer; - - UINT8 m_port1; - UINT8 m_port2; - - int m_rxc; - int m_hd6303_tx; - int m_pinc; - - // port definitions - enum - { - PORT2_SEEK = 0x01, - PORT2_SWCOM = 0x02, // ? - PORT2_RS232ON = 0x04, // to nmi? - PORT2_RXD = 0x08, - PORT2_TXD = 0x10, - PORT2_FDCRST = 0x20, - PORT2_MON = 0x40, - PORT2_BATCKEN = 0x80 // ? - }; -}; - - -// device type definition -extern const device_type EPSON_PF10; - - -#endif // __PF10_H__ diff --git a/src/mess/machine/teleprinter.c b/src/mess/machine/teleprinter.c deleted file mode 100644 index c1853d7b60d..00000000000 --- a/src/mess/machine/teleprinter.c +++ /dev/null @@ -1,239 +0,0 @@ -#include "machine/teleprinter.h" - -#define KEYBOARD_TAG "keyboard" - -static const UINT8 teleprinter_font[128*8] = -{ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00, - 0x38,0x38,0x38,0x38,0x00,0x00,0x00,0x00, - 0x3f,0x3f,0x3f,0x3f,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07, - 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07, - 0x38,0x38,0x38,0x38,0x07,0x07,0x07,0x07, - 0x3f,0x3f,0x3f,0x3f,0x07,0x07,0x07,0x07, - 0x00,0x00,0x00,0x00,0x38,0x38,0x38,0x38, - 0x07,0x07,0x07,0x07,0x38,0x38,0x38,0x38, - 0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38, - 0x3f,0x3f,0x3f,0x3f,0x38,0x38,0x38,0x38, - 0x00,0x00,0x00,0x00,0x3f,0x3f,0x3f,0x3f, - 0x07,0x07,0x07,0x07,0x3f,0x3f,0x3f,0x3f, - 0x38,0x38,0x38,0x38,0x3f,0x3f,0x3f,0x3f, - 0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, - 0x00,0x00,0x00,0x00,0x2a,0x15,0x2a,0x15, - 0x2a,0x15,0x2a,0x15,0x00,0x00,0x00,0x00, - 0x3f,0x3f,0x3f,0x3f,0x2a,0x15,0x2a,0x15, - 0x2a,0x15,0x2a,0x15,0x3f,0x3f,0x3f,0x3f, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x08,0x08,0x08,0x08,0x08,0x00,0x08,0x00, - 0x14,0x14,0x14,0x00,0x00,0x00,0x00,0x00, - 0x14,0x14,0x3e,0x14,0x3e,0x14,0x14,0x00, - 0x08,0x3c,0x0a,0x1c,0x28,0x1e,0x08,0x00, - 0x06,0x26,0x10,0x08,0x04,0x32,0x30,0x00, - 0x08,0x14,0x14,0x0c,0x2a,0x12,0x2c,0x00, - 0x08,0x08,0x04,0x00,0x00,0x00,0x00,0x00, - 0x10,0x08,0x04,0x04,0x04,0x08,0x10,0x00, - 0x04,0x08,0x10,0x10,0x10,0x08,0x04,0x00, - 0x00,0x08,0x2a,0x1c,0x2a,0x08,0x00,0x00, - 0x00,0x08,0x08,0x3e,0x08,0x08,0x00,0x00, - 0x00,0x00,0x00,0x00,0x08,0x08,0x04,0x00, - 0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00, - 0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00, - 0x1c,0x22,0x32,0x2a,0x26,0x22,0x1c,0x00, - 0x08,0x0c,0x08,0x08,0x08,0x08,0x1c,0x00, - 0x1c,0x22,0x20,0x18,0x04,0x02,0x3e,0x00, - 0x3e,0x20,0x10,0x18,0x20,0x22,0x1c,0x00, - 0x10,0x18,0x14,0x12,0x3e,0x10,0x10,0x00, - 0x3e,0x02,0x1e,0x20,0x20,0x22,0x1c,0x00, - 0x10,0x08,0x04,0x1c,0x22,0x22,0x1c,0x00, - 0x3e,0x20,0x10,0x08,0x04,0x04,0x04,0x00, - 0x1c,0x22,0x22,0x1c,0x22,0x22,0x1c,0x00, - 0x1c,0x22,0x22,0x1c,0x10,0x08,0x04,0x00, - 0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x00, - 0x00,0x00,0x08,0x00,0x08,0x08,0x04,0x00, - 0x10,0x08,0x04,0x02,0x04,0x08,0x10,0x00, - 0x00,0x00,0x3e,0x00,0x3e,0x00,0x00,0x00, - 0x04,0x08,0x10,0x20,0x10,0x08,0x04,0x00, - 0x1c,0x22,0x20,0x10,0x08,0x00,0x08,0x00, - 0x1c,0x22,0x32,0x2a,0x3a,0x02,0x3c,0x00, - 0x08,0x14,0x22,0x22,0x3e,0x22,0x22,0x00, - 0x1e,0x22,0x22,0x1e,0x22,0x22,0x1e,0x00, - 0x1c,0x22,0x02,0x02,0x02,0x22,0x1c,0x00, - 0x1e,0x24,0x24,0x24,0x24,0x24,0x1e,0x00, - 0x3e,0x02,0x02,0x1e,0x02,0x02,0x3e,0x00, - 0x3e,0x02,0x02,0x1e,0x02,0x02,0x02,0x00, - 0x1c,0x22,0x02,0x02,0x32,0x22,0x3c,0x00, - 0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x00, - 0x1c,0x08,0x08,0x08,0x08,0x08,0x1c,0x00, - 0x38,0x10,0x10,0x10,0x10,0x12,0x0c,0x00, - 0x22,0x12,0x0a,0x06,0x0a,0x12,0x22,0x00, - 0x02,0x02,0x02,0x02,0x02,0x02,0x3e,0x00, - 0x22,0x36,0x2a,0x2a,0x22,0x22,0x22,0x00, - 0x22,0x22,0x26,0x2a,0x32,0x22,0x22,0x00, - 0x1c,0x22,0x22,0x22,0x22,0x22,0x1c,0x00, - 0x1e,0x22,0x22,0x1e,0x02,0x02,0x02,0x00, - 0x1c,0x22,0x22,0x22,0x2a,0x12,0x2c,0x00, - 0x1e,0x22,0x22,0x1e,0x0a,0x12,0x22,0x00, - 0x1c,0x22,0x02,0x1c,0x20,0x22,0x1c,0x00, - 0x3e,0x08,0x08,0x08,0x08,0x08,0x08,0x00, - 0x22,0x22,0x22,0x22,0x22,0x22,0x1c,0x00, - 0x22,0x22,0x22,0x14,0x14,0x08,0x08,0x00, - 0x22,0x22,0x22,0x2a,0x2a,0x2a,0x14,0x00, - 0x22,0x22,0x14,0x08,0x14,0x22,0x22,0x00, - 0x22,0x22,0x22,0x14,0x08,0x08,0x08,0x00, - 0x3e,0x20,0x10,0x08,0x04,0x02,0x3e,0x00, - 0x0e,0x02,0x02,0x02,0x02,0x02,0x0e,0x00, - 0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00, - 0x38,0x20,0x20,0x20,0x20,0x20,0x38,0x00, - 0x08,0x1c,0x2a,0x08,0x08,0x08,0x08,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x00, - 0x04,0x08,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x1c,0x20,0x3c,0x22,0x3c,0x00, - 0x02,0x02,0x1e,0x22,0x22,0x22,0x1e,0x00, - 0x00,0x00,0x3c,0x02,0x02,0x02,0x3c,0x00, - 0x20,0x20,0x3c,0x22,0x22,0x22,0x3c,0x00, - 0x00,0x00,0x1c,0x22,0x3e,0x02,0x1c,0x00, - 0x18,0x04,0x0e,0x04,0x04,0x04,0x04,0x00, - 0x00,0x00,0x3c,0x22,0x22,0x3c,0x20,0x18, - 0x02,0x02,0x1e,0x22,0x22,0x22,0x22,0x00, - 0x08,0x00,0x0c,0x08,0x08,0x08,0x1c,0x00, - 0x10,0x00,0x18,0x10,0x10,0x10,0x12,0x0c, - 0x02,0x02,0x22,0x12,0x0e,0x16,0x22,0x00, - 0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x00, - 0x00,0x00,0x16,0x2a,0x2a,0x2a,0x2a,0x00, - 0x00,0x00,0x1a,0x26,0x22,0x22,0x22,0x00, - 0x00,0x00,0x1c,0x22,0x22,0x22,0x1c,0x00, - 0x00,0x00,0x1e,0x22,0x22,0x1e,0x02,0x02, - 0x00,0x00,0x3c,0x22,0x22,0x3c,0x20,0x20, - 0x00,0x00,0x34,0x0c,0x04,0x04,0x04,0x00, - 0x00,0x00,0x3c,0x02,0x1c,0x20,0x1e,0x00, - 0x08,0x08,0x1c,0x08,0x08,0x08,0x10,0x00, - 0x00,0x00,0x22,0x22,0x22,0x32,0x2c,0x00, - 0x00,0x00,0x22,0x22,0x22,0x14,0x08,0x00, - 0x00,0x00,0x22,0x22,0x2a,0x2a,0x14,0x00, - 0x00,0x00,0x22,0x14,0x08,0x14,0x22,0x00, - 0x00,0x00,0x22,0x22,0x14,0x08,0x04,0x02, - 0x00,0x00,0x3e,0x10,0x08,0x04,0x3e,0x00, - 0x10,0x08,0x08,0x04,0x08,0x08,0x10,0x00, - 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00, - 0x04,0x08,0x08,0x10,0x08,0x08,0x04,0x00, - 0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x2a,0x15,0x2a,0x15,0x2a,0x15,0x2a,0x15 -}; - -teleprinter_device::teleprinter_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : generic_terminal_device(mconfig, TELEPRINTER, "Teleprinter", tag, owner, clock, "teleprinter", __FILE__) -{ -} - -void teleprinter_device::scroll_line() -{ - memmove(m_buffer,m_buffer+TELEPRINTER_WIDTH,(TELEPRINTER_HEIGHT-1)*TELEPRINTER_WIDTH); - memset(m_buffer + TELEPRINTER_WIDTH*(TELEPRINTER_HEIGHT-1),0x20,TELEPRINTER_WIDTH); -} - -void teleprinter_device::write_char(UINT8 data) { - m_buffer[(TELEPRINTER_HEIGHT-1)*TELEPRINTER_WIDTH+m_x_pos] = data; - m_x_pos++; - if (m_x_pos >= TELEPRINTER_WIDTH) - { - m_x_pos = 0; - scroll_line(); - } -} - -void teleprinter_device::clear() { - memset(m_buffer,0,TELEPRINTER_WIDTH*TELEPRINTER_HEIGHT); - m_x_pos = 0; -} - -void teleprinter_device::term_write(UINT8 data) -{ - switch(data) { - case 10: m_x_pos = 0; - scroll_line(); - break; - case 13: m_x_pos = 0; break; - case 9: m_x_pos = (m_x_pos & 0xf8) + 8; - if (m_x_pos >= TELEPRINTER_WIDTH) - m_x_pos = TELEPRINTER_WIDTH-1; - - break; - case 16: break; - default: write_char(data); break; - } -} - -/*************************************************************************** - VIDEO HARDWARE -***************************************************************************/ -UINT32 teleprinter_device::tp_update(screen_device &device, bitmap_rgb32 &bitmap, const rectangle &cliprect) -{ - UINT8 code; - int y, c, x, b; - - for (y = 0; y < TELEPRINTER_HEIGHT; y++) - { - for (c = 0; c < 8; c++) - { - int horpos = 0; - for (x = 0; x < TELEPRINTER_WIDTH; x++) - { - code = teleprinter_font[(m_buffer[y*TELEPRINTER_WIDTH + x] & 0x7f) *8 + c]; - for (b = 0; b < 8; b++) - { - bitmap.pix32(y*8 + c, horpos++) = (code >> b) & 0x01 ? 0 : 0x00ffffff; - } - } - } - } - return 0; -} - -static ASCII_KEYBOARD_INTERFACE( keyboard_intf ) -{ - DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, generic_terminal_device, kbd_put) -}; - -/*************************************************************************** - VIDEO HARDWARE -***************************************************************************/ -MACHINE_CONFIG_FRAGMENT( generic_teleprinter ) - MCFG_SCREEN_ADD(TELEPRINTER_SCREEN_TAG, RASTER) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_SIZE(TELEPRINTER_WIDTH*8, TELEPRINTER_HEIGHT*8) - MCFG_SCREEN_VISIBLE_AREA(0, TELEPRINTER_WIDTH*8-1, 0, TELEPRINTER_HEIGHT*8-1) - MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, teleprinter_device, tp_update) - MCFG_ASCII_KEYBOARD_ADD(KEYBOARD_TAG, keyboard_intf) -MACHINE_CONFIG_END - -machine_config_constructor teleprinter_device::device_mconfig_additions() const -{ - return MACHINE_CONFIG_NAME(generic_teleprinter); -} - -/*------------------------------------------------- - device_reset - device-specific reset --------------------------------------------------*/ - -void teleprinter_device::device_reset() -{ - clear(); - generic_terminal_device::device_reset(); -} - -const device_type TELEPRINTER = &device_creator<teleprinter_device>; diff --git a/src/mess/machine/teleprinter.h b/src/mess/machine/teleprinter.h deleted file mode 100644 index e73e687e49f..00000000000 --- a/src/mess/machine/teleprinter.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef __TELEPRINTER_H__ -#define __TELEPRINTER_H__ - -#include "machine/terminal.h" - -#define TELEPRINTER_WIDTH 80 -#define TELEPRINTER_HEIGHT 50 - -#define GENERIC_TELEPRINTER_INTERFACE GENERIC_TERMINAL_INTERFACE - -/*************************************************************************** - DEVICE CONFIGURATION MACROS -***************************************************************************/ -#define TELEPRINTER_TAG "teleprinter" -#define TELEPRINTER_SCREEN_TAG "tty_screen" - -#define MCFG_GENERIC_TELEPRINTER_ADD(_tag, _intrf) \ - MCFG_DEVICE_ADD(_tag, TELEPRINTER, 0) \ - MCFG_DEVICE_CONFIG(_intrf) - -#define MCFG_GENERIC_TELEPRINTER_REMOVE(_tag) \ - MCFG_DEVICE_REMOVE(_tag) - -/*************************************************************************** - FUNCTION PROTOTYPES -***************************************************************************/ - -class teleprinter_device : public generic_terminal_device -{ -public: - teleprinter_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - UINT32 tp_update(screen_device &device, bitmap_rgb32 &bitmap, const rectangle &cliprect); -protected: - virtual void term_write(UINT8 data); - virtual void device_reset(); - virtual machine_config_constructor device_mconfig_additions() const; -private: - void scroll_line(); - void write_char(UINT8 data); - void clear(); -}; - -extern const device_type TELEPRINTER; - -#endif /* __TELEPRINTER_H__ */ diff --git a/src/mess/machine/tf20.c b/src/mess/machine/tf20.c deleted file mode 100644 index 645b68365e6..00000000000 --- a/src/mess/machine/tf20.c +++ /dev/null @@ -1,343 +0,0 @@ -/********************************************************************** - - EPSON TF-20 - - license: MAME, GPL-2.0+ - copyright-holders: Dirk Best - - Dual 5.25" floppy drive with HX-20 factory option - - Status: Needs testing. - - http://fjkraan.home.xs4all.nl/comp/tf20/index.html - -**********************************************************************/ - -#include "tf20.h" - -#define XTAL_CR1 XTAL_8MHz -#define XTAL_CR2 XTAL_4_9152MHz - - -//************************************************************************** -// DEVICE DEFINITIONS -//************************************************************************** - -const device_type EPSON_TF20 = &device_creator<epson_tf20_device>; - -//------------------------------------------------- -// address maps -//------------------------------------------------- - -static ADDRESS_MAP_START( cpu_mem, AS_PROGRAM, 8, epson_tf20_device ) - AM_RANGE(0x0000, 0x7fff) AM_RAMBANK("bank1") - AM_RANGE(0x8000, 0xffff) AM_RAMBANK("bank2") -ADDRESS_MAP_END - -static ADDRESS_MAP_START( cpu_io, AS_IO, 8, epson_tf20_device ) - ADDRESS_MAP_UNMAP_HIGH - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0xf0, 0xf3) AM_DEVREADWRITE("3a", upd7201_device, ba_cd_r, ba_cd_w) - AM_RANGE(0xf6, 0xf6) AM_READ(rom_disable_r) - AM_RANGE(0xf7, 0xf7) AM_READ_PORT("tf20_dip") - AM_RANGE(0xf8, 0xf8) AM_READWRITE(upd765_tc_r, fdc_control_w) - AM_RANGE(0xfa, 0xfb) AM_DEVICE("5a", upd765a_device, map) -ADDRESS_MAP_END - -//------------------------------------------------- -// rom_region - device-specific ROM region -//------------------------------------------------- - -ROM_START( tf20 ) - ROM_REGION(0x0800, "rom", 0) - ROM_LOAD("tfx.15e", 0x0000, 0x0800, CRC(af34f084) SHA1(c9bdf393f757ba5d8f838108ceb2b079be1d616e)) -ROM_END - -const rom_entry *epson_tf20_device::device_rom_region() const -{ - return ROM_NAME( tf20 ); -} - -//------------------------------------------------- -// input_ports - device-specific input ports -//------------------------------------------------- - -INPUT_PORTS_START( tf20 ) - PORT_START("tf20_dip") - PORT_DIPNAME(0x0f, 0x00, "Drive extension") - PORT_DIPLOCATION("TF-20:8,7,6,5") - PORT_DIPSETTING(0x00, "A & B Drive") - PORT_DIPSETTING(0x01, "C & D Drive") -INPUT_PORTS_END - -ioport_constructor epson_tf20_device::device_input_ports() const -{ - return INPUT_PORTS_NAME( tf20 ); -} - -//------------------------------------------------- -// machine_config_additions - device-specific -// machine configurations -//------------------------------------------------- - -static UPD7201_INTERFACE( tf20_upd7201_intf ) -{ - 0, 0, 0, 0, - - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, epson_tf20_device, txda_w), - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, epson_tf20_device, dtra_w), - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL -}; - -static SLOT_INTERFACE_START( tf20_floppies ) - SLOT_INTERFACE( "sd320", EPSON_SD_320 ) -SLOT_INTERFACE_END - -static MACHINE_CONFIG_FRAGMENT( tf20 ) - MCFG_CPU_ADD("19b", Z80, XTAL_CR1 / 2) /* uPD780C */ - MCFG_CPU_PROGRAM_MAP(cpu_mem) - MCFG_CPU_IO_MAP(cpu_io) - - // 64k internal ram - MCFG_RAM_ADD("ram") - MCFG_RAM_DEFAULT_SIZE("64k") - - // upd7201 serial interface - MCFG_UPD7201_ADD("3a", XTAL_CR1 / 2, tf20_upd7201_intf) - MCFG_UPD765_INTRQ_CALLBACK(INPUTLINE("19b", INPUT_LINE_IRQ0)) - - // floppy disk controller - MCFG_UPD765A_ADD("5a", true, true) - - // floppy drives - MCFG_FLOPPY_DRIVE_ADD("5a:0", tf20_floppies, "sd320", floppy_image_device::default_floppy_formats) - MCFG_FLOPPY_DRIVE_ADD("5a:1", tf20_floppies, "sd320", floppy_image_device::default_floppy_formats) - - // serial interface to another device - MCFG_EPSON_SIO_ADD("sio", NULL) - MCFG_EPSON_SIO_RX(DEVWRITELINE(DEVICE_SELF, epson_tf20_device, rxc_w)) - MCFG_EPSON_SIO_PIN(DEVWRITELINE(DEVICE_SELF, epson_tf20_device, pinc_w)) -MACHINE_CONFIG_END - -machine_config_constructor epson_tf20_device::device_mconfig_additions() const -{ - return MACHINE_CONFIG_NAME( tf20 ); -} - - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -//------------------------------------------------- -// epson_tf20_device - constructor -//------------------------------------------------- - -epson_tf20_device::epson_tf20_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - device_t(mconfig, EPSON_TF20, "EPSON TF-20 Dual Floppy Disk Drive", tag, owner, clock, "epson_tf20", __FILE__), - device_epson_sio_interface(mconfig, *this), - m_cpu(*this, "19b"), - m_ram(*this, "ram"), - m_fdc(*this, "5a"), - m_mpsc(*this, "3a"), - m_sio_output(*this, "sio"), - m_rxc(1) -{ - m_sio_input = dynamic_cast<epson_sio_device *>(owner); -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void epson_tf20_device::device_start() -{ - // make sure the ram device is already running - if (!m_ram->started()) - throw device_missing_dependencies(); - - m_timer_serial = timer_alloc(0, NULL); - m_timer_tc = timer_alloc(1, NULL); - - m_cpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(epson_tf20_device::irq_callback),this)); - - m_fd0 = subdevice<floppy_connector>("5a:0")->get_device(); - m_fd1 = subdevice<floppy_connector>("5a:1")->get_device(); - - // enable second half of ram - m_cpu->space(AS_PROGRAM).install_ram(0x8000, 0xffff, m_ram->pointer() + 0x8000); - -} - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void epson_tf20_device::device_reset() -{ - // init timers - m_timer_serial->adjust(attotime::zero, 0, attotime::from_hz(XTAL_CR2 / 8)); - m_timer_tc->adjust(attotime::never); - - m_mpsc->rxa_w(1); - m_mpsc->rxb_w(1); - - // enable rom - m_cpu->space(AS_PROGRAM).install_rom(0x0000, 0x07ff, 0, 0x7800, memregion("rom")->base()); -} - -//------------------------------------------------- -// device_timer - handler timer events -//------------------------------------------------- - -void epson_tf20_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) -{ - switch (id) - { - case 0: - m_mpsc->rxca_w(1); - m_mpsc->rxca_w(0); - m_mpsc->txca_w(1); - m_mpsc->txca_w(0); - m_mpsc->rxcb_w(1); - m_mpsc->rxcb_w(0); - m_mpsc->txcb_w(1); - m_mpsc->txcb_w(0); - break; - - case 1: - logerror("%s: tc off\n", tag()); - m_fdc->tc_w(false); - break; - } -} - - -//************************************************************************** -// CPU & MEMORY -//************************************************************************** - -//------------------------------------------------- -// irq vector callback -//------------------------------------------------- - -IRQ_CALLBACK_MEMBER( epson_tf20_device::irq_callback ) -{ - return 0x00; -} - -// a read from this location disables the rom -READ8_MEMBER( epson_tf20_device::rom_disable_r ) -{ - // switch in ram - m_cpu->space(AS_PROGRAM).install_ram(0x0000, 0x7fff, m_ram->pointer()); - return 0xff; -} - - -//************************************************************************** -// FLOPPY DISK CONTROLLER -//************************************************************************** - -//------------------------------------------------- -// fdc interrupt -//------------------------------------------------- - -READ8_MEMBER( epson_tf20_device::upd765_tc_r ) -{ - logerror("%s: upd765_tc_r\n", space.machine().describe_context()); - - // toggle tc on read - m_fdc->tc_w(true); - m_timer_tc->adjust(attotime::zero); - - return 0xff; -} - -WRITE8_MEMBER( epson_tf20_device::fdc_control_w ) -{ - logerror("%s: tf20_fdc_control_w(%02x)\n", space.machine().describe_context(), data); - - // bit 0, motor on signal - m_fd0->mon_w(!BIT(data, 0)); - m_fd1->mon_w(!BIT(data, 0)); -} - - -//************************************************************************** -// SIO INTERFACE -//************************************************************************** - -//------------------------------------------------- -// rxc_w - rx input -//------------------------------------------------- - -WRITE_LINE_MEMBER( epson_tf20_device::rxc_w ) -{ - m_rxc = state; - m_sio_input->rx_w(m_txda & m_rxc); -} - -//------------------------------------------------- -// pinc_w - pin input -//------------------------------------------------- - -WRITE_LINE_MEMBER( epson_tf20_device::pinc_w ) -{ - m_pinc = state; - m_sio_input->pin_w(!m_dtra | m_pinc); -} - -//------------------------------------------------- -// txda_w - rx output -//------------------------------------------------- - -WRITE_LINE_MEMBER( epson_tf20_device::txda_w ) -{ - m_txda = state; - m_sio_input->rx_w(m_txda & m_rxc); -} - -//------------------------------------------------- -// dtra_w - pin output -//------------------------------------------------- - -WRITE_LINE_MEMBER( epson_tf20_device::dtra_w ) -{ - m_dtra = state; - m_sio_input->pin_w(!m_dtra | m_pinc); -} - -//------------------------------------------------- -// tx_w - tx input -//------------------------------------------------- - -void epson_tf20_device::tx_w(int level) -{ - m_mpsc->rxa_w(level); - m_sio_output->tx_w(level); -} - -//------------------------------------------------- -// pout_w - pout input -//------------------------------------------------- - -void epson_tf20_device::pout_w(int level) -{ - m_mpsc->ctsa_w(!level); - m_sio_output->pout_w(level); -} diff --git a/src/mess/machine/tf20.h b/src/mess/machine/tf20.h deleted file mode 100644 index 8fa0eb6d865..00000000000 --- a/src/mess/machine/tf20.h +++ /dev/null @@ -1,92 +0,0 @@ -/********************************************************************** - - EPSON TF-20 - - license: MAME, GPL-2.0+ - copyright-holders: Dirk Best - - Dual 5.25" floppy drive with HX-20 factory option - -**********************************************************************/ - -#pragma once - -#ifndef __TF20_H__ -#define __TF20_H__ - -#include "emu.h" -#include "cpu/z80/z80.h" -#include "machine/ram.h" -#include "machine/upd765.h" -#include "machine/z80dart.h" -#include "machine/epson_sio.h" - - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -class epson_tf20_device : public device_t, - public device_epson_sio_interface -{ -public: - // construction/destruction - epson_tf20_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // optional information overrides - virtual const rom_entry *device_rom_region() const; - virtual machine_config_constructor device_mconfig_additions() const; - virtual ioport_constructor device_input_ports() const; - - // not really public - DECLARE_READ8_MEMBER( rom_disable_r ); - DECLARE_READ8_MEMBER( upd765_tc_r ); - DECLARE_WRITE8_MEMBER( fdc_control_w ); - IRQ_CALLBACK_MEMBER( irq_callback ); - DECLARE_WRITE_LINE_MEMBER( txda_w ); - DECLARE_WRITE_LINE_MEMBER( dtra_w ); - - // from sio output - DECLARE_WRITE_LINE_MEMBER( rxc_w ); - DECLARE_WRITE_LINE_MEMBER( pinc_w ); - -protected: - // device-level overrides - virtual void device_start(); - virtual void device_reset(); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); - - // device_epson_sio_interface overrides - virtual void tx_w(int level); - virtual void pout_w(int level); - -private: - required_device<cpu_device> m_cpu; - required_device<ram_device> m_ram; - required_device<upd765a_device> m_fdc; - required_device<upd7201_device> m_mpsc; - required_device<epson_sio_device> m_sio_output; - - floppy_image_device *m_fd0; - floppy_image_device *m_fd1; - - emu_timer *m_timer_serial; - emu_timer *m_timer_tc; - - int m_rxc; - int m_txda; - int m_dtra; - int m_pinc; - - epson_sio_device *m_sio_input; - - static const int XTAL_CR1 = XTAL_8MHz; - static const int XTAL_CR2 = XTAL_4_9152MHz; -}; - - -// device type definition -extern const device_type EPSON_TF20; - - -#endif // __TF20_H__ diff --git a/src/mess/machine/x68k_neptunex.c b/src/mess/machine/x68k_neptunex.c deleted file mode 100644 index 356af700c26..00000000000 --- a/src/mess/machine/x68k_neptunex.c +++ /dev/null @@ -1,152 +0,0 @@ -/* - * x68k_neptunex.c - */ - -#include "emu.h" -#include "machine/dp8390.h" -#include "machine/x68k_neptunex.h" - - -//************************************************************************** -// DEVICE DEFINITIONS -//************************************************************************** - -const device_type X68K_NEPTUNEX = &device_creator<x68k_neptune_device>; - -static const dp8390_interface neptune_dp8390_interface = { - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, x68k_neptune_device, x68k_neptune_irq_w), - DEVCB_NULL, - DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, x68k_neptune_device, x68k_neptune_mem_read), - DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, x68k_neptune_device, x68k_neptune_mem_write) -}; - - -// device machine config -static MACHINE_CONFIG_FRAGMENT( x68k_neptunex ) - MCFG_DP8390D_ADD("dp8390d", neptune_dp8390_interface) -MACHINE_CONFIG_END - -machine_config_constructor x68k_neptune_device::device_mconfig_additions() const -{ - return MACHINE_CONFIG_NAME( x68k_neptunex ); -} - -x68k_neptune_device::x68k_neptune_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, X68K_NEPTUNEX, "Neptune-X", tag, owner, clock, "x68k_neptunex", __FILE__), - device_x68k_expansion_card_interface(mconfig, *this), - m_dp8390(*this, "dp8390d") -{ -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void x68k_neptune_device::device_start() -{ - device_t* cpu = machine().device("maincpu"); - char mac[7]; - UINT32 num = rand(); - address_space& space = cpu->memory().space(AS_PROGRAM); - m_slot = dynamic_cast<x68k_expansion_slot_device *>(owner()); - memset(m_prom, 0x57, 16); - sprintf(mac+2, "\x1b%c%c%c", (num >> 16) & 0xff, (num >> 8) & 0xff, num & 0xff); - mac[0] = 0; mac[1] = 0; // avoid gcc warning - memcpy(m_prom, mac, 6); - m_dp8390->set_mac(mac); - space.install_readwrite_handler(0xece000,0xece3ff,read16_delegate(FUNC(x68k_neptune_device::x68k_neptune_port_r),this),write16_delegate(FUNC(x68k_neptune_device::x68k_neptune_port_w),this),0xffffffff); -} - -void x68k_neptune_device::device_reset() { - memcpy(m_prom, m_dp8390->get_mac(), 6); -} - -READ16_MEMBER(x68k_neptune_device::x68k_neptune_port_r) -{ - UINT16 data; - - if(offset >= 0x100+32 || offset < 0x100) - return 0xffff; - if(offset < 0x100+16) - { - m_dp8390->dp8390_cs(CLEAR_LINE); - return (m_dp8390->dp8390_r(space, offset, 0xff) << 8)| - m_dp8390->dp8390_r(space, offset+1, 0xff); - } - //if(mem_mask == 0x00ff) offset++; - switch(offset) - { - case 0x100+16: - m_dp8390->dp8390_cs(ASSERT_LINE); - data = m_dp8390->dp8390_r(space, offset, mem_mask); - data = ((data & 0x00ff) << 8) | ((data & 0xff00) >> 8); - return data; - case 0x100+31: - m_dp8390->dp8390_reset(CLEAR_LINE); - return 0; - default: - logerror("ne2000: invalid register read %02X\n", offset); - } - return 0; -} - -WRITE16_MEMBER(x68k_neptune_device::x68k_neptune_port_w) -{ - if(offset >= 0x100+32 || offset < 0x100) - return; - if(offset < 0x100+16) - { - m_dp8390->dp8390_cs(CLEAR_LINE); - if(mem_mask == 0x00ff) - { - data <<= 8; - offset++; - } - m_dp8390->dp8390_w(space, offset, data>>8, 0xff); - if(mem_mask == 0xffff) m_dp8390->dp8390_w(space, offset+1, data & 0xff, 0xff); - return; - } - //if(mem_mask == 0x00ff) offset++; - switch(offset) - { - case 0x100+16: - m_dp8390->dp8390_cs(ASSERT_LINE); - data = ((data & 0x00ff) << 8) | ((data & 0xff00) >> 8); - m_dp8390->dp8390_w(space, offset, data, mem_mask); - return; - case 0x100+31: - m_dp8390->dp8390_reset(ASSERT_LINE); - return; - default: - logerror("ne2000: invalid register write %02X\n", offset); - } - return; -} - -READ8_MEMBER(x68k_neptune_device::x68k_neptune_mem_read) -{ - if(offset < 32) return m_prom[offset>>1]; - if((offset < (16*1024)) || (offset >= (32*1024))) - { - logerror("ne2000: invalid memory read %04X\n", offset); - return 0xff; - } - return m_board_ram[offset - (16*1024)]; -} - -WRITE8_MEMBER(x68k_neptune_device::x68k_neptune_mem_write) -{ - if((offset < (16*1024)) || (offset >= (32*1024))) - { - logerror("ne2000: invalid memory write %04X\n", offset); - return; - } - m_board_ram[offset - (16*1024)] = data; -} - -WRITE_LINE_MEMBER(x68k_neptune_device::x68k_neptune_irq_w) -{ - machine().device("maincpu")->execute().set_input_line_vector(2, NEPTUNE_IRQ_VECTOR); - m_slot->irq2_w(state); - logerror("Neptune: IRQ2 set to %i\n",state); -} diff --git a/src/mess/machine/x68k_neptunex.h b/src/mess/machine/x68k_neptunex.h deleted file mode 100644 index 6db4e16e36d..00000000000 --- a/src/mess/machine/x68k_neptunex.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * x68k_neptunex.h - * - * Neptune-X NE2000-based ethernet board for the X68000 - * - * Map: - * 0xECE000-0xECE3FF: "Y0" - * 0xECE400-0xECE7FF: "Y1" - */ - -#ifndef X68K_NEPTUNEX_H_ -#define X68K_NEPTUNEX_H_ - -#include "emu.h" -#include "machine/dp8390.h" -#include "machine/x68kexp.h" - -#define NEPTUNE_IRQ_VECTOR 0xf9 - -class x68k_neptune_device : public device_t, - public device_x68k_expansion_card_interface -{ -public: - // construction/destruction - x68k_neptune_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // optional information overrides - virtual machine_config_constructor device_mconfig_additions() const; - - void x68k_neptune_irq_w(int state); - DECLARE_READ8_MEMBER(x68k_neptune_mem_read); - DECLARE_WRITE8_MEMBER(x68k_neptune_mem_write); - DECLARE_READ16_MEMBER(x68k_neptune_port_r); - DECLARE_WRITE16_MEMBER(x68k_neptune_port_w); - -protected: - // device-level overrides - virtual void device_start(); - virtual void device_reset(); - -private: - x68k_expansion_slot_device *m_slot; - - required_device<dp8390d_device> m_dp8390; - UINT8 m_board_ram[16*1024]; - UINT8 m_prom[16]; -}; - -// device type definition -extern const device_type X68K_NEPTUNEX; - -#endif /* X68K_NEPTUNEX_H_ */ diff --git a/src/mess/machine/x68k_scsiext.c b/src/mess/machine/x68k_scsiext.c deleted file mode 100644 index f64fdc94e32..00000000000 --- a/src/mess/machine/x68k_scsiext.c +++ /dev/null @@ -1,102 +0,0 @@ -/* - * x68k_scsiext.c - * - * Sharp CZ-6BS1 SCSI-1 controller - * - * Created on: 5/06/2012 - */ - -#include "emu.h" -#include "machine/scsibus.h" -#include "machine/scsihd.h" -#include "machine/mb89352.h" -#include "machine/x68k_scsiext.h" - -//************************************************************************** -// DEVICE DEFINITIONS -//************************************************************************** - -const device_type X68K_SCSIEXT = &device_creator<x68k_scsiext_device>; - -static const mb89352_interface mb89352_intf = -{ - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER,x68k_scsiext_device,irq_w), - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER,x68k_scsiext_device,drq_w) -}; - -//------------------------------------------------- -// rom_region - device-specific ROM region -//------------------------------------------------- - -ROM_START( x68k_cz6bs1 ) - ROM_REGION( 0x10000, "scsiexrom", 0 ) - ROM_LOAD16_WORD_SWAP( "scsiexrom.bin", 0x0000, 0x2000, CRC(7be488de) SHA1(49616c09a8986ffe6a12ad600febe512f7ba8ae4) ) -ROM_END - -const rom_entry *x68k_scsiext_device::device_rom_region() const -{ - return ROM_NAME( x68k_cz6bs1 ); -} - -// device machine config -static MACHINE_CONFIG_FRAGMENT( x68k_scsiext ) - MCFG_SCSIBUS_ADD("scsi") - MCFG_SCSIDEV_ADD("scsi:harddisk0", SCSIHD, SCSI_ID_0) - MCFG_SCSIDEV_ADD("scsi:harddisk1", SCSIHD, SCSI_ID_1) - MCFG_SCSIDEV_ADD("scsi:harddisk2", SCSIHD, SCSI_ID_2) - MCFG_SCSIDEV_ADD("scsi:harddisk3", SCSIHD, SCSI_ID_3) - MCFG_SCSIDEV_ADD("scsi:harddisk4", SCSIHD, SCSI_ID_4) - MCFG_SCSIDEV_ADD("scsi:harddisk5", SCSIHD, SCSI_ID_5) - MCFG_SCSIDEV_ADD("scsi:harddisk6", SCSIHD, SCSI_ID_6) - MCFG_MB89352A_ADD("scsi:mb89352",mb89352_intf) -MACHINE_CONFIG_END - -machine_config_constructor x68k_scsiext_device::device_mconfig_additions() const -{ - return MACHINE_CONFIG_NAME( x68k_scsiext ); -} - -x68k_scsiext_device::x68k_scsiext_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, X68K_SCSIEXT, "Sharp CZ-6BS1 SCSI-1", tag, owner, clock, "x68k_cz6bs1", __FILE__), - device_x68k_expansion_card_interface(mconfig, *this), - m_spc(*this, "scsi:mb89352") -{ -} - -void x68k_scsiext_device::device_start() -{ - device_t* cpu = machine().device("maincpu"); - UINT8* ROM; - astring temp; - address_space& space = cpu->memory().space(AS_PROGRAM); - m_slot = dynamic_cast<x68k_expansion_slot_device *>(owner()); - space.install_read_bank(0xea0020,0xea1fff,0,0,"scsi_ext"); - space.unmap_write(0xea0020,0xea1fff,0,0); - ROM = machine().root_device().memregion(subtag(temp,"scsiexrom"))->base(); - machine().root_device().membank("scsi_ext")->set_base(ROM); - space.install_readwrite_handler(0xea0000,0xea001f,0,0,read8_delegate(FUNC(x68k_scsiext_device::register_r),this),write8_delegate(FUNC(x68k_scsiext_device::register_w),this),0x00ff00ff); -} - -void x68k_scsiext_device::device_reset() -{ -} - -void x68k_scsiext_device::irq_w(int state) -{ - m_slot->irq2_w(state); // correct? Or perhaps selectable? -} - -void x68k_scsiext_device::drq_w(int state) -{ - // TODO -} - -READ8_MEMBER(x68k_scsiext_device::register_r) -{ - return m_spc->mb89352_r(space,offset); -} - -WRITE8_MEMBER(x68k_scsiext_device::register_w) -{ - m_spc->mb89352_w(space,offset,data); -} diff --git a/src/mess/machine/x68k_scsiext.h b/src/mess/machine/x68k_scsiext.h deleted file mode 100644 index 664d422534e..00000000000 --- a/src/mess/machine/x68k_scsiext.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * x68k_scsiext.h - * - * Created on: 5/06/2012 - */ - -#ifndef X68K_SCSIEXT_H_ -#define X68K_SCSIEXT_H_ - -#include "emu.h" -#include "machine/mb89352.h" -#include "machine/x68kexp.h" - -class x68k_scsiext_device : public device_t, - public device_x68k_expansion_card_interface -{ -public: - // construction/destruction - x68k_scsiext_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // optional information overrides - virtual machine_config_constructor device_mconfig_additions() const; - virtual const rom_entry *device_rom_region() const; - - void irq_w(int state); - void drq_w(int state); - DECLARE_READ8_MEMBER(register_r); - DECLARE_WRITE8_MEMBER(register_w); - -protected: - // device-level overrides - virtual void device_start(); - virtual void device_reset(); -private: - x68k_expansion_slot_device *m_slot; - - required_device<mb89352_device> m_spc; -}; - -// device type definition -extern const device_type X68K_SCSIEXT; - - -#endif /* X68K_SCSIEXT_H_ */ diff --git a/src/mess/machine/x68kexp.c b/src/mess/machine/x68kexp.c deleted file mode 100644 index eeb37ac85ac..00000000000 --- a/src/mess/machine/x68kexp.c +++ /dev/null @@ -1,98 +0,0 @@ -/* - * x68kexp.c - */ - -#include "emu.h" -#include "emuopts.h" -#include "machine/x68kexp.h" - -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -const device_type X68K_EXPANSION_SLOT = &device_creator<x68k_expansion_slot_device>; - - -//************************************************************************** -// DEVICE CPC_EXPANSION CARD INTERFACE -//************************************************************************** - - -device_x68k_expansion_card_interface::device_x68k_expansion_card_interface(const machine_config &mconfig, device_t &device) - : device_slot_card_interface(mconfig, device) -{ -} - - -device_x68k_expansion_card_interface::~device_x68k_expansion_card_interface() -{ -} - -//************************************************************************** -// LIVE DEVICE -//************************************************************************** - -x68k_expansion_slot_device::x68k_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - device_t(mconfig, X68K_EXPANSION_SLOT, "Sharp X680x0 expansion slot", tag, owner, clock, "x68k_expansion_slot", __FILE__), - device_slot_interface(mconfig, *this) -{ -} - -x68k_expansion_slot_device::~x68k_expansion_slot_device() -{ -} - -//------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void x68k_expansion_slot_device::device_config_complete() -{ - // inherit a copy of the static data - const x68k_expansion_slot_interface *intf = reinterpret_cast<const x68k_expansion_slot_interface *>(static_config()); - if (intf != NULL) - { - *static_cast<x68k_expansion_slot_interface *>(this) = *intf; - } - - // or initialize to defaults if none provided - else - { - memset(&m_out_irq2_cb, 0, sizeof(m_out_irq2_cb)); - memset(&m_out_irq4_cb, 0, sizeof(m_out_irq4_cb)); - memset(&m_out_nmi_cb, 0, sizeof(m_out_nmi_cb)); - memset(&m_out_reset_cb, 0, sizeof(m_out_reset_cb)); - } -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void x68k_expansion_slot_device::device_start() -{ - m_card = dynamic_cast<device_x68k_expansion_card_interface *>(get_card_device()); - - // resolve callbacks - m_out_irq2_func.resolve(m_out_irq2_cb, *this); - m_out_irq4_func.resolve(m_out_irq4_cb, *this); - m_out_nmi_func.resolve(m_out_nmi_cb, *this); - m_out_reset_func.resolve(m_out_reset_cb, *this); -} - - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void x68k_expansion_slot_device::device_reset() -{ -} - - -WRITE_LINE_MEMBER( x68k_expansion_slot_device::irq2_w ) { m_out_irq2_func(state); } -WRITE_LINE_MEMBER( x68k_expansion_slot_device::irq4_w ) { m_out_irq4_func(state); } -WRITE_LINE_MEMBER( x68k_expansion_slot_device::nmi_w ) { m_out_nmi_func(state); } -WRITE_LINE_MEMBER( x68k_expansion_slot_device::reset_w ) { m_out_reset_func(state); } diff --git a/src/mess/machine/x68kexp.h b/src/mess/machine/x68kexp.h deleted file mode 100644 index 05c384aae6c..00000000000 --- a/src/mess/machine/x68kexp.h +++ /dev/null @@ -1,149 +0,0 @@ -/* - * x68kexp.h - * - * Expansion slots for the X680x0 series - * - * Pinout: (from http://www.amy.hi-ho.ne.jp/shimada/neptune/x68k.html) - +-----+ - GND B1 |[] []| A1 GND - 10MHz B2 |[] []| A2 20MHz - #10MHz B3 |[] []| A3 GND - E B4 |[] []| A4 DB0 - AB1 B5 |[] []| A5 DB1 - AB2 B6 |[] []| A6 DB2 - AB3 B7 |[] []| A7 DB3 - AB4 B8 |[] []| A8 DB4 - AB5 B9 |[] []| A9 DB5 - AB6 B10 |[] []| A10 DB6 - GND B11 |[] []| A11 GND - AB7 B12 |[] []| A12 DB7 - AB8 B13 |[] []| A13 DB8 - AB9 B14 |[] []| A14 DB9 - AB10 B15 |[] []| A15 DB10 - AB11 B16 |[] []| A16 DB11 - AB12 B17 |[] []| A17 DB12 - AB13 B18 |[] []| A18 DB13 - AB14 B19 |[] []| A19 DB14 - AB15 B20 |[] []| A20 DB15 - GND B21 |[] []| A21 GND - AB16 B22 |[] []| A22 +12V - AB17 B23 |[] []| A23 +12V - AB18 B24 |[] []| A24 FC0 - AB19 B25 |[] []| A25 FC1 - AB20 B26 |[] []| A26 FC2 - AB21 B27 |[] []| A27 #AS - AB22 B28 |[] []| A28 #LDS - AB23 B29 |[] []| A29 #UDS - IDDIR B30 |[] []| A30 R/#W - N.C. B31 |[] []| A31 N.C. - HSYNC B32 |[] []| A32 -12V - VSYNC B33 |[] []| A33 -12V - #DONE B34 |[] []| A34 #VMA - #DTC B35 |[] []| A35 #EXVPA - #EXREQ B36 |[] []| A36 #DTACK - #EXACK B37 |[] []| A37 #EXRESET - #EXPCL B38 |[] []| A38 #HALT - #EXOWN B39 |[] []| A39 #EXBERR - #EXNMI B40 |[] []| A40 #EXPWON - GND B41 |[] []| A41 GND - #IRQ2 B42 |[] []| A42 Vcc2 - #IRQ4 B43 |[] []| A43 Vcc2 - #IACK2 B44 |[] []| A44 SELEN - #IACK4 B45 |[] []| A45 CASRDEN - #BR B46 |[] []| A46 CASWRL - #BG B47 |[] []| A47 CASWRU - #BGACK B48 |[] []| A48 INH2 - Vcc1 B49 |[] []| A49 Vcc1 - Vcc1 B50 |[] []| A50 Vcc1 - +-----+ - * - */ - -#ifndef X68KEXP_H_ -#define X68KEXP_H_ - -#include "emu.h" - -//************************************************************************** -// CONSTANTS -//************************************************************************** - -#define X68K_EXP_SLOT_TAG "x68kexp" - -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define X68K_EXPANSION_INTERFACE(_name) \ - const x68k_expansion_slot_interface (_name) = - - -#define MCFG_X68K_EXPANSION_SLOT_ADD(_tag, _config, _slot_intf, _def_slot) \ - MCFG_DEVICE_ADD(_tag, X68K_EXPANSION_SLOT, 0) \ - MCFG_DEVICE_CONFIG(_config) \ - MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -// expansion slot interface - -struct x68k_expansion_slot_interface -{ - devcb_write_line m_out_irq2_cb; - devcb_write_line m_out_irq4_cb; - devcb_write_line m_out_nmi_cb; - devcb_write_line m_out_reset_cb; -}; - -// ======================> device_x68k_expansion_card_interface - -// class representing interface-specific live x68k_expansion card -class device_x68k_expansion_card_interface : public device_slot_card_interface -{ -public: - // construction/destruction - device_x68k_expansion_card_interface(const machine_config &mconfig, device_t &device); - virtual ~device_x68k_expansion_card_interface(); - - // reset - virtual void x68k_reset_w() { }; -}; - - -// ======================> x68k_expansion_slot_device - -class x68k_expansion_slot_device : public device_t, - public x68k_expansion_slot_interface, - public device_slot_interface -{ -public: - // construction/destruction - x68k_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - virtual ~x68k_expansion_slot_device(); - - DECLARE_WRITE_LINE_MEMBER( irq2_w ); - DECLARE_WRITE_LINE_MEMBER( irq4_w ); - DECLARE_WRITE_LINE_MEMBER( nmi_w ); - DECLARE_WRITE_LINE_MEMBER( reset_w ); - -protected: - // device-level overrides - virtual void device_start(); - virtual void device_reset(); - virtual void device_config_complete(); - - devcb_resolved_write_line m_out_irq2_func; - devcb_resolved_write_line m_out_irq4_func; - devcb_resolved_write_line m_out_nmi_func; - devcb_resolved_write_line m_out_reset_func; - - device_x68k_expansion_card_interface *m_card; -}; - - -// device type definition -extern const device_type X68K_EXPANSION_SLOT; - -#endif /* X68KEXP_H_ */ |