lunes, 23 de enero de 2012

Curso de Ensamblador para C64: Cap. 1 - Introducción y familiarización con el entorno



Bienvenidos al nuevo curso de ensamblador para Commodore 64 de Back2theRetro.

Específicamente se centrará en la sintaxis concreta del compilador escrito en Java, Kickassembler (tambien conocido como Kickass) de Mad Nielsen (alias Slammer).



El objetivo del curso es enseñar a programar el c64, en lenguaje ensamblador desde nuestro moderno PC, y usando las mejores herramientas de desarrollo cruzado actuales. Para los que no conocen dicho término, asi es como se llaman los programas que nos permiten desarrollar software o documentos entendibles por el S.O. nativo de una plataforma más antigua (en nuestro caso el C64) en una máquina superior ó más moderna (en este caso un PC) .

No se requieren conocimientos avanzados de programación para seguir el curso, pero doy por hecho que quienes lo siguen conocen al menos a nivel elemental como funciona el BASIC del c64. Si este no fuera el caso, y queréis seguir el curso, os aconsejaria que os hiciérais con una copia del manual de usuario de C64, donde se explica todo lo más elemental de forma muy clara y sencilla.

Debido a la cantidad de posibilidades, entornos, compiladores o utilidades que existen, en un afán de estandarización, he decidido crear un nuevo entorno, especialmente diseñado para poder seguir este curso, de tal manera que todos hablemos el mismo lenguaje.

A dicho entorno de desarrollo lo he bautizado como C64 Kickass IDE, las siglas IDE hacen referencia a como se conocen popularmente los entornos de desarrollo integrado (Integrated Development Environment, en inglés). Un IDE (también EDI, en español) es una colección de utilidades interrelacionados con el que podremos crear nuestros proyectos prácticamente a partir de un programa. Concretamente, desde su editor (el corazón de nuestro IDE), accederemos a todas las herramientas, utilidades y comandos a la hora de ensamblar nuestros programas.

Lo primero que tenéis que hacer para empezar, es bajaros el IDE. Lo podéis hacer desde la página de CSDB:

http://noname.c64.org/csdb//release/index.php?id=104482

Una vez bajado descomprimimos el .zip (en nuestro escritorio por ejemplo) que contendrá el instalador del programa. Abrimos el programa instalador y instalamos el IDE. No hay que hacer nada más, una vez instalado, a no ser que hayáis desmarcado la opción de "Acceso directo escritorio" durante la instalación, tendremos en nuestro escritorio un nuevo icono con el acceso directo al editor de nuestro entorno.

Clickamos en él y entraremos en el programa editor de Kickass IDE. Veréis que el editor nos abrirá un documento vacío, en una pestaña nueva, llamado "Text1".




En este capitulo de hoy no voy a explicar nada sobre programación propiamente dicha, tan sólo me interesa que antes de entrar en materia pura y dura, os vayáis familiarizando con el entorno con una primera toma de contacto.

Asi pues, vamos a ver un poco como funciona el editor con un sencillo ejemplo:

Vamos a compilar nuestro primer programa: el típico Hola Mundo, con el que dan inicio prácticamente todos los cursos de programación. Asi de paso tambien, comprobamos que nuestra instalación ha sido exitosa y todo funciona perfectamente...

Va a ser todo muy sencillo y prácticamente no váis a tener que teclear nada.

Una vez abierto el editor del IDE, en el menú Archivo de la barra de menús, seleccionad la opción Abrir Plantilla, aparecerá una ventana de directorio (por defecto apuntando a la carpeta templates), seleccionáis la plantilla "Hola Mundo.asm" y Abrir.

Ahora en la sección de documentos del editor tendréis el contenido de la plantilla en un nuevo documento llamado "Text2" al lado de la pestaña del documento vació que se nos generó al principio. Pulsamos con el botón derecho sobre la pestaña "Text2" y, en el menú contextual que nos aparece, seleccionamos Grabar Como... (también lo podéis hacer desde el menú Archivo) y en el cuadro de diálogo que aparece, navegamos a la ruta de carpeta C:\C64-Kickass-IDE\ejemplos, especificáis como nombre de archivo hola-c64.asm.

Notad que el nombre de archivo no contiene espacios, y en lugar de ellos se ha usado el carácter guion "-", para separar las palabras. Esto es importantísimo tenerlo en cuenta, por que el compilador kickass, no entiende el carácter espacio y nos daria error al intentar la compilación. Recordad pues, no usar espacios en vuestros nombres de archivo (ni en las rutas de carpeta).

Como no vamos a necesitar el documento vacío "Text1", pulsamos sobre su pestaña con el botón derecho y seleccionamos Cerrar (la primera opción en la lista del menú de contexto).

Ahora pulsamos CTRL + F9 para compilar y ejecutar el archivo con el código fuente del documento activo ("hola-c64.asm"). Tras su compilación, si no han habido errores (y la plantilla está libre de ellos), el entorno ejecutará el archivo "hola-c64.prg" resultante en el emulador de c64.

¡Y ahi lo tenéis! ¡Vuestro primer ensamblado con Kickass IDE!



Probad ahora a cambiar el texto que se visualiza en el c64, retocando la cadena de texto que aparece entre comillas al final del documento, donde pone:

// Datos texto: .byte ASC_CLSCR .text "HOLA DE NUEVO, COMMODORE 64!" .byte ASC_RET .byte NULL

Os aconsejo que os vayáis familiarizando un poco más con el editor, probando algunas opciones de los menús (abajo en la barra de estado podéis ver una descripción de los comandos). Os recomiendo también que vayáis echándole un ojo al manual desde el menú Ayuda / Indice de contenidos donde podréis leer una introducción y una explicación de todo lo que contiene el paquete de desarrollo, además de un indice con todas las instrucciones de código máquina del microprocesador del c64 (el chip 6510).

Como último ejercicio, vamos a presentar brevemente la funcionalidad de "ayuda sensible al contexto".

En el documento activo, colocad el cursor en la palabra "ldx", en la seccion de "Codigo del programa", y pulsad F1. Os aparecerá una descripción detallada de ese comando, lo que hace, ejemplos y enlaces a otros comandos o conceptos relacionados. Como véis, una ayuda que nos va a resultar super útil durante nuestro aprendizaje...



De momento, no intentéis entender conceptos de programación, por que aún os falta la base para entender lo que ahi pone, como por ejemplo, ¿que es un registro?, ¿que es un modo de direccionamiento?, etc. No os preocupéis. Poco a poco, todo eso será desvelado durante el curso.

18 comentarios:

Bieno64 dijo...

Pero que bueno que eres !!!!!!!!
Ahora que me he metido un poquito en esto, será cuestión de probarlo.

Lobogris dijo...

¡Hola Bieno! ;) Creo que a partir de ahora lo vas a tener más fácil

Anónimo dijo...

Sinceramente IMPRESIONANTE!, no se paga con Dinero lo que estas haciendo!,

Cuenta con un Adicto a este hilo!!!

21 CENTURY 8 BITS FUTURE!!!
R. International

Lobogris dijo...

Ey! Rulas ;) muchas gracias por tu apoyo, espero que aprendas mucho de esta serie de articulos que voy a ir poniendo...

¡Al tajo, que hay mucho por hacer!

sejuan dijo...

Lo que esta claroe es que esto va a estar muy muy bien para los que quieran/queramos aprender algo de la panera. Muchas gracias.

Lobogris dijo...

Quien quiera saber cosas sobre la panera que venga. Siempre es un placer hacer cosas de estas :) ¡Bienvenido sejuan!

Aeko dijo...

No sabes tu cuanto me ha facilitado volver a poner en marcha kickass + vice + .. de un tirón con tu IDE (aunque he de reconocer que soy un poco reacio todavía al kickass por no tener equivalencia en un C64 físico como puede ser el tass) vamos a ver si recuperamos por n-ésima un poquito del espíritu del C64.

Gracias
/Aeko

Lobogris dijo...

De nada Aeko, me gusta saber que es útil, para eso se hizo... No entiendo muy bien a que te refieres con lo de que kickass no tiene equivalencia con el c64 fisico, pero imagino que cuando uno está acostumbrado a una cosa y le funciona no necesita tanto acoplarse a nuevas filosofias. A ver si recuperamos el espiritu de la programación del c64 (en mi opinión no hay nada más satisfactorio que ese contacto directo con este ordenador)

Aeko dijo...

Hola Lobogris, pues a eso me refiero, al contacto directo. Con TASS tienes más o menos una equivalencia a como lo harías si lo hicieras con el TurboAssembler existente en C64, sintiendo el calorcillo de las teclas. La sintaxis es muy parecida. Digamos que con KickAssembler se pierde un poco el contacto de como funcionan las cosas. Por ejemplo:

En Kickass:

:BasicUpstart(4096)

En otros, como el TASS:

*= $0801
.word $080b,2000
.byte $9e
.text "4096"
.byte 0,0,0

Que si, que hacen lo mismo, pero por lo menos a mi me quita un poco el romanticismo. Aunque se que actualmente nadie programa directamente sobre el C64 y entonces ¿ por que no utilizar KickAss y toda la facilidad que dan los editores de textos modernos, el copy/paste, ver mas de 25 lineas por pantalla, una grabación rápida y segura y un IDE cachondo como este ?

Ayer jugué por la noche con el IDE y veo dos cosas (tonterias):

· Puse la pantalla en negro y tuve que hacer lo mismo con el color de la linea actual, la que se está editanto. Con otros colores los caracteres que hay debajo se hacen ilegibles. Con negro la linea no queda (obviamente) resaltada, pero vamos, que no es problema.

· En vez de F9 estoy más acostumbrado a F6 para compilar y F5 para compilar+ejecutar. (a veces se me van los dedos :P).

Lobogris dijo...

¡Hola Aeko!

Con el ejemplo que muestras, ahora entiendo tu punto. Pero bueno, si quieres usar el compilador de forma más "romántica", puedes prescindir de :BasicUpstart, y usar .word y .byte para introducir los tokens, en kickass también... aunque sea más tentador (jeje) usar la directiva para hacer una cosa mecánica como esa. Sin embargo, tiene valor ser "romántico" por que de cara a aprender es bueno saber todas esas cosas de forma directa, sin atajos. En el curso habrá unas secciones iniciales, antes de meterse en kickass puro, para aprender a compilar "manualmente" de forma directa, luego pasaremos al kickass, pero sin utilizar de forma intensiva sus facilidades, con un estilo más cerca de como se hacia antes, y ya para el medio empezaremos a hablar ensamblador moderno ;)

Lo que me gusta de kickass es que se pueden hacer cosas de varias formas distintas (como te decia antes) Además tiene funcionalidades absolutamente únicas, como cargar estructuras listas para cargar un SID, un Koala, o incluso un sprite a partir de un GIF! Aunque yo prefiera manejar mis propias rutinas personales (por que ya las tengo hechas de hace años).

Lo de los colores se puede configurar al gusto, de momento solo me centré en que funcionarán correctamente los que aparecen por defecto. Gracias por avisar, apañaré ese detalle un poco mejor para la prox. versión.

Una última cosilla: Por favor, si no es molestia, preferiria que las sugerencias sobre mejoras del IDE las hicieras en el foro, tengo un hilo dispuesto para estos menesteres en: http://retroinvaders.com/commodoremania/foro/index.php/topic,587.0.html Asi tengo todo más ordenado a la hora de recopilar información para seguir avanzando en el proyecto. Vuestras opiniones, serán almenos tenidas en consideración, ¡eso seguro!

Lobogris dijo...

Respecto a las teclas rápidas, no sé si te has dado cuenta que puedes configurarlas a tu gusto desde Herramientas / Configurar IDE / Herramientas de Usuario. selecciona el comando de menú que te interese como por ejemplo el primero, Compilar, y en tecla rápida le pones F6, y asi con todos, los vas poniendo a tu gusto ;)

NicoGalis dijo...

Estoy impresionado con el trabajo que estas desarrollando Lobogriz, me faltan palabras para agradecerte esta gran aportación a la comunidad commodera y a todos los que estén dispuestos a aprender un poco más sobre esta maquina, gracias de corazón.

Lobogris dijo...

Estoy convencido de que cosas muy positivas saldrán de todo esto. La verdad es que yo si que estaba asombrado de la poca información en nuestra lengua sobre esta maravillosa máquina. Ya no hacen ordenadores tan personales como estos a los que se les llega a coger cariño, estas máquinas "obsoletas" presentan una base de aprendizaje en la informática de un valor increible.

Es tanta mi pasión por este ordenador, que no podia hacer menos. Gracias a ti Nico, por tu sincero agradecimiento.

mentalthink jim dijo...

Hola soy nuevo por aquí, y aunque tengo mi C64 desde hace un par de años, no lo he tocado demasiado, justo hoy he conseguido arreglar mi cable de Video, ya que me hacía cosas raras, y he encontrado esté Blog, (Gracias por el enorme trabajo) el hecho es que me gustaría desarrollar algo para 8 bits, pero en Amstrad que fué mi primera máquina no encuentro una manera "chula" de portar mis graficos 3D a Sprites, y creo que C64 es el más adecuado, Amiga lo veo muy avanzado... Espero poder daros la bara, ya que me he ilusionado con el puerto Serie y el Arduino :)...

Saludos,
Iván J.

Lobogris dijo...

Hola Iván, bienvenido a bordo ;)

Que bueno que uno más se interese por programar cosas para el 64, desde aqui te animo a crear tus proyectos y que sepas que estaré encantado de ayudarte en todo lo que esté en mi mano. Además por aqui hay también muchos que seguro podrán darte muchos consejos.

Para el tema de Sprites, no tengo mucha idea de como funciona el Amstrad (aunque un dia me gustaria tocar el tema) pero por el blog encontrarás un curso sobre sprites, que podria serte de utilidad. Lleva varios meses sin actualizarse porque estoy más centrado en el curso de ensamblador, pero tengo planeado continuarlo. En efecto, el Amiga es un ordenador bastante más peliagudo de programar.
Sobre gráficos 3D pasados a Sprites, Toniman, amigo y colaborador de este blog seguro que podrá guiarte muy bien.

Un Saludo!

Toni Galvez dijo...

Hola Jesus y hola Metalthink, creo que hace tiempo hablamos de que querias hacer un juego, animo y a ver que te sale. Para pasar un objeto 3D a Sprite hay algunas cosas muy importantes que tienes que saber:

1- Los colores de los materiales de los que se compone el objeto deben de ser justo los colores que le vas a poner al sprite finalmente.

2- La luz focal debe de estar a 0 y la luz ambiente debe de estar a un valor en el que se muestren los colores tal y como los has puesto, asi evitas los degradados y brillos molestos(al menos con Lightwave es asi, con la mierda de 3DS Max no se si funcionara tan bien).

3- Luego graba los fotogramas sueltos a un tamaño de 12x21 o 24x21, en PNG (mejor porque ocuparan menos)

4- Para pasarlos a la paleta que quieras, necesitas el Promotion, es un gran programa para Pixelar, le pones la paleta del C64 y el te carga la secuencia de imagenes de la animacion del sprite con esa paleta, ahora, que luego para pasarlo al C64, el Spritepad no importa imagenes exteriores, tienes que copiar a mano los fotogramas de los sprites que vas a mostrar en Promotion(los de baja resolucion multicolor los tendras que ampliar al 200% en x para ver los pixeles como serian en el C64).

5- Puedes ponerles texturas, pero siempre respetando que estas tienen que tener los colores que el sprite va a llevar consigo.

6- Recuerda que los sprites en baja del commodore 64 tienen 3 colores, de los cuales 2 colores son comunes a todos los sprites y solo el tercer color es el que se cambia.

Buena suerte.

Lobogris dijo...

Muy interesantes los consejos Toni, espero que te sirvan de ayuda Iván. Sobre el punto 4, debo decirte que hay utilidades para convertir un GIF a un formato de sprite del c64, cuando estés en el tema házmelo saber y te las busco por mis carpetas. Además si vas a programar en Kickassembler (el que yo uso y enseño en el curso), hay unas facilidades para leer los sprites directamente de un GIF (incluso fácilmente adaptables para un PNG si conoces la estructura de éstos) Un saludo y buena suerte.

Vain MD dijo...

Hola Toni, claro que me acuerdo, de hecho el Amiga es otra cosa más pendiente... pero el C64, lo veo digamos más a lo que quiero aproximarme ya que yo soy del Amstrad y el Amiga, digamos que es muy potente, aunque el Basic, que hay es una gozada...

Sobre esté programa que me comentás promotion, no lo conocía, gracias, le "hecharé un ojo", quizás lo que intente hacer es con GLBasic, una utilidad para el tema de los Sprites, o sea cojer la malla en el visor y hacer como un render pero para C64... es una tonteria es escanear el vidor 3D, pillar los pixeles, y acomodarlos a la resolución, de hecho lo hicé, aunque tendré que mejorarlo.
Sobre el Max, aunque llevo más de 16 años usándolo no entiendo como es posible que un programa de 6000€ pelao y mondao, salté y haga lo que le dé la gana... LW es realmente guapo, pero como por tiempo, y que ahora mismo no hay un exportador para GLbasic, pues no me he puesto con el.

@Lobotgris, gracias, ya te avisaré sobre lo que me comentas...

Por otro lado intentaré probar el Pixel art, ya que los editores inluidos en el Ide, me han encatado también, otros que había probado no son tan versatiles como estos.

Saludos!!!

Publicar un comentario