Fecha actual Mié May 22, 2013 8:24 pm


Ayuda con un miniplayer (AY) para Wiituka

Programando el Amstrad en Ensamblador.
Reglas del Foro Debido a que hay varios temas pidiendo ayuda para programar en ensamblador máquinas distintas al Amstrad CPC, con micro distinto al Z80 y que incluso dependen del sistema operativo, nos vemos en la necesidad de poner por escrito que estos posts son bienvenidos pero que no es el lugar adecuado ya que por estos lares nos dedicamos más al ensamblador del Z80, un microprocesador de 8 bits que tuvo su gran auge en ordenadores y consolas de los años 80.

De todas formas, esto no quita que alguien que sepa del asunto pueda postear alguna respuesta pero es más fácil encontrar foros dedicados a programar en ensamblador en Windows o MS-DOS que ayudarán más que nosotros:
http://www.lawebdelprogramador.com/news ... nsamblador
  • Autor
  • Mensaje
Desconectado
Avatar de Usuario

D_Skywalk

Me voy lanzando

Me voy lanzando

  • Mensajes: 40
  • Registrado: Lun Mar 20, 2006 3:20 am

Ayuda con un miniplayer (AY) para Wiituka

NotaLun Nov 22, 2010 8:43 pm

Hola compañeros llevo un par de días dándome cabezazos con un pequeño código que quiero añadir a Wiituka.

La cuestión es que quiero meterle musiquita del amstrad al emulador mientras la gente está eligiendo el juego. En la versión estable que se puede usar ahora, metí mp3 como el formato a reproducir, pero eso me crea unos ejecutables muy gordos y claro teniendo un z80 y el ay emulado ¿por que no usarlos? :-s

Total que me he puesto a portar a Wiituka un pequeño código: ay2sna. Pero no funciona bien... XD

Básicamente lo que hace es meter en 0000 este código:
Código: Seleccionar todo
            0xF3,                  // DI
            0xCD,    0x0C, 0x68,   // CALL INIT
            0xED, 0x56,            // LOOP: IM 1
            0xFB,                  // EI
            0x76,                  // HALT
            0xCD, 0x7F, 0x68,      // CALL INTERRUPT
            0x18, 0xF7             // JR LOOP


Tanto el INIT como la INTERRUPT se leen del fichero AY, pero parece que el SNA resultante no es correcto, no se si el problema está en este código ASM o en el propio SNA -> GhostsNGoblins.ay.sna

Registros del SNA:
Código: Seleccionar todo
    ayloader_header [0x1A] = 3;        // I register
    ayloader_header [0x1B] = 1;        // IFF0
    ayloader_header [0x1C] = 1;        // IFF1
    const unsigned short sp = aysong_get_sp (song); // VALOR devuelto 0
    ayloader_header [0x21] =  sp       & 0xFF;    // SP (low)
    ayloader_header [0x22] = (sp >> 8) & 0xFF;    // SP (high)
    ayloader_header [0x23] = 0;        // PC (low)
    ayloader_header [0x24] = 0;        // PC (high)
    ayloader_header [0x25] = 1;        // IM 1
    ayloader_header [0x40] = 0x8C;    // RAM/ROM configuration
    ayloader_header [0x41] = 0xC0;    // RAM selection
    ayloader_header [0x55] = 0;        // ROM selection
    ayloader_header [0x6B] = 64;        // Dump size in KB (low byte)
    ayloader_header [0x6C] = 0;        // Dump size in KB (high byte)

Documentación del formato: AYMakeR, el README.TXT

La cuestión es que si arranco WinApe pausado sin dejar que el cpc inicie cargo el SNA y se escucha la "musica" o más bien alguno serrando una puerta :mrgreen:
... parece como si no fuera a la velocidad correcta (enlentecido quizás?)

Sino lo hago así el z80 se bloquea (y el WinApe tb). En caprice no consigo que haga nada XD

La verdad que mi conocimiento del Z80 es lo justo para ir mejorando el emulador en los ratos que tengo, pero nunca he programado lo suficiente en CPC como para saber donde puede estar el error. Aparentemente primero se desactivan las interrupciones para iniciar todo, luego se reactivan y se envía los datos desde el loop principal el código... no se parece todo correcto, no?

Un Saludo y cualquier ayuda será bienvenida :-({|=
Mi Weblog Personal sobre linux, gp2x, emulacion, desarrollo, abandonware...
http://david.dantoine.org/
Desconectado
Avatar de Usuario

syx

Master of The Forum

Master of The Forum

  • Mensajes: 1136
  • Registrado: Mié Sep 02, 2009 8:55 am

Re: Ayuda con un miniplayer (AY) para Wiituka

NotaMar Nov 23, 2010 10:06 am

La cuestión es que si arranco WinApe pausado sin dejar que el cpc inicie cargo el SNA y se escucha la "musica" o más bien alguno serrando una puerta :mrgreen: ... parece como si no fuera a la velocidad correcta (enlentecido quizás?)
Más bien es todo lo contrario :P Pon el emulador al 10% de la velocidad del CPC y verás como ese "proyecto de carpintero" se transforma en músico :mrgreen:

De todas formas, quizás sea más adecuado para tu proyecto un player de .YM, más que nada porque no hay muchas canciones de CPC en .AY y te tocará desensamblar si quieres más... de todas formas si encuentro (y pon ese 'SI' entre 20 ó 30 interrogaciones y admiraciones con una fuente de por lo menos 1000 pixels :mrgreen:) y aún "sobrevive" (que esa es otra, un cd grabable de hace más de 15 años, aún vivo :mrgreen:) mi primer backup en cdrom con el contenido de mis extintos discos duros de Amiga, debo de tener un porrón de .AYs que ripee para el Delitracker de Amiga, deben de estar junto a las capturas de pantallas de carga que hice para la antiquísima web de Kevin, si la memoria no falla <rX de cuando se alojaba en la Universidad de Valladolid ("En la era del ftp.gui.uva.es" si hasta suena bien para una peli de dinosaurios :mrgreen:).

Resumiendo, no aguantes la respiración xDDDD, y mejor usa un formato más moderno ó añade soporte para crear SNAs a partir de canciones del Arkos tracker, que eso estaría genial.
Desconectado
Avatar de Usuario

D_Skywalk

Me voy lanzando

Me voy lanzando

  • Mensajes: 40
  • Registrado: Lun Mar 20, 2006 3:20 am

Re: Ayuda con un miniplayer (AY) para Wiituka

NotaMar Nov 23, 2010 12:51 pm

Muchas gracias por acudir al rescate syx :)

Si, ya había visto que ningún emulador moderno tenía soporte de AY, ahora entiendo por que ](*,)

El problema es que sino se refresca la pantalla, la mayoría de emuladores no actualiza sus interrupciones correctamente (WinApe) o directamente no las actualizan (caprice). Este es el código...

Código: Seleccionar todo
// GA interrupt trigger -------------------------------------------------------
            GateArray.sl_count++; // update GA scanline counter
            if (GateArray.int_delay) { // delay on VSYNC?
               if (--GateArray.int_delay == 0) { // delay expired?
                  if (GateArray.sl_count >= 32) { // counter above save margin?
                     z80.int_pending = 1; // queue interrupt
                     GateArray.sl_count = 0; // clear counter
                  } else {
                     GateArray.sl_count = 0; // clear counter
                  }
               }
            }
            if (GateArray.sl_count == 52) { // trigger interrupt?
               z80.int_pending = 1; // queue interrupt
               GateArray.sl_count = 0; // clear counter
            }
         }
      }


z80.int_pending, es el que hace que se comprueben si hay interrupciones pendientes de activar, entonces sino se actualiza la pantalla, el miniplayer que puse antes se queda eternamente en el HALT.

Con ese código como nunca se toca, ni se programa el trazo, ni se espera al vsync, la emulación se bloquea...

Una solución es contar los ciclos y activar el int_pending...
Código: Seleccionar todo
#define FRAME_STATES_CPC (4000000/50)

   INT_tstates += iCycleCount;
   if (INT_tstates >= FRAME_STATES_CPC)
   {
      z80.int_pending = 1; z80.EI_issued +=1;
      INT_tstates -= FRAME_STATES_CPC;
   }


Con este código ya suena pero se escucha un poco mal, entrecortado... total que es forzar la emulación y no se si ni siquiera el código del miniplayer funciona en un CPC real. Quizás realmente no se lean interrupciones hasta que no termine el trazo.

Por tanto lanzo mi pregunta ¿hay alguna código simplito que configure el gatearray de la pantalla para que se actualice aun sin querer pintar nada?

Sino pues tengo el código del YM será hacer una librería tipo Modplayer, que será un ratito y añadirla a wiituka :) Ya era cabezonería por aprovechar el z80... :mrgreen:

syx, Arkos tracker ¿donde hay canciones de su formato? ¿algún fuente de cpc que lo use?

Un Saludo y gracias :-({|=
Mi Weblog Personal sobre linux, gp2x, emulacion, desarrollo, abandonware...
http://david.dantoine.org/
Desconectado
Avatar de Usuario

syx

Master of The Forum

Master of The Forum

  • Mensajes: 1136
  • Registrado: Mié Sep 02, 2009 8:55 am

Re: Ayuda con un miniplayer (AY) para Wiituka

NotaMar Nov 23, 2010 2:54 pm

D_Skywalk escribió:Si, ya había visto que ningún emulador moderno tenía soporte de AY, ahora entiendo por que ](*,)
Es que ten en cuenta que es un formato antidiluviano, fijate que no es más que un plugin para el venerable Delitracker de Amiga (un reproductor de distintos formatos de musica de finales de los 80, principios de los 90), para no aburrir mucho con la historia (es que esto lo viví en primera línea :P) Patrik Rak (el autor del ZXDS) hizo un plugin que simulaba un Z80 + RAM + AY (algo muy parecido a un spectrum, de ahí vienen las limitaciones del formato :P), por supuesto me faltó tiempo a mí y varios antiguos usuarios de Amstrad para sugerirle que añadiese los puertos que usa el AY en el CPC.
D_Skywalk escribió:El problema es que sino se refresca la pantalla, la mayoría de emuladores no actualiza sus interrupciones correctamente (WinApe) o directamente no las actualizan (caprice). Este es el código...
.
.
.

z80.int_pending, es el que hace que se comprueben si hay interrupciones pendientes de activar, entonces sino se actualiza la pantalla, el miniplayer que puse antes se queda eternamente en el HALT.

Con ese código como nunca se toca, ni se programa el trazo, ni se espera al vsync, la emulación se bloquea...

Una solución es contar los ciclos y activar el int_pending...
Eso es exactamente como lo hacían los emuladores de finales de los 80 (la primera generación <rX) y como hacía el plugin éste.

D_Skywalk escribió:Con este código ya suena pero se escucha un poco mal, entrecortado... total que es forzar la emulación y no se si ni siquiera el código del miniplayer funciona en un CPC real. Quizás realmente no se lean interrupciones hasta que no termine el trazo.
Te puedo asegurar que en un CPC real funciona exactamente como te va en el emulador, es decir la canción irá acelerada. Esto puede deberse a que el formato se basa en interrupciones del Spectrum, osea 1 cada 50 Hz y en el CPC estás se producen cada 300 Hz, pero tendría que revisarlo con más atención.

De todas formas el calculo de FRAME_STATES_CPC (4000000/50) no es totalmente correcto, eso te da 80.000 t-estados, pero en realidad deberían ser 79.872 t-estados (que tiene en cuenta el "parón" que provoca el Gate Array al Z80).

D_Skywalk escribió:Por tanto lanzo mi pregunta ¿hay alguna código simplito que configure el gatearray de la pantalla para que se actualice aun sin querer pintar nada?
Sino pues tengo el código del YM será hacer una librería tipo Modplayer, que será un ratito y añadirla a wiituka :) Ya era cabezonería por aprovechar el z80... :mrgreen:
Lo más rápido es probar si con el valor de t-estados todo suena mejor, sino, yo me tiraría al río y le daría caña a meter el player de YM, ya que aparte podrías dar la opción de que el emulador grabase YM también, con lo que los usuarios podrían poner la canción que prefiriesen durante el menú.

D_Skywalk escribió:syx, Arkos tracker ¿donde hay canciones de su formato? ¿algún fuente de cpc que lo use?
Todo lo que necesitas lo puedes encontrar aqui, de todas formas creo que lo que al final te será más cómodo es el player de YM.
Desconectado
Avatar de Usuario

D_Skywalk

Me voy lanzando

Me voy lanzando

  • Mensajes: 40
  • Registrado: Lun Mar 20, 2006 3:20 am

Re: Ayuda con un miniplayer (AY) para Wiituka

NotaMié Nov 24, 2010 3:08 am

Bueno pues siguiendo tu consejo y como verdaderamente no creo que nadie se ponga a estas alturas a buscar en viejos juegos las musiquitas, paso al YM.

Ya tengo la primera versión del player, por el momento suena acelerado por que es mono y el buffer de wiituka es stereo, pero he hecho una pequeña ñapa para comprobar si el sonido es correcto (aunque mono) y todo bien :D

Ahora a pasar el ST Player este a stereo... :-k

Código: Seleccionar todo
   ST-Sound ( YM files player library )

   Copyright (C) 1995-1999 Arnaud Carre ( http://leonard.oxg.free.fr )

   Extended YM-2149 Emulator, with ATARI music demos effects.
   (SID-Like, Digidrum, Sync Buzzer, Sinus SID and Pattern SID)


Un Saludo! :-({|=
Mi Weblog Personal sobre linux, gp2x, emulacion, desarrollo, abandonware...
http://david.dantoine.org/
Desconectado
Avatar de Usuario

syx

Master of The Forum

Master of The Forum

  • Mensajes: 1136
  • Registrado: Mié Sep 02, 2009 8:55 am

Re: Ayuda con un miniplayer (AY) para Wiituka

NotaMié Nov 24, 2010 10:04 am

ANIMO!!! :D
Desconectado
Avatar de Usuario

D_Skywalk

Me voy lanzando

Me voy lanzando

  • Mensajes: 40
  • Registrado: Lun Mar 20, 2006 3:20 am

Re: Ayuda con un miniplayer (AY) para Wiituka

NotaMié Nov 24, 2010 8:04 pm

Gracias compa :D

La librería ya está completamente operativa en linux y falta probarla en Wii. A parte le he añadido sonido estéreo (el original era solo mono), amplitud, low pass independiente por canal... total suena como los ángeles :shock:

Llevo media hora sólo escuchando chiptunes del CPC :mrgreen: :mrgreen: :mrgreen: :mrgreen:

De todas formas si alguien me dijera como añadir al código de arriba algo que configure el gatearray y refresque la pantalla, podría añadir soporte AY nativo también sin mucho problema :)

Un Saludo! :-({|=
Mi Weblog Personal sobre linux, gp2x, emulacion, desarrollo, abandonware...
http://david.dantoine.org/
Desconectado
Avatar de Usuario

syx

Master of The Forum

Master of The Forum

  • Mensajes: 1136
  • Registrado: Mié Sep 02, 2009 8:55 am

Re: Ayuda con un miniplayer (AY) para Wiituka

NotaJue Nov 25, 2010 12:03 am

Me acabo de acordar ahora mismo, no olvides echarle un vistazo a las modificaciones que le hicieron a la librería de YM la gente del cpcsdk que Pulkomandy me comentó que la adaptaron para que sonase más CPC, incluso hicieron mediciones en CPC reales para tener un sonido más fiel.
Desconectado
Avatar de Usuario

D_Skywalk

Me voy lanzando

Me voy lanzando

  • Mensajes: 40
  • Registrado: Lun Mar 20, 2006 3:20 am

Re: Ayuda con un miniplayer (AY) para Wiituka

NotaJue Nov 25, 2010 5:49 pm

syx escribió:Me acabo de acordar ahora mismo, no olvides echarle un vistazo a las modificaciones que le hicieron a la librería de YM la gente del cpcsdk que Pulkomandy me comentó que la adaptaron para que sonase más CPC, incluso hicieron mediciones en CPC reales para tener un sonido más fiel.


Vaya si es lo que he hecho yo, de haberlo sabido antes ](*,) XD

Bueno, se pueden aprovechar los volúmenes, pero no vuelvo a reescribir todo. A parte que necesita una limpieza el código y que calculan en cada step las envolventes, amplitudes y eso no es necesario (simplemente se hace cuando se reconfigura su registro).

La verdad que debió que ser un currazo eso de andar midiendo para sacar los volúmenes exactos, bravo =D>

Insisto nuevamente con mi petición de ayuda a ver si alguno de este subforo de ASM me echa un cable, como puedo añadir algo aquí para que se reconfigure el gatearray/crtc o lo que haga falta para que refresque la pantalla? [-o<
Código: Seleccionar todo
            0xF3,                  // DI
            0xCD,    0x0C, 0x68,   // CALL INIT
            0xED, 0x56,            // LOOP: IM 1
            0xFB,                  // EI
            0x76,                  // HALT
            0xCD, 0x7F, 0x68,      // CALL INTERRUPT
            0x18, 0xF7             // JR LOOP


Un Saludo!
Mi Weblog Personal sobre linux, gp2x, emulacion, desarrollo, abandonware...
http://david.dantoine.org/
Desconectado
Avatar de Usuario

syx

Master of The Forum

Master of The Forum

  • Mensajes: 1136
  • Registrado: Mié Sep 02, 2009 8:55 am

Re: Ayuda con un miniplayer (AY) para Wiituka

NotaJue Nov 25, 2010 11:21 pm

Pensaba que con el paso a YM, ya habías resuelto la historia :P

Bueno necesitas dos cosas, la primera es que en el snapshot los valores que poseen los registros del CRTC, Gate Array y demás sean "sanos" (en el ejemplo he usado los valores que pone el basic por defecto) para evitar que se descontrole todo el hardware y luego la rutina que pides pues es tal que esta:
Código: Seleccionar todo
    ORG $0000

inicio
    DI
    IM 1
    LD   HL,$C9FB
    LD   ($0038),HL
    EI

    CALL $680C  ; INIT

bucle_infinito
    LD   B,$F5
espera_al_refresco
    IN   A,(C)
    RRA
    JR   NC,espera_al_refresco
    HALT
    CALL $687F ; INTERRUPT
    HALT
    JR   bucle_infinito
Con eso ya te debe sonar sin problemas, te adjunto un snapshot para que puedas analizarlo y ver que todo está correcto.
Adjuntos
GhostFinal.sna
(64.25 KiB) 53 veces
Desconectado
Avatar de Usuario

D_Skywalk

Me voy lanzando

Me voy lanzando

  • Mensajes: 40
  • Registrado: Lun Mar 20, 2006 3:20 am

Re: Ayuda con un miniplayer (AY) para Wiituka

NotaVie Nov 26, 2010 3:41 am

Vale funciona bien con la mitad de las canciones, no entiendo bien todo el código (si pudieras comentarlo para añadirlo asi) pero creo que el problema es que entre el INIT y el refresco machacamos registros que algunas canciones necesitan...

Una de las que fallan, commando al salir del INIT tiene estos valores:
Código: Seleccionar todo
AF: 0C00 HL: 1730 HL':1A94 DE: 1AB2 DE': 1AB2 BC: 000D
   ... después ... :_D
AF: 2F05 HL: 1730 HL':1A94 DE: 1AB2 DE': 1AB2 BC: F50D


Podemos esperar al refresco sin tocar registros? y sino podemos hacer un guardado de todos y cargarlos después del HALT? una vez estamos en el bucle de $0000 a $000A lo tenemos disponible...

Código: Seleccionar todo
    ORG $0000

inicio
    DI
    IM 1
    LD   HL,$C9FB
    LD   ($0038),HL
    EI

    CALL $680C  ; INIT

bucle_infinito
    GUARDAR_REGS ;
    LD   B,$F5 ; Que hace exactamente B en el loop?
espera_al_refresco
    IN   A,(C)
    RRA
    JR   NC,espera_al_refresco
    HALT
    CARGAR_REGS ;
    CALL $687F ; INTERRUPT
    HALT
    JR   bucle_infinito


He intentado intercambiar AF por AF' (EX AF, AF') y funciona en este, pero en algunos aparece como una carga de pantalla XD
Adjunto el engendro a ver que te parece :shock:

Un Saludo, menuda odisea! :mrgreen:
Adjuntos
cmd-b.sna
Musica del Commando AY (SNA)
(64.25 KiB) 47 veces
Mi Weblog Personal sobre linux, gp2x, emulacion, desarrollo, abandonware...
http://david.dantoine.org/
Desconectado
Avatar de Usuario

D_Skywalk

Me voy lanzando

Me voy lanzando

  • Mensajes: 40
  • Registrado: Lun Mar 20, 2006 3:20 am

Re: Ayuda con un miniplayer (AY) para Wiituka

NotaVie Nov 26, 2010 4:38 am

Estoy mirando y no se si valdrá la pena que te pongas a mirar eso... los AY de spectrum se cuelgan todos :(

Y el formato creo que no indica por ningún lado si es un AY de spectrum o de Amstrad, y como la idea es que la gente meta los ficheros YM+AY en una carpeta a mocho y se van poniendo solos. Puede ocurrir que si metes un AY de spectrum ahora estés un rato sin escuchar nada o incluso algún cuelgue... :?

Un Saludo :roll:
Pd: Mierda, perdon por el doble post, creía que estaba editando... mejor me acuesto ya :oops:
Adjuntos
cmd-spec.sna
Musica Comando (SPECTRUM) AY SNA
(64.25 KiB) 47 veces
Mi Weblog Personal sobre linux, gp2x, emulacion, desarrollo, abandonware...
http://david.dantoine.org/
Desconectado
Avatar de Usuario

syx

Master of The Forum

Master of The Forum

  • Mensajes: 1136
  • Registrado: Mié Sep 02, 2009 8:55 am

Re: Ayuda con un miniplayer (AY) para Wiituka

NotaVie Nov 26, 2010 10:28 am

Voy a comentar los mensajes en orden (es que me dió hasta las tantas uwolizando xDDD).

Hombre uno pensaría que siendo una rutina que se llama por interrupciones sería lógico que ella se encargase de mantener sus registros a buen recaudo, pero vamos que se lo añadimos nosotros (metiendo A y B en la pila, te faltaba guardar B, y lo de usar A' el problema que tiene es que esa rutina de reproducción de música puede estar haciendo uso de ese registro también) y listo, así que el código comentado sería tal que así:
Código: Seleccionar todo
    ORG $0000

inicio
    ; Tomamos el control del sistema
    DI                  ; Desconectamos las interrupciones
    IM 1                ; Activamos el modo 1 de interrupciones del Z80
    ; Instalamos un manejador 'dummy' (que regresen del tirón) de interrupciones
    LD   HL,$C9FB       ; HL contiene los valores hexadecimales de las instrucciones EI + RET
    LD   ($0038),HL     ; Y lo instalamos en el manejador de interrupciones del modo 1 del Z80
    EI                  ; Reactivamos las interrupciones

    CALL $680C          ; Llamamos a la rutina de interrupciones de este AY (INIT)

bucle_infinito
    ; Guardamos en la pila los registros usados por la rutina que espera al
    ; refresco (A y B). Por supuesto, debes inicializar la dirección de la pila
    ; en el snapshot a una zona libre, por ejemplo $0000.
    PUSH AF
    PUSH BC

    ; Rutina que espera el refresco
    LD   B,$F5          ; Puerto B del PPI
espera_al_refresco
    IN   A,(C)          ; En el CPC es en realidad IN A,(B) osea el puerto que se usa está en B, no en C
    RRA                 ; Mandamos el bit que indica si hay refresco a la bandera de Acarreo
    JR   NC,espera_al_refresco

    Restauramos de la pila los registros que usaba la espera al refresco
    POP  BC
    POP  AF

    HALT                ; El refresco se produce normalmente unos cuantos scanlines antes de la
                        ; sexta interrupción de 300 Hz (la última de ese frame) y dura varios
                        ; scanlines, por lo que con este HALT nos aseguramos de que si la rutina
                        ; que reproduce música es muy rápida, no se llame más de una vez por frame.

    CALL $687F          ; Llamamos a la rutina que reproduce la musica (INTERRUPT).

    HALT                ; Esperamos hasta la siguiente interrupción de 300 Hz (esto podría sobrar)
    JR   bucle_infinito


D_Skywalk escribió:Estoy mirando y no se si valdrá la pena que te pongas a mirar eso... los AY de spectrum se cuelgan todos :(

Y el formato creo que no indica por ningún lado si es un AY de spectrum o de Amstrad, y como la idea es que la gente meta los ficheros YM+AY en una carpeta a mocho y se van poniendo solos. Puede ocurrir que si metes un AY de spectrum ahora estés un rato sin escuchar nada o incluso algún cuelgue... :?
Como ya te comenté es un formato totalmente anticuado, si no recuerdo mal la detección entre CPC y ZX era dentro de la cabecera del fichero en los bytes donde se indican los puertos del AY (si eran 0, era de CPC ó a lo mejor era el valor de los puertos del CPC lo que te permitía diferenciarlos, es cosa de mirarlo en la documentación del formato que venía en el plugin del Delitracker).

En cuanto a que las canciones de spectrum no furulen, pues es normal, para empezar el código en z80 del player accede a los puertos donde está enchufado el AY en el spectrum ($FFFD y $BFFD), añadele a eso que el reloj del AY del zx es distinto, que los t-estados por frame del spectrum cambian y que en el spectrum solo se producen interrupciones cada 50 Hz; aunque estas últimas cosas no debería ser nada demasiado complicado de corregir y solo necesitarías atrapar los puertos del AY de zx y redirigirlos a los del CPC.
Desconectado
Avatar de Usuario

McKlain

Master of The Forum

Master of The Forum

  • Mensajes: 1590
  • Registrado: Mar Nov 28, 2006 2:48 pm
  • Ubicación: Málaga

Re: Ayuda con un miniplayer (AY) para Wiituka

NotaSab Nov 27, 2010 9:27 am

syx escribió:Voy a comentar los mensajes en orden (es que me dió hasta las tantas uwolizando xDDD).


¿Cuanto falta? XD
Mi música en Soundcloud: http://soundcloud.com/mcklain
Mis experimentos sonoros en Goear: http://www.goear.com/mcklain/songs/
Desconectado
Avatar de Usuario

D_Skywalk

Me voy lanzando

Me voy lanzando

  • Mensajes: 40
  • Registrado: Lun Mar 20, 2006 3:20 am

Re: Ayuda con un miniplayer (AY) para Wiituka

NotaSab Nov 27, 2010 12:07 pm

syx escribió:En cuanto a que las canciones de spectrum no furulen, pues es normal, para empezar el código en z80 del player accede a los puertos donde está enchufado el AY en el spectrum ($FFFD y $BFFD), añadele a eso que el reloj del AY del zx es distinto, que los t-estados por frame del spectrum cambian y que en el spectrum solo se producen interrupciones cada 50 Hz; aunque estas últimas cosas no debería ser nada demasiado complicado de corregir y solo necesitarías atrapar los puertos del AY de zx y redirigirlos a los del CPC.


He estado dándole vueltas y sería meter un par de hacks en el z80 y no se si vale la pena... total tengo el player ym terminado y suena como los ángeles. He remirado todas las implementaciones disponibles de AY y en ninguna he visto, claramente como identificar en su header si el chiptune es z80 de speccy o de amstrad.

Realmente la única forma sería capturar esa petición a $FFFD y reiniciar el cpc para que no siga ejecutándolo. Quizás lo deje finalmente como una opción escondida o no hable de ella en el README y lo deje sólo para quien rebusque ;)

Gracias por toda la ayuda y el código lo pruebo esta tarde y te cuento ;D

Un Saludo y que es eso de uwolizar :? :mrgreen:
Mi Weblog Personal sobre linux, gp2x, emulacion, desarrollo, abandonware...
http://david.dantoine.org/
Siguiente

¿Quién está conectado?

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


La Comunidad Española
ESP Soft, juegos para tu CPC Foro de Amstrad CPC Todos los juegos para CPC en un CD El portal del CPC Web dedicada al Amstrad CPC (utilidades) Información útil para el CPC (talleres) El sitio del Amstrad CPC Mundo CPC Pree Play then any Key CPC Basic
CPC-Topsites rss