Mybrain 3000,JB-3000,Ericsson PC step/one feature complete (#3042)

* Started graphics refactoring

* myb3k.cpp: refactored graphics circuit and added color in 320x200 mode

* myb3k.cpp: fixed speed issue by reducing CPU clock by 50% as suggested by RAM waitstates in the schematics where the CRTC uses the other 50%

* myb3k: fixed text scrolling

* myb3k: -ramsize now supported with 128K option and 256K default

* myb3k: 80 character mode added, eg 640x200

* Emulate the INT7 pull down and up for the keyboard. Initial support for JB3000 keyboard.

* myb3k: Added hi-res 640x400 mode and crude cursor support for 40 character mode

* Keyboard improvements using BACKSLASH2 keycode.

* myb3k_fdc.cpp: addressed review comment

* myb3k.cpp: Added initial monochrome monitor support

* myb3k.cpp: Adjusted the monochrome color palette to match the 525Nm of P39 phoshor in the Ericsson DU4721 monochrome monitor

* myb3k.cpp: added printer support and completed interupt support including jumper settings

* myb3k.cpp: Added softlist for Ericsson step/one

* myb3k.cpp: cleanup and srcclean:ed

* myb3k.cpp: Fixed crude support for 36x25 color text mode

* Fixed build

* myb3k_fdc.cpp: fixed review comment

* mybr3k: fixed DOS 2.11 boot in 256KB mode

* myb3k.cpp: Added graphics mode 0 which have the peculiar characteristic of different resolutions depending on the monitor used (2 connectors)

* myb3k: Separated keyboards into separate device implementations.

* myb3k: addressed review comments
This commit is contained in:
Joakim Larsson Edström 2018-01-18 08:33:07 +01:00 committed by Vas Crabb
parent 12f9d143f4
commit d853daeae3
6 changed files with 881 additions and 228 deletions

100
hash/stepone_flop.xml Normal file
View File

@ -0,0 +1,100 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<softwarelist name="stepone_flop" description="Ericsson PC step/one diskettes">
<!-- OS -->
<!-- https://www.youtube.com/watch?v=0EzeMt2F-kU -->
<software name="dos125">
<description>MS-DOS v1.25</description>
<year>1982</year>
<publisher>Microsoft</publisher>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="10734">
<rom name="BASIC.IMD" size="167674" crc="6789a422" sha1="2db2140562f1e033719dd68befd27ef34e6ef539" offset="0" />
</dataarea>
</part>
</software>
<!-- Apps -->
<software name="combi">
<description></description>
<year>1983</year>
<publisher>OMS - Office Management Systems AB</publisher>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="526850">
<rom name="CMBSTBM.IMD" size="526850" crc="9a93f2e4" sha1="2b4b6cbce1534a67ba4eca275ef018637261c3ed" offset="0" />
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
<dataarea name="flop" size="282664">
<rom name="CMBSTPE1.IMD" size="282664" crc="8a71d87f" sha1="b442573aed547fb7748c60d055405e2e92995fd8" offset="0" />
</dataarea>
</part>
<part name="flop3" interface="floppy_5_25">
<dataarea name="flop" size="316889">
<rom name="CMBSTPE2.IMD" size="316889" crc="c839115b" sha1="d8054d3e7d3516a7cdee33b02c0ae79ae0279caf" offset="0" />
</dataarea>
</part>
<part name="flop4" interface="floppy_5_25">
<dataarea name="flop" size="527874">
<rom name="CMBSTPO1.IMD" size="527874" crc="80eb83d0" sha1="b81bfa66ae477afd087b8d54c21fe98c778e032f" offset="0" />
</dataarea>
</part>
<part name="flop5" interface="floppy_5_25">
<dataarea name="flop" size="683218">
<rom name="CMBSTPO2.IMD" size="683218" crc="5357135d" sha1="cce5e51be38180003b926704d79990021e918bd0" offset="0" />
</dataarea>
</part>
</software>
<software name="multip14">
<description>Microsoft Multiplan v1.04</description>
<year>1982</year>
<publisher>Microsoft</publisher>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="118615">
<rom name="MULTIPL.IMD" size="118615" crc="756368a3" sha1="9bbd27d5ac37ac2ef40f68a21a4a9cd93c1c5648" offset="0" />
</dataarea>
</part>
</software>
<software name="pasc311">
<description>Microsoft Pascal v3.11</description>
<year>1983</year>
<publisher>Ericsson/Microsoft</publisher>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="705796">
<rom name="PASCAL1.IMD" size="705796" crc="c4fb00a0" sha1="8b3a6e40b7d198aef6ec04eeff8c634c137d9cc5" offset="0" />
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
<dataarea name="flop" size="596955">
<rom name="PASCAL2.IMD" size="596955" crc="1091c2f4" sha1="b54569167d1263632535244d1b4aff811c2f4c91" offset="0" />
</dataarea>
</part>
</software>
<software name="rjev10m">
<description>RJE - IBM 3780 Remote Batch Terminal Emulator v1.0M</description>
<year>1982</year>
<publisher>InterCom Inc/Matsushita</publisher>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="36358">
<rom name="RJE3780.IMD" size="36358" crc="22365c54" sha1="3e4c30701eb36809b08eefbec5c808aa1d758795" offset="0" />
</dataarea>
</part>
</software>
<software name="wstar324">
<description>Wordstar v3.24</description>
<year>1982</year>
<publisher>MicroPro International Corporation</publisher>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="103798">
<rom name="WORDSTAR.IMD" size="103798" crc="a9b57ef8" sha1="8253ec46818b0855d8bab860d6afd2ddfc0996a4" offset="0" />
</dataarea>
</part>
</software>
</softwarelist>

View File

@ -289,12 +289,6 @@ WRITE8_MEMBER( isa8_myb3k_fdc4711_device::myb3k_inv_fdc_data_w )
//-------------------------------------------------
// myb3k_fdc_command - descrete fdc card features
//-------------------------------------------------
#define FDC_MSM_MODE 0x40
#define FDC_DDEN 0x20
//#define FDC_MOTOR_ON 0x10 // According to service manual but not schematics and BIOS
#define FDC_SIDE_SEL 0x08
#define FDC_MOTOR_ON 0x04 // According to schematics but "Motor Cont" according to service manual
#define FDC_DRIVE_SEL 0x03
WRITE8_MEMBER( isa8_myb3k_fdc4710_device::myb3k_fdc_command )
{
data = ~data;

View File

@ -14,9 +14,23 @@
#include "machine/wd_fdc.h"
#include "formats/imd_dsk.h"
class isa8_myb3k_fdc471x_base
{
protected:
enum {
FDC_MSM_MODE = 0x40,
FDC_DDEN = 0x20,
//FDC_MOTOR_ON = 0x10, // According to service manual but not schematics and BIOS
FDC_SIDE_SEL = 0x08,
FDC_MOTOR_ON = 0x04, // According to schematics but "Motor Cont" according to service manual
FDC_DRIVE_SEL = 0x03,
};
};
class isa8_myb3k_fdc4710_device :
public device_t,
public device_isa8_card_interface
public device_isa8_card_interface,
public isa8_myb3k_fdc471x_base
{
public:
// construction/destruction
@ -53,7 +67,8 @@ private:
class isa8_myb3k_fdc4711_device :
public device_t,
public device_isa8_card_interface
public device_isa8_card_interface,
public isa8_myb3k_fdc471x_base
{
public:
// construction/destruction

View File

@ -136,20 +136,37 @@
#define LOGMOD(...) LOGMASKED(LOG_MOD, __VA_ARGS__)
#define LOGBYTES(...) LOGMASKED(LOG_BYTES, __VA_ARGS__)
DEFINE_DEVICE_TYPE(MYB3K_KEYBOARD, myb3k_keyboard_device, "myb3k_keyboard", "MyBrain3000 Keyboard")
DEFINE_DEVICE_TYPE(STEPONE_KEYBOARD, stepone_keyboard_device, "stepone_keyboard", "Step/One Keyboard")
DEFINE_DEVICE_TYPE(JB3000_KEYBOARD, jb3000_keyboard_device, "jb3000_keyboard", "JB3000 Keyboard")
// When running with the MyBrain3000 rom, then pressing GRAPH+SHIFT+key generates Japanese katakana.
// (The GRAPH key on the MyBrain3000 and the Step/One keyboard (ALT/GRAPH on the JB3000 keyboard) maps to LALT.
// For example graph+shift+w generates ヨ on the emulated MyBrain3000 screen.
// If a Japanese Kana keyboard layout is selected in the host computer, then the natural keyboard in mame
// does map the same katakana (unicode 0x30e8) to the proper graph+shift+key combination for the MyBrain3000.
//
// Pressing just GRAPH+key generates underscore followed by a different katakana. We do not yet understand what the
// purpose is of this combo, so it is currently ignored in the natural keyboard. The below macro is used a lot.
#define PORT_CHAR_IGNORE PORT_CHAR(UCHAR_MAMEKEY(INVALID))
// The rightmost commented number in the list below, eg // 58 for Left Shift is the numbering used in the manual
// for reference in the keyboard layout images.
INPUT_PORTS_START( myb3k_keyboard )
// The mappings below are almost fully complete for the Step/One, but a lot more work is needed for myb3k and jb3000.
INPUT_PORTS_START( myb3k_common_ports )
PORT_START("MYB3K_T0")
PORT_BIT( 0x0001U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LCONTROL) PORT_NAME("Control") PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) // 44
PORT_BIT( 0x0002U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT) PORT_NAME("Left Shift") PORT_CHAR(UCHAR_SHIFT_1) // 58
PORT_BIT( 0x0004U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CAPSLOCK) PORT_NAME("Caps lock") PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) // 71
PORT_BIT( 0x0008U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LALT) PORT_NAME("Graph") PORT_CHAR(UCHAR_MAMEKEY(LALT)) // 72
// Bit 0x0010U not used in keyboard.
PORT_BIT( 0x0008U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LALT) PORT_NAME("Graph") PORT_CHAR(UCHAR_SHIFT_2) // 72
PORT_BIT( 0x0010U, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x0020U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("Right Shift") PORT_CHAR(UCHAR_SHIFT_1) // 70
PORT_BIT( 0x0040U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("KP 0") // 94
// PORT_BIT( 0x0080U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_NAME("KP .") // 95
// PORT_BIT( 0x0080U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_NAME("KP .") // 95
PORT_START("MYB3K_T1")
PORT_BIT( 0x0001U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F1) PORT_NAME("PF1") PORT_CHAR(UCHAR_MAMEKEY(F1)) // 1
@ -195,11 +212,11 @@ INPUT_PORTS_START( myb3k_keyboard )
PORT_BIT( 0x0001U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_NAME("0 =") PORT_CHAR('0') PORT_CHAR('=') // 25
PORT_BIT( 0x0002U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("+ ?") PORT_CHAR('+') PORT_CHAR('?') // 26
PORT_BIT( 0x0004U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("é É") PORT_CHAR(0x00E9) PORT_CHAR(0x00C9) // 27
PORT_BIT( 0x0008U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_NAME("< >") PORT_CHAR('<') PORT_CHAR('>') // 28
PORT_BIT( 0x0010U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("Backspace") PORT_CHAR(8)// 29
PORT_BIT( 0x0020U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TAB) PORT_NAME("Tab") PORT_CHAR(9)// 30
PORT_BIT( 0x0008U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH2) PORT_NAME("< >") PORT_CHAR('<') PORT_CHAR('>') // 28
PORT_BIT( 0x0010U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("Backspace") PORT_CHAR(8) // 29
PORT_BIT( 0x0020U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TAB) PORT_NAME("Tab") PORT_CHAR(9) // 30
PORT_BIT( 0x0040U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_NAME("q Q") PORT_CHAR('q') PORT_CHAR('Q') // 31
PORT_BIT( 0x0080U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_NAME("w W") PORT_CHAR('w') PORT_CHAR('W') // 32
PORT_BIT( 0x0080U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_NAME("w W") PORT_CHAR('w') PORT_CHAR('W') // 32
PORT_START("MYB3K_T6")
PORT_BIT( 0x0001U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_NAME("e E") PORT_CHAR('e') PORT_CHAR('E') // 33
@ -228,7 +245,7 @@ INPUT_PORTS_START( myb3k_keyboard )
PORT_BIT( 0x0008U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_NAME("l L") PORT_CHAR('l') PORT_CHAR('L') // 53
PORT_BIT( 0x0010U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_NAME("ö Ö") PORT_CHAR(0x00F6) PORT_CHAR(0x00D6) // 54
PORT_BIT( 0x0020U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_NAME("ä Ä") PORT_CHAR(0x00E4) PORT_CHAR(0x00C4) // 55
// PORT_BIT( 0x0040U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_) PORT_NAME("' *") PORT_CHAR('\'') PORT_CHAR('*') // 56
PORT_BIT( 0x0040U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_NAME("' *") PORT_CHAR('\'') PORT_CHAR('*') // 56
PORT_BIT( 0x0080U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_NAME("z Z") PORT_CHAR('z') PORT_CHAR('Z') // 59
PORT_START("MYB3K_T9")
@ -254,7 +271,7 @@ INPUT_PORTS_START( myb3k_keyboard )
PORT_START("MYB3K_TB")
PORT_BIT( 0x0001U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("KP 5") // 87
PORT_BIT( 0x0002U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("KP 6") // 88
// PORT_BIT( 0x0004U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA_PAD) PORT_NAME("KP ,") // 89
// PORT_BIT( 0x0004U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA_PAD) PORT_NAME("KP ,") // 89
PORT_BIT( 0x0008U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("KP 1") // 90
PORT_BIT( 0x0010U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("KP 2") // 91
PORT_BIT( 0x0020U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("KP 3") // 92
@ -263,7 +280,39 @@ INPUT_PORTS_START( myb3k_keyboard )
INPUT_PORTS_END
DEFINE_DEVICE_TYPE(MYB3K_KEYBOARD, myb3k_keyboard_device, "myb3k_keyboard", "MyBrain3000 Keyboard")
INPUT_PORTS_START( myb3k_keyboard )
PORT_INCLUDE( myb3k_common_ports )
PORT_MODIFY("MYB3K_T2")
PORT_BIT( 0x0008U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F12) PORT_NAME("Kanji") PORT_CHAR(UCHAR_MAMEKEY(F12)) // 12
PORT_MODIFY("MYB3K_T3")
PORT_BIT( 0x0080U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_NAME("1 !") PORT_CHAR('1') PORT_CHAR('!') PORT_CHAR_IGNORE PORT_CHAR(0x30AA) // 16 オ
PORT_MODIFY("MYB3K_T4")
PORT_BIT( 0x0002U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_NAME("3 #") PORT_CHAR('3') PORT_CHAR('#') PORT_CHAR_IGNORE PORT_CHAR(0x30E7) // 18 ョ
PORT_MODIFY("MYB3K_T5")
PORT_BIT( 0x0080U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_NAME("w W") PORT_CHAR('w') PORT_CHAR('W') PORT_CHAR_IGNORE PORT_CHAR(0x30E8) // 32 ヨ
INPUT_PORTS_END
INPUT_PORTS_START( stepone_keyboard )
PORT_INCLUDE( myb3k_common_ports )
INPUT_PORTS_END
INPUT_PORTS_START( jb3000_keyboard )
PORT_INCLUDE(myb3k_common_ports)
PORT_MODIFY("MYB3K_T5")
PORT_BIT( 0x0008U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH2) PORT_NAME("\\ |") PORT_CHAR('\\') PORT_CHAR('|') // 28
PORT_MODIFY("MYB3K_T9")
PORT_BIT( 0x0040U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_NAME(", <") PORT_CHAR(',') PORT_CHAR('<') // 66
PORT_BIT( 0x0080U, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_NAME(". >") PORT_CHAR('.') PORT_CHAR('>') // 67
INPUT_PORTS_END
#define MYB3K_KEY_CTRL 0x02U
#define MYB3K_KEY_GRAPH 0x04U
@ -369,8 +418,8 @@ void myb3k_keyboard_device::scan_keys()
if (m_y > 7) {
m_y = 0;
// Done scanning the matrix. Now sleep for a while,
// then start scanning again. Scan ~20 times per second.
timer_set(attotime::from_msec(50), TIMER_ID_SCAN_KEYS);
// then start scanning again. Scan ~50 times per second.
timer_set(attotime::from_msec(20), TIMER_ID_SCAN_KEYS);
wait_for_timer = true;
// (The final switch x=11 y=7 is not electrically connected.
// Thus if we get here, then there can be no key changed
@ -432,3 +481,29 @@ void myb3k_keyboard_device::device_timer(emu_timer &timer, device_timer_id id, i
break;
}
}
stepone_keyboard_device::stepone_keyboard_device(
const machine_config &mconfig,
char const *tag,
device_t *owner,
u32 clock) : myb3k_keyboard_device(mconfig, STEPONE_KEYBOARD, tag, owner, clock)
{
}
ioport_constructor stepone_keyboard_device::device_input_ports() const
{
return INPUT_PORTS_NAME(stepone_keyboard);
}
jb3000_keyboard_device::jb3000_keyboard_device(
const machine_config &mconfig,
char const *tag,
device_t *owner,
u32 clock) : myb3k_keyboard_device(mconfig, JB3000_KEYBOARD, tag, owner, clock)
{
}
ioport_constructor jb3000_keyboard_device::device_input_ports() const
{
return INPUT_PORTS_NAME(jb3000_keyboard);
}

View File

@ -30,8 +30,8 @@
#define MCFG_MYB3K_KEYBOARD_CB(cb) myb3k_keyboard_device::set_keyboard_callback(*device, (MYB3K_KBD_CB_##cb));
DECLARE_DEVICE_TYPE(MYB3K_KEYBOARD, myb3k_keyboard_device)
INPUT_PORTS_EXTERN( myb3k_keyboard );
DECLARE_DEVICE_TYPE(JB3000_KEYBOARD, jb3000_keyboard_device)
DECLARE_DEVICE_TYPE(STEPONE_KEYBOARD, stepone_keyboard_device)
class myb3k_keyboard_device : public device_t
{
@ -55,8 +55,6 @@ public:
downcast<myb3k_keyboard_device &>(device).m_keyboard_cb = std::forward<Object>(cb);
}
virtual ioport_constructor device_input_ports() const override;
protected:
myb3k_keyboard_device(
const machine_config &mconfig,
@ -64,6 +62,7 @@ protected:
char const *tag,
device_t *owner,
u32 clock);
virtual ioport_constructor device_input_ports() const override;
virtual void device_start() override;
virtual void device_reset() override;
virtual void send_byte(u8 code);
@ -72,8 +71,6 @@ protected:
void update_modifiers(int y, bool down);
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
private:
output_delegate m_keyboard_cb;
required_ioport_array<12> m_io_kbd_t;
u8 m_io_kbd_state[12][8];
@ -84,4 +81,28 @@ private:
u8 m_modifier_keys;
};
class jb3000_keyboard_device : public myb3k_keyboard_device
{
public:
jb3000_keyboard_device(
const machine_config &mconfig,
char const *tag,
device_t *owner,
u32 clock);
private:
virtual ioport_constructor device_input_ports() const override;
};
class stepone_keyboard_device : public myb3k_keyboard_device
{
public:
stepone_keyboard_device(
const machine_config &mconfig,
char const *tag,
device_t *owner,
u32 clock);
private:
virtual ioport_constructor device_input_ports() const override;
};
#endif // MAME_MACHINE_MYB3K_KBD_H

File diff suppressed because it is too large Load Diff