Toqueteando las tripas del OCS en ASM. Nivel -1

Avatar de Usuario
Mlake
Mensajes: 173
Registrado: 27 Mar 2019 19:54
Agradecido : 73 veces
Agradecimiento recibido: 309 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor Mlake » 05 Feb 2022 00:42

Último mensaje de la página anterior:

squall2019 escribió:El tema no era hacer una adaptador sino saber por qué este no funcionaba. Sabiendo como va el tema de los puertos DB9 de amiga lo mismo descubro el porqué no va.

La verdad es que no sabria responderte, nunca he tocado un A4000. :(

Si te funciona en otros Amiga, imagino que el adaptador está bien y los tiros puede que vayan por el 030/040. Quizá sea por los tiempos entre pulsos, que no van finos del todo por la diferencia de velocidad.

squall2019
Mensajes: 405
Registrado: 03 Jun 2021 20:20
Agradecido : 18 veces
Agradecimiento recibido: 164 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor squall2019 » 05 Feb 2022 00:49

Sólo lo probé en el A4000. No tengo ningún A1200 o CD32 para hacer pruebas. Creo recordar que lo que no iba era emulando un pack de CD32 pero como de MD de tres botones tiraba. A ver si lo localizo y hago nuevas puebas.
Los mandos de nes y supernes son también serie.

Avatar de Usuario
mgyv
Mensajes: 95
Registrado: 10 May 2021 21:49
Ubicación: Vigo
Agradecido : 106 veces
Agradecimiento recibido: 72 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor mgyv » 05 Feb 2022 19:34

Texto2.png
Texto2.png (4.95 KiB) Visto 813 veces

Ya va tomando forma la rutina de pintar en cualquier dirección. Es lenta como el demonio, pero se me metió entre ceja y ceja y tengo ganas de dejarla mayormente funcional. Me falta encapsularla y limpiarla (y como no, hacer una mini-intro con ella para que se vea en acción, -grin )
-coam1 A2000 [TF534+6mb ZII+opalvision], A500 [ide68k+1.5 slow], CD32 [TF330], PiStorm

Avatar de Usuario
Mlake
Mensajes: 173
Registrado: 27 Mar 2019 19:54
Agradecido : 73 veces
Agradecimiento recibido: 309 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor Mlake » 05 Feb 2022 20:20

-coam1
mgyv escribió:Texto2.png
Ya va tomando forma la rutina de pintar en cualquier dirección. Es lenta como el demonio, pero se me metió entre ceja y ceja y tengo ganas de dejarla mayormente funcional. Me falta encapsularla y limpiarla (y como no, hacer una mini-intro con ella para que se vea en acción, -grin )

¡Que crack! -grin

Si usas mucho "waitblitter" puedes cambiar la rutina por macros y asi te ahorras los saltos.
Tambien puedes reutilizar el mismo bitplane para hacerle sombras (ahi depende de los slots que te " sobren")
O usar doble buffer para ganar algo de tiempo..

Pero tiene muy biena pinta. Me quedo a la espera... -drinks

Si te puedo echar un capote, por aqui estamos.

Avatar de Usuario
Mlake
Mensajes: 173
Registrado: 27 Mar 2019 19:54
Agradecido : 73 veces
Agradecimiento recibido: 309 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor Mlake » 09 Feb 2022 05:41

En el anterior post comentamos por encima como funciona el mando de megadrive, asi que vamos a poner en practica lo aprendido.

Lo primero y mas importante es arreglar la linea de alimentacion del mando (+5V PIN 9) para que quede operativa (asi podremos usar mandos inalambricos, funcionalidades extras,leds...) y colocamos el SELECT en su sitio (boton 3 PIN 5).
Una vez hecho esto, vamos al turron.


Direcciones:

Imagen

Leer la cruceta no es dificil en si. Lo complicado es explicarlo....
Estos 4 pines no solo estan pensados para joystick, tambien funcionan para el raton. Por eso son un poco enrevesados de leer.

La izquierda y derecha son faciles, testear los bits 9 y 1 respectivamente.

El arriba y abajo tienen truco porque están "codificados" y para averiguar el valor hay que hacer una operacion con ellos.
Tenemos que XORear (eor en 68k) los bits que usamos antes (9 y 1) con los bits 8 y 0.


Imagen

Cada cual lo hará a su manera, yo pongo la que creo que es mas facil de ver .Como siempre prefiero que quede clara la idea y ya dependiendo de las habilidades que tengais con el ASM de 68K, lo haceis a vuestro modo.
Guardamos una copia de JOY1DAT en D0.
Copiamos D0 en D1.
D0 lo usaremos para el eje X y D1 para el eje Y.

Con la dcha/izda no teniamos que hacer nada, asi que no la tocamos.
Pero D1 lo vamos a desplazar un bit a la izda, o lo que es lo mismo, multiplicamos por dos (o lo sumamos a si mismo,es igual).
Ahora podemos hacer el XOR porque los bits necesarios ya coinciden en posicion.
El resultado del eje vertical queda en D1.


Imagen

Si en lugar de "bit test" quereis guardar los valores y hacer la lectura de otra manera, bienvenidos. Lo que mas comodo os resulte.
En este caso comprobamos los bits y "encendemos" los botones necesarios.
He usado distintos colores de la paleta para cada boton y solo tengo que activarlos en la copperlist. xPT es la etiqueta que les puse.

¿Hasta aqui esta todo claro? Pues pasamos a los botones


Imagen

Empecemos con el boton principal.
Este es facil, funciona igual que cuando usamos el boton izdo del raton para salir de los ejemplos.
La diferencia es que ahora leemos el puerto 1.
Sabemos que CIAAPRA ($bfe001) es la que gestiona el tema, esta vez en vez de leer el bit 6 (LMB), miramos el bit 7.



Imagen

Ya vimos que la megadrive necesita 2 hilos para los botones y uno para el SELECT.
El primero lo tenemos apañado y tenemos a nuestra disposicion 2 hilos mas (nos da justo).
El boton que falta nos entra por el PIN 9 asi que vamos a recibir el estado en el bit 14 de POTGOR.

Ya hemos leido los 2 botones . Hasta aqui bien....

El problema viene al activar la linea SELECT.



Imagen

Segun el cutrepaint, tenemos que activar el bit 12 de POTGO pero esto no sucede de forma inmediata. Por temas de circuiteria hay un retardo que nos obliga a "esperar" a que el voltaje se ponga en su sitio y este retraso lo podemos gestionar de varias formas. La mas simple que se me ocurre (para no liar mas la cosa), es frenar la ejecucion durante una linea de CRT.
De eso se encarga esperaPOT.
Tomamos la posicion actual del rayo en D0, la copiamos a D1 y le añadimos 1 linea mas, ignorando la horizontal (por eso la ANDeo).
Volvemos a mirar la posicion del rayo y hasta que no alcanza la linea siguiente (D1), no le dejamos seguir. ¿se entiende?
Funciona como la rutina waitVB de siempre, pero esperando hasta una linea mas abajo de la que estamos actualmente .

Ahora que tenemos la señal activa, leemos como antes.





Imagen

Boton 1 en el bit 7 de CIAAPRA y boton 2 en bit 14 de POTGOR.

Una vez hemos leido la segunda ronda de botones (A y START), tenemos que volver a bajar la linea SELECT para que en la proxima iteracion podamos leer las direcciones, B y C.
Si este cambio (SELECT) lo hubiera hecho al inicio, tendriamos que haber metido otra espera. Por eso aprovecho ahora porque hasta la llegada del proximo frame, hay tiempo mas que de sobra.
¿Me explico?


Si ha quedado claro, solo queda un apunte.
En el post anterior vimos que los botones 2 y 3 del amiga, funcionan como potenciometros.
A nosotros nos interesa que actuen como botones. Para eso hay que activar los bit que ponen las lineas en "OUTPUT". Esa el la razon de poner $a000/$b000 en POTGO,para que queden activados los bits 15 y 13 tambien.



Imagen

Creo que me he liado como una persiana, aun así espero que esto le sirva a alguien.


https://www.youtube.com/watch?v=gk0todambUs
Adjuntos
padMD.7z
(3.06 KiB) Descargado 19 veces

Avatar de Usuario
Mlake
Mensajes: 173
Registrado: 27 Mar 2019 19:54
Agradecido : 73 veces
Agradecimiento recibido: 309 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor Mlake » 09 Feb 2022 05:46

Dejo por aqui la version portable del hilo.

Comento que faltan los gifs del descending mode del blitter. a ver si puedo hacer algunos nuevos.

https://easyupload.io/2g4fq4

Avatar de Usuario
Miguel angel rojo
Mensajes: 1898
Registrado: 08 May 2017 12:49
Agradecido : 147 veces
Agradecimiento recibido: 631 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor Miguel angel rojo » 09 Feb 2022 07:18

Buenas, genial post, que no lo había dicho, es muy interesante y aunque a mi me viene grande, ya que ni el basic se me da bien, me gusta leer, y ver esas cosas tan chulas que hacéis, de hecho lo Vuelvo a empezar desde cero con más calma y poco a poco.
-coam1 -4mstr4d -j4tar1 -cocbm1
-0r1c -sp3zy -m3s3x -m4c

Avatar de Usuario
mgyv
Mensajes: 95
Registrado: 10 May 2021 21:49
Ubicación: Vigo
Agradecido : 106 veces
Agradecimiento recibido: 72 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor mgyv » 14 Ago 2022 12:32

Estoy con el tema de audio, y no me sale lo que pretendo, ya le he dado bastantes vueltas y necesito ayuda. -nb

Tenía pensado hacer algo con varios buffers de audio, e ir llenando el contenido mientras suena.
El problema es que me he quedado enganchado en la rutina más básica : doble/triple/cuádruple buffer de audio.

Lo que intento hacer (para empezar) es, teniendo 4 buffers (buff00,buff01,buff02,buff03) es que suenen cíclicamente.
Apunto al inicio del sample (buff00) e inicio interrupción para que suene buff00. A partir de ahí, cada interrupción va apuntando a la siguiente interrupción y al siguiente sample y guardando en la posición $70, intentando seguir las instrucciones que comentas para empalmar samples.

El código que adjunto hace cosas raras: se queda playeando el buff00 todo el rato en bucle. Lo curioso es que al salir del programa y volver al workbench (si no apago el dma), van sonando erráticamente,repitiéndose alguna vez, algo así: 00,01,01,01,02,02,03,03,03,00,00,etc

Además, por si fuera poco, después de ejecutarlo, el ordenador, en los próximos minutos, aleatoriamente, saca un guru haciendo cualquier otra cosa.
Estoy seguro de que el problema está en las interrupciones, porque no escribo nada a memoria y no debiera corromper nada.

Si alguien tiene un ejemplo de doble buffer de audio funcionando, agradezco si lo postea para echar un vistazo.

Audiotest02.zip
(22.04 KiB) Descargado 6 veces
-coam1 A2000 [TF534+6mb ZII+opalvision], A500 [ide68k+1.5 slow], CD32 [TF330], PiStorm

Avatar de Usuario
mgyv
Mensajes: 95
Registrado: 10 May 2021 21:49
Ubicación: Vigo
Agradecido : 106 veces
Agradecimiento recibido: 72 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor mgyv » 15 Ago 2022 11:58

Me autocorrijo 2 detalles:
En em_Initsound, al activar interrupciones en INTENA, debo activar el bit 14 INTEN (sino no se activa ninguna interrupción).
Mientras estaba en el workbench, este bit estaba activo y por eso medio-funcionaba. Al apagar SO, estaba a 0 e inhibía cualquier interrupción:
move.w #$c080, custom+intena

La otra correción es que el audio parece que está haciendo 1 interrupción y no 2 (al empezar el sample y al terminar), con lo que sobran todas las rutinas em_intbuff0Xb. Solo encadenando las em_intbuff0Xa funciona casi bien.
Esto no lo entiendo, porque se supone que hace una interrupción al iniciar los parámetros del sample, y otra al terminarlo.

De momento, tras esos cambios, no se me ha colgado todavía.

Ahora tengo otro problemilla, que al ejecutarlo, empieza a sonar primero el buffer que estaba sonando al terminar la última vez, en lugar de sonar el primero, y luego ya va ok al repetirse.
-coam1 A2000 [TF534+6mb ZII+opalvision], A500 [ide68k+1.5 slow], CD32 [TF330], PiStorm

Avatar de Usuario
mgyv
Mensajes: 95
Registrado: 10 May 2021 21:49
Ubicación: Vigo
Agradecido : 106 veces
Agradecimiento recibido: 72 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor mgyv » 17 Ago 2022 12:22

Aquí dejo la rutina (creo que funcionando correctamente).
Las diferencias con respecto al archivo original, de hace 2 posts son:
En em_InitSound
-Antes de definir la nueva interrupción, desactivo interrupciones
move.w #$4000,custom+intena
-Guardo dirección vieja que había en la posición $70
-Después de asignar interrupción con la nueva rutina, vuelvo a activar las interrupciones.
move.w #$c080,custom+intena
(en el ejemplo de boing de la explicación se hace con #$8080, pero esto no me funciona si apago el OS)

En el proceso de iniciar la interrupción (esto lo deduzco EMPIRICAMENTE, por favor, aclarad si es diferente):
-Se produce una interrupción una vez guardados los parámetros (posición, periodo, volumen) SOLO LA PRIMERA VEZ. Luego se producirá una interrupción al TERMINAR de sonar el buffer. Si hemos modificado la posición del sample durante la reproducción no genera una interrupción extra. Es como hago en la rutina adjunta.

En em_stopint
-Antes de apagar el bit 7 de interrupción atendida (move.w #$0080,custom+INTREQ),
falta desactivar la interrupción (move.w #$0080,custom+INTENA), de lo contrario, queda activa la interrupción apuntando a la rutina de nuestro programa después de salir del mismo. Si posteriormente "cae" otro codigo aleatoriamente en esa posición del programa, si coincide que hay una interrupción de audio en el canal 0 -> guru al canto.

Se admiten sugerencias. Por lo menos creo que ya tengo una base para poder seguir... -grin

ATEST02C.zip
(39.98 KiB) Descargado 6 veces
-coam1 A2000 [TF534+6mb ZII+opalvision], A500 [ide68k+1.5 slow], CD32 [TF330], PiStorm

Avatar de Usuario
Skynet
Mensajes: 44
Registrado: 04 Nov 2018 22:50
Ubicación: Almería
Agradecido : 118 veces
Agradecimiento recibido: 27 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor Skynet » 23 Ago 2022 08:38

¿Pita o no pita? :roll:

Avatar de Usuario
mgyv
Mensajes: 95
Registrado: 10 May 2021 21:49
Ubicación: Vigo
Agradecido : 106 veces
Agradecimiento recibido: 72 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor mgyv » 23 Ago 2022 21:36

Skynet escribió:¿Pita o no pita? :roll:


Sí, pita. Es una rutina básica de 4 buffers que suenan de forma cíclica. Incluye el ejecutable, por si alguien quiere probar.
Me funciona bien en el A500 sin acelerar y también en el 68030. Ojo, si el VBR no está en la posición 0, fallará (todavía no he probado a recoger el VBR. Sé que en la página de Photon, -coppershade.org- hay una rutina, pero no la he probado).

Partiendo de esta base, estoy empezando una rutina de mixing de 3 canales a 1, para intentar tener 3 canales reales + 3 canales mezclados. Algo parecido al tfmx. A ver hasta dónde llego en los próximos meses. Poco a poco. -grin
-coam1 A2000 [TF534+6mb ZII+opalvision], A500 [ide68k+1.5 slow], CD32 [TF330], PiStorm

Avatar de Usuario
Skynet
Mensajes: 44
Registrado: 04 Nov 2018 22:50
Ubicación: Almería
Agradecido : 118 veces
Agradecimiento recibido: 27 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor Skynet » 24 Ago 2022 08:25

Buen ejercicio la rutina de mixing. Por si te sirve de ayuda: -drinks

https://www.youtube.com/watch?v=SPgN61ifQlQ

https://www.youtube.com/watch?v=tTFGIGdj-fc

Avatar de Usuario
mgyv
Mensajes: 95
Registrado: 10 May 2021 21:49
Ubicación: Vigo
Agradecido : 106 veces
Agradecimiento recibido: 72 veces

Re: Toqueteando las tripas del OCS en ASM. Nivel -1

Mensajepor mgyv » 24 Ago 2022 20:29

Skynet escribió:Buen ejercicio la rutina de mixing. Por si te sirve de ayuda: -drinks

https://www.youtube.com/watch?v=SPgN61ifQlQ

https://www.youtube.com/watch?v=tTFGIGdj-fc

Sí, lo había visto. Está muy optimizado para una frecuencia fija, y hacer el mixing sumando los canales, Para sonidos tipo fx, explosiones y demás está muy bien.
Lo que pasa es que yo estoy pensando más en la música, y para eso necesito variar la frecuencia y el volumen del sample para cada canal soft (aunque eso es muy caro a nivel de CPU). La rutina más crítica ya la tengo planteada, en pruebas, mezcla a unos 11khz, con control de volumen y frecuencia 1 octava hacia arriba (en cualquier frecuencia intermedia), pero eso solo es el núcleo de la rutina. Estoy haciendo un parser para preprocesar un archivo med MMD0 y extraer lo necesario (patterns, samples, secuencia, etc) para dejarlo estructurado para que luego desde ensamblador me sea más fácil tener todos los punteros a mano. Y después toca hacer un player para ir alimentando el mixer, cada frame, desde los patterns. La idea es que va a estar sonando a la vez que un mod con 3 canales, dejando el canal 0 libre (esto todavía no lo he probado, pero tiene que haber alguna forma de hacerlo).

Seguramente no valga para usar "in game" en un 68000 a 7, pero mi target es que le llegue para rellenar los buffers durante cada frame, y a ver cuánta CPU sobra...

Por eso digo que me va a llevar bastante tiempo. Lo tengo más cómo un reto personal.
-coam1 A2000 [TF534+6mb ZII+opalvision], A500 [ide68k+1.5 slow], CD32 [TF330], PiStorm


Volver a “Software & OS Amiga”

¿Quién está conectado?

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