проблема со чтением 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 & реальной жизни?