int main(void) { init(); configureScheduler(); while (true) { scheduler(); processLoopback(); } }
void setup() { u16 value; // Тут мы задаем маску, что позволяет маскировать выборочные IRQ wrio8( 0x00, 0x21 ); // 0x21 - ведущий контроллер прерываний wrio8( 0x00, 0xA1 ); // 0xA1 - ведомый контроллер прерываний // Инициализируем память, производится подсчет доступной RAM configureRam(); // Функция initGates() инициализирует idttable configureGates(); // Устанавливаем обработчики исключений setTrapGate( &onDivideError, 0x00 ); setTrapGate( &onDebug, 0x01 ); setTrapGate( &onNmi, 0x02 ); setTrapGate( &onBreakpoint, 0x03 ); setTrapGate( &onOverflow, 0x04 ); setTrapGate( &onBoundsExceeded, 0x05 ); setTrapGate( &onInvalidOpcode, 0x06 ); setTrapGate( &onNoX87, 0x07 ); setTrapGate( &onDoubleFault, 0x08 ); setTrapGate( &onX87Overrun, 0x09 ); setTrapGate( &onInvalidTss, 0x0A ); setTrapGate( &onSegmentNotPresent, 0x0B ); setTrapGate( &onStackSegmentFault, 0x0C ); setTrapGate( &onGeneralProtection, 0x0D ); setTrapGate( &onPageFault, 0x0E ); setTrapGate( &onReserved, 0x0F ); setTrapGate( &onX87Fault, 0x10 ); setTrapGate( &onAlignmentCheck, 0x11 ); for( value = 0x12; value != 0x20; ++value ) setTrapGate( &onReserved, value ); // Устанавливаем обработчики прерываний setTrapGate( &onTimer, 0x20 ); setTrapGate( &onKeyboard, 0x21 ); // Конфигурируем i8253-совместимый контроллер configure8253( I8253_CONFIG_CH0 | I8253_READ_LHB | I8253_MODE3 | I8253_BIN ); set8253( 0x7FFF, I8253_CH0 ); // Эта функция инициализирует консоль: // устанавливает указатель на видеопамять, // очищает экран, указывая для каждого символа // палитру - аргумент функции configureConsole( 0x0F ); // Эта функция инициализирует часы реального времени: // включает режим bin вместо bcd, и 24х-часовой формат configureClock(); /* value = rdcmos( CMOS_SECOND ); while( rdcmos(CMOS_SECOND) == value ) NOP(); */ readSystemClock( &startupDateTime ); // Инициализируем многозадачность // Доступен только один контекст - task0 configureScheduler(); prints("::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n"); };