OSDev

для всех
Текущее время: 27 апр 2024, 20:38

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 129 ]  На страницу Пред.  1 ... 8, 9, 10, 11, 12, 13  След.
Автор Сообщение
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 08 дек 2011, 07:13 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Еще вопрс, куда нужно поставить функцию для получения сообщения от мышки юсбишной в idt, или так не получится и нужно номер прерывания искать в шинах pci
IDT:
dd 0,0 ; 0
dw syscall_handler, 08h, 1000111000000000b, 0 ; 1
dd 0,0 ; 2
dd 0,0 ; 3
dd 0,0 ; 4
dd 0,0 ; 5
dd 0,0 ; 6
dd 0,0 ; 7
dw int8_handler, 08h, 1000111000000000b, 0 ; 8 (IRQ 0 - системный таймер)
dw int9_handler, 08h, 1000111000000000b, 0 ; 9 (IRQ 1 - клавиатура)
dw int_EOI, 08h, 1000111000000000b, 0 ; 10 (IRQ 2 - ведомый контроллер прерываний)
dw int_EOI, 08h, 1000111000000000b, 0 ; 11 (IRQ 3 - COM2)
dw int_EOI, 08h, 1000111000000000b, 0 ; 12 (IRQ 4 - COM1)
dw exGP_handler, 08h, 1000111000000000b, 0 ; 13 #GP
dw int_EOI, 08h, 1000111000000000b, 0 ; 14 (IRQ 6 - FDD)
dw int_EOI, 08h, 1000111000000000b, 0 ; 15 (IRQ 7 - LPT1)
dw int_EOI, 08h, 1000111000000000b, 0 ; 16 (8)
dw int_EOI, 08h, 1000111000000000b, 0 ; 17 (9)
dw int_EOI, 08h, 1000111000000000b, 0 ; 18 (10)
dw int_EOI, 08h, 1000111000000000b, 0 ; 19 (11)
dw int_EOI, 08h, 1000111000000000b, 0 ; 20 (12)
dw int_EOI, 08h, 1000111000000000b, 0 ; 21 (13)
dw int_EOI, 08h, 1000111000000000b, 0 ; 22 (14)
dw int_EOI, 08h, 1000111000000000b, 0 ; 23 (15)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 08 дек 2011, 08:28 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Такое прерывание будет идти не от мышки, а от хост-контроллера USB, к которому может быть подключено несколько разных устройств. Работать с этим контроллером не так уж и просто, так что лучше от поддержки мыши пока отказаться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 08 дек 2011, 11:27 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
SII писал(а):
так что лучше от поддержки мыши пока отказаться.

:)

А если во всех прерываний от pci проверять какой нибудь байт отвечающий за то, что это мыш?
Тоже не поканает?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 08 дек 2011, 13:04 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Для контроллера прерываний не существует такого устройства, как USB-мышь, USB-клавиатура, USB-флэшка и т.д. и т.п., для него существует лишь хост-контроллер USB. Более того, никакое USB-устройство самостоятельно не может послать сигнал прерывания -- таковой передаётся только в ответ на прямой запрос со стороны хост-контроллера. Ну а контроллер должен быть кем-то запрограммирован, понятное дело. BIOS его программирует, чтобы поддерживать некоторые устройства (те же клавиатуру и мышь), но никаких сервисов программе пользователя, насколько помню, не предоставляет. Правда, BIOS обычно может имитировать наличие клавиатуры и мыши PS/2, когда реально используются устройства USB, но тогда программа пользователя работает с ними через контроллер PS/2 (и не задумывается, что физически этого интерфейса вообще может не быть -- это головная боль разработчиков материнки и BIOS). Точно так же дисковые сервисы BIOS имитируют работу с флэшкой как с обычным диском, однако, если пользователь захочет работать с ней напрямую, без BIOS, ему придётся для начала создавать драйвер хост-контроллера USB, над котором будет работать драйвер флэшки (ну и драйверы клавиатуры и мыши, если таковые нужны), а над ним -- драйвер файловой системы, используемой на этой флэшке. В общем, весьма непростая задача.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 08 дек 2011, 14:08 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Станислав писал(а):
А если во всех прерываний от pci проверять какой нибудь байт отвечающий за то, что это мыш?

А тебе что, только прерывание нужно? Прерывание - это самая малая часть механизма. Ты сначала весь механизм изучи, потом будет видно - что, откуда и куда.
Да и обычно в настройках BIOS включен режим эмуляции USB клавиатуры и мыши на PS/2, так что можно с USB не заморачиваться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 08 дек 2011, 16:51 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Еще забыли сказать, что хост-контроллер обычно вешается на прерывания выше 15. А это дополнительное увеличение объема работ. Поэтому используем интерфейс PS/2 и IRQ12 и не паримся. Я до сих пор не имею поддержки USB. Если кто-то хочет этим заняться, то можно скооперироваться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 08 дек 2011, 16:58 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Станислав писал(а):
IDT:
dd 0,0 ; 0
dw syscall_handler, 08h, 1000111000000000b, 0 ; 1
dd 0,0 ; 2
dd 0,0 ; 3
dd 0,0 ; 4
dd 0,0 ; 5
dd 0,0 ; 6
dd 0,0 ; 7
dw int8_handler, 08h, 1000111000000000b, 0 ; 8 (IRQ 0 - системный таймер)
dw int9_handler, 08h, 1000111000000000b, 0 ; 9 (IRQ 1 - клавиатура)
dw int_EOI, 08h, 1000111000000000b, 0 ; 10 (IRQ 2 - ведомый контроллер прерываний)
dw int_EOI, 08h, 1000111000000000b, 0 ; 11 (IRQ 3 - COM2)
dw int_EOI, 08h, 1000111000000000b, 0 ; 12 (IRQ 4 - COM1)
dw exGP_handler, 08h, 1000111000000000b, 0 ; 13 #GP
dw int_EOI, 08h, 1000111000000000b, 0 ; 14 (IRQ 6 - FDD)
dw int_EOI, 08h, 1000111000000000b, 0 ; 15 (IRQ 7 - LPT1)
dw int_EOI, 08h, 1000111000000000b, 0 ; 16 (8)
dw int_EOI, 08h, 1000111000000000b, 0 ; 17 (9)
dw int_EOI, 08h, 1000111000000000b, 0 ; 18 (10)
dw int_EOI, 08h, 1000111000000000b, 0 ; 19 (11)
dw int_EOI, 08h, 1000111000000000b, 0 ; 20 (12)
dw int_EOI, 08h, 1000111000000000b, 0 ; 21 (13)
dw int_EOI, 08h, 1000111000000000b, 0 ; 22 (14)
dw int_EOI, 08h, 1000111000000000b, 0 ; 23 (15)
Ну-ну... Больше советов давать не буду - незачем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 09 дек 2011, 10:36 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Как вам такой пример заполнения idt используется в татОс
idt_desc:
dw idt_end - idt - 1 ;idt limit/size
dd idt ;idt linear physical address


idt:
dw ir0 ;interrupt 00, div by 0 (fault)
dw 0x08
db 0
db 0x8e ;=1000110b, ring=0
dw 0

dw ird ;interrupt 01, RESERVED by Intel
dw 0x08
db 0
db 0x8e
dw 0

dw ir2 ;interrupt 02, NMI nonmaskable (interrupt)
dw 0x08
db 0
db 0x8e
dw 0

dw ird ;interrupt 03, breakpoint (trap)
dw 0x08
db 0
db 0x8e
dw 0

dw ir4 ;interrupt 04, overflow (trap)
dw 0x08
db 0
db 0x8e
dw 0

dw ir5 ;interrupt 05, BOUND range exceeded (fault)
dw 0x08
db 0
db 0x8e
dw 0

dw ir6 ;interrupt 06, invalid opcode (fault)
dw 0x08
db 0
db 0x8e
dw 0

dw ird ;interrupt 07, no math coprocessor (fault)
dw 0x08
db 0
db 0x8e
dw 0

dw ir8 ;interrupt 08, double fault (abort-error code)
dw 0x08
db 0
db 0x8e
dw 0

dw ird ;interrupt 09, coproc segment overrun (fault)
dw 0x08
db 0
db 0x8e
dw 0

dw ird ;interrupt 10, invalide tss (fault-error code)
dw 0x08
db 0
db 0x8e
dw 0

dw ird ;int 11, segment not present (fault-error code)
dw 0x08
db 0
db 0x8e
dw 0

dw ir12 ;interrupt 12, stack seg (fault-error code)
dw 0x08
db 0
db 0x8e
dw 0

dw ir13 ;interrupt 13, gen protection (fault-error code)
dw 0x08
db 0
db 0x8e
dw 0

dw ird ;interrupt 14, page (fault-error code)
dw 0x08
db 0
db 0x8e
dw 0

dw ird ;interrupt 15, RESERVED
dw 0x08
db 0
db 0x8e
dw 0

dw ir16 ;interrupt 16, FPU coprocessor (fault)
dw 0x08
db 0
db 0x8e
dw 0

dw ird ;interrupt 17, alignment check (fault-error code)
dw 0x08
db 0
db 0x8e
dw 0

dw ird ;interrupt 18, machine check (abort)
dw 0x08
db 0
db 0x8e
dw 0

dw ird ;interrupt 19, SIMD floating point (fault)
dw 0x08
db 0
db 0x8e
dw 0



;19-31 are reserved unnamed exceptions
dw ird ;interrupt 20
dw 0x08
db 0
db 0x8e
dw 0

dw ird ;interrupt 21
dw 0x08
db 0
db 0x8e
dw 0

dw ird ;interrupt 22
dw 0x08
db 0
db 0x8e
dw 0

dw ird ;interrupt 23
dw 0x08
db 0
db 0x8e
dw 0

dw ird ;interrupt 24
dw 0x08
db 0
db 0x8e
dw 0

dw ird ;interrupt 25
dw 0x08
db 0
db 0x8e
dw 0

dw ird ;interrupt 26
dw 0x08
db 0
db 0x8e
dw 0

dw ird ;interrupt 27
dw 0x08
db 0
db 0x8e
dw 0

dw ird ;interrupt 28
dw 0x08
db 0
db 0x8e
dw 0

dw ird ;interrupt 29
dw 0x08
db 0
db 0x8e
dw 0

dw ird ;interrupt 30
dw 0x08
db 0
db 0x8e
dw 0

dw ird ;interrupt 31
dw 0x08
db 0
db 0x8e
dw 0


;interrupts 32-255 are User defined non-reserved
;we reprogrammed the pic to put 16 hdwre interrupts here
;so they dont conflict with the above software ints
;pic1, irq0-irq7, port 0x20
;pic2, irq8-irq15, port 0xa0

;start of PIC1 interrupts
dw irq0 ;interrupt 32=0x20, irq0, system timer
dw 0x08
db 0
db 0x8e
dw 0

dw irq1 ;interrupt 33, irq1, keyboard
dw 0x08
db 0
db 0x8e
dw 0

dw irqd1 ;interrupt 34, irq2, int from 2nd pic
dw 0x08
db 0
db 0x8e
dw 0

dw irqd1 ;interrupt 35, irq3, com2
dw 0x08
db 0
db 0x8e
dw 0

dw irqd1 ;interrupt 36, irq4, com1
dw 0x08
db 0
db 0x8e
dw 0

dw irqd1 ;interrupt 37, irq5, lpt2
dw 0x08
db 0
db 0x8e
dw 0

dw irqd1 ;interrupt 38, irq6, floppy disc
dw 0x08
db 0
db 0x8e
dw 0

dw irqd1 ;interrupt 39, irq7, lpt1
dw 0x08
db 0
db 0x8e
dw 0

;**************************
;start of PIC2 interrupts
;**************************
dw irqd2 ;interrupt 40=0x28, irq8, real time clock
dw 0x08
db 0
db 0x8e
dw 0

dw irqd2 ;interrupt 41, irq9, general i/o
dw 0x08
db 0
db 0x8e
dw 0

dw irqd2 ;interrupt 42, irq10, general i/o
dw 0x08
db 0
db 0x8e
dw 0

dw irqd2 ;interrupt 43, irq11, general i/o
dw 0x08
db 0
db 0x8e
dw 0

dw irq12 ;interrupt 44, irq12, ps2 mouse
dw 0x08
db 0
db 0x8e
dw 0

dw irqd2 ;interrupt 45, irq13, coprocessor
dw 0x08
db 0
db 0x8e
dw 0

dw irqd2 ;interrupt 46, irq14, hard disc
dw 0x08
db 0
db 0x8e
dw 0

dw irqd2 ;interrupt 47, irq15, general i/o
dw 0x08
db 0
db 0x8e
dw 0

;if you want kernel services
;use 0x30 = 48

idt_end:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 09 дек 2011, 12:58 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Собственно это я и предлагал, только syscall можно подальше сдвинуть, оставив резерв для прерываний выше 15. Например, в типичной конфигурации с APIC'ом используются не 16, а 24 прерывания. Как я ранее сказал, я резервирую диапазон вплоть до вектора 60h исключительно для аппаратных прерываний.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 09 дек 2011, 13:42 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Ну я ещё не до конца разобрался, у меня клава и таймер пашут, а остальные молчат как партизаны. Хотя размаскеровал все

mov al, 00000000b
out 0x21, al ; Размаскируем прерывания все
out 0xA1, al ; Размаскируем прерывания все
А как себя ведут прерывания у вас.(кроме клавы и таймера)?

Как (сдвинуть) пока тоже не понимаю. Мне вообще пока 60 не нужно, мне бы мышку, я на экране нарисовал прозрачные иконки, а двигать их нечем. :((((((((
В прошлом примере на 44 ом мыш pc2 висела, но это комп придется с pc2 доставать.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 129 ]  На страницу Пред.  1 ... 8, 9, 10, 11, 12, 13  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB