playback/recorder and driven input systems moved out of the the ports
package and into a new input package. how the input systems interact has
been clarified and improved - for example, it is now posssible for a
playback file to be used to drive two emulations for comparison purposes
the debugger startup procedure has been clarified with two distinct
startup functions for playmode and debugger - each of which take
different arguments. the clarity has allowed the reintroduction of
recording and playback to the main play mode
rewinding the main emulation breaks the strict synchronisation
constraints with the comparison emulation. it should be possible to
maintain two parallel rewind instances *and* to maintain the constraints
but I've chosen not to tackle that just yet.
userinput for two emulations synced by RIOT ports. RIOT port
driver/passenger synchronisation ensures user input is seen by the
emulations at the same time (relative to the emulation's television)
does not yet handle RNGs (randomise on startup or the RNG in the DPC or
DPC+ formats yet). we need to add a context type first
added -fpscap to emulate() function (used by both playmode and the
debugger) making it a good alternative to the -display option
getting performance mode to work with an increasingly complex
gui-emulation communication just isn't worth it. it would make the code
too complex.
this paves the way for removing the Emulation interface and using a
straight-forward Emulation type, which will be current Debugger type
renamd. the Debugger type is currently handling the playmode, performing
well and allowing tighter integration of the debugger and playmode.
added terminal.UserQuit sentinal error to better handle quit events.
future versions should probably remove 'running' variable and rely on
this error and filter accordingly
switch between debugger and playmode with F6 or backtick key
pakage debugger remains for now but it will be renamed to emulator or
something like that. playmode package removed.
commandline options for both debugger and playmode are the same
currently, with some playmode features being lost (temporarily)
now takes into consideration the attached terminal. added
IsRealTerminal() to terminal.Input interface to support this
reworked script package error messages
I had started to do this work but hadn't finished it.
added gui.ReqEnd so that gui can exit gracefully (save window
preferences etc.) this was previously handled by ReqState
TV frame will never resize if frame is unsynced
Play-screen FPS counter shows target frame frequency
sdlimgui playscreen: screen will not roll on first couple of non-synced
frames. the screen is tolerant of the odd rogue frame.
gui vsync options renamed to monitor sync to clarify distinction wth
emulated television VSYNC
added includeDetail argument. this adds the Go version string and time
parameted to the filname of any profile file (specified by the profile
parameter)
simplified GUI creation process in main goroutine sync
corrected Makefile spellings
debugger and playmode refer to userinput package rather than the common
code being in the playmode package
GUI events are now userinput events
more versatile handling of EventData in controller package. parsing of
EventData is handled by the controller types as required. added
EventDataPlayback type to ports package to help distinguish source of
data.
EventDataStick used to specify stick data value. used to help
distinguish between setting a stick direction and toggle a stick
direction. the latter case is useful for (physical) gamepad input and
the former for input from a keyboard.
Gamepad analogue stick can be used for paddle input. PaddleFire removed
and Fire used instead.
version number of playback file increased to 1.1. version detection of
recorder.IsPlaybackFile() improved.
window positions in playmode are not saved. saved window positions from
debug mode does not affect playmode
updated play and performance mode instantiation so that TIA revisions
window in playmode works correctly
added IterateBlessed() function for Disassembly type. more convenient
method of outputting disassembly to a string.
instruction defintion notes whether opcode is undocumented
linter flags use of undocumented opcodes
renamed DISASSEMBLY command to DISASM
added single address disassembly to DISASM command
removed gui.ReqSavePrefs. prefs should only be saved under explicit
instruction from the user
added gui.StateEnding to be used with gui.ReqState when debugger and
playmode (and maybe other modes) are finishing. sdlimgui uses this to
save window information.
expanded --profile option for DEBUG and PERFORMANCE so that different
profile options can be selected/combined
added --profile option to PLAY mode.
many lint errors removed (re-added "make lint" to git pre-commit hook)
removed options related to setting scale of debug/play window
- can be done more effectively window controls
preference initialisation for debug and play modes is more clear
- removed errant playmode setting (terminalOnError - not applicable)
simplified window management
nicer feedback on rewind slider
screen will buffer a small number of frames it can use to smooth out
variations in the speed at which frames come from the emulation
results in better synchronisation for flicker kernels
result of changing rewind maxentries value displayed correctly in win_control
timer randomised on startup (if preference selected)
changing symbols preference updates disasm window vertical alignment
file selector:
- scrolls to top on directory change
- centres on current ROM when first opened
help note for the -state flags (REGRESS ADD)
changed default window position for timer window
removed some logical dead-ends
introduced the concept of restarting the input loop. this is important
when resetting the emulation for example. if the machine is reset during
a video cycle then the emulation will resume inside the video inputloop.
however the reset machine expects to be inside a cpu inputloop, causing
havoc. also used to ensure the rewind system works correctly.
restarting the input loop is tricky. it requires a RawEventReturn channel
that works like the RawEvent channel but returns control to the input
loop on completion.
added GetFeature() to gui interface to better support the rewind
subsystem. renamed ReqFeature() to SetFeature(). Added FeatureReqData
type for clarity.
line terminal debugging still works but without a GUI (for now). will
replace with an ASCII GUI and display in the future.
add gui.Stub to ease transition.