notifications interface instance moved to environment from
cartridgeloader. the cartridgeloader package predates the environment
package and had started to be used inappropriately
simplified how notifications.Notify() is called. in particular the
supercharger fastload starter no longer bundles a function hook. nor is
the cartridge instance sent with the notification
this means that a mapper only needs to implement the Patch() if it makes
sense
mappers that don't need it have had the Patch function removed.
implemented function for SCABS and UA
corrected error messages for atari mappers - some messages weren't
referencing the correct atari mapper and simply stated "atari"
very few cartridge mappers need to return an error but is necessary in
the case of the experimental cartridge shim. merging here because it's a
good change to have
the decision whether to show cartridge menu is partly made on whether
the cartridge has a "RAM bus" available. atari cartridges (unlike other
cartridge type) always have a RAM bus but only some have a superchip.
the test for whether a cartridge has cartridge RAM has been made more
stringent
used by Activision's Robot Tank and Decathalon
updated method by which ParkerBros is fingerprinted. results are the
same but the code now matches other fingerprint methods
AudioTick() function in tracker interface accepts TrackerEnvironment
instance. tracker implementation differentiates emulation instances and
records AudioTick() information accordingly
CDFJ+ fingerprint now accepts any size file so long as the magic string
is present
all CDF variants can be specfied with the -mapping argument or by file
extension (in case fingerprinting does not work)
CDF0
CDF1
CDFJ
CDFJ+
CDF implies CDFJ
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
cartridge access is now divided into Access(), AccessVolatile() and
AccessPassive()
Access() and AccessVolatile() could easily be combined into one function
but I feel it is clearer to keep them separate
hardware/memory.go Read() function refined to be clearer about how and
when the cartridge is accessed
TIA undriven pins were already implemented but we need to be able to
have undriven pins from the cartridge too (when reading Superchip write
addresses). this is preparatory work for that
this is a curiosity as much as anything else and added to support this
game https://forums.atariage.com/topic/345290-going-bananas-atari-2600/
reading the description however and it seems likely that this will be
subsumed into a larger cartridge at some point. but still, it was an
easy addition
when plumbing from a different emulation BusStuff and CoProc were not
updated. this was visible in the timeline thumbnailer for ROMs that
relied on bus stuffing for screen rendering from a coprocessor
error introduced in 8497d95f
more careful enabling/disabling of cartridge breakpoint. we don't want
them triggering during rewinding or during startup, for example
transition from playmode to the debugger when a breakpoint is triggered,
works better - still not perfect though
UI is rudimentary for now and of course, there is no local variable
inspection
implemented for CDF and ACE only for now. DPC+ will use the same
technique as CDF once it's been finalised and ELF will be similar to ACE
BusStuff and CoProc functions are called a lot and type assertions are
moderately expensive and noticeable when done frequently. by making the
assertion in when the cartridge is inserted we can reduce the test to a
simple boolean comparison
returns a CoProcState value rather than a boolean value
updated prompt building and debugger reflection overlays to work with
new type and values
commentary introduces the idea that coprocessor state is about VCS
synchronisation
ELF will call ExecutionStart() and ExecutionEnd() as appropriate for the
change of state. this needs work because the meaning of "Execution" in
context of StrongARM type synchronisation is unclear
the callfn package previously assumed that all ARM cycles would have
been accounted for (on the VCS side of the ledger) before Start() was
called agin
renamed CartBreakpoints interface to CartCoProcExecution
reflection now used CartCoProcExecution.CoProcIsActive() to determine
when coprocessor is active, rather than the clumsy BankInfo mechanism
this means that cartridge types that need that information can implement
the FrameTrigger interface and act accordingly.
this was added for the ACE format so that it can update the ARM
preferences less frequently. this gives a small but significant
performance improvement. it also applies to DPC+ and the CDF formats
although performence improvement is less noticeable in those instances
because such ROMs tend not to call the ARM program that frequently
thumbnailer was running in a different goroutine to that which the state
being used to generate the thumbnail was create in. there's no way of
making that safe except through mutexes or similar. that's too much
overhead for something as inconsequential as a timeline thumbnailer
timeline thumbnailer now runs in the same goroutine as the main
emulation, bypassing these problems. scheduling of when thumbnailer runs
is now done manually
"Live" TIA Revision values replaced with atomics. small performance
improvement
execution is currently outside of cartridge address space. The NonCart
flag is set in addition to the cartridge information
improved how the disassembly window shows coproc/non-cart execution
information, particularly when both conditions are true at the same time
file extension and -mapping option to indicate superchip for mappers
that support it, changed SC rather than +. For example, "2KSC" and not
"2k+". This avoid confusion with mappers that use the + symbol for other
purposes (for example, DPC+)
cartridge.Attach() will log cartridge insertion with mapping ID
information
removed description field from all cartridge mappers that still had it.
the field was no longer referred to but we may add something similar in
the future
addresses and bus interface removed and split into cpubus and chipbus
packages.
ReadZeroPage() no longer has any distinction from normal Read()
function.