sources d'Aplib PC 0.43 + aPPackWin.exe + appack.exe
NOTICE TEXTE n° 1 (4.82 Ko)
Aplib Z80
---------
T&J/GPA le 18/01/2008
Aplib est un librairie de compactage developpee par Jorgen Ibsen, et
qui est diffusee commercialement pour des systemes et plateformes
recents. Pour une utilisation personnelle, l'usage de la librairie et
des petits outils associes est gratuit.
Contrairement a d'autres compacteurs, il n'a pas ete developpe pour
des ordinateurs prehistoriques, mais bien pour le monde PC. Ceci
explique en partie sa relative discretion dans le monde 8 bits.
Ce, jusqu'a ce que CNGSoft adapte sur Z80 la routine de decompression
en 2006 et la diffuse sur un blog. Elle est depuis restee dans l'ombre
chez nous autres francais alors que Aplib est un des meilleurs
compacteurs existant !
C'est en lisant un sujet sur le site espagnol Amstrad.Es que je suis
tombe dessus. Pas de bol, le source mis a disposition par CNGSoft
n'etait pas utilisable directement sous Maxam, je l'ai donc remis en
forme pour etre utilisable directement depuis un CPC.
Ce petit document vous explique comment utiliser AplibZ80 sur un CPC,
et profiter ainsi du taux de compactage impressionnant de ce logiciel.
Il se paie le luxe d'etre un poil meilleur que Exomizer, car sa routine
de decompression est plus courte et plus rapide.
L'archive contient les fichiers suivants :
APLIBZ80.TXT : le texte que vous lisez
APLIBZ80.DSK : image disque CPC avec le source Maxam et un exemple
de compactage de page ecran (Ninja Commando C64)
APLIB-0.43.ZIP : les sources d'Aplib PC, pour que l'auteur soit content.
APPACK.EXE : exemple de compacteur modifie par Dadman
APPacKwin.EXE : Meme chose, mais avec une interface
Rappel, si vous diffusez commercialement vos oeuvres (on peut toujours
rever, n'est ce pas :-) , il faudra acheter le droit d'utiliser Aplib.
Sources sur le net au 18/01/08 :
********************************
Site d'Aplilb : http://www.ibsensoftware.com/
Source de CNGSoft : http://cngsoft.livejournal.com/268202.html
Compacteurs modifies par Dadman / CEZ - Team :
Crees a partir des sources de l'archive APLIB-0.43, il permettent de
ne pas avoir une routine PC integree au code compacte !
http://www.amstrad.es/forum/viewtopic.php?f=6&t=974
1) Preparer un repertoire de travail
------------------------------------
Creer un repertoire APLIB sur un volume de votre disque dur.
Recopier les programmes de Dadman dans le repertoire, c'est pret.
2) Transferer sur PC le fichier a compacter
-------------------------------------------
Le plus simple est d'utiliser ManageDsk, et d'exporter le fichier binaire
SANS EN-TETE dans le meme repertoire que l'executable
3) Compactage avec Exomizer 2
-----------------------------
Franchement, la, on ne peut faire plus simple.
Syntaxe de la commande pour le fichier BOULDER.BIN
APPACK BOULDER.BIN BOULDER.CRU
Le programme compacte et cree un fichier BOULDER.CRU qui correspond au code
compacte.
4) On transfert sur CPC le fichier compacte
-------------------------------------------
Hop, on sort ManageDsk du placard, et on fait le transfert inverse de la
phase 1. Il faut choisir l'option "Forcer Binaire" pour l'import.
5) Compilation de la routine de decompression
---------------------------------------------
Le source Maxam est fourni dans l'archive APLIB.DSK. Il suffit de rajouter
au debut du source les adresses d'implantation memoire du code compacte dans
HL et du code a decompacter dans DE. Compilez le source, vous obtenez un
fichier APLIB.BIN. Il est par defaut implante en &A000 pour l'exemple choisi
sur la disquette (page ecran C64).
Concernant la routine de CNGSoft, il y a une particularite qui peut etre
interessante. Elle permet de decompacter du code "du bas en haut" de la
memoire, ou "du haut en bas" de la memoire, ce que les autres crunchers ne
font pas. Pour cela, il suffit de modifier une variable dans le source.
Malheureusement, pour l'instant, cette option n'est pas tres exploitable,
car il ne circule pas de compacteur permettant de compacter du code
"a l'envers". C'est theoriquement possible avec les outils fournis, en
suivant cette methode :
- inverser le contenu du fichier a compacter (debrouillez-vous !)
- compacter le fichier avec les outils de Dadman
- inverser le contenu du fichier compacte (meme remarque)
Bref, il vaut mieux harceler CNGsoft qui doit avoir un programme de ce genre
plutot que de tenter l'aventure a la main si cette option vous est utile.
6) Creation d'un petit loader Basic ou binaire
----------------------------------------------
Il ne reste plus qu'a charger en memoire le code compacte, la routine de
decompression, l'executer, puis executer le programme decompacte s'il s'agit
d'un executable.
Pour plus d'explications, je vous incite a lire la notice de la routine de
decompactage de PUCRUNCH, sur http://tj.gpa.free.fr.
Bon crunchage !
NOTICE TEXTE n° 2 (3.1 Ko)
; Aplib decrunching routine
; (c) CNGSOFT
; Maxam source by T&J/GPA - 01/18/2008
; Nothing changed, except thy damned hidden opcodes
; and a new variable for Maxam ( 13+8*0 = 0 for Maxam )
ORG &A000
NOLIST
WRITE "APLIB.BIN"
; Attention, cette routine contient un assemblage conditionnel.
; Si Aplib8flag = 0, le code decompacte est ecrite du bas de la
; memoire vers le haut de la memoire. C est ce que font par defaut
; les programmes modifies par Dadman/CEZ - Team (APPACK.EXE et
; aPPackWin.exe.
; Si Aplib8flag = 1, le code decompacte est ecrit du haut de la
; memoire vers le bas de la memoire. Le code compacte doit bien
; evidemment etre organise en consequence.
aplib8flag equ &0 ; = DEC &00 pour INC
flagdecde equ aplib8flag*8 ; for Maxam compatibility
; En entree, on a :
; HL = implantation du code compacte
; DE = implantation du code decompacte
Start DI
LD HL,&4000
LD DE,&C000
CALL boot
JP &000F
Boot
PUSH HL ; used for EX HL,(SP)
PUSH HL
POP IX
DB &FD,&26,&80 ; LD IYh,&80
aplib8literal
LD A,(IX+ &00)
DB &DD,&23 + flagdecde ; INC IX/DEC IX
LD (DE),A
DB &13 + flagdecde ; INC DE/DEC DE
DB &FD,&2E,&02 ; LD IYl,&2
aplib8nexttag
CALL aplib8getbit
JR NC, aplib8literal
LD BC,&0000
CALL aplib8getbit
JR NC, aplib8codepair
LD H,B
CALL aplib8getbit
JR NC, aplib8shortmatch
DB &FD,&2E,&02 ; LD IYl,2
INC C ; bc
LD L,&10
aplib8getmorebits
CALL aplib8getbit
RL L
JR NC, aplib8getmorebits
JR NZ, aplib8domatch
LD A,L
LD (DE),A
DB &13+ flagdecde ; INC DE/DEC DE
JR aplib8nexttag
aplib8codepair
CALL aplib8getgamma
DB &FD,&4D ; LD C,IYl
SBC HL,BC
JR NZ, aplib8normalcodepair
CALL aplib8getgamma
LD B,H
JR aplib8domatch_lastpos
aplib8normalcodepair
DEC L
LD H,L
LD L,(IX + &00)
DB &DD,&23+ flagdecde ; INC IX/DEC IX
PUSH HL
CALL aplib8getgamma
LD B,H
POP HL
LD A,H
CP 125 ; cmp eax,32000
JR NC, aplib8domatch_with_2inc
CP &05
JR NC, aplib8domatch_with_inc
AND A
JR NZ, aplib8domatch_new_lastpos
LD A,L
ADD A
JR C, aplib8domatch_new_lastpos
aplib8domatch_with_2inc
INC BC
aplib8domatch_with_inc
INC BC
aplib8domatch_new_lastpos
EX (SP),HL
aplib8domatch_lastpos
POP HL
PUSH HL
DB &FD,&2E,&01 ; LD IYl,1
aplib8domatch
if aplib8flag ; LDIR/LDDR
ADD HL,DE
LDDR
else
AND A
EX DE,HL
SBC HL,DE
EX DE,HL
ADD HL,DE
EX DE,HL
LDIR
endif
JR aplib8nexttag
aplib8shortmatch
LD L,(IX+&00)
DB &DD,&23+ flagdecde ; INC IX/DEC IX
SRL L
JR Z, aplib8donedepacking
RL C
JR aplib8domatch_with_2inc
aplib8getbit
DB &FD,&7C ; LD A,IYh
ADD A
JR NZ,aplib8getbit_
LD A,(IX + &00)
DB &DD,&23+ flagdecde ; INC IX/DEC IX
ADC A
aplib8getbit_
DB &FD,&67 ; LD IYh,A
RET
aplib8getgamma
LD HL,&0001
aplib8getgamma_
CALL aplib8getbit
ADC HL,HL
CALL aplib8getbit
JR C, aplib8getgamma_
LD C,L
RET
aplib8donedepacking
POP HL ; used for EX HL,(SP)
PUSH IX
POP HL
RET ; Warning, A might not be 0!