8SA1Sim/js/isa/misc.js

115 lines
3.8 KiB
JavaScript

class IS_STI extends Microcode_Instruction {
constructor(props) {
super(props);
this.Bytecode = 0x3E0;
this.Mnemonic = "STI";
this.LongName = "Set Thread Interrupt (2nd word MUST BE 0x80)";
this.Aliases = new Array();
this.Type = InstructionTypes.SingleWord;
this.Operands = new Array();
this.Words = 2;
this.Cycles = 12;
this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI;
this.Microcode[3] = CONTROL_OUT_AB | CONTROL_RI;
this.Microcode[4] = CONTROL_OUT_PC | CONTROL_RRI;
this.Microcode[5] = CONTROL_OUT_RO | CONTROL_RBIL | CONTROL_PCC;
this.Microcode[6] = CONTROL_OUT_SR | CONTROL_RAIL;
this.Microcode[7] = CONTROL_OUT_AB | CONTROL_ALU_OR;
this.Microcode[8] = CONTROL_OUT_AO | CONTROL_RAIL;
this.Microcode[9] = CONTROL_OUT_SS;
this.Microcode[10] = CONTROL_OUT_SP | CONTROL_RRI;
this.Microcode[11] = CONTROL_OUT_RO | CONTROL_RAIL | CONTROL_RBIH;
}
}
is_STI = new IS_STI;
Instructions.push(is_STI);
class IS_CTI extends Microcode_Instruction {
constructor(props) {
super(props);
this.Bytecode = 0x3E1;
this.Mnemonic = "CTI";
this.LongName = "Clear Thread Interrupt (2nd word MUST BE 0x7F)";
this.Aliases = new Array();
this.Type = InstructionTypes.SingleWord;
this.Operands = new Array();
this.Words = 2;
this.Cycles = 12;
this.Microcode[2] = CONTROL_OUT_SP | CONTROL_RRI;
this.Microcode[3] = CONTROL_OUT_AB | CONTROL_RI;
this.Microcode[4] = CONTROL_OUT_PC | CONTROL_RRI;
this.Microcode[5] = CONTROL_OUT_RO | CONTROL_RBIL | CONTROL_PCC;
this.Microcode[6] = CONTROL_OUT_SR | CONTROL_RAIL;
this.Microcode[7] = CONTROL_OUT_AB | CONTROL_ALU_AND;
this.Microcode[8] = CONTROL_OUT_AO | CONTROL_RAIL;
this.Microcode[9] = CONTROL_OUT_SS;
this.Microcode[10] = CONTROL_OUT_SP | CONTROL_RRI;
this.Microcode[11] = CONTROL_OUT_RO | CONTROL_RAIL | CONTROL_RBIH;
}
}
is_CTI = new IS_CTI;
Instructions.push(is_CTI);
class IS_RTI extends Microcode_Instruction {
constructor(props) {
super(props);
this.Bytecode = 0x3FE;
this.Mnemonic = "RTI";
this.LongName = "Return from Thread Interrupt (internal instruction ONLY)";
this.Aliases = new Array();
this.Type = InstructionTypes.SingleWord;
this.Operands = new Array();
this.Words = 1;
this.Cycles = 6;
this.Microcode[0] = CONTROL_OUT_SP | CONTROL_RRI;
this.Microcode[1] = CONTROL_OUT_PC | CONTROL_RI | CONTROL_SPD | CONTROL_SPC;
this.Microcode[2] = CONTROL_OUT_TI | CONTROL_PCI;
this.Microcode[3] = CONTROL_RHI;
this.Microcode[4] = CONTROL_OUT_PC | CONTROL_RRI;
this.Microcode[5] = CONTROL_OUT_RO | CONTROL_IRI | CONTROL_PCC;
}
}
is_RTI = new IS_RTI;
Instructions.push(is_RTI);
class IS_NOP extends Microcode_Instruction {
constructor(props) {
super(props);
this.Bytecode = 0x3ff;
this.Mnemonic = "NOP";
this.LongName = "NO OPERATION";
this.Aliases = new Array();
this.Type = InstructionTypes.SingleWord;
this.Operands = new Array();
this.Words = 1;
this.Cycles = 2;
}
}
is_NOP = new IS_NOP;
Instructions.push(is_NOP);
class IS_NOP0 extends Microcode_Instruction {
constructor(props) {
super(props);
this.Bytecode = 0x0;
this.Mnemonic = "NOP";
this.LongName = "NO OPERATION";
this.Aliases = new Array();
this.Type = InstructionTypes.SingleWord;
this.Operands = new Array();
this.Words = 1;
this.Cycles = 2;
}
}
is_NOP0 = new IS_NOP0;
Instructions.push(is_NOP0);