| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  07-12-2005, 17:18 | #1 | 
| Senior Member Iscritto dal: Nov 2002 
					Messaggi: 6254
				 | 
				
				Bootloader con Bochs
			 
		Ho scritto un piccolo bootloader che carica un kernel, il quale scrive un semplice messaggio a video. Ora, so che il bootloader deve stare nel primo settore del floppy, ed il kernel in quelli successivi. Inanzitutto, il kernel l'ho scritto in c++, compilato con il C++BuilderX. Il bootloader è in assembler e compilato con il Nasm. Credo che la procedura giusta sia inserire nel floppy prima il botloader e poi il kernel compilato, inserendo quindi il file con estensione obj. Vorrei fare il tutto con rawrite, ma non so come creare un'immagine del disco partendo da questi due file. Il tutto poi partirebbe in simulazione con il Bochs. Vi allego il kernel in c++, cosi' se c'è qualche errore potete dirmelo: char *videomem = (char *) 0xb8000; /*da dove inizia la memoria della scheda video*/ void putc(char carattere){ *videomem++ = carattere; /*imposto il carattere*/ *videomem++ = 0x7; /*imposto gli attributi del carattere*/ } void putstring(char *stringa){ int i = 0; while(stringa[i]){ putc(stringa[i]); i++; } } void _start() { putstring("Ciao "); } | 
|   |   | 
|  07-12-2005, 17:56 | #2 | 
| Senior Member Iscritto dal: Jun 2002 Città: Dublin 
					Messaggi: 5989
				 | 
		C++ BuilderX? ...ehm, assicurati di aver create un eseguibile binario...    
				__________________ C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! | 
|   |   | 
|  07-12-2005, 18:00 | #3 | |
| Senior Member Iscritto dal: Nov 2002 
					Messaggi: 6254
				 | Quote: 
   | |
|   |   | 
|  08-12-2005, 10:19 | #4 | 
| Senior Member Iscritto dal: Jun 2002 Città: Dublin 
					Messaggi: 5989
				 | 
		Non so se il C++ Builder lo fa. Assicurati comunque di generare un "flat executable".    
				__________________ C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! | 
|   |   | 
|  08-12-2005, 14:02 | #5 | |
| Senior Member Iscritto dal: Nov 2002 
					Messaggi: 6254
				 | Quote: 
   | |
|   |   | 
|  09-12-2005, 10:52 | #6 | |
| Senior Member Iscritto dal: Jun 2002 Città: Dublin 
					Messaggi: 5989
				 | Quote: 
  Inannanzitutto: scrivere un bootloader non è facile. Bisogna rispettare dei precisi limiti (deve entrare tutto in un solo settore, quindi deve essere grande precisamente 512 byte e deve terminare con due byte, 0x55 e 0xAA) per farlo riconoscere al BIOS. Quindi: assicurati che il bootloader sia grande 512 byte e termini con 0xAA55, poi crea un singolo file che faccia da "immagine" per il floppy (visto che usi Rawrite e C++ Builder credo tu stia usando Windows  , quindi: "COPY LOADER+KERNEL IMMAGINE.BIN") e poi usa Rawrite per scriverlo su floppy. Puoi testarlo direttamente riavviando il computer, ma farlo spesso ti toglie parecchio tempo, quindi meglio se usi una virtual machine per testare il kernel.   
				__________________ C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! | |
|   |   | 
|  09-12-2005, 14:41 | #7 | 
| Bannato Iscritto dal: Feb 2005 Città: Roma 
					Messaggi: 7029
				 | 
		daniele, lui voleva semplicemente sapere come fare a creare un file contenente un'immagine "raw" del floppy da scrivere poi direttamente con rawrite   unrue, per farlo puoi semplicemente scrivere un programma che: 1) apra il file del bootloader 2) lo ricopi tale e quale nel file di destinazione (quello che conterrà l'immagine del floppy da scrivere con rawrite) 3) scriva il kernel nel file di destinazione subito dopo il primo settore una volta fatto questo e riuscito a caricare il kernel col tuo bootloader, scoprirai che un file COFF a 32 bit non corrisponde esattamente a un binario puro...  buon lavoro   | 
|   |   | 
|  09-12-2005, 15:58 | #8 | |
| Senior Member Iscritto dal: Jun 2002 Città: Dublin 
					Messaggi: 5989
				 | Quote: 
  ciao   
				__________________ C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! | |
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 18:34.









 
		 
		 
		 
		








 
  
 



 
                        
                        










