• Please review our updated Terms and Rules here

30 pin SIMM memory for RC2014 z80 Processor

-N2

New Member
Joined
Jul 27, 2021
Messages
8
Hi Everybody,

So as the title states I'm interested in rigging up some vintage 30-pin SIMM modules up to a z80, My initial thoughts are to use some programable logic as glue to the z80. Where the contents of the R and I registers are latched into the PLA and used to select between low/high memory space and one of 256 pages respectively. In theory that should provide 32 Megabytes of directly addressable space with some limitations.

To what end many of you might be asking yourselves, well my interest is in attempting to develop a preemptive multitasking OS. one where a hardware interval timer is used to interrupt the CPU and switch threads. With such a configuration one should be able to have 256 threads each with it's own compartmentalized 128KB of memory. I figure page ZERO would run the kernel that keeps track of everything.

Thoughts?
 
Where the contents of the R and I registers are latched into the PLA and used to select between low/high memory space and one of 256 pages respectively. In theory that should provide 32 Megabytes of directly addressable space with some limitations.

I'm not really an expert on Z80 assembly so I guess it's not surprising I find this statement confusing; digging around I think I see where you're going with this, but I'm not really sure this has any actual advantage over just using a latch that's set by an OUT instruction. Both will have the annoying property that every time you switch pages you're swapping the whole memory map out; copying between pages is going to be a pretty big pain in the neck, and I don't think you're going to get any inherent advantage out snooping the values of these registers off the bus during the refresh cycle vs, again, just mapping a paging register to an explicit OUT command.

If you want more granular paging one obsolete option is the 74LS612; it's a little awkward to use with a Z80 in its full capacity because it has a *12 bit* data bus for loading the registers, but it can turn 4 address lines into 12 in one package, IE, let you access 16MB in 4K chunks. Another option would be to use 74LS670's; they only have 2 address lines, so you'll be using 16K pages, but a pair of them turns 2 address lines into 8 for 22 bit addressing, and adding a third will give you 26 bits. Of course you can probably implement the equivalent of a 74612 or a few 74LS670s in a decent-sized CPLD if you're going that direction already.

I've been kicking around ideas myself for how to implement paging for a kind-of-enhanced TRS-80 half-clone I've been sketching out for too long now, and I still don't have any fabulous ideas. Radio Shack's paging mechanism for the 128K Model 4 is pretty laughably simpleminded (Chunky 32k pages and a weird way to refer to them) and I'm not aiming for binary compatibility with it, so I'll probably just settle for a pair of 74LS670s or something. (I don't think I care about having more than 512K, or maybe a meg, or so anyway.)
 
I have a RC2014-compatible Z80 SBC design with DRAM but I didn’t use 30-pin SIMM but instead use a 2meg DRAM recycled from 72-pin SIMM. https://www.retrobrewcomputers.org/doku.php?id=builderpages:plasmo:zrc Since 2-Meg DRAM has very similar signals to 30-pin SIMM (minus the parity data and control), it should be easy to redesign the board for 30-pin SIMM. I ported CPM and Wayne Warthen’s ROMWBW to the board, but I have not thought of multitask OS.

I used CPLD as the DRAM controller and memory bank circuit. There are 64 banks of 32K RAM. It is easy enough to change it into 32 banks of 64K RAM, but bank switching may be tricky.
Bill
 
I have a RC2014-compatible Z80 SBC design with DRAM but I didn’t use 30-pin SIMM but instead use a 2meg DRAM recycled from 72-pin SIMM. https://www.retrobrewcomputers.org/doku.php?id=builderpages:plasmo:zrc Since 2-Meg DRAM has very similar signals to 30-pin SIMM (minus the parity data and control), it should be easy to redesign the board for 30-pin SIMM. I ported CPM and Wayne Warthen’s ROMWBW to the board, but I have not thought of multitask OS.

I used CPLD as the DRAM controller and memory bank circuit. There are 64 banks of 32K RAM. Changing it into 32 banks of 64K RAM is easy enough, but bank switching may be tricky.
Bill
I've pondered if a small SRAM disk might help with that, making it accessible as an IO device rather than a memory. This way this scratchpad memory can be used while running code from any of the pages within a 32MB space.
 
I assume a mass storage device is essential to your multitask OS, so you can always count on having large temporary storage on the IO device. The other issue is when you switching out the entire 64K memory, you’ll need the exact same switching program located on the destination 64K memory bank. So how to install the identical switching program on all 256 banks is the challenge.
 
I am using this project as inspiration, the author does a great job explaining why linear addressing is superior to bank-switching small slices of memory. https://laughtonelectronics.com/Arcana/KimKlone/Kimklone_short_summary.html

That's certainly an... interesting, project, but it's a doing a lot more than what you described in your first post. It's basically slapping a whole additional level of instruction decoding/microcode in front of the CPU to "auto-magically" switch pages and do other magic like switching back to the default page for anything that looks like a zero page or stack instruction. Shadowing the I and R registers would essentially be exactly the same thing as a plain page register, other than you'd be doing weird magic to snoop the contents of the internal registers in the CPU instead of making them discrete. There's no auto-increment or other useful behavior that you get from that shadowing.

I mean, gotta be honest, if 64K segments is what you want the 286 is a pretty decent CPU that'll run rings around any plain Z80, already has a 24 bit physical/30 bit virtual address space, and already has all the built-in needful for doing "far" memory accesses to things outside your current code/data segments...

(* Or, obviously, there are other Z80-with-wings CPUs that might be more up your alley? The eZ80 is an obvious choice...)
 
Jeff Laughton, aka “Dr Jefyll”, is a fixture on 6502.org and he is eager to explain the inner workings of using illegal instructions as co-processor instruction. He is also an outstanding & patience teacher.

To stay in Z80 family, you may be interested in Z280. In 8-bit mode it is compatible with Z80 yet its DMA and MMU can reach 16 meg memory space. It also have native 16-bit mode. I’ve designed RC2014-compatible Z280 in both 8-bit mode as well as 16-bit mode. My first Z280 implementation used 16-meg 72-pin SIMM as memory but all these memory is wasted on the relatively slow Z280 (12Mhz) so the current model only has 2 meg of DRAM.
https://www.retrobrewcomputers.org/doku.php?id=builderpages:plasmo:z280rc

8-bit Z280 SBC:
https://www.retrobrewcomputers.org/doku.php?id=builderpages:plasmo:zz80mb:zz80mbr3

https://www.retrobrewcomputers.org/doku.php?id=builderpages:plasmo:zzrcc
 
Last edited:
Back
Top