docs: def get_processor_status(self, p, x, y):
          """Get the status of a given core and the application executing on it.
  
          Returns
          -------
          :py:class:`.ProcessorStatus`
              Representation of the current state of the processor.
          """
          # Get the VCPU base
          address = (self.read_struct_field("sv", "vcpu_base", x, y) +
                     self.structs[b"vcpu"].size * p)
  
          # Get the VCPU data
          data = self.read(address, self.structs[b"vcpu"].size, x, y)
  
          # Build the kwargs that describe the current state
          state = {
              name.decode('utf-8'): struct.unpack(
                  f.pack_chars,
                  data[f.offset:f.offset+struct.calcsize(f.pack_chars)]
              )[0] for (name, f) in iteritems(self.structs[b"vcpu"].fields)
          }
          state["registers"] = [state.pop("r{}".format(i)) for i in range(8)]
          state["user_vars"] = [state.pop("user{}".format(i)) for i in range(4)]
          state["app_name"] = state["app_name"].strip(b'\x00').decode('utf-8')
          state["cpu_state"] = consts.AppState(state["cpu_state"])
          state["rt_code"] = consts.RuntimeException(state["rt_code"])
  
          sw_ver = state.pop("sw_ver")
          state["version"] = ((sw_ver >> 16) & 0xFF,
                              (sw_ver >> 8) & 0xFF,
                              (sw_ver >> 0) & 0xFF)
  
          for newname, oldname in [("iobuf_address", "iobuf"),
                                   ("program_state_register", "psr"),
                                   ("stack_pointer", "sp"),
                                   ("link_register", "lr"), ]:
              state[newname] = state.pop(oldname)
          state.pop("__PAD")
          return ProcessorStatus(**state)