282 lines
4.9 KiB
Markdown
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.
|