Previous 199869 Revisions Next

r32156 Wednesday 17th September, 2014 at 17:24:53 UTC by Fabio Priuli
(MESS) a2600.c: fixed mapper 3E support, as used by Boulder Dash
homebrew. Also allowed bankswitch writes to get to the TIA for this and
mapper 3F. Finally, included a couple of demos in the softlist so to be
able to test the code in future. nw.
[hash]a2600.xml
[src/emu/bus/vcs]rom.c
[src/mess/drivers]a2600.c

trunk/hash/a2600.xml
r32155r32156
1840018400         </dataarea>
1840118401      </part>
1840218402   </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>&lt;homebrew&gt;</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>&lt;homebrew&gt;</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>
1840318433</softwarelist>
trunk/src/emu/bus/vcs/rom.c
r32155r32156
678678
679679READ8_MEMBER(a26_rom_3e_device::read_rom)
680680{
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)];
686683   
687684   if (offset >= 0x800)
688      return m_rom[offset + (m_num_bank - 1) * 0x800];
685      return m_rom[(offset & 0x7ff) + (m_num_bank - 1) * 0x800];
689686   else
690687      return m_rom[offset + m_base_bank * 0x800];
691688}
692689
693690WRITE8_MEMBER(a26_rom_3e_device::write_bank)
694691{
695   if (offset)   // 0x3f
692   if (offset == 0x3f)
696693   {
697694      m_base_bank = data & (m_num_bank - 1);
698695      m_ram_enable = 0;
699696   }
700   else   // 0x3e
697   else if (offset == 0x3e)
701698   {
702      m_ram_bank = data & 0x3f;
699      m_ram_bank = data & 0x1f;
703700      m_ram_enable = 1;
704701   }
705702}
706703
707704WRITE8_MEMBER(a26_rom_3e_device::write_ram)
708705{
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;
714708}
715709
710
716711/*-------------------------------------------------
717712 "3F Bankswitch" Carts:
718713 write access to 0x00-0x3f determines the 2K ROM bank
trunk/src/mess/drivers/a2600.c
r32155r32156
3333      m_joy1(*this, CONTROL1_TAG),
3434      m_joy2(*this, CONTROL2_TAG) ,
3535      m_cartslot(*this, "cartslot"),
36      m_tia(*this, "tia_video"),
3637      m_maincpu(*this, "maincpu"),
3738      m_screen(*this, "screen") { }
3839
r32155r32156
4950   DECLARE_READ8_MEMBER(a2600_get_databus_contents);
5051   DECLARE_WRITE16_MEMBER(a2600_tia_vsync_callback);
5152   DECLARE_WRITE16_MEMBER(a2600_tia_vsync_callback_pal);
53   DECLARE_WRITE8_MEMBER(cart_over_tia_w);
5254   // investigate how the carts mapped here (Mapper JVP) interact with the RIOT device
5355   DECLARE_READ8_MEMBER(cart_over_riot_r);
5456   DECLARE_WRITE8_MEMBER(cart_over_riot_w);
r32155r32156
5759   required_device<vcs_control_port_device> m_joy1;
5860   required_device<vcs_control_port_device> m_joy2;
5961   required_device<vcs_cart_slot_device> m_cartslot;
62   required_device<tia_video_device> m_tia;
6063
6164   unsigned long detect_2600controllers();
6265   required_device<m6502_device> m_maincpu;
r32155r32156
246249   
247250}
248251
252WRITE8_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
249261MACHINE_START_MEMBER(a2600_state,a2600)
250262{
251263   m_current_screen_height = m_screen->height();
r32155r32156
279291         break;
280292      case A26_3E:
281293         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));
283295         break;
284296      case A26_3F:
285297         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));
287299         break;
288300      case A26_UA:
289301         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));

Previous 199869 Revisions Next


© 1997-2024 The MAME Team