Configurando toolchain C+asm para Amiga (y curso de Mlake)

Avatar de Usuario
Chema
Mensajes: 2219
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 1769 veces
Agradecimiento recibido: 577 veces
Contactar:

Configurando toolchain C+asm para Amiga (y curso de Mlake)

Mensajepor Chema » 08 May 2019 19:16

Bueno, creo que voy a postear aquí cómo he configurado todo para poder compilar programas para el Amiga desde un PC, mezclando C y ensamblador. Para los que ya programan para Amiga, esto puede parecer sencillo (cada uno parece que tiene su manera de hacerlo), pero cuando uno empieza suele estar perdido. Al menos es lo que me pasó a mí.

Lo que voy a describir es un proceso bastante artesanal, porque no conozco otro, para echarlo todo a andar. Si alguien quiere contribuir con maneras mejores de hacer las cosas, adelante :)

En mi caso voy a usar Windows, pero fijo que se traduce a otros OS sin problemas. También voy a usar WinUAE como emulador, aunque fijo que se puede con fs-uae de manera muy similar.

Instalar y configurar el emulador

Lo primero es descargar e instalar el emulador y configurarlo todo bien. Fijo que ya tenéis uno funcionando, de modo que basta con configurar un par de cosas, pero si no lo tienes puedes descargarlo de aquí: http://www.winuae.net/download/

Yo usé la versión comprimida en un zip, que no lleva instalador. Para evitar problemas yo la instalé en una carpeta sin espacios en blanco en el nombre, que luego no hay manera de que las cosas vayan bien. Mi carpeta base será J:\AmigaSDK y el emulador lo colgaré de J:\AmigaSDK\WinUAE

Conseguimos la ROM que queramos usar (en mi caso el kickstart 1.3, que quiero emular un Amiga 500 básico) y lo echamos a andar. En mi caso, cambié los directorios para que estuvieran donde el ejecutable y dejé la ROM en el raíz de la carpeta del emulador. Reescaneé las ROMs y listo. Queda así:
winuaeconfig.png
winuaeconfig.png (32.35 KiB) Visto 231 veces


Bueno, vamos al lío. Queremos configurarlo de manera que ejecute el programa que compilemos lo más rápido posible. La manera que yo encontré es la de crear una carpeta compartida, por ejemplo J:\AmigaSDK\WinUAE\Shared y decirle al WinUAE que la monte como un disco duro del que se pueda arrancar. Esto se configura yendo a la página de propiedades, eligiendo "CD & Hard Drives" de la sección de "Hardware", pulsando "Add Directory or Archive", como aquí:
shared1.png
shared1.png (6.49 KiB) Visto 231 veces

Y nos debería de quedar la configuración así:
shared2.png
shared2.png (31.73 KiB) Visto 231 veces


Ahora vamos a hacer que en arranque, WinUAE arranque el programa que queremos. La idea es copiar el ejecutable que generemos con el toolchain en esa carpeta compartida con un nombre fijo y que un startup-sequence lo lance.

Yo lo copiaré en una subcarpeta llamada t con el nombre tempexe, así que creo dos carpetas dentro de shared, una llamada t, vacía, donde irá el ejecutable y otra llamada s con un fichero de texto llamado startup-sequence que tenga una sola linea:

Código: Seleccionar todo

 t/tempexe


Vamos que tenemos algo así:

Código: Seleccionar todo

J:\AmigaSDK\WinUAE\Shared
                                    |_  s
                                    |   |_ startup-sequence
                                    |
                                    |_ t
 


Hala, esto ya está listo. Tenemos que guardar la configuración, que si no se pierde. En la misma ventana de propiedades vamos a "Configurations" y usamos el botón de "Save As". Yo la llamaré toolchain.uae. Esto se guarda en la carpeta Configurations.

Instalar y configurar kit de desarrollo

Vamos al lío. Yo usé vbcc y vasm como herramientas de desarrollo. Me parece que son las más estándar, aunque es posible usar gcc, también. Y fijo que hay otras opciones.

Como soy un vago, me descargué las versiones compiladas para Windows de aquí http://sun.hasenbraten.de/vbcc/

Install-VBCC.exe Windows binaries (XP and up) and all 68k targets, provided by Robert Leffmann

El instalador puede hacer que proteste el SmartScreen y esas cosas, pero yo procedí igualmente. Eso sí, hay que crear la carpeta destino antes de instalar. Yo lo metí en J:\AmigaSDK\vbcc.

Tras la instalación veréis que nos ha creado varias carpetas. En [bin] están las herramientas que vamos a usar, el compilador de C, el ensamblador, el linker y el make. Pero no os preocupéis, porque también viene un frontend llamado vc que llama a las herramientas adecuadas para cada archivo que se le pase, según su tipo.

Vamos a compilar nuestro primer programa en C. Creamos un fichero main.c con este contenido:

Código: Seleccionar todo

#include <stdio.h>

int main(){
 printf("Hola Retrowiki!!\n");
 return 0;
}


Y hacemos vc main.c, lo que generará un archivo ejecutable a.out. Vamos a ejecutarlo en nuestro amiga. Podemos automatizar el proceso con un archivo bat... yo he creado un run.bat que contiene:

Código: Seleccionar todo

@set WUAE=J:\AmigaSDK\WinUAE4200
@set UAEConfig=toolchain.uae
@copy a.out %WUAE%\Shared\t\tempexe
@if errorlevel 1 (
   echo Couldn't write program to shared disk
   goto failed
)

:Boot
@start %WUAE%\WinUAE.exe -config="%UAEConfig%" -G
@exit /b

:Failed
@echo Error


Es un poco chapucero y podría ser más general, pero nos basta para probar. Como podéis ver, copia el a.out a la carpeta compartida con el nombre tempexe y lanza el WinUAE con la configuración que guardamos antes.

Probadlo y decidme si tenéis esta pantalla:
holarw.png
holarw.png (11.44 KiB) Visto 231 veces


Hala, ya tenemos nuestro primer programa en C. Ahora me toca irme al gimnasio. Luego posteo cómo crear un bat para compilar, cómo hacer lo propio con make y un makefile y cómo mezclar ensamblador y C.

No sé si alguien encontrará esto útil, pero ojalá subamos a más gente al carro de seguir el curso de Mlake... Eso por lo menos :)

Avatar de Usuario
Chema
Mensajes: 2219
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 1769 veces
Agradecimiento recibido: 577 veces
Contactar:

Re: Configurando toolchain C+asm para Amiga (y curso de Mlake)

Mensajepor Chema » 08 May 2019 23:43

Hala, ya hice algo de ejercicio, ya cené y voy a pasar a explicar ahora como mezclar C y ensamblador y compilarlo todo.

Lo primero veremos cómo llamar a asm desde C, de manera simple (lo he buscado por ahí, no me preguntéis detalles -no Vamos a ver ejemplos de llamadas a funciones con y sin parámetros y cómo pasar los parámetros en registros, que es lo más cómodo. Esto se hace mediante las directivas _reg(), que permiten decir en qué registro queremos pasar el valor, por ejemplo:

Código: Seleccionar todo

long add (__reg("d0") long a,__reg("d1") long b);


es el prototipo de una función con dos parámetros long a y b que se pasarán al ensamblador en los registros d0 y d1 respectivamente y que devuelve otro long. No he hecho muchas pruebas, pero supongo que es inmediato pasar otros tipos de datos.

Haremos este pequeño programa para probar:

Código: Seleccionar todo

#include <stdio.h>

long the_answer (void);
long add (__reg("d0") long a,__reg("d1") long b);

int main(void)
{
   long a;
   
   printf("Hola RetroWiki!!\n");
   printf("Mi primer programa Amiga\n");
   printf("Mezclando C y ASM\n");
   printf("========================\n");
   printf("Llamada a una funcion ASM sin parametros\n");
   a = the_answer();
   printf ("La respuesta es %ld\n",a);
   printf("Llamada a una funcion ASM con parametros\n");
   a=add(40,2);
   printf("La suma de 40 + 2 es %ld\n",a);
}


Y ahora toca implementar las funciones en asm... es fácil. Sólo recordar que las funciones en asm que exportemos a C tienen que ir precedidas del subrayado _ y que deben añadirse en la sección public. Ah, y el valor devuelto se pasa en d0. Podemos crear un fichero funciones.s que contenga:

Código: Seleccionar todo

_the_answer:
   move.l   #42,d0
   rts
_add:
   add.l   d1,d0
   rts
         
; Ahora van las declaraciones de funciones exportadas
   public _add
   public   _the_answer


Gracias al frontend vc podemos compilar c y asm con el mismo comando. así que vc main.c funciones.s compila ambos y genera el ejecutable, que podemos probar con nuestro run.bat

¿Ya lo habéis hecho? ¿Todo bien? Pues podemos automatizar el proceso para compilar todos los fuentes de la carpeta con un bat, por ejemplo:

Código: Seleccionar todo

:: Compilar con vc ...
@set TARGETS=
@for %%f in (*.c) do @set TARGETS=%TARGETS% %%f
@for %%f in (*.s) do @set TARGETS=%TARGETS% %%f
@for %%f in (*.asm) do @set TARGETS=%TARGETS% %%f

vc %TARGETS%

@if errorlevel 1 pause


Pero con el vbcc viene un make, así que podemos hacer un makefile con toda la potencia que eso aporta (uso de más herramientas, procesar sólo lo que haya cambiado,...). El makefile más sencillo podría ser:

Código: Seleccionar todo

# makefile para proyecto Amiga
CC = vc
src = $(wildcard *.c) $(wildcard *.s) $(wildcard *.asm)

LDFLAGS =
INCLUDEDIR=

default: $(src)
   $(CC) $(LDFLAGS) $(INCLUDEDIR) $(src)


Así podíamos hacer simplemente make y listo.

Esto es lo principal. Con esto ya podemos seguir los tutoriales de Mlake y empezar a hacer pruebas.

Sólo un par de cosas más. Junto con el vbcc vienen muchas cosas, entre ellas cabeceras muy útiles para nuestros proyectos en asm. Las más interesantes creo que están en la carpeta NDK13\include_i . Por ejemplo, si queremos usar el hw_examples.i que viene con el Hardware Reference Manual, éste incluye hardware/custom.i que está en esa carpeta. Podemos poner esa carpeta en la variable INCLUDEDIR de nuestro makefile.

Una última cosa: para convertir los gráficos estoy usando una aplicación fantástica llamada KingCon que saqué de este toolchain ya compilado por otro usuario http://aminet.net/package/dev/cross/Win ... Toolchain5 y que tiene más aplicaciones útiles que tengo que explorar -grin

Pues eso. Espero que no haya sido mucho rollo. Para los que ya tienen todo configurado igual esto es muy primitivo, pero ya digo que para los que estamos empezando creo que una guía así viene bien. A ver si entre todos la vamos mejorando.

Avatar de Usuario
minter
Mensajes: 2423
Registrado: 22 Jul 2014 18:51
Agradecido : 2224 veces
Agradecimiento recibido: 973 veces

Re: Configurando toolchain C+asm para Amiga (y curso de Mlake)

Mensajepor minter » 09 May 2019 08:13

Coñes Chema!
Esto te está empezando a divertir!
Que peligro!
La culpa la tiene Mlake! -507
Gracias por el aporte!!! Mola!!! :D


Volver a “Software & OS Amiga”

¿Quién está conectado?

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