In the previous version, Assembler parsed down the entered code into Instruction
s which contained an enum
for denoting the type of that instruction. For example, Move
being set as the property would mean it was a Move instruction.
Now that property has been removed and all Instruction
s inherit from BaseMnemonic (and some other interface). So, the Move
instruction is now its own Move class.
All mnemonics for a CPU are defined within a Mnemonics
collection when a Machine
is instantiated (along with registers and such within the CPU
class); there's (currently) a method that allows the mapping of a textual mnemonic to its class counterpart during the parsing stage; this may later be changed to a Dictionary
or something.
Some limited parsing is in for determining what the source
and destination
operands consist of. This is the most complex part as those operands can contain everything from a plain immediate value to relative addressing.
Because of this, each instruction
will have to maintain metadata on exactly what's going on within that instruction; having to parse more than once to later on to determine what needs to happen is silly, so lots of metadata is required. As a bonus, we'll get a ton of helpful debugging info for "free" when we implement all that gubbins.
On the interface side of things (c'mon, like I can resist UI work) the syntax highlighting now colourises the datatype (or size as is the actual term) for mnemonics. Turned out this was achievable via making the datatypes an operator when it comes to highlighting as they don't need to be on word boundaries - thanks to Rob for the suggestion. Still more highlighting work required.
The Registers window now has a trace of what it parsed from the entered source code and displays the interpreted code. Changed the font to a mono-space one as the other just looked messy when registers' widths didn't line up. Sorry Segoe UI - not this time.