Obligement - L'Amiga au maximum

Vendredi 30 mai 2025 - 03:15  

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 : Blitz Basic - calculette rudimentaire
(Article écrit par Sylvain Terret - février 2005)


On ajoute une pincée d'ASM

Certains mettent des pilules dans leur bière, nous on met de l'ASM dans notre Basic. C'est une façon simple de faire des programmes Workbench en assembleur et d'accélérer des traitements lourds. De plus, cela ajoute un petit côté sérieux à notre code (qui en a bien besoin, hein, disons-le).

Le programme de ce mois-ci est une calculette rudimentaire capable d'additionner, soustraire, multiplier ou diviser deux entiers positifs compris entre 0 et 9. Autant dire que ça claque. Grave. Ne vous inquiétez pas, nous en remettrons une couche lors du prochain numéro pour améliorer ça. Et puis, la majorité d'entre vous n'ayant jamais touché à l'ASM 68k, c'est l'occasion de mettre un quart de demie moitié d'orteil dans le bain. Et quel bain !

Assez de blabla, au code !

=== DEBUT SOURCE ===

WBStartup
WbToScreen 3
Use Screen 3

LoadFont 2,"topaz.font",8
Use IntuiFont 2

;On déclare nos variables...
;...codées sur un octet (byte ; 8 bits)
chiffre_un.b=0
chiffre_deux.b=0
;...codées sur 32 bits (long)
resultat.l=0

;Voici venir la GadgetList numéro 0
;On prépare les boutons +, -, * et /
GTButton 0,1,10,0,40,15,"+",$10
GTButton 0,2,10,20,40,15,"-",$10
GTButton 0,3,10,40,40,15,"*",$10
GTButton 0,4,10,60,40,15,"/",$10

;On prépare les deux zones de saisie
GTString 0,5,80,20,40,15,"",$10,1
GTString 0,6,80,40,40,15,"",$10,1

;On ouvre le fenêtre numéro 0 et on en fait la sortie par défaut
Window 0,0,14,320,120,$140e,"Un peu d'ASM 68k avec le Blitz",-1,-1
DefaultOutput

;On attache la GadgetList numéro 0 à la fenêtre numéro 0
AttachGTList 0,0

Use Window 0


;Boucle principale du programme
While ev.l<>$200

 ;On recupere les evenements qui se produisent dans la fenêtre du logiciel
 ev.l=Event

  WindowOutput 0

 ;Si on clique sur un bouton
 ;et qu'on a bien saisi deux chiffres
 If (GTGetString(0,5)<>"") AND (GTGetString(0,6)<>"")
AND (Len(GTGetString(0,5))<2) AND (Len(GTGetString(0,6))<2)
  If ev.l=64
   ;Si on clique sur le bouton +
   If GadgetHit=1
   ;Nos zones de saisies contenant de la chaîne de caractères
   ;on doit les transformer en chiffres avec la fonction VAL()
   chiffre_un.b=Val(GTGetString(0,5))
   chiffre_deux.b=Val(GTGetString(0,6))
   ;On met tout le registre processeur D0 à 0
   CLR.l d0
   ;Même traitement pour D1, il ne faut pas qu'il reste de cochonneries dedans
   CLR.l d1
   ;On met le contenu de la variable entière codée sur un octet nommée CHIFFRE_UN
   GetReg d0,chiffre_un.b
   ;Je vous laisse deviner :-)
   GetReg d1,chiffre_deux.b
   ;On ajoute les 8 bits de poids faible de la valeur contenue dans le registre
   ;D0 à celle contenue dans D1 et on stocke le résultat dans D1
   ADD.b d0,d1
   ;On transfére le contenu de D1 dans la variable entière codée sur 32 bits
   ;nommée RESULTAT
   PutReg d1,resultat.l
   ;On positionne le curseur de texte dans la fenêtre
   WLocate 10,100
   Print Str$(chiffre_un.b)+" + "+Str$(chiffre_deux.b)+" = "+Str$(resultat.l)+"      "
  EndIf
  ;Si on clique sur le bouton -
  If GadgetHit=2
   chiffre_un.b=Val(GTGetString(0,5))
   chiffre_deux.b=Val(GTGetString(0,6))
   CLR.l d0
   CLR.l d1
   GetReg d0,chiffre_un.b
   GetReg d1,chiffre_deux.b
   ;La gestion des résultats négatifs avec la soustraction est un peu spéciale, on
   ;va se contenter de gérer du positif pour l'instant
   SUB.b d1,d0
   PutReg d0,resultat.l
   WLocate 10,100
   Print Str$(chiffre_un.b)+" - "+Str$(chiffre_deux.b)+" = "+Str$(resultat.l)+"      "
  EndIf
  ;Si on clique sur le bouton *
  If GadgetHit=3
   chiffre_un.b=Val(GTGetString(0,5))
   chiffre_deux.b=Val(GTGetString(0,6))
   CLR.l d0
   CLR.l d1
   GetReg d0,chiffre_un.b
   GetReg d1,chiffre_deux.b
   ;L'instruction MULU MULtiplie deux valeurs Unsigned (non signées), en d'autres
   ;termes, des nombres entiers.
   MULU.b d0,d1
   PutReg d1,resultat.l
   WLocate 10,100
   Print Str$(chiffre_un.b)+" * "+Str$(chiffre_deux.b)+" = "+Str$(resultat.l)+"      "
  EndIf
  ;Si on clique sur le bouton /
  If GadgetHit=4
   chiffre_un.b=Val(GTGetString(0,5))
   chiffre_deux.b=Val(GTGetString(0,6))
   CLR.l d0
   CLR.l d1
   GetReg d0,chiffre_un.b
   GetReg d1,chiffre_deux.b
   DIVU.l d1,d0
   PutReg d0,resultat.l
   WLocate 10,100
   Print Str$(chiffre_un.b)+" / "+Str$(chiffre_deux.b)+" = "+Str$(resultat.l)+"      "
  EndIf
 EndIf
EndIf

Wend

DetachGTList 0
Free Window 0

End


=== FIN SOURCE ===

Toujours pour ceux qui n'ont pas envie de s'abîmer les mains à taper mon code de cochon, je donne ici le source en ASCII. Le résultat obtenu est un peu décevant, mais l'ASM 68k est loin d'être mon langage de prédilection, ce qui fait que je n'ai pas pu aller aussi loin que je l'aurais voulu. Ceci dit, on ajoute tout de même un outil de programmation très pratique à notre petite collection et franchissons, l'air de rien, un pas important.


[Retour en haut] / [Retour aux articles] [Article précédent] / [Article suivant]