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

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

?? gbagpu.cpp

?? 一個任天堂掌上游戲機NDS的源代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
// I/O functions, registered with the MMU at startup.// Since the GPU hooks to a lot of regions, each function must switch on// the high bits of the address to work out what's being done.// NOTE: Byte-wise access to the palette and OAM is prohibited.u8 gbaGPU::rdB(u32 a){    char str[128];    switch(a&0x0F000000)    {	case 0x04000000://            sprintf(str, "Video IO: rdB %08X", a);//	    Logger::log(pluginName) << str;	    if(reg[(a&0xFF)>>1].flags & MMU_ALLOW_RD)	        return reg[(a&0xFF)>>1].b[a&1];	        case 0x06000000:	    if((a&0x00018000) != 0x00018000)                return VRAMb[a&0x0001FFFF];	    	default:            sprintf(str, "Bad video access: rdB %08X", a);            Logger::log(pluginName) << str;            return 0xFF;    }}u16 gbaGPU::rdH(u32 a){//    char str[128];    u16 out=0xFFFF;    switch(a&0x0F000000)    {	case 0x04000000://            sprintf(str, "Video IO: rdH %08X", a);//	    Logger::log(pluginName) << str;	    if(reg[(a&0xFF)>>1].flags & MMU_ALLOW_RD)	        out=reg[(a&0xFF)>>1].data;	    return out;        case 0x05000000:	    return PALh[(a&0x000003FF)>>1];	case 0x06000000:	    if((a&0x00018000) != 0x00018000)	    {                return VRAMh[(a&0x0001FFFF)>>1];	    }	case 0x07000000:	    return OAMh[(a&0x000003FF)>>1];	default:	    return 0;    }}u32 gbaGPU::rdW(u32 a){//    char str[128];    u32 out=0xFFFFFFFF;    switch(a&0x0F000000)    {	case 0x04000000://            sprintf(str, "Video IO: rdW %08X", a);//	    Logger::log(pluginName) << str;	    if(reg[(a&0xFF)>>1].flags & MMU_ALLOW_RD)	        out=reg[(a&0xFF)>>1].data;	    if(reg[((a&0xFF)>>1)+1].flags & MMU_ALLOW_RD)	        out|=(reg[((a&0xFF)>>1)+1].data) << 16;	    return out;        case 0x05000000:	    return PALw[(a&0x000003FF)>>2];	case 0x06000000:	    if((a&0x00018000) != 0x00018000)	    {                return VRAMw[(a&0x0001FFFF)>>2];	    }	case 0x07000000:	    return OAMw[(a&0x000003FF)>>2];	default:	    return 0;    }}void gbaGPU::wrB(u32 a, u8  d){    char str[128];    switch(a&0x0F000000)    {	case 0x04000000://            sprintf(str, "Video IO: wrB %08X, %02X", a, d);//	    Logger::log(pluginName) << str;	    if(reg[(a&0xFF)>>1].flags & MMU_ALLOW_WR)	        reg[(a&0xFF)>>1].b[a&1]=d;	    break;	        case 0x06000000:	    if((a&0x00018000) != 0x00018000)	        VRAMb[a&0x0001FFFF]=d;	    break;	    	default:            sprintf(str, "Bad video access: wrB %08X, %02X", a, d);            Logger::log(pluginName) << str;    }}void gbaGPU::wrH(u32 a, u16 d){//    char str[128];    switch(a&0x0F000000)    {	case 0x04000000://            sprintf(str, "Video IO: wrH %08X, %04X", a, d);//	    Logger::log(pluginName) << str;	    if(reg[(a&0xFF)>>1].flags & MMU_ALLOW_WR)	        reg[(a&0xFF)>>1].data=d;	    break;	case 0x05000000:	    PALh[(a&0x000003FF)>>1]=d;	    break;        case 0x06000000:	    if((a&0x00018000) != 0x00018000)	    {	        VRAMh[(a&0x0001FFFF)>>1]=d;//		char str[128];//		sprintf(str, "%08X=%04X", a, d);//		Logger::log(pluginName) << "VRAM write: " << str;	    }	    break;	case 0x07000000:	    OAMh[(a&0x000003FF)>>1]=d;	    break;    }}void gbaGPU::wrW(u32 a, u32 d){//    char str[128];    switch(a&0x0F000000)    {	case 0x04000000://            sprintf(str, "Video IO: wrW %08X, %08X", a, d);//	    Logger::log(pluginName) << str;	    if(reg[(a&0xFF)>>1].flags & MMU_ALLOW_WR)	        reg[(a&0xFF)>>1].data=d&65535;	    if(reg[((a+2)&0xFF)>>1].flags & MMU_ALLOW_WR)	        reg[((a+2)&0xFF)>>1].data=d>>16;//	    sprintf(str, "Results: %02X=%04X, %02X=%04X",//			 (a&0xFF)>>1, reg[(a&0xFF)>>1].data,//			 ((a+2)&0xFF)>>1, reg[((a+2)&0xFF)>>1].data);//	    Logger::log(pluginName) << str;	    break;	case 0x05000000:	    PALw[(a&0x000003FF)>>2]=d;	    break;        case 0x06000000:	    if((a&0x00018000) != 0x00018000)	    {	        VRAMw[(a&0x0001FFFF)>>2]=d;//		char str[128];//		sprintf(str, "%08X=%08X", a, d);//		Logger::log(pluginName) << "VRAM write: " << str;	    }	    break;	case 0x07000000:	    OAMw[(a&0x000003FF)>>2]=d;	    break;    }}// Wrapper functions that will be called by the GUI to service events.void gbaGPU::hblank(Plugin *in) { ((gbaGPU*)in)->HBLstart(); }void gbaGPU::hblankend(Plugin *in) { ((gbaGPU*)in)->HBLend(); }void gbaGPU::drawline(Plugin *in) { ((gbaGPU*)in)->line(); }// Initialise plugin: Allocate memories, register with MMUgbaGPU::gbaGPU(std::string name, REQPTR req, UNREQPTR unreq){    pName = std::string(name);    pClass = pName.substr(0, pName.find(".")+1);    pRequest = req;    pUnrequest = unreq;    pluginName = std::string(pName);    GUI = (GUIPlugin*)pRequest("UI");    palbuffer = new u32[264*136];    palwinID = GUI->subwinCreate(264,136, "Palettes", palbuffer);    // Allocate VRAMs    VRAMh = new u16[48*1024];    PALh  = new u16[512];    OAMh = new u16[512];        if(!VRAMh || !PALh || !OAMh)        throw Exception(ERR_GPU_INIT, pName,                        "Allocation of VRAMs failed.");        VRAMw=(u32*)VRAMh; PALw=(u32*)PALh; OAMw=(u32*)OAMh;    VRAMb=(u8*)VRAMh; OAMb=(u8*)OAMh;        CPU = (CPUPlugin*)pRequest("GBA_CPU0.main");    MMU = (MMU32Plugin*)pRequest("GBA_CPU0.mmu");    for(int i=0; i<16; ++i)    {        MMU->rangeReg(0x50+i, rdB, rdH, rdW, wrB, wrH, wrW);        MMU->rangeReg(0x60+i, rdB, rdH, rdW, wrB, wrH, wrW);        MMU->rangeReg(0x70+i, rdB, rdH, rdW, wrB, wrH, wrW);    }        for(int i=0; i<0x30; ++i)    {	reg[i].data = 0;        reg[i].flags = rflags[i];    }        for(int i=0; i<6; ++i)        MMU->mmioReg(0x00+i, rdB, rdH, rdW, wrB, wrH, wrW);        Logger::log(pName) << "Registered with MMU.";    curline = 0;    Logger::log(pName) << "Initialised.";}// Shut down plugin: Free up memoriesgbaGPU::~gbaGPU(){    if(VRAMh) { delete VRAMh; VRAMb=NULL; VRAMh=NULL; VRAMw=NULL; }    if(PALh)  { delete PALh;  PALh=NULL;  PALh=NULL;  }    if(OAMh)  { delete OAMh;  OAMb=NULL;  OAMh=NULL;  OAMh=NULL;  }    if(palbuffer) { delete palbuffer; palbuffer=NULL; }       pUnrequest("GBA_CPU0.main", 1);    pUnrequest("GBA_CPU0.mmu", 1);    pUnrequest("UI", 0); GUI = NULL;        Logger::log(pName) << "Shutdown.";}// Reset plugin: Clear memories, read config filevoid gbaGPU::reset(){    memset(VRAMh, 0, 96*1024);    memset(PALh,  0, 1024);    memset(OAMh,  0, 1024);    memset(palbuffer, 80, 264*136*4);        // Set the background force constants from INI file    Config ini; ini.read("gbagpu.ini");    ForceBG[0]=0;    if(ini.exists("ForceBG0") && ini["ForceBG0"]=="ON")  ForceBG[0]=1;    if(ini.exists("ForceBG0") && ini["ForceBG0"]=="OFF") ForceBG[0]=2;    ForceBG[1]=0;    if(ini.exists("ForceBG1") && ini["ForceBG1"]=="ON")  ForceBG[1]=1;    if(ini.exists("ForceBG1") && ini["ForceBG1"]=="OFF") ForceBG[1]=2;    ForceBG[2]=0;    if(ini.exists("ForceBG2") && ini["ForceBG2"]=="ON")  ForceBG[2]=1;    if(ini.exists("ForceBG2") && ini["ForceBG2"]=="OFF") ForceBG[2]=2;    ForceBG[3]=0;    if(ini.exists("ForceBG3") && ini["ForceBG3"]=="ON")  ForceBG[3]=1;    if(ini.exists("ForceBG3") && ini["ForceBG3"]=="OFF") ForceBG[3]=2;    status(0,0);        for(int i=0;i<0x30;++i) reg[i].data = 0;        BGX[0]=0; BGY[0]=0;    BGX[1]=0; BGY[1]=0;    REG(BG2PA)=256; REG(BG2PD)=256;    REG(BG3PA)=256; REG(BG3PD)=256;    for(int i=0; i<4; ++i) mospy[i]=0;    // First scanline call: In 960 cycles, come back and draw a line    GUI->eventPush(960, EVENT_HBLANK_START, (vfptr)drawline, this);        Logger::log(pName) << "Reset";}// Provide status: Fill palette-window framebuffervoid gbaGPU::status(int opt1=0, int opt2=0){    Font5x7 prn(palbuffer, 264, 136);    prn.print("BGpal", 0,0, 0x00FFFFFF);    prn.print("OBJpal", 136,0, 0x00FFFFFF);    for(int a=0;a<128;a++)    {	for(int b=0;b<128;b++)	{	    COLSHIFT((u8*)palbuffer+((a+8)*264+b)*4, PALh[((a&0x78)<<1)+(b>>3)]);	    COLSHIFT((u8*)palbuffer+((a+8)*264+b+136)*4, PALh[256+((a&0x78)<<1)+(b>>3)]);	}    }    // Once rendered, refresh the window    GUI->subwinRefresh(palwinID);}//---Plugin architecture support-------------------------------------------// Retrieve Plugin class from outside// Parameters: plg   - Address of a pointer to a Plugin class to 'new'//             name  - FQPN of plugin as listed in INI file//             req   - Pointer to PluginRequest API function//             unreq - Pointer to PluginUnrequest API functionEXPORTFUNC void getPlugin(Plugin **plg,                          std::string name,                          REQPTR req, UNREQPTR unreq){   *plg = new gbaGPU(name, req, unreq);}// Provide plugin version informationPLUGININFO *gbaGPU::getinfo(){    return &pInfo;}// Release plugin from outsidevoid gbaGPU::release(){    // Delete the Test plugin that was 'new'd in getPlugin.    delete this;}/*** EOF: gbagpu.cpp *****************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区在线电影| 国产精品网曝门| 国产精品你懂的在线| 国产电影精品久久禁18| 欧美一区二区三区四区五区| 亚洲成人综合在线| 亚洲bdsm女犯bdsm网站| 亚洲丰满少妇videoshd| 在线观看视频一区二区| 一片黄亚洲嫩模| 国产精品美女久久久久aⅴ| 亚洲欧洲色图综合| 成人精品视频一区二区三区尤物| 亚洲午夜av在线| 中文字幕一区二区三区在线观看| 亚洲精品一区二区三区影院| 色8久久人人97超碰香蕉987| 国产另类ts人妖一区二区| 免费不卡在线视频| 亚洲无线码一区二区三区| 国产91精品一区二区| 精品蜜桃在线看| 国产白丝网站精品污在线入口| 国产欧美日韩中文久久| 国产精品一区二区x88av| 国产女人aaa级久久久级| 91国偷自产一区二区三区观看 | 欧美性猛交xxxx黑人交| 国产精品亲子伦对白| 26uuu国产电影一区二区| 欧美肥妇free| 欧美疯狂做受xxxx富婆| 欧美日韩黄视频| 欧美日韩色综合| 欧美在线观看视频一区二区| 色噜噜久久综合| 日本精品一区二区三区高清| 99精品欧美一区二区三区小说| 国产二区国产一区在线观看| 国产精品888| 国产精品亚洲专一区二区三区| 激情综合网最新| 久久精品国产一区二区三区免费看| 日本伊人色综合网| 韩国欧美国产一区| 国产一区二区三区观看| 国产二区国产一区在线观看| 成人在线一区二区三区| 99riav久久精品riav| 91丨九色porny丨蝌蚪| 色噜噜狠狠一区二区三区果冻| 色老头久久综合| 欧美日韩国产一区| 91精品国产综合久久精品图片| 欧美一区二区在线免费播放| 欧美电影免费观看高清完整版在线 | 91精彩视频在线| 欧美三级电影一区| 日韩一卡二卡三卡国产欧美| 欧美r级在线观看| 国产精品欧美久久久久一区二区 | 国产精品嫩草影院com| 国产精品乱人伦中文| 国产精品污网站| 久久蜜桃av一区二区天堂| 欧美日韩aaaaaa| 欧美人妇做爰xxxⅹ性高电影| 91国产福利在线| 欧美日韩一区视频| 欧美色偷偷大香| 欧美区视频在线观看| 日韩一区二区影院| 欧美精品一区二区高清在线观看| 欧美性生活久久| 欧美一区二区三区性视频| 日韩三级在线免费观看| 久久久亚洲高清| 一区二区国产视频| 久草在线在线精品观看| 国产成人免费视频精品含羞草妖精| 男人的天堂久久精品| 99精品视频在线免费观看| 欧美色视频一区| 91视频91自| 色视频一区二区| 欧美一区二区黄色| 一区二区三区日韩在线观看| 欧美日韩精品一区视频| 美国毛片一区二区| 一区二区三区欧美| 激情久久久久久久久久久久久久久久| 成人看片黄a免费看在线| 欧美日韩在线一区二区| 国产亚洲综合性久久久影院| 亚洲国产一区二区在线播放| 国产精品资源在线看| 欧美伦理电影网| 成人一道本在线| 91精品国产综合久久精品app| 欧美精品一区二区三区高清aⅴ | 97久久久精品综合88久久| 色哟哟一区二区在线观看| 精品国产乱码久久久久久图片| 午夜av电影一区| 国产精品日韩精品欧美在线| 制服丝袜国产精品| 欧美性一二三区| 国产欧美日韩精品a在线观看| 日韩av不卡一区二区| 色呦呦国产精品| 中文字幕永久在线不卡| 国产精品综合av一区二区国产馆| 欧美一级搡bbbb搡bbbb| 亚洲一区二区三区中文字幕在线| 不卡一区二区中文字幕| 久久久久99精品一区| 久久精品久久综合| 日韩欧美第一区| 天堂一区二区在线| 欧美伦理电影网| 午夜久久久久久久久久一区二区| 色婷婷狠狠综合| 亚洲精品欧美专区| 99久久国产免费看| 中文字幕日韩一区二区| 成人免费视频一区| 久久久久久久电影| 激情小说亚洲一区| 精品少妇一区二区三区在线视频| 日本视频在线一区| 精品一区二区在线免费观看| 亚洲精品综合在线| 婷婷六月综合网| 欧美日韩一级片网站| 亚洲成人福利片| 在线视频一区二区三| 一区二区三区高清| 91免费看片在线观看| 一区二区欧美视频| 欧美高清hd18日本| 美女视频黄 久久| 日韩免费看网站| 国产风韵犹存在线视精品| 国产人成亚洲第一网站在线播放| 国产乱淫av一区二区三区| 日本一区二区免费在线观看视频| 岛国av在线一区| 中文字幕一区在线| 91精品福利视频| 亚欧色一区w666天堂| 日韩一级成人av| 狠狠色丁香婷婷综合久久片| 久久精品亚洲麻豆av一区二区| 成人涩涩免费视频| 一区二区三区在线免费视频| 欧美无砖专区一中文字| 秋霞成人午夜伦在线观看| 精品三级在线观看| 国产福利精品导航| 亚洲人123区| 欧美色手机在线观看| 久久99久久99小草精品免视看| 久久女同性恋中文字幕| www.欧美精品一二区| 亚洲午夜电影在线观看| 欧美精品一区二区在线播放| 成人性视频免费网站| 亚洲一区在线观看网站| 精品国产伦一区二区三区免费| 成人高清免费在线播放| 日韩精品成人一区二区三区| 久久久久久久久久美女| 91蜜桃免费观看视频| 日韩电影免费一区| 国产欧美一区二区精品秋霞影院| 一本久久综合亚洲鲁鲁五月天 | 欧美日韩电影一区| 国产在线视频一区二区| 亚洲欧美在线视频| 欧美一级片在线| 99在线热播精品免费| 热久久免费视频| 亚洲视频在线一区二区| 欧美成人一区二区三区在线观看| av资源网一区| 看片网站欧美日韩| 亚洲欧美日韩在线播放| 精品国产乱码久久久久久久| 91免费看`日韩一区二区| 激情综合一区二区三区| 亚洲图片有声小说| 一区精品在线播放| 亚洲精品一区二区三区精华液 | 欧美激情中文不卡| 欧美自拍偷拍一区| 国产成人在线色| 奇米精品一区二区三区在线观看| 国产精品久久久久久久久免费樱桃 | 正在播放一区二区| 91日韩一区二区三区|