Journal [VINTAGE] "portage" taptempo en basic Amstrad CPC

Posté par  . Licence CC By‑SA.
Étiquettes :
26
13
mar.
2018

Nostalgie … un taptempo en basic pour Amstrad CPC. Au départ j'avais voulu faire un portage en basic pour TO7 mais je n'ai pas trouvé les fonctions qui me convenaient donc je l'ai fait en basic pour Amstrad CPC.

Pas de gestion de l'internationalisation, il manque des options à paramétrer, mais cette version donne l'essentiel : le tempo (en bpms) par rapport à la dernière frappe, et la moyenne sur 10 échantillons.

J'ai codé/testé sur http://www.cpcbox.com/ et via l'émulateur xcpc sous freebsd.

Le code que j'ai retapé à la main pour vous :

10 cls
20 rem initialisation
30 gosub 200
40 x$=""
50 gosub 2000
60 end
100 bpm=(60*50)/count
110 bpms(counterech)=bpm
120 gosub 300
130 gosub 400
140 print "Bpms: ";bpm
150 count=0
199 return
200 count=0
210 nbech=10
220 dim bpms(nbech)
230 x$=""
240 print "Hit enter key for each beat (q to quit)"
250 countereach=0
260 a$=inkeys:if a$="" then 260
299 return
300 nb1=0
310 z=0
320 for i=0 to nbech-1
330 if bpms(i) <> 0 then z=z+bpms(i):nb1=nb1+1
340 next i
350 print "Moy bpms: "; z/nb1
399 return
400 if counterech <> nbech then counterech = counterech+1 else counterech=0
499 return
2000 while x$ <> "q"
2010 x$=inkey$
2020 if x$ <> "" then gosub 100 else count=count+1
2030 wend
2099 return

une copies d'écran du listing avec le programme qui fonctionne :

page 1:
Image1

page 2:
Image1

L'exécution :
Image1

Pour info, la fonction inkey$ scrute le clavier tous les 1/50 de secondes, ce qui permet de calculer approximativement le tempo. Je suis certain qu'il est possible de faire mieux en optimisant le code, mais comme il est tard je laisse faire ceux qui en auraient envie.

  • # J'oubliais : Revue de code

    Posté par  . Évalué à 8.

    Comme j'ai recopié à la main le code de l'émulateur vers linuxfr, et qu'il est tard, est-ce que quelqu'un pourrait relire et signaler les fautes de copie s'il y en a ? J'ai essayé de faire attention mais je commence à avoir du mal à focaliser avec les yeux … Merci d'avance pour votre aide.

    • [^] # Re: J'oubliais : Revue de code

      Posté par  . Évalué à 8.

      Mouarf, tu me replonge dans cette époque ou les (des) codes des programmes étaient distribués sur papier et ou il fallait les taper à la main avant de les lancer :)

      • [^] # Re: J'oubliais : Revue de code

        Posté par  . Évalué à 3.

        ;) J'ai voulu garder l'esprit de cette époque …

      • [^] # Re: J'oubliais : Revue de code

        Posté par  (site web personnel) . Évalué à 5.

        Idem. Pour jouer à un jeu vidéo, à l’époque sur mon VG5000, il y avait deux options :

        • tenter de charger un jeu depuis une cassette audio, en priant pour que ça marche — de mémoire ça ne marchait à peu près jamais, au bout de quinze minutes de chargement (!) ça se terminait par une LOAD ERROR ;
        • saisir soi-même le code du jeu à partir d’un listing de plusieurs pages, ce qui pouvait par se terminer de plusieurs façons :
          • après une heure de saisie minutieuse, « pff ouais non mais en fait j’ai plus envie de jouer là » ;
          • « elle est où cette erreur purée ?! »
          • le truc bien marrant, à la fin de la saisie taper 2370 RUN au lieu de RUN tout court, ce qui conduit l’interpréteur à tenter de lancer 2370 fois le programme…

        Souvenirs…

      • [^] # Re: J'oubliais : Revue de code

        Posté par  (site web personnel, Mastodon) . Évalué à 5.

        hebdogiciel !
        Je m'en souviens comme si c'était hier, à passer des heures à taper des lignes de code sur mon amstrad cpc 664 (celui avec la disquette) et passer autant de temps à déboguer les erreurs de saisie.
        c'est également sur cette machine que j'ai codé mes premiers programmes en assembleur, d'ailleurs il manque encore le post du portage de taptempo en assembleur!

        https://www.funix.org mettez un manchot dans votre PC

    • [^] # Re: J'oubliais : Revue de code

      Posté par  . Évalué à 2. Dernière modification le 14 mars 2018 à 10:38.

      Comme j'ai recopié à la main le code de l'émulateur vers linuxfr

      Il est aussi possible de le sauvegarder au format ASCII :

      SAVE "fichdisc.xyz",A
      Puis de le récupérer par exemple avec cpcfs si il est sauvegardé dans un fichier dsk (image disque CPC).

      • [^] # Re: J'oubliais : Revue de code

        Posté par  . Évalué à 2.

        J'ai pas eu le temps de m'intéresser à cette méthode vu l'heure ou j'ai fait la copie, mais merci pour l'info. Ca pourrait peut-être me resservir.

  • # TIME

    Posté par  . Évalué à 10. Dernière modification le 13 mars 2018 à 07:14.

    Mince, je comptais la faire, celle-là ! Évidemment, je ne me suis pas pressé, mais je ne pensais pas que quelqu’un aurait la même idée saugrenue (bon, je t’ai pertinenté quand même)…

    Pour info, la fonction inkey$ scrute le clavier tous les 1/50 de secondes, ce qui permet de calculer approximativement le tempo.

    Pour ma part, j’aurais simplement utilisé INPUT pour attendre la frappe de la touche Return et TIME pour récupérer le temps (le BASIC de l’Amstrad est l’un des plus complet de l’époque, il a notamment une fonction TIME). TIME est en 1/300 de secondes, mais INPUT est probablement tributaire aussi de la fréquence de scan clavier.

    Ma version de base (test de faisabilité avant de regarder de plus près les fonctionnalités de l’originale) donnait ça :

    10 MODE 2
    20 PRINT "Calcul du tempo selon la frappe de la touche Return" : PRINT
    30 INPUT "Nombre d'echantillons (6 par defaut) ? ", nbech%
    40 IF nbech% < 2 THEN nbech% = 6
    50 DIM temps(nbech% - 1)
    60 nbmes% = 1
    70 INPUT "Tapez sur la touche Return (ou entrez q pour quitter) : ", r$
    80 temps(nbmes% MOD nbech%) = TIME
    90 IF nbmes% >= nbech% THEN PRINT "Battements par minute :"; 18000 * (nbech% - 1) / (temps(nbmes% MOD nbech%) - temps((nbmes% + 1) MOD nbech%))
    100 nbmes% = nbmes% + 1
    110 IF r$ <> "q" GOTO 70

    Enfin comme quoi des machines farcies de GHz et de Go et des langages super sophistiqués sont extrêmement surdimensionnés pour un tel besoin.

    « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

    • [^] # Re: TIME

      Posté par  . Évalué à 5.

      Mince, je comptais la faire, celle-là ! Évidemment, je ne me suis pas pressé, mais je ne pensais pas que quelqu’un aurait la même idée saugrenue (bon, je t’ai pertinenté quand même)…

      Si tu savais quelles idées saugrenues me passent par la tête … j'avais pensé le faire en basic sous Linux (yabasic), en adoptant un style vintage, mais la version VBA me paraissait un peu trop proche. J'ai tenté de me tourner vers le TO7 (plus familier avec cette machine car je fais partie des gens qui ont bénéficié du plan Informatique pour tous") mais je n'ai pas trouvé de fonction de gestion de temps adéquate, donc je me suis tourné vers l'amstrad CPC.

      Pour ma part, j’aurais simplement utilisé INPUT pour attendre la frappe de la touche Return et TIME pour récupérer le temps (le BASIC de l’Amstrad est l’un des plus complet de l’époque, il a notamment une fonction TIME).

      J'avais vu la fonction time, la fonction after il me semble, mais comme j'avais commencé à développer un truc qui ressemblait plus à ça en yabasic, j'ai fais plus ou moins la même chose.

      Enfin comme quoi des machines farcies de GHz et de Go et des langages super sophistiqués sont extrêmement surdimensionnés pour un tel besoin.

      Exactement.

    • [^] # Re: TIME

      Posté par  . Évalué à 1.

      Enfin comme quoi des machines farcies de GHz et de Go et des langages super sophistiqués sont extrêmement surdimensionnés pour un tel besoin.

      Vive le retour du ouaib en mode texte ! Bon par contre on a droit à l’UTF-8 pour les caractères drawbox etc ?

      • [^] # Re: TIME

        Posté par  . Évalué à 2.

        Vive le retour du ouaib en mode texte !

        Je militerais plutôt pour le retour du minitel.

        • [^] # Re: TIME

          Posté par  (site web personnel, Mastodon) . Évalué à 3.

          Je militerais plutôt pour le retour du minitel.

          Vu le débit du clavier de cet engin, je pense que TapTempo sera très imprécis…

          • [^] # Re: TIME

            Posté par  . Évalué à 2.

            Aparamment, la précision devrait être du même ordre que celle du zx81.

  • # et toujours pas de version WinDev

    Posté par  (site web personnel) . Évalué à 6.

    Comment ça on n'est pas vendredi ?

    Pas taper, je suis déjà dehors []

    ウィズコロナ

  • # Listing testé et approuvé sur une vraie machine

    Posté par  (site web personnel) . Évalué à 8.

    Excellent, ça m'a rappelé de bons souvenirs : taper des listings pendant des heures et ensuite passer des heures à corriger les fautes de frappe !!

    Et voilà le résultat :

    TapTempo sur Amstrad

    • [^] # Re: Listing testé et approuvé sur une vraie machine

      Posté par  . Évalué à 5.

      Cool, merci pour cette validation.

      ça m'a rappelé de bons souvenirs : taper des listings pendant des heures et ensuite passer des heures à corriger les fautes de frappe !!

      Ca signifie donc que mon journal a atteint son but: raviver les souvenirs et un certain plaisir que seuls ceux qui ont vécu ça peuvent comprendre. A mon avis ceux qui râlent contre les diverses implémentation de taptempo n'ont pas connu cette époque ou ne l'ont pas réellement appréciée.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.