begin process at 2010 03 19 18:22:29
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Systeme

 > JOUER DU PIANO[TASM, PORT 388H, 389H, CF:CODE DU HP]

JOUER DU PIANO[TASM, PORT 388H, 389H, CF:CODE DU HP]


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Systeme Niveau :Initié Date de création :04/08/2002 Date de mise à jour :09/08/2002 18:11:48 Vu / téléchargé :6 576 / 254

Auteur : GuruMeditation

Ecrire un message privé
Site perso
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

Pour compiler:
TASM nomdufichier
TLINK nomdufichier
On pourrait dire que c'est la version amélioré de ma source sur le haut-parleur de la carte mère!
Les touches sont azertyui et ESC pour quitter  

Source

  • .386
  • code segment use16
  • ;octaves
  • octave0 equ 0000h
  • octave1 equ 0400h
  • octave2 equ 0800h
  • octave3 equ 0C00h
  • octave4 equ 1000h
  • octave5 equ 1400h
  • octave6 equ 1800h
  • octave7 equ 1C00h
  • ;les notes
  • _DO equ 2AEh
  • _RE equ 181h
  • _MI equ 1B0h
  • _FA equ 1CAh
  • _SOL equ 202h
  • _LA equ 241h
  • _SI equ 287h
  • ;dièse
  • DOD equ 16Bh
  • RED equ 198h
  • FAD equ 1E5h
  • SOLD equ 220h
  • LAD equ 263h
  • ;makecodes
  • A equ 16
  • Z equ 17
  • E equ 18
  • R equ 19
  • T equ 20
  • Y equ 21
  • U equ 22
  • I equ 23
  • O equ 24
  • P equ 25
  • ;breakcodes
  • _ESC equ 81h
  • assume cs:code,ds:code
  • prog:
  • push cs
  • pop ds
  • xor ax,ax
  • mov es,ax
  • mov eax, es:[09h*4]
  • mov oldirq1, eax ;sauvegarde de l'IRQ1 lié à l'INT 09h (sinon PANIC)
  • mov ax, cs
  • shl eax, 16
  • mov ax, offset irq1
  • mov es:[09h*4], eax ;place celle du code présent
  • ;reset de tout les registres FM
  • xor al,al
  • xor bl,bl
  • reset:
  • call ad_port
  • inc al
  • cmp al,0F6h
  • jnz reset
  • ;Canal 1 OP1
  • mov al,20h ;AM=0 vibrato=0 EG=0 KSR=0 Multi=1
  • mov bl,1
  • call ad_port
  • mov al,40h ;40 dB
  • mov bl,10h
  • call ad_port
  • mov al,60h ;attack=très rapide Decay=le plus long
  • mov bl,0F0h
  • call ad_port
  • mov al,80h ;sustain=moyen release=moyen
  • mov bl,77h
  • call ad_port
  • ;canal 1 OP2
  • mov al,23h ;Même paramètre
  • mov bl,1
  • call ad_port
  • mov al,43h ;40 dB
  • mov bl,10h
  • call ad_port
  • mov al,63h ;Même paramètre
  • mov bl,0F0h
  • call ad_port
  • mov al,83h ;Même paramètre
  • mov bl,77h
  • call ad_port
  • boucle:
  • mov bx,_DO+octave3
  • cmp scode,A ;touche a DO3
  • jz chgnote
  • mov bx,_RE+octave4
  • cmp scode,Z ;touche z RE4
  • jz chgnote
  • mov bx,_MI+octave4
  • cmp scode,E ;touche e MI4
  • jz chgnote
  • mov bx,_FA+octave4
  • cmp scode,R ;touche r FA4
  • jz chgnote
  • mov bx,_SOL+octave4
  • cmp scode,T ;touche t SOL4
  • jz chgnote
  • mov bx,_LA+octave4
  • cmp scode,Y ;touche y LA4
  • jz chgnote
  • mov bx,_SI+octave4
  • cmp scode,U ;touche u SI4
  • jz chgnote
  • mov bx,_DO+octave4
  • cmp scode,I ;touche i DO4
  • jz chgnote
  • cmp scode,_ESC ;test si la touche ESC est relâché
  • jnz boucle
  • fin:
  • mov eax, oldirq1 ;restauration de l'Int 09h
  • mov es:[09h*4], eax
  • mov al,0B0h ;on éteint
  • mov bl,11h
  • call ad_port
  • mov ah,4Ch
  • int 21h ;on quitte
  • chgnote:
  • mov al,0A0h
  • call ad_port
  • mov al,0B0h
  • mov bl,bh
  • or bl,20h
  • call ad_port
  • jmp boucle
  • ;Routine d'envoi de commandes
  • ;al=registre
  • ;bl=données
  • ad_port:
  • pushad
  • mov dx,388h
  • out dx,al
  • mov ecx,6
  • wait6:
  • in al,dx
  • loop wait6
  • inc dx
  • mov al,bl
  • out dx,al
  • dec dx
  • mov ecx,35
  • wait35:
  • in al,dx
  • loop wait35
  • popad
  • ret
  • irq1:
  • push ax
  • in al,60h ;Lecture du Scancode
  • mov scode,al
  • cmp al,81h ;Test de la touche Esc relÔchÚe
  • jz irqfin
  • jge break
  • jmp irqfin
  • break:
  • cmp al,0E0h ;Teste si le code E0h est prÚsent pour les touches Útendues
  • jz .e0
  • cmp al,0E1h ;Teste si le code E1h est prÚsent (seul la touche Pause l'utilise)
  • jz .e0
  • jmp irqfin
  • .e0:
  • irqfin:
  • mov al,20h
  • out 20h,al ;End Of Interrupt
  • pop ax
  • iret ;Comme ret sauf pour interruption
  • oldirq1 dd ? ;sauvegarde de l'ancienne adresse de l'IRQ1 (irq du clavier)
  • scode db 0 ;test du code 81h c'est le BreakCode de la touche Echap qui permettra de quitter le programme
  • code ends
  • end prog
.386
code	segment	use16
;octaves
octave0	equ	0000h
octave1	equ	0400h
octave2	equ	0800h
octave3	equ	0C00h
octave4	equ	1000h
octave5	equ	1400h
octave6	equ	1800h
octave7	equ	1C00h

;les notes
_DO	equ	2AEh
_RE	equ	181h
_MI	equ	1B0h
_FA	equ	1CAh
_SOL	equ	202h
_LA	equ	241h
_SI	equ	287h

;dièse
DOD	equ	16Bh
RED	equ	198h
FAD	equ	1E5h
SOLD	equ	220h
LAD	equ	263h

;makecodes
A	equ	16
Z	equ	17
E	equ	18
R	equ	19
T	equ	20
Y	equ	21
U	equ	22
I	equ	23
O	equ	24
P	equ	25
;breakcodes
_ESC	equ	81h

assume	cs:code,ds:code	

prog:
	push	cs
	pop	ds
	xor	ax,ax
	mov	es,ax
	mov     eax, es:[09h*4]
        mov     oldirq1, eax		;sauvegarde de l'IRQ1 lié à l'INT 09h (sinon PANIC)
	
	mov     ax, cs
        shl     eax, 16
        mov     ax, offset irq1
        mov     es:[09h*4], eax		;place celle du code présent

;reset de tout les registres FM
	xor	al,al
	xor	bl,bl
reset:
	call	ad_port
	inc	al
	cmp	al,0F6h
	jnz	reset


;Canal 1 OP1
	mov	al,20h		;AM=0 vibrato=0 EG=0 KSR=0 Multi=1
	mov	bl,1
	call	ad_port
	
	mov	al,40h		;40 dB
	mov	bl,10h
	call	ad_port
	
	mov	al,60h		;attack=très rapide Decay=le plus long
	mov	bl,0F0h
	call	ad_port
	
	mov	al,80h		;sustain=moyen release=moyen
	mov	bl,77h
	call	ad_port
	
;canal 1 OP2 
	mov	al,23h		;Même paramètre
	mov	bl,1
	call	ad_port
	
	mov	al,43h		;40 dB
	mov	bl,10h
	call	ad_port
	
	mov	al,63h		;Même paramètre
	mov	bl,0F0h
	call	ad_port
	
	mov	al,83h		;Même paramètre
	mov	bl,77h
	call	ad_port
	
boucle:
	mov	bx,_DO+octave3
	cmp	scode,A		;touche a DO3
	jz	chgnote
	
	mov	bx,_RE+octave4
	cmp	scode,Z		;touche z RE4
	jz	chgnote
	
	mov	bx,_MI+octave4
	cmp	scode,E		;touche e MI4
	jz	chgnote
	
	mov	bx,_FA+octave4
	cmp	scode,R		;touche r FA4
	jz	chgnote
	
	mov	bx,_SOL+octave4
	cmp	scode,T		;touche t SOL4
	jz	chgnote
	
	mov	bx,_LA+octave4
	cmp	scode,Y		;touche y LA4
	jz	chgnote
	
	mov	bx,_SI+octave4
	cmp	scode,U		;touche u SI4
	jz	chgnote
	
	mov	bx,_DO+octave4
	cmp	scode,I		;touche i DO4
	jz	chgnote
	
	cmp	scode,_ESC	;test si la touche ESC est relâché
	jnz	boucle

fin:	
	mov     eax, oldirq1		;restauration de l'Int 09h
        mov     es:[09h*4], eax
        
	mov	al,0B0h		;on éteint
	mov	bl,11h
	call	ad_port
		
	mov	ah,4Ch
	int	21h		;on quitte

chgnote:
	mov	al,0A0h
	call	ad_port
	mov	al,0B0h
	mov	bl,bh
	or	bl,20h
	call	ad_port
	jmp	boucle

;Routine d'envoi de commandes
;al=registre
;bl=données
ad_port:
	pushad
	mov	dx,388h
	out	dx,al
	mov	ecx,6
wait6:
	in	al,dx
	loop	wait6
	inc	dx
	mov	al,bl
	out	dx,al
	dec	dx
	mov	ecx,35
wait35:
	in	al,dx
	loop	wait35
	popad
	ret

irq1:
	push	ax
	in	al,60h			;Lecture du Scancode
	mov	scode,al
	cmp	al,81h			;Test de la touche Esc relÔchÚe
	jz	irqfin
	jge	break
	jmp	irqfin
	
break:
	cmp	al,0E0h			;Teste si le code E0h est prÚsent pour les touches Útendues
	jz	.e0
	cmp	al,0E1h			;Teste si le code E1h est prÚsent (seul la touche Pause l'utilise)
	jz	.e0
	jmp	irqfin
.e0:
irqfin:
	mov	al,20h
	out	20h,al			;End Of Interrupt
	pop	ax
	iret				;Comme ret sauf pour interruption

oldirq1	dd	?			;sauvegarde de l'ancienne adresse de l'IRQ1 (irq du clavier)
scode	db 	0			;test du code 81h c'est le BreakCode de la touche Echap qui permettra de quitter le programme

	
code	ends
end	prog   

 Conclusion

Ce code doit marcher sur la plupart des cartes sons puisque c'est de la programmation des cartes Adlib. Mais ne marche pas sur certains OS comme windows 2000

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • FM.ASMTélécharger ce fichier [Réservé aux membres club]Voir ce fichier3 339 octets
  • FM.EXETélécharger ce fichier [Réservé aux membres club]829 octets

Télécharger le zip


 Sources du même auteur

Source avec Zip STÉGANOGRAPHIE V.2[TASM;INT 21H;COM]
Source avec Zip BLOCAGE DU CLAVIER TANT QUE LE MOT DE PASSE N'A PAS ÉTÉ TROU...
Source avec Zip EMISSION-RÉCEPTION DE CARACTÈRES PAR LIAISON SÉRIE SUR PC [T...
Source avec Zip CHARGER UN JEU DE CARACTÈRE DÉFINI [TASM, INT10H, INT21H]
Source avec Zip AFFICHER UNE IMAGE BMP EN VESA 1.2 [TASM, PORT (3C8H,3C9H), ...

 Sources de la même categorie

DÉPLACEMENT D'UN RÉCTANGLE ROUGE A L'AIDE DE LA SOURIS par KIMI1632
Source avec Zip SCHEDULEUR TEST par patatalo
Source avec Zip Source avec une capture LIVE CD OMF par patatalo
Source avec Zip "MORTIMER": UN HOBBY OS par bofur
Source avec Zip Source avec une capture LE SYSTÈME D'EXPLOITATION LOGRAM par steckdenis

Commentaires et avis

Commentaire de Int19h le 08/08/2002 23:18:22

Salut

Bon, j'ai pas lu le code, j'ai uniquement le commentaire en bas. Et y'a ca qui me gene un poil : "Mais ne marche pas sur certains OS comme windows 2000 parce que l'OS est trop pourri pour garder la compatibilité des anciennes cartes. "

Je voudais pas dire de conneries, mais je pense que l'erreur ne vient pas du fait que l'OS soit "pourri". Il s'agit du protection. Win2k ne permet plus certaine chose en bas niveau, c'est regretable, mais ca protege bien conter certaine bestiolles... Mais, bien oui, comme d'hab, y'a une solution...

a+

int19h

Commentaire de GuruMeditation le 09/08/2002 18:08:01

En quoi est-ce une protection? Je ne connait aucun virus qui utilisent ces 2 ports, ils sont juste destinés pour la synthèse FM. Je vais faire des recherches sur la protection de ces ports pour vérifier. sinon si ça choque ce que j'ai mis je vais le supprimer, mais c'est malheureusement ce que je pense

Commentaire de GuruMeditation le 09/08/2002 18:08:11

En quoi est-ce une protection? Je ne connait aucun virus qui utilisent ces 2 ports, ils sont juste destinés pour la synthèse FM. Je vais faire des recherches sur la protection de ces ports pour vérifier. sinon si ça choque ce que j'ai mis je vais le supprimer, mais c'est malheureusement ce que je pense
@+

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,827 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales