EbfDevelopmentTools Curso - #1 - introduccion

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
    • Number el parametro a obtener , empieza con 0 como el primero
  • retorna
    • Cout el 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
    • Array el array
  • retorna
    • GetOn la longitud extraida

GetArrayItem

  • obtiene el item de un array
  • parametros
    • PtrTo el array
    • Item el item a obtener, se pasa una direccion como valor , no se permiten valores directos
  • retorna
    • ReturnOn el elemento extraido

SetArrayItem

  • cambia el valor de un item de un array
  • parametros
    • PtrTo el array
    • Item el item a obtener, solo valores directos
    • NewValue el nuevo valor, no se permiten valores directos

PtrSetArrayItem

  • cambia el valor de un item (como una variable) de un array
  • parametros
    • PtrTo el array
    • Item el item a obtener, no se permiten valores directos
    • NewValue el nuevo valor, no se permiten valores directos

CoppyToArray

  • copia el valor de un array a otro
  • parametros
    • PtrTo1 el array 1
    • PtrTo2 el array 2
    • Item1 el item a extraer del array 1, no se permiten valores literales
    • Item2 el 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
    • Array1 el array 1
    • Array2 el array 2
  • retorna
    • (LET*)256 1 si son iguales y 0 si no lo son

BufferNCmp

  • una comparacion de buffer con longitud maxima si if directo
  • parametros
    • Array1 el array 1
    • Array2 el array 2
    • Len la longitud a la que se termina la comparacion, solo valores literales
  • retorna
    • (LET*)256 1 si son iguales y 0 si no lo son

PtrLenBufferNCmp

  • BufferNCmp pero la longitud es un valor de una variable
  • parametros
    • Array1 el array 1
    • Array2 el array 2
      • Len la 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
    • Color el color, no se permite valores literales

SetBackgroundColor

  • cambia el color del fondo de la consola
  • parametros
    • Color el color, no se permite valores literales

SetCursorPos

  • cambia la posicion del cursor de la consola
  • parametros
    • X la nueva posicion en X, solo valores literales
    • Y la nueva posicion en Y, solo valores literales

WaitMicroseconds

  • espera una cantidad de microsegudos
  • parametros
    • Ms los microsegundos, solo valores literales

WaitKeyAndRead

  • espera a que se presione una tecla y lo lee
  • retorna
    • EfiKeyStructPtr como la tecla (use registros temporales como 1 para evitar perdidas de datos en variables)

GetTime

  • obtiene la fecha y hora
  • retorna
    • EfiTimeStructPtr la estructura en formato EfiTime

PrintNumber

  • imprime un numero en la consola
  • parametros
    • Number el numero, no hay version de puntero asi que usa_CallOut 18 {PunteroATuNumero}`

PrintHexNumber

  • imprime un numero hexadecimal en la consola sin el 0x
  • parametros
    • Number el numero, no hay version de puntero asi que usa_CallOut 19 {PunteroATuNumero}`

Atoi

  • convierte un texto a numero
  • parametros
    • Str el puntero al string
  • retorna
    • NumberCout como salida

Xtoi

* convierte un texto hexadecimal a numero
* parametros
* `Str` el puntero al string
* retorna
* `NumberCout` como salida

Shutdown

  • apaga la pc
  • usa call Shutdown por que no es un tapot

Reset

  • reinicia la pc
  • usa call Reset por que no es un tapot

PrintPool

  • imprimir un pool como string
  • parametros
    • Str el puntero al string

While

  • hace algo mientras una variable es true (vease (LET)1)
  • la funcion debe tener una instruction __asm ret y usa FUNCTION por que tapot es una macro y no una funcion a la que se puede llamar en tiempo de ejecucion
  • parametros
    • Var la variable, no se permiten valores literales
    • Function la funcion, no se permite un puntero a la funcion

DrawRectangle

  • dibuja un rectangulo
  • parametros
    • PosX la posicion en X (no se permiten valores literales)
    • PosY la posicion en Y (no se permiten valores literales)
    • SizeX el tamaño en X (no se permiten valores literales)
    • SizeY el tamaño en Y (no se permiten valores literales)
    • Red el valor del canal rojo (no se permiten valores literales)
    • Green el valor del canal verde (no se permiten valores literales)
    • Blue el 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
    • StrToSplitPtr el puntero al string a separar
    • Splitter el puntero al string separador
  • retorna
    • ReturnOn como 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
    • StrPtr el puntero al string a renplazar
    • OldStr el puntero al string original
    • NewStr el puntero al string que remplazara a OldStr
  • retorna
    • ReturnOn como la direccion al nuevo array con las direcciones de las separaciones

CmpAndJump

  • compara y salta
  • parametros
    • Value1 el operador 1 en una variable (no se aceptan valores literales)
    • Value2 el operador 2 en una variable (no se aceptan valores literales)
    • JumpIf saltar si retorno especificamente un estado de ComparatorType (solo valores literales)
    • JumpTo la etiqueta a la que saltara (un function, no se aceptan tapots, no se aceptan punteros a funciones)
    • SaveProgramCounter 1 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
    • JumpTo la etiqueta a la que se saltara
    • SaveProgramCounter la 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
    • PtrToCode el puntero al string que contiene el codigo

SaveMeInRam

  • guardar el codigo actual en la ram
  • retorna
    • SavePtrIn el 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 escaneo
    • UnicodeChar el caracter unicode

EfiTime

  • retornado por la llamada 13, espera no no lo digas
  • estructura
    • Second : el segundo
    • Minute : el minuto
    • Hour : la hora
    • Day : el dia del mes
    • Month : el mes
    • Year : el año

ArrayAllocationMethod

  • pasado como argumento por la llamada 14
  • estructura
    • PtrTo : donde retorna la direccion
    • Size : el tamaño

ConsoleSize

  • pasado como argumento y devuelto por la llamada 44
  • estructura
    • Colummns : las columnas
    • Rows : 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 :frowning:
    • Params : el puntero a los parametros que necesita la dll
    • ReturnValue : 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 automaticamente array [Index] NewValue lo 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
    • FileNamePool el nombre del archivo
  • retorna
    • FileNamePool como el contenido

optimizacion

ebfoptimization.heasm es un modulo que permite optimizacion

Funciones/tapots:

EditHighPartVar

  • edita la parte alta de una variable
  • parametros
    • VarToEdit la variable que edita
    • NewValue el nuevo valor, no se permiten valores literales

EditLowPartVar

  • edita la parte baja de una variable
  • parametros
    • VarToEdit la variable que edita
    • NewValue el nuevo valor, no se permiten valores literales

ReadHighPartVar

  • lee la parte alta de una variable
  • parametros
    • VarToEdit la variable que leera
  • retorna
    • ReturnOn como resultado

ReadLowPartVar

  • lee la parte baja de una variable
  • parametros
    • VarToEdit la variable que leera
  • retorna
    • ReturnOn como resultado
1 me gusta

¿Cuándo aprendiste tanto inglés?

Cualquier programador debe saber inglés, es algo universal, por que por ejemplo int viene de integre qué viene de entero, en js para una función es function, y en python es Def qué viene de define y viene de definir, aparte en duolingo he estado en la etapa 2,asi qué se mucho englis
Y gracias, y espero que les guste la librería y las herramientas de desarrollo quenhice

¿Y cuando fue que aprendiste inglés?