LINUX.ORG.RU

OS Development


0

0

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

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.