亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rom.cpp

?? 一個gba的模擬器源代碼
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
#include <vcl\vcl.h>
#include <vcl\registry.hpp>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dir.h>
#include <io.h>
#include <dos.h>
#include "rom.h"
#include "Debug.h"
#include "Z80.h"
#include "sound.h"

#define PALCNVT(x) ((((x)&31)<<10)|((x)&0x3e0)|(((x)>>10)&31))

FILE *execTrack;

//extern Z80_Regs R;
//extern unsigned short regPC,regAF,regBC,regDE,regHL,regSP;

UBYTE *ram,*rom;
UBYTE vidRam[16384];
UBYTE oam[0xa0];
UBYTE hiRam[0x100];
UBYTE intRam[0x8000];
UBYTE* mem[16];
int romLoaded=0;
int clkMult=1;
int romType,romSize,ramSize,mbc,batt,mbc1Mode;
int romPage,ramPage,ramEnable,vidPage;
int bgPal[32],objPal[32];
int bgPalGB[32],objPalGB[32];
int keys=0xff;
int timerClkCount=0;
int intReq=0;
extern int intReq2,intReq3;
int initialPC;
int lcdMode=0;
int lcdY=0;
int lcdRefresh;
int lcdUpdateFreq=0;
int lcdUpdateNeeded=0;
char *ScreenLine[288];
int scaleFact=2;
int soundEnable=0,sndQuality=2;
int cgb=0,debugWarn[DBW_COUNT],debugWarnMsg=-1;
int restrictSpeed=1;
char romFileName[256];
int previouspc,dmaClk=0,dmaType,gdmaClk=0;
extern int debug,run,debugStartPC;
#ifndef C_CORE
extern short minTime;
#endif
int sndRegChange=1;
int displayEnabled=1;
extern int emuMode;

unsigned char (*getmemfunc)(unsigned short addr)=getmem;
void (*putmemfunc)(unsigned short addr,unsigned char v)=putmem;

SkinDesc skin[64];
int skinCount=0;
int currentSkin=-1;
Graphics::TBitmap *skinImageLg=NULL;
Graphics::TBitmap *skinImageSm=NULL;
RECT skinLcd;
RECT skinKey[8];

int irvC[2]={0,255};
int igvC[2]={0,255};
int ibvC[2]={0,255};

int grayVal[4]={(31<<10)+(31<<5)+31,(21<<10)+(21<<5)+21,(10<<10)+(10<<5)+10,0};

unsigned short Filter[32768];

extern TCanvas *LCDCanvas;
extern Graphics::TBitmap *bmp;

int GetValue(int min,int max,int v)
{
    return min+(float)(max-min)*(2.0*(v/31.0)-(v/31.0)*(v/31.0));
}

void GenFilter()
{
    for (int r=0;r<32;r++)
    {
        for (int g=0;g<32;g++)
        {
            for (int b=0;b<32;b++)
            {
                int nr=GetValue(GetValue(4,14,g),GetValue(24,29,g),r)-4;
                int ng=GetValue(GetValue(4+GetValue(0,5,r),14+GetValue(0,3,r),b),
                    GetValue(24+GetValue(0,3,r),29+GetValue(0,1,r),b),g)-4;
                int nb=GetValue(GetValue(4+GetValue(0,5,r),14+GetValue(0,3,r),g),
                    GetValue(24+GetValue(0,3,r),29+GetValue(0,1,r),g),b)-4;
                Filter[(b<<10)|(g<<5)|r]=(nr<<10)|(ng<<5)|nb;
            }
        }
    }
}

void InitEmu(char *name)
{
    strcpy(romFileName,name);
    FILE *fp=fopen(name,"rb");
    fseek(fp,0x147,SEEK_SET);
    romType=fgetc(fp);
    switch(fgetc(fp))
    {
        case 0: romSize=32*1024; break;
        case 1: romSize=64*1024; break;
        case 2: romSize=128*1024; break;
        case 3: romSize=256*1024; break;
        case 4: romSize=512*1024; break;
        case 5: romSize=1024*1024; break;
        case 6: romSize=2048*1024; break;
        case 7: romSize=4096*1024; break;
        case 8: romSize=8192*1024; break;
        case 0x52: romSize=(1024+128)*1024; break;
        case 0x53: romSize=(1024+256)*1024; break;
        case 0x54: romSize=(1024+512)*1024; break;
        default:
            MessageBox(NULL,"Unsupported ROM size",
                "Error",MB_OK|MB_ICONSTOP);
            return;
    }
    fseek(fp,0,SEEK_SET);
    rom=new UBYTE[romSize];
    fread(rom,1,romSize,fp);
    fclose(fp);
    for (int i=0;i<0x8000;i++)
        intRam[i]=rand()&0xff;
    switch (rom[0x149])
    {
        case 0: ramSize=0; break;
        case 1: ramSize=2*1024; break;
        case 2: ramSize=8*1024; break;
        case 3: ramSize=32*1024; break;
        case 4: ramSize=128*1024; break;
        case 5: ramSize=256*1024; break;
        case 6: ramSize=512*1024; break;
        case 7: ramSize=1024*1024; break;
        default:
            MessageBox(NULL,"Unsupported RAM size",
                "Error",MB_OK|MB_ICONSTOP);
            return;
    }
    if (ramSize)
    {
        ram=new UBYTE[ramSize];
        for (int i=0;i<ramSize;i++)
            ram[i]=rand()&0xff;
    }
    else
        ram=NULL;
    switch (romType)
    {
        case 0: mbc=0; batt=0; break;
        case 1: mbc=1; batt=0; break;
        case 2: mbc=1; batt=0; break;
        case 3: mbc=1; batt=1; break;
        case 5: mbc=2; batt=0; break;
        case 6: mbc=2; batt=1; break;
        case 8: mbc=0; batt=0; break;
        case 9: mbc=0; batt=1; break;
        case 0xb: case 0xc: case 0xd:
            MessageBox(NULL,"MMM01 cartridges are not supported",
                "Error",MB_OK|MB_ICONSTOP);
            return;
        case 0xf: mbc=3; batt=1; break;
        case 0x10: mbc=3; batt=1; break;
        case 0x11: mbc=3; batt=0; break;
        case 0x12: mbc=3; batt=0; break;
        case 0x13: mbc=3; batt=1; break;
        case 0x19: mbc=5; batt=0; break;
        case 0x1a: mbc=5; batt=0; break;
        case 0x1b: mbc=5; batt=1; break;
        case 0x1c: mbc=6; batt=0; break;
        case 0x1d: mbc=6; batt=0; break;
        case 0x1e: mbc=6; batt=1; break;
        case 0x1f:
            MessageBox(NULL,"Pocket Camera is not supported",
                "Error",MB_OK|MB_ICONSTOP);
            return;
        case 0xfd:
            MessageBox(NULL,"Bandai TAMA5 cartridges are not supported",
                "Error",MB_OK|MB_ICONSTOP);
            return;
        case 0xfe: case 0xff:
            MessageBox(NULL,"Hudson HuC cartridges are not supported",
                "Error",MB_OK|MB_ICONSTOP);
            return;
        default:
            MessageBox(NULL,"Unsupported cartridge type",
                "Error",MB_OK|MB_ICONSTOP);
            return;
    }
    romLoaded=1;
    Reset();
    if (batt)
    {
        char str[256],drive[3],dir[256],name[256];
        fnsplit(romFileName,drive,dir,name,NULL);
        fnmerge(str,drive,dir,name,".sav");
        FILE *fp=fopen(str,"rb");
        if (fp)
        {
            fread(ram,1,ramSize,fp);
            fclose(fp);
        }
    }
}

void CloseEmu()
{
    if (!romLoaded) return;
    if (batt)
    {
        char str[256],drive[3],dir[256],name[256];
        fnsplit(romFileName,drive,dir,name,NULL);
        fnmerge(str,drive,dir,name,".sav");
        FILE *fp=fopen(str,"wb");
        if (fp)
        {
            fwrite(ram,1,ramSize,fp);
            fclose(fp);
        }
    }
    romLoaded=0;
    delete[] rom; rom=NULL;
    if (ram) { delete[] ram; ram=NULL; }
}

void SaveState(char *name)
{
}

void LoadState(char *name)
{
}

Graphics::TBitmap* GetLCD_BW()
{
/*	int x,y,i,j,b,v0,v1,v2,v3,v4,v5,v,ofs,lofs;
	unsigned long *sptr,*sptr1,*sptr2;
    unsigned long rgbv[7];
    unsigned long* ScreenLine[256];
    int cl,w,h;
    Graphics::TBitmap *bmp;

    for (x=0;x<7;x++)
    {
        y=(255*x)/6;
        rgbv[x]=(y<<16)|(y<<8)|y;
    }
    {
        bmp=new Graphics::TBitmap;
        bmp->Width=lcdWidth;
        bmp->Height=lcdHeight;
        bmp->PixelFormat=pf32bit;
        for (int i=0;i<lcdHeight;i++)
            ScreenLine[i]=(unsigned long *)bmp->ScanLine[i];
    	for (y=0,lofs=0;y<lcdHeight;y++,lofs+=lcdLineBytes)
    	{
	    	ofs=lofs;
    		for (x=0,sptr=(unsigned long*)ScreenLine[y];x<lcdWidth;x+=8,ofs++)
    		{
	    		v0=oldScreen[0][ofs];
		    	v1=oldScreen[1][ofs];
    			v2=oldScreen[2][ofs];
       			v3=oldScreen[3][ofs];
   	    		v4=oldScreen[4][ofs];
   		    	v5=oldScreen[5][ofs];
       			for (i=7,b=0x80;i>=0;i--,b>>=1)
       			{
                    j=6-(((v0&b)+(v1&b)+(v2&b)+(v3&b)+(v4&b)+(v5&b))>>i);
                    *(sptr++)=rgbv[j];
   	    		}
   		    }
        }
  	}
    return bmp;*/
    return NULL;
}

Graphics::TBitmap* GetLCD_True()
{
/*	int x,y,i,j,b,v0,v1,v2,v3,v4,v5,v,ofs,lofs;
	unsigned long *sptr,*sptr1,*sptr2;
    int rv[7],gv[7],bv[7];
    unsigned long rgbv[7];
    unsigned long* ScreenLine[256];
    int cl,w,h;
    Graphics::TBitmap *bmp;

    irv[0]=irvC[0]; igv[0]=igvC[0]; ibv[0]=ibvC[0];
    irv[6]=irvC[1]; igv[6]=igvC[1]; ibv[6]=ibvC[1];
    if (calc==89)
        cl=contrast;
    else if (calc>=92)
        cl=31-contrast;
    else if ((calc==82)||(calc==85))
        cl=contrast+((calc==85)?4:0);
    else if (calc==83)
        cl=((contrast-12)*32)/52;
    else
        cl=contrast;
    if (cpuCompleteStop) cl+=6;
    if (romErase)
    {
        if (calc!=89)
            cl+=contrastDelta[romErasePhase>>3];
        romErasePhase++;
        if (romErasePhase==64)
        {
            romErasePhase=0;
            romErase=0;
        }
    }
    if (cl>31) cl=31;
    if (cl<0) cl=0;
    if (cl>16)
    {
        rv[0]=irv[0]; rv[6]=irv[0]+((irv[6]-irv[0])*(32-cl))/16;
        gv[0]=igv[0]; gv[6]=igv[0]+((igv[6]-igv[0])*(32-cl))/16;
        bv[0]=ibv[0]; bv[6]=ibv[0]+((ibv[6]-ibv[0])*(32-cl))/16;
        rv[1]=rv[0]+(rv[6]-rv[0])/6;
        rv[2]=rv[0]+((rv[6]-rv[0])*2)/6;
        rv[3]=rv[0]+((rv[6]-rv[0])*3)/6;
        rv[4]=rv[0]+((rv[6]-rv[0])*4)/6;
        rv[5]=rv[0]+((rv[6]-rv[0])*5)/6;
        gv[1]=gv[0]+(gv[6]-gv[0])/6;
        gv[2]=gv[0]+((gv[6]-gv[0])*2)/6;
        gv[3]=gv[0]+((gv[6]-gv[0])*3)/6;
        gv[4]=gv[0]+((gv[6]-gv[0])*4)/6;
        gv[5]=gv[0]+((gv[6]-gv[0])*5)/6;
        bv[1]=bv[0]+(bv[6]-bv[0])/6;
        bv[2]=bv[0]+((bv[6]-bv[0])*2)/6;
        bv[3]=bv[0]+((bv[6]-bv[0])*3)/6;
        bv[4]=bv[0]+((bv[6]-bv[0])*4)/6;
        bv[5]=bv[0]+((bv[6]-bv[0])*5)/6;
    }
    else
    {
        rv[6]=irv[6]; rv[0]=irv[6]-((irv[6]-irv[0])*cl)/16;
        gv[6]=igv[6]; gv[0]=igv[6]-((igv[6]-igv[0])*cl)/16;
        bv[6]=ibv[6]; bv[0]=ibv[6]-((ibv[6]-ibv[0])*cl)/16;
        rv[1]=rv[0]+(rv[6]-rv[0])/6;
        rv[2]=rv[0]+((rv[6]-rv[0])*2)/6;
        rv[3]=rv[0]+((rv[6]-rv[0])*3)/6;
        rv[4]=rv[0]+((rv[6]-rv[0])*4)/6;
        rv[5]=rv[0]+((rv[6]-rv[0])*5)/6;
        gv[1]=gv[0]+(gv[6]-gv[0])/6;
        gv[2]=gv[0]+((gv[6]-gv[0])*2)/6;
        gv[3]=gv[0]+((gv[6]-gv[0])*3)/6;
        gv[4]=gv[0]+((gv[6]-gv[0])*4)/6;
        gv[5]=gv[0]+((gv[6]-gv[0])*5)/6;
        bv[1]=bv[0]+(bv[6]-bv[0])/6;
        bv[2]=bv[0]+((bv[6]-bv[0])*2)/6;
        bv[3]=bv[0]+((bv[6]-bv[0])*3)/6;
        bv[4]=bv[0]+((bv[6]-bv[0])*4)/6;
        bv[5]=bv[0]+((bv[6]-bv[0])*5)/6;
    }
    for (j=0;j<7;j++)
        rgbv[j]=bv[j]|(gv[j]<<8)|(rv[j]<<16);
    {
        bmp=new Graphics::TBitmap;
        bmp->Width=lcdWidth;
        bmp->Height=lcdHeight;
        bmp->PixelFormat=pf32bit;
        for (int i=0;i<lcdHeight;i++)
            ScreenLine[i]=(unsigned long *)bmp->ScanLine[i];
    	for (y=0,lofs=0;y<lcdHeight;y++,lofs+=lcdLineBytes)
    	{
	    	ofs=lofs;
    		for (x=0,sptr=(unsigned long*)ScreenLine[y];x<lcdWidth;x+=8,ofs++)
    		{
	    		v0=oldScreen[0][ofs];
		    	v1=oldScreen[1][ofs];
    			v2=oldScreen[2][ofs];
       			v3=oldScreen[3][ofs];
   	    		v4=oldScreen[4][ofs];
   		    	v5=oldScreen[5][ofs];
       			for (i=7,b=0x80;i>=0;i--,b>>=1)
       			{
                    j=6-(((v0&b)+(v1&b)+(v2&b)+(v3&b)+(v4&b)+(v5&b))>>i);
                    *(sptr++)=rgbv[j];
   	    		}
   		    }
        }
  	}
    return bmp;*/
    return NULL;
}

Graphics::TBitmap* GetLCD_Calc(Graphics::TBitmap *calcImage)
{
/*	int x,y,i,j,b,v0,v1,v2,v3,v4,v5,v,ofs,lofs;
	unsigned long *sptr,*sptr1,*sptr2;
    int rv[7],gv[7],bv[7];
    unsigned long rgbv[7];
    unsigned long* ScreenLine[256];
    int cl,w,h;
    Graphics::TBitmap *bmp,*lcd;

    irv[0]=irvC[0]; igv[0]=igvC[0]; ibv[0]=ibvC[0];
    irv[6]=irvC[1]; igv[6]=igvC[1]; ibv[6]=ibvC[1];

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内精品久久久久影院色| 欧美日韩免费观看一区二区三区 | 色哟哟国产精品| 欧美日韩在线播放三区四区| 久久久精品蜜桃| 亚洲国产精品天堂| 成人综合在线视频| 精品国产乱码久久久久久闺蜜| 亚洲精品久久7777| 成人激情综合网站| 亚洲精品一区二区三区四区高清| 亚洲一区在线视频| 97se亚洲国产综合自在线观| 久久综合久久久久88| 亚洲一区免费视频| 色国产精品一区在线观看| 欧美国产欧美综合| 国产一区二区三区在线观看免费视频| 欧美日韩欧美一区二区| 一区二区三区中文免费| 99久久99久久综合| 亚洲欧美在线另类| 成人国产在线观看| 国产精品美女一区二区在线观看| 精品亚洲欧美一区| 欧美大肚乱孕交hd孕妇| 久久超级碰视频| 欧美一区二区播放| 蜜臀久久99精品久久久久久9| 欧美日韩久久一区二区| 亚洲黄色免费网站| 欧美午夜精品久久久| 亚洲一线二线三线久久久| 在线亚洲精品福利网址导航| 亚洲欧美一区二区视频| 91污在线观看| 伊人婷婷欧美激情| 欧美亚洲动漫精品| 日本欧美一区二区| 日韩欧美国产电影| 国产麻豆成人精品| 国产精品久久久久影院| 91免费在线视频观看| 一区二区三区四区国产精品| 欧美天堂一区二区三区| 日韩va亚洲va欧美va久久| 日韩一级成人av| 韩国成人精品a∨在线观看| 国产欧美日韩中文久久| 99久久精品免费| 亚洲成人免费影院| 欧美v亚洲v综合ⅴ国产v| 国产99久久久久久免费看农村| 中文字幕国产一区| 欧美视频在线观看一区二区| 日日夜夜一区二区| 国产亚洲欧美一级| 色先锋资源久久综合| 日韩精品欧美精品| 精品电影一区二区| 91免费视频观看| 日本色综合中文字幕| 久久精品一区八戒影视| 色婷婷精品大视频在线蜜桃视频| 午夜亚洲福利老司机| 久久亚洲精品小早川怜子| 99国产精品99久久久久久| 日本最新不卡在线| 中文幕一区二区三区久久蜜桃| 在线观看不卡一区| 国产一本一道久久香蕉| 一区二区三区产品免费精品久久75| 91精品婷婷国产综合久久 | 日韩精品一区在线| 成人av在线看| 日韩国产在线观看一区| 中文字幕精品在线不卡| 日韩视频免费观看高清完整版在线观看 | 国产精品每日更新在线播放网址| 欧美三级资源在线| 国产99久久久精品| 久久99久久99| 亚洲午夜电影在线观看| 中日韩免费视频中文字幕| 91精品国产一区二区人妖| 99视频精品免费视频| 国内精品久久久久影院一蜜桃| 亚洲一区二区三区在线看| 国产精品三级视频| 久久久国产精品麻豆 | 99re亚洲国产精品| 极品少妇xxxx偷拍精品少妇| 午夜成人免费电影| 一区二区视频在线| 国产精品精品国产色婷婷| wwwwxxxxx欧美| 91麻豆精品国产91久久久| 欧美日韩精品三区| 欧洲一区二区三区在线| 97精品久久久久中文字幕 | 中文字幕第一区| 亚洲精品在线观看视频| 日韩视频免费观看高清完整版在线观看 | 亚洲日本丝袜连裤袜办公室| 国产婷婷一区二区| 久久亚洲影视婷婷| 久久久久久久久久久黄色 | 欧美日韩在线播放| 欧美视频三区在线播放| 欧美中文字幕一二三区视频| 色综合久久久久久久久久久| av男人天堂一区| 成人高清在线视频| 99久久伊人网影院| 色综合网色综合| 91福利社在线观看| 日本电影欧美片| 欧美性大战xxxxx久久久| 欧美综合在线视频| 欧美日韩一区精品| 日韩一区二区免费高清| 日韩欧美亚洲国产另类| 欧美不卡在线视频| 久久九九影视网| 国产精品嫩草久久久久| 亚洲啪啪综合av一区二区三区| 亚洲视频一区在线| 亚洲v日本v欧美v久久精品| 亚洲3atv精品一区二区三区| 日韩精品电影一区亚洲| 国产制服丝袜一区| 成人激情免费电影网址| 在线欧美一区二区| 欧美一级片在线| 久久日一线二线三线suv| 亚洲国产岛国毛片在线| 亚洲线精品一区二区三区| 免费成人深夜小野草| 丁香激情综合国产| 91国产成人在线| 日韩欧美区一区二| 国产精品素人一区二区| 亚洲综合一二区| 日本成人在线视频网站| 国产寡妇亲子伦一区二区| 91麻豆产精品久久久久久 | 国产在线精品一区在线观看麻豆| 国产福利精品导航| 在线观看www91| 久久久天堂av| 亚洲国产成人av好男人在线观看| 久久99国产精品免费网站| 99精品在线免费| 91精品国产综合久久久久久久 | 成人免费av在线| 欧美四级电影网| 久久久国际精品| 视频一区在线视频| 粉嫩av亚洲一区二区图片| 欧美性极品少妇| 国产欧美日韩中文久久| 日韩va亚洲va欧美va久久| 91丨porny丨中文| 26uuu亚洲婷婷狠狠天堂| 一区二区三区精品在线| 久久机这里只有精品| jlzzjlzz亚洲日本少妇| 日韩亚洲电影在线| 夜色激情一区二区| 高清国产一区二区三区| 欧美一区二区三区精品| 亚洲美女在线国产| 国产成人精品亚洲777人妖| 欧美私模裸体表演在线观看| 国产精品久久精品日日| 精品一区二区免费看| 欧美日韩免费观看一区二区三区| 中文字幕一区二区三区在线播放 | 日本va欧美va瓶| 色婷婷狠狠综合| 国产精品电影一区二区三区| 狠狠色丁香婷婷综合久久片| 91精品国产综合久久精品图片| 亚洲欧美另类小说视频| 成人免费看黄yyy456| 国产清纯在线一区二区www| 久久99热这里只有精品| 日韩美女在线视频| 日产欧产美韩系列久久99| 欧美日韩三级在线| 午夜精品久久久久久久99水蜜桃| 91亚洲精品一区二区乱码| 国产精品成人一区二区三区夜夜夜| 国产一区二区在线电影| 精品国产乱码久久久久久蜜臀 | 亚洲国产成人高清精品| 在线免费观看日韩欧美| 一级精品视频在线观看宜春院| 成人爱爱电影网址| 国产精品国产成人国产三级|