I am working on a project that I hope I will be able to finalize and release as OSHW.
The project to design and build a simple 286 to 386SX adapter. (No FPU slot and no on-adapter caches like the commercial ones had.)
For the most part (after hours and hours of datasheet reading and comparison), this seems pretty straight forward, and I have created the relevant KiCad footprints and symbols, and have a partial schematic.
However, there is one remaining design issue remaining.
I have 3 input signals from the 386 cpu that need to be translated into 3 286 signals, and there is a total of 7 valid combinations.
I know the original commercial products that did this used GAL chips, and that looks like the most likely solution, but those are
impractical since they require a GAL-capable programmer, making it much more difficult for others to build a replica.
GAL chips have also not been produced for nearly 10 years, so they might not be the ideal choice.
Simpler solutions I have considered:
- I considered using EPROMs, but I expect that those will be too slow for this to actually work, since these are bus-control signals
and should be able to work at up to ~16-20Mhz with unknown latency requirements.
- 74-series logic chips. This might work, but I have no idea how to build what I need.
- A bunch of discrete transistors. Should work, but I suspect I would need a lot of them, and probably easily gives design-errors.
(A tool to generate this kind of translation using transistors or 74-series chips would have be cool)
So I thought I'd check with you guys whether you know of some great/simple solution to this.
The following are the relevant signals.
286 Signal 386
M/IO COD/INTA S1 S2 M/IO D/C W/R
0 0 0 0 Interrupt ack 0 0 0
1 0 0 0 halt/shutdown 1 0 1
1 0 0 1 Mem data read 1 1 0
1 0 1 0 Mem data write 1 1 1
0 1 0 1 IO Read 0 1 0
0 1 1 0 IO Write 0 1 1
1 1 0 1 Mem code read 1 0 0
As you can see, the M/IO signal can be passed through as-is, but it is also needed as an input to distinguish between the other combinations.
Edit1: Fixed 386/286 typo, and changed TTL in subject to CMOS.
Edit2: Changed back to TTL in subject