From 54a8ce80f9702a853085ea36a47fcc08e2a5ed4c Mon Sep 17 00:00:00 2001 From: bernd Date: Mon, 25 Jul 2011 08:34:03 +0200 Subject: [PATCH] Fixed incomplete display updates in gui qsimulat0r --- simulat0r/gui/CMakeLists.txt | 1 + simulat0r/gui/qsimulat0r.cc | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/simulat0r/gui/CMakeLists.txt b/simulat0r/gui/CMakeLists.txt index f209214..4a4e8f7 100644 --- a/simulat0r/gui/CMakeLists.txt +++ b/simulat0r/gui/CMakeLists.txt @@ -31,6 +31,7 @@ QT_WRAP_CPP(qsimulat0r MocSources ${qsimulat0r_SRCS}) set(FIRMWARE_OBJS ../simcore/simcore.o ../simcore/misc.o +../simcore/timecounter.o ) diff --git a/simulat0r/gui/qsimulat0r.cc b/simulat0r/gui/qsimulat0r.cc index f519766..0ef57e0 100644 --- a/simulat0r/gui/qsimulat0r.cc +++ b/simulat0r/gui/qsimulat0r.cc @@ -19,9 +19,28 @@ using namespace std; extern "C" { #include "basic/basic.h" + +#define lcdGetPixel __hideaway_lcdGetPixel #include "lcd/display.h" +#undef lcdGetPixel + #include "../simcore/simulator.h" extern int lcd_layout; + +#define ptrXor(a,b) ((uint8_t*)(((uintptr_t)a)^((uintptr_t)b))) + +uint8_t guiBuffer1[RESX*RESY_B]; +uint8_t guiBuffer2[RESX*RESY_B]; +uint8_t *guiBuffer=guiBuffer1; + uint8_t *xorBuffer=ptrXor(guiBuffer1,guiBuffer2); + +static bool lcdGetPixel(char x, char y){ + char y_byte = (RESY-(y+1)) / 8; + char y_off = (RESY-(y+1)) % 8; + char byte = guiBuffer[y_byte*RESX+(RESX-(x+1))]; + return byte & (1 << y_off); +} + } time_t starttime; @@ -181,6 +200,11 @@ public: extern "C" { void simlcdDisplayUpdate() { + uint8_t *src=lcdBuffer; + uint8_t *dst=ptrXor(guiBuffer,xorBuffer); + memcpy(dst,src,RESX*RESY_B); + guiBuffer=dst; + hackptr->update(); usleep(10000); }