Autor Thema: Meine Computer sind sich wieder mal nicht einig  (Gelesen 5883 mal)

jeb

  • Beiträge: 341
    • Profil anzeigen
    • http://www.jebdev.net
Gespeichert
« am: 23. April 2005, 10:40 »
Also wenn ich meinen Bootlaoder unter Bochs (auf meinem Lap) boote ist alles klar. Auf dem Laptop selber läuft auch alles klar (ohne Bochs). Doch beim PC meiner Eltern und meinem Testpc kommt nichts! Nur der Curser blinkt in der oberen Ecke.
Das Seltsame: den alten Kernel können beide PCs ohne Probleme anzeigen. Nur den neuen Bootloader nicht.

Was ist los?
jeb

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 23. April 2005, 12:09 »
Du solltest mal den wichtigen Code (der sich geändert hat) posten.

jeb

  • Beiträge: 341
    • Profil anzeigen
    • http://www.jebdev.net
Gespeichert
« Antwort #2 am: 23. April 2005, 13:36 »
Also ich hab nicht den Code geändert. Der Kernel+Bootloader aus Lowlevel 1 funktionieren wunderbar. Ich wollte jedoch nen eigenen FAT12 Bootloader schreiben, der nicht funzt. Hier der Code:


org 0x7c00

jmp code

OSName db "FREAK-OS"
BytesPerSec dw 512
SecPerClus db 1
ResvdSecCnt dw 1
NumFATs db 2
RootEntCnt dw 224
TotSec dw 2880
MediaType db 0xF0
FATSize dw 9
SecPerTrack dw 18
NumHeads dw 2
HiddenSec dd 0
TotSec32 dd 0
DrvNum db 0x00
Reserved db 0
BootSig db 0x29
VolumeID dd 1
VolumeLabel db "FREAK-OS   "
FileSysType db "FAT12   "

bootdrv db 0
state dw 1
msg_loader db 201,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,187,13,10,186," FreakOS Bootloader ",186,13,10,200,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,188,13,10,10,0
msg_search db "Kernel wird gesucht...",13,10,0
msg_found db "Kernel wurde gefunden :-)",13,10,0
msg_load db "Kernel wird geladen...",13,10,0
msg_failed db "Kernel konnte nicht gefunden werden :-(",13,10,0
msg_reboot db 13,10,"Bitte Taste dr",129,"cken um neu zu starten.",13,10,0

code:
mov si,msg_loader
call print
mov si,msg_search
call print
;call search
mov [state],1
;mov [ax],state
cmp ax,1
je boot
mov si,msg_failed
call print
call reboot
code_end:

print:
lodsb
or al,al
jz short print_end
mov ah,0x0e
mov bx,0x0007
int 0x10
jmp print
print_end:
retn

;search:
;read1:
;push ds
;mov ax,0
;mov dl,[bootdrv]
;int 13h
;pop ds
;jc read1
;read2:
;mov ax,0x1000 ;Speicherstelle
;mov es,ax ;Register
;mov bx,0 ;Offset Puffer
;mov ah,2 ;Funktion
;mov al,14 ;Anzahl zu lesender Sektoren
;mov ch,2 ;Track
;mov cl,2 ;Erster Sektor
;mov dx,0 ;Head und Laufwerk
;int 13h
;jc read2
;mov ah,1
;mov state,ah
;retn

boot:
jmp reboot
retn

reboot:
mov si,msg_reboot
call print
mov ah,0h
int 16h
db 0eah
dw 0000h
dw 0ffffh

times 512-($-$$)-2 db 0
dw 0x0aa55


mfg, jeb

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 24. April 2005, 10:55 »
Auf meinem Test PC (Pentium1, 200MHz) läuft er problemlos (mal abgesehen davon dass er den KErnel nicht findet ^^). Was mich aber ganz extrem irritiert ist das du keinen Stack erstellst. Möglicherweise wird auf manchen PCs automatisch ein Stack erstellt. Du solltest also zwischen code: und mov si, msg_loader einen Stack erstellen.

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 24. April 2005, 11:52 »
... und sicherheitshalber ds und es mit 0 initialisieren.
Dieser Text wird unter jedem Beitrag angezeigt.

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #5 am: 24. April 2005, 13:38 »
Also einen Stack gibt es immer, da vorher ja das BIOS am Werk ist und das ja auch called und seine eigenen Int'S benutzt. Aber man weiss nie wo der Stack ist, also lieber selbst festlegen.
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

jeb

  • Beiträge: 341
    • Profil anzeigen
    • http://www.jebdev.net
Gespeichert
« Antwort #6 am: 24. April 2005, 20:54 »
Au jah merci. Jetzt geht alles wunderbar. Bin halt noch nicht so vertraut mit ASM und hab den Stack ganz vergessen.

mfg, jeb

 

Einloggen