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:

8BP downloads

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 hoy en día 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
(5º gen)
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:





¿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 8 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 "SPEDIT", 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.

Aquí tienes una video introductorio a 8BP de pocos minutos de duración, donde podrás ver todo lo que puedes llegar a hacer. Este video fue presentado en Retromadrid 2018




Los comandos de 8BP

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

En el siguiente diagrama tienes la estructura de memoria de 8BP. como ves, dispondrás de 24.5KB para tu programa BASIC, y aparte tienes 8.5KB para gráficos, 1.4KB para musica y 0.5KB para el tile map (layout) y/o mapa del mundo para juegos con scroll.



Para saber un poco mas, te recomiendo una entrevista publicada en Retromaniac
http://www.retromaniac.es/2018/07/entrevistamos-jose-javier-garcia-autor.html


Otra entrevista en formato audio la puedes encontrar en la web de Amstrad.es, concretamente en
https://amstrad.es/podcast/?name=2019-02-25_podcamstrad_01x03.mp3
Tambien disponible en ivoox
https://www.ivoox.com/podcast-podcamstrad_sq_f1643704_1.html


Un análisis del juego space phantom y otra entrevista la podeis encontrar en https://www.readyandplay.com/space-phantom-amstrad-cpc/



Curso online (AUA) y videoTutoriales:

entra en la página Curso 8BP

16 comentarios:

  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
  2. Para cuando esa versión de zx ?
    Me pueden las annnsias vivass !!

    Ánimo y un saludo

    ResponderEliminar
  3. Acabo de ver esta página (tras retromadrid) y tambien estaria encantado de usar una version para el spectrum...
    Genial trabajo
    Saludos

    ResponderEliminar
  4. Hi, Where can I get a cdt version for my cpc 464?

    ResponderEliminar
    Respuestas
    1. hi filippo,

      you can use 8bp from cpc emulator such as winape. If you want to run into a real CPC, you need a .wav file. Usually, I produce wav files per each game, and you can load these wav files directly in your real CPC. Enter in https://github.com/jjaranda13/8BP and subfolder "gameExamples", then enter into "tape" and you will find them

      Eliminar
  5. Ya puestos a pedir una para MSX no estaría mal.

    ResponderEliminar
    Respuestas
    1. tomo nota. El MSX es también uno de mis ordenadores favoritos. Y posee una comunidad muy activa. Voy a pensar en ello

      Eliminar
  6. Muchas gracias por esta "herramienta", Jose Javier!

    Una pregunta:

    Creo que se pueden hacer los gráficos con el RGAS. Hay algún tutorial en video para ver como se hacen?
    Vi en tu blog como se hacían pero no lo tengo muy claro, y creo que un video estaría muy bien.

    Muchas gracias!

    ResponderEliminar
  7. Hola Toni

    Pues veras, yo uso SPEDIT para crear mis sprites, que es un editor que viene con 8BP. Es extremadamente simple de usar y esta escrito en basic, por lo que se ejecuta en el emulador del CPC. Se configura la salida de impresora del emulador hacia un fichero .txt y despues simplemente copias y pegas los sprites de ese .txt en el fichero de imágenes del juego

    No he usado RGAS, tan solo hablé con su programador para que incluyese soporte al formato de 8bp ( el cual es muy sencillo: ancho, alto y bytes del dibujo). No obstante, se de gente que lo ha usado y les gusta y es mas sofisticado y no debe ser difícil de usar.
    He buscado videotutoriales de RGAS y no he encontrado pero seguiré buscando y si encuentro uno lo pondré en la sección de enlaces.
    Tmabién haré uno nuevo de SPEDIT, que el videotutorial que hice se oye mal y esta un poco obsoleto, pues spedit también ha evolucionado junto con 8BP

    animo con tu juego! cualquier duda al programar escríbeme a jjaranda13@gmail.com y te ayudaré

    ResponderEliminar
  8. Hace poco que he encontrado 8bp y me gustaría probarla. Pero a pesar del manual, que es muy completo, no he sido capaz de entender la forma de trabajo para tener un programa que use la librería. Me explico, en el manual y videos introductorios comienzas creando la estructura de directorios. Pero enseguida ya saltas al programa en basic usando los comandos extendidos de la librería. Pero ¿cómo cargo la librería para poder usarlo en basic? Por poner un ejemplo claro, en CPCtelera (que ya he usado) pones "make" y genera el proyecto, binarios y cdt correpondiente. ¿Cómo generas el fichero final a cargar al emulador?

    ResponderEliminar
    Respuestas
    1. Hola flautines!

      te agradezco mucho tu comentario. Voy a aclarar ese punto en el manual. Lo aclarare en el capitulo 7 "tu primer juego sencillo" y en el capitulo 4 "pasos que debes dar para hacer un juego".
      la respuesta es muy sencilla: debes abrir el make_all.asm desde el winape ( con show assembler) y ensamblar ese fichero. Ese fichero ensambla la libreria, los graficos y la musica Y a partir de ese momento, tu programa en basic funcionará. Como ves no es compilar, sino ensamblar pues los graficos y la musica no se pueden compilar y la libreria es ASM, de modo que simplemente hay que ensamblarla (= cargarla en memoria) usando make_all.asm
      en el capitulo 17 lo aclaro mas en detalle pero es verdad que deberia aclarar esto ya en el capitulo 4

      un abrazo y espero que te guste 8BP!

      Eliminar
    2. Genial, muchas gracias! En cuanto tenga un rato me pongo y vuelvo con más dudas si me surgen.

      Eliminar
    3. ¡Uauh! ¡Mola mucho! de momento sólo he trasteado un poco con las demos que vienen con la librería pero definitivamente me está gustando lo que veo.

      Una sugerencia como mejora en el manual: creo que sería mejor comenzar explicando cómo cargar un ejemplo básico, (p.ej el 'demo1.bas') aprovechando que hay ya un "dsk" con la librería y varios ejemplos. Después ya empezaría con explicar cómo personalizar la librería, gráficos y músicas para realizar un juego propio.

      De este modo enseguida ves qué puede hacer la librería y tienes algo en movimiento, que es lo que un novato impaciente quiere: un resultado en pocos minutos ;-)

      Muchas gracias,
      Andrés

      Eliminar
    4. Excelente idea Andres,

      Asi lo haré. Y esta semana precisamente voy a dedicarme a eso. Modificare el manual tal y como sugieres y publicare el manual y la version v38 a la vez.

      Muchas gracias por tu sugerencia

      Eliminar
  9. Muy interesante y currado!,

    Estoy intentando hacer el maximo de cosas posibles desde el Cpc 464 directamente pero entiendo que ni la librería ni la posibilidad de ensamblar lo podré hacer desde este y tengo que tirar de emulador, verdad?

    ResponderEliminar
    Respuestas
    1. podrías ensamblar la librería con gráficos y musica y cargarla en el cpc desde cinta. Y después programarías en BASIC desde el CPC. Es decir, como mínimo necesitas cargar ese fichero binario en memoria antes de empezar a usar los comandos de 8BP en tu CPC directamente

      Eliminar