- 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.
- 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
- 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
- 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
- added CARTRIDGE command
o cpu
- redid/clarified test for post-indexed-indirect addressing
o tia
- sketched in audio package
- altered video package and tia to make sure it fitted in correctly
- simplified run and stepping frontend to vcs hardware
- improved fps mode
o television
- removed extraneous members in headless class
- corrected setting of visible screen size
- added the concept of MachineInfoInternal - which is meant to be
provide deeper and probably inaccessible insight into the emulation
- added to accomodate new "TIA HMOVE" command
- retrofitted "TIA FUTURE" in the same way
- color terminal input loop now responds to gui events correctly
- fixed debugger/memory layer
- debugger/memory layer also now searches cartridge specific symbols
o television
- altered semantics of status requests (for clarity)
- added Reset() to television interface
- HeadlessTV implements Reset()
o regression testing
- now shows complete paths to cartridge file
- fixes confusion in regression output when cartridges with the same
name appear in different folders
o video/future
- rerolled future group Tick() function
- reverted motion clock timings from 480ff22670eb8898b0d15d5f884257232db584bf
- this visually breaks Keystone Kapers ROM again but this was
definitely not the right solution because the fix broke both Yar's
Revenge and the stress-test-cards.
* I really now need to implement automatic regression tests
o debugger
- implemented grepping of disassembly
- motion clock now works correctly
- sprite ticks now called correctly on motion clock
- vertical delay is now
- parallel future write buffers
- one for writes that tick off of the color clock
- and another one off of the motion clock
- additionally, each future instance has a ring buffer of length 3
- 3 seems sufficiently long
- ball sprite fixed (satisfies stress tests)
- missile sprite fixed (satisfies stress tests)
- player sprite fixed (satisfies stress tests)
- horizontal position of sprite now reflected correctly when HMOVED
- tidied up MachineInfo() and MachineInfoTerse() of all video elements
o television
- mask now only drawn if top and bottom are correct
- this fixes those roms that do not call vsync correctly
- still not perfect but at least we can now see the screen
- improved verbose machine info output
o cpu
- instructions with a WRITE side-effect tweaked
o gopher2600
- tv not displayed until it can be reasonably assured there will be
no errors
- reworked television module(s)
- SetVisibility()/SetPause() replaced with RequestSetAttr()
o debugger
- "DISPLAY SCALE n" now works
- tightening up of command template parsing - more error
conditions/messages
- search symbols now searches all tables and returns table id of found table
o memory
- renamed some files in memory package
- MapAddress now takes additional argument, readAddress -
used to apply the additional readMask is necessary
- removed readMask application from chipbus.Read() functions
- more convenient for readMask to be in MapAddress only
o debugger
- fixed DEBUGGERSTATE command
- ONHALT and ONSTEP now has optional ECHO argument
- added 0x80 - immediate 3-byte nop
o vcs
- reset operation now resets TIA and RIOT in addition to CPU
o cpu
- reset attempt mid-instruction now returns suitable error
instead of panicking
o debugger
- fixed breakpoint/trap check when it occurs mid-instruction
- broken in 6045b9a9b65d623800b8e386e06fe0fdfb71998f
- fixed PEEK command
- fixed SYMBOL command
- SYMBOL command now takes optional ALL argument - prints every
mirror address of the resolved symbol
- reworked breakpoints so that we can AND conditions together
- breakpoints are now checked every video cycle regardless of
current step mode - this is required if we want to break on
attributes like Horiz Pos (HP) which may jump over values in CPU
step mode
- tidy up how state requests are made
- added info requests
- implemented MOUSE info request
o debugger
- implemented 'LAST DEFN'. prints the definition of the last
instruction executed
- STEP now takes optional CPU or VIDEO keywords
- removed critical sections and replaced with channel
communication
- better lexing/parsing of command input
- break/trap on instruction effect (read, write, etc.)
(we had to implement a more flexible way of satisfying the
target interface for this. it works but it's a bit ugly)
- added universal symbols file
- chip memory definitions no longer include symbol definitions.
they use the new universal symbols file
o cpu
- moved instruction_result from cpu package to result package
o disassembly
- style parameters moved to new result package
o memory / debugger
- improved PEEK command implementation
- can now use symbolic addresses
- added ONSTEP command. similar to ONHALT but run every step
- implemented LAST command. debugger no longer runs the result
of the last instruction unless it is part of the ONSTEP
command sequence
- fixed printing of HEX. step mode video no longer crashes if
print style includes hex.
o video
- sketched in collisions support
o cpu
- BIT instruction fixed (zero flag is result of AND with
accumulator but sign and overflow flags are set with
reference to the value from memory)
- added SYMBOL command. searches for address label, returns
address
- fixed disassembly output for ROMs without a symbol file
- improved disassembly a little bit. now attempts to disassemble
entire of cartridge memory and doesn't bail out of loop
at first sign of an unimplemented instruction. cpu
package now returns a ProgramCounterCycled error when
program counter reads past end of memory
o video
- tweaked horizontal movement
- fixed player vertical delay (tested with Pitfall ROM)
- fixed ball enable detection (0x02 not 0x20. doh!)
o cpu
- implemented LAX command
- renamed 3 byte NOP to DOP
- added program counter information to unimplemented instruction
error
o gopher 2600
- error message now returned and displayed in run mode
o
- fully implemented player sprite
o playfield
- fixed reflection indexing
o debugger
- tweaked command parsing
o corrected CPU instruction definitions
- 0x19 was missing (mistakenly specified to be 0x10)