Groups | Search | Server Info | Login | Register
Groups > alt.os.development > #18739
| From | cross@spitfire.i.gajendra.net (Dan Cross) |
|---|---|
| Newsgroups | comp.lang.c, alt.os.development |
| Subject | Re: [OSDev] How to switch to long mode in x86 CPUs? |
| Followup-To | alt.os.development |
| Date | 2025-03-01 13:34 +0000 |
| Organization | PANIX Public Access Internet and UNIX, NYC |
| Message-ID | <vpv2di$5t5$1@reader1.panix.com> (permalink) |
| References | <871pvje5yq.fsf@onesoftnet.eu.org> <vprtt6$3jah9$1@dont-email.me> <875xkughgw.fsf@onesoftnet.eu.org> |
Cross-posted to 2 groups.
Followups directed to: alt.os.development
[Note: Followup-To: alt.os.development] In article <875xkughgw.fsf@onesoftnet.eu.org>, Ar Rakin <rakinar2@onesoftnet.eu.org> wrote: >On 28 Feb 2025 09:59, David Brown <david.brown@hesbynett.no> wrote: >[snip] >> On the other hand, if you are interested in learning the intricacies >> of the x86 world, you need to look elsewhere for information - as >> Keith says, it is not really C related when you are writing >> assembly. comp.arch might be a helpful group. > >Looks like comp.arch might be the group I needed to find! Thanks. Comp.arch is not a good choice here. It's for discussion of computer architecutre generally, specifics of how to boot an x86 core would be mostly tangential. alt.os.development is probably your best bet, but please try not to feed the troll there. >[snip] >Also just to clarify, from what I know, since the x86 processors start >in 16-bit real mode for the sake of compatibility, you'd have to start >writing 16-bit code first, then switch to 32-bit protected mode, then >finally switch to 64-bit long mode. However if you use an existing >bootloader such as GRUB, then you usually would not need to worry about >16-bit code since GRUB drops you in 32-bit protected mode. But still, >if you wish to switch to 64-bit long mode, you *will* have to mix 64-bit >and 32-bit code together. > >Either I don't know how to, or I just don't feel comfortable mixing >32-bit and 64-bit code together *when in C* because you will have a hard >time linking those together. Please correct me if I am wrong. Eh...It can be done, but I don't see the point. Even starting from the reset vector (e.g., in 16-bit 8086 mode) it's not that many instructions to get yourself into long mode with paging enabled. To see an example of how this is done, have a look at: https://github.com/oxidecomputer/phbl/blob/main/src/start.S It's sufficient straight-forward, and so low-level, that doing this in a high-level language doesn't seem worth it from a cost/benefit perspective. - Dan C.
Back to alt.os.development | Previous | Next — Next in thread | Find similar
Re: [OSDev] How to switch to long mode in x86 CPUs? cross@spitfire.i.gajendra.net (Dan Cross) - 2025-03-01 13:34 +0000 Re: [OSDev] How to switch to long mode in x86 CPUs? scott@slp53.sl.home (Scott Lurndal) - 2025-03-01 14:42 +0000
csiph-web