1. du muss dir n assembler besorgen z.B. NASM (google.de).
2. wenn du linux benutzt geht es mit dd wenn win dann google man nach rawwrite
3. copier dir den code vom bootloader:
boot.asm
org 0x7C00 ; Unsere Startadresse
; -----------------------------------------
; Unser Bootloader
; -----------------------------------------
jmp 0x0000:start
start:
; Erst brauchen wir einen Stack.
cli ; Keine Interrupts!
mov ax, 0x9000 ; Stackadresse
mov ss, ax ; SS = 0x9000 (unser Stack)
mov sp, 0 ; SP = 0x0000 (der Stackpointer)
sti ; Interrupts zulassen
; Bootlaufwerk aus DL speichern
mov [bootdrv], dl
;Lade unseren Kernel
call load
;Springe zu diesem Kernel
mov ax, 0x1000 ; Die Adresse des Programms
mov es, ax ; Segmentregister updaten
mov ds, ax
jmp 0x1000:0x0000
; ----------------------------------------------
; Funktionen und Variablen
; ----------------------------------------------
bootdrv db 0 ;Das Bootlaufwerk
loadmsg db "Laden...",13,10,0
; Einen String ausgeben:
putstr:
lodsb ; Byte laden
or al,al
jz short putstrd ; 0-Byte? -> Ende!
mov ah,0x0E ; Funktion 0x0E
mov bx,0x0007 ; Attribut-Byte (wird nicht benötigt)
int 0x10 ; schreiben
jmp putstr ; Nächstes Byte
putstrd:
retn
; Lade den Kernel vom Bootlaufwerk
load:
; Diskdrive reset (Interrupt 13h, 0)
mov ax, 0 ; Die gewünschte Funktion (reset)
mov dl, [bootdrv] ; Dieses Laufwerk ist gewünscht
int 13h ; Den Interrupt ausführen
jc load ; Geht nicht? -> Noch mal!
load1:
mov ax,0x1000 ; ES:BX = 0x10000
mov es,ax
mov bx, 0
; Sektoren lesen (Interrupt 13h, 2)
mov ah, 2 ; Funktion 2 (Lesen)
mov al, 5 ; Lese 5 Sektoren
mov cx, 2 ; Cylinder=0, Sector=2
mov dh, 0 ; Head=0
mov dl, [bootdrv] ; Laufwerk aus Vorgabe
int 13h ; ES:BX = Daten vom Laufwerk
jc load1 ; Fehler? Noch mal!
mov si,loadmsg
call putstr ; Meldung ausgeben
retn
times 512-($-$$)-2 db 0 ; Dateilänge: 512 Bytes
dw 0AA55h ; Bootsignatur
4. gieb in bei win in cmd bzw bei linux ins terminal ein
nasm -f bin -o boot.bin boot.asm
5. kopier dir den test-kernel-code:
kern.asm
; ---------------------------------------------------
; Unser Kernel
; ---------------------------------------------------
mov ax, 0x1000 ; Segmentregister updaten
mov ds, ax
mov es, ax
start:
mov si, msg
call putstr ; Schicke Bootmessage :)
mov si,msg_boot
call putstr ; Noch eine Message :D
call getkey ; Warte auf einen Tastendruck
jmp reboot ; Reboot
; -------------------------------------------------
; Funktionen und Variablen
; -------------------------------------------------
msg db "Herzlich Willkommen zu StupidOS 0.1",13,10,0
msg_boot db "Beliebige Taste druecken...",10,0
; Stringausgabe
putstr:
lodsb ; Byte laden
or al,al
jz short putstrd ; 0-Byte? -> Ende!
mov ah,0x0E ; Funktion 0x0E
mov bx,0x0007 ; Atrribut-Byte
int 0x10 ; schreiben
jmp putstr ; nächstes Byte
putstrd:
retn
; Warte auf einen Tastendruck
getkey:
mov ah, 0 ; Funktion 0
int 0x16 ; Ausführen
ret
; Rebooten.
reboot:
jmp 0xffff:0x0000
6. wieder in cmd oder terminal
nasm -f bin -o kern.bin kern.asm
7. unter linux:
cat boot.bin kern.bin>OS.img
unter win
copy boot.bin+kern.bin OS.img
8. diskette ins laufwerk und unter linux:
sudo dd if=OS.img of=/dev/fd0
(muss nämlich mit adminrechten sein der befehl)(musst dein passwort eingeben)
unter win
rawwrite(win) OS.img
(das 'win' in () weil ich nicht weiss wie deine exe heist musst sehen)
tada du hast ein os auf diskette
du solltest dir zudem mal die ausgaben des lowlevel magaziens ansehen, die sind echt zu empfehlen
(alle codes sind von Mastermesh aus ausgabe eins)