public void Run(vm machine) { if (machine.A == TERMINATE) { machine.RN = false; } else if (machine.A == BREAK) { machine.BRK = true; } else if (machine.A == UNLOAD_DEVICE) { int device = machine.AX; machine.UnloadDevice(device); } else if (machine.A == LOAD_PROGRAM) { int device = machine.AX; StorageDevice disk = (StorageDevice)machine.GetDevice(device); machine.LoadProgram(disk.GetData()); } else if (machine.A == GET_ROM_DEVICE) { for (int i = 0; i < machine.NumberOfDevices(); i++) { VMDevice device = machine.GetDevice(i); if(device is VirtualROMDisk) { machine.EX = i; if(machine.AX <= 0) { return; } machine.AX--; } } throw new Exception("No ROM devices found!"); } }
public void Run(vm machine) { if(machine.A == GETDIR) { machine.pager.Push(machine.hdi.GetWorkingDirectory(),machine.CR3); } else if (machine.A == CHANGEDIR) { string path = machine.pager.PopString(machine.CR3); machine.hdi.ChangeDirectory(path); } else if (machine.A == CREATEDIR) { string dir = machine.pager.PopString(machine.CR3); machine.hdi.CreateDirectory(dir); } else if (machine.A == CREATEFILE) { string filename = machine.pager.PopString(machine.CR3); machine.hdi.CreateFile(filename); } else if (machine.A == OPENFILE) { string filename = machine.pager.PopString(machine.CR3); machine.hdi.OpenFile(filename); } else if (machine.A == CLOSEFILE) { machine.hdi.CloseFile(); } else if (machine.A == READBYTES) { int len = machine.AX; uint addr = machine.DA; byte[] data = machine.hdi.ReadBytes(len); if(machine.pager.checkVAT(addr,(uint)len,machine.CR3)) { } else { } } else if (machine.A == WRITEBYTES) { } else if (machine.A == LOADPROGRAM) { byte[] program = machine.hdi.ReadAllBytes(); machine.LoadProgram(program); } else if (machine.A == DIREXISTS) { string name = machine.pager.PopString(machine.CR3); machine.CP = machine.hdi.DirectoryExists(name); } else if (machine.A == FILEEXISTS) { string name = machine.pager.PopString(machine.CR3); machine.CP = machine.hdi.FileExists(name); } }