OSDev http://osdev.su/ |
|
PlutOS http://osdev.su/viewtopic.php?f=8&t=533 |
Страница 9 из 9 |
Автор: | AlikberOFF [ 28 мар 2017, 17:39 ] |
Заголовок сообщения: | PlutOS - подгонка концепции |
Нeт, не продвинулся я в написании собственной операционки. (Если не считать подобия ядра на собственном 8-битном процессоре с многозадачностью) Концепция же операционки несколько трансформировалась (не изменилась, а получила упрощение). Так, после того, как приложение загружается в память и получает управление, ему предоставляется полный объём адресного пространства - 4Гб (именно адресного пространства - не ОЗУ). Все эти 4Гб, естественно, разбиты на повторяющияся параграфы по 4кб, зеркально ссылаясь на некую область (допустим, стек). Однако, теперь доступ к портам обеспечивает программирование этих параграфов. Т.е. если аппаратно процессор обеспечивает индексацию до 65536 разных устройств через инструкции out/outs/in/ins, то через механизм исключения с опциональным чтением всех 32-бит регистра EDX, через старшие 16-бит регистра теперь индексируется и сам параграф. Код: mov ebx,0x12340000 ; Указатель на 64кб буфера клавиатуры Как видите, ничего существенно не изменилось. Если EDX=0x000ADEF0, а в порт отправить ссылку на "/dev/ega/", то, как логично ожидать, область 000A000..000AFFFF станет зеркалом EGA-графики.mov edx,ebx ; Подправляем указатель так, and edx,0xFFFF0000 ; чтобы передать ядру параграф or edx,0x0000DEF1 ; и указываем на порт определений lea eax,Console_in ; Теперь нужно передать соответствующую out dx,eax ; непосредственно в порт mov al,[ebx] ; С этого момент можно читать вводимый текст ... ... ... Console_in:db "/dev/con/",0 Главное отличие в том, что если в классических OS нужно обращаться через int/call API-интерфейс, здесь симулируется программирование памяти через порты ввода-вывода. Что не требует вовлечения в адресное пространство приложения ни байта системного кода. Подчеркну, что таким же образом мы можем параграфы памяти переключить на отображение классического API, будь то DirectX, OpenGL или OpenAL и пр… P.S.: Если кто-то ожидал от меня большего - извиняюсь за разочарование… Прошедший период времени занимался реализацией мульти-процессорного "движка" на примере i8080A. (Обычно же эмулятор - это длинное switch-case дерево с адским процессом отладки. Мой "движок", получая краткий, но подробный шаблон с описанием процессора, автоматически генерирует всю необходимую среду для него: эмулятор+ассемблер+дизассемблер) |
Страница 9 из 9 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |