Previous 199869 Revisions Next

r30781 Monday 2nd June, 2014 at 19:30:32 UTC by hap
some cleanup while i was trying to find the cause of this:
http://mametesters.org/view.php?id=5537
[src/mame/drivers]namcos1.c
[src/mame/includes]namcos1.h
[src/mame/machine]namcos1.c
[src/mame/video]namcos1.c

trunk/src/mame/machine/namcos1.c
r30780r30781
500500   if (op == m_key_rng)     return machine().rand();
501501   if (op == m_key_swap4)   return (m_key[m_key_swap4_arg] << 4) | (m_key[m_key_swap4_arg] >> 4);
502502   if (op == m_key_bottom4) return (offset << 4) | (m_key[m_key_swap4_arg] & 0x0f);
503   if (op == m_key_top4)        return (offset << 4) | (m_key[m_key_swap4_arg] >> 4);
503   if (op == m_key_top4)    return (offset << 4) | (m_key[m_key_swap4_arg] >> 4);
504504
505505   popmessage("CPU %s PC %08x: keychip read %04x", space.device().tag(), space.device().safe_pc(), offset);
506506
r30780r30781
746746*                                                                              *
747747*******************************************************************************/
748748
749void namcos1_state::namcos1_install_bank(int start,int end,read8_delegate hr,write8_delegate hw, int offset,UINT8 *pointer)
749void namcos1_state::namcos1_install_bank(int start, int end,read8_delegate hr, write8_delegate hw, int offset, UINT8 *pointer)
750750{
751   int i;
752   for(i=start;i<=end;i++)
751   for (int i = start; i <= end; i++)
753752   {
754753      m_bank_element[i].bank_handler_r = hr;
755754      m_bank_element[i].bank_handler_w = hw;
756755      m_bank_element[i].bank_offset    = offset;
757756      m_bank_element[i].bank_pointer   = pointer;
758      offset  += 0x2000;
759      if(pointer) pointer += 0x2000;
757
758      offset += 0x2000;
759
760      if (pointer)
761         pointer += 0x2000;
760762   }
761763}
762764
763765
764766
765void namcos1_state::namcos1_build_banks(read8_delegate key_r,write8_delegate key_w)
767void namcos1_state::namcos1_build_banks(read8_delegate key_r, write8_delegate key_w)
766768{
767769   int i;
768770
769771   /**** kludge alert ****/
770   UINT8 *dummyrom = auto_alloc_array(machine(), UINT8, 0x2000);
772   m_dummyrom = auto_alloc_array(machine(), UINT8, 0x2000);
771773
772774   /* when the games want to reset because the test switch has been flipped (or
773775      because the protection checks failed!) they just set the top bits of bank #7
r30780r30781
778780      so misaligned entry points get immediatly corrected. */
779781   for (i = 0;i < 0x2000;i+=2)
780782   {
781      dummyrom[i]   = 0x20;
782      dummyrom[i+1] = 0xfe;
783      m_dummyrom[i]   = 0x20;
784      m_dummyrom[i+1] = 0xfe;
783785   }
784786   /* also provide a valid IRQ vector */
785   dummyrom[0x1ff8] = 0xff;
786   dummyrom[0x1ff9] = 0x00;
787   m_dummyrom[0x1ff8] = 0xff;
788   m_dummyrom[0x1ff9] = 0x00;
787789
788790   /* clear all banks to unknown area */
789791   for(i = 0;i < NAMCOS1_MAX_BANK;i++)
790      namcos1_install_bank(i,i,read8_delegate(),write8_delegate(FUNC(namcos1_state::unknown_w),this),0,dummyrom);
792      namcos1_install_bank(i,i,read8_delegate(),write8_delegate(FUNC(namcos1_state::unknown_w),this),0,m_dummyrom);
791793   /**** end of kludge alert ****/
792794
793795
r30780r30781
807809   namcos1_install_bank(0x180,0x183,read8_delegate(),write8_delegate(),0,m_s1ram);
808810
809811   /* PRG0-PRG7 */
810   {
811      UINT8 *rom = machine().root_device().memregion("user1")->base();
812   UINT8 *rom = machine().root_device().memregion("user1")->base();
812813
813      namcos1_install_bank(0x200,0x3ff,read8_delegate(),write8_delegate(FUNC(namcos1_state::rom_w),this),0,rom);
814   namcos1_install_bank(0x200,0x3ff,read8_delegate(),write8_delegate(FUNC(namcos1_state::rom_w),this),0,rom);
814815
815      /* bit 16 of the address is inverted for PRG7 (and bits 17,18 just not connected) */
816      for (i = 0x380000;i < 0x400000;i++)
816   /* bit 16 of the address is inverted for PRG7 (and bits 17,18 just not connected) */
817   for (i = 0x380000;i < 0x400000;i++)
818   {
819      if ((i & 0x010000) == 0)
817820      {
818         if ((i & 0x010000) == 0)
819         {
820            UINT8 t = rom[i];
821            rom[i] = rom[i + 0x010000];
822            rom[i + 0x010000] = t;
823         }
821         UINT8 t = rom[i];
822         rom[i] = rom[i + 0x010000];
823         rom[i + 0x010000] = t;
824824      }
825825   }
826826}
827827
828828void namcos1_state::machine_reset()
829829{
830   memset(m_chip, 0, sizeof(m_chip));
831
832   /* Point all of our bankhandlers to the error handlers */
830833   static const bankhandler unknown_handler = { read8_delegate(FUNC(namcos1_state::unknown_r),this), write8_delegate(FUNC(namcos1_state::unknown_w),this), 0, NULL };
831   int bank;
832834
833   /* Point all of our bankhandlers to the error handlers */
834   for (bank = 0; bank < 2*8 ; bank++)
835   for (int bank = 0; bank < 2*8 ; bank++)
835836      set_bank(bank, &unknown_handler);
836837
837   memset(m_chip, 0, sizeof(m_chip));
838
839838   /* Default MMU setup for Cpu 0 */
840839   namcos1_bankswitch(0, 0x0000, 0x01 ); /* bank0 = 0x180(RAM) - evidence: wldcourt */
841840   namcos1_bankswitch(0, 0x0001, 0x80 );
r30780r30781
864863
865864   namcos1_init_DACs();
866865   memset(m_key, 0, sizeof(m_key));
866   m_key_quotient = 0;
867   m_key_reminder = 0;
868   m_key_numerator_high_word = 0;
867869   m_wdog = 0;
868870}
869871
r30780r30781
953955   m_key_top4      = specific->key_reg6;
954956
955957   /* S1 RAM pointer set */
956   m_s1ram = auto_alloc_array(machine(), UINT8, 0x8000);
957   m_triram = auto_alloc_array(machine(), UINT8, 0x800);
958   m_paletteram = auto_alloc_array(machine(), UINT8, 0x8000);
958   m_s1ram = auto_alloc_array_clear(machine(), UINT8, 0x8000);
959   m_triram = auto_alloc_array_clear(machine(), UINT8, 0x800);
960   m_paletteram = auto_alloc_array_clear(machine(), UINT8, 0x8000);
959961
960962   /* Register volatile user memory for save state */
961963   save_pointer(NAME(m_s1ram), 0x8000);
r30780r30781
963965   save_pointer(NAME(m_paletteram), 0x8000);
964966
965967   /* Point mcu & sound shared RAM to destination */
966   membank("bank18")->set_base(m_triram );
967   membank("bank19")->set_base(m_triram );
968   membank("bank18")->set_base(m_triram);
969   membank("bank19")->set_base(m_triram);
968970
969971   /* build bank elements */
970972   namcos1_build_banks(specific->key_r,specific->key_w);
973   memset(m_active_bank, 0, sizeof(m_active_bank));
971974}
972975
973976
trunk/src/mame/includes/namcos1.h
r30780r30781
88{
99   read8_delegate bank_handler_r;
1010   write8_delegate bank_handler_w;
11   int           bank_offset;
11   int bank_offset;
1212   UINT8 *bank_pointer;
1313};
1414
r30780r30781
4242   UINT8 *m_paletteram;
4343   UINT8 *m_triram;
4444   UINT8 *m_s1ram;
45   UINT8 *m_dummyrom;
4546   bankhandler m_bank_element[NAMCOS1_MAX_BANK];
4647   bankhandler m_active_bank[16];
4748   int m_key_id;
trunk/src/mame/video/namcos1.c
r30780r30781
115115   m_tilemap_maskdata = (UINT8 *)memregion("gfx1")->base();
116116
117117   /* allocate videoram */
118   m_videoram = auto_alloc_array(machine(), UINT8, 0x8000);
119   m_spriteram = auto_alloc_array(machine(), UINT8, 0x1000);
118   m_videoram = auto_alloc_array_clear(machine(), UINT8, 0x8000);
119   m_spriteram = auto_alloc_array_clear(machine(), UINT8, 0x1000);
120120
121121   /* initialize playfields */
122122   m_bg_tilemap[0] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(namcos1_state::bg_get_info0),this),TILEMAP_SCAN_ROWS,8,8,64,64);
trunk/src/mame/drivers/namcos1.c
r30780r30781
10991099   MCFG_PALETTE_ADD("palette", 0x2000)
11001100   MCFG_PALETTE_ENABLE_SHADOWS()
11011101
1102
11031102   /* sound hardware */
11041103   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
11051104

Previous 199869 Revisions Next


© 1997-2024 The MAME Team