コード例 #1
0
ファイル: ZMachine2.cs プロジェクト: Chrislee187/ZMachineLib
        private bool Run()
        {
            _zMemory.Running = true;
            bool restart = false;

            while (_zMemory.Running)
            {
                var        opCode = _zMemory.GetCurrentByteAndInc();
                IOperation operation;
                OpCodes    opCodeEnum;
                (opCode, opCodeEnum, operation) = _zOperations.GetOperation(opCode);

                if (opCodeEnum == OpCodes.Restart)
                {
                    restart = true;
                    break;
                }
                if (operation == null)
                {
                    throw new Exception($"No operation found for Op Code {opCode} ({opCode:X2})!");
                }

                Log.WriteLine($" OP: {opCodeEnum:D} ({(byte)opCodeEnum:X2}) - {operation.GetType().Name})");

                var args = _zMemory.OperandManager.GetOperands(opCode);

                if (opCodeEnum == OpCodes.Read && !_interruptMode)
                {
                    _io.ShowStatus(_zMemory);
                    Read read = (Read)operation;
                    read.SetParseAddresses(args[0], args[1]);
                    break;
                }

                operation.Execute(args);

                Log.Flush();
            }

            return(restart);
        }
コード例 #2
0
ファイル: ShowStatus.cs プロジェクト: Chrislee187/ZMachineLib
 public override void Execute(List <ushort> args) => _io.ShowStatus(Memory);