示例#1
0
        private void DoFloppyCommand()
        {
            byte          head    = _messageData[0];
            byte          cyl     = _messageData[1];
            byte          sec     = _messageData[2];
            FloppyCommand command = (FloppyCommand)_messageData[3];
            byte          count   = _messageData[4];

#if TRACING_ENABLED
            if (Trace.TraceOn)
            {
                Trace.Log(LogType.FloppyDisk, "Floppy command is {0}, cyl/head/sec {1}/{2}/{3}",
                          command, cyl, head, sec);
            }
#endif
            switch (command)
            {
            case FloppyCommand.Seek:
                Seek(head, cyl, sec);
                break;

            case FloppyCommand.Read:
                Read(head, cyl, sec);
                break;

            case FloppyCommand.Write:
                Write(head, cyl, sec, count);
                break;

            case FloppyCommand.Format:
                Format(head, cyl, sec);
                break;

            default:
#if TRACING_ENABLED
                if (Trace.TraceOn)
                {
                    Trace.Log(LogType.Warnings, "Unhandled floppy command {0}", command);
                }
#endif
                break;
            }
        }
示例#2
0
文件: Floppy.cs 项目: ferib/VM86CS
        private void ProcessCommandAndArgs(ushort value)
        {
            if (inCommand)
            {
                data[paramIdx++] = (byte)value;
                if (paramIdx == paramCount)
                {
                    RunCommand();
                    inCommand = false;
                }
            }
            else
            {
                inCommand = true;
                paramIdx  = 0;
                command   = (FloppyCommand)(value & 0x0f);
                switch (command)
                {
                case FloppyCommand.Recalibrate:
                    paramCount = 1;
                    break;

                case FloppyCommand.SenseInterrupt:
                    paramCount = 0;
                    RunCommand();
                    inCommand = false;
                    break;

                case FloppyCommand.ReadData:
                    paramCount = 8;
                    break;

                case FloppyCommand.WriteData:
                    paramCount = 8;
                    break;

                default:
                    System.Diagnostics.Debugger.Break();
                    break;
                }
            }
        }
示例#3
0
文件: Floppy.cs 项目: cryogen/VM86CS
 private void ProcessCommandAndArgs(ushort value)
 {
     if (inCommand)
     {
         data[paramIdx++] = (byte) value;
         if (paramIdx == paramCount)
         {
             RunCommand();
             inCommand = false;
         }
     }
     else
     {
         inCommand = true;
         paramIdx = 0;
         command = (FloppyCommand)(value & 0x0f);
         switch (command)
         {
             case FloppyCommand.Recalibrate:
                 paramCount = 1;
                 break;
             case FloppyCommand.SenseInterrupt:
                 paramCount = 0;
                 RunCommand();
                 inCommand = false;
                 break;
             case FloppyCommand.ReadData:
                 paramCount = 8;
                 break;
             case FloppyCommand.WriteData:
                 paramCount = 8;
                 break;
             default:
                 System.Diagnostics.Debugger.Break();
                 break;
         }
     }
 }