The screen shift issue is actually caused by reads and writes from the screen i/o. A memcpy-ied screen buffer should be used for the reads. Could you check if there is anything like this in your code?
mViewer is using its own 16-bits screen buffer.
mViewer's viewer is using 2 buffers. The screen is refreshed by switching the buffers addresses.
But mViewer's browser is reading/writing directly on a single buffer...
And debug messages too...