diff options
Diffstat (limited to 'src/mess/drivers/mbee.c')
-rw-r--r-- | src/mess/drivers/mbee.c | 98 |
1 files changed, 51 insertions, 47 deletions
diff --git a/src/mess/drivers/mbee.c b/src/mess/drivers/mbee.c index 3914aa7bda6..2c9a95927d8 100644 --- a/src/mess/drivers/mbee.c +++ b/src/mess/drivers/mbee.c @@ -5,17 +5,15 @@ system driver Juergen Buchmueller, Jan 2000 + Robbbert 2008-2015 - Brett Selwood, Andrew Davies (technical assistance) + Assistance from: + Brett Selwood, Andrew Davies; E.J.Wordsworth (owner of Microbee Systems), + nama, ChickenMan, and the author of the "ubee512" emulator. - Various additions by Robbbert. + Keyboard notes are in video/microbee.c - Thanks to the author of the "ubee512" emulator for his help. - - TeleTerm roms dumped by ejwords. The correct slots found by ubee512 author. - Swedish roms dumped by nama. The correct slots found by ubee512 author. - - Please note: the rom version 1.31 which appears to fit the 256TC is actually + 256tc: The 1.31 rom version which appears to fit the 256TC is actually part of the Z80 emulation in the Matilda model. If you fit this rom into a real 256TC, the floppy disk will not be detected. @@ -24,7 +22,7 @@ Floppy formats: - All disks are the standard CPCEMU 'dsk' format. - - Types are 9cm 80 track, and 13cm 40 track (single or double sided) + - Types are 9/13cm 40/80 track (single or double sided) - 13cm has been specified as QD to prevent a nasty crash if an 80-track disk was mounted - The tracks/sector layout is the same regardless of size - Although certain models came with particular drives as standard, users could add @@ -77,17 +75,6 @@ intrq and drq are OR'd together, then gated to bit 7 of the data bus whenever port 48 is activated on read. There are no interrupts used. - Tests of old keyboard. Start mbeeic. - 1. Load ASTEROIDS PLUS, stay in attract mode, hold down spacebar, - it should only fire bullets. If it sometimes starts turning, - thrusting or using the shield, then there is a problem. - - 2. Load SCAVENGER and make sure it doesn't go to the next level - until you find the Exit. - - 3. At the Basic prompt, type in EDASM press enter. At the memory size - prompt press enter. Now, make sure the keyboard works properly. - How to use the config switch for PIO B7: - Teleterm: Must use RTC. Anything else makes teleterm go crazy. - 256TC, 128, 128p: Doesn't seem to matter, leave at the default. @@ -95,25 +82,20 @@ - Other rom-based models: "VS" to make the Telcom clock work, or "Tied high". - 56k: not sure yet, leave as "Tied high" until more is known. - How to use programs that need functions keys on models that use the old - keyboard (for example, to run Simply Write on a 128k model). - Press Ctrl+Shift+number, eg for F1 press hold down Ctrl Shift, press 1. - *************************************************************************** TODO/not working: - 256tc: Paste ignores shift key - - All others: Paste drops most characters, shift operates randomly. + - All others: Paste drops most characters. - various fdc issues: - B drive doesn't work with most disks. - some disks cause MESS to freeze. - ENMF pin missing from wd_fdc. - incorrect timing for track register causes 256tc failure to boot a disk. - - 56k model takes 120 seconds to boot a disk if loaded via command line. - - mbeeppc, mbee128p: In Basic, keyboard loses characters. Works fine in Wordbee. + - Simply Write has keyboard problems (in 128k, no keys work). - 256tc: At the menu, if F2 pressed to activate the Monitor, the emulated machine crashes due to a bug in z80pio emulation. @@ -222,8 +204,8 @@ static ADDRESS_MAP_START(mbee_io, AS_IO, 8, mbee_state) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x00, 0x03) AM_MIRROR(0x10) AM_DEVREADWRITE("z80pio", z80pio_device, read_alt, write_alt) AM_RANGE(0x0b, 0x0b) AM_MIRROR(0x10) AM_WRITE(port0b_w) - AM_RANGE(0x0c, 0x0c) AM_MIRROR(0x10) AM_READWRITE(m6545_status_r, m6545_index_w) - AM_RANGE(0x0d, 0x0d) AM_MIRROR(0x10) AM_READWRITE(m6545_data_r, m6545_data_w) + AM_RANGE(0x0c, 0x0c) AM_MIRROR(0x10) AM_DEVREAD("crtc", mc6845_device, status_r) AM_WRITE(m6545_index_w) + AM_RANGE(0x0d, 0x0d) AM_MIRROR(0x10) AM_DEVREAD("crtc", mc6845_device, register_r) AM_WRITE(m6545_data_w) ADDRESS_MAP_END static ADDRESS_MAP_START(mbeeic_io, AS_IO, 8, mbee_state) @@ -234,8 +216,8 @@ static ADDRESS_MAP_START(mbeeic_io, AS_IO, 8, mbee_state) AM_RANGE(0x09, 0x09) AM_WRITENOP /* Listed as "Colour Wait Off" or "USART 2651" but doesn't appear in the schematics */ AM_RANGE(0x0a, 0x0a) AM_MIRROR(0x10) AM_WRITE(port0a_w) AM_RANGE(0x0b, 0x0b) AM_MIRROR(0x10) AM_WRITE(port0b_w) - AM_RANGE(0x0c, 0x0c) AM_MIRROR(0x10) AM_READWRITE(m6545_status_r, m6545_index_w) - AM_RANGE(0x0d, 0x0d) AM_MIRROR(0x10) AM_READWRITE(m6545_data_r, m6545_data_w) + AM_RANGE(0x0c, 0x0c) AM_MIRROR(0x10) AM_DEVREAD("crtc", mc6845_device, status_r) AM_WRITE(m6545_index_w) + AM_RANGE(0x0d, 0x0d) AM_MIRROR(0x10) AM_DEVREAD("crtc", mc6845_device, register_r) AM_WRITE(m6545_data_w) ADDRESS_MAP_END static ADDRESS_MAP_START(mbeepc_io, AS_IO, 8, mbee_state) @@ -244,8 +226,8 @@ static ADDRESS_MAP_START(mbeepc_io, AS_IO, 8, mbee_state) AM_RANGE(0x0008, 0x0008) AM_MIRROR(0xff10) AM_READWRITE(port08_r, port08_w) AM_RANGE(0x0009, 0x0009) AM_MIRROR(0xff00) AM_WRITENOP AM_RANGE(0x000b, 0x000b) AM_MIRROR(0xff10) AM_WRITE(port0b_w) - AM_RANGE(0x000c, 0x000c) AM_MIRROR(0xff10) AM_READWRITE(m6545_status_r, m6545_index_w) - AM_RANGE(0x000d, 0x000d) AM_MIRROR(0xff10) AM_READWRITE(m6545_data_r, m6545_data_w) + AM_RANGE(0x000c, 0x000c) AM_MIRROR(0xff10) AM_DEVREAD("crtc", mc6845_device, status_r) AM_WRITE(m6545_index_w) + AM_RANGE(0x000d, 0x000d) AM_MIRROR(0xff10) AM_DEVREAD("crtc", mc6845_device, register_r) AM_WRITE(m6545_data_w) AM_RANGE(0x000a, 0x000a) AM_MIRROR(0xfe10) AM_READWRITE(telcom_low_r, port0a_w) AM_RANGE(0x010a, 0x010a) AM_MIRROR(0xfe10) AM_READWRITE(telcom_high_r, port0a_w) ADDRESS_MAP_END @@ -256,8 +238,8 @@ static ADDRESS_MAP_START(mbeeppc_io, AS_IO, 8, mbee_state) AM_RANGE(0x0008, 0x0008) AM_MIRROR(0xff10) AM_READWRITE(port08_r, port08_w) AM_RANGE(0x0009, 0x0009) AM_MIRROR(0xff00) AM_WRITENOP AM_RANGE(0x000b, 0x000b) AM_MIRROR(0xff10) AM_WRITE(port0b_w) - AM_RANGE(0x000c, 0x000c) AM_MIRROR(0xff00) AM_READWRITE(m6545_status_r, m6545_index_w) - AM_RANGE(0x000d, 0x000d) AM_MIRROR(0xff10) AM_READWRITE(m6545_data_r, m6545_data_w) + AM_RANGE(0x000c, 0x000c) AM_MIRROR(0xff00) AM_DEVREAD("crtc", mc6845_device, status_r) AM_WRITE(m6545_index_w) + AM_RANGE(0x000d, 0x000d) AM_MIRROR(0xff10) AM_DEVREAD("crtc", mc6845_device, register_r) AM_WRITE(m6545_data_w) AM_RANGE(0x001c, 0x001c) AM_MIRROR(0xff00) AM_READWRITE(port1c_r, port1c_w) AM_RANGE(0x000a, 0x000a) AM_MIRROR(0xfe10) AM_READWRITE(telcom_low_r, port0a_w) AM_RANGE(0x010a, 0x010a) AM_MIRROR(0xfe10) AM_READWRITE(telcom_high_r, port0a_w) @@ -271,8 +253,8 @@ static ADDRESS_MAP_START(mbeett_io, AS_IO, 8, mbee_state) AM_RANGE(0x0007, 0x0007) AM_MIRROR(0xff00) AM_READ(port07_r) AM_RANGE(0x0008, 0x0008) AM_MIRROR(0xff00) AM_READWRITE(port08_r, port08_w) AM_RANGE(0x000b, 0x000b) AM_MIRROR(0xff00) AM_WRITE(port0b_w) - AM_RANGE(0x000c, 0x000c) AM_MIRROR(0xff00) AM_READWRITE(m6545_status_r, m6545_index_w) - AM_RANGE(0x000d, 0x000d) AM_MIRROR(0xff00) AM_READWRITE(m6545_data_r, m6545_data_w) + AM_RANGE(0x000c, 0x000c) AM_MIRROR(0xff00) AM_DEVREAD("crtc", mc6845_device, status_r) AM_WRITE(m6545_index_w) + AM_RANGE(0x000d, 0x000d) AM_MIRROR(0xff00) AM_DEVREAD("crtc", mc6845_device, register_r) AM_WRITE(m6545_data_w) AM_RANGE(0x0018, 0x001b) AM_MIRROR(0xff00) AM_READ(port18_r) AM_RANGE(0x001c, 0x001f) AM_MIRROR(0xff00) AM_READWRITE(port1c_r, port1c_w) AM_RANGE(0x0009, 0x0009) AM_MIRROR(0xfe00) AM_READ(speed_low_r) @@ -289,8 +271,8 @@ static ADDRESS_MAP_START(mbee56_io, AS_IO, 8, mbee_state) AM_RANGE(0x08, 0x08) AM_READWRITE(port08_r, port08_w) AM_RANGE(0x09, 0x09) AM_WRITENOP AM_RANGE(0x0b, 0x0b) AM_WRITE(port0b_w) - AM_RANGE(0x0c, 0x0c) AM_READWRITE(m6545_status_r, m6545_index_w) - AM_RANGE(0x0d, 0x0d) AM_READWRITE(m6545_data_r, m6545_data_w) + AM_RANGE(0x0c, 0x0c) AM_DEVREAD("crtc", mc6845_device, status_r) AM_WRITE(m6545_index_w) + AM_RANGE(0x0d, 0x0d) AM_DEVREAD("crtc", mc6845_device, register_r) AM_WRITE(m6545_data_w) AM_RANGE(0x44, 0x47) AM_DEVREADWRITE("fdc", wd2793_t, read, write) AM_RANGE(0x48, 0x4f) AM_READWRITE(fdc_status_r, fdc_motor_w) ADDRESS_MAP_END @@ -305,8 +287,8 @@ static ADDRESS_MAP_START(mbee128_io, AS_IO, 8, mbee_state) AM_RANGE(0x08, 0x08) AM_READWRITE(port08_r, port08_w) AM_RANGE(0x09, 0x09) AM_WRITENOP AM_RANGE(0x0b, 0x0b) AM_WRITE(port0b_w) - AM_RANGE(0x0c, 0x0c) AM_READWRITE(m6545_status_r, m6545_index_w) - AM_RANGE(0x0d, 0x0d) AM_READWRITE(m6545_data_r, m6545_data_w) + AM_RANGE(0x0c, 0x0c) AM_DEVREAD("crtc", mc6845_device, status_r) AM_WRITE(m6545_index_w) + AM_RANGE(0x0d, 0x0d) AM_DEVREAD("crtc", mc6845_device, register_r) AM_WRITE(m6545_data_w) AM_RANGE(0x1c, 0x1f) AM_READWRITE(port1c_r, port1c_w) AM_RANGE(0x44, 0x47) AM_DEVREADWRITE("fdc", wd2793_t, read, write) AM_RANGE(0x48, 0x4f) AM_READWRITE(fdc_status_r, fdc_motor_w) @@ -324,8 +306,8 @@ static ADDRESS_MAP_START(mbee256_io, AS_IO, 8, mbee_state) AM_RANGE(0x0209, 0x0209) AM_MIRROR(0xfd00) AM_READ(speed_high_r) AM_RANGE(0x0009, 0x0009) AM_MIRROR(0xff00) AM_WRITENOP AM_RANGE(0x000b, 0x000b) AM_MIRROR(0xff00) AM_WRITE(port0b_w) - AM_RANGE(0x000c, 0x000c) AM_MIRROR(0xff00) AM_READWRITE(m6545_status_r, m6545_index_w) - AM_RANGE(0x000d, 0x000d) AM_MIRROR(0xff00) AM_READWRITE(m6545_data_r, m6545_data_w) + AM_RANGE(0x000c, 0x000c) AM_MIRROR(0xff00) AM_DEVREAD("crtc", mc6845_device, status_r) AM_WRITE(m6545_index_w) + AM_RANGE(0x000d, 0x000d) AM_MIRROR(0xff00) AM_DEVREAD("crtc", mc6845_device, register_r) AM_WRITE(m6545_data_w) // AM_RANGE(0x0010, 0x0013) AM_MIRROR(0xff00) Optional SN76489AN audio chip AM_RANGE(0x0018, 0x001b) AM_MIRROR(0xff00) AM_READ(port18_r) AM_RANGE(0x001c, 0x001f) AM_MIRROR(0xff00) AM_READWRITE(port1c_r, port1c_w) @@ -337,7 +319,7 @@ static ADDRESS_MAP_START(mbee256_io, AS_IO, 8, mbee_state) // AM_RANGE(0x0068, 0x006f) AM_MIRROR(0xff00) Reserved for 8530 SCC (unused) ADDRESS_MAP_END -static INPUT_PORTS_START( mbee ) +static INPUT_PORTS_START( oldkb ) PORT_START("X.0") /* IN0 KEY ROW 0 [000] */ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("@") PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR('@') PORT_CHAR('`') PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') PORT_CHAR(0x01) @@ -417,6 +399,11 @@ static INPUT_PORTS_START( mbee ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("(Right)") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) +INPUT_PORTS_END + +static INPUT_PORTS_START( mbee ) + + PORT_INCLUDE( oldkb ) // Autorun on quickload PORT_START("CONFIG") @@ -424,13 +411,30 @@ static INPUT_PORTS_START( mbee ) PORT_CONFSETTING( 0x00, DEF_STR(No)) PORT_CONFSETTING( 0x01, DEF_STR(Yes)) // Wire links on motherboard - PORT_CONFNAME( 0xc0, 0x80, "PIO B7") + PORT_CONFNAME( 0xc0, 0x00, "PIO B7") PORT_CONFSETTING( 0x00, "VS") // sync pulse to enable telcom clock PORT_CONFSETTING( 0x40, "RTC") // optional board usually not fitted PORT_CONFSETTING( 0x80, "Tied high") // default resistor to vcc PORT_CONFSETTING( 0xc0, "Reserved for net") INPUT_PORTS_END +static INPUT_PORTS_START( mbee128 ) + + PORT_INCLUDE( oldkb ) + + // Autorun on quickload + PORT_START("CONFIG") + PORT_CONFNAME( 0x01, 0x01, "Autorun on Quickload") + PORT_CONFSETTING( 0x00, DEF_STR(No)) + PORT_CONFSETTING( 0x01, DEF_STR(Yes)) + // Wire links on motherboard + PORT_CONFNAME( 0xc0, 0x40, "PIO B7") + PORT_CONFSETTING( 0x00, "VS") // sync pulse to enable telcom clock + PORT_CONFSETTING( 0x40, "RTC") // RTC IRQ for clock + PORT_CONFSETTING( 0x80, "Tied high") // default resistor to vcc + PORT_CONFSETTING( 0xc0, "Reserved for net") +INPUT_PORTS_END + static INPUT_PORTS_START( mbee256 ) PORT_START("Y.0") /* IN0 KEY ROW 0 [+00] */ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F1") PORT_CODE(KEYCODE_F1) @@ -1134,6 +1138,6 @@ COMP( 1985, mbeepc85s,mbee, 0, mbeepc, mbee, mbee_state, mbeepc8 COMP( 1986, mbeeppc, mbee, 0, mbeeppc, mbee, mbee_state, mbeeppc, "Applied Technology", "Microbee Premium PC85" , 0 ) COMP( 1986, mbeett, mbee, 0, mbeett, mbee256, mbee_state, mbeett, "Applied Technology", "Microbee Teleterm" , GAME_NOT_WORKING ) COMP( 1986, mbee56, mbee, 0, mbee56, mbee, mbee_state, mbee56, "Applied Technology", "Microbee 56k" , GAME_NOT_WORKING ) -COMP( 1986, mbee128, mbee, 0, mbee128, mbee, mbee_state, mbee128, "Applied Technology", "Microbee 128k Standard" , GAME_NOT_WORKING ) -COMP( 1986, mbee128p, mbee, 0, mbee128p, mbee, mbee_state, mbee128, "Applied Technology", "Microbee 128k Premium" , GAME_NOT_WORKING ) +COMP( 1986, mbee128, mbee, 0, mbee128, mbee128, mbee_state, mbee128, "Applied Technology", "Microbee 128k Standard" , GAME_NOT_WORKING ) +COMP( 1986, mbee128p, mbee, 0, mbee128p, mbee128, mbee_state, mbee128, "Applied Technology", "Microbee 128k Premium" , GAME_NOT_WORKING ) COMP( 1987, mbee256, mbee, 0, mbee256, mbee256, mbee_state, mbee256, "Applied Technology", "Microbee 256TC" , GAME_NOT_WORKING ) |