Beispiel #1
0
        public JsrInfo NotifyJsrInfoRetired(long cycles)
        {
            Debug.Assert(IsPartOfReturnAddr);
            JsrInfo jsrInfoToRetire = JsrInfo;

            _retiredJsrInfos.Push(jsrInfoToRetire);
            LastRetiredCycles = cycles;
            ClearJsrPartInfo();
            TraceLine("retired", StackPtr.ToHex(), _retiredJsrInfos.Count);
            return(jsrInfoToRetire);
        }
Beispiel #2
0
 public void cpu_OnPL(Cpu cpu)
 {
     OnPL?.Invoke(null);
     if (CurrentStackByte.IsPartOfReturnAddr)
     {
         JsrInfo info = CurrentStackByte.JsrInfo;
         TraceLine($"PL, retire{info.JsrOpcodeAddr.ToHex()}, {StackPtr.ToHex()}");
         info.JsrReturnAddrL.NotifyJsrInfoRetired(cpu.Cycles);
         info.JsrReturnAddrH.NotifyJsrInfoRetired(cpu.Cycles);
         info.CyclesAtRetire = cpu.Cycles;
         info.Retired        = true;
     }
     else
     {
         // ignore PL from stack which doesn't affect any return address on the stack
     }
 }