private bool SetOutput(Int64 curr, Int64 paramOffset, char mode, string val) { bool ok = false; AddrModes modeInt = (AddrModes)(mode - '0'); switch (modeInt) { case AddrModes.ADDR: { Int64 address = 0; ok = Int64.TryParse(data[curr + paramOffset], out address); if (ok) { ok = SetData(address, val); } break; } case AddrModes.IMMED: { ok = SetData(curr + paramOffset, val); break; } case AddrModes.REL: { Int64 address = 0; ok = Int64.TryParse(data[curr + paramOffset], out address); address += relativeOffset; if (ok) { ok = SetData(address, val); } break; } default: { MessageBox.Show($"Invalid output mode = {mode}"); break; } } return(ok); }
private bool GetInput(Int64 param, char mode, out Int64 val) { bool ok = false; val = 0; AddrModes modeAM = (AddrModes)(mode - '0'); switch (modeAM) { case AddrModes.ADDR: case AddrModes.REL: { Int64 address = 0; ok = Int64.TryParse(data[param], out address); if (modeAM == AddrModes.REL) { // extra add the relative base address += relativeOffset; } if (ok) { if (address < data.Length) { ok = Int64.TryParse(data[address], out val); ram[address] = val; } else { if (ram.ContainsKey(address)) { val = ram[address]; } else { val = 0; ram[address] = val; } } } break; } case AddrModes.IMMED: { ok = Int64.TryParse(data[param], out val); break; } default: { MessageBox.Show($"Invalid mode = {mode}"); break; } } return(ok); }
public static bool isAbsoluteAddr(AddrModes addrMode) { return((int)addrMode < 6 && (int)addrMode > 2); }