Hi Chad!
sburrow wrote:
By chance, which Dual Port RAM did you buy? Could I know a part number so I can go look it up myself? I'm interested.
At the moment dual-port RAM seems to be really expensive (like $10 - $15 per 1K!) or just plain unavailable from Digikey / Mouser. After trolling eBay for a few weeks I finally got lucky and found a guy selling a lot of 18 NOS
CY7C144 35ns ICs. At least, I hope I got lucky! These seem perfect, except that they're PLCC68. I ordered a PLCC68 breadboard adapter, but it hasn't arrived yet, so I haven't been able to test them. The seller was a US-based amateur radio guy with 100% feedback, so I'm hopeful. Anyway, it worked out to about $2.34 per IC, shipped (shipping was high, the ask for the lot was low) which seems OK to me. I doubt I need 18 of them so if you'd like me to shoot a few of them your way I'd be happy to.
About I/O in Zero Page:
I/O in Zero Page is Very Old Voodoo. It's not the first time I came across the idea, but one of the
Compute II articles I linked to earlier has a succinct description:
Gene Zumchak wrote:
When designing 6502 controllers from scratch, the address stealing method illustrated can be used to extract I/O addresses from zero page. Rarely is all, or even half, of zero page needed for scratch pad. Putting I/O in zero page not only can considerably cut program length, but also speed up execution time. In some of my early controller designs, I used a pair of 256 × 4 RAM chips, and decoded addresses so that the RAM straddled pages zero and one. The low half of page zero was thus available for I/O.
Of course, as soon as I started googling the idea I found Jeff's
very thorough treatment of the topic.If you think about the 6502 as a kind of hybrid RISC architecture, 128 general purpose registers seems pretty roomy (compared to 32 registers in a regular RISC processor). OTOH, if you think of ZP as a kind of slow CPU cache for system variables and such, even the full 256 byte page isn't very much. I can't answer every one of your questions because I'm kind of evolving this system step-by-step; but I do prefer to think of ZP as a big register file, rather than a tiny area of fast RAM. I realize these are only logical distinctions, but if I start thinking about register files I start thinking about (for example) how I can see a way forward for making a library of 32-bit operations by combining R00-R03 / R04 - R07 / R08 - R0B into 32-bit registers; whereas if I start thinking about RAM, I start thinking about how my jump tables won't be able to hold very many XINU system calls (if I ever get that far!) if they have to fit into 256 bytes.
Another way of looking at it is, if I eventually get this to the point where it really can operate as a video terminal for Blue April, fast I/O could be really handy. I don't know if I will need it or not; but it seems easier to make space for it now than to try and add it later if I want it and haven't got it!
As far as how much I/O, two VIAs, one or two ACIAs (do I need a separate one for RX and TX? I don't know how they work, yet), a CRTC (maybe), and some space for future expansion. I'd like to add some mass storage, at some point, and maybe some bank-switching. I've always kind of liked the idea of the cyber-decks from Neuromancer where you configure your system software by jamming in a big row of ROMs a la the BCC "sideways expansion."