This would definitely be possible if the expansion bus exposes enough CPU signals to:Dbug wrote: ↑Tue Apr 24, 2018 7:39 amI wonder if it's possible to implement "ripping cartridges" on the Oric.
On machines like the Commodore 64, Atari ST, etc... it was possible to plug cartridges on the expansion bus, and by pressing some button you would reset the machine using the cartridge instead of the on-board rom, which would preserve the state of the memory and allows you to see what was there, search for graphics, fonts, sprites, but also disassemble source code or view memory in hex, eventually saving that to disk.
I guess on the Oric that could be done with a dual ROM, or maybe by replicating the Microdisc boot process with a 16KB eprom overlayed on top of the ROM.
- generate an interruption
- freeze the CPU while acquiring bus master status.
If this is the case, I can imagine two possible ways to do this nowadays:
Dedicated CPU (Arduino/PI)
An Arduino or Raspberry PI can be used to generate all the signals necessary to freeze the CPU, drive the address bus and CAS/RAS lines and would also have a few input lines to read the results on the data bus.
When the button is pressed, the cartridge freezes the CPU and emulates all the signals of a full bus master in order to read all the bytes in memory.
It would also have to trick the CPU into revealing its internal state, possibly by forcing it to execute code generated by the cartridge.
Most of the work would be to write the software to generate all the signals of a full bus master. This would be quite complex and tricky to tune properly.
Classic : logic + ROM
Essentially do what the ripping cartridges on other machines did:
have just enough circuitry to generate an interrupt and place its own interrupt vector in memory instead of those in RAM.
When the button is pressed, it generates an interruption and its own ROM code is executed which can then execute whatever it wants and store the memory + state of the CPU in a file on disk or tape, or in flash memory.
This is relatively simple to do nowadays with just a few logic gates and possibly a CPLD since all this does is generate an interruption signal, and decode a few addresses. All the dumping and saving logic is just regular ORIC code located in the ROM.
The simpler way to proceed overall would probably be to start with a ripping cartridge for the C64 and adapt it for the Oric.
I guess that the expansion used by JeDe for Orix would also be a good starting point.