|
Recently, I was trying to operate ATA-hard-disk with the lowest level way(i.e PIO ATA COMMAND) There's some problems make me perplexed after I run my code under VMWare-guest-WindowsXP. incorrect code: (Victoria checked already, Master 0x1F0 Slave 0x170) 1. Status Register READ (no ATA-hard-disk attached to PCI-ATA-Controller) INCORRECT CODE: mov dx, 0x1F7 in AL, dx RESULT: always got 0x7F in Register AL (0x7F: BSY is 0, DRQ is 1, so couldn't send command to Port 0x1F7) But at the same time: CODE: mov dx, 0x177 in AL, dx RESULT: got 0x50 in Register AL (indicate ATA-Controler assertive that It could receive ATA-command now) 2. Status Register READ (with an ATA-hard-disk attached to PCI-ATA-Controller) INCORRECT CODE: mov dx, 0x1F7 in ax, dx CORRECT CODE: mov dx, 0x1F7 in al, dx RESULT: VMWare stoped itself with an error, NOT a GUEST-OS crash(BSOD). 3. Control Register WRITE (Software Reset with send SRST(value:0x4) singnal to Control Register(port:0x3F6)) INCORRECT CODE: mov al, 0x04 mov dx, 0x3F6 out dx, al RESULT: VMWare stoped itself with an error, NOT a GUEST-OS crash(BSOD). Any info on this will be appreciated !
|