Categorías
Ensamblador sjasm Programación

Hola mundo en ensamblador para MSX con visual studio code y sjasm

  1. Configurando el entorno
    1. Instalando sjasm
    2. Configurando la variable de entorno
    3. Instalando visual studio code
    4. Instalando la extensión retro assembler de vs code
  2. Programando
    1. Configurando terminales en vs code
    2. Compilando con sjasm
  3. Probando nuestro programa con openMSX

1.Configurando el entorno

1.1 Instalando sjasm

                Pincha aquí para descargar sjasm, también puedes ir a su web, una vez descargado, como es un ejecutable lo colocamos en C:\Program Files (x86):

1.2 Configurando la variable de entorno

Ahora configuramos la variable de entorno de windows para que esté localizable cuando llamemos a “sjasm.exe” desde cualquier directorio, para eso pinchamos en el icono de “Este equipo” y dentro otra vez cobre “Este equipo” botón derecho y elegimos propiedades:

Ahora configuración avanzada del sistema:

Y en la ventana que sale en la pestaña de Opciones abalanzadas pinchamos en variables de entorno:

Ahora editamos la variable path:

Por último añadimos una nueva entrada:

Para probar que todo ha ido bien, abrimos un terminal y ponemos sjasm:

1.3 Instalando visual studio code

Nos descargamos Visual studio code, también podemos ir a su web https://code.visualstudio.com/download

Creamos un directorio para nuestros proyectos, yo lo he llamado «Proyectos asm» y lo he puesto en mi escritorio, dentro de esta carpeta pulsamos el botón derecho del ratón y pinchamos en “open with code”:

1.4 Instalando la extensión retro assembler de vs code

Una vez abierto pinchamos en extensiones e instalamos la extensión Retro assembler, esta extensión va a ser nuestra ayuda para que nos coloree las directivas e instrucciones del z80:

Creamos un nuevo archivo con extensión asm (de assambler), nos fijamos si en la parte inferior derecha pome z80, en este caso vemos que no y tenemos que cambiarlo pinchando donde pone Retro Assambler (6502):

Elegimos Retro assambler (z80)

2.Programando

Copiamos y pegamos el siguiente texto:

        output "hola.bin"   ; debemos de poner esta instrucción o nos generaría un archivo.out, ponle espacios al principio
        
        
CHPUT:  equ #00A2           ; CHPUT es solo una etiqueta que se pone para no estar llamado a la subrutina 0042h
                            ; Muestra un carácter
                            ; MSX-1 BIOS subrutines
                            ; Definiciones de subrutinas creadas para la bios 
                            ; http://map.grauw.nl/resources/msxbios.php

    ;esto es oblgatorio para definir la cabecera de un archivo BIN
    ; https://www.faq.msxnet.org/suffix.html
    db   0FEh               ; ID archivo binario, siempre hay que poner el mismo 0FEh
    dw   INICIO             ; dirección de inicio
    dw   FINAL - 1          ; dirección final
    dw   MAIN               ; dircción del programa de ejecución (para cuando pongas r en bload"nombre_programa", r)
    
    
 
    org 33280               ; org se utiliza para decirle al z80 en que posición de memoria empieza nuestro programa (es la 33280 en decimal), en hezadecimal sería #8200
            
INICIO:
 
 
 
 
 
 

 

MAIN:
    ld  hl,mensaje      ; Almacena en los registro hl del z80 la dirección donde está la variable con el texto.
    call Print          ; llama a la rutina o método.
    ret                 ; devuelve el control a Basic.
    
    
    
;método print
Print:
    ld  a,(hl)          ; Lee el 1 byte de la dirección de la memoria indicada y lo almacena en el registro a del z80.
    and a               ; Actualiza la bandera z del registro F del z80 y la pone en 0 si no hay valor, and a también actualiza el flag c, p, v y s.
    ret z               ; Devuelve el cotrol al Main si la bandera z del registro F del z80 es 0
    call CHPUT          ; Llama a la subrutina 0042h de la Bios la cual imprime el caracter almacenado en el registro a del z80
    inc hl              ; incrementa el puntero de los registros hl para que señale al siguiente byte
    jr Print            ; Llama al métdo print para que lo vuelva a ejecutar
 
mensaje: db "Hola soy MSX, claro, pijo!! ",0	; Crea una dirección en la memoria con la etiqueta mensaje, el cero indica el fin del texto
	  
    
    
    
    
    
    
 
FINAL:


2.1 Configurando terminales en vs code

Ahora toca configurar la terminal, para eso pinchamos en Configuración:

En el campo que nos sale ponemos terminal.integrated, pinchamos en el que pone “Editar en settings.json” de Windows:

Debemos de poner la ruta donde está el cmd de Windows:

{
    "terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\cmd.exe",
    //Si queremos bash de linux
    //"terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe",
    //Si queremos powershell de windws
    //"terminal.integrated.shell.windows": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
    "window.zoomLevel": 0,
    "breadcrumbs.enabled": true
}


Ahora pinchamos en Ver y en terminal del menú superior:

Si no vemos nuestro terminal pinchamos en “Seleccionar el Shell predeterminado”:

2.2 Compilando con sjasm

Ahora toca compilar el archivo hola.asm, ponemos en el terminal “sjasm hola.asm”

Si todo ha ido bien no dará ningún error de compilación:

Esto generará 2 archivos el hola.bin con el código máquina y hola.lst que es un listado donde se detalla las instrucciones en código máquina y ensamblador.

3.Probando nuestro programa con openMSX

Ahora toca probar nuestro hola mundo, vamos al catapult y pinchamos en el botón Disk A y elegimos “Browse for this folder”, elegimos nuestra carpeta:

Pinchamos en Start

Ponemos en nuestro emulador files para ver los archivos dentro del emulador:

Ejecutamos nuestro programa con bload”hola.bin”,r

Lo último que debes de recordar es que cada vez que vuelvas a compilar tendrás que resetear el emulador para que vea los cambios para eso, presiona F10 dentro del emulador para que salda la consola de comandos:

Ahora escribe reset, presiona F10 de nuevo para que desaparezca la consola de comandos y podrás ver el resultado:

6 respuestas a «Hola mundo en ensamblador para MSX con visual studio code y sjasm»

La letra ñ o Ñ son los caracteres 164 y 165, prueba a escribir en basic
print chr$(165)
En este código tendrías que modificar mensaje db y escribir:
mensaje: db «la letra : «,164,» – «,165,0

La web de openMSX es esta https://openmsx.org/ , en su web podemos descargar la versión para instalar en Windows y la ejecutable en Windows, yo te recomiendo la versión ejecutable https://github.com/openMSX/openMSX/releases/download/RELEASE_19_1/openmsx-19.1-windows-vc-x64-bin.zip
Una vez descargada y descomprimida (por ejemplo) en el escritorio
Ahora toca actualizar las máquinas y extensiones de openMSX ya que por razones de los derechos de las Bios hay que ponerlas de forma pirata, para eso
descarga las máquinas y extensiones que puedes encontrar en https://download.file-hunter.com/System%20ROMs/
openmsx0
copia y pega el contenido del archivo descargado dentro la carpeta openmsx-19.1-windows-vc-x64-bin\share\systemroms
openmsx0-5
Ahora tienes que ir a la carpeta \openmsx-19.1-windows-vc-x64-bin\Catapult\bin y ejecutar catapult.exe y una vez abierto el programa catapult, selecciona Settings y Edit configuration:
openmsx1
En la ventana que sale pincha en los 3 puntos, selecciona el archivo \openmsx-19.1-windows-vc-x64-bin\openmsx.exe y pincha en OK
openmsx2
Comenzará la actualización de todas las máquinas con sus bios
openmsx3
Cuando haya terminado ya podrás seleccionar tu MSX favorito y jugar con el basic:
openmsx4
openmsx5

Deja una respuesta

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