Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
9
Добавлен:
01.05.2014
Размер:
3.86 Кб
Скачать
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