statsviz support is presented in the form of a patch file. this is so
that the requirements of the patch don't become part of the project
unecessarily
the statsviz package is only needed for emulator development and including
the additional packages in the BOM creates a false impression of the
requirements (IMO)
patch can be applied with:
git apply --verbose 0001-statsviz.patch
Makefile has a "patch_file_integrity" target to test that patch files
can still be applied cleanly. ideal for calling from git pre-commit hook
patch was created with:
git diff > 0001-statsviz.patch
all references to opengl are now made through the renderer interface.
which renderer is to be used is controlled by buildtags
now requires minimum go version of 1.21
CRT preferences and CRT preview in debugger TV window are disabled for
OpenGL2.1
Makefile now sets the version string for the project. the version
package tries to set a meaningful version string if the project is not
built with the Makefile
added VERSION command
updated .gitignore file to include .DS_Store folder. the current line to
ignore executable files has also been beefed up
corrected profile_cpu and profile_trace arguments - the elf argument is
not supported (or required) for PERFORMANCE mode
previously, the cached instructions still required a significant amount
of decoding. the new method captures the state of the decoding much
closer to the variable element of the instruction (eg. using what's in
the register etc.)
most of the benefit of the caching still comes from not having to reread
program memory every instruction but the new method does add a small
performance increase and arguably, more clarity to the code
the function no longer returns (uint8, bool) tuple. it instead expects a
function that can be called from the Tick() function itself, in the case
of "success"
this has significant performance improvements due to the frequency of
calls to delay.Event.Tick()
screenshotting now uses exactly the same CRT sequence as the playmode. a
single file for each screenshot rather than a selection of images
results aren't exactly comparable but the new pipeline means it should
be easier to manipulate to get the results we want
this target build a console friendly version of the windows binary.
tagged with development indicator because we don't ever want to release
these as an actual version
removed some old and unused make targets
BusStuff and CoProc functions are called a lot and type assertions are
moderately expensive and noticeable when done frequently. by making the
assertion in when the cartridge is inserted we can reduce the test to a
simple boolean comparison
the font rendering used for build and release target will use the
freetype library unless the go version indicates that it's being built
on MacOS with an M2 CPU (darwin/arm64)
for some reason not yet fully understand, using freetype causes an issue
on darwin/arm64
go-wav, statsview and memviz all indirectly used gopkg.in/yaml.v3 which
I do not want to depend upon
WAV functionality is no longer available for wav writing or reading
(supercharger tapes). will try to reintroduce functionality in the
future
Makefile updated to build with freetype by default.
building without the imguifreetype build tag will cause the application
to use the default proggyclean font
embeds JetBrainMono-Regular.ttf under the OFL-1.1 License
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.
the thumbnailer does the actual emulation in a new goroutine so there's
no lag here but it's necessary to PushRawEvent() so that
rewind.GetState() doesn't race
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)
like peripheral event and cartridge event notifications but placed in
the top-left corner of the screen
fixed race condition by calling playmode Pause() from the GUI thread