So yeah there were certainly 286 upgrade cards for XTs that would also allow a 287 to pop in as well
Sure, but like Chuck already said, that’s not what we were talking about. The 287 sockets on those 286 upgrade cards are speaking directly with the 286 using their own protocols, the claim being evaluated was if it were possible to put an 80287 into an 8087 socket without upgrading the CPU. And that’s a hard no… with one tiny exception I will clarify below:
I remember “coprocessor “ cards that popped in an XT, some even had something as strange as a 68000 to speed up spreadsheets.
Sure, but how is that relevant? You could theoretically interface any digital computer ever made to an ISA bus connector with suitable glue and write software that throws compute jobs at it, that doesn’t mean your device is a direct replacement for an 8087.
To really veer off into the weeds, in principle at least *with a 286 or higher CPU* you could replace the Intel math coprocessor with “something else” and transparently redirect/translate the x87 code so your arbitrary other hardware could execute the desired operation. This is possible because all later iterations of the x87 FPU are “slaves” to the main CPU, which handles all instruction fetching, and do the work of ”trapping” the FPU instructions and routing them to the coprocessor. It just so happens that these later CPUs, if the FPU is not present, also have the ability to process any trapped instructions through a specified error handler which can, for instance, consist of emulator software. Here’s an old thread about such software:
but as that thread also makes clear the 8088/8086 CPUs CANNOT do the same trick. With those CPUs x87 instructions just look like No-Ops, they have no capacity to trap them. With those CPUs the 8087 actually sits parallel on the bus and independently intercepts the instructions meant for itself; its relationship to the primary CPU is completely different from the 80287’s and the latter lacks the necessary hardware to run in that sort of role.
In short, the only way to *transparently* sub something else for an 8087 would be to build a dingus that sticks in the 8087 socket, replicates the 8087’s bus interface (which, again, is basically a subset to the 8086’s), and grabs the opcodes off the wire to shove into whatever actual compute hardware you care to use. (which I guess could maybe be an 80287 if you’re a true glutton for punishment and enjoy doing pointless things…) I’m sure it’d be very doable with a modern FPGA, but not so trivial for 1980’s vintage discrete glue.