Resumen:
3.Generando el Intel hexadecimal
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
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>