Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
10
Добавлен:
01.05.2014
Размер:
4 Кб
Скачать
package core.processor;

import interpretator_ASM.Interpretator;

import java.util.Vector;

import core.proc_interface.ProcessorInterface;
import core.soprocessor.*;

public class Processor {
	private static Vector<byte[]> vars;
	public static Register registers[] = new Register[64];
	public static FloatRegister fRegisters[] = new FloatRegister[64];
	public static byte flags;
	private static boolean supervizor;
	
	public static void resetProcessor(){
		vars = new Vector<byte[]>();
		supervizor=false;
		//reset flags
		flags=0;
		//reset registers
		for(int i=0;i<64;i++){
			registers[i]=new Register();
			registers[i].REGISTER_NAME = "R"+i+1;
			registers[i].REGISTER_DATA=new Data32();			
		}
		//reset float registers
		for(int i=0;i<64;i++){
			fRegisters[i]=new FloatRegister();
			fRegisters[i].REGISTER_NAME = "FR"+i+1;
			fRegisters[i].REGISTER_DATA=new FloatData32();
		}
	}
	
	private Processor(){}

	public static void parseAndMakeOp(byte[] op) {
		if(op[0]==8){//mov
			if(op[1]>64){
				
			}else {
				if(op[2]>64){
					for(int i=0;i<vars.size();i++)
						if(op[2]==vars.elementAt(i)[2])
							registers[op[1]-1].REGISTER_DATA.DATA = ProcessorInterface.getVar(vars.elementAt(i));
				}else {
					if(op[1]<=16)
						registers[op[1]-1].REGISTER_DATA = registers[op[2]-1].REGISTER_DATA;
					else
						System.err.println("Need supervisor rights to write in r"+op[1]);
				}
				flags=0;
			}
		}else if(op[0]==10){//add
			if(op[1]>64){
				
			}else {
				Data32 tmp1 = new Data32();
				if(op[2]>64){
					for(int i=0;i<vars.size();i++)
						if(op[2]==vars.elementAt(i)[2])
							tmp1.DATA = ProcessorInterface.getVar(vars.elementAt(i));
				}else {
					tmp1.DATA = registers[op[2]-1].REGISTER_DATA.DATA;
				}
				Data32 tmp2 = new Data32();
				if(op[3]>64){
					for(int i=0;i<vars.size();i++)
						if(op[3]==vars.elementAt(i)[2])
							tmp2.DATA = ProcessorInterface.getVar(vars.elementAt(i));
				}else {
					tmp2.DATA = registers[op[3]-1].REGISTER_DATA.DATA;
				}
				if(op[1]<=16){
					registers[op[1]-1].REGISTER_DATA.DATA=Interpretator.DecToBit(Interpretator.BitToDec(tmp1.DATA)+Interpretator.BitToDec(tmp2.DATA),32);
					flags=120;
				}else 
					System.err.println("Need supervisor rights to write in r"+op[1]);
			}
			
		}else if(op[0]==12){//mul
			if(op[1]>64){
				
			}else {
				Data32 tmp1 = new Data32();
				if(op[2]>64){
					for(int i=0;i<vars.size();i++)
						if(op[2]==vars.elementAt(i)[2])
							tmp1.DATA = ProcessorInterface.getVar(vars.elementAt(i));
				}else {
					tmp1.DATA = registers[op[2]-1].REGISTER_DATA.DATA;
				}
				Data32 tmp2 = new Data32();
				if(op[3]>64){
					for(int i=0;i<vars.size();i++)
						if(op[3]==vars.elementAt(i)[2])
							tmp2.DATA = ProcessorInterface.getVar(vars.elementAt(i));
				}else {
					tmp2.DATA = registers[op[3]-1].REGISTER_DATA.DATA;
				}
				if(op[1]<=16){
					registers[op[1]-1].REGISTER_DATA.DATA=Interpretator.DecToBit(Interpretator.BitToDec(tmp1.DATA)*Interpretator.BitToDec(tmp2.DATA),32);				
					flags=120;
				}else 
					System.err.println("Need supervisor rights to write in r"+op[1]);
			}
			
		}else if(op[0]==45){//scall
			 supervizor=true;
			 System.err.println("Warning you now a supervisor!");
		}else if(op[0]==44){//RFE
			 supervizor=false;
			 System.err.println("You are now a supervisor!");
		}else
			System.err.println("Unknown command "+op[0]+". Do nothing");
	}

	/**
	 * @param info - information about variable
	 * 
	 * info[0] = memory page;
	 * info[1] = смещение;
	 * info[2] = variable name;
	 */
	public static void saveVariable(byte[] info) {
		System.err.println(info[2]);
		vars.add(info);
	}

	public static boolean isSupervisor() {		
		return supervizor;
	}	
}
Соседние файлы в папке processor