billylegota wrote:
In your primer you advised against having tons of expansion slots (in particular backplanes were a big no no).
What I advise against is having the processor's own address, data, and control buses go out on the backplane. You will frequently hear me refer to my "
workbench computer." This is a home-made computer I use for controlling processes and experiments on the workbench for work, taking data, etc.. I am building myself another workbench computer at the moment with more of everything than the current one has—speed, memory, I/O, A/D and D/A channels and with more bits' precision, bigger display and keyboard, better portability (even though it's bigger), etc.—and I'm using a half-rack-width 3U card cage with the same 96-pin DIN connectors that VME bus uses. The processor's own buses do not go out on the backplane though. They will not go off the CPU board.
What's on the backplane is mostly VIA signals, SPI, I²C, interrupt lines, reset, power, and ground, with quite a few pins left for future expansion. Boards other than the CPU board will have things like the power supplies and A/D and D/A converters and associated signal conditioning. I'm thinking strongly of having more than one CPU board; but again, they will not look directly at each other's own buses. I may have them communicate through a VIA's shift register, with an
SS22-type interface.
Quote:
I really have no use for more than a single VIA (as you have pointed out, the LCD and keyboard can be on the same one) and a single ACIA (still for serial).
My current workbench computer that I've been using for 23 years (although it has had many improvements over the years) has three VIAs and three ACIAs. The new one will have at least four VIAs, maybe five. This is partly to get more of the VIA pins that have special functions. As long as you leave room for the extra VIAs, they don't all need to be connected from the get-go if you're wire-wrapping (which I'm doing because I do tend to make changes and upgrades over time). The additional bus loading of an additional onboard VIA or two is pretty minimal considering all the other loads, especially the many megabytes of RAM that come in half-megabyte ICs.
I probably don't need three ACIAs anymore though, and the tentative plan is to have two MAX3100 14-pin SPI-interfaced UARTs which are also capable of IrDA (infrared link) timing. Our resident expert on trapping unused op codes for special functions seems to be succeeding in developing circuit tricks to trap the 65816's unused WDM op code and its operand to allow operating SPI at half the Φ2 rate and maybe even the full Φ2 rate (and without any concern for addressing modes or what's in the bank registers, since it's not memory-mapped I/O), so a byte can be sent or received in hardly more than the time of one of the longest 65816 instructions.
Quote:
Which of the following would you recommend:
1. Just put the single VIA and ACIA and leave the rest of the address space empty (this would keep board size, cost, and complexity down).
2. Put a single header that would allow for a second board to use the rest of the address space later (which would violate your advice but would allow expansion later if needed).
3. Put additional VIAs on anyway and just connect their IO pins to a header for later use (IRC would not violate your advice, which I think was only talking about the data and address buses, but would make the board more complex, larger, and more expensive).
I have somewhat answered that above. I will say however that on the current workbench computer, I originally brought most things to just the 72-finger board-edge connector; but then I had to wire up a separate 72-pin socket for every workbench project, and I couldn't have two or more of these connected at once unless I made up another big socket with the combination. I started adding smaller connectors for access to individual ports. That worked much better. The new one will have these along the front edge where they're accessible from the front of the card cage, but will also have sockets farther in for things like plug-in anti-alias filters for the data converters. This card cage has removable top and bottom panels, allowing access to the top and bottom too, so I won't always have to pull a card out to change a plug-in module. What you want to do with yours may dictate some changes in interface connectors.
Quote:
*by start and end of memory I mean 0x0000 and 0xffff respectively.
I tend to view it the way BDD wrote above, with "low memory" being that near 0000, and "high memory" being near FFFF (or the upper limit of the address range, which on the 65816 would be FF:FFFF, the colon being used to make it easier to read, just as 1,430,092 is easier to read than 1430092). I like to recommend using all capitals in hex numbers though, not just because 0-9 are always "capitals," but at first glance, lower-case f's look like 1's on my monitor because of how narrow they are. I do prefer the non-C "$", or putting "H" after a hex number like some assemblers like. I think both the PC-based assemblers I'm using now allow either the leading "$" or the trailing "H". It's personal preference though, I suppose. In other contexts, the "x" means you don't know or don't care what that digit is; so "0xFE" could mean 00FE, 01FE, 02FE, 03FE, etc..
I've spent enough time on this for one night. I might post pictures later.