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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? dsgpu.cpp

?? 一個(gè)任天堂掌上游戲機(jī)NDS的源代碼
?? CPP
字號(hào):
/*************************************************************************** DSemu - The Next Generation                                             ** Null GPU plugin: Implementation [nullgpu.cpp]                           ** Copyright Imran Nazar, 2005; released under the BSD public licence.     ***************************************************************************/#include <string>#include "events.h"#include "defs.h"#include "dsgpu.h"#include "log.h"//---Static private class members------------------------------------------// Every plugin has an INFO structure attached, with info about the plugin.PLUGININFO dsGPU::pInfo={    PLUGIN_TYPE_GPU,    0x00010001,    "DS graphics plugin",    "DSemu-ng"};GUIPlugin *dsGPU::GUI;std::string dsGPU::pluginName;u8*  dsGPU::VRAMb[9];u16* dsGPU::VRAMh[9];u32* dsGPU::VRAMw[9];u8 *dsGPU::PALb; u16 *dsGPU::PALh; u32 *dsGPU::PALw;u8 *dsGPU::OAMb; u16 *dsGPU::OAMh; u32 *dsGPU::OAMw;u8 *dsGPU::dispbuffer;CPUPlugin *dsGPU::CPU;MMU32Plugin *dsGPU::MMU, *dsGPU::MMUsub;const int dsGPU::VRAMsizes[9]={128,128,128,128,64,16,16,32,16};std::map<u32,dsGPU::VRAMPTR> dsGPU::bankptrs;dsGPU::IOREG dsGPU::bankio[5];const u32 dsGPU::bankaddrs[9][32]={    {0x06800000, 0x06000000, 0x06400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x06020000, 0x06420000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x06040000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x06060000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},    {0x06820000, 0x06000000, 0x06400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x06020000, 0x06420000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x06040000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x06060000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},    {0x06840000, 0x06000000, 0x16000000, 0x00000000, 0x06200000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x06020000, 0x16020000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x06040000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x06060000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},    {0x06860000, 0x06000000, 0x16000000, 0x00000000, 0x06600000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x06020000, 0x16020000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x06040000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x06060000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},    {0x06880000, 0x06000000, 0x06400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},    {0x06890000, 0x06000000, 0x06400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x06004000, 0x06404000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x06010000, 0x06410000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x06014000, 0x06414000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},    {0x06894000, 0x06000000, 0x06400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x06004000, 0x06404000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x06010000, 0x06410000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x06014000, 0x06414000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},    {0x06898000, 0x06200000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},    {0x068A0000, 0x06208000, 0x06600000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},};void dsGPU::drawline(Plugin *in) { ((dsGPU*)in)->line(); }void dsGPU::line(){    GUI->eventPush(1536, EVENT_HBLANK_START, (vfptr)drawline, this);}// Tell the GPU where it'll be rendering tovoid dsGPU::setDisplay(u8 *buf){    dispbuffer = buf;}// Initialise plugin: Allocate memories, register with MMUdsGPU::dsGPU(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");    CPU = (CPUPlugin*)pRequest("DS_CPU0.main");    MMU = (MMU32Plugin*)pRequest("DS_CPU0.mmu");    MMUsub = (MMU32Plugin*)pRequest("DS_CPU1.mmu");    for(int i=0;i<9;i++)    {	VRAMb[i] = new u8[VRAMsizes[i]*1024];	if(!VRAMb[i]) throw Exception(ERR_GPU_INIT, pName,			              "VRAM allocation failed.");        VRAMh[i] = (u16*)VRAMb[i];	VRAMw[i] = (u32*)VRAMb[i];    }        PALb=new u8[2048]; OAMb=new u8[2048];    PALh=(u16*)PALb; PALw=(u32*)PALb;    OAMh=(u16*)OAMb; OAMw=(u32*)OAMb;        if(!PALb || !OAMb)        throw Exception(ERR_GPU_INIT, pName,                        "Allocation of VRAMs failed.");        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<5;i++)    {	bankio[i].data = 0;	bankio[i].flags = 3;    }    MMU->mmioReg(0x24, rdB, rdH, rdW, wrB, wrH, wrW);        Logger::log(pName) << "Initialised.";}// Shut down plugin: Free up memoriesdsGPU::~dsGPU(){    for(int i=0;i<9;i++)    {	if(VRAMb[i]) { delete VRAMb[i]; VRAMb[i]=NULL; VRAMh[i]=NULL; VRAMw[i]=NULL; }    }    if(PALb) { delete PALb;  PALb=NULL; PALh=NULL; PALw=NULL; }    if(OAMb) { delete OAMb;  OAMb=NULL; OAMh=NULL; OAMw=NULL; }	    pUnrequest("DS_CPU0.main", 1); CPU = NULL;    pUnrequest("DS_CPU0.mmu", 1); MMU = NULL;    pUnrequest("DS_CPU1.mmu", 1); MMUsub = NULL;    pUnrequest("UI", 0); GUI = NULL;        Logger::log(pName) << "Shutdown.";}// Reset plugin: Clear memories, read config filevoid dsGPU::reset(){    for(int i=0;i<9;i++)	memset(VRAMb[i], 0, VRAMsizes[i]*1024);    memset(PALb, 0, 2048);    memset(OAMb, 0, 2048);	    // First scanline call: In a thousand cycles, come back and draw a line    GUI->eventPush(1536, EVENT_HBLANK_START, (vfptr)drawline, this);        Logger::log(pName) << "Reset";}// Provide status: Fill palette-window framebuffervoid dsGPU::status(int opt1=0, int opt2=0){}u8 dsGPU::rdB(u32 a){    switch(a&0x0F000000)    {	case 0x06000000:	    if(bankptrs.find(a&0xFFFFC000) != bankptrs.end())                return bankptrs[a&0xFFFFC000].b[a&0x3FFF];	    break;    }    return 0xFF;}u16 dsGPU::rdH(u32 a){    switch(a&0x0F000000)    {	case 0x06000000:	    if(bankptrs.find(a&0xFFFFC000) != bankptrs.end())                return bankptrs[a&0xFFFFC000].h[(a&0x3FFF)>>1];	    break;    }    return 0xFFFF;}u32 dsGPU::rdW(u32 a){    switch(a&0x0F000000)    {	case 0x06000000:	    if(bankptrs.find(a&0xFFFFC000) != bankptrs.end())                return bankptrs[a&0xFFFFC000].w[(a&0x3FFF)>>2];	    break;    }    return 0xFFFFFFFF;}void dsGPU::wrB(u32 a, u8 d){    switch(a&0x0F000000)    {	case 0x04000000:	    if((a&0x00000FF0)==0x240) bankChange(a&15, d);	    break;	case 0x06000000://	    printf("%08X=%02X\n", a, d);	    if(bankptrs.find(a&0xFFFFC000) != bankptrs.end())	    {//                printf("Bank addr: %08X\n", bankptrs[a&0xFFFFC000].b);                bankptrs[a&0xFFFFC000].b[a&0x3FFF]=d;	    }	    break;    }}void dsGPU::wrH(u32 a, u16 d){    switch(a&0x0F000000)    {	case 0x04000000:	    if((a&0x00000FF0)==0x240)	    {		bankChange(a&14, d&255);		bankChange((a&14)+1, d>>8);	    }	    break;	case 0x06000000://	    printf("%08X=%04X\n", a, d);	    if(bankptrs.find(a&0xFFFFC000) != bankptrs.end())	    {//                printf("Bank addr: %08X\n", bankptrs[a&0xFFFFC000].h);                bankptrs[a&0xFFFFC000].h[(a&0x3FFF)>>1]=d;	    }	    break;    }}void dsGPU::wrW(u32 a, u32 d){    switch(a&0x0F000000)    {	case 0x04000000:	    if((a&0x00000FF0)==0x240)	    {		bankChange(a&12, d&255);		bankChange((a&12)+1, (d>>8)&255);		bankChange((a&12)+2, (d>>16)&255);		bankChange((a&12)+3, d>>24);	    }	    break;	case 0x06000000://	    printf("%08X=%08X\n", a, d);	    if(bankptrs.find(a&0xFFFFC000) != bankptrs.end())	    {//                printf("Bank addr: %08X\n", bankptrs[a&0xFFFFC000].w);                bankptrs[a&0xFFFFC000].w[(a&0x3FFF)>>2]=d;	    }	    break;    }}void dsGPU::bankChange(u8 bank, u8 val){    if(bank>6) bank--;/*        if(val & 0x80)        printf("Bank #%d (%d KB) set to %02X (%08X)\n", bank, VRAMsizes[bank], val, bankaddrs[bank][val&0x1F]);    else	printf("Bank #%d (%d KB) off\n", bank, VRAMsizes[bank]);*/        VRAMPTR ptr={NULL,NULL,NULL};    for(int i=0; i<(VRAMsizes[bank]>>4); i++)    {	bankptrs[bankaddrs[bank][(bankio[bank>>1].b[bank&1])&0x1F]+(i<<14)]=ptr;//	printf("%08X off\n", bankaddrs[bank][(bankio[bank>>1].b[bank&1])&0x1F]+(i<<14));    }    if(val&0x80)    {        for(int i=0; i<(VRAMsizes[bank]>>4); i++)        {	    ptr.b=VRAMb[bank]+(i<<14);	    ptr.h=VRAMh[bank]+(i<<13);	    ptr.w=VRAMw[bank]+(i<<12);	    bankptrs[bankaddrs[bank][val&0x1F]+(i<<14)]=ptr;/*	                printf("%08X to bank %d\n", bankaddrs[bank][val&0x1F]+(i<<14), bank);	    printf("%08X, %08X, %08X\n",	        bankptrs[bankaddrs[bank][val&0x1F]+(i<<14)].b,	        bankptrs[bankaddrs[bank][val&0x1F]+(i<<14)].h,	        bankptrs[bankaddrs[bank][val&0x1F]+(i<<14)].w);*/	            }    }}//---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 dsGPU(name, req, unreq);}// Provide plugin version informationPLUGININFO *dsGPU::getinfo(){    return &pInfo;}// Release plugin from outsidevoid dsGPU::release(){    // Delete the Test plugin that was 'new'd in getPlugin.    delete this;}/*** EOF: nullgpu.cpp ****************************************************/

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丝袜亚洲另类丝袜在线| 91影院在线观看| 免费久久精品视频| 亚洲国产成人tv| 综合欧美一区二区三区| 中文乱码免费一区二区| 26uuu精品一区二区| 欧美日韩高清在线播放| 色狠狠综合天天综合综合| 波多野结衣中文字幕一区二区三区| 激情成人综合网| 精品一区二区久久久| 日韩国产精品久久| 婷婷成人综合网| 亚洲香蕉伊在人在线观| 一区二区三区在线视频播放 | 久久精品国产精品亚洲综合| 亚洲一区二区三区中文字幕 | 亚洲一区二区三区在线播放| 亚洲成人第一页| 人人狠狠综合久久亚洲| 韩国女主播成人在线| 床上的激情91.| 欧美亚洲禁片免费| 91精品国产综合久久久蜜臀图片| 日韩欧美123| 国产精品系列在线| 亚洲午夜三级在线| 久久成人18免费观看| 国产a区久久久| 在线看一区二区| 精品国产乱码久久久久久老虎| 久久精品免视看| 亚洲精品欧美综合四区| 日韩在线a电影| 国产黄色精品网站| 色偷偷一区二区三区| 4438x亚洲最大成人网| 欧美激情一二三区| 亚洲午夜久久久久久久久久久| 久久精品国产99久久6| 成人精品电影在线观看| 欧美久久久一区| 99久久综合狠狠综合久久| 亚洲成人一二三| 久久99精品视频| 福利电影一区二区三区| 91黄色小视频| xf在线a精品一区二区视频网站| 亚洲欧美怡红院| 久久精品国产久精国产爱| 色综合色狠狠综合色| 欧美不卡在线视频| 亚洲综合丝袜美腿| 国产精品白丝jk白祙喷水网站| 欧美性受xxxx黑人xyx性爽| 久久亚洲精精品中文字幕早川悠里| 亚洲色欲色欲www在线观看| 久久成人av少妇免费| 欧美在线free| 国产精品你懂的在线欣赏| 日韩精品福利网| 在线观看亚洲成人| 中文无字幕一区二区三区| 日本成人超碰在线观看| 91啪亚洲精品| 久久久久久久久久久久久久久99 | 日本丶国产丶欧美色综合| 日韩精品一区二区三区视频在线观看 | 性欧美疯狂xxxxbbbb| 成人动漫精品一区二区| 日韩精品中午字幕| 亚洲成人动漫在线免费观看| 成人污污视频在线观看| 2023国产一二三区日本精品2022| 亚洲制服丝袜一区| 99国产精品一区| 欧美激情资源网| 国产真实乱偷精品视频免| 91.成人天堂一区| 亚洲成人1区2区| 色婷婷狠狠综合| 自拍偷拍国产精品| 成人av电影在线观看| 久久精品人人做人人综合| 久久9热精品视频| 91精品国产综合久久小美女| 亚洲成人自拍偷拍| 欧美色图激情小说| 一区二区三区av电影| 91视频com| 亚洲欧美激情在线| 91农村精品一区二区在线| 中文字幕精品一区二区三区精品| 精品无人码麻豆乱码1区2区| 欧美一区二区福利视频| 日日欢夜夜爽一区| 欧美二区乱c少妇| 日韩avvvv在线播放| 欧美美女直播网站| 日韩一区欧美二区| 91麻豆精品国产| 青青草国产成人99久久| 欧美一区二区国产| 九色|91porny| 久久精品一区二区三区四区| 国产成人精品免费| 最新国产成人在线观看| 99re成人精品视频| 亚洲自拍偷拍综合| 欧美日韩在线综合| 日韩 欧美一区二区三区| 欧美一区午夜视频在线观看| 日韩国产精品久久| 日韩女优电影在线观看| 国产一区二区三区免费看| 精品国内二区三区| 风流少妇一区二区| 亚洲欧美日韩人成在线播放| 欧洲亚洲精品在线| 视频一区中文字幕国产| 欧美不卡一区二区| 从欧美一区二区三区| 亚洲免费av高清| 欧美日韩激情一区| 国精产品一区一区三区mba桃花| 国产网红主播福利一区二区| www.成人网.com| 亚洲6080在线| 精品国产一二三区| 白白色亚洲国产精品| 亚洲福中文字幕伊人影院| 日韩精品一区二| 成人看片黄a免费看在线| 一区二区三区美女| 日韩一卡二卡三卡四卡| 国产成人av影院| 一区二区欧美在线观看| 欧美一级日韩免费不卡| 成人午夜激情影院| 天天亚洲美女在线视频| 久久久精品影视| 精品视频999| 国产成人鲁色资源国产91色综| 一区二区三区中文免费| 337p粉嫩大胆噜噜噜噜噜91av| av亚洲精华国产精华精华| 亚洲成av人**亚洲成av**| 久久青草国产手机看片福利盒子| 91影院在线免费观看| 久久9热精品视频| 亚洲免费在线观看| 精品奇米国产一区二区三区| 91视频观看免费| 国产一区二区在线看| 一区二区三区免费观看| 久久久久久久网| 在线播放视频一区| 99久久99久久精品免费观看| 久久99热狠狠色一区二区| 亚洲私人黄色宅男| 26uuu亚洲综合色| 久久久久久久久久电影| 欧美在线视频日韩| 懂色av一区二区三区免费观看| 日韩精品免费视频人成| 中文字幕在线视频一区| 精品国产乱子伦一区| 欧美群妇大交群的观看方式| 99久久精品一区二区| 激情综合一区二区三区| 亚洲一区国产视频| 国产精品九色蝌蚪自拍| 精品国产乱码久久久久久免费| 欧美日韩国产在线播放网站| 99国产精品久| 国产91精品一区二区麻豆网站| 美女网站色91| 婷婷中文字幕一区三区| 一区二区三区四区在线| 国产网红主播福利一区二区| 日韩欧美成人一区二区| 91精品视频网| 欧美日韩国产首页| 日本韩国一区二区三区| av影院午夜一区| 大白屁股一区二区视频| 国产精品亚洲一区二区三区在线| 免费成人结看片| 日本怡春院一区二区| 亚洲成人动漫在线观看| 亚洲一区二区三区美女| 一区二区三区在线观看视频| 中文字幕综合网| 亚洲私人黄色宅男| 最近中文字幕一区二区三区| 国产精品福利av| 亚洲视频一区二区在线| 中文字幕在线一区| 日韩毛片在线免费观看|