Previous 199869 Revisions Next

r31993 Monday 8th September, 2014 at 13:55:48 UTC by Fabio Priuli
fix error when attempting to mount a cart designed for the A800 right slot (e.g. Monkey Wrench II)
into a system without the right slot. nw.
[src/mess/drivers]atari400.c

trunk/src/mess/drivers/atari400.c
r31992r31993
303303   UINT8 m_mmu, m_ext_bank;
304304   
305305   void setup_ram(int bank,UINT32 size);
306   void setup_cart(int type);
306   void setup_cart(a800_cart_slot_device *slot);
307307
308308   // start helper (until GTIA & ANTIC are device-fied)
309309   void common_start();
r31992r31993
18321832   }   
18331833}
18341834
1835void a400_state::setup_cart(int type)
1835void a400_state::setup_cart(a800_cart_slot_device *slot)
18361836{
18371837   m_cart_disabled = 0;
18381838   m_last_offs = -1;
18391839
1840   switch (type)
1840   switch (slot->get_cart_type())
18411841   {
18421842      case A800_8K:
1843         m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot));
1843         m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot));
18441844         m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
18451845         break;
18461846      case A800_8K_RIGHT:
1847         m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0x9fff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot2));
1847         m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0x9fff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot));
18481848         m_maincpu->space(AS_PROGRAM).unmap_write(0x8000, 0x9fff);
18491849         break;
18501850      case A800_16K:
1851         m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot));
1851         m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot));
18521852         m_maincpu->space(AS_PROGRAM).unmap_write(0x8000, 0xbfff);
18531853         break;
18541854      case A800_PHOENIX:
1855         m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot));
1855         m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot));
18561856         m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
18571857         m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd5ff, write8_delegate(FUNC(a400_state::disable_cart), this));
18581858         break;
18591859      case A800_BBSB:
1860         m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot));
1861         m_maincpu->space(AS_PROGRAM).install_write_handler(0x8000, 0x9fff, write8_delegate(FUNC(a800_cart_slot_device::write_80xx),(a800_cart_slot_device*)m_cartslot));
1860         m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot));
1861         m_maincpu->space(AS_PROGRAM).install_write_handler(0x8000, 0x9fff, write8_delegate(FUNC(a800_cart_slot_device::write_80xx),(a800_cart_slot_device*)slot));
18621862         m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
18631863         break;
18641864      case A800_OSS034M:
r31992r31993
18671867      case A800_OSS8K:
18681868      case A800_TURBO64:
18691869      case A800_TURBO128:
1870         m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot));
1870         m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot));
18711871         m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
18721872         m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd5ff, write8_delegate(FUNC(a400_state::disable_cart), this));
18731873         break;
18741874      case A800_MICROCALC:
18751875         // this can also disable ROM when reading in 0xd500-0xd5ff
1876         m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot));
1876         m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot));
18771877         m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
18781878         m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xd500, 0xd5ff, read8_delegate(FUNC(a400_state::read_d5xx), this), write8_delegate(FUNC(a400_state::disable_cart), this));
18791879         break;
18801880      case A800_EXPRESS:
1881         m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot));
1881         m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot));
18821882         m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
18831883         m_maincpu->space(AS_PROGRAM).install_write_handler(0xd570, 0xd57f, write8_delegate(FUNC(a400_state::disable_cart), this));
18841884         break;
18851885      case A800_DIAMOND:
1886         m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot));
1886         m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot));
18871887         m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
18881888         m_maincpu->space(AS_PROGRAM).install_write_handler(0xd5d0, 0xd5df, write8_delegate(FUNC(a400_state::disable_cart), this));
18891889         break;
18901890      case A800_WILLIAMS:
1891         m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot));
1891         m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot));
18921892         m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
18931893         m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd50f, write8_delegate(FUNC(a400_state::disable_cart), this));
18941894         break;
18951895      case A800_SPARTADOS:
1896         m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot));
1896         m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot));
18971897         m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
18981898         m_maincpu->space(AS_PROGRAM).install_write_handler(0xd5e0, 0xd5ef, write8_delegate(FUNC(a400_state::disable_cart), this));
18991899         break;
19001900      case A800_TELELINK2:
1901         m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot));
1902         m_maincpu->space(AS_PROGRAM).install_write_handler(0x9000, 0x90ff, write8_delegate(FUNC(a800_cart_slot_device::write_80xx),(a800_cart_slot_device*)m_cartslot));
1901         m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot));
1902         m_maincpu->space(AS_PROGRAM).install_write_handler(0x9000, 0x90ff, write8_delegate(FUNC(a800_cart_slot_device::write_80xx),(a800_cart_slot_device*)slot));
19031903         m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
1904         m_maincpu->space(AS_PROGRAM).install_read_handler(0xd501, 0xd501, read8_delegate(FUNC(a800_cart_slot_device::read_d5xx),(a800_cart_slot_device*)m_cartslot));
1905         m_maincpu->space(AS_PROGRAM).install_write_handler(0xd502, 0xd502, write8_delegate(FUNC(a800_cart_slot_device::write_d5xx),(a800_cart_slot_device*)m_cartslot));
1904         m_maincpu->space(AS_PROGRAM).install_read_handler(0xd501, 0xd501, read8_delegate(FUNC(a800_cart_slot_device::read_d5xx),(a800_cart_slot_device*)slot));
1905         m_maincpu->space(AS_PROGRAM).install_write_handler(0xd502, 0xd502, write8_delegate(FUNC(a800_cart_slot_device::write_d5xx),(a800_cart_slot_device*)slot));
19061906         break;
19071907      case A800_BLIZZARD:
1908         m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot));
1908         m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot));
19091909         m_maincpu->space(AS_PROGRAM).unmap_write(0x8000, 0xbfff);
19101910         m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd5ff, write8_delegate(FUNC(a400_state::disable_cart), this));
19111911         break;
19121912      case A800_XEGS:
1913         m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot));
1913         m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot));
19141914         m_maincpu->space(AS_PROGRAM).unmap_write(0x8000, 0xbfff);
1915         m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd5ff, write8_delegate(FUNC(a800_cart_slot_device::write_d5xx),(a800_cart_slot_device*)m_cartslot));
1915         m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd5ff, write8_delegate(FUNC(a800_cart_slot_device::write_d5xx),(a800_cart_slot_device*)slot));
19161916         break;
19171917      case A5200_4K:
19181918      case A5200_8K:
19191919      case A5200_16K:
19201920      case A5200_32K:
19211921      case A5200_16K_2CHIPS:
1922         m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot));
1922         m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot));
19231923         m_maincpu->space(AS_PROGRAM).unmap_write(0x4000, 0xbfff);
19241924         break;
19251925      case A5200_BBSB:
1926         m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot));
1927         m_maincpu->space(AS_PROGRAM).install_write_handler(0x4000, 0x5fff, write8_delegate(FUNC(a800_cart_slot_device::write_80xx),(a800_cart_slot_device*)m_cartslot));
1926         m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot));
1927         m_maincpu->space(AS_PROGRAM).install_write_handler(0x4000, 0x5fff, write8_delegate(FUNC(a800_cart_slot_device::write_80xx),(a800_cart_slot_device*)slot));
19281928         m_maincpu->space(AS_PROGRAM).unmap_write(0x6000, 0xbfff);
19291929         break;
19301930   }   
r31992r31993
19571957   setup_ram(0, m_ram->size());
19581958   setup_ram(1, m_ram->size());
19591959   setup_ram(2, m_ram->size());
1960   setup_cart(m_cartslot->get_cart_type());
1960   setup_cart(m_cartslot);
19611961
19621962   save_item(NAME(m_cart_disabled));
19631963   save_item(NAME(m_last_offs));
r31992r31993
19701970   setup_ram(0, m_ram->size());
19711971   setup_ram(1, m_ram->size());
19721972   setup_ram(2, m_ram->size());
1973   setup_cart(m_cartslot->get_cart_type());
1974   setup_cart(m_cartslot2->get_cart_type());
1973   setup_cart(m_cartslot);
1974   setup_cart(m_cartslot2);
19751975
19761976   save_item(NAME(m_cart_disabled));
19771977   save_item(NAME(m_last_offs));
r31992r31993
19821982   m_mmu = 0xfd;
19831983   m_ext_bank = 0x03;   // only used by a130xe
19841984   common_start();
1985   setup_cart(m_cartslot->get_cart_type());
1985   setup_cart(m_cartslot);
19861986
19871987   save_item(NAME(m_cart_disabled));
19881988   save_item(NAME(m_last_offs));
r31992r31993
19941994MACHINE_START_MEMBER( a400_state, a5200 )
19951995{
19961996   a5200_start();
1997   setup_cart(m_cartslot->get_cart_type());
1997   setup_cart(m_cartslot);
19981998
19991999   save_item(NAME(m_cart_disabled));
20002000   save_item(NAME(m_last_offs));

Previous 199869 Revisions Next


© 1997-2024 The MAME Team