home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   alt.os.development      Operating system development chatter      4,255 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 4,200 of 4,255   
   Dan Cross to rakinar2@onesoftnet.eu.org   
   Re: [OSDev] How to switch to long mode i   
   01 Mar 25 13:34:42   
   
   XPost: comp.lang.c   
   From: cross@spitfire.i.gajendra.net   
      
   [Note: Followup-To: alt.os.development]   
      
   In article <875xkughgw.fsf@onesoftnet.eu.org>,   
   Ar Rakin   wrote:   
   >On 28 Feb 2025 09:59, David Brown  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.   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca