Toqueteando las tripas del OCS en ASM. Nivel -1

Avatar de Usuario
Chema
Mensajes: 2175
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 1625 veces
Agradecimiento recibido: 528 veces
Contactar:

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

Mensajepor Chema » 12 Abr 2019 00:45

Último mensaje de la página anterior:

Hala. Ya hice mi primera copperlist :) a ver si mañana hago el ejemplo 4...

Muchas gracias por todo. Esta es la manera de ir aprendiendo. Eso sí, si el copper es realmente una chorrada comparado con el blitter... no quiero ni pensarlo XD

Avatar de Usuario
Mlake
Mensajes: 41
Registrado: 27 Mar 2019 19:54
Agradecido : 22 veces
Agradecimiento recibido: 105 veces

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

Mensajepor Mlake » 12 Abr 2019 17:21

Con suerte este fin de semana o a principios de la que viene colgaré el capitulo sobre el playfield.
Si alguien se deja caer con unos bipmaps en 320x256, 640/256 en 2/4/8 colores se lo agradeceria. :oops:

Avatar de Usuario
Skynet
Mensajes: 7
Registrado: 04 Nov 2018 22:50
Ubicación: Almería
Agradecido : 29 veces
Agradecimiento recibido: 10 veces

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

Mensajepor Skynet » 13 Abr 2019 17:38

Genial y encomiable iniciativa que seguramente servirá para que a más de uno le pique el gusanillo de la programación en asm en A500. Estoy seguro que si continúas así, en Posadas tendremos alguna sorpresa en forma de nuevas producciones.

Con respecto al Copper, sólo una pequeña puntualización. Cuando esperas al inicio de una determinada línea, por ejemplo dc.w $ac01,$fffe, la primera posición EXACTA de la misma no es la 01, sino la 05. Cualquier posición menor lo que hace es cambiar por ejemplo el color en la última posición de línea anterior. Esto que a priori parece no tener importancia, la tiene en ciertas rutinas donde la sincronización al pixel es crítica.

Y ya que en tu próximo capítulo vas a explicar los playfields, no olvides los modos interlaced como 640x512 que tan buenos resultados visibles producen hoy día.

Un saludo y mucho ánimo.

Avatar de Usuario
Mlake
Mensajes: 41
Registrado: 27 Mar 2019 19:54
Agradecido : 22 veces
Agradecimiento recibido: 105 veces

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

Mensajepor Mlake » 13 Abr 2019 22:42

Skynet escribió:Genial y encomiable iniciativa que seguramente servirá para que a más de uno le pique el gusanillo de la programación en asm en A500. Estoy seguro que si continúas así, en Posadas tendremos alguna sorpresa en forma de nuevas producciones.

Con respecto al Copper, sólo una pequeña puntualización. Cuando esperas al inicio de una determinada línea, por ejemplo dc.w $ac01,$fffe, la primera posición EXACTA de la misma no es la 01, sino la 05. Cualquier posición menor lo que hace es cambiar por ejemplo el color en la última posición de línea anterior. Esto que a priori parece no tener importancia, la tiene en ciertas rutinas donde la sincronización al pixel es crítica.

Y ya que en tu próximo capítulo vas a explicar los playfields, no olvides los modos interlaced como 640x512 que tan buenos resultados visibles producen hoy día.

Un saludo y mucho ánimo.
Gracias por el comentario. -thumbup

Cierto es que el $01 aun forma parte del Hblank y que la primera posición en la que cae el copper es $05. Aunque a mi me gusta usar $07 porque cae en el borde de pantalla y podemos rapiñar algo del overscan.

Sobre el entrelazado, no tenia pensado meterle mano (por eso no expliqué las copperlist dobles) me da apuro que la gente lo tome por complicado y desistan.
Quiero algo hipersimple y cuando la gente sienta "ilusion" por ver sus chorradillas en pantalla, empiecen a profundizar. (Ademas de que no soy ELITE).

Sobre la Posadas, fue un simple comentario para motivar a gente. Siendo sinceros, en lo que al Amiga se refiere, prefiero la demoscene antes que el vicio. Y una parte de mí abrio el hilo con ese motivo, animar a gente a hacer sus intros y no juegos. :oops:

De nuevo, muchas gracias por lis comentarios y por los animos.

Avatar de Usuario
Chema
Mensajes: 2175
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 1625 veces
Agradecimiento recibido: 528 veces
Contactar:

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

Mensajepor Chema » 15 Abr 2019 12:01

Ya tengo mi barra de copper negra yendo de arriba a abajo :)

Estoy deseando aprender a poner cosas en pantalla...

Un apunte un poco offtopic… cosas que encuentro un poco exasperantes o que me generan dudas usando el asm del 68000 en general y el vasm en particular (por si alguien me recomienda algo...)

* ¿Hay diferencias entre usar move y moveq o movei? Creo que el ensamblador elige la correcta, pero querría estar seguro...
* ¿No tiene el vasm ninguna manera de definir ámbitos (scopes) para las etiquetas locales? El ponerles un . delante es un poco primitivo y no te permite anidar ámbitos... Otros ensambladores lo permiten (por ejemplo el xa de 6502 usa .( y .) que es muy cómodo)
* Necesito instrucciones push y pop. Me he hecho unas macros con su versión acabada en "m", al menos para guardar/recuperar registros en modo largo (con move.l y movem.l). ¿Existen macros "estándar" para estas cosas?
* ¿Nadie más opina que el depurador del WinUAE está diseñado por Satán? No vendría mal sintaxis coloreada, pero ya no pido tanto... ¿no se puede hacer step/step into con una tecla de función o cargar un fichero de símbolos de un programa compilado? (Aunque no sé cómo generar el fichero de símbolos desde el vasm/vbcc, pero supongo que se podrá)
* ¿Quedará alguien vivo al final de Juego de Tronos?

-507

Avatar de Usuario
Skynet
Mensajes: 7
Registrado: 04 Nov 2018 22:50
Ubicación: Almería
Agradecido : 29 veces
Agradecimiento recibido: 10 veces

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

Mensajepor Skynet » 15 Abr 2019 22:28

Por cierto, existe un canal de Telegram en español de programación (asm principalmente) para Amiga. Si alguno está interesado, que lo diga para invitarlo.

Avatar de Usuario
metsämies
Mensajes: 146
Registrado: 28 Nov 2015 13:05
Agradecido : 11 veces
Agradecimiento recibido: 14 veces

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

Mensajepor metsämies » 15 Abr 2019 22:37

Redes sociales estan acabando con foros.
Amiga ennen kaikkea!

Avatar de Usuario
minter
Mensajes: 2335
Registrado: 22 Jul 2014 18:51
Agradecido : 2066 veces
Agradecimiento recibido: 891 veces

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

Mensajepor minter » 15 Abr 2019 22:58

metsämies escribió:Redes sociales estan acabando con foros.


Las redes sociales son FastFood.
Yo prefiero hambusgueserías de las de perrito de pincho como este foro! -507

Por cierto, ayer me zampé un perrito de pincho! :D

Avatar de Usuario
kikems
Mensajes: 3070
Registrado: 30 May 2013 19:23
Agradecido : 841 veces
Agradecimiento recibido: 1175 veces

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

Mensajepor kikems » 15 Abr 2019 22:59

Esto es más sosegado, nada se te pasa y todo queda aquí documentado. El lugar adecuado para un tuto es este o una web. El resto es usar y tirar.

Avatar de Usuario
Chema
Mensajes: 2175
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 1625 veces
Agradecimiento recibido: 528 veces
Contactar:

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

Mensajepor Chema » 15 Abr 2019 23:50

Skynet escribió:Por cierto, existe un canal de Telegram en español de programación (asm principalmente) para Amiga. Si alguno está interesado, que lo diga para invitarlo.

Si es uno al que me invitaron, tiene mucho mucho nivel. Demasiado para mis preguntas de n00b. Yo prácticamente leo sólo :)

Avatar de Usuario
Chema
Mensajes: 2175
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 1625 veces
Agradecimiento recibido: 528 veces
Contactar:

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

Mensajepor Chema » 15 Abr 2019 23:52

kikems escribió:Esto es más sosegado, nada se te pasa y todo queda aquí documentado. El lugar adecuado para un tuto es este o una web. El resto es usar y tirar.

Totalmente de acuerdo. Estos tutos tienen que quedar donde se puedan encontrar y consultar.

Por cierto, a ver si arrancas con el blitter, que tengo ganas de ver pixels en pantalla :)

Avatar de Usuario
ron
Mensajes: 18577
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1392 veces
Agradecimiento recibido: 1402 veces

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

Mensajepor ron » 16 Abr 2019 00:04

Yo a Mlake le estoy muy agradecido por el post. Hacía tiempo que necesitábamos de cosas así, como masteries en el otro hilo. Lo cual me lleva a deciros que los estoy siguiendo y que los considero que todo aficionado debería de leer y ser recomendados. Gracias.

Por otro lado muy de acuerdo con metsamies y con los demás, las redes sociales pueden tener la ventaja de la inmediatez, pero sufren del efecto efímero y en un periodo corto toda esa información termina por desvanecerse. En un foro, a piedra.

Saludos

Avatar de Usuario
Mlake
Mensajes: 41
Registrado: 27 Mar 2019 19:54
Agradecido : 22 veces
Agradecimiento recibido: 105 veces

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

Mensajepor Mlake » 16 Abr 2019 00:23

Cap 3 Introduccion playfield basico.

Para empezar a dibujar hay que planear la escena:
Necesitamos un "lienzo" y una ventana. El lienzo es la imagen real y la ventana es lo que vemos es pantalla. Podemos empezar por lo mas sencillo, una imagen y una ventana (playfield) del mismo tamaño, a pantalla completa.

La ventana es sencilla,de eso se encargan DIWSTRT y DIWSTOP, solo hay que darle una coordenada superior izda y una inferior dcha . ($YYXX)
Para nuestro ejemplo usamos ($2C,$81) y ($2C,$C1) que es la que nos indica el "fabricante" para un monitor/tv PAL. Con la Y nos manejamos igual que con el copper, nada nuevo. La X la veremos mas tarde.

Preparar la imagen es igual de simple (dos parametros), pero necesita una explicacion:

Cuando creabamos las copperlist, vimos que podiamos hacerlo de dos formas:

coper1:
dc.w 1,2,3,4,5,6,7,8,9,10

coper2:
dc.w 1,2
dc.w 3,4
dc.w 5,6
dc.w 7,8
dc.w 9,10
Usabamos la segunda forma porque asi podiamos ver mejor las parejas. Pero tambien sabiamos que la memoria realmente es "lineal" como "coper1".
Pues con los graficos es lo mismo:

Yo tengo esto este bitplane/bitmap: 16x5

1111111111111111
1100000000000011
1100000000000011
1100000000000011
1100000000000011
1111111111111111

Pero en memoria solo existe esto:

111111111111111111000000000000111100000000000011110000000000001111000000000000111111111111111111

¿como le decimos al amiga el ancho que necesito?
Como vimos en la introduccion, para empezar a dibujar hay que decirle cuando tiene que abrir el "grifo" de bitplantes y cerrarlo para saltar a la otra linea. De eso se encargan DDFSTRT y DDFSTOP.
Segun el HRM puedes empezar a dibujar a partir de $38 sin interferir en los sprites. Si cerramos el grifo en $D0, nos cuadran los 320 pixels (40 bytes).

Imagen

Si lo aplicamos a nuestro ejemplo,DDFSTRT=$38,DDFSTOP=$D0 nos da en ancho del bitmap.
Ahora que el amiga sabe cuando tiene que cambiar de linea para convertir esa "ristra" de informacion en un bitmap de 320px de ancho, solo hay que saber donde esta esa imagen.
Es una imagen de 2 colores asi que es facil, solo necesitamos un bitplane.
Para que el chipset sepa donde está le damos la direccion. como pasaba con el copper (COP1LCH y COP1LCL) tambien la tenemos que dividir en dos (BPL1PTH,BPL1PTL)

Resumen:
Imagen

El rayo llega a la esquina superior dcha (DIWSTRT),busca la direccion BPL1PTH/L y empieza a dibujar. cuando ya ha "escupido" 40bytes, cierra el grifo y espera a la siguiente linea (esa es la mision de DDFSTRT/DDFSTOP).
Asi todo el rato hasta que llegamos a DIWSTOP.

Imagen

En este ejemplo, como solo necesitamos 256 pixels, estrechamos el data fetching y la ventana.
Imagen
DDFSTRT/DDFSTOP siempre tiene que moverse de 8 en 8 ($38,$40,$48,$50.../$d0,$c8,$c0,$b8...) lo que esquivale a 16 pixels.
DIWSTRT/DIWSTOP se mueven de 16 en 16 ($2c81,$2c91,$2ca1..../$2cc1,$2cb1,$2ca1...) si quieres mantener la proporcion con el DDF

De esta forma podemos ajustar nuestro playfield al bitmap que estamos usando. Ensanchamos/encogemos el DDF y colocamos la DIW donde cuadre.
En vertical es sencillo porque lo puedes hacer de uno en uno. En horizontal, el DDF va de 16 pixels en 16.

El problema viene cuando la imagen es mayor que el datafetching. Cuando cerramos el grifo, aun queda imagen por procesar y si saltamos de linea y continuamos el chorro, vamos a poner en pantalla algo que deberia estar oculto.
Para eso existen los modulos, para saltarnos lo que no cabe.
Imagen

Cuando el rayo llega a $D0 y cerramos el grifo, saltamos 40bytes para dibujar la linea siguiente. De otro modo, en la siguiente linea se empezaria a dibujar la segunda mitad del bitplane, cosa que no nos interesa.
Una vez entendida la idea, lo montamos en un plis. No hay que hacer nada que no hayamos hecho antes.


Imagen
Imagen

La copperlist es sencilla: La novedad es BPLCON0.
http://amiga-dev.wikidot.com/hardware:bplcon0
Este esta es la zona que se encarga de configurar el tema bitplanes, resolucion, HAM.....
No está solo, tiene unos hermanos menores (BPLCON1,BPLCON2...) que se encargan del scroll y demas. Ya los veremos.

La primera instruccion apaga todo. Como vamos a configurar el playfield, encenderemos los bitplanes mas tarde.

Como vimos antes, configuramos un playfield basico de 320x256 con los datos que nos da el manual de hard.
DDFs y DIWs

BitplanePT es una marca para pokear la direccion que apunta al bitplane. Como dejamos al OS que nos cargara el programa en memoria, tenemos que rellenar a mano el puntero.
Basicamente cargo la direccion en d0, muevo el word bajo, swap y muevo el alto.

Despues creamos la paleta y encemos los bitplanes.
$1200 quiere decir que solo usamos un bitplane y ademas hemos encendido el bit 9 (colorburst) para darle compatibilidad con el A1000. (En cuanto este dominado el tema bitplanes, ordenaremos el codigo y le daremos compatibilidad con AGA y otras cosas)

Espero que se entienda la idea basica.
Para darle forma a los bitmaps, hay que estrechar/encoger el DDF (y la ventana)
Si el DDF que tienes no ocupa toda la imagen, hay que saltarse lo que sobra.

En el siguiente entraremos mejor en el tema modulo ya que en Amiga, los bitplanes se usan de forma entrelazada. Por eso solo hemos usado uno.

Cualquiera es libre de poner mas bitplanes, solo tiene que apuntarlos a BPL2PTH/L, BPL3PTH/L...., encenderlos con BPLCON0 y listo. Pero la magia (como deciamos antes) consiste en entrelazar los bitplanes.

ADF actualizado http://s000.tinyupload.com/index.php?file_id=14295556614119552383

Avatar de Usuario
Chema
Mensajes: 2175
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 1625 veces
Agradecimiento recibido: 528 veces
Contactar:

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

Mensajepor Chema » 16 Abr 2019 13:53

Yuju!

Mi primera imagen en un Amiga -drinks
Mi primera imagen.png
Mi primera imagen.png (17.91 KiB) Visto 289 veces


A ver, estaba intentando usar el método en el HRM y no era capaz de hacerlo funcionar. Luego puse el tuyo y ¡perfecto!.

Al final me imaginé qué pasaba en la primera opción y también lo hice funcionar. Ahora vienen las preguntas:

* El método del HRM pone todos los registros desde programa (no con la copper list), dejando sólo la recarga de los punteros a los datos de la imagen. Creo que esto es necesario porque esos punteros se modifican al pintar y hay que reinicializarlos. Imagino que lo haces desde la copper list porque así puedes modificar cosillas después para crear efectos (por ejemplo, con la paleta). ¿Me equivoco?

* Para hacer funcionar el método del HRM tuve que poner una copper list vacía (sólo con el final) antes de hacer nada porque creo que me estaba reescribiendo los registros la lista que está por defecto. ¿Es así? ¿No se puede desactivar de algún modo? ¿Es esto lo que se suele hacer?

Por ahora nada más... tengo que probar con más bitplanes a ver... pero antes tengo ganas de pintar un bob por ahí encima... -507

Avatar de Usuario
Mlake
Mensajes: 41
Registrado: 27 Mar 2019 19:54
Agradecido : 22 veces
Agradecimiento recibido: 105 veces

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

Mensajepor Mlake » 16 Abr 2019 14:36

Chema escribió:Yuju!

Mi primera imagen en un Amiga -drinks

A ver, estaba intentando usar el método en el HRM y no era capaz de hacerlo funcionar. Luego puse el tuyo y ¡perfecto!.

Al final me imaginé qué pasaba en la primera opción y también lo hice funcionar. Ahora vienen las preguntas:

* El método del HRM pone todos los registros desde programa (no con la copper list), dejando sólo la recarga de los punteros a los datos de la imagen. Creo que esto es necesario porque esos punteros se modifican al pintar y hay que reinicializarlos. Imagino que lo haces desde la copper list porque así puedes modificar cosillas después para crear efectos (por ejemplo, con la paleta). ¿Me equivoco?

* Para hacer funcionar el método del HRM tuve que poner una copper list vacía (sólo con el final) antes de hacer nada porque creo que me estaba reescribiendo los registros la lista que está por defecto. ¿Es así? ¿No se puede desactivar de algún modo? ¿Es esto lo que se suele hacer?

Por ahora nada más... tengo que probar con más bitplanes a ver... pero antes tengo ganas de pintar un bob por ahí encima... -507
¡¡¡Enhorabuena!!! -grin

Se puede hacer todo desde la CPU, pero la gracia del amiga es usar el copper para todo lo que puedas. Asi no ocupas el micro. Imagina que haces un playfield de media pantalla para arriba y otro de media para abajo.
Solo seria cuestion de hacer una espera en $AC y rehacer el nuevo playfield. Ya has conseguido un splitscreen.


El HRM te lo pinta sencillo, pero no tiene en cuenta la posicion del raster. Asi que para crear el playfield con la CPU, tendrias que parar unas lineas antes de $2c (si vas a empezar ahi) para configurar las DDF, DIW y demas... y que despues el chipset se entretenga generando la escena.

El puntero de la imagen lo declaras al principio, pero como bien supones , se va incrementando el solo a medida que dibujas y si lo sobreecribes por no esperar, te lo cargas.

Si el copper te molesta, lo puedes desactivar via DMACON (bit7 Copper).

Si ahora quieres trastear, puedes usar bitplanes (divisibles entre 16) y trastear con el DDF (siempre de 8 en 8 porque si te fijas en el grafico del dma, los bitplanes van en paquetes).

Avatar de Usuario
Skynet
Mensajes: 7
Registrado: 04 Nov 2018 22:50
Ubicación: Almería
Agradecido : 29 veces
Agradecimiento recibido: 10 veces

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

Mensajepor Skynet » 16 Abr 2019 14:56

El HRM estaba escrito en un lenguaje demasiado técnico. Era muy difícil comprender exactamente lo que quería decir, de ahí que mucha gente se frustrara porque no conseguía lo más básico, como es poner un gráfico en pantalla con tu propia paleta.

Me ha gustado mucho tu analogía de DDFSTRT y DDFSTOP con un grifo, genial. -thumbup

La verdad es que explicas todo de manera muy clara y sin tecnicismos, por lo que haces fácil la entrada a este mundo tan bonito de programar en Amiga. Al final de todo, conseguir hacerte un source inicial con todo lo básico para empezar te facilita la vida, y si encima comprendes cómo y por qué se hacen las cosas, pues mejor que mejor.

Un saludo y a seguir así -drinks

Debvgger
Mensajes: 1
Registrado: 10 Nov 2018 09:24
Agradecimiento recibido: 2 veces

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

Mensajepor Debvgger » 17 Abr 2019 12:25

Gracias por el esfuerzo que estás dedicando a este tutorial :-) El Amiga necesita más programadores.

Sobre el canal, me gustaría decir que hay gente de todos los niveles y que la única condición para entrar es querer aprender y mejorar; todo el mundo que la cumpla es bienvenido y no "acaba con los foros" sino que los complementa. La mensajería instantánea y la scene han ido de la mano desde hace décadas!


Volver a “Software & OS Amiga”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados