Quote:
We used illegal opcodes and a piggy-back board to add instructions to the 6502 processor. When we decoded an illegal opcode, we floated a no-op onto the instruction bus (for a defined number of cycles) and then let our custom PAL decode what really should happen. Doing this, we added a “paging register” for the zero-page and 1xx page (which you know are special). For the 1xx page, we detected when stack overflows and underflows happened and auto-adjusted the 1xx page register. Doing this gave us a 256-byte window into a (essentially) 64K stack. This was instrumental in the Forth interpreter we used to control a custom radar dish (details not available, sorry). We also took advantage of the fact that the 6502 was a DC-clock-safe processor , and essentially stopped the clock while slower RAM was being accessed and over-clocked the processor when it was talking to zero-page stuff. Lots of memories there. BTW, this was 1979-1982 or so…
Quote:
Our project was to control the scan-speed of a radar dish in real time based on the return echo density. Simply put, we controlled the rotation of a standard (for the time) dish radar and watched the choes coming back. If we had very little return, we swept fast, if we had a lot of return energy, we slowed the sweep speed down to allow better fine-grained imaging. We decided that the 6502 was the best chip for the project because we both knew it well, loved the DC-safe clock, and knew how to hack the instruction bus float. Bill wanted to use Forth, which was fine with me (I was most comfortable in 02Asm or C at the time, but whatever).
The hacks we made were:
1) Automatic recognition of stack underflow and overflow on page-1 access via stack instructions, allowing a full 64K stack (in separate memory). Basically we watched pushes and pops and incremented/decremented a stack page "register". We added instructions to set/read the SPH (16-bit) and SPL (8-bit).
2) A similar trick with a "current page 0 register offset" that allowed all the 0-page instructions to target a complete 64K ram (in separate VERY FAST ram). No automatic underflow/overflow management, but ZPH and ZPL set/reads.
3) A dynamic clock that sped up the processor clock whenever instructions were accessing either 0-page or 1-page (e.g. stack or scratch) and slowed it down when accessing any other memory (e.g. the rest of the original 64K memory space).
4) Memory-mapped access to the radar controller data in 8000h area, which was "dynamic" and reflected the current radar returns (with simple time-signatures) to allow us to block-read the data and "just keep reading" until we hit the end.
5) Writes to this area would drive a "radial" etch-a-sketch device (high address byte being rotation and low byte being distance from center) with single LED that varied in brightness according to the return density we were seeing. This was originally intended for development, but the display was easier to read quickly than the analog scope that was getting the raw scope-return data... so we built these as "add ons" for the units. The scope used voice-coil drives from a couple Qume Datatrack-8 floppy drives.
As for hardware build, we bought 500 CMOS ceramic packages (instead of plastic for better heat dissipation) and hand picked to find the ones that would run reliably at 2MHz (burst speed when doing 0 or 1 page stuff). We also bought some very fast RAM (for 1979-80).
The hacks we made were:
1) Automatic recognition of stack underflow and overflow on page-1 access via stack instructions, allowing a full 64K stack (in separate memory). Basically we watched pushes and pops and incremented/decremented a stack page "register". We added instructions to set/read the SPH (16-bit) and SPL (8-bit).
2) A similar trick with a "current page 0 register offset" that allowed all the 0-page instructions to target a complete 64K ram (in separate VERY FAST ram). No automatic underflow/overflow management, but ZPH and ZPL set/reads.
3) A dynamic clock that sped up the processor clock whenever instructions were accessing either 0-page or 1-page (e.g. stack or scratch) and slowed it down when accessing any other memory (e.g. the rest of the original 64K memory space).
4) Memory-mapped access to the radar controller data in 8000h area, which was "dynamic" and reflected the current radar returns (with simple time-signatures) to allow us to block-read the data and "just keep reading" until we hit the end.
5) Writes to this area would drive a "radial" etch-a-sketch device (high address byte being rotation and low byte being distance from center) with single LED that varied in brightness according to the return density we were seeing. This was originally intended for development, but the display was easier to read quickly than the analog scope that was getting the raw scope-return data... so we built these as "add ons" for the units. The scope used voice-coil drives from a couple Qume Datatrack-8 floppy drives.
As for hardware build, we bought 500 CMOS ceramic packages (instead of plastic for better heat dissipation) and hand picked to find the ones that would run reliably at 2MHz (burst speed when doing 0 or 1 page stuff). We also bought some very fast RAM (for 1979-80).