trunk/src/mame/machine/amiga.c
| r32814 | r32815 | |
| 134 | 134 | |
| 135 | 135 | /************************************* |
| 136 | 136 | * |
| 137 | | * Chipmem 16/32 bit access |
| 138 | | * |
| 139 | | *************************************/ |
| 140 | | |
| 141 | | static UINT16 amiga_chip_ram16_r(amiga_state *state, offs_t offset) |
| 142 | | { |
| 143 | | // logerror("chip ram read %08x\n", offset); |
| 144 | | return (offset < state->m_chip_ram.bytes()) ? state->m_chip_ram[offset/2] : 0xffff; |
| 145 | | } |
| 146 | | |
| 147 | | static UINT16 amiga_chip_ram32_r(amiga_state *state, offs_t offset) |
| 148 | | { |
| 149 | | if (offset < state->m_chip_ram.bytes()) |
| 150 | | { |
| 151 | | UINT32 *amiga_chip_ram32 = reinterpret_cast<UINT32 *>(state->m_chip_ram.target()); |
| 152 | | UINT32 dat = amiga_chip_ram32[offset / 4]; |
| 153 | | |
| 154 | | if ( offset & 2 ) |
| 155 | | return (dat & 0xffff); |
| 156 | | |
| 157 | | return (dat >> 16); |
| 158 | | } |
| 159 | | |
| 160 | | return 0xffff; |
| 161 | | } |
| 162 | | |
| 163 | | static void amiga_chip_ram16_w(amiga_state *state, offs_t offset, UINT16 data) |
| 164 | | { |
| 165 | | if (offset < state->m_chip_ram.bytes()) |
| 166 | | state->m_chip_ram[offset/2] = data; |
| 167 | | } |
| 168 | | |
| 169 | | static void amiga_chip_ram32_w(amiga_state *state, offs_t offset, UINT16 data) |
| 170 | | { |
| 171 | | if (offset < state->m_chip_ram.bytes()) |
| 172 | | { |
| 173 | | UINT32 *amiga_chip_ram32 = reinterpret_cast<UINT32 *>(state->m_chip_ram.target()); |
| 174 | | UINT32 dat = amiga_chip_ram32[offset / 4]; |
| 175 | | |
| 176 | | if ( offset & 2 ) |
| 177 | | { |
| 178 | | dat &= 0xffff0000; |
| 179 | | dat |= data; |
| 180 | | } |
| 181 | | else |
| 182 | | { |
| 183 | | dat &= 0x0000ffff; |
| 184 | | dat |= ((UINT32)data) << 16; |
| 185 | | } |
| 186 | | |
| 187 | | amiga_chip_ram32[offset / 4] = dat; |
| 188 | | } |
| 189 | | } |
| 190 | | |
| 191 | | |
| 192 | | void amiga_chip_ram_w8(amiga_state *state, offs_t offset, UINT8 data) |
| 193 | | { |
| 194 | | UINT16 dat; |
| 195 | | |
| 196 | | dat = (*state->m_chip_ram_r)(state, offset); |
| 197 | | if (offset & 0x01) |
| 198 | | { |
| 199 | | dat &= 0xff00; |
| 200 | | dat |= data; |
| 201 | | } |
| 202 | | else |
| 203 | | { |
| 204 | | dat &= 0x00ff; |
| 205 | | dat |= ((UINT16)data) << 8; |
| 206 | | } |
| 207 | | (*state->m_chip_ram_w)(state, offset, dat); |
| 208 | | } |
| 209 | | |
| 210 | | |
| 211 | | |
| 212 | | /************************************* |
| 213 | | * |
| 214 | 137 | * Machine reset |
| 215 | 138 | * |
| 216 | 139 | *************************************/ |
| r32814 | r32815 | |
| 220 | 143 | // add callback for RESET instruction |
| 221 | 144 | m_maincpu->set_reset_callback(write_line_delegate(FUNC(amiga_state::m68k_reset), this)); |
| 222 | 145 | |
| 223 | | switch (m_maincpu->space(AS_PROGRAM).data_width()) |
| 224 | | { |
| 225 | | case 16: |
| 226 | | m_chip_ram_r = amiga_chip_ram16_r; |
| 227 | | m_chip_ram_w = amiga_chip_ram16_w; |
| 228 | | break; |
| 229 | | case 32: |
| 230 | | m_chip_ram_r = amiga_chip_ram32_r; |
| 231 | | m_chip_ram_w = amiga_chip_ram32_w; |
| 232 | | break; |
| 233 | | default: |
| 234 | | fatalerror("Invalid data bus width\n"); |
| 235 | | } |
| 146 | // set up chip RAM access |
| 147 | memory_share *share = memshare("chip_ram"); |
| 148 | if (share == NULL) |
| 149 | fatalerror("Unable to find Amiga chip RAM\n"); |
| 150 | m_chip_ram.set(*share, 2); |
| 151 | m_chip_ram_mask = (m_chip_ram.bytes() - 1) & ~1; |
| 236 | 152 | |
| 237 | | m_chip_ram_mask = m_chip_ram.mask() & ~1; |
| 238 | | m_chip_ram_mirror = ~m_chip_ram.mask() & 0x1fffff; |
| 239 | | |
| 240 | | // setup the timers |
| 153 | // set up the timers |
| 241 | 154 | m_irq_timer = timer_alloc(TIMER_AMIGA_IRQ); |
| 242 | 155 | m_blitter_timer = timer_alloc(TIMER_AMIGA_BLITTER); |
| 243 | 156 | m_serial_timer = timer_alloc(TIMER_SERIAL); |
| r32814 | r32815 | |
| 536 | 449 | if (CUSTOM_REG(REG_BLTCON0) & 0x0800) |
| 537 | 450 | { |
| 538 | 451 | //CUSTOM_REG(REG_BLTADAT) = state->m_maincpu->space(AS_PROGRAM).read_word(CUSTOM_REG_LONG(REG_BLTAPTH)); |
| 539 | | CUSTOM_REG(REG_BLTADAT) = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_BLTAPTH)); |
| 452 | CUSTOM_REG(REG_BLTADAT) = state->chip_ram_r(CUSTOM_REG_LONG(REG_BLTAPTH)); |
| 540 | 453 | CUSTOM_REG_LONG(REG_BLTAPTH) += 2; |
| 541 | 454 | } |
| 542 | 455 | |
| 543 | 456 | /* fetch data for B */ |
| 544 | 457 | if (CUSTOM_REG(REG_BLTCON0) & 0x0400) |
| 545 | 458 | { |
| 546 | | CUSTOM_REG(REG_BLTBDAT) = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_BLTBPTH)); |
| 459 | CUSTOM_REG(REG_BLTBDAT) = state->chip_ram_r(CUSTOM_REG_LONG(REG_BLTBPTH)); |
| 547 | 460 | CUSTOM_REG_LONG(REG_BLTBPTH) += 2; |
| 548 | 461 | } |
| 549 | 462 | |
| 550 | 463 | /* fetch data for C */ |
| 551 | 464 | if (CUSTOM_REG(REG_BLTCON0) & 0x0200) |
| 552 | 465 | { |
| 553 | | CUSTOM_REG(REG_BLTCDAT) = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_BLTCPTH)); |
| 466 | CUSTOM_REG(REG_BLTCDAT) = state->chip_ram_r(CUSTOM_REG_LONG(REG_BLTCPTH)); |
| 554 | 467 | CUSTOM_REG_LONG(REG_BLTCPTH) += 2; |
| 555 | 468 | } |
| 556 | 469 | |
| r32814 | r32815 | |
| 606 | 519 | /* write to the destination */ |
| 607 | 520 | if (CUSTOM_REG(REG_BLTCON0) & 0x0100) |
| 608 | 521 | { |
| 609 | | (*state->m_chip_ram_w)(state, CUSTOM_REG_LONG(REG_BLTDPTH), tempd); |
| 522 | state->chip_ram_w(CUSTOM_REG_LONG(REG_BLTDPTH), tempd); |
| 610 | 523 | CUSTOM_REG_LONG(REG_BLTDPTH) += 2; |
| 611 | 524 | } |
| 612 | 525 | } |
| r32814 | r32815 | |
| 661 | 574 | /* fetch data for A */ |
| 662 | 575 | if (CUSTOM_REG(REG_BLTCON0) & 0x0800) |
| 663 | 576 | { |
| 664 | | CUSTOM_REG(REG_BLTADAT) = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_BLTAPTH)); |
| 577 | CUSTOM_REG(REG_BLTADAT) = state->chip_ram_r(CUSTOM_REG_LONG(REG_BLTAPTH)); |
| 665 | 578 | CUSTOM_REG_LONG(REG_BLTAPTH) -= 2; |
| 666 | 579 | } |
| 667 | 580 | |
| 668 | 581 | /* fetch data for B */ |
| 669 | 582 | if (CUSTOM_REG(REG_BLTCON0) & 0x0400) |
| 670 | 583 | { |
| 671 | | CUSTOM_REG(REG_BLTBDAT) = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_BLTBPTH)); |
| 584 | CUSTOM_REG(REG_BLTBDAT) = state->chip_ram_r(CUSTOM_REG_LONG(REG_BLTBPTH)); |
| 672 | 585 | CUSTOM_REG_LONG(REG_BLTBPTH) -= 2; |
| 673 | 586 | } |
| 674 | 587 | |
| 675 | 588 | /* fetch data for C */ |
| 676 | 589 | if (CUSTOM_REG(REG_BLTCON0) & 0x0200) |
| 677 | 590 | { |
| 678 | | CUSTOM_REG(REG_BLTCDAT) = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_BLTCPTH)); |
| 591 | CUSTOM_REG(REG_BLTCDAT) = state->chip_ram_r(CUSTOM_REG_LONG(REG_BLTCPTH)); |
| 679 | 592 | CUSTOM_REG_LONG(REG_BLTCPTH) -= 2; |
| 680 | 593 | } |
| 681 | 594 | |
| r32814 | r32815 | |
| 748 | 661 | /* write to the destination */ |
| 749 | 662 | if (CUSTOM_REG(REG_BLTCON0) & 0x0100) |
| 750 | 663 | { |
| 751 | | (*state->m_chip_ram_w)(state, CUSTOM_REG_LONG(REG_BLTDPTH), tempd); |
| 664 | state->chip_ram_w(CUSTOM_REG_LONG(REG_BLTDPTH), tempd); |
| 752 | 665 | CUSTOM_REG_LONG(REG_BLTDPTH) -= 2; |
| 753 | 666 | } |
| 754 | 667 | } |
| r32814 | r32815 | |
| 840 | 753 | |
| 841 | 754 | /* fetch data for C */ |
| 842 | 755 | if (CUSTOM_REG(REG_BLTCON0) & 0x0200) |
| 843 | | CUSTOM_REG(REG_BLTCDAT) = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_BLTCPTH)); |
| 756 | CUSTOM_REG(REG_BLTCDAT) = state->chip_ram_r(CUSTOM_REG_LONG(REG_BLTCPTH)); |
| 844 | 757 | |
| 845 | 758 | /* rotate the A data according to the shift */ |
| 846 | 759 | tempa = CUSTOM_REG(REG_BLTADAT) >> (CUSTOM_REG(REG_BLTCON0) >> 12); |
| r32814 | r32815 | |
| 891 | 804 | blitsum |= tempd; |
| 892 | 805 | |
| 893 | 806 | /* write to the destination */ |
| 894 | | (*state->m_chip_ram_w)(state, CUSTOM_REG_LONG(REG_BLTDPTH), tempd); |
| 807 | state->chip_ram_w(CUSTOM_REG_LONG(REG_BLTDPTH), tempd); |
| 895 | 808 | |
| 896 | 809 | /* always increment along the major axis */ |
| 897 | 810 | if (CUSTOM_REG(REG_BLTCON1) & 0x0010) |
trunk/src/mame/includes/amiga.h
| r32814 | r32815 | |
| 326 | 326 | public: |
| 327 | 327 | amiga_state(const machine_config &mconfig, device_type type, const char *tag) : |
| 328 | 328 | driver_device(mconfig, type, tag), |
| 329 | | m_chip_ram(*this, "chip_ram", 0), |
| 330 | | m_custom_regs(*this, "custom_regs", 0), |
| 331 | 329 | m_agnus_id(AGNUS_NTSC), |
| 332 | 330 | m_denise_id(DENISE), |
| 333 | 331 | m_maincpu(*this, "maincpu"), |
| r32814 | r32815 | |
| 353 | 351 | m_p2_mouse_x(*this, "p2_mouse_x"), |
| 354 | 352 | m_p2_mouse_y(*this, "p2_mouse_y"), |
| 355 | 353 | m_chip_ram_mask(0), |
| 356 | | m_chip_ram_mirror(0), |
| 357 | 354 | m_cia_0_irq(0), |
| 358 | 355 | m_cia_1_irq(0), |
| 359 | 356 | m_pot0x(0), m_pot1x(0), m_pot0y(0), m_pot1y(0), |
| r32814 | r32815 | |
| 373 | 370 | m_rx_previous(1) |
| 374 | 371 | { } |
| 375 | 372 | |
| 373 | /* chip RAM access */ |
| 374 | UINT16 chip_ram_r(offs_t byteoffs) |
| 375 | { |
| 376 | return EXPECTED(byteoffs < m_chip_ram.bytes()) ? m_chip_ram.read(byteoffs >> 1) : 0xffff; |
| 377 | } |
| 378 | void chip_ram_w(offs_t byteoffs, UINT16 data) |
| 379 | { |
| 380 | if (EXPECTED(byteoffs < m_chip_ram.bytes())) |
| 381 | m_chip_ram.write(byteoffs >> 1, data); |
| 382 | } |
| 376 | 383 | |
| 377 | | UINT16 (*m_chip_ram_r)(amiga_state *state, offs_t offset); |
| 378 | | void (*m_chip_ram_w)(amiga_state *state, offs_t offset, UINT16 data); |
| 379 | | |
| 380 | | |
| 381 | 384 | /* sprite states */ |
| 382 | 385 | UINT8 m_sprite_comparitor_enable_mask; |
| 383 | 386 | UINT8 m_sprite_dma_reload_mask; |
| r32814 | r32815 | |
| 486 | 489 | HBLANK = 186 |
| 487 | 490 | }; |
| 488 | 491 | |
| 489 | | required_shared_ptr<UINT16> m_chip_ram; |
| 490 | | required_shared_ptr<UINT16> m_custom_regs; |
| 491 | | |
| 492 | 492 | emu_timer *m_blitter_timer; |
| 493 | 493 | |
| 494 | 494 | UINT16 m_agnus_id; |
| 495 | 495 | UINT16 m_denise_id; |
| 496 | 496 | |
| 497 | UINT16 m_custom_regs[256]; |
| 498 | |
| 497 | 499 | void custom_chip_w(UINT16 offset, UINT16 data, UINT16 mem_mask = 0xffff) |
| 498 | 500 | { |
| 499 | 501 | custom_chip_w(m_maincpu->space(AS_PROGRAM), offset, data, mem_mask); |
| r32814 | r32815 | |
| 577 | 579 | optional_ioport m_p2_mouse_x; |
| 578 | 580 | optional_ioport m_p2_mouse_y; |
| 579 | 581 | |
| 582 | memory_array m_chip_ram; |
| 580 | 583 | UINT32 m_chip_ram_mask; |
| 581 | | UINT32 m_chip_ram_mirror; |
| 582 | 584 | |
| 583 | 585 | int m_cia_0_irq; |
| 584 | 586 | int m_cia_1_irq; |
| r32814 | r32815 | |
| 663 | 665 | |
| 664 | 666 | extern const char *const amiga_custom_names[0x100]; |
| 665 | 667 | |
| 666 | | void amiga_chip_ram_w8(amiga_state *state, offs_t offset, UINT8 data); |
| 667 | 668 | |
| 668 | | |
| 669 | 669 | /*----------- defined in video/amiga.c -----------*/ |
| 670 | 670 | |
| 671 | 671 | extern const UINT16 amiga_expand_byte[256]; |
trunk/src/mame/video/amiga.c
| r32814 | r32815 | |
| 240 | 240 | } |
| 241 | 241 | |
| 242 | 242 | /* fetch the first data word */ |
| 243 | | word0 = (*state->m_chip_ram_r)(state, state->m_copper_pc); |
| 243 | word0 = state->chip_ram_r(state->m_copper_pc); |
| 244 | 244 | state->m_copper_pc += 2; |
| 245 | 245 | xpos += COPPER_CYCLES_TO_PIXELS(1); |
| 246 | 246 | |
| 247 | 247 | /* fetch the second data word */ |
| 248 | | word1 = (*state->m_chip_ram_r)(state, state->m_copper_pc); |
| 248 | word1 = state->chip_ram_r(state->m_copper_pc); |
| 249 | 249 | state->m_copper_pc += 2; |
| 250 | 250 | xpos += COPPER_CYCLES_TO_PIXELS(1); |
| 251 | 251 | |
| r32814 | r32815 | |
| 381 | 381 | |
| 382 | 382 | INLINE void fetch_sprite_data(amiga_state *state, int scanline, int sprite) |
| 383 | 383 | { |
| 384 | | CUSTOM_REG(REG_SPR0DATA + 4 * sprite) = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 0); |
| 385 | | CUSTOM_REG(REG_SPR0DATB + 4 * sprite) = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 2); |
| 384 | CUSTOM_REG(REG_SPR0DATA + 4 * sprite) = state->chip_ram_r(CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 0); |
| 385 | CUSTOM_REG(REG_SPR0DATB + 4 * sprite) = state->chip_ram_r(CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 2); |
| 386 | 386 | CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) += 4; |
| 387 | 387 | if (LOG_SPRITE_DMA) logerror("%3d:sprite %d fetch: data=%04X-%04X\n", scanline, sprite, CUSTOM_REG(REG_SPR0DATA + 4 * sprite), CUSTOM_REG(REG_SPR0DATB + 4 * sprite)); |
| 388 | 388 | } |
| r32814 | r32815 | |
| 411 | 411 | state->m_sprite_dma_reload_mask &= ~bitmask; |
| 412 | 412 | |
| 413 | 413 | /* fetch data into the control words */ |
| 414 | | CUSTOM_REG(REG_SPR0POS + 4 * num) = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_SPR0PTH + 2 * num) + 0); |
| 415 | | CUSTOM_REG(REG_SPR0CTL + 4 * num) = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_SPR0PTH + 2 * num) + 2); |
| 414 | CUSTOM_REG(REG_SPR0POS + 4 * num) = state->chip_ram_r(CUSTOM_REG_LONG(REG_SPR0PTH + 2 * num) + 0); |
| 415 | CUSTOM_REG(REG_SPR0CTL + 4 * num) = state->chip_ram_r(CUSTOM_REG_LONG(REG_SPR0PTH + 2 * num) + 2); |
| 416 | 416 | CUSTOM_REG_LONG(REG_SPR0PTH + 2 * num) += 4; |
| 417 | 417 | if (LOG_SPRITE_DMA) logerror("%3d:sprite %d fetch: pos=%04X ctl=%04X\n", scanline, num, CUSTOM_REG(REG_SPR0POS + 4 * num), CUSTOM_REG(REG_SPR0CTL + 4 * num)); |
| 418 | 418 | } |
| r32814 | r32815 | |
| 586 | 586 | |
| 587 | 587 | INLINE void fetch_bitplane_data(amiga_state *state, int plane) |
| 588 | 588 | { |
| 589 | | CUSTOM_REG(REG_BPL1DAT + plane) = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2)); |
| 589 | CUSTOM_REG(REG_BPL1DAT + plane) = state->chip_ram_r(CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2)); |
| 590 | 590 | CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2) += 2; |
| 591 | 591 | } |
| 592 | 592 | |
trunk/src/mame/video/amigaaga.c
| r32814 | r32815 | |
| 92 | 92 | switch((CUSTOM_REG(REG_FMODE) >> 2) & 0x03) |
| 93 | 93 | { |
| 94 | 94 | case 0: |
| 95 | | state->m_aga_sprdata[sprite][0] = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 0); |
| 96 | | state->m_aga_sprdatb[sprite][0] = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 2); |
| 95 | state->m_aga_sprdata[sprite][0] = state->chip_ram_r(CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 0); |
| 96 | state->m_aga_sprdatb[sprite][0] = state->chip_ram_r(CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 2); |
| 97 | 97 | CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) += 4; |
| 98 | 98 | state->m_aga_sprite_fetched_words = 1; |
| 99 | 99 | if (LOG_SPRITE_DMA) logerror("%3d:sprite %d fetch: data=%04X-%04X\n", scanline, sprite, state->m_aga_sprdata[sprite][0], state->m_aga_sprdatb[sprite][0]); |
| 100 | 100 | break; |
| 101 | 101 | case 1: |
| 102 | 102 | case 2: |
| 103 | | state->m_aga_sprdata[sprite][0] = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 0); |
| 104 | | state->m_aga_sprdata[sprite][1] = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 2); |
| 103 | state->m_aga_sprdata[sprite][0] = state->chip_ram_r(CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 0); |
| 104 | state->m_aga_sprdata[sprite][1] = state->chip_ram_r(CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 2); |
| 105 | 105 | CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) += 4; |
| 106 | | state->m_aga_sprdatb[sprite][0] = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 0); |
| 107 | | state->m_aga_sprdatb[sprite][1] = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 2); |
| 106 | state->m_aga_sprdatb[sprite][0] = state->chip_ram_r(CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 0); |
| 107 | state->m_aga_sprdatb[sprite][1] = state->chip_ram_r(CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 2); |
| 108 | 108 | CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) += 4; |
| 109 | 109 | state->m_aga_sprite_fetched_words = 2; |
| 110 | 110 | if (LOG_SPRITE_DMA) logerror("%3d:sprite %d fetch: data=%04X-%04X %04X-%04X\n", scanline, sprite, state->m_aga_sprdata[sprite][0], state->m_aga_sprdatb[sprite][0], state->m_aga_sprdata[sprite][1], state->m_aga_sprdatb[sprite][1] ); |
| 111 | 111 | break; |
| 112 | 112 | case 3: |
| 113 | | state->m_aga_sprdata[sprite][0] = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 0); |
| 114 | | state->m_aga_sprdata[sprite][1] = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 2); |
| 113 | state->m_aga_sprdata[sprite][0] = state->chip_ram_r(CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 0); |
| 114 | state->m_aga_sprdata[sprite][1] = state->chip_ram_r(CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 2); |
| 115 | 115 | CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) += 4; |
| 116 | | state->m_aga_sprdata[sprite][2] = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 0); |
| 117 | | state->m_aga_sprdata[sprite][3] = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 2); |
| 116 | state->m_aga_sprdata[sprite][2] = state->chip_ram_r(CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 0); |
| 117 | state->m_aga_sprdata[sprite][3] = state->chip_ram_r(CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 2); |
| 118 | 118 | CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) += 4; |
| 119 | | state->m_aga_sprdatb[sprite][0] = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 0); |
| 120 | | state->m_aga_sprdatb[sprite][1] = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 2); |
| 119 | state->m_aga_sprdatb[sprite][0] = state->chip_ram_r(CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 0); |
| 120 | state->m_aga_sprdatb[sprite][1] = state->chip_ram_r(CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 2); |
| 121 | 121 | CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) += 4; |
| 122 | | state->m_aga_sprdatb[sprite][2] = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 0); |
| 123 | | state->m_aga_sprdatb[sprite][3] = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 2); |
| 122 | state->m_aga_sprdatb[sprite][2] = state->chip_ram_r(CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 0); |
| 123 | state->m_aga_sprdatb[sprite][3] = state->chip_ram_r(CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) + 2); |
| 124 | 124 | CUSTOM_REG_LONG(REG_SPR0PTH + 2 * sprite) += 4; |
| 125 | 125 | state->m_aga_sprite_fetched_words = 4; |
| 126 | 126 | if (LOG_SPRITE_DMA) logerror("%3d:sprite %d fetch: data=%04X-%04X %04X-%04X %04X-%04X %04X-%04X\n", |
| r32814 | r32815 | |
| 158 | 158 | state->m_sprite_dma_reload_mask &= ~bitmask; |
| 159 | 159 | |
| 160 | 160 | /* fetch data into the control words */ |
| 161 | | CUSTOM_REG(REG_SPR0POS + 4 * num) = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_SPR0PTH + 2 * num) + 0); |
| 162 | | CUSTOM_REG(REG_SPR0CTL + 4 * num) = (*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_SPR0PTH + 2 * num) + 2); |
| 161 | CUSTOM_REG(REG_SPR0POS + 4 * num) = state->chip_ram_r(CUSTOM_REG_LONG(REG_SPR0PTH + 2 * num) + 0); |
| 162 | CUSTOM_REG(REG_SPR0CTL + 4 * num) = state->chip_ram_r(CUSTOM_REG_LONG(REG_SPR0PTH + 2 * num) + 2); |
| 163 | 163 | CUSTOM_REG_LONG(REG_SPR0PTH + 2 * num) += 4; |
| 164 | 164 | /* fetch additional words */ |
| 165 | 165 | switch((CUSTOM_REG(REG_FMODE) >> 2) & 0x03) |
| r32814 | r32815 | |
| 376 | 376 | switch (CUSTOM_REG(REG_FMODE) & 0x03) |
| 377 | 377 | { |
| 378 | 378 | case 0: |
| 379 | | aga_bpldat[plane] = (UINT64)(*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2)); |
| 379 | aga_bpldat[plane] = (UINT64)state->chip_ram_r(CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2)); |
| 380 | 380 | CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2) += 2; |
| 381 | 381 | break; |
| 382 | 382 | case 1: |
| 383 | 383 | case 2: |
| 384 | | aga_bpldat[plane] = (UINT64)(*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2)) << 16; |
| 384 | aga_bpldat[plane] = (UINT64)state->chip_ram_r(CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2)) << 16; |
| 385 | 385 | CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2) += 2; |
| 386 | | aga_bpldat[plane] |= ((UINT64)(*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2))); |
| 386 | aga_bpldat[plane] |= ((UINT64)state->chip_ram_r(CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2))); |
| 387 | 387 | CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2) += 2; |
| 388 | 388 | break; |
| 389 | 389 | case 3: |
| 390 | | aga_bpldat[plane] = (UINT64)(*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2)) << 48; |
| 390 | aga_bpldat[plane] = (UINT64)state->chip_ram_r(CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2)) << 48; |
| 391 | 391 | CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2) += 2; |
| 392 | | aga_bpldat[plane] |= ((UINT64)(*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2))) << 32; |
| 392 | aga_bpldat[plane] |= ((UINT64)state->chip_ram_r(CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2))) << 32; |
| 393 | 393 | CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2) += 2; |
| 394 | | aga_bpldat[plane] |= ((UINT64)(*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2))) << 16; |
| 394 | aga_bpldat[plane] |= ((UINT64)state->chip_ram_r(CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2))) << 16; |
| 395 | 395 | CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2) += 2; |
| 396 | | aga_bpldat[plane] |= (UINT64)(*state->m_chip_ram_r)(state, CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2)); |
| 396 | aga_bpldat[plane] |= (UINT64)state->chip_ram_r(CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2)); |
| 397 | 397 | CUSTOM_REG_LONG(REG_BPL1PTH + plane * 2) += 2; |
| 398 | 398 | break; |
| 399 | 399 | } |
trunk/src/mame/drivers/cubo.c
| r32814 | r32815 | |
| 360 | 360 | |
| 361 | 361 | typedef void (cubo_state::*input_hack_func)(); |
| 362 | 362 | input_hack_func m_input_hack; |
| 363 | | |
| 363 | void chip_ram_w8_hack(offs_t byteoffs, UINT8 data); |
| 364 | 364 | void cndypuzl_input_hack(); |
| 365 | 365 | void haremchl_input_hack(); |
| 366 | 366 | void lsrquiz_input_hack(); |
| r32814 | r32815 | |
| 415 | 415 | AM_RANGE(0x800010, 0x800013) AM_READ_PORT("DIPSW2") |
| 416 | 416 | AM_RANGE(0xb80000, 0xb8003f) AM_DEVREADWRITE("akiko", akiko_device, read, write) |
| 417 | 417 | AM_RANGE(0xbf0000, 0xbfffff) AM_READWRITE16(cia_r, gayle_cia_w, 0xffffffff) |
| 418 | | AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE16(custom_chip_r, custom_chip_w, 0xffffffff) AM_SHARE("custom_regs") |
| 418 | AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE16(custom_chip_r, custom_chip_w, 0xffffffff) |
| 419 | 419 | AM_RANGE(0xe00000, 0xe7ffff) AM_ROM AM_REGION("kickstart", 0x80000) |
| 420 | 420 | AM_RANGE(0xa00000, 0xf7ffff) AM_NOP |
| 421 | 421 | AM_RANGE(0xf80000, 0xffffff) AM_ROM AM_REGION("kickstart", 0) |
| r32814 | r32815 | |
| 1170 | 1170 | * |
| 1171 | 1171 | *************************************/ |
| 1172 | 1172 | |
| 1173 | void cubo_state::chip_ram_w8_hack(offs_t byteoffs, UINT8 data) |
| 1174 | { |
| 1175 | UINT16 word = chip_ram_r(byteoffs); |
| 1176 | |
| 1177 | if (byteoffs & 1) |
| 1178 | word = (word & 0xff00) | data; |
| 1179 | else |
| 1180 | word = (word & 0x00ff) | (((UINT16)data) << 8); |
| 1181 | |
| 1182 | chip_ram_w(byteoffs, word); |
| 1183 | } |
| 1184 | |
| 1173 | 1185 | void cubo_state::cndypuzl_input_hack() |
| 1174 | 1186 | { |
| 1175 | 1187 | if (m_maincpu->pc < m_chip_ram.bytes()) |
| 1176 | 1188 | { |
| 1177 | 1189 | UINT32 r_A5 = m_maincpu->state_int(M68K_A5); |
| 1178 | | (*m_chip_ram_w)(this, r_A5 - 0x7ebe, 0x0000); |
| 1190 | chip_ram_w(r_A5 - 0x7ebe, 0x0000); |
| 1179 | 1191 | } |
| 1180 | 1192 | } |
| 1181 | 1193 | |
| r32814 | r32815 | |
| 1190 | 1202 | if (m_maincpu->pc < m_chip_ram.bytes()) |
| 1191 | 1203 | { |
| 1192 | 1204 | UINT32 r_A5 = m_maincpu->state_int(M68K_A5); |
| 1193 | | UINT32 r_A2 = ((*m_chip_ram_r)(this, r_A5 - 0x7f00 + 0) << 16) | ((*m_chip_ram_r)(this, r_A5 - 0x7f00 + 2)); |
| 1194 | | amiga_chip_ram_w8(this, r_A2 + 0x1f, 0x00); |
| 1205 | UINT32 r_A2 = (chip_ram_r(r_A5 - 0x7f00 + 0) << 16) | (chip_ram_r(r_A5 - 0x7f00 + 2)); |
| 1206 | chip_ram_w8_hack(r_A2 + 0x1f, 0x00); |
| 1195 | 1207 | } |
| 1196 | 1208 | } |
| 1197 | 1209 | |
| r32814 | r32815 | |
| 1206 | 1218 | if (m_maincpu->pc < m_chip_ram.bytes()) |
| 1207 | 1219 | { |
| 1208 | 1220 | UINT32 r_A5 = m_maincpu->state_int(M68K_A5); |
| 1209 | | UINT32 r_A2 = ((*m_chip_ram_r)(this, r_A5 - 0x7fe0 + 0) << 16) | ((*m_chip_ram_r)(this, r_A5 - 0x7fe0 + 2)); |
| 1210 | | amiga_chip_ram_w8(this, r_A2 + 0x13, 0x00); |
| 1221 | UINT32 r_A2 = (chip_ram_r(r_A5 - 0x7fe0 + 0) << 16) | (chip_ram_r(r_A5 - 0x7fe0 + 2)); |
| 1222 | chip_ram_w8_hack(r_A2 + 0x13, 0x00); |
| 1211 | 1223 | } |
| 1212 | 1224 | } |
| 1213 | 1225 | |
| r32814 | r32815 | |
| 1223 | 1235 | if (m_maincpu->pc < m_chip_ram.bytes()) |
| 1224 | 1236 | { |
| 1225 | 1237 | UINT32 r_A5 = m_maincpu->state_int(M68K_A5); |
| 1226 | | UINT32 r_A2 = ((*m_chip_ram_r)(this, r_A5 - 0x7fdc + 0) << 16) | ((*m_chip_ram_r)(this, r_A5 - 0x7fdc + 2)); |
| 1227 | | amiga_chip_ram_w8(this, r_A2 + 0x17, 0x00); |
| 1238 | UINT32 r_A2 = (chip_ram_r(r_A5 - 0x7fdc + 0) << 16) | (chip_ram_r(r_A5 - 0x7fdc + 2)); |
| 1239 | chip_ram_w8_hack(r_A2 + 0x17, 0x00); |
| 1228 | 1240 | } |
| 1229 | 1241 | } |
| 1230 | 1242 | |
| r32814 | r32815 | |
| 1239 | 1251 | if (m_maincpu->pc < m_chip_ram.bytes()) |
| 1240 | 1252 | { |
| 1241 | 1253 | UINT32 r_A5 = m_maincpu->state_int(M68K_A5); |
| 1242 | | UINT32 r_A2 = ((*m_chip_ram_r)(this, r_A5 - 0x7fa2 + 0) << 16) | ((*m_chip_ram_r)(this, r_A5 - 0x7fa2 + 2)); |
| 1243 | | amiga_chip_ram_w8(this, r_A2 + 0x24, 0x00); |
| 1254 | UINT32 r_A2 = (chip_ram_r(r_A5 - 0x7fa2 + 0) << 16) | (chip_ram_r(r_A5 - 0x7fa2 + 2)); |
| 1255 | chip_ram_w8_hack(r_A2 + 0x24, 0x00); |
| 1244 | 1256 | } |
| 1245 | 1257 | } |
| 1246 | 1258 | |
| r32814 | r32815 | |
| 1255 | 1267 | if (m_maincpu->pc < m_chip_ram.bytes()) |
| 1256 | 1268 | { |
| 1257 | 1269 | UINT32 r_A5 = m_maincpu->state_int(M68K_A5); |
| 1258 | | (*m_chip_ram_w)(this, r_A5 - 0x7ed8, 0x0000); |
| 1270 | chip_ram_w(r_A5 - 0x7ed8, 0x0000); |
| 1259 | 1271 | } |
| 1260 | 1272 | } |
| 1261 | 1273 | |
| r32814 | r32815 | |
| 1270 | 1282 | if (m_maincpu->pc < m_chip_ram.bytes()) |
| 1271 | 1283 | { |
| 1272 | 1284 | UINT32 r_A5 = m_maincpu->state_int(M68K_A5); |
| 1273 | | amiga_chip_ram_w8(this, r_A5 - 0x7eca, 0x00); |
| 1285 | chip_ram_w8_hack(r_A5 - 0x7eca, 0x00); |
| 1274 | 1286 | } |
| 1275 | 1287 | } |
| 1276 | 1288 | |
trunk/src/mess/drivers/amiga.c
| r32814 | r32815 | |
| 952 | 952 | ADDRESS_MAP_UNMAP_HIGH |
| 953 | 953 | AM_RANGE(0x000000, 0x1fffff) AM_DEVICE("overlay", address_map_bank_device, amap16) |
| 954 | 954 | AM_RANGE(0xa00000, 0xbfffff) AM_READWRITE(cia_r, cia_w) |
| 955 | | AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE(custom_chip_r, custom_chip_w) AM_SHARE("custom_regs") |
| 955 | AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE(custom_chip_r, custom_chip_w) |
| 956 | 956 | AM_RANGE(0xe00000, 0xe7ffff) AM_WRITENOP AM_READ(rom_mirror_r) |
| 957 | 957 | AM_RANGE(0xe80000, 0xefffff) AM_NOP // autoconfig space (installed by devices) |
| 958 | 958 | AM_RANGE(0xf80000, 0xfbffff) AM_DEVICE("bootrom", address_map_bank_device, amap16) |
| r32814 | r32815 | |
| 1005 | 1005 | AM_RANGE(0xdc0000, 0xdc7fff) AM_READWRITE(clock_r, clock_w) |
| 1006 | 1006 | AM_RANGE(0xd80000, 0xddffff) AM_NOP |
| 1007 | 1007 | AM_RANGE(0xde0000, 0xdeffff) AM_READWRITE(custom_chip_r, custom_chip_w) |
| 1008 | | AM_RANGE(0xdf0000, 0xdfffff) AM_READWRITE(custom_chip_r, custom_chip_w) AM_SHARE("custom_regs") |
| 1008 | AM_RANGE(0xdf0000, 0xdfffff) AM_READWRITE(custom_chip_r, custom_chip_w) |
| 1009 | 1009 | AM_RANGE(0xe00000, 0xe7ffff) AM_WRITENOP AM_READ(rom_mirror_r) |
| 1010 | 1010 | AM_RANGE(0xe80000, 0xefffff) AM_NOP // autoconfig space (installed by devices) |
| 1011 | 1011 | AM_RANGE(0xf00000, 0xf7ffff) AM_NOP // cartridge space |
| r32814 | r32815 | |
| 1020 | 1020 | AM_RANGE(0xc00000, 0xd7ffff) AM_READWRITE(custom_chip_r, custom_chip_w) |
| 1021 | 1021 | AM_RANGE(0xd80000, 0xddffff) AM_NOP |
| 1022 | 1022 | AM_RANGE(0xde0000, 0xdeffff) AM_READWRITE(custom_chip_r, custom_chip_w) |
| 1023 | | AM_RANGE(0xdf0000, 0xdfffff) AM_READWRITE(custom_chip_r, custom_chip_w) AM_SHARE("custom_regs") |
| 1023 | AM_RANGE(0xdf0000, 0xdfffff) AM_READWRITE(custom_chip_r, custom_chip_w) |
| 1024 | 1024 | AM_RANGE(0xe00000, 0xe7ffff) AM_WRITENOP AM_READ(rom_mirror_r) |
| 1025 | 1025 | AM_RANGE(0xe80000, 0xefffff) AM_NOP // autoconfig space (installed by devices) |
| 1026 | 1026 | AM_RANGE(0xf00000, 0xf7ffff) AM_NOP // cartridge space |
| r32814 | r32815 | |
| 1038 | 1038 | AM_RANGE(0xdc8000, 0xdc87ff) AM_MIRROR(0x7800) AM_RAM AM_SHARE("sram") |
| 1039 | 1039 | AM_RANGE(0xdd0000, 0xddffff) AM_NOP |
| 1040 | 1040 | AM_RANGE(0xde0000, 0xdeffff) AM_READWRITE(custom_chip_r, custom_chip_w) |
| 1041 | | AM_RANGE(0xdf0000, 0xdfffff) AM_READWRITE(custom_chip_r, custom_chip_w) AM_SHARE("custom_regs") |
| 1041 | AM_RANGE(0xdf0000, 0xdfffff) AM_READWRITE(custom_chip_r, custom_chip_w) |
| 1042 | 1042 | AM_RANGE(0xe00000, 0xe3ffff) AM_MIRROR(0x40000) AM_RAM AM_SHARE("memcard") |
| 1043 | 1043 | AM_RANGE(0xe80000, 0xefffff) AM_NOP // autoconfig space (installed by devices) |
| 1044 | 1044 | AM_RANGE(0xf00000, 0xf3ffff) AM_MIRROR(0x40000) AM_ROM AM_REGION("cdrom", 0) |
| r32814 | r32815 | |
| 1058 | 1058 | AM_RANGE(0x00dc0000, 0x00dcffff) AM_DEVREADWRITE8("rtc", rp5c01_device, read, write, 0x000000ff) |
| 1059 | 1059 | AM_RANGE(0x00dd0000, 0x00ddffff) AM_READWRITE(scsi_r, scsi_w) |
| 1060 | 1060 | AM_RANGE(0x00de0000, 0x00deffff) AM_READWRITE(motherboard_r, motherboard_w) |
| 1061 | | AM_RANGE(0x00df0000, 0x00dfffff) AM_READWRITE16(custom_chip_r, custom_chip_w, 0xffffffff) AM_SHARE("custom_regs") |
| 1061 | AM_RANGE(0x00df0000, 0x00dfffff) AM_READWRITE16(custom_chip_r, custom_chip_w, 0xffffffff) |
| 1062 | 1062 | AM_RANGE(0x00e80000, 0x00efffff) AM_NOP // autoconfig space (installed by devices) |
| 1063 | 1063 | AM_RANGE(0x00f00000, 0x00f7ffff) AM_NOP // cartridge space |
| 1064 | 1064 | AM_RANGE(0x00f80000, 0x00ffffff) AM_ROM AM_REGION("kickstart", 0) |
| r32814 | r32815 | |
| 1076 | 1076 | AM_RANGE(0xdc0000, 0xdc7fff) AM_READWRITE(clock_r, clock_w) |
| 1077 | 1077 | AM_RANGE(0xd80000, 0xddffff) AM_NOP |
| 1078 | 1078 | AM_RANGE(0xde0000, 0xdeffff) AM_READWRITE(custom_chip_r, custom_chip_w) |
| 1079 | | AM_RANGE(0xdf0000, 0xdfffff) AM_READWRITE(custom_chip_r, custom_chip_w) AM_SHARE("custom_regs") |
| 1079 | AM_RANGE(0xdf0000, 0xdfffff) AM_READWRITE(custom_chip_r, custom_chip_w) |
| 1080 | 1080 | AM_RANGE(0xe00000, 0xe7ffff) AM_WRITENOP AM_READ(rom_mirror_r) |
| 1081 | 1081 | AM_RANGE(0xe80000, 0xefffff) AM_NOP // autoconfig space (installed by devices) |
| 1082 | 1082 | AM_RANGE(0xf80000, 0xffffff) AM_ROM AM_REGION("kickstart", 0) |
| r32814 | r32815 | |
| 1099 | 1099 | AM_RANGE(0xdc0000, 0xdcffff) AM_NOP // rtc |
| 1100 | 1100 | AM_RANGE(0xdd0000, 0xddffff) AM_NOP // reserved (dma controller) |
| 1101 | 1101 | AM_RANGE(0xde0000, 0xdeffff) AM_DEVREADWRITE("gayle", gayle_device, gayle_id_r, gayle_id_w) |
| 1102 | | AM_RANGE(0xdf0000, 0xdfffff) AM_READWRITE(custom_chip_r, custom_chip_w) AM_SHARE("custom_regs") |
| 1102 | AM_RANGE(0xdf0000, 0xdfffff) AM_READWRITE(custom_chip_r, custom_chip_w) |
| 1103 | 1103 | AM_RANGE(0xe00000, 0xe7ffff) AM_WRITENOP AM_READ(rom_mirror_r) |
| 1104 | 1104 | AM_RANGE(0xe80000, 0xefffff) AM_NOP // autoconfig space (installed by devices) |
| 1105 | 1105 | AM_RANGE(0xf00000, 0xf7ffff) AM_NOP // cartridge space |
| r32814 | r32815 | |
| 1123 | 1123 | AM_RANGE(0xdc0000, 0xdcffff) AM_NOP // rtc |
| 1124 | 1124 | AM_RANGE(0xdd0000, 0xddffff) AM_NOP // reserved (dma controller) |
| 1125 | 1125 | AM_RANGE(0xde0000, 0xdeffff) AM_DEVREADWRITE16("gayle", gayle_device, gayle_id_r, gayle_id_w, 0xffffffff) |
| 1126 | | AM_RANGE(0xdf0000, 0xdfffff) AM_READWRITE16(custom_chip_r, custom_chip_w, 0xffffffff) AM_SHARE("custom_regs") |
| 1126 | AM_RANGE(0xdf0000, 0xdfffff) AM_READWRITE16(custom_chip_r, custom_chip_w, 0xffffffff) |
| 1127 | 1127 | AM_RANGE(0xe00000, 0xe7ffff) AM_WRITENOP AM_READ(rom_mirror32_r) |
| 1128 | 1128 | AM_RANGE(0xe80000, 0xefffff) AM_NOP // autoconfig space (installed by devices) |
| 1129 | 1129 | AM_RANGE(0xf00000, 0xf7ffff) AM_NOP // cartridge space |
| r32814 | r32815 | |
| 1146 | 1146 | AM_RANGE(0x00dd1000, 0x00dd3fff) AM_READWRITE16(ide_r, ide_w, 0xffffffff) |
| 1147 | 1147 | AM_RANGE(0x00dd4000, 0x00ddffff) AM_NOP |
| 1148 | 1148 | AM_RANGE(0x00de0000, 0x00deffff) AM_READWRITE(motherboard_r, motherboard_w) |
| 1149 | | AM_RANGE(0x00df0000, 0x00dfffff) AM_READWRITE16(custom_chip_r, custom_chip_w, 0xffffffff) AM_SHARE("custom_regs") |
| 1149 | AM_RANGE(0x00df0000, 0x00dfffff) AM_READWRITE16(custom_chip_r, custom_chip_w, 0xffffffff) |
| 1150 | 1150 | AM_RANGE(0x00e00000, 0x00e7ffff) AM_WRITENOP AM_READ(rom_mirror32_r) |
| 1151 | 1151 | AM_RANGE(0x00e80000, 0x00efffff) AM_NOP // zorro2 autoconfig space (installed by devices) |
| 1152 | 1152 | AM_RANGE(0x00f00000, 0x00f7ffff) AM_NOP // cartridge space |
| r32814 | r32815 | |
| 1171 | 1171 | AM_RANGE(0x000000, 0x1fffff) AM_DEVICE("overlay", address_map_bank_device, amap32) |
| 1172 | 1172 | AM_RANGE(0xb80000, 0xb8003f) AM_DEVREADWRITE("akiko", akiko_device, read, write) |
| 1173 | 1173 | AM_RANGE(0xbf0000, 0xbfffff) AM_READWRITE16(cia_r, gayle_cia_w, 0xffffffff) |
| 1174 | | AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE16(custom_chip_r, custom_chip_w, 0xffffffff) AM_SHARE("custom_regs") |
| 1174 | AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE16(custom_chip_r, custom_chip_w, 0xffffffff) |
| 1175 | 1175 | AM_RANGE(0xe00000, 0xe7ffff) AM_ROM AM_REGION("kickstart", 0x80000) |
| 1176 | 1176 | AM_RANGE(0xa00000, 0xf7ffff) AM_NOP |
| 1177 | 1177 | AM_RANGE(0xf80000, 0xffffff) AM_ROM AM_REGION("kickstart", 0) |