Graficos en ASM

Iniciado por phreda, Septiembre 11, 2019, 04:13:41 PM

Tema anterior - Siguiente tema

0 Miembros y 2 Visitantes están viendo este tema.

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: php
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: php
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: php

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
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Framework en 32 bits para window en fullscreen
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta