4 ms·
Article is extremely light on details. Clockspeed isn't even remotely the only issue (Windows XP will install on a 60 MHz Pentium; not a pleasant experience but
by chungy 2y ago
Article is extremely light on details. Clockspeed isn't even remotely the only issue (Windows XP will install on a 60 MHz Pentium; not a pleasant experience but it works). Windows XP requires the CMPXCHG8B ISA instruction and it is not available on the 486.
Given the article shows an emulator running it, it's possible (but I hope not) that the emulator was modified to supply a 486 CPUID while also supporting the instruction. Maybe the Windows 2000 ntoskrnl.exe was slotted in, too? Anything beyond that, I'm not sure how you can modify Windows XP itself to support an older CPU lacking the necessary instruction.
- zamadatix 2y agoThe forum post linked early on has the nitty gritty on how the actual binaries were hex edited to no longer need the unsupported opcodes. He manages to do this by rewriting the XP kernel (SP3 version towards the end) but does reference how the 2000 kernel did some functions without the instruction along the way.
- justsomehnguy 2y agoArticle provide the link to the forum. https://msfn.org/board/topic/186080-xp-running-on-a-486-cpu https://msfn.org/board/topic/186080-xp-running-on-a-486-cpu
- kccqzy 2y agoWell, GCC still supports i486 to this date. Just compile some code that normally needs cmpxchg8b while passing it `-m32 -march=i486`. Here's an example code: extern std::atomic<uint64_t> v; bool f(uint64_t& a, uint64_t b) { return v.compare_exchange_strong(a, b); } I'm away from a computer but someone should try this and disassemble the resulting binary.
- o11c 2y agoIt generates an external function call to `__atomic_compare_exchange_8`, defined in `libatomic.a`. Disassembly of `libatomic.a` is not useful since distros don't compile that with 486 support. Go look at the source.