Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обращение к PCI 
:(
    Опции темы
qwerty1122
Дата 23.4.2014, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 20.10.2013

Репутация: нет
Всего: нет



привет!вот по книжке одной написал программку для обращения к PCI:
Код

.MODEL MEDIUM
.486P
.stack 100h
.code

SEGMENT sseg para stack 'STACK'
DB 400h DUP(?)
ENDS
IDEAL
DATASEG
VendorID      DW ? ;идентификатор изготовителя
DeviceID      DW ? ;идентификатор устройства
ClassCode     DD ? ;тип устройства
InterruptLine DB ? ;номер используемого прерывания IRQ
BusNumber     DB ? ;номер шины
DeviceNumber  DB ? ;номер устройства и номер функции
NoPCI  DB 12,18,"Система не поддерживает PCI USB",0
NoUSB DB 12,23,"Контроллер не найден",0
BadReg DB 12,28,"Неверный номер регистра",0
ENDS

CODESEG
PROC PCITest
; Опрос PCI-устройств
; наличие PCI BIOS
        mov     AX,0B101h
        int     1Ah
        jc      @@PCIBIOSNotFound
        cmp     EDX,20494350h
        jne     @@PCIBIOSNotFound
; USB контроллер
        mov     AX,0B103h
        mov     ECX,0C0310h
        mov     SI,0
        int     1Ah
        jc      @@DeviceNotFound
        mov     [BusNumber],BH
        mov     [DeviceNumber],BL
; идентификатор изготовителя
        mov     AX,0B109h ;читать слово
        mov     DI,0      ;смещение слова
        int     1Ah
        jc      @@BadRegisterNumber
        mov     [VendorID],CX
; идентификатор устройства
        mov     AX,0B109h ;читать слово
        mov     DI,2      ;смещение слова
        int     1Ah
        jc      @@BadRegisterNumber
        mov     [DeviceID],CX
; тип устройства
        mov     AX,0B10Ah ;читать двойное слово
        mov     DI,8      ;смещение слова
        int     1Ah
        jc      @@BadRegisterNumber
        shr     ECX,8
        mov     [ClassCode],ECX
; прерываниe IRQ
        mov     AX,0B108h ;читать байт
        mov     DI,3Ch    ;смещение байта
        int     1Ah
        jc      @@BadRegisterNumber
        mov     [InterruptLine],CL

@@BadRegisterNumber:
@@DeviceNotFound:
@@PCIBIOSNotFound:

ENDP PCITest
ENDS

END

прогоняю ее через tasm и tlink и все хорошо в итоге создается exe-шник,запускаю его и вылазиет ошибка(на прикрепленой картинке)...подскажите как исправить это недоразумение?

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  2222.JPG 13,58 Kb
PM MAIL   Вверх
tzirechnoy
Дата 23.4.2014, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: нет
Всего: 16



Для начала, разумеется, начать обрабатывать ошыбки. Тогда будет заметно понятнее, в каком месте произошли неприятности.
PM MAIL   Вверх
qwerty1122
Дата 23.4.2014, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 20.10.2013

Репутация: нет
Всего: нет



Цитата(tzirechnoy @ 23.4.2014,  16:39)
Для начала, разумеется, начать обрабатывать ошыбки. Тогда будет заметно понятнее, в каком месте произошли неприятности.

как я буду обрабатывать ошибки если прогоняя через tasm и tlink все хорошо
от части послушал ваш совет,и не обращая внимания на книгу осторожно по шагам начал заново...вот что получилось
Код

IDEAL
LOCALS
model medium
;---------------------------------------------
dataseg
VendorTXT DB 'VendorID_',0dh,0ah,'$'
VendorID DW ?
DeviceTXT DB 'DeviceID_',0dh,0ah,'$'
DeviceID DW ?
BusTXT DB 'BusNumber_',0dh,0ah,'$'
BusNumber DB ?
NoPCI DB 'NO PCI BIOS',0dh,0ah,'$'
ends
;----------------------------------------------
segment sseg para stack 'stack'
DB 400h DUP(?)
ends
;----------------------------------------------
P386
codeseg
proc PCITest
mov ax,@data
mov ds,ax
mov ax,3
int 10h
mov ax,0b101h
int 1Ah
cmp ah,00h
jc @@PCIBIOSNotFound
cmp EDX,20494350h
jne @@PCIBIOSNotFound
mov dx,offset VendorTXT
mov ah,9
int 21h
mov dx,offset DeviceTXT
mov ah,9
int 21h
mov dx,offset BusTXT
mov ah,9
int 21h

@@PCIBIOSNotFound:
mov dx,offset NoPCI
mov ah,9
int 21h
mov ah,4ch
int 21h

endp PCITest
ends
end


и в итоге,ошибка исчезла...но вот теперь доходит до JNE и в конец...у меня даж слов нет...подскажите мож гдето что то неправильно делаю с инициализацией PCI
PM MAIL   Вверх
tzirechnoy
Дата 24.4.2014, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: нет
Всего: 16



Цитата
как я буду обрабатывать ошибки если прогоняя через tasm и tlink все хорошо


Ошыбки периода исполнения (run-time) никак себя особенно не проявляют в tasm и tlink. Обрабатывать их надо, предусматривая соответствующие ветки программ, код в которых выполняется при ошыбках, и делает что-то разумное (например, сообщает пользователю о месте возникновения ошыбки).

А не, как у вас, улетает в неиницыализированные области при любом неожыданном ответе системных вызовов.

PS А, да, вижу, начали обрабатывать. Замечательно, Вам выдан вполне корректный ответ, что PCI BIOS не найден. Видимо, NTVDM (Вы его ведь под NTVDM запускаете? Ну, запускалка DOS-программ под win32?) не поддержывает функцыи PCI BIOS.
Да и, действительно, что ему там поддержывать? Непосредственного доступа к устройствам из NTVDM никогда не было, по соображэниям безопасности и разделения ресурсов. Корректно эмулировался набор из древних таймеров с контроллером прерываний, клавиатуры, PC спикера, старого но всё-таки 16-битного саунд бластера и VGA-адаптэра с VESA-функцыями. Ни одного устройства, требуещего PCI не эмулировалось, потому и поддержка PCI BIOS ему низачем не нужна.
PM MAIL   Вверх
qwerty1122
Дата 24.4.2014, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 20.10.2013

Репутация: нет
Всего: нет



да запускаю в DOS программе под win32...раз такая тема что не смогу получить доступ к PCI т.к. не поддерживается то подскажите пожалуйста каким образом я смогу проверить работоспособность программы?(вчера весь вечер голову ломал мож что в коде не так а оказалось вот в чем дело)

Добавлено через 3 минуты и 34 секунды
а вот если сделать загрузочную флешку на DOS то это сможет помочь?
PM MAIL   Вверх
LeonidPr
Дата 24.4.2014, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2012
Где: г. Чебоксары

Репутация: 1
Всего: 1



Можете установить дос в какой-нибудь эмулятор типа VMWare и там поиграться.
--------------------
pkunzip.zip
PM MAIL   Вверх
tzirechnoy
Дата 24.4.2014, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: нет
Всего: 16



Цитата
а вот если сделать загрузочную флешку на DOS то это сможет помочь?


Да, вполне вариант. Тут, правда, есть сложности что ужэ появляются материнские платы, которые не поддержываются ни одним DOSом из-за своих глюков, но это всё-таки ещё пока редкость.
Другой вариант -- взять эмулятор более нового писюка, например, qemu или, действительно, vmWare. Там, вполне вероятно, что будут эмулироваться какие-то PCI-устройства, и, в частности, скорее всего будет эмулироваться еhci-контроллер USB на PCI. Особенно если указать, что будет эмулироваться или пробрасываться какое-то USB-устройство.
Такжэ в некоторые виртуальные машыны можно пробросить реальное PCI-устройство (хотя поддержка этого довольно кривая).
PM MAIL   Вверх
qwerty1122
Дата 25.4.2014, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 20.10.2013

Репутация: нет
Всего: нет



попробовал через DOS,есть прогресс,срабатывает...но вот теперь загвоздка при выводе значения регистра выводится какието невообразимые символы
вот сам код
Код

IDEAL
LOCALS
model medium
;---------------------------------------------
dataseg
VendorTXT DB 'VendorID_',0dh,0ah,'$'
VendorID DW ?
DeviceTXT DB 'DeviceID_',0dh,0ah,'$'
DeviceID DW ?
BusTXT DB 'BusNumber_',0dh,0ah,'$'
BusNumber DB ?
NoPCI DB 'NO PCI BIOS',0dh,0ah,'$'
ends
;----------------------------------------------
segment sseg para stack 'stack'
DB 400h DUP(?)
ends
;----------------------------------------------
P386
codeseg
proc PCITest
mov ax,@data
mov ds,ax
mov ax,3        ;
int 10h            ;очистка экрана
;**********************************************************
mov ax,0b101h    ;проверка наличия PCI
int 1Ah            ;служебное прерывание
cmp ah,00h        ;сравнение
jc @@PCIBIOSNotFound    ;если перенос установлен
cmp EDX,20494350h        ;строка символов PCI
jne @@PCIBIOSNotFound    ;если не равно то переход
    mov dx,offset VendorTXT    
    mov ah,9
    int 21h
    mov dl,al
    mov ah,2
    int 21h
;**********************************************************
jmp @@END

@@PCIBIOSNotFound:
mov dx,offset NoPCI    
mov ah,9
int 21h                    ;вывод сообщения NoPCI
mov ah,4ch
int 21h

@@END:
mov ah,4ch
int 21h

endp PCITest
ends
end


PM MAIL   Вверх
tzirechnoy
Дата 28.4.2014, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: нет
Всего: 16



Выводится символ с ASCII-кодом, соответствующим... В общем, херня выводится, через 2102 печатаются символы, числа печатаются заметно сложнее.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для Windows/DOS"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для Windows/Dos | Следующая тема »


 




[ Время генерации скрипта: 0.1369 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.