src/mess/drivers/mac.c
| r8232 | r8233 | |
| 60 | 60 | |
| 61 | 61 | Registers: |
| 62 | 62 | 0x800: VERSION |
| 63 | | 0x801: MODE |
| 64 | | 0x802: CONTROL |
| 65 | | 0x803: FIFO MODE (bit 0 = half, bit 1 = full?) |
| 66 | | 0x804: FIFO IRQ STATUS |
| 67 | | 0x805: WAVETABLE CONTROL |
| 68 | | 0x806: VOLUME |
| 69 | | 0x807: CLOCK RATE (0 = 22 kHz) |
| 63 | 0x801: MODE (1=FIFO mode, 2=wavetable mode) |
| 64 | 0x802: CONTROL (bit 0=analog or PWM output, 1=stereo/mono, 7=processing time exceeded) |
| 65 | 0x803: FIFO MODE (bit 7=clear FIFO, bit 1="non-ROM companding", bit 0="ROM companding") |
| 66 | 0x804: FIFO IRQ STATUS (bit 0=ch A 1/2 full, 1=ch A full, 2=ch B 1/2 full, 3=ch B full) |
| 67 | 0x805: WAVETABLE CONTROL (bits 0-3 wavetables 0-3 start) |
| 68 | 0x806: VOLUME (bits 2-4 = 3 bit internal ASC volume, bits 5-7 = volume control sent to Sony sound chip) |
| 69 | 0x807: CLOCK RATE (0 = Mac 22257 Hz, 1 = undefined, 2 = 22050 Hz, 3 = 44100 Hz) |
| 70 | 70 | 0x80a: PLAY REC A |
| 71 | 0x80f: TEST (bits 6-7 = digital test, bits 4-5 = analog test) |
| 72 | 0x810: WAVETABLE 0 PHASE (big-endian, only 24 bits valid) |
| 73 | 0x814: WAVETABLE 0 INCREMENT (big-endian, only 24 bits valid) |
| 74 | 0x818: WAVETABLE 1 PHASE |
| 75 | 0x81C: WAVETABLE 1 INCREMENT |
| 76 | 0x820: WAVETABLE 2 PHASE |
| 77 | 0x824: WAVETABLE 2 INCREMENT |
| 78 | 0x828: WAVETABLE 3 PHASE |
| 79 | 0x82C: WAVETABLE 3 INCREMENT |
| 71 | 80 | |
| 72 | 81 | Should become it's own device. |
| 73 | 82 | */ |
| r8232 | r8233 | |
| 76 | 85 | { |
| 77 | 86 | mac_state *mac = (mac_state *)space->machine->driver_data; |
| 78 | 87 | |
| 79 | | // logerror("ASC: Read @ %x (PC %x)\n", offset, cpu_get_pc(devtag_get_device(space->machine, "maincpu"))); |
| 88 | // logerror("ASC: Read @ %x (PC %x)\n", offset, cpu_get_pc(devtag_get_device(space->machine, "maincpu"))); |
| 80 | 89 | |
| 81 | 90 | switch (offset) |
| 82 | 91 | { |
| r8232 | r8233 | |
| 96 | 105 | INT32 i; |
| 97 | 106 | mac_state *mac = (mac_state *)space->machine->driver_data; |
| 98 | 107 | |
| 99 | | // logerror("ASC: %02x to %x (PC %x)\n", data, offset, cpu_get_pc(devtag_get_device(space->machine, "maincpu"))); |
| 108 | // logerror("ASC: %02x to %x (PC %x)\n", data, offset, cpu_get_pc(devtag_get_device(space->machine, "maincpu"))); |
| 100 | 109 | |
| 101 | 110 | mac->mac_asc_regs[offset] = data; |
| 102 | 111 | |
| r8232 | r8233 | |
| 252 | 261 | int data, viaoffs; |
| 253 | 262 | running_device *via_1 = devtag_get_device(space->machine, "via6522_1"); |
| 254 | 263 | |
| 255 | | printf("v8_r: %x, mask %x (PC %x)\n", offset*2, mem_mask, cpu_get_pc(space->cpu)); |
| 264 | // printf("v8_r: %x, mask %x (PC %x)\n", offset*2, mem_mask, cpu_get_pc(space->cpu)); |
| 256 | 265 | |
| 257 | 266 | viaoffs = (offset >> 8) & 0x0f; |
| 258 | 267 | |
| r8232 | r8233 | |
| 274 | 283 | running_device *via_1 = devtag_get_device(space->machine, "via6522_1"); |
| 275 | 284 | int viaoffs; |
| 276 | 285 | |
| 277 | | printf("v8_w: %x to offset %x, mask %x (PC %x)\n", data, offset*2, mem_mask, cpu_get_pc(space->cpu)); |
| 286 | // printf("v8_w: %x to offset %x, mask %x (PC %x)\n", data, offset*2, mem_mask, cpu_get_pc(space->cpu)); |
| 278 | 287 | |
| 279 | 288 | viaoffs = (offset >> 8) & 0x0f; |
| 280 | 289 | |
| r8232 | r8233 | |
| 344 | 353 | int data, viaoffs; |
| 345 | 354 | running_device *via_1 = devtag_get_device(space->machine, "via6522_1"); |
| 346 | 355 | |
| 347 | | printf("sonora_r: %x, mask %x (PC %x)\n", offset*2, mem_mask, cpu_get_pc(space->cpu)); |
| 356 | // printf("sonora_r: %x, mask %x (PC %x)\n", offset*2, mem_mask, cpu_get_pc(space->cpu)); |
| 348 | 357 | |
| 349 | 358 | viaoffs = (offset >> 8) & 0x0f; |
| 350 | 359 | |
| r8232 | r8233 | |
| 366 | 375 | running_device *via_1 = devtag_get_device(space->machine, "via6522_1"); |
| 367 | 376 | int viaoffs; |
| 368 | 377 | |
| 369 | | printf("sonora_w: %x to offset %x, mask %x (PC %x)\n", data, offset*2, mem_mask, cpu_get_pc(space->cpu)); |
| 378 | // printf("sonora_w: %x to offset %x, mask %x (PC %x)\n", data, offset*2, mem_mask, cpu_get_pc(space->cpu)); |
| 370 | 379 | |
| 371 | 380 | viaoffs = (offset >> 8) & 0x0f; |
| 372 | 381 | |
| r8232 | r8233 | |
| 427 | 436 | |
| 428 | 437 | static READ32_HANDLER(mac_lc3_id) |
| 429 | 438 | { |
| 430 | | printf("Sonora ID register read, PC=%x\n", cpu_get_pc(space->cpu)); |
| 439 | // printf("Sonora ID register read, PC=%x\n", cpu_get_pc(space->cpu)); |
| 431 | 440 | |
| 432 | 441 | return 0xa55a0001; // 25 MHz LC III |
| 433 | 442 | } |
| r8232 | r8233 | |
| 680 | 689 | MDRV_IWM_ADD("fdc", mac_iwm_interface) |
| 681 | 690 | MDRV_FLOPPY_SONY_2_DRIVES_ADD(mac128512_floppy_config) |
| 682 | 691 | |
| 683 | | MDRV_SCC8530_ADD("scc") |
| 692 | MDRV_SCC8530_ADD("scc", 7833600) |
| 684 | 693 | MDRV_SCC8530_IRQ(mac_scc_irq) |
| 685 | 694 | MDRV_VIA6522_ADD("via6522_0", 1000000, mac_via6522_intf) |
| 686 | 695 | |
| r8232 | r8233 | |
| 802 | 811 | MDRV_IWM_ADD("fdc", mac_iwm_interface) |
| 803 | 812 | MDRV_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_config) |
| 804 | 813 | |
| 805 | | MDRV_SCC8530_ADD("scc") |
| 814 | MDRV_SCC8530_ADD("scc", 7833600) |
| 806 | 815 | MDRV_SCC8530_IRQ(mac_scc_irq) |
| 807 | 816 | MDRV_VIA6522_ADD("via6522_0", 1000000, mac_via6522_intf) |
| 808 | 817 | |
| r8232 | r8233 | |
| 914 | 923 | MDRV_IWM_ADD("fdc", mac_iwm_interface) |
| 915 | 924 | MDRV_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_config) |
| 916 | 925 | |
| 917 | | MDRV_SCC8530_ADD("scc") |
| 926 | MDRV_SCC8530_ADD("scc", 7833600) |
| 918 | 927 | MDRV_SCC8530_IRQ(mac_scc_irq) |
| 919 | 928 | MDRV_VIA6522_ADD("via6522_0", 1000000, mac_via6522_intf) |
| 920 | 929 | |
| r8232 | r8233 | |
| 1017 | 1026 | MDRV_IWM_ADD("fdc", mac_iwm_interface) |
| 1018 | 1027 | MDRV_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_config) |
| 1019 | 1028 | |
| 1020 | | MDRV_SCC8530_ADD("scc") |
| 1029 | MDRV_SCC8530_ADD("scc", 7833600) |
| 1021 | 1030 | MDRV_SCC8530_IRQ(mac_scc_irq) |
| 1022 | 1031 | MDRV_VIA6522_ADD("via6522_0", 1000000, mac_via6522_intf) |
| 1023 | 1032 | |