Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Eigenes Betriebssystem -> Bootloaderproblem
Klebestreifen Offline
Superuser

Beiträge: 49
Registriert seit: Mar 2015
Beitrag #1
Eigenes Betriebssystem -> Bootloaderproblem
Sehr geehrte WINHISTORY-User,
Ich bin ein Hobbyprogrammierer und besonders „Spaßig“ finde ich das programmieren von bootfähigen Systemen (Betriebsystemen). Nur bin ich auch da noch eine Art Anfänger. Somit weis ich bei der Assemblerprogrammierung nicht wie man korrekt von Datenträgern, in meinem Fall Disketten, liest und frage daher euch ;)
Mein Problem: Ich möchte, da ich mein System nicht nur sechs Sektoren groß sein soll, die komplette Diskette in den Arbeitsspeicher laden. Doch schon beim tüfteln an einer Subroutine die die ersten 3 Spuren lädt scheitere ich.
Spur 1 und Spur 2 werden korrekt geladen doch bei Spur 3 scheitert es.
Hier erstmal der Code:

Code:
; Dieser Code ist nur so ineffektiv verschachtelt damit ich es beim debugen einfacher habe!
load:
call load1
call load2
call load3
retn

load_rs:
push ds
mov ax, 0
mov dl, [bootdriv]
int 13h
pop ds
jc load_rs
retn

loader:
call load_rs
mov ax, 0x1000
mov es, ax
mov ah, 0x2
mov dx, 0
retn

load1:
call loader
mov bx, 0
mov al, 17
mov cl, 2
mov ch, 0
int 13h
jc reset
retn

load2:
call loader
mov bx, 0x2200
mov al, 18
mov cl, 1
mov ch, 1
int 13h
;0x7c64
jc reset
retn

load3:
call loader
mov bx, 0x4600
mov al, 18
mov cl, 1
mov ch, 2
int 13h
jc reset
retn

Die Subroutine „load3“ ist dabei das Sorgenkind und lädt leider nicht das, was sie soll. Aber warum nicht? Diese Subroutine lädt irgend etwas aus dem freien Speicher der Diskette was ich daran erkenne das jede menge ‚F6’-Bytes in den Arbeitsspeicher geladen werden wo eigentlich der weiterführende Code des Kernels hin sollte. :/
Wie kann ich dafür sorgen das die 3. Spur die ich möchte geladen wird?

Zusammenfassend: Ich habe ein Image geschrieben welches auf Diskette formatiert wird (oder halt mit Bochs emuliert wird) welches sich beim booten in den RAM laden soll (nur der Bootsektor soll aber draußen bleiben). Die Test-Subroutine lädt jedoch ab spur 3 vom falschen Ort. Was ist der Fehler an der Subroutine?

Danke im Voraus!
Mit freundlichen Grüßen euer Klebestreifchien.

PS.: Dieser Thread wurde hierher verschoben weil Thema treffender ist!

EDIT: Habe hier noch schnell Korrekturen am Code vorgenommen. Funkt aber immer noch nicht, ist aber richtiger als vorher!
(Dieser Beitrag wurde zuletzt bearbeitet: 28.07.2015 11:21 von Klebestreifen.)
27.07.2015 20:36
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Benjamin92 Offline
tauscht CMOS-Batterie per TeamViewer

Beiträge: 7.786
Registriert seit: Jul 2008
Beitrag #2
RE: Eigenes Betriebssystem -> Bootloaderproblem
Das sieht mir eher nach einer Art Bootloader aus, aber kein Betriebssystem, oder?

Mir fehlen da grundlegende Dinge, wie IDT, GDT, Paging, Sheduler, Multitasking und Multithreading ;)
(Dieser Beitrag wurde zuletzt bearbeitet: 27.07.2015 20:42 von Benjamin92.)
27.07.2015 20:40
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
grützkopf Offline
Neuer Benutzer

Beiträge: 49
Registriert seit: Aug 2011
Beitrag #3
RE: Eigenes Betriebssystem -> Bootloaderproblem
Es gibt nen guten grund dafür, dass ich mir keinen eigenen Bootloader baue..

Hast du mal ein paar Details?

Programmiersprache?
Prozessor?
Realmode/Protected Mode?
Du rufst da das BIOS auf? Den Luxus hab ich nicht.. (Protected Mode, noch keinen VM86-support)
27.07.2015 20:53
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Klebestreifen Offline
Superuser

Beiträge: 49
Registriert seit: Mar 2015
Beitrag #4
RE: Eigenes Betriebssystem -> Bootloaderproblem
(27.07.2015 20:53)grützkopf schrieb:  Es gibt nen guten grund dafür, dass ich mir keinen eigenen Bootloader baue..

Hast du mal ein paar Details?

Programmiersprache?
Prozessor?
Realmode/Protected Mode?
Du rufst da das BIOS auf? Den Luxus hab ich nicht.. (Protected Mode, noch keinen VM86-support)

...Assembler (NASM)
...x86-Prozessor (Standard-Computer)
...Ich glaube Realmode. Kann ich aber nicht sicher sagen.

(27.07.2015 20:40)Benjamin92 schrieb:  Das sieht mir eher nach einer Art Bootloader aus, aber kein Betriebssystem, oder?

Mir fehlen da grundlegende Dinge, wie IDT, GDT, Paging, Sheduler, Multitasking und Multithreading ;)

Ich sagte ja auch das es ein Bootfähiges System ist und versuche die Bezeichnung als „Betriebsystem“ noch zu vermeiden da (noch) nicht die von dir genanten Funktionen enthalten sind. Ich jedoch frage mich woher du das weist? Wobei du nicht einmal den kompletten Code kennst… ;)
(Dieser Beitrag wurde zuletzt bearbeitet: 28.07.2015 11:25 von Klebestreifen.)
27.07.2015 21:24
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Benjamin92 Offline
tauscht CMOS-Batterie per TeamViewer

Beiträge: 7.786
Registriert seit: Jul 2008
Beitrag #5
RE: Eigenes Betriebssystem -> Bootloaderproblem
Bin von dem Code ausgegangen, den du gepostet hast, wobei ich zugeben muss, dass ich auch den nicht 100%ig verstehe. Ich habe 2012 mal für Intel 8051 Mikrocontroller Assemblerprogramme geschrieben und schon vorher und auch danach mit V2_OS rumgespielt und versucht, das zu modifizieren.

Früher wollte ich auch einmal ein eigenes Betriebssystem schreiben, aber es gibt schon so viele angefangene Projekte, sodass ich mir dann dachte, dass es nicht sinnvoll ist, noch ein Projekt zu eröffnen und dann auf der digitalen Müllhalde (Internet) verrotten zu lassen.

Lowlevel.eu ist auch eine sehr interessante Seite, wenn man sich für Betriebssysteme interessiert.

Wegen der Frage, Real Mode oder Protect Mode, ich bin mir ziemlich sicher, dass du im Real Mode arbeitest, weil du müsstest sonst die CPU explizit in den Protected Mode umschalten.
Momentan bin ich dabei, den Code von dir genauer zu analysieren und verstehen, bin aber noch nicht wirklich weit dabei (Hat aber nichts damit zu tun, weil er schlecht oder unübersichtlich ist, sondern weil ich mir da immer wieder noch sehr viel Grundlagenwissen anlesen muss).
(Dieser Beitrag wurde zuletzt bearbeitet: 28.07.2015 12:09 von Benjamin92.)
28.07.2015 12:09
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Klebestreifen Offline
Superuser

Beiträge: 49
Registriert seit: Mar 2015
Beitrag #6
RE: Eigenes Betriebssystem -> Bootloaderproblem
Ist ja in Ordnung. Lowlevel.eu kenne ich bereits. Habe dort nur leider nichts Genaueres zu diesem Thema gefunden. Ich habe nur die Subroutinen die für das laden der Diskette verantwortlich ist gepostet. Diese Routine ist jedoch erst einmal nur ein Prototyp der sobald das Problem gelöst ist weiter ausgebaut und verbessert wird.
Da ich tatsächlich nicht absichtlich den Protected-Mode aktiviert habe muss ich deiner antwort zu folge durchaus im Real-Mode sein.
28.07.2015 12:23
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Gelöschter Beitrag von Klebestreifen
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste