Source code for easier68k.core.opcodes.opcode

from ...simulator.m68k import M68K
from abc import ABC, ABCMeta, abstractmethod

[docs]class Opcode(metaclass=ABCMeta): """ Abstract The base class for all Opcodes. Each opcode is responsible for a few actions like assembling instructions into hex, executing itself in the simulator, checking if a string matches the syntax of the opcode, getting the length of this command in memory, validating if the parameters for a command are valid, and disassembling the instruction from bytes. """
[docs] @abstractmethod def assemble(self) -> bytes: """ Assembles this opcode into hex to be inserted into memory :return: The hex version of this opcode """ pass
[docs] @abstractmethod def execute(self, simulator: M68K): """ Executes this command in a simulator :param simulator: The simulator to execute the command on :return: Nothing """ pass
@abstractmethod def __str__(self): return "Generic command base"
[docs] @classmethod @abstractmethod def command_matches(cls, command: str) -> bool: """ Checks whether a command string is an instance of this command type :param command: The command string to check (e.g. 'MOVE.B', 'LEA', etc.) :return: Whether the string is an instance of this command type """ pass
[docs] @classmethod @abstractmethod def get_word_length(cls, command: str, parameters: str) -> int: """ Gets what the end length of this command will be in memory :param command: The text of the command itself (e.g. "LEA", "MOVE.B", etc.) :param parameters: The parameters after the command :return: The length of the bytes in memory in words """ pass
[docs] @classmethod @abstractmethod def is_valid(cls, command: str, parameters: str) -> (bool, list): """ Tests whether the given command is valid :param command: The command itself (e.g. 'MOVE.B', 'LEA', etc.) :param parameters: The parameters after the command (such as the source and destination of a move) :return: Whether the given command is valid and a list of issues/warnings encountered """
[docs] @classmethod @abstractmethod def disassemble_instruction(cls, data: bytes): """ Parses some raw data into an instance of the opcode class :param data: The data used to convert into an opcode instance :return: The constructed instance or none if there was an error and the amount of data in words that was used (e.g. extra for immediate data) or 0 for not a match """ pass
[docs] @classmethod @abstractmethod def from_str(cls, command: str, parameters: str): """ Parses a command from text :param command: The command itself (e.g. 'MOVE.B', 'LEA', etc.) :param parameters: The parameters after the command (such as the source and destination of a move) :return: The parsed command """