Aplib para ZX Basic

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

Aplib para ZX Basic

Mensajepor na_th_an » 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)')
Adjuntos
aplib.zip
(26.47 KiB) Descargado 398 veces
Como diría Rorshach: "Urm..."
nitrofurano
Mensajes: 3
Registrado: Mar, 01 Oct 2013, 17:53

Re: Aplib para ZX Basic

Mensajepor nitrofurano » Mar, 01 Oct 2013, 18:08

i need to try this library for stuff like this: https://dl.dropboxusercontent.com/u/795 ... 2e.tar.bz2 (an uncompressed slideshow made on ZX Basic, for msx2+ (laced screen12, in a 4mb .rom file, using ascii16 memory paging) - btw, i'm also curious to see more stuff done on ZX Basic on non-zxspectrum machines! ;)

Volver a “Ayuda”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados