// 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 "includes/apple2.h" #include "includes/apple2e.h" #include "includes/apple2gs.h" #include "cpu/g65816/g65816.h" #include "imagedev/flopdrv.h" #include "machine/appldriv.h" #include "machine/applefdc.h" #include "machine/sonydriv.h" #include "machine/z80scc.h" #include "sound/es5503.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" #include "softlist.h" #include "speaker.h" #include "formats/ap_dsk35.h" #include "formats/ap2_dsk.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" }; void apple2gs_state::apple2gs_map(address_map &map) { /* nothing in the address map - everything is added dynamically */ } void apple2gs_state::vectors_map(address_map &map) { map(0x00, 0x1f).r(this, FUNC(apple2gs_state::apple2gs_read_vector)); } // 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_t 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'579'545)*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'579'545)*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 void apple2_cards(device_slot_interface &device) { device.option_add("diskii", A2BUS_DISKII); /* Disk II Controller Card */ device.option_add("mockingboard", A2BUS_MOCKINGBOARD); /* Sweet Micro Systems Mockingboard */ device.option_add("phasor", A2BUS_PHASOR); /* Applied Engineering Phasor */ device.option_add("cffa2", A2BUS_CFFA2); /* CFFA2000 Compact Flash for Apple II (www.dreher.net), 65C02/65816 firmware */ device.option_add("cffa202", A2BUS_CFFA2_6502); /* CFFA2000 Compact Flash for Apple II (www.dreher.net), 6502 firmware */ device.option_add("memexp", A2BUS_MEMEXP); /* Apple II Memory Expansion Card */ device.option_add("ramfactor", A2BUS_RAMFACTOR); /* Applied Engineering RamFactor */ device.option_add("thclock", A2BUS_THUNDERCLOCK); /* ThunderWare ThunderClock Plus */ device.option_add("ssc", A2BUS_SSC); /* Apple Super Serial Card */ device.option_add("sam", A2BUS_SAM); /* SAM Software Automated Mouth (8-bit DAC + speaker) */ device.option_add("alfam2", A2BUS_ALFAM2); /* ALF Apple Music II */ device.option_add("echoii", A2BUS_ECHOII); /* Street Electronics Echo II */ device.option_add("arcbd", A2BUS_ARCADEBOARD); /* Third Millenium Engineering Arcade Board */ device.option_add("midi", A2BUS_MIDI); /* Generic 6840+6850 MIDI board */ device.option_add("vulcan", A2BUS_VULCAN); /* AE Vulcan IDE card */ device.option_add("vulcangold", A2BUS_VULCANGOLD); /* AE Vulcan Gold IDE card */ device.option_add("zipdrive", A2BUS_ZIPDRIVE); /* ZIP Technologies IDE card */ device.option_add("echoiiplus", A2BUS_ECHOPLUS); /* Street Electronics Echo Plus (Echo II + Mockingboard clone) */ // device.option_add("mdturbo", A2BUS_UDRIVE_TURBO); /* ///SHH Systeme MicroDrive Turbo IDE card */ // device.option_add("softcard", A2BUS_SOFTCARD); /* Microsoft SoftCard */ // appears not to be IIgs compatible? device.option_add("scsi", A2BUS_SCSI); /* Apple II SCSI Card */ device.option_add("hsscsi", A2BUS_HSSCSI); /* Apple II High-Speed SCSI Card */ } MACHINE_CONFIG_START(apple2gs_state::apple2gs) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", G65816, APPLE2GS_14M/5) MCFG_CPU_PROGRAM_MAP(apple2gs_map) MCFG_DEVICE_ADDRESS_MAP(g65816_device::AS_VECTORS, vectors_map) #if RUN_ADB_MICRO MCFG_CPU_ADD(ADBMICRO_TAG, M50741, XTAL(3'579'545)) 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_SLOT_ADD("a2bus", "sl1", apple2_cards, nullptr) MCFG_A2BUS_SLOT_ADD("a2bus", "sl2", apple2_cards, nullptr) MCFG_A2BUS_SLOT_ADD("a2bus", "sl3", apple2_cards, nullptr) MCFG_A2BUS_SLOT_ADD("a2bus", "sl4", apple2_cards, nullptr) MCFG_A2BUS_SLOT_ADD("a2bus", "sl5", apple2_cards, nullptr) MCFG_A2BUS_SLOT_ADD("a2bus", "sl6", apple2_cards, nullptr) MCFG_A2BUS_SLOT_ADD("a2bus", "sl7", apple2_cards, nullptr) MCFG_IWM_ADD("fdc", apple2_fdc_interface) /* SCC */ MCFG_SCC85C30_ADD(SCC_TAG, APPLE2GS_14M/2, 0, 0, 0, 0) MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(RS232A_TAG, rs232_port_device, write_txd)) MCFG_Z80SCC_OUT_TXDB_CB(DEVWRITELINE(RS232B_TAG, rs232_port_device, write_txd)) MCFG_RS232_PORT_ADD(RS232A_TAG, default_rs232_devices, nullptr) MCFG_RS232_RXD_HANDLER(DEVWRITELINE(SCC_TAG, z80scc_device, rxa_w)) MCFG_RS232_DCD_HANDLER(DEVWRITELINE(SCC_TAG, z80scc_device, dcda_w)) MCFG_RS232_CTS_HANDLER(DEVWRITELINE(SCC_TAG, z80scc_device, ctsa_w)) MCFG_RS232_PORT_ADD(RS232B_TAG, default_rs232_devices, nullptr) MCFG_RS232_RXD_HANDLER(DEVWRITELINE(SCC_TAG, z80scc_device, rxb_w)) MCFG_RS232_DCD_HANDLER(DEVWRITELINE(SCC_TAG, z80scc_device, dcdb_w)) MCFG_RS232_CTS_HANDLER(DEVWRITELINE(SCC_TAG, z80scc_device, ctsb_w)) 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 MACHINE_CONFIG_START(apple2gs_state::apple2gsr1) apple2gs(config); MCFG_MACHINE_START_OVERRIDE(apple2gs_state, apple2gsr1 ) #if RUN_ADB_MICRO MCFG_CPU_REPLACE(ADBMICRO_TAG, M50740, XTAL(3'579'545)) 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) // 341-0728 is the MASK rom version while 341-0737 is the EPROM version - SAME data. ROM_LOAD("341-0728", 0x00000, 0x20000, CRC(8d410067) SHA1(c0f4704233ead14cb8e1e8a68fbd7063c56afd27) ) /* 341-0728: IIgs ROM03 FC-FD */ // 341-0748 is the MASK rom version while 341-0749 is the EPROM version - SAME data. ROM_LOAD("341-0748", 0x30000, 0x10000, CRC(18190283) SHA1(c70576869deec92ca82c78438b1d5c686eac7480) ) /* 341-0748: IIgs ROM03 FE-FF */ ROM_CONTINUE ( 0x20000, 0x10000) /* high address line is inverted on PCB? */ 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", 0x00000, 0x20000, CRC(8d410067) SHA1(c0f4704233ead14cb8e1e8a68fbd7063c56afd27) ) /* 341-0728: IIgs ROM03 prototype FC-FD - 28 pin MASK rom */ 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(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) ROM_LOAD("342-0077-a", 0x0000, 0x20000, CRC(dfbdd97b) SHA1(ff0c245dd0732ec4413a934fd80efc2defd8a8e3) ) /* 342-0077-A: IIgs ROM00 */ 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 STATE INIT COMPANY FULLNAME */ COMP( 1989, apple2gs, 0, apple2, apple2gs, apple2gs, apple2gs_state, 0, "Apple Computer", "Apple IIgs (ROM03)", MACHINE_SUPPORTS_SAVE ) COMP( 198?, apple2gsr3p, apple2gs, 0, apple2gs, apple2gs, apple2gs_state, 0, "Apple Computer", "Apple IIgs (ROM03 prototype)", MACHINE_NOT_WORKING ) COMP( 1987, apple2gsr1, apple2gs, 0, apple2gsr1, apple2gs, apple2gs_state, 0, "Apple Computer", "Apple IIgs (ROM01)", MACHINE_SUPPORTS_SAVE ) COMP( 1986, apple2gsr0, apple2gs, 0, apple2gsr1, apple2gs, apple2gs_state, 0, "Apple Computer", "Apple IIgs (ROM00)", MACHINE_SUPPORTS_SAVE ) COMP( 1986, apple2gsr0p, apple2gs, 0, apple2gsr1, apple2gs, apple2gs_state, 0, "Apple Computer", "Apple IIgs (ROM00 prototype 6/19/1986)", MACHINE_SUPPORTS_SAVE ) COMP( 1986, apple2gsr0p2, apple2gs, 0, apple2gsr1, apple2gs, apple2gs_state, 0, "Apple Computer", "Apple IIgs (ROM00 prototype 3/10/1986)", MACHINE_SUPPORTS_SAVE )