docs: def read_PIA0_A_data(self, cpu_cycles, op_address, address):
          """
          read from 0xff00 -> PIA 0 A side Data reg.
  
          bit 7 | PA7 | joystick comparison input
          bit 6 | PA6 | keyboard matrix row 7
          bit 5 | PA5 | keyboard matrix row 6
          bit 4 | PA4 | keyboard matrix row 5
          bit 3 | PA3 | keyboard matrix row 4 & left  joystick switch 2
          bit 2 | PA2 | keyboard matrix row 3 & right joystick switch 2
          bit 1 | PA1 | keyboard matrix row 2 & left  joystick switch 1
          bit 0 | PA0 | keyboard matrix row 1 & right joystick switch 1
          """
          pia0b = self.pia_0_B_data.value  # $ff02
  
          # FIXME: Find a way to handle CoCo and Dragon in the same way!
          if self.cfg.CONFIG_NAME == COCO2B:
  #            log.critical("\t count: %i", self.input_repead)
              if self.input_repead == 7:
                  try:
                      self.current_input_char = self.user_input_queue.get_nowait()
                  except queue.Empty:
                      self.current_input_char = None
                  else:
                      log.critical(
                          "\tget new key from queue: %s", repr(self.current_input_char))
              elif self.input_repead == 18:
  #                log.critical("\tForce send 'no key pressed'")
                  self.current_input_char = None
              elif self.input_repead > 20:
                  self.input_repead = 0
  
              self.input_repead += 1
          else:  # Dragon
              if pia0b == self.cfg.PIA0B_KEYBOARD_START:  # FIXME
                  if self.empty_key_toggle:
                      # Work-a-round for "poor" dragon keyboard scan routine:
                      # The scan routine in ROM ignores key pressed directly behind
                      # one another if they are in the same row!
                      # See "Inside the Dragon" book, page 203 ;)
                      #
                      # Here with the empty_key_toggle, we always send a "no key pressed"
                      # after every key press back and then we send the next key from
                      # the self.user_input_queue
                      #
                      # TODO: We can check the row of the previous key press and only
                      # force a 'no key pressed' if the row is the same
                      self.empty_key_toggle = False
                      self.current_input_char = None
  #                     log.critical("\tForce send 'no key pressed'")
                  else:
                      try:
                          self.current_input_char = self.user_input_queue.get_nowait()
                      except queue.Empty:
  #                        log.critical("\tinput_queue is empty"))
                          self.current_input_char = None
                      else:
  #                        log.critical("\tget new key from queue: %s", repr(self.current_input_char))
                          self.empty_key_toggle = True
  
          if self.current_input_char is None:
  #            log.critical("\tno key pressed")
              result = 0xff
              self.empty_key_toggle = False
          else:
  #            log.critical("\tsend %s", repr(self.current_input_char))
              result = self.cfg.pia_keymatrix_result(
                  self.current_input_char, pia0b)
  
  #         if not is_bit_set(pia0b, bit=7):
  # bit 7 | PA7 | joystick comparison input
  #             result = clear_bit(result, bit=7)
  
  #         if self.current_input_char is not None:
  #             log.critical(
  #                 "%04x| read $%04x ($ff02 is $%02x %s) send $%02x %s back\t|%s",
  #                 op_address, address,
  #                 pia0b, '{0:08b}'.format(pia0b),
  #                 result, '{0:08b}'.format(result),
  #                 self.cfg.mem_info.get_shortest(op_address)
  #             )
          return result