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
update userinput.EventKeyboard to support Repeat keypresses
in playmode rewind forward/backward occurs on shift-left or shit-right
cursor keys (with repeat)
removed the pause feature (sdlimgui) that caused two-frame kernels to
appear "complete" when paused.
a) it wasn't consistent
b) it can cause single-frame kernels to shimmer
c) it doesn't really work with the rewind system
it'll be addressed in a future commit
makes it more convenient/clearer when working with all three coordinate
values (frame, scanline and clock)
changed all packages to GetCoords() where appropriate
regressionDB wasn't storing the requested cartridge mapping correctly.
for example, if no mapping was specified by the user but a mapping was
detected by file extension then the detected mapper was stored. this
caused problems with supercharger audio files - the AR mapping was
stored in the DB but no that it was an audio file
DB now stores the user specified mapping in all instances (ie. not the
mapping detected by the file extension).
related to this was that the deserialisation of DB entries was not using
the cartridgeloader package correctly. instead of using NewLoader, the
deserialisation was populating the Loader type manually.
this has revealed the way forward for an effective convergence of
playmode and debugging mode. for this commit a Playmode interface has
been added but this will abstracted into an Emulation interface in the
future
this is marginally quicker but I feel it's neater. to solve the problem
of distunguishing between returns values (true, nil) and (false, nil)
the latter can implemented with a sentinal error.
it's less clumsy when used as a label and it's accurate with regards to
how the VCS is documented. not sure why I thought HorizPos was a better
label. maybe it helped my thinking in the earlier phases of development.
this affected regression tests when random state was switched on
- although regression tests reset the preferences to a known state
the timer was not affected when the VCS was reset, causing some
tests to fail inexplicably
added ability to skip tests during a regression run by issuing an
interrupt signal (ctrl-c). two such signals within 250ms will stop the
run completely
corrected log regression. now makes sure log is clear before beginning
collation
removed all messages from errors package. the strings are now hard coded
in place. the original reason for extracting the error strings like that
was (a) for redundancy and (b) for localisation possibilities. However,
in reality there is not much redundancy and since the project started
the scope of localisation is much larger (particularly due to the
addition of a GUI)
this is the first step. the next step is to remove the errors package
altogether. recent additions to Go mean that the functionality of the
errors package is no longer required. moreover, the original idea for
the errors package functions turns out not to have been as useful as
first appeared (the Error() functionality which makes sure no repeating
sub-strings occur is probably better achieved with static tooling).
one idea that comes from this which is quite interesting is the idea of
a curated error. that is, any error that has been "wrapped" as some
'generic' type. the IsAny() function in the errors package effectively
serves this purpose. we use that in one place in the input loop of the
debugger. not strictly necessary but nice to have so it would ideal
if we could remove the errors package but keep that idea.
log test records hash of log output
renamed digest test to video test. removed audio testing
added -log output to "regress add" mode. note that this has nothing to
do with the log test. it simply echos new log entries as the appear to
the console, supressing regression progress meters
the note about historical versions also being covered wasn't strictly
needed and was ugly. the LICENCE being in the root file from the very
first commit is sufficient.
unified/normalised static area structure and presentation
better tab bars for static area window
corrected cropped cursor drawing for pixel position on the VBLANK
boundary
TV specification changeable at command line and via GUI's debug screen
window
abstracted resizing mechanism opening the possiblity
for more sophisticated analysis
digest/video handles TV specification changes
bumped imgui-go version to 2.4.1
static data window in debugger
reworked menu system to allow cartridge specific window menus
cleaned up how cartridge RAM information is specified and retrieved
renamed cartridge.Format() to ID() and reference to "cartridge format"
to "cartridge mapping". format is an overloaded word already and it was
confusing.
because I'm sick of looking at it in the root package :-)
regression package made a reference to the clear line code sequence, but
honestly ANSI is so well understood there's really no need to delegate
this to another package. local copy of the code in regression package.