Ca Peut Cervir ! |
(oui, y'a une faute mais sinon ca ne faisait pas "CPC"...) |
Augmenter le nombre de
vies dans les jeux grace a DISCOLOGY.
Comprendre la structure d'une entete de fichier sur DISCOLOGY.
Taille et poids des fichiers.
Abordons la taille des fichiers en
Kilo-Octet.
Le petit tableau ci-dessous nous permet de connaitre
rapidement la fourchette exacte pour le poids de vos fichiers (de 1 a 42 Ko).
Par exemple, un fichier de 10 Ko correspond a une taille comprise
entre &02381 et &02780.
Aussi, si vous sauvegardez un fichier d'une
longueur de &4000, vous trouverez que cela correspond a un poids de 17 Ko sur
la disquette (puisque &4000 est compris entre &03F81 et &04380).
Et
c'est la que j'en viens a une petite astuce permettant de gagner un precieux
petit Kilo octet...
En effet, une taille de &4000 (soit 17Ko) c'est
pile-poil celle d'un ecran non compresse sur Amstrad. Mais si l'on reduit
cette taille a &03F80, on passe a 16 Ko !
"Mais l'ecran ne sera pas
complet !", me direz-vous... et vous aurez raison. Sauf qu'il faut savoir que
cette toute petite reduction n'affectera que la toute derniere ligne de base
horizontale de l'ecran. Il suffira donc de ne rien dessiner sur cette ligne et
ainsi exploiter 199 pixels verticalement (au lieu des 200 disponibles dans les
resolutions originales du CPC) pour que cela passe totalement inapercu !
Les mysterieux caracteres de controle de l'Amstrad CPC.
Lorsque l'on consulte le manuel de l'utilisateur
de l'Amstrad CPC pour connaitre son jeu de caracteres, on s'apercoit que ce
dernier ne debute qu'a partir de 32, comme le montre l'illustration ci-dessous
:
Ainsi, conformement a cette table de caracteres, un PRINT
CHR$(32) sous BASIC affiche un caractere vide, un PRINT CHR$(33) affiche un
point d'exclamation, un PRINT CHR$(34) affiche un guillemet, un PRINT CHR$(35)
affiche un diese, un PRINT CHR$(36) affiche un dollar, etc... jusqu'a PRINT
CHR$(255) qui affiche une double fleche.
Mais alors, quelles sont les
possibilites insoupconnees des 31 caracteres precedents ?!?!?
Et bien
Claude Le Moullec nous les devoilait dans le premier numero du magazine
MICROMAG !
Voici :
0 : sans effet. Toutefois, mis a la suite d'un
autre caractere de contrôle, il assure le retour a la normale.
1 : s'il
precede un autre caractere de controle; affichage de la representation
graphique de ce caractere. A donc le meme effet que CTRL + lettre. Pour s'en
convaincre, faire :
FOR H=0 TO 31 :PRINT CHR$(1)CHR$(H);:NEXT A la suite de
certains caracteres, il etablit un mode specifique :
CHR$(22)+CHR$(1) mode
transparent
CHR$(22)+CHR$(0) retour au mode normal
2 : eteint le
curseur. Mais celui-ci se rallume apres chaque message READY : PRINT
CHR$(2):INPUT "VOTRE NOM";NM$
3 : rallume le curseur.
4 :
etablit un mode quand il est suivi du parametre adequat. PRINT CHR$(4)+"0"
fait passer en mode 0. D'un interet limite.
5 : suivi d'un code ASCII,
affiche ledit code a la position du curseur graphique. Agit un peu comme la
fonction TAG mais pour un seul caractere. Exemple : ORIGIN 100,100:PRINT
CHR$(5)+CHR$(56) ou CLS:ORIGIN100,100:A$ ="BONJOUR":PRINT CHR $(5)+A$
(etonnant!)
6 : retablit l'affichage texte. En opposition a CHR$(21).
7 : fait retentir un "Beep !" depuis le haut-parleur du CPC.
8, 9,
10 et 11 : deplacement du curseur dans les quatre directions. Nombreuses
possibilites (voir leçon n°2). Autre debouche : vous avez a l'aide de quatre
caracteres redefinis, dessine un petit personnage en mode 1. Pour l'afficher,
il existe cette solution : LOCATE 1,1 PRINT CHR$ (240)+CHR$(241):LOCATE
1,2:PRINTCHR$(242) + CHR$(243) ou celle qui consiste tout d'abord a
transformer votre personnage en une variable du type
MAN$=CHR$(240)+CHR$(241)+CHR$(8)+CHR$(8)+CHR$(10)+CHR$(242)+CHR$(243)
Puis
a l'afficher tout simplement par LOCATE1,1:PRINTMAN$ De prime abord un
tantinet laborieuse, cette mise en œuvre facilite grandement la gestion dans
le cas d'affichages ulterieurs repetitifs.
12 : meme effet que CLS mais
avec la possibilite de s'inclure dans une variable A$ = CHR$(12) +
"AM-MAG":PRINT A$
13 : meme effet que ENTER, retour a gauche de la
ligne. En souvenir du temps ou les ordinateurs ne travaillaient qu'avec des
imprimantes.
14 : etablit le PAPER lorsqu'il est suivi d'un parametre
(voir "CHR$(4)").
15 : idem mais pour le PEN.
16 : permet
a'effacer le caractere se trouvant sous le curseur.
17 : efface la
portion de ligne situee a gauche du curseur.
18 : idem, mais a droite.
19 : efface toute la partie de l'ecran se trouvant au dessus du curseur.
20 : idem, mais pour la partie en dessous du curseur.
21 : stoppe
affichage texte. En relation avec CHR$(6).
22 : avec CHR$(1), active le
mode transparent.
23 : avec 1, 2 et 3, active differents modes
graphiques.
24 : permet d'obtenir l'inversion video. L'importance des
possibilites offertes par l'utilisation des caracteres de controle 22, 23 et
24 necessitera une lecon entiere. Deplacer un personnage sans effacer le
decor? Ne revez plus, c'est pour le mois prochain.
25 : meme effet que
la commande SYMBOL, quand il est suivi des parametres.
26 : idem, mais
pour la commande Window.
27 : inutilise pour l'ecran mais bien connu
des possesseurs d'imprimante, ce caractere de controle, associe a d'autres,
permet d'obtenir les differents styles d'ecriture qu'offre toute imprimante
digne de ce nom.
PRINT #8,CHR$(27)+CHR$(15)+CHR$(1)
Cette commande
etablira l'ecriture en mini de votre imprimante.
28 : suivi des
parametres necessaires; remplace la commande INK.
29 : idem pour la
commande BORDER.
30 : ramene le curseur dans le coin haut a gauche de
l'ecran.
31 : avec les parametres; meme effet qu'un LOCATE.
Pour
resumer, chaque caractere de controle est une instruction supplementaire tres
utile pour la gestion de l'ecran. A chacun correspond un caractere graphique
qui s'obtient par appui simultane sur CTRL + lettre. Amusez-vous a les
afficher un a un sur l'ecran : cette serie de signes cabalistiques s'avere des
plus interessantes. Le CHR$(7) est sans conteste le plus connu et le plus
usite. Il correspond au fameux BEEP sonore. La syntaxe en est : PRINT CHR$(7)
Le meme resultat s'obtient par la representation graphique de CTRL + G mise
entre guillemets. De plus, CHR$(7) necessite la frappe de sept touches contre
trois seulement dans l'autre cas. La logique voudrait donc que nous utilisions
la deuxieme solution. Desole pour les partisans du moindre effort, mais cette
solution est a eviter, car aucune imprimante n'est capable de transcrire ces
fameux caracteres graphiques. En effet, utilisant pour son propre pilotage des
caracteres de controle, l'imprimante les recevra comme des ordres lui etant
adresses et non comme des signes a transcrire. Dans le meilleur des cas, les
caracteres de controle n'apparaitront tout simplement pas sur le texte. Mais
helas, tres souvent, c'est le plantage de l'imprimante qui vous attend. Bien
sur, si votre logiciel n'est diffuse que sur support magnetique (disc ou K7)
rien ne vous empeche de les utiliser.
Ressusciter les fichiers effaces sur une disquette.
S'il y a bien une chose que j'adorais faire a l'epoque
lorsque je ramenais de nouvelles disquettes Amstrad CPC a la maison, c'etait
fouiller leurs entrailles a la recherche d'eventuels fichiers, ou meme de
jeux, qui auraient ete effaces.
Imaginez-vous, tel un Indiana Jones
numerique, explorant les mysterieux octets d'un disque magnetique et tombant,
au hasard des meandres du catalogue, sur les vestiges d'un fichier cache,
efface, supprime et oublie... Qui pourrait alors resister a la tentation de
l'exhumer afin de decouvrir de quoi il s'agit ?
Decouvrons ensemble la
methode pour y parvenir avec Discology.
Et croyez bien que cela tient
reellement du jeu d'enfant !
Allez, c'est parti avec un exemple
concret...
1) Sur le catalogue de la disquette ci-dessous (auquel on
accede sous Basic avec la commande CAT), on peut voir qu'il y a 29 fichiers au
total stockes sur la disquette :
2) Si l'on charge cette meme disquette dans l'editeur de
secteurs de Discology et que l'on se balade un peu sur sa piste 00, on tombe
sur son catalogue physique. C'est ici que l'on peut retrouver les 29 fichiers
qui sont stockes sur la disquette (et qui se sont affiches avec la commande
CAT sous BASIC)... mais aussi ceux qui l'ont eventuellement peuple avant
d'etre effaces !
Dans notre exemple, on voit bien qu'un fichier "FINDME.BAS"
apparait ici alors qu'il ne s'etait pas affiche avec la commande CAT sous
BASIC !
Et si l'on s'attarde au premier octet qui precede son nom, on peut
voir un "E5", tandis que pour tous les
autres fichiers on peut lire "00"...
Vous l'avez compris : "E5" indique a l'Amstrad que le fichier qui suit a ete
efface, qu'il ne doit plus remonter lors d'un CAT et qu'il peut desormais etre
ecrase par de nouvelles donnees.
3) Eh bien il suffit de changer cet "E5"
par un "00" pour ressusciter le fichier !
4) Une fois la modification sauvegardee, un CAT sous BASIC
fait effectivement desormais remonter le fichier "FINDME.BAS"
! Il ne reste plus qu'a le charger, voire meme l'executer !
Alors il faut savoir que la limite de cette manipulation
tient aux nombres de sauvegardes qui ont eventuellement ete faites ensuite sur
la disquette apres l'effacement du fichier...
En effet, lorsqu'un fichier
est efface, il libere physiquement la place qu'il occupait sur la disquette.
Tant qu'aucun autre fichier n'est ensuite sauvegarde sur la disquette, les
donnees du fichier efface restent intacts. Mais si de nouveaux fichiers sont
sauvegardes sur la disquette, le risque que les donnees de ceux-ci viennent
ecraser celles du fichier efface est tres fort. Et dans ce cas, son integrite
sera helas corrompu. Alors il sera toujours possible de ressusciter le fichier
avec la manip que je vous ai explique, mais il sera altere (listing incomplet
pour les fichiers BASIC, images avec plus ou moins d'artefacts, etc...)
Ceci dit, avec cette methode j'ai pu exhumer a l'epoque un bon paquet
d'images creees sous OCP Art Studio ou encore des listings BASIC de jeux
saisis par des utilisateurs.
Alors a vos Pistes 00 !
PS : A
noter qu'il est egalement possible de realiser cette meme manip, de maniere
tres conviviale sous Windows, avec le logiciel "ManageDSK".
Ecrire un programme en BASIC sans Amstrad.
Voici un petit Tuto qui pourrait donner corps a
vos idees creatives...
Ce Tuto s’adresse a tous ceux qui n'ont plus
d'Amstrad CPC mais qui ont un jour ressenti l’envie de creer un petit
programme en BASIC en vue de l'emuler via un DSK... mais qui se sont
finalement ravises devant l’apparente difficulte de la tache et, surtout, le
manque d'information sur la methode a adopter.
Alors je vous rassure
tout de suite, avec les bons outils, l'operation est en realite tres simple et
se boucle en quelques clics. Il existe bien evidemment d'autres methodes, mais
celle-ci a, a mes yeux, l'avantage de permettre de profiter de la convivialite
de la saisie sous Windows.
Allez, c’est parti !
Avant tout,
munissez-vous des 2 logiciels pour Windows suivants (cliquer pour tetecharger)
: CPC Token
et
ManageDSK
A) SAISI DU
PROGRAMME BASIC
Ouvrez le Bloc-notes de Windows
1) Saisissez vos lignes
en BASIC Amstrad
2) Sauvez votre fichier (par exemple en "PROG.TXT")
B) CONVERSION DU FICHIER
.TXT EN FICHIER .BAS
Executez CPC Token
1) Cliquez sur le bouton en
forme de petit dossier jaune en haut a gauche et pointez sur votre fichier
TXT.
2) Cliquez sur le bouton bleu "Create AMSDOS Basic Files (BAS / BIN)"
3) Cliquez sur "Compil Input text".
C) INTEGRATION DU FICHIER
.BAS DANS UN FICHIER .DSK
Executez ManageDSK
1) Cliquer sur le bouton
"Creer DSK"
2) Cliquez sur le bouton "Ajouter fichier(s)"
3) Pointez sur
le fichier .BAS precedemment cree
4) Cliquer sur le bouton "Sauver DSK"
Et voila !
Vous disposez desormais d'un fichier fraichement cree et
baptise "Disquette_Vide.DSK" contenant votre programme BASIC pret a etre
execute sur n'importe quel emulateur ! J
Alors a vos clavier : vous n'avez
plus d'excuse pour ne pas programmer sur CPC !
Economiser de precieux Octets dans un programme BASIC.
Voici une astuce simple, rapide et indolore qui vous
permettra de reduire la taille de vos programmes BASIC en un clin d'oeil et
preserver ainsi de precieux Ko de RAM !
La subtilite consiste a
supprimer les espaces inutiles dans les lignes de code BASIC du programme.
Et, par chance, il existe une commande, sous forme de POKE, qui realise
l'operation automatiquement et instantanément.
Cette commande, c'est :
POKE 44032,1
Il suffit donc de
saisir cette commande apres la saisie d'une ou plusieurs lignes de programme
BASIC pour qu'elle opere.
Par exemple, dans le programme BASIC de 21 Ko
ci-dessous, il a ete possible d'economiser 2 Ko :