trunk/hash/a2600.xml
| r32155 | r32156 | |
| 18400 | 18400 | </dataarea> |
| 18401 | 18401 | </part> |
| 18402 | 18402 | </software> |
| 18403 | |
| 18404 | |
| 18405 | <!-- Since the released cart is undumped, let us include at least these demos to test 3E bankswitch code --> |
| 18406 | <software name="bdash"> |
| 18407 | <description>Boulder Dash (Demo v2)</description> |
| 18408 | <year>2014</year> |
| 18409 | <publisher><homebrew></publisher> |
| 18410 | <part name="cart" interface="a2600_cart"> |
| 18411 | <feature name="slot" value="a26_3e" /> |
| 18412 | <dataarea name="rom" size="32768"> |
| 18413 | <rom name="boulder dash (demo 2).bin" size="32768" crc="2f7b6112" sha1="adcb4b38413ad6851a1562cacd376dbf25a4dd00" offset="0" /> |
| 18414 | </dataarea> |
| 18415 | <dataarea name="ram" size="32768"> |
| 18416 | </dataarea> |
| 18417 | </part> |
| 18418 | </software> |
| 18419 | |
| 18420 | <software name="bdash1" cloneof="bdash"> |
| 18421 | <description>Boulder Dash (Demo v1)</description> |
| 18422 | <year>2011</year> |
| 18423 | <publisher><homebrew></publisher> |
| 18424 | <part name="cart" interface="a2600_cart"> |
| 18425 | <feature name="slot" value="a26_3e" /> |
| 18426 | <dataarea name="rom" size="32768"> |
| 18427 | <rom name="boulderdash100.bin" size="32768" crc="9ba60c62" sha1="660360ee11ab442d5f9db44848d3c0c99ee61e1c" offset="0" /> |
| 18428 | </dataarea> |
| 18429 | <dataarea name="ram" size="32768"> |
| 18430 | </dataarea> |
| 18431 | </part> |
| 18432 | </software> |
| 18403 | 18433 | </softwarelist> |
trunk/src/emu/bus/vcs/rom.c
| r32155 | r32156 | |
| 678 | 678 | |
| 679 | 679 | READ8_MEMBER(a26_rom_3e_device::read_rom) |
| 680 | 680 | { |
| 681 | | if (m_ram && m_ram_enable && offset >= 0x400 && offset < 0x600) |
| 682 | | { |
| 683 | | offset -= 0x400; |
| 684 | | return m_ram[offset + (m_ram_bank * 0x200)]; |
| 685 | | } |
| 681 | if (m_ram && m_ram_enable && offset < 0x400) |
| 682 | return m_ram[offset + (m_ram_bank * 0x400)]; |
| 686 | 683 | |
| 687 | 684 | if (offset >= 0x800) |
| 688 | | return m_rom[offset + (m_num_bank - 1) * 0x800]; |
| 685 | return m_rom[(offset & 0x7ff) + (m_num_bank - 1) * 0x800]; |
| 689 | 686 | else |
| 690 | 687 | return m_rom[offset + m_base_bank * 0x800]; |
| 691 | 688 | } |
| 692 | 689 | |
| 693 | 690 | WRITE8_MEMBER(a26_rom_3e_device::write_bank) |
| 694 | 691 | { |
| 695 | | if (offset) // 0x3f |
| 692 | if (offset == 0x3f) |
| 696 | 693 | { |
| 697 | 694 | m_base_bank = data & (m_num_bank - 1); |
| 698 | 695 | m_ram_enable = 0; |
| 699 | 696 | } |
| 700 | | else // 0x3e |
| 697 | else if (offset == 0x3e) |
| 701 | 698 | { |
| 702 | | m_ram_bank = data & 0x3f; |
| 699 | m_ram_bank = data & 0x1f; |
| 703 | 700 | m_ram_enable = 1; |
| 704 | 701 | } |
| 705 | 702 | } |
| 706 | 703 | |
| 707 | 704 | WRITE8_MEMBER(a26_rom_3e_device::write_ram) |
| 708 | 705 | { |
| 709 | | if (m_ram && m_ram_enable && offset >= 0x400 && offset < 0x600) |
| 710 | | { |
| 711 | | offset -= 0x400; |
| 712 | | m_ram[offset + (m_ram_bank * 0x200)] = data; |
| 713 | | } |
| 706 | if (m_ram && m_ram_enable && offset >= 0x400 && offset < 0x800) |
| 707 | m_ram[(offset & 0x3ff) + (m_ram_bank * 0x400)] = data; |
| 714 | 708 | } |
| 715 | 709 | |
| 710 | |
| 716 | 711 | /*------------------------------------------------- |
| 717 | 712 | "3F Bankswitch" Carts: |
| 718 | 713 | write access to 0x00-0x3f determines the 2K ROM bank |
trunk/src/mess/drivers/a2600.c
| r32155 | r32156 | |
| 33 | 33 | m_joy1(*this, CONTROL1_TAG), |
| 34 | 34 | m_joy2(*this, CONTROL2_TAG) , |
| 35 | 35 | m_cartslot(*this, "cartslot"), |
| 36 | m_tia(*this, "tia_video"), |
| 36 | 37 | m_maincpu(*this, "maincpu"), |
| 37 | 38 | m_screen(*this, "screen") { } |
| 38 | 39 | |
| r32155 | r32156 | |
| 49 | 50 | DECLARE_READ8_MEMBER(a2600_get_databus_contents); |
| 50 | 51 | DECLARE_WRITE16_MEMBER(a2600_tia_vsync_callback); |
| 51 | 52 | DECLARE_WRITE16_MEMBER(a2600_tia_vsync_callback_pal); |
| 53 | DECLARE_WRITE8_MEMBER(cart_over_tia_w); |
| 52 | 54 | // investigate how the carts mapped here (Mapper JVP) interact with the RIOT device |
| 53 | 55 | DECLARE_READ8_MEMBER(cart_over_riot_r); |
| 54 | 56 | DECLARE_WRITE8_MEMBER(cart_over_riot_w); |
| r32155 | r32156 | |
| 57 | 59 | required_device<vcs_control_port_device> m_joy1; |
| 58 | 60 | required_device<vcs_control_port_device> m_joy2; |
| 59 | 61 | required_device<vcs_cart_slot_device> m_cartslot; |
| 62 | required_device<tia_video_device> m_tia; |
| 60 | 63 | |
| 61 | 64 | unsigned long detect_2600controllers(); |
| 62 | 65 | required_device<m6502_device> m_maincpu; |
| r32155 | r32156 | |
| 246 | 249 | |
| 247 | 250 | } |
| 248 | 251 | |
| 252 | WRITE8_MEMBER(a2600_state::cart_over_tia_w) |
| 253 | { |
| 254 | // Both Cart & TIA see these addresses |
| 255 | if (m_cartslot) |
| 256 | m_cartslot->write_bank(space, offset, data); |
| 257 | |
| 258 | m_tia->write(space, offset, data); |
| 259 | } |
| 260 | |
| 249 | 261 | MACHINE_START_MEMBER(a2600_state,a2600) |
| 250 | 262 | { |
| 251 | 263 | m_current_screen_height = m_screen->height(); |
| r32155 | r32156 | |
| 279 | 291 | break; |
| 280 | 292 | case A26_3E: |
| 281 | 293 | m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cartslot), write8_delegate(FUNC(vcs_cart_slot_device::write_ram),(vcs_cart_slot_device*)m_cartslot)); |
| 282 | | m_maincpu->space(AS_PROGRAM).install_write_handler(0x3e, 0x3f, write8_delegate(FUNC(vcs_cart_slot_device::write_bank),(vcs_cart_slot_device*)m_cartslot)); |
| 294 | m_maincpu->space(AS_PROGRAM).install_write_handler(0x00, 0x3f, write8_delegate(FUNC(a2600_state::cart_over_tia_w), this)); |
| 283 | 295 | break; |
| 284 | 296 | case A26_3F: |
| 285 | 297 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cartslot)); |
| 286 | | m_maincpu->space(AS_PROGRAM).install_write_handler(0x00, 0x3f, write8_delegate(FUNC(vcs_cart_slot_device::write_bank),(vcs_cart_slot_device*)m_cartslot)); |
| 298 | m_maincpu->space(AS_PROGRAM).install_write_handler(0x00, 0x3f, write8_delegate(FUNC(a2600_state::cart_over_tia_w), this)); |
| 287 | 299 | break; |
| 288 | 300 | case A26_UA: |
| 289 | 301 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cartslot)); |