Пример #1
0
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;
}
Пример #2
0
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;
}