summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/alphatpx.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/alphatpx.cpp')
-rw-r--r--src/mame/drivers/alphatpx.cpp681
1 files changed, 555 insertions, 126 deletions
diff --git a/src/mame/drivers/alphatpx.cpp b/src/mame/drivers/alphatpx.cpp
index 440745cfc0f..c829d0353e0 100644
--- a/src/mame/drivers/alphatpx.cpp
+++ b/src/mame/drivers/alphatpx.cpp
@@ -1,12 +1,11 @@
// license: GPL-2.0+
// copyright-holders: Dirk Best
-// test / modify oct-2017 begin: rfka01 + helwie44
/***************************************************************************
Triumph-Adler Alphatronic Px series
===================================
- The Px series was designed by SKS, like the ITT3030 and the SKS Nano,
+ The Px series was designed by SKS (Steinmetz-Krischke Systemtechnik), like the ITT3030 and the SKS Nano,
the boards are closely related.
Keyboard and floppy stuff was copypasted from ITT3030 and adapted to the best of knowledge.
@@ -59,6 +58,9 @@
P30 and P40
===========
Those were P3 and P4's with an additional 8088 card, a 128K RAM card (some with an extra 32K graphics extension) to support MS-DOS.
+
+
+ comments, testing, modification: rfka01, helwie44
***************************************************************************/
@@ -72,23 +74,23 @@
#include "sound/beep.h"
#include "screen.h"
#include "speaker.h"
+#include "debugger.h"
//**************************************************************************
-// TYPE DEFINITIONS
+// TYPE DEFINITIONS - Alphatronic P1, P2, P2S, P2U and Hell 2069
//**************************************************************************
-class alphatpx_state : public driver_device
+class alphatp_12_state : public driver_device
{
public:
- alphatpx_state(const machine_config &mconfig, device_type type, const char *tag) :
+ alphatp_12_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_bankdev(*this, "bankdev"),
m_kbdmcu(*this, "kbdmcu"),
m_crtc(*this, "crtc"),
m_fdc (*this, "fdc"),
- m_floppy0(*this, "fdc:0"),
- m_floppy1(*this, "fdc:1"),
+ m_floppy(*this, "fdc:%u", 0),
m_beep(*this, "beeper"),
m_keycols(*this, "COL.%u", 0),
m_palette(*this, "palette"),
@@ -115,9 +117,74 @@ public:
DECLARE_WRITE8_MEMBER(beep_w);
DECLARE_WRITE8_MEMBER(bank_w);
+ void alphatp1(machine_config &config);
void alphatp2(machine_config &config);
- void alphatp3(machine_config &config);
void alphatp2u(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ required_device<address_map_bank_device> m_bankdev;
+ required_device<i8041_device> m_kbdmcu;
+ required_device<crt5027_device> m_crtc;
+ required_device<fd1791_device> m_fdc;
+ required_device_array<floppy_connector, 2> m_floppy;
+ required_device<beep_device> m_beep;
+ required_ioport_array<16> m_keycols;
+
+private:
+ uint8_t m_kbdclk, m_kbdread, m_kbdport2;
+ required_device<palette_device> m_palette;
+ required_shared_ptr<u8> m_vram;
+ required_region_ptr<u8> m_gfx;
+ required_shared_ptr<u8> m_ram;
+ floppy_image_device *m_curfloppy;
+ bool m_fdc_irq, m_fdc_drq, m_fdc_hld;
+};
+
+//**************************************************************************
+// TYPE DEFINITIONS - Alphatronic P3, P4, P30 and P4
+//**************************************************************************
+
+class alphatp_34_state : public driver_device
+{
+public:
+ alphatp_34_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_bankdev(*this, "bankdev"),
+ m_kbdmcu(*this, "kbdmcu"),
+ m_crtc(*this, "crtc"),
+ m_fdc (*this, "fdc"),
+ m_floppy(*this, "fdc:%u", 0),
+ m_beep(*this, "beeper"),
+ m_keycols(*this, "COL.%u", 0),
+ m_palette(*this, "palette"),
+ m_vram(*this, "vram"),
+ m_gfx(*this, "gfx"),
+ m_ram(*this, "ram")
+ { }
+
+ uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+
+ DECLARE_READ_LINE_MEMBER(kbd_matrix_r);
+ DECLARE_WRITE8_MEMBER(kbd_matrix_w);
+ DECLARE_READ8_MEMBER(kbd_port2_r);
+ DECLARE_WRITE8_MEMBER(kbd_port2_w);
+
+ DECLARE_READ8_MEMBER(fdc_r);
+ DECLARE_WRITE8_MEMBER(fdc_w);
+ DECLARE_READ8_MEMBER(fdc_stat_r);
+ DECLARE_WRITE8_MEMBER(fdc_cmd_w);
+
+ DECLARE_WRITE_LINE_MEMBER(fdcirq_w);
+ DECLARE_WRITE_LINE_MEMBER(fdcdrq_w);
+ DECLARE_WRITE_LINE_MEMBER(fdchld_w);
+ DECLARE_WRITE8_MEMBER(beep_w);
+ DECLARE_WRITE8_MEMBER(bank_w);
+
+ void alphatp3(machine_config &config);
+
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
@@ -126,8 +193,7 @@ protected:
required_device<i8041_device> m_kbdmcu;
required_device<crt5037_device> m_crtc;
required_device<fd1791_device> m_fdc;
- required_device<floppy_connector> m_floppy0;
- required_device<floppy_connector> m_floppy1;
+ required_device_array<floppy_connector, 2> m_floppy;
required_device<beep_device> m_beep;
required_ioport_array<16> m_keycols;
@@ -141,16 +207,51 @@ private:
bool m_fdc_irq, m_fdc_drq, m_fdc_hld;
};
+//**************************************************************************
+// ADDRESS MAPS - Alphatronic P1, P2, P2S, P2U and Hell 2069
+//**************************************************************************
+
+static ADDRESS_MAP_START( alphatp2_mem, AS_PROGRAM, 8, alphatp_12_state )
+ AM_RANGE(0x0000, 0xffff) AM_DEVICE("bankdev", address_map_bank_device, amap8)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( alphatp2_map, AS_PROGRAM, 8, alphatp_12_state )
+ AM_RANGE(0x00000, 0x017ff) AM_ROM AM_REGION("boot", 0) // P2 0x0000 , 0x17ff -hw 6kB, P3 only 4 kB
+ AM_RANGE(0x01800, 0x01c00) AM_RAM // boot rom variables
+ AM_RANGE(0x03000, 0x03bff) AM_WRITEONLY AM_SHARE("vram") // test 2017 hw, MOS directly writes to display RAM
+ AM_RANGE(0x03FF0, 0x03fff) AM_DEVWRITE("crtc", crt5027_device, write) //test hw, mem-mapped registers, cursor position can be determined through this range
+ AM_RANGE(0x00000, 0x0ffff) AM_RAMBANK("ram_0000")
+
+ AM_RANGE(0x10000, 0x1ffff) AM_RAM AM_SHARE("ram")
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( alphatp2_io, AS_IO, 8, alphatp_12_state )
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x04, 0x04) AM_DEVREADWRITE("uart", i8251_device, data_r, data_w)
+ AM_RANGE(0x05, 0x05) AM_DEVREADWRITE("uart", i8251_device, status_r, control_w)
+ AM_RANGE(0x10, 0x11) AM_DEVREADWRITE("kbdmcu", i8041_device, upi41_master_r, upi41_master_w)
+ AM_RANGE(0x12, 0x12) AM_WRITE(beep_w)
+ AM_RANGE(0x50, 0x53) AM_READWRITE(fdc_r, fdc_w)
+ AM_RANGE(0x54, 0x54) AM_READWRITE(fdc_stat_r, fdc_cmd_w)
+ AM_RANGE(0x78, 0x78) AM_WRITE(bank_w)
+ADDRESS_MAP_END
+
+
+WRITE8_MEMBER(alphatp_12_state::bank_w)
+{
+ m_bankdev->set_bank(BIT(data, 6));
+}
+
//**************************************************************************
-// ADDRESS MAPS
+// ADDRESS MAPS - Alphatronic P3, P4, P30 and P40
//**************************************************************************
-static ADDRESS_MAP_START( alphatp3_mem, AS_PROGRAM, 8, alphatpx_state )
+static ADDRESS_MAP_START( alphatp3_mem, AS_PROGRAM, 8, alphatp_34_state )
AM_RANGE(0x0000, 0xffff) AM_DEVICE("bankdev", address_map_bank_device, amap8)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( alphatp3_map, AS_PROGRAM, 8, alphatpx_state )
+static ADDRESS_MAP_START( alphatp3_map, AS_PROGRAM, 8, alphatp_34_state )
AM_RANGE(0x00000, 0x017ff) AM_ROM AM_REGION("boot", 0) // P2 0x0000 , 0x17ff -hw 6kB, P3 only 4 kB
AM_RANGE(0x01800, 0x01c00) AM_RAM // boot rom variables
AM_RANGE(0x03000, 0x03bff) AM_WRITEONLY AM_SHARE("vram") // test 2017 hw, MOS directly writes to display RAM
@@ -160,7 +261,7 @@ static ADDRESS_MAP_START( alphatp3_map, AS_PROGRAM, 8, alphatpx_state )
AM_RANGE(0x10000, 0x1ffff) AM_RAM AM_SHARE("ram")
ADDRESS_MAP_END
-static ADDRESS_MAP_START( alphatp3_io, AS_IO, 8, alphatpx_state )
+static ADDRESS_MAP_START( alphatp3_io, AS_IO, 8, alphatp_34_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x04, 0x04) AM_DEVREADWRITE("uart", i8251_device, data_r, data_w)
AM_RANGE(0x05, 0x05) AM_DEVREADWRITE("uart", i8251_device, status_r, control_w)
@@ -171,28 +272,59 @@ static ADDRESS_MAP_START( alphatp3_io, AS_IO, 8, alphatpx_state )
AM_RANGE(0x78, 0x78) AM_WRITE(bank_w)
ADDRESS_MAP_END
-WRITE8_MEMBER(alphatpx_state::bank_w)
+
+WRITE8_MEMBER(alphatp_34_state::bank_w)
{
m_bankdev->set_bank(BIT(data, 6));
}
//**************************************************************************
-// INPUTS
+// INPUTS - Alphatronic P1, P2, P2S, P2U and Hell 2069
//**************************************************************************
-READ_LINE_MEMBER(alphatpx_state::kbd_matrix_r)
+READ_LINE_MEMBER(alphatp_12_state::kbd_matrix_r)
{
return m_kbdread;
}
-WRITE8_MEMBER(alphatpx_state::kbd_matrix_w)
+WRITE8_MEMBER(alphatp_12_state::kbd_matrix_w)
{
- int rd_masks[8] = { 1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80 };
- int tmp_read;
+ if ((data & 0x80) && (!m_kbdclk))
+ {
+ const ioport_value tmp_read = m_keycols[(data >> 3) & 0xf]->read() & (1 << (data & 0x7));
+ m_kbdread = (tmp_read != 0) ? 1 : 0;
+ }
+ m_kbdclk = (data & 0x80) ? 1 : 0;
+
+}
+
+// bit 2 is UPI-41 host IRQ to Z80
+WRITE8_MEMBER(alphatp_12_state::kbd_port2_w)
+{
+ m_kbdport2 = data;
+
+}
+
+READ8_MEMBER(alphatp_12_state::kbd_port2_r)
+{
+ return m_kbdport2;
+}
+
+//**************************************************************************
+// INPUTS - Alphatronic P3, P4, P30 and P40
+//**************************************************************************
+
+READ_LINE_MEMBER(alphatp_34_state::kbd_matrix_r)
+{
+ return m_kbdread;
+}
+
+WRITE8_MEMBER(alphatp_34_state::kbd_matrix_w)
+{
if ((data & 0x80) && (!m_kbdclk))
{
- tmp_read = m_keycols[(data >> 3) & 0xf]->read() & rd_masks[data & 0x7];
+ const ioport_value tmp_read = m_keycols[(data >> 3) & 0xf]->read() & (1 << (data & 0x7));
m_kbdread = (tmp_read != 0) ? 1 : 0;
}
@@ -201,19 +333,23 @@ WRITE8_MEMBER(alphatpx_state::kbd_matrix_w)
}
// bit 2 is UPI-41 host IRQ to Z80
-WRITE8_MEMBER(alphatpx_state::kbd_port2_w)
+WRITE8_MEMBER(alphatp_34_state::kbd_port2_w)
{
m_kbdport2 = data;
}
-READ8_MEMBER(alphatpx_state::kbd_port2_r)
+READ8_MEMBER(alphatp_34_state::kbd_port2_r)
{
return m_kbdport2;
}
-/*
+//**************************************************************************
+// KEYBOARD - Alphatronic P1, P2, P2S, P2U and Hell 2069
+//**************************************************************************
+
+/*
P2 keyboard:
[ ][ ! ][ " ][ § ][ $ ][ % ][ & ][ / ][ ( ][ ) ][ = ][ ? ][ ` ][ F ][ F ][ F ][ F ][ F ][ F ]
@@ -238,7 +374,145 @@ entered too quickly.
[]
[] is two overlapping squares, the manual calls it "Kontroll-Taste", i.e. CTRL
TB is the TAB key and is unmarked
+*/
+
+// translation table at offset 0xdc0 in the main rom
+static INPUT_PORTS_START( alphatp2 )
+
+PORT_START("COL.0")
+ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
+ PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
+ PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LEFT") PORT_CODE(KEYCODE_LEFT) PORT_CHAR(8) // left arrow works as backspace
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
+ PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
+
+PORT_START("COL.1")
+ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
+ PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
+ PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SPACE") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F5") PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5)) // SCAN:=0Dh ->8Ah-funct F5 ok
+ PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"')
+
+PORT_START("COL.2")
+ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
+ PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
+ PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("RIGHT") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) // 0x82
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F6") PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6)) // scan:=15h 8Ch-> F6 ok
+ PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR(0x00a7)
+
+PORT_START("COL.3")
+ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("T") PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
+ PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
+ PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("DOWN") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) // 0x8b
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
+ PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
+
+PORT_START("COL.4")
+ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
+ PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
+ PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_UNKNOWN)
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CAPS") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) // scan:=25h ->0xc0 ?capslock ?
+ PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
+
+PORT_START("COL.5")
+ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
+ PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
+ PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("UP") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) // 0x89
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
+ PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
+
+PORT_START("COL.6")
+ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
+ PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('k')
+ PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(", ;") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR(';')
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_UNKNOWN)
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("<>") PORT_CODE(KEYCODE_BACKSLASH2)PORT_CHAR('<') PORT_CHAR('>')
+ PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('/')
+PORT_START("COL.7")
+ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
+ PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
+ PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(". :") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR(':')
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Pos 1") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME)) // 0x8f
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("L_SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_MAMEKEY(LSHIFT)) // 3Dh ->C1h-function P3 key left
+ PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
+
+PORT_START("COL.8")
+ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
+ PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ö Ö") PORT_CODE(KEYCODE_COLON) PORT_CHAR(0x00f6) PORT_CHAR(0x00d6)
+ PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("- _") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('-') PORT_CHAR('_')
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R_CTRL") PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(RCONTROL)) // 44h ->84h clear ?
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ENTER Pad") PORT_CODE(KEYCODE_ENTER_PAD)PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD))
+ PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
+
+PORT_START("COL.9")
+ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ü Ü") PORT_CODE(KEYCODE_OPENBRACE)PORT_CHAR(0x00fc) PORT_CHAR(0x00dc)
+ PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ä Ä") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(0x00e4) PORT_CHAR(0x00c4)
+ PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R_SHIFT") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("0 Pad") PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_UNKNOWN)
+ PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('=')
+
+PORT_START("COL.10")
+ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("+ *") PORT_CODE(KEYCODE_CLOSEBRACE)PORT_CHAR('+') PORT_CHAR('*')
+ PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("# ^") PORT_CODE(KEYCODE_BACKSLASH)PORT_CHAR('#') PORT_CHAR('^')
+ PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("[][]/ESC") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC)) // Esc test this work ?!
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("DEL Pad") PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD))
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_UNKNOWN)
+ PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ß ?") PORT_CODE(KEYCODE_MINUS) PORT_CHAR(0x00df) PORT_CHAR('?') // ß and ?
+
+PORT_START("COL.11")
+ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TAB") PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t') // TAB key
+ PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ENTER") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
+ PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("1 Pad") PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("+ Pad") PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD))
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_UNKNOWN)
+ PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("´ `") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR(0x00b4) PORT_CHAR(0x0060)
+
+PORT_START("COL.12")
+ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("7 Pad") PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
+ PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("4 Pad") PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD))
+ PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("2 Pad") PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD))
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_UNKNOWN)
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_UNKNOWN)
+ PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F4") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4)) // scan 68h -> 88h func. F4
+
+PORT_START("COL.13")
+ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("/ Pad") PORT_CODE(KEYCODE_SLASH_PAD)PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD))
+ PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("*") PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK)) // test ?
+ PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("\xc2\xae /Ctrl")PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_LCONTROL) // scan 6Bh -> C2h funct.
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_UNKNOWN) // 0xc2 ??
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_UNKNOWN)
+ PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F3") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) // scan:=68h 88h-> F3 ok
+
+PORT_START("COL.14")
+ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("9 Pad") PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
+ PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("6 Pad") PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
+ PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("- Pad") PORT_CODE(KEYCODE_MINUS_PAD)PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD))
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_UNKNOWN)
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_UNKNOWN)
+ PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F2") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) // 70h -> 87h func.F2 ok
+
+PORT_START("COL.15")
+ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("8 Pad") PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD))
+ PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("5 Pad") PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD))
+ PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("3 Pad") PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD))
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_UNKNOWN)
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F1") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) // 7Dh -> 85H func. F1 ok
+ PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SM") PORT_CODE(KEYCODE_NUMLOCK) PORT_CHAR(UCHAR_MAMEKEY(NUMLOCK))// SM (typewriter) mode key */
+INPUT_PORTS_END
+
+//**************************************************************************
+// KEYBOARD - Alphatronic P3, P4, P30 and P40
+//**************************************************************************
+
+/*
P3 keyboard:
[RST]
@@ -315,6 +589,7 @@ PORT_START("COL.4")
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_UNKNOWN)
PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CAPS") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) // scan:=25h ->0xc0 ?capslock ?
PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
@@ -331,7 +606,7 @@ PORT_START("COL.6")
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('k')
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(", ;") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR(';')
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_UNKNOWN)
- PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_UNKNOWN)
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("<>") PORT_CODE(KEYCODE_BACKSLASH2)PORT_CHAR('<') PORT_CHAR('>')
PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('/')
PORT_START("COL.7")
@@ -353,8 +628,9 @@ PORT_START("COL.8")
PORT_START("COL.9")
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ü Ü") PORT_CODE(KEYCODE_OPENBRACE)PORT_CHAR(0x00fc) PORT_CHAR(0x00dc)
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ä Ä") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(0x00e4) PORT_CHAR(0x00c4)
- PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R_SHIFT") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_MAMEKEY(RSHIFT))
+ PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R_SHIFT") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("0 Pad") PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_UNKNOWN)
PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('=')
PORT_START("COL.10")
@@ -362,26 +638,30 @@ PORT_START("COL.10")
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("# ^") PORT_CODE(KEYCODE_BACKSLASH)PORT_CHAR('#') PORT_CHAR('^')
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("[][]/ESC") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC)) // Esc test this work ?!
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("DEL Pad") PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD))
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_UNKNOWN)
PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ß ?") PORT_CODE(KEYCODE_MINUS) PORT_CHAR(0x00df) PORT_CHAR('?') // ß and ?
PORT_START("COL.11")
- PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TAB") PORT_CODE(KEYCODE_TAB) PORT_CHAR(UCHAR_MAMEKEY(TAB))
+ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TAB") PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t') // TAB key
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ENTER") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("1 Pad") PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("+ Pad") PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD))
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_UNKNOWN)
PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("´ `") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR(0x00b4) PORT_CHAR(0x0060)
PORT_START("COL.12")
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("7 Pad") PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("4 Pad") PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD))
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("2 Pad") PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD))
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_UNKNOWN)
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_UNKNOWN)
PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F4") PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4)) // scan 68h -> 88h func. F4
PORT_START("COL.13")
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("/ Pad") PORT_CODE(KEYCODE_SLASH_PAD)PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD))
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("*") PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK)) // test ?
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("\xc2\xae /Ctrl")PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_LCONTROL) // scan 6Bh -> C2h funct.
- PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_UNKNOWN) // 0xc2 ??
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_UNKNOWN) // 0xc2 ??
PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_UNKNOWN)
PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F3") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) // scan:=68h 88h-> F3 ok
@@ -389,19 +669,21 @@ PORT_START("COL.14")
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("9 Pad") PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("6 Pad") PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("- Pad") PORT_CODE(KEYCODE_MINUS_PAD)PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD))
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_UNKNOWN)
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_UNKNOWN)
PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F2") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) // 70h -> 87h func.F2 ok
PORT_START("COL.15")
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("8 Pad") PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD))
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("5 Pad") PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD))
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("3 Pad") PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD))
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_UNKNOWN)
PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F1") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) // 7Dh -> 85H func. F1 ok
PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SM") PORT_CODE(KEYCODE_NUMLOCK) PORT_CHAR(UCHAR_MAMEKEY(NUMLOCK))// SM (typewriter) mode key */
INPUT_PORTS_END
-
//**************************************************************************
-// VIDEO
+// VIDEO - Alphatronic Px
//**************************************************************************
static const gfx_layout charlayout =
@@ -415,11 +697,57 @@ static const gfx_layout charlayout =
8*16
};
+//**************************************************************************
+// VIDEO - Alphatronic P1, P2, P2S, P2U and Hell 2069
+//**************************************************************************
+
+static GFXDECODE_START( alphatp2 )
+ GFXDECODE_ENTRY("gfx", 0, charlayout, 0, 1)
+GFXDECODE_END
+
+uint32_t alphatp_12_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+{
+ const pen_t *pen = m_palette->pens();
+ int start = m_crtc->upscroll_offset();
+ rectangle cursor;
+ m_crtc->cursor_bounds(cursor);
+ for (int y = 0; y < 24; y++)
+ {
+ int vramy = (start + y) % 24;
+ for (int x = 0; x < 80; x++)
+ {
+ uint8_t code = m_vram[(vramy * 128) + x]; // helwie44 must be 128d is 080h physical display-ram step line
+ // draw 12 lines of the character
+ bool cursoren = cursor.contains(x * 8, vramy * 12);
+ for (int line = 0; line < 12; line++)
+ {
+ uint8_t data = m_gfx[((code & 0x7f) * 16) + line];
+ if (cursoren)
+ data ^= 0xff;
+ bitmap.pix32(y * 12 + line, x * 8 + 0) = pen[BIT(data, 0) ^ BIT(code, 7)];
+ bitmap.pix32(y * 12 + line, x * 8 + 1) = pen[BIT(data, 1) ^ BIT(code, 7)];
+ bitmap.pix32(y * 12 + line, x * 8 + 2) = pen[BIT(data, 2) ^ BIT(code, 7)];
+ bitmap.pix32(y * 12 + line, x * 8 + 3) = pen[BIT(data, 3) ^ BIT(code, 7)];
+ bitmap.pix32(y * 12 + line, x * 8 + 4) = pen[BIT(data, 4) ^ BIT(code, 7)];
+ bitmap.pix32(y * 12 + line, x * 8 + 5) = pen[BIT(data, 5) ^ BIT(code, 7)];
+ bitmap.pix32(y * 12 + line, x * 8 + 6) = pen[BIT(data, 6) ^ BIT(code, 7)];
+ bitmap.pix32(y * 12 + line, x * 8 + 7) = pen[BIT(data, 7) ^ BIT(code, 7)];
+ }
+ }
+ }
+
+ return 0;
+}
+
+//**************************************************************************
+// VIDEO - Alphatronic P3, P4, P30 and P40
+//**************************************************************************
+
static GFXDECODE_START( alphatp3 )
GFXDECODE_ENTRY("gfx", 0, charlayout, 0, 1)
GFXDECODE_END
-uint32_t alphatpx_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+uint32_t alphatp_34_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
const pen_t *pen = m_palette->pens();
int start = m_crtc->upscroll_offset();
@@ -436,7 +764,7 @@ uint32_t alphatpx_state::screen_update(screen_device &screen, bitmap_rgb32 &bitm
for (int line = 0; line < 12; line++)
{
uint8_t data = m_gfx[((code & 0x7f) * 16) + line];
- if(cursoren)
+ if (cursoren)
data ^= 0xff;
bitmap.pix32(y * 12 + line, x * 8 + 0) = pen[BIT(data, 0) ^ BIT(code, 7)];
bitmap.pix32(y * 12 + line, x * 8 + 1) = pen[BIT(data, 1) ^ BIT(code, 7)];
@@ -453,52 +781,131 @@ uint32_t alphatpx_state::screen_update(screen_device &screen, bitmap_rgb32 &bitm
return 0;
}
+//**************************************************************************
+// SOUND - Alphatronic P1, P2, P2S, P2U and Hell 2069
+//**************************************************************************
+
+WRITE8_MEMBER( alphatp_12_state::beep_w )
+{
+ m_beep->set_state(data&1);
+}
//**************************************************************************
-// SOUND
+// SOUND - Alphatronic P3, P4, P30 and P40
//**************************************************************************
-WRITE8_MEMBER( alphatpx_state::beep_w )
+WRITE8_MEMBER( alphatp_34_state::beep_w )
{
m_beep->set_state(data&1);
}
//**************************************************************************
-// SOUND
+// FLOPPY - Alphatronic P1, P2, P2S, P2U and Hell 2069
//**************************************************************************
-WRITE_LINE_MEMBER(alphatpx_state::fdcirq_w)
+WRITE_LINE_MEMBER(alphatp_12_state::fdcirq_w)
{
m_fdc_irq = state;
}
-#include "debugger.h"
+WRITE_LINE_MEMBER(alphatp_12_state::fdcdrq_w)
+{
+ m_fdc_drq = state;
+}
+
+WRITE_LINE_MEMBER(alphatp_12_state::fdchld_w)
+{
+ m_fdc_hld = state;
+}
+
+READ8_MEMBER(alphatp_12_state::fdc_stat_r)
+{
+ uint8_t res = 0;
+ floppy_image_device *floppy1,*floppy2;
+ floppy1 = floppy2 = nullptr;
+
+ floppy1 = m_floppy[0] ? m_floppy[0]->get_device() : nullptr;
+ floppy2 = m_floppy[1] ? m_floppy[1]->get_device() : nullptr;
+
+ res = m_fdc_drq ? 0x80 : 0x00;
+ res |= m_fdc_irq ? 0x40 : 0x00;
+ res |= m_fdc_hld ? 0x00 : 0x20;
+
+ if (floppy2) res |= !floppy2->ready_r() ? 0x08 : 0;
+ if (floppy1) res |= !floppy1->ready_r() ? 0x04 : 0;
+ if (m_curfloppy) res |= m_curfloppy->wpt_r() ? 0x02 : 0;
+
+ return res;
+}
+
+READ8_MEMBER(alphatp_12_state::fdc_r)
+{
+ return m_fdc->gen_r(offset) ^ 0xff;
+}
+
+WRITE8_MEMBER(alphatp_12_state::fdc_w)
+{
+ m_fdc->gen_w(offset, data ^ 0xff);
+}
-WRITE_LINE_MEMBER(alphatpx_state::fdcdrq_w)
+
+WRITE8_MEMBER(alphatp_12_state::fdc_cmd_w)
+{
+ floppy_image_device *floppy = nullptr;
+
+ logerror("%02x to fdc_cmd_w: motor %d side %d\n", data, (data & 0x10)>>4, (data & 4)>>2);
+
+ // select drive
+ if (!(data & 0x80))
+ {
+ floppy = m_floppy[0] ? m_floppy[0]->get_device() : nullptr;
+ }
+ else if (!(data & 0x40))
+ {
+ floppy = m_floppy[1] ? m_floppy[1]->get_device() : nullptr;
+ }
+
+ // selecting a new drive?
+ if (floppy != m_curfloppy)
+ {
+ m_fdc->set_floppy(floppy);
+ m_curfloppy = floppy;
+ }
+
+ if (floppy != nullptr)
+ {
+ // side select
+ floppy->ss_w((data & 4) ? 0 : 1);
+
+ // motor control (active low)
+ floppy->mon_w((data & 0x10) ? 1 : 0);
+ }
+}
+
+//**************************************************************************
+// FLOPPY - Alphatronic P3, P4, P30 and P40
+//**************************************************************************
+
+WRITE_LINE_MEMBER(alphatp_34_state::fdcirq_w)
+{
+ m_fdc_irq = state;
+}
+
+WRITE_LINE_MEMBER(alphatp_34_state::fdcdrq_w)
{
m_fdc_drq = state;
}
-WRITE_LINE_MEMBER(alphatpx_state::fdchld_w)
+WRITE_LINE_MEMBER(alphatp_34_state::fdchld_w)
{
m_fdc_hld = state;
}
-/*
- 7 Data Request (DRQ - inverted 1791-Signal)
- 6 Interrupt Request (INTRQ - 1791-Signal)
- 5 Head Load (HLD - inverted 1791-Signal)
- 4 Ready 3 (Drive 3 ready)
- 3 Ready 2 (Drive 2 ready)
- 2 Ready l (Drive 1 ready)
- 1 Write protect (the disk in the selected drive is write protected)
- 0 HLT (Halt signal during head load and track change)
-*/
-READ8_MEMBER(alphatpx_state::fdc_stat_r)
+READ8_MEMBER(alphatp_34_state::fdc_stat_r)
{
uint8_t res = 0;
- floppy_image_device *floppy1 = m_floppy0->get_device();
- floppy_image_device *floppy2 = m_floppy1->get_device();
+ floppy_image_device *floppy1 = m_floppy[0]->get_device();
+ floppy_image_device *floppy2 = m_floppy[1]->get_device();
res = m_fdc_drq ? 0x80 : 0x00;
res |= m_fdc_irq ? 0x40 : 0x00;
@@ -510,28 +917,18 @@ READ8_MEMBER(alphatpx_state::fdc_stat_r)
return res;
}
-/* As far as we can tell, the mess of ttl de-inverts the bus */
-READ8_MEMBER(alphatpx_state::fdc_r)
+READ8_MEMBER(alphatp_34_state::fdc_r)
{
return m_fdc->gen_r(offset) ^ 0xff;
}
-WRITE8_MEMBER(alphatpx_state::fdc_w)
+WRITE8_MEMBER(alphatp_34_state::fdc_w)
{
m_fdc->gen_w(offset, data ^ 0xff);
}
-/*
- 7 SEL1 - Select drive 1
- 6 SEL2 - Select drive 2
- 5 SEL3 - Select drive 3
- 4 MOTOR - Motor on
- 3 DOOR - Drive door lock drives 1 + 2 (not possible with all drives)
- 2 SIDESEL - Select disk side
- 1 KOMP - write comp on/off
- 0 RG J - Change separator stage to read
-*/
-WRITE8_MEMBER(alphatpx_state::fdc_cmd_w)
+
+WRITE8_MEMBER(alphatp_34_state::fdc_cmd_w)
{
floppy_image_device *floppy = nullptr;
@@ -539,9 +936,9 @@ WRITE8_MEMBER(alphatpx_state::fdc_cmd_w)
// select drive
if (!(data & 0x80))
- floppy = m_floppy0->get_device();
+ floppy = m_floppy[0]->get_device();
else if (!(data & 0x40))
- floppy = m_floppy1->get_device();
+ floppy = m_floppy[1]->get_device();
// selecting a new drive?
if (floppy != m_curfloppy)
@@ -560,23 +957,27 @@ WRITE8_MEMBER(alphatpx_state::fdc_cmd_w)
}
}
-static SLOT_INTERFACE_START( alphatp2_floppies ) // P3: two BASF 6106 drives
- SLOT_INTERFACE("525ssdd", FLOPPY_525_SSDD) // P30: two Shugart SA465-3AA drives
+//**************************************************************************
+// FLOPPY - Drive definitions
+//**************************************************************************
+
+static SLOT_INTERFACE_START( alphatp2_floppies ) // two BASF 2471 drives
+ SLOT_INTERFACE("525ssdd", FLOPPY_525_SSDD)
SLOT_INTERFACE_END
static SLOT_INTERFACE_START( alphatp2su_floppies )
SLOT_INTERFACE("525dd", FLOPPY_525_DD)
SLOT_INTERFACE_END
-static SLOT_INTERFACE_START( alphatp3_floppies ) // two BASF 2471 drives
- SLOT_INTERFACE("525qd", FLOPPY_525_QD)
+static SLOT_INTERFACE_START( alphatp3_floppies ) // P3: two BASF 6106 drives
+ SLOT_INTERFACE("525qd", FLOPPY_525_QD) // P30: two Shugart SA465-3AA drives
SLOT_INTERFACE_END
//**************************************************************************
-// MACHINE
+// MACHINE - Alphatronic P1, P2, P2S, P2U and Hell 2069
//**************************************************************************
-void alphatpx_state::machine_start()
+void alphatp_12_state::machine_start()
{
// setup banking
membank("ram_0000")->set_base(m_ram.target());
@@ -585,32 +986,28 @@ void alphatpx_state::machine_start()
m_kbdclk = 0; // must be initialized here b/c mcs48_reset() causes write of 0xff to all ports
}
-void alphatpx_state::machine_reset()
+void alphatp_12_state::machine_reset()
{
m_kbdread = 1;
m_kbdclk = 1; m_fdc_irq = m_fdc_drq = m_fdc_hld = 0;
m_curfloppy = nullptr;
}
-//**************************************************************************
-// MACHINE DEFINITIONS
-//**************************************************************************
-
-MACHINE_CONFIG_START(alphatpx_state::alphatp3)
+MACHINE_CONFIG_START(alphatp_12_state::alphatp2)
MCFG_CPU_ADD("maincpu", I8085A, XTAL(6'000'000))
- MCFG_CPU_PROGRAM_MAP(alphatp3_mem)
- MCFG_CPU_IO_MAP(alphatp3_io)
+ MCFG_CPU_PROGRAM_MAP(alphatp2_mem)
+ MCFG_CPU_IO_MAP(alphatp2_io)
MCFG_QUANTUM_PERFECT_CPU("maincpu")
MCFG_CPU_ADD("kbdmcu", I8041, XTAL(12'854'400)/2)
- MCFG_MCS48_PORT_T0_IN_CB(READLINE(alphatpx_state, kbd_matrix_r))
- MCFG_MCS48_PORT_P1_OUT_CB(WRITE8(alphatpx_state, kbd_matrix_w))
- MCFG_MCS48_PORT_P2_IN_CB(READ8(alphatpx_state, kbd_port2_r))
- MCFG_MCS48_PORT_P2_OUT_CB(WRITE8(alphatpx_state, kbd_port2_w))
+ MCFG_MCS48_PORT_T0_IN_CB(READLINE(alphatp_12_state, kbd_matrix_r))
+ MCFG_MCS48_PORT_P1_OUT_CB(WRITE8(alphatp_12_state, kbd_matrix_w))
+ MCFG_MCS48_PORT_P2_IN_CB(READ8(alphatp_12_state, kbd_port2_r))
+ MCFG_MCS48_PORT_P2_OUT_CB(WRITE8(alphatp_12_state, kbd_port2_w))
MCFG_DEVICE_ADD("bankdev", ADDRESS_MAP_BANK, 0)
- MCFG_DEVICE_PROGRAM_MAP(alphatp3_map)
+ MCFG_DEVICE_PROGRAM_MAP(alphatp2_map)
MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8)
MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(18)
@@ -619,13 +1016,13 @@ MACHINE_CONFIG_START(alphatpx_state::alphatp3)
// video hardware
MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green())
MCFG_SCREEN_RAW_PARAMS(XTAL(12'854'400), 824, 0, 640, 312, 0, 288)
- MCFG_SCREEN_UPDATE_DRIVER(alphatpx_state, screen_update)
+ MCFG_SCREEN_UPDATE_DRIVER(alphatp_12_state, screen_update)
MCFG_PALETTE_ADD_MONOCHROME("palette")
- MCFG_DEVICE_ADD("crtc", CRT5037, XTAL(12'854'400))
+ MCFG_DEVICE_ADD("crtc", CRT5027, XTAL(12'854'400))
MCFG_TMS9927_CHAR_WIDTH(8)
-
+ MCFG_TMS9927_HSYN_CALLBACK(INPUTLINE("maincpu", I8085_RST55_LINE))
MCFG_TMS9927_VSYN_CALLBACK(INPUTLINE("maincpu", I8085_RST65_LINE)) MCFG_DEVCB_XOR(1)
MCFG_VIDEO_SET_SCREEN("screen")
@@ -640,14 +1037,41 @@ MACHINE_CONFIG_START(alphatpx_state::alphatp3)
// XTAL(4'915'200) serial clock
MCFG_FD1791_ADD("fdc", XTAL(4'000'000) / 4)
- MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(alphatpx_state, fdcirq_w))
- MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(alphatpx_state, fdcdrq_w))
- MCFG_WD_FDC_HLD_CALLBACK(WRITELINE(alphatpx_state, fdchld_w))
- MCFG_FLOPPY_DRIVE_ADD("fdc:0", alphatp3_floppies, "525qd", floppy_image_device::default_floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD("fdc:1", alphatp3_floppies, "525qd", floppy_image_device::default_floppy_formats)
+ MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(alphatp_12_state, fdcirq_w))
+ MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(alphatp_12_state, fdcdrq_w))
+ MCFG_WD_FDC_HLD_CALLBACK(WRITELINE(alphatp_12_state, fdchld_w))
+ MCFG_FLOPPY_DRIVE_ADD("fdc:0", alphatp2_floppies, "525ssdd", floppy_image_device::default_floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD("fdc:1", alphatp2_floppies, "525ssdd", floppy_image_device::default_floppy_formats)
+MACHINE_CONFIG_END
+
+MACHINE_CONFIG_DERIVED(alphatp_12_state::alphatp2u, alphatp2)
+ MCFG_DEVICE_REMOVE("fdc:0")
+ MCFG_DEVICE_REMOVE("fdc:1")
+ MCFG_FLOPPY_DRIVE_ADD("fdc:0", alphatp2su_floppies, "525dd", floppy_image_device::default_floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD("fdc:1", alphatp2su_floppies, "525dd", floppy_image_device::default_floppy_formats)
MACHINE_CONFIG_END
-MACHINE_CONFIG_START(alphatpx_state::alphatp2)
+
+//**************************************************************************
+// MACHINE - Alphatronic P3, P4, P30 and P40
+//**************************************************************************
+
+void alphatp_34_state::machine_start()
+{
+ // setup banking
+ membank("ram_0000")->set_base(m_ram.target());
+
+
+ m_kbdclk = 0; // must be initialized here b/c mcs48_reset() causes write of 0xff to all ports
+}
+
+void alphatp_34_state::machine_reset()
+{
+ m_kbdread = 1;
+ m_kbdclk = 1; m_fdc_irq = m_fdc_drq = m_fdc_hld = 0;
+ m_curfloppy = nullptr;
+}
+MACHINE_CONFIG_START(alphatp_34_state::alphatp3)
MCFG_CPU_ADD("maincpu", I8085A, XTAL(6'000'000))
MCFG_CPU_PROGRAM_MAP(alphatp3_mem)
MCFG_CPU_IO_MAP(alphatp3_io)
@@ -655,10 +1079,10 @@ MACHINE_CONFIG_START(alphatpx_state::alphatp2)
MCFG_QUANTUM_PERFECT_CPU("maincpu")
MCFG_CPU_ADD("kbdmcu", I8041, XTAL(12'854'400)/2)
- MCFG_MCS48_PORT_T0_IN_CB(READLINE(alphatpx_state, kbd_matrix_r))
- MCFG_MCS48_PORT_P1_OUT_CB(WRITE8(alphatpx_state, kbd_matrix_w))
- MCFG_MCS48_PORT_P2_IN_CB(READ8(alphatpx_state, kbd_port2_r))
- MCFG_MCS48_PORT_P2_OUT_CB(WRITE8(alphatpx_state, kbd_port2_w))
+ MCFG_MCS48_PORT_T0_IN_CB(READLINE(alphatp_34_state, kbd_matrix_r))
+ MCFG_MCS48_PORT_P1_OUT_CB(WRITE8(alphatp_34_state, kbd_matrix_w))
+ MCFG_MCS48_PORT_P2_IN_CB(READ8(alphatp_34_state, kbd_port2_r))
+ MCFG_MCS48_PORT_P2_OUT_CB(WRITE8(alphatp_34_state, kbd_port2_w))
MCFG_DEVICE_ADD("bankdev", ADDRESS_MAP_BANK, 0)
MCFG_DEVICE_PROGRAM_MAP(alphatp3_map)
@@ -670,13 +1094,13 @@ MACHINE_CONFIG_START(alphatpx_state::alphatp2)
// video hardware
MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green())
MCFG_SCREEN_RAW_PARAMS(XTAL(12'854'400), 824, 0, 640, 312, 0, 288)
- MCFG_SCREEN_UPDATE_DRIVER(alphatpx_state, screen_update)
+ MCFG_SCREEN_UPDATE_DRIVER(alphatp_34_state, screen_update)
MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEVICE_ADD("crtc", CRT5037, XTAL(12'854'400))
MCFG_TMS9927_CHAR_WIDTH(8)
- MCFG_TMS9927_HSYN_CALLBACK(INPUTLINE("maincpu", I8085_RST55_LINE))
+
MCFG_TMS9927_VSYN_CALLBACK(INPUTLINE("maincpu", I8085_RST65_LINE)) MCFG_DEVCB_XOR(1)
MCFG_VIDEO_SET_SCREEN("screen")
@@ -691,31 +1115,39 @@ MACHINE_CONFIG_START(alphatpx_state::alphatp2)
// XTAL(4'915'200) serial clock
MCFG_FD1791_ADD("fdc", XTAL(4'000'000) / 4)
- MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(alphatpx_state, fdcirq_w))
- MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(alphatpx_state, fdcdrq_w))
- MCFG_WD_FDC_HLD_CALLBACK(WRITELINE(alphatpx_state, fdchld_w))
- MCFG_FLOPPY_DRIVE_ADD("fdc:0", alphatp2_floppies, "525ssdd", floppy_image_device::default_floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD("fdc:1", alphatp2_floppies, "525ssdd", floppy_image_device::default_floppy_formats)
+ MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(alphatp_34_state, fdcirq_w))
+ MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(alphatp_34_state, fdcdrq_w))
+ MCFG_WD_FDC_HLD_CALLBACK(WRITELINE(alphatp_34_state, fdchld_w))
+ MCFG_FLOPPY_DRIVE_ADD("fdc:0", alphatp3_floppies, "525qd", floppy_image_device::default_floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD("fdc:1", alphatp3_floppies, "525qd", floppy_image_device::default_floppy_formats)
MACHINE_CONFIG_END
-MACHINE_CONFIG_DERIVED(alphatpx_state::alphatp2u, alphatp2)
- MCFG_DEVICE_REMOVE("fdc:0")
- MCFG_DEVICE_REMOVE("fdc:1")
- MCFG_FLOPPY_DRIVE_ADD("fdc:0", alphatp2su_floppies, "525dd", floppy_image_device::default_floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD("fdc:1", alphatp2su_floppies, "525dd", floppy_image_device::default_floppy_formats)
-MACHINE_CONFIG_END
+
//**************************************************************************
// ROM DEFINITIONS
//**************************************************************************
+// Alphatronic P1
+ROM_START( alphatp1 )
+ ROM_REGION(0x1800, "boot", 0)
+ ROM_LOAD("p1mos1.bin", 0x0000, 0x0800, CRC(9317a694) SHA1(3b51a6b72d2ccae2459ddb2e16fbd21b19dfa2b8) )
+ ROM_LOAD("p1mos2.bin", 0x0800, 0x0800, CRC(f38113a3) SHA1(078405ad202e26b7bac7132b06682fb01270af63) )
+ ROM_LOAD("p1mos3.bin", 0x1000, 0x0800, CRC(fb5ae050) SHA1(ba55553764326dfda3fbd35237761c3fb6fde18a) )
+
+ ROM_REGION(0x400, "kbdmcu", 0)
+ ROM_LOAD("p2_keyboard_ip8041a_8278.bin", 0x000, 0x400, CRC(5db00d85) SHA1(0dc8e274a5aece261ef60494901601c0d8b1eb51)) // P1 keyboard driver is contained in a MF-1702AR on the keyboard
+ // needs to be dumped
+ ROM_REGION(0x800, "gfx", 0)
+ ROM_LOAD("p1chargen.bin", 0x000, 0x800, CRC(51ea8a7e) SHA1(c514df7ab3761490af4a16c9106d08540f0d7352))
+ROM_END
+
// Alphatronic P2
ROM_START( alphatp2 ) // P2 ROM space 0x1800
ROM_REGION(0x1800, "boot", 0)
ROM_SYSTEM_BIOS(0, "caap94-96", "caap94-96")
ROM_SYSTEM_BIOS(1, "caap04-06", "caap04-06")
ROM_SYSTEM_BIOS(2, "p2_es", "p2_es")
- ROM_SYSTEM_BIOS(3, "p2_sks", "p2_sks")
ROMX_LOAD("caap_96_00_5a.bin", 0x0000, 0x0800, CRC(cb137796) SHA1(876bd0762faffc7b74093922d8fbf1c72ec70060), ROM_BIOS(1) ) // earlier P2, three 16K RAM boards
ROMX_LOAD("caap_05_02_12.bin", 0x0800, 0x0800, CRC(14f19693) SHA1(7ecb66818a3e352fede1857a18cd12bf742603a9), ROM_BIOS(1) )
@@ -729,10 +1161,6 @@ ROM_START( alphatp2 ) // P2 ROM space 0x1800
ROMX_LOAD("caap_p2_es_2.bin", 0x0800, 0x0800, CRC(f4dfac82) SHA1(266d1fdaef875515d9c68ae3e67ec88831bb55cb), ROM_BIOS(3) )
ROMX_LOAD("caap_p2_es_3.bin", 0x1000, 0x0800, CRC(6f6918ba) SHA1(8dc9f5e337df8abf42e5b55f5f1a1a9d61c42d78), ROM_BIOS(3) )
- ROMX_LOAD("mos3-p2_sks_1.bin", 0x0000, 0x0800, CRC(c98d2982) SHA1(11e98ae441b7a9c8dfd22795f8208667959f1d1c), ROM_BIOS(4) ) // P2 sks
- ROMX_LOAD("mos3-p2_sks_2.bin", 0x0800, 0x0800, CRC(14f19693) SHA1(7ecb66818a3e352fede1857a18cd12bf742603a9), ROM_BIOS(4) )
- ROMX_LOAD("mos3-p2_sks_3.bin", 0x1000, 0x0800, CRC(f304c3aa) SHA1(92213e77e4e6de12a4eaee25a9c1ec0ab54e93d4), ROM_BIOS(4) )
-
ROM_REGION(0x400, "kbdmcu", 0) // same across all dumped P2 and P3 machines so far
ROM_LOAD("p2_keyboard_ip8041a_8278.bin", 0x000, 0x400, CRC(5db00d85) SHA1(0dc8e274a5aece261ef60494901601c0d8b1eb51)) // needs to be checked with P2 sks and Spain
@@ -744,11 +1172,11 @@ ROM_START( alphatp2 ) // P2 ROM space 0x1800
ROM_END
// Alphatronic P2U
-ROM_START (alphatp2u)
+ROM_START( alphatp2u )
ROM_REGION(0x1800, "boot", 0)
- ROM_LOAD("prom2p00.bin", 0x0000, 0x0800, CRC(c98d2982) SHA1(11e98ae441b7a9c8dfd22795f8208667959f1d1c) )
- ROM_LOAD("prom2p01.bin", 0x0800, 0x0800, CRC(14f19693) SHA1(7ecb66818a3e352fede1857a18cd12bf742603a9) )
- ROM_LOAD("prom2p02.bin", 0x1000, 0x0800, CRC(f304c3aa) SHA1(92213e77e4e6de12a4eaee25a9c1ec0ab54e93d4) )
+ ROM_LOAD("mos3-p2_sks_1", 0x0000, 0x0800, CRC(c98d2982) SHA1(11e98ae441b7a9c8dfd22795f8208667959f1d1c) )
+ ROM_LOAD("mos3-p2_sks_2", 0x0800, 0x0800, CRC(14f19693) SHA1(7ecb66818a3e352fede1857a18cd12bf742603a9) )
+ ROM_LOAD("mos3-p2_sks_3", 0x1000, 0x0800, CRC(f304c3aa) SHA1(92213e77e4e6de12a4eaee25a9c1ec0ab54e93d4) )
ROM_REGION(0x400, "kbdmcu", 0) // same across all dumped P2 and P3 machines so far
ROM_LOAD("p2_keyboard_ip8041a_8278.bin", 0x000, 0x400, CRC(5db00d85) SHA1(0dc8e274a5aece261ef60494901601c0d8b1eb51)) // needs to be checked for P2U
@@ -794,7 +1222,8 @@ ROM_END
//**************************************************************************
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 198?, alphatp2, alphatp3, 0, alphatp2, alphatp3, alphatpx_state, 0, "Triumph-Adler", "alphatronic P2", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
-COMP( 198?, alphatp2u, alphatp3, 0, alphatp2u,alphatp3, alphatpx_state, 0, "Triumph-Adler", "alphatronic P2U", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
-COMP( 1982, alphatp3, 0, 0, alphatp3, alphatp3, alphatpx_state, 0, "Triumph-Adler", "alphatronic P3", MACHINE_NOT_WORKING )
-COMP( 198?, alphatp30, alphatp3, 0, alphatp3, alphatp3, alphatpx_state, 0, "Triumph-Adler", "alphatronic P30",MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+COMP( 198?, alphatp1, alphatp2, 0, alphatp2, alphatp2, alphatp_12_state, 0, "Triumph-Adler", "alphatronic P1", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+COMP( 198?, alphatp2, 0, 0, alphatp2, alphatp2, alphatp_12_state, 0, "Triumph-Adler", "alphatronic P2", MACHINE_NOT_WORKING )
+COMP( 198?, alphatp2u, alphatp2, 0, alphatp2u,alphatp3, alphatp_12_state, 0, "Triumph-Adler", "alphatronic P2U", MACHINE_NOT_WORKING )
+COMP( 1982, alphatp3, 0, 0, alphatp3, alphatp3, alphatp_34_state, 0, "Triumph-Adler", "alphatronic P3", MACHINE_NOT_WORKING )
+COMP( 198?, alphatp30, alphatp3, 0, alphatp3, alphatp3, alphatp_34_state, 0, "Triumph-Adler", "alphatronic P30",MACHINE_NOT_WORKING )