Mesen-X/Docs/content/apireference/Emulation.md

282 lines
4.9 KiB
Markdown

---
title: Emulation
weight: 15
pre: ""
chapter: false
---
## getState ##
**Syntax**
emu.getState()
**Return value**
*Table* Current emulation state with the following structure:
region: int,
clockRate: int,
cpu: {
status: int,
a: int,
irqFlag: int,
cycleCount: int,
pc: int,
y: int,
x: int,
sp: int,
nmiFlag: bool
},
ppu: {
cycle: int,
scanline: int,
frameCount: int,
control: {
backgroundEnabled: bool,
intensifyBlue: bool,
intensifyRed: bool,
backgroundPatternAddr: int,
grayscale: bool,
verticalWrite: bool,
intensifyGreen: bool,
nmiOnVBlank: bool,
spritesEnabled: bool,
spritePatternAddr: int,
spriteMask: bool,
largeSprites: bool,
backgroundMask: bool
},
status: {,
spriteOverflow: bool,
verticalBlank: bool,
sprite0Hit: bool
},
state: {
status: int,
lowBitShift: int,
xScroll: int,
highBitShift: int,
videoRamAddr: int,
control: int,
mask: int,
tmpVideoRamAddr: int,
writeToggle: bool,
spriteRamAddr: int
}
},
apu: {
square1: {
outputVolume: int,
frequency: float,
duty: int,
period: int,
enabled: bool,
dutyPosition: int,
sweepShift: int,
sweepPeriod: int,
sweepEnabled: bool,
sweepNegate: bool
envelope: {
counter: int,
loop: bool,
divider: int,
volume: int,
startFlag: bool,
constantVolume: bool
},
lengthCounter: {
halt: bool,
counter: int,
reloadValue: int
}
},
square2: {
outputVolume: int,
frequency: float,
duty: int,
period: int,
enabled: bool,
dutyPosition: int,
sweepShift: int,
sweepPeriod: int,
sweepEnabled: bool,
sweepNegate: bool,
envelope: {
counter: int,
loop: bool,
divider: int
volume: int,
startFlag: bool,
constantVolume: bool
},
lengthCounter: {
halt: bool,
counter: int,
reloadValue: int
}
},
triangle: {
outputVolume: int,
frequency: float,
sequencePosition: int,
period: int,
enabled: bool,
lengthCounter: {
halt: bool,
counter: int,
reloadValue: int
}
},
noise: {
modeFlag: bool,
enabled: bool,
outputVolume: int,
frequency: float,
period: int,
shiftRegister: int,
envelope: {
counter: int,
loop: bool,
divider: int,
volume: int,
startFlag: bool,
constantVolume: bool
},
lengthCounter: {
halt: bool,
counter: int,
reloadValue: int
}
},
dmc: {
sampleLength: int,
irqEnabled: bool,
loop: bool,
outputVolume: int,
bytesRemaining: int,
sampleAddr: int,
period: int,
sampleRate: float
},
frameCounter: {
fiveStepMode: int,
irqEnabled: int,
sequencePosition: int
}
},
cart: {
selectedPrgPages: array,
chrRomSize: int,
chrRamSize: int,
prgPageCount: int,
chrPageSize: int,
selectedChrPages: array,
chrPageCount: int,
prgRomSize: int,
prgPageSize: int,
}
**Description**
Return a table containing information about the state of the CPU, PPU, APU and cartridge.
## setState ##
**Syntax**
emu.setState(state)
**Parameters**
state - *Table* A table containing the state of the emulation to apply.
**Return value**
*None*
**Description**
Updates the CPU and PPU's state.
The *state* parameter must be a table in the same format as the one returned by [getState()](#getstate)
**Note:** the state of the APU or cartridge cannot be modified by using setState().
## breakExecution ##
**Syntax**
emu.breakExecution()
**Return value**
*None*
**Description**
Breaks the execution of the game and displays the debugger window.
## execute ##
**Syntax**
emu.execute(count, type)
**Parameters**
count - *Integer* The number of cycles or instructions to run before breaking
type - *Enum* See [executeCountType](/apireference/enums.html#executecounttype)
**Return value**
*None*
**Description**
Runs the emulator for the specified number of cycles/instructions and then breaks the execution.
## reset ##
**Syntax**
emu.reset()
**Return value**
*None*
**Description**
Resets the current game.
## stop ##
**Syntax**
emu.stop(exitCode)
**Parameters**
exitCode - *Integer* The exit code that the Mesen process will return when exiting (when used in [test runner mode](/apireference.html#test-runner-mode))
**Return value**
*None*
**Description**
Stops and unloads the current game. When in [test runner mode](/apireference.html#test-runner-mode), this will also exit Mesen itself and the Mesen process will return the specified exit code.
## resume ##
**Syntax**
emu.resume()
**Return value**
*None*
**Description**
Resumes execution after breaking.
## rewind ##
**Syntax**
emu.rewind(seconds)
**Parameters**
seconds - *Integer* The number of seconds to rewind
**Return value**
*None*
**Description**
Instantly rewinds the emulation by the number of seconds specified.
**Note:** this can only be called from within a "StartFrame" event callback.