STDMETHODIMP MachineDebuggerWrap::WriteVirtualMemory(ULONG aCpuId, LONG64 aAddress, ULONG aSize, ComSafeArrayIn(BYTE, aBytes)) { LogRelFlow(("{%p} %s:enter aCpuId=%RU32 aAddress=%RI64 aSize=%RU32 aBytes=%zu\n", this, "MachineDebugger::writeVirtualMemory", aCpuId, aAddress, aSize, aBytes)); VirtualBoxBase::clearError(); HRESULT hrc; try { AutoCaller autoCaller(this); if (FAILED(autoCaller.rc())) throw autoCaller.rc(); hrc = writeVirtualMemory(aCpuId, aAddress, aSize, ArrayInConverter<BYTE>(ComSafeArrayInArg(aBytes)).array()); } catch (HRESULT hrc2) { hrc = hrc2; } catch (...) { hrc = VirtualBoxBase::handleUnexpectedExceptions(this, RT_SRC_POS); } LogRelFlow(("{%p} %s: leave hrc=%Rhrc\n", this, "MachineDebugger::writeVirtualMemory", hrc)); return hrc; }
int LCD_putchar(int character) { uint8_t c = (uint8_t) character; if(c == '\n') { AdvancePageVirtualMemory(); current_col = 0; return 1; } if(c == '\r') { current_col = 0; return 1; } if(c == '\t') { current_col = current_col + TAB_SIZE*CHAR_WIDTH; return 1; } if(character > ' '+97 || character < ' ') { c = '?'; } if(current_col + CHAR_WIDTH >= LCD_MAX_WIDTH) { AdvancePageVirtualMemory(); current_col = 0; } setColumnVirtualMemory(current_col); setPageVirtualMemory(current_page); //Ir a la FontTable si corresponde uint8_t ascii_char[6]; int i; for(i=0; i< 6; i++) { ascii_char[i] = FONT6x8[(c-' ')*6 + i ]; } //Se escribe en memoria virtual los hexadecimales que representan el caracter dado bool refreshLCD = writeVirtualMemory(ascii_char, 6); //Se limpia memoria de la placa copyVirtualToLCD(refreshLCD); //LCD_writeData(ascii_char, 6); return 1; }