ein weiteres mal floppy
-
ich habe einen totalen knoten... es gelingt mir nicht in meinem bootstrapper von floppy zu lesen. ich hab jetzt schon einmal den bootstrapper neu geschrieben und etwa 3 mal den floppy code:
;floppy reset reset: mov ah,00h mov dl,0 int 13h ret ;floppy lesen load: mov cx,3 retry: call reset cmp cx,0 dec cx je fehler push cx mov ah,02 mov al,2 mov ch,0 mov cl,2 mov dh,0 mov dl,0 mov bx,01000h push word 0000h pop es int 13h pop cx jc retry ende: ret fehler: stc ret
ich lass das immer in bochs laufen der meldet mir das folgende:
Event type: PANIC Device: [PIC ] Message: [PIC ] io write to port 00a0, len=2
ich habe aber noch nie den pic auch nur angetastet (jedenfalls nicht wissentlich)
kann mir einer helfen ich verzweifle langsam
-
schieb
kann mir wirklich keiner helfen? oder braucht ihr den ganzen loader um das beurteilen zu können?
-
*nicht helfen kann*
irgendwann, wenn ich mal gerade lust dazu habe, werde ich mich mal wieder eingehender mit der Thematik OS-Proggen beschaeftigen.Hast du deinen Bootsector ueberhaupt schonmal ausserhalb von Bochs laufen lassen? Ich wuerde da auch mal in erwaegung ziehen, dass Bochs nen Fehler hat und nicht dein Code
-
Poste mal ein bisschen mehr von deinem Code.
Hast du ganz sicher ss, sp und bp initialisiert (du benutzt ja kräftig den Stack)?btw:
mov bx, 01000h
push word 0000h
pop esIch bin mir nicht ganz sicher, aber ich glaube die physikalische adresse 1000h ist schon durch was anderes belegt. Ich würde es mal mit dem Segment 1000h und dem Offset 0 versuchen.
-
edit: die source geht jetzt *phreu*
[BITS 16] [ORG 7c00h] ;stack initialisieren cli mov ax, 09000h mov ss, ax mov sp, 0 sti push cs pop ds call a20 mov si,msg call print call load jnc okey mov si,error call print cli hlt okey: mov si,ok call print jmp 0000h:0f000h ;daten msg db 00000111b,"lade system",0 ok db 00000010b,"geladen",0 error db 00000100b,"konnte diskette nicht lesen!",0 ;prozeduren ;warten bis keyboard fertig ist kbwait: in al,064h test al,02h jnz kbwait ret ;löscht den bildschirm clear: push word 0B800h pop es xor ax,ax xor cx,cx xor di,di cloop: cmp cx,2000 stosw je cende inc cx jmp cloop cende: mov di,0 ret ;ausgabeprozedur print: push word 0B800h pop es mov ah,[si] next: inc si mov al,[si] cmp al,0 je enext stosw jmp next enext: mov ax,di mov dl,160 div dl cmp ah,0 je pende mov ax,0 stosw jmp enext pende: ret ;a20 aktivieren a20: cli xor ax,ax call kbwait mov al,0d1h out 064h,al call kbwait mov al,0dfh out 060h,al call kbwait sti ret ;floppy reset reset: mov ah,00h mov dl,0 int 13h ret ;floppy lesen load: mov cx,3 retry: call reset cmp cx,0 dec cx je fehler push cx mov ah,02 mov al,2 mov ch,0 mov cl,2 mov dh,0 mov dl,0 mov bx,0f000h push word 0000h pop es int 13h pop cx jc retry ende: ret fehler: stc ret ;restart restart:db 0EAh dw 0000h dw 0ffffh times 510-($-$$) db 0 ;ergänzen auf 512 bytes dw 0AA55h ;bootsektor ende
[ Dieser Beitrag wurde am 01.06.2002 um 18:23 Uhr von japro editiert. ]
[ Dieser Beitrag wurde am 01.06.2002 um 18:24 Uhr von japro editiert. ]
-
Ich bin mir nicht sicher aber hast du vergessen, bp zu initialisieren?
Und wie ich schon erwähnt hab: Ich würde mal probieren, 1000h als Segment und nicht als Offset zu benutzen. Ich bin mir mittlerweile immer sicherer dass die adresse 0:1000h schon durch das BIOS benutzt wird (IMHO die untersten 64kb des rams).
-
du hast recht dsa wars.... (wie doof das ich da nie was anderes probiert hab)
ich passe den code vom vorigen beitrag an damit der richtige steht
danke!!!
-
Ich hab grad einen alten Beitrag gefunden. http://www.c-plusplus.net/ubb/cgi-bin/ultimatebb.cgi?ubb=get_topic&f=17&t=000321
Dort steht, dass der Bereich 1000h doch frei ist. Naja....
[ Dieser Beitrag wurde am 01.06.2002 um 18:31 Uhr von cd9000 editiert. ]