Retro El reto del Spectrum: ¡Semana 6!

Henry Morrison

Doctor Please!
Supervisor
Mensajes
11.579
Reacciones
13.276
Ubicación
Miskatonick, Arkham
Como algunos sabréis, en Navidades me regalaron (¡al fin!) aquel viejo trasto de mi infancia con el que muchas noches soñaba, inconfesablemente. Un spectrum +2 con 128 kb de memoria. Y, aunque no pongo nada en el post, raro es el día en que no lo enciendo, por lo menos para cargar un juego y echar aunque sean 10 minutos de partida, o trastear con el BASIC.
Y no todo se limita al toqueteo del bicho; he leído artículos en páginas españolas e inglesas, he descargado juegos y utilidades y los voy probando... y he descargado todos los números y cintas de Microhobby que he encontrado.

Como la mayoría de los amantes del retro sabemos, estos trastos se pedían a los padres, o en su defecto a sus Majestades, los Tres Reyes Magos de Oriente, "para estudiar, aprender, y mejorar en el colegio". Y los padres nos los compraban. ¿Quien era el tonto? :lol
En cualquier caso, y aunque jugar ya me ha procurado muchísimas horas de diversión (sobre todo desde que descubrí a usar apropiadamente el comando MERGE"" y pude pasar de la primera pantalla del Army Moves).
Pero yo SÍ quiero usarlo para "aprender". Siempre quise aprender a programar en estos tratos, y a través de todos los textos, podcasts, entrevistas.. que he visto, leído y escuchado por internet, ese deseo no ha hecho más que aumentar.

Aunque en su día "toqueteé" BASIC, realizando algunas aventuras conversacionales muy simples, y alguna que otra aplicación doméstica chorra que jamás llegué a usar, nunca lo dominé en profundidad (ni mucho menos como para PROGRAMAR un juego de Spectrum). A esto hay que añadir que el BASIC que pudiera llevar el MS-DOS de un ordenador (QuickBasic era) no es el BASIC del Spectrum. Y por añadidura, que muchos de estos juegos estaban solo parcialmente programados en BASIC, o directamente, programados en Código Máquina.

El "reto" del que hablo en el título del post tiene que ver con aprender a programar en Spectrum, con aprender a programar en BASIC, sí, y después (en un futuro) aprender a programar en Código máquina. No tengo como objetivo programar un juego o programa concreto, solo alcanzar las habilidades, disciplinas y paciencia necesarias para poder hacerlo, tal y como se hacía antes.

Y cuando hablo de "programar en Spectrum" me refiero a eso precisamente; programar en el cacharro directamente; sin emuladores, sin aplicaciones que se cargan en un PC, sin más ayuda que cintas de casette para grabar los progresos, y un crucifijo para pedir a Dios que en mi casa nunca haya un corte de luz mientras programo...

Estas son las "armas" con las que cuento para llevar a cabo mi empresa:

2015-07-30%2013.41.11_zpsovsqilkw.jpg


El amado aparato, imprescindible para la tarea

2015-07-30%2013.41.25_zpsjvut1exa.jpg


El imprescindible manual de Usuario, que además de ser una lectura obligada para empezar, contiene multitud de códigos e incluso programas completos.

2015-07-30%2013.41.45_zpsqvwef5wo.jpg


Muchas como esta...

2015-07-30%2013.43.31_zpsovbway5h.jpg


TODO Microhobby

2015-07-30%2013.43.59_zps9yh52mte.jpg


El cursillo de BASIC de Microhobby, escrito por Rafael Prades, pieza ineludible de los retos; auténtica hoja de ruta, una obra maestra que contiene todo lo que necesita un aprendiz como yo para conocer los entresijos del lenguaje y la máquina. Más adelante, daremos el salto al otro gran libro: Código máquina.


Para programar, comenzaré leyendo los Microhobbys, leyendo el libro Microbasic, y copiando los pequeños juegos que las revistas incorporaban como un código que debía ser copiado, listado y ejecutado. Creo, por experiencia, que la mejor manera de aprender a programar es leyendo y escribiendo código.

El reto consistirá en intentar copiar, entender, ejecutar y depurar fallos, de forma que consiga una ejecución final completamente exitosa, de uno de los juegos de cada revista, empezando por el número 1 y hasta el final. El reto será semanal. Por lo que veo, los primeros juegos son sencillos, una o dos columnitas de código, pero conforme avanza, nos podemos encontrar perfectamente con dos páginas de revista a dos caras llenos de columnas a toda página con cientos de líneas de código, símbolos gráficos y virguerías varias. Los primeros retos es predecible que se pueden completar en dos o tres horas; los otros llevarán días, o incluso semanas de quebraderos de cabeza.

La idea es ir poniendo, semana a semana, un reto, y poco a poco ir atreviéndome a modificar los programas y a crear los míos. Cuando pueda hacer esto en BASIC con cierta confianza, me embarcaré en el reto de programar algún juego (cosas sencillas, nada de grandes ambiciones, si acaso conversacionales con dibujitos o alguno con gráficos pero muuuuy simple). Y una vez terminada esa odisea, me metería con Código Máquina.

El reto de esta semana, sacado del Nº 1 de Microhobby:

2015-07-30%2013.45.52_zps6byhhv7q.jpg


Creo que en unas horas lo habré acabado, depende de lo que pueda dedicarle, quizás mañana lo termine... colgaré un par de fotos con las primeras y últimas líneas de código, el resultado, etc. De esta forma me obligo a cierta constancia y comparto el proceso con todos los retro-chiflados :disimulo

EDITO:

INTRODUCCIÓN AL MUNDO DE LOS 8 BITS

Esta introducción es solo para gente que en su vida haya oído hablar de orenadores de 8 bits. Por lo tanto está lleno de datos que, para los habituales, serán obvios.

Lor ordenadores de 8 bits fueron las primeras computadoras domésticas que se acercaban a lo que hoy llamamos "ordenadores". Eran máquinas muy limitadas, sin un sistema operativo como hoy lo entendemos, pero a pesar de sus limitaciones, hubo algunos magos de la informática que demostraron poder sacarles un partido insospechado. No eran videoconsolas, pues una videoconsola solo te permite jugar. Los ordenadores de 8 bits te permitían jugar a videojuegos, sí, pero también programar, no solo juegos sino cualquier cosa, dentro de sus capacidades, que pudieras imaginar. Podías crear aplicaciones de gestión, del hogar, dirigidos a oficinas, y a casi todos los empleos que puedas imaginar: enseñanza / educativos, ingeniería, ventas... solo hay que pasarse por la web "World of spectrum" para ver todo lo que se hacía.

Me centro ya en el Spectrum:

-Cuando conectabas el Spectrum tenías un menú donde podías elegir el Cargador de cintas, el entorno de programación del lenguaje BASIC en 128 kb, una bonita Calculadora, o el entorno de BASIC DE 48 kB.
-La memoria RAM era de 16,48 o 128 kilobytes (el mío es el de 128). Para comparar, hoy en día un ordenador normalito tiene 3 o 4 gigabytes. Para que nos entendamos, un gigabyte tiene 1.024 megabytes. Y 1 megabyte contiene 1.025 Kilobytes. Comparad. Los ordenadores de hoy son Skynet comparados con las viejas máquinas de 8 bytes.

El ordenador no almacenaba los datos que le dabas, él no se los "quedaba". Si, por ejemplo, te pasabas toda la noche programando algo, y apagabas sin querer, o se te cortaba la luz... habías perdido, sin posibilidad de recuperarlo, todo lo hecho. En cuanto el ordenador se apagaba, todo lo que habías hecho se borraba para siempre. Para conservar esos datos, programas, o lo que fuera, se grababan en cintas de casette (sí, cintas de coche).

Para programar, como ya he dicho, te venía un entorno de BASIC donde tecleabas el código en ese lenguaje de programación. BASIC significa Beginner's All-purpose Symbolic Instruction Code. Como ventajas, era muy fácil de aprender, tenía relativamente pocos comandos, y era de propósito general (igual te servía para un roto que para un descosido; para programar un juego o para escribir un programa que te llevase la contabilidad).
A día de hoy BASIC está obsoleto, debido a sus inconvenientes: es muy leeeeeento, y su sencillez lo hace algo limitado. Es por eso que el otro gran lenguaje de programación es el Código Máquina, un código mucho menos "humano" y comprensible, más cerca de lo que el ordenador entiende.

Un ejemplo:

-Programar un mensaje que diga "Hola, Nosolohd" en lenguaje BASIC de Spectrum:

10 PRINT "Hola, Nosolohd"
run

-Programar un mensaje que diga "Hola, Nosolohd" en Código Máquina para Spectrum:

CALL SPRINT
DEFM Hello Nosolohd.
DEFB FF
RET
SPRINT POP HL
LD A,(HL)
INC HL
PUSH HL
CP FF
RET Z
CALL PRINT
JR SPRINT

Claro que, para escribir un mensaje, es mucho más fácil BASIC. Pero cuando se trata de juegos o programas con centenares de líneas de código, BASIC podría ser desesperante la ejecutarse, Código máquina es mucho más rápido y ágil, ahorra tiempo. En programas pequeños, la diferencia no vale la pena. En programas grandes, es cuando realmente se nota.

Espero haber sido claro, no soy ni mucho menos un experto, así que si alguien quiere hacer alguna corrección o añadir algo, bienvenido sea.
 
Última edición:
Yo hice un montón de juegos con mi Amstrad CPC464, pero siempre en BASIC por lo que no andaban muy finos de velocidad. Ojalá hubiese descubierto el código máquina mucho antes.
 
Recuerdo una anécdota de uno de los programadores de Dinamic, que comentaban que simplemente, hacer un bucle que llenara toda la pantalla con la misma letra repetida una y otra vez; con BASIC iba casi letra a letra, y tardaba un huevo. Con Codigo máquina, la pantalla se llenaba tan rápido que pensaba que no había llegado a salir. BASIC es imprescindible como paso previo para ir conociendo programación, pero el "premio gordo" está en c/m
 
De todas formas había trucos que aún estando en BASIC te permitían hacer cosas a toda leche, al menos en Amstrad, como por ejemplo las llamadas "CALL".

Pero si, o te ibas a código máquina o no podías hacer cosas muy complejas.
 
Seguiremos tus progresos de cerca.
Ojo con copiar los tocho listados de las revistas, a veces tenian erratas y no funcionaban despues de pasarte horas picandolos.
 
Después de leer el texto con paciencia e intentando comprender ese mundo (no, no lo he conseguido pero me he entretenido con las fotos, jejeje) he llegado a una conclusión.

Henry...

Tu lo que quieres es conseguir a Kelly Lebrock. Admítelo. Sí, sí, mucho código, mucha hoja de ruta pero lo que tú quieres es conseguir la mujer explosiva definitiva para que te rebobine las cintas de VHS sin tener que estropear el rebobinador. Que te hemos pillado, sí, sí, jejeje.

Por lo demás, tú comparte que mola mucho leerte y ver tus progresos.
 
Atreyub, no t'has enterao... ¡si para crear a Kelly LeBrock no hace falta tanto follón! ¿Que no viste la película? ¡En una noche la creas! Metes una foto de Einstein en el escáner de tu Amstrad y BRRRRRZZZZGH ya está, ELLA tiene la INTELIGENCIA de EINSTEIN. Así de fácil. Si Anthony Michael Hall pudo en una noche, yo también podría; el reto es para fines más elevados :cuniao

Por cierto,

Después de leer el texto con paciencia e intentando comprender ese mundo (no, no lo he conseguido pero me he entretenido con las fotos, jejeje) he llegado a una conclusión.

.

Eso me recuerda que pretendía escribir una introducción sobre el mundo de los ordenadores de bits y el Spectrum por si entraba alguien no afín... y ya se me ha olvidado. Mañana lo calzo, palabra!
 
Yo es que era más de la serie, claro. La peli (discúlpeme vuestra merced) la vi sólo una vez. Ya me voy al rincón a fustigarme.

El quote no pillo. Igor bueno, Igor inconsciente.
 
Ahora sí, con el quote modificado hasta yo lo pillo, jejeje.

Sí, sí, tú calza textos que me encanta leerlos.
 
AÑADIDA una pequeña introducción al mundo de los 8 bits, a nivel básico pero básico, ¿eh? :garrulo Vamos con el reto:

2015-07-30%2015.40.49_zpstdnfcxim.jpg


El código lo terminé de meter anoche. Una vez ejecutado, no me dio ningún error... raro, raro, pensé. Que mi primer reto no tenga ni un mísero fallo...

Evidentemente, fallos había. El juego no funciona. Genera un laberinto, pero el "jugador" (una arroba) se queda fuera. No puedes hacer nada, se te van descontando el tiempo hasta que el programa termina.

2015-07-30%2018.12.39_zpsgmbzcl0g.jpg


2015-07-30%2018.13.09_zpsmymyboxq.jpg


Seguramente sea un error mío al escribir el código, ya que el teclado del Spectrum tiene una sensibilidad diferente a la de los teclados de PC, y a veces se me escapa alguna letra; en cualquier caso, como ayer era tarde, lo guardé en cinta. Ahora empiezo a "depurarlo", comparar el código de la revista con el mío y buscar los errores. Ya contaré como acaba todo esto :ok
 
Pedazo proyecto, Henry almas

Una de las cosas que más me gustaban hacer con mi CPC era sentarme delante de la pantalla azul y empezar a teclear

10 CLS

y a partir de ahí cualquier cosa que se me ocurriera en ese momento. Lo mismo era un campo de estrellas en movimiento, o una pelotita botando con tiro parabólico, o pintar alguna función matemática en pantalla o un pequeño matamarcianos a base de caracteres ASCII. Siempre sabía como empezaba pero nunca sabía lo que iba a salir de ahí. Incluso hace poco me puse a implementar el fractal de Mandelbrot, por pura curiosidad de ver cuanto tardaba el Amstrad en pintarlo. Y es que programar el BASIC de un micro de ocho bits es algo tremendamente relajante y edificante.

Lo que si creo es que el BASIC y el código máquina son cosas tan diferentes que se pueden abordar a la vez sin problemas, sobre todo teniendo ya una base en programación. Así puedes ver enseguida las diferencias entre uno y uno, tanto en la manera de hacer las cosas como en el tiempo de ejecución.

PD: la MicroHobby es cojonuda como obra de consulta. Recuerdo que alrededor del número 100 hay una serie de artículos sobre como programar un videojuego de plataformas (que llamaron "Cómeme") enteramente en ensamblador. Hace casi 20 años, cuando empezaba la facultad, me empapé de esos artículos y estuve portando ese juego al ensamblador de los x86. ¡Esa revista es una maravilla incluso aunque no tengas un Spectrum!
 
Programar en 8 bits siempre ha sido algo fascinante... y potencialmente fascinante para los críos. Yo me lo pasaba pìpa haciendo combinaciones de border, paper, ink, bright, flash... jugando con el draw y el plot, el beep... solo ahora de adulto valoro lo que suponía programar DE VERDAD ahí, y el logro técnico que resulta de meter algo como "La abadía del crimen" en 128 kb, o (aún más mérito) juegos como Sentinel, Castle Master o Lords of Midnight en 48 Kb.

Y sí, Microhobby es algo tan... fruto de otro tiempo. Una revista dirigida para niños / adolescentes que se "atreve" a meterles a estos todo tipo de conceptos, ideas y acercamientos a cosas realmente complejas; la mejor academia de informática que hemos tenido en España, yo diría que es Microhobby.
 
Estoy disfrutando como un enano leyéndoos. En mis tiempos yo programé mis cosillas en un Commodore 64. Ya que su Basic era tremendamente austero en posibilidades gráficas tuve que comprar un Basic nuevo. Se llamaba "Simon's Basic" y ampliaba los comandos que podías introducir..


Eso si, en las revistas nada de Simon's y todo a base de Pokes
 
Estoy disfrutando como un enano leyéndoos. En mis tiempos yo programé mis cosillas en un Commodore 64. Ya que su Basic era tremendamente austero en posibilidades gráficas tuve que comprar un Basic nuevo. Se llamaba "Simon's Basic" y ampliaba los comandos que podías introducir..


Eso si, en las revistas nada de Simon's y todo a base de Pokes

El BASIC tenía el Draw y Plot (y circle, siempre se me olvida circle), que eran bien majos pero en fin, limitadillos. No conocía yo eso de Simon, interesante :ok A pesar de todo, con el BASIC se podían hacer algunas figuras bastante apañadas.



Fascinante, en serio.

¿Qué se supone que tenías que hacer en el juego, Henry?

Pues después de una horita, el juego ya está arreglado y funciona sin mayores problemas :birra La mayoría de los errores eran errores de "tecleo", oes en vez de ceros, alguna variable mal escrita.. nada importante. En total, 4 errores de "Variable no definida". Mañana pondré algunas fotos.

El juego consiste en manejar, con el teclado, a una arroba (@) que tiene que comerse a los asteriscos disueltos por el escenario. Cuantas más comes, mas puntuas. Tienes un tiempo limitado antes de que el juego acaba. La arroba solo puede pasar por las líneas azules, si "pisa" una verde, la partida acaba. Lo curioso es que, si veis la foto que he puesto, cuando estaba sin corregir, TOOODOS los asteriscos estaban sobre "calles verdes" con lo que el juego era literalmente, imposible :mparto

Más preocupante es que, al final, cuando la partida acaba y te pregunta si quieres jugar más o salir, se me ha quedado colgado :? Estaba el puntero negro cuadrado con una L dentro, que sale cuando usas Input para pedirle algo al usuario, pero por más que le daba a S, me salía un signo de interrogación. Y no había forma de salir y volver al código (ni siquiera con Break). ¿A alguien le ha pasado? Suerte que el juego ya corregido estaba guardado en cinta, lo he vuelto a cargar y no lo ha hecho :fiu

Mañana pondré algunas fotos del juego final, y miraré de elegir reto para la semana que viene :atope
 
Terminado el primer reto! :birra:birra:birra Aquí tenéis las últimas líneas del código y mi puntuación obtenida, que dicho sea de paso, es muy mala :garrulo

2015-08-02%2009.56.56_zpszbjnignv.jpg


2015-08-02%2009.56.03_zpsrnbm7yfu.jpg


No solo de copiar código se vive, sino de estudiarlo. En este caso, el juego tiene una manera inteligentísima de generar el laberinto de asteriscos; no utiliza la combinación PLOT y DRAW, sino el PRINT AT, usando una de las notas gráficas repetidas mediante ciclos for para generarlo; muy ingenioso :ok
Otra cosa que he aprendido es como asignar teclas del movimiento al "jugador" (en este caso, la arroba @) no se utilizan sino unas instrucciones de IF INKEY$ "tecla tal" tiene tal valor , THEN... mueve la posición.

El siguiente Reto semanal es un programa (también de la Microhobby, número 1) un programa sencillito de tres columnas de código, para calcuar Bio-ritmos.

2015-08-02%2010.06.12_zpsjotmba82.jpg


Tengo de plazo hasta el domingo que viene, me da tiempo a echar unas partidas al Batman :babas:babas:babas
 
Ah, el Spectrum, ¡best computer ever!

Nunca llegué a hacer nada en programación más allá de copiar algunos de los míticos listados de la Microhobby o la Micromanía. A mí lo que me fascinaba era el tema gráfico y artístico de la máquina. Hice varias pantallas, me presenté al concurso de Microhobby "píxel a píxel", pero sólo pude ser cuarto :llanto. Incluso llegué a diseñar un set gráfico animado prácticamente completo de un hipotético juego que sólo existía en mi cabeza :cuniao. Tiene gracia porque dibujar siempre se me ha dado fatal, pero se me daba especialmente bien adaptar (copiar) imágenes o posters a la baja resolución del Spectrum, jugando con la limitación de la mezcla de sus ocho colores. Todo ello, salvo alguna pantalla, perdido en los pigmentos ferrosos de esas cintas del diablo :mutriste.

Es admirable tu iniciativa Henry, seguiremos tus progresos por aquí.
 
Ostras... yo tenía un colega que era un auténtico crack-catacrack en el spectrum. Habitualmente programaba en ensamblador (ya ni en código máquina). La "proeza" más bestia que llegué a verle fue crear un programa al que le ponías una cinta de audio, la digitalizaba y luego la repetía y hacía sonar. Eso si, dada su limitadísima memoria sólo repetía algo más de un segundo de música. Ridículo hoy en día pero en su tiempo parecía magia negra.

Edito para añadir que un año y pico después de que me enseñara el programa alguna revista lo publicó y regaló en cinta de casette (no el mismo programa, no era el suyo sino otro que hacía básicamente lo mismo)
 
Mi amor por el Spectrum empezó con los gráficos, Gika... con un pequeño ejercicio que fue el flechazo. yo tenía 5 años, y mi hermano 9, y se lo regalaron por su comunión. Nunca olvidaré aquel día, abriendo la caja, instalándolo, sintonizándo el canal... el concepto de "TENER un ordenador EN CASA" era completamente nuevo, yo era pequeño y no etendía qué era eso, ni porqué mi hermano tenía aquella cara de ilusión. Se puso a trastearlo, y al rato me dijo, "Mira, escribe esto". Y me apuntó este código:

10 CLS
20 PLOT 60,60
30 DRAW 90,90,4000

No os voy a decir lo que hace (buscar un emulador y probadlo si sentís curiosidad :juas) pero para mí fue un flechazo ver aparecer AQUELLO en la pantalla. Yo no entendía nada, solo que le había "dicho" algo a la máquina, y la máquina había "hecho magia".

Nunca perdí la esperanza de tener mi propio Spectrum, pero para mi comunión, a pesar de que lo pedí, obtuve una Mega Drive, que era la novedad en el mercado, supongo que el ZX ya iba de capa caída :mutriste Entonces mis esperanzas se centraron en heredar el de mi hermano, que apenas lo usaba, pero al final lo vendió para comprarse un Apple IIGS del que se había encaprichado, y que debió costarle una PASTA, no sé si se lo hizo traer de otro país, pero se gastó toda la pasta ahorrada trabajando un verano entero en una tienda SAT de teles y vídeos, aparte algo de pasta que le dieron mis padres, y como no llegaba... vendió el Spectrum. Huelga decir que yo no me enteré, si me hubiera enterado, me habría opuesto con uñas y dientes :doh


Ostras... yo tenía un colega que era un auténtico crack-catacrack en el spectrum. Habitualmente programaba en ensamblador (ya ni en código máquina).

Eso me ha recordado, que, la verdad, no tengo muy claro qué diferencia hay entre Ensamblador y codigo máquina... yo siempre he creido que ensamblador son instrucciones en un lenguaje "mas o menos humano" y C/ m, Unos y Ceros. Concretamente hablando de Spectrum, supongo que las instrucciones en c/ m se meterán en el IDE del BASIC, ¿no? Porque vamos, el ordenador no tiene más :roto2

La verdad es que tengo unas ganas locas de coger entre manos el libro de código maquina de Microhoby, es el verdadero "RETO" pero antes tengo que refrescar mis conocimientos BASICeros :hola
 
Yo con 10 años enseñaba Basic a mis profesores de informática, con 11 programaba el spectrum en código máquina (201=ret) :juas Mi primer y único ordenador personal, aún lo guardo por supuesto

Ensamblador era un lenguaje un poco "inteligible" para meter los códigos que hacían moverse a la máquina. Si querías animar sprites con cierta velocidad, mezclando los pixels del sprite con el fondo y además sincronizarlo con la llamada de pintar la pantalla para que no haya parpadeo (como un vertical Sync) tenías que ir a ensamblador. De hecho podías empezar a pokear las rutinas de pintado del sprite y llamarlas desde el Basic

Si te interesa están las input sinclair por ahi escaneadas para darte ideas
 
Arriba Pie