Obligement - L'Amiga au maximum

Vendredi 29 mars 2024 - 06:27  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z,
ALL


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


Programmation : DICE - installation et présentation
(Article écrit par Laurent Faillie et extrait d'Amiga News - avril 1993)


Après avoir passé l'AmigaBasic par la "Trashcan", à cause de ses nombreux bogues, vous décidez de vous lancer dans le C. Vu le prix astronomique des compilateurs commerciaux, et après une recherche dans le DP, vous tombez sur la version gratuicielle de DICE...

C'est ainsi que j'ai débuté avec le C il y a deux ou trois ans. Grâce à lui, j'ai pu réellement attaquer ce langage. A l'époque, mon Amiga n'avait que 512 ko de mémoire et un seul lecteur, autant dire que faire marcher un compilateur dans ces conditions ne relevait que du masochisme. Je suis donc passé à 1 Mo. A noter que DICE est le seul compilateur, à ma connaissance, utilisable avec seulement 1 Mo et un lecteur. J'ai aussi essayé avec Lattice ou Aztec. Séquence "grille-pain". Mais il possède aussi d'autres avantages comme la facilité avec laquelle on peut créer des programmes résidents, et pour les plus bidouilleurs, la possibilité de créer des programmes rommables.

Dans ce premier article, je vous parlerais donc de la façon d'installer DICE avec des petites configurations (version gratuicielle), puis de la version enregistrée. Plus tard nous aborderons les caractéristiques spécifiques de DICE et des astuces qui nous faciliterons la vie, ainsi que de l'utilisation de bibliothèques externes. A noter que tout ceci ne concernera pas uniquement DICE, mais aussi les autres compilateurs.

Installation de la version gratuicielle

J'ai utilisé le système suivant presque un an avant d'acheter un disque dur et beaucoup d'amis continuent à utiliser un environnement semblable sans problèmes. Il faut donc au minimum un Amiga (non... si, si !) avec au moins 1 Mo de mémoire. Le lecteur interne suffit. Pour une fois les utilisateurs d'Amiga sous 1.3 seront avantagés car les nouvelles versions du système utilisent plus de mémoire, et la configuration des disquettes suivantes n'est valable qu'avec les includes et les bibliothèques d'AmigaOS 1.3, celles du 2.0 étant plus volumineuses. De toute façon, les versions enregistrées du compilateur, plus récentes, sont plus adaptées à la programmation sous 2.0. Il nous faut donc deux disquettes.

Formatez la première et installez-la en tant que système (Install DF0:). L'environnement de programmation sera le Shell, mais plutôt que d'utiliser celui de Commodore, je vous conseille de prendre CSH : il est moins gourmand en mémoire et surtout, toutes les commandes sont internes, d'où un démarrage plus rapide - ce qui plus qu'intéressant lorsque l'on programme en C où le Guru a souvent des crises de méditation -.

Pour que tout rentre sur la disquette, une compression s'avère indispensable. Personnellement, j'utilise Turbo-Imploder pour les exécutables, car il compresse aussi les bibliothèques. Je conseille d'avoir deux versions de celui-ci : la dernière en date (v4.0 à l'heure où j'écris ces lignes) et une plus ancienne (3.x) car les récentes ne permettent plus de compresser les programmes pures. PowerPacker sera utile pour compresser les textes (documentations...). Même si des utilitaires comme PowerPacker permettraient aussi de réduire les includes, je le déconseille à cause du temps ajouté à la compilation. En parlant de textes, il nous faut aussi installer sur cette disquette un éditeur : on va laisser tomber ED qui est tout juste bon pour un PC, pour se pencher vers micro-Emacs de la disquette Extra de votre AmigaOS ou vers des DP. Certains ont été créés uniquement pour la programmation comme Az qui permet de tester les [] et les {}. J'ai laissé tomber Dme (fournis avec DICE) car trop compliqué, et surtout trop volumineux.

Passons maintenant à l'installation de DICE, voici donc le contenu de ma première disquette :

dir dice1:
     examples (dir)
     c (dir)
     l (dir)
     devs (dir)
     s (dir)
     doc (dir)
     libs (dir)
     bin (dir)
     dynamic.lzh

On reconnaît les répertoires propres aux disquettes système sur Amiga (s, l, devs, c). Les autres proviennent de l'archive de DICE. Le but étant d'éviter le grille-pain, seuls les fichiers n'étant chargés qu'une fois (les exécutables) et ceux n'étant pas "importants" comme les documentations sont installés. Dans C: très peu de commandes AmigaDOS mais beaucoup d'utilitaires :

dir dice1:c

AddBuffersAssign
AZborder
CDDate
decrunchEndCLI
ExecuteFF
FixHunkGetEnv
gomf1.0Guru
Kill'emloadwb
MachIIMount
NoPalResetPopUpMenu
ppmoreREADCLOCK
res1.3Run
SetEnvSetMap
SetPatchshell

Remarquez res1.3 : il s'agit de la commande resident qui est renommée car CSH contient aussi un resident (à notez qu'avec les versions récente, 5.xx ou +, on peut forcer l'utilisation d'une commande externe en mettant sa première lettre en majuscule Resident) ; ils ne sont pas compatibles mais nous avons besoin des deux comme nous le verrons plus loin. Parmi les utilitaires, on reconnaît ceux de PowerPacker, Border qui nous donne un Shell sans bords, Guru qui explique les codes du méditeur fou, alors que Gomf tente de les éviter (la version 1.0 est du DP), NoPalReset pour éviter que l'Amiga ne démarre en NTSC, Kill'em (antivirus), Dmouse ou MachIV pour la sélection automatique des fenêtres et le Blanker ; la version gratuicielle de DICE ne comportant pas l'attribut "_chip", nous devons utiliser un programme pour placer correctement nos données graphiques. J'utilise FixHunk (programme DP qui était fourni avec mon extension mémoire Spirit). Pour ceux qui n'ont pas ce programme, voici la procédure à suivre :
  • Lors des essais, supprimer l'extension mémoire avec un programme du genre NoFastMem (ou plutôt FMC qui permet de la réactiver d'un simple clic de souris).
  • Pour la version définitive, PowerPacker permet de fixer les données en mémoire Chip (voir le menu HUNKLAB).
Ajoutez enfin quelques utilitaires qui font partie de votre environnement habituel. Notez que pour ceux qui disposent d'un processeur supérieur au 68000, les utilitaires du genre de Fix68010 ne sont pas nécessaires : le code généré par DICE est compatible avec toute la famille 68000.

Dir dice1:s
.loginstartup-sequence
InstallChipsInstallDice
InstallIncl

La startup-sequence est réduite au minimum :

type dice1:s/startup-sequence

Mount VD0:
cd VD0:
Nopalreset
kill'em
readclock
SetPatch
AddBuffers dice1: 30
FF  -0 ;speed up Text
Shell s:startupII

Je rappelle que Shell est l'exécutable de CSH pour les versions inférieur 5.x.
Le fichier startupII suivant :

type dice1:s/startupII

border off
set _except "15 ; abortline"
cd RAM:
cd VD0:
alias makedir mkdir
makedir RAM:clipboards
makedir RAM:t
makedir RAM:env
assign env: RAM:env
resident c:Setenv
resident c:res1.3
alias res res1.3
Setenv DCCOPTS "-1.3 -f"
echo ""
echo "[3;33m Compilateur Dice [0m"
echo "~~~~~~~~~~~~~~~~~~"
echo "Ceci est la version [33mFREEWARE[0m de Dice"
echo ""
echo "Utiliser :"
echo "          [4mMake[0m pour compiler"
echo "          [4mMaker[0m pour compiler un programme resident"
echo ""
assign t: RAM:t
assign CLIPS: RAM:clipboards
assign DINCLUDE: Dice2:include
assign DLIB: Dice2:dlib
assign bin: sys:bin
set _path "vd0:,ram:,bin:,s:"
echo " "
rback c:machII ;sleep 2
cd bin:
res das
res dc1
resident dcc
res dcpp
res dlink
cd vd0:
echo
"========================================================"
echo "[33mMach[0m is
installed as a background task."
echo "To invoke a new CLI,
hold the [33mleft-Amiga key[0m and press [33mesc[0m."
echo "The Screen-Saver
feature of [33mMach[0m will blank the screen"
echo "if there is no mouse
or keyboard activity for minutes."
echo "[33mMach[0m allow to
use some hotkeys"
echo
"========================================================"
popupmenu
echo ""
assign doc: sys:doc
source s:.login

Deux choses sont à remarquer :
  • J'ai installé deux disques RAM, le fameux RAM: et VD0: (ou VDK:) qui est un Ram Disk récupérable (comme RAD:) mais qui a comme avantage de ne pas avoir de taille fixe et de ne pas alerter les antivirus. C'est ici que j'édite mes sources alors que RAM: ne sert qu'aux fichiers temporaires.
  • Tous les exécutables ne sont pas mis résidents de la même manière : DCC et les utilitaires du Shell utilisent la commande interne de CSH alors que dc1, das et dlink, utilisent la commande Commodore. Nous verrons pourquoi par la suite. Si vous utilisez le 2.0, voir plus loin en ce qui concerne la commande resident. Il est très important d'utiliser la bonne commande sinon DICE recherchera ses fichiers sur disque.
Enfin, chaque nouveau Shell CSH appel s:.login.

type dice1:s/.login

alias as assign
alias lc ls -s
alias make "%f dcc -o$f $f.c"
alias maker "%f dcc -f -r -o$f $f.c"
alias ren rename
alias mach run c:machII
alias gomf run c:gomf1.0
set _prompt "[7;43mLF[40m_SHELL#[43;7m"$_clinumber" [42;3;7m %p [0;7m>[0m"

Il est évident que tous ces fichiers ne concernent que ma configuration et qu'ils doivent être personnalisés (par exemple un "SetMap f" devra être ajouté si vous avez un clavier français, ce qui n'est pas le cas de mon A1000).

Voici quelques scripts utiles :

InstallIncl : pour ceux qui ont 2 Mo de mémoire ou plus, ce script installe les includes et les bibliothèques dans VD0:, toute la compilation se fait maintenant en RAM. Évidemment, il teste si elles sont déjà présentes.

# source dice1:s/InstallIncl

if -n -m    # à supprimer pour les Amiga avec 2 Mo de Chip
echo "Pas de memoire"
else
cd vd0:
if -n -d :include ;mkdir vd0:include ;cp -r -d dice2:include vd0:include ;endif
if -n -d :dlib ;mkdir vd0:dlib ;cp -r -d dice2:dlib/~*20* vd0:dlib ;endif
 # Copie toutes les bibliothèques sauf celles du 2.0
as DINCLUDE: vd0:include
as DLIB: vd0:dlib
endif

Installdice : si vous avez démarré sur une autre disquette système, ce script installe DICE.

type dice1:s/Installdice

# Ce script installe DICE sur un système qui n'a pas démarré sur "Dice1:"
# ( sur le WB standard par exemple ).
# Ce script utilise CSH : source Dice1:s/installDice

cd Dice1:
resident :c/res1.3
alias res res1.3
echo ""
echo "[3;33m Compilateur Dice [0m"
echo "~~~~~~~~~~~~~~~~~~"
echo "Ceci est la version [33mFREEWARE[0m de Dice"
echo ""
echo "Utiliser :"
echo "          [4mMake[0m pour compiler"
echo "          [4mMaker[0m pour compiler un programme resident"
echo ""
alias make "%f dcc -f -o$f $f.c"
alias maker "%f dcc -f -r -o$f $f.c"
assign DINCLUDE: Dice2:include
assign DLIB: Dice2:dlib
assign bin: :bin
set _path "vd0:,ram:,bin:"
echo " "
cd bin:
res das
res dc1
resident dcc
res dcpp
res dlink
cd vd0:
Setenv DCCOPTS "-1.3 -f"

Enfin le dernier, InstallChips configure le compilateur pour que les données soit stockées en mémoire Chip :

# Ce script 'cré' une commande pour compiler un programme
# en mettant les données en mémoire Chip
if -n -f vd0:
        echo "VD0: doit être munté"
else
        if -n -f vd0:fixhunk ;cp -d dice1:c/fixhunk vd0: ; endif
        alias makef "%f dcc -f -o$f $f.c;vd0:fixhunk $f"
        echo ""
        echo "Tapper [4mmakef[0m pour compiller un programme en fixant les donnees en Chip"
        echo ""
endif

Dernière remarque : j'utilise des "alias" pour la compilation.
  • make pour compiler un programme (ex "make salut").
  • maker pour créer un exécutable pure, makef pour forcer les données en mémoire Chip.
Sur la seconde disquette, nous allons placer les includes de DICE et de Commodore. Il faut savoir que ces dernières ne sont pas comprises dans la distribution gratuicielle de DICE, mais on peut se les procurer, soit auprès de Commodore, soit dans la distribution d'un autre compilateur. Dans ce cas, il ne faut garder que celles dont l'en-tête est (C) Commodore. Créer un répertoire "Include" (makedir dice2:Include) et copiez tous les fichiers de DICE. Dans ce répertoire, créez un sous-répertoire "Amiga13" (pour les includes du 1.3) ou/et Amiga20 pour les includes du 2.0. DICE permet, en effet, de les dissocier mais attention : ce qui se trouve dans Amiga13 n'est pas accessible d'une manière standard si vous développez en 2.0 et vice-versa (voir les drapeaux -1.3 et -2.0). Créez un répertoire "Lib" ou l'on placera les bibliothèques du C.

A noter que l'amiga.lib fournie avec la version gratuicielle ne contient pas toutes les fonctions, mais comme l'indique l'auteur, il nous suffit de prendre celles d'un autre compilateur ou assembleur (hormis l'Aztec), d'exécuter un LIBTOS pour disposer d'une bibliothèque parfaitement utilisable.

dir dice2:
dlib (dir)
cc (dir)
include (dir)

La version gratuicielle de DICE se trouve sur disquette 491 de Fred Fish. Elle est quelque peu "bridée" par rapport à la version commerciale (pas de "_chips", ni de flottant), et elle n'est plus mise à jour depuis un moment. Dcc a donc moins d'options et dispose de moins d'utilitaires.

Installation de la version enregistrée

Après deux ans d'utilisation de la version gratuicielle, la seule chose qui m'empêchait d'acquérir cette version était la commande aux États-Unis : les conditions de l'auteur, M. Dillon, étant trop compliquées.

Heureusement la société Someware a résolu ce problème (mise à jour de 2000 : Someware n'existe malheureusement plus depuis un moment, mais la version enregistrée de DICE est disponible sur Aminet, avec ses sources. Par contre elle n'est plus développée ou soutenue).

Mais pourquoi acquérir cette version ? Premièrement, du côté éthique, si on utilise très souvent un programme, surtout aussi bon que DICE, autant s'enregistrer pour permettre à son auteur de continuer. D'un côté plus pratique, la version enregistrée continue à évoluer, dispose d'un environnement complet et d'options tout à fait intéressantes (comme la pile dynamique, la gestion des fichiers à l'Unix...).

Bref, j'ai donc commandé cette version. Après quelques jours j'ai reçu un paquet contenant un classeur (la documentation du compilateur et de ses utilitaires, le tout en français), et trois disquettes contenant les exécutables, les documentations, les includes et les bibliothèques du 1.3 et du 2.0. Stop, le tout sur trois disquettes ! Oui, mais tous y est compressé avec Lharc. Pas de panique, la procédure d'installation est très simple et surtout très puissante.

Séquence installation...

Sous le Workbench, seule l'icône du programme d'installation est présente (sur la première disquette évidemment). Quelques remarques :
  • Tout d'abord, l'installation des includes et surtout des bibliothèques du 2.0 est conseillée, même pour les utilisateurs du 1.3. Il faut savoir que la compatibilité est conservée, tant que l'on n'utilise pas des fonctions propres au 2.0 ! Math Dillon a en effet commit une légère erreur dans l'élaboration des bibliothèques de son compilateur. Prenons l'exemple suivant :

    #include <stdio.h>
    #include <stdlib.h>
    
    void main()
    {
        printf("La variable DccOpts contients :%s\n",getenv("DCCOPTS"));
    }
    

    Le but étant d'afficher le contenu de la variable DCCOPTS (configuration de DICE). Eh bien ce source ne voudra pas ce compiler avec les bibliothèques du 1.3. Regardons la façon dont est programmé getenv():

    si intuition < 36 ( WB < 2.0 )
        lecture du fichier env:var
    sinon ( on est sous 2.0)
        GetVar(var)
    fin
    

    D'un point de vue logique, tout devrait bien marcher : si on utilise le 2.0 la fonction système GetVar() est appelée, sinon, on va lire le contenu du fichier (car les variables d'environnement sous AmigaDOS sont en fait des fichiers particuliers stockés dans ENV:). Lors de la compilation, et quelle que soit la version du système, DICE va générer le code pour la lecture directe du fichier, mais aussi pour l'appel de GetVar() ! Dlink recherchera donc un lien vers _GetVar() ce qui provoque une erreur car l'amiga13.lib ne contient pas cette fonction ! La solution est donc de mettre un lien tout le temps avec les bibliothèques du 2.0, le programme est capable d'appeler le bon code quelque soit la version du Kickstart. La version gratuicielle n'a pas ce genre de problème, car les bibliothèques sont beaucoup plus réduites.

  • Contrairement à la version gratuicielle, je vais me pencher sur un système plus puissant car j'ai "légèrement" mis à niveau mon A1000 : il tourne maintenant sous 2.0 (avec Zkick), dispose de 6 Mo de mémoire, d'un disque dur de 52 Mo et d'un 68010. Le programme d'installation est très bon et surtout très convivial, mais l'opération a quand même pris 3/4 d'heure à cause du désarchivage ! J'ai vraiment apprécié le test que fait le programme pour indiquer si le disque peut recevoir DICE (avec le nombre de blocs manquants si l'installation n'est pas possible). Ne disposant plus que de 5 Mo sur le disque, j'ai dû faire le ménage dans la distribution. Le programme permet de sélectionner facilement ce que l'on veut installer. J'ai donc supprimé les includes Amiga1.3 avec les bibliothèques correspondantes, "Libs" qui contient une mise à jour des bibliothèques mathématiques du 1.3, dutils, dme, les sources, les documentations car elles sont imprimées dans le classeur, lib, cc et s.

    Man contient de l'aide sur les bibliothèques. Je les ai converties et compactées pour les utiliser avec Adoc. Bref, le tout fait quand même quelque 4,5 Mo ! Comme pour la version gratuicielle, un coup d'Imploder et de PowerPacker m'a fait gagner 250 ko (ce qui est loin d'être négligeable, le reste étant pris par les includes et les bibliothèques...).
Deux scripts sont créés pour lancer DICE (Dice_Path et Dice_Startup). Utilisant CSH, je les ai remplacés par d'autres, basés sur ceux de la version gratuicielle.

Note sur la commande "resident" sous 2.0

La commande du 2.0 est incluse dans la ROM donc inaccessible à CSH. La solution est d'utiliser celle du 1.3, qui est compatible avec le 2.0 et tout rentre dans l'ordre !

La prochaine fois, je vous donnerais les sources d'un programme que j'ai réalisé pour configurer DICE car les alias seraient trop nombreux avec la version enregistrée. Je parlerai aussi de l'utilisation des bibliothèques partageables de l'Amiga. En attendant, les débutants peuvent jeter un oeil sur l'exemple donné dans la documentation de DICE (première compilation) qui est très intéressant.

Nouveau script d'installation (mise à jour de janvier 1994)

Lorsque j'ai écrit l'article ci-dessus, mon A1000 avait un système boîteux constitué d'un remix entre le 1.3 et une préversion du 2.0 (Kickstart 36.xxx). Sous cette configuration, CSH était incapable d'accéder aux commandes résidentes de la table Commodore d'où une installation des plus compliquées.

Aujourd'hui, je suis passé à un Kickstart plus évolué (37.210) et au système 2.1. Et surprise, maintenant les Shell ARP peuvent utiliser les deux tables. Plus besoin non plus d'utiliser un res1.3 car un Resident (notez bien le "R" majuscule) appellera la commande de la ROM. N'importe quel processus peut maintenant lancer DCC et je suis en train de progranuner un nouveau DiceConfig où l'utilisateur pourra se passer du Shell avec une véritable interface graphique GUI (créé grâce à GadToolsBox).


[Retour en haut] / [Retour aux articles] [Article suivant]