Tras pelearme bastante y probar cosas, ya me funciona el fadeout aceptablemente, es un poco chapuza pero me vale.
$this->bbcode_second_pass_code('', 'start_fade_out: ld a,12 ;valor fijado de ejemplo
ld (decay),a
ld (decay_temp),a
ld a,0
ld (fade_meter),a
ld hl,fade
set 0,(hl)
ret
fade_out:
ld hl,decay_temp
dec (hl)
jr nz,fadeojp0
ld a,(decay)
ld (hl),a
ld a,(fade_meter)
cp 10 ;fade out completo
jp z,player_off ;fade_player_off
inc a
ld (fade_meter),a
fadeojp0: ld a,(fade_meter)
ld c,a
ld hl,psg_reg+8
ld b,3
fadeobc0: ld a,(hl)
sub c
jr nc,no_reset_vol
xor a
no_reset_vol: ld (hl),a
inc hl
djnz fadeobc0
ld hl,(sfx_v)
ld a,(hl)
inc c
inc c
sub c
ld (hl),a
ret')
Ahora quería poder colocar la rutina y las músicas en la ram 3 y así liberar espacio del bloque principal. El caso es que no hay manera, se me cuelga que da gusto. Lo que hago es ubicarla a partir de 49152 y en cada interrupción, pagino a la ram 3 y salto a la rutina, restaurando después de volver. Es exactamente lo mismo que hago con el player de shiru y no me da problemas.
He comprobado los saltos, direcciones de punteros y buffers y no encuentro errores. La única manera de que me funcione es ubicando la rutina entera por debajo de 49152, dando igual si las músicas las pongo en ram3 o no (paginando antes claro).
Otra cuestión: algunas canciones funcionan y otras no, supongo que es porque están hechas con otra versión del tracker, lo que me extraña es que el tracker sí las reproduce. Así que debe ser algo que falla al exportar a .asm y .mus
En definitiva, que la rutina de música me está dando ruido
