@@ -413,15 +413,17 @@ void ssd1306_device::exec_command(uint8_t data)
413413 {
414414 case 0x00 :
415415 case 0x10 :
416- COMMAND_IS_SINGLE_BYTE ;
416+ {
417+ COMMAND_IS_SINGLE_BYTE ;
417418
418- uint8_t low4 = m_command_fifo[0 ] & 0xF ;
419- uint8_t keep_mask = m_command_fifo[0 ] & 0x10 ? 0x0F : 0xF0 ;
420- uint8_t shift_value = m_command_fifo[0 ] & 0x10 ? 4 : 0 ;
419+ uint8_t low4 = m_command_fifo[0 ] & 0xF ;
420+ uint8_t keep_mask = m_command_fifo[0 ] & 0x10 ? 0x0F : 0xF0 ;
421+ uint8_t shift_value = m_command_fifo[0 ] & 0x10 ? 4 : 0 ;
421422
422- m_pagemode_column_start_address =
423- (m_pagemode_column_start_address & keep_mask) |
424- (low4 << shift_value);
423+ m_pagemode_column_start_address =
424+ (m_pagemode_column_start_address & keep_mask) |
425+ (low4 << shift_value);
426+ }
425427 break ;
426428
427429 case 0x20 :
@@ -437,21 +439,20 @@ void ssd1306_device::exec_command(uint8_t data)
437439 break ;
438440
439441 case 0x80 :
440- if (m_command_fifo[0 ] == 0x8D )
442+ if (m_command_fifo[0 ] == 0x81 )
441443 {
442444 COMMAND_BUFFER_FIFO_UNTIL_N_BYTES (data, 2 );
443- // charge pump setting; don't really need to implement it here
445+ m_contrast = m_command_fifo[ 1 ];
444446 return ;
445447 }
446-
447- if (m_command_fifo[0 ] != 0x81 )
448+ if (m_command_fifo[0 ] == 0x8D )
448449 {
449- COMMAND_IS_INVALID ;
450+ COMMAND_BUFFER_FIFO_UNTIL_N_BYTES (data, 2 );
451+ // charge pump setting; don't really need to implement it here
450452 return ;
451453 }
452454
453- COMMAND_BUFFER_FIFO_UNTIL_N_BYTES (data, 2 );
454- m_contrast = m_command_fifo[1 ];
455+ COMMAND_IS_INVALID ;
455456 break ;
456457
457458 case 0xA0 :
@@ -460,40 +461,41 @@ void ssd1306_device::exec_command(uint8_t data)
460461
461462 case 0xB0 :
462463 // page addressing mode: set page start address
463- if (!( 0xB0 <= m_command_fifo[0 ] && m_command_fifo[0 ] <= 0xB7 ) )
464+ if (0xB0 <= m_command_fifo[0 ] && m_command_fifo[0 ] <= 0xB7 )
464465 {
465- COMMAND_IS_INVALID ;
466+ COMMAND_IS_SINGLE_BYTE ;
467+ m_pagemode_page_start_address = m_command_fifo[0 ] & 7 ;
466468 return ;
467469 }
468470
469- COMMAND_IS_SINGLE_BYTE ;
470- m_pagemode_page_start_address = m_command_fifo[0 ] & 7 ;
471+ COMMAND_IS_INVALID ;
471472 break ;
472473
473474 case 0xC0 :
474475 // COM (row) scan direction: $C0 normal, $C8 reverse
475- if (!( m_command_fifo[0 ] == 0xC0 || m_command_fifo[0 ] == 0xC8 ) )
476+ if (m_command_fifo[0 ] == 0xC0 || m_command_fifo[0 ] == 0xC8 )
476477 {
477- COMMAND_IS_INVALID ;
478+ COMMAND_IS_SINGLE_BYTE ;
479+ m_row_scan_direction_inverse = (m_command_fifo[0 ] & 8 );
478480 return ;
479481 }
480-
481- COMMAND_IS_SINGLE_BYTE ;
482- m_row_scan_direction_inverse = (m_command_fifo[0 ] & 8 );
482+ COMMAND_IS_INVALID ;
483483 break ;
484484
485485 case 0xD0 :
486486 exec_command_dx (data);
487487 break ;
488488
489489 default :
490- if (m_command_fifo[0 ] ! = 0xE3 )
490+ if (m_command_fifo[0 ] = = 0xE3 )
491491 {
492- COMMAND_IS_INVALID ;
492+ // explicit NOP
493+ COMMAND_IS_SINGLE_BYTE ;
493494 return ;
494495 }
495496
496- COMMAND_IS_SINGLE_BYTE ;
497+
498+ COMMAND_IS_INVALID ;
497499 break ;
498500 }
499501}
0 commit comments