예제 #1
0
        /// <summary>
        /// Initialize the Machine
        /// </summary>
        public static void Setup()
        {
            Multiboot.Setup();

            PIC.Setup();

            IDT.Setup();

            PageFrameAllocator.Setup();

            PageTable.Setup();

            VirtualPageAllocator.Setup();

            GC.Setup();

            Scheduler.Setup();

            Serial.SetupPort(Serial.COM1);

            var _hal = new Hardware();

            if (VBEDisplay.InitVBE(_hal))
            {
                ScreenManager.Setup();
                ScreenManager.Add(new BootScreen());
                ScreenManager.Add(new TestScreen());

                ScreenManager.ChangeScreen(ScreenIds.Boot);
            }

            Native.Hlt();
        }
예제 #2
0
 private void Cut()
 {
     a = 0;
     foreach (int id in CDB.cards.Keys)
     {
         if (stop == false)
         {
             a++;
             PIC.CutJPG(path1, id, CDB.cards[id].type, path2, SET.Length, SET.Length);
             progressBar1.Invoke(pb1);
             label1.Invoke(lb1);
         }
         else
         {
             break;
         }
     }
     if (stop == true)
     {
         MessageBox.Show("已经取消!");
     }
     else
     {
         stop = true;
         MessageBox.Show("裁剪完成。\n文件在" + path2);
     }
     this.Invoke(fm);
 }
 public RegisterMapForm(PIC.Register.RegisterFileMap _registerFileMap)
 {
     InitializeComponent();
     registerFileMap = _registerFileMap;
     createMap();
     createSpecialValueView();
 }
예제 #4
0
파일: Bootstrap.cs 프로젝트: hgb-git/Cosmos
        // Bootstrap is a class designed only to get the essentials done.
        // ie the stuff needed to "pre boot". Do only the very minimal here.
        // IDT, PIC, and Float
        // Note: This is changing a bit GDT (already) and IDT are moving to a real preboot area.
        public static void Init()
        {
            // Drag this stuff in to the compiler manually until we add the always include attrib
            INTs.Dummy();

            PIC = new PIC();
            CPU.UpdateIDT(true);

            /* TODO check using CPUID that SSE2 is supported */
            CPU.InitSSE();

            /*
             * We liked to use SSE for all floating point operation and end to mix SSE / x87 in Cosmos code
             * but sadly in x86 this resulte impossible as Intel not implemented some needed instruction (for example conversion
             * for long to double) so - in some rare cases - x87 continue to be used. I hope passing to the x32 or x64 IA will solve
             * definively this problem.
             */
            CPU.InitFloat();

            header = (Multiboot.Header *)Multiboot.GetMBIAddress();

            modeinfo       = (Core.VBE.ModeInfo *)header->vbeModeInfo;
            controllerinfo = (Core.VBE.ControllerInfo *)header->vbeControlInfo;

            // Managed_Memory_System.ManagedMemory.Initialize();
            // Managed_Memory_System.ManagedMemory.SetUpMemoryArea();
        }
        string ConvertToDisplayValue(FieldValue fieldValue)
        {
            string displayValue = "";

            if (fieldValue.IsNull)
            {
                displayValue = displayField.NullDisplay;
            }
            else
            {
                int ctlIndex     = view.DataSourceViewDefinition.TaskDataSource.DataSourceDefinition.Id.CtlIdx;
                PIC fieldPicture = new PIC(displayField.Picture, (StorageAttribute)displayField.Attr, ctlIndex);
                displayValue = DisplayConvertor.Instance.mg2disp(fieldValue.Value.ToString(), "", fieldPicture, ctlIndex, false);
                displayValue = displayValue.Trim();
            }

            // Empty values should be displayed as a single blank character so that they will
            // be selectable by pressing the 'space key'.
            // This is consistent with the behavior on the server as defined in choiceinp.cpp/PrepareDisplayElement_U
            // and RT::vew_fetch_data_ctrl.
            if (String.IsNullOrEmpty(displayValue))
            {
                displayValue = " ";
            }

            return(displayValue);
        }
예제 #6
0
        public override void Execute(PIC Pic, BytecodeLine Line)
        {
            int  Command    = Line.Command;
            int  RegAddress = Command & 0x7F;
            bool D          = (Command & 0x80) != 0;

            byte Value = Pic.RegisterMap.Get(RegAddress);

            Value = Calculate(Pic, Line, Value);

            if (AffectsZFlag)
            {
                Pic.RegisterMap.ZeroBit = Value == 0;
            }

            if (D)
            {
                Pic.RegisterMap.Set(Value, RegAddress);
            }
            else
            {
                Pic.WRegister.Value = Value;
            }

            Pic.RegisterMap.ProgrammCounter++;
        }
예제 #7
0
 public static void Setup()
 {
     Screen.Clear();
     Screen.Color = 0x0E;
     Screen.SetCursor(24, 0);
     Screen.Write('1');
     Multiboot.Setup();
     Screen.SetCursor(24, 1);
     Screen.Write('2');
     PIC.Setup();
     Screen.SetCursor(24, 2);
     Screen.Write('3');
     GDT.Setup();
     Screen.SetCursor(24, 3);
     Screen.Write('4');
     IDT.Setup();
     Screen.SetCursor(24, 4);
     Screen.Write('5');
     PageFrameAllocator.Setup();
     Screen.SetCursor(24, 5);
     Screen.Write('6');
     PageTable.Setup();
     Screen.SetCursor(24, 6);
     Screen.Write('7');
     VirtualPageAllocator.Setup();
     Screen.SetCursor(24, 7);
     Screen.Write('8');
     Screen.SetCursor(24, 8);
     ProcessManager.Setup();
     Screen.Write('9');
     Screen.SetCursor(24, 9);
     TaskManager.Setup();
     Screen.Write('A');
     Screen.SetCursor(24, 10);
 }
예제 #8
0
파일: Program.cs 프로젝트: eliasv/PicSim
        static void Main(string[] args)
        {
            List <String>  HexCode;
            List <picWord> RAM;

            Init();
            if (args.Length < 1)
            {
                HexCode = readHex("flash.hex");
            }
            else
            {
                HexCode = readHex(args[0]);
            }
            //NoLines = HexCode.Length;
            RAM = decompile(HexCode);
            RAM.Sort();
            foreach (var line in RAM)
            {
                Console.WriteLine(line.ToString()); // Display the memory mapped dissasembly + data
            }
            Console.ReadKey();
            PIC test = new PIC("lab11.hex");

            Console.ReadKey();
        }
예제 #9
0
 /// <summary>
 ///   Make copy of validation details,
 ///   copy constructor
 /// </summary>
 public ValidationDetails(ValidationDetails vd) : this()
 {
     _oldvalue         = vd.getOldValue();
     _val              = vd._val;
     _range            = vd.getRange();
     _control          = vd.getControl();
     _validationFailed = false;
     if (vd._pictureReal != null)
     {
         _pictureReal = new StringBuilder(vd._pictureReal.ToString());
     }
     if (vd._pictureEnable != null)
     {
         _pictureEnable = new StringBuilder(vd._pictureEnable.ToString());
     }
     if (vd.getDiscreteRangeValues() != null)
     {
         _discreteRangeValues = vd.CloneDiscreteRangeValues();
     }
     if (vd.getContinuousRangeValues() != null)
     {
         _continuousRangeValues = vd.CloneContinuousRangeValues();
     }
     _picData = vd.getPIC();
     _isNull  = vd.getIsNull();
 }
예제 #10
0
        public static Bitmap Setjpg(string gpath, bool yulan, int id, int leng)
        {
            string jpgfile = gpath + "pics\\" + id.ToString() + ".jpg";

            if (File.Exists(jpgfile))
            {
                if (yulan == true)
                {
                    if (CDB.cards.ContainsKey(id))
                    {
                        return(PIC.CutJPG(gpath, id, CDB.cards[id].type, leng, leng));
                    }
                }
                else
                {
                    return(PIC.GetBitmap(jpgfile));
                }
            }
            else
            {
                jpgfile = "./data/Images/cover.jpg";
                if (File.Exists(jpgfile))
                {
                    return(PIC.GetBitmap(jpgfile));
                }
            }
            return(null);
        }
예제 #11
0
        private void MenuItem_Open_Click(object sender, RoutedEventArgs e)
        {
            Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog();
            ofd.DefaultExt = ".hex";
            ofd.Filter     = "HEX Files (*.hex)|*.hex|All Files (*.*)|*.*";
            Nullable <bool> selected = ofd.ShowDialog();

            if (selected == true)
            {
                //lstISA.Items.Clear();
                lstHex.Items.Clear();
                string       fname = ofd.FileName;
                StreamReader sr    = new StreamReader(ofd.OpenFile());
                while (!sr.EndOfStream)
                {
                    lstHex.Items.Add(sr.ReadLine());
                }
                pic = new PIC(fname);
                ISA = pic.decompile();
                lstISA.ItemsSource = ISA;
                //foreach (var x in ISA)
                //{
                //    lstISA.Items.Add(x);
                //}
                mnuRun.IsEnabled      = true;
                CLK.Interval          = pic.getclkInterval() / 2;
                CLK.Elapsed          += CLK_Elapsed;
                CLK.AutoReset         = true;
                lblStatus.DataContext = pic.getCurrent();
            }
        }
예제 #12
0
 public Parser(PIC _pic)
 {
     this.pic = _pic;
     this.registerFileMap = pic.getRegisterFileMap();
     this.programMemory = pic.getProgramMemory();
     this.operationStack = pic.getOperationStack();
     this.programCounter = pic.getProgramCounter();
 }
예제 #13
0
 public Timer0(Register.RegisterFileMap _registerFileMap, PIC _pic)
 {
     tmr0Register = _registerFileMap.getAdapter(Register.RegisterConstants.TMR0_ADDRESS);
     optionRegister = _registerFileMap.getAdapter(Register.RegisterConstants.OPTION_REG_BANK1_ADDRESS);
     registerFileMap = _registerFileMap;
     internalCounter = 0;
     timerHandler = new Timer0Handler(_registerFileMap, this, _pic);
 }
예제 #14
0
        public override byte Calculate(PIC Pic, Data.BytecodeLine Line, byte Value)
        {
            int NewValue = Pic.WRegister.Value + Value;

            Pic.RegisterMap.CarryBit        = NewValue > 0xFF;
            Pic.RegisterMap.DigitalCarryBit = ((Pic.WRegister.Value & 0xF) + (Value & 0xF)) > 0xF;
            return((byte)NewValue);
        }
예제 #15
0
        public override byte Calculate(PIC Pic, Data.BytecodeLine Line, byte Value)
        {
            int NewValue = Value << 1;

            NewValue = NewValue + (Pic.RegisterMap.CarryBit ? 1 : 0);
            Pic.RegisterMap.CarryBit = (NewValue & 0x100) != 0;
            return((byte)NewValue);
        }
예제 #16
0
        public override bool Calculate(PIC Pic, Data.BytecodeLine Line, int Literal)
        {
            int NewValue = Pic.WRegister.Value ^ Literal;

            Pic.RegisterMap.ZeroBit = NewValue == 0;
            Pic.WRegister.Value     = (byte)NewValue;
            return(true);
        }
예제 #17
0
        public override void Execute(PIC Pic, Data.BytecodeLine Line)
        {
            int Command    = Line.Command;
            int RegAddress = Command & 0x7F;

            Pic.RegisterMap.Set(Pic.WRegister.Value, RegAddress);

            Pic.RegisterMap.ProgrammCounter++;
        }
예제 #18
0
        public override void Execute(PIC Pic, Data.BytecodeLine Line)
        {
            int NewAddress = Line.Command & 0x7FF;
            int PC         = Pic.RegisterMap.ProgrammCounter;

            Pic.Stack.Push(PC + 1);

            Pic.RegisterMap.ProgrammCounter = NewAddress;
        }
예제 #19
0
        public override bool Calculate(PIC Pic, Data.BytecodeLine Line, int Literal)
        {
            int NewValue = Literal - Pic.WRegister.Value;

            Pic.RegisterMap.CarryBit        = NewValue > 0;
            Pic.RegisterMap.DigitalCarryBit = ((Pic.WRegister.Value & 0xF) + (Literal & 0xF)) > 0xF;
            Pic.RegisterMap.ZeroBit         = NewValue == 0;
            Pic.WRegister.Value             = (byte)NewValue;
            return(true);
        }
예제 #20
0
        public override byte Calculate(PIC Pic, Data.BytecodeLine Line, byte Value)
        {
            int CarryValue = Pic.RegisterMap.CarryBit ? 1 : 0;
            int NewCarry   = Value & 0x1;
            int NewValue   = CarryValue << 8 + Value >> 1;

            Pic.RegisterMap.CarryBit = NewCarry != 0;

            return((byte)NewValue);
        }
예제 #21
0
        public override void Execute(PIC Pic, BytecodeLine Line)
        {
            int Command = Line.Command;
            int Literal = Command & 0xFF;

            if (Calculate(Pic, Line, Literal))
            {
                Pic.RegisterMap.ProgrammCounter++;
            }
        }
예제 #22
0
        public ControlForm(PIC.PIC _pic)
        {
            InitializeComponent();
            this.pic = _pic;
            pic.registerExecutionStateListener(onPicExecutionChange);
            Disposed += delegate { pic.unregisterExecutionStateListener(onPicExecutionChange); };

            frequencyTextBox.Text = "4";
            frequencyUnitBox.SelectedIndex = 2;
        }
예제 #23
0
파일: NumUtil.cs 프로젝트: rinavin/RCJS
        /// <summary> convert numbers to our secret format
        /// </summary>
        /// <param name="fileName"></param>
        private static String Encode(String numStr, StorageAttribute attr, String picStr)
        {
            PIC      pic      = new PIC(picStr, attr, 0);
            NUM_TYPE num_type = new NUM_TYPE(numStr, pic, 0);

            String encoded_num = num_type.toXMLrecord();

            encoded_num = Base64.encode(RecordUtils.byteStreamToString(encoded_num), ClientManager.Instance.getEnvironment().GetEncoding());
            return(XmlParser.escape(encoded_num));
        }
예제 #24
0
        public Timer0(PIC Pic)
        {
            this.Pic = Pic;

            Pic.RegisterMap.GetAdapter(Register.RegisterFileMap.REG_PORT_A).DataChanged        += PortA_DataChanged;
            Pic.RegisterMap.GetAdapter(Register.RegisterFileMap.REG_TIMER_ADDRESS).DataChanged += Timer0_DataChanged;
            PortALastValue = Pic.RegisterMap.GetAdapter(Register.RegisterFileMap.REG_PORT_A).Value & 0x4;

            Reset();
        }
예제 #25
0
        /// <summary>
        /// Switch to a specific thread.
        /// This method will not return!
        /// </summary>
        public static unsafe void SwitchToThread(int threadID)
        {
            var thread = Threads[threadID];
            var proc   = thread.Process;

            if (KConfig.Log.TaskSwitch)
            {
                KernelMessage.WriteLine("Switching to Thread {0}. StackState: {1:X8}", threadID, (uint)thread.StackState);
            }

            //Assert.True(thread != null, "invalid thread id");

            thread.Ticks++;

            SetThreadID(threadID);

            PIC.SendEndOfInterrupt((int)KnownInterrupt.ClockTimer);

            thread.Status = ThreadStatus.Running;

            if (thread.StackState == null)
            {
                DumpStats();
                KernelMessage.WriteLine("threadID: {0}", threadID);
                Debug.Break();
            }

            thread.StackState->Stack.EFLAGS |= X86_EFlags.InterruptEnableFlag;

            if (proc.PageTable != PageTable.KernelTable)
            {
                Debug.Nop();
            }

            uint pageDirAddr = proc.PageTable.GetPageTablePhysAddr();
            //KernelMessage.WriteLine("PageDirAddr: {0:X8}", pageDirAddr);
            uint stackStateAddr = (uint)thread.StackState;
            uint dataSelector   = thread.DataSelector;

            if (!thread.User)
            {
                thread.StackState = null; // just to be sure
            }
            GDT.Tss->ESP0 = thread.KernelStackBottom;

            if (thread.Debug)
            {
                Native.Nop();
            }

            GDT.SetThreadStorageSegmentBase(thread.ThreadLocalStorageBaseAddr);

            InterruptReturn(stackStateAddr, pageDirAddr, dataSelector, KnownSegments.UserThreadStorage);
        }
예제 #26
0
        public override void Execute(PIC Pic, Data.BytecodeLine Line)
        {
            int Command = Line.Command;

            byte NewValue = 0;

            Pic.RegisterMap.ZeroBit = true;
            Pic.WRegister.Value     = NewValue;

            Pic.RegisterMap.ProgrammCounter++;
        }
예제 #27
0
        public static void Init()
        {
            uint divisor = (1193180 * 10) / 1000; /* Calculate our divisor */ //10ms

            Native.Out8(0x43, 0x36);                                          /* Set our command byte 0x36 */
            Native.Out8(0x40, (byte)(divisor & 0xFF));                        /* Set low byte of divisor */
            Native.Out8(0x40, (byte)(divisor >> 8));                          /* Set high byte of divisor */

            mCurrentTask = 0;
            PIC.ClearMask(0);
        }
예제 #28
0
        public override void Execute(PIC Pic, Data.BytecodeLine Line)
        {
            int Command    = Line.Command;
            int RegAddress = Command & 0x7F;

            byte NewValue = 0;

            Pic.RegisterMap.ZeroBit = true;
            Pic.RegisterMap.Set(NewValue, RegAddress);

            Pic.RegisterMap.ProgrammCounter++;
        }
예제 #29
0
        public EEPROM(PIC Pic)
        {
            this.Pic = Pic;

            EEAddr = Pic.RegisterMap.GetAdapter(Register.RegisterFileMap.REG_EEADDR_ADDRESS);
            EEData = Pic.RegisterMap.GetAdapter(Register.RegisterFileMap.REG_EEDATA_ADDRESS);
            EECon1 = Pic.RegisterMap.GetAdapter(Register.RegisterFileMap.REG_EECON1_ADDRESS);
            EECon2 = Pic.RegisterMap.GetAdapter(Register.RegisterFileMap.REG_EECON2_ADDRESS);

            EECon1.DataChanged += EECon1_DataChanged;
            EECon2.DataChanged += EECon2_DataChanged;
        }
예제 #30
0
파일: NumUtil.cs 프로젝트: rinavin/RCJS
        /// <summary> convert numbers from our secret format
        /// </summary>
        /// <param name="fileName"></param>
        private static String Decode(String numStr, StorageAttribute attr, String picStr)
        {
            String decoded_num = XmlParser.unescape(numStr);

            decoded_num = XmlParser.unescape(decoded_num);
            decoded_num = Base64.decodeToHex(decoded_num);

            NUM_TYPE num_type = new NUM_TYPE(decoded_num);
            PIC      pic      = new PIC(picStr, attr, 0);

            return(num_type.toDisplayValue(pic));
        }
예제 #31
0
        public WDT(PIC _pic)
        {
            this.pic = _pic;

            optionRegister = pic.getRegisterFileMap().getAdapter(Register.RegisterConstants.OPTION_REG_BANK1_ADDRESS);
            optionRegister.DataChanged += onOptionRegisterChange;

            wdtTimer = new System.Timers.Timer();
            wdtTimer.Interval = calculateWdtInterval();
            wdtTimer.Elapsed += onWdtTimerElapsed;
            wdtTimer.AutoReset = false;
        }
예제 #32
0
        public static unsafe void Start(uint magic, uint address)
        {
            /* Setup Multiboot */
            Multiboot.Setup(magic, address);

            /* Placement Address */
            Heap.PlacementAddress = Native.EndOfKernel();

            /* Clear Interrupts */
            Native.ClearInterrupt();

            /* Setup PIC */
            PIC.Setup();

            /* Setup GDT & Enter into protected mode */
            GDT.Setup();

            /* Setup IDT */
            IDT.Setup();

            /* Enable Interrupts */
            Native.SetInterrupt();

            /* Setup Paging */
            Paging.Setup(Multiboot.RAM);

            /* Setup Multitasking */
            Multitasking.CreateTask(0, true); //This is System Update thread
            Multitasking.Init();              //Start Multitasking

            /* Call our kernel instance now */
            try
            {
                Caller.Start();
                while (true)
                {
                    Caller.Update();
                }
            }
            catch (Exception e)
            {
                //Kernel PANIC !!
                Console.WriteLine(e.Message);
            }

            while (true)  //Set CPU in Infinite loop DON'T REMOVE THIS ELSE I'll KILL YOU (^ . ^)
            {
                Native.ClearInterrupt();
                Native.Halt();
            }
            ;
        }
예제 #33
0
 public override byte Calculate(PIC Pic, BytecodeLine Line, byte Value, int BitPosition)
 {
     if (!Helper.CheckBit(BitPosition, Value))
     {
         Cycles = 1;
     }
     else
     {
         Cycles = 2;
         Pic.RegisterMap.ProgrammCounter++; // Nächster Befehl muss übersprungen werden
     }
     return(Value);
 }
예제 #34
0
        private static void Setup()
        {
            IDT.SetInterruptHandler(null);
            Panic.Setup();
            Debugger.Setup(Serial.COM1);

            // Initialize interrupts
            PIC.Setup();
            IDT.Setup();
            GDT.Setup();

            //Runtime.Internal.Setup();
        }
예제 #35
0
        private void changeState(PIC.PIC.PicExecutionState newState)
        {
            picExecutionState = newState;

            if (newState == PIC.PIC.PicExecutionState.STOPPED)
            {
                PlayButton.Image = (System.Drawing.Bitmap)(resources.GetObject("PlayButton.Image"));
            }
            else
            {
                PlayButton.Image = (System.Drawing.Bitmap)(resources.GetObject("PauseButton.Image"));
            }
        }
        public InterruptHandler(PIC _pic, Register.RegisterFileMap _registerFileMap)
        {
            this.pic = _pic;
            this.registerFileMap = _registerFileMap;

            this.oldPortBValue = registerFileMap.Get(Register.RegisterConstants.PORTB_ADDRESS);
            this.oldIntconValue = registerFileMap.Get(Register.RegisterConstants.INTCON_ADDRESS);
            this.oldEecon1Value = registerFileMap.Get(Register.RegisterConstants.EECON1_BANK1_ADDRESS);

            this.valueChangeListener = new Data.DataAdapter<byte>.OnDataChanged(onValueChange);
            this.portBValueChangeListener = new Data.DataAdapter<byte>.OnDataChanged(onPortBValueChange);
            registerSelfWithRegisterFileMap();
        }
        public Timer0Handler(Register.RegisterFileMap _registerFileMap, Timer0.Timer0 _timer0, PIC _pic)
        {
            pic = _pic;
            this.registerFileMap = _registerFileMap;
            this.timer0 = _timer0;
            lastPortAValue = _registerFileMap.Get(Register.RegisterConstants.PORTA_ADDRESS);

            // instance delegates
            this.portAValueChangeListener = new Data.DataAdapter<byte>.OnDataChanged(onPortAValueChange);
            this.tmr0RegisterChangeListener = new Data.DataAdapter<byte>.OnDataChanged(onTMR0RegisterChanged);
            this.cycleEndListener = new PIC.OnCycleEnd(onCycleEnd);

            registerDelegates();
        }
예제 #38
0
        public override byte Calculate(PIC Pic, Data.BytecodeLine Line, byte Value)
        {
            int WComp = ~Pic.WRegister.Value;

            WComp += 0x1;

            int NewValue = Value + WComp;


            Pic.RegisterMap.CarryBit = NewValue >= 0;
            NewValue = (byte)NewValue;
            Pic.RegisterMap.DigitalCarryBit = (Value & 0xF) + (WComp & 0xF) > 0xF;
            return((byte)NewValue);
        }
예제 #39
0
        public ListingForm(string _pathToFile, PIC.PIC _pic)
        {
            InitializeComponent();

            programView = new GUI.ProgramView(_pathToFile);

            foreach(string item in programView.source) {
                dataGridView1.Rows.Add(item);
            }

            _pic.nextInstructionEvent += onNextInstructionExecution;
            Disposed += delegate { _pic.nextInstructionEvent -= onNextInstructionExecution;  };

            programMemory = _pic.getProgramMemory();

            numberOfLinesDisplayed = dataGridView1.Height / dataGridView1.RowTemplate.Height;
        }
        public SpecialValueForm(PIC.PIC _pic)
        {
            InitializeComponent();

            pic = _pic;
            stackBoxes = new TextBox[PIC.Data.OperationStack.STACK_SIZE];
            pic.getOperationStack().registerStackUpdateListener(onStackUpdate);
            pic.registerExecutedCyclesListener(onExecutedCyclesUpdate);

            Disposed += delegate {
                pic.getOperationStack().unregisterStackUpdateListener(onStackUpdate);
                pic.unregisterExecutedCyclesListener(onExecutedCyclesUpdate);
            };

            createValueDisplays();
            Paint += drawVerticalLine;
        }
        public PulseGeneratorForm(PIC.PIC pic)
        {
            InitializeComponent();

            portAAdapter = (PIC.Ports.IOAdapter) pic.getRegisterFileMap().getAdapter(PIC.Register.RegisterConstants.PORTA_ADDRESS);
            portBAdapter = (PIC.Ports.IOAdapter) pic.getRegisterFileMap().getAdapter(PIC.Register.RegisterConstants.PORTB_ADDRESS);

            intervalABox.Text = DEFAULT_INTERVAL.ToString();
            intervalBBox.Text = DEFAULT_INTERVAL.ToString();

            portATimer.Elapsed += portATimer_Elapsed;
            portBTimer.Elapsed += portBTimer_Elapsed;

            int i = 0;
            Label label;
            // PORT-Checkboxes dynamisch erstellen
            for (i = 0; i < 8; i++)
            {
                portACheckBoxes[7-i] = new CheckBox();
                portACheckBoxes[7-i].SetBounds(CHECKBOX_X_OFFSET + i * (CHECKBOX_WIDTH + CHECKBOX_SPACING), CHECKBOX_PORTA_Y_OFFSET, CHECKBOX_WIDTH, CHECKBOX_WIDTH);
                portACheckBoxes[7-i].Parent = this;
                portACheckBoxes[7-i].MouseClick += new MouseEventHandler(portACheckboxChanged);

                label = new Label();
                label.Text = (7 - i).ToString();
                label.SetBounds(CHECKBOX_X_OFFSET + i * (CHECKBOX_WIDTH + CHECKBOX_SPACING), LABEL_PORTA_Y_OFFSET, CHECKBOX_WIDTH, CHECKBOX_WIDTH);
                label.Parent = this;
                label.Show();
                label.BringToFront();

                portBCheckBoxes[7-i] = new CheckBox();
                portBCheckBoxes[7-i].SetBounds(CHECKBOX_X_OFFSET + i * (CHECKBOX_WIDTH + CHECKBOX_SPACING), CHECKBOX_PORTB_Y_OFFSET, CHECKBOX_WIDTH, CHECKBOX_WIDTH);
                portBCheckBoxes[7-i].Parent = this;
                portBCheckBoxes[7-i].MouseClick += new MouseEventHandler(portBCheckboxChanged);

                label = new Label();
                label.Text = (7 - i).ToString();
                label.SetBounds(CHECKBOX_X_OFFSET + i * (CHECKBOX_WIDTH + CHECKBOX_SPACING), LABEL_PORTB_Y_OFFSET, CHECKBOX_WIDTH, CHECKBOX_WIDTH);
                label.Parent = this;
                label.Show();
                label.BringToFront();
            }
        }
 private void setSelectedBits(PIC.Ports.IOAdapter portAdapter, byte portBitmask)
 {
     portAdapter.Input = (byte)(portAdapter.Value | portBitmask);
 }
 /// <summary>
 /// Creates a new SleepOperation
 /// </summary>
 /// <param name="_pic">needed to put into sleep</param>
 /// <param name="_registerFileMap"></param>
 /// <param name="_address">code address</param>
 public SleepOperation(PIC _pic, Register.RegisterFileMap _registerFileMap, short _address)
     : base(_registerFileMap, CYCLES, _address)
 {
     pic = _pic;
 }
예제 #44
0
파일: Setup.cs 프로젝트: GeroL/MOSA-Project
        /// <summary>
        /// Starts the ISA devices.
        /// </summary>
        public static void StartISADevices()
        {
            //LinkedList<DeviceDriver> deviceDrivers = deviceDriverRegistry.GetISADeviceDrivers();

            //foreach (DeviceDriver deviceDriver in deviceDrivers)
            //    StartDevice(deviceDriver);

            //[ISADeviceDriver(AutoLoad = true, BasePort = 0x60, PortRange = 1, AltBasePort = 0x64, AltPortRange = 1, IRQ = 1, Platforms = PlatformArchitecture.X86AndX64)]
            ISADeviceDriverAttribute keyboardDeviceAttributes = new ISADeviceDriverAttribute();
            keyboardDeviceAttributes.AutoLoad = true;
            keyboardDeviceAttributes.BasePort = 0x60;
            keyboardDeviceAttributes.PortRange = 1;
            keyboardDeviceAttributes.AltBasePort = 0x64;
            keyboardDeviceAttributes.IRQ = 1;
            keyboardDeviceAttributes.Platforms = PlatformArchitecture.X86AndX64;

            //[ISADeviceDriver(AutoLoad = true, BasePort = 0x0CF8, PortRange = 8, Platforms = PlatformArchitecture.X86AndX64)]
            ISADeviceDriverAttribute pciAttributes = new ISADeviceDriverAttribute();
            pciAttributes.AutoLoad = true;
            pciAttributes.BasePort = 0x0CF8;
            pciAttributes.PortRange = 8;
            pciAttributes.Platforms = PlatformArchitecture.X86AndX64;

            //[ISADeviceDriver(AutoLoad = true, BasePort = 0x20, PortRange = 2, AltBasePort = 0xA0, AltPortRange = 2, Platforms = PlatformArchitecture.X86AndX64)]
            ISADeviceDriverAttribute picAttributes = new ISADeviceDriverAttribute();
            picAttributes.AutoLoad = true;
            picAttributes.BasePort = 0x20;
            picAttributes.PortRange = 2;
            picAttributes.AltBasePort = 0xA0;
            picAttributes.AltPortRange = 2;
            picAttributes.Platforms = PlatformArchitecture.X86AndX64;

            //[ISADeviceDriver(AutoLoad = true, BasePort = 0x40, PortRange = 4, IRQ = 0, Platforms = PlatformArchitecture.X86AndX64)]
            ISADeviceDriverAttribute pitAttributes = new ISADeviceDriverAttribute();
            pitAttributes.AutoLoad = true;
            pitAttributes.BasePort = 0x40;
            pitAttributes.PortRange = 4;
            pitAttributes.IRQ = 0;
            pitAttributes.Platforms = PlatformArchitecture.X86AndX64;

            Keyboard = new StandardKeyboard();
            PCI = new PCIController();
            PIC = new PIC();
            PIT = new PIT();

            //StartDevice(picAttributes, PIC);
            StartDevice(pitAttributes, PIT);
            StartDevice(pciAttributes, PCI);
            StartDevice(keyboardDeviceAttributes, Keyboard);

            PCIControllerManager pciController = new PCIControllerManager(deviceManager);

            Console.Write("Probing PCI devices...");
            //pciController.CreatePCIDevices();
            Console.WriteLine("[Completed]");
        }
예제 #45
0
 private void onPicExecutionChange(PIC.PIC.PicExecutionState value, object sender)
 {
     MethodInvoker mi = delegate { changeState(value); };
     if (InvokeRequired)
     {
         try
         {
             this.BeginInvoke(mi); // Async to prohibit deadlock
         }
         catch (ObjectDisposedException)
         {
             // ignore, the listener is not yet unregistered...
         }
     }
     else
     {
         changeState(value);
     }
 }
 public ByteRegister this[PIC r]
 {
     get { return this[(uint)r]; }
     set { this[(uint)r] = value; }
 }
예제 #47
0
    private Vector3 P(PIC p)
    {
        var firstHalfOfCircle = Mathf.Sin(_fillingHeight * Mathf.PI) / 3;

        switch (p)
        {
            /* Up 4 corners*/
            case PIC.UFR: return new Vector3(1 - firstHalfOfCircle, FillingHeight+1, 1 - firstHalfOfCircle);
            case PIC.UFL: return new Vector3(0 + firstHalfOfCircle, FillingHeight+1, 1 - firstHalfOfCircle);
            case PIC.UBL: return new Vector3(0 + firstHalfOfCircle, FillingHeight+1, 0 + firstHalfOfCircle);
            case PIC.UBR: return new Vector3(1 - firstHalfOfCircle, FillingHeight+1, 0 + firstHalfOfCircle);
            /* Down 4 Corners*/
            case PIC.DFR: return new Vector3(1, 0, 1);
            case PIC.DFL: return new Vector3(0, 0, 1);
            case PIC.DBL: return new Vector3(0, 0, 0);
            case PIC.DBR: return new Vector3(1, 0, 0);
            /* Middles */
            case PIC.UM: return new Vector3(0.5f, FillingHeight+1, 0.5f);
            case PIC.FM: return new Vector3(0.5f, FillingHeight / 2+1, 1.0f);
            case PIC.DM: return new Vector3(0.5f, 0, 0.5f);
            case PIC.LM: return new Vector3(0, FillingHeight / 2+1, 0.5f);
            case PIC.RM: return new Vector3(1, FillingHeight / 2+1, 0.5f);
            case PIC.BM: return new Vector3(0.5f, FillingHeight / 2+1, 0);
            default:
                throw new ArgumentOutOfRangeException("p");
        }
    }
 private void clearSelectedBits(PIC.Ports.IOAdapter portAdapter, byte portBitmask)
 {
     portAdapter.Input = (byte)(portAdapter.Value & (~portBitmask));
 }
 public ClearWdtOperation(PIC _pic, RegisterFileMap _registerFileMap, short _address)
     : base(_registerFileMap, CYCLES, _address)
 {
     this.pic = _pic;
 }