Previous 199869 Revisions Next

r20562 Sunday 27th January, 2013 at 23:50:34 UTC by Robbbert
(MESS) scorpion tags (nw)
[src/mess/drivers]atm.c scorpion.c

trunk/src/mess/drivers/atm.c
r20561r20562
3838   DECLARE_WRITE8_MEMBER(atm_port_7ffd_w);
3939   DIRECT_UPDATE_MEMBER(atm_direct);
4040   DECLARE_MACHINE_RESET(atm);
41   void atm_update_memory();
4241protected:
4342   required_device<cpu_device> m_maincpu;
4443   required_memory_bank m_bank1;
r20561r20562
4948   required_device<ram_device> m_ram;
5049private:
5150   UINT8 *m_p_ram;
51   void atm_update_memory();
5252};
5353
5454
r20561r20562
9191
9292void atm_state::atm_update_memory()
9393{
94   spectrum_state *state = machine().driver_data<spectrum_state>();
9594   UINT8 *messram = m_ram->pointer();
9695
97   state->m_screen_location = messram + ((state->m_port_7ffd_data & 8) ? (7<<14) : (5<<14));
96   m_screen_location = messram + ((m_port_7ffd_data & 8) ? (7<<14) : (5<<14));
9897
99   m_bank4->set_base(messram + ((state->m_port_7ffd_data & 0x07) * 0x4000));
98   m_bank4->set_base(messram + ((m_port_7ffd_data & 0x07) * 0x4000));
10099
101   if (m_beta->started() && betadisk_is_active(m_beta) && !( state->m_port_7ffd_data & 0x10 ) )
102      state->m_ROMSelection = 3;
100   if (m_beta->started() && betadisk_is_active(m_beta) && !( m_port_7ffd_data & 0x10 ) )
101      m_ROMSelection = 3;
103102   else
104103      /* ROM switching */
105      state->m_ROMSelection = BIT(state->m_port_7ffd_data, 4) ;
104      m_ROMSelection = BIT(m_port_7ffd_data, 4) ;
106105
107106   /* rom 0 is 128K rom, rom 1 is 48 BASIC */
108   m_bank1->set_base(&m_p_ram[0x10000 + (state->m_ROMSelection<<14)]);
107   m_bank1->set_base(&m_p_ram[0x10000 + (m_ROMSelection<<14)]);
109108}
110109
111110WRITE8_MEMBER(atm_state::atm_port_7ffd_w)
r20561r20562
152151
153152   memset(messram,0,128*1024);
154153
155   /* Bank 2 is always in 0x4000 - 0x7fff */
154   /* Bank 5 is always in 0x4000 - 0x7fff */
156155   m_bank2->set_base(messram + (5<<14));
157156
158   /* Bank 3 is always in 0x8000 - 0xbfff */
157   /* Bank 2 is always in 0x8000 - 0xbfff */
159158   m_bank3->set_base(messram + (2<<14));
160159
161160   m_port_7ffd_data = 0;
trunk/src/mess/drivers/scorpion.c
r20561r20562
159159{
160160public:
161161   scorpion_state(const machine_config &mconfig, device_type type, const char *tag)
162      : spectrum_state(mconfig, type, tag) { }
162      : spectrum_state(mconfig, type, tag)
163      , m_maincpu(*this, "maincpu")
164      , m_bank1(*this, "bank1")
165      , m_bank2(*this, "bank2")
166      , m_bank3(*this, "bank3")
167      , m_bank4(*this, "bank4")
168      , m_beta(*this, BETA_DISK_TAG)
169      , m_ram(*this, RAM_TAG)
170   { }
163171
164172   DECLARE_DIRECT_UPDATE_MEMBER(scorpion_direct);
165173   DECLARE_WRITE8_MEMBER(scorpion_0000_w);
r20561r20562
168176   DECLARE_MACHINE_START(scorpion);
169177   DECLARE_MACHINE_RESET(scorpion);
170178   TIMER_DEVICE_CALLBACK_MEMBER(nmi_check_callback);
179protected:
180   required_device<cpu_device> m_maincpu;
181   required_memory_bank m_bank1;
182   required_memory_bank m_bank2;
183   required_memory_bank m_bank3;
184   required_memory_bank m_bank4;
185   required_device<device_t> m_beta;
186   required_device<ram_device> m_ram;
187private:
188   UINT8 *m_p_ram;
189   void scorpion_update_memory();
190
171191};
172192
173193/****************************************************************************************************/
r20561r20562
198218
199219/* rom 0=zx128, 1=zx48, 2 = service monitor, 3=tr-dos */
200220
201static void scorpion_update_memory(running_machine &machine)
221void scorpion_state::scorpion_update_memory()
202222{
203   scorpion_state *state = machine.driver_data<scorpion_state>();
204   UINT8 *messram = machine.device<ram_device>(RAM_TAG)->pointer();
223   UINT8 *messram = m_ram->pointer();
205224
206   state->m_screen_location = messram + ((state->m_port_7ffd_data & 8) ? (7<<14) : (5<<14));
225   m_screen_location = messram + ((m_port_7ffd_data & 8) ? (7<<14) : (5<<14));
207226
208   state->membank("bank4")->set_base(messram + (((state->m_port_7ffd_data & 0x07) | ((state->m_port_1ffd_data & 0x10)>>1)) * 0x4000));
227   m_bank4->set_base(messram + (((m_port_7ffd_data & 0x07) | ((m_port_1ffd_data & 0x10)>>1)) * 0x4000));
209228
210   if ((state->m_port_1ffd_data & 0x01)==0x01)
229   if ((m_port_1ffd_data & 0x01)==0x01)
211230   {
212      state->m_ram_0000 = messram+(8<<14);
213      state->membank("bank1")->set_base(messram+(8<<14));
231      m_ram_0000 = messram+(8<<14);
232      m_bank1->set_base(messram+(8<<14));
214233      logerror("RAM\n");
215234   }
216235   else
217236   {
218      if ((state->m_port_1ffd_data & 0x02)==0x02)
219      {
220         state->m_ROMSelection = 2;
221      }
237      if ((m_port_1ffd_data & 0x02)==0x02)
238         m_ROMSelection = 2;
222239      else
223      {
224         state->m_ROMSelection = ((state->m_port_7ffd_data>>4) & 0x01) ? 1 : 0;
225      }
226      state->membank("bank1")->set_base(machine.root_device().memregion("maincpu")->base() + 0x010000 + (state->m_ROMSelection<<14));
240         m_ROMSelection = BIT(m_port_7ffd_data, 4);
241
242      m_bank1->set_base(&m_p_ram[0x10000 + (m_ROMSelection<<14)]);
227243   }
228
229
230244}
231245
232246WRITE8_MEMBER(scorpion_state::scorpion_0000_w)
r20561r20562
244258
245259DIRECT_UPDATE_MEMBER(scorpion_state::scorpion_direct)
246260{
247   device_t *beta = machine().device(BETA_DISK_TAG);
248   UINT16 pc = machine().device("maincpu")->safe_pcbase();
261   UINT16 pc = m_maincpu->device_t::safe_pcbase(); // works, but...
249262
250263   m_ram_disabled_by_beta = 0;
251   if (betadisk_is_active(beta))
264   if (betadisk_is_active(m_beta) && (pc >= 0x4000))
252265   {
253      if (pc >= 0x4000)
254      {
255         m_ROMSelection = ((m_port_7ffd_data>>4) & 0x01) ? 1 : 0;
256         betadisk_disable(beta);
257         m_ram_disabled_by_beta = 1;
258         membank("bank1")->set_base(memregion("maincpu")->base() + 0x010000 + (m_ROMSelection<<14));
259      }
266      m_ROMSelection = BIT(m_port_7ffd_data, 4);
267      betadisk_disable(m_beta);
268      m_ram_disabled_by_beta = 1;
269      m_bank1->set_base(&m_p_ram[0x10000 + (m_ROMSelection<<14)]);
260270   }
261   else if (((pc & 0xff00) == 0x3d00) && (m_ROMSelection==1))
271   else
272   if (((pc & 0xff00) == 0x3d00) && (m_ROMSelection==1))
262273   {
263274      m_ROMSelection = 3;
264      betadisk_enable(beta);
275      betadisk_enable(m_beta);
265276   }
277
266278   if(address<=0x3fff)
267279   {
268280      m_ram_disabled_by_beta = 1;
269      direct.explicit_configure(0x0000, 0x3fff, 0x3fff, machine().root_device().memregion("maincpu")->base() + 0x010000 + (m_ROMSelection<<14));
270      membank("bank1")->set_base(machine().root_device().memregion("maincpu")->base() + 0x010000 + (m_ROMSelection<<14));
281      direct.explicit_configure(0x0000, 0x3fff, 0x3fff, &m_p_ram[0x10000 + (m_ROMSelection<<14)]);
282      m_bank1->set_base(&m_p_ram[0x10000 + (m_ROMSelection<<14)]);
271283      return ~0;
272284   }
285
273286   return address;
274287}
275288
r20561r20562
278291   if ((machine().root_device().ioport("NMI")->read() & 1)==1)
279292   {
280293      m_port_1ffd_data |= 0x02;
281      scorpion_update_memory(machine());
282      machine().device("maincpu")->execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
294      scorpion_update_memory();
295      m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
283296   }
284297}
285298
r20561r20562
293306   m_port_7ffd_data = data;
294307
295308   /* update memory */
296   scorpion_update_memory(machine());
309   scorpion_update_memory();
297310}
298311
299312WRITE8_MEMBER(scorpion_state::scorpion_port_1ffd_w)
300313{
301314   m_port_1ffd_data = data;
302   scorpion_update_memory(machine());
315   scorpion_update_memory();
303316}
304317
305318static ADDRESS_MAP_START (scorpion_io, AS_IO, 8, scorpion_state )
r20561r20562
319332
320333MACHINE_RESET_MEMBER(scorpion_state,scorpion)
321334{
322   UINT8 *messram = machine().device<ram_device>(RAM_TAG)->pointer();
323   device_t *beta = machine().device(BETA_DISK_TAG);
324   address_space &space = machine().device("maincpu")->memory().space(AS_PROGRAM);
335   UINT8 *messram = m_ram->pointer();
336   address_space &space = m_maincpu->space(AS_PROGRAM);
337   m_p_ram = memregion("maincpu")->base();
325338
326339   m_ram_0000 = NULL;
327340   space.install_read_bank(0x0000, 0x3fff, "bank1");
328341   space.install_write_handler(0x0000, 0x3fff, write8_delegate(FUNC(scorpion_state::scorpion_0000_w),this));
329342
330   betadisk_disable(beta);
331   betadisk_clear_status(beta);
343   betadisk_disable(m_beta);
344   betadisk_clear_status(m_beta);
332345   space.set_direct_update_handler(direct_update_delegate(FUNC(scorpion_state::scorpion_direct), this));
333346
334347   memset(messram,0,256*1024);
335348
336349   /* Bank 5 is always in 0x4000 - 0x7fff */
337   membank("bank2")->set_base(messram + (5<<14));
350   m_bank2->set_base(messram + (5<<14));
338351
339352   /* Bank 2 is always in 0x8000 - 0xbfff */
340   membank("bank3")->set_base(messram + (2<<14));
353   m_bank3->set_base(messram + (2<<14));
341354
342355   m_port_7ffd_data = 0;
343356   m_port_1ffd_data = 0;
344   scorpion_update_memory(machine());
357   scorpion_update_memory();
345358}
346359MACHINE_START_MEMBER(scorpion_state,scorpion)
347360{
r20561r20562
509522   ROM_CART_LOAD("cart", 0x0000, 0x4000, ROM_NOCLEAR | ROM_NOMIRROR | ROM_OPTIONAL)
510523ROM_END
511524
512/*    YEAR  NAME      PARENT    COMPAT  MACHINE     INPUT       INIT    COMPANY     FULLNAME */
525/*    YEAR  NAME      PARENT    COMPAT  MACHINE     INPUT   CLASS         INIT      COMPANY     FULLNAME */
513526COMP( 1994, scorpio,  spec128,   0, scorpion,   spec_plus, driver_device,   0,      "Zonov and Co.",        "Scorpion ZS-256", GAME_NOT_WORKING )
514527COMP( 1991, profi,    spec128,   0, profi,      spec_plus, driver_device,   0,      "Kondor and Kramis",        "Profi", GAME_NOT_WORKING )
515528COMP( 1998, kay1024,  spec128,   0, scorpion,   spec_plus, driver_device,   0,      "NEMO",     "Kay 1024", GAME_NOT_WORKING )

Previous 199869 Revisions Next


© 1997-2024 The MAME Team