cursos:ensamblador:prologo

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
cursos:ensamblador:prologo [31-12-2023 10:52] – [La rutina más óptima] sromerocursos:ensamblador:prologo [18-01-2024 06:53] (actual) – [A quién está dirigido este curso] sromero
Línea 39: Línea 39:
    * La arquitectura del Sinclair ZX Spectrum: se describen sus componentes internos y cómo se interrelacionan.    * La arquitectura del Sinclair ZX Spectrum: se describen sus componentes internos y cómo se interrelacionan.
    * La arquitectura del microprocesador Z80: sus registros y su juego de instrucciones.    * La arquitectura del microprocesador Z80: sus registros y su juego de instrucciones.
-   * La sintaxis del lenguaje ensamblador de Z80: nmemónicos del lenguaje.+   * La sintaxis del lenguaje ensamblador de Z80: mnemónicos del lenguaje.
    * Cómo utilizar un programa ensamblador para ensamblar nuestros programas en ASM de Z80.    * Cómo utilizar un programa ensamblador para ensamblar nuestros programas en ASM de Z80.
    * Acceso a los periféricos del Spectrum: Teclado, Joystick, etc.    * Acceso a los periféricos del Spectrum: Teclado, Joystick, etc.
Línea 64: Línea 64:
  
   * **Sistemas Decimal, Binario y hexadecimal**: cómo expresar un valor numérico en diferentes sistemas de representación.   * **Sistemas Decimal, Binario y hexadecimal**: cómo expresar un valor numérico en diferentes sistemas de representación.
-  * **Operaciones lógicas entre bits**: Qué es una operación AND, OR, XOR y NOT entre 2 bits o 2 valores.+ 
 +  * **Operaciones lógicas y aritméticas entre bits**: Qué es una operación **AND****OR****XOR** **NOT** entre 2 bits o 2 valores, cómo se representan valores con signo en binario, y cómo se suman o restan valores representados con este sistema. 
   * **Nociones de programación al menos en BASIC del Spectrum**.   * **Nociones de programación al menos en BASIC del Spectrum**.
 +
   * **Conocimientos básicos sobre compiladores y ensambladores**: al menos, saber que se pueden escribir los programas en ficheros de texto y compilarlos/ensamblarlos para obtener programas ejecutables.   * **Conocimientos básicos sobre compiladores y ensambladores**: al menos, saber que se pueden escribir los programas en ficheros de texto y compilarlos/ensamblarlos para obtener programas ejecutables.
 +
   * **Conocimientos básicos sobre emulación**: ser capaz de ejecutar un emulador de ZX Spectrum y cargar en él los ficheros TAP que obtendremos como resultado de nuestros ejercicios y pruebas.   * **Conocimientos básicos sobre emulación**: ser capaz de ejecutar un emulador de ZX Spectrum y cargar en él los ficheros TAP que obtendremos como resultado de nuestros ejercicios y pruebas.
  
Línea 72: Línea 76:
  
   * Spectrum Machine Language For The Absolute Beginner (William Tang - Melbourne House).   * Spectrum Machine Language For The Absolute Beginner (William Tang - Melbourne House).
 +
   * Codigo Maquina ZX Spectrum Para Principiantes (William Tang - INDESCOMP), traducción del anterior.   * Codigo Maquina ZX Spectrum Para Principiantes (William Tang - INDESCOMP), traducción del anterior.
 +
   * ZX Spectrum Codigo Maquina Simplificado Volumen 1 y 2 (James Walsh - Colección m/b).   * ZX Spectrum Codigo Maquina Simplificado Volumen 1 y 2 (James Walsh - Colección m/b).
  
- No obstante, asumo que si estás leyendo estas líneas es porque tienes tienes estos conocimientos, ya que no se me ocurre otro motivo por el cual una persona podría acercarse a conocer el lenguaje máquina de un ordenador aparecido en 1982 que ya no se comercializa, con el objetivo de aprender a escribir programas para un procesador de 8 bits, que van a disfrutar apenas unos cientos o miles de personas.+ No obstante, asumo que si estás leyendo estas líneas es porque tienes estos conocimientos, ya que no se me ocurre otro motivo por el cual una persona podría acercarse a conocer el lenguaje máquina de un ordenador aparecido en 1982 que ya no se comercializa, con el objetivo de aprender a escribir programas para un procesador de 8 bits, que van a disfrutar apenas unos cientos o miles de personas.
  
- Y para eso he escrito este documento, para dar una introducción al mundo de la programación en ensamblador de Z80 para Sinclair ZX Spectrum y que podáis crear desde pequeñas rutinas a increibles juegos. + Y para eso he escrito este documento, para dar una introducción al mundo de la programación en ensamblador de Z80 para Sinclair ZX Spectrum y que podáis crear desde pequeñas rutinas a increibles juegos.
  
  
Línea 111: Línea 117:
 Citando a Jonathan Cauldwell en su documento "[[https://jonathan-cauldwell.itch.io/how-to-write-spectrum-games|How to write Spectrum Games]]": Citando a Jonathan Cauldwell en su documento "[[https://jonathan-cauldwell.itch.io/how-to-write-spectrum-games|How to write Spectrum Games]]":
  
-"//Escribir un juego no trata sobre escribir código Z80 "perfecto", como si existiese tal cosa. Desarrollar un juego para Spectrum es una tarea considerable y no lograrás terminarlo si estás demasiado obsesionado con escribir los algoritmos más eficientes para puntuación o lectura de teclado. Una vez que hayas creado una rutina que funcione y no cause problemas en otros lugares, pasa a la siguiente rutina. No importa si está un poco desordenada o ineficiente, porque lo importante es lograr que la jugabilidad sea correcta. Nadie en su sano juicio va a desensamblar tu código y señalarle defectos.//" ======+"//Escribir un juego no trata sobre escribir código Z80 "perfecto", como si tal cosa existiese. Desarrollar un juego para Spectrum es una tarea considerable y no lograrás terminarlo si estás demasiado obsesionado con escribir los algoritmos más eficientes para puntuación o lectura de teclado. Una vez que hayas creado una rutina que funcione y no cause problemas en otros lugares, pasa a la siguiente rutina. No importa si está un poco desordenada o ineficiente, porque lo importante es lograr que la jugabilidad sea correcta. Nadie en su sano juicio va a desensamblar tu código y señalarle defectos.//" ======
  
- Se recomienda encarecidamente al lector que se cree una "biblioteca" de rutinas reutilizables que incluir en sus programas organizadas de forma que las puedas llamar desde cualquier "programa principal" de juego. Ademássi las rutinas están bien escritas documentadassiempre podrás dedicar tiempo a optimizarlas en el futuro una vez tu juego esté terminadoo para futuros juegos. Esto hará que el tiempo invertido sea más eficienteque cada mejora que hagas en tus rutinas reutilizables pueda ser aprovechada en pasadosactuales futuros programas.+ Tal y como dice Jonathan Cauldwell, las rutinas siempre pueden ser mejoradas optimizadas despuéspor lo que una vez tengamos una rutina funcionallo mejor (a menos que sea evidentemente mejorable) es pasar a programar otra parte del juego. Tenemos la gran ventaja de poder programar en sistemas modernos con ensambladores cruzadospor lo que al contrario que los programadores de la época (que tenían su código en cinta y para cualquier cambio tenían que cargarlo o teclearlo de nuevo en el propio Spectrum) nosotros tenemos una gran facilidad para revisitar ese código más adelante (abriendo un simple fichero con un editor de texto), mejorarlo, y volver a ensamblar nuestro juego para ver los resultados.
  
- Pero para llegar a eso, primero comencemos nuestro periplo por introducirnos en el apasionante mundo del ZX Spectrum y el procesador Z80.+ Se recomienda encarecidamente al lector que se cree una "biblioteca" de rutinas reutilizables que incluir en sus programas organizadas de forma que las puedas llamar desde cualquier "programa principal" de juego. Estas rutinas deberían estar separadas en diferentes ficheros por su tipo de funcionalidad, haciéndonos así bibliotecas de gráficos, de sonido, o de texto. Además, si las rutinas están bien escritas y documentadas, siempre podrás dedicar tiempo a optimizarlas en el futuro una vez tu juego esté terminado, o para futuros juegos. Esto hará que el tiempo invertido sea más eficiente, y que cada mejora que hagas en tus rutinas reutilizables pueda ser aprovechada en pasados, actuales y futuros programas.
  
 +
 +\\ 
 +===== Consideraciones para seguir el curso ======
 +
 + La escritura de un programa en ensamblador de Z80 para ZX Spectrum es un proceso interdisciplinar, que requiere conocer:
 +
 +  * El hardware interno del microprocesador Z80: qué registros podemos utilizar para realizar operaciones, qué tamaño tienen, y cómo funciona el procesador a la hora de ejecutar código.
 +
 +  * El juego de instrucciones del microprocesador Z80: qué instrucciones existen, qué efecto tienen y sobre qué registros u operandos pueden trabajar.
 +
 +  * El "sistema operativo" del ordenador que tiene dicho procesador: necesitaremos conocer algunos aspectos de la ROM del ZX Spectrum, es decir: qué rutinas útiles y variables del sistema aprovechables nos puede proporcionar.
 +
 +  * La organización del mapa de memoria del ordenador: dónde podemos encontrar las variables del sistema, la zona de videomemoria, la zona de pila, etc.
 +
 +  * El funcionamiento de sus dispositivos de entrada/salida (I/O) para, por ejemplo, leer el teclado o el estado de un joystick.
 +
 +  * La sintaxis del Lenguaje Ensamblador utilizado para generar código binario para el Z80, y cómo podemos ensamblar ("compilar") un programa en Lenguaje Ensamblador para obtener dicho código binario o "código máquina".
 +
 +  * Cómo introducir el código máquina resultante del ensamblado de nuestro código ensamblador en la memoria del Spectrum para poder ejecutarlo.
 +
 +  * Cómo atajar determinados problemas habituales: sumar, restar, multiplicar, dividir, realizar comparaciones, bucles, acceder a la memoria, y cómo utilizarlo para imprimir texto, imprimir gráficos, leer el teclado, etc.
 +
 + Debido a que es necesario conocer tanta información de tantas áreas, a veces es complicado ofrecer un camino lineal para aprender, por lo que muchas veces haremos referencia a algunos términos (junto a una breve explicación de ellos) que serán ampliados después en otro momento. Por eso, a veces no bastará una única lectura para ver el todo, sino que el repaso de explicaciones anteriores terminará de rellenar los huecos.
 +
 + Nuestra recomendación al lector es que haga una primera lectura general del curso para obtener unos conocimientos generales de la materia, y después una segunda lectura en la cual relacionará todos los conceptos entre sí.
 +
 + Para ensamblar los programas de ejemplo del curso hemos utilizado el ensamblador **pasmo**, disponible en https://pasmo.speccy.org. Podemos en general usar la versión estable 0.5.5 para todo el curso, (excepto si en algún momento necesitamos utilizar la opción ''--listing'', que requiere la 0.6-beta). También se puede seguir el curso con otros ensambladores como **sjasmplus** o **z80asm** con unos cambios mínimos en el código.
 +
 +
 +\\ 
 +**[ [[.:indice|⬉]] | [[.:indice|⬅]] | [[.:introduccion|➡]] ]**
  • cursos/ensamblador/prologo.1704019927.txt.gz
  • Última modificación: 31-12-2023 10:52
  • por sromero