Real Sports Tennis would cause a brief instability during the logo
bounce. the difference in VSYNC is one frame long and shouldn't
affect the stability
the MsPacman VSYNC event (when the bouncing fruit appears) revealed the
error in using the VSYNC history to make a decision
removed the "immediate desynchronise" option
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
when the tape was not playing the step() function returned a formatted
error saying the tape had stopped. the formatting process puts pressue
on the memory allocator and the frequency of the error (once per colour
clock) caused a noticeable drop in performance
the fix removes the error generation from the step() function completely
and also adds an early return if the tape is not playing
this prevents a visual resizing of the image at the moment when the
screen has synchronised. ie. the resizing happens and is disguised
by the synchronisation process
fixed spelling mistake in television preferences window
all SetPixel() function now set VBLANK pixels to 'VideoBlack' via a call
to GetColor(), rather than setting the RGBA values directly. except the
video digest, which remains a special case
this complete work from the previous commit 68263991f
setting the index field to NoSignal should be enough but some pixel
renderers may choose to still render the signal information
this completes the change started in 3284d9f7
- 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
simple was added so that regression database didn't need to change along
with the changes to the television (simple is an older television
implementation rather than anything really new). but now that the
regress package can redux playback files, there is now no need for the
'simple' version
added Replace() to database package
simplified Regressor interface
playback regressor can now be reduxed
regression Redux() now uses database.Replace() instead of separate
Delete() and Add(). this makes sure that the redux entry gets the same
database key once the redux has completed
removed -dryrun option from REGRESS REDUX
removed regression fails log. it wasn't well developed and not a
particularly useful idea
fixed television.SetSimple(). the signal function was not set correctly
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
removed audio overlay due to changes in TIA audio implementation. the
changes could be reflected accurately but the overlay is no longer as
useful as I originally thought
nvram data written to fa2_nvram directory in the resource path. not
emulating read/write time of flash memory
fixed GetRAM() information for CBS, DF and commavid
calls to Logf() which do no formatting replaced with Log()
calls to Log() with Sprintf() replaced with Logf()
error types sent without use of Error(), taken advantage of new logger
package features
correct construction of wrapped errors in eeprom package
messages from 3e+, wickstead design and supercharger
mnetwork would crash if only one segment was specified
the logic of SetBank() for 3e and 3e+ were swapped
this applies to the loading of ELF binaries that might have undefined
symbols. rather than reject the binary compltely, the emulator will
continue until the symbol is used during execution
this is to prevent possible issues with StrongARM functions being
triggered erroneously when the address is used in a non-executing
context by the ARM program. this doesn't seem likley but this is a
preemptive fix with no adverse consequences
signal history only copied if 'realtime' audio is being used.
the signal history is not required except for mitigations related to
'realtime' audio, so limiting the copy means a marginal performance
improvement for headless operation
TV Signal() implementation split into signalFull() and signalSimple().
the decision as to which is called is made once on instantiation, rather
than on every call to Signal()
small changes to tia/video and arm for clarity purposes
the SYMBOL command can now tab-complete the current list of symbols
there is more work to be done here to allow other commands such as BREAK
and WATCH to tab-complete on symbols/labels
clarified terminology for symbols package in doc.go
added extension directive. allows validation and tab-completion of a
command to be extended with additional parameters
added mapper.TerminalCommand interface. this interface works in
conjunction with the commandline package Extension interface
ELF mapper implements mapper.TerminalCommand and commandline.Extension
interfaces to give the CARTRIDGE command some ELF specific options
reverted dee9c15352. all extant ELF ROMs
work in streaming and non-streaming mode
simplified elfMemory.Snapshot()
simplified snoopDataBus() (strongarm function)
pull() and peek() functions explicitely handle instances when stream is
not draining
rewind package commentary. protection when adjusting frame during
findFrameIndex()
sum of samples is averaged and output twice per scanline for an output
sample rate of 31.4KHz
this fixes issues with ROMs that change the volume of the audio multiple
times per scanline
added *.wav to .gitignore
an F8 cartridge for example might look like it needs a superchip
but does not. specifying F8 on the command line would still add
the superchip because the check was still made
the OnYield() address is always the address of the most recently
executed instruction. using the current PC register value often means
that the address is pointing to the second word of a 32 bit instruction,
which is misleading
additional ARM preference option 'ImmediateCorrection'. for simplicity
this is tested for by users of the callfn package and the Accumulate()
function called accordingly
the 'ImmediateCorrection' option is not intended to be exposed to the
end user in the GUI
this is really intended to facilitate comparisons with the STM32
implementations of the CDF/DPC+ drivers
non-existant program memory was not logged as a memory fault. this
won't happen except in very unusual circumstances but it's good
for the error to be logged in the same way (ie. in the memory
fault window) as other memory errors