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
Registrado: Lun, 26 Ene 2015, 20:01

AYFX PLAYER

Mensajepor Haplo » Sab, 15 Oct 2016, 16:23

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
         ; ...

Volver a “General”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado