/// <summary> /// Bind a macro index to a position for the MME. /// </summary> /// <param name="state">Current GPU state</param> /// <param name="argument">Method call argument</param> public void BindMacro(GpuState state, int argument) { int macroBindingIndex = state.Get <int>(MethodOffset.MacroBindingIndex); _context.Fifo.BindMacro(macroBindingIndex++, argument); state.Write((int)MethodOffset.MacroBindingIndex, macroBindingIndex); }
/// <summary> /// Send macro code/data to the MME. /// </summary> /// <param name="state">Current GPU state</param> /// <param name="argument">Method call argument</param> public void SendMacroCodeData(GpuState state, int argument) { int macroUploadAddress = state.Get <int>(MethodOffset.MacroUploadAddress); _context.Fifo.SendMacroCodeData(macroUploadAddress++, argument); state.Write((int)MethodOffset.MacroUploadAddress, macroUploadAddress); }
/// <summary> /// Performs a GPU method call. /// </summary> /// <param name="state">Current GPU state</param> /// <param name="shadowState">Shadow GPU state</param> /// <param name="value">Call argument</param> private void Send(GpuState state, GpuState shadowState, int value) { // TODO: Figure out what TrackWithFilter does, compared to Track. if (_shadowCtrl == ShadowRamControl.Track || _shadowCtrl == ShadowRamControl.TrackWithFilter) { shadowState.Write(_methAddr, value); } else if (_shadowCtrl == ShadowRamControl.Replay) { value = shadowState.Read(_methAddr); } MethodParams meth = new MethodParams(_methAddr, value); state.CallMethod(meth); _methAddr += _methIncr; }
private void FirmwareCall4(GpuState state, int argument) { state.Write(0xd00, 1); }