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:
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
|
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
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/
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.
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
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.
ResponderEliminarUn saludo.
Para cuando esa versión de zx ?
ResponderEliminarMe pueden las annnsias vivass !!
Ánimo y un saludo
Acabo de ver esta página (tras retromadrid) y tambien estaria encantado de usar una version para el spectrum...
ResponderEliminarGenial trabajo
Saludos
Hi, Where can I get a cdt version for my cpc 464?
ResponderEliminarhi filippo,
Eliminaryou 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
Ya puestos a pedir una para MSX no estaría mal.
ResponderEliminartomo nota. El MSX es también uno de mis ordenadores favoritos. Y posee una comunidad muy activa. Voy a pensar en ello
EliminarMuchas gracias por esta "herramienta", Jose Javier!
ResponderEliminarUna 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!
Hola Toni
ResponderEliminarPues 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é
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?
ResponderEliminarHola flautines!
Eliminarte 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!
Genial, muchas gracias! En cuanto tenga un rato me pongo y vuelvo con más dudas si me surgen.
Eliminar¡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.
EliminarUna 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
Excelente idea Andres,
EliminarAsi 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
Muy interesante y currado!,
ResponderEliminarEstoy 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?
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