/// <summary> /// Constructor for the compiler /// </summary> /// <param name="FInput">The AGC Code file to read from</param> /// <param name="FOutput">The AGC Bin file to write to</param> public YUL(String FInput, String FOutput) { AGC_Code_File = FInput; filename = Path.GetFileName(AGC_Code_File); AGC_Bit_File = FOutput; if (File.Exists(AGC_Bit_File)) { File.Delete(AGC_Bit_File); } AGC_Bit = File.Create(AGC_Bit_File); for (int j = 0; j < 655360; j++) { AGC_Bit.Write(new byte[] { 0 }, 0, 1); } AGC_Bit.Close(); AGC_Bit.Dispose(); Console.WriteLine("Empty bin file created"); bank_index_counter = new int[44]; for (int i = 0; i < 44; i++) { bank_index_counter[i] = 0; } Cp_File = File.ReadAllLines(AGC_Code_File); FB = 0; EB = 0; FEB = 0; unresolvedLabelError = -6; Bank = new BANK(false, FB, FEB, AGC_Bit_File); Bank.compiling = true; bank_changed = false; }
/// <summary> /// AGC builder placeholder /// </summary> public AGC(String file, Channels chan) { AGC_File = file; FEB = 0; RegBank = new BANK(true, 0, 0, AGC_File); running = false; clock = new CLOCK(); e_mem = false; this.chan = chan; chan.regDelegate(this, read_chan); PB = new BANK(false, 0, 0, AGC_File); //load the current pgrogram bank - at launch : FB0 fFixed = false; }
private void switchBank() { switch (bank_type) { case "FB": Bank = new BANK(false, FB, FEB, AGC_Bit_File); break; case "EB": Bank = new BANK(true, EB, 0, AGC_Bit_File); break; } Bank.compiling = true; bank_changed = false; }
public AGC_Compiler(String FInput, String FOutput) { AGC_Code_File = FInput; AGC_Bit_File = FOutput; Cp_File = File.ReadAllLines(AGC_Code_File); FB = 0; EB = 0; FEB = 0; B = new BANK(false, FB, FEB, AGC_Bit_File); B.compiling = true; process_line(0); foreach (KeyValuePair<string, int> kvp in labels) { Console.WriteLine("Label : {0} - Value : {1}", kvp.Key, kvp.Value); } process_line(1); }
/// <summary> /// start (run) a previous AGC intialized (powered up) /// </summary> public void start() { if(!running) { clock.c_start(); cycle_count = 0; running = true; b = new BANK(false, FB, FEB.getHex(), AGC_File); Console.WriteLine("AGC Started"); B = b.get_word(Z.getHex()); B.setWord(B.hexToByte()); Z.setHex((ushort)(Z.getHex() + 1)); MCT(); } else { Console.WriteLine("AGC Halted."); } }
/// <summary> /// AGC builder placeholder /// </summary> public AGC(String file) { A = new sWord(0x0, false); Z = new sWord(0x0, false); Q = new sWord(0x0, false); L = new sWord(0x0, false); G = new sWord(0x0, false); X = new sWord(0x0, false); Y = new sWord(0x0, false); U = new sWord(0x0, false); B = new sWord(0x0, false); FEB = new sWord(0x0, false); FB = 0; EB = 0; S = 0; SQ = 0; running = false; clock = new CLOCK(); b = null; cycle_count = 0; AGC_File = file; }
//Bank management public void switch_bank(bool erasable) { if (erasable) { PB.write_bank(); PB = new BANK(true,RegBank.get_word(3),0,AGC_File); } else { PB = new BANK(false, RegBank.get_word(4), FEB, AGC_File); } }
public void restore_fFixed() { PB.write_bank(); if (PB.isErasable() && (PB.getId() == 0)) { RegBank = new BANK(true, 0, 0, AGC_File); } PB = new BANK(tEr, tId, tFEB, AGC_File); e_mem = tEr; }
public int fFixed_switch(int adr) { tEr = PB.isErasable(); tId = (short)PB.getId(); tFEB = PB.getFEB(); sWord s = new sWord((short)adr); if (s.getVal(10, 11) == 0) { if ((short)s.getVal(8, 9) == 0) { PB = RegBank; } else { PB = new BANK(true, (short)s.getVal(8, 9), 0, AGC_File); } adr = s.getVal(0, 7); e_mem = true; } else { PB = new BANK(false, (short)s.getVal(10, 11), 0, AGC_File); adr = s.getVal(0, 9); e_mem = false; } return adr; }