hallo leute,
ich habe ein problem beim berechnen von LBA -> CHS.
die rechnung funktioniert nur bei bestimmten werden für LBA. wenn ich in einer Schleife von 0x0B3F (2879) runterzähle, und einzeln alle CHS's berechnen will, bleibt BOCHS einfach stehen. und wenn ich den rechner damit boote auch, nur mit dem unterschied, dass er auch keine text schreibt, nur die werte in den variablen.
weiß einer von euch woran das liegen könnte?
danke im voraus
Uni_Sol
hier der quelltext zum berechnen:
CODE_SECTION:
; Interrups verbieten
cli
; Stack setzen
mov ax, 0x9000
mov ss, ax
xor sp, sp
;Kernel suchen und laden
;xor ax, ax ; diskreset
;xor dx, dx
;int 13h
mov cx, 0x0B3F
main_loop:
mov ax, cx
xor dx, dx ; CHS berechnen
mov bx, 0x24
div bx
mov [Cylinder], dl
mov ax, dx
mov bx, 0x12
xor dx, dx
div bx
mov [Head], dl
mov ax, dx
inc al
mov [Sector], al
call _dump
xor ax, ax
int 16h
loop main_loop
push MsgBootError
call _print
inc sp
inc sp
; Reboot nach tastendruck
xor ax, ax
int 0x16
db 0xEA
dw 0x0000
dw 0xFFFF
hier der dump:
_dump:
pusha
push Cyl
call _print
inc sp
inc sp
mov ax, [Cylinder]
mov cx, 0x08
mov bx, 0x02
lp1:
div bx
push ax
mov al, dl
add ax, 0x0E30
int 10h
pop ax
loop lp1
mov ax, 0x0E0D
int 10h
mov ax, 0x0E0A
int 10h
push Hea
call _print
inc sp
inc sp
mov ax, [Head]
mov cx, 0x08
lp2:
div bx
push ax
mov ax, dx
add ax, 0x0E30
int 10h
pop ax
loop lp2
mov ax, 0x0E0D
int 10h
mov ax, 0x0E0A
int 10h
push Sec
call _print
inc sp
inc sp
mov ax, [Sector]
mov cx, 0x08
lp3:
div bx
push ax
mov ax, dx
add ax, 0x0E30
int 10h
pop ax
loop lp3
mov cx, 2
lp4:
mov ax, 0x0E0D
int 10h
mov ax, 0x0E0A
int 10h
loop lp4
popa
ret
print:
_print:
push bp
mov bp, sp
pusha
mov si, [Param0]
mov ah, 0x0E
xor bx, bx
__print_1:
lodsb
or al, al
jz __print_2
int 10h
jmp __print_1
__print_2
popa
mov sp, bp
pop bp
ret
hier noch die variablen:
DATA_SECTION:
Cylinder db 0x00
Head db 0x00
Sector db 0x00