Skip to content

Commit 6dfa4af

Browse files
committed
mpf3: Fixes and updates
- Add dump and emulation of detached keyboard, including keypad, function keys and ALT key - Add several alternate AB, CD & EF ROMs as alternate BIOSes - Add PLD dumps - Generate AB ROM for existing ROM 3.1.2 set with a few addresses and checksums modified so as to boot and pass the self test - Hook up the AY-3-8912 sound generator Clones promoted to working -------------------------- MicroProfessor MPF-III [AJR, Brett Hallen, RetroAND, Retrolab]
1 parent 21afc3b commit 6dfa4af

4 files changed

Lines changed: 443 additions & 34 deletions

File tree

src/mame/apple/apple2e.cpp

Lines changed: 146 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ Ctrl+Mode sets up default keyboard macros (most of which use Ctrl+Shift).
140140

141141
#include "apple2video.h"
142142
#include "apple2common.h"
143+
#include "mpf3kbd.h"
143144
#include "prav8ckb.h"
144145
#include "spectred_kbd.h"
145146

@@ -156,6 +157,7 @@ Ctrl+Mode sets up default keyboard macros (most of which use Ctrl+Shift).
156157
#include "machine/mos6551.h"
157158
#include "machine/ram.h"
158159
#include "machine/timer.h"
160+
#include "sound/ay8910.h"
159161
#include "sound/spkrdev.h"
160162

161163
#include "bus/a2bus/cards.h"
@@ -233,6 +235,7 @@ class apple2e_state : public driver_device
233235
m_a2common(*this, "a2common"),
234236
m_cecbanks(*this, "cecexp"),
235237
m_ay3600(*this, "ay3600"),
238+
m_mpf3_kbd(*this, "mpf3kbd"),
236239
m_prav8c_kbd(*this, "kbd"),
237240
m_video(*this, A2_VIDEO_TAG),
238241
m_a2bus(*this, A2_BUS_TAG),
@@ -271,7 +274,8 @@ class apple2e_state : public driver_device
271274
m_printer_out(*this, "laserprnout"),
272275
m_kbdcpu(*this, "kbdcpu"),
273276
m_kbdlatch(*this, "kbdlatch"),
274-
m_kbdmcu(*this, "kbdmcu")
277+
m_kbdmcu(*this, "kbdmcu"),
278+
m_psg(*this, "psg")
275279
{
276280
m_isiic = false;
277281
m_isiicplus = false;
@@ -282,6 +286,7 @@ class apple2e_state : public driver_device
282286
m_isace2200 = false;
283287
m_ace2200_axxx_bank = false;
284288
m_isspectred = false;
289+
m_mpf3_altcode = false;
285290
m_pal = false;
286291
m_cur_floppy = nullptr;
287292
m_devsel = 0;
@@ -301,6 +306,7 @@ class apple2e_state : public driver_device
301306
required_device<apple2_common_device> m_a2common;
302307
optional_memory_region m_cecbanks;
303308
optional_device<ay3600_device> m_ay3600;
309+
optional_device<mpf3kbd_device> m_mpf3_kbd;
304310
optional_device<prav8ckb_device> m_prav8c_kbd;
305311
required_device<a2_video_device> m_video;
306312
required_device<a2bus_device> m_a2bus;
@@ -328,6 +334,7 @@ class apple2e_state : public driver_device
328334
optional_device<cpu_device> m_kbdcpu;
329335
optional_device<ls259_device> m_kbdlatch;
330336
optional_device<mcs48_cpu_device> m_kbdmcu;
337+
optional_device<ay8912_device> m_psg;
331338

332339
// align VBL to the end of active video
333340
static constexpr int HPOS_VBL = 40 * 14;
@@ -421,6 +428,7 @@ class apple2e_state : public driver_device
421428
void reset_w(int state);
422429
void prav8c_kdata_w(u8 data);
423430
void prav8c_kstrb_w(int state);
431+
void mpf3_kbdout_w(u8 data);
424432
void spectred_kbdout_w(u8 data);
425433
u8 memexp_r(offs_t offset);
426434
void memexp_w(offs_t offset, u8 data);
@@ -449,7 +457,7 @@ class apple2e_state : public driver_device
449457
void cec(machine_config &config) ATTR_COLD;
450458
void cecm(machine_config &config) ATTR_COLD;
451459
void cec2000(machine_config &config) ATTR_COLD;
452-
void mprof3(machine_config &config) ATTR_COLD;
460+
void mpf3(machine_config &config) ATTR_COLD;
453461
void apple2e(machine_config &config) ATTR_COLD;
454462
void apple2epal(machine_config &config) ATTR_COLD;
455463
void apple2c(machine_config &config) ATTR_COLD;
@@ -464,6 +472,7 @@ class apple2e_state : public driver_device
464472
void apple2c_memexp_map(address_map &map) ATTR_COLD;
465473
void base_map(address_map &map) ATTR_COLD;
466474
void laser128_map(address_map &map) ATTR_COLD;
475+
void mpf3_map(address_map &map) ATTR_COLD;
467476
void ace500_map(address_map &map) ATTR_COLD;
468477
void ace2200_map(address_map &map) ATTR_COLD;
469478
void tk3000_keyb_map(address_map &map) ATTR_COLD;
@@ -518,7 +527,9 @@ class apple2e_state : public driver_device
518527
u16 m_ace500rombank;
519528

520529
bool m_isspectred;
521-
u8 m_spectred_kbdout, m_spectred_kbdshift, m_spectred_kbctrl;
530+
u8 m_kbdout, m_kbdshift, m_spectred_kbctrl;
531+
532+
bool m_mpf3_altcode;
522533

523534
bool m_has_laser_mouse;
524535
bool m_laser_fdc_on;
@@ -1116,8 +1127,8 @@ void apple2e_state::machine_start()
11161127
m_prav8c_kdata = 0;
11171128
m_prav8c_kstrb = true;
11181129

1119-
m_spectred_kbdout = 0xf0;
1120-
m_spectred_kbdshift = 0;
1130+
m_kbdout = 0xf0;
1131+
m_kbdshift = 0;
11211132
m_spectred_kbctrl = 0;
11221133

11231134
// setup save states
@@ -1138,11 +1149,14 @@ void apple2e_state::machine_start()
11381149
save_item(NAME(m_prav8c_kstrb));
11391150
save_item(NAME(m_prav8c_c060));
11401151
}
1141-
if (m_isspectred)
1152+
if (m_isspectred || m_mpf3_kbd.found())
11421153
{
1143-
save_item(NAME(m_spectred_kbdout));
1144-
save_item(NAME(m_spectred_kbdshift));
1145-
save_item(NAME(m_spectred_kbctrl));
1154+
save_item(NAME(m_kbdout));
1155+
save_item(NAME(m_kbdshift));
1156+
if (m_isspectred)
1157+
save_item(NAME(m_spectred_kbctrl));
1158+
if (m_mpf3_kbd.found())
1159+
save_item(NAME(m_mpf3_altcode));
11461160
}
11471161
save_item(NAME(m_inh_slot));
11481162
save_item(NAME(m_inh_bank));
@@ -1469,6 +1483,9 @@ void apple2e_state::reset_w(int state)
14691483
if (m_kbdmcu.found())
14701484
m_kbdmcu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
14711485

1486+
if (m_psg.found())
1487+
m_psg->reset();
1488+
14721489
lcrom_update();
14731490
auxbank_update();
14741491
update_slotrom_banks();
@@ -2123,8 +2140,18 @@ u8 apple2e_state::c000_r(offs_t offset)
21232140
case 0x1f: // read 80COL
21242141
return (m_video->get_80col() ? 0x80 : 0x00) | m_transchar;
21252142

2143+
case 0x22:
2144+
if (m_mpf3_kbd.found())
2145+
return (m_ace2200_axxx_bank ? 0x80 : 0) | uFloatingBus7;
2146+
break;
2147+
2148+
case 0x25:
2149+
if (m_mpf3_kbd.found())
2150+
return (m_sysconfig->read() & 0x40) << 1 | uFloatingBus7;
2151+
break;
2152+
21262153
case 0x26: // Ace 2x00 DIP switches
2127-
if (m_isace2200)
2154+
if (m_isace2200 || m_mpf3_kbd.found())
21282155
return (m_sysconfig->read() & 0x80) | uFloatingBus7;
21292156
break;
21302157

@@ -2139,6 +2166,8 @@ u8 apple2e_state::c000_r(offs_t offset)
21392166
}
21402167
return rv;
21412168
}
2169+
else if (m_mpf3_kbd.found())
2170+
return (m_mpf3_altcode ? 0x80 : 0) | uFloatingBus7;
21422171
break;
21432172

21442173
case 0x60: // cassette in, inverted
@@ -2154,6 +2183,8 @@ u8 apple2e_state::c000_r(offs_t offset)
21542183
case 0x69:
21552184
if (m_prav8c_kbd.found())
21562185
return (((m_gameio->has_sw0() && m_gameio->sw0_r()) || m_prav8c_kbd->sw0_r()) ? 0x80 : 0) | (m_prav8c_c060 & 0x40) | (uFloatingBus7 & 0x3f);
2186+
else if (m_mpf3_kbd.found())
2187+
return (((m_gameio->has_sw0() && m_gameio->sw0_r()) || m_mpf3_kbd->pb0_r()) ? 0x80 : 0) | uFloatingBus7;
21572188
else if (m_isspectred)
21582189
return (((m_gameio->has_sw0() && m_gameio->sw0_r()) || BIT(m_spectred_kbctrl, 0)) ? 0x80 : 0) | uFloatingBus7;
21592190
else
@@ -2163,6 +2194,8 @@ u8 apple2e_state::c000_r(offs_t offset)
21632194
case 0x6a:
21642195
if (m_prav8c_kbd.found())
21652196
return (((m_gameio->has_sw1() && m_gameio->sw1_r()) || m_prav8c_kbd->sw1_r()) ? 0x80 : 0) | (m_prav8c_c060 & 0x40) | (uFloatingBus7 & 0x3f);
2197+
else if (m_mpf3_kbd.found())
2198+
return (((m_gameio->has_sw1() && m_gameio->sw1_r()) || m_mpf3_kbd->pb1_r()) ? 0x80 : 0) | uFloatingBus7;
21662199
else if (m_isspectred)
21672200
return (((m_gameio->has_sw1() && m_gameio->sw1_r()) || BIT(m_spectred_kbctrl, 1)) ? 0x80 : 0) | uFloatingBus7;
21682201
else
@@ -2612,7 +2645,7 @@ void apple2e_state::c000_w(offs_t offset, u8 data)
26122645

26132646
case 0x70: case 0x71: case 0x72: case 0x73: case 0x74: case 0x75: case 0x76: case 0x77:
26142647
case 0x78: case 0x79: case 0x7a: case 0x7b: case 0x7c: case 0x7d: case 0x7e: case 0x7f:
2615-
if (m_isace2200)
2648+
if (m_isace2200 || m_mpf3_kbd.found())
26162649
{
26172650
if (offset == 0x78)
26182651
{
@@ -3542,6 +3575,18 @@ void apple2e_state::base_map(address_map &map)
35423575
m_lcbank[5](0x0d000, 0x1ffff).rom().region("maincpu", 0xd000).w(FUNC(apple2e_state::lc_w));
35433576
}
35443577

3578+
void apple2e_state::mpf3_map(address_map &map)
3579+
{
3580+
base_map(map);
3581+
3582+
m_4000bank[0](0x4000, 0xbfff).rw(FUNC(apple2e_state::ram4000_ace2200_r), FUNC(apple2e_state::ram4000_w));
3583+
map(0xc075, 0xc075).r(m_psg, FUNC(ay8912_device::data_r));
3584+
map(0xc076, 0xc077).w(m_psg, FUNC(ay8912_device::data_address_w));
3585+
3586+
//map(0xc090, 0xc093).w(FUNC(apple2e_state::laserprn_w));
3587+
//map(0xc1c1, 0xc1c1).r(FUNC(apple2e_state::franklin_busy_r));
3588+
}
3589+
35453590
void apple2e_state::apple2c_map(address_map &map)
35463591
{
35473592
base_map(map);
@@ -3718,30 +3763,51 @@ void apple2e_state::prav8c_kstrb_w(int state)
37183763
m_prav8c_kstrb = bool(state);
37193764
}
37203765

3766+
void apple2e_state::mpf3_kbdout_w(u8 data)
3767+
{
3768+
if (BIT(~m_kbdout & data, 6))
3769+
{
3770+
// Latch bit 7 into strobe
3771+
if (BIT(m_kbdout, 7))
3772+
{
3773+
m_transchar = m_kbdshift & 0x7f;
3774+
m_mpf3_altcode = BIT(m_kbdshift, 7);
3775+
m_strobe = 0x80;
3776+
}
3777+
}
3778+
3779+
if (BIT(~m_kbdout & data, 5))
3780+
m_kbdshift = (m_kbdout & 0x80) | (m_kbdshift >> 1);
3781+
3782+
m_anykeydown = BIT(data, 4);
3783+
3784+
m_kbdout = data;
3785+
}
3786+
37213787
void apple2e_state::spectred_kbdout_w(u8 data)
37223788
{
3723-
if (BIT(data, 7) && !BIT(m_spectred_kbdout, 7))
3789+
if (BIT(data, 7) && !BIT(m_kbdout, 7))
37243790
{
3725-
m_transchar = m_spectred_kbdshift & 0x7f;
3791+
m_transchar = m_kbdshift & 0x7f;
37263792
m_strobe = 0x80;
37273793
}
37283794

3729-
if (BIT(data, 4) && !BIT(m_spectred_kbdout, 4))
3795+
if (BIT(data, 4) && !BIT(m_kbdout, 4))
37303796
{
3731-
m_spectred_kbctrl = m_spectred_kbdshift & 0x0f;
3797+
m_spectred_kbctrl = m_kbdshift & 0x0f;
37323798
m_anykeydown = BIT(m_spectred_kbctrl, 2);
37333799
reset_w(!BIT(m_spectred_kbctrl, 3));
37343800
}
37353801

37363802
// Convert serial to parallel
3737-
if (!BIT(data, 6) && BIT(m_spectred_kbdout, 6))
3803+
if (!BIT(data, 6) && BIT(m_kbdout, 6))
37383804
{
3739-
m_spectred_kbdshift >>= 1;
3740-
if (!BIT(m_spectred_kbdout, 5))
3741-
m_spectred_kbdshift |= 0x80;
3805+
m_kbdshift >>= 1;
3806+
if (!BIT(m_kbdout, 5))
3807+
m_kbdshift |= 0x80;
37423808
}
37433809

3744-
m_spectred_kbdout = data;
3810+
m_kbdout = data;
37453811
}
37463812

37473813
void apple2e_state::laser128_keybio_map(address_map &map)
@@ -4836,6 +4902,20 @@ static INPUT_PORTS_START( tk3000 )
48364902
PORT_CONFSETTING(0x40, "DVORAK")
48374903
INPUT_PORTS_END
48384904

4905+
static INPUT_PORTS_START( mpf3 )
4906+
PORT_INCLUDE( apple2_sysconfig_accel )
4907+
4908+
PORT_MODIFY("a2_config")
4909+
PORT_DIPNAME(0x40, 0x40, "40/80 Columns") PORT_DIPLOCATION("U55:1")
4910+
PORT_DIPSETTING(0x40, "40 columns")
4911+
PORT_DIPSETTING(0x00, "Reserved")
4912+
PORT_DIPNAME(0x80, 0x00, "Printer Type") PORT_DIPLOCATION("U55:2")
4913+
PORT_DIPSETTING(0x00, "Epson/CP-80")
4914+
PORT_DIPSETTING(0x80, "C. Itoh")
4915+
// S3: Channel 3 or 4 (NTSC)
4916+
// S4: 64K or 48K RAM
4917+
INPUT_PORTS_END
4918+
48394919
static INPUT_PORTS_START( spectred )
48404920
PORT_INCLUDE( apple2_sysconfig_accel )
48414921

@@ -5286,11 +5366,24 @@ void apple2e_state::apple2epal(machine_config &config)
52865366
m_pal = true;
52875367
}
52885368

5289-
void apple2e_state::mprof3(machine_config &config)
5369+
void apple2e_state::mpf3(machine_config &config)
52905370
{
52915371
apple2e(config);
5292-
/* internal ram */
5293-
m_ram->set_default_size("128K");
5372+
m_maincpu->set_addrmap(AS_PROGRAM, &apple2e_state::mpf3_map);
5373+
5374+
config.device_remove("ay3600");
5375+
config.device_remove("repttmr");
5376+
5377+
MPF3_KEYBOARD(config, m_mpf3_kbd);
5378+
m_mpf3_kbd->kbdout_callback().set(FUNC(apple2e_state::mpf3_kbdout_w));
5379+
m_mpf3_kbd->reset_callback().set(FUNC(apple2e_state::reset_w));
5380+
5381+
AY8912(config, m_psg, A2BUS_7M_CLOCK / 8).add_route(ALL_OUTPUTS, "mono", 0.2);
5382+
5383+
//CENTRONICS(config, m_printer_conn, centronics_devices, "printer");
5384+
//m_printer_conn->busy_handler().set(FUNC(apple2e_state::busy_w));
5385+
//OUTPUT_LATCH(config, m_printer_out);
5386+
//m_printer_conn->set_output_latch(*m_printer_out);
52945387
}
52955388

52965389
void apple2e_state::apple2ee(machine_config &config)
@@ -5858,17 +5951,37 @@ ROM_START(apple2ees)
58585951
ROM_LOAD( "341-0211-a.f12", 0x000000, 0x000800, CRC(fac15d54) SHA1(abe019de22641b0647e829a1d4745759bdffe86a) )
58595952
ROM_END
58605953

5861-
ROM_START(mprof3)
5862-
ROM_REGION(0x2000,"gfx1",0)
5863-
ROM_LOAD ( "mpf3.chr", 0x0000, 0x1000,CRC(2597bc19) SHA1(e114dcbb512ec24fb457248c1b53cbd78039ed20))
5954+
ROM_START(mpf3)
5955+
ROM_REGION(0x2000, "gfx1", 0)
5956+
ROM_LOAD("rom_video_u20_2732.bin", 0x0000, 0x1000, CRC(2597bc19) SHA1(e114dcbb512ec24fb457248c1b53cbd78039ed20))
58645957
ROM_RELOAD(0x1000, 0x1000)
58655958

5866-
ROM_REGION(0x10000,"maincpu",0)
5867-
ROM_LOAD ( "mpf3-cd.rom", 0x0000, 0x2000, CRC(5b662e06) SHA1(aa0db775ca78986480829fcc10f00e57629e1a7c))
5868-
ROM_LOAD ( "mpf3-ef.rom", 0x2000, 0x2000, CRC(2c5e8b92) SHA1(befeb03e04b7c3ef36ef5829948a53880df85e92))
5869-
5870-
ROM_REGION( 0x800, "keyboard", ROMREGION_ERASE00 )
5871-
ROM_LOAD( "342-0132-c.e12", 0x000, 0x800, BAD_DUMP CRC(e47045f4) SHA1(12a2e718f5f4acd69b6c33a45a4a940b1440a481) ) // need to dump real mprof keyboard ROM
5959+
ROM_REGION(0x10000, "maincpu", ROMREGION_ERASE00)
5960+
ROM_SYSTEM_BIOS(0, "mos13", "MOS 1.3")
5961+
ROMX_LOAD("rom_cd_u25_mos13_2764.bin", 0x0000, 0x2000, CRC(fccc5c7d) SHA1(3f91af61576d15abeb71e6da39bdf6a29c01100d), ROM_BIOS(0))
5962+
ROMX_LOAD("rom_ef_u26_mos13_2764.bin", 0x2000, 0x2000, CRC(56afe670) SHA1(d83e109b121066bd529ef5d16ce9c94aaa28e5e3), ROM_BIOS(0))
5963+
ROMX_LOAD("rom_ab_u24_mos13_2764.bin", 0x4000, 0x2000, CRC(4c3ecb15) SHA1(4a8033ad51b205f01f2b5056d61822391c7548eb), ROM_BIOS(0))
5964+
ROM_SYSTEM_BIOS(1, "rom312", "ROM 3.1.2")
5965+
ROMX_LOAD("mpf3-cd.u25", 0x0000, 0x2000, CRC(5b662e06) SHA1(aa0db775ca78986480829fcc10f00e57629e1a7c), ROM_BIOS(1))
5966+
ROMX_LOAD("mpf3-ef.u26", 0x2000, 0x2000, CRC(2c5e8b92) SHA1(befeb03e04b7c3ef36ef5829948a53880df85e92), ROM_BIOS(1))
5967+
ROMX_LOAD("mpf3-ab.u24", 0x4000, 0x2000, BAD_DUMP CRC(b265a0e0) SHA1(ff05093efa5de9d900f22206004b3cd064fa6a8a), ROM_BIOS(1)) // needs proper dump (hacked from MOS13 AB ROM)
5968+
ROM_SYSTEM_BIOS(2, "mos11", "MOS 1.1")
5969+
ROMX_LOAD("rom_cd_u25_mos11_2764.bin", 0x0000, 0x2000, CRC(3d507b48) SHA1(af3e0308396aefb6b633d653066bfdb2737ad6f4), ROM_BIOS(2))
5970+
ROMX_LOAD("rom_ef_u26_mos11_2764.bin", 0x2000, 0x2000, CRC(71b9783d) SHA1(5617b2a5ffe167aa4bf43dd7a24672b362a737ba), ROM_BIOS(2))
5971+
ROMX_LOAD("rom_ab_u24_mos11_2764.bin", 0x4000, 0x2000, CRC(304b62e0) SHA1(72cf1c86c048d554f9ae236e17e6f6dcb88d4de3), ROM_BIOS(2))
5972+
ROM_SYSTEM_BIOS(3, "apple2e", "Apple IIe")
5973+
ROMX_LOAD("rom_cd_u25_apple2e_2764.bin", 0x0000, 0x2000, CRC(6a54e1aa) SHA1(9abe9e736bf77b4c73f30744ae63493d505a08cb), ROM_BIOS(3))
5974+
ROMX_LOAD("rom_ef_u26_apple2e_2764.bin", 0x2000, 0x2000, CRC(fc3d59d8) SHA1(8895a4b703f2184b673078f411f4089889b61c54), ROM_BIOS(3))
5975+
5976+
ROM_REGION(0x200, "rompal", 0)
5977+
ROM_LOAD("pal14l4cn_u29.bin", 0x000, 0x200, CRC(c09ee203) SHA1(1bbdef7e032b6bf8cb89a7507dacdb86db37f650))
5978+
5979+
ROM_REGION(0x400, "rampal", 0)
5980+
ROM_LOAD("pal14l4cn_u30.bin", 0x000, 0x400, CRC(6d914281) SHA1(17bff890159a10d001e81f20167bfd236273e554))
5981+
5982+
ROM_REGION(0x400, "fdd", 0)
5983+
ROM_LOAD("dm74s274_u10_fdd.bin", 0x000, 0x200, CRC(cf528c37) SHA1(93284c284971d80ed90a6d843759f9650d347e03))
5984+
ROM_LOAD("dm74s274_u7_fdd.bin", 0x200, 0x200, CRC(c7e54371) SHA1(ec1b658cce2949c055973e774357bd8b891983c0))
58725985
ROM_END
58735986

58745987
ROM_START(apple2ee)
@@ -6556,7 +6669,7 @@ COMP( 1983, apple2ede, apple2e, 0, apple2epal, apple2ede, apple2e_st
65566669
COMP( 1983, apple2ese, apple2e, 0, apple2epal, apple2ese, apple2e_state, empty_init, "Apple Computer", "Apple //e (Sweden)", MACHINE_SUPPORTS_SAVE )
65576670
COMP( 1983, apple2efr, apple2e, 0, apple2epal, apple2efr, apple2e_state, empty_init, "Apple Computer", "Apple //e (France)", MACHINE_SUPPORTS_SAVE )
65586671
COMP( 1983, apple2ees, apple2e, 0, apple2epal, apple2ees, apple2e_state, empty_init, "Apple Computer", "Apple //e (Spain)", MACHINE_SUPPORTS_SAVE )
6559-
COMP( 1983, mprof3, apple2e, 0, mprof3, apple2e, apple2e_state, empty_init, "Multitech", "Microprofessor III", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
6672+
COMP( 1983, mpf3, apple2e, 0, mpf3, mpf3, apple2e_state, empty_init, "Multitech Industrial", "MicroProfessor MPF-III", MACHINE_NODEVICE_PRINTER | MACHINE_SUPPORTS_SAVE )
65606673
COMP( 1985, apple2ee, apple2e, 0, apple2ee, apple2eus, apple2e_state, empty_init, "Apple Computer", "Apple //e (enhanced)", MACHINE_SUPPORTS_SAVE )
65616674
COMP( 1985, apple2eeuk, apple2e, 0, apple2eepal, apple2euk, apple2e_state, empty_init, "Apple Computer", "Apple //e (enhanced, UK)", MACHINE_SUPPORTS_SAVE )
65626675
COMP( 1985, apple2eede, apple2e, 0, apple2eepal, apple2ede, apple2e_state, empty_init, "Apple Computer", "Apple //e (enhanced, Germany)", MACHINE_SUPPORTS_SAVE )

0 commit comments

Comments
 (0)