- 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 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
- 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
- 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
- tidied up ansi module
o breakpoints / traps
- corrected comments
- fixed multiple traps
o lint check
- tidy up in response to lint check
o reverted String() to use MachineInfo() rather than MachineInfoTerse()
- 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
- implemented video in part
- implemented sprite framework - ball sprite completed
- reorganised existing tia code in repsonse to new code
o debugger
- tweaked existing commands and how they work
- implemented headless TV
o debugger
- VERBOSE is now called HALT - as in "auto command halt"
- no way of setting what command(s) to run on halt just yet
- a real verbose command that flips between verbose and terse printing
of machine state
o polycounter
- separated Reset() and SetResetPattern()
- filled in more of the TIA implementation
- RSYNC works correctly
- polycounter and other components altered as required
o television
- sketched in television interface
- implemented dummy television
o debugger
- syntax normalisation -- allowing variations in how we specify hex numbers
- added VERBOSE command
o renamed mflib package to assert
- Assert function renamed to CheckValueVCS
- added MEMMAP command
o tidy up
- changed pointer recievers to value receivers when the method does
not mutate the type instance
- I'm not sure about this but I like if for now - this way it is
clearer, to me at least, which methods mutate and which don't
o memory
- small reorganisation of memory package in preparation for
implementation of the video chips
o renamed project to "gopher2600"
- replaced both register implementations with just one that uses
32 bit integers as the underlying implementation. very smart and
very quick by comparison to the bit array implementation.
- registers must now be labelled, although the label can be the empty string
- this means that we specify the name for the register once, at
creation time, and not everywhere we print out information
o debugger
- breakpoints now takes advantage of register labels
- removed go routine implementation of cycle stepping; far too slow
- replaced with a callback implementation. I'm thinking that it might
not be as flexible but that in the long run that it doesn't matter.
besides, the speed difference is definitely worth it.
- reorganised register implementation
- existing implementation now call rbits
- added an implementation called r16bits, using uint16 intead of a
bit array
- only implemented Load(), Add() and the To*() methods
- just enough to speed up programme counter operations
- now sends a reference to InstructionResult over the result channel,
rather than a copy
o cpu
- adjusted register declarations to match changes in registers
implementation
o mflib
- consolidated assert() function into one package
o debugger
- sketched in debugger
- we now start one goroutine at cpu intialisaton and not one for each
instruction
- caching of all 8 bit and 16 bit patterns so we don't have to
generate them every time
- improved FPS between 70% to 100%
- added basic input loop
- primitive but effective FPS test
- added cpu profiler generator
o vcs
- cartridge attachment working properly
- now read reset address when machine is reset
o cpu
- fixed branching
- backward jumps weren't working
- cycle count sometimes wrong
- fixed cycle counts for pre-index and post-index addressing
o
- refinements
- added white-box testing
o cpu
- moved cpu definitions into its own package
- no longer requires csv file at run time
- csv parser moved into a code generator, embedding the data into
the code
- needs refinement
- StepCycle to be be used if cycle level of granularity is required
- StepInstruction provided if coarser control is preferred
- definitions.csv corrected
- behaviour of status register ToUint8() corrected
o memory
- MockMem now inherits from main memory implementation and adds
functionality where required
- 6502 implementation is basically correct but does not handle
- interrupts
- pre-fetch cycle
- anything less fine grained than instruction stepping
- memory sub-system sketched in
o retroactive adding of GPL copyright notice