проблема со чтением ide-шного винта через порты. в bochs все работает на 5 баллов - чтение, разбор структуры и тп, но как только тестирую ОС вживую (загрузка с дискеты) в буфер попадают случайные данные. код :
char *read_dev() {
int cnt = 0;
while((in( CMD_PORT ) & 0xc0) != READY_STAT);
bzero ( buffer, SECTOR_SIZE);
out(DRV_AND_HEAD_PORT,0xa0);
wait();
out(SECTOR_COUNT_PORT,0x01);
wait();
out(SECTOR_NUM_PORT,0x01);
wait();
out(CYL_LOW_PORT,0x00);
wait();
out(CYL_HIGH_PORT,0x00);
wait();
out(CMD_PORT,0x20);
asm(""::"c"(SECTOR_IN_WORDS),"d"(DATA_PORT)," D"(buffer));
asm("rep insw");
return buffer;
}
вопрос сводится вот к чему: надо ли при перепрограммировании PIC размаскировать IRQ 14 , надо ли вешать что-то специфическое на это IRQ? Нужны ли задержки между out в вышеприведенном коде и вообще - в чем может быть причина неоднозначного поведения софта в bochs & реальной жизни?