;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ; SYSROUT06 - Read disk sector(s) ; IN: AL = 06H ; DL = Physical disk to read from ; EBX = Start Sector ; ECX = Amount of sectors to read ; OUT:AL = Error code ; ECX = Sectors read ;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ NODISKINTERFACE DB 'No Disk Interface for this disk !',13,10,0 DISKINTERFACEMOD DB '00112233',0 SYSROUT06: POP EAX MOV [REAL_EAX], EAX MOV [REAL_EBX], EBX MOV [REAL_EDX], EDX MOV [REAL_ESI], ESI MOV [REAL_EDI], EDI MOV AX, [GS:600H+90] MOVZX ESI, AX ADD ESI, 500H MATCHNEXTDSKENTRY2: MOV AL, [GS:ESI] ; DISKNUMBER CMP AL, DL JE FOUNDDISKNUMBER CMP AL, 0FFH JE SYSROUT06_DISKNOTFOUND ADD ESI, 32 JMP MATCHNEXTDSKENTRY2 SYSROUT06_DISKNOTFOUND: MOV AL, 0FFH XOR ECX, ECX ; DISK NOT FOUND !?!?!? JMP ENDOFSYSROUT06 FOUNDDISKNUMBER: MOV EAX, [GS:ESI+16] ADD EAX, [GS:ESI+20] ; SERVING MOD CMP EAX, 0 JE LETBIOSDODISKREAD MOV EDI, DISKINTERFACEMOD MOV EAX, [GS:ESI+16] MOV [DS:EDI], EAX MOV EAX, [GS:ESI+20] MOV [DS:EDI+4], EAX MOV ESI, [GS:ESI+24] ; 'hdb',0 or 'hda',0 etc... MOV AH, 10H ; READ SECTOR MOV AL, 21 ; CALL MODSERVICE INT 20H MOV EBX, [REAL_EBX] MOV EDX, [REAL_EDX] MOV EDI, [REAL_EDI] MOV ESI, [REAL_ESI] JMP ENDOFSYSROUT06 LETBIOSDODISKREAD: MOV ESI, [REAL_ESI] MOV EAX, [REAL_EAX] PUSHAD MOV [REAL_EBX], EBX MOV [REAL_ECX], ECX MOV [REAL_EDX], EDX MOV byte [REALMODE_FUNCTION], 2 CALL REALMODE_PORTAL POPAD MOV EAX, [GS:600H+44] ; REAL EAX MOV ECX, [GS:600H+52] ; REAL ECX ENDOFSYSROUT06: POP DS POP FS IRETD