also removed 6507_functional_test build tag from the package. the
original idea was to exclude the package because it took relatively
longer than other tests but it is now considerably faster. the speed
comes from not recording the execution history, which is only needed if
the functional test fails for some reason. if the test does fail, then
the test is run again with history recording enabled
added ExpectApproximate() function to test package
the test harness can also create a pprof if required
- preparation for adding 7800 emulation
cpu (6507) package uncoupled from upstream dependencies
- cpu no longer logs execution of KIL instruction
- randomisation of registers on startup can be handled by the called of
the cpu's Reset() function
- address errors are filtered by an optional IsAddressError() function
in the Memory interface implementation
- Error field removed from execution.Result type
all references to interface{} replaced with any
checks that linters exist before proceeding. project URL for each linter
in the Makefile comments
only go-errorlint and unconvert used at the moment
fixed all lint errors for the added linters
the logger.Permission interface indicates whether the environment making
the logging request is allowed to create new log entries. the
environment.Environment type satisifies the Permission interface
logger.Allow is provided as a convienient way of indicating the the log
entry should always be created
bug introduced in db2d84c39, which would have first appeared in release
v0.27.0
this subtle bug broke the alignment of the ball and missile in the worm
whomper demo (by Manuel Rotschkar)
this fix adds the cycle boundary after the lo-byte read of the
destination address
AudioTick() function in tracker interface accepts TrackerEnvironment
instance. tracker implementation differentiates emulation instances and
records AudioTick() information accordingly
the bugs fixed as a result of testing:
* 6502 stack now is hardcoded to sit between 0x0100 and 0x01ff
- new StackPointer type (instead of a plain Register type) handles
the addressing of the stack through the Address() function
- the VCS memory subsystem already masked the address bus correctly
* status register BRK flag always set regardless of Load() value
- this means that popping the status register from the stack will
reset the BRK flag correctly
ROMVectors test is disabled
build tag of "6507_functional_test" required for new tests (because test
is slow and we don't need to run it on a regular basis)
curated package predated the standard errors package introduced in
go1.13
the standard package does a better job of what curated attempted to do
the change of package also gave me a opportunity to clean up the error
messages a little bit
applies to Cart RAM window too
VCS RAM window shows extent of stack. tooltip shows predicted address in
event of RTS
DrawByteGrid() function is more flexible. old method is available as
DrawByteGridSimple()
checking of operators for a match were trying to match uppercase
mnemonics and not the lower case we've changed to. visible in incomplete
disassemblies - not see "jmp" or "jsr" correctly
moved DefnCycles from disassembly.Entry to instructions.Cycles type.
and now created during generation of instructions table. it makes more
sense to have the formatted string nearer the source of definition and
simplifies the disassembly.Entry type.
addresses and bus interface removed and split into cpubus and chipbus
packages.
ReadZeroPage() no longer has any distinction from normal Read()
function.
INPTx data mask was wrong. bit 6 is now "driven"
ZeroPageIndexedX and ZeroPageIndexedY did not cause a phatom read as
they should. cycles were accumulated correctly but no phantom read - I
missed this when adding the phantom reads to the CPU
resetting the CPU when a new cartridge was inserted left the Defn field
of the LastResult type in a nil state. the CPU now checks for nil and
returns a sentinal error. error is caught in Start() function and
discarded
new counter package added (sub-package of reflection)
this new counting method is fast enough to be run while in playmode,
which means that historical timeline information is immediately
available in the debugger
Instruction boundaries can be inferred by the debugging input loop,
which is the only place it is requred. reworked GetAdjustedCoords() in
the televsion package (now called AdjCoords()) to cope with this.
ReqState() is totally replaced by GetCoords()
legitimate errors include reading cartridge address with no cartridge
inserted. rewind will now check for CPU/Result state before logging and
returning before any recording has taken place
BRK instruction consumes two bytes but records only one. when
video-stepping over a BRK instruction this caused an error because the
adjustment to the number of bytes read value was done too late
implemented deep-poking of playfield values. there may be pathological
instances where this does not work. not all addressing modes have been
added to the deep-poke function.
to be clear, non-playfield graphic elements (player, missile, ball) have
not had this feature added yet.
will probably also require some way of feeding back information, making
it clear what has actually happened or actually changed. changing of an
immediate value should probably trigger a redisassembly.
added IterateBlessed() function for Disassembly type. more convenient
method of outputting disassembly to a string.
instruction defintion notes whether opcode is undocumented
linter flags use of undocumented opcodes
renamed DISASSEMBLY command to DISASM
added single address disassembly to DISASM command