diff options
Diffstat (limited to 'firmware/drivers/lcd-recorder.c')
-rw-r--r-- | firmware/drivers/lcd-recorder.c | 10 |
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; |
442 | static void solidblock(unsigned char *address, unsigned mask, unsigned bits) | 442 | static 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 | ||
447 | static void flipinvblock(unsigned char *address, unsigned mask, unsigned bits) | 450 | static 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; |
470 | static void solidinvblock(unsigned char *address, unsigned mask, unsigned bits) | 473 | static 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 | ||
475 | lcd_blockfunc_type* const lcd_blockfuncs[8] = { | 481 | lcd_blockfunc_type* const lcd_blockfuncs[8] = { |