merge mappers from FCEU-mm
[fceu.git] / mappers / 16.c
diff --git a/mappers/16.c b/mappers/16.c
deleted file mode 100644 (file)
index 002d3cb..0000000
+++ /dev/null
@@ -1,303 +0,0 @@
-/* FCE Ultra - NES/Famicom Emulator
- *
- * Copyright notice for this file:
- *  Copyright (C) 1998 BERO
- *  Copyright (C) 2002 Xodnizel
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#include "mapinc.h"
-
-static void BandaiIRQHook(int a)
-{
-  if(IRQa)
-  {
-   IRQCount-=a;
-   if(IRQCount<0)
-   {
-    X6502_IRQBegin(FCEU_IQEXT);
-    //printf("IRQ: %d, %d\n",scanline,timestamp);
-    IRQa=0;
-    IRQCount=0xFFFF;
-   }
-  }
-}
-
-static DECLFW(Mapper16_write)
-{
-        A&=0xF;
-
-        if(A<=0x7)
-         VROM_BANK1(A<<10,V);
-        else if(A==0x8)
-         ROM_BANK16(0x8000,V);
-        else switch(A) {
-         case 0x9: switch(V&3) {
-                    case 0x00:MIRROR_SET2(1);break;
-                    case 0x01:MIRROR_SET2(0);break;
-                    case 0x02:onemir(0);break;
-                    case 0x03:onemir(1);break;
-                   }
-                   break;
-         case 0xA:X6502_IRQEnd(FCEU_IQEXT);
-                  IRQa=V&1;
-                  IRQCount=IRQLatch;
-                  break;
-         case 0xB:IRQLatch&=0xFF00; IRQLatch|=V;
-                  break;
-         case 0xC:IRQLatch&=0xFF; IRQLatch|=V<<8;
-                  break;
-         case 0xD: break;/* Serial EEPROM control port */
- }
-}
-
-// Famicom jump 2:
-// 0-7: Lower bit of data selects which 256KB PRG block is in use.
-// This seems to be a hack on the developers' part, so I'll make emulation
-// of it a hack(I think the current PRG block would depend on whatever the
-// lowest bit of the CHR bank switching register that corresponds to the
-// last CHR address read).
-/*
-static void PRGO(void)
-{
- uint32 base=(mapbyte1[0]&1)<<4;
- ROM_BANK16(0x8000,(mapbyte2[0]&0xF)|base);
- ROM_BANK16(0xC000,base|0xF);
-}
-
-static DECLFW(Mapper153_write)
-{
-        A&=0xF;
-        if(A<=0x7)
-        {
-         mapbyte1[A&7]=V;
-         PRGO();
-        }
-        else if(A==0x8)
-        {
-         mapbyte2[0]=V;
-         PRGO();
-        }
-        else switch(A) {
-         case 0x9: switch(V&3) {
-                           case 0x00:MIRROR_SET2(1);break;
-                    case 0x01:MIRROR_SET2(0);break;
-                    case 0x02:onemir(0);break;
-                    case 0x03:onemir(1);break;
-                   }
-                   break;
-         case 0xA:X6502_IRQEnd(FCEU_IQEXT);
-                    IRQa=V&1;
-                  IRQCount=IRQLatch;
-                  break;
-         case 0xB:IRQLatch&=0xFF00;
-                  IRQLatch|=V;
-                   break;
-         case 0xC:IRQLatch&=0xFF;
-                   IRQLatch|=V<<8;
-                  break;
-        }
-}*/
-
-//void Mapper16_init(void)
-//{
-// MapIRQHook=BandaiIRQHook;
-//SetWriteHandler(0x6000,0xFFFF,Mapper16_write);
-//}
-
-//void Mapper153_init(void)
-//{
-// MapIRQHook=BandaiIRQHook;
-// SetWriteHandler(0x8000,0xFFFF,Mapper153_write);
- /* This mapper/board seems to have WRAM at $6000-$7FFF, so I'll let the
-    main ines code take care of that memory region. */
-//}
-
-
-static uint8 BarcodeData[256];
-static int BarcodeReadPos;
-static int BarcodeCycleCount;
-static uint32 BarcodeOut;
-
-int FCEUI_DatachSet(const uint8 *rcode)
-{
-        int    prefix_parity_type[10][6] = {
-                {0,0,0,0,0,0}, {0,0,1,0,1,1}, {0,0,1,1,0,1}, {0,0,1,1,1,0},
-                {0,1,0,0,1,1}, {0,1,1,0,0,1}, {0,1,1,1,0,0}, {0,1,0,1,0,1},
-                {0,1,0,1,1,0}, {0,1,1,0,1,0}
-        };
-        int    data_left_odd[10][7] = {
-                {0,0,0,1,1,0,1}, {0,0,1,1,0,0,1}, {0,0,1,0,0,1,1}, {0,1,1,1,1,0,1},
-                {0,1,0,0,0,1,1}, {0,1,1,0,0,0,1}, {0,1,0,1,1,1,1}, {0,1,1,1,0,1,1},
-                {0,1,1,0,1,1,1}, {0,0,0,1,0,1,1}
-        };
-        int    data_left_even[10][7] = {
-                {0,1,0,0,1,1,1}, {0,1,1,0,0,1,1}, {0,0,1,1,0,1,1}, {0,1,0,0,0,0,1},
-                {0,0,1,1,1,0,1}, {0,1,1,1,0,0,1}, {0,0,0,0,1,0,1}, {0,0,1,0,0,0,1},
-                {0,0,0,1,0,0,1}, {0,0,1,0,1,1,1}
-        };
-        int    data_right[10][7] = {
-                {1,1,1,0,0,1,0}, {1,1,0,0,1,1,0}, {1,1,0,1,1,0,0}, {1,0,0,0,0,1,0},
-                {1,0,1,1,1,0,0}, {1,0,0,1,1,1,0}, {1,0,1,0,0,0,0}, {1,0,0,0,1,0,0},
-                {1,0,0,1,0,0,0}, {1,1,1,0,1,0,0}
-        };
-        uint8 code[13+1];
-        uint32 tmp_p=0;
-        int i, j;
-        int len;
-
-        for(i=len=0;i<13;i++)
-        {
-         if(!rcode[i]) break;
-
-         if((code[i]=rcode[i]-'0') > 9)
-          return(0);
-         len++;
-        }
-        if(len!=13 && len!=12 && len!=8 && len!=7) return(0);
-
-        #define BS(x) BarcodeData[tmp_p]=x;tmp_p++
-
-        for(j=0;j<32;j++)
-        {
-         BS(0x00);
-        }
-
-        /* Left guard bars */
-        BS(1);        BS(0); BS(1);
-
-        if(len==13 || len==12)
-        {
-         uint32 csum;
-
-          for(i=0;i<6;i++)
-          if(prefix_parity_type[code[0]][i])
-          {
-           for(j=0;j<7;j++)
-           {
-            BS(data_left_even[code[i+1]][j]);
-           }
-          }
-          else
-           for(j=0;j<7;j++)
-           {
-            BS(data_left_odd[code[i+1]][j]);
-           }
-
-         /* Center guard bars */
-         BS(0); BS(1); BS(0); BS(1); BS(0);
-
-         for(i=7;i<12;i++)
-          for(j=0;j<7;j++)
-          {
-           BS(data_right[code[i]][j]);
-          }
-         csum=0;
-         for(i=0;i<12;i++) csum+=code[i]*((i&1)?3:1);
-         csum=(10-(csum%10))%10;
-         //printf("%d\n",csum);
-         for(j=0;j<7;j++)
-         {
-          BS(data_right[csum][j]);
-         }
-
-        }
-        else if(len==8 || len==7)
-        {
-         uint32 csum=0;
-
-         for(i=0;i<7;i++) csum+=(i&1)?code[i]:(code[i]*3);
-
-         csum=(10-(csum%10))%10;
-
-         for(i=0;i<4;i++)
-          for(j=0;j<7;j++)
-          {
-           BS(data_left_odd[code[i]][j]);
-          }
-
-
-         /* Center guard bars */
-         BS(0); BS(1); BS(0); BS(1); BS(0);
-
-         for(i=4;i<7;i++)
-          for(j=0;j<7;j++)
-          {
-           BS(data_right[code[i]][j]);
-          }
-
-         for(j=0;j<7;j++)
-          { BS(data_right[csum][j]);}
-
-        }
-
-        /* Right guard bars */
-        BS(1); BS(0); BS(1);
-
-        for(j=0;j<32;j++)
-        {
-         BS(0x00);
-        }
-
-        BS(0xFF);
-        #undef BS
-        BarcodeReadPos=0;
-        BarcodeOut=0x8;
-        BarcodeCycleCount=0;
-        return(1);
-}
-
-static void BarcodeIRQHook(int a)
-{
- BandaiIRQHook(a);
-
- BarcodeCycleCount+=a;
-
- if(BarcodeCycleCount >= 1000)
- {
-  BarcodeCycleCount -= 1000;
-  if(BarcodeData[BarcodeReadPos]==0xFF)
-  {
-   BarcodeOut=0;
-  }
-  else
-  {
-   BarcodeOut=(BarcodeData[BarcodeReadPos]^1)<<3;
-   BarcodeReadPos++;
-  }
- }
-}
-
-static DECLFR(Mapper157_read)
-{
- uint8 ret;
-
- ret=BarcodeOut;
- return(ret);
-}
-
-void Mapper157_init(void)
-{
- GameInfo->cspecial = SIS_DATACH;
- MapIRQHook=BarcodeIRQHook;
- SetWriteHandler(0x6000,0xFFFF,Mapper16_write);
- SetReadHandler(0x6000,0x7FFF,Mapper157_read);
-
- BarcodeData[0]=0xFF;
- BarcodeReadPos=0;
- BarcodeOut=0;
- BarcodeCycleCount=0;
-}