src/mess/machine/mac.c
| r9473 | r9474 | |
| 63 | 63 | - What on earth are 0x700000-0x7fffff mapped to ? |
| 64 | 64 | |
| 65 | 65 | Egret version spotting: |
| 66 | | 341S0417 - 0x???? - Color Classic |
| 67 | | 341S0850 - 0x???? - LC, LC II |
| 68 | | 341S0851 - 0x0101 - Classic II, IIsi, IIvx, LC III (probably also IIvi?) |
| 66 | 341S0417 - 0x???? (?.??) - Color Classic |
| 67 | 341S0850 - 0x???? (?.??) - LC, LC II |
| 68 | 341S0851 - 0x0101 (1.01) - Classic II, IIsi, IIvx, LC III (probably also IIvi?) |
| 69 | 69 | |
| 70 | 70 | Cuda version spotting: |
| 71 | 71 | 341S0060 - 0x00020028 (2.40) - Performa/Quadra 6xx, PMac 6200, x400, some x500, Pippin, Gossamer G3, others? |
| r9473 | r9474 | |
| 74 | 74 | 341S0788 - 0x00020025 (2.37) - LC 475/575/Quadra 605, Quadra 660AV/840AV, PMac 7200 |
| 75 | 75 | 343S0788 - 0x???????? (?.??) - PMac x100 (typo - actually 341S0788?) |
| 76 | 76 | |
| 77 | Caboose version spotting: |
| 78 | 341S0853 - 0x0100 (1.00) - Quadra 950 |
| 77 | 79 | |
| 78 | 80 | ****************************************************************************/ |
| 79 | 81 | |
| r9473 | r9474 | |
| 457 | 459 | } |
| 458 | 460 | } |
| 459 | 461 | |
| 460 | | static void set_memory_overlay(running_machine *machine, int overlay) |
| 462 | void mac_set_memory_overlay(running_machine *machine, int overlay) |
| 461 | 463 | { |
| 462 | 464 | offs_t memory_size; |
| 463 | 465 | UINT8 *memory_data; |
| r9473 | r9474 | |
| 486 | 488 | } |
| 487 | 489 | |
| 488 | 490 | /* install the memory */ |
| 489 | | if (((mac->model >= MODEL_MAC_LC) && (mac->model <= MODEL_MAC_COLOR_CLASSIC) && (mac->model != MODEL_MAC_LC_III)) || (mac->model == MODEL_MAC_CLASSIC_II)) |
| 491 | if (((mac->model >= MODEL_MAC_LC) && (mac->model <= MODEL_MAC_COLOR_CLASSIC) && ((mac->model != MODEL_MAC_LC_III) && (mac->model != MODEL_MAC_LC_III_PLUS))) || (mac->model == MODEL_MAC_CLASSIC_II)) |
| 490 | 492 | { |
| 491 | 493 | mac->overlay = overlay; |
| 492 | 494 | mac_v8_resize(machine, mac); |
| 493 | 495 | } |
| 494 | | else if (mac->model == MODEL_MAC_POWERMAC_6100) |
| 496 | else if ((mac->model >= MODEL_MAC_POWERMAC_6100) && (mac->model >= MODEL_MAC_POWERMAC_8100)) |
| 495 | 497 | { |
| 496 | | mac_install_memory(machine, 0x00000000, memory_size-1, memory_size, memory_data, is_rom, "bank1"); |
| 498 | // mac_install_memory(machine, 0x00000000, memory_size-1, memory_size, memory_data, is_rom, "bank1"); |
| 497 | 499 | } |
| 498 | 500 | else if ((mac->model == MODEL_MAC_IICI) || (mac->model == MODEL_MAC_IISI)) |
| 499 | 501 | { |
| r9473 | r9474 | |
| 515 | 517 | { |
| 516 | 518 | mac_install_memory(machine, 0x00000000, 0x3fffffff, memory_size, memory_data, is_rom, "bank1"); |
| 517 | 519 | } |
| 518 | | else if (mac->model == MODEL_MAC_LC_III) // up to 36 MB |
| 520 | else if ((mac->model == MODEL_MAC_LC_III) || (mac->model == MODEL_MAC_LC_III_PLUS)) // up to 36 MB |
| 519 | 521 | { |
| 520 | 522 | mac_install_memory(machine, 0x00000000, memory_size-1, memory_size, memory_data, is_rom, "bank1"); |
| 521 | 523 | } |
| r9473 | r9474 | |
| 527 | 529 | mac->overlay = overlay; |
| 528 | 530 | |
| 529 | 531 | if (LOG_GENERAL) |
| 530 | | logerror("set_memory_overlay: overlay=%i\n", overlay); |
| 532 | logerror("mac_set_memory_overlay: overlay=%i\n", overlay); |
| 531 | 533 | } |
| 532 | 534 | } |
| 533 | 535 | |
| r9473 | r9474 | |
| 2626 | 2628 | case MODEL_MAC_II_FDHD: |
| 2627 | 2629 | case MODEL_MAC_IIX: |
| 2628 | 2630 | case MODEL_MAC_POWERMAC_6100: |
| 2631 | case MODEL_MAC_POWERMAC_7100: |
| 2632 | case MODEL_MAC_POWERMAC_8100: |
| 2629 | 2633 | return 0x81; // bit 0 must be set on most Macs to avoid attempting to boot from AppleTalk |
| 2630 | 2634 | |
| 2631 | 2635 | case MODEL_MAC_SE30: |
| r9473 | r9474 | |
| 2757 | 2761 | * first access to the ROM. */ |
| 2758 | 2762 | if (mac->model < MODEL_MAC_SE) |
| 2759 | 2763 | { |
| 2760 | | set_memory_overlay(device->machine, (data & 0x10) >> 4); |
| 2764 | mac_set_memory_overlay(device->machine, (data & 0x10) >> 4); |
| 2761 | 2765 | } |
| 2762 | 2766 | } |
| 2763 | 2767 | |
| r9473 | r9474 | |
| 3058 | 3062 | if (mac->model < MODEL_MAC_POWERMAC_6100) // no overlay for PowerPC |
| 3059 | 3063 | { |
| 3060 | 3064 | mac->overlay = -1; // insure no match |
| 3061 | | set_memory_overlay(machine, 1); |
| 3065 | mac_set_memory_overlay(machine, 1); |
| 3062 | 3066 | } |
| 3063 | 3067 | |
| 3064 | 3068 | /* setup videoram */ |
| r9473 | r9474 | |
| 3129 | 3133 | |
| 3130 | 3134 | overlay = mac->overlay; |
| 3131 | 3135 | mac->overlay = -1; |
| 3132 | | set_memory_overlay(machine, overlay); |
| 3136 | mac_set_memory_overlay(machine, overlay); |
| 3133 | 3137 | } |
| 3134 | 3138 | |
| 3135 | 3139 | |
| r9473 | r9474 | |
| 3143 | 3147 | { |
| 3144 | 3148 | if ((address >= 0x900000) && (address <= 0x9fffff)) |
| 3145 | 3149 | { |
| 3146 | | set_memory_overlay(machine, 0); // kill the overlay |
| 3150 | mac_set_memory_overlay(machine, 0); // kill the overlay |
| 3147 | 3151 | } |
| 3148 | 3152 | } |
| 3149 | 3153 | else if ((mac->model == MODEL_MAC_SE) || (mac->model == MODEL_MAC_CLASSIC)) |
| 3150 | 3154 | { |
| 3151 | 3155 | if ((address >= 0x400000) && (address <= 0x4fffff)) |
| 3152 | 3156 | { |
| 3153 | | set_memory_overlay(machine, 0); // kill the overlay |
| 3157 | mac_set_memory_overlay(machine, 0); // kill the overlay |
| 3154 | 3158 | } |
| 3155 | 3159 | } |
| 3156 | 3160 | else if ((mac->model == MODEL_MAC_LC) || (mac->model == MODEL_MAC_LC_II) || (mac->model == MODEL_MAC_CLASSIC_II)) |
| 3157 | 3161 | { |
| 3158 | 3162 | if ((address >= 0xa00000) && (address <= 0xafffff)) |
| 3159 | 3163 | { |
| 3160 | | set_memory_overlay(machine, 0); // kill the overlay |
| 3164 | mac_set_memory_overlay(machine, 0); // kill the overlay |
| 3161 | 3165 | } |
| 3162 | 3166 | } |
| 3163 | 3167 | else |
| 3164 | 3168 | { |
| 3165 | 3169 | if ((address >= 0x40000000) && (address <= 0x4fffffff)) |
| 3166 | 3170 | { |
| 3167 | | set_memory_overlay(machine, 0); // kill the overlay |
| 3171 | mac_set_memory_overlay(machine, 0); // kill the overlay |
| 3168 | 3172 | } |
| 3169 | 3173 | } |
| 3170 | 3174 | } |
| r9473 | r9474 | |
| 3194 | 3198 | } |
| 3195 | 3199 | |
| 3196 | 3200 | mac->overlay = -1; |
| 3197 | | set_memory_overlay(machine, 1); |
| 3201 | mac_set_memory_overlay(machine, 1); |
| 3198 | 3202 | |
| 3199 | 3203 | memset(messram_get_ptr(machine->device("messram")), 0, messram_get_size(machine->device("messram"))); |
| 3200 | 3204 | |
| 3201 | 3205 | if ((model == MODEL_MAC_SE) || (model == MODEL_MAC_CLASSIC) || (model == MODEL_MAC_CLASSIC_II) || (model == MODEL_MAC_LC) || |
| 3202 | | (model == MODEL_MAC_LC_II) || (model == MODEL_MAC_LC_III) || ((mac->model >= MODEL_MAC_II) && (mac->model <= MODEL_MAC_SE30)) || |
| 3206 | (model == MODEL_MAC_LC_II) || (model == MODEL_MAC_LC_III) || (model == MODEL_MAC_LC_III_PLUS) || ((mac->model >= MODEL_MAC_II) && (mac->model <= MODEL_MAC_SE30)) || |
| 3203 | 3207 | (model == MODEL_MAC_PORTABLE) || (model == MODEL_MAC_PB100)) |
| 3204 | 3208 | { |
| 3205 | 3209 | cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM)->set_direct_update_handler(direct_update_delegate_create_static(overlay_opbaseoverride, *machine)); |
| r9473 | r9474 | |
| 3229 | 3233 | MAC_DRIVER_INIT(maclc, MODEL_MAC_LC) |
| 3230 | 3234 | MAC_DRIVER_INIT(maclc2, MODEL_MAC_LC_II) |
| 3231 | 3235 | MAC_DRIVER_INIT(maclc3, MODEL_MAC_LC_III) |
| 3236 | MAC_DRIVER_INIT(maclc3plus, MODEL_MAC_LC_III_PLUS) |
| 3232 | 3237 | MAC_DRIVER_INIT(maciici, MODEL_MAC_IICI) |
| 3233 | 3238 | MAC_DRIVER_INIT(maciisi, MODEL_MAC_IISI) |
| 3234 | 3239 | MAC_DRIVER_INIT(macii, MODEL_MAC_II) |
| r9473 | r9474 | |
| 3236 | 3241 | MAC_DRIVER_INIT(macclassic2, MODEL_MAC_CLASSIC_II) |
| 3237 | 3242 | MAC_DRIVER_INIT(maclrcclassic, MODEL_MAC_COLOR_CLASSIC) |
| 3238 | 3243 | MAC_DRIVER_INIT(macpm6100, MODEL_MAC_POWERMAC_6100) |
| 3244 | MAC_DRIVER_INIT(macpm7100, MODEL_MAC_POWERMAC_7100) |
| 3245 | MAC_DRIVER_INIT(macpm8100, MODEL_MAC_POWERMAC_8100) |
| 3239 | 3246 | MAC_DRIVER_INIT(macprtb, MODEL_MAC_PORTABLE) |
| 3240 | 3247 | MAC_DRIVER_INIT(macpb100, MODEL_MAC_PB100) |
| 3241 | 3248 | |
src/mess/drivers/mac.c
| r9473 | r9474 | |
| 39 | 39 | #include "emu.h" |
| 40 | 40 | #include "cpu/m68000/m68000.h" |
| 41 | 41 | #include "cpu/powerpc/ppc.h" |
| 42 | #include "cpu/m6805/m6805.h" |
| 42 | 43 | #include "includes/mac.h" |
| 43 | 44 | #include "machine/6522via.h" |
| 44 | 45 | #include "machine/ncr5380.h" |
| r9473 | r9474 | |
| 326 | 327 | } |
| 327 | 328 | } |
| 328 | 329 | |
| 329 | | static READ32_HANDLER(mac_lc3_id) |
| 330 | static READ32_HANDLER(mac_read_id) |
| 330 | 331 | { |
| 331 | | // printf("Sonora ID register read, PC=%x\n", cpu_get_pc(space->cpu)); |
| 332 | mac_state *mac = space->machine->driver_data<mac_state>(); |
| 332 | 333 | |
| 333 | | return 0xa55a0001; // 25 MHz LC III |
| 334 | logerror("Mac read ID reg @ PC=%x\n", cpu_get_pc(space->cpu)); |
| 335 | |
| 336 | switch (mac->model) |
| 337 | { |
| 338 | case MODEL_MAC_LC_III: |
| 339 | return 0xa55a0001; // 25 MHz LC III |
| 340 | |
| 341 | case MODEL_MAC_LC_III_PLUS: |
| 342 | return 0xa55a0003; // 33 MHz LC III+ |
| 343 | |
| 344 | case MODEL_MAC_POWERMAC_6100: |
| 345 | return 0xa55a3011; |
| 346 | |
| 347 | case MODEL_MAC_POWERMAC_7100: |
| 348 | return 0xa55a3012; |
| 349 | |
| 350 | case MODEL_MAC_POWERMAC_8100: |
| 351 | return 0xa55a3013; |
| 352 | |
| 353 | case MODEL_MAC_PBDUO_210: |
| 354 | return 0xa55a1004; |
| 355 | |
| 356 | case MODEL_MAC_PBDUO_230: |
| 357 | return 0xa55a1005; |
| 358 | |
| 359 | case MODEL_MAC_PBDUO_250: |
| 360 | return 0xa55a1006; |
| 361 | |
| 362 | default: |
| 363 | return 0; |
| 364 | } |
| 334 | 365 | } |
| 335 | 366 | |
| 336 | 367 | // Portable/PB100 video |
| r9473 | r9474 | |
| 443 | 474 | AM_RANGE(0x50026000, 0x50027fff) AM_READWRITE16(mac_rbv_r, mac_rbv_w, 0xffffffff) AM_MIRROR(0x00f00000) |
| 444 | 475 | AM_RANGE(0x50028000, 0x50028003) AM_READWRITE8(mac_sonora_vctl_r, mac_sonora_vctl_w, 0xffffffff) AM_MIRROR(0x00f00000) |
| 445 | 476 | |
| 446 | | AM_RANGE(0x5ffffffc, 0x5fffffff) AM_READ(mac_lc3_id) |
| 477 | AM_RANGE(0x5ffffffc, 0x5fffffff) AM_READ(mac_read_id) |
| 447 | 478 | |
| 448 | 479 | AM_RANGE(0x60000000, 0x600fffff) AM_RAM AM_MIRROR(0x0ff00000) AM_BASE_MEMBER(mac_state, rbv_vram) |
| 449 | 480 | ADDRESS_MAP_END |
| r9473 | r9474 | |
| 505 | 536 | ADDRESS_MAP_END |
| 506 | 537 | |
| 507 | 538 | static ADDRESS_MAP_START(pwrmac_map, ADDRESS_SPACE_PROGRAM, 64) |
| 539 | AM_RANGE(0x00000000, 0x007fffff) AM_RAM // 8 MB standard |
| 540 | |
| 508 | 541 | AM_RANGE(0x40000000, 0x403fffff) AM_ROM AM_REGION("bootrom", 0) AM_MIRROR(0x0fc00000) |
| 509 | 542 | |
| 510 | 543 | AM_RANGE(0x50000000, 0x50001fff) AM_READWRITE16(mac_via_r, mac_via_w, U64(0xffffffffffffffff)) AM_MIRROR(0x00f00000) |
| r9473 | r9474 | |
| 514 | 547 | AM_RANGE(0x50006060, 0x50006067) AM_READ32(macii_scsi_drq_r,U64(0xffffffffffffffff)) AM_MIRROR(0x00f00000) |
| 515 | 548 | AM_RANGE(0x50010000, 0x50011fff) AM_READWRITE16(macplus_scsi_r, macii_scsi_w, U64(0xffffffffffffffff)) AM_MIRROR(0x00f00000) |
| 516 | 549 | AM_RANGE(0x50012060, 0x50012067) AM_READ32(macii_scsi_drq_r,U64(0xffffffffffffffff)) AM_MIRROR(0x00f00000) |
| 517 | | AM_RANGE(0x50014000, 0x50015fff) AM_READWRITE8(mac_asc_r, mac_asc_w, U64(0xffffffffffffffff)) AM_MIRROR(0x00f00000) |
| 518 | 550 | AM_RANGE(0x50016000, 0x50017fff) AM_READWRITE16(mac_iwm_r, mac_iwm_w, U64(0xffffffffffffffff)) AM_MIRROR(0x00f00000) |
| 519 | 551 | |
| 552 | AM_RANGE(0x5ffffff8, 0x5fffffff) AM_READ32(mac_read_id, U64(0xffffffffffffffff)) |
| 553 | |
| 520 | 554 | AM_RANGE(0xffc00000, 0xffffffff) AM_ROM AM_REGION("bootrom", 0) |
| 521 | 555 | ADDRESS_MAP_END |
| 522 | 556 | |