hi!
hab nun den code etwas abgeaendert... nun kommt vom bochs her kein fehler mehr auch die aufloesung der logischen sektor nummer musste nun 100% funktionieren nur mit dem hineinspringen in den kernel hats noch was dass funkt nicht bochs bleibt einfach stehen...
der code
org 0x7c00
KERNEL_SIZE equ 76
KERNEL_SEGMENT equ 0x1000
KERNEL_START equ 1
%define LOOPS_1 bp-2
%define CYLINDER bp-4
%define HEADS bp-6
%define SECTORZ bp-8
%define LOGICAL bp-10
%define BUFFER bp-12
SUB sp, 12
CLI
XOR ax, ax
MOV ss, ax
MOV sp, 0x7c00
MOV ds, ax
STI
MOV ax, KERNEL_SEGMENT
MOV es, ax
XOR bx, bx
MOV cx, KERNEL_SIZE
MOV [LOOPS_1], cx
MOV ax, 1 ;start at sector2
MOV [LOGICAL], ax
MOV [SECTORZ], ax
main_loop:
MOV [LOOPS_1], cx ;take the loopvar to the logical sector number
MOV ax, [LOGICAL] ;Cylinder
MOV bx, 36
MOV dx, 0
DIV bx
MOV [CYLINDER], ax
MOV dx, 18 ;set TRACK 0 if TRACK is 18 is null
CMP dx, [SECTORZ]
JE set_null
fail:
;read the sector
MOV ax, KERNEL_SEGMENT
ADD bx, 512
MOV ah, 2
MOV al, 1
MOV ch, [CYLINDER]
MOV cl, [SECTORZ]
MOV dx, 0
INT 0x13
JC fail
MOV cx, [LOOPS_1]
MOV al, 1
ADD [LOGICAL], al
ADD [SECTORZ], al
LOOP main_loop;
JMP KERNEL_SEGMENT:0x0000
set_null
MOV ah, 0x0e
MOV al, '.'
MOV bx, 0x0004
INT 0x10
MOV dx, 1
MOV [SECTORZ], dx
JMP fail
aber warum springt er mir nicht in den kernel? ps head wird bei meinem os sowieso nie auf 1 kommen...(da sonst kein platz mehr fuer mein fs waere!!!)
ps: waenn ich mir bochsout.txt ansehe dann kommt sicher einige hundertmale:
00010167905e[CPU0 ] CALL_Ad: offset outside of CS limits
an dem wirds wohl liegen... aber wie krieg ich das raus?