AYFX PLAYER

Chit chat general. Habla con los MojonTwins y con los amigos de los MojonTwins. Reza a Vah-ka. Delinque. Aviso: está PROHIBIDO tirarse peos fuerte. Si les cortas el pescuezo, vale.

Moderador: na_th_an

Avatar de Usuario
Haplo
Mensajes: 20
https://www.facebook.com/wroclaw.meble.kuchenne/
Registrado: Lun, 26 Ene 2015, 20:01

AYFX PLAYER

Mensaje por Haplo »

Hola, por si alguien necesita la rutina que permite reproducir los sonidos que genera el AY Sound FX Editor de Shiru, aquí tenéis la que viene con el programa, limpiada de caracteres "raros" y con un bug ya corregido.

Saludos.

Código: Seleccionar todo

;-Minimal ayFX player v0.15 06.05.06---------------------------;
;                                                              ;
;  se modifican AF,BC,DE,HL,IX.           		   ;
;                                                              ;
; inicialización:                                              ;
;   ld hl, dirección banco SFX              		   ;
;   call AFXINIT                                               ;
;                                                              ;
; prepara sfx en buffer:                                       ;
;   ld a, (0..255)     nº de SFX        	             ;
;   call AFXPLAY                                               ;
;                                                              ;
; reproduce sfx:                                    	   ;
;   call AFXFRAME                                              ;
;                                                              ;
;--------------------------------------------------------------;

;--------------------------------------------------------------;
;   		hl, dirección banco SFX                	   ; 
;--------------------------------------------------------------;

afxInit:		inc hl
		ld (afxBnkAdr+1),hl		;direccion banco SFX
		ld hl,afxChDesc		;buffers
		ld de,$00ff
		ld bc,$03fd
		
afxInit0:		ld (hl),d
		inc hl
		ld (hl),d
		inc hl
		ld (hl),e
		inc hl
		ld (hl),e
		inc hl
		djnz afxInit0
		
		ld hl,$ffbf			
		ld e,$15

afxInit1:		dec e
		ld b,h
		out (c),e
		ld b,l
		out (c),d
		jr nz,afxInit1
		ld (afxNseMix+1),de	
		ret
	
;--------------------------------------------------------------;
; 		reproduce sfx                              ;
;--------------------------------------------------------------;

afxFrame:		ld bc,$03fd
		ld ix,afxChDesc

afxFrame0:	push bc
	
		ld a,11
		ld h,(ix+1)			; <11
		cp h
		jr nc,afxFrame7		
		ld l,(ix+0)
		
		ld e,(hl)			
		inc hl
				
		sub b				;:
		ld d,b				;(11-3=8, 11-2=9, 11-1=10)

		ld b,$ff			
		out (c),a
		ld b,$bf
		ld a,e
		and $0f
		out (c),a
		
		bit 5,e				;?
		jr z,afxFrame1		
		
		ld a,3				;:
		sub d				;3-3=0, 3-2=1, 3-1=2
		add a,a				;0*2=0, 1*2=2, 2*2=4
		
		ld b,$ff			
		out (c),a
		ld b,$bf
		ld d,(hl)
		inc hl
		out (c),d
		ld b,$ff
		inc a
		out (c),a
		ld b,$bf
		ld d,(hl)
		inc hl
		out (c),d
	
afxFrame1:	bit 6,e				;?
		jr z,afxFrame3		
		
		ld a,(hl)			
		sub $20	
		jr c,afxFrame2			; $20
		ld h,a				
		ld b,$ff
		ld b,c				;BC 
		jr afxFrame6
		
afxFrame2:	inc hl
		ld (afxNseMix+1),a		
	
afxFrame3:	pop bc				;B
		push bc
		inc b				;TN
		
		ld a,%01101111			;TN
afxFrame4:	rrc e				
		rrca
		djnz afxFrame4
		ld d,a
		
		ld bc,afxNseMix+2	
		ld a,(bc)
		xor e
		and d
		xor e				;E D
		ld (bc),a
	
afxFrame5:	ld c,(ix+2)			
		ld b,(ix+3)
		inc bc
	
afxFrame6:	ld (ix+2),c
		ld (ix+3),b
		ld (ix+0),l			
		ld (ix+1),h
	
afxFrame7:	ld bc,4				
		add ix,bc
		pop bc
		djnz afxFrame0

		ld hl,$ffbf			
afxNseMix:	ld de,0				;+1(E)=noise, +2(D)=mixer
		ld a,6
		ld b,h
		out (c),a
		ld b,l
		out (c),e
		inc a
		ld b,h
		out (c),a
		ld b,l
		out (c),d
		ret

;--------------------------------------------------------------;
;   a, (0..255)     nº de SFX                                  ;              
;--------------------------------------------------------------;

afxPlay:		ld de,0				 
		ld h,e
		ld l,a
		add hl,hl
afxBnkAdr:	ld bc,0				;BC=dirección banco SFX
		add hl,bc
		ld c,(hl)
		inc hl
		ld b,(hl)
		add hl,bc			
		push hl			
		
		ld hl,afxChDesc		
		ld b,3
		
afxPlay0:		inc hl
		inc hl
		ld a,(hl)			
		inc hl
		cp e
		jr c,afxPlay1
		ld c,a
		ld a,(hl)
		cp d
		jr c,afxPlay1
		ld e,c				
		ld d,a
		push hl				;+3 IX
		pop ix
		
afxPlay1:		inc hl
		djnz afxPlay0
		pop de
						
		ld (ix-3),e			
		ld (ix-2),d
		ld (ix-1),b			
		ld (ix-0),b

		ret

afxChDesc:	DS 3*4	;buffers
			;  4 :
			; +0 (2) =$00)
			; +2 (2) NOISE-mixer
			; ...
Responder