Hello, retro friends!
I'm planning to build pretty complex device on top of RCbus-Z80 bus with multiple IO boards and existing straightforward IO address decoding (on many boards it's only partial decode when only a few address bits are used) may not be suitable in my case. I'm thinking about introducing /IORQGE signal into RCbus-Z80 ecosystem - let me explain.
Signal /IORQGE (IORQ Gate Enable) was a signal on original ZX Spectrum 48K (1982) edge extension interface that allowed peripheral device to disable internal computer IO response in some cases (effectively driving internal /IORQ up) - for example peripheral device wants to use some ports that are usually used by on-board computer hardware like alternative keyboard interface - or some port with more granular address decoding while internally ZX Spectrum uses very coarse few bits decode and it may inadvertently cover wider IO address range than needed.
When in 90s ex-USSR engineers built a lot of very different ZX Spectrum clones out of discrete components they turned ZX Spectrum edge interface into extension slots on some of them that looked as ISA slots, but had pinout of ZX interface even though they added something and changed something that mostly broke compatibility with original ZX interface they called this interface "ZX-BUS" (but now many call it NemoBus to distinguish it from original ZX interface). And one of the changes was introducing kind of "daisy-chaining" for /IORQ signal - slots got priorities - if board in slot N responds to specific IO address request it sets /IORQGE to 1 that will disable /IORQ for the rest of the bus and all other boards starting with slot N+1 will ignore IO activity until board in slot N is done (also computer on-board ports should have lowest priority so if some of the boards recognizes some IO address then computer itself will not respond). In order to achieve that every slot had 2 OR gates on motherboard that implemented that smart gating logic. If some inserted board doesn't drive /IORQGE in its slot then motherboard logic will pull-down this signal from this slot to 0 that will allow further chain of /IORQ signals to work properly.
Why might it be needed in RCbus/RC2014 environment? For example if we take original serial ACIA module then we will see that it respond to any port number that match 10xxxxx0 and 10xxxxx1, so it is not only 0x80/0x81, but also 0xA0/0xA1 (and even 0xBE/0xBF). What if we need to use 2 ACIA interfaces simultaneously - let's say 0x80/0x81 and 0xA0/0xA1? We may design a new ACIA module that responds to full 8-bit IO-address as 0xA0/0xA1 for example and when it's doing this it will set its /IORQGE signal to 1 to disable /IORQ for subsequent boards and one of that boards even might be original ACIA board that will happily ignore 0xA0/0xA1 requests and will only respond to other bit combinations including 0x80/0x81.
So I can design new RCbus-Z80 backplane with /IORQGE logic on-board - question is which signal of RCbus I can use for it? For example I see IEI/IEO (daisy-chain of interrupt requests) took some USER signals in 1st row, and BAI/BAO (daisy-chain of bus requests) took 2nd and 3rd signals in 2nd row - p42 and p43. What if I take p41 to represent /IORQGE signal or it has to be one of the unused USER signals? Is there any RFC-process to assign new signals to "reserved" pins in RCbus specification?
Any thoughts? Thank you!
Alexander "Shaos" Shabarshin