05 - que podemos hacer con ErickAssembly en KellyBootloader

Bueno, con KellyBootloader tenemos que considerar que no es un bootloader, es mas como una aplicacion que es capaz de ejecutar archvios .bin buscandolos en le raiz del alamacenamiento donde se encuentra el /efi/boot/bootx64.efi de la app, esto significa que kellybootloader es mas una aplicacion capaz de bootear binarios en formato ErickBinaryFormat (codigo fuente: KellyBootloader/.vs/msvc/ErickBinaryFormat.h at main · ErickStudios/KellyBootloader) haciendolo un bootloader aunque fakeado, muy util si quieres aprender de sistemas y quieres empezar con ErickAssembly

tenemos que tener en cuenta que hay ErickBootloader hay estas llamadas

1 - Print character

  • Uso : imprime un caracter
  • Funcion interna explicada : toma el valor del registro proporcionado en el parametro 2 de la instruccion , extrae su valor y imprime ese caracter en la consola

2 - Clear Screen

  • Uso: limpiar la pantalla
  • Funcion interna explicada : limpia la consola virtual del bootloader

3 - Change foreground color

  • Uso : cambia el color de el texto de la consola
  • Funcion interna expliaca : extrae el valor de el registro proporcionado en el parametro 2 de la instruccion y lo compara con los siguiente codigos, y cambia el color del texto de la consola al color que resulto, no voy a ser malo, asi que les voy a proporcionar la tabla de los codigos de colores
    • 1 - negro
    • 2 - negro claro
    • 3 - gris oscuro
    • 4 - gris
    • 5 - gris claro
    • 6 - blanco
    • 7 - rojo oscuro
    • 8 - rojo
    • 9 - rojo brillante
    • 10 - naranja oscuro
    • 11 - naranja
    • 12 - naranja brillante
    • 13 - amarillo oscuro
    • 14 - amarillo
    • 15 - amarillo claro (que parece color crema)
    • 16 - verde oscuro
    • 17 - verde
    • 18 - verde brillante (lo copie de los colores de consola de linux)
    • 19 - cian oscuro
    • 20 - cian
    • 21 - cian brillante
    • 22 - teal oscuro
    • 23 - teal
    • 24 - teal brillante
    • 25 - azul oscuro
    • 26 - azul
    • 27 - azul brillante (parece un tono de morado azuloso, el azul lo calque de los colores de linux)
    • si el codigo no es valido elijira gris

4 - Change background color

  • Uso : cambiar el color del fondo de la consola
  • Funcion interna explicada : usa los mismos codigos de colores que la llamada 3, solo que en vez de cambiar el color de el texto cambia el color del fondo

5 - set cursor x pos

  • Uso: mueve el cursor a una pocision en x
  • Funcion interna explicada : toma el valor del registro proporcionado en el parametro 2 de la instruccion , y el valor extraido se convertira en la posicion x del cursor (el de la consola, no el mouse)

7 - set cursor y pos

  • Uso: mueve el cursor a una pocision en y
  • Funcion interna explicada : toma el valor del registro proporcionado en el parametro 2 de la instruccion , y el valor extraido se convertira en la posicion y del cursor (el de la consola, no el mouse)

8 - print character without update screen

  • Uso : imprime un caracter sin actualizar la pantalla, perfecto para juegos que tengan que renderizarse rapido
  • Funcion interna explicada : es un coppy-paste de lo que hace la llamada 1 pero la diferencia es que la llamada 1 usa la funcion “printc” (para imprimir texto actualizando la pantalla) y la llamada 8 usa “printcu” (Print without update)

9 - Draw Screen manually

  • Uso : dibuja la pantalla manualmente
  • Funcion interna explicada : usa la funcion DrawScreen para dibujar el framebuffer

10 - Stall

  • Uso : espera una cantidad de microsegundos
  • Funcion interna explicada : toma el valor del registro proporcionado en el parametro 2 de la instruccion y el sistema uefi espera esa cantidad de microsegundos

11 - wait for a key

  • Uso: espera hasta que se presione una tecla
  • Funcion interna: usa la funcion gBS->WaitForEvent de gnu-efi

12 - read key

  • Uso : lee una tecla
  • Funcion interna explicada : modifica 2 registros , el primero es el registro que pusimos en el parametro 2 de la instruccion y ese registro pasara a ser el codigo de escaneo, el segundo registro que modifica es la direccion del registro que pusimos en el parametro 2 de la instruccion y le suma 1 y a el registro de esa direccion le asigna el caracter de la tecla

13 - obtener el tiempo

  • Uso : obtiene el tiempo
  • Funcion interna explicada : es muy complejo para explicar aqui que registros modifica :frowning:

14 - mapear memoria

  • Uso : mapea una memoria haciendo un buffer
  • Funcion interna explicada:
    1. guarda el valor del registro del parametro 2 de la instruccion, le suma 1 y obtiene el valor del registro en esa direccion obtenida, y lo guarda en una variable que llamaremos size
    2. llama AllocateMemory(size) y guarda la direccion donde empieza el buffer en el registro que especificamos en el parametro 2

16 - set buffer index

  • Uso : le da un valor a un item en un buffer
  • Funcion interna explicada :
    1. toma el valor del registro indicado en el parametro 2 como variable y lo guarda en u16 BufferToManipule
    2. primero le suma al registro indicado 1 direccion adelante guardandola en Direccion, despues obtiene el valor de Direccion y lo guarda en la variable u16 BufferItem
    3. le suma al la direccion del registro del parametro 2 unos 2 registros adelante y guarda esa direccion en u16 RedirectTo
    4. despues hace lo siguiente
memory_acces[RedirectTo] = memory_acces[(BufferToManipule + 1) + BufferItem];

17 - get buffer item

  • Uso : obtiene un item en un pool
  • Funcion interna : hace lo mismo que 17 pero en vez de modificarlo lo que hace es modificar el registro que tiene la direccion RedirectTo y ahi se guarda el valor del item

18 - print number without update screen

  • Uso : se preguntaran, donde esta el para imrpimirlo actualizando la pantalla, pues para ahorrarme hacer otra llamada solo hay esta, esta imprime el numero convertido en string
  • Funcion interna explicada : toma el valor del registro en el parametro 2 , y el numero guardado ahi lo conviert en CHAR16* (un array de caracteres imprimibles)

19 - print hex number without update screen

  • Uso : imprime un numero en formato hexadecimal (sin en “0x”) sin actualizar la pantalla
  • Funcion interna explicada : usa el mismo metodo que la llamada 18 pero en vez de imprimirlo en formato decimal, lo hace en hexadecimal

20 - free pool

  • Uso : libera un pool
  • Funcion interna explicada :
    1. toma el valor del registro del parametro 2 (que es donde se supone que deberia estar guardada la direccion del pool) y libera el pool

21 - boot a file

  • Uso : toma el valor de un pool y lo pasa como el parametro Name en una funcion que bootea un archivo
  • Funcion interna expliacada : YAAA POR FAVOR, YA MI CEREBRO NO PUEDE MAS, pero bueno, lo explicare …
    1. guarda el stack
    2. localiza el pool con la direccion tomada en el registro del parametro 2
    3. llama a la funcion para bootear el archivo

22 - print pool

  • Uso : imprime un pool
  • Funcion interna explicada : hace lo mismo que la llamada 22 pero en vez de usar el valor del pool para bootearlo con el nombre, imprime el pool en la consola

23 - readline

  • Uso : le pide al usuario leer una linea y luego crea un pool donde se guarda el resultado
  • Funcion interna explicada : pues, eso :confused:

24 - pool comparate

  • Uso : compara 2 pools
  • Funcion interna explicada : , A ESTE PUNTO tengo ganas de ponerles el codigo , pero para hacerlo mas facil , les pondre como funciona aun asi para que ustedes entiendan y yo me rompa la cabeza :smiling_face:, lo que hace es comparar con StrCmp el valor de el pool localizado con el valor del registro del parametro 2 como el primer parametro y el valor de 1 registro para adelante despues del registro del parametro 2

y esas fueron las llamadas al sistem- espera si es cierto, todavia me falta explicar que se puede hacer con ErickAssembly

bueno

Qe se puede hacer con ErickAssembly

  • hacer otro bootloader
  • hacer OS
  • hacer una aplicacion de bajo nivel
  • aprender solamente a como usar KellyBootloader

y ahora si , termino esto agradeciendoles de que hasta ahora aun no han movido ninguno de mis cursos de ErickAssembly a Off Topic

1 me gusta