![]() The Transactor Online Archive has Volume 1, Issue 1 (April 1978), thru Vol 9, Iss 6 (August 1989) as pdf files of entire magazines. Transactor Disks are also available. Thanks to Craig Bruce for preserving one of the better publications of that era. |
![]()
The C128 80-column Video Display Controller had its own memory (16K in early models, 64K in later ones,) apart from system RAM. This RAM could only be accessed through the VDC. In early model 128s, 4K of the 16K was unused. This was enough to hold a copy of a full screen of text and attributes. A little was left over to store two sets of Screen Editor values. If one of the character definitions that resided in that RAM was unused, that range of addresses could be used to store another screen.
The Commodore 64 had 64K of RAM and 20K of ROM. On power up, 38K was available for BASIC programs, with a 4K area for machine language or other data. The remaining RAM was said to be "hidden'" because it was "under" the system ROMs and memory-mapped I/O. This hidden memory could be accessed only by using machine language to bank switch -- temporarily or permanently switching out the ROMs, a risky thing to do. The somewhat overstated dread regarding addresses $D000-$DFFF mentioned in Transactor's blurb was due to that range having three levels of resources, though not at the same time -- I/O, Character ROM, and RAM -- not just RAM and ROM like the other ranges. Inspired by the C128 Kernal JSRFAR and JMPFAR routines, FAR-SYS allowed user-written programs to execute routines located in hidden memory. Obviously, a user had to be skilled enough to write M.L. that would execute in hidden memory in the first place. (That's why this program was submitted to Transactor and not some other magazine.) FAR-SYS could be utilized in BASIC or M.L. In BASIC, it more resembled the C128 version of SYS, passing register values to the 6510 microprocessor within the statement, rather than first POKEing them into memory locations the system reserved for that purpose.
SYS FAR, TARGET {,a}{,x}{,y}{,sr}
The routine provided six "Banks" or configurations; combinations of RAM/ROM/I/O in effect while the hidden code was executing. When the hidden code finished executing and returned to FAR-SYS the C64 was set back to the configuration in effect before it was called, which may not have been the default power up configuration: a cartridge might have been plugged in, adding enhancements to BASIC; the BASIC Interpreter ROM might've been switched out after copying its contents to underlying RAM and modifying it to do things differently; the same could be done with the Kernal Operating System ROM.
FAR-SYS also had a subroutine, FARJSR, to temporarily switch the ROMs back in to allow hidden code to access ROM routines, then switch ROM out again and continue executing in hidden areas. I included a demonstration program.
![]() |