public Parser()
{
this.labelAddressDitionary = new Dictionary<string, ushort>();
this.labelReferences = new Dictionary<ushort, string>();
this.machineCode = new List<ushort>();
this.labelDataFieldReferences = new Dictionary<ushort, string>();
this.opcodeDictionary = new Dictionary<string, dcpuOpCode>
{
// non basic instructions
{ "jsr", dcpuOpCode.JSR_OP },
// basic instructions
{ "set", dcpuOpCode.SET_OP },
{ "add", dcpuOpCode.ADD_OP },
{ "sub", dcpuOpCode.SUB_OP },
{ "mul", dcpuOpCode.MUL_OP },
{ "div", dcpuOpCode.DIV_OP },
{ "mod", dcpuOpCode.MOD_OP },
{ "shl", dcpuOpCode.SHL_OP },
{ "shr", dcpuOpCode.SHR_OP },
{ "and", dcpuOpCode.AND_OP },
{ "bor", dcpuOpCode.BOR_OP },
{ "xor", dcpuOpCode.XOR_OP },
{ "ife", dcpuOpCode.IFE_OP },
{ "ifn", dcpuOpCode.IFN_OP },
{ "ifg", dcpuOpCode.IFG_OP },
{ "ifb", dcpuOpCode.IFB_OP },
};
// Register dictionary, We'll only include the most common ones in here, others have to be constructred.
this.registerDictionary = new Dictionary<string, dcpuRegisterCodes>
{
{ "a", dcpuRegisterCodes.A },
{ "b", dcpuRegisterCodes.B },
{ "c", dcpuRegisterCodes.C },
{ "x", dcpuRegisterCodes.X },
{ "y", dcpuRegisterCodes.Y },
{ "z", dcpuRegisterCodes.Z },
{ "i", dcpuRegisterCodes.I },
{ "j", dcpuRegisterCodes.J },
{ "[a]", dcpuRegisterCodes.A_Mem },
{ "[b]", dcpuRegisterCodes.B_Mem },
{ "[c]", dcpuRegisterCodes.C_Mem },
{ "[x]", dcpuRegisterCodes.X_Mem },
{ "[y]", dcpuRegisterCodes.Y_Mem },
{ "[z]", dcpuRegisterCodes.Z_Mem },
{ "[i]", dcpuRegisterCodes.I_Mem },
{ "[j]", dcpuRegisterCodes.J_Mem },
{ "pop", dcpuRegisterCodes.POP },
{ "peek", dcpuRegisterCodes.PEEK },
{ "push", dcpuRegisterCodes.PUSH },
{ "sp", dcpuRegisterCodes.SP },
{ "pc", dcpuRegisterCodes.PC },
{ "o", dcpuRegisterCodes.O },
{ "[+a]", dcpuRegisterCodes.A_NextWord },
{ "[+b]", dcpuRegisterCodes.B_NextWord },
{ "[+c]", dcpuRegisterCodes.C_NextWord },
{ "[+x]", dcpuRegisterCodes.X_NextWord },
{ "[+y]", dcpuRegisterCodes.Y_NextWord },
{ "[+z]", dcpuRegisterCodes.Z_NextWord },
{ "[+i]", dcpuRegisterCodes.I_NextWord },
{ "[+j]", dcpuRegisterCodes.J_NextWord }
};
}