Empezando con código máquina

Todo sobre la creación, diseño y programación de nuevo software para
nuestro Spectrum

Moderador: Sir Cilve Sinclair

Empezando con código máquina

Notapor Jake Speed el Lun Oct 17, 2016 2:32 pm

Hola a todos, compañeros. Desde hace mucho, mucho tiempo, sueño con programar un juego para Spectrum :D

Después de mucho pensarlo, tomé varias decisiones. La primera, que el BASIC iba a ser, casi seguro, muy lento e insuficiente para la aventurilla que planeaba en mi cabeza. Así que tomaría la decisión de programarlo en código máquina, concretamente en Ensamblador si era posible. No tengo mucha idea de cómo se programaba en Ensamblador, pero todo es aprender.

La segunda y radical decisión que tomé fue que iba a programarlo en el Spectrum 128k +2B que tengo desde hace tiempo. Es decir, programar directamente sobre la máquina original, como se hacía antiguamente, sin emuladores, sin intermediarios que pasen por un PC, grabando y cargando los progresos desde cinta magnética, y finalmente pasando el programa final a tzx para distribuirlo.

Esto conlleva un problema lógico, pues muchos cursos y tutoriales (por no decir todos) que actualmente explican cómo programar juegos de Spectrum, se basan en emuladores, como PASMO, que a veces pueden incluir formas diferentes de hacer las cosas, rutinas y funciones nuevas que no creo que funcionaran en un Ensamblador antiguo que corriese sobre la máquina "original". De momento, mis fuentes de aprendizaje son estas:

Imagen


Imagen

El curso para Microhobby me parece que es excelente para convertirte en un Programador, con mayúsculas, pero quizás es demasiado técnico, denso o avanzado para alguien que, con muchas menos pretensiones, solo pretende hacer unos juegos en su máquina de la infancia. El otro libro es excelente en ese sentido, ya que lo explica TODO de cero, en un lenguaje asequible, y recurriendo muchas veces a ejemplos, metáforas... que te facilitan visualizar y comprender.

En fin... usaré para programar el Ensamblador GENS que incluía el Devpack de Hisoft. Ya lo cargué ayer, conseguido de WOS, en mi Spectum, y lo lancé, metiéndole varias rutinas de ejemplo copiadas, por ejemplo, el scroll lateral que incluía al principio el curso de Microhobby. El ensamblador es completísimo e intuitivo, y no he tenido demasiados problemas por ahí.
Me he ido familiarizando con la forma de cargar rutinas en direcciones de memoria y luego "llamar" las rutinas a esas direcciones con randimize usr, aunque aún me queda mucho por aprender acerca de la gestión de memoria, pero con muchas ganas e ilusión.
He ojeado el manual del Spectrum, e incluye un capítulo sobre ello, aunque lo que no he visto (quizás está, con otro nombre) es el "mapa de memoria", creo que es esencial para empezar en esto.

En fin, abro hilo para los que ya tenéis experiencia podáis aconsejarme algo, nuevos libros o tutoriales, rutinas útiles para practicar, consejos de veterano... tengo claro que el juego que realmente me ilusiona hacer (una especie de aventura gráfica primitiva) me llevará mucho tiempo, por lo que he decidido limitarme a programarlo "sobre el papel", y antes de tocar una tecla pienso programar juegos más sencillos para ir asimilando habilidades, en fin, juegos tipo 3 en raya o ahorcado, para estar bien seguro de que cuando empiece a programar realmente lo que quiero, ya voy con una mínima base.

Espero que alguien por aquí pueda compartir esta gran pasión :wink:
Jake Speed
rst 0
 
Mensajes: 13
Registrado: Mar Ene 21, 2014 6:04 pm

Re: Empezando con código máquina

Notapor JBGV el Lun Oct 17, 2016 10:42 pm

Hola !

Para empezar con código máquina te recomiendo el curso de compiler de está pagina y el de Jonathan Cauldwell

https://wiki.speccy.org/cursos/ensamblador/indice

http://old8bits.blogspot.com.es/2016/04/como-escribir-juegos-para-el-zx_12.html

Mucho ánimo! :D
Avatar de Usuario
JBGV
Manic Miner
 
Mensajes: 270
Registrado: Vie Feb 11, 2011 10:16 am

Re: Empezando con código máquina

Notapor jzx el Mar Oct 18, 2016 7:11 pm

Animo y poco a poco, el ensamblador no es fácil, pero la idea de empezar en papel es buena. Y grabar a menudo.

El mapa de memoria creo que venía en todos los manuales, pero hay zonas que pueden cambiar de tamaño, y tienes que mirar en las variables de sistema dónde están. Ten en cuenta además que los libros que usas hablarán del gomas, si vas a programar en el 128, hay algunas variables de sistema y zonas como el buffer de impresora que hay que respetar (por lo menos mientras haces pruebas y quieres volver al basic). Para probar los ejemplos de esos libros tenlo en cuenta o pasa a modo 48 K.
jzx
Freddy Hardest
 
Mensajes: 926
Registrado: Lun Feb 08, 2010 9:19 pm

Re: Empezando con código máquina

Notapor Jake Speed el Mar Oct 18, 2016 11:00 pm

¡Muchas gracias a los dos! Tomo nota tanto de cursos como de consejos :wink:

Una duda que me surge, aprovecho para ponerla aquí: el símbolo de la libra. Este, vamos "£"

Ya hace tiempo que en un programa de Microhobby me lo pedía, y no lo encontré. Ahora me ha pasado lo mismo, y buscando, he encontrado su equivalencia ASCII para Spectrum: CHR$ 96.

Me voy a mi spectrum +2B y tecleo "10 PRINT CHR& 96" y adivináis lo que aparece? Pues "Pt" que quizá me equivoque, pero es un diminutivo de "Peseta" :lol:
Me ha picado tanto el gusanillo que me bajado un emulador de Spectrum, el Basin, y allí al teclear la misma línea de código, me da un bonito símbolo de libra :shock: ¿Alguien se encontró alguna vez con este problema ( lo pudo solucionar??)?
Jake Speed
rst 0
 
Mensajes: 13
Registrado: Mar Ene 21, 2014 6:04 pm

Re: Empezando con código máquina

Notapor OptimusZX el Mie Oct 19, 2016 10:45 am

Hay ando yo también, llevo tiempo tambien queriendo hacer mi propio juego, y esos libros de lenguaje maquina son los que estoy leyendo y me están sirviendo de base.

Un saludo y gracias.
Avatar de Usuario
OptimusZX
Herbert
 
Mensajes: 84
Registrado: Jue Sep 24, 2009 11:10 pm
Ubicación: Sevilla

Re: Empezando con código máquina

Notapor jzx el Mie Oct 19, 2016 2:06 pm

Jake Speed escribió:Me voy a mi spectrum +2B y tecleo "10 PRINT CHR& 96" y adivináis lo que aparece? Pues "Pt" que quizá me equivoque, pero es un diminutivo de "Peseta" :lol:


Cosas de la "españolización" de la rom. En el emulador puedes poner la rom que corresponda a tu spectrum si quieres que sean iguales. De todas formas, ni la peseta ni la libra están en el ASCII oficial, sólo el dolar, que por cierto en tu post también se ha convertido en algo raro (CHR&).

En cuanto a lo de los programas de revistas, depende de para qué usen el simbolo. Si es una línea del estilo A=CODE "£", tendrás que poner "Pt", pero si lo que quieres es que salga en pantalla la libra, tendrás que hacer un UDG.
jzx
Freddy Hardest
 
Mensajes: 926
Registrado: Lun Feb 08, 2010 9:19 pm

Re: Empezando con código máquina

Notapor Jake Speed el Mie Oct 19, 2016 3:09 pm

Es CHR$ no CHR&, cosas de mi teclado, a veces me armo unos líos buscando los símbolos en teclado PC... estoy muy acostumbrado a escribir en el teclado del Spectrum y luego en el ordenador no acierto ni una :D

Respecto al tema de la libra, no recuerdo qué revista o qué número era, pero sí recuerdo que aparece en un programa BASIC que te da el libro "Codigo máquina spectrum ZX para principiantes", página 150, línea 130, y el símbolo está entre paréntesis, en una línea de código correspondiente a una función define (s$ > "£") no sé si será imprescindible que aparezca como tal, pero me llamó poderosamente la atención.

Por cierto, sé que en emuladores la ROM se puede intercambiar e incluso "toquetear" un poco, pero, ¿directamente en la máquina se puede hacer también, y cambiar cosas?

En fin, me alegra ver que aún quedamos unos cuantos locos con ganas de hacer cosas :wink: yo tengo claro que una vez aprenda ensamblador suficiente (soy consciente de que puede tardar mucho) haré juegos sencillos, tipo ahorcado, tres en raya... luego, uno de naves... luego, me gustaría ya un arcade...
Jake Speed
rst 0
 
Mensajes: 13
Registrado: Mar Ene 21, 2014 6:04 pm

Re: Empezando con código máquina

Notapor jzx el Mie Oct 19, 2016 8:48 pm

Jake Speed escribió:Es CHR$ no CHR&

No, si era evidente que tenía que ser un $. Lo decía porque en PC a veces también hay cambios de unos carácteres por otros según el idioma configurado, aunque el $ debería salir siempre en el mismo sitio. Luego inventaron el unicode.


Jake Speed escribió:Respecto al tema de la libra, no recuerdo qué revista o qué número era, pero sí recuerdo que aparece en un programa BASIC que te da el libro "Codigo máquina spectrum ZX para principiantes", página 150, línea 130, y el símbolo está entre paréntesis, en una línea de código correspondiente a una función define (s$ > "£") no sé si será imprescindible que aparezca como tal, pero me llamó poderosamente la atención.


Habría que seguir el programa, pero seguramente será simplemente el caracter que vaya a aparecer en algún sitio. Supongo que s$ definirá una cadena, como DEFS en otros ensambladores. (el programa trata de dinero?).

Lo del ejemplo que te puse con CODE es algo que se usa en basic a veces para ahorrar memoria, pero como programación es bastante chapucero y poco claro. Puede haber algún caso en que sí sea correcto hacerlo, por ejemplo a$=a$+CHR$(CODE "a" +n), pero seguramente lo verás por lo del ahorro de memoria, que es una idea cogida del ZX81.

Jake Speed escribió:Por cierto, sé que en emuladores la ROM se puede intercambiar e incluso "toquetear" un poco, pero, ¿directamente en la máquina se puede hacer también, y cambiar cosas?


Sí, con destornillador, soldador, un grabador de eproms. ... :mrgreen: . También puedes usar una eprom externa, el pokeador de Microhobby, o con un 128 de Amstrad lo podrías hacer totalmente por software con el modo allram, aunque sólo en modo 48 k.


Jake Speed escribió:haré juegos sencillos, tipo ahorcado, tres en raya... luego, uno de naves... luego, me gustaría ya un arcade...


Una posibilidad para empezar, que ya te lo dirán en los libros, es hacer programas en basic pero con rutinas críticas en CM, es decir la estructura del programa en basic pero lo que más le cuesta al basic en CM, por ejemplo números grandes, scroll, sprites y cosas así. De esa forma en vez de un programa grande haces varios programas, las rutinas, más cortos e independientes y los puedes ir probando poco a poco. Por ejemplo en el del ahorcado, la entrada de texto, comprobación de las cadenas pueden ir en basic, y hacer unas animaciones del muñeco y letras grandes en CM.
jzx
Freddy Hardest
 
Mensajes: 926
Registrado: Lun Feb 08, 2010 9:19 pm

Re: Empezando con código máquina

Notapor radastan el Jue Oct 20, 2016 10:21 am

Pues yo te voy a recomendar mi curso por una razón: es el más sencillo de todos para introducirte (flores, flores, flores).

http://www.bytemaniacos.com/ficheros/curso_asm/curso_asm_1.pdf

No es completo, pero si perfecto para quitarte el miedo y coger los conceptos básicos. Luego vete al de Compiler, que es una puñetera genialidad:

https://wiki.speccy.org/cursos/ensamblador/indice

y ya estarás listo para dar caña.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________
Avatar de Usuario
radastan
Phantomas
 
Mensajes: 2121
Registrado: Lun May 07, 2007 5:34 pm

Re: Empezando con código máquina

Notapor Jake Speed el Jue Oct 20, 2016 10:48 am

Habría que seguir el programa, pero seguramente será simplemente el caracter que vaya a aparecer en algún sitio. Supongo que s$ definirá una cadena, como DEFS en otros ensambladores. (el programa trata de dinero?).


No, se supone que es un programa para crear tu propio "IDE" para escribir en ensamblador en el Spectrum. Es un programa bastante largo... el libro lleva otro programa que creo, es una especie de cargador de código hexadecimal.

Sí, con destornillador, soldador, un grabador de eproms. ... :mrgreen: . También puedes usar una eprom externa, el pokeador de Microhobby, o con un 128 de Amstrad lo podrías hacer totalmente por software con el modo allram, aunque sólo en modo 48 k.



Pues, casualidad, en tu mensaje has dicho todo :mrgreen: sí, tengo un +2B de 128k, y precisamente la cosa que siempre quise toquetear de la ROM, incluso cuando era adolescente (y han pasado 15 años) es cambiar eso de "© Amstrad" por "© Sinclair Research Ltd" :twisted:

Una posibilidad para empezar, que ya te lo dirán en los libros, es hacer programas en basic pero con rutinas críticas en CM, es decir la estructura del programa en basic pero lo que más le cuesta al basic en CM, por ejemplo números grandes, scroll, sprites y cosas así. De esa forma en vez de un programa grande haces varios programas, las rutinas, más cortos e independientes y los puedes ir probando poco a poco. Por ejemplo en el del ahorcado, la entrada de texto, comprobación de las cadenas pueden ir en basic, y hacer unas animaciones del muñeco y letras grandes en CM.


Sí algo de eso sé, en los programas de Microhobby que solían incluir Randomize usr a veces te explicaban que era un programa "código máquina". En el curso de C/M de Microhobby te dan un ejercicio de scroll lateral y tienes tanto el código en Ensamblador como en BASIC. Yo lo tecleé en Ensamblador (por las ganas que tenía de probarlo) y me fue bien, incluyéndolo luego en un programa BASIC que dibujaba un triángulo y lo movía por todo el scroll.

Pues yo te voy a recomendar mi curso por una razón: es el más sencillo de todos para introducirte (flores, flores, flores).

http://www.bytemaniacos.com/ficheros/cu ... _asm_1.pdf

No es completo, pero si perfecto para quitarte el miedo y coger los conceptos básicos. Luego vete al de Compiler, que es una puñetera genialidad:

https://wiki.speccy.org/cursos/ensamblador/indice

y ya estarás listo para dar caña.


:lol: Muchas gracias! El curso de wiki speccy ya lo había visto, pero en principio lo descarté (salvo la teoría) porque no sabía si los ejemplos de ASM que contenían, hechos en el emulador PASMO, funcionarían en el Spectrum "real" con un ensamblador de 1991. Si me decís que sí, tiro para adelante, me pareció muy interesante. Respecto a tu curso, me parece muy interesante como introducción al tema de programar juegos, pero espero que algún día hagas una segunda parte si no la hay! :wink: Seguro que sabe a poco. Me encanta que lleve ejemplos prácticos, aunque sean cortitos. En mi opinión, no se aprende a programar tanto leyendo como tecleando, aunque la base teórica sea imprescindible también.
Jake Speed
rst 0
 
Mensajes: 13
Registrado: Mar Ene 21, 2014 6:04 pm

Re: Empezando con código máquina

Notapor jzx el Jue Oct 20, 2016 7:04 pm

Jake Speed escribió:No, se supone que es un programa para crear tu propio "IDE" para escribir en ensamblador en el Spectrum. Es un programa bastante largo... el libro lleva otro programa que creo, es una especie de cargador de código hexadecimal.


Siendo un programa en un libro para aprender ensamblador, lo debería de explicar en algún comentario ... Por cierto, pon tú también comentarios :D .


Jake Speed escribió:Pues, casualidad, en tu mensaje has dicho todo :mrgreen: sí, tengo un +2B de 128k, y precisamente la cosa que siempre quise toquetear de la ROM, incluso cuando era adolescente (y han pasado 15 años) es cambiar eso de "© Amstrad" por "© Sinclair Research Ltd" :twisted:


Bueno, ten en cuenta que lo del modo allram no sería realmente modificar la rom, sino sustituirla por otra (cargada de cassette o lo que sea) en una página de ram colocada en la dirección 0. Lo que no se puede es protegerla conta escritura. (Si mal no recuerdo, la rom original tiene una pega que en ciertos casos escribe sobre sí misma, que siendo rom no pasa nada, pero si es ram sí. Había un parche para corregirlo).
Si te animas puedes intentarlo, tendrías que mirar cómo funciona la paginación.
jzx
Freddy Hardest
 
Mensajes: 926
Registrado: Lun Feb 08, 2010 9:19 pm

Re: Empezando con código máquina

Notapor Jake Speed el Sab Oct 22, 2016 1:12 pm

Si te animas puedes intentarlo, tendrías que mirar cómo funciona la paginación.


(De momento) aún no me atrevo a toquetear tanto, pero en el futuro, seguro :D

Bueno, un par de dudillas más, que veo que sabéis de que va el tema :wink:

-Me interesa pasar algunos archivos .tzx o .tap a cinta magnética. Más o menos al revés de lo que suele hacerse. Sobre todo porque el sistema que uso para cargar en mi Spectrum dichos archivos (una cinta magnética falsa, conectada al móvil, y una aplicación, TapDancer) me falla bastante, pero cargar cintas de verdad, aún no me ha fallado. pasé un tzx a formato de audio wav, y he intentado grabarlo a cinta (con un cable de dos cabezales de audio, uno en el PC y otro en un radiocasette con una cinta grabando) pero no ha funcionado. ¿Quizás .wav no es el formato adecuado? ¿En qué formato estaban los audios de cintas magnéticas? :shock:

-EL tema del sonido en los juegos. ¿Existe alguna aplicación que permita pasar un fragmento de audio en algún formato, a líneas de código "BEEP" en BASIC, o algo similar? Porque si no, para crear sonidos decentes o melodías había que tener conocimientos de música, que no es mi caso :P

-Y ya por último, los sprites. Me fascinan, y entiendo el concepto en un emulador de ZX, donde tienes editores de gráficos que te permiten hacer virguerías, pero, ¿como se hacían los sprites, o monigotes, en Spectrum? ¿En BASIC, C/M, o ambas cosas?

Un saludo :D
Jake Speed
rst 0
 
Mensajes: 13
Registrado: Mar Ene 21, 2014 6:04 pm

Re: Empezando con código máquina

Notapor jzx el Lun Oct 24, 2016 2:44 pm

Jake Speed escribió:¿En qué formato estaban los audios de cintas magnéticas? :shock:


En analógico estilo años 60. :lol: :lol: :lol:

qué salida del pc has usado?. Intenta usar la de línea, la azul, que todavía puede ser un poco excesiva para una entrada de micro del cassette. Si el cassete tiene entrada de línea, úsala.
Intenta grabar música del pc al cassette (cuando no esté mirando la Innombrable :roll: ), a ver si se graba bien o con distorsión, ajusta los niveles si hace falta. En principio el wav es correcto, lo que no vale es mp3 o parecidos que tienen compresión con pérdidas, porque las pérdidas están diseñadas para que no se noten por las personas en música, no para este tipo de señales.
Jake Speed escribió: ¿Existe alguna aplicación que permita pasar un fragmento de audio en algún formato, a líneas de código "BEEP" en BASIC, o algo similar? Porque si no, para crear sonidos decentes o melodías había que tener conocimientos de música, que no es mi caso


Ten en cuenta que el azimuth del cassette será distinto que el del cassette de spectrum, por tanto es posible que tengas que ajustarlo. Si vas a grabar cintas para guardarlas, lo suyo sería ajustar el radiocassette al azimuth "oficial" con una cinta comercial, y luego el cassete del spectrum también con una cinta "oficial", que sea de buena calidad.

Creo que había algo, no para spectrum sino para pc, pero no es fácil. Además la mayoría de la música será polifonica y el BEEP es monofónico. No tengo ni idea de hacer música, pero creo que habrá que saber algo para hacer lo que quieres, o buscar por internet músicas convertidas, tal vez tengas que adaptarlas de otros basics.
Si vas a usar el 128, con PLAY, tendrás más para elegir, ya que había muchos ordenadores con el AY-3, y además el sonido es mucho mejor, y si lo usas desde CM no te come tantisimo tiempo de cpu.

Jake Speed escribió:¿como se hacían los sprites, o monigotes, en Spectrum? ¿En BASIC, C/M, o ambas cosas?


Si te refieres a diseñarlos, había programas de dibujo en CM, en basic o la gente los dibujaba en papel cuadriculado :( .
Si te refieres a cómo funcionaban en los juegos, lo normal sería en CM, por la velocidad. Ni el hardware ni el firmware del spectum saben nada de sprites, a diferencia de otras máquinas de la época que solían tener hardware especial para ello.
jzx
Freddy Hardest
 
Mensajes: 926
Registrado: Lun Feb 08, 2010 9:19 pm

Re: Empezando con código máquina

Notapor Tromponauta el Mar Oct 25, 2016 3:01 am

Quizás no sea la mejor persona para aconsejar sobre el tema, pero en su día yo utilicé en mi +3 un ensamblador / desensamblador que regaló Micro Hobby y me parecía muy bueno, por lo menos a mi me resultaba mas fácil de usar que el Gens / Mons y se puede usar también en el +2A/B , la pena es que no recuerdo el nombre para buscar donde descargarlo, a ver si alguien lo sabe y así yo también me reengancho al código máquina :-)
Enviado desde mi Sinclair ZX-Spectrum ;-)
Avatar de Usuario
Tromponauta
rst 0
 
Mensajes: 16
Registrado: Mie Sep 28, 2016 8:22 am

Re: Empezando con código máquina

Notapor Jake Speed el Mie Oct 26, 2016 12:55 pm

Tromponauta escribió:Quizás no sea la mejor persona para aconsejar sobre el tema, pero en su día yo utilicé en mi +3 un ensamblador / desensamblador que regaló Micro Hobby y me parecía muy bueno, por lo menos a mi me resultaba mas fácil de usar que el Gens / Mons y se puede usar también en el +2A/B , la pena es que no recuerdo el nombre para buscar donde descargarlo, a ver si alguien lo sabe y así yo también me reengancho al código máquina :-)


¡Hola! Creo que te refieres a este:

Imagen

También lo usé, pero tenía un problema: no tiene un manual (o al menos yo no lo he encontrado, solo un artículo en Microhobby pero muy por encima) y por lo tanto, no sé muy bien como usarlo. Por ejemplo, los números en hexadecimal no me dejaba usarlos (me los sacaba como errores) ni con # delante, ni con $. Las etiquetas o labels también me las daba como errores, imagino que porque ese programa tiene sus propias reglas para declarar las cosas, pero como digo, no hallé manual alguno. Lo cierto es que me gustaba más que el gens, y si pudiera encontrar respuestas a estas cosillas (en forma de manual o guía, o alguien que lo haya usado...) lo preferiría al GENS :wink:
Jake Speed
rst 0
 
Mensajes: 13
Registrado: Mar Ene 21, 2014 6:04 pm

Siguiente

Volver a Programación y nuevos desarrollos

¿Quién está conectado?

Usuarios navegando este Foro: No hay usuarios registrados visitando el Foro y 1 invitado