mirror of
https://github.com/holub/mame
synced 2025-10-04 16:34:53 +03:00
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:
parent
12f9d143f4
commit
d853daeae3
100
hash/stepone_flop.xml
Normal file
100
hash/stepone_flop.xml
Normal 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>
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
Loading…
Reference in New Issue
Block a user