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

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

?? arm9es.cpp

?? 一個任天堂掌上游戲機NDS的源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/**************************************************************************
* DSemu - The Next Generation                                             *
* Portable ARM9ES core: Plugin implementation [arm9es.cpp]                *
* Copyright Imran Nazar, 2005; released under the BSD public licence.     *
**************************************************************************/

#include <string>
#include <utility>
#include "arm9es.h"
#include "armdasm.h"
#include "plgmmu32.h"
#include "plggui.h"
#include "datadefs.h"
#include "log.h"
#include "err.h"
#include "font5x7.h"
#include "arm-cpnull.h"
#include "arm-cpsys.h"

// Interrupt vectors at top of address space, not bottom
#define ARM_HIGH_VECTORS

//---Static private class members------------------------------------------
// Every plugin has an INFO structure attached, with info about the plugin.

PLUGININFO ARM9ES::pInfo={
    PLUGIN_TYPE_CPU,
    0x00010001,
    "Portable ARM9ES core",
    "DSemu-ng"
};

ARM9ES::REGS ARM9ES::reg;
std::map<u32, int> ARM9ES::bkpts;

std::string ARM9ES::pluginName;
FILE *ARM9ES::dumpfile;
MMU32Plugin *ARM9ES::MMU;
GUIPlugin *ARM9ES::GUI;
u32 *ARM9ES::dbgbuffer = NULL;
int ARM9ES::dbgwinID = 0;
ARMDasm ARM9ES::dasm(rdWhelper);

ARMCopro *ARM9ES::copro[16];

const char *ARM9ES::modeStrings[7] = {
    "USR", "FIQ", "IRQ", "SVC", "ABT", "UND", "SYS"
};

const int ARM9ES::modeToCpsrLUT[7] = {
    CPSR_MUSR, CPSR_MFIQ, CPSR_MIRQ, CPSR_MSVC,
    CPSR_MABT, CPSR_MUND, CPSR_MSYS
};

const int ARM9ES::modeFromCpsrLUT[16] = {
    MODE_USR, MODE_FIQ, MODE_IRQ, MODE_SVC,
    -1,       -1,       -1,       MODE_ABT,
    -1,       -1,       -1,       MODE_UND,
    -1,       -1,       -1,       MODE_SYS,
};

//---Implementation--------------------------------------------------------
// Initialise plugin
// Parameters: name  - FQPN of plugin as listed in INI file
//             req   - Pointer to PluginRequest API function
//             unreq - Pointer to PluginUnrequest API function
ARM9ES::ARM9ES(std::string name, REQPTR req, UNREQPTR unreq)
{
    pName = std::string(name);
    pClass = pName.substr(0, pName.find(".")+1);
    pRequest = req;
    pUnrequest = unreq;

    pluginName = pName;

    dbgbuffer = new u32[456*128];

    copro[0] = new ARMcpNULL();
    copro[15] = new ARMcpSys();
    for(int i=1;i<=14;i++) copro[i]=copro[0];

    MMU = (MMU32Plugin*) pRequest(pClass+"mmu");
    GUI = (GUIPlugin*) pRequest("UI");

    dbgwinID = GUI->subwinCreate(456, 128, "ARM9 debugger", dbgbuffer);
    
#ifdef ARM9ES_DEBUG
    dumpfile = fopen("dsemu-trace.bin","wb");
#endif
    
    MMU->setCPU(this);

    // Simple check: Is this a 32-bit MMU? Our CPU's 32-bit after all
    if((MMU->getCaps() & PLGMMU_CAPS_SIZEMASK) != PLGMMU_CAPS_32B)
    {
        pUnrequest(pClass+"mmu", 1); MMU = NULL;
        throw Exception(ERR_CPU_INIT, pName,
                        pClass+"mmu isn't 32-bit.");
    }

    Logger::log(pName) << "Initialised.";
}

// Plugin cleanup
ARM9ES::~ARM9ES()
{
    if(dbgbuffer) { delete dbgbuffer; dbgbuffer = NULL; }

    if(copro[0]) delete copro[0];
    if(copro[15]) delete copro[15];
    for(int i=0;i<=15;i++) copro[i]=NULL;
    
    pUnrequest("UI",0); GUI = NULL;

    pUnrequest(pClass+"mmu", 1); MMU = NULL;

#ifdef ARM9ES_DEBUG
    fclose(dumpfile);
#endif

    Logger::log(pName) << "Shutdown after " << reg.clkcount << " cycles.";
}

// Reset CPU state
void ARM9ES::reset()
{
    reg.r0 =0; reg.r1 =0; reg.r2 =0; reg.r3 =0;
    reg.r4 =0; reg.r5 =0; reg.r6 =0; reg.r7 =0;
    reg.r8 =0; reg.r9 =0; reg.r10=0; reg.r11=0;
    reg.r12=0; reg.r13=0; reg.r14=0;
    
#ifdef ARM_HIGH_VECTORS
    reg.r15=0xFFFF0000; // Reset vector
#else
    reg.r15=0x00000000; // Reset vector
#endif

    for(int i=0; i<7; i++) reg.spsr[i]=0;
    
    reg.r8fiq=0; reg.r9fiq=0; reg.r10fiq=0; reg.r11fiq=0;
    reg.r12fiq=0; reg.r13fiq=0; reg.r14fiq=0;
    reg.r13irq=0; reg.r14irq=0;
    reg.r13abt=0; reg.r14abt=0;
    reg.r13svc=0; reg.r14svc=0;
    reg.r13und=0; reg.r14und=0;
    
    reg.curmode = MODE_SYS;
    reg.cpsr = CPSR_MSYS;

    // BUGBUG: Hack to set up DS initial state on reset
    reg.r13 = 0x03007F00;
    reg.r13irq = 0x03007FA0;
    reg.r13svc = 0x03007FE0;
    reg.cpsr |= CPSR_F;
    // ENDBUG

    reg.r[0x0]=reg.r0 ; reg.r[0x1]=reg.r1 ; reg.r[0x2]=reg.r2 ; reg.r[0x3]=reg.r3 ;
    reg.r[0x4]=reg.r4 ; reg.r[0x5]=reg.r5 ; reg.r[0x6]=reg.r6 ; reg.r[0x7]=reg.r7 ;
    reg.r[0x8]=reg.r8 ; reg.r[0x9]=reg.r9 ; reg.r[0xA]=reg.r10; reg.r[0xB]=reg.r11;
    reg.r[0xC]=reg.r12; reg.r[0xD]=reg.r13; reg.r[0xE]=reg.r14; reg.r[0xF]=reg.r15;

    for(int i=0; i<8; i++) reg.flags[i]=0;
    
    reg.clkcount = 0;
    
    MMU->reset();

    memset(dbgbuffer, 0, 456*128*4);
    status(3,0);

#ifdef ARM9ES_DEBUG
    reg.r[15]+=4; fwrite(reg.r, 4, 17, dumpfile); reg.r[15]-=4;
#endif

    Logger::log(pName) << "Reset.";
}

// Provide status information (fill the debugger framebuffer)
void ARM9ES::status(int mode=3, int opt2=0)
{
    char str[512]; int a; int xdim=456, ydim=128;
    u32 r15=reg.r[15],r15orig=r15; static u32 r15old;
    static u32 dbgoldr[16],rchanged[16];
    static int dbgoldf[6],fchanged[6];
    u32 op=0; u32 col; u16 oph=0;

    int offset=0;

    if(dbgbuffer)
    {
        Font5x7 prn(dbgbuffer, xdim, ydim);

	cpsrUpdate();

    if((mode==3 && reg.flags[FLAG_T]) || (mode==2))
	r15-=(16-offset*2);
    else
	r15-=(32-offset*4);

    for(a=0;a<16;a++)
    {
        if(r15==r15orig) col=0x00FF8080; else col=0x00FFFFFF;
	if(bkpts.find(r15) != bkpts.end()) col=0x0000FFFF;
        if((r15&0x0F000000)==(r15orig&0x0F000000)) op=MMU->rdW(r15);
        switch(mode)
        {
            case 1:
                if((r15&0x0F000000)==(r15orig&0x0F000000))
                    sprintf(str,"%08X: %08X | %s",r15,op,dasm.disasm(op,r15).c_str());
                else sprintf(str,"%08X",r15);
                r15+=4;
		break;
            case 2:
                if((r15&0x0F000000)==(r15orig&0x0F000000))
                {
                    if(r15&2) oph=op>>16; else oph=op&65535;
                    sprintf(str,"%08X: %04X | %s",r15,oph,dasm.tdisasm((u32)oph,r15).c_str());
                }
                else sprintf(str,"%08X",r15);
                r15+=2; break;
            case 3:
                switch(reg.flags[FLAG_T])
                {
                    case 0:
                        if((r15&0x0F000000)==(r15orig&0x0F000000))
                            sprintf(str,"%08X: %08X | %s",r15,op,dasm.disasm(op,r15).c_str());
                        else sprintf(str,"%08X",r15);
                        r15+=4; break;
                    case 1:
                        if((r15&0x0F000000)==(r15orig&0x0F000000))
                        {
                            if(r15&2) oph=op>>16; else oph=op&65535;
                            sprintf(str,"%08X: %04X | %s",r15,oph,dasm.tdisasm(oph,r15).c_str());
                        }
                        else sprintf(str,"%08X",r15);
                        r15+=2; break;
                }
        }
        prn.print(str,0,a*8,col);
    }

    for(a=0;a<=15;a++)
    {
        sprintf(str,"r%02d: %08X",a,reg.r[a]);
        if(r15old!=r15orig)
        {
            if(reg.r[a]!=dbgoldr[a]) { dbgoldr[a]=reg.r[a]; rchanged[a]=1; }
            else rchanged[a]=0;
        }
        if(rchanged[a]) prn.print(str,56*6,a*8,0x000000FF);
	else prn.print(str,56*6,a*8,0x00FFFFFF);
    }
    
    sprintf(str,"%s",modeStrings[reg.curmode]);
    prn.print(str, 72*6, 56 ,0x00FFFFFF);

    a=(reg.cpsr&CPSR_N)>>31; sprintf(str,"N: %d",a);
    if(r15old!=r15orig)
        if(a!=dbgoldf[0]) { dbgoldf[0]=a; fchanged[0]=1; } else fchanged[0]=0;
    if(fchanged[0]) prn.print(str,72*6,0,0x000000FF);
    else prn.print(str,72*6,0,0x00FFFFFF);

    a=(reg.cpsr&CPSR_Z)>>30; sprintf(str,"Z: %d",a);
    if(r15old!=r15orig)
        if(a!=dbgoldf[1]) { dbgoldf[1]=a; fchanged[1]=1; } else fchanged[1]=0;
    if(fchanged[1]) prn.print(str,72*6,8,0x000000FF);
    else prn.print(str,72*6,8,0x00FFFFFF);

    a=(reg.cpsr&CPSR_C)>>29; sprintf(str,"C: %d",a);
    if(r15old!=r15orig)
        if(a!=dbgoldf[2]) { dbgoldf[2]=a; fchanged[2]=1; } else fchanged[2]=0;
    if(fchanged[2]) prn.print(str,72*6,16,0x000000FF);
    else prn.print(str,72*6,16,0x00FFFFFF);

    a=(reg.cpsr&CPSR_V)>>28; sprintf(str,"V: %d",a);
    if(r15old!=r15orig)
        if(a!=dbgoldf[3]) { dbgoldf[3]=a; fchanged[3]=1; } else fchanged[3]=0;
    if(fchanged[3]) prn.print(str,72*6,24,0x000000FF);
    else prn.print(str,72*6,24,0x00FFFFFF);

    a=(reg.cpsr&CPSR_Q)>>27;  sprintf(str,"Q: %d",a);
    if(r15old!=r15orig)
        if(a!=dbgoldf[4]) { dbgoldf[4]=a; fchanged[4]=1; } else fchanged[4]=0;
    if(fchanged[4]) prn.print(str,72*6,32,0x000000FF);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩视频一区二区三区在线播放| 国产一区二区三区最好精华液| 日韩 欧美一区二区三区| 久久成人羞羞网站| av成人老司机| 这里只有精品电影| 日本一区二区三区在线观看| 亚洲精品视频在线看| 日韩二区在线观看| 国产精品91一区二区| 欧美性色综合网| 337p日本欧洲亚洲大胆精品| 亚洲美女视频在线| 蜜臀精品一区二区三区在线观看| 丁香婷婷综合五月| 欧美区一区二区三区| 日本一区二区三区国色天香 | 日韩福利视频导航| 国产不卡高清在线观看视频| 欧美一a一片一级一片| 欧美mv和日韩mv的网站| 亚洲色图欧洲色图婷婷| 精品一区二区三区香蕉蜜桃| 99国产精品久| wwww国产精品欧美| 亚洲国产aⅴ成人精品无吗| 国产成人一区在线| 欧美群妇大交群中文字幕| 美美哒免费高清在线观看视频一区二区 | 久久精品国产亚洲a| 91浏览器在线视频| 久久久精品2019中文字幕之3| 亚洲午夜精品在线| av激情亚洲男人天堂| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲一区二区三区四区不卡| 成人三级伦理片| 久久综合久久综合九色| 午夜精品久久久久久久| 99国产精品久| 久久久久久免费毛片精品| 日韩成人精品在线观看| 色哟哟亚洲精品| 国产精品免费久久久久| 国产乱人伦偷精品视频免下载| 欧美精品日韩一区| 亚洲国产你懂的| 91在线精品一区二区| 久久精品一区二区三区不卡| 日本色综合中文字幕| 欧美私人免费视频| 亚洲狼人国产精品| www.亚洲人| 欧美国产日韩精品免费观看| 精品一二三四在线| 日韩欧美在线观看一区二区三区| 亚洲制服丝袜av| 91黄色激情网站| 日韩理论电影院| 丁香激情综合五月| 国产日韩欧美精品在线| 狠狠色狠狠色合久久伊人| 日韩欧美成人一区| 日韩**一区毛片| 91精品国产综合久久精品麻豆 | 欧美大胆一级视频| 日本大胆欧美人术艺术动态| 欧美日韩国产综合久久| 亚洲一区国产视频| 欧美日韩午夜影院| 天天操天天色综合| 69av一区二区三区| 石原莉奈在线亚洲二区| 91精品国产综合久久久久久| 视频一区在线视频| 日韩午夜在线观看视频| 精油按摩中文字幕久久| 2欧美一区二区三区在线观看视频| 久草中文综合在线| 久久久久久久久久久黄色| 国产成人精品影视| 欧美国产97人人爽人人喊| 成人精品一区二区三区中文字幕| 国产精品青草久久| 色综合久久中文综合久久牛| 亚洲综合图片区| 欧美精品丝袜久久久中文字幕| 亚洲电影一级黄| 91麻豆精品国产91久久久久久久久 | 国产精品资源在线观看| 国产精品网站在线播放| 91麻豆精品在线观看| 亚洲一区av在线| 宅男在线国产精品| 国产精品一级片| 1000部国产精品成人观看| 色呦呦国产精品| 日韩精品一二区| 精品国产精品网麻豆系列| 国产不卡一区视频| 一区二区三区四区av| 8x8x8国产精品| 国产精品综合久久| 亚洲免费在线播放| 91精品综合久久久久久| 国产福利一区在线| 亚洲色图欧美偷拍| 91精品欧美综合在线观看最新| 精品一区二区三区免费| 国产精品午夜电影| 欧美色成人综合| 国产一区高清在线| 一区二区三区色| 精品少妇一区二区三区在线视频| 成人性视频网站| 午夜精品免费在线| 久久精品在这里| 91成人网在线| 国模大尺度一区二区三区| 亚洲欧美日韩国产另类专区| 欧美一区二区女人| 成人黄色在线视频| 婷婷综合另类小说色区| 欧美激情一区二区三区四区| 欧美三片在线视频观看| 国产成人免费av在线| 亚洲国产欧美一区二区三区丁香婷| 欧美精品一区在线观看| 一本大道久久a久久综合| 麻豆成人免费电影| 最新欧美精品一区二区三区| 欧美一区永久视频免费观看| 日韩女优制服丝袜电影| 91视频观看视频| 美国十次了思思久久精品导航| 亚洲图片欧美激情| 久久噜噜亚洲综合| 欧美日韩美女一区二区| av高清不卡在线| 九色|91porny| 亚洲va欧美va人人爽| 国产精品福利一区二区三区| 日韩视频免费观看高清完整版在线观看 | 国产露脸91国语对白| 亚洲不卡一区二区三区| 国产精品久久久久久久久免费相片| 91精品午夜视频| 色88888久久久久久影院野外| 国内成人自拍视频| 午夜欧美视频在线观看| 亚洲美女屁股眼交3| 日本一区二区在线不卡| 日韩三级免费观看| 欧美性大战久久久久久久蜜臀| 国产99久久久精品| 精品亚洲国内自在自线福利| 亚洲电影视频在线| 亚洲欧美另类图片小说| 国产人成亚洲第一网站在线播放| 欧美一区二区三区精品| 欧洲精品一区二区| 99re视频这里只有精品| 国产成a人亚洲精| 经典一区二区三区| 日韩精品久久久久久| 亚洲国产精品尤物yw在线观看| 亚洲欧美视频在线观看视频| 国产精品天美传媒沈樵| 久久综合色之久久综合| 日韩丝袜美女视频| 欧美一区二区视频观看视频| 欧美视频一区二区在线观看| 日本韩国欧美一区| 91美女片黄在线观看| 9人人澡人人爽人人精品| 成人激情图片网| 成人一区二区三区视频在线观看| 国产一区视频网站| 国产乱淫av一区二区三区| 国产一区二区三区黄视频 | 欧美手机在线视频| 色一情一伦一子一伦一区| 99精品黄色片免费大全| av一区二区三区四区| av电影天堂一区二区在线观看| av亚洲精华国产精华精华| 99精品国产一区二区三区不卡| 成人a级免费电影| 91在线视频播放地址| av在线一区二区| 一本一道综合狠狠老| 韩国三级中文字幕hd久久精品| 久久久久久久久久久久电影| 国产精品一二三四五| 中文字幕一区二区不卡| 在线亚洲欧美专区二区| 成人免费精品视频| 国产精品天天摸av网| 欧美日韩国产在线观看| 国产主播一区二区三区|