Hi
Also ein paar BIOS Interrupte wie man sie früher so schön in asm benutzen konnte können unter Windows mit Hilfe eines Virtuellen Device Drivers (VxD) abgefragt werden.
Dafür gibt es in der Windows Api einen DeviceIoControl aufruf. Leider kenn ich mich nicht genau damit aus aber wenn man z.b den Interrupt 13 ansprechen will würde das z.b so gehen :
Hier ein Beispiel um Floppy Informationen abzurufen über den Interrupt 13 :
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| function FloppyDriveSize (Drive : char) : TDriveType; type PDIOC_REG = ^TDIOC_Registers; TDIOC_Registers = record Reg_EBX, Reg_EDX, Reg_ECX, Reg_EAX, Reg_EDI, Reg_ESI, Reg_Flags : DWORD end; const VWIN32_DIOC_DOS_INT13 = 4; var H : THandle; R : TDIOC_Registers; C : DWORD; begin Result := dtFloppy; H := CreateFile ('\\.\VWIN32', 0, 0, nil, 0, 0, 0); if H <> INVALID_HANDLE_VALUE then try R.Reg_EAX := $800; R.Reg_EDX := ord (upcase(Drive)) - Ord('A'); if DeviceIOControl (H, VWIN32_DIOC_DOS_INT13, @R, SizeOf (R), @R, SizeOf (R), C, nil) and (R.Reg_Flags and 1 = 0) then if R.Reg_EBX and $FF < 3 then Result := dtFloppy5 else Result := dtFloppy3 finally CloseHandle (H) end end; |
Hier wird der Interrupt 13 Service 8 aufgerufen.
MFG
Daniel