primero tenemos que preguntarnos, para que? , como sera? , que caracteristicas tendra?
bueno , es posible hacer uno primero te proporcionare una base simple para la carga de archivos tendras que tener la siguiente jerarquia en tu projecto
/proyecto
/src
/boot
/bootloader.lima
/shell.lima
/fat12.lima
/makelima.mkl
ahora en proyecto/src/fat12.lima pon el siguiente codigo
# las llamadas al sistema de archivos
[intersegmental]
message fat12::action
# verificar si queremos cargar el sistema de archivos
var
.cnd
=
(@ScratchVar(_action)=="0x01")
# si es verdad saltar a la accion 0
jt
0
__endprog__
# 0 (load fs)
#
# Resumen:
# cargar el sistema de archvios
#
section
0
# saltar al main del fs
jump
0.Main
# indicar que se estan cargando los archivos
echo "loading files..."
# only vfat12 , the subdirs cant be load
# this loads the files of your real pc in the path where is the uefi executable and coppy it to the
# Z hard disk
# Main
#
# Resumen:
# la copia
#
# Params:
# @(your files in the fd dir): para copiar al disco virtual
# @(obiusly your personal files if you want): pero es necesario para que puedas cargar los archivos
#
section
0.Main
# nota : cualquier cambio hecho no se guardara por que hace una copia en memoria
.
var
file_to_load
=
0
#
# obtener los archivos en la carpeta actual
#
mov
@eax
"/dir countf"
# enviar el comando
%^"!p"
# establezer loa archivos maximos a cargar
var
max_files
=
@ScratchVar(_returned)
# ir al primer elemento del array (0)
var
max_files
-=
1
# ir a la accion
jump
0.load
__endprog__
# load
#
# Resumen:
# carga los archivos al sistema
#
# Params:
# @max_files: la cantidad maxima de archivos
# @file_to_load: el punto de entrada (la variable del archivo actual)
#
section
0.load
#
# declarar las variables
#
var
name
=
prototype
var
content
=
prototype
#
# obtener la infformacion del archivo
#
# nombre de archivo
# ajustar el comando a el comando para obtener el nombre
mov
@eax
"/file_gName"
# el item del archivo
mov
@bx
file_to_load
# mandar el comando
%^"!p"
# hacer la copia
var
name
=
@ScratchVar(_returned)
# contenido del archivo
# ajustar el comando a el comando para obtener el contenido
mov
@eax
"/file_gContent"
# el item del archivo
mov
@bx
file_to_load
# mandar el comando
%^"!p"
# hacer una copia
var
content
=
@ScratchVar(_returned)
#
# crear el archivo
#
# ahora si crearlo
mov
"Z->"(..)name
content
# verificar el archivo y cual es
echo "file "(..)name(..)" has been loaded."
# ajustar la variable de condiciones para ver si supero los archivos maximos
var
.cnd
=
(file_to_load==max_files)
# siguiente archivo
var
file_to_load
+=
1
# si no lo supero cargar el siguiente archivo
jf
0.load
# next file
# si ya se cargaron todos detener el proceso
__endprog__
[endmsg]
en shell.lima ponga el siguiente contenido
# la rutina del la terminal
[intersegmental]
message shell()
# el bucle
section
.loop
echo "LemonadeOS> "
# aqui agrega el sistema de comandos
jump
.loop
[endmsg]
y en bootloader.lima pongan el siguiente contenido
org
0
# cargar el sistema en el punto 0 de la memoria
jump
0
# importar las funciones del sistema de archivos
import
src/fat12
;
# importar las funciones de la terminal
import
src/shell
;
# 0
#
# Resumen:
# el inicio del arranque
#
section
0
# la accion que establezimos para cargar el sistema de archivos
mov
_action
0x01
# mandar el mensaje a nuestro sistema de archivos
sendmw fat12::action
# ir a la termina
sendmw shell()
__endprog__
ahora si ya tiene Lim22, (en windows o en wine) en makelima.mkl ponga el siguiente contenido
# compile the bootloader
package "/src/boot/bootloader.lima" -> convert_to -> "bin/bootx64.lima"
ejecute el makelima.mkl con el LimaInterpreter.exe y luego ejecute el proyecto/bin/bootx64.lima que se genero en el interprete y listo , les deberia funcionar , a mi no me funciono el loop de la terminal pero seguramente volviendo a las 7 me pondre a arreglar el interprete