trunk/src/mame/drivers/cv1k.c
| r31472 | r31473 | |
| 162 | 162 | - Need SH3 recompiler? |
| 163 | 163 | |
| 164 | 164 | Blitter Timing |
| 165 | | - Correct slowdown emulation and flags (depends on blit mode, and speed of RAM) - could do with the recompiler or alt idle skips on the busy flag wait looops |
| 165 | - Correct slowdown emulation and flags (depends on blit mode, and speed of RAM) - could do with the recompiler or alt idle skips on the busy flag wait loops |
| 166 | 166 | - End of Blit IRQ? (one game has a valid irq routine that looks like it was used for profiling, but nothing depends on it) |
| 167 | 167 | |
| 168 | 168 | */ |
| r31472 | r31473 | |
| 187 | 187 | m_blitter(*this, "blitter"), |
| 188 | 188 | m_serflash(*this, "game"), |
| 189 | 189 | m_eeprom(*this, "eeprom"), |
| 190 | | cv1k_ram(*this, "mainram"), |
| 190 | m_ram(*this, "mainram"), |
| 191 | 191 | m_blitrate(*this, "BLITRATE"), |
| 192 | 192 | m_eepromout(*this, "EEPROMOUT") { } |
| 193 | 193 | |
| r31472 | r31473 | |
| 196 | 196 | required_device<serflash_device> m_serflash; |
| 197 | 197 | required_device<rtc9701_device> m_eeprom; |
| 198 | 198 | |
| 199 | | required_shared_ptr<UINT64> cv1k_ram; |
| 199 | required_shared_ptr<UINT64> m_ram; |
| 200 | 200 | |
| 201 | 201 | DECLARE_READ8_MEMBER(cv1k_flash_io_r); |
| 202 | 202 | DECLARE_WRITE8_MEMBER(cv1k_flash_io_w); |
| r31472 | r31473 | |
| 204 | 204 | DECLARE_WRITE8_MEMBER(serial_rtc_eeprom_w); |
| 205 | 205 | DECLARE_READ64_MEMBER(cv1k_flash_port_e_r); |
| 206 | 206 | |
| 207 | | INTERRUPT_GEN_MEMBER(cv1k_interrupt); |
| 208 | 207 | UINT32 screen_update_cv1k(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); |
| 209 | 208 | |
| 210 | | DECLARE_MACHINE_RESET( cv1k ); |
| 209 | virtual void machine_reset(); |
| 211 | 210 | |
| 212 | 211 | /* game specific */ |
| 213 | 212 | DECLARE_READ64_MEMBER(mushisam_speedup_r); |
| r31472 | r31473 | |
| 231 | 230 | |
| 232 | 231 | UINT32 cv1k_state::screen_update_cv1k(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) |
| 233 | 232 | { |
| 234 | | epic12_device::set_delay_scale(m_blitter, m_blitrate->read()); |
| 233 | m_blitter->set_delay_scale(m_blitrate->read()); |
| 235 | 234 | |
| 236 | 235 | m_blitter->draw_screen(bitmap,cliprect); |
| 237 | 236 | return 0; |
| r31472 | r31473 | |
| 242 | 241 | |
| 243 | 242 | READ64_MEMBER( cv1k_state::cv1k_flash_port_e_r ) |
| 244 | 243 | { |
| 245 | | return ((m_serflash->flash_ready_r(space, offset) ? 0x20 : 0x00)) | 0xdf; |
| 244 | return ((m_serflash->flash_ready_r(space, offset) ? 0x20 : 0x00)) | 0xdf; |
| 246 | 245 | } |
| 247 | 246 | |
| 248 | 247 | |
| r31472 | r31473 | |
| 298 | 297 | { |
| 299 | 298 | switch (offset) |
| 300 | 299 | { |
| 301 | | case 1: |
| 300 | case 0x01: |
| 302 | 301 | return 0xfe | m_eeprom->read_bit(); |
| 303 | 302 | |
| 304 | 303 | default: |
| r31472 | r31473 | |
| 315 | 314 | break; |
| 316 | 315 | case 0x03: |
| 317 | 316 | m_serflash->flash_enab_w(space,offset,data); |
| 318 | | return; |
| 317 | break; |
| 318 | |
| 319 | 319 | default: |
| 320 | | logerror("unknown serial_rtc_eeprom_w access offset %02x data %02x\n",offset, data); |
| 321 | | break; |
| 320 | logerror("unknown serial_rtc_eeprom_w access offset %02x data %02x\n", offset, data); |
| 321 | break; |
| 322 | 322 | } |
| 323 | 323 | } |
| 324 | 324 | |
| r31472 | r31473 | |
| 409 | 409 | INPUT_PORTS_END |
| 410 | 410 | |
| 411 | 411 | |
| 412 | | INTERRUPT_GEN_MEMBER(cv1k_state::cv1k_interrupt) |
| 412 | void cv1k_state::machine_reset() |
| 413 | 413 | { |
| 414 | | m_maincpu->set_input_line(2, HOLD_LINE); |
| 415 | | } |
| 416 | | |
| 417 | | MACHINE_RESET_MEMBER( cv1k_state, cv1k ) |
| 418 | | { |
| 419 | | epic12_device::set_rambase (m_blitter, reinterpret_cast<UINT16 *>(cv1k_ram.target())); |
| 420 | | epic12_device::set_cpu_device (m_blitter, m_maincpu ); |
| 421 | | epic12_device::set_is_unsafe(m_blitter, machine().root_device().ioport(":BLITCFG")->read()); |
| 414 | m_blitter->set_rambase (reinterpret_cast<UINT16 *>(m_ram.target())); |
| 415 | m_blitter->set_cpu_device (m_maincpu); |
| 416 | m_blitter->set_is_unsafe(machine().root_device().ioport(":BLITCFG")->read()); |
| 422 | 417 | m_blitter->install_handlers( 0x18000000, 0x18000057 ); |
| 423 | 418 | m_blitter->reset(); |
| 424 | 419 | } |
| 425 | 420 | |
| 426 | 421 | static MACHINE_CONFIG_START( cv1k, cv1k_state ) |
| 422 | |
| 427 | 423 | /* basic machine hardware */ |
| 428 | 424 | MCFG_CPU_ADD("maincpu", SH3BE, CPU_CLOCK) |
| 429 | 425 | MCFG_SH4_MD0(0) // none of this is verified |
| r31472 | r31473 | |
| 438 | 434 | MCFG_SH4_CLOCK(CPU_CLOCK) |
| 439 | 435 | MCFG_CPU_PROGRAM_MAP(cv1k_map) |
| 440 | 436 | MCFG_CPU_IO_MAP(cv1k_port) |
| 441 | | MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cv1k_state, cv1k_interrupt) |
| 437 | MCFG_CPU_VBLANK_INT_DRIVER("screen", cv1k_state, irq2_line_hold) |
| 442 | 438 | |
| 443 | 439 | MCFG_RTC9701_ADD("eeprom") |
| 444 | 440 | MCFG_SERFLASH_ADD("game") |
| r31472 | r31473 | |
| 451 | 447 | MCFG_SCREEN_VISIBLE_AREA(0, 0x140-1, 0, 0xf0-1) |
| 452 | 448 | MCFG_SCREEN_UPDATE_DRIVER(cv1k_state, screen_update_cv1k) |
| 453 | 449 | |
| 454 | | |
| 455 | 450 | MCFG_PALETTE_ADD("palette", 0x10000) |
| 456 | 451 | |
| 457 | | MCFG_MACHINE_RESET_OVERRIDE(cv1k_state, cv1k) |
| 458 | | |
| 459 | 452 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 460 | 453 | MCFG_YMZ770_ADD("ymz770", XTAL_16_384MHz) |
| 461 | 454 | MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) |
| r31472 | r31473 | |
| 466 | 459 | MACHINE_CONFIG_END |
| 467 | 460 | |
| 468 | 461 | static MACHINE_CONFIG_DERIVED( cv1k_d, cv1k ) |
| 462 | |
| 463 | /* basic machine hardware */ |
| 469 | 464 | MCFG_DEVICE_REMOVE("maincpu") |
| 470 | 465 | |
| 471 | 466 | MCFG_CPU_ADD("maincpu", SH3BE, CPU_CLOCK) |
| r31472 | r31473 | |
| 481 | 476 | MCFG_SH4_CLOCK(CPU_CLOCK) |
| 482 | 477 | MCFG_CPU_PROGRAM_MAP(cv1k_d_map) |
| 483 | 478 | MCFG_CPU_IO_MAP(cv1k_port) |
| 484 | | MCFG_DEVICE_VBLANK_INT_DRIVER("screen", cv1k_state, cv1k_interrupt) |
| 479 | MCFG_CPU_VBLANK_INT_DRIVER("screen", cv1k_state, irq2_line_hold) |
| 485 | 480 | |
| 486 | 481 | MCFG_DEVICE_MODIFY("blitter") |
| 487 | 482 | MCFG_EPIC12_SET_MAINRAMSIZE(0x1000000) |
| r31472 | r31473 | |
| 804 | 799 | if ( pc == 0xc04a0aa ) m_maincpu->spin_until_time( attotime::from_usec(10)); // mushisam |
| 805 | 800 | else if (pc == 0xc04a0da) m_maincpu->spin_until_time( attotime::from_usec(10)); // mushitam |
| 806 | 801 | // else printf("read %08x\n", m_maincpu->pc()); |
| 807 | | return cv1k_ram[0x0022f0/8]; |
| 802 | return m_ram[0x0022f0/8]; |
| 808 | 803 | } |
| 809 | 804 | |
| 810 | 805 | DRIVER_INIT_MEMBER(cv1k_state,mushisam) |
| r31472 | r31473 | |
| 816 | 811 | { |
| 817 | 812 | if (m_maincpu->pc()== 0xc04a2aa ) m_maincpu->spin_until_time( attotime::from_usec(10)); // mushisam |
| 818 | 813 | // else printf("read %08x\n", m_maincpu->pc()); |
| 819 | | return cv1k_ram[0x00024d8/8]; |
| 814 | return m_ram[0x00024d8/8]; |
| 820 | 815 | } |
| 821 | 816 | |
| 822 | 817 | DRIVER_INIT_MEMBER(cv1k_state,mushisama) |
| r31472 | r31473 | |
| 833 | 828 | if ( pc == 0xc0519a2 ) m_maincpu->spin_until_time( attotime::from_usec(10)); // deathsml |
| 834 | 829 | if ( pc == 0xc1d1346 ) m_maincpu->spin_until_time( attotime::from_usec(10)); // dpddfk / dsmbl |
| 835 | 830 | // else printf("read %08x\n", m_maincpu->pc()); |
| 836 | | return cv1k_ram[0x002310/8]; |
| 831 | return m_ram[0x002310/8]; |
| 837 | 832 | } |
| 838 | 833 | |
| 839 | 834 | DRIVER_INIT_MEMBER(cv1k_state,espgal2) |
trunk/src/emu/video/epic12.c
| r31472 | r31473 | |
| 33 | 33 | epic12_device_gfx_scroll_1_y_shadowcopy = 0; |
| 34 | 34 | epic12_device_ram16_copy = 0; |
| 35 | 35 | epic12_device_blit_delay = 0; |
| 36 | | |
| 37 | 36 | } |
| 38 | 37 | |
| 39 | 38 | TIMER_CALLBACK_MEMBER( epic12_device::epic12_device_blitter_delay_callback ) |
| r31472 | r31473 | |
| 41 | 40 | blitter_busy = 0; |
| 42 | 41 | } |
| 43 | 42 | |
| 44 | | // static |
| 45 | | void epic12_device::set_rambase(device_t &device, UINT16* rambase) |
| 46 | | { |
| 47 | | epic12_device &dev = downcast<epic12_device &>(device); |
| 48 | | dev.epic12_device_ram16 = rambase; |
| 49 | | } |
| 50 | 43 | |
| 51 | | |
| 52 | | void epic12_device::set_delay_scale(device_t &device, int delay_scale) |
| 53 | | { |
| 54 | | epic12_device &dev = downcast<epic12_device &>(device); |
| 55 | | dev.m_delay_scale = delay_scale; |
| 56 | | } |
| 57 | | |
| 58 | | void epic12_device::set_is_unsafe(device_t &device, int is_unsafe) |
| 59 | | { |
| 60 | | epic12_device &dev = downcast<epic12_device &>(device); |
| 61 | | dev.m_is_unsafe = is_unsafe; |
| 62 | | |
| 63 | | } |
| 64 | | |
| 65 | | void epic12_device::set_cpu_device(device_t &device, cpu_device* maincpu) |
| 66 | | { |
| 67 | | epic12_device &dev = downcast<epic12_device &>(device); |
| 68 | | dev.m_maincpu = maincpu; |
| 69 | | } |
| 70 | | |
| 71 | | |
| 72 | 44 | void epic12_device::device_start() |
| 73 | 45 | { |
| 74 | 46 | epic12_device_gfx_size = 0x2000 * 0x1000; |
| 75 | 47 | epic12_device_bitmaps = auto_bitmap_rgb32_alloc(machine(), 0x2000, 0x1000); |
| 76 | 48 | epic12_device_clip = epic12_device_bitmaps->cliprect(); |
| 77 | | |
| 49 | epic12_device_clip.set(0, 0x2000-1, 0, 0x1000-1); |
| 50 | |
| 78 | 51 | epic12_device_ram16_copy = auto_alloc_array(machine(), UINT16, m_main_ramsize/2); |
| 79 | 52 | |
| 80 | | |
| 81 | | |
| 82 | 53 | epic12_device_blitter_delay_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(epic12_device::epic12_device_blitter_delay_callback),this)); |
| 83 | 54 | epic12_device_blitter_delay_timer->adjust(attotime::never); |
| 84 | | |
| 85 | | |
| 86 | 55 | } |
| 87 | 56 | |
| 88 | 57 | void epic12_device::device_reset() |
| r31472 | r31473 | |
| 326 | 295 | |
| 327 | 296 | |
| 328 | 297 | |
| 329 | | inline void epic12_device::epic12_device_gfx_draw_shadow_copy(address_space &space, offs_t *addr, int cliptype) |
| 298 | inline void epic12_device::epic12_device_gfx_draw_shadow_copy(address_space &space, offs_t *addr) |
| 330 | 299 | { |
| 331 | 300 | COPY_NEXT_WORD(space, addr); |
| 332 | 301 | COPY_NEXT_WORD(space, addr); |
| r31472 | r31473 | |
| 567 | 536 | void epic12_device::epic12_device_gfx_create_shadow_copy(address_space &space) |
| 568 | 537 | { |
| 569 | 538 | offs_t addr = epic12_device_gfx_addr & 0x1fffffff; |
| 570 | | UINT16 cliptype = 0; |
| 539 | epic12_device_clip.set(epic12_device_gfx_scroll_1_x_shadowcopy, epic12_device_clip.min_x + 320-1, epic12_device_gfx_scroll_1_y_shadowcopy, epic12_device_clip.min_y + 240-1); |
| 571 | 540 | |
| 572 | | epic12_device_clip.min_x = epic12_device_gfx_scroll_1_x_shadowcopy; |
| 573 | | epic12_device_clip.min_y = epic12_device_gfx_scroll_1_y_shadowcopy; |
| 574 | | epic12_device_clip.max_x = epic12_device_clip.min_x + 320-1; |
| 575 | | epic12_device_clip.max_y = epic12_device_clip.min_y + 240-1; |
| 576 | | |
| 577 | 541 | while (1) |
| 578 | 542 | { |
| 579 | 543 | UINT16 data = COPY_NEXT_WORD(space, &addr); |
| r31472 | r31473 | |
| 585 | 549 | return; |
| 586 | 550 | |
| 587 | 551 | case 0xc000: |
| 588 | | data = COPY_NEXT_WORD(space, &addr); |
| 589 | | |
| 590 | | cliptype = data ? 1 : 0; |
| 591 | | |
| 592 | | if (cliptype) |
| 593 | | { |
| 594 | | epic12_device_clip.min_x = epic12_device_gfx_scroll_1_x_shadowcopy; |
| 595 | | epic12_device_clip.min_y = epic12_device_gfx_scroll_1_y_shadowcopy; |
| 596 | | epic12_device_clip.max_x = epic12_device_clip.min_x + 320-1; |
| 597 | | epic12_device_clip.max_y = epic12_device_clip.min_y + 240-1; |
| 598 | | } |
| 552 | if (COPY_NEXT_WORD(space, &addr)) // cliptype |
| 553 | epic12_device_clip.set(epic12_device_gfx_scroll_1_x_shadowcopy, epic12_device_clip.min_x + 320-1, epic12_device_gfx_scroll_1_y_shadowcopy, epic12_device_clip.min_y + 240-1); |
| 599 | 554 | else |
| 600 | | { |
| 601 | | epic12_device_clip.min_x = 0; |
| 602 | | epic12_device_clip.min_y = 0; |
| 603 | | epic12_device_clip.max_x = 0x2000-1; |
| 604 | | epic12_device_clip.max_y = 0x1000-1; |
| 605 | | } |
| 606 | | |
| 555 | epic12_device_clip.set(0, 0x2000-1, 0, 0x1000-1); |
| 607 | 556 | break; |
| 608 | 557 | |
| 609 | 558 | case 0x2000: |
| r31472 | r31473 | |
| 613 | 562 | |
| 614 | 563 | case 0x1000: |
| 615 | 564 | addr -= 2; |
| 616 | | epic12_device_gfx_draw_shadow_copy(space, &addr, cliptype); |
| 565 | epic12_device_gfx_draw_shadow_copy(space, &addr); |
| 617 | 566 | break; |
| 618 | 567 | |
| 619 | 568 | default: |
| r31472 | r31473 | |
| 626 | 575 | |
| 627 | 576 | void epic12_device::epic12_device_gfx_exec(void) |
| 628 | 577 | { |
| 629 | | UINT16 cliptype = 0; |
| 630 | | |
| 631 | 578 | offs_t addr = epic12_device_gfx_addr_shadowcopy & 0x1fffffff; |
| 579 | epic12_device_clip.set(epic12_device_gfx_scroll_1_x_shadowcopy, epic12_device_clip.min_x + 320-1, epic12_device_gfx_scroll_1_y_shadowcopy, epic12_device_clip.min_y + 240-1); |
| 632 | 580 | |
| 633 | 581 | // logerror("GFX EXEC: %08X\n", addr); |
| 634 | 582 | |
| 635 | | epic12_device_clip.min_x = epic12_device_gfx_scroll_1_x_shadowcopy; |
| 636 | | epic12_device_clip.min_y = epic12_device_gfx_scroll_1_y_shadowcopy; |
| 637 | | epic12_device_clip.max_x = epic12_device_clip.min_x + 320-1; |
| 638 | | epic12_device_clip.max_y = epic12_device_clip.min_y + 240-1; |
| 639 | | |
| 640 | 583 | while (1) |
| 641 | 584 | { |
| 642 | 585 | UINT16 data = READ_NEXT_WORD(&addr); |
| r31472 | r31473 | |
| 648 | 591 | return; |
| 649 | 592 | |
| 650 | 593 | case 0xc000: |
| 651 | | data = READ_NEXT_WORD(&addr); |
| 652 | | cliptype = data ? 1 : 0; |
| 653 | | |
| 654 | | if (cliptype) |
| 655 | | { |
| 656 | | epic12_device_clip.min_x = epic12_device_gfx_scroll_1_x_shadowcopy; |
| 657 | | epic12_device_clip.min_y = epic12_device_gfx_scroll_1_y_shadowcopy; |
| 658 | | epic12_device_clip.max_x = epic12_device_clip.min_x + 320-1; |
| 659 | | epic12_device_clip.max_y = epic12_device_clip.min_y + 240-1; |
| 660 | | } |
| 594 | if (READ_NEXT_WORD(&addr)) // cliptype |
| 595 | epic12_device_clip.set(epic12_device_gfx_scroll_1_x_shadowcopy, epic12_device_clip.min_x + 320-1, epic12_device_gfx_scroll_1_y_shadowcopy, epic12_device_clip.min_y + 240-1); |
| 661 | 596 | else |
| 662 | | { |
| 663 | | epic12_device_clip.min_x = 0; |
| 664 | | epic12_device_clip.min_y = 0; |
| 665 | | epic12_device_clip.max_x = 0x2000-1; |
| 666 | | epic12_device_clip.max_y = 0x1000-1; |
| 667 | | } |
| 597 | epic12_device_clip.set(0, 0x2000-1, 0, 0x1000-1); |
| 668 | 598 | break; |
| 669 | 599 | |
| 670 | 600 | case 0x2000: |
| r31472 | r31473 | |
| 687 | 617 | |
| 688 | 618 | void epic12_device::epic12_device_gfx_exec_unsafe(void) |
| 689 | 619 | { |
| 690 | | UINT16 cliptype = 0; |
| 691 | | |
| 692 | 620 | offs_t addr = epic12_device_gfx_addr & 0x1fffffff; |
| 621 | epic12_device_clip.set(epic12_device_gfx_scroll_1_x_shadowcopy, epic12_device_clip.min_x + 320-1, epic12_device_gfx_scroll_1_y_shadowcopy, epic12_device_clip.min_y + 240-1); |
| 693 | 622 | |
| 694 | 623 | // logerror("GFX EXEC: %08X\n", addr); |
| 695 | 624 | |
| 696 | | epic12_device_clip.min_x = epic12_device_gfx_scroll_1_x; |
| 697 | | epic12_device_clip.min_y = epic12_device_gfx_scroll_1_y; |
| 698 | | epic12_device_clip.max_x = epic12_device_clip.min_x + 320-1; |
| 699 | | epic12_device_clip.max_y = epic12_device_clip.min_y + 240-1; |
| 700 | | |
| 701 | 625 | while (1) |
| 702 | 626 | { |
| 703 | 627 | UINT16 data = READ_NEXT_WORD(&addr); |
| r31472 | r31473 | |
| 709 | 633 | return; |
| 710 | 634 | |
| 711 | 635 | case 0xc000: |
| 712 | | data = READ_NEXT_WORD(&addr); |
| 713 | | cliptype = data ? 1 : 0; |
| 714 | | |
| 715 | | if (cliptype) |
| 716 | | { |
| 717 | | epic12_device_clip.min_x = epic12_device_gfx_scroll_1_x; |
| 718 | | epic12_device_clip.min_y = epic12_device_gfx_scroll_1_y; |
| 719 | | epic12_device_clip.max_x = epic12_device_clip.min_x + 320-1; |
| 720 | | epic12_device_clip.max_y = epic12_device_clip.min_y + 240-1; |
| 721 | | } |
| 636 | if (READ_NEXT_WORD(&addr)) // cliptype |
| 637 | epic12_device_clip.set(epic12_device_gfx_scroll_1_x_shadowcopy, epic12_device_clip.min_x + 320-1, epic12_device_gfx_scroll_1_y_shadowcopy, epic12_device_clip.min_y + 240-1); |
| 722 | 638 | else |
| 723 | | { |
| 724 | | epic12_device_clip.min_x = 0; |
| 725 | | epic12_device_clip.min_y = 0; |
| 726 | | epic12_device_clip.max_x = 0x2000-1; |
| 727 | | epic12_device_clip.max_y = 0x1000-1; |
| 728 | | } |
| 639 | epic12_device_clip.set(0, 0x2000-1, 0, 0x1000-1); |
| 729 | 640 | break; |
| 730 | 641 | |
| 731 | 642 | case 0x2000: |
| r31472 | r31473 | |
| 1025 | 936 | } |
| 1026 | 937 | |
| 1027 | 938 | space.install_readwrite_handler(addr1, addr2, read , write, U64(0xffffffffffffffff)); |
| 1028 | | |
| 1029 | | |
| 1030 | | |
| 1031 | 939 | } |
| 1032 | 940 | |
| 1033 | 941 | READ64_MEMBER( epic12_device::epic12_device_fpga_r ) |
trunk/src/emu/video/epic12.h
| r31472 | r31473 | |
| 1 | /* emulation of Altera Cyclone EPIC12 FPGA programmed as a blitter */ |
| 1 | 2 | |
| 2 | 3 | #define MCFG_EPIC12_ADD(_tag) \ |
| 3 | 4 | MCFG_DEVICE_ADD(_tag, EPIC12, 0) |
| r31472 | r31473 | |
| 50 | 51 | public: |
| 51 | 52 | epic12_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 52 | 53 | |
| 53 | | static void set_rambase(device_t &device, UINT16* rambase); |
| 54 | void set_rambase(UINT16* rambase) { epic12_device_ram16 = rambase; } |
| 54 | 55 | |
| 55 | 56 | inline UINT16 READ_NEXT_WORD(offs_t *addr); |
| 56 | 57 | |
| r31472 | r31473 | |
| 67 | 68 | DECLARE_READ64_MEMBER( epic12_device_fpga_r ); |
| 68 | 69 | DECLARE_WRITE64_MEMBER( epic12_device_fpga_w ); |
| 69 | 70 | |
| 70 | | void draw_screen(bitmap_rgb32 &bitmap, const rectangle &cliprect ); |
| 71 | void draw_screen(bitmap_rgb32 &bitmap, const rectangle &cliprect); |
| 71 | 72 | |
| 72 | 73 | UINT16* epic12_device_ram16; |
| 73 | 74 | UINT32 epic12_device_gfx_addr; |
| r31472 | r31473 | |
| 94 | 95 | inline void epic12_device_gfx_upload_shadow_copy(address_space &space, offs_t *addr); |
| 95 | 96 | inline void epic12_device_gfx_create_shadow_copy(address_space &space); |
| 96 | 97 | inline UINT16 COPY_NEXT_WORD(address_space &space, offs_t *addr); |
| 97 | | inline void epic12_device_gfx_draw_shadow_copy(address_space &space, offs_t *addr, int cliptype); |
| 98 | inline void epic12_device_gfx_draw_shadow_copy(address_space &space, offs_t *addr); |
| 98 | 99 | inline void epic12_device_gfx_upload(offs_t *addr); |
| 99 | 100 | inline void epic12_device_gfx_draw(offs_t *addr); |
| 100 | 101 | void epic12_device_gfx_exec(void); |
| r31472 | r31473 | |
| 114 | 115 | int m_delay_scale; |
| 115 | 116 | cpu_device* m_maincpu; |
| 116 | 117 | |
| 117 | | static void set_delay_scale(device_t &device, int delay_scale); |
| 118 | | static void set_is_unsafe(device_t &device, int is_unsafe); |
| 119 | | static void set_cpu_device(device_t &device, cpu_device* maincpu); |
| 118 | void set_delay_scale(int delay_scale) { m_delay_scale = delay_scale; } |
| 119 | void set_is_unsafe(int is_unsafe) { m_is_unsafe = is_unsafe; } |
| 120 | void set_cpu_device(cpu_device* maincpu) { m_maincpu = maincpu; } |
| 120 | 121 | |
| 121 | 122 | void install_handlers(int addr1, int addr2); |
| 122 | 123 | |
| r31472 | r31473 | |
| 831 | 832 | virtual void device_start(); |
| 832 | 833 | virtual void device_reset(); |
| 833 | 834 | |
| 834 | | |
| 835 | | |
| 836 | 835 | osd_work_queue * queue; /* work queue */ |
| 837 | 836 | osd_work_item * blitter_request; |
| 838 | 837 | |
| r31472 | r31473 | |
| 841 | 840 | int blitter_busy; |
| 842 | 841 | |
| 843 | 842 | TIMER_CALLBACK_MEMBER( epic12_device_blitter_delay_callback ); |
| 844 | | |
| 845 | | |
| 846 | | private: |
| 847 | 843 | }; |
| 848 | 844 | |
| 849 | 845 | |
| 850 | 846 | |
| 851 | | |
| 852 | | |
| 853 | | |
| 854 | 847 | extern const device_type EPIC12; |