Obligement - L'Amiga au maximum

Lundi 26 juin 2017 - 12:35  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

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

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


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


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


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Soutien

N'hésitez pas à soutenir le projet Obligement



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]