Okay, okay; can't put off doing the operand parsing any longer if I want this project to progress any further.
Just like the (incomplete) line-by-line parsing of the entered sourced, I'm going with Regular Expressions. Everything is going to be regular expressions; regular expressions all the way down.
As there's no specific reason why the source
and destination
operands should be treated differently and so a generic parsing method is used for determining what an operand consists of.
The Operand
object has, among other things, a Type
enum property that specifies the type (oh, my!) of operand. This Type
dictates what occurs when the instruction is executed. Currently, the following types have been defined:
Unknown
ImmediateValue
Register
Address
There will no-doubt be more as I add parsing for additional features when I get the existing ones working. Types will certainly become more granular, such as specifying whether an Address
is relative or absolute. Any BaseMnemonic
-inherited class should be given as much information as possible to perform their function; there's no reason why they should need to perform any of their own interrogation.
The next big step is to have the Add
mnemonic adding an immediate value to a register, but before that occurs, I'm going to need to sort out a couple of other things first.
Bit-work. All operations can work with either a byte, word, or long-word. Long-word is easy, but the other two will require bit manipulation of which I haven't really done much of in .NET.
Memory. Sure, the registers are currently just an integer
(?) and so easy enough to work with, but what about addresses? There's not much point having address support if there's no memory to read/write with! I haven't really thought about this.
Initial thinking would be just to allocate an array that's a property of the BaseMachine
class. I'm not going to add any CPU caches or anything of the sort as it won't make any performance difference as everything is so high level. Machine
(memory, CPU, registers, etc) state will easily be serialisable and so can be "saved stated" for whatever reason.