- 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
- 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.
- 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
- 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.
- 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
- collisions registers are set only when they need to be altered and
not every video cycle - dramatic increase in performance
- futures now implemented with a linked list
* improves performance when number of pending futures is low
o sdltv
- improved frame limiter (not yet perfect)
o gopher2600
- run and fps modes correctly report error on failure
- without checking, I'm pretty sure this was removed in error in the recent past
- 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
- fixed stability detection - increased number of required
consecutive frames to six.
- this fixes an issue with the homebrew donkey kong rom under
certain circumstances.
- tidy up of command line parsing
o regression testing
- added regression package
- implemented simple database to facilitate regression tests
- uses DigestTV
- implemented a headless television that can save the last image to a file
o DigestTV
- implemented a headless television that updates a screen digest
every frame
o gopher2600
- added "regress" mode. uses digesttv and will be used as the basis
of a complete regression testing mode
- window is now resized according how and when VBLANK is
switched on and off
- implemented stability check to limit when window resizing occurs
- Dragster now works correctly
o television
- improved how out-of-spec television signals are handled
- added new request type SETVISIBILITYWHENSTABLE
- SETVISIBILITY request type now accepts optional second argument
for whether the screen should be updated when visiblity is true
(some code paths will deadlock otherwise)
- updated Signal() interface - now propagates errors correctly
o gopher2600
- run mode now uses SETVISIBILITYWHENSTABLE
- fixed onclose event
- close callback is now called
- this was inadvertently removed sometime between faaf21a99ea6bbe711d258b1785700f8c3f8a9fe
and a45d1fcdd0b198f04d9757cd27add880981e1e46
- improved (slightly) how out-of-spec displays are handled
o regsiter_test
- tweaked test functions
o futures
- fixed resolution of individual instances
- 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
- corrected initial state of break and interrupt disable flags on
startup
- result.InstructionData now set as soon as possible in all
instances
- corrected RTI implementation
- corrected RTS implementation
- implemented some undocumented instructions:
0x0c skw
0xb3 lax
0xc7 dcp
0x4b asr
- a homebrew version of pacman (pac-man_4k.bin) now works (up to a
point; not sure if bug is in the implementation of the new
instructions or is a video issue)
- new effect classification "Interrupt" for BRK and RTI
- instructions_gen program is now more robust
o disassembly
- added validity check to ParseMemory() function
- Dump() now uses strings.Builder
o result.Instruction
- corrected GetString() function
- function would panic when in videostep mode
- bug most probably introduced in 58f452cf52343eb27fb495b3b0f6e6675806203f
- improved output of IsValid()
- disassembly of problem line is now included as part of the
error string
- 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
- 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
- "mode PLAY" is now a synonym for "mode RUN"
o chip memory
- implemented PeriphBus interface
- controller now uses PeriphBus interface
- panel now uses PeriphBus interface
o hardware
- consolidated controller and panel packages into peripheral
package
o assert
- added GetGoRoutineID function to help with debugging/testing
- not for general use. it's too slow and in bad taste
- refactored SDL television
- implemented close window for SDL windows
- backquote key toggles screen-mode (debug guides on/off)
- window resizes to fit screen-mode
- sketched in mouse support for SDL implementation
- the intention here is to be able to select breakpoints
with the mouse
o concurrency
- made sure shared memory is locked for all go routines
o errors
- reworked gopher errors a little
- 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
- symbol loading
- printing of disassembly now uses symbols (if available)
- run mode disasm now works as expected
o errors
- added GopherError - started to replace calls to fmt.Errorf()
with instantiations of GopherError
o debugger
- prompt now shows (brief) disassembly of next instruction to be
executed
- ball, missile and player sprite types added - tidy up of
sprite class
- properties moved from video type to the correct sprite type
- delayCounter now renamed and reworked as future. it was felt
that needlessly conflicted with the VCS concept of vertical
delay
- completed horizontal movement for all sprite types
o correction of assorted linting errors
- fixed bug caused by RMW version of instructions working on the
accumulator rather than the memory value via a temporary
register
o debugger / traps
- fixed segfault caused by attempting to set a trap for illegal target
o video / playfield
- fixed bug when writing value to playfield
- clarified names and comments
- fixed write delay for playfield registers
- debugger can be launched without specifying a cartridge
- tidied up commands package
- sketched in filename tab-completion
- corrected tab-completion comments
- panic when list of options is empty
o debugger
- debugger now initialises with plain terminal
- other terminals are still specified on debugger.Start()
- this fixes a bug caused when trying to print error messages
from a startup script
- conversion of user input to upper cause is now more selective
- SCRIPT command added
- implemented cursor navigation
- implemented history
- ansi source file moved into it's own package
- created easyterm - wraps termios with additional functions
- cartridge file now required on command line when launching
*** versions prior to this used literal strings to specify the
cartridge, which may or may not exist if previous versions are checked
out of the repository
- video stepping doesn't callback to debugger when CPU isn't ready (like cpu
stepping)
- RIOT now only runs once per CPU cycle, instead of once per video cycle
timer now runs as expected
o tia/video
- tidied up sprite types for easier debugging/thinking
o television
- MachineInfo* now reports on whether tv is performing out-of-spec
o sdl tv
- added overlays
- cursor
- screen boundary
- pixel guide
o debugger
- replaced strings.Split(s, " ") and a small amount of post-processing,
with a single call to strings.Fields() - I've just discovered it.
- added STEPMODE command
- STEPMODE VIDEO will now print video step result (what it can of instruction
result)
- implemented script loading and running - no SCRIPT command just yet though
this is intended for initialisation for the time being
- added VERBOSITY and DEBUGGERSTATE commands
o cpu
- better, more complete, printing for instruction result
o sprite/drawSig
- counting drawSig the wrong way, causing pixels in sprites to be
flipped horizontally
- improved ansi color
- moved ui package to debugger/colorterm
o debugger
- replaced SHOW and HIDE commands with DISPLAY command
- DISPLAY command takes optional argument OFF
- replaced CLEAR BREAKS command with BREAK CLEAR
o sprites
- improved MachineInfo() messages
- ball sprite now ticks/pixels correctly
o debugger/breakpoints
- tidied up breakpoints implementation