Ensamblando con R. International

Ensamblando en C64

Aprovechando que estaban listas las versiones f铆sicas de Laberinto y que quien redacta este art铆culo ten铆a ganas de comenzar de una vez por todas la inmersi贸n en el mundo del ensamblador, lo mejor era acercarse a hacer una visita a su autor y pasar unas jornadas totalmente empapadas en todo lo relacionado al Commodore 64. A preparar la maleta, con todas las ganas del mundo y vamos, vamos que nos vamos!!!!!!!!!

Pasar un fin de semana hablando y compartiendo experiencias sobre todo en el C64 es, aunque quede feo, un orgasmo y mas, mucho mas, cuando se tienen ganas de aprender. Es como ir a una feria, pero solo del C64 y ni quiero imaginar lo que se siente en una de esas partys exclusivas del C64 que se hacen en en norte de Europa.

R. International lo tiene todo preparado. El PC que nos servir谩 como herramienta de trabajo y dos C64 en cada flanco, para ir probando e ir ambientando el lugar con lo que estemos ejecutando o alguna demo.

Explicar como se ensambla no es f谩cil y es un tema que hay que ir poco a poco para no saturar la cabeza de datos, comandos, direcciones de memoria y conversiones de decimal a hexadecimal y viceversa. Primero hay que tener preparadas las herramientas de combate y las que R. International nos aconsejar铆a son estas:

Ensamblando en C64
Notepad++ es el bloc de notas donde escribiremos los comandos a ejecutar
Ensamblando en C64
SpritePad para crear los sprites
Ensamblando en C64
Gang Ed para hacer los bitmaps
Ensamblando
Cuneiform para crear nuestro propio charset
Ensamblando
64tass, el que lo coge todo y lo convierte en un PRG ejecutable
Ensamblando
El s铆mbolo de sistema de toda la vida, con el que ejecutaremos el 64tass
Ensamblando
Una calculadora cient铆fica que pase de hexadecimal a decimal y viceversa
Ensamblando en C64

Y aqu铆 viene lo bueno y creo que es un buen momento para que, quien pueda y mas ahora que est谩 todo tan animado, deber铆a plantearse dar un salto definitivo y sobretodo cualitativo a lo que deber铆a ser una de las metas en nuestra afici贸n. Ahora que tenemos tantos medios, es la hora de ponernos con el ensamblador y quitarnos esa pereza que hace demasiados a帽os que arrastramos. Aprender ensamblador hoy en d铆a, con la cantidad de herramientas que hay, y solo dedic谩ndole un rato, no es una tarea fara贸nica y f谩cilmente se pueden aprender y hacer 4 rutinas tontas. Adem谩s no es solo aprender ensamblador, es tambi茅n aprender como funciona la m谩quina.

Cuando tienes unos conocimientos b谩sicos, lo vas enfocando hacia lo que tu quieres hacer. Esto es, y dicho fr铆amente, ENTENDER COMO FUNCIONA EL ENSAMBLADOR (nada que ver con saber usarlo) y ENTENDER PARA QUE SIRVE CADA COMANDO. Y no deja a parecerse a un listado en BASIC con muchas subrutinas pero que funcionana a las mil maravillas por que van a toda leche.

Con R. International tuve la suerte de quedar y que me fuera explicando la estructura de un listado. A partir de ah铆 vas a帽adiendo rutinas hasta conseguir el resultado deseado, sin dejar cabos sueltos. El programa que nos crea el PRG, el 64Tass, lo convierte todo a un ejecutable a no ser que tenga un error, y si lo hubiese, el mismo nos indicar谩 en que linea est谩. Solo practicando y practicando nos har谩 ir cometiendo cada vez menos errores.

En los enlaces de abajo, pod茅is descargaros 2 listados. Uno y de nuevo gracias R. International est谩 el c贸digo de la versi贸n espa帽ola de Laberinto. El segundo es otro, tambi茅n del mismo autor, que prepara el C64 para programar un juego. Lo que hace este es borrar la pantalla, preparar los puertos de los joysticks, preparar los Chars (Caracteres) y los Sprites en alta o baja resoluci贸n y todo lo necesario para iniciar un proyecto en el que solo debamos intercalar los comandos de lo que iremos creando (Se intercala por que, normalmente, al final del listado van las rutinas que casi no se usan, para optimizar la velocidad del juego y al principio va la configuraci贸n del programa)

Ensamblando en C64

–R. International nos muestra un ejemplo:

–Imagino que muchos de los lectores del art铆culo de Bieno o simplemente gente interesada en comenzar o hacer sus primeros pinitos, se preguntar谩 por donde se empieza y como se empieza, y es esta una buena observaci贸n que incluso a mi al principio me creaba mucha curiosidad ya que no sabia ni por donde empezar,..y os explico:

Lo primero que debemos de saber es que en Ensamblador no utilizaremos ninguna Herramienta ni Programa para comenzar a hacer el listado, lo haremos desde un Editor de Texto como si escribi茅ramos una carta, uno preparado para programaci贸n.En nuestro caso usamos el Notepad++. Una vez que lo teng谩is, lo abr铆s y ya se puede comenzar a escribir y crear vuestro programa. Os voy a poner un ejemplo sencillo en el que vamos a mostrar un sprite en pantalla...

Tenemos el Editor de Texto abierto, lo primero que hacemos es escribir unas lineas en las que "mandaremos" al sistema a C贸digo Maquina para que el ordenador trabaje en 茅sta forma con lo siguiente:

*=$0801                    ; INICIA PROGRAMA EN ESA POSICION
.WORD NEXT,10              ; CREA LINEA EN BASIC E INICIA CODIGO MAQUINA 
.NULL $9E,^START           ; "SYS START" (START=INIT M.C.)
NEXT .WORD 0               ; FIN BASIC

Con estas lineas hacemos que nuestro programa arranque en la posici贸n en Hexadecimal $0801 (posici贸n 2048) que esta en el Bank0.

Ahora vamos a escribir a continuaci贸n una lineas que har谩n que nuestro/s sprites se carguen en la posici贸n que nosotros queramos. En este caso ser谩n en la $2000 (8192 en decimal)...

El archivo donde tenemos los sprites se puede llamar Sprites y tendr谩 que tener extensi贸n .BIN (binario) para que pueda ser mas tarde compilado correctamente, la orden .BINARY antes del archivo sera la que le de la orden de carga. Luego explico como exportar (conformar para poder cargar) un archivo creado con el spritepad (que ser谩n nuestros sprites).

*=$2000                         ; CARGA SPRITES POSICION 49152 BANK0
.BINARY SPRITES.BIN 
FRAMES .BYTE 0                  ; VIDEO FRAMES COUNTER
FRAMES2 .BYTE 0                 ; VIDEO FRAMES COUNTER

Ya tenemos preparada la carga de los sprites pero, para que salgan en pantalla, tenemos que fijar antes unos par谩metros como son: Color de Sprites, Multicolor 1 y 2 de Sprite, Coordenadas X e Y y el fijar el Puntero (direcci贸n desde la que leer谩 donde est茅 cargada el bloque gr谩fico que lo forma) y luego simplemente activarlo para que se vea en pantalla. Vamos a escribir lo siguiente para que quede correctamente hecho:

LDA #150                        ; CARGA VALOR
STA $D000                       ; APLICA A X SPRITE 0
LDA #200                        ; CARGA VALOR
STA $D001                       ; APLICA A X SPRITE 0
                                ; MULTICOLOR 1 Y 2
MUCOLSPR0
LDA #$01                        ; BLANCO
STA $D025                       ; MULTICOLOR SPRITE 1
LDA #$06                        ; AZUL
STA $D026                       ; MCOLOR 2
                                ; COLOR SPRITE
LDA #$09                        ; CARGA ORANGE
STA $D027                       ; APLICA A COLOR SPRITE 0
                                ; PUNTERO / GRAFICO
LDA #$80                        ; CARGA GRAFICO COHETE
STA $07F8                       ; APLICA A PUNTERO SPRITE 0
                                ; ACTIVAR SPRITE
LDA #$01                        ; CARGA VALOR 1
STA $07F8                       ; APLICA A ACTIVAR SPRITES, ACTIVA SPRITE 0

Ahora creamos un bucle infinito...

FINAL
JMP FINAL

Y ya est谩. Guardamos los cambios, le ponemos nombre y ya tenemos nuestro archivo en formato .ASM preparado para compilarlo y verlo funcionando en nuestro Commodore.

Antes de ense帽aros como compilarlo algunas peque帽as apreciaciones:

Siempre, siempre a la hora de compilar tienen que estar en la misma carpeta (los que sean necesarios, seg煤n vuestro proyecto):

  • El programa que compile (en mi caso el 64Tass)
  • El archivo con el texto que hemos creado en formato .ASM, (creado con el Notepad++)
  • El archivo que hemos creado con el spritepad en formato .BIN (creado con el SpritePad)
  • El paquete de fuentes o de Chars tambi茅n en formato .BIN (creado con el Cuneiform

¿Como se exporta un archivo desde el Spritepad? Tenemos el o los Sprites creados con el Spritepaden pantalla y pulsaremos:

FILE > EXPORT

Se nos abre una ventana peque帽a y en ella activaremos la opcion RAW DATA. Pulsaremos OK y se abre otra en la que, ya fijado el formato, nos preguntar谩 donde lo queremos guardar (Recordad que tiene que estar en la misma carpeta donde ten铆ais el texto y el compilador), Ahora le pon茅is nombre y lo guard谩is, no sin olvidar que ese nombre sera el mismo que tendr茅is que poner en el programa en su linea correspondiente.

.BINARY SPRITES.BIN

Ya guardado, tenemos nuestros sprites en el formato correcto para ser preparados. Si utiliz谩ramos un paquete de chars o fuentes, tambi茅n tendr铆amos que exportarla en formato .BIN para poder cargarlos. Para crearlos uso el cuneiform. La carga de fuentes nos llevara tambi茅n fijar el modo texto en el principio del programa y lo cargaremos con un .BIN. En el caso de que quisi茅ramos incluir fuentes, aunque ese es otro tema, lo har铆amos de forma similar a los sprites:

*=$4000
CHARS
.BINARY FONTS.BIN           ; BANCO DE CARACTERES

O tambi茅n modificando las lineas cargarlas al final de nuestro programa y luego ponerlas donde queramos,..pero como os digo ese es otro tema, volvamos donde est谩bamos...
Solo queda adjuntar esta linea cuando configuras el sprite para que se muestre:

; ACTIVAR MODO MULTICOLOR EN SPRITES
LDA #$FF             ; CARGA VALOR 255
STA $D01C            ; APLICA A ACTIVACION DE SPRITES, ACTIVA TODOS

Ahora ya lo tenemos todo preparado y vamos a compilarlo. En la compilaci贸n, el programa que utilizamos, va a convertir todo a c贸digo Maquina en Hexadecimal sin darnos cuenta, aunque verdaderamente la maquina lo entender谩 como Binario (que es el lenguaje original de la maquina). Para ello necesitamos un programa que compile y para eso utilizo el 64Tass aunque haya otros igual de v谩lidos. Hago otra vez hincapi茅 en la importancia de que este programa est茅 en la misma carpeta alojado con los dem谩s archivos a compilar.

La ejecucion de la compilaci贸n la haremos desde el SIMBOLO DEL SISTEMA que todo ordenador lleva. Lo podremos encontrar utilizando el buscador de Windows. Una vez abierto, iremos a la carpeta donde tenemos todos los ficheros necesarios.

Cuando ya estemos, escribiremos el comando y sus par谩metros para que nuestro listado se compile y se convierta en un juego. El compilador juntara todo (incluidos los archivos de Sprites, Chars, SID.etc) y lo convertira a .PRG para que sea reconocible por el Commodore. Escribimos lo siguiente:

64tass.exe -o juego.prg texto.asm

O dicho de otra forma: Ejecuta el 64tass(compilador), coge el fichero texto.asm (creado con el Notepad++) y lo convierte en un PRG ejecutable para el C64 al que llamar谩 juego mediante el comando -o

Ahora ya lo podeis cargar en vuestro Commodore 64!!!

Conclusi贸n:

Esperamos no haberos aburrido mucho y aunque a Josepzin lo tenemos lejos (y nos hubiera encantado estar juntos los tres), R. International y nosotros dos cooperaremos en todo lo posible para hacer lo que se nos vaya pasando por la cabeza. Esperamos repetir pronto, explicar nuestros avances y que vosotros compart谩is vuestras experiencias.

Descargas:

  • Pod茅is descargaros la rutina INICIO en ESTE enlace
  • Pod茅is descargaros el listado de Labyrinth en ESTE enlace

Publicar un comentario

11 Comentarios

  1. ¿Pero Rulas trabaja en una cueva? Eso s铆 que es ambientaci贸n!

    Estupendo el art铆culo!

    ResponderEliminar
  2. Eso si que es una retrocueva :D

    marcos64

    ResponderEliminar
    Respuestas
    1. Es el Rulas-Claustro, preparado para programar. Al fondo del t煤nel est谩 la sala de torturas para los usuarios de otros sistemas ;D

      Eliminar
  3. Gracias Bieno, la verdad es que han sido inolvidables los ratos que pasamos durante la creaci贸n del Articulo y todo un Placer recibirte en mi cueva!!!

    ResponderEliminar
  4. Articulazo!!!! L谩stima que no tener m谩s tiempo libre para aprender a programar algo para el C64, porque ganas hay (hace poco estuve hojeando un manual en ingl茅s).

    ResponderEliminar
    Respuestas
    1. Como todo, es cuesti贸n de ponerse y tener tiempo para ello.
      Un saludo y gracias !!!!!!

      Eliminar
  5. La caverna medi谩tica del commodore 64!
    Est谩 visto que os hab茅is metido en el laberinto a programar!
    Que laberinto... que laberinto! (lo dec铆a un compa帽ero de la facultad cuando le pon铆an un examen chungo! ;D )
    Muy bueno el articulo!
    Seguro que con esto, le meter茅is el gusanillo a mucha gente para atreverse a programar!
    Y lo de las birras...??? u os pensabais que no me dar铆a cuenta??? :D

    Jeff

    ResponderEliminar
    Respuestas
    1. ¡ La caverna es m谩gica y nos da vibraciones positivas !
      En las latas hay zumo de naranja. Lo hacemos para disimular ;D

      Eliminar
  6. Con Xain me suelo ir a Marte, Saturno, etc, etc,..tambi茅n para ambientarme!!,...ya os ense帽are mis instalaciones all铆.

    ResponderEliminar