Информация об изменениях

Сообщение [modif] Чего нет в С для работы с железом? от 30.04.2023 13:25

Изменено 30.04.2023 20:07 Shmj

Чего (идеологически важного) нет в С?
Вот есть типа лабораторная работа по созданию свой ОС — https://github.com/cfenollosa/os-tutorial Для глубины понимания как все работает, скажем так.

Ну и там идея какая. Делаем на ассемблере подготовку (переход в защищеный режим и пр.) — а потом уже переходим на уровень выше и пишем на голом С. ОК вроде.

Но вот при написании видео-драйвера, к примеру, есть момент, который на голом С никак не сделать. Конкретно тут: https://github.com/cfenollosa/os-tutorial/blob/master/16-video-driver/drivers/ports.c А именно — прерывания. Их пришлось реализовать ассемблерными вставками.

Т.е. все остальное — обращение к видео-памяти и пр. — все это делается на голом С. Видео-память просто через указатель с константным адресом 0xb8000 — тут все ОК. А вот прерывания никак не сделать на голом С — эта концепция как бы не вписывается в язык.

Т.е. если сделать мин. загрузчик и передачу в библиотеку на голом С — то эта библиотека целиком и полностью может обойтись без ассемблерных вставок, окромя вызова прерываний? Ведь прерывания то не мапятся на адрес с возможность дернуть указатель на функцию.

Прав ли я? Так же интересует мнение по этому поводу.
Чего (идеологически важного) нет в С?
Вот есть типа лабораторная работа по созданию свой ОС — https://github.com/cfenollosa/os-tutorial Для глубины понимания как все работает, скажем так.

Ну и там идея какая. Делаем на ассемблере подготовку (переход в защищеный режим и пр.) — а потом уже переходим на уровень выше и пишем на голом С. ОК вроде.

Но вот при написании видео-драйвера, к примеру, есть момент, который на голом С никак не сделать. Конкретно тут: https://github.com/cfenollosa/os-tutorial/blob/master/16-video-driver/drivers/ports.c А именно — прерывания тьфу ты епта — работу с портами ввода-вывода. Их пришлось реализовать ассемблерными вставками.

Т.е. все остальное — обращение к видео-памяти и пр. — все это делается на голом С. Видео-память просто через указатель с константным адресом 0xb8000 — тут все ОК. А вот прерывания работу с портами ввода-вывода никак не сделать на голом С — эта концепция как бы не вписывается в язык.

Т.е. если сделать мин. загрузчик и передачу в библиотеку на голом С — то эта библиотека целиком и полностью может обойтись без ассемблерных вставок, окромя вызова прерываний работы с портами ввода-вывода?

По идее порты ввода-вывода такая же базовая концепция как и память? так ведь? Они на уровне железа как и память, верно? Так почему же их не добавили а память добавили?

Прав ли я? Так же интересует мнение по этому поводу.