diff options
Diffstat (limited to 'src/mame/drivers/apple2gs.c')
-rw-r--r-- | src/mame/drivers/apple2gs.c | 597 |
1 files changed, 597 insertions, 0 deletions
diff --git a/src/mame/drivers/apple2gs.c b/src/mame/drivers/apple2gs.c new file mode 100644 index 00000000000..54c4674f9df --- /dev/null +++ b/src/mame/drivers/apple2gs.c @@ -0,0 +1,597 @@ +// license:BSD-3-Clause +// copyright-holders:Nathan Woods,R. Belmont +/*************************************************************************** + + drivers/apple2gs.c + Apple IIgs + Driver by Nathan Woods and R. Belmont + + TODO: + - Fix spurious interrupt problem (caused by ADB HLE; switching to emulation of the M50740 + GLU should solve this) + - Fix 5.25" disks + - Optimize video code + - More RAM configurations + + NOTES: + + Video timing and the h/vcount registers: + VCounts + HCounts go like this: 0xfa (start of frame, still in vblank) + 0 0x40 0x41 0x58 (first visible pixel) 0x7f + ____________________________________ 0x100 (first visible scan line) + | | + | | + | | + | | + | | + HBL region | | + | | + | | + | | + | | + | | 0x1c0 (first line of Vblank, c019 and heartbeat trigger here, only true VBL if in A2 classic modes) + | | + ____________________________________ 0x1c8 (actual start of vblank in IIgs modes) + + 0x1ff (end of frame, in vblank) + + There are 64 HCounts total, and 704 pixels total, so HCounts do not map to the pixel clock. + VCounts do map directly to scanlines however, and count 262 of them. + +================================================================= + +***************************************************************************/ + + +#include "emu.h" +#include "cpu/g65816/g65816.h" +#include "includes/apple2.h" +#include "imagedev/flopdrv.h" +#include "formats/ap2_dsk.h" +#include "formats/ap_dsk35.h" +#include "includes/apple2gs.h" +#include "machine/sonydriv.h" +#include "machine/appldriv.h" +#include "sound/es5503.h" +#include "machine/applefdc.h" +#include "machine/8530scc.h" +#include "sound/speaker.h" +#include "machine/ram.h" + +#include "bus/a2bus/a2bus.h" +#include "bus/a2bus/a2lang.h" +#include "bus/a2bus/a2diskii.h" +#include "bus/a2bus/a2mockingboard.h" +#include "bus/a2bus/a2cffa.h" +#include "bus/a2bus/a2memexp.h" +#include "bus/a2bus/a2scsi.h" +#include "bus/a2bus/a2thunderclock.h" +#include "bus/a2bus/a2ssc.h" +#include "bus/a2bus/a2softcard.h" +#include "bus/a2bus/a2sam.h" +#include "bus/a2bus/a2alfam2.h" +#include "bus/a2bus/a2echoii.h" +#include "bus/a2bus/a2arcadebd.h" +#include "bus/a2bus/a2midi.h" +#include "bus/a2bus/a2vulcan.h" +#include "bus/a2bus/a2zipdrive.h" +//#include "bus/a2bus/a2udrive.h" +#include "bus/a2bus/a2hsscsi.h" + +static const gfx_layout apple2gs_text_layout = +{ + 14,8, /* 14*8 characters */ + 512, /* 256 characters */ + 1, /* 1 bits per pixel */ + { 0 }, /* no bitplanes; 1 bit per pixel */ + { 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1 }, /* x offsets */ + { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, + 8*8 /* every char takes 8 bytes */ +}; + +static const gfx_layout apple2gs_dbltext_layout = +{ + 7,8, /* 7*8 characters */ + 512, /* 256 characters */ + 1, /* 1 bits per pixel */ + { 0 }, /* no bitplanes; 1 bit per pixel */ + { 7, 6, 5, 4, 3, 2, 1 }, /* x offsets */ + { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, + 8*8 /* every char takes 8 bytes */ +}; + +static GFXDECODE_START( apple2gs ) + GFXDECODE_ENTRY( "gfx1", 0x0000, apple2gs_text_layout, 0, 2 ) + GFXDECODE_ENTRY( "gfx1", 0x0000, apple2gs_dbltext_layout, 0, 2 ) +GFXDECODE_END + +static const unsigned char apple2gs_palette[] = +{ + 0x0, 0x0, 0x0, /* Black $0 $0000 */ + 0xD, 0x0, 0x3, /* Deep Red $1 $0D03 */ + 0x0, 0x0, 0x9, /* Dark Blue $2 $0009 */ + 0xD, 0x2, 0xD, /* Purple $3 $0D2D */ + 0x0, 0x7, 0x2, /* Dark Green $4 $0072 */ + 0x5, 0x5, 0x5, /* Dark Gray $5 $0555 */ + 0x2, 0x2, 0xF, /* Medium Blue $6 $022F */ + 0x6, 0xA, 0xF, /* Light Blue $7 $06AF */ + 0x8, 0x5, 0x0, /* Brown $8 $0850 */ + 0xF, 0x6, 0x0, /* Orange $9 $0F60 */ + 0xA, 0xA, 0xA, /* Light Gray $A $0AAA */ + 0xF, 0x9, 0x8, /* Pink $B $0F98 */ + 0x1, 0xD, 0x0, /* Light Green $C $01D0 */ + 0xF, 0xF, 0x0, /* Yellow $D $0FF0 */ + 0x4, 0xF, 0x9, /* Aquamarine $E $04F9 */ + 0xF, 0xF, 0xF /* White $F $0FFF */ +}; + +static INPUT_PORTS_START( apple2gs ) + PORT_INCLUDE( apple2ep ) + + PORT_START("adb_mouse_x") + PORT_BIT( 0x7f, 0x00, IPT_MOUSE_X) PORT_SENSITIVITY(100) PORT_KEYDELTA(0) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_CODE(MOUSECODE_BUTTON2) PORT_NAME("Mouse Button 1") + + PORT_START("adb_mouse_y") + PORT_BIT( 0x7f, 0x00, IPT_MOUSE_Y) PORT_SENSITIVITY(100) PORT_KEYDELTA(0) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_CODE(MOUSECODE_BUTTON1) PORT_NAME("Mouse Button 0") + +INPUT_PORTS_END + + + +/* Initialize the palette */ +PALETTE_INIT_MEMBER(apple2gs_state,apple2gs) +{ + int i; + +// PALETTE_INIT_NAME(apple2)(palette); + + for (i = 0; i < 16; i++) + { + palette.set_pen_color(i, + apple2gs_palette[(3*i)]*17, + apple2gs_palette[(3*i)+1]*17, + apple2gs_palette[(3*i)+2]*17); + + m_a2_palette[i] = rgb_t(apple2gs_palette[(3*i)]*17, apple2gs_palette[(3*i)+1]*17, apple2gs_palette[(3*i)+2]*17); + } +} + +READ8_MEMBER(apple2gs_state::apple2gs_adc_read) +{ + return 0x80; +} + +static const floppy_interface apple2gs_floppy35_floppy_interface = +{ + FLOPPY_STANDARD_5_25_DSHD, + LEGACY_FLOPPY_OPTIONS_NAME(apple35_iigs), + "floppy_3_5" +}; + +static const floppy_interface apple2gs_floppy525_floppy_interface = +{ + FLOPPY_STANDARD_5_25_DSHD, + LEGACY_FLOPPY_OPTIONS_NAME(apple2), + "floppy_5_25" +}; + + +static ADDRESS_MAP_START( apple2gs_map, AS_PROGRAM, 8, apple2gs_state ) + /* nothing in the address map - everything is added dynamically */ +ADDRESS_MAP_END + +// ADB microcontroller emulation +// +// Huge thanks to Neil Parker's writeup on the ADB microcontroller! +// http://www.llx.com/~nparker/a2/adb.html + +#if RUN_ADB_MICRO +READ8_MEMBER(apple2gs_state::adbmicro_p0_in) +{ + return m_glu_bus; +} + +READ8_MEMBER(apple2gs_state::adbmicro_p1_in) +{ + if (m_is_rom3) + { + return 0x06; // indicate ROM 3 + } + + return 0xff; +} + +READ8_MEMBER(apple2gs_state::adbmicro_p2_in) +{ + UINT8 rv = 0; + + rv |= 0x40; // no reset + rv |= (m_adb_line) ? 0x00 : 0x80; + + return rv; +} + +READ8_MEMBER(apple2gs_state::adbmicro_p3_in) +{ + return 0x7; // don't press IIE capslock/ctrl/shift +} + +WRITE8_MEMBER(apple2gs_state::adbmicro_p0_out) +{ + m_glu_bus = data; +} + +WRITE8_MEMBER(apple2gs_state::adbmicro_p1_out) +{ +} + +WRITE8_MEMBER(apple2gs_state::adbmicro_p2_out) +{ + if (!(data & 0x10)) + { + if (m_adbmicro->are_port_bits_output(0, 0xff)) + { + keyglu_mcu_write(data & 7, m_glu_bus); + } + else // read GLU + { + m_glu_bus = keyglu_mcu_read(data & 7); + } + } +} + +WRITE8_MEMBER(apple2gs_state::adbmicro_p3_out) +{ + if (((data & 0x08) == 0x08) != m_adb_line) + { + m_adb_dtime = (int)(machine().time().as_ticks(XTAL_3_579545MHz*2) - m_last_adb_time); +// printf("ADB change to %d (dtime %d)\n", (data>>3) & 1, m_adb_dtime); + m_last_adb_time = machine().time().as_ticks(XTAL_3_579545MHz*2); + m_adb_line = (data & 0x8) ? true : false; + } +} +#endif + +WRITE_LINE_MEMBER(apple2gs_state::a2bus_irq_w) +{ + if (state) + { + apple2gs_add_irq(IRQ_SLOT); + } + else + { + apple2gs_remove_irq(IRQ_SLOT); + } +} + +WRITE_LINE_MEMBER(apple2gs_state::a2bus_nmi_w) +{ + m_maincpu->set_input_line(INPUT_LINE_NMI, state); +} + +WRITE_LINE_MEMBER(apple2gs_state::a2bus_inh_w) +{ + m_inh_slot = -1; + apple2_update_memory(); +} + +static SLOT_INTERFACE_START(apple2_cards) + SLOT_INTERFACE("diskii", A2BUS_DISKII) /* Disk II Controller Card */ + SLOT_INTERFACE("mockingboard", A2BUS_MOCKINGBOARD) /* Sweet Micro Systems Mockingboard */ + SLOT_INTERFACE("phasor", A2BUS_PHASOR) /* Applied Engineering Phasor */ + SLOT_INTERFACE("cffa2", A2BUS_CFFA2) /* CFFA2000 Compact Flash for Apple II (www.dreher.net), 65C02/65816 firmware */ + SLOT_INTERFACE("cffa202", A2BUS_CFFA2_6502) /* CFFA2000 Compact Flash for Apple II (www.dreher.net), 6502 firmware */ + SLOT_INTERFACE("memexp", A2BUS_MEMEXP) /* Apple II Memory Expansion Card */ + SLOT_INTERFACE("ramfactor", A2BUS_RAMFACTOR) /* Applied Engineering RamFactor */ + SLOT_INTERFACE("thclock", A2BUS_THUNDERCLOCK) /* ThunderWare ThunderClock Plus */ + SLOT_INTERFACE("ssc", A2BUS_SSC) /* Apple Super Serial Card */ + SLOT_INTERFACE("sam", A2BUS_SAM) /* SAM Software Automated Mouth (8-bit DAC + speaker) */ + SLOT_INTERFACE("alfam2", A2BUS_ALFAM2) /* ALF Apple Music II */ + SLOT_INTERFACE("echoii", A2BUS_ECHOII) /* Street Electronics Echo II */ + SLOT_INTERFACE("arcbd", A2BUS_ARCADEBOARD) /* Third Millenium Engineering Arcade Board */ + SLOT_INTERFACE("midi", A2BUS_MIDI) /* Generic 6840+6850 MIDI board */ + SLOT_INTERFACE("vulcan", A2BUS_VULCAN) /* AE Vulcan IDE card */ + SLOT_INTERFACE("vulcangold", A2BUS_VULCANGOLD) /* AE Vulcan Gold IDE card */ + SLOT_INTERFACE("zipdrive", A2BUS_ZIPDRIVE) /* ZIP Technologies IDE card */ + SLOT_INTERFACE("echoiiplus", A2BUS_ECHOPLUS) /* Street Electronics Echo Plus (Echo II + Mockingboard clone) */ +// SLOT_INTERFACE("mdturbo", A2BUS_UDRIVE_TURBO) /* ///SHH Systeme MicroDrive Turbo IDE card */ + +// SLOT_INTERFACE("softcard", A2BUS_SOFTCARD) /* Microsoft SoftCard */ // appears not to be IIgs compatible? + SLOT_INTERFACE("scsi", A2BUS_SCSI) /* Apple II SCSI Card */ + SLOT_INTERFACE("hsscsi", A2BUS_HSSCSI) /* Apple II High-Speed SCSI Card */ +SLOT_INTERFACE_END + +static MACHINE_CONFIG_START( apple2gs, apple2gs_state ) + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", G65816, APPLE2GS_14M/5) + MCFG_CPU_PROGRAM_MAP(apple2gs_map) + #if RUN_ADB_MICRO + MCFG_CPU_ADD(ADBMICRO_TAG, M50741, XTAL_3_579545MHz) + MCFG_M5074X_PORT0_READ_CALLBACK(READ8(apple2gs_state, adbmicro_p0_in)) + MCFG_M5074X_PORT0_WRITE_CALLBACK(WRITE8(apple2gs_state, adbmicro_p0_out)) + MCFG_M5074X_PORT1_READ_CALLBACK(READ8(apple2gs_state, adbmicro_p1_in)) + MCFG_M5074X_PORT1_WRITE_CALLBACK(WRITE8(apple2gs_state, adbmicro_p1_out)) + MCFG_M5074X_PORT2_READ_CALLBACK(READ8(apple2gs_state, adbmicro_p2_in)) + MCFG_M5074X_PORT2_WRITE_CALLBACK(WRITE8(apple2gs_state, adbmicro_p2_out)) + MCFG_M5074X_PORT3_READ_CALLBACK(READ8(apple2gs_state, adbmicro_p3_in)) + MCFG_M5074X_PORT3_WRITE_CALLBACK(WRITE8(apple2gs_state, adbmicro_p3_out)) + #endif + MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", apple2gs_state, apple2_interrupt, "screen", 0, 1) + MCFG_QUANTUM_TIME(attotime::from_hz(60)) + + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_SIZE(704, 262) // 640+32+32 for the borders + MCFG_SCREEN_VISIBLE_AREA(0,703,0,230) + MCFG_SCREEN_UPDATE_DRIVER(apple2gs_state, screen_update_apple2gs) + + MCFG_PALETTE_ADD("palette", 16) + MCFG_PALETTE_INIT_OWNER(apple2gs_state, apple2gs) + MCFG_GFXDECODE_ADD("gfxdecode", "palette", apple2gs ) + + MCFG_MACHINE_START_OVERRIDE(apple2gs_state, apple2gs ) + MCFG_MACHINE_RESET_OVERRIDE(apple2gs_state, apple2gs ) + + MCFG_VIDEO_START_OVERRIDE(apple2gs_state, apple2gs ) + + /* keyboard controller */ + MCFG_DEVICE_ADD("ay3600", AY3600, 0) + MCFG_AY3600_MATRIX_X0(IOPORT("X0")) + MCFG_AY3600_MATRIX_X1(IOPORT("X1")) + MCFG_AY3600_MATRIX_X2(IOPORT("X2")) + MCFG_AY3600_MATRIX_X3(IOPORT("X3")) + MCFG_AY3600_MATRIX_X4(IOPORT("X4")) + MCFG_AY3600_MATRIX_X5(IOPORT("X5")) + MCFG_AY3600_MATRIX_X6(IOPORT("X6")) + MCFG_AY3600_MATRIX_X7(IOPORT("X7")) + MCFG_AY3600_MATRIX_X8(IOPORT("X8")) + MCFG_AY3600_SHIFT_CB(READLINE(apple2_state, ay3600_shift_r)) + MCFG_AY3600_CONTROL_CB(READLINE(apple2_state, ay3600_control_r)) + MCFG_AY3600_DATA_READY_CB(WRITELINE(apple2_state, ay3600_iie_data_ready_w)) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("a2speaker", SPEAKER_SOUND, 0) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + + MCFG_ES5503_ADD("es5503", APPLE2GS_7M) + MCFG_ES5503_OUTPUT_CHANNELS(2) + MCFG_ES5503_IRQ_FUNC(WRITELINE(apple2gs_state, apple2gs_doc_irq)) + MCFG_ES5503_ADC_FUNC(READ8(apple2gs_state, apple2gs_adc_read)) + + MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + + /* slot devices */ + MCFG_DEVICE_ADD("a2bus", A2BUS, 0) + MCFG_A2BUS_CPU("maincpu") + MCFG_A2BUS_OUT_IRQ_CB(WRITELINE(apple2gs_state, a2bus_irq_w)) + MCFG_A2BUS_OUT_NMI_CB(WRITELINE(apple2gs_state, a2bus_nmi_w)) + MCFG_A2BUS_OUT_INH_CB(WRITELINE(apple2gs_state, a2bus_inh_w)) + MCFG_A2BUS_ONBOARD_ADD("a2bus", "sl0", A2BUS_LANG, NULL) + MCFG_A2BUS_SLOT_ADD("a2bus", "sl1", apple2_cards, NULL) + MCFG_A2BUS_SLOT_ADD("a2bus", "sl2", apple2_cards, NULL) + MCFG_A2BUS_SLOT_ADD("a2bus", "sl3", apple2_cards, NULL) + MCFG_A2BUS_SLOT_ADD("a2bus", "sl4", apple2_cards, NULL) + MCFG_A2BUS_SLOT_ADD("a2bus", "sl5", apple2_cards, NULL) + MCFG_A2BUS_SLOT_ADD("a2bus", "sl6", apple2_cards, NULL) + MCFG_A2BUS_SLOT_ADD("a2bus", "sl7", apple2_cards, NULL) + + MCFG_IWM_ADD("fdc", apple2_fdc_interface) + + /* SCC */ + MCFG_DEVICE_ADD("scc", SCC8530, APPLE2GS_14M/2) + + MCFG_LEGACY_FLOPPY_APPLE_2_DRIVES_ADD(apple2gs_floppy525_floppy_interface,15,16) + MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADDITIONAL_ADD(apple2gs_floppy35_floppy_interface) + + MCFG_NVRAM_ADD_0FILL("nvram") + + /* internal ram */ + MCFG_RAM_ADD(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("2M") // 1M on board + 1M in the expansion slot was common for ROM 03 + MCFG_RAM_EXTRA_OPTIONS("1M,3M,4M,5M,6M,7M,8M") + MCFG_RAM_DEFAULT_VALUE(0x00) + + MCFG_SOFTWARE_LIST_ADD("flop35_list","apple2gs") + MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("flop525_list", "apple2") +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( apple2gsr1, apple2gs ) + MCFG_MACHINE_START_OVERRIDE(apple2gs_state, apple2gsr1 ) + + #if RUN_ADB_MICRO + MCFG_CPU_REPLACE(ADBMICRO_TAG, M50740, XTAL_3_579545MHz) + MCFG_M5074X_PORT0_READ_CALLBACK(READ8(apple2gs_state, adbmicro_p0_in)) + MCFG_M5074X_PORT0_WRITE_CALLBACK(WRITE8(apple2gs_state, adbmicro_p0_out)) + MCFG_M5074X_PORT1_READ_CALLBACK(READ8(apple2gs_state, adbmicro_p1_in)) + MCFG_M5074X_PORT1_WRITE_CALLBACK(WRITE8(apple2gs_state, adbmicro_p1_out)) + MCFG_M5074X_PORT2_READ_CALLBACK(READ8(apple2gs_state, adbmicro_p2_in)) + MCFG_M5074X_PORT2_WRITE_CALLBACK(WRITE8(apple2gs_state, adbmicro_p2_out)) + MCFG_M5074X_PORT3_READ_CALLBACK(READ8(apple2gs_state, adbmicro_p3_in)) + MCFG_M5074X_PORT3_WRITE_CALLBACK(WRITE8(apple2gs_state, adbmicro_p3_out)) + #endif + + MCFG_RAM_MODIFY(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("1280K") // 256K on board + 1M in the expansion slot was common for ROM 01 + MCFG_RAM_EXTRA_OPTIONS("256K,512K,768K,1M,2M,3M,4M,5M,6M,7M,8M") + MCFG_RAM_DEFAULT_VALUE(0x00) +MACHINE_CONFIG_END + +/*************************************************************************** + + Game driver(s) + +***************************************************************************/ + +ROM_START(apple2gs) + // M50740/50741 ADB MCU inside the IIgs system unit + ROM_REGION(0x1000,M5074X_INTERNAL_ROM(ADBMICRO_TAG),0) + ROM_LOAD( "341s0632-2.bin", 0x000000, 0x001000, CRC(e1c11fb0) SHA1(141d18c36a617ab9dce668445440d34354be0672) ) + + // i8048 microcontroller inside the IIgs ADB Standard Keyboard + ROM_REGION(0x400, "kmcu", 0) + // from early-production ROM 00 Woz Limited Edition IIgs. keyboard "Part Number 658-4081 825-1301-A" + // ROM is marked "NEC Japan 8626XD 341-0232A 543" so 26th week of 1986 + ROM_LOAD( "341-0232a.bin", 0x000000, 0x000400, CRC(6a158b9f) SHA1(e8744180075182849d431fd8023a52a062a6da76) ) + // from later non-Woz ROM 01. keyboard "Model A9M0330" + // ROM is marked "NEC Japan 8806HD 8048HC610 341-0124-A (c) APPLE 87" so 6th week of 1988 + ROM_LOAD( "341-0124a.bin", 0x000000, 0x000400, CRC(2a3576bf) SHA1(58fbf770d3801a02d0944039829f9241b5279013) ) + + ROM_REGION(0x1000,"gfx1",0) + ROM_LOAD ( "apple2gs.chr", 0x0000, 0x1000, CRC(91e53cd8) SHA1(34e2443e2ef960a36c047a09ed5a93f471797f89)) /* need label/part number */ + + ROM_REGION(0x40000,"maincpu",0) + ROM_LOAD("341-0737", 0x0000, 0x20000, CRC(8d410067) SHA1(c0f4704233ead14cb8e1e8a68fbd7063c56afd27)) /* Needs verification; 341-0737: IIgs ROM03 FC-FD */ + ROM_LOAD("341-0748", 0x20000, 0x20000, CRC(d4c50550) SHA1(2784cdd7ac7094b3e494409db3e72b4e6d2d9e81)) /* Needs verification; 341-0748: IIgs ROM03 FE-FF */ + + ROM_REGION(0x20000, "es5503", ROMREGION_ERASE00) + + // temporary: use IIe enhanced keyboard decode ROM + ROM_REGION( 0x800, "keyboard", 0 ) + ROM_LOAD( "341-0132-d.e12", 0x000, 0x800, CRC(c506efb9) SHA1(8e14e85c645187504ec9d162b3ea614a0c421d32) ) +ROM_END + +ROM_START(apple2gsr3p) + ROM_REGION(0x1000,M5074X_INTERNAL_ROM(ADBMICRO_TAG),0) + ROM_LOAD( "341s0632-2.bin", 0x000000, 0x001000, CRC(e1c11fb0) SHA1(141d18c36a617ab9dce668445440d34354be0672) ) + + ROM_REGION(0x400, "kmcu", 0) + ROM_LOAD( "341-0232a.bin", 0x000000, 0x000400, CRC(6a158b9f) SHA1(e8744180075182849d431fd8023a52a062a6da76) ) + ROM_LOAD( "341-0124a.bin", 0x000000, 0x000400, CRC(2a3576bf) SHA1(58fbf770d3801a02d0944039829f9241b5279013) ) + + ROM_REGION(0x1000,"gfx1",0) + ROM_LOAD ( "apple2gs.chr", 0x0000, 0x1000, CRC(91e53cd8) SHA1(34e2443e2ef960a36c047a09ed5a93f471797f89)) /* need label/part number */ + + ROM_REGION(0x40000,"maincpu",0) + ROM_LOAD("341-0728", 0x0000, 0x20000, NO_DUMP) /* 341-0728: IIgs ROM03 prototype FC-FD */ + ROM_LOAD("341-0729", 0x20000, 0x20000, NO_DUMP) /* 341-0729: IIgs ROM03 prototype FE-FF */ + + ROM_REGION(0x20000, "es5503", ROMREGION_ERASE00) + + // temporary: use IIe enhanced keyboard decode ROM + ROM_REGION( 0x800, "keyboard", 0 ) + ROM_LOAD( "341-0132-d.e12", 0x000, 0x800, CRC(c506efb9) SHA1(8e14e85c645187504ec9d162b3ea614a0c421d32) ) +ROM_END + +ROM_START(apple2gsr3lp) + ROM_REGION(0x1000,M5074X_INTERNAL_ROM(ADBMICRO_TAG),0) + ROM_LOAD( "341s0632-2.bin", 0x000000, 0x001000, CRC(e1c11fb0) SHA1(141d18c36a617ab9dce668445440d34354be0672) ) + + ROM_REGION(0x400, "kmcu", 0) + ROM_LOAD( "341-0232a.bin", 0x000000, 0x000400, CRC(6a158b9f) SHA1(e8744180075182849d431fd8023a52a062a6da76) ) + ROM_LOAD( "341-0124a.bin", 0x000000, 0x000400, CRC(2a3576bf) SHA1(58fbf770d3801a02d0944039829f9241b5279013) ) + + ROM_REGION(0x1000,"gfx1",0) + ROM_LOAD ( "apple2gs.chr", 0x0000, 0x1000, CRC(91e53cd8) SHA1(34e2443e2ef960a36c047a09ed5a93f471797f89)) /* need label/part number */ + + ROM_REGION(0x40000,"maincpu",0) + ROM_LOAD("341-0737", 0x0000, 0x20000, CRC(8d410067) SHA1(c0f4704233ead14cb8e1e8a68fbd7063c56afd27)) /* 341-0737: IIgs ROM03 FC-FD */ + ROM_LOAD("341-0749", 0x20000, 0x20000, NO_DUMP) /* 341-0749: unknown ?post? ROM03 IIgs prototype? FE-FF */ + + ROM_REGION(0x20000, "es5503", ROMREGION_ERASE00) + + // temporary: use IIe enhanced keyboard decode ROM + ROM_REGION( 0x800, "keyboard", 0 ) + ROM_LOAD( "341-0132-d.e12", 0x000, 0x800, CRC(c506efb9) SHA1(8e14e85c645187504ec9d162b3ea614a0c421d32) ) +ROM_END + +ROM_START(apple2gsr1) + ROM_REGION(0xc00,M5074X_INTERNAL_ROM(ADBMICRO_TAG),0) + ROM_LOAD( "341s0345.bin", 0x000000, 0x000c00, CRC(48cd5779) SHA1(97e421f5247c00a0ca34cd08b6209df573101480) ) + + ROM_REGION(0x400, "kmcu", 0) + ROM_LOAD( "341-0232a.bin", 0x000000, 0x000400, CRC(6a158b9f) SHA1(e8744180075182849d431fd8023a52a062a6da76) ) + ROM_LOAD( "341-0124a.bin", 0x000000, 0x000400, CRC(2a3576bf) SHA1(58fbf770d3801a02d0944039829f9241b5279013) ) + + ROM_REGION(0x1000,"gfx1",0) + ROM_LOAD ( "apple2gs.chr", 0x0000, 0x1000, CRC(91e53cd8) SHA1(34e2443e2ef960a36c047a09ed5a93f471797f89)) /* need label/part number */ + + ROM_REGION(0x20000,"maincpu",0) + ROM_LOAD("342-0077-b", 0x0000, 0x20000, CRC(42f124b0) SHA1(e4fc7560b69d062cb2da5b1ffbe11cd1ca03cc37)) /* 342-0077-B: IIgs ROM01 */ + + ROM_REGION(0x20000, "es5503", ROMREGION_ERASE00) + + // temporary: use IIe enhanced keyboard decode ROM + ROM_REGION( 0x800, "keyboard", 0 ) + ROM_LOAD( "341-0132-d.e12", 0x000, 0x800, CRC(c506efb9) SHA1(8e14e85c645187504ec9d162b3ea614a0c421d32) ) +ROM_END + +ROM_START(apple2gsr0) + ROM_REGION(0xc00,M5074X_INTERNAL_ROM(ADBMICRO_TAG),0) + ROM_LOAD( "341s0345.bin", 0x000000, 0x000c00, CRC(48cd5779) SHA1(97e421f5247c00a0ca34cd08b6209df573101480) ) + + ROM_REGION(0x400, "kmcu", 0) + ROM_LOAD( "341-0232a.bin", 0x000000, 0x000400, CRC(6a158b9f) SHA1(e8744180075182849d431fd8023a52a062a6da76) ) + ROM_LOAD( "341-0124a.bin", 0x000000, 0x000400, CRC(2a3576bf) SHA1(58fbf770d3801a02d0944039829f9241b5279013) ) + + ROM_REGION(0x1000,"gfx1",0) + ROM_LOAD ( "apple2gs.chr", 0x0000, 0x1000, CRC(91e53cd8) SHA1(34e2443e2ef960a36c047a09ed5a93f471797f89)) + + ROM_REGION(0x20000,"maincpu",0) + /* Should these roms really be split like this? according to the unofficial apple rom list, IIgs ROM00 was on one rom labeled 342-0077-A */ + ROM_LOAD("rom0a.bin", 0x0000, 0x8000, CRC(9cc78238) SHA1(0ea82e10720a01b68722ab7d9f66efec672a44d3)) + ROM_LOAD("rom0b.bin", 0x8000, 0x8000, CRC(8baf2a79) SHA1(91beeb11827932fe10475252d8036a63a2edbb1c)) + ROM_LOAD("rom0c.bin", 0x10000, 0x8000, CRC(94c32caa) SHA1(4806d50d676b06f5213b181693fc1585956b98bb)) + ROM_LOAD("rom0d.bin", 0x18000, 0x8000, CRC(200a15b8) SHA1(0c2890bb169ead63369738bbd5f33b869f24c42a)) + + ROM_REGION(0x20000, "es5503", ROMREGION_ERASE00) + + // temporary: use IIe enhanced keyboard decode ROM + ROM_REGION( 0x800, "keyboard", 0 ) + ROM_LOAD( "341-0132-d.e12", 0x000, 0x800, CRC(c506efb9) SHA1(8e14e85c645187504ec9d162b3ea614a0c421d32) ) +ROM_END + +ROM_START(apple2gsr0p) // 6/19/1986 Cortland prototype + ROM_REGION(0xc00,M5074X_INTERNAL_ROM(ADBMICRO_TAG),0) + ROM_LOAD( "341s0345.bin", 0x000000, 0x000c00, CRC(48cd5779) SHA1(97e421f5247c00a0ca34cd08b6209df573101480) ) + + ROM_REGION(0x400, "kmcu", 0) + ROM_LOAD( "341-0232a.bin", 0x000000, 0x000400, CRC(6a158b9f) SHA1(e8744180075182849d431fd8023a52a062a6da76) ) + ROM_LOAD( "341-0124a.bin", 0x000000, 0x000400, CRC(2a3576bf) SHA1(58fbf770d3801a02d0944039829f9241b5279013) ) + + ROM_REGION(0x1000,"gfx1",0) + ROM_LOAD ( "apple2gs.chr", 0x0000, 0x1000, CRC(91e53cd8) SHA1(34e2443e2ef960a36c047a09ed5a93f471797f89)) + + ROM_REGION(0x20000,"maincpu",0) + ROM_LOAD( "rombf.bin", 0x000000, 0x020000, CRC(ab04fedf) SHA1(977589a17553956d583a21020080a39dd396df5c) ) + + ROM_REGION(0x20000, "es5503", ROMREGION_ERASE00) + + // temporary: use IIe enhanced keyboard decode ROM + ROM_REGION( 0x800, "keyboard", 0 ) + ROM_LOAD( "341-0132-d.e12", 0x000, 0x800, CRC(c506efb9) SHA1(8e14e85c645187504ec9d162b3ea614a0c421d32) ) +ROM_END + +ROM_START(apple2gsr0p2) // 3/10/1986 Cortland prototype, boots as "Apple //'ing - Alpha 2.0" + ROM_REGION(0xc00,M5074X_INTERNAL_ROM(ADBMICRO_TAG),0) + ROM_LOAD( "341s0345.bin", 0x000000, 0x000c00, CRC(48cd5779) SHA1(97e421f5247c00a0ca34cd08b6209df573101480) ) + + ROM_REGION(0x400, "kmcu", 0) + ROM_LOAD( "341-0232a.bin", 0x000000, 0x000400, CRC(6a158b9f) SHA1(e8744180075182849d431fd8023a52a062a6da76) ) + ROM_LOAD( "341-0124a.bin", 0x000000, 0x000400, CRC(2a3576bf) SHA1(58fbf770d3801a02d0944039829f9241b5279013) ) + + ROM_REGION(0x1000,"gfx1",0) + ROM_LOAD ( "apple2gs.chr", 0x0000, 0x1000, CRC(91e53cd8) SHA1(34e2443e2ef960a36c047a09ed5a93f471797f89)) + + ROM_REGION(0x20000,"maincpu",0) + ROM_LOAD( "apple iigs alpha rom 2.0 19860310.bin", 0x000000, 0x020000, CRC(a47d275f) SHA1(c5836adcfc8be69c7351b84afa94c814e8d92b81) ) + + ROM_REGION(0x20000, "es5503", ROMREGION_ERASE00) + + // temporary: use IIe enhanced keyboard decode ROM + ROM_REGION( 0x800, "keyboard", 0 ) + ROM_LOAD( "341-0132-d.e12", 0x000, 0x800, CRC(c506efb9) SHA1(8e14e85c645187504ec9d162b3ea614a0c421d32) ) +ROM_END + +/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */ +COMP( 1989, apple2gs, 0, apple2, apple2gs, apple2gs, driver_device, 0, "Apple Computer", "Apple IIgs (ROM03)", MACHINE_SUPPORTS_SAVE ) +COMP( 198?, apple2gsr3p, apple2gs, 0, apple2gs, apple2gs, driver_device, 0, "Apple Computer", "Apple IIgs (ROM03 prototype)", MACHINE_NOT_WORKING ) +COMP( 1989, apple2gsr3lp, apple2gs, 0, apple2gs, apple2gs, driver_device, 0, "Apple Computer", "Apple IIgs (ROM03 late prototype?)", MACHINE_NOT_WORKING ) +COMP( 1987, apple2gsr1, apple2gs, 0, apple2gsr1, apple2gs, driver_device, 0, "Apple Computer", "Apple IIgs (ROM01)", MACHINE_SUPPORTS_SAVE ) +COMP( 1986, apple2gsr0, apple2gs, 0, apple2gsr1, apple2gs, driver_device, 0, "Apple Computer", "Apple IIgs (ROM00)", MACHINE_SUPPORTS_SAVE ) +COMP( 1986, apple2gsr0p,apple2gs, 0, apple2gsr1, apple2gs, driver_device, 0, "Apple Computer", "Apple IIgs (ROM00 prototype 6/19/1986)", MACHINE_SUPPORTS_SAVE ) +COMP( 1986, apple2gsr0p2,apple2gs,0, apple2gsr1, apple2gs, driver_device, 0, "Apple Computer", "Apple IIgs (ROM00 prototype 3/10/1986)", MACHINE_SUPPORTS_SAVE ) |