Ejemplo n.º 1
0
int main(void) {
    init();

	configureScheduler();

    while (true) {
        scheduler();
        processLoopback();
    }
}
Ejemplo n.º 2
0
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");
};