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
stipulated that the coprocessor takes extended register values in the
Register() and SetRegister() functions. extended register check in
coprocessor implementation (ie. ARM)
a cartridge with a coprocessor that had failed for some reason would
cause the thumbnailer goroutine to halt
in the case of the thumbnailer.Image type this would lock the UI
goroutine. and in the case of the thumbnail.Anim type it would lock the
goroutine that had been launched to produce the animation
added YieldHookResponse to better indicate the intention of the
CartYieldHook
this makes more sense and is easier to understand and think about. if
the index for the adddress is needed, then it can be attained simply by
subtracting the origin from the address
AudioTick() function in tracker interface accepts TrackerEnvironment
instance. tracker implementation differentiates emulation instances and
records AudioTick() information accordingly
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
the ARM implementation now keeps track of the current stack frame. the
stack frame is used as the framebase of a location list if there is no
location list specified for the function
only local variables that are stored in registers are handled at the
moment but that's good enough to show the basic breakpoint mechanism
works
sketched in local variables window
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
the returned value is true if the ARM emulation should 'give up' for the
time being. when this happens it is assumed that the state of the
emulation is not ideal and so drifting by a couple of video cycles (at
most) is not an issue - we'll try to remove even this small deviation
in the future but it's not a priority
A YieldReason, other than YieldForVCS, when in playmode will cause the
emulation to switch to debugging mdoe. there are possible issues with
this but for now it works
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
gpio_mode is reset after first BusStuff(). without this reset, the bus
stuffing signal will persist and pollute future memory accesses that
might happen before the next ARM execution
CartCoProcNonRelocatable is used by ACE so that the developer package
can associate source code with executed addresses correctly
CartCoProcDWARF simplifies the CartCoProc interface and moves the
DWARF() and ELFSection() functions
this completes the work done in e605c018
the reset can be done automatically but as an optional operation. it has
been discovered that in some situations more preparation is required
before the cartridge is reset. particularly, ACE/ELF type cartridges
where the ARM may executed before the coprocessor disasm/developer
packages are initialised and attached