summaryrefslogtreecommitdiff
path: root/firmware/drivers/lcd-recorder.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers/lcd-recorder.c')
-rw-r--r--firmware/drivers/lcd-recorder.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/firmware/drivers/lcd-recorder.c b/firmware/drivers/lcd-recorder.c
index d75b989dd2..22bfebe289 100644
--- a/firmware/drivers/lcd-recorder.c
+++ b/firmware/drivers/lcd-recorder.c
@@ -441,7 +441,10 @@ static void solidblock(unsigned char *address, unsigned mask, unsigned bits)
441 ICODE_ATTR; 441 ICODE_ATTR;
442static void solidblock(unsigned char *address, unsigned mask, unsigned bits) 442static void solidblock(unsigned char *address, unsigned mask, unsigned bits)
443{ 443{
444 *address = (*address & ~mask) | (bits & mask); 444 unsigned data = *(char*)address;
445
446 bits ^= data;
447 *address = data ^ (bits & mask);
445} 448}
446 449
447static void flipinvblock(unsigned char *address, unsigned mask, unsigned bits) 450static void flipinvblock(unsigned char *address, unsigned mask, unsigned bits)
@@ -469,7 +472,10 @@ static void solidinvblock(unsigned char *address, unsigned mask, unsigned bits)
469 ICODE_ATTR; 472 ICODE_ATTR;
470static void solidinvblock(unsigned char *address, unsigned mask, unsigned bits) 473static void solidinvblock(unsigned char *address, unsigned mask, unsigned bits)
471{ 474{
472 *address = (*address & ~mask) | (~bits & mask); 475 unsigned data = *(char *)address;
476
477 bits = ~bits ^ data;
478 *address = data ^ (bits & mask);
473} 479}
474 480
475lcd_blockfunc_type* const lcd_blockfuncs[8] = { 481lcd_blockfunc_type* const lcd_blockfuncs[8] = {