public static void RDS(uint unit) /* Read Select */ { if (currdev != null) { currdev.Disconnect(); } currdev = null; currdrum = -1; uint CurrUnit = unit >> 4; uint CurrSubUnit = unit & 0xF; switch (CurrUnit) { case 8: /* BCD Tape */ case 9: /* Bin Tape */ if (CurrSubUnit < 1 || CurrSubUnit > 10) { throw new InvalidOperationException(string.Format("Invalid tape {0} selected for read", CurrSubUnit)); } OpenTape(CurrSubUnit); MT[CurrSubUnit - 1].RT(CurrUnit == 9); currdev = MT[CurrSubUnit - 1]; break; case 12: /* Drum */ if (CurrSubUnit < 1 || CurrSubUnit > 8) { throw new InvalidOperationException(string.Format("Invalid drum {0} selected for read", CurrSubUnit)); } OpenDrum(CurrSubUnit); DR[CurrSubUnit - 1].RDR(); currdev = DR[CurrSubUnit - 1]; currdrum = (int)CurrSubUnit - 1; break; case 13: /* Card Reader */ if (CurrSubUnit != 1) { throw new InvalidOperationException(string.Format("Invalid Cardreader {0} selected for read", CurrSubUnit)); } OpenCardReader(); CRD.RDS(); currdev = CRD; break; case 15: /* Printer */ if (CurrSubUnit != 1) { throw new InvalidOperationException(string.Format("Invalid Printer {0} selected for read", CurrSubUnit)); } OpenPrinter(); LP.RPR(); currdev = LP; break; default: throw new InvalidOperationException(string.Format("Invalid device {0} selected for read", unit)); } }
public static void OnProcessExit(object sender, EventArgs e) { if (currdev != null) { currdev.Disconnect(); } currdev = null; if (CRD != null) { CRD.Dispose(); CRD = null; } if (CPU != null) { CPU.Dispose(); CPU = null; } if (MT != null) { for (int i = 0; i < MT.Length; i++) { if (MT[i] != null) { MT[i].Dispose(); MT[i] = null; } } } if (DR != null) { for (int i = 0; i < DR.Length; i++) { if (DR[i] != null) { DR[i].Dispose(); DR[i] = null; } } } if (LP != null) { LP.Dispose(); LP = null; } if (LogCPU != null) { LogCPU.Dispose(); LogCPU = null; } if (LogIO != null) { if (Config.LogIO != Config.LogCPU) { LogIO.Dispose(); } LogIO = null; } Console.Error.WriteLine("finished"); }
public static void Disconnect() { if (currdev != null) { currdev.Disconnect(); } currdev = null; currdrum = -1; }
public static void REW(uint unit) /* Rewind */ { uint CurrSubUnit = unit & 0xF; if (currdev != null) { currdev.Disconnect(); } currdev = null; if (CurrSubUnit < 1 || CurrSubUnit > 10) { throw new InvalidOperationException("invalid tape for REW"); } OpenTape(CurrSubUnit); MT[CurrSubUnit - 1].REW(); }
public static void WEF(uint unit) /* Write End of File */ { uint CurrSubUnit = unit & 0xF; if (currdev != null) { currdev.Disconnect(); } currdev = null; if ((CurrSubUnit < 1 || CurrSubUnit > 10)) { throw new InvalidOperationException("invalid tape for WEF"); } OpenTape(CurrSubUnit); MT[CurrSubUnit - 1].WEF(); }
public static void BST(uint unit) /* Backspace Tape */ { uint CurrSubUnit = unit & 0xF; if (currdev != null) { currdev.Disconnect(); } currdev = null; if ((CurrSubUnit < 1 || CurrSubUnit > 10)) { throw new InvalidOperationException(string.Format("invalid tape {0} for BST", CurrSubUnit)); } OpenTape(CurrSubUnit); MT[CurrSubUnit - 1].BST(); }
public static void WRS(uint unit) /* Write Select */ { if (currdev != null) { currdev.Disconnect(); } currdev = null; currdrum = -1; uint CurrUnit = unit >> 4; uint CurrSubUnit = unit & 0xF; switch (CurrUnit) { case 1: /* CRT */ if (CurrSubUnit != 8) { throw new InvalidOperationException(string.Format("Invalid CRT {0} selected for write", CurrSubUnit)); } throw new NotImplementedException("CRT"); case 8: /* BCD Tape */ case 9: /* Bin Tape */ if (CurrSubUnit < 1 || CurrSubUnit > 10) { throw new InvalidOperationException(string.Format("Invalid tape {0} selected for write", CurrSubUnit)); } OpenTape(CurrSubUnit); MT[CurrSubUnit - 1].WT(CurrUnit == 9); currdev = MT[CurrSubUnit - 1]; break; case 12: /* Drum */ if (CurrSubUnit < 1 || CurrSubUnit > 8) { throw new InvalidOperationException(string.Format("Invalid drum {0} selected for read", CurrSubUnit)); } OpenDrum(CurrSubUnit); DR[CurrSubUnit - 1].WDR(); currdev = DR[CurrSubUnit - 1]; currdrum = (int)CurrSubUnit - 1; break; case 13: /* Sim Tape */ if (CurrSubUnit == 11) /* IOD */ { return; } else if (CurrSubUnit < 1 || CurrSubUnit > 10) { throw new InvalidOperationException(string.Format("Invalid tape {0} selected for sim write", CurrSubUnit)); } throw new NotImplementedException("WTS"); case 14: /* Card Punch */ if (CurrSubUnit != 1) { throw new InvalidOperationException(string.Format("Invalid punch {0} selected for write", CurrSubUnit)); } OpenCardPunch(); CPU.WPU(); currdev = CPU; break; case 15: /* Printer */ if (CurrSubUnit != 1) { throw new InvalidOperationException(string.Format("Invalid printer {0} selected for write", CurrSubUnit)); } OpenPrinter(); LP.WPR(); currdev = LP; break; default: throw new InvalidOperationException(string.Format("Invalid device {0} selected for write", unit)); } }