void _KEY2::applySeed(u8 PROCNUM) { u64 tmp = (MMU_read8(PROCNUM, REG_ENCSEED0H) & 0xFF); seed0 = MMU_read32(PROCNUM, REG_ENCSEED0L) | (tmp << 32); tmp = (MMU_read8(PROCNUM, REG_ENCSEED1H) & 0xFF); seed1 = MMU_read32(PROCNUM, REG_ENCSEED1L) | (tmp << 32); x = bitsReverse39(seed0); y = bitsReverse39(seed1); //printf("ARM%c: set KEY2 seed0 to %010llX (reverse %010llX)\n", PROCNUM?'7':'9', seed0, x); //printf("ARM%c: set KEY2 seed1 to %010llX (reverse %010llX)\n", PROCNUM?'7':'9', seed1, y); }
static void update_regs() { char text[80]; int len, i; if (init==FALSE) { GtkWidget * wPaint = glade_xml_get_widget(xml_tools, "wtools_1_draw"); for( i = 0; i < NBR_IO_REGS; i++ ) { len = strlen(Reg_Names_Addr[i].name); if (size_<len) size_=len; } len = size_ + strlen(" : 0x00000000"); dTools_display_init(&dsp, wPaint, len, NBR_IO_REGS, 5); dTools_display_add_markup(&dsp, "<tt><span foreground=\"blue\"> </span></tt>"); dTools_display_add_markup(&dsp, "<tt>0x00000000</tt>"); dTools_display_add_markup(&dsp, "<tt><span foreground=\"red\">0x00000000</span></tt>"); init=TRUE; } dTools_display_clear(&dsp); for( i = 0; i < NBR_IO_REGS; i++ ) { mem[i] = MMU_read32(cpu,Reg_Names_Addr[i].addr); if ( Reg_Names_Addr[i].trunc ) sprintf(text, " 0x%04lX", mem[i]); else sprintf(text, "0x%08lX", mem[i]); dTools_display_select_attr(&dsp, 0); dTools_display_draw_text(&dsp, 0, i, Reg_Names_Addr[i].name); dTools_display_draw_text(&dsp, size_, i, " : "); dTools_display_select_attr(&dsp, 1); dTools_display_draw_text(&dsp, size_+3, i, text); } }
static void update_regs_fast(){ char text[10]; int i; u32 w, m; for( i = 0; i < NBR_IO_REGS; i++ ) { w = MMU_read32(cpu,Reg_Names_Addr[i].addr); m = mem[i]; if ( Reg_Names_Addr[i].trunc ) { w &= 0xFFFF; m &= 0xFFFF; } mem[i] = w; if (w == m) continue; if ( Reg_Names_Addr[i].trunc ) sprintf(text, " 0x%04lX", w); else sprintf(text, "0x%08lX", w); dTools_display_select_attr(&dsp, 2); dTools_display_clear_char(&dsp, size_+3, i, 10); dTools_display_draw_text(&dsp, size_+3, i, text); } }
LRESULT DisViewBox_OnPaint(HWND hwnd, disview_struct *win, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; SIZE fontsize; TCHAR text[100]; TCHAR txt[100]; RECT rect; int lg; int ht; HDC mem_dc; HBITMAP mem_bmp; u32 nbligne; GetClientRect(hwnd, &rect); lg = rect.right - rect.left; ht = rect.bottom - rect.top; hdc = BeginPaint(hwnd, &ps); mem_dc = CreateCompatibleDC(hdc); mem_bmp = CreateCompatibleBitmap(hdc, lg, ht); SelectObject(mem_dc, mem_bmp); FillRect(mem_dc, &rect, (HBRUSH)GetStockObject(WHITE_BRUSH)); SelectObject(mem_dc, GetStockObject(SYSTEM_FIXED_FONT)); GetTextExtentPoint32(mem_dc, "0", 1, &fontsize); nbligne = ht/fontsize.cy; SetTextColor(mem_dc, RGB(0,0,0)); if((win->mode==1) || ((win->mode==0) && (win->cpu->CPSR.bits.T == 0))) { u32 i; u32 adr; if (win->autoup||win->autogo) win->curr_ligne = (win->cpu->instruct_adr >> 2) - (win->curr_ligne % nbligne) ; adr = win->curr_ligne*4; for(i = 0; i < nbligne; ++i) { u32 ins = MMU_read32(win->cpu->proc_ID, adr); des_arm_instructions_set[INDEX(ins)](adr, ins, txt); sprintf(text, "%04X:%04X %08X %s", (int)(adr>>16), (int)(adr&0xFFFF), (int)ins, txt); DrawText(mem_dc, text, -1, &rect, DT_TOP | DT_LEFT | DT_NOPREFIX); rect.top+=fontsize.cy; adr += 4; } if(((win->cpu->instruct_adr&0x0FFFFFFF) >= win->curr_ligne<<2)&&((win->cpu->instruct_adr&0x0FFFFFFF) <= (win->curr_ligne+nbligne<<2))) { HBRUSH brjaune = CreateSolidBrush(RGB(255, 255, 0)); SetBkColor(mem_dc, RGB(255, 255, 0)); rect.top = (((win->cpu->instruct_adr&0x0FFFFFFF)>>2) - win->curr_ligne)*fontsize.cy; rect.bottom = rect.top + fontsize.cy; FillRect(mem_dc, &rect, brjaune); des_arm_instructions_set[INDEX(win->cpu->instruction)](win->cpu->instruct_adr, win->cpu->instruction, txt); sprintf(text, "%04X:%04X %08X %s", (int)((win->cpu->instruct_adr&0x0FFFFFFF)>>16), (int)(win->cpu->instruct_adr&0xFFFF), (int)win->cpu->instruction, txt); DrawText(mem_dc, text, -1, &rect, DT_TOP | DT_LEFT | DT_NOPREFIX); DeleteObject(brjaune); }
void IORegView_Paint(CIORegView* wnd, HWND hWnd, WPARAM wParam, LPARAM lParam) { HDC hDC; PAINTSTRUCT ps; HDC hMemDC; HBITMAP hMemBitmap; RECT rc; HPEN pen; int x, y, w, h; int nameColWidth; int curx, cury; SIZE fontsize; IOReg reg; char txt[80]; GetClientRect(hWnd, &rc); x = 0; y = wnd->rebarHeight; w = rc.right - wnd->vsbWidth; h = rc.bottom - wnd->rebarHeight; curx = kXMargin; cury = wnd->yoff + kYMargin; hDC = BeginPaint(hWnd, &ps); hMemDC = CreateCompatibleDC(hDC); hMemBitmap = CreateCompatibleBitmap(hDC, w, h); SelectObject(hMemDC, hMemBitmap); pen = CreatePen(PS_SOLID, 1, RGB(210, 230, 255)); SelectObject(hMemDC, pen); SelectObject(hMemDC, wnd->hFont); GetTextExtentPoint32(hMemDC, " ", 1, &fontsize); FillRect(hMemDC, &rc, (HBRUSH)GetStockObject(WHITE_BRUSH)); reg = IORegs[wnd->CPU][wnd->Reg]; if ((reg.type == AllRegs) || (reg.type == CatBegin)) { nameColWidth = w - (kXMargin + (fontsize.cx*8) + kXMargin + 1 + kXMargin + kXMargin + 1 + kXMargin + (fontsize.cx*8) + kXMargin); DrawText(hMemDC, reg.name, curx, cury, w, fontsize.cy, DT_LEFT | DT_END_ELLIPSIS); cury += fontsize.cy + kYMargin; MoveToEx(hMemDC, 0, cury, NULL); LineTo(hMemDC, w, cury); cury ++; curx = kXMargin; DrawText(hMemDC, "Address", curx, cury+kYMargin, fontsize.cx*8, fontsize.cy, DT_LEFT); curx += (fontsize.cx*8) + kXMargin; MoveToEx(hMemDC, curx, cury, NULL); LineTo(hMemDC, curx, h); curx += 1 + kXMargin; DrawText(hMemDC, "Name", curx, cury+kYMargin, nameColWidth, fontsize.cy, DT_LEFT | DT_END_ELLIPSIS); curx += nameColWidth + kXMargin; MoveToEx(hMemDC, curx, cury, NULL); LineTo(hMemDC, curx, h); curx += 1 + kXMargin; DrawText(hMemDC, "Value", curx, cury+kYMargin, fontsize.cx*8, fontsize.cy, DT_RIGHT); cury += kYMargin + fontsize.cy + kYMargin; MoveToEx(hMemDC, 0, cury, NULL); LineTo(hMemDC, w, cury); cury += 1 + kYMargin; for (int i = wnd->Reg+1; ; i++) { IOReg curReg = IORegs[wnd->CPU][i]; curx = kXMargin; if (curReg.type == CatBegin) { if (reg.type == AllRegs) continue; else break; } else if (curReg.type == ListEnd) break; else if (curReg.type == MMIOReg) { u32 val; sprintf(txt, "%08X", curReg.address); DrawText(hMemDC, txt, curx, cury, fontsize.cx*8, fontsize.cy, DT_LEFT); curx += (fontsize.cx*8) + kXMargin + 1 + kXMargin; DrawText(hMemDC, curReg.name, curx, cury, nameColWidth, fontsize.cy, DT_LEFT | DT_END_ELLIPSIS | DT_NOPREFIX); curx += nameColWidth + kXMargin + 1 + kXMargin; switch (curReg.size) { case 1: val = (u32)MMU_read8(wnd->CPU, curReg.address); sprintf(txt, "%02X", val); break; case 2: val = (u32)MMU_read16(wnd->CPU, curReg.address); sprintf(txt, "%04X", val); break; case 4: val = MMU_read32(wnd->CPU, curReg.address); sprintf(txt, "%08X", val); break; } DrawText(hMemDC, txt, curx, cury, fontsize.cx*8, fontsize.cy, DT_RIGHT); } cury += fontsize.cy + kYMargin; if (cury >= h) break; MoveToEx(hMemDC, 0, cury, NULL); LineTo(hMemDC, w, cury); cury += 1 + kYMargin; } } else { u32 val; nameColWidth = w - (kXMargin + (fontsize.cx*8) + kXMargin + 1 + kXMargin + kXMargin + 1 + kXMargin + (fontsize.cx*8) + kXMargin); sprintf(txt, "%08X - %s", reg.address, reg.name); DrawText(hMemDC, txt, curx, cury, w, fontsize.cy, DT_LEFT | DT_END_ELLIPSIS | DT_NOPREFIX); cury += fontsize.cy + kYMargin; MoveToEx(hMemDC, 0, cury, NULL); LineTo(hMemDC, w, cury); cury += 1 + kYMargin; switch (reg.size) { case 1: val = (u32)MMU_read8(wnd->CPU, reg.address); sprintf(txt, "Value: %02X", val); break; case 2: val = (u32)MMU_read16(wnd->CPU, reg.address); sprintf(txt, "Value: %04X", val); break; case 4: val = MMU_read32(wnd->CPU, reg.address); sprintf(txt, "Value: %08X", val); break; } DrawText(hMemDC, txt, curx, cury, w, fontsize.cy, DT_LEFT); cury += fontsize.cy + kYMargin; MoveToEx(hMemDC, 0, cury, NULL); LineTo(hMemDC, w, cury); cury ++; curx = kXMargin; DrawText(hMemDC, "Bits", curx, cury+kYMargin, fontsize.cx*8, fontsize.cy, DT_LEFT); curx += (fontsize.cx*8) + kXMargin; MoveToEx(hMemDC, curx, cury, NULL); LineTo(hMemDC, curx, h); curx += 1 + kXMargin; DrawText(hMemDC, "Description", curx, cury+kYMargin, nameColWidth, fontsize.cy, DT_LEFT | DT_END_ELLIPSIS); curx += nameColWidth + kXMargin; MoveToEx(hMemDC, curx, cury, NULL); LineTo(hMemDC, curx, h); curx += 1 + kXMargin; DrawText(hMemDC, "Value", curx, cury+kYMargin, fontsize.cx*8, fontsize.cy, DT_RIGHT); cury += kYMargin + fontsize.cy + kYMargin; MoveToEx(hMemDC, 0, cury, NULL); LineTo(hMemDC, w, cury); cury += 1 + kYMargin; for (int i = 0; i < reg.numBitfields; i++) { IORegBitfield bitfield = reg.bitfields[i]; curx = kXMargin; if (bitfield.nbits > 1) sprintf(txt, "Bit%i-%i", bitfield.shift, bitfield.shift + bitfield.nbits - 1); else sprintf(txt, "Bit%i", bitfield.shift); DrawText(hMemDC, txt, curx, cury, fontsize.cx*8, fontsize.cy, DT_LEFT); curx += (fontsize.cx*8) + kXMargin + 1 + kXMargin; DrawText(hMemDC, bitfield.name, curx, cury, nameColWidth, fontsize.cy, DT_LEFT | DT_END_ELLIPSIS | DT_NOPREFIX); curx += nameColWidth + kXMargin + 1 + kXMargin; char bfpattern[8]; sprintf(bfpattern, "%%0%iX", ((bitfield.nbits+3)&~3) >> 2); sprintf(txt, bfpattern, (val >> bitfield.shift) & ((1<<bitfield.nbits)-1)); DrawText(hMemDC, txt, curx, cury, fontsize.cx*8, fontsize.cy, DT_RIGHT); cury += fontsize.cy + kYMargin; if (cury >= h) break; MoveToEx(hMemDC, 0, cury, NULL); LineTo(hMemDC, w, cury); cury += 1 + kYMargin; } } BitBlt(hDC, x, y, w, h, hMemDC, 0, 0, SRCCOPY); DeleteDC(hMemDC); DeleteObject(hMemBitmap); DeleteObject(pen); EndPaint(hWnd, &ps); }