Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Graficos en ASM

  • 0 Respuestas
  • 184 Vistas

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

Desconectado phreda

  • *
  • Underc0der
  • Mensajes: 1
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« 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: [Seleccionar]
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: [Seleccionar]
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: [Seleccionar]
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


 

¿Te gustó el post? COMPARTILO!