Previous 199869 Revisions Next

r22073 Monday 25th March, 2013 at 12:43:09 UTC by Miodrag Milanović
megadriv bootleg modernization (nw)
[src/mame/drivers]megadrvb.c puckpkmn.c
[src/mame/includes]megadriv.h

trunk/src/mame/includes/megadriv.h
r22072r22073
164164
165165   int m_protcount;
166166
167   // jzth protection
168   DECLARE_WRITE16_MEMBER( bl_710000_w )
169   {
170      int pc = space.device().safe_pc();
171
172      logerror("%06x writing to bl_710000_w %04x %04x\n", pc, data, mem_mask);
173
174      // protection value is read from  0x710000 after a series of writes.. and stored at ff0007
175      // startup
176      /*
177      059ce0 writing to bl_710000_w ff08 ffff
178      059d04 writing to bl_710000_w 000a ffff
179      059d04 writing to bl_710000_w 000b ffff
180      059d04 writing to bl_710000_w 000c ffff
181      059d04 writing to bl_710000_w 000f ffff
182      059d1c writing to bl_710000_w ff09 ffff
183      059d2a reading from bl_710000_r  (wants 0xe)
184      059ce0 writing to bl_710000_w ff08 ffff
185      059d04 writing to bl_710000_w 000a ffff
186      059d04 writing to bl_710000_w 000b ffff
187      059d04 writing to bl_710000_w 000c ffff
188      059d04 writing to bl_710000_w 000f ffff
189      059d1c writing to bl_710000_w ff09 ffff
190      059d2a reading from bl_710000_r  (wants 0xe)
191      */
192      // before lv stage 3
193      /*
194      059ce0 writing to bl_710000_w 0008 ffff
195      059d04 writing to bl_710000_w 000b ffff
196      059d04 writing to bl_710000_w 000f ffff
197      059d1c writing to bl_710000_w ff09 ffff
198      059d2a reading from bl_710000_r  (wants 0x4)
199      */
200      // start level 3
201      /*
202      059ce0 writing to bl_710000_w ff08 ffff
203      059d04 writing to bl_710000_w 000b ffff
204      059d04 writing to bl_710000_w 000c ffff
205      059d04 writing to bl_710000_w 000e ffff
206      059d1c writing to bl_710000_w ff09 ffff
207      059d2a reading from bl_710000_r  (wants 0x5)
208
209      // after end sequence
210      059ce0 writing to bl_710000_w 0008 ffff
211      059d04 writing to bl_710000_w 000a ffff
212      059d04 writing to bl_710000_w 000b ffff
213      059d04 writing to bl_710000_w 000c ffff
214      059d04 writing to bl_710000_w 000f ffff
215      059d1c writing to bl_710000_w ff09 ffff
216      059d2a reading from bl_710000_r  (wants 0xe)
217
218      */
219      m_protcount++;
220   }
221
222
223   DECLARE_READ16_MEMBER( bl_710000_r )
224   {
225      UINT16 ret;
226      int pc = space.device().safe_pc();
227      logerror("%06x reading from bl_710000_r\n", pc);
228
229      if (m_protcount==6) { ret = 0xe; }
230      else if (m_protcount==5) { ret = 0x5; }
231      else if (m_protcount==4) { ret = 0x4; }
232      else ret = 0xf;
233
234      m_protcount = 0;
235      return ret;
236   }
237
238167   DECLARE_DRIVER_INIT(aladmdb);
239168   DECLARE_DRIVER_INIT(mk3mdb);
240169   DECLARE_DRIVER_INIT(ssf2mdb);
r22072r22073
242171   DECLARE_DRIVER_INIT(topshoot);
243172   DECLARE_DRIVER_INIT(puckpkmn);
244173   DECLARE_DRIVER_INIT(hshavoc);
174   DECLARE_WRITE16_MEMBER( bl_710000_w );
175   DECLARE_READ16_MEMBER( bl_710000_r );
176   DECLARE_WRITE16_MEMBER( aladmdb_w );
177   DECLARE_READ16_MEMBER( aladmdb_r );
178   DECLARE_READ16_MEMBER( mk3mdb_dsw_r );
179   DECLARE_READ16_MEMBER( ssf2mdb_dsw_r );
180   DECLARE_READ16_MEMBER( srmdb_dsw_r );
181   DECLARE_READ16_MEMBER( topshoot_200051_r );   
182   DECLARE_READ16_MEMBER(puckpkmna_70001c_r);
183   DECLARE_READ16_MEMBER(puckpkmna_4b2476_r);
245184};
246185
247186
trunk/src/mame/drivers/puckpkmn.c
r22072r22073
257257   AM_RANGE(0x710000, 0x710001) AM_READWRITE(bl_710000_r,bl_710000_w) // protection, will erase the VDP address causing writes to 0 unless this returns 0xe
258258ADDRESS_MAP_END
259259
260static READ16_HANDLER(puckpkmna_70001c_r)
260READ16_MEMBER(md_boot_state::puckpkmna_70001c_r)
261261{
262262   return 0x0e;
263263}
264264
265static READ16_HANDLER(puckpkmna_4b2476_r)
265READ16_MEMBER(md_boot_state::puckpkmna_4b2476_r)
266266{
267267   return 0x3400;
268268}
269269
270270static ADDRESS_MAP_START( puckpkmna_map, AS_PROGRAM, 16, md_boot_state )
271271   AM_IMPORT_FROM( puckpkmn_map )
272   AM_RANGE(0x4b2476, 0x4b2477) AM_READ_LEGACY(puckpkmna_4b2476_r)
273   AM_RANGE(0x70001c, 0x70001d) AM_READ_LEGACY(puckpkmna_70001c_r)
272   AM_RANGE(0x4b2476, 0x4b2477) AM_READ(puckpkmna_4b2476_r)
273   AM_RANGE(0x70001c, 0x70001d) AM_READ(puckpkmna_70001c_r)
274274ADDRESS_MAP_END
275275
276276static MACHINE_CONFIG_START( puckpkmn, md_boot_state )
trunk/src/mame/drivers/megadrvb.c
r22072r22073
264264 *
265265 *************************************/
266266
267static WRITE16_HANDLER( aladmdb_w )
267WRITE16_MEMBER(md_boot_state::aladmdb_w )
268268{
269269   /*
270270   Values returned from the log file :
r22072r22073
276276   logerror("aladmdb_w : %06x - data = %04x\n",space.device().safe_pc(),data);
277277}
278278
279static READ16_HANDLER( aladmdb_r )
279READ16_MEMBER(md_boot_state::aladmdb_r )
280280{
281   md_boot_state *state = space.machine().driver_data<md_boot_state>();
282281   if (space.device().safe_pc()==0x1b2a56)
283282   {
284      state->m_aladmdb_mcu_port = state->ioport("MCU")->read();
283      m_aladmdb_mcu_port = ioport("MCU")->read();
285284
286      if (state->m_aladmdb_mcu_port & 0x100)
287         return ((state->m_aladmdb_mcu_port & 0x0f) | 0x100); // coin inserted, calculate the number of coins
285      if (m_aladmdb_mcu_port & 0x100)
286         return ((m_aladmdb_mcu_port & 0x0f) | 0x100); // coin inserted, calculate the number of coins
288287      else
289288         return (0x100); //MCU status, needed if you fall into a pitfall
290289   }
291290   if (space.device().safe_pc()==0x1b2a72) return 0x0000;
292   if (space.device().safe_pc()==0x1b2d24) return (space.machine().root_device().ioport("MCU")->read() & 0x00f0) | 0x1200;    // difficulty
291   if (space.device().safe_pc()==0x1b2d24) return (ioport("MCU")->read() & 0x00f0) | 0x1200;    // difficulty
293292   if (space.device().safe_pc()==0x1b2d4e) return 0x0000;
294293
295294   logerror("aladbl_r : %06x\n",space.device().safe_pc());
r22072r22073
297296   return 0x0000;
298297}
299298
300static READ16_HANDLER( mk3mdb_dsw_r )
299READ16_MEMBER(md_boot_state::mk3mdb_dsw_r )
301300{
302301   static const char *const dswname[3] = { "DSWA", "DSWB", "DSWC" };
303   return space.machine().root_device().ioport(dswname[offset])->read();
302   return ioport(dswname[offset])->read();
304303}
305304
306static READ16_HANDLER( ssf2mdb_dsw_r )
305READ16_MEMBER(md_boot_state::ssf2mdb_dsw_r )
307306{
308307   static const char *const dswname[3] = { "DSWA", "DSWB", "DSWC" };
309   return space.machine().root_device().ioport(dswname[offset])->read();
308   return ioport(dswname[offset])->read();
310309}
311310
312static READ16_HANDLER( srmdb_dsw_r )
311READ16_MEMBER(md_boot_state::srmdb_dsw_r )
313312{
314313   static const char *const dswname[3] = { "DSWA", "DSWB", "DSWC" };
315   return space.machine().root_device().ioport(dswname[offset])->read();
314   return ioport(dswname[offset])->read();
316315}
317316
318static READ16_HANDLER( topshoot_200051_r )
317READ16_MEMBER(md_boot_state::topshoot_200051_r )
319318{
320319   return -0x5b;
321320}
322321
322// jzth protection
323WRITE16_MEMBER(md_boot_state::bl_710000_w)
324{
325   int pc = space.device().safe_pc();
326
327   logerror("%06x writing to bl_710000_w %04x %04x\n", pc, data, mem_mask);
328
329   // protection value is read from  0x710000 after a series of writes.. and stored at ff0007
330   // startup
331   /*
332   059ce0 writing to bl_710000_w ff08 ffff
333   059d04 writing to bl_710000_w 000a ffff
334   059d04 writing to bl_710000_w 000b ffff
335   059d04 writing to bl_710000_w 000c ffff
336   059d04 writing to bl_710000_w 000f ffff
337   059d1c writing to bl_710000_w ff09 ffff
338   059d2a reading from bl_710000_r  (wants 0xe)
339   059ce0 writing to bl_710000_w ff08 ffff
340   059d04 writing to bl_710000_w 000a ffff
341   059d04 writing to bl_710000_w 000b ffff
342   059d04 writing to bl_710000_w 000c ffff
343   059d04 writing to bl_710000_w 000f ffff
344   059d1c writing to bl_710000_w ff09 ffff
345   059d2a reading from bl_710000_r  (wants 0xe)
346   */
347   // before lv stage 3
348   /*
349   059ce0 writing to bl_710000_w 0008 ffff
350   059d04 writing to bl_710000_w 000b ffff
351   059d04 writing to bl_710000_w 000f ffff
352   059d1c writing to bl_710000_w ff09 ffff
353   059d2a reading from bl_710000_r  (wants 0x4)
354   */
355   // start level 3
356   /*
357   059ce0 writing to bl_710000_w ff08 ffff
358   059d04 writing to bl_710000_w 000b ffff
359   059d04 writing to bl_710000_w 000c ffff
360   059d04 writing to bl_710000_w 000e ffff
361   059d1c writing to bl_710000_w ff09 ffff
362   059d2a reading from bl_710000_r  (wants 0x5)
363
364   // after end sequence
365   059ce0 writing to bl_710000_w 0008 ffff
366   059d04 writing to bl_710000_w 000a ffff
367   059d04 writing to bl_710000_w 000b ffff
368   059d04 writing to bl_710000_w 000c ffff
369   059d04 writing to bl_710000_w 000f ffff
370   059d1c writing to bl_710000_w ff09 ffff
371   059d2a reading from bl_710000_r  (wants 0xe)
372
373   */
374   m_protcount++;
375}
376
377
378READ16_MEMBER(md_boot_state::bl_710000_r)
379{
380   UINT16 ret;
381   int pc = space.device().safe_pc();
382   logerror("%06x reading from bl_710000_r\n", pc);
383
384   if (m_protcount==6) { ret = 0xe; }
385   else if (m_protcount==5) { ret = 0x5; }
386   else if (m_protcount==4) { ret = 0x4; }
387   else ret = 0xf;
388
389   m_protcount = 0;
390   return ret;
391}
392
393
323394/*************************************
324395 *
325396 *  Game-specific port definitions
r22072r22073
664735   #endif
665736
666737   // 220000 = writes to mcu? 330000 = reads?
667   machine().device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x220000, 0x220001, FUNC(aladmdb_w));
668   machine().device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x330000, 0x330001, FUNC(aladmdb_r));
738   machine().device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0x220000, 0x220001, write16_delegate(FUNC(md_boot_state::aladmdb_w),this));
739   machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x330000, 0x330001, read16_delegate(FUNC(md_boot_state::aladmdb_r),this));
669740
670741   m_megadrive_6buttons_pad = 0;
671742   DRIVER_INIT_CALL(megadrij);
r22072r22073
714785   rom[0x07] = 0x02;
715786   rom[0x06] = 0x10;
716787
717   machine().device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x770070, 0x770075, FUNC(mk3mdb_dsw_r) );
788   machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x770070, 0x770075, read16_delegate(FUNC(md_boot_state::mk3mdb_dsw_r),this));
718789
719790   m_megadrive_6buttons_pad = 1;
720791   DRIVER_INIT_CALL(megadriv);
r22072r22073
728799
729800   machine().root_device().membank("bank5")->set_base(machine().root_device().memregion( "maincpu" )->base() + 0x400000 );
730801
731   machine().device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x770070, 0x770075, FUNC(ssf2mdb_dsw_r) );
802   machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x770070, 0x770075, read16_delegate(FUNC(md_boot_state::ssf2mdb_dsw_r),this));
732803
733804   m_megadrive_6buttons_pad = 1;
734805   DRIVER_INIT_CALL(megadrij);
r22072r22073
757828   rom[0x06] = 0xd2;
758829   rom[0x07] = 0x00;
759830
760   machine().device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x770070, 0x770075, FUNC(srmdb_dsw_r) );
831   machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x770070, 0x770075, read16_delegate(FUNC(md_boot_state::srmdb_dsw_r),this));
761832
762833   m_megadrive_6buttons_pad = 0;
763834   DRIVER_INIT_CALL(megadriv);
r22072r22073
765836
766837DRIVER_INIT_MEMBER(md_boot_state,topshoot)
767838{
768   machine().device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x200050, 0x200051, FUNC(topshoot_200051_r) );
839   machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x200050, 0x200051, read16_delegate(FUNC(md_boot_state::topshoot_200051_r),this));
769840   machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_port(0x200042, 0x200043, "IN0");
770841   machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_port(0x200044, 0x200045, "IN1");
771842   machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_port(0x200046, 0x200047, "IN2");

Previous 199869 Revisions Next


© 1997-2024 The MAME Team