Aplib para ZX Basic
Publicado: Lun, 11 Mar 2013, 08:12
ENGLISH READERS SCROLL DOWN A LITTLE BIT
Compresor/decompresor aPPack para ZX Basic
; aPPack decompressor
; original source by dwedit
; very slightly adapted by utopian
; optimized by Metalbrain
; Adapted for ZX Basic by na_th_an
Tenemos aquí un descompresor de appack directamente utilizable desde ZX Basic. Se trata de una subrutina a la que pasamos la dirección de un bloque comprimido en memoria con appack y una dirección donde descomprimir los datos.
Para utilizar el sistema, primero tendremos que usar el compresor desde una ventana de linea de comandos. En el paquete se encuentra el binario para Windows. Para mostrar el ejemplo, comprimiremos una pantalla completa, un archivo de 6912 bytes llamado pantalla.scr. El binario comprimido se almacenará en pantalla-c.bin:
$this->bbcode_second_pass_code('', 'apack pantalla.scr pantalla-c.bin')
El programa hará su trabajo y obtendremos pantalla-c.bin.
Para nuestro proyecto ZX Basic, crearemos un archivo almacen.bas donde almacenaremos nuestros archivos comprimidos incluyéndolos con INCBIN desde bloques Asm/End Asm, usando etiquetas para poder referirnos a cada bloque binario:
$this->bbcode_second_pass_code('', '' almacen.bas
Sub AlmacenDummyContainer()
pantalla1:
Asm
incbin "pantalla-c.bin"
End Asm
End Sub')
En nuestro proyecto principal, incluiremos este archivo de almacén y aplib.bas, donde se encuentra el descompresor:
$this->bbcode_second_pass_code('', '#include once "aplib.bas"
#include once "almacen.bas"')
Para descomprimir nuestra pantalla en la RAM de video, llamaremos al procedimiento aplibUnpack pasando primero la dirección del bloque comprimido, o sea, @pantalla1, seguido de la dirección de destino, esto es, 16384:
$this->bbcode_second_pass_code('', 'aplibUnpack (@pantalla1, 16384)')
aPPack Compresor/decompresor for ZX Basic
; aPPack decompressor
; original source by dwedit
; very slightly adapted by utopian
; optimized by Metalbrain
; Adapted for ZX Basic by na_th_an
Here's an appack decompressor you can use directly from ZX Basic. The routine gets a source address (where the compressed binary is) and a destination address (where to decompress the binary to).
We first need to compress our binaries. For example, let's compress a whole screen (6912 bytes) from a file called screen.scr. The compressor must be used from a command line window:
$this->bbcode_second_pass_code('', 'apack screen.scr screen-c.bin')
The compressor will do its job and we'll get screen-c.bin
In our ZX Basic project, we'll create an storage.bas file where we'll store our compressed binaries using INCBIN from within Asm/End Asm blocks, using labels to be able to refere to them:
$this->bbcode_second_pass_code('', '' storage.bas
Sub AlmacenDummyContainer()
screen1:
Asm
incbin "screen-c.bin"
End Asm
End Sub')
In our main BAS file, we include the decompressor and our storage file:
$this->bbcode_second_pass_code('', '#include once "aplib.bas"
#include once "storage.bas"')
To decompress our screen in video RAM, we just call the aplibUnpack sub passing the compressed binary address first, then the destination address:
$this->bbcode_second_pass_code('', 'aplibUnpack (@screen1, 16384)')
Compresor/decompresor aPPack para ZX Basic
; aPPack decompressor
; original source by dwedit
; very slightly adapted by utopian
; optimized by Metalbrain
; Adapted for ZX Basic by na_th_an
Tenemos aquí un descompresor de appack directamente utilizable desde ZX Basic. Se trata de una subrutina a la que pasamos la dirección de un bloque comprimido en memoria con appack y una dirección donde descomprimir los datos.
Para utilizar el sistema, primero tendremos que usar el compresor desde una ventana de linea de comandos. En el paquete se encuentra el binario para Windows. Para mostrar el ejemplo, comprimiremos una pantalla completa, un archivo de 6912 bytes llamado pantalla.scr. El binario comprimido se almacenará en pantalla-c.bin:
$this->bbcode_second_pass_code('', 'apack pantalla.scr pantalla-c.bin')
El programa hará su trabajo y obtendremos pantalla-c.bin.
Para nuestro proyecto ZX Basic, crearemos un archivo almacen.bas donde almacenaremos nuestros archivos comprimidos incluyéndolos con INCBIN desde bloques Asm/End Asm, usando etiquetas para poder referirnos a cada bloque binario:
$this->bbcode_second_pass_code('', '' almacen.bas
Sub AlmacenDummyContainer()
pantalla1:
Asm
incbin "pantalla-c.bin"
End Asm
End Sub')
En nuestro proyecto principal, incluiremos este archivo de almacén y aplib.bas, donde se encuentra el descompresor:
$this->bbcode_second_pass_code('', '#include once "aplib.bas"
#include once "almacen.bas"')
Para descomprimir nuestra pantalla en la RAM de video, llamaremos al procedimiento aplibUnpack pasando primero la dirección del bloque comprimido, o sea, @pantalla1, seguido de la dirección de destino, esto es, 16384:
$this->bbcode_second_pass_code('', 'aplibUnpack (@pantalla1, 16384)')
aPPack Compresor/decompresor for ZX Basic
; aPPack decompressor
; original source by dwedit
; very slightly adapted by utopian
; optimized by Metalbrain
; Adapted for ZX Basic by na_th_an
Here's an appack decompressor you can use directly from ZX Basic. The routine gets a source address (where the compressed binary is) and a destination address (where to decompress the binary to).
We first need to compress our binaries. For example, let's compress a whole screen (6912 bytes) from a file called screen.scr. The compressor must be used from a command line window:
$this->bbcode_second_pass_code('', 'apack screen.scr screen-c.bin')
The compressor will do its job and we'll get screen-c.bin
In our ZX Basic project, we'll create an storage.bas file where we'll store our compressed binaries using INCBIN from within Asm/End Asm blocks, using labels to be able to refere to them:
$this->bbcode_second_pass_code('', '' storage.bas
Sub AlmacenDummyContainer()
screen1:
Asm
incbin "screen-c.bin"
End Asm
End Sub')
In our main BAS file, we include the decompressor and our storage file:
$this->bbcode_second_pass_code('', '#include once "aplib.bas"
#include once "storage.bas"')
To decompress our screen in video RAM, we just call the aplibUnpack sub passing the compressed binary address first, then the destination address:
$this->bbcode_second_pass_code('', 'aplibUnpack (@screen1, 16384)')