/* * Mac Plus & 512ke emulation * * Nate Woods, Raphael Nabet * * * 0x000000 - 0x3fffff RAM/ROM (switches based on overlay) * 0x400000 - 0x4fffff ROM * 0x580000 - 0x5fffff 5380 NCR/Symbios SCSI peripherals chip (Mac Plus only) * 0x600000 - 0x6fffff RAM * 0x800000 - 0x9fffff Zilog 8530 SCC (Serial Control Chip) Read * 0xa00000 - 0xbfffff Zilog 8530 SCC (Serial Control Chip) Write * 0xc00000 - 0xdfffff IWM (Integrated Woz Machine; floppy) * 0xe80000 - 0xefffff Rockwell 6522 VIA * 0xf00000 - 0xffffef ??? (the ROM appears to be accessing here) * 0xfffff0 - 0xffffff Auto Vector * * * Interrupts: * M68K: * Level 1 from VIA * Level 2 from SCC * Level 4 : Interrupt switch (not implemented) * * VIA: * CA1 from VBLANK * CA2 from 1 Hz clock (RTC) * CB1 from Keyboard Clock * CB2 from Keyboard Data * SR from Keyboard Data Ready * * SCC: * PB_EXT from mouse Y circuitry * PA_EXT from mouse X circuitry * */ #include "driver.h" #include "inputx.h" #include "video/generic.h" #include "machine/6522via.h" #include "devices/sonydriv.h" #include "devices/harddriv.h" #include "includes/mac.h" #include "mslegacy.h" static ADDRESS_MAP_START(mac512ke_map, ADDRESS_SPACE_PROGRAM, 16) AM_RANGE(0x800000, 0x9fffff) AM_READ(mac_scc_r) AM_RANGE(0xa00000, 0xbfffff) AM_WRITE(mac_scc_w) AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE(mac_iwm_r, mac_iwm_w) AM_RANGE(0xe80000, 0xefffff) AM_READWRITE(mac_via_r, mac_via_w) AM_RANGE(0xfffff0, 0xffffff) AM_READWRITE(mac_autovector_r, mac_autovector_w) ADDRESS_MAP_END static ADDRESS_MAP_START(macplus_map, ADDRESS_SPACE_PROGRAM, 16) AM_RANGE(0x580000, 0x5fffff) AM_READWRITE(macplus_scsi_r, macplus_scsi_w) AM_RANGE(0x800000, 0x9fffff) AM_READ(mac_scc_r) AM_RANGE(0xa00000, 0xbfffff) AM_WRITE(mac_scc_w) AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE(mac_iwm_r, mac_iwm_w) AM_RANGE(0xe80000, 0xefffff) AM_READWRITE(mac_via_r, mac_via_w) AM_RANGE(0xfffff0, 0xffffff) AM_READWRITE(mac_autovector_r, mac_autovector_w) ADDRESS_MAP_END static struct CustomSound_interface custom_interface = { mac_sh_start }; static MACHINE_DRIVER_START( mac512ke ) /* basic machine hardware */ MDRV_CPU_ADD_TAG("main", M68000, 7833600) /* 7.8336 Mhz */ MDRV_CPU_PROGRAM_MAP(mac512ke_map, 0) MDRV_SCREEN_REFRESH_RATE(60.15) MDRV_SCREEN_VBLANK_TIME(USEC_TO_SUBSECONDS(1260)) MDRV_INTERLEAVE(1) MDRV_MACHINE_RESET( mac ) /* video hardware */ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_UPDATE_BEFORE_VBLANK) MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) MDRV_SCREEN_SIZE(MAC_H_TOTAL, MAC_V_TOTAL) MDRV_SCREEN_VISIBLE_AREA(0, MAC_H_VIS-1, 0, MAC_V_VIS-1) MDRV_PALETTE_LENGTH(2) MDRV_COLORTABLE_LENGTH(2) MDRV_PALETTE_INIT(mac) MDRV_VIDEO_START(mac) MDRV_VIDEO_UPDATE(mac) /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SOUND_ADD(CUSTOM, 0) MDRV_SOUND_CONFIG(custom_interface) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) MDRV_NVRAM_HANDLER(mac) MACHINE_DRIVER_END static MACHINE_DRIVER_START( macplus ) MDRV_IMPORT_FROM( mac512ke ) MDRV_CPU_MODIFY( "main" ) MDRV_CPU_PROGRAM_MAP(macplus_map, 0) MACHINE_DRIVER_END INPUT_PORTS_START( macplus ) PORT_START /* 0: Mouse - button */ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_NAME("Mouse Button") PORT_CODE(MOUSECODE_BUTTON1) PORT_START /* 1: Mouse - X AXIS */ PORT_BIT( 0xff, 0x00, IPT_MOUSE_X) PORT_SENSITIVITY(100) PORT_KEYDELTA(0) PORT_PLAYER(1) PORT_START /* 2: Mouse - Y AXIS */ PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y) PORT_SENSITIVITY(100) PORT_KEYDELTA(0) PORT_PLAYER(1) /* R Nabet 000531 : pseudo-input ports with keyboard layout */ /* we only define US layout for keyboard - international layout is different! */ /* note : 16 bits at most per port! */ /* main keyboard pad */ PORT_START /* 3 */ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_UNUSED) /* extra key on ISO : */ PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') PORT_START /* 4 */ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("T") PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@') PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^') PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("=") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+') PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(') PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&') PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_') PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*') PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')') PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("]") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}') PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') PORT_START /* 5 */ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("[") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER) PORT_CHAR('\r') PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("'") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('\"') PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(";") PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':') PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("\\") PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|') PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(",") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("/") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(".") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') PORT_START /* 6 */ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t') PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("`") PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`') PORT_CHAR('~') PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR('\010') PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_UNUSED) /* keyboard Enter : */ PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_UNUSED) /* escape: */ PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_UNUSED) /* ??? */ PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Command") PORT_CODE(KEYCODE_LCONTROL) PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1) PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Caps Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Option") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_SHIFT_2) PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_UNUSED) /* Control: */ PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_UNUSED) /* keypad pseudo-keycode */ PORT_BIT( 0xE000, IP_ACTIVE_HIGH, IPT_UNUSED) /* ??? */ /* keypad */ PORT_START /* 7 */ PORT_BIT (0x0001, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(". (KP)") PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD)) PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("* (KP)") PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK)) PORT_BIT (0x0038, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("+ (KP)") PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD)) PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Clear (KP)") PORT_CODE(/*KEYCODE_NUMLOCK*/KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL)) PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("= (KP)") PORT_CODE(/*CODE_OTHER*/KEYCODE_NUMLOCK) PORT_CHAR(UCHAR_MAMEKEY(NUMLOCK)) PORT_BIT (0x0E00, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Enter (KP)") PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD)) PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("/ (KP)") PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD)) PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("- (KP)") PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) PORT_BIT (0x8000, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_START /* 8 */ PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("0 (KP)") PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD)) PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("1 (KP)") PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("2 (KP)") PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD)) PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("3 (KP)") PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD)) PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("4 (KP)") PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD)) PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("5 (KP)") PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD)) PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("6 (KP)") PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD)) PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("7 (KP)") PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD)) PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("8 (KP)") PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("9 (KP)") PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD)) PORT_BIT( 0xE000, IP_ACTIVE_HIGH, IPT_UNUSED) /* Arrow keys */ PORT_START /* 9 */ PORT_BIT( 0x0003, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Right Arrow") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_BIT( 0x0038, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Left Arrow") PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Down Arrow") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_BIT( 0x1E00, IP_ACTIVE_HIGH, IPT_UNUSED) PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Up Arrow") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) PORT_BIT( 0xC000, IP_ACTIVE_HIGH, IPT_UNUSED) INPUT_PORTS_END /*************************************************************************** Game driver(s) The Mac driver uses a convention of placing the BIOS in REGION_USER1 ***************************************************************************/ ROM_START( mac128k ) ROM_REGION16_BE(0x20000, REGION_USER1, 0) ROM_LOAD16_WORD( "mac128k.rom", 0x00000, 0x10000, CRC(6d0c8a28) SHA1(9d86c883aa09f7ef5f086d9e32330ef85f1bc93b) ) ROM_END ROM_START( mac512k ) ROM_REGION16_BE(0x20000, REGION_USER1, 0) ROM_LOAD16_WORD( "mac512k.rom", 0x00000, 0x10000, CRC(cf759e0d) SHA1(5b1ced181b74cecd3834c49c2a4aa1d7ffe944d7) ) ROM_END ROM_START( mac512ke ) ROM_REGION16_BE(0x20000, REGION_USER1, 0) ROM_LOAD16_WORD( "macplus.rom", 0x00000, 0x20000, CRC(b2102e8e) SHA1(7d2f808a045aa3a1b242764f0e2c7d13e288bf1f)) ROM_END ROM_START( macplus ) ROM_REGION16_BE(0x20000, REGION_USER1, 0) ROM_LOAD16_WORD( "macplus.rom", 0x00000, 0x20000, CRC(b2102e8e) SHA1(7d2f808a045aa3a1b242764f0e2c7d13e288bf1f)) ROM_END ROM_START( macse ) ROM_REGION16_BE(0x40000, REGION_USER1, 0) ROM_LOAD16_WORD( "macse.rom", 0x00000, 0x40000, CRC(0f7ff80c) SHA1(58532b7d0d49659fd5228ac334a1b094f0241968)) ROM_END ROM_START( macclasc ) ROM_REGION16_BE(0x40000, REGION_USER1, 0) ROM_LOAD16_WORD( "classic.rom", 0x00000, 0x40000, CRC(b14ddcde) SHA1(f710e73e8e0f99d9d0e9e79e71f67a6c3648bf06) ) ROM_END static void mac128512_floppy_getinfo(const device_class *devclass, UINT32 state, union devinfo *info) { /* floppy */ switch(state) { /* --- the following bits of info are returned as 64-bit signed integers --- */ case DEVINFO_INT_SONYDRIV_ALLOWABLE_SIZES: info->i = SONY_FLOPPY_ALLOW400K; break; default: sonydriv_device_getinfo(devclass, state, info); break; } } static void mac_floppy_getinfo(const device_class *devclass, UINT32 state, union devinfo *info) { /* floppy */ switch(state) { /* --- the following bits of info are returned as 64-bit signed integers --- */ case DEVINFO_INT_SONYDRIV_ALLOWABLE_SIZES: info->i = SONY_FLOPPY_ALLOW400K | SONY_FLOPPY_ALLOW800K; break; default: sonydriv_device_getinfo(devclass, state, info); break; } } static void mac_harddisk_getinfo(const device_class *devclass, UINT32 state, union devinfo *info) { /* harddisk */ switch(state) { /* --- the following bits of info are returned as 64-bit signed integers --- */ case DEVINFO_INT_COUNT: info->i = 2; break; default: harddisk_device_getinfo(devclass, state, info); break; } } SYSTEM_CONFIG_START(mac128k) CONFIG_DEVICE(mac128512_floppy_getinfo) CONFIG_RAM_DEFAULT(0x020000) SYSTEM_CONFIG_END SYSTEM_CONFIG_START(mac512k) CONFIG_DEVICE(mac128512_floppy_getinfo) CONFIG_RAM_DEFAULT(0x080000) SYSTEM_CONFIG_END SYSTEM_CONFIG_START(macplus) CONFIG_DEVICE(mac_floppy_getinfo) CONFIG_DEVICE(mac_harddisk_getinfo) CONFIG_RAM (0x080000) CONFIG_RAM_DEFAULT (0x100000) CONFIG_RAM (0x200000) CONFIG_RAM (0x280000) CONFIG_RAM (0x400000) SYSTEM_CONFIG_END SYSTEM_CONFIG_START(macse) CONFIG_DEVICE(mac_floppy_getinfo) CONFIG_DEVICE(mac_harddisk_getinfo) CONFIG_RAM_DEFAULT (0x100000) CONFIG_RAM (0x200000) CONFIG_RAM (0x280000) CONFIG_RAM (0x400000) SYSTEM_CONFIG_END /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT CONFIG COMPANY FULLNAME */ COMP( 1984, mac128k, 0, 0, mac512ke, macplus, mac128k512k, mac128k, "Apple Computer", "Macintosh 128k", GAME_NOT_WORKING ) COMP( 1984, mac512k, mac128k, 0, mac512ke, macplus, mac128k512k, mac512k, "Apple Computer", "Macintosh 512k", GAME_NOT_WORKING ) COMP( 1986, mac512ke, macplus, 0, mac512ke, macplus, mac512ke, mac512k, "Apple Computer", "Macintosh 512ke", 0 ) COMP( 1986, macplus, 0, 0, macplus, macplus, macplus, macplus, "Apple Computer", "Macintosh Plus", 0 ) COMP( 1987, macse, 0, 0, macplus, macplus, macse, macse, "Apple Computer", "Macintosh SE", GAME_NOT_WORKING ) COMP( 1990, macclasc, 0, 0, macplus, macplus, macclassic, macse, "Apple Computer", "Macintosh Classic", GAME_NOT_WORKING ) /* ----------------------------------------------------------------------- */ #if 0 /* Early Mac2 driver - does not work at all, but enabled me to disassemble the ROMs */ static ADDRESS_MAP_START (mac2_mem, ADDRESS_SPACE_PROGRAM, 16) AM_RANGE( 0x00000000, 0x007fffff) AM_RAM AM_RANGE( 0x00800000, 0x008fffff) AM_ROM AM_RANGE( 0x00900000, 0x00ffffff) AM_NOP ADDRESS_MAP_END static void mac2_init_machine( void ) { memset(memory_region(REGION_CPU1), 0, 0x800000); } static struct MachineDriver machine_driver_mac2 = { /* basic machine hardware */ { { CPU_M68020, 16000000, /* +/- 16 Mhz */ mac2_mem,0,0,0, 0,0, } }, 60, DEFAULT_REAL_60HZ_VBLANK_DURATION, /* frames per second, vblank duration */ 1, mac2_init_machine, 0, /* video hardware */ 640, 480, /* screen width, screen height */ { 0, 640-1, 0, 480-1 }, /* visible_area */ 0, /* graphics decode info */ 2, 2, /* number of colors, colortable size */ mac_init_palette, /* convert color prom */ VIDEO_TYPE_RASTER | VIDEO_UPDATE_BEFORE_VBLANK, 0, mac_vh_start, mac_vh_stop, mac_vh_screenrefresh, /* sound hardware */ 0,0,0,0, { }, mac_nvram_handler }; //#define input_ports_mac2 NULL INPUT_PORTS_START( mac2 ) INPUT_PORTS_END ROM_START( mac2 ) ROM_REGION(0x00900000,REGION_CPU1,0) /* for ram, etc */ ROM_LOAD_WIDE( "256k.rom", 0x800000, 0x40000, NO_DUMP) ROM_END COMPX( 1987, mac2, 0, mac2, mac2, 0/*mac2*/, "Apple Computer", "Macintosh II", GAME_NOT_WORKING ) #endif