создание ОС на FASM

Тема в разделе "WASM.OS.DEVEL", создана пользователем vova65, 21 сен 2011.

  1. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    vova65
    Читай стандарт там всё написано.
    А так давай по порядку что именно ты не понимаешь?

    Что такое электричество рассказывать?
     
  2. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    При программировании PCI часто заглядываю в эту книгу.
     
  3. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    В регистр 0xCF8 записывается адрес устройства. Из 0хСFC читаешь данные.
    Данные читаются и пишутся по 32 бита за раз. Поэтому младшие 2 бита в описании порта равны 0.
    Поэтому 1 байт из конфигурационного пространства читается из 0 индекса.
    mov eax, адрес ; тут адрес устройства
    add eax, 0 ; прибавляем индекс
    or eax,80000000h ; устанавливаем 31 бит
    mov dx,0CF8h
    out dx,eax ; отправляем в порт полный адрес из которого будем читать.

    mov dx,0CFCh
    in eax,dx ; Читаем данные, один регистр

    ; так как в конфигурационном пространстве байты считаются от 0.
    ; То выделяем 1 байт
    and eax, 000000FF00h;
    shr eax, 8
     
  4. vova65

    vova65 New Member

    Публикаций:
    0
    Регистрация:
    21 сен 2011
    Сообщения:
    56
    что-то я туплю и не могу вехать в какие биты порта 0хCF8 записывать регистр 00D8h..
    суда по таблице..
    +---+---------+-------+-----------+--------+----------------+-+-+
    |31 |30 24 |23 16|15 11|10 8|7 2|1|0|
    +---+---------+-------+-----------+--------+----------------+-+-+
    | с | резерв |шина |устройство|функция|Индекс регистра|0|0|
    +---+---------+-------+-----------+--------+----------------+-+-+
    то регистр должен помещаться в биты 2-7... а индекс регистра состоит из 8 бит.. как его впихнуть в пять бит????
    или я тупой и не так все понял....
     
  5. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    vova65
    Это потому что ты путаешь регистр и байт в конфигурационном пространстве. Четыре байта это один регистр.
     
  6. vova65

    vova65 New Member

    Публикаций:
    0
    Регистрация:
    21 сен 2011
    Сообщения:
    56
    приведите пожалуйста пример как пример как изменить значение регистра 00D8h через порты I/О...

    в примере используйте любой номер шины, устройства и функции того девайса и любое значение для записи в регистр 00D8h....
     
  7. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Тебя заперли в комнате, а "Родительский контроль" не пропускает ничего кроме постов на этот форум?
     
  8. vova65

    vova65 New Member

    Публикаций:
    0
    Регистрация:
    21 сен 2011
    Сообщения:
    56
    Phantom_84
    Вовсе нет... просто после прочтения нескольких книг по работе PCI я немного не вехал...
    а спросить неукого... :dntknw:
     
  9. vova65

    vova65 New Member

    Публикаций:
    0
    Регистрация:
    21 сен 2011
    Сообщения:
    56
    как прочитать конфигурационное пространство PCI я понял... а от как работать с регистрами PCI устройства нет :dntknw: Подскажите как это делается.. или где почитать (так чтоб и чайник понял)
     
  10. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Все зависит от устройства, но в общем mov (MMIO) и in/out (PIO).
     
  11. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Формально выбор между MMIO/PIO определяется младшим битом BAR'а.
     
  12. vova65

    vova65 New Member

    Публикаций:
    0
    Регистрация:
    21 сен 2011
    Сообщения:
    56
  13. vova65

    vova65 New Member

    Публикаций:
    0
    Регистрация:
    21 сен 2011
    Сообщения:
    56
  14. vova65

    vova65 New Member

    Публикаций:
    0
    Регистрация:
    21 сен 2011
    Сообщения:
    56
  15. vova65

    vova65 New Member

    Публикаций:
    0
    Регистрация:
    21 сен 2011
    Сообщения:
    56
    Подскажите пожалуйста!!! почему при запуске scan_bus неотправляется ARP пакет????

    tx_buff dw 0FFFFh, 0FFFFh, 0FFFFh, 940Ch , 6DA4h, 7283h , 0806h
    dw 0001h , 0800h , 0604h , 0001h , 940Ch , 6DA4h, 7283h
    dw 0C0A8h, 0203h , 0000h , 0000h , 0000h, 0C0A8h, 026Eh
    Код (Text):
    1. scan_bus:
    2. mov [ds:pci_bus],0B801h
    3.     mov    ebx,2
    4.     xor    ecx,ecx
    5.     mov    edx,04h
    6.     mov    esi,2
    7.     call   pci_read_reg
    8. ;меняем значенние регистра
    9.     or     al, (1 shl 2) or (1 shl 0)
    10.     and    al, not (1 shl 1)
    11. ;Записываем в конфигурацыоное пространство
    12.     mov    edx,04h
    13.     call   pci_write_reg
    14. ;Сброс сетивого адаптера
    15.     mov    edx,[ds:pci_bus]
    16.     add    edx,37h
    17.     mov    al,1 shl 4
    18.     out    dx,al
    19.     mov    cx,1000 ; ждать уже не для сброса
    20. @@:
    21.       in       al,dx
    22.       test   al, 1 shl 4
    23.       jz       @f ; RST остается 1 во время сброса
    24.       dec      cx
    25.       jns      @b
    26.     mov eax,ecx    
    27. @@:
    28. ; включение Tx
    29.     ;mov       al,00001100b
    30.     mov    al,00000100b
    31.     mov    edx,[ds:pci_bus]
    32.       add      edx, 37h
    33.       out      dx, al
    34. ;Отправка пакета
    35.   lea eax,[tx_buff]
    36.   mov edx,[ds:pci_bus]
    37.     add edx,20h
    38.     out dx,eax
    39. ; установите размер и ранний порог
    40.     ;pop    eax ; pick up the size
    41.     mov eax,28
    42.   add   eax, (2 * 6 + 2)
    43.     cmp eax, 60h
    44.     jnc @f
    45.     mov eax, 60h
    46. @@:
    47.     or  eax, (8 shl 16) or (1 shl 13)
    48.  
    49.            add  edx,10h - 20h
    50.     out dx, eax  
    51. ret
     
  16. vova65

    vova65 New Member

    Публикаций:
    0
    Регистрация:
    21 сен 2011
    Сообщения:
    56
    Подскажите почему при запуске pciS не происходят приревания от rtl8139???

    Код (Text):
    1. pciS:
    2. mov ebx,2
    3. xor ecx,ecx
    4. mov edx,3Ch
    5. mov esi,2
    6. call pci_read_reg
    7. mov al,35h
    8. ;
    9. mov edx,3Ch
    10. call pci_write_reg
    11.  
    12. ;32 k Rxbuffer, неограниченного пакета dma, никакого обертывания, никакого rx порога
    13. ; примите широковещательные пакеты, примите физические пакеты соответствия
    14. mov    ax,0000E7BEh
    15. mov    edx,[ds:pci_bus]
    16. add     edx,44h
    17. out     dx, ax
    18.  
    19. ; включение Rx/Tx
    20.     mov    al,00001100b
    21.     mov    edx,[ds:pci_bus]
    22.       add      edx, 37h
    23.       out      dx, al
    24.  
    25. ; включите все прерывания
    26.     mov    edx,[ds:pci_bus]
    27.       add      edx,3Ch
    28.       ;mov ax,0FFFFh
    29.     mov  ax,0000h
    30.     out    dx,ax
    31.  
    32. ret
    33.  
    34. Часть таблицы irq
    35. .......
    36.  dw exit, 08h,1000111000000000b,0;31
    37.  dw timer, 08h,1000111000000000b,0;32 IRQ(0)
    38.  dw exit4, 08h,1000111000000000b,0;33 IRQ(1)
    39.  dw exit, 08h,1000111000000000b,0;34 IRQ(2)
    40.  dw exit1, 08h,1000111000000000b,0;35 IRQ(3)
    41.  dw exit, 08h,1000111000000000b,0;36 IRQ(4)
    42. .......
    функции pci_read_reg и pci_write_reg работают и значение 35h записывается в регистр 3Ch конфигурационного пространства PCI...
     
  17. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Это поле информационное. Оно не определяет номер прерывания.
    BIOS для нашего удобства записывает нужный вектор. Но не более того.