def setup_done(self):
		"""
		.. _setup_done:
	
		Finish the setup of the Processor.

		This should be the last call before the Processor is used.
		Sets the `internal constants`_ (used by the assembler) and
		sets the Stack Pointer to RAMEND_HIGH, if there is a RAM attached.
		If there is no RAM attached, SP will stay ``0``.

		If there is a RAM attached ``push_pc`` is set.

		Might raise SetupError_.
		"""
		if(self.memory_bus.device_count() < 1):
			raise SetupError("At least a ROM device has to be attached.")

		rom = self.memory_bus.devices[0]
		self.constants["ROMEND_HIGH"] = rom.size - 1
		self.constants["ROMEND_LOW"] = 0

		if(self.memory_bus.device_count() > 1):
			ram = self.memory_bus.devices[1]
			self.constants["RAMEND_HIGH"] = rom.size + ram.size - 1
			self.constants["RAMEND_LOW"] = rom.size
			self._set_sp(rom.size + ram.size - 1)
			self.push_pc = True
		if(self.device_bus.device_count() > 0):
			flash = self.device_bus.devices[0]
			self.constants["FLASH_START"] = 0
			self.constants["FLASH_END"] = flash.size - 1