Chuck Guzis <cclist at sydex.com> wrote:
On 12/09/2015 09:58 PM, Oliver Lehmann wrote:
And this is whst I do/did. The drive supports
LBA. I also tried CHS
with it and oft course i used cyl 0, head 0 and sector 1 without
success.
I now ordered a cheap chinese LA
When you say that you get an error, exactly what is the error
(status bytes)? Before you issue the command, exactly what do the
drive registers contain?
After the command is issued, The status register has the ERR bit set,
and the error register has the ABRT bit set. With drive registers you
mean sector, cylinder and so on?
for LBA:
while ( pata_bsy() ) {}
write_io_register ( PATA_RW_SECTOR_COUNT_REGISTER, 1 );
write_io_register ( PATA_RW_SECTOR_NUMBER_REGISTER, 0 );
write_io_register ( PATA_RW_CYLINDER_LOW_REGISTER, 0 );
write_io_register ( PATA_RW_CYLINDER_HIGH_REGISTER, 0 );
write_io_register ( PATA_RW_DEVICE_HEAD_REGISTER, 0xa0 );
write_io_register ( PATA_W_COMMAND_REGISTER, 0x21 );
while ( pata_bsy() ) {}
if ( pata_err() ) {
return;
}
while ( !pata_drq() ) {}
pata_bsy, _drq and _err check the status registers for the relevant
bits. pata_err returns true. right after the command was issued.
I also checked after each register set - the status is always
correct, just after the command register is set, the drive goes
from busy to 0x59 (DRQ + ERR set).