Пример #1
0
        private ICentralProcessingUnit BuildCPU(IArithmeticLogicUnit alu, IMemoryManagementUnit mmu, ISystemBridge bridge)
        {
            IInstructionConfigurator configurator = new InstructionConfigurator(bridge);
            IInstructionParser       parser       = new InstructionParser(configurator);
            InstructionReader        reader       = new InstructionReader(mmu, alu.IP);
            ICentralProcessingUnit   cpu          = new CentralProcessingUnit(alu, parser, reader);

            return(cpu);
        }
Пример #2
0
 public SystemBridge(IMemoryManagementUnit mmu, IArithmeticLogicUnit alu, IDisplay display, IKeyboard keyboard)
 {
     _mmu      = mmu;
     _alu      = alu;
     _display  = display;
     _keyboard = keyboard;
     // TODO: calculate according to display settings?
     _spriteBuffer = new Byte[MaxSpriteSize];
 }
Пример #3
0
        public IChip8Device Build(IKeyboard keyboard, IDisplay display)
        {
            IArithmeticLogicUnit   alu          = BuildALU();
            IMemoryManagementUnit  mmu          = new MemoryManagementUnit();
            ISystemBridge          systemBridge = BuildBridge(mmu, alu, display, keyboard);
            ICentralProcessingUnit cpu          = BuildCPU(alu, mmu, systemBridge);

            Chip8Device device = new Chip8Device(cpu, mmu, systemBridge, keyboard, display);

            LoadFonts(mmu, Fontset, FontOffset);

            return(device);
        }
Пример #4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Computer"/> class.
        /// </summary>
        /// <param name="stack">The stack.</param>
        /// <param name="encoder">The instruction encoder.</param>
        /// <param name="decoder">The instruction decoder.</param>
        public ExecutionUnit(IStack stack, IEncoder encoder, IDecoder decoder, IArithmeticLogicUnit alu)
        {
            _context = new ExecutionContext
            {
                Stack = stack,
                Encoder = encoder,
                Decoder = decoder,
                Alu = alu,
                Executing = true
            };

            _dispatcher = new Dictionary<InstructionType, Action<ExecutionContext, Instruction>>
            {
                { InstructionType.Mult, Multiply.GetAction() },
                { InstructionType.Call, Call.GetAction() },
                { InstructionType.Ret, Return.GetAction() },
                { InstructionType.Stop, Stop.GetAction() },
                { InstructionType.Print, Print.GetAction() },
                { InstructionType.Push, Push.GetAction() }
            };
        }
Пример #5
0
 public CentralProcessingUnit(IArithmeticLogicUnit arithmeticLogicUnit, IInstructionParser parser, IInstructionReader reader)
 {
     ALU    = arithmeticLogicUnit;
     Parser = parser;
     Reader = reader;
 }
Пример #6
0
        private ISystemBridge BuildBridge(IMemoryManagementUnit mmu, IArithmeticLogicUnit alu, IDisplay display, IKeyboard keyboard)
        {
            ISystemBridge bridge = new SystemBridge(mmu, alu, display, keyboard);

            return(bridge);
        }