Back to Projects

Character RAM, I/O RAM, 3K Expander  NEXT

Although this circuit looks simple, it's the most complicated to explain.

By intercepting and diverting one enable (VA13,) to the Character ROM, I was able to put 4K of an 8K Static RAM (6264) "under" it. This would allow me to create custom characters without losing any program memory space. (Wasting half of a 74LS139 decoder seemed more efficient than wiring a bunch of gates. Besides that, the unused 1/2 of the chip might be useful in the future for something else.)

PREVIOUS NEXT    

On powerup, because Configuration bits VC and CC are at logic zero, the Character ROM is ReaDable by both the VIC and the 6502, the normal condition. The underlying RAM, however, is always WRiteable -- like the "hidden" RAM in the C64. Bits 6 and 7 of the Configuration Register control the banking of Character ROM or RAM. VC contols what the Video Controller "sees" in Character memory address space and CC controls what the 6502 sees. (This sort of resembles part of the C128 architecture.) By copying the Character ROM to underlying RAM, altering it, then making that RAM visible to the Vid Controller, I could have custom characters without losing any BASIC memory space. When not used for custom characters, I could use that 4K for "hidden" code.

I couldn't very well leave half of an 8K RAM unused, so I made part of it occupy the 3K "hole" in the lowest 8K of Vic address space, called RAM1, 2 and 3. The Video Controller could only "see" the lowest 8K of memory and, of that, only the built-in 5K was available for video memory. With 3K now inside and on the BD and VA busses shared with the Video Controller, same as the built in memory, instead of "outside" on the 6502 CD and CA busses on the expansion connector, I could use that 3K for multiple text screens, bitmaps, or custom characters -- maybe even narrow characters for more than the default 22x23 display. It was necessary to cut 3 traces on the Vic's circuit board to make the VIC chip "see" internal 3K. These cuts, however, made it impossible to ever use external 3K. I hope to correct this short-coming in a future revision. I used the dipswitch from my earlier internal expansion to enable/disable the 3K to maintain compatibility with programs that wouldn't work with expanded memory. Buss expanders and external memory cartridges had made me used to setting switches to configure Vic memory, and my other modifications had other features that were software-selectable.

Finally, of the remaining 1K of the 6264, 512 locations were used for RAM in I/O space, $9200-$93ff. This very out-of-the-way location could hold short routines, a jump table for enhancements to BASIC or the Kernal, etc. The remaining 512 locations of the 8K are inaccessible.

PREVIOUS NEXT

Back to Projects