Cool idea Richard!
Only one person, ever claimed to successfully expanded the memory of a Kenbak-1 computer past 256 bytes. That's "Tom Crosley" who purchased his Kenbak-1 after seeing it advertised in
Scientific American magazine. He later sold his computer via eBay to Erik Klein in 2004 (story on
https://www.kenbak.com/provenancedetails#h.bwkx9g84fvcz).
If you read at the
Amateur Computer Society newsletter (
https://archive.computerhistory.org/resources/access/text/2012/03/102654910-05-01-acc.pdf) and search for the word "kenbak" you can find all the Kenbak-1 related articles, and Tom's letters. In June 1974 (one month before the "Mark-8 Minicomputer" made the front page of "Radio Electronics" magazine) Tom wrote the following:
"To the basic Kenbak-l, so far have added interrupt system plus real-time clock (1 second interrupt); am just completing a full duplex TTY controller (at first I used serial I/O for the TTY); am adding a paging register to select one of (initially) 16 128-word pages (only in effect tor addresses 204-376; the lower addresses -- and all registers in memory -- will be available independent of the page register), Am making use of the "don't care" bits of the NOP instruction to add 15 I/O instructions which will be single word (data set up in registers)."
If you read that closely, it sounds like he's still working on it, but it doesn't sound fully worked out. I emailed him several months ago, and he says he did get the memory expansion working, but even if he did, he describes a very hard way to do it.
If I were to make a memory expansion, I would just page in and out locations (octal) 200-377 so that locations 000-177 always stay constant and available for the "core" of the program. For the page register, I'd select memory location 177 (octal) to be the page register, and anything written to that location, selects a new page for upper-level memory. I'd monitor the L-register (which is the current "location" of the byte circulating out and in of the serial memory, and when the L register is 177 (all bits high) shift that memory byte into a 8-bit "shift" register, with a parallel output. The parallel output of that shift register will then go into a DEMUX chip, and select different memory banks. So I think you can do this with only a few chips, and a handful of 1404a shift registers.
That way you don't have to construct any "new op-code" you simply write to location 177 when you want to select a new memory page, and the 128 bytes from 200-377 will automatically be changed out. You may need a few MUX or DEMUX chips to handle recirculation of the serial memory output into the input when that memory bank is not selected, but when it is selected, the regular recirculation data through the computer would be used.
Would that make any sense? Is that anything similar to how you had planned to expand memory?
- Thomas (a bit of a Kenbak-1 nut, I guess.)