trunk/src/mess/drivers/snes.c
| r29191 | r29192 | |
| 1904 | 1904 | case SNES_SOULBLAD: |
| 1905 | 1905 | // reads from xxx0-xxx3in range [80-bf] return a fixed sequence of 4bits; reads in range [c0-ff] return open bus |
| 1906 | 1906 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x808000, 0x808003, 0, 0x3f7ff0, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); |
| 1907 | | m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0xc00000, 0xffffff, FUNC(snes_open_bus_r)); |
| 1907 | m_maincpu->space(AS_PROGRAM).install_read_handler(0xc00000, 0xffffff, read8_delegate(FUNC(snes_console_state::snes_open_bus_r),this)); |
| 1908 | 1908 | break; |
| 1909 | 1909 | case SNES_BUGS: |
| 1910 | 1910 | case SNES_BANANA: |
trunk/src/mame/machine/snes.c
| r29191 | r29192 | |
| 34 | 34 | |
| 35 | 35 | void snes_state::video_start() |
| 36 | 36 | { |
| 37 | | m_ppu.ppu_start(m_screen); |
| 37 | m_ppu.ppu_start(m_screen,this); |
| 38 | 38 | } |
| 39 | 39 | |
| 40 | 40 | UINT32 snes_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) |
| r29191 | r29192 | |
| 269 | 269 | |
| 270 | 270 | *************************************/ |
| 271 | 271 | |
| 272 | | READ8_HANDLER( snes_open_bus_r ) |
| 272 | READ8_MEMBER( snes_state::snes_open_bus_r ) |
| 273 | 273 | { |
| 274 | 274 | static UINT8 recurse = 0; |
| 275 | 275 | UINT16 result; |
trunk/src/mame/includes/snes.h
| r29191 | r29192 | |
| 375 | 375 | UINT8 blend_exception[SNES_SCR_WIDTH]; |
| 376 | 376 | }; |
| 377 | 377 | |
| 378 | class snes_state; |
| 379 | |
| 378 | 380 | class snes_ppu_class /* once all the regs are saved in this structure, it would be better to reorganize it a bit... */ |
| 379 | 381 | { |
| 380 | 382 | public: |
| r29191 | r29192 | |
| 562 | 564 | inline UINT32 get_vram_address(running_machine &machine); |
| 563 | 565 | UINT8 dbg_video(running_machine &machine, UINT16 curline); |
| 564 | 566 | |
| 565 | | void ppu_start(screen_device &screen); |
| 567 | void ppu_start(screen_device &screen,snes_state *state); |
| 566 | 568 | UINT8 read(address_space &space, UINT32 offset, UINT8 wrio_bit7); |
| 567 | 569 | void write(address_space &space, UINT32 offset, UINT8 data); |
| 568 | 570 | |
| r29191 | r29192 | |
| 575 | 577 | UINT16 *m_oam_ram; /* Object Attribute Memory */ |
| 576 | 578 | UINT16 *m_cgram; /* Palette RAM */ |
| 577 | 579 | UINT8 *m_vram; /* Video RAM (TODO: Should be 16-bit, but it's easier this way) */ |
| 580 | |
| 581 | snes_state *m_state; |
| 578 | 582 | }; |
| 579 | 583 | |
| 580 | 584 | struct snes_cart_info |
| r29191 | r29192 | |
| 713 | 717 | DECLARE_READ8_MEMBER(snes_r_bank2); |
| 714 | 718 | DECLARE_WRITE8_MEMBER(snes_w_bank1); |
| 715 | 719 | DECLARE_WRITE8_MEMBER(snes_w_bank2); |
| 720 | DECLARE_READ8_MEMBER(snes_open_bus_r); |
| 716 | 721 | TIMER_CALLBACK_MEMBER(snes_nmi_tick); |
| 717 | 722 | TIMER_CALLBACK_MEMBER(snes_hirq_tick_callback); |
| 718 | 723 | TIMER_CALLBACK_MEMBER(snes_reset_oam_address); |
| r29191 | r29192 | |
| 775 | 780 | SNES_COLOR |
| 776 | 781 | }; |
| 777 | 782 | |
| 778 | | DECLARE_READ8_HANDLER( snes_open_bus_r ); |
| 779 | | |
| 780 | 783 | #endif /* _SNES_H_ */ |
trunk/src/mame/video/snes.c
| r29191 | r29192 | |
| 1612 | 1612 | g_profiler.stop(); |
| 1613 | 1613 | } |
| 1614 | 1614 | |
| 1615 | | void snes_ppu_class::ppu_start(screen_device &screen) |
| 1615 | void snes_ppu_class::ppu_start(screen_device &screen,snes_state *state) |
| 1616 | 1616 | { |
| 1617 | 1617 | m_screen = &screen; |
| 1618 | 1618 | running_machine &machine = screen.machine(); |
| 1619 | | |
| 1619 | m_state = state; |
| 1620 | 1620 | #if SNES_LAYER_DEBUG |
| 1621 | 1621 | memset(&m_debug_options, 0, sizeof(m_debug_options)); |
| 1622 | 1622 | #endif |
| r29191 | r29192 | |
| 1907 | 1907 | if (h <= 4) |
| 1908 | 1908 | m_vram[offset] = data; |
| 1909 | 1909 | else if (h == 6) |
| 1910 | | m_vram[offset] = snes_open_bus_r(space, 0); |
| 1910 | m_vram[offset] = m_state->snes_open_bus_r(space, 0); |
| 1911 | 1911 | else |
| 1912 | 1912 | { |
| 1913 | 1913 | //printf("%d %d VRAM write, CHECK!\n",h,v); |
| r29191 | r29192 | |
| 2118 | 2118 | } |
| 2119 | 2119 | case SLHV: /* Software latch for H/V counter */ |
| 2120 | 2120 | latch_counters(space.machine()); |
| 2121 | | return snes_open_bus_r(space, 0); /* Return value is meaningless */ |
| 2121 | return m_state->snes_open_bus_r(space, 0); /* Return value is meaningless */ |
| 2122 | 2122 | case ROAMDATA: /* Read data from OAM (DR) */ |
| 2123 | 2123 | m_ppu1_open_bus = oam_read(space, m_oam.address); |
| 2124 | 2124 | PPU_REG(OAMDATA) = (PPU_REG(OAMDATA) + 1) % 2; |
| r29191 | r29192 | |
| 2213 | 2213 | } |
| 2214 | 2214 | |
| 2215 | 2215 | /* note: remaining registers (Namely TM in Super Kick Boxing) returns MDR open bus, not PPU Open Bus! */ |
| 2216 | | return snes_open_bus_r(space, 0); |
| 2216 | return m_state->snes_open_bus_r(space, 0); |
| 2217 | 2217 | } |
| 2218 | 2218 | |
| 2219 | 2219 | |