Sqijer v1.0

Soporte técnico sobre los lanzamientos de MojonTwins y comentarios sobre los güegos. Ofrecemos soporte técnico con Fourspriter, te ayudamos con ZX Basic o Z88DK, te damos pistas some cómo saltarse un bicho y cosas así.

Moderador: na_th_an

Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Sqijer v1.0

Mensajepor na_th_an » Mar, 04 Oct 2011, 12:05

Sqijer v1.0

Sqijer v1.0 is a quick'n'dirty converter which takes a png image and turns it into ASM code which you can assemble and load into your speccy to get the image anywhere on screen (even from BASIC).

It's very basic. The image should be monocrhome, with black = PAPER and any colour = INK, with width and height multiple of 8. The thing is about drawing your image, convert it into code, modify that code with an ORG to tell it where to assemble, assemble it (with pasmo, for example), and go! The converter utility has been compiled for Windows, but the source code is included so you can compile it yourself (using freebasic) for linux, etc.

To explain how it works, we better show an example...

Tutorial

First of all we should draw a monochromatic image. I've drawn a robot sized 48x64 pixels (6x8 chars):
robor.png
robor.png (790 Bytes) Visto 41362 veces


Then we convert this image into code using sqijer.exe from the command line:
$this->bbcode_second_pass_code('', '> sqijer robor.png robor.asm 6 8 robor')

Parameters are: png file (input), asm file (output), width in chars, height in chars, and ASM label (useful if you want to make several and use all of them in your code).

So we get robor.asm. We just have to decide where to put it in memory. For example, $C000, that is, 49152. To achieve that, we edit our new robor.asm file and add this line at the beginning:
$this->bbcode_second_pass_code('', 'org 49152')

Then we assemble it using pasmo, for example:
$this->bbcode_second_pass_code('', '> pasmo robor.asm robor.bin robor-map.txt')

And now we get robor.bin, Speccy-ready.

We fire up our emulator, switch to BASIC, and, before anything, we better issue a...
$this->bbcode_second_pass_code('', 'CLEAR 49151')
So BASIC doesn't get in the way.

Now we load our binary at 49152 (in Spectaculatir is as easy as dragging and dropping robor.bin to the emulator window and type '49152' into the box that pops out).

Now, if ORG is the address where we have assembled and loaded the binary, the X coordinate is set POKEing it to ORG, the Y coordinate is set POKEing it to ORG+1, the colour to ORG+2, and everything is drawn if we call RANDOMIZE USR (ORG+3). Coordinates are character coordinates (x = 0 to 31, y = 0 to 23, as long as the graphic fits on screen - there's no clipping nor boundary checking, so be careful!). For example, let's paint our robot flashing in colours:

$this->bbcode_second_pass_code('', '10 LET x=10: LET y=10: LET c=1: LET ORG=49152
20 GOSUB 100
30 LET c=c+1: IF c=8 THEN LET c=1
40 GOTO 20
100 POKE ORG,x: POKE ORG+1,y: POKE ORG+2,c: RANDOMIZE USR (ORG+3): RETURN')
robor-test.z80
(4.83 KiB) Descargado 1790 veces


Download

Here's it. Enjoy. And submit games for the CSSCGC2011!
sqijer-1.0.zip
(103.22 KiB) Descargado 1788 veces


---

Sqijer v1.0

Sqijer v1.0 es un cutre-conversor que te pilla una imagen en png y te lo transforma en un código fuente ASM que cuando ensambles y cargues en tu Spectrum podrás llamar para imprimir dicha imagen.

Es muy cutre y básico. La imagen debe ser monocroma, con negro = PAPER y cualquier color = INK, y de dimensiones múltiplo de 8. El tema sería tener la imagen, convertirla a código, modificar ese código con un org que indique donde se va a cargar, ensamblarlo con el pasmo (por ejemplo) y listo para usar. La utilidad conversora funciona bajo windows, pero se adjunta el código fuente por si lo quieres compilar (usando freebasic) para linux, dos, etc...

Para ver como funciona, lo haremos con un ejemplo.

Tutorial

Primero dibujamos una imagen monocroma. Yo he dibujado un robor de 48 x 64 píxels (6 x 8 caracteres):
robor.png
robor.png (790 Bytes) Visto 41362 veces


Lo primero que tenemos que hacer es transformar esa imagen a código usando la utilidad sqijer.exe desde una ventana de linea de comandos:
$this->bbcode_second_pass_code('', '> sqijer robor.png robor.asm 6 8 robor')

Los parámetros son: archivo de entrada, archivo de salida, ancho en caracteres, alto en caracteres, y etiqueta asm (esto se usa por si queremos hacer muchos y repegarlos en el mismo archivo asm luego).

Obtenemos, pues robor.asm. Solo tenemos que decidir donde lo vamos a colocar en la memoria. Por ejemplo, 49152. Para ello, editamos el archivo robor.asm y añadimos, justo al principio:
$this->bbcode_second_pass_code('', 'org 49152')

Luego lo ensamblamos con el pasmo:
$this->bbcode_second_pass_code('', '> pasmo robor.asm robor.bin robor-map.txt')

Con lo que obtendremos robor.bin.

Ahora abrimos nuestro emulador, y, antes que nada, escribimos:
$this->bbcode_second_pass_code('', 'CLEAR 49151')
para que BASIC no moleste.

Ahora cargamos el binario en 49152 (en Spectaculator es tan sencillo como arrastrar robor.bin a la ventana y escribir 49152 en la caja de texto).

Una vez hecho esto, si ORG es la dirección donde lo hemos ensamblado, definiremos la coordenada X pokeándola en ORG, la Y en ORG+1, el color en ORG+2, y dibujaremos haciendo un RANDOMIZE USR (ORG+3). Por ejemplo, pintemos nuestro robor cambiando de color:

$this->bbcode_second_pass_code('', '10 LET x=10: LET y=10: LET c=1: LET ORG=49152
20 GOSUB 100
30 LET c=c+1: IF c=8 THEN LET c=1
40 GOTO 20
100 POKE ORG,x: POKE ORG+1,y: POKE ORG+2,c: RANDOMIZE USR (ORG+3): RETURN')
robor-test.z80
(4.83 KiB) Descargado 1790 veces


Descarga

Aquí está el paquetín. Descomprímelo donde más te guste.
sqijer-1.0.zip
(103.22 KiB) Descargado 1788 veces


http://www.youtube.com/watch?v=AnMqElsLpyI
Como diría Rorshach: "Urm..."

Volver a “Ayuda”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado