Page 1 of 1

Custom Fonts with ASM defb

PostPosted: Tue Sep 12, 2017 12:26 pm
by Duefectu
Hola:

Quiero utilizar un set de caracteres personalizados que tengo en formato defb, pero no encuentro como hacerlo funcionar:

  Code:
REM Fuente personalizada
POKE UINTEGER 23606,@Fuente-256

SUB Fuente()
  ASM
    defb 0,128,128,64,23,.........
    defb ...
  END ASM
END SUB


Que estoy haciendo mal?

Gracias por vuestra ayuda!

Re: Custom Fonts with ASM defb

PostPosted: Tue Sep 12, 2017 1:11 pm
by boriel
Duefectu wrote:Hola:

Quiero utilizar un set de caracteres personalizados que tengo en formato defb, pero no encuentro como hacerlo funcionar:

  Code:
REM Fuente personalizada
POKE UINTEGER 23606,@Fuente-256

SUB Fuente()
  ASM
    defb 0,128,128,64,23,.........
    defb ...
  END ASM
END SUB


Que estoy haciendo mal?

Gracias por vuestra ayuda!

Esta bien. Es un buen truco usar lo que has hecho, pero tienes que declarar la SUB como FASTCALL. Así:
  Code:
SUB FASTCALL Fuente()
  ASM
    defb 0,128,128,64,23,.........
    defb ...
  END ASM
END SUB

Esto debería funcionar. Prueba y me dices! :roll:
Así mismo, si usas PRINT, prueba los efectos de PRINT BOLD 1; y PRINT ITALIC 1; por si te sirven para algo.

Re: Custom Fonts with ASM defb

PostPosted: Tue Sep 12, 2017 1:17 pm
by Duefectu
Gracias por tu ayuda @boriel

La verdad es que tenia un error en los defb, se me habían colado datos antes, por eso no me salían los caracteres correctos.
Por otra parte sin el FASTCALL, la dirección se desplaza 8 bytes, por lo que el poke debía ser "POKE UINTEGER 23606,@Font1-256+8".
Con el FASTCALL se queda en "POKE UINTEGER 23606,@Font1-256"

Por cierto, me encanta tu compilador. Me ha sorprendido la velocidad. He creado un juego en Assembler y estaba trabajando en uno en C con el Z88dk, pero este compilador de BASIC me ha alegrado bastante! :mrgreen:

Buen trabajo!

Re: Custom Fonts with ASM defb

PostPosted: Tue Sep 12, 2017 2:57 pm
by boriel
Lo del desplazamiento de 8 bytes es porque si no usas FASTCALL, el compilador meterá código de gestión de la Pila: las funciones FASTCALL están pensadas para ser implementadas en ensamblador y sólo un parámetro (que irá en registros).
Si se pone más de un parámetro del 2º en adelante irían en la pila y saldrá un Warning.

Me alegro de que te guste el compilador!! Si echas algo en falta o tienes alguna duda no dudes en preguntar.
También tienes la wiki (http://zxbasic.net) y el directorio examples/ que viene con el compilador, con un montón de ejemplos.