· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Драйвер в ФАСМ

<< . 1 . 2 . 3 . >>

Посл.отвђт Сообщенiе


Дата: Июл 26, 2004 20:32:29

Увы:-(
Оставил сообщение на форуме ФАСМ-а. Может подскажут в чём дело.


Дата: Июл 26, 2004 21:45:08

Может быть.
Пробовал запускать мой драйвер?


Дата: Июл 26, 2004 23:46:33

почему PE DLL native а не просто PE native?


Дата: Июл 27, 2004 04:10:48

И так и так работает с этими двумя строчками, и в обоих случаях не работает без этих двух строчек.


Дата: Июл 27, 2004 04:14:03

ProgramMan
Hal.dll - это что такое? Без неё можно?


Дата: Июл 27, 2004 09:35:32 · Поправил: ProgramMan

Из hal.dll берётся секция инициализации.


Дата: Июл 27, 2004 09:38:05

section 'INIT' code import readable notpageable
dd rva szHal_dll
times 5 dd 0
szHal_dll db 'HAL.dll',0


Дата: Июл 27, 2004 09:40:20

Без неё тоже работает... странно.
Это всёже баг компилятора.


Дата: Июл 27, 2004 12:40:56

Возможно я не совсем понял, о чем вы тут говорите, но hal.dll это библиотека Hardware Abstraction Layer. Если надо из неё какие функции тянуть (HalMakeBeep, например), подключаем, если не надо не подключаем.


Дата: Июл 27, 2004 13:16:34

> Из hal.dll берётся секция инициализации.

Похоже на танцы с бубном ;-)


Дата: Июл 27, 2004 16:39:20

;
; Beeper Driver
;

format PE native 4.0 at 10000h
entry DriverEntry

include "%fasminc%/win32a.inc"
include "%fasminc%/macro/if.inc"

STATUS_DEVICE_CONFIGURATION_ERROR		equ 00C0000182h

TIMER_FREQUENCY        equ 1193167		     ; 1,193,167 Гц
OCTAVE		       equ 2			     ; множитель октавы

PITCH_C 	       equ 523			     ; До        -  523,25 Гц
PITCH_Cs	       equ 554			     ; До диез   -  554,37 Гц
PITCH_D 	       equ 587			     ; Ре        -  587,33 Гц
PITCH_Ds	       equ 622			     ; Ре диез   -  622,25 Гц
PITCH_E 	       equ 659			     ; Ми        -  659,25 Гц
PITCH_F 	       equ 698			     ; Фа        -  698,46 Гц
PITCH_Fs	       equ 740			     ; Фа диез   -  739,99 Гц
PITCH_G 	       equ 784			     ; Соль      -  783,99 Гц
PITCH_Gs	       equ 831			     ; Соль диез -  830,61 Гц
PITCH_A 	       equ 880			     ; Ля        -  880,00 Гц
PITCH_As	       equ 988			     ; Ля диез   -  987,77 Гц
PITCH_H 	       equ 1047 		     ; Си        - 1046,50 Гц

; Нам нужны три звука для до-мажорного арпеджио (до, ми, соль)

TONE_1		       equ TIMER_FREQUENCY/(PITCH_C*OCTAVE)
TONE_2		       equ TIMER_FREQUENCY/(PITCH_E*OCTAVE)
TONE_3		       equ (PITCH_G*OCTAVE)	      ; для HalMakeBeep

DELAY		       equ 3000000h		      ; для моей ~800mHz машины

section '.text' code readable executable notpageable

proc MakeBeep1,dwPitch
	enter
	; Прямой доступ к оборудованию через порты ввода-вывода

	cli

	mov al, 10110110b
	out 43h, al

	mov eax, [dwPitch]
	out 42h, al

	mov al, ah
	out 42h, al

    ; включить динамик

	in al, 61h
	or  al, 11b
	out 61h, al

	sti
	mov eax, DELAY
	.while eax
	       dec eax
	.endw
	cli

    ; выключить динамик

	in al, 61h
	and al, 11111100b
	out 61h, al

	sti
	return
endp

proc MakeBeep2,dwPitch
	enter
    ; Прямой доступ к оборудованию используя функции
    ; WRITE_PORT_UCHAR и READ_PORT_UCHAR из модуля hal.dll

	cli

	invoke	WRITE_PORT_UCHAR, 43h, 10110110b

	mov	eax, [dwPitch]
	push	0
	movzx	ax,al
	push	ax
	push	42h
	call	[WRITE_PORT_UCHAR]
	mov	eax, [dwPitch]
	mov	al,ah
	push	0
	movzx	ax,al
	push	ax
	push	42h
	call	[WRITE_PORT_UCHAR]

    ; включить динамик

	invoke	READ_PORT_UCHAR, 61h
	or	al,11b
	push	0
	movzx	ax,al
	push	ax
	push	61h
	call	[WRITE_PORT_UCHAR]

	sti
	mov eax, DELAY
	.while eax
	       dec eax
	.endw
	cli

    ; выключить динамик

	invoke READ_PORT_UCHAR, 61h
	and    al, 11111100b
	push   0
	movzx  ax,al
	push   ax
	push   61h
	call   [WRITE_PORT_UCHAR]

	sti
	return
endp

proc DriverEntry,pDriverObject,pusRegistryPath
	enter
	stdcall MakeBeep1,TONE_1
	stdcall MakeBeep2,TONE_2

	; Прямой доступ к оборудованию используя функцию HalMakeBeep из модуля hal.dll

	invoke HalMakeBeep,TONE_3
	mov eax, DELAY
	.while eax
	       dec eax
	.endw
	invoke HalMakeBeep, 0

	mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
	return
endp

section '.rdata' import readable notpageable
	library hal,"hal.dll"
	import hal,HalMakeBeep,"HalMakeBeep",\
	       READ_PORT_UCHAR,'READ_PORT_UCHAR',\
	       WRITE_PORT_UCHAR,'WRITE_PORT_UCHAR'

section '.reloc' data fixups readable discardable


FASM 1.53
Все работает


Дата: Июл 27, 2004 17:12:03

aXe
Я и не сомневаюсь. У меня в последнем посте исходник практически аналогичный, только без вызова HalMakeBeep и только с первой процедурой MakeBeep1. Причём если вызов есть, то драйвер работает, а если этого вызова нет, то драйвер не загружается. Мне интересно почему так случается.


Дата: Июл 27, 2004 17:13:44

Four-F
Я примерно так и думал, но сомнения закрались.


Дата: Июл 27, 2004 17:33:04

pas
Я скопировал твой пример. У меня работает и закоментированный вызов и разкоментированный!

XP prof + SP1


Дата: Июл 27, 2004 18:16:57

Asterix Точно!
pas Нужно явно с автором FASM разговаривать.

<< . 1 . 2 . 3 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.075