Graficos en ASM

  • 0 Respuestas
  • 551 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado phreda

  • *
  • Underc0der
  • Mensajes: 1
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email

Graficos en ASM

  • en: Septiembre 11, 2019, 04:13:41 pm
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:

Código: You are not allowed to view links. Register or Login
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:

Código: You are not allowed to view links. Register or Login
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

Código: You are not allowed to view links. Register or Login
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
You are not allowed to view links. Register or Login

Framework en 32 bits para window en fullscreen
You are not allowed to view links. Register or Login

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.

You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

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

You are not allowed to view links. Register or Login