8BP

En esta pagina se incluye información de diseño de la libreria 8BP. Puedes descargar la librería y el manual "8 bits de poder en tu Amstrad CPC" libremente desde github. Si no estas acostumbrado a usar github, te lo pondré fácil: Entras en https://github.com/jjaranda13/8BP y pulsas el botón de "download zip". Y ya puedes empezar a programar tus juegos en BASIC con calidad profesional!

A los usuarios de ZX spectrum os diré que en un futuro tengo pensado sacar una versión de la librería  8BP para ZX. El manual obviamente se titulará "8 bits de poder en tu zx spectrum"


¿Por qué programar en 2016 una máquina de 1984?

Porque las limitaciones no son un problema sino una fuente de inspiración.
Las limitaciones, ya sean de una maquina o de un ser humano, o en general de cualquier recurso disponible estimulan nuestra imaginación para poder superarlas. El AMSTRAD, una maquina de 1984 basada en el microprocesador Z80, posee una reducida memoria (64KB) y una reducida capacidad de procesamiento, aunque sólo si lo comparamos con los ordenadores actuales. Esta máquina es en realidad un millón de veces más rápida que la que construyó Alan Turing para descifrar los mensajes de la maquina enigma en 1944
Como todos los ordenadores de los años 80, el AMSTRAD CPC arrancaba en menos de un segundo, con el intérprete BASIC dispuesto a recibir comandos de usuario, siendo el BASIC el lenguaje con el que los programadores aprendían y hacían sus primeros desarrollos. El BASIC del AMSTRAD era particularmente rápido en comparación al de sus competidores. Y estéticamente muy atractivo!



En cuanto al microprocesador Z80 ni siquiera es capaz de multiplicar (en BASIC puedes multiplicar pero eso se basa en un programa interno que implementa la multiplicación mediante sumas o desplazamientos de registros), tan solo puede hacer sumas, restas y operaciones lógicas. A pesar de ello era la mejor CPU de 8 bit y tan sólo constaba de 8500 transistores, a diferencia de otros procesadores como el M68000 cuyo nombre precisamente le viene de tener 68000 transistores.


CPU
Numero de transistores
MIPS (millones de instrucciones por segundo)
Ordenadores y consolas que lo incorporan
6502
3.500
0.43 @1Mhz
COMMODORE 64, NES, ATARI 800...
Z80
8.500
0.58 @4Mhz 
AMSTRAD, COLECOVISION, SPECTRUM, MSX...
Motorola 68000
68.000

2.188 @ 12.5 Mhz
AMIGA, SINCLAIR QL, ATARI ST...
Intel 386DX
275.000
2.1 @16Mhz
PC
Intel 486DX
1.180.000
11 @ 33 Mhz
PC
Pentium
3.100.000
188 @ 100Mhz
PC
ARM1176

4744 @ 1Ghz (1186 por core)
Raspberry pi 2, nintendo 3DS, samsung galaxy,…
Intel i7
2.600.000.000
238310 @ 3Ghz (casi 500.000 veces mas rápido que un Z80 !)
PC

Ello hace que programarlo sea extremadamente interesante y estimulante para lograr resultados satisfactorios. Toda nuestra programación debe ir orientada a reducir complejidad computacional espacial (memoria) y temporal (operaciones), obligándonos a inventar trucos, artimañas, algoritmos, etc, y haciendo de la programación una aventura apasionante. Es por ello, que la programación de máquinas de baja capacidad de procesamiento es un concepto atemporal , no sujeto a modas ni condicionado por la evolución de la tecnología. 

8BP ("8 bits de poder") es una libreria desarrollada en ensamblador, que instala comandos nuevos en tu Amstrad para ser usados desde BASIC. Su potencia es tal, que podrás realizar juegos con acabado profesional en BASIC.

Para aprender existe un libro, en formato pdf que puedes descargar , al igual que la libreria y ejemplos de juegos.todo lo puedes encontrar en el proyecto GitHub “8BP”, en esta URL:



Jose Javier Garcia Aranda, 2016.

¿Qué es 8BP?

La librería 8BP no es un “motor de juegos”. Es algo intermedio entre una simple extensión de comandos BASIC y un motor de juegos.
Los motores de juegos como el game maker, el AGD (arcade game designer), el unity, y muchos otros, limitan en cierta medida la imaginación del programador, obligándole a usar unas determinadas estructuras, a programar en lenguaje limitado de script la lógica de un enemigo, a definir y enlazar pantallas de juego, etc

La librería 8BP es diferente. Es una librería capaz de ejecutar deprisa aquello que el BASIC no puede hacer. Cosas como imprimir sprites a toda velocidad, o mover bancos de estrellas por la pantalla, son cosas que el BASIC no puede hacer y 8BP lo consigue. Y solo ocupa 6 KB !


BASIC es un lenguaje interpretado. Eso significa que cada vez que el ordenador ejecuta una línea de programa debe primero verificar que se trata de un comando válido, comparando la cadena de caracteres del comando con todas las cadenas de comandos validos. A continuación debe validar sintácticamente la expresión, los parámetros del comando e incluso los rangos permitidos para los valores de dichos parámetros. Además los parámetros los lee en formato texto (ASCII) y debe convertirlos a datos numéricos. Finalizada toda esta labor, procede con la ejecución. Pues bien, toda esa labor que se realiza en cada instrucción es la que diferencia un programa compilado de un programa interpretado como los escritos en BASIC.

Dotando al BASIC de los comandos proporcionados por 8BP, es posible hacer juegos de calidad profesional, ya que la lógica del juego que programes puede ejecutarse en BASIC mientras que las operaciones intensivas en el uso de CPU como imprimir en pantalla o detectar colisiones entre sprites, etc son llevadas a cabo en código máquina por la librería.

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.

Sin embargo, no todo es facilidad y ausencia de problemas. Aunque la librería 8BP te va a proporcionar funciones muy útiles en videojuegos, deberás usarla con cautela pues cada comando que invoques atravesará la capa de análisis sintáctico del BASIC, antes de llegar al inframundo del código máquina donde se encuentra la función, por lo que el rendimiento nunca será el óptimo. Deberás ser astuto y ahorrar instrucciones, medir los tiempos de ejecución de instrucciones y trozos de tu programa y pensar estrategias para ahorrar tiempo de ejecución. Toda una aventura de ingenio y diversión. Aquí aprenderás como hacerlo e incluso te presentaré una técnica a la que he llamado “lógicas masivas” que te permitirá acelerar tus juegos a límites que quizás considerabas imposibles.

Además de la librería, tienes a tu disposición un sencillo pero completo editor de sprites y gráficos y una serie de herramientas magníficas que te permitirán disfrutar en el siglo XXI de la aventura de programar un microordenador.


Los comandos de 8BP

Aquí tienes un resumen de todos los comandos proporcionados por 8BP, con los que se puede hacer casi todo: sprites, animaciones, detecciones de colisión, mapas de "tiles", scroll multidireccional, enrutamiento de sprites a través de trayectorias, impresión con sobreescritura, música, movimientos de estrellas, etc









1 comentario:

  1. Un grandísimo trabajo, he leído gran parte del manual que te has currado y se agradece mucho una primera toma de contacto para los que no sabemos. Muchísimas gracias por el esfuerzo, es una gran librería.

    Un saludo.

    ResponderEliminar