def METHOD_NAME(self, port: int, register: int, opcode: int, data: Optional[int] = None) -> Optional[int]:
    mcr = self.__MB_MESSAGE_MCR(port, register, opcode)
    mcrx = self.__MB_MESSAGE_MCRX(register)
    mdr = None if data is None else self.__MB_MESSAGE_MDR(data)
    self.logger.log_hal(f'[msgbus] message: port 0x{port:02X} + 0x{register:08X} (op = 0x{opcode:02X})')
    if data is not None:
        self.logger.log_hal(f'[msgbus]          data = 0x{data:08X}')
    self.logger.log_hal(f'[msgbus]          MCR = 0x{mcr:08X}, MCRX = 0x{mcrx:08X}, MDR = 0x{mdr:08X}')
    mdr_out = self.helper.METHOD_NAME(mcr, mcrx, mdr)
    self.logger.log_hal(f'[msgbus]          < 0x{mdr_out:08X}')
    return mdr_out