the logger.Permission interface indicates whether the environment making
the logging request is allowed to create new log entries. the
environment.Environment type satisifies the Permission interface
logger.Allow is provided as a convienient way of indicating the the log
entry should always be created
curated package predated the standard errors package introduced in
go1.13
the standard package does a better job of what curated attempted to do
the change of package also gave me a opportunity to clean up the error
messages a little bit
the reset can be done automatically but as an optional operation. it has
been discovered that in some situations more preparation is required
before the cartridge is reset. particularly, ACE/ELF type cartridges
where the ARM may executed before the coprocessor disasm/developer
packages are initialised and attached
ELF tried to dereference nil memory on error handling
debugger did not log error message before continuing with the ejected
"cartridge"
setup package prefixed error with "setup" indicator for no good reason
and just creating noise in the error message
PERIPHERAL command now accepts AUTO parameter. this will (re)fingerprint
the cartridge and insert the "detected" peripheral
implementation temporary in lieu of an improved setup package
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
this is now used when passing events and event data around. it also
records the port and time (in TV coordinates) which are required by
driver/passenger synchronisation and playback recording
removed television interfaces from signal package and moved the
interfaces to where they are needed
this allows more elegant handling of unpause on controller input - no
unpause unless the controller is plugged in. ie. paddle input won't
cause the game to unpause unless the paddle controller is "plugged in"
added gamepad bumper (rewind in playmode) and guide button
(debugger/playmode switcher)
added PeripheralID type to complement PortsID type. renamed keyboard
peripheral to keypad, which is more accurate and removes any potential
confusion with the physical keyboard the user might be using
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.
multi-controllers is now split into three different types
auto type elegantly handles switching of the controllers
better/cleaner memory access for peripherals and event handling
updated console commands and controller debug window
controller debug window has to use a slightly different lazyvalue
implementation. this is because atomics cannot store a different type to
the one that was originally stored; this is a problem when storing
interfaces (eg. ports.Peripheral)
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.
reworked input event system to better support paddle input
updated recording/playback fileformat to support new input event system
updated setup package to support new input event system
updated debugger commands to support new input event system
added mouse capture request to GUI interface - in SDL GUI
implementations, paddle input only works once mouse has been captured
changed gui/requests to match coding style used in input/events
the location of the configuration directory now depends on how the
binary is built. release versions of the binary will look for the
gopher2600 directory in the user's os configuration directory.
non-release versions will look for the .gopher2600 directory in the CWD.
paths.ResourcePath() will create the paths that don't exist
paths.ResourcePath() now clearly differentiates paths and files
added build target to the Makefile; disabled release target for now
- improved documentation
- some tidying up
o regression
- improved documentation
o digest
- Digest interface now requires Hash() rather than String()
- warning: use of String() may now break things
- Attaching of cartridges now uses CartridgeLoader type
- CartridgeLoader type allows the caller to specify the cartridge
path and the format of the cartridge, if fingerprinting needs to
be overridden
- An expected hash value for the loaded cartridge can also be
supplied
o regression / playback
- regression database and playback scripts now include entries
specifying the cartridge format
- implemented Has() function
- Error() now de-duplicates error string parts
* for example, instead of:
error: foo: foo: bar
Error() will now return:
error: foo: bar
- setup package now uses database package and matches entries to the
specified cartridge and applies the changes listed
- only panel entries supported so far
- database file must be hand written
- renamed FormattedError to AtariError
- renamed NewFormattedError to New
- implemented Is() and IsAny() for more convenient testing
+ changed all error testing to use Is() and IsAny()
- renamed FatalError to PanicError to better indicate the intent
- added setup package
- rerouted all vcs.AttachCartridge() calls through new package
o regression/database
- split database package from regression package