Autor Thema: Bootloader lädt nicht  (Gelesen 2906 mal)

blitzmaster

  • Beiträge: 77
    • Profil anzeigen
Gespeichert
« am: 16. November 2006, 18:17 »
Hier der code des bootsektors:
;
; boot.asm
;

;//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

;                                                                                Loads the OS - Loader into the RAM

;//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
;
; name : Boot-Loader
; file : boot.asm
; version : 0.1

;-- GENERAL THINGS-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Org 0x7C00
[Bits 16]

cli ; Preparing a stack
mov ax, 0x9000
mov ss, ax
xor ax,ax
mov ds,ax
mov es,ax
mov sp,ax
sti

;-- CODE SECTION---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
mov [bootdrv],dl

mov si, msg1
call WriteText
mov si, msg2
call WriteText

call load

mov si, msg3
call WriteText

mov si,msg4
call WriteText

mov ax,0x1000
mov es, ax
mov ds, ax
push ax ; Segment adress of os_ldr
xor ax,ax
push ax ; Offset adress of os_ldr
retf ; Far jump to kernel

;-- DATA SECTION---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;********** Variables **********
bootdrv db 0
msg1 db "Bootloader A/OS PM 0.2",13,10,0
msg2 db "***********************",13,10,0
msg3 db "Loading os-loader...",13,10,0
msg4 db "Calling os-loader...",13,10,0

;********** Functions **********
WriteText:
pusha
.1:
lodsb
or al,al
jz .2
mov ah, 0x0E
int 0x10
jmp .1
.2:
popa
retn
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
load:
pusha
.1:

mov ah, 0x00 ; Disk drive reset
mov dl, [bootdrv]
int 0x13
or ah,ah
jnz .1

.2:
mov ax, 0x1000
mov es, ax ; The os_ldr segment
mov ah, 0x02 ; Reading
mov dl, [bootdrv]
mov dh, 0 ; Disk side
mov ch, 0 ; Spur
mov cl, 1 ; Sector
mov al, 5 ; How many sectors?
mov bx, 0 ; The offset
int 13h
or ah,ah
jnz .2
popa
retn

times 512-($-$$)-2 db 0 ; Paddint file size up to one sector
dw 0x0AA55                  ; The boot-signature
Wegen der "----" Kommentare braucht man sich keine sorgen machen, das geht sich aus.
Er gibt zwar alle meldungen aus, jedoch springt er danach wieder zu sich selbst->gibt wieder alle Meldungen aus->springt wieder zu sich->.....
Das ist aber erst vor kurzem aufgetreten, er hat auf jeden fall schon einmal brav alles geladet, was ich von ihm wollte. FS hab ich auf der diskette nicht, da auf der Bootdiskette meines OSs keines sein soll, damit man sie nicht ruinieren kann. Aber egal.
Wer findet den Fehler? Ich auf jeden Fall nicht...
A / OS PM - THE operating system of the future

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 16. November 2006, 18:25 »
Zitat
mov dh, 0           ; Disk side
mov ch, 0 ; Spur
mov cl, 1 ; Sector
das ist der Bootsector

den darfst du nartürlich nicht noch ma laden, weil sont läde er sich wider und wieder ..

mov dh, 0           ; Disk side
mov ch, 0 ; Spur
mov cl, 2 ; Sector
so müsste es funktionieren
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

Coffee

  • Beiträge: 470
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 16. November 2006, 19:31 »
Zitat
  mov ax, 0x1000
mov es, ax ; The os_ldr segment
mov ah, 0x02 ; Reading
mov dl, [bootdrv]
mov dh, 0 ; Disk side
mov ch, 0 ; Spur
mov cl, 1 ; Sector
mov al, 5 ; How many sectors?
mov bx, 0 ; The offset
int 13h

so solltes gehen:

  mov ax, 0x1000
mov es, ax ; The os_ldr segment
xor bx,bx
mov ah, 2; Reading
mov dx, 0 ; Disk side
mov cx, 2
mov al, 5 ; How many sectors?
int 13h

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 16. November 2006, 20:16 »
mov ax, 0x1000
mov es, ax ; The os_ldr segment
xor bx,bx
mov ah, 2; Reading
mov dx, 0 ; Disk side
mov cx, 2
mov al, 5 ; How many sectors?
int 13h
das ist zwar jetzt schön zusammen gefasst, aber du gehst dann davon aus das von laufwerk A: gebootet wird, deshalb würde ich das ursprüngliche
mov dl, [bootdrv]beibehalten und höchstens
xor dh, dh ; disk side (0) statt
mov dh, 0 ;disk sideschreiben
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

blitzmaster

  • Beiträge: 77
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 17. November 2006, 14:48 »
thx @ all
A / OS PM - THE operating system of the future

 

Einloggen