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.

$this->bbcode_second_pass_code('', ';-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 2 invitados