My support for x86 is only in terms of ensuring software compatibility once the PC is logged in
This is exactly the reason why I said computer science in 2023 is utterly depressing: because we know x86 is a very narrow-minded architecture brought with itself, but who cares? Just let's go on buying it because it's so crazy cheap.
- - -
I'm an MS-DOS v{4,5,6.22} veteran and I have seen each and every generation of PCs from a developer's perspective!
Both Microsoft { DOS, Windows } and intel {8051, 8088, x86 } limited my education to the point that I think the world would have been better off if Intel had gone bust right away bankrupt, giving way to CPU designers with their brains instead of their asses.
Their first 8086 in real mode had a rather strange memory addressing scheme which allowed a single memory location
- to be addressed in *** up to 4096 different ways ***. Note their idiocy here, 4096 { segment:offset } aliases would have been so much simpler if the segment part were strictly higher-order bits of a 32-bit address.
- limited RAM to 64Kbyte segments (the MS-DOS .com files were of this kind), max 1 MB physically addressable
- forced programmers to deal with two different sizes of pointers
- x86 calling conventions are not standardized, leaving devs with the mess of { __cdecl, __stdcall, __fastcall, ... }
- In real mode, there are no "general purpose registers", there are dedicated registers, and the insanely low number is nothing but a horrible performance killer (2)
- the { segment:offset } addressing was/is an attempt to stay compatible to some extent with the CP/M world
- very inefficient style of development on the lowest CISC level instead of an efficient load/store methodology (1)
That happened due to a simple design decision by Intel at the Machine instruction level instead of at the upper levels of compatibility with something (8085) that was already dying.
Oh, and
8085 sucks! Especially when you compare it with
68hc11!
And when you compare
80{0,1}86 with
680{0,2}0 ... the 68k family has a 32bit linear addressing space and a clear path to 4 GB, so going to a 32-bit processor makes it easier to access more than 64K, the 8086 is a 16-bit architecture which was designed to be a step up from the 8-bit 8080, and I see no reason Intel should have leaped directly from an 8-bit to a 32-bit one.
Oh, and
8080 sucks a lot when you compare it with
z80.
Oh, and what about "intel RISC?" the
i960? it's pure horrible garbage! Those like me who have had to work on RAID controllers know that it's a nightmare to program.
* * *
Intel is very bad at designing CPUs, insanely great at making aggressive marketing with tons of bullshit and low-price offers, and they don't go bankrupt thanks to idiots like us (including me, as I am working with a Soektris Net5501, x86-based) who keep buying their garbage
So
it's our fault.
edit:
(1) the
MOVSB instruction
if (DF isEqualTo 0) *(byte*)DI++ = *(byte*)SI++;
else *(byte*)DI-- = *(byte*)SI--;
single instruction doing a load, a store, and two adds or subtracts controlled by a flag input
(2) Compared to RISC and 68k(3), the perceived "inelegance" of x86 registers mostly comes from the misconception that the registers of an 8086 are "general-purpose" registers: although it's a very bad design, that's not correct, each of x86-register has a "special purpose" and if you don't stick to their purposes, you are going to have a bad time.
(3) the 68000 has 4 kinds of registers: 8 data registers ( {D0..D7}, all 32bit), 7 address-pointer registers ( {A0..A6}, all 32bit), the stack pointer (SP=A7, 32bit), CPU-and-ALU-status register.