System coders zone Board.sysbin.com
Здесь говорят правду!   RSS   Файловый хостинг #1

 ПоискПоиск   ПользователиПользователи   РегистрацияРегистрация   ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

WhiteSea Operating System
На страницу 1, 2, 3, 4, 5  След.
 
Начать новую тему   Ответить на тему    Список форумов Board.sysbin.com -> OS development
Предыдущая тема :: Следующая тема  
Автор Сообщение
Alexey
Завсегдатай
Завсегдатай


Зарегистрирован: 29.08.2009
Сообщения: 73
Откуда: Моск обл

СообщениеДобавлено: Вс Сен 27, 2009 9:00 pm    Заголовок сообщения: WhiteSea Operating System Ответить с цитатой

Долгое время до этого я разрабатывал некую ось, на подобие win3.1, как надстройка над DOS`ом. Где-то на 40% ядра решил, что проект стоит того, чтобы быть стать полностью самостоятельной осью. Вот сейчас делаю

Концепции вот такие:
1. ПОЛНАЯ поддержка ООП, как на уровне ядра, так и приложений.
2. Виртуальная машина (похоже на .NET, не java-ос! Twisted Evil )
3. Память плоская (В виртуальной машине защита памяти не нужна)
4. Полноценный GUI
5. Новые принципы защиты данных
6. В перспективе разработка Object FS.
7. Режим 32-бит, в перспективе 64-бит
Пишется все на C++ (Не C pc )

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

Что уже есть: Перегнал GrindarsOS Very Happy
Просмотреть профиль
Dron
Гуру третьей степени
Гуру третьей степени


Зарегистрирован: 12.01.2005
Сообщения: 3105
Откуда: Москва

СообщениеДобавлено: Пн Сен 28, 2009 10:56 am    Заголовок сообщения: Ответить с цитатой

Какой-то смешанный набор концепций...

Современные принципы защиты данных и файловые системы типа поддерживаться не будут?
Современный GUI типа неполноценный? Smile Хотя тут пожалуй соглашусь.
Как плоская память и виртуальная машина сочетаются с C++?
Просмотреть профиль
Прутся от ось медведи, вертится земля...
Jabber ID: dron@jabber.cc
BLOG: http://mdf-i.blogspot.com/
Alexey
Завсегдатай
Завсегдатай


Зарегистрирован: 29.08.2009
Сообщения: 73
Откуда: Моск обл

СообщениеДобавлено: Пн Сен 28, 2009 7:34 pm    Заголовок сообщения: Ответить с цитатой

Из файловых систем будут поддерживаться FAT12, FAT32.
Так С++ просто язык разработки, предоставляющий средства для реализации полноценного ОО подхода, разве виртуальные машины с плоской памятью обязательно пишутся на ASM? Smile
Да, забыл, также есть кое-какие идеи по ускорению выполнения CIL-кода в 5 раз. Cool
Просмотреть профиль
Alexey
Завсегдатай
Завсегдатай


Зарегистрирован: 29.08.2009
Сообщения: 73
Откуда: Моск обл

СообщениеДобавлено: Пн Сен 28, 2009 9:09 pm    Заголовок сообщения: Ответить с цитатой

Вот такой вопрос возник с IDT:
Сначала конфигурирую контроллер прерываний:
Код:

asm("cli");

      /* отключим немаскируемые прерывания (NMI) */
      asm("in $0x70,%al");
      asm("or $0x80,%al");
      asm("out %al,$0x70");
      asm("in $0x71,%al");

      /* настроим PIC (8259) */
      asm("mov $0x11,%al");
      asm("out %al,$0x20");
      asm("out %al,$0xA0");
      asm("mov $0x20,%al");   /* IRQ 0x00-0x07 теперь 0x20-0x27 */
      asm("out %al,$0x21");
      asm("mov $0x28,%al");   /* IRQ 0x08-0x0A теперь 0x28-0x2F */
      asm("out %al,$0xA1");
      asm("mov $0x04,%al");
      asm("out %al,$0x21");
      asm("mov $0x02,%al");
      asm("out %al,$0xA1");
      asm("mov $0x01,%al");
      asm("out %al,$0x21");
      asm("mov $0x01,%al");
      asm("out %al,$0xA1");

      /* Запретим IRQ 0-7
         где 0xff (в двоичном виде 1111 1111) - маска,
         указывающая, какие IRQ запрещены.

         Например, маска 0xfc (1111 1100 bin)
         разрешит IRQ 0 (timer) и IRQ 1 (клавиатура).
      */
      asm("mov $0xff,%al");
      asm("out %al,$0x21");

      /* запретим IRQ 8-15 */
      asm("mov $0xff,%al");
      asm("out %al,$0xA1");
      asm("sti");

В комментариях описано.
Далее загружаю IDT вот так:
Код:

unsigned char *IDT=(unsigned char *)0x100000;
//Указатель на мое начало IDT
unsigned short *IDT_Size=(unsigned short *)0x100800;
//Указатель на размер IDT
unsigned int *IDT_Ptr=(unsigned int *)0x100802;
//Указатель на начало начала IDT
for(int i=0;i<0x800;i++)
{
   IDT[0]=0; //Зачищаем память с IDT
}   
     IDT_Size=(unsigned short*)2047;
 //Помещаем размер IDT в след. 2 байта
     IDT_Ptr=(unsigned int*)0x100000;
//Помещаем адрес начала IDT в еще след. 4 байта
     asm("lidt 0x100800");
//Загружаем IDT, указывая адрес начала слова с размером IDT

Загружаем дескрипторы прерываний так:
Код:

 unsigned char *IDT=(unsigned char *)0x100000;
      unsigned char b[8];
     b[0]=  (unsigned int)func & 0x000000FF;
      b[1]=( (unsigned int)func & 0x0000FF00) >> 8;
      b[2]=0x8;
      b[3]=0;
      b[4]=0;
      b[5]=type;
      b[6]=( (unsigned int)func & 0x00FF0000) >> 16;
      b[7]=( (unsigned int)func & 0xFF000000) >> 24;
      for(unsigned char i=0;i<8;i++)
     {
        IDT[vector*8+i]=b[i];
      }

//Загружаем:
 Interrupts::GDT_Add(0x20,0x8e,&IRQ_0);
 Interrupts::GDT_Add(0x21,0x8e,&IRQ_1);

Здесь IRQ_0,1 функции в ASM модуле:
Код:

[GLOBAL _IRQ_0]
align 4
_IRQ_0:
  pusha
  mov esi,0xb8000
  mov byte [esi],34 ;;Что-то покажем
  mov al,0x20
  out 0x20,al
  popa
  iret


Разрешаем IRQ 0-7, разрешаем прерывания
Код:

asm("mov $0xfc,%al");
asm("out %al,$0x21");
asm("sti");
Все, полетели!

И вот на первом же прерывании система грохается
Просмотреть профиль
Phantom-84
Гуру
Гуру


Зарегистрирован: 28.02.2006
Сообщения: 1129

СообщениеДобавлено: Вт Сен 29, 2009 8:05 am    Заголовок сообщения: Ответить с цитатой

Что за ламерство... Для начала регистр DS в обработчике переустанови, не забыв восстановить его на выходе, или к примеру префикс SS: используй. Даже не рискую спросить, инициализирован ли TR. В код подробно не вникал... надеюсь, там все правильно. GDT_Add не увидел.
Просмотреть профиль
Dron
Гуру третьей степени
Гуру третьей степени


Зарегистрирован: 12.01.2005
Сообщения: 3105
Откуда: Москва

СообщениеДобавлено: Вт Сен 29, 2009 9:30 am    Заголовок сообщения: Ответить с цитатой

Alexey писал(а):
Код:

           ...
      asm("in $0x70,%al");
      asm("or $0x80,%al");
      asm("out %al,$0x70");
      asm("in $0x71,%al");
           ...


Вот такой код ей богу удобнее писать на асме...

А чтобы пыль не лезла в нос - надо сделать пыле... Smile
Прежде чем ставить обработчики прерываний - поставь обработчики исключений - и тогда тебе, может быть, станет ясно что ты делаешь не так.

PS: Насчет CLI - жжешь... Smile
Просмотреть профиль
Прутся от ось медведи, вертится земля...
Jabber ID: dron@jabber.cc
BLOG: http://mdf-i.blogspot.com/
Phantom-84
Гуру
Гуру


Зарегистрирован: 28.02.2006
Сообщения: 1129

СообщениеДобавлено: Вт Сен 29, 2009 10:27 am    Заголовок сообщения: Ответить с цитатой

Цитата:
Вот такой код ей богу удобнее писать на асме...
+1
Уж слишком сильно автор торопился перейти на Си... только вот вопрос, в чем такой Си лучше асма?
Просмотреть профиль
Alexey
Завсегдатай
Завсегдатай


Зарегистрирован: 29.08.2009
Сообщения: 73
Откуда: Моск обл

СообщениеДобавлено: Вт Сен 29, 2009 6:45 pm    Заголовок сообщения: Ответить с цитатой

Dron писал(а):

PS: Насчет CLI - жжешь... Smile

CLI или CIL?
Цитата:
GDT_Add не увидел.

Там GDT_Add, он не подписан
Цитата:
Загружаем дескрипторы прерываний так: Код:

unsigned char *IDT=(unsigne .........

Цитата:
Вот такой код ей богу удобнее писать на асме...
Это только набросок, пока не до удобства, работало бы просто...
Цитата:
Для начала регистр DS в обработчике переустанови, не забыв восстановить его на выходе, или к примеру префикс SS: используй. Даже не рискую спросить, инициализирован ли TR.

Первый раз слышу, в документации такого нет. Это как делается? Никто не посоветует какую-нибудь хорошую доку по работе с прерываниями?
Просмотреть профиль
R_NEW
Специалист
Специалист


Зарегистрирован: 01.07.2005
Сообщения: 296
Откуда: Россия

СообщениеДобавлено: Вт Сен 29, 2009 9:00 pm    Заголовок сообщения: Ответить с цитатой

{
IDT[0]=0; //Зачищаем память с IDT
}
Very Happy

А это коммент к комменту фантома: Very Happy
Код:
[GLOBAL _IRQ_0]
align 4
_IRQ_0:
  pusha

  push ds
  mov eax,DS_SELECTOR ; подходящий для адресации селектор(в данном случае Base=0,и видимо DPL=0)
  mov ds,ax

  mov esi,0xb8000
  mov byte [esi],34 ;;Что-то покажем
  mov al,0x20
  out 0x20,al

  pop ds

  popa
  iret

ну или так:
Код:
[GLOBAL _IRQ_0]
align 4
_IRQ_0:
  pusha
  mov esi,0xb8000
  mov byte [SS:esi],34 ;;Что-то покажем(только опять таки дескриптор стёка должен быть нормален. Если объявить стёк размером 16кб с базой=0x120000, это не прокатит :) )
  mov al,0x20
  out 0x20,al
  popa
  iret

ну ты понел Smile
Кстати когда сам такое пИсал, SS как-то в голову не пришло. А ведь красиво получаеться, и всего +1 байт. Хотя канеш если в обработчике 200+ строк, активно работающих с памятью, то уже не выгодно.
Просмотреть профиль
Dron
Гуру третьей степени
Гуру третьей степени


Зарегистрирован: 12.01.2005
Сообщения: 3105
Откуда: Москва

СообщениеДобавлено: Вт Сен 29, 2009 9:18 pm    Заголовок сообщения: Ответить с цитатой

Alexey писал(а):
Dron писал(а):

PS: Насчет CLI - жжешь... Smile

CLI или CIL?


CIL... CLI... одна фигня... байткод для .NET...

Alexey писал(а):
Первый раз слышу, в документации такого нет. Это как делается? Никто не посоветует какую-нибудь хорошую доку по работе с прерываниями?


Phantom-84: Ну если он работает в одном сегменте, то это и не важно... и пока прерыания не обрабатываются - тем более Very Happy
Просмотреть профиль
Прутся от ось медведи, вертится земля...
Jabber ID: dron@jabber.cc
BLOG: http://mdf-i.blogspot.com/
Alexey
Завсегдатай
Завсегдатай


Зарегистрирован: 29.08.2009
Сообщения: 73
Откуда: Моск обл

СообщениеДобавлено: Вт Сен 29, 2009 9:24 pm    Заголовок сообщения: Ответить с цитатой

R_NEW, Да, спасибо, IDT[0]=0; исправил. По коменту подправил, только все равно не пашет... Это же по выводу символа, с этим проблем нет, по-ламаковски тоже работает. Smile
Просмотреть профиль
R_NEW
Специалист
Специалист


Зарегистрирован: 01.07.2005
Сообщения: 296
Откуда: Россия

СообщениеДобавлено: Вт Сен 29, 2009 10:22 pm    Заголовок сообщения: Ответить с цитатой

Ну когда дойдёшь до хотя бы дву-задачности Smile и колец защиты, тогда перестанет...
CLI канеш, чё за ересь Very Happy
Просмотреть профиль
Alexey
Завсегдатай
Завсегдатай


Зарегистрирован: 29.08.2009
Сообщения: 73
Откуда: Моск обл

СообщениеДобавлено: Ср Сен 30, 2009 3:12 pm    Заголовок сообщения: Ответить с цитатой

R_NEW, Многозадачность у меня по-другому устроена. CIL конечно - Common Intermediate Language - байт код для виртуальной машины.
Просмотреть профиль
Alexey
Завсегдатай
Завсегдатай


Зарегистрирован: 29.08.2009
Сообщения: 73
Откуда: Моск обл

СообщениеДобавлено: Ср Сен 30, 2009 7:08 pm    Заголовок сообщения: Ответить с цитатой

Хм, странно... Все заваливается еще не на обработке самого прерывания. Ставил в адрес обработчика прерывания адрес начала кода ядра, чтобы просто ядро перегружалось, но такого не происходит - все равно вылет. Как будто вообще IDT кривая. Пробовал самыми разными способами, и на асме, и на С, все перепробовал, все варианты - нет, вылет.
Просмотреть профиль
Alexey
Завсегдатай
Завсегдатай


Зарегистрирован: 29.08.2009
Сообщения: 73
Откуда: Моск обл

СообщениеДобавлено: Ср Сен 30, 2009 8:18 pm    Заголовок сообщения: Ответить с цитатой

Не, дело не в IDT. Все валится, если включить прерывания после перехода в PMode.
Просмотреть профиль
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Board.sysbin.com -> OS development Часовой пояс: GMT + 3
На страницу 1, 2, 3, 4, 5  След.
Страница 1 из 5

Similar Topics
Тема Автор Форум
Нет новых сообщений Non Operating System Semiono OS development
Нет новых сообщений My Dream Operating System CodeWorld News
Нет новых сообщений ONYX-32 Operating System =) Smart Coder OS development
Нет новых сообщений Sparkle - Operating System CodeWorld OS development
Нет новых сообщений (discontinued) SmartDOS Operating System Smart Coder OS development




Powered by www.phpbb.com