Categorías
Ensamblador SDASZ80 (SDCC) Programación

Hola mundo con sdasz80 (sdcc)

Resumen:

1.Escribiendo el código

2.Ensamblando a z80

3.Generando el Intel hexadecimal

4.Generando el binario MSX

5.Copiando el sistema operativo MSX-DOS

6.Creamos el script de openmsx y lo ejecutamos

7.Creando el make.bat para no escribir mucho

8.Enlazando archivos .asm

Puedes bajarte el proyecto pinchando aquí.

1.Escribiendo el código

Creamos un archivo nuevo. Lo llamamos code.s y le ponemos este código:

.globl _main ;esta función será vista desde el exterior, tambien se podría poner _main:: en su definición y también sería global
.area _HEADER (ABS)
    .org		#0x100 

.area _CODE ;El compilador sdasz80 necesita que le definamos donde está el area de código
_main:
ld c,#0x9 ;Le metemos el 9 en el registro c
ld de,#texto ;Le metemos el texto en los registros de
call #0x0005 ;Llamamos a la turina 0005
ret


.area _DATA ;El compilador sdasz80 necesita que le definamos una area de datos (donde estará nuestras variables)
texto:
.ascii "Hola MSX claro pijo desde com$" ;En sdasz80 los strings se ponen así
enter:
.db #0x0d,#0x0a,'$' ;Forma utilizada simpre para decirle que ha terminado el string

2.Ensamblando a z80

Suponiendo que tengamos el sdcc instalado probamos el comando sdasz80 para ver si el compilador funciona:

Perfecto! Funciona!, ahora compilamos el ensamblador a z80, esto nos generará un archivo.rel, ponemos:

sdasz80 -l -o code.s

el -l es para que genere un archivo de símbolos donde explica como a hecho la compilación , el -o para que genere un archivo objeto:

3.Generando el Intel hexadecimal

Ponemos:

sdcc -mz80 --code-loc 0x100 --data-loc 0x0 --no-std-crt0 code.rel

Esto generará el famoso archivo.ihx

4.Generando el binario MSX

Descargamos el hex2bin pinchando aquí y lo ponemos junto a los archivos.

Ponemos

hex2bin -e com code.ihx

5.Copiando el sistema operativo MSX-DOS

Pinchamos aquí para bajar el sistema operativo y copiamos los 2 archivos junto a los otros:

6.Creamos el script de openmsx y lo ejecutamos

Escribimos en un archivo llamado “emul_start_config.txt” esto:

machine Philips_NMS_8255
ext msxdos2
ext gfx9000
bind F12 cycle videosource
plug joyporta mouse
plug printerport simpl
diska .



Ahor aponemos en el terminal del visual studio code esto:

start C:\Users\Usuario_windows\localizacion_de_tu_openmsx\openmsx --script emul_start_config.txt

En mi caso es: start C:\Users\Casa\Desktop\openmsx-0.15.0-windows-vc-x64-bin\openmsx -script emul_start_config.txt

Ponemos code.com en nuestro emulador:

7.Creando el make.bat para no escribir mucho

Creamos un nuevo archivo llamado “make.bat” y ponemos los comandos anteriores, recuerda que la ruta de mi openmsx no es la tuya:

cls
sdasz80 -l -o code.s
sdcc -mz80 --code-loc 0x100 --data-loc 0x0 --no-std-crt0 code.rel
hex2bin -e com code.ihx
start C:\Users\Casa\Desktop\openmsx-0.15.0-windows-vc-x64-bin\openmsx -script emul_start_config.txt

8.Enlazando archivos .asm

8.1 Creando el archive “functions.s”:

Nos llevamos las fucntiones a este archivo:

_print1:
    ld c,#0x9 ;Le metemos el 9 en el registro c
    ld de,#texto1 ;Le metemos el texto en los registros de
    call #0x0005 ;Llamamos a la turina 0005
    ret 

_print2:
    ld c,#0x9 ;Le metemos el 9 en el registro c
    ld de,#texto2 ;Le metemos el texto en los registros de
    call #0x0005 ;Llamamos a la turina 0005
    ret 



8.2 Creamos el archivo “data.s”

Nos llevamos los datos a este archivo:

texto2:
.ascii "Segundo texto$" ;En sdasz80 los strings se ponen así
enter:
texto1:
.ascii "Hola MSX claro pijo desde com$" ;En sdasz80 los strings se ponen así

.db #0x0d,#0x0a,'$' ;Forma utilizada simpre para decirle que ha terminado el string

8.3 El main o archivo code.s quedaría así:

.globl _main ;esta función será vista desde el exterior, tambien se podría poner _main:: en su definición y también sería global

.area _HEADER (ABS)
    .org		#0x100 

.area _CODE ;El compilador sdasz80 necesita que le definamos donde está el area de código
.include "funtions.s"
_main:
    call _print1
    ret
ret

.area _DATA ;El compilador sdasz80 necesita que le definamos una area de datos (donde estará nuestras variables)
.include "data.s"

Ahora compilamos:

Es posible juntar todos los rel para crear una librería con este comando:

sdar -rc <library name>.lib <list of .rel files>

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *