Curso kernel en ErickAssembly - #01 - la base imprimiendo un mensaje y cargando el sistema

Creo que no vale la pena hacerlo en el curso principal de ErickAssembly asi que lo hare en otro curso

Teoria

Tenemos que ver como gestionar la pantalla , el teclado y otras cosas

herramientas que necesitaremos

1 . KellyBootloader
2. ErickAssambler
3. la extension de vscode para el resaltado y autocmpletado de ErickAssembly
4. Vscode (si no lo tienes)

Pasos

  1. ErickAssembly

    • descargar la version correspondiente para el sistema
    • descomprimir el .zip
    • ya que lo tenemos , moverlo a donde recordemos junto con las dll
  2. KellyBootloader

    • decargas al .efi, y lo renombras a bootx64.efi
    • lo metes en una usb (opcionalmente si no te quieres cargar tu instalacion o grub) en la carpeta /efi/boot

Pre-trabajo

una vez descargamos todas las herramientas ya podemos empezar a hacer nuestro sistema
pero antes tenemos que elegir con que sintaxis de ErickAssembly podemos trabajar
hay dos opciones

  1. el normal: aunque sea mas legible que ensamblador normal, sigue siendo ensamblador
  2. El hlvc : este es mas reciente, tiene una sintaxis mas parecida a C

ahora si empezamos con el curso

vamos a empezar con algo facil para los que aun no se vieron el anterior curso

Ejemplo si elegiste Hlvc

aunque la sintaxis sea parecida a C, no es la misma, pero es mas facil

  • una limitacion: no puedes usar algunos system_calls importantisimos para la creacion del sistema asi que por ahora , solo te quedaras esatancado en el siguiente ejemplo por que , pues, como puedes hacer un SO sin esas llamadas, aun asi en alguna parte del curso, les enseñare un avance con los nuevos , pero hay una solucion que hice , puedes usar __asm linea para insertar codigo asm

aqui hay un ejemplo usando el hlvc

HightLevel[ 

    /**
    * loader.easm
    *
    * carga el OS
    **/

    /*para mantener compatibilidad con ASCII*/
    use "ASCII"

    /*
    configurar el archivo del cual el sistema booteara
    */
    BUFFER SystemFile AllocatePool->StrLen\s"SYSTEM.BIN"

    /**
    imprimir el texto
    **/
    Print "Hola\sdesde\sel\sKernel\ssimple"

    SystemFile [0] 'S'
    SystemFile [1] 'Y'
    SystemFile [2] 'S'
    SystemFile [3] 'T'
    SystemFile [4] 'E'
    SystemFile [5] 'M'
    SystemFile [6] '.'
    SystemFile [7] 'B'
    SystemFile [8] 'I'
    SystemFile [9] 'N'

    __asm system_call 21,SystemFile

 ]HightLevel

Ejemplo si eligiste el compilador normal

aqui tienes mas libertad, pero lo tienes que hacer todo manualmente, puedes hacer esto
para replicar el codigo anterior

EA
move 6,0
move 7,10
system_call 14,6
move 1,72
system_call 8,1
move 1,79
move 2,32
add 1,2
system_call 8,1
move 1,76
move 2,32
add 1,2
system_call 8,1
move 1,65
move 2,32
add 1,2
system_call 8,1
move 1,0
move 2,32
add 1,2
system_call 8,1
move 1,68
move 2,32
add 1,2
system_call 8,1
move 1,69
move 2,32
add 1,2
system_call 8,1
move 1,83
move 2,32
add 1,2
system_call 8,1
move 1,68
move 2,32
add 1,2
system_call 8,1
move 1,69
move 2,32
add 1,2
system_call 8,1
move 1,0
move 2,32
add 1,2
system_call 8,1
move 1,69
move 2,32
add 1,2
system_call 8,1
move 1,76
move 2,32
add 1,2
system_call 8,1
move 1,0
move 2,32
add 1,2
system_call 8,1
move 1,75
system_call 8,1
move 1,69
move 2,32
add 1,2
system_call 8,1
move 1,82
move 2,32
add 1,2
system_call 8,1
move 1,78
move 2,32
add 1,2
system_call 8,1
move 1,69
move 2,32
add 1,2
system_call 8,1
move 1,76
move 2,32
add 1,2
system_call 8,1
move 1,0
move 2,32
add 1,2
system_call 8,1
move 1,83
move 2,32
add 1,2
system_call 8,1
move 1,73
move 2,32
add 1,2
system_call 8,1
move 1,77
move 2,32
add 1,2
system_call 8,1
move 1,80
move 2,32
add 1,2
system_call 8,1
move 1,76
move 2,32
add 1,2
system_call 8,1
move 1,69
move 2,32
add 1,2
system_call 8,1
system_call 9,0
set_value_with_value 1,0
move 2,0
move 3,83
system_call 16,1
set_value_with_value 1,0
move 2,1
move 3,89
system_call 16,1
set_value_with_value 1,0
move 2,2
move 3,83
system_call 16,1
set_value_with_value 1,0
move 2,3
move 3,84
system_call 16,1
set_value_with_value 1,0
move 2,4
move 3,69
system_call 16,1
set_value_with_value 1,0
move 2,5
move 3,77
system_call 16,1
set_value_with_value 1,0
move 2,6
move 3,46
system_call 16,1
set_value_with_value 1,0
move 2,7
move 3,66
system_call 16,1
set_value_with_value 1,0
move 2,8
move 3,73
system_call 16,1
set_value_with_value 1,0
move 2,9
move 3,78
system_call 16,1
system_call 21,0
move 3,78
system_call 16,1

compilandolo

en mi caso, para ponerles el ejemplo, cree un sistema llamado AnyKOS, y lo cree usando hlvc

compilando un hlvc

para compilar un .easm con hlvc (hight-level compiler) debes usar el comando

root@local^:# hlvc /direccion/a/tu/archivo.easm

compilando con el ErickAssembly normal

en el prompt de ErickAssambler debes usar el comando

root@local^:# file /direccion/a/tu/archivo.easm

ejecucion

Al ejecutar ese codigo (en cualquiera de los dos casos) deberias ver esto