plasmo wrote:
The link you provided didn't work.
Whoops! Somehow the scheme got changed from `http` to https` when I was editing. I've fixed that, and I've also linked the FM-7 mention to my notes page for that machine; there you can find links to technical manuals and suchlike, in case you want to investigate that. (Most of the detailed information has text only in Japanese, of course, but the diagrams and schematics usually use English names for signals and are fairly clear even without Japanese knowledge.)
Quote:
I have also have remapped the RC2014 bus to create a generic processor bus to explore processors of 1970's and 1980's with 8-bit data bus. I called it
G8PP. It currently accommodates Z80, 6502, 8085, 6809, and 68008. In G8PP bus the address, power, data pins are fixed, but control signals are assigned to CPLD so they can be changed by reprogramming the CPLD.
That looks pretty cool, and I'm going to take some time to study it. It looks as if it basically changes the bus pin assignments as necessary to suit the processor, though, right?
Just to be clear, what I'm aiming at with the "Z80 board on RC6502" thing is re-use of existing peripherals, even if that ends up with the Z80 system being less good or flexible in other ways, such as being unable to use 8080 IO space "ports" to access devices across the bus or mapping those to memory address space on the bus. A typical use case for me would be to test prototype Z80 code to use a new peripheral I've built: I'd have the peripheral board, an EEPROM board and a 6800 board plugged into the backplane, use the 6800 to program the EEPROM with the Z80 code I want to test, and then swap the 6800 board for a Z80 board and boot. (I'd either rejumper the EEPROM board or perhaps just invert A15 on the Z80 CPU board or something like that.) That would let me provide Z80 sample code to drive the device without building a second version of the peripheral for RC2014 bus or whatever.
Quote:
In CRC65, the expansion I/O memory space is 0xE800-0xEFFF.
Ah, right. And we should expect plenty of designers will want to maximize their contiguous RAM even at the cost of more decoding logic (not much more cost if you're already using a PLA, I suppose :-)). I had thought about this and forgotten about it (I really should have written this stuff down last year when I was first thinking about this design), so thanks for the reminder.
What I think we actually want to do is label a set of pins "/IO0," "/IO1" and so forth. /IO0 would be roughly defined to be the most common "expansion" or "external to CPU board" I/O space for each CPU board, so in the case of the A1 replica this would select for $C000-$CFFF and in the case of your board it would select for $E800-$EFFF.
Dealing with the sizes of the range is an interesting problem. Here's one thought off the top of my head. If we define the "standard range" of /IO0 and /IO1 to be $1000 the peripheral board will be responsible for decoding A0-A9. After the lowest bits for individual registers in the device the remaining bits would determine the base address of the peripheral, and I would typically use some jumpers to allow changing that. If we also suggest that we allow similar configuration for ignoring the most significant bits then the registers become mirrored in the length $1000 space: ignore A9 and you get mirrors at $0 and $800, ignore A9 and A8 and it mirrors at $0, $400, $800, $C00, etc. This allows those with CPU boards with larger I/O spaces to make full use of them, and those with CPU boards with smaller I/O spaces starting at offsets, such as $E800-$EFFF or $FC00-$FDFF, to enable the mirroring so they can still address those devices. Does that make sense?