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

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

?? arm9es.cpp

?? 一個任天堂掌上游戲機NDS的源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
    else prn.print(str,72*6,32,0x00FFFFFF);

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

    if(r15old!=r15orig) r15old=r15orig;

    }

    GUI->subwinRefresh(dbgwinID);
}

// Function the disassembler will use to read memory
u32 ARM9ES::rdWhelper(u32 addr) { return MMU->rdW(addr); }

// Save registers, and switch processor modes
void ARM9ES::modeSwitch(int in, int out)
{
    //---Save state
    reg.r0 = reg.r[0]; reg.r1 = reg.r[1];
    reg.r2 = reg.r[2]; reg.r3 = reg.r[3];
    reg.r4 = reg.r[4]; reg.r5 = reg.r[5];
    reg.r6 = reg.r[6]; reg.r7 = reg.r[7];

    if(in == MODE_FIQ)
    {
	reg.r8fiq = reg.r[8];   reg.r9fiq = reg.r[9];
	reg.r10fiq = reg.r[10]; reg.r11fiq = reg.r[11];
	reg.r12fiq = reg.r[12];
    } else {
	reg.r8 = reg.r[8];   reg.r9 = reg.r[9];
	reg.r10 = reg.r[10]; reg.r11 = reg.r[11];
	reg.r12 = reg.r[12];
    }
    switch(in)
    {
	case MODE_USR:
	case MODE_SYS: reg.r13 = reg.r[13]; reg.r14 = reg.r[14]; break;
	case MODE_IRQ: reg.r13irq = reg.r[13]; reg.r14irq = reg.r[14]; break;
	case MODE_FIQ: reg.r13fiq = reg.r[13]; reg.r14fiq = reg.r[14]; break;
	case MODE_SVC: reg.r13svc = reg.r[13]; reg.r14svc = reg.r[14]; break;
	case MODE_ABT: reg.r13abt = reg.r[13]; reg.r14abt = reg.r[14]; break;
	case MODE_UND: reg.r13und = reg.r[13]; reg.r14und = reg.r[14]; break;
    }
    reg.r15 = reg.r[15];
    
    //---Switch to new mode
    if(out == MODE_FIQ)
    {
	reg.r[8] = reg.r8fiq;   reg.r[9] = reg.r9fiq;
	reg.r[10] = reg.r10fiq; reg.r[11] = reg.r11fiq;
	reg.r[12] = reg.r12fiq;
    } else {
	reg.r[8] = reg.r8;   reg.r[9] = reg.r9;
	reg.r[10] = reg.r10; reg.r[11] = reg.r11;
	reg.r[12] = reg.r12;
    }
    switch(out)
    {
	case MODE_USR:
	case MODE_SYS: reg.r[13] = reg.r13; reg.r[14] = reg.r14; break;
	case MODE_IRQ: reg.r[13] = reg.r13irq; reg.r[14] = reg.r14irq; break;
	case MODE_FIQ: reg.r[13] = reg.r13fiq; reg.r[14] = reg.r14fiq; break;
	case MODE_SVC: reg.r[13] = reg.r13svc; reg.r[14] = reg.r14svc; break;
	case MODE_ABT: reg.r[13] = reg.r13abt; reg.r[14] = reg.r14abt; break;
	case MODE_UND: reg.r[13] = reg.r13und; reg.r[14] = reg.r14und; break;
    }
    
    reg.curmode = out;
    cpsrUpdate();
}

// Update the CPSR based on the flags[] array
void ARM9ES::cpsrUpdate()
{
    if(reg.flags[FLAG_N]) reg.cpsr|=CPSR_N; else reg.cpsr&=(~CPSR_N);
    if(reg.flags[FLAG_Z]) reg.cpsr|=CPSR_Z; else reg.cpsr&=(~CPSR_Z);
    if(reg.flags[FLAG_C]) reg.cpsr|=CPSR_C; else reg.cpsr&=(~CPSR_C);
    if(reg.flags[FLAG_V]) reg.cpsr|=CPSR_V; else reg.cpsr&=(~CPSR_V);
    if(reg.flags[FLAG_T]) reg.cpsr|=CPSR_T; else reg.cpsr&=(~CPSR_T);
    if(reg.flags[FLAG_Q]) reg.cpsr|=CPSR_Q; else reg.cpsr&=(~CPSR_Q);
    reg.cpsr &= ~CPSR_M;
    reg.cpsr |= modeToCpsrLUT[reg.curmode];
}

// Split the CPSR into the flags[] array
void ARM9ES::cpsrSplit()
{
    reg.flags[FLAG_N]=(reg.cpsr>>31)&1;
    reg.flags[FLAG_Z]=(reg.cpsr>>30)&1;
    reg.flags[FLAG_C]=(reg.cpsr>>29)&1;
    reg.flags[FLAG_V]=(reg.cpsr>>28)&1;
    reg.flags[FLAG_T]=(reg.cpsr>>5)&1;
    reg.flags[FLAG_Q]=(reg.cpsr>>27)&1;

    modeSwitch(reg.curmode, modeFromCpsrLUT[reg.cpsr&15]);
}

// Add to the internal clock
void ARM9ES::clockAdd(int cyc)
{
    reg.clkcount += cyc;
}

// Toggle a breakpoint on or off at a specific address
void ARM9ES::dbgBkptToggle(u32 addr)
{
    if(bkpts.find(addr) != bkpts.end()) bkpts.erase(addr);
    else bkpts[addr]=1;

    status();
}

// Return the map of breakpoint addresses to states
std::map<u32, int> ARM9ES::dbgBkptGet()
{
    return bkpts;
}

// Work out how many bits in a 16-bit value are set to 1
// Used by the LDM/STM opcodes
// ACK: Donald Knuth (Sidesum algorithm)
int ARM9ES::ssum16(u16 val)
{
    int res=val;
    res=((res>>1)&0x5555)+(res&0x5555);
    res=((res>>2)&0x3333)+(res&0x3333);
    res=((res>>4)&0x0F0F)+(res&0x0F0F);
    res=((res>>8)&0x00FF)+(res&0x00FF);
    return res;
}

// Dispatch
// TODO: Optimise the dispatch loop, it's damned slow

int ARM9ES::exec(int cycles)
{
    uint64_t stamp = reg.clkcount+cycles, start = reg.clkcount;
    do {	    
	if(bkpts.find(reg.r[15]) != bkpts.end())
	{
	    switch(bkpts[reg.r[15]])
	    {
		case 1:
		    bkpts[reg.r[15]]=2;
                    char str[20];
                    sprintf(str, "PC=%08X", reg.r[15]);
                    Logger::log(pName) << "Breakpoint encountered at " << str;
                    return -(reg.clkcount-start);
		case 2:
		    bkpts[reg.r[15]]=1;
		    break;
	    }
	}
	if(reg.flags[FLAG_T])
	{
	    reg.curop = (u32)MMU->rdH(reg.r[15]);
	    reg.r[15] += 2;

	    reg.clkcount += TLUT[(reg.curop&TMSK_OP)>>TSHFT_OP]();
	    
#ifdef ARM9ES_DEBUG
	    cpsrUpdate();
            reg.r[15]+=2; fwrite(reg.r, 4, 17, dumpfile); reg.r[15]-=2;
#endif	    
	    
	} else {
            reg.curop = MMU->rdW(reg.r[15]);
	    //char str[64];
	    //sprintf(str, "%08X: %08X | ", reg.r[15], reg.curop);
	    //Logger::log(pluginName) << str << dasm.disasm(reg.curop);
	    
	    reg.r[15] += 4;
	    
            if(condLUT[(reg.curop&MSK_COND)>>SHFT_COND]())
            {
                reg.clkcount += OLUT[((reg.curop&MSK_OP)>>SHFT_OPH)|
                                     ((reg.curop&MSK_FUNC)>>SHFT_FUNC)]();
            }
            else reg.clkcount++;
	    
#ifdef ARM9ES_DEBUG
	    cpsrUpdate();
            reg.r[15]+=4; fwrite(reg.r, 4, 17, dumpfile); reg.r[15]-=4;
#endif	    
	    
	}
    } while(reg.clkcount < stamp);
    return reg.clkcount - start;
}

// CPU is interrupted; set up the CPU state for the int handler
void ARM9ES::interrupt(int type)
{
    // Type ignored for now, IRQ assumed
    reg.flags[FLAG_T]=0;
    cpsrUpdate();
    reg.cpsr |= CPSR_I;
    
    reg.r14irq = reg.r[15];
    reg.spsr[MODE_IRQ] = reg.cpsr;
    modeSwitch(reg.curmode, MODE_IRQ);
    
#ifdef ARM_HIGH_VECTORS
    reg.r[15] = 0xFFFF0018;
#else
    reg.r[15] = 0x00000018;
#endif
    
}

void ARM9ES::setPC(u32 pc)
{
    reg.r[15] = pc;
}

//---Exceptional opcode handlers-------------------------------------------
// NOTE: As of right now, these do nothing; they are there such that the
//       opcodes can safely call them if a problem occurs. 

OPC opUND()
{
    char str[80];
    sprintf(str, " at %08X: %08X", reg.r[15], reg.curop);
    //Logger::log(pluginName) << "Undefined opcode" << str;
    return 1;
}

OPC opUNP()
{
    char str[80];
    sprintf(str, " at %08X: %08X", reg.r[15], reg.curop);
    //Logger::log(pluginName) << "Unpredictable opcode" << str;
    return 1;
}

OPC opUNI()
{
    char str[80];
    sprintf(str, " at %08X: %08X", reg.r[15], reg.curop);
    //Logger::log(pluginName) << "Unimplemented opcode" << str;
    return 1;
}

OPC opUNL()
{
    // Would act as cache filler
    return 1;
}

//---Plugin 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 function
EXPORTFUNC void getPlugin(Plugin **plg,
                          std::string name,
                          REQPTR req, UNREQPTR unreq)
{
    // Initialise a new Test plugin at the parameter
    *plg = new ARM9ES(name, req, unreq);
}

// Provide plugin version information
PLUGININFO *ARM9ES::getinfo()
{
    return &pInfo;
}

// Release plugin from outside
void ARM9ES::release()
{
    // Delete the Test plugin that was 'new'd in getPlugin.
    delete this;
}

/*** EOF: arm9es.cpp *****************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看不卡一区| www久久精品| 中文字幕亚洲成人| 国产成人av在线影院| 亚洲精品一区二区三区影院 | 色综合天天综合狠狠| 亚洲一区在线播放| 国产麻豆视频精品| 欧美伊人久久大香线蕉综合69| 国产农村妇女精品| 蜜臀va亚洲va欧美va天堂 | 午夜精品福利久久久| 在线电影国产精品| 美国十次综合导航| 中文文精品字幕一区二区| 成人黄色av网站在线| 亚洲欧美国产毛片在线| 91国产视频在线观看| 久久不见久久见中文字幕免费| 国产三级一区二区| 在线观看视频一区| 韩国三级中文字幕hd久久精品| 国产精品视频在线看| 欧美日韩国产高清一区二区三区| 九色综合狠狠综合久久| 国产精品成人免费在线| 欧美日本一道本在线视频| 国模套图日韩精品一区二区| 亚洲美腿欧美偷拍| 久久亚洲春色中文字幕久久久| 色综合天天综合网国产成人综合天 | 美女视频黄a大片欧美| 一色屋精品亚洲香蕉网站| 日韩一级大片在线| 在线观看国产精品网站| 99麻豆久久久国产精品免费优播| 日韩avvvv在线播放| 亚洲精品免费在线播放| 国产精品三级视频| 久久久亚洲高清| 2023国产精华国产精品| 日韩欧美亚洲国产精品字幕久久久| 色综合久久中文字幕| 成人h动漫精品| www.欧美日韩国产在线| 粉嫩在线一区二区三区视频| 韩国v欧美v亚洲v日本v| 日本vs亚洲vs韩国一区三区二区 | 中文字幕在线不卡一区二区三区| 精品伦理精品一区| 久久综合网色—综合色88| 欧美日本在线看| 欧美体内she精高潮| 欧美人妇做爰xxxⅹ性高电影| 一本一道久久a久久精品综合蜜臀| 成人在线视频一区二区| 不卡高清视频专区| 欧美亚洲国产一区二区三区va| 91成人在线精品| 欧美一区二区视频免费观看| 精品理论电影在线| 中文字幕在线一区二区三区| 亚洲国产一二三| 免费看欧美美女黄的网站| 狠狠色狠狠色综合| 不卡影院免费观看| 7777精品伊人久久久大香线蕉的 | k8久久久一区二区三区| 在线精品视频免费播放| 精品国产亚洲在线| 一级中文字幕一区二区| 麻豆国产一区二区| 99精品欧美一区二区三区小说| 欧美色男人天堂| 中文字幕欧美一| 久久99精品国产.久久久久久| 不卡电影免费在线播放一区| 日韩美女主播在线视频一区二区三区| 精品精品国产高清a毛片牛牛| 伊人色综合久久天天| 精品一区二区三区日韩| 欧美三级乱人伦电影| 国产精品久久一级| 国产美女在线观看一区| 欧美人成免费网站| 亚洲综合色噜噜狠狠| 成人免费毛片高清视频| 精品国内二区三区| 日韩在线一二三区| 欧美三级日韩三级| 亚洲成人综合网站| 欧美日韩一级黄| 亚洲成av人综合在线观看| 91欧美一区二区| 亚洲女同女同女同女同女同69| 国产成人免费视频| 国产精品丝袜久久久久久app| 国产在线乱码一区二区三区| 欧美一区二区三区喷汁尤物| 日韩和欧美一区二区| 欧美精品粉嫩高潮一区二区| 五月综合激情网| 日韩欧美亚洲国产精品字幕久久久| 日本女优在线视频一区二区| 欧美一区二区三区四区久久| 亚洲第一激情av| 欧美刺激脚交jootjob| 国产制服丝袜一区| 国产精品视频线看| 91福利在线免费观看| 香蕉久久夜色精品国产使用方法| 欧美一区二区三区视频在线| 老司机午夜精品| 综合久久综合久久| 欧美夫妻性生活| 成人在线视频首页| 日韩影院免费视频| 欧美经典一区二区三区| 欧美亚洲国产一卡| 狠狠色丁香婷婷综合| 一区二区三区**美女毛片| 日韩一级欧美一级| 色狠狠av一区二区三区| 久久精品国产一区二区三| 亚洲精品日产精品乱码不卡| 精品国产免费一区二区三区香蕉| 高清国产一区二区| 奇米色777欧美一区二区| 亚洲欧洲国产专区| 欧美一区二区三区系列电影| 91视频精品在这里| 国模套图日韩精品一区二区| 水蜜桃久久夜色精品一区的特点| 欧美激情一区二区三区全黄| 日韩一级免费一区| 欧美日韩中文国产| 成人小视频免费观看| 偷窥少妇高潮呻吟av久久免费| 综合色中文字幕| 国产精品理论片| 欧美韩国日本不卡| 精品久久久久久久人人人人传媒| 欧美日韩精品系列| 欧美日韩一区高清| 在线精品亚洲一区二区不卡| 在线观看日韩一区| 91成人在线精品| 欧美日韩国产123区| 欧美高清视频不卡网| 制服丝袜国产精品| 欧美岛国在线观看| 国产蜜臀av在线一区二区三区| 久久新电视剧免费观看| 久久久精品日韩欧美| 中文字幕日韩精品一区| 一区二区三区在线观看欧美| 亚洲成人av资源| 久久99国产乱子伦精品免费| 久久超级碰视频| 亚洲国产成人私人影院tom| 欧美一区二区视频免费观看| 精品国产麻豆免费人成网站| 国产调教视频一区| 欧美国产禁国产网站cc| 亚洲资源在线观看| 三级影片在线观看欧美日韩一区二区| 日韩中文字幕一区二区三区| 国产又黄又大久久| 91网站最新网址| 337p粉嫩大胆色噜噜噜噜亚洲 | 亚洲免费在线看| 偷拍与自拍一区| 成人av在线影院| 欧美福利视频一区| 中文字幕日韩一区二区| 久久精品国产在热久久| 91啪亚洲精品| 久久精品夜色噜噜亚洲a∨| 亚洲制服丝袜一区| 成年人国产精品| 精品国产伦一区二区三区观看体验| 中文字幕一区在线观看视频| 免费一级欧美片在线观看| 色先锋aa成人| 亚洲国产精品av| 韩国精品一区二区| 国产一区二区免费在线| 蜜桃视频第一区免费观看| 国产成人99久久亚洲综合精品| 欧美放荡的少妇| 国产精品国产三级国产aⅴ入口| 亚洲欧洲另类国产综合| 午夜精品福利一区二区三区av| 国模冰冰炮一区二区| 日本福利一区二区| 精品久久久久久久人人人人传媒 | 国产福利不卡视频| 欧美国产精品专区| 3atv一区二区三区| 欧洲一区二区三区免费视频|