para entender la libreria tenemos que leer la documentacion de cada cosa, puedes ver el repositorio de EbfDevelopmentTools en ErickStudios/EbfDevelopmentTools: una herramienta de desarrollo para ErickBinaryFormat con libreria std para KellyBootloader ejemplos y usos reales en dependencias oficiales para KellyBootloader
ahora si continuemos
Bienvenido a la documentacion de EbfDevelopmentTools
nos importa la facilidad de uso y la portabilidad de un compilar una vez, ejecutar donde sea y aparte sin sistema operativo
aqui te documentamos el uso de la libreria
Argumentos
ebfargs.heasm es un modulo que permite obtener parametros de la shell con la que se llamo el programa
Funciones/tapots:
GetParam
- obtener el numero de parametro
- parametros
Numberel parametro a obtener , empieza con 0 como el primero
- retorna
Coutel puntero al array
Notas: algunas veces al no llamar desde la shell puede que no pase nada al leer los parametros o puede que cause una excepcion y ErickBinaryFormat se cuelgue, asegurate de evitar casos como estos verificando punteros nulos
Arrays
ebfarrays.heasm es un modulo que permite modificar arrays
Funciones/tapots:
GetArrayLength
- obtiene la longitud de un array
- parametros
Arrayel array
- retorna
GetOnla longitud extraida
GetArrayItem
- obtiene el item de un array
- parametros
PtrToel arrayItemel item a obtener, se pasa una direccion como valor , no se permiten valores directos
- retorna
ReturnOnel elemento extraido
SetArrayItem
- cambia el valor de un item de un array
- parametros
PtrToel arrayItemel item a obtener, solo valores directosNewValueel nuevo valor, no se permiten valores directos
PtrSetArrayItem
- cambia el valor de un item (como una variable) de un array
- parametros
PtrToel arrayItemel item a obtener, no se permiten valores directosNewValueel nuevo valor, no se permiten valores directos
CoppyToArray
- copia el valor de un array a otro
- parametros
PtrTo1el array 1PtrTo2el array 2Item1el item a extraer del array 1, no se permiten valores literalesItem2el item al cual se le copiara el item del array 1 al del 2, solo se permiten valores directos
BufferCmp
- una comparacion de buffer si if directo
- parametros
Array1el array 1Array2el array 2
- retorna
(LET*)2561 si son iguales y 0 si no lo son
BufferNCmp
- una comparacion de buffer con longitud maxima si if directo
- parametros
Array1el array 1Array2el array 2Lenla longitud a la que se termina la comparacion, solo valores literales
- retorna
(LET*)2561 si son iguales y 0 si no lo son
PtrLenBufferNCmp
BufferNCmppero la longitud es un valor de una variable- parametros
Array1el array 1Array2el array 2Lenla longitud a la que se termina la comparacion, no se permiten valores literales
funciones que te facilitan la vida
ebfbegimmers.heasm es un modulo que proporciona funciones rapidas
Enums/macros:
- EbfNullPtr
comparaciones avanzadas
- ComparatorType_IfEqual
- ComparatorType_IfGreater
- ComparatorType_IfNotGreater
- ComparatorType_JumpsAnyWays
codigos de escaneo de teclas
- SCAN_NULL
- SCAN_UP
- SCAN_DOWN
- SCAN_RIGHT
- SCAN_LEFT
- SCAN_HOME
- SCAN_END
- SCAN_INSERT
- SCAN_DELETE
- SCAN_PAGE_UP
- SCAN_PAGE_DOWN
- SCAN_F1
- SCAN_F2
- SCAN_F3
- SCAN_F4
- SCAN_F5
- SCAN_F6
- SCAN_F7
- SCAN_F8
- SCAN_F9
- SCAN_F10
- SCAN_F11
- SCAN_F12
- SCAN_ESC
colores de consola
- ConsoleColor_black
- ConsoleColor_lightblack
- ConsoleColor_darkgray
- ConsoleColor_gray
- ConsoleColor_lightgray
- ConsoleColor_white
- ConsoleColor_darkred
- ConsoleColor_red
- ConsoleColor_brightred
- ConsoleColor_darkorange
- ConsoleColor_orange
- ConsoleColor_brightorange
- ConsoleColor_darkyellow
- ConsoleColor_yellow
- ConsoleColor_brightyellow
- ConsoleColor_darkgreen
- ConsoleColor_green
- ConsoleColor_brightgreen
- ConsoleColor_darkcyan
- ConsoleColor_cyan
- ConsoleColor_brightcyan
- ConsoleColor_darkteal
- ConsoleColor_teal
- ConsoleColor_brightteal
- ConsoleColor_darkblue
- ConsoleColor_blue
- ConsoleColor_brightblue
Funciones/tapots:
solo se mencionaran las funciones que son basicas para no marear a los principiantes, tal vez no sepan que es OR , MASK y XOR, igualmente la documentacion esta en el archivo
SetForegroundColor
- cambia el color del texto de la consola
- parametros
Colorel color, no se permite valores literales
SetBackgroundColor
- cambia el color del fondo de la consola
- parametros
Colorel color, no se permite valores literales
SetCursorPos
- cambia la posicion del cursor de la consola
- parametros
Xla nueva posicion en X, solo valores literalesYla nueva posicion en Y, solo valores literales
WaitMicroseconds
- espera una cantidad de microsegudos
- parametros
Mslos microsegundos, solo valores literales
WaitKeyAndRead
- espera a que se presione una tecla y lo lee
- retorna
EfiKeyStructPtrcomo la tecla (use registros temporales como 1 para evitar perdidas de datos en variables)
GetTime
- obtiene la fecha y hora
- retorna
EfiTimeStructPtrla estructura en formato EfiTime
PrintNumber
- imprime un numero en la consola
- parametros
Numberel numero, no hay version de puntero asi que usa_CallOut 18 {PunteroATuNumero}`
PrintHexNumber
- imprime un numero hexadecimal en la consola sin el
0x - parametros
Numberel numero, no hay version de puntero asi que usa_CallOut 19 {PunteroATuNumero}`
Atoi
- convierte un texto a numero
- parametros
Strel puntero al string
- retorna
NumberCoutcomo salida
Xtoi
* convierte un texto hexadecimal a numero
* parametros
* `Str` el puntero al string
* retorna
* `NumberCout` como salida
Shutdown
- apaga la pc
- usa
call Shutdownpor que no es un tapot
Reset
- reinicia la pc
- usa
call Resetpor que no es un tapot
PrintPool
- imprimir un pool como string
- parametros
Strel puntero al string
While
- hace algo mientras una variable es true (vease (LET)1)
- la funcion debe tener una instruction
__asm rety usaFUNCTIONpor que tapot es una macro y no una funcion a la que se puede llamar en tiempo de ejecucion - parametros
Varla variable, no se permiten valores literalesFunctionla funcion, no se permite un puntero a la funcion
DrawRectangle
- dibuja un rectangulo
- parametros
PosXla posicion en X (no se permiten valores literales)PosYla posicion en Y (no se permiten valores literales)SizeXel tamaño en X (no se permiten valores literales)SizeYel tamaño en Y (no se permiten valores literales)Redel valor del canal rojo (no se permiten valores literales)Greenel valor del canal verde (no se permiten valores literales)Blueel valor del canal azul (no se permiten valores literales)
SplitStr
- recuerda, tenga a mano una copia de respañdo del original por que no se liberara solo de la memoria y al perder la direccion del original nunca podra liberarlo y se acomularan en la memoria
- separa un string
- parametros
StrToSplitPtrel puntero al string a separarSplitterel puntero al string separador
- retorna
ReturnOncomo la direccion al nuevo array con las direcciones de las separaciones
StrReplace
- recuerda, tenga a mano una copia de respañdo del original por que no se liberara solo de la memoria y al perder la direccion del original nunca podra liberarlo y se acomularan en la memoria
- remplaza un por otro
- parametros
StrPtrel puntero al string a renplazarOldStrel puntero al string originalNewStrel puntero al string que remplazara a OldStr
- retorna
ReturnOncomo la direccion al nuevo array con las direcciones de las separaciones
CmpAndJump
- compara y salta
- parametros
Value1el operador 1 en una variable (no se aceptan valores literales)Value2el operador 2 en una variable (no se aceptan valores literales)JumpIfsaltar si retorno especificamente un estado de ComparatorType (solo valores literales)JumpTola etiqueta a la que saltara (un function, no se aceptan tapots, no se aceptan punteros a funciones)SaveProgramCounter1 si se quiere guardar el puntero de instrucciones para usar ret para volver al mismo lugar y seguir, si es 0 no se guardara
IfManual
- un if manual
- parametros
JumpTola etiqueta a la que se saltaraSaveProgramCounterla posibilidad de hacer ret para continuar, 0 si no, 1 si se desea
llamadas
ebfcall.heasm es un modulo para ejecutar y manejar codigo en la ram
Funciones/tapots:
ExecuteCodeFromRam
- ejecuta codigo en la ram
- parametros
PtrToCodeel puntero al string que contiene el codigo
SaveMeInRam
- guardar el codigo actual en la ram
- retorna
SavePtrInel puntero al codigo guardado
estructuras que facilitan todo
ebfclass.heasm es un modulo que proporciona varias estructuras
Swincs (Estructuras):
algunas no se mencionan por que ya hay tapots en ebfbegimmers.heasm que ya lo facilitan mas y aparte puede usar registros temporales mientras que las instancias no por que usan variables y ocupan espacio
EfiKey
- retornado por la llamada 12
- estructura
ScanCode: el codigo de escaneoUnicodeCharel caracter unicode
EfiTime
- retornado por la llamada 13, espera no no lo digas
- estructura
Second: el segundoMinute: el minutoHour: la horaDay: el dia del mesMonth: el mesYear: el año
ArrayAllocationMethod
- pasado como argumento por la llamada 14
- estructura
PtrTo: donde retorna la direccionSize: el tamaño
ConsoleSize
- pasado como argumento y devuelto por la llamada 44
- estructura
Colummns: las columnasRows: las lineas
librerias dinamicas
ebfdllspc.heasm es un modulo que contiene la definicion de una llamada a una dll
Swincs (Estructuras):
DllParams
- parametros que necesita una dll para cargar su maximo esplendor
- estructura
ReasonForCall: la rason por la que se llamo, aqui no puedo establecer un standart por que cada dll tiene su propia manera de usar el ReasonForCall, tendras que leer la documentacion de la libreria que usaras si es que tiene
Params: el puntero a los parametros que necesita la dllReturnValue: lo pongo como let por que no se que retornara cada dll, si es un valor normal pues que bien, si es un array, pues como let y array se comportan internamente de la misma manera por que depende solo de como lo use el usuario, array solo es una convension de let para que sea mas entendible y comodo para la logica y la comprension del programador, si let tiene un valor literal funciona y si apunta a un array pues automaticamentearray [Index] NewValuelo sabe y lo maneja bien, no te preocupes esta bien, si?
DllIO
instancia de DllParams
manejo de archivos
ebffs.heasm es un modulo para interactuar con el fs, lamentablemente no se puede escribir por que como en QEMU VFAT no funciona bien entonces me evito destruir el FS de alguno de ustedes por no saber si la manera en la que se escribe es correcta o no
Funciones/tapots:
ExecuteFile
* ejecuta un archivo desde el fs
* parametros
* `FileNamePool` el string que contiene el nombre y direccion del archivo
LoadFileToMem
- cargar un archivo en la ram
- parametros
FileNamePoolel nombre del archivo
- retorna
FileNamePoolcomo el contenido
optimizacion
ebfoptimization.heasm es un modulo que permite optimizacion
Funciones/tapots:
EditHighPartVar
- edita la parte alta de una variable
- parametros
VarToEditla variable que editaNewValueel nuevo valor, no se permiten valores literales
EditLowPartVar
- edita la parte baja de una variable
- parametros
VarToEditla variable que editaNewValueel nuevo valor, no se permiten valores literales
ReadHighPartVar
- lee la parte alta de una variable
- parametros
VarToEditla variable que leera
- retorna
ReturnOncomo resultado
ReadLowPartVar
- lee la parte baja de una variable
- parametros
VarToEditla variable que leera
- retorna
ReturnOncomo resultado