проблема cosmos OS в том, что «PS / 2 не поддерживается»

#c# #.net #cosmos

#c# #.net #cosmos

Вопрос:

Я попытался загрузить cosmos OS на свой реальный компьютер, а не на виртуальный компьютер. Я использовал USB и ISO, но была ошибка, что «Контроллер PS / 2 не поддерживается». Я не создавал ISO при отладке.

исходный код

 using System;
using System.Collections.Generic;
using System.Text;
using Sys = Cosmos.System;

namespace CosmosKernel2
{
    public class Kernel : Sys.Kernel
    {
        uint x;
        uint y;
        Sys.MouseState ms;
        bool menuopened;
        Canvas can;
        protected override void BeforeRun()
        {
            can = FullScreenCanvas.GetFullScreenCanvas();
            can.Clear(System.Drawing.Color.White);
            Sys.MouseManager.ScreenHeight = Convert.ToUInt32(can.Mode.Rows);
            Sys.MouseManager.ScreenWidth = Convert.ToUInt32(can.Mode.Columns);
            Sys.MouseManager.X = 0;
            Sys.MouseManager.Y = 0;
            menuopened = false;
            ms = Sys.MouseState.None;
        }

        protected override void Run()
        {
            if ((ms == Sys.MouseState.None) amp;amp; (Sys.MouseManager.MouseState == Sys.MouseState.Left))
            {
                uint xx = Sys.MouseManager.X;
                uint yy = Sys.MouseManager.Y;
                if ((xx < 100) amp;amp; (yy > (can.Mode.Rows - 40)))
                {
                    if (menuopened)
                    {
                        menuopened = false;
                    }
                    else
                    {
                        menuopened = true;
                    }
                }
            }
            Point[] pn = { new Point(Convert.ToInt32(Sys.MouseManager.X), Convert.ToInt32(Sys.MouseManager.Y)), new Point(Convert.ToInt32(Sys.MouseManager.X), Convert.ToInt32(Sys.MouseManager.Y   30)), new Point(Convert.ToInt32(Sys.MouseManager.X   7), Convert.ToInt32(Sys.MouseManager.Y   12)), new Point(Convert.ToInt32(Sys.MouseManager.X   21), Convert.ToInt32(Sys.MouseManager.Y   15)) };
            if (Sys.MouseManager.MouseState == Sys.MouseState.None)
            {
                can.DrawPolygon(new Pen(System.Drawing.Color.Blue, 4), pn);
            }
            else
            {
                can.DrawPolygon(new Pen(System.Drawing.Color.Red, 4), pn);
            }
            if ((x != Sys.MouseManager.X) || (y != Sys.MouseManager.Y))
            {
                can.Clear(System.Drawing.Color.White);
                if (menuopened)
                {
                    can.DrawFilledRectangle(new Pen(System.Drawing.Color.Black), 0, can.Mode.Rows - 40, 100, 300);
                }
                can.DrawFilledRectangle(new Pen(System.Drawing.Color.Magenta), 0, can.Mode.Rows - 40, 100, 40);
                Point[] p = { new Point(Convert.ToInt32(Sys.MouseManager.X), Convert.ToInt32(Sys.MouseManager.Y)), new Point(Convert.ToInt32(Sys.MouseManager.X), Convert.ToInt32(Sys.MouseManager.Y   30)), new Point(Convert.ToInt32(Sys.MouseManager.X   7), Convert.ToInt32(Sys.MouseManager.Y   12)), new Point(Convert.ToInt32(Sys.MouseManager.X   21), Convert.ToInt32(Sys.MouseManager.Y   15)) };
                Point[] po = { new Point(Convert.ToInt32(x), Convert.ToInt32(y)), new Point(Convert.ToInt32(x), Convert.ToInt32(y   30)), new Point(Convert.ToInt32(x   7), Convert.ToInt32(y   12)), new Point(Convert.ToInt32(x   21), Convert.ToInt32(y   15)) };
                if (Sys.MouseManager.MouseState == Sys.MouseState.None)
                {
                    can.DrawPolygon(new Pen(System.Drawing.Color.Blue, 4), p);
                }
                else
                {
                    can.DrawPolygon(new Pen(System.Drawing.Color.Red, 4), p);
                }

            }
            x = Sys.MouseManager.X;
            y = Sys.MouseManager.Y;
            ms = Sys.MouseManager.MouseState;
        }
    }
}
 

Кроме того, в virtualbox нет ошибки, и она не работает должным образом.
Что мне делать?
Прошу прощения за мой плохой английский. Я кореец.

Ответ №1:

Порт PS / 2 представляет собой 6-контактный разъем mini-DIN, используемый для подключения клавиатур и мышей к компьютерной системе, совместимой с ПК. Есть ли у вас порт PS / 2 на вашем ПК и совместим ли он с Cosmos OS. проверьте, войдя в консоль или последовательный порт, в чем проблема. Проверьте, не произошел ли сбой байта 250 (0xFA / Success) на порту клавиатуры PS / 2, если это так, сброс может работать некорректно. Попробуйте вручную вызвать команду SendDeviceCommand с шестнадцатеричным сбросом в ps2controller.cs

 if (!SendDeviceCommand(DeviceCommand.IdentifyDevice, xSecondPort))
{
  return null;
}
 

Вы также можете попробовать добавить

 if (xTestByte == 0x00 || xTestByte == 0x50)
{
return true;
}
 

Лучшее, что вы можете сделать, это попробовать установить последнюю стабильную версию Cosmos OS и попытаться загрузить ее на свое оборудование после экспорта. Если возможно, попробуйте загрузиться с компакт-диска.