Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 public static bool isAbsoluteAddr(AddrModes addrMode)
 {
     return((int)addrMode < 6 && (int)addrMode > 2);
 }