[ipxe-devel] 486 with a Realtek 8139

Michael Brown mcb30 at ipxe.org
Wed May 5 19:13:39 UTC 2021


On 05/05/2021 19:53, Nikolai Zhubr wrote:
> Thanks for mentioning Bochs, I've copied your 486 config commandline and 
> was able to build and start testing. Its way more handy than with real 
> iron. It is even possible to disable e820 function by hand.
> 
> Now as long as 586+ requirement is not really critical for operation, 
> maybe put such fragments into conditional ifdefs and introduce some 
> config option (say LEGACY486) to allow 486-compatible builds?

I've gone to a *lot* of effort over the past 15 years to eliminate that 
kind of conditional ifdef from the codebase (see the various "#ifdef 
considered harmful" articles around the web).

For unlzma.S, just changing to ".arch i486" is fine, since there are no 
586-class instructions in that file.

For undinet.c, the "rdtsc" instructions are used only for profiling. 
It's probably not worth the marginally increased accuracy from having 
the rdtsc within the real-mode code: those TSC reads could be moved 
outside the REAL_CODE() block and implemented using the standard 
profile_xxx() functions instead of hardcoded "rdtsc" instructions.  (An 
alternative approach would be to conditionalise the presence of the 
"rdtsc" instructions, but it would need to be an exceptionally neat 
solution to justify such a special case.)

For rtc_entropy.c, the use of the TSC is intrinsic to the way that the 
code operates.  There is already an entropy_enable() call that is 
allowed to return an error to indicate that the entropy source is 
unusable: this could be extended to include a low-overhead check for the 
existence of the TSC.

With those changes, there would be no need for any compile-time option 
or accompanying documentation: the code would Just Work on a 486.

Michael


More information about the ipxe-devel mailing list