int 10h

Ноябрь 22nd, 2007 по SadKo Оставить ответ »

VESA

Всё-таки, упирался-не упирался, а прикрутил к ядру возможность вызывать int 10h. При чём, параметры можно передавать вот в такой вот структурке:

#pragma pack(push, 1)

typedef struct TRealmodeRegState
{
    WORD    FLAGS;
    WORD    DI;
    WORD    SI;
    WORD    DX;
    WORD    CX;
    WORD    BX;
    WORD    AX;
} TRealmodeRegState;

#pragma pack(pop)

Теперь оська умеет вваливаться в графический режим по f11 и вываливаться из него (тоже по f11). В качестве тестового режима было решено взять 0×114 (800x600x16).

Пора писать драйвер VBE (/dev/vbe).

Multiprocessing

Процессоры научились входить в main. Мало того, в качестве аргумента в main теперь передаётся номер процессора, который определяется специальным атомарным семафором. Теперь надо задуматься о шедулере, ибо тот шедулер, что имеется на данный момент, совсем не годится для мультипроцессорных систем. Уже есть идеи по организации шедулинга, но их надо воплотить в жизнь.
Ещё хотелось бы, чтобы на время иницализации /dev каждый процессор прописал себя в /dev/cpuid. Для этого надо как-то придумать, чтобы нужные нити запускались на нужных процессорах. Будем думать.
Known bugs
На AMD Athlon x2 упорно не хотят читаться секторы FDD. Скорее, проблема в том, что надо дёргать MTRR. Но надо проверить.
Опять же, на двухъядернике при нажатии нескольких клавиш одновременно виснет клава. Очень неприятно. Скорее, виноват второй CPU, который, возможно, отлавливает прерывание от клавиатуры. Наверное, проблема решится отрубанием APIC или программированием его в Virtual Wire Mode.

Реклама

1 комментарий

  1. Оооо, ну наконец-то! Поздравляю! =)

Добавить комментарий

Blue Captcha Image
Refresh

*