home *** CD-ROM | disk | FTP | other *** search
- ;[]------------------------------------------------------------------------[]
- ;| |
- ;| (c) 1993,1994 by Marc van Shaney , aka Kaya Memisoglu |
- ;| |
- ;| Dieser Assembler-Source-Code unterliegt dem Urheberrecht von Kaya |
- ;| Memisoglu und darf auch nur mit seiner schriftlichen Genehmigung |
- ;| in kommerziellen Programmen verwendet werden. |
- ;| Ich übernehme keinerlei Verantwortung für eventuelle Schäden,die dieses |
- ;| Programm verursacht. |
- ;| |
- ;| |
- ;| |
- ;| 18.1.1994 Kaya Memisoglu |
- ;| |
- ;[]------------------------------------------------------------------------[]
-
- ; !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!!
- ; !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!!
- ;
- ; I DO NOT SAVE THE REGISTER VARIABLES SI AND DI IN THIS CODE AND IN SOME
- ; OTHER MODULES. SO MAKE SURE BEFORE COMPILING THIS CODE THAT THE REGISTER
- ; VARIABLES IN BORLAND C ARE SET TO *NONE*.
- ; BUT IF YOU STILL WANT TO USE THEM, YOU HAVE TO SAVE THEM BY CHANGING THIS
- ; CODE !!!
- ;
- ; !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!!
- ; !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!!
-
-
- P386
- LOCALS
-
-
-
- DSP_Out_DMA equ 14h
- DSP_Reset_Port equ 6
- DSP_Read_Port equ 0ah
- DSP_Write_Port equ 0ch
- DSP_Status_Port equ 0eh
-
- DRV_TEXT equ 'Sound-Blaster timer driver ',0 ; 32 Bytes
- DRV_VERSION equ 1
-
- DRV_NAME MACRO
- PUBLIC C SBTIMER_Driver
- SBTIMER_Driver dd DISPATCH
- ENDM
- EXTERNAL_ROUTINES MACRO
-
- DSP_Base DW 220h
- DSP_Retry DW 10
- Config_Port DW 2
- SB_Pro DB 0
-
-
- DSP_Init PROC NEAR
- mov dx,cs:[DSP_Base]
- add dx,DSP_Reset_Port
- mov al,1
- out dx,al
- push cx
- push ax
- push si
- push ds
- pushfd
- cld
- xor si,si
- mov cx,0fffeh
- rep lodsb
- xor si,si
- mov cx,0fffeh
- rep lodsb
- popfd
- pop ds
- pop si
- pop ax
- pop cx
- xor al,al
- out dx,al
-
- mov dx,cs:[DSP_Base]
- add dx,DSP_Read_Port
- mov cx,1000h
- Schleife51:
- push cx
- mov dx,cs:[DSP_Base]
- add dx,DSP_Status_Port
- mov cx,1400h
- Schleife61:
- in al,dx
- test al,128
- loope Schleife61
- mov dx,cs:[DSP_Base]
- add dx,DSP_Read_Port
- in al,dx
- pop cx
- cmp al,0aah
- je OK
- loopne Schleife51
-
- mov ax,FALSE
- retn
- OK:
- mov ax,TRUE
- retn
- DSP_Init ENDP
-
-
-
-
- DSP_Read PROC NEAR
- mov dx,cs:[DSP_Base]
- add dx,DSP_Status_Port
- mov cx,2000h
- Schleife73:
- in al,dx
- test al,128
- loope Schleife73
- mov dx,cs:[DSP_Base]
- add dx,DSP_Read_Port
- in al,dx
- movzx ax,al
- retn
- DSP_Read ENDP
-
-
-
-
-
- DSP_Write PROC NEAR
- ARG Value:word
- push bp
- mov bp,sp
-
- mov dx,cs:[DSP_Base]
- add dx,DSP_Write_Port
- mov cx,2000h
- Schleife97:
- in al,dx
- test al,128
- loopne Schleife97
-
- mov ax,Value
- out dx,al
- pop bp
- retn
- DSP_Write ENDP
- ENDM
-
-
-
- DRV_INIT MACRO
- mov bx,cs:[Config_Port]
- shl bx,4
- add bx,200h
- mov cs:[DSP_Base],bx
-
- call DSP_Init
- ENDM
-
-
-
- VOICE_INIT MACRO
- mov ax,cs:[Voice_Rate]
- call DSP_Init
- call DSP_Write C,040h
-
- xor cl,cl
- xor edx,edx
- mov eax,1000000
- movzx ebx,cs:[Voice_Rate]
- div ebx
- neg al
-
- cmp ebx,23000
- jb NoProCommand
- mov cl,1
-
- NoProCommand:
- mov cs:[SB_Pro],cl
- mov ah,al
- call DSP_Write c,ax
- ENDM
-
-
-
-
-
-
- VOICE_PLAY MACRO
- call DSP_Write C,0d1h ;Lautsprecher einschalten
- ENDM
-
-
-
- VOICE_STOP MACRO
- call DSP_Write C,0d2h
- ENDM
-
-
-
- VOICE_OUT MACRO
- push dx
- push cx
- mov ah,al
- mov dx,cs:[DSP_Base]
- add dx,DSP_Write_Port
- mov cx,cs:[DSP_Retry]
- Schleife242:
- in al,dx
- test al,128
- loopne Schleife242
- mov al,10h
- out dx,al
-
- mov cx,cs:[DSP_Retry]
- Schleife250:
- in al,dx
- test al,128
- loopne Schleife250
- mov al,ah
- out dx,al
- pop cx
- pop dx
- ENDM
-
-
-
-
-
- include sndtimer.inc
-
-
-
- Config_Info dd 036bea73fh
- dw 2 ;Einträge
-
- db 2,14
- dw OFFSET Config_Port
- dw 0,8,1
- dw 0,0,0
- DB "I/O Port 2x0h",0
- db 2,14
- dw OFFSET DSP_Retry
- dw 4,50,2
- dw 0,0,0
- db "Timeout value",0
-
- END