Os Programmierung
lima-city → Forum → Programmiersprachen → Sonstige Programmiersprachen
assembler
auftreten
betriebssystem
boot
byte
datei
diskette
fehler
festplatte
funktion
lade
laufwerk
load
reboot
sektor
speicher
stack
tasten
verzeichnis
window
-
Hi,
ich hab das Tut auf tutorials gelesen nur der NASM geht net ich kann damit nix COmpilieren :(
kann we rhelfen?
kernel.asm
ax, 1000h
mov ds, ax
mov es, ax
start: ; Hier f?ngt unser eigentliches "Betriebssystem" an
mov si, nachricht ; Wir zeigen einfach nur einen String an
call schreiben ; "schreiben" gibt den String am Bildschirm aus
call lesen ; "lesen" wartet bis eine Taste gedr?ckt wurde
jmp reset ; Danach wird die Funktion "reset" aufgerufen
nachricht db "Eine Taste dr?cken, um neu zu starten...",13,10,0
schreiben:
lodsb
or al, al
jz short schreiben_d
mov ah, 0x0E
mov bx, 0x0007
int 0x10
jmp schreiben
schreiben_d:
retn
lesen:
mov ah, 0
int 016h
ret
reset:
db 0Eah
dw 0000h
dw 0FFFFh
Arpi -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Das ist ganz einfach Das ist sicher der Kernel von Lowlevel, wenn ich mich nicht t?usche. Du musst ihn im Verzeichnis des NASM speichern unter kernel.asm und dann erstellst du am besten ein Batch Datei mit folgenden Inhalt, wenn du schon den Bootloader im selben Verzeichnis unter boot.asm gespeichert hast:
nasm -f bin -o boot.bin boot.asm
nasm -f bin -o kernel.bin kernel.asm
Jetzt hast du zwei Bin Dateien und die kopierst du jetzt unter Windows so zusammen:
copy boot.bin + kernel.bin myOS.raw
Jetzt brauchst du soein Programm wie Rawrite und diese myOS.raw auf die Diskette schreiben. Wenn du noch fragen hast, dann frag mich
MfG Dominik -
ok bin noch ma da :)
der will den kernel.asm nicht verarbeiten der kommt gar nicht :( -
Ich habe selber auch mal so ein kleines Versuchsbetriebssystem in Assembler geschrieben. Bei mir ist alles Fehlerlos gegangen. Vielleicht liegt das Problem an deiner NASM version ich verwende selber "nasm-0.98.39-djgpp" Du kannst diese Version hier runterladen http://freedos.wermlandsdata.com/files/devel/asm/nasm/nasm-0.98.39-djgpp.zip
Probiers mal damit, da funktioniert alles (asm-> bin/ bin+bin-> img)
Hoffe, damit klappts! -
Ok, ich erkl?r mal alles von vorne. Du holst dir den Netwide Assembler wie mein Vorposter schon gesagt hat und dann Rawrite oder ein anderes Diskettenimageschreibprogramm oder du machst soein Programm. Hier habe ich eine Seite rausgefunden: http://uranus.it.swin.edu.au/~jn/linux/rawwrite.htm (RAWRITE).
Dann erstellst du kernel.asm:
kernel.asm
mov ax, 1000h ; Segmentregister updaten
mov ds, ax
mov es, ax
start:
mov ax, 0013h ; Modus 13h einrichten
int 10h
mov ax,193
mov ah,0x0C
mov cx,1
mov dx,1
int 0x10
call getkey ; Warte auf einen Tastendruck
jmp reboot ; Reboot
msg db "Willkommen zum Test-Betriebssystem",13,10,0
msg_boot db "Druecke belibige Taste...",10,0
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
getkey:
mov ah, 0 ; Funktion 0
int 016h ; Ausf?hren
ret
reboot:
db 0EAh
dw 0000h
dw 0FFFFh
Und erstellst noch boot.asm:
boot.asm
org 0x7C00 ; Unsere Startadresse
start:
; Erst brauchen wir einen Stack.
cli ; Keine Interrupts!
mov ax, 0x9000 ; Stackadresse
mov ss, ax ; SS = 9000 (unser Stack)
mov sp, 0 ; SP = 0000 (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
push ax
mov ax, 0
push ax
retf
; ----------------------------------------------
; Funktionen und Variablen
; ----------------------------------------------
bootdrv db 0 ;Das Bootlaufwerk
loadmsg db "Loading...",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)
push ds ; Sichere DS
mov ax, 0 ; Die gew?nschte Funktion (reset)
mov dl, [bootdrv] ; Dieses Laufwerk ist gew?nscht
int 13h ; Den Interrupt ausf?hren
pop ds ; DS wiederherstellen
jc load ; Geht nicht? -> Noch mal!
load1:
mov ax,0x1000 ; ES:BX = 10000
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 dx, 0 ; Head=0, Laufwerk=0
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
Jetzt erstellst du im selbigen Verzeichnis, also wo der Netwide Asm und die Quelltexte sind eine Batch Datei z.B. Build.bat:
Build.bat
nasm -f bin -o boot.bin boot.asm
nasm -f bin -o kernel.bin kernel.asm
copy boot.bin + kernel.bin myOS.raw
rawrite
Jetzt musst du nur noch bei Rawrite eine Diskette einlegen, Laufwerk a w?hlen und myOS.raw hinschreiben und Enter dr?cken. Dann wartest du bis dort "Done" steht. Jetzt startest du dein Computer neu und siehst die Bootmessage
Das war alles. Das ist auch mein alter Kernel...
MfG Dominik
PS: Sorry, aber da kommt keine Bootmessage, sondern da wird der Grafikmodus 13h eingestellt. Aber du kannst da auch dein Kernel reinkopieren.
Beitrag ge?ndert am 18.09.2005 11:13 von javadomi -
ok :) wer ich gleich machen :)
aber kann man das auch einen USB Stick speiuchen?
mein Disk laufwerk ist durch :( und will net immer zum Bruder rennen "darfi ich mal"...
weil ne Disktett ekann man dann nicht mehr lesen unter windows -
ok :) wer ich gleich machen :)
aber kann man das auch einen USB Stick speiuchen?
mein Disk laufwerk ist durch :( und will net immer zum Bruder rennen "darfi ich mal"...
weil ne Disktett ekann man dann nicht mehr lesen unter windows
Auf einen USB Stick? Ich glaube er hat andere Gr??en in den Sektoren. Das wird wohl nicht gehen. Du k?nntest es aber auf die Festplatte machen. Aber das, was ich dir da hingeschrieben habe ist optimiert f?r eine Diskette, deshalb sollte man auch eine benutzen. -
Nein, auf einem USB-Stick geht das nicht!
@javadomi
Ja, es ist m?glich, das Betriebssystem auf die Festplatte zu machen. Aber das solltest du besser nicht!!!!! Denn wenn du etwas falsches programmiert hast oder wenn beim Speichern ein Fehler auftritt, kannst du gerade deinen ganze PC wegschmeissen... Es w?re n?mlich m?glich, dass du dadurch nicht mehr an dein urspr?ngliches Betriebssystem rankommst und das ist sicher nicht in deinem Intresse! Besorge dir doch einfach einen sehr alten PC (Der kann ruhig zehn Jahre alt sein) und teste dein Betriebssystem darauf! Und wenn dann alles fehlerlos klappt kannst du dein System immer noch auf deine Festplatte installieren. -
Ja, es ist m?glich, das Betriebssystem auf die Festplatte zu machen. Aber das solltest du besser nicht!!!!! Denn wenn du etwas falsches programmiert hast oder wenn beim Speichern ein Fehler auftritt, kannst du gerade deinen ganze PC wegschmeissen... Es w?re n?mlich m?glich, dass du dadurch nicht mehr an dein urspr?ngliches Betriebssystem rankommst und das ist sicher nicht in deinem Intresse! Besorge dir doch einfach einen sehr alten PC (Der kann ruhig zehn Jahre alt sein) und teste dein Betriebssystem darauf! Und wenn dann alles fehlerlos klappt kannst du dein System immer noch auf deine Festplatte installieren.
Naja, vorher muss man sein Kernel getestet haben, sodass er 100% fehlerlos sein muss. Ich habe auf meiner Festplatte mein altes DooS, und bin damit sehr zufrieden Ich finde, dass es das beste Betriebssystem ist, DENN man kann Dateien erstellen, die 32656 Zeichen in den Namen haben, es hat das kompressierte Doos Bildformat und man kann mit den Doos Browser ins Internet gehen, aber leider noch nicht Formulare verschicken.
Zum Thema: Man sollte es schon erstmal auf einer Diskette testen. An deiner Stelle w?rde ich mir z.B. bei eBay f?r 5? ein neues Diskettenlaufwerk kaufen, dann kannst du das Betriebssystem weitermachen.
MfG Dominik -
achso ... hmm kan mir wer dieses Sys Complimieren?
und schicken?
bei mir gehts net :((((
ok werd ma schaun ob einer von meinen alten saukisten noch funktionieren *gg*
kann man das auch auf einem Amiga A-500 Installieren?
-
Ok, sag mal genauer. Was f?r Fehler kriegst du denn? Gebe nicht auf Wir helfen dir!
MfG Dominik -
Speichere es doch einfach mal auf Lima und gib hier einen Link dazu an, dann k?nnte ichs dir mal compilieren. Oder schicks mir doch einfach mal per PN!
-
Es gibt doch unter http://lowlevel.brainsware.org/ eine komplette Anleitung dazu. Wenn du willst, kann ich es auch f?r dich kompilieren oder dir die n?tigen Compiler und Linker per E-Mail schicken.
MfG Dominik -
zur Fehlermeldung:
der bringt nix... und a erstellt der auch keine Datei :(
@Sebi ich kanns mal schicken hast du deine Mail da?
@java ok :) werd gleich mal schaun :)
Arpi -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage