I appreciate your advice.
In looking over the 80387DX specs today...:
http://ps-2.kev009.com/madmax/madmax/files/cpudata/24044805.pdf
...I had a question: Why couldn't I design a daughter board which
plugs into the co-processor socket, one which routes signals through
the level converters, through the interface cable to my Cyclone V GX
dev board, which would allow me to monitor and sample the various
signals on the actual CPU itself?
I would then be able to begin step-by-step by introducing the equivalent
of an FPU-NOP instruction, which simply holds the #coprocessorbusy high
for a few clock cycles, and then releases it, etc., to get it to the
point where it's working that way? And then begin by attempting to
read a value from memory, or write a value to memory, and then to do
some simple integer manipulation, and then some other things, to the
point where I have the protocol worked out.
And then, I can begin introducing my own CPU ISA which is able to be
enabled as part of its own instruction stream.
As I understand it from the Pentium overdrive CPU that plugged into
the 80387 co-processor socket for the 80486 CPU, it basically took
over the computer and never relinquished control back to the 486,
but required the 486 to boot up to "tickle it" in just the right
way to get it to work.
With my CPU I could do something similar at one point. Boot up with
the standard 80386DX, and then switch over to mine with some tickling,
from which my CPU never returns.
I think doing this on the co-processor socket is an interesting idea.
I'll have to do some more reading. Everything I've read about the
asynchronous bus signals is on the CPU side, and only for a look-ahead-
to-the-next-address purpose. The FPU allowed asynchronous clock
speeds, and there are two clock inputs for that purpose, but it does
not have to use the second clock at a different speed. It can remain
fully synched to the CPU, which is what I would do.
It also looks like the 80386DX cannot clock below 10 MHz for some
reason. I'm considering using an Amd386 CPU, which I believe can be
clocked down into the KHz range from their data sheets, though that
may only be on more modern Amd386 CPUs which are used for embedded
systems, and not their ceramic counterparts from the 80s.
Baby steps:
(1) Daughter board with level converters and HPMC ports.
(2) Cyclone V GX dev board programmed to monitor and record
voltages on the coprocessor socket, and relay the same
for analysis, triggered by things like a write to a
specific I/O port for on, another for off, allowing
examination across single instructions.
(3) Introduction of the coprocessor-NOP instruction.
(4) Introduction of a "read memory" instruction
(5) Introduction of a "write memory" instruction
(6) Introduction of a "read, process, write something" instruction
(7) Movement forward to a full FPU capability that performs the
full FPU ISA, even if it's exceedingly inefficient.
(8) Movement forward to a full CPU capability that performs the
full CPU ISA, even if it's exceedingly inefficient.
(9) Optimization.
The Cyclone V GX board has 4Gb DDR memory (512 MB) and should be suitable
for loading DOS and Windows 95 at least, with only the lower 8MB or so
needing to be shadowed to the actual 80386 motherboard for the various
hardware devices. I'd like to get my CPU to the point where it could
boot Windows, and maybe some other OSes as well.
Once I'm there, I'll start introducing my other ISAs with ARM first. I'd
like to get it to the point where it can boot an ARM kernel on an 80386
architecture, for example, by having the hybrid ISA load a boot sector
which then sets up the CPU in a flat mode, switches ISA and transfers
control to the ARM code.
And last I'd like to introduce my own ISA.
I'd like to have the daughter board created by this time next year, and
have the coprocessor-NOP working by my birthday next year (August, 2017),
and have the read, write, read-process-write operations completed by the
end of 2017, with the full 80387 ISA coming quickly after that.
I am going to design the internal engine of the FPU to use the unum
format, and will translate to IEEE-754 encodings (not rounding modes, at
least not at first) with an in/out translation on load/store instructions.
-----
Doesn't this sound like a natural and logical step-by-step progression
for someone who wants to create an extended 80386 ISA (the LibSF 386-x40),
from someone who already has all source code to a custom 80386 OS that
boots, has full debugging abilities, and can be altered as needed?