ich les absichtlich immer nur 1 Sektor auf einmal, um solche Fehler zu umgehen
Code hab ich absichtlich nicht gepostet, ich dachte da vergeht den meisten die Lust, da er ein bisschen lang ist, aber wenns hilft:
readdisk:
push bp
mov bp, sp
sub sp, 0x06
pusha
mov ax, [bp+4]
mov bx, 0x0024
xor dx, dx
div bx
mov [bp-2], ax
mov ax, dx
push ax
mov bx, 0x0012
xor dx, dx
div bx
mov [bp-4], ax
pop ax
xor dx, dx
div bx
mov ax, dx
inc ax
mov [bp-6], ax
mov ax, [bp+6]
mov es, ax
mov ah, 0x02
mov al, 0x01
mov ch, [bp-2]
mov cl, [bp-6]
mov dh, [bp-4]
mov dl, 0x00
int 0x13
jc readdisk_fehler
popa
mov sp, bp
pop bp
ret
readdisk_fehler:
pusha
push ds
push ax
mov ax, 0x1000
mov ds, ax
mov [0x0000], ax
pop ax
pop ds
mov si, readdisk_fault
call text
mov ax, 0x1000
mov ds, ax
mov si, 0x00
mov cx, 0x0002
call hex
popa
jmp readdisk
readbr:
mov cx, 0x0001
mov ax, 0x1000
readbr_loop:
cmp cx, 0x0055
je readbr_e
push ax
push cx
call readdisk
add sp, 4
inc cx
add ax, 0x20
jmp readbr_loop
readbr_e:
ret
in der main Funktion (keine Ahnung wie die bei Assembler heist, is ja eigentlich keine Funktion)
wird dann einfach "call readbr" aufgerufen
Die Segmente und der Stack sind richtig gesetzt
das Dumme ist ich kann mir nicht vorstellen wo der Fehler ist, ich hätte gedacht ich berechne einfach irgendwas falsch und die Sektoren werden komplett daneben geladen,
aber das kann nicht sein, in Bochs funktionierts ja
(der Code zum Sektoren lesen ist größtenteils der von Tee-Jay, meiner wollte nie so wirklich)
EDIT:
na klasse, pusha sichert gar nicht alle Register, es z.B. nicht, deswegen konnte das gar nicht funktionieren
Funktionieren tut das ganze allerdings trotzdem noch nicht, jetzt stürzt er einfach ohne Fehlercode ab, aber ich bin schonmal ein Stück weiter