Ejemplo n.º 1
0
        public void addProgramFromFile(string fileName)
        {
            //var codeStorage = new Storage(fileName);

            //byte[] altcode = Util.getCode("MOVB 4\nOPENFILEHANDLE\nSAVEB 12\nMOVA 20\nMOVATOCX\nMOVA 0\nWRITE\nHALT\n");
            //byte[] altcode = Util.getCode("MOVB 4\nOPENFILEHANDLE\nSAVEB 12\nMOVA 20\nMOVATOCX\nMOVA 0\nREAD\nCLOSEHANDLE\nHALT\n");
            //byte[] altcode = Util.getCode("MOVA 20\nMOVATOCX\nMOVA 4\nPRINTC\nHALT\n");
            //byte[] altcode = Util.getCode("MOVA 20\nMOVATOCX\nMOVA 4\nREADC\nHALT\n");
            //byte[] altcode = Util.getCode("MOUNT 0\nMOVA 0\nMOVATOCX\nMOVA 8\nWRITE\nMOVA 4\nREAD\nHALT\n");
            //string t = "0000001000000008\"big\0\"00000000FFFFFFFF00000004";
            //string t2 = "0000001000000008\"big\0\"00000000BBBBBBBB00000004";
            //string t = "0000000C00000008\"big\0\"00000000BBBBBBBB00000004";
            //string t = "000000040000000100000004";
            //byte[] altdata = Util.getData(t);
            StorageFile codeFile    = StorageFile.Open(this.codeStorage, fileName);
            VMInfo      programData = Util.readCodeFromFile(codeFile);
            //Util.saveCodeToHdd(codeStorage, 10, new VMInfo { code = altcode, data = altdata });
            uint rowCount = (uint)((programData.code.Length + programData.data.Length) / Constants.BLOCK_SIZE) + 1;
            //uint rowCount = 10;
            MemAccesser memAccesser = virtualMemory.reserveMemory(rowCount);

            memAccesser.writeFromAddr(0, programData.code);
            memAccesser.writeFromAddr((uint)programData.code.Length, programData.data);
            Program program = new Program(fileName, memAccesser);

            program.registers.CS = 0;
            program.registers.DS = 0 + (uint)programData.code.Length;

            programs.Add(program);
        }