- a recent refactor caused the vcs to initialise with the basic
television rather than the sdl gui/tv
- this meant that the sdl implementation of MetaSignal was not being
called
o basic television
- scanline extension corrected
o errors
- messages corrected
- added progress meter for playback regression types
o errors
- added FatalError type. intended to be used instead of panic()
o limiter
- created limiter package
- moved sdl fpsLimiter to new package
- added HasWaited() function in additio to Wait() function
- fixed bug caused by interaction between basictv and digesttv
- some roms (games_that_do_bad_things_to_hmove) failed playback when
the screen limits changed
- the best solution I could find was to prevent basictv calling
registered renderers once the last possible scanline was reached
- in previous versions, the last scanline was redrawn over and over
until a new frame was ready
- this however, caused a hashing issue in digesttv when playing back
recording input. it is unclear to me why this hashing issue arose.
however, the solution is a more natural response to end of frame
conditions as well as a being a fix for this bug
o regression
- regression top level functions now output to an io.Writer passed
as an argument, rather than to Stdout directly
- playback will now save an image of the current frame (via imagetv)
in the event of playback failure
o television
- NewFrame() and NewScanline() implementations both require a
frameNum and scanlineNum argument
- added performance package
- moved fps() function from gopher.go to new package
- added percentage of full-speed indicator to fps
o gopher2600
- changed FPS mode to PERFORMANCE
o polycounter
- squeezed a little more time out of polycounter by changing the
receivers of some frequently called functions to pointer receivers.
o television / colors
- changed how colors are transalted from signals
- the color specifications are pre-processed in an init() function
- renamed Recorder to Scribe
- any references to script "recording" has been altered
o errors
- some effort expended tidying up error messages display and
construction
- commandline package now uses errors package
o removed panics that would be better served with errors
o removed extraneous calls to fmt.Println and fmt.Printf
- added regression entry listing operation
- added playback regression type
- playback regression makes a local copy of playback script. delete
operation deletes it
- better database key handling
- running of regression tests can now be limited to a list of
specific keys
- commands can now be deemed unsafe
- script recording can handle embedded scripts
- script playback/recording moved to their own package
- videocycle prompt changed
o gopher2600
- improved default command line parsing
o general tidying up
o sdl/imagetv
- wrong error reporting
- renamed HeadlessTV to BasicTelevision
- imagetv and digesttv moved to a single package (called renderers)
- for example, an SDL GUI and a digestTV instance can now use the
same BasicTelevision instance
- hooks now implemented as a Renderer interface
- simplified GetState() interface
o debugger
- debugger now initialises an instance of digestTV, using the same
underlying BasicTelevision as the SDL GUI
- added DIGEST command
- updating SWCHA does not now clobber the entire register, only the
nibble for the controller being strobed
o playmode
- default recording name now includes seconds
- recording doesn't start until cartridge has been inserted (so if
the cartridge fails to load there is no useless recording file left
over)
o memory / periphbus
- PeriphWrite simply writes straight to memory, rather than through
a channel
- work on how controllers are implemented means this is no longer
necessary.
- reimplemented system monitor as metavideo
- system monitor was trying to be too general to the point where it
was confusing
- refactored sdl implementation accordingly
o debugging / script
- "script capture" reclassified/renamed as "script recording"
- i want to use capture to refer to the capturing of control input
(joystick, etc.)
o assert
- moved assert package to be a sub-package of hardware/cpu/register
- not required anywhere other than the test packages for cpu and
register
- stores string representation of disassembly rather than instances
of result.Instruction
- it was felt that the context of result.Instruction maybe
misleading if probed after the disassembly process (it may not be
obvious to a user of the disassembly package what the limitations are)
o commandline
- in all instances, error messages containing placeholders now
contain descriptive messages rather than the placeholder itself
o debugger
- added analysis option to CARTRIDGE command
- lots more work required on this
- added a "linear" disassembly that deciphers every address in the
cart as though it were a valid instruction. this solves the problem with
the original disassembly algorithm (now called flow) caused when the
debugger reaches an area of the code that cannot be found with the flow
mechanism.
- improved how command template are compiled
- verification and tab completion is now more robust
- missing repeat groups
o debugger
- extended PLAYER and MISSILE commands
- combined STICK1 and STICK2 into one STICK command
- parse input routines improved
- empty input will repeat the last step command (eg. STEP FRAME)
- added CAPTURE command
- user input is copied to a script file. suitable for future
playback with the SCRIPT command
- added XAA command
o debugger
- renamed ui package to console package
- GUI instance now passed to NewDebugger, rather than created
internally
o regression
- begun refactor
- scripts now pass through input loop, allowing commands that
control the emulation (like RUN or STEP) to be effective
- reworked ONSTEP and ONHALT commands
- added STICK0 and STICK1 commands
o memory / pia
- improved RAM debugging output
- fixed duplicate detection
- fixed parsing of breakpoint values >16bit (I misread the
ParseInt() documentation)
o disassembly / commands
- GREP results now provide context
o gopher2600
- initscript now definable on the command line
o tia / playfield
- implemented "scoremode"
* I'd totally forgotten about this 2600 feature and was trying to
understand why the "28c3 intro" demo wasn't showing the atari logo
at the top of the screen. at the same time I had stumbled across
SvOlli's Revision 2013 lecture where he mentions it. lucky. I would
have spent a couple of hours probably, scratching my noggin.
- fixed bug that caused sprite position to be misrecorded
- caused by reckoning the effects of HMOVE from the reset position
rather than the current (possibly already adjusted) position
o debugger / colorterm
- implemented HOME/END keys for input loop
o monitor / sdltv staterecorder
- generalised colour assignment
- not perfect but more flexible
o debugger / breakpoints
- parsing of negative numbers now allowed
- UserRead() fixed such that inputting of certain characters (% and $)
is reflected correctly
o debugger
- improved commentary surrounding ctrl-c handling
o system monitor
- added monitor package to debugger
- this replaces the call to TV.MetaSignal in the TIA
- it is thought that this approach will be more flexible
- plus, it removes debugging specific code from the core emulation
o television
- renamed a few things so that they better describe new concepts
introduced with the system monitor package
- debugging colours can now be selected with a single keypress
- television scaling increase (=) and decrease (-)
- added hblank indicator when screen is unmasked
- metasignals overlay can now be toggled with the keyboard
- improved debugging output
- introduced meta-signals - can now show when HMOVE, RSYNC and WSYNC
are activated
- flipping between regular and debugging colors can now happen at
any time
- DISPLAY command only opens the display if it is called without
additional arguments.
- for example, calling "DISPLAY DEBUGCOLORS" does not cause the
display to appear.
- keyboard events now selectively handled by callback function, rather than the in the guiLoop
- benefits to this approach:
* more flexible - debugger can react differently to keyboard
events than, for example, the run mode frontend
* because the guiLoop is running in a different goroutine there
are limits to what it can do to the SDL window. using a
callback is the first step in synchronising the goroutines
- better duplication detection
- listing of breakpoints now prints target value in the targets
canonical format
o debugger
- fixed how debugger reacts to SDLTV right mouse button - not
duplicating breakpoints
o tia / video
- calculation of sprite pixel corrected
- reworked code for clarity
- moved TIA HMOVE into its own package to prevent circular imports
between the TIA tia and video packages.
o sdltv
- improved cursor display - the currently affected pixel is now
visible "through the cursor"
- debug colours (just the players for now)
- hmove type now uses a latch to keep track of when hmove event is
over, rather than the rather clumsy and prone to error method we
had previously. this goes someway to fixing a bug in the
emulation caused by late HMOVEs
o polycounter
- modified MachineInfo() output
- updated test routines to reflect changes to MachineInfo output
o debugger
- added DEBUGCOLORS toggle to DISPLAY command
- PLAYER command in verbose mode now prints player 0 and player 1
side by side for easier comparison
- similarly for MISSILE command
- verbose PLAYER output now includes commentary of the sprite size
setting
- similarly for MISSILE command
- corrected initialisation script error output
- removed tab completion time limit - can now cycle through options
until another key is pressed
o television
- improved screen size detection and stability routines
- this currently breaks the fix we had in place for Plaque Attack
but I think we can probably fix that some other way
- renamed some files in memory package
- removed unused functions / parameters
- corrected location of TIM*T registers
o cartridge
- implemented cartridge RAM
- now working (not withstanding other bugs)
* Crystal Castles
* Donkey Kong (Homebrew)
* Gauntlet (Homebrew)
- bank switching now occurs on write as well as read
- now working
* MsPacman
- removed TVState construct
- GetTVState now returns an interface{}
- after second thoughts TVState was too clumsy. debugging targets
can be constructed with the genericTarget struct
- the only thing we've lost for now, is automatic consistency of
labelling but I think that can be solved more elegantly
o debugger/targets
- parse targets now wraps GetTVState results in genericTarget struct
o panics
- all panics now follow the same pattern - no mixture of Sprinf()s
and Errorf()s
o disassembler
- parseMemory now reaches all areas of the ROM
- reworked disassembly routines so that it works better with
multi-bank cartridges.
- unfinished
o cpu
- reworked cpu testing routines
- NoSideEffects has been changed to NoFlowControl
* this means that memory is now written
* it is intended that NoFlowControl CPU instances be supplied with a
memory shim that can filter out write addresses as appropriate
* this was done so that we can see switching of cartridge banks