help me to make 8BP better

If you like 8BP, your help is welcome. Help me supporting this initiative (from 1€, whatever you want). Donations will be used for materials and 8BP disemination:
Mostrando entradas con la etiqueta RSX. Mostrar todas las entradas
Mostrando entradas con la etiqueta RSX. Mostrar todas las entradas

domingo, 31 de mayo de 2020

Disponible versión V40 de la libreria 8BP

Hola amigos de 8 bits de poder

ya tenéis disponible la versión V40 de la libreria 8BP, descargable en github https://github.com/jjaranda13/8BP . Esta nueva versión incorpora las siguientes mejoras:


  • libreria: ahora se incluye 8bitsdepoder_v40_00.asm con las siguientes mejoras:
    • compatible con C
    • en el subdirectorio "C" se incluye un wrapper de 8bp (8BP.h)
    • en el subdirectorio "C" se incluye un minibasic (minibasic.h)
    • en el subdirectorio "C" se incluye la herramienta de compilación "compila.bat" que te simplifica el proceso de compilar y crear un .dsk
  • manual: he actualizado el manual e incluido un capitulo que te enseña a traducir tu ciclo de juego a C
  • Demos: todas las demos se recopilan en un menú y están hechas con la v40. ahora hay una demo nueva que demuestra ciclo de juego en C
  • games: se incluye el nuevo "Zampa Manzana" creado por Riper y música de Xeno


Aquí tenéis un pequeño vídeo introductorio: 




En el manual de 8BP encontraras un capitulo dedicado a la forma en la que 8BP se ha hecho compatible con C. 


Con esta nueva funcionalidad tienes 3 opciones:
1)     Hacer tu programa 100% en BASIC ( es decir, no usar la funcionalidad). Esta opción simplifica mucho la tarea de programar pero tienes menos velocidad.
2)     Hacer tu programa 100% en C. Esta opción es compleja pues programar, compilar, buscar y corregir errores, se hace una tarea mucho mas lenta que programando en BASIC

3)     Hacer tu programa en BASIC y al final traducir tan solo el ciclo de juego a C. Esta opción tan fácil como la primera salvo por la ultima fase de traducción a C. 

Puedes programar directamente en C pero también puedes hacer tu juego 100% en BASIC y solo al final traducir fácilmente (mediante un minibasic que viene con 8BP) el ciclo de juego a C. Prácticamente te llevará unos minutos y conseguirás la máxima velocidad.

¿que no te lo crees? pruébalo. Ya nada será igual


Un ejemplo comercial de la opción 3 es el famoso y mítico juego “plaga galáctica”, una producción de Indescomp creado por el excelente programador Paco Suárez en 1984. Le debemos muchas horas de entretenimiento al gran Paco Suárez.


Para esta nueva funcionalidad, 8BP v40 te proporciona dos librerías de C:
  • el wrapper de 8BP, llamado 8BP.h
  • un minibasic ("minibasic.h") con 18 comandos similares al BASIC pra ayudarte a traducir tu ciclo de juego desde BASIC a C




La librería 8BP trae un par de ejemplos ( dos minijuegos) para que aprendas a llevar a cabo este sencillo proceso.  Y el capítulo del manual es muy detallado y te guiará paso a paso

Ya puedes hacer juegos de AMSTRAD como nunca imaginaste.  Con 8BP v40 ya nada será igual en los juegos por computadora


hasta pronto!


jueves, 14 de noviembre de 2019

Disponible version V38 de la libreria 8BP

Hola amigos de 8 bits de poder

ya tenéis disponible la versión V38 de la libreria 8BP, descargable en github https://github.com/jjaranda13/8BP . Esta nueva versión incorpora las siguientes mejoras:

- detección de colisiones perfeccionada, sin limitaciones por coordenadas negativas
- comando MUSIC mejorado: ahora puedes decidir entra hacer sonar una musica en bucle o hacerla sonar una sola vez.
- el comando MUSICOFF ha sido reemplazado por MUSIC invocado sin parametros
- manual mejorado con capitulo de primeros pasos y diversas pequeñas mejoras
- la librería ocupa exactamente igual que antes (8KB) , dejándote 24 KB para tu lógica BASIC, 8.5 KB para gráficos y 1.4 KB para música

Estos son los primeros pasos con la librería 8BP. Te dejo con un vídeo explicativo y los mismos pasos por escrito, que ademas los tienes en el manual de 8BP que viene con la librería.


Primeros pasos con 8BP

 1) Instalar winape

Lo primero que debes hacer es instalarte la última versión de Winape, que es un emulador y a la vez editor y ensamblador de Amstrad. Lo puedes descargar desde www.winape.net

2) Familiarizándote con winape: “hola mundo”

Una vez instalado el Winape, familiarízate un poco con el, probando algun juego de Amstrad y probando a cambiar la configuración. Trata de abrir el assembler que lleva incorporado en el menú y edita un “hola mundo” en la ventana de ensamblador. A continuación, copia y pega el texto en la ventana de emulación. Veras como se pega carácter a caracter



Si haces un programa mas largo, para copiarlo en la ventana de emulación es muy interesante la opción settings->high speed. Verás como se copia rapidísimo.

3) Descárgate la librería 8BP

Estamos llegando a lo mas interesante. Ve a la url https://github.com/jjaranda13/8BP y descargate el zip (https://github.com/jjaranda13/8BP/archive/master.zip) . Para ello puedes simplemente pulsar el botón verde “clone or download” y a continuación seleccionas el zip

Una vez que te lo has descargado, descomprímelo en el directorio que quieras. Tendras el siguiente resultado:


4) Ejecuta las demos

Ahora vamos a hacer una primera toma de contacto con 8BP viendo algunas demos. Entra en el directorio Demos. En el encontraras una serie de subcarpetas : ASM, BASIC, DSK, MUSIC
Entra en DSK . Alli veras un fichero .dsk con las demos. Desde winape ve al menú File->drive A-> insert Disc image y selecciona el archivo de las demos
Una vez seleccionado, desde la ventana de emulación del Amstrad escribe CAT para ver los archivos

Cada fichero .BAS es una demo donde podrás ver alguna de las características de 8BP (no todas sus posibilidades se pueden ver con las demos pero hay algunas representativas).
Ejecuta el comando RUN “LOADER.BAS”. Obtendrás el siguiente menú:




Ya puedes elegir una demo y probarla. A disfrutar. En el siguiente y ultimo paso empezaremos la creación de un juego

5) Creando tu primer programa con 8BP

Hemos probado un fichero .dsk que contiene muchas demos, con graficos y música. En el directorio Demos/ASM y en el Demos/MUSIC se encuentran los graficos y la música de las demos que has probado. Sin embargo, si quieres hacer tu propio juego o demo, es mejor que empieces con unos ficheros “limpios” sin todos los graficos que requieren las demos que has probado.

Nos vamos al directorio raíz. Alli encontraras una carpeta llamada 8BP_V38. Yo te recomiendo que hagas una copia de esta carpeta y la renombres como “mi_juego”. De ese modo preservarás la carpeta 8BP_V38 original aunque empieces a cambiar cosas

Dentro de la carpeta 8BP_V38 encontraras las carpetas ASM, BASIC, DSK, MUSIC, TAPE, y output_spedit


Desde la ventana de ensamblador de winape abre el archivo “ASM/make_all_mygame.asm” y ejecútalo (simplemente en el menú de winape z80 assembler seleccionas Assemble o pulsas Ctrl+F9). Esto comenzara a ensamblar (copiar en memoria) la librería y los graficos en la memoria del Amstrad. En este caso vamos a ensamblar muy pocos graficos, tan solo los indispensables para un pequeño juego. Los gráficos se encuentran en images_mygame.asm
Tras ensamblar todo, obtendrás un mensaje como el que se muestra a continuación:


Pulsas “ok” y desde la ventana de ensamblador vamos a abrir otro archivo. En este caso vamos a abrir un fichero BASIC, concretamente “tu_primer_juego.bas” que se encuentra en la carpeta BASIC. Tras abrirlo veras el siguiente listado en pantalla, que contiene 32 lineas:

Selecciona todo y cópialo. Luego ve a la ventana de emulación del CPC y pégalo usando el menú FILE->paste
Como el listado es algo mas largo que el “hola mundo”, usa settings->high speed para copiarlo y luego vuelve al “normal speed”
Como ya esta ensamblada la librería y los gráficos, puedes hacer RUN y el juego se ejecutará. Debes esquivar unas bolas que caen del cielo para no morir, moviéndote a derecha e izquierda

Puedes probar a modificar el programa y ver sus efectos. Poco a poco iras aprendiendo 8BP y podrás hacer modificaciones interesantes tales como cambiar la frecuencia con la que salen bolas enemigas o su velocidad, o reemplazar al soldado por una nave espacial y a las bolas por naves enemigas con diversas trayectorias.

6) Crea tu .dsk con tu juego 8BP

Por último, vamos a crear un disco con tu juego. Para ello, tras tener el juego funcionanod debes dar estos pasos

·        Crea un disco nuevo mediante winape: FILE-> drive A-> new Blanc Disc
·        Formatealo: FILE->drive A->Format Disc Image
·        Tras haber creado tu fichero dsk , desde la ventana de emulación ejecuta los siguientes comandos:

SAVE “8BP.bin”, b, 24000,18620
SAVE “juego.bas”

Ya casi hemos terminado. Ahora debes seleccionar otro disco desde el menú de winape o salir de winape para que el .dsk que has creado se haga realidad en el sistema de ficheros de windows.

Sal de winape y vuelve a abrirlo
Selecciona el disco que has creado y ejecuta:

MEMORY 23999
LOAD “8BP.BIN”
RUN “juego.bas”



Aleluya !!!



lunes, 11 de junio de 2018

Nueva versión V33 de la librería 8BP

Hola amigos de 8 bits de poder

Aunque aun no he liberado la v33, ya esta terminada y suficientemente probada. Solo me queda actualizar el manual, lo cual haré en los próximos días.

Os cuento sus características y lo que incorpora:

  • Ocupa exactamente lo mismo que la v32
  • En modo pseudo-3D, ahora tiene capacidad de imprimir segmentos con sobreescritura. Esto es algo que se podía hacer en v32 con todo tipo de sprites menos con los segmentos
  • Rotación de tintas (comando RINK) sin limitaciones. Hasta ahora se podían hacer patrones de 4 y 8 tintas rotando. Ahora puedes rotar cualquier numero de tintas
  • Sobreescritura de sprites con posibilidad de elegir el número de bits de fondo: esto te va a permitir si lo deseas usar 4 colores de fondo en tus juegos
  • sprite flipping horizontal: ahora puedes definir imágenes "virtuales", que en realidad se definen como el "flip" horizontal de una imagen real. Esto te permite ahorrar mucha memoria RAM destinada a gráficos. He hecho el horizontal y no el vertical porque el horizontal es el más útil. Normalmente un personaje que camina a la izquierda es la imagen especular del mismo caminando hacia la derecha, mientras que cuando sube hacia arriba muestra la espalda y al bajar muestra el pecho y la cara. 
ejemplo de sprite flipping
Aparte del manual, voy a preparar un par de demos que incorporaré en la v33 de serie y de momento os dejo con una preview del nuevo juego "space phantom" inspirado en el mítico space harrier.

Os prometo publicar la 8BP v33 con su manual en breve  




hasta pronto amigos!



lunes, 19 de diciembre de 2016

Disponible versión V27 de la librería 8BP

hola amigos de 8 bits de poder

Ya esta disponible la versión v27 de 8BP,  en https://github.com/jjaranda13/8BP la cual sigue ocupando lo mismo, 6KB y trae dos nuevas funcionalidades (ambas están documentadas en el nuevo manual disponible en github):

  • Cambios de estado de un sprite forzados desde una ruta: esto nos va a permitir definir entre medias de los segmentos de una ruta, un cambio de estado. Muy útil para dar saltitos y para que por ejemplo desactivemos un disparo que ya esta fuera de la pantalla sin necesidad de controlar su posición desde BASIC
  • Nuevo comando RINK ("rotate Ink"): permite hacer animación por tintas

cambios de estado en rutas:
se definen con un 255 en la posición que ocuparía el numero de pasos del segmento. En lugar de interpretarse como un segmento, ROUTEALL lo interpretará como un cambio de estado. lo mejor es ver un ejemplo, que podemos usar para un lanzamiento de misil.


ROUTE3; disparo_dere
;-----------------
db 40,0,2 ; esto son 40 pasos hacia la derecha con vy=0, vx=2
db 255,0  ; esto es un cambio de estado, quedando el sprite desactivado (status=0)
db 1,0,0 ; esto es un paso sin movimiento
db 0

Tras ejecutar un cambio de estado hay que ejecutar algún paso porque los cambios de estado  no son movimientos, por eso he puesto un paso sin movimiento. Este mecanismo permite que por ejemplo hagamos una ruta de salto y se la asociemos a nuestro personaje, el cual al comienzo del salto le asignaremos el flag de ruta y movimiento automático. Al terminal el salto, se fuerza un cambio de estado para desactivar el movimiento automático y continuamos andando normalmente.



animación por tintas
Existen juegos que requieren mover grandes bloques de memoria de pantalla para dar sensación de movimiento, como es el caso de las franjas laterales de los juegos de carreras o bloques grandes de ladrillos o tierra. El comando MAP2SP permite hacer todo eso pero la velocidad no es trepidante porque gasta mucha CPU moviendo sprites. La animación por tintas es el complemento perfecto en estos casos.
En ordenadores como el AMSTRAD con su potente paleta de 16 colores simultáneos, muchos juegos hacen uso de la animación por tintas. Un claro ejemplo son algunos juegos de coches cuyas franjas laterales de carretera se prestan a este tipo de animación.
animación de franjas laterales por tintas

La animación por tintas consiste en definir un conjunto de tintas sobre las que se va a hacer rotar un conjunto de colores. Vamos a ver un ejemplo con unas franjas blancas/grises:
concepto animación por tintas

Básicamente para dar sensación de movimiento lo que hay que hacer primeramente es asignar los colores a las tintas que van a rotar. En este caso los colores blanco (26) y gris (13) se asignan a las tintas t1..t8. vamos a suponer que la tinta t1 es la 8, de modo que la tinta t8 será la 15. El resto de tintas (0 a 7) las usaremos para los sprites. En cada instante de tiempo habrá que reasignar los valores de las 8 tintas para dar la sensación de rotación. Es precisamente lo que hace el comando RINK (abreviatura de rótate ink).
RINK te permite definir un patrón de colores a rotar sobre un conjunto de tintas. Una tinta no es un color. Una tinta es un identificador en el rango [0..15] que identifica a un color del rango [0..26]. Para definir el patrón de colores a rotar, usaremos el comando RINK del siguiente modo:

   RINK,tinta_inicial, color1,color2, color3, color4, color4, color5, color6, color7,color 8

Esto indica que van a rotar 8 tintas comenzando por la tinta_inicial usando el patrón de colores que se indica.
Si queremos rotar solo un patrón de 4 colores (y asi gastar solo 4 tintas y dejar las demás para los sprites) basta con que indiquemos solo 4 colores en el patrón.

   RINK,tinta_inicial, color1,color2, color3, color4

RINK te permite de este modo rotar un patrón de 4 colores (gastando 4 tintas) o de 8 colores (gastando 8 tintas).
Una vez establecido el patrón, podemos rotar las tintas mas o menos deprisa con

  RINK,step

Encontrarás demos del nuevo comando RINK en la carpeta de demos, directorio DemoExamples/scroll_rink. verás un juego de coches de carreras y otro de un muñeco que avanza en un escenario con ladrillos, un castillo, un árbol y un pájaro que vuela. El ejemplo del castillo combina el uso de scroll basado en MAP2SP y la animación por tintas usando RINK
animación por tintas de ladrillos

os dejo con un vídeo con ejemplos de lo que puedes hacer en BASIC de amstrad usando 8BP v27




hasta la vista!!! y felices fiestas!





domingo, 28 de febrero de 2016

disponible nueva version v18 de 8BP

hola amigos de 8BP

Ya esta disponible la versión v18 de la libreria 8BP, totalmente retrocompatible


He actualizado el repositorio de github https://github.com/jjaranda13/8BP con los siguientes cambios (coherentes entre la documentación y la librería).

  • Librería: ahora se incluye 8bitsdepoder_v18.asm con mejoras en COLSP y aumento de velocidad en STARS, mediante una optimización de cálculos. en total se pueden ahorrar más de 2 ms en el comando STARS
  • Documentación: disponible el manual v18, que incluye:
    •  explicación adicional de la diferencia entre 8BP y un motor de juegos
    •  nuevo uso del comando COLSP, especificando el sprite 32 se puede acelerar (el sprite 32 no existe y por eso se va a interpretar como un indicador de que estamos pasando información de control)
    •  explicaciones adicionales sobre el uso del flag de colisión en tu personaje y disparos. No debes usarlo en esos casos pues la detección de colisión detectaría que colisionas contigo mismo.
    •  nuevos ejemplos en la tabla de velocidad de los comandos BASIC, con mas consejos y tiempos de ejecución en milisegundos

Por aclarar las diferencias, y con todos los respetos a los motores de juegos (y además, que 8BP pretende ser otra cosa):
  • con un motor de juegos como AGD, tu juego usa el AGD y esta limitado por los condicionantes (como el uso de un lenguaje propio de script) y posibilidades impuestos por AGD pues tu juego corre "dentro" de AGD
  • Con 8BP tu juego usa el 8BP y la maquina directamente. plena libertad, plena potencia, sin limites (salvo los de la máquina)
Aunque en el diagrama he puesto una conexión "directa" entre tu juego y la máquina si programas alguna rutina en ensamblador, lo cierto es que SIEMPRE hay que atravesar la capa sintáctica del intérprete BASIC, pues al para invocar una rutina en codigo máquina debemos invocarla desde BASIC usando algo como:


CALL <dirección de memoria>, param1, param2, ...paramN

y el intérprete BASIC va a procesar los parámetros e interpretar las variables que aparezcan antes de transmitir los datos a la rutina máquina. De hecho la libreria 8BP son rutinas hechas en ensamblador, y se las invoca como comandos RSX. Esto significa que aparecen comandos nuevos en el BASIC, que están precedidos de la barra vertical, algo como "|PRINTSP". Atravesar la capa sintáctica lleva un tiempo, aunque la ejecución sea endiabladamente rápida.

Además de las mejoras de velocidad, en la nueva versión v18 se incluye la preview del juego annunaki, algo mas avanzado, y algo más veloz gracias a las mejoras de la librería.El listado es 100% BASIC, como debe ser. El objetivo de incluirlo no es otro que el de incluir un ejemplo que pueda orientar a programadores que se inicien en 8BP.
Ahora la velocidad de juego es mayor y la nave muestra sus cohetes de propulsión, hechos mediante una secuencia de animación que se activa al moverla hacia arriba. 

Pronto prepararé un videotutorial de como utilizar el SPEDIT para realizar sprites y como probarlos y hacer secuencias de animación. Todo esto se encuentra descrito en el manual pero siempre viene bien material audiovisual para aclarar dudas.

También haré mejoras en SPEDIT, algunas han sido sugeridas por participantes del foro de Amstrad ESP http://www.amstrad.es/forum


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