Lave dit eget Operativ System

Her postes alt, som ikke direkte har noget med Ubuntu at gøre.
WinSux
Indlæg: 46
Tilmeldt: 9. sep 2008, 18:53
IRC nickname: WinSuX

Lave dit eget Operativ System

Indlæg af WinSux »

Hej Alle!

Jeg surfede lidt rundt og faldt over dette lille tutorial:
http://howtoz.blogspot.com/2007/01/how- ... ating.html

Jeg har selv skabt et der hedder:
Scrable OS

Kun ved brug af guiden, har ikke meget kendskab til det men guiden fortæller alt du skal bruge, her er en dorlig oversætning fra siden (ved brug af Google Translator)
:

Hvordan du lave dine egne Operativsystem
Ok, jeg for nylig har gjort mit eget lille os.
Det er sjovt, let at gøre, og det kan være nyttigt for mange ting, så jeg har lavet denne øvelse at lære at gøre de første brikker til et nyt OS, skal du ikke bekymre dig, hvis det er crap, kan det ikke få nogen værre end Windows ;-)

Krav:
-- Emu8086 (http://www.emu8086.com)
-- Rawwrite (http://uranus.it.swin.edu.au/ ~ JN / linux / rawwrite.htm)
-- Nogle viden om 16-bit x86 assembler (Hvis du ikke har fået denne, skal du kigge efter en tutorial)
-- En tom diskette (valgfri, men anbefales)


Del I: boot sektor

Når du starter emu8086 vælge en ny BOOT skabelon.
Ok, det er grundlaget for de boot sektor i et drev, er der 2 væsentlige ting i det, "# make_boot #" fortæller det er ment som boot sektor.
"org 7c00h" er for at fortælle det i sin lastning adresse er at være 0000:7 c00.
Lad os gøre det sige goddag verden eller noget, uden at det dos afbryder, så vi har fået at gøre en egen procedure til at skrive en streng.
Der er en BIOS-funktion til at skrive en enkelt char (Teletype funktion: ah = 0eh/int 10h), så bruger vi, at:

; Du skal sætte en null-byte i slutningen af din streng
; Før kalde denne procedure, er du nødt til at gøre si modregning af din streng.
printstring proc nærheden
nextchar:
mov al, [si]; Kopier den første char til al
cmp al, 0; Sammenligning al med 0
jz trykt; Hvis det er NULL, hoppe til slutningen
inc si; Flyt til næste char
mov ah, 0eh; Den Teletype funktion.
int 10h; Sæt char
jmp nextchar; gentage det ...
Printed:
ret
printstring endp

Og nogle funktion for at vente, indtil en nøgle er trykket:

mov ax, 0
int 16h

Nøglen trykket vil blive returneret i al.

For genstart af pc du har brug for dette, desværre, jeg ikke forstår dette stykke, men det gør dit OS genstarte pc'en.
mov ax, 0040h
mov ds, ax
mov m. [0072h], 0000h, og jeg ved, at dette stykke siger, at gøre en kold start. For at gøre det gøre en varm start, erstatte 0000h med 1234h.

JMP 0FFFFh: 0000h; Ja, genstart!

Nå, nu kan du kombinere det!
Lad det udskrive noget tekst gerne hello verden og vente, indtil en nøgle er pressede og derefter genstarte!
Den nemmeste måde at testen er at efterligne.


Del II: Selve kernen

Tja, nu du ved hvordan du får boot sektor, men boot sektor kan kun være op til 512 byte, så derfor har du brug for en kerne.
Vi gør en lille kerne til at stille til sektoren 2, men du bliver nødt til at gøre boot sektor indlæse dem:

mov ah, 02h; De læst funktion
mov al, 5; række sektorer at læse, den er sat til 5, hvis din kerne vokser større end dette, ændre det
mov ch, 0; Flasken antal
mov cl, 2; Den sektor, hvor det begynder at læse
mov dh, 0; Lederen antal
; Indstil es til den adresse, til at indlæse kernen til
mov BX, 0800h
mov es, BX
mov BX, 0
; Læs kerne
int 13h
; Check, hvis kerne er lastet
cmp es: [0000], 0E9h; Sammenlignes den første byte af kernen, det bør være 0E9 hvilket betyder jmp
jmp 0800h: 0000h; Hvis kernen er loaded, springe til det

Denne belastninger kernen og kontrol, hvis kerne er lastet med succes ved at kontrollere den første byte, sædvanligvis du lægger noget på det begynder i retningen af:
jmp start
En liste over variabler
start:
Så den første byte er altid jmp, hvis hex værdi er 0E9 ...

Ok, lad os gøre kerne!
Første Første emu8086 en anden tid og vælge en ny BIN skabelon.
Den første ting at sætte på det er "ORG 0000h" for at sige det begynder på denne adresse, afther, at der skal være kommandoen jmp (eller andet), så boot sektor vil anerkende det.
En inportant stykke for at gøre kernel kører fint, er dette:
push cs
pop ds
Jeg ved ikke, hvorfor det er nødvendigt, men du får problemer med variabler, hvis du ikke har indsat det.
Nu kan du blot sætte kode dér, som hvis det er boot stykke.

Når du er færdig med kernen, kompilere den og køre emulator for opstart del.
Først skal du vælge "virtuelle drev> skrive 512 bytes på 0000:7 c00 at starte sektor> FLOPPY_0"
Så, "virtuelle drev> skrive '. Bin' til disketten ...", vælge den kerne filen du lige har kompileret, indstille sektor til 2 og skrive.
Hvis du ønsker at køre det i emulator vælge "virtuelle drev> boot fra den virtuelle floppy> FLOPPY_0", klik på Kør og have det sjovt!
Hvis du ønsker at gøre en startdisk, skal du køre rawwrite, vælg den fil FLOPPY_0 i anlægget vejviser emu8086 og have det sjovt!

Held og lykke med at gøre en reel OS
Skrevet af Real Estate Kefalonia på 17:03
Labels: Operativsystem
Fujitsu Siemens Scaleo 600 - Ubuntu 8.04 Hardy Heron 32bit - 82 GB HDD - 512 MB RAM - nVidea[GeForce4 MX 440 AGP 8x] (rev a2)