Пример #1
0
        public void Update(INESController controller)
        {
            var nesController = controller as NES001Controller;

            if (nesController != null)
            {
                Keyboard.GetCurrentState(ref State);

                if (State.IsPressed(Key.A))
                {
                    nesController.State |= NES001Controller.Buttons.A;
                }

                if (State.IsPressed(Key.S))
                {
                    nesController.State |= NES001Controller.Buttons.B;
                }

                if (State.IsPressed(Key.RightShift))
                {
                    nesController.State |= NES001Controller.Buttons.Select;
                }

                if (State.IsPressed(Key.Return))
                {
                    nesController.State |= NES001Controller.Buttons.Start;
                }

                if (State.IsPressed(Key.Up))
                {
                    nesController.State |= NES001Controller.Buttons.Up;
                }

                if (State.IsPressed(Key.Down))
                {
                    nesController.State |= NES001Controller.Buttons.Down;
                }

                if (State.IsPressed(Key.Left))
                {
                    nesController.State |= NES001Controller.Buttons.Left;
                }

                if (State.IsPressed(Key.Right))
                {
                    nesController.State |= NES001Controller.Buttons.Right;
                }
            }
        }
Пример #2
0
        public Emulator(string path, INESController controller)
        {
            _path     = path;
            Cartridge = new Cartridge(path);
            if (!Mappers.ContainsKey(Cartridge.MapperNumber))
            {
                throw new NotImplementedException($"unsupported mapper {Cartridge.MapperNumber}");
            }
            Mapper     = (BaseMapper)Activator.CreateInstance(Mappers[Cartridge.MapperNumber].Key, this);
            CPU        = new CPU(this);
            PPU        = new PPU(this);
            APU        = new APU(this);
            Controller = controller;

            Load();
        }
Пример #3
0
        public void Update(INESController controller)
        {
            var nesController = controller as NES001Controller;

            if (nesController != null)
            {
                joystick.GetCurrentState(ref state);

                if (state.Buttons[0])
                {
                    nesController.State |= NES001Controller.Buttons.B;
                }

                if (state.Buttons[1])
                {
                    nesController.State |= NES001Controller.Buttons.A;
                }

                if (state.Buttons[6])
                {
                    nesController.State |= NES001Controller.Buttons.Select;
                }

                if (state.Buttons[7])
                {
                    nesController.State |= NES001Controller.Buttons.Start;
                }

                if (state.X > 0xc000)
                {
                    nesController.State |= NES001Controller.Buttons.Right;
                }

                if (state.X < 0x4000)
                {
                    nesController.State |= NES001Controller.Buttons.Left;
                }

                if (state.Y > 0xc000)
                {
                    nesController.State |= NES001Controller.Buttons.Down;
                }

                if (state.Y < 0x4000)
                {
                    nesController.State |= NES001Controller.Buttons.Up;
                }

                if (state.PointOfViewControllers[0] < 0)
                {
                    return;
                }

                if (state.PointOfViewControllers[0] <= 4500 ||
                    state.PointOfViewControllers[0] >= 31500)
                {
                    nesController.State |= NES001Controller.Buttons.Up;
                }

                if (state.PointOfViewControllers[0] >= 13500 &&
                    state.PointOfViewControllers[0] <= 22500)
                {
                    nesController.State |= NES001Controller.Buttons.Down;
                }

                if (state.PointOfViewControllers[0] >= 22500 &&
                    state.PointOfViewControllers[0] <= 31500)
                {
                    nesController.State |= NES001Controller.Buttons.Left;
                }

                if (state.PointOfViewControllers[0] >= 4500 &&
                    state.PointOfViewControllers[0] <= 13500)
                {
                    nesController.State |= NES001Controller.Buttons.Right;
                }
            }
        }