As obsolete as the original IBM Model 5150 PC may appear, it’s pretty much the proverbial giant’s shoulders upon which we all stand today. That makes the machine worth celebrating, so much so that we now have machines like the Book8088, a diminutive clamshell-style machine made from period-correct PC chips; sort of a “netbook that never was.”
But the Book8088 only approximates the original specs of the IBM PC, making some clever hardware hacks necessary to run some of the more specialized software that has since been developed to really stretch the limits of the architecture. [GloriousCow]’s first steps were to replace the Book8088’s CPU, an NEC V20, with an actual 8088, and the display controller with a CGA-accurate Motorola MC6845. Neither of these quite did the trick, though, at least not on the demanding 8088MPH demo, which makes assumptions about CPU speed based on the quirky DRAM refresh scheme used in the original IBM PC.
Knowing this, [GloriousCow] embarked on a bodge-fest aimed at convincing the demo that the slightly overclocked Book8088 was really just a 4.77-MHz machine with a CGA adapter. This involved cutting a trace on the DMA controller and reconnecting it to the machine’s PIO timer chip, with the help of a 74LS74 flip-flop, a chip that made an appearance in the 5150 but was omitted from the Book8088. Thankfully, the netbook has plenty of room for these mods, and with the addition of a little bit of assembly code, the netbook was able to convince 8088MPH that it was running on the correct hardware.
We thoroughly enjoyed this trip down the DMA/DRAM rabbit hole. The work isn’t finished yet, though — the throttled netbook still won’t run the Area 5150 demo yet. Given [GloriousCow]’s recent Rust-based cycle-accurate PC emulation, we feel pretty good that this will come to pass soon enough.
Well, it shipped with NEC V20 which is too fast for some demos, but they worked almost fine with D8088 (AMD made copy). Also, holy shit, 8087 is toasty even when not in use.
Sadly my BOOK8088 has some weird problem with FPC connector under the display. There was a blob of solder inside of the connector that caused it to malfunction and have weird colors, and after I cleaned it up it works better except when it doesn’t and I have press on the case under the display to get it working again.
I may add that V20/V30 were a period correct “upgrade” of the time, it’s not specific to Book8088. They added 80186/80286 instructions, too.
Not seldomly, users of IBM PC (i8088) and Amstrad PC1512/PC1640 (i8086) had installed them in the 80s. In some tasks, the performance increase over 808x was notable.
V20/V30 adds some useful 80186 variants of the SHL/SHR opcodes, breaks the undocumented (but useful) behavior of the 8088’s AAD instruction. And adds a bunch of weird instructions exclusive to the NEC V20/V30, well not “weird” because they are really nice bit manipulation instructions that I’m sure embedded developers use to great advantage.
There is a complete 8080 (not Z80 compatible) processor mode that you can use to run CP/M-80 inside of an 8086/8088 OS like CP/M-86 or DOS. I didn’t know about it until many years after, probably because the software to make it work was fairly difficult to find. Besides if you wanted to run 8080 CP/M programs on an 8086/8088 there was an assembler that did a pretty good job, requiring few if any modifications when dealing with a relatively straight forward program.
Most people grabbed the V20 because it was a pretty cheap way to give a little performance boost on an old PC/XT/Tandy 1000. That era lasts only a few years before complete 286 systems were so cheap that we could sell off the XT (back when newspapers had classified ads) and get a much faster machine for not too much money.
By the time most of us could afford a cheap 286, games were supporting 386’s and we again needed to upgrade. I feel like the mid-80s to mid-90’s was an extremely compressed upgrade treadmill as the PC market exploded.
Thank you very much, your summary is very good! 😃👌
What also comes to mind is compatibility with 90s era software.
In the 90s, many programs were being compiled with a standard /286 compiler switch and wouldn’t run on 808x processors anymore, despite the performance being sufficient.
Like the Windows 3.0 VGA driver (640×480 16c), the PalmZIP driver and many other programs. With an V20/V30, this applications will run without modifications.
There’s also another advantage of the V20/V30, I believe; I read it can do address calculations more efficiently. The 8088/8086 must emulate this process tediously via its ALU. Intel processors weren’t able to do this until the 80186, I vaguely remember. Or the 80286, which had an MMU (like 386 had later on, minus the paging ability). Speaking under correction here.
The 8080 emulation mode was supported by 22NICE (?) and other CP/M emulators. Unfortunately, Turbo Pascal required a Z80 or comparable CPU (8085, some Super Z80s), so software emulation was needed.
Anyway, programs like MBASIC worked on a plain 8080, I believe. So 8088 emulation mode was surely usable, especially on a slow IBM PC or compatible, were emulation was too demanding. On later 286/386 PCs, software emulation outperformed the fastest Z80 systems by contrast.
Another use case of the 8080 emulation was maybe in Japan, were NEC’s V20/V30 was useful to provide backwards compatibility. The PC-88 series of PCs was 8080 or Z80 based. So certain models of the 8086-based sucessor, the PC-98 line (the IBM PC equivalent of the far east), had an extra NEC V30 processor installed for maxium compatibility. Maybe the 8080 emulation mode was somehow involved here, not sure.
There also was a true Z80+V30 hybrid CPU called NEC uPD9002. It was used in NEC PC-88U model. But that’s another story. Still, it would have been an interesting option for PC builders here in the west.
Let’s imagine what could have been done with 8080/Z80 compatibility in silicon back then: TRS-80, ZX80/ZX81, MZ80K, EG2000 emulators running at full speed on Turbo XT PCs way back in 1987, using CGA/Hercules graphics.
Or, an Gameboy/Sega Master System emulator on an IBM PS/2 with MCGA graphics and the V30 upgrade. Provided that the few Z80/DMG specfic instructions could be trapped and emulated in software.
The 8080 emulation mode could have been somewhat useful. If a real, full-fledged 8080 PC emulator had existed, the original 8″ floppy versions of MP/M and MP/M II or CP/Net could have been run at full speed on a Turbo XT with V20/V30 processor. Let’s imagine how hardware-assisted emulation would have had improved performance of the multi-tasking! It would have had been akin to like, say, MS Virtual PC 2007 using AMD-V/Intel-VT – just 20 years earlier!
Too bad authors of CP/M emulators merely supported CP/M 2.2 and nothing sophisticated like banks-witching or features of CP/M Plus (aka CP/M 3.0). Many bigger CP/M applications could have had taken advantage of that.
Unfortunately, history was much more humble. Users had to run multiple CP/M emulators, each running on CP/M application, if they needed some sort multitasking. With the drawback that multiple applications could access same set of files (data). The lack of a filesharing mechanism for read/write prohibited that (some sort of SHARE.EXE). Not very power user friendly.
Anyway, the V20/V30 were really neat. If it wasn’t for that single x86 instruction it didn’t support in same (broken) way like the 808x. Luckily, many users had access to patched PC BIOSes in the 80s (not seldomly dubbed “V20 BIOS”). So in practice, things were about okay. 🙂
All through the ‘80s, 90’s and into the late 2000’s there was a continuous stream of upgrades needed to keep pace with the demands of software. Hardware improvements slowed down after that, plus most users can get away quite happily with 5 to 10 year old hardware.
This brings memories of one of my first consulting jobs where a small and rather obscure company wanted to introduce an IBM PC clone.
My initial job was to write a non-infringing BIOS, which was not quite the easiest jobs as most entry-points to the BIOS routines had to be at specific addresses due to many programs calling them directly to reduce the BIOS call overhead (INT 10H, I think) — I gather most people here probably know, every cycle counted then.
There was another oddity, some commercial programs only worked if the BIOS contained the three letters “IBM” at a specific location, which was a bit difficult to incorporate into anything plausible as no single English word (at least that I know) contains the three letters I, B, and M consecutively. Trying to incorporate it into code resulted in a strange construct (DEC CX, INC DX, DEC BP), which rarely would make any sense in real code. I can’t remember what I did, but the letters stayed there and we never heard from IBM, so I guess I am in the clear.
The company’s founder (and tech lead) was not overly competent with binary logic and only used positive logic gates (i.e. AND-gates and OR-gates) and inverters in his original implementation, which made the first version rather unstable at 4.77 MHz due to positive logic being slower as it was implemented internally with negative logic followed by an inverter, i.e. an AND-gate was internally a NAND-gate followed by an inverter, similarly for an OR-gate. So a major rework was done after I showed him the relevant pages in the Texas Instruments 74XX TTL data sheets.
Ah, those were the days.
In at least one BIOS, it incorporated the string something like “some programs expect IBM to be here” to solve that problem.
The wording might not be exact. That was a looooong time ago.
I wonder if this would suit my needs.
I used to work at a university and we hosted one of the biggest demo scene repo’s. We had a computer custom build just for watching demo scenes at the department. Some required a bit more power back then. Cool to see it’s still done.