Previous 199869 Revisions Next

r20783 Wednesday 6th February, 2013 at 21:53:52 UTC by Wilbert Pol
(MESS) atari400.c: Started cleaning things a bit (nw)
[src/mess/drivers]atari400.c

trunk/src/mess/drivers/atari400.c
r20782r20783
251251public:
252252   a400_state(const machine_config &mconfig, device_type type, const char *tag)
253253      : driver_device(mconfig, type, tag)
254      , m_maincpu(*this, "maincpu")
255      , m_ram(*this, RAM_TAG)
256      , m_pia(*this, "pia")
254257      , m_a800_cart_loaded(0)
255258      , m_atari(0)
256259      , m_a800_cart_type(A800_UNKNOWN)
260      , m_xegs_banks(0)
261      , m_xegs_cart(0)
257262   { }
258263
259264   DECLARE_DRIVER_INIT(xegs);
260265   DECLARE_DRIVER_INIT(a800xl);
261266   DECLARE_DRIVER_INIT(a600xl);
267   DECLARE_MACHINE_START(xegs);
268   DECLARE_MACHINE_START(a400);
269   DECLARE_MACHINE_START(a800);
270   DECLARE_MACHINE_START(a800xl);
271   DECLARE_MACHINE_START(a5200);
262272   virtual void palette_init();
263273   DECLARE_WRITE8_MEMBER(a1200xl_pia_pb_w);
264274   DECLARE_WRITE8_MEMBER(a800xl_pia_pb_w);
265275   DECLARE_WRITE8_MEMBER(xegs_pia_pb_w);
276   DECLARE_WRITE8_MEMBER(x32_bank_w);
277   DECLARE_WRITE8_MEMBER(w64_bank_w);
278   DECLARE_WRITE8_MEMBER(ex64_bank_w);
279   DECLARE_WRITE8_MEMBER(bbsb_bankl_w);
280   DECLARE_WRITE8_MEMBER(bbsb_bankh_w);
281   DECLARE_WRITE8_MEMBER(oss_034m_w);
282   DECLARE_WRITE8_MEMBER(oss_m091_w);
283   DECLARE_WRITE8_MEMBER(xegs_bankswitch);
266284
267285   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( a800_cart );
268286   DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( a800_cart );
r20782r20783
280298   void ms_atari800xl_machine_start(int type, int has_cart);
281299
282300protected:
301   required_device<cpu_device> m_maincpu;
302   required_device<ram_device> m_ram;
303   required_device<pia6821_device> m_pia;
304
283305   int m_a800_cart_loaded;
284306   int m_atari;
285307   int m_a800_cart_type;
308   UINT8 m_xegs_banks;
309   UINT8 m_xegs_cart;
286310
287311   void a800_setbank(int cart_mounted);
288
312   void a800xl_mmu(UINT8 new_mmu);
313   void a1200xl_mmu(UINT8 new_mmu);
314   void xegs_mmu(UINT8 new_mmu);
315   void a800_setup_mappers(int type);
289316};
290317
291318/**************************************************************
r20782r20783
795822 *
796823 **************************************************************/
797824
798static void a800xl_mmu(running_machine &machine, UINT8 new_mmu)
825void a400_state::a800xl_mmu(UINT8 new_mmu)
799826{
800   UINT8 *base = machine.root_device().memregion("maincpu")->base();
827   UINT8 *base = memregion("maincpu")->base();
801828   UINT8 *base1, *base2, *base3, *base4;
802829
803830   /* check if memory C000-FFFF changed */
804831   if( new_mmu & 0x01 )
805832   {
806      logerror("%s MMU BIOS ROM\n", machine.system().name);
833      logerror("%s MMU BIOS ROM\n", machine().system().name);
807834      base3 = base + 0x14000;  /* 8K lo BIOS */
808835      base4 = base + 0x15800;  /* 4K FP ROM + 8K hi BIOS */
809      machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xc000, 0xcfff, "bank3");
810      machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xc000, 0xcfff);
811      machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xd800, 0xffff, "bank4");
812      machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xd800, 0xffff);
836      m_maincpu->space(AS_PROGRAM).install_read_bank(0xc000, 0xcfff, "bank3");
837      m_maincpu->space(AS_PROGRAM).unmap_write(0xc000, 0xcfff);
838      m_maincpu->space(AS_PROGRAM).install_read_bank(0xd800, 0xffff, "bank4");
839      m_maincpu->space(AS_PROGRAM).unmap_write(0xd800, 0xffff);
813840   }
814841   else
815842   {
816      logerror("%s MMU BIOS RAM\n", machine.system().name);
843      logerror("%s MMU BIOS RAM\n", machine().system().name);
817844      base3 = base + 0x0c000;  /* 8K RAM */
818845      base4 = base + 0x0d800;  /* 4K RAM + 8K RAM */
819      machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0xc000, 0xcfff, "bank3");
820      machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0xd800, 0xffff, "bank4");
846      m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0xc000, 0xcfff, "bank3");
847      m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0xd800, 0xffff, "bank4");
821848   }
822   machine.root_device().membank("bank3")->set_base(base3);
823   machine.root_device().membank("bank4")->set_base(base4);
849   membank("bank3")->set_base(base3);
850   membank("bank4")->set_base(base4);
824851
825852   /* check if BASIC changed */
826853   if( new_mmu & 0x02 )
827854   {
828      logerror("%s MMU BASIC RAM\n", machine.system().name);
829      machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0xa000, 0xbfff, "bank1");
855      logerror("%s MMU BASIC RAM\n", machine().system().name);
856      m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0xa000, 0xbfff, "bank1");
830857      base1 = base + 0x0a000;  /* 8K RAM */
831858   }
832859   else
833860   {
834      logerror("%s MMU BASIC ROM\n", machine.system().name);
835      machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xa000, 0xbfff, "bank1");
836      machine.device("maincpu")->memory().space(AS_PROGRAM).nop_write(0xa000, 0xbfff);
861      logerror("%s MMU BASIC ROM\n", machine().system().name);
862      m_maincpu->space(AS_PROGRAM).install_read_bank(0xa000, 0xbfff, "bank1");
863      m_maincpu->space(AS_PROGRAM).nop_write(0xa000, 0xbfff);
837864      base1 = base + 0x10000;  /* 8K BASIC */
838865   }
839866
840   machine.root_device().membank("bank1")->set_base(base1);
867   membank("bank1")->set_base(base1);
841868
842869   /* check if self-test ROM changed */
843870   if( new_mmu & 0x80 )
844871   {
845      logerror("%s MMU SELFTEST RAM\n", machine.system().name);
846      machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0x5000, 0x57ff, "bank2");
872      logerror("%s MMU SELFTEST RAM\n", machine().system().name);
873      m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x5000, 0x57ff, "bank2");
847874      base2 = base + 0x05000;  /* 0x0800 bytes */
848875   }
849876   else
850877   {
851      logerror("%s MMU SELFTEST ROM\n", machine.system().name);
852      machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x5000, 0x57ff, "bank2");
853      machine.device("maincpu")->memory().space(AS_PROGRAM).nop_write(0x5000, 0x57ff);
878      logerror("%s MMU SELFTEST ROM\n", machine().system().name);
879      m_maincpu->space(AS_PROGRAM).install_read_bank(0x5000, 0x57ff, "bank2");
880      m_maincpu->space(AS_PROGRAM).nop_write(0x5000, 0x57ff);
854881      base2 = base + 0x15000;  /* 0x0800 bytes */
855882   }
856   machine.root_device().membank("bank2")->set_base(base2);
883   membank("bank2")->set_base(base2);
857884}
858885
859886/* BASIC was available in a separate cart, so we don't test it */
860static void a1200xl_mmu(running_machine &machine, UINT8 new_mmu)
887void a400_state::a1200xl_mmu(UINT8 new_mmu)
861888{
862   UINT8 *base = machine.root_device().memregion("maincpu")->base();
889   UINT8 *base = memregion("maincpu")->base();
863890   UINT8 *base2, *base3, *base4;
864891
865892   /* check if memory C000-FFFF changed */
866893   if( new_mmu & 0x01 )
867894   {
868      logerror("%s MMU BIOS ROM\n", machine.system().name);
895      logerror("%s MMU BIOS ROM\n", machine().system().name);
869896      base3 = base + 0x14000;  /* 8K lo BIOS */
870897      base4 = base + 0x15800;  /* 4K FP ROM + 8K hi BIOS */
871      machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xc000, 0xcfff, "bank3");
872      machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xc000, 0xcfff);
873      machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xd800, 0xffff, "bank4");
874      machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xd800, 0xffff);
898      m_maincpu->space(AS_PROGRAM).install_read_bank(0xc000, 0xcfff, "bank3");
899      m_maincpu->space(AS_PROGRAM).unmap_write(0xc000, 0xcfff);
900      m_maincpu->space(AS_PROGRAM).install_read_bank(0xd800, 0xffff, "bank4");
901      m_maincpu->space(AS_PROGRAM).unmap_write(0xd800, 0xffff);
875902   }
876903   else
877904   {
878      logerror("%s MMU BIOS RAM\n", machine.system().name);
905      logerror("%s MMU BIOS RAM\n", machine().system().name);
879906      base3 = base + 0x0c000;  /* 8K RAM */
880907      base4 = base + 0x0d800;  /* 4K RAM + 8K RAM */
881      machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0xc000, 0xcfff, "bank3");
882      machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0xd800, 0xffff, "bank4");
908      m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0xc000, 0xcfff, "bank3");
909      m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0xd800, 0xffff, "bank4");
883910   }
884   machine.root_device().membank("bank3")->set_base(base3);
885   machine.root_device().membank("bank4")->set_base(base4);
911   membank("bank3")->set_base(base3);
912   membank("bank4")->set_base(base4);
886913
887914   /* check if self-test ROM changed */
888915   if( new_mmu & 0x80 )
889916   {
890      logerror("%s MMU SELFTEST RAM\n", machine.system().name);
917      logerror("%s MMU SELFTEST RAM\n", machine().system().name);
891918      base2 = base + 0x05000;  /* 0x0800 bytes */
892      machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0x5000, 0x57ff, "bank2");
919      m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x5000, 0x57ff, "bank2");
893920   }
894921   else
895922   {
896      logerror("%s MMU SELFTEST ROM\n", machine.system().name);
923      logerror("%s MMU SELFTEST ROM\n", machine().system().name);
897924      base2 = base + 0x15000;  /* 0x0800 bytes */
898      machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x5000, 0x57ff, "bank2");
899      machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x5000, 0x57ff);
925      m_maincpu->space(AS_PROGRAM).install_read_bank(0x5000, 0x57ff, "bank2");
926      m_maincpu->space(AS_PROGRAM).unmap_write(0x5000, 0x57ff);
900927   }
901   machine.root_device().membank("bank2")->set_base(base2);
928   membank("bank2")->set_base(base2);
902929}
903930
904static void xegs_mmu(running_machine &machine, UINT8 new_mmu)
931void a400_state::xegs_mmu(UINT8 new_mmu)
905932{
906   UINT8 *base = machine.root_device().memregion("maincpu")->base();
933   UINT8 *base = memregion("maincpu")->base();
907934   UINT8 *base2, *base3, *base4;
908935
909936   /* check if memory C000-FFFF changed */
910937   if( new_mmu & 0x01 )
911938   {
912      logerror("%s MMU BIOS ROM\n", machine.system().name);
939      logerror("%s MMU BIOS ROM\n", machine().system().name);
913940      base3 = base + 0x14000;  /* 8K lo BIOS */
914941      base4 = base + 0x15800;  /* 4K FP ROM + 8K hi BIOS */
915      machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xc000, 0xcfff, "bank3");
916      machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xc000, 0xcfff);
917      machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xd800, 0xffff, "bank4");
918      machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xd800, 0xffff);
942      m_maincpu->space(AS_PROGRAM).install_read_bank(0xc000, 0xcfff, "bank3");
943      m_maincpu->space(AS_PROGRAM).unmap_write(0xc000, 0xcfff);
944      m_maincpu->space(AS_PROGRAM).install_read_bank(0xd800, 0xffff, "bank4");
945      m_maincpu->space(AS_PROGRAM).unmap_write(0xd800, 0xffff);
919946   }
920947   else
921948   {
922      logerror("%s MMU BIOS RAM\n", machine.system().name);
949      logerror("%s MMU BIOS RAM\n", machine().system().name);
923950      base3 = base + 0x0c000;  /* 8K RAM */
924951      base4 = base + 0x0d800;  /* 4K RAM + 8K RAM */
925      machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0xc000, 0xcfff, "bank3");
926      machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0xd800, 0xffff, "bank4");
952      m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0xc000, 0xcfff, "bank3");
953      m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0xd800, 0xffff, "bank4");
927954   }
928   machine.root_device().membank("bank3")->set_base(base3);
929   machine.root_device().membank("bank4")->set_base(base4);
955   membank("bank3")->set_base(base3);
956   membank("bank4")->set_base(base4);
930957
931958
932959   /* check if self-test ROM changed */
933960   if( new_mmu & 0x80 )
934961   {
935      logerror("%s MMU SELFTEST RAM\n", machine.system().name);
936      machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0x5000, 0x57ff, "bank2");
962      logerror("%s MMU SELFTEST RAM\n", machine().system().name);
963      m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x5000, 0x57ff, "bank2");
937964      base2 = base + 0x05000;  /* 0x0800 bytes */
938965   }
939966   else
940967   {
941      logerror("%s MMU SELFTEST ROM\n", machine.system().name);
942      machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x5000, 0x57ff, "bank2");
943      machine.device("maincpu")->memory().space(AS_PROGRAM).nop_write(0x5000, 0x57ff);
968      logerror("%s MMU SELFTEST ROM\n", machine().system().name);
969      m_maincpu->space(AS_PROGRAM).install_read_bank(0x5000, 0x57ff, "bank2");
970      m_maincpu->space(AS_PROGRAM).nop_write(0x5000, 0x57ff);
944971      base2 = base + 0x15000;  /* 0x0800 bytes */
945972   }
946   machine.root_device().membank("bank2")->set_base(base2);
973   membank("bank2")->set_base(base2);
947974}
948975
949976
r20782r20783
952979{
953980   offs_t ram_top;
954981   // take care of 0x0000-0x7fff: RAM or NOP
955   ram_top = MIN(machine().device<ram_device>(RAM_TAG)->size(), 0x8000) - 1;
956   machine().device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0x0000, ram_top, "0000");
957   machine().root_device().membank("0000")->set_base(machine().device<ram_device>(RAM_TAG)->pointer());
982   ram_top = MIN(m_ram->size(), 0x8000) - 1;
983   m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x0000, ram_top, "0000");
984   membank("0000")->set_base(m_ram->pointer());
958985
959986   // take care of 0x8000-0x9fff: A800 -> either right slot or RAM or NOP, others -> RAM or NOP
960987   // is there anything in the right slot?
961988   if (cart_mounted & RIGHT_CARTSLOT_MOUNTED)
962989   {
963      machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x8000, 0x9fff, "8000");
964      machine().root_device().membank("8000")->set_base(machine().root_device().memregion("rslot")->base());
965      machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x8000, 0x9fff);
990      m_maincpu->space(AS_PROGRAM).install_read_bank(0x8000, 0x9fff, "8000");
991      membank("8000")->set_base(memregion("rslot")->base());
992      m_maincpu->space(AS_PROGRAM).unmap_write(0x8000, 0x9fff);
966993   }
967994   else if (m_a800_cart_type != BBSB)
968995   {
969      ram_top = MIN(machine().device<ram_device>(RAM_TAG)->size(), 0xa000) - 1;
996      ram_top = MIN(m_ram->size(), 0xa000) - 1;
970997      if (ram_top > 0x8000)
971998      {
972         machine().device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0x8000, ram_top, "8000");
973         machine().root_device().membank("8000")->set_base(machine().device<ram_device>(RAM_TAG)->pointer() + 0x8000);
999         m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x8000, ram_top, "8000");
1000         membank("8000")->set_base(m_ram->pointer() + 0x8000);
9741001      }
9751002   }
9761003
r20782r20783
9821009      {
9831010         if (m_a800_cart_type == A800_16K)
9841011         {
985            machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x8000, 0x9fff, "8000");
986            machine().root_device().membank("8000")->set_base(machine().root_device().memregion("lslot")->base());
987            machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x8000, 0x9fff);
1012            m_maincpu->space(AS_PROGRAM).install_read_bank(0x8000, 0x9fff, "8000");
1013            membank("8000")->set_base(memregion("lslot")->base());
1014            m_maincpu->space(AS_PROGRAM).unmap_write(0x8000, 0x9fff);
9881015
989            memcpy(machine().root_device().memregion("maincpu")->base() + 0x10000, machine().root_device().memregion("lslot")->base() + 0x2000, 0x2000);
1016            memcpy(memregion("maincpu")->base() + 0x10000, memregion("lslot")->base() + 0x2000, 0x2000);
9901017         }
9911018         else if (m_a800_cart_type == A800_8K)
992            memcpy(machine().root_device().memregion("maincpu")->base() + 0x10000, machine().root_device().memregion("lslot")->base(), 0x2000);
1019            memcpy(memregion("maincpu")->base() + 0x10000, memregion("lslot")->base(), 0x2000);
9931020         else
9941021            fatalerror("This type of cart is not supported yet in this driver. Please use a400 or a800.\n");
9951022      }
9961023      else if (m_a800_cart_type == A800_16K)
9971024      {
998         machine().root_device().membank("8000")->set_base(machine().root_device().memregion("lslot")->base());
999         machine().root_device().membank("a000")->set_base(machine().root_device().memregion("lslot")->base() + 0x2000);
1000         machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x8000, 0xbfff);
1025         membank("8000")->set_base(memregion("lslot")->base());
1026         membank("a000")->set_base(memregion("lslot")->base() + 0x2000);
1027         m_maincpu->space(AS_PROGRAM).unmap_write(0x8000, 0xbfff);
10011028      }
10021029      else if (m_a800_cart_type == BBSB)
10031030      {
10041031         // this requires separate banking in 0x8000 & 0x9000!
1005         machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x8000, 0x8fff, "8000");
1006         machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x9000, 0x9fff, "9000");
1007         machine().root_device().membank("8000")->set_base(machine().root_device().memregion("lslot")->base() + 0x0000);
1008         machine().root_device().membank("9000")->set_base(machine().root_device().memregion("lslot")->base() + 0x4000);
1009         machine().root_device().membank("a000")->set_base(machine().root_device().memregion("lslot")->base() + 0x8000);
1010         machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
1032         m_maincpu->space(AS_PROGRAM).install_read_bank(0x8000, 0x8fff, "8000");
1033         m_maincpu->space(AS_PROGRAM).install_read_bank(0x9000, 0x9fff, "9000");
1034         membank("8000")->set_base(memregion("lslot")->base() + 0x0000);
1035         membank("9000")->set_base(memregion("lslot")->base() + 0x4000);
1036         membank("a000")->set_base(memregion("lslot")->base() + 0x8000);
1037         m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
10111038      }
10121039      else if (m_a800_cart_type == OSS_034M)
10131040      {
10141041         // this requires separate banking in 0xa000 & 0xb000!
1015         machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xa000, 0xafff, "a000");
1016         machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xb000, 0xbfff, "b000");
1017         machine().root_device().membank("b000")->set_base(machine().root_device().memregion("lslot")->base() + 0x3000);
1018         machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
1042         m_maincpu->space(AS_PROGRAM).install_read_bank(0xa000, 0xafff, "a000");
1043         m_maincpu->space(AS_PROGRAM).install_read_bank(0xb000, 0xbfff, "b000");
1044         membank("b000")->set_base(memregion("lslot")->base() + 0x3000);
1045         m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
10191046      }
10201047      else if (m_a800_cart_type == OSS_M091)
10211048      {
10221049         // this requires separate banking in 0xa000 & 0xb000!
1023         machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xa000, 0xafff, "a000");
1024         machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xb000, 0xbfff, "b000");
1025         machine().root_device().membank("b000")->set_base(machine().root_device().memregion("lslot")->base());
1026         machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
1050         m_maincpu->space(AS_PROGRAM).install_read_bank(0xa000, 0xafff, "a000");
1051         m_maincpu->space(AS_PROGRAM).install_read_bank(0xb000, 0xbfff, "b000");
1052         membank("b000")->set_base(memregion("lslot")->base());
1053         m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
10271054      }
10281055      else if (m_a800_cart_type == XEGS_32K)
10291056      {
1030         machine().root_device().membank("8000")->set_base(machine().root_device().memregion("lslot")->base());
1031         machine().root_device().membank("a000")->set_base(machine().root_device().memregion("lslot")->base() + 0x6000);
1032         machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x8000, 0xbfff);
1057         membank("8000")->set_base(memregion("lslot")->base());
1058         membank("a000")->set_base(memregion("lslot")->base() + 0x6000);
1059         m_maincpu->space(AS_PROGRAM).unmap_write(0x8000, 0xbfff);
10331060      }
10341061      else
10351062      {
1036         machine().root_device().membank("a000")->set_base(machine().root_device().memregion("lslot")->base());
1037         machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
1063         membank("a000")->set_base(memregion("lslot")->base());
1064         m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
10381065      }
10391066   }
10401067}
r20782r20783
10991126}
11001127
11011128
1102static WRITE8_HANDLER( x32_bank_w )
1129WRITE8_MEMBER( a400_state::x32_bank_w )
11031130{
11041131   //  printf("written %x\n", data);
11051132   int bank = data & 0x03;
1106   space.machine().root_device().membank("8000")->set_base(space.machine().root_device().memregion("lslot")->base() + bank * 0x2000);
1133   membank("8000")->set_base(memregion("lslot")->base() + bank * 0x2000);
11071134}
11081135
11091136
1110static WRITE8_HANDLER( w64_bank_w )
1137WRITE8_MEMBER( a400_state::w64_bank_w )
11111138{
11121139//  printf("write to %x\n", offset);
11131140
11141141   if (offset < 8)
1115      space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + offset * 0x2000);
1142      membank("a000")->set_base(memregion("lslot")->base() + offset * 0x2000);
11161143   else
1117      space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("maincpu")->base());
1144      membank("a000")->set_base(memregion("maincpu")->base());
11181145   // FIXME: writes to 0x8-0xf should disable the cart
11191146}
11201147
11211148
11221149// this covers Express 64, Diamond 64 and SpartaDOS (same bankswitch, but at different addresses)
1123static WRITE8_HANDLER( ex64_bank_w )
1150WRITE8_MEMBER( a400_state::ex64_bank_w )
11241151{
11251152//  printf("write to %x\n", offset);
11261153
11271154   if (offset < 8)
1128      space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + (7 - offset) * 0x2000);
1155      membank("a000")->set_base(memregion("lslot")->base() + (7 - offset) * 0x2000);
11291156   else
1130      space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("maincpu")->base());
1157      membank("a000")->set_base(memregion("maincpu")->base());
11311158   // FIXME: writes to 0x8-0xf should disable the cart
11321159}
11331160
11341161
1135static WRITE8_HANDLER( bbsb_bankl_w )
1162WRITE8_MEMBER( a400_state::bbsb_bankl_w )
11361163{
11371164//  printf("write to %x\n", 0x8000 + offset);
11381165   if (offset >= 0xff6 && offset <= 0xff9)
1139      space.machine().root_device().membank("8000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x0000 + (offset - 0xff6) * 0x1000);
1166      membank("8000")->set_base(memregion("lslot")->base() + 0x0000 + (offset - 0xff6) * 0x1000);
11401167}
11411168
11421169
1143static WRITE8_HANDLER( bbsb_bankh_w )
1170WRITE8_MEMBER( a400_state::bbsb_bankh_w )
11441171{
11451172//  printf("write to %x\n", 0x9000 + offset);
11461173   if (offset >= 0xff6 && offset <= 0xff9)
1147      space.machine().root_device().membank("9000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x4000 + (offset - 0xff6) * 0x1000);
1174      membank("9000")->set_base(memregion("lslot")->base() + 0x4000 + (offset - 0xff6) * 0x1000);
11481175}
11491176
11501177
1151static WRITE8_HANDLER( oss_034m_w )
1178WRITE8_MEMBER( a400_state::oss_034m_w )
11521179{
11531180   switch (offset & 0x0f)
11541181   {
11551182      case 0:
11561183      case 1:
1157         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base());
1158         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000);
1184         membank("a000")->set_base(memregion("lslot")->base());
1185         membank("b000")->set_base(memregion("lslot")->base() + 0x3000);
11591186         break;
11601187      case 2:
11611188      case 6:
11621189         // docs says this should put 0xff in the 0xa000 bank -> let's point to the end of the cart
1163         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x4000);
1164         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000);
1190         membank("a000")->set_base(memregion("lslot")->base() + 0x4000);
1191         membank("b000")->set_base(memregion("lslot")->base() + 0x3000);
11651192         break;
11661193      case 3:
11671194      case 7:
1168         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x1000);
1169         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000);
1195         membank("a000")->set_base(memregion("lslot")->base() + 0x1000);
1196         membank("b000")->set_base(memregion("lslot")->base() + 0x3000);
11701197         break;
11711198      case 4:
11721199      case 5:
1173         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x2000);
1174         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000);
1200         membank("a000")->set_base(memregion("lslot")->base() + 0x2000);
1201         membank("b000")->set_base(memregion("lslot")->base() + 0x3000);
11751202         break;
11761203      default:
1177         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("maincpu")->base() + 0xa000);
1178         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("maincpu")->base() + 0xb000);
1204         membank("a000")->set_base(memregion("maincpu")->base() + 0xa000);
1205         membank("b000")->set_base(memregion("maincpu")->base() + 0xb000);
11791206         break;
11801207   }
11811208}
11821209
11831210
1184static WRITE8_HANDLER( oss_m091_w )
1211WRITE8_MEMBER( a400_state::oss_m091_w )
11851212{
11861213   switch (offset & 0x09)
11871214   {
11881215      case 0:
1189         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x1000);
1190         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base());
1216         membank("a000")->set_base(memregion("lslot")->base() + 0x1000);
1217         membank("b000")->set_base(memregion("lslot")->base());
11911218         break;
11921219      case 1:
1193         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000);
1194         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base());
1220         membank("a000")->set_base(memregion("lslot")->base() + 0x3000);
1221         membank("b000")->set_base(memregion("lslot")->base());
11951222         break;
11961223      case 8:
1197         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("maincpu")->base() + 0xa000);
1198         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("maincpu")->base() + 0xb000);
1224         membank("a000")->set_base(memregion("maincpu")->base() + 0xa000);
1225         membank("b000")->set_base(memregion("maincpu")->base() + 0xb000);
11991226         break;
12001227      case 9:
1201         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x2000);
1202         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base());
1228         membank("a000")->set_base(memregion("lslot")->base() + 0x2000);
1229         membank("b000")->set_base(memregion("lslot")->base());
12031230         break;
12041231   }
12051232}
12061233
12071234
1208static UINT8 xegs_banks = 0;
1209static UINT8 xegs_cart = 0;
1210
1211static WRITE8_HANDLER( xegs_bankswitch )
1235WRITE8_MEMBER( a400_state::xegs_bankswitch )
12121236{
1213   UINT8 *cart = space.machine().root_device().memregion("user1")->base();
1214   data &= xegs_banks - 1;
1215   space.machine().root_device().membank("bank0")->set_base(cart + data * 0x2000);
1237   UINT8 *cart = memregion("user1")->base();
1238   data &= m_xegs_banks - 1;
1239   membank("bank0")->set_base(cart + data * 0x2000);
12161240}
12171241
1218MACHINE_START( xegs )
1242MACHINE_START_MEMBER( a400_state, xegs )
12191243{
1220   address_space &space = machine.device("maincpu")->memory().space(AS_PROGRAM);
1221   UINT8 *cart = space.machine().root_device().memregion("user1")->base();
1222   UINT8 *cpu  = space.machine().root_device().memregion("maincpu")->base();
1244   address_space &space = m_maincpu->space(AS_PROGRAM);
1245   UINT8 *cart = memregion("user1")->base();
1246   UINT8 *cpu  = memregion("maincpu")->base();
12231247
1224   atari_machine_start(machine);
1225   space.install_legacy_write_handler(0xd500, 0xd5ff, FUNC(xegs_bankswitch));
1248   atari_machine_start(machine());
1249   space.install_write_handler(0xd500, 0xd5ff, write8_delegate(FUNC(a400_state::xegs_bankswitch),this));
12261250
1227   if (xegs_cart)
1251   if (m_xegs_cart)
12281252   {
1229      machine.root_device().membank("bank0")->set_base(cart);
1230      machine.root_device().membank("bank1")->set_base(cart + (xegs_banks - 1) * 0x2000);
1253      membank("bank0")->set_base(cart);
1254      membank("bank1")->set_base(cart + (m_xegs_banks - 1) * 0x2000);
12311255   }
12321256   else
12331257   {
12341258      // point to built-in Missile Command (this does not work well, though... FIXME!!)
1235      machine.root_device().membank("bank0")->set_base(cpu + 0x10000);
1236      machine.root_device().membank("bank1")->set_base(cpu + 0x10000);
1259      membank("bank0")->set_base(cpu + 0x10000);
1260      membank("bank1")->set_base(cpu + 0x10000);
12371261   }
12381262}
12391263
12401264
12411265// currently this does nothing, but it will eventually install the memory handlers required by the mappers
1242static void a800_setup_mappers(running_machine &machine, int type)
1266void a400_state::a800_setup_mappers(int type)
12431267{
12441268   switch (type)
12451269   {
r20782r20783
12521276      case PHOENIX_8K:    // as normal 8k cart, but it can be disabled by writing to 0xd500-0xdfff
12531277         break;
12541278      case XEGS_32K:
1255         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd500, 0xd5ff, FUNC(x32_bank_w));
1279         m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd5ff, write8_delegate(FUNC(a400_state::x32_bank_w),this));
12561280         break;
12571281      case OSS_034M:
1258         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd500, 0xd5ff, FUNC(oss_034m_w));
1282         m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd5ff, write8_delegate(FUNC(a400_state::oss_034m_w),this));
12591283         break;
12601284      case OSS_M091:
1261         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd500, 0xd5ff, FUNC(oss_m091_w));
1285         m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd5ff, write8_delegate(FUNC(a400_state::oss_m091_w),this));
12621286         break;
12631287      case BBSB:
1264         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x8000, 0x8fff, FUNC(bbsb_bankl_w));
1265         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x9000, 0x9fff, FUNC(bbsb_bankh_w));
1288         m_maincpu->space(AS_PROGRAM).install_write_handler(0x8000, 0x8fff, write8_delegate(FUNC(a400_state::bbsb_bankl_w),this));
1289         m_maincpu->space(AS_PROGRAM).install_write_handler(0x9000, 0x9fff, write8_delegate(FUNC(a400_state::bbsb_bankh_w),this));
12661290         break;
12671291      case WILLIAMS_64K:
1268         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd500, 0xd50f, FUNC(w64_bank_w));
1292         m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd50f, write8_delegate(FUNC(a400_state::w64_bank_w),this));
12691293         break;
12701294      case DIAMOND_64K:
1271         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd5d0, 0xd5df, FUNC(ex64_bank_w));
1295         m_maincpu->space(AS_PROGRAM).install_write_handler(0xd5d0, 0xd5df, write8_delegate(FUNC(a400_state::ex64_bank_w),this));
12721296         break;
12731297      case EXPRESS_64:
1274         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd570, 0xd57f, FUNC(ex64_bank_w));
1298         m_maincpu->space(AS_PROGRAM).install_write_handler(0xd570, 0xd57f, write8_delegate(FUNC(a400_state::ex64_bank_w),this));
12751299         break;
12761300      case SPARTADOS_X:
1277         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd5e0, 0xd5ef, FUNC(ex64_bank_w));
1301         m_maincpu->space(AS_PROGRAM).install_write_handler(0xd5e0, 0xd5ef, write8_delegate(FUNC(a400_state::ex64_bank_w),this));
12781302         break;
12791303      default:
12801304         break;
r20782r20783
14061430   m_a800_cart_loaded = m_a800_cart_loaded & ~LEFT_CARTSLOT_MOUNTED;
14071431   m_a800_cart_type = a800_check_cart_type(image);
14081432
1409   a800_setup_mappers(image.device().machine(), m_a800_cart_type);
1433   a800_setup_mappers(m_a800_cart_type);
14101434
14111435   if (image.software_entry() == NULL)
14121436   {
r20782r20783
14171441         size -= 0x10;
14181442         start = 0x10;
14191443      }
1420      image.fread(image.device().machine().root_device().memregion("lslot")->base(), size - start);
1444      image.fread(memregion("lslot")->base(), size - start);
14211445   }
14221446   else
14231447   {
14241448      size = image.get_software_region_length("rom");
1425      memcpy(image.device().machine().root_device().memregion("lslot")->base(), image.get_software_region("rom"), size);
1449      memcpy(memregion("lslot")->base(), image.get_software_region("rom"), size);
14261450   }
14271451
14281452   m_a800_cart_loaded |= (size > 0x0000) ? 1 : 0;
r20782r20783
14391463   m_a800_cart_loaded = m_a800_cart_loaded & ~RIGHT_CARTSLOT_MOUNTED;
14401464   m_a800_cart_type = a800_check_cart_type(image);
14411465
1442   a800_setup_mappers(image.device().machine(), m_a800_cart_type);
1466   a800_setup_mappers(m_a800_cart_type);
14431467
14441468   if (image.software_entry() == NULL)
14451469   {
r20782r20783
14501474         size -= 0x10;
14511475         start = 0x10;
14521476      }
1453      image.fread(image.device().machine().root_device().memregion("rslot")->base(), size - start);
1477      image.fread(memregion("rslot")->base(), size - start);
14541478   }
14551479   else
14561480   {
14571481      size = image.get_software_region_length("rom");
1458      memcpy(image.device().machine().root_device().memregion("rslot")->base(), image.get_software_region("rom"), size);
1482      memcpy(memregion("rslot")->base(), image.get_software_region("rom"), size);
14591483   }
14601484
14611485   m_a800_cart_loaded |= (size > 0x0000) ? 2 : 0;
14621486
1463   logerror("%s loaded right cartridge '%s' size 8K\n", image.device().machine().system().name, image.filename());
1487   logerror("%s loaded right cartridge '%s' size 8K\n", machine().system().name, image.filename());
14641488   return IMAGE_INIT_PASS;
14651489}
14661490
r20782r20783
14831507
14841508DEVICE_IMAGE_LOAD_MEMBER( a400_state, a5200_cart )
14851509{
1486   UINT8 *mem = image.device().machine().root_device().memregion("maincpu")->base();
1510   UINT8 *mem = memregion("maincpu")->base();
14871511   UINT32 size;
14881512   bool A13_mirr = FALSE;
14891513
r20782r20783
15241548
15251549DEVICE_IMAGE_UNLOAD_MEMBER( a400_state, a5200_cart )
15261550{
1527   UINT8 *mem = image.device().machine().root_device().memregion("maincpu")->base();
1551   UINT8 *mem = memregion("maincpu")->base();
15281552   /* zap the cartridge memory (again) */
15291553   memset(&mem[0x4000], 0x00, 0x8000);
15301554}
r20782r20783
15331557DEVICE_IMAGE_LOAD_MEMBER( a400_state, xegs_cart )
15341558{
15351559   UINT32 size;
1536   UINT8 *ptr = image.device().machine().root_device().memregion("user1")->base();
1560   UINT8 *ptr = memregion("user1")->base();
15371561
15381562   if (image.software_entry() == NULL)
15391563   {
r20782r20783
15491573      memcpy(ptr, image.get_software_region("rom"), size);
15501574   }
15511575
1552   xegs_banks = size / 0x2000;
1553   xegs_cart = 1;
1576   m_xegs_banks = size / 0x2000;
1577   m_xegs_cart = 1;
15541578
15551579   return IMAGE_INIT_PASS;
15561580}
r20782r20783
15581582
15591583DEVICE_IMAGE_UNLOAD_MEMBER( a400_state, xegs_cart )
15601584{
1561   xegs_cart = 0;
1562   xegs_banks = 0;
1585   m_xegs_cart = 0;
1586   m_xegs_banks = 0;
15631587}
15641588
15651589
1566MACHINE_START( a400 )
1590MACHINE_START_MEMBER( a400_state, a400 )
15671591{
1568   a400_state *state = machine.driver_data<a400_state>();
1569   atari_machine_start(machine);
1570   state->ms_atari_machine_start(ATARI_400, TRUE);
1592   atari_machine_start(machine());
1593   ms_atari_machine_start(ATARI_400, TRUE);
15711594}
15721595
15731596
1574MACHINE_START( a800 )
1597MACHINE_START_MEMBER( a400_state, a800 )
15751598{
1576   a400_state *state = machine.driver_data<a400_state>();
1577   atari_machine_start(machine);
1578   state->ms_atari_machine_start(ATARI_800, TRUE);
1599   atari_machine_start(machine());
1600   ms_atari_machine_start(ATARI_800, TRUE);
15791601}
15801602
15811603
1582MACHINE_START( a800xl )
1604MACHINE_START_MEMBER( a400_state, a800xl )
15831605{
1584   a400_state *state = machine.driver_data<a400_state>();
1585   atari_machine_start(machine);
1586   state->ms_atari800xl_machine_start(ATARI_800XL, TRUE);
1606   atari_machine_start(machine());
1607   ms_atari800xl_machine_start(ATARI_800XL, TRUE);
15871608}
15881609
15891610
1590MACHINE_START( a5200 )
1611MACHINE_START_MEMBER( a400_state, a5200 )
15911612{
1592   a400_state *state = machine.driver_data<a400_state>();
1593   atari_machine_start(machine);
1594   state->ms_atari_machine_start(ATARI_800XL, TRUE);
1613   atari_machine_start(machine());
1614   ms_atari_machine_start(ATARI_800XL, TRUE);
15951615}
15961616
15971617
r20782r20783
16021622 *
16031623 **************************************************************/
16041624
1605WRITE8_MEMBER(a400_state::a1200xl_pia_pb_w){ device_t *device = machine().device("pia");  a1200xl_mmu(device->machine(), data); }
1625WRITE8_MEMBER(a400_state::a1200xl_pia_pb_w){ a1200xl_mmu(data); }
16061626WRITE8_MEMBER(a400_state::a800xl_pia_pb_w)
16071627{
1608   device_t *device = machine().device("pia");
1609   if (downcast<pia6821_device *>(device)->port_b_z_mask() != 0xff)
1610      a800xl_mmu(machine(), data);
1628   if (m_pia->port_b_z_mask() != 0xff)
1629      a800xl_mmu(data);
16111630}
16121631
16131632WRITE8_MEMBER(a400_state::xegs_pia_pb_w)
16141633{
1615   device_t *device = machine().device("pia");
1616   if (downcast<pia6821_device *>(device)->port_b_z_mask() != 0xff)
1617      xegs_mmu(machine(), data);
1634   if (m_pia->port_b_z_mask() != 0xff)
1635      xegs_mmu(data);
16181636}
16191637
16201638static const pokey_interface atari_pokey_interface =
r20782r20783
18251843   MCFG_CPU_PROGRAM_MAP(a400_mem)
18261844   MCFG_TIMER_ADD_SCANLINE("scantimer", a400_interrupt, "screen", 0, 1)
18271845
1828   MCFG_MACHINE_START( a400 )
1846   MCFG_MACHINE_START_OVERRIDE( a400_state, a400 )
18291847
18301848   MCFG_SCREEN_MODIFY("screen")
18311849   MCFG_SCREEN_REFRESH_RATE(FRAME_RATE_60HZ)
r20782r20783
18441862   MCFG_CPU_PROGRAM_MAP(a400_mem)
18451863   MCFG_TIMER_ADD_SCANLINE("scantimer", a400_interrupt, "screen", 0, 1)
18461864
1847   MCFG_MACHINE_START( a400 )
1865   MCFG_MACHINE_START_OVERRIDE( a400_state, a400 )
18481866
18491867   MCFG_SCREEN_MODIFY("screen")
18501868   MCFG_SCREEN_REFRESH_RATE(FRAME_RATE_50HZ)
r20782r20783
18631881   MCFG_CPU_PROGRAM_MAP(a800_mem)
18641882   MCFG_TIMER_ADD_SCANLINE("scantimer", a800_interrupt, "screen", 0, 1)
18651883
1866   MCFG_MACHINE_START( a800 )
1884   MCFG_MACHINE_START_OVERRIDE( a400_state, a800 )
18671885
18681886   MCFG_SCREEN_MODIFY("screen")
18691887   MCFG_SCREEN_REFRESH_RATE(FRAME_RATE_60HZ)
r20782r20783
18821900   MCFG_CPU_PROGRAM_MAP(a800_mem)
18831901   MCFG_TIMER_ADD_SCANLINE("scantimer", a800_interrupt, "screen", 0, 1)
18841902
1885   MCFG_MACHINE_START( a800 )
1903   MCFG_MACHINE_START_OVERRIDE( a400_state, a800 )
18861904
18871905   MCFG_SCREEN_MODIFY("screen")
18881906   MCFG_SCREEN_REFRESH_RATE(FRAME_RATE_50HZ)
r20782r20783
19031921
19041922   MCFG_PIA6821_MODIFY( "pia", a600xl_pia_interface )
19051923
1906   MCFG_MACHINE_START( a800xl )    // FIXME?
1924   MCFG_MACHINE_START_OVERRIDE( a400_state, a800xl )    // FIXME?
19071925
19081926   MCFG_SCREEN_MODIFY("screen")
19091927   MCFG_SCREEN_REFRESH_RATE(FRAME_RATE_60HZ)
r20782r20783
19281946
19291947   MCFG_PIA6821_MODIFY( "pia", a800xl_pia_interface )
19301948
1931   MCFG_MACHINE_START( a800xl )
1949   MCFG_MACHINE_START_OVERRIDE( a400_state, a800xl )
19321950
19331951   MCFG_SCREEN_MODIFY("screen")
19341952   MCFG_SCREEN_REFRESH_RATE(FRAME_RATE_60HZ)
r20782r20783
19631981   MCFG_CPU_MODIFY( "maincpu" )
19641982   MCFG_CPU_PROGRAM_MAP(xegs_mem)
19651983
1966   MCFG_MACHINE_START( xegs )
1984   MCFG_MACHINE_START_OVERRIDE( a400_state, xegs )
19671985
19681986   MCFG_PIA6821_MODIFY( "pia", xegs_pia_interface )
19691987
r20782r20783
19982016
19992017   MCFG_PIA6821_MODIFY( "pia", a5200_pia_interface )
20002018
2001   MCFG_MACHINE_START( a5200 )
2019   MCFG_MACHINE_START_OVERRIDE( a400_state, a5200 )
20022020
20032021   MCFG_SCREEN_MODIFY( "screen" )
20042022   MCFG_SCREEN_REFRESH_RATE(FRAME_RATE_60HZ)
r20782r20783
21622180
21632181DRIVER_INIT_MEMBER(a400_state,a800xl)
21642182{
2165   a800xl_mmu(machine(), 0xff);
2183   a800xl_mmu(0xff);
21662184}
21672185
21682186DRIVER_INIT_MEMBER(a400_state,xegs)
21692187{
2170   xegs_mmu(machine(), 0xff);
2188   xegs_mmu(0xff);
21712189}
21722190
21732191DRIVER_INIT_MEMBER(a400_state,a600xl)
21742192{
2175   UINT8 *rom = machine().root_device().memregion("maincpu")->base();
2193   UINT8 *rom = memregion("maincpu")->base();
21762194   memcpy( rom + 0x5000, rom + 0xd000, 0x800 );
21772195}
21782196

Previous 199869 Revisions Next


© 1997-2024 The MAME Team