code: def add_task(self, tile_address, coroutine):
          
  
          self._loop.call_soon_threadsafe(self._add_task, tile_address, coroutine)
docs: Add a task into the event loop.
  
          This is the main entry point for registering background tasks that are
          associated with a tile. The tasks are added to the EmulationLoop and
          the tile they are a part of is recorded.  When the tile is reset, all
          of its background tasks are canceled as part of the reset process.
  
          If you have a task that should not be associated with any tile, you
          may pass `None` for tile_address and the task will not be cancelled
          when any tile is reset.
  
          Args:
              tile_address (int): The address of the tile running
                  the task.
              coroutine (coroutine): A coroutine that will be added
                  to the event loop.