Exemplo n.º 1
0
        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));
            }
        }
Exemplo n.º 2
0
 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");
 }
Exemplo n.º 3
0
 public static void Disconnect()
 {
     if (currdev != null)
     {
         currdev.Disconnect();
     }
     currdev  = null;
     currdrum = -1;
 }
Exemplo n.º 4
0
        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();
        }
Exemplo n.º 5
0
        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();
        }
Exemplo n.º 6
0
        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();
        }
Exemplo n.º 7
0
        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));
            }
        }