чтение с hdd через порты ВВ..
есть у меня такой код.. собсно он прост..
Код:
void hdd_read(ATA_DEVICE * dev, u16 count, u32 lba, u16 *buf){
hdd_wait_busy(dev);
outb(0x40 | dev->slavebit<<4, dev->base + REG_DEVICE);
outb((count>>8) & 0x0f, dev->base + REG_SECTORS); // hi part
outb((lba>>12) & 0x0f, dev->base + REG_LBA_LO);
outb((lba>>16) & 0x0f, dev->base + REG_LBA_MID);
outb((lba>>24) & 0x0f, dev->base + REG_LBA_HI);
outb((count) & 0x0f, dev->base + REG_SECTORS); // low part
outb((lba) & 0x0f, dev->base + REG_LBA_LO);
outb((lba>>4) & 0x0f, dev->base + REG_LBA_MID);
outb((lba>>8) & 0x0f, dev->base + REG_LBA_HI);
int i,j;
for(i = 0; i<count; i++){
sys_log("Get sector %i\r\n",i);
outb(0x24, dev->base + REG_COMMAND);
hdd_wait_ready(dev);
if(inb(dev->base+REG_COMMAND) & 1){
sys_log("filesystem.c\tHDD\tGot some error while reading sector %i\r\n",lba+i);
return;
}
for(j = 0; j<256; j++){
buf[i*512+j] = inw(dev->base);
}
}
вот при чтении с 3 сектора 8 секторов он мне как то странно читает..
00 +
01 +
02 -
03 +
04 +
05 -
06 -
07 +
08 +
09 -
10 -
11 +
12 +
и т.д.
т.е. чтение странным образом идет по два сектора.. однако циклы проходят все..
есть идеи что может быть?