Buenas.
Tengo un lenguaje de programación que no utiliza la consola sino que levanta una ventana en formato grafico y dibuja en este espacio como un framebuffer, cuando compilo a asm necesito un "framework" o una serie de rutinas básicas para interactuar con esta forma de trabajar.
Utilizo estas rutinas para enseñar asm ya que el uso de un determinado API del SO es una complicación que tiene que ver con el SO y no con ASM que es lo que pretendo enseñar. Ademas, usando esta aproximación podria (aunque no lo hice) cambiar de SO usando otro conjunto de rutinas.
La interface es muy simple:
Variables:
XRES ; resolucion horizontal (cte en ventana fija, variable en fullscreen)
YRES ; resolucion vertical (cte en ventana fija, variable en fullscreen)
SYSFRAME rd XRES*YRES ; espacio de memoria donde escribo en el buffer
SYSXYM dd 0 ; X e Y del puntero
SYSBM dd 0 ; estado de los botones del puntero
SYSKEY dd 0 ; tecla presionada
FREE_MEM dd 0 ; inicio de memoria libre
Funciones:
SYSUPDATE: ; ( -- ) ; actualiza eventos y variables del sistema,
SYSEND: ; ( -- ) ; fin del programa
SYSREDRAW: ; ( -- ) ; copia a la ventana el buffer de pixels
SYSMSEC: ; ( -- msec ) ; retorna los milisegundos del sistema
SYSTIME: ; ( -- s m h ) ; retorna hora,minutos y segundos
SYSDATE: ; ( -- y m d ) ; retorna dia, mes y año
SYSLOAD: ; ( 'from "filename" -- 'to ) ; carga archivo en memoria
SYSSAVE: ; ( 'from cnt "filename" -- ) ; graba memoria en archivo
SYSAPPEND: ; ( 'from cnt "filename" -- ) ; agrega memoria en archivo
SYSFFIRST: ; ( "path" -- fdd ) ; lista Carpetas
SYSFNEXT: ; ( -- fdd/0) ; recorre carpetas
Aunque no es posible hacer todo con estas llamadas la idea es mantener al mínimo la conexion con el SO, con un poco de cuidado es hasta posible generar un Booteable con esta funcionalidad
A partir de este molde (o framework) se incluye code.asm y data.asm con las definiciones de codigo y datos generados por el compilador, aunque es posible escribir directamente.
por ejemplo, dibujar pixels con el mouse seria algo asi
dibujo:
call SYSCLS
loop2:
mov eax, [SYSXYM]
mov ebx,eax
shr ebx,16
and eax,$ffff ; eax = X ebx =Y
imul ebx,ebx,XRES
add eax,ebx
lea edi,[SYSFRAME+eax*4]
mov dword [edi],$ffffff ; color blanco
call SYSREDRAW ; pone en pantalla
call SYSUPDATE ; actualiza
cmp [SYSKEY],1 ; bucle mientras no se toca escape
jne loop2
ret
No veo como subir archivos, dejo los links
Framework en 32 bits para window en ventana
https://github.com/phreda4/reda4/blob/master/r4asm/r4fasm.asm
Framework en 32 bits para window en fullscreen
https://github.com/phreda4/reda4/blob/master/r4asm/r4fasmfull.asm
Hace poco termine el framework para 64bits pero en algunas maquinas no anda y no se porque, si alguno quiere probar si lo puede hacer andar y comentarme, lo agradezco.
https://github.com/phreda4/reda4/blob/master/r4asm/r4fasm64.asm
https://github.com/phreda4/reda4/blob/master/r4asm/code64.asm
https://github.com/phreda4/reda4/blob/master/r4asm/data64.asm
la forma de ensamblar es con FASM, sin instalar nada, solamente descomprimir en carpeta, poner estos tres archivos y arrastrar f4asm64.asm a FASMW y RUN... funciona? en mi maquina si, en unas maquinas de la facu NO....
bien, acepto quejas, dudas, opiniones, criticas, sospechas, etc.
Saludos