Previous 199869 Revisions Next

r20521 Sunday 27th January, 2013 at 00:51:09 UTC by Robbbert
(MESS) ATM cleanup of tags(nw)
[src/mess/drivers]atm.c

trunk/src/mess/drivers/atm.c
r20520r20521
2525{
2626public:
2727   atm_state(const machine_config &mconfig, device_type type, const char *tag)
28      : spectrum_state(mconfig, type, tag) { }
28      : spectrum_state(mconfig, type, tag)
29      , m_maincpu(*this, "maincpu")
30      , m_bank1(*this, "bank1")
31      , m_bank2(*this, "bank2")
32      , m_bank3(*this, "bank3")
33      , m_bank4(*this, "bank4")
34      , m_beta(*this, BETA_DISK_TAG)
35      , m_ram(*this, RAM_TAG)
36   { }
2937
3038   DECLARE_WRITE8_MEMBER(atm_port_7ffd_w);
3139   DIRECT_UPDATE_MEMBER(atm_direct);
3240   DECLARE_MACHINE_RESET(atm);
41   void atm_update_memory();
42protected:
43   required_device<cpu_device> m_maincpu;
44   required_memory_bank m_bank1;
45   required_memory_bank m_bank2;
46   required_memory_bank m_bank3;
47   required_memory_bank m_bank4;
48   required_device<device_t> m_beta;
49   required_device<ram_device> m_ram;
50private:
51   UINT8 *m_p_ram;
3352};
3453
3554
3655DIRECT_UPDATE_MEMBER(atm_state::atm_direct)
3756{
38   device_t *beta = machine().device(BETA_DISK_TAG);
39   UINT16 pc = machine().device("maincpu")->state().state_int(STATE_GENPCBASE);
57   UINT16 pc = m_maincpu->state_int(STATE_GENPCBASE);
4058
41   if (beta->started() && betadisk_is_active(beta))
59   if (m_beta->started() && betadisk_is_active(m_beta))
4260   {
4361      if (pc >= 0x4000)
4462      {
45         m_ROMSelection = ((m_port_7ffd_data>>4) & 0x01) ? 1 : 0;
46         betadisk_disable(beta);
47         membank("bank1")->set_base(machine().root_device().memregion("maincpu")->base() + 0x010000 + (m_ROMSelection<<14));
63         m_ROMSelection = BIT(m_port_7ffd_data, 4);
64         betadisk_disable(m_beta);
65         m_bank1->set_base(&m_p_ram[0x10000 + (m_ROMSelection<<14)]);
4866      }
4967   }
5068   else if (((pc & 0xff00) == 0x3d00) && (m_ROMSelection==1))
5169   {
5270      m_ROMSelection = 3;
53      if (beta->started())
54         betadisk_enable(beta);
71      if (m_beta->started())
72         betadisk_enable(m_beta);
5573
5674   }
5775   if(address<=0x3fff)
5876   {
59      if (m_ROMSelection == 3) {
60         direct.explicit_configure(0x0000, 0x3fff, 0x3fff, memregion("maincpu")->base() + 0x018000);
61         membank("bank1")->set_base(machine().root_device().memregion("maincpu")->base() + 0x018000);
62      } else {
63         direct.explicit_configure(0x0000, 0x3fff, 0x3fff, memregion("maincpu")->base() + 0x010000 + (m_ROMSelection<<14));
64         membank("bank1")->set_base(machine().root_device().memregion("maincpu")->base() + 0x010000 + (m_ROMSelection<<14));
77      if (m_ROMSelection == 3)
78      {
79         direct.explicit_configure(0x0000, 0x3fff, 0x3fff, &m_p_ram[0x18000]);
80         m_bank1->set_base(&m_p_ram[0x18000]);
6581      }
82      else
83      {
84         direct.explicit_configure(0x0000, 0x3fff, 0x3fff, &m_p_ram[0x10000 + (m_ROMSelection<<14)]);
85         m_bank1->set_base(&m_p_ram[0x10000 + (m_ROMSelection<<14)]);
86      }
6687      return ~0;
6788   }
6889   return address;
6990}
7091
71static void atm_update_memory(running_machine &machine)
92void atm_state::atm_update_memory()
7293{
73   spectrum_state *state = machine.driver_data<spectrum_state>();
74   device_t *beta = machine.device(BETA_DISK_TAG);
75   UINT8 *messram = machine.device<ram_device>(RAM_TAG)->pointer();
94   spectrum_state *state = machine().driver_data<spectrum_state>();
95   UINT8 *messram = m_ram->pointer();
7696
7797   state->m_screen_location = messram + ((state->m_port_7ffd_data & 8) ? (7<<14) : (5<<14));
7898
79   state->membank("bank4")->set_base(messram + ((state->m_port_7ffd_data & 0x07) * 0x4000));
99   m_bank4->set_base(messram + ((state->m_port_7ffd_data & 0x07) * 0x4000));
80100
81   if (beta->started() && betadisk_is_active(beta) && !( state->m_port_7ffd_data & 0x10 ) )
82   {
101   if (m_beta->started() && betadisk_is_active(m_beta) && !( state->m_port_7ffd_data & 0x10 ) )
83102      state->m_ROMSelection = 3;
84   }
85   else {
103   else
86104      /* ROM switching */
87      state->m_ROMSelection = ((state->m_port_7ffd_data>>4) & 0x01) ;
88   }
105      state->m_ROMSelection = BIT(state->m_port_7ffd_data, 4) ;
106
89107   /* rom 0 is 128K rom, rom 1 is 48 BASIC */
90   state->membank("bank1")->set_base(machine.root_device().memregion("maincpu")->base() + 0x010000 + (state->m_ROMSelection<<14));
108   m_bank1->set_base(&m_p_ram[0x10000 + (state->m_ROMSelection<<14)]);
91109}
92110
93111WRITE8_MEMBER(atm_state::atm_port_7ffd_w)
r20520r20521
100118   m_port_7ffd_data = data;
101119
102120   /* update memory */
103   atm_update_memory(machine());
121   atm_update_memory();
104122}
105123
106124static ADDRESS_MAP_START (atm_io, AS_IO, 8, atm_state )
r20520r20521
118136
119137MACHINE_RESET_MEMBER(atm_state,atm)
120138{
121   UINT8 *messram = machine().device<ram_device>(RAM_TAG)->pointer();
122   address_space &space = machine().device("maincpu")->memory().space(AS_PROGRAM);
123   device_t *beta = machine().device(BETA_DISK_TAG);
139   UINT8 *messram = m_ram->pointer();
140   address_space &space = m_maincpu->space(AS_PROGRAM);
141   m_p_ram = memregion("maincpu")->base();
124142
125143   space.install_read_bank(0x0000, 0x3fff, "bank1");
126144   space.unmap_write(0x0000, 0x3fff);
127145
128   if (beta->started())  {
129      betadisk_enable(beta);
130      betadisk_clear_status(beta);
146   if (m_beta->started())
147   {
148      betadisk_enable(m_beta);
149      betadisk_clear_status(m_beta);
131150   }
132151   space.set_direct_update_handler(direct_update_delegate(FUNC(atm_state::atm_direct), this));
133152
134153   memset(messram,0,128*1024);
135154
136   /* Bank 5 is always in 0x4000 - 0x7fff */
137   membank("bank2")->set_base(messram + (5<<14));
155   /* Bank 2 is always in 0x4000 - 0x7fff */
156   m_bank2->set_base(messram + (5<<14));
138157
139   /* Bank 2 is always in 0x8000 - 0xbfff */
140   membank("bank3")->set_base(messram + (2<<14));
158   /* Bank 3 is always in 0x8000 - 0xbfff */
159   m_bank3->set_base(messram + (2<<14));
141160
142161   m_port_7ffd_data = 0;
143162   m_port_1ffd_data = -1;
144163
145   atm_update_memory(machine());
164   atm_update_memory();
146165}
147166
148167/* F4 Character Displayer */
r20520r20521
228247   ROM_LOAD( "sgen.rom", 0x0000, 0x0800, CRC(1f4387d6) SHA1(93b3774dc8a486643a1bdd48c606b0c84fa0e22b))
229248ROM_END
230249
231/*    YEAR  NAME      PARENT    COMPAT  MACHINE     INPUT       INIT    COMPANY     FULLNAME */
232COMP( 1991, atm,    spec128,    0,      atm,    spec_plus, driver_device,   0,          "MicroART",     "ATM", GAME_NOT_WORKING)
233//COMP( 1991, atmtb1,   spec128,    0,      atm,    spec_plus, driver_device,  0,      "MicroART",     "ATM-turbo1", GAME_NOT_WORKING)
234COMP( 1993, atmtb2, spec128,    0,      atmtb2, spec_plus, driver_device,   0,          "MicroART",     "ATM-turbo2", GAME_NOT_WORKING)
235//COMP( 1994, turbo2, spec128,  0,      atm,    spec_plus, driver_device,  0,          "MicroART",     "TURBO 2+", GAME_NOT_WORKING)
250/*    YEAR  NAME    PARENT   COMPAT  MACHINE INPUT      CLASS          INIT    COMPANY     FULLNAME */
251COMP( 1991, atm,    spec128, 0,      atm,    spec_plus, driver_device, 0,    "MicroART", "ATM", GAME_NOT_WORKING)
252//COMP( 1991, atmtb1, spec128, 0,      atm,    spec_plus, driver_device, 0,    "MicroART", "ATM-turbo1", GAME_NOT_WORKING)
253COMP( 1993, atmtb2, spec128, 0,      atmtb2, spec_plus, driver_device, 0,    "MicroART", "ATM-turbo2", GAME_NOT_WORKING)
254//COMP( 1994, turbo2, spec128, 0,      atm,    spec_plus, driver_device, 0,    "MicroART", "TURBO 2+", GAME_NOT_WORKING)

Previous 199869 Revisions Next


© 1997-2024 The MAME Team