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
14 - mapear memoria
- Uso : mapea una memoria haciendo un buffer
- Funcion interna explicada:
- 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
- llama
AllocateMemory(size)
y guarda la direccion donde empieza el buffer en el registro que especificamos en el parametro 2
- 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
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 enu16 BufferToManipule
2. primero le suma al registro indicado 1 direccion adelante guardandola enDireccion
, despues obtiene el valor deDireccion
y lo guarda en la variableu16 BufferItem
3. le suma al la direccion del registro del parametro 2 unos 2 registros adelante y guarda esa direccion enu16 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 :
- 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 …
- guarda el stack
- localiza el pool con la direccion tomada en el registro del parametro 2
- 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
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
, 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