J'ai ici un petit problème que je n'arrive pas à résoudre... Le BASIC 1.0 de nos bons vieux CPC464 ne nous permet pas d'utiliser la fonction COPYCHR$, qui n'est malheureusement disponible qu'avec le BASIC 1.1. N'ayant pas envie de monter au grenier pour aller chercher un 6128 , j'ai essayé de trouver une alternative... que semble permettre un CALL &BB60. Cependant, je n'arrive pas à récupérer la valeur qui est sensée être retournée. D'après mes recherche, on devrait avoir un truc comme ça...
Sans avoir vérifié, j'ai tendance à penser que le passage de paramètre(s) à la suite d'un CALL ne sert qu'à transmettre à une routine assembleur des données. Ce n'est pas l'équivalent d'une fonction USR(x) qu'on trouve sur d'autres Basic (MSX, VG5000 !) qui rend un résultat dans une variable.
Pour simuler un COPYCHR$, il va falloir donc aligner un peu de code machine, en utilisant effectivement le vecteur &BB60.
Je vais voir ce que je peux faire avec l'assembleur "Dr Watson" que j'ai sur cassette. C'est le seul que j'ai sur vrai CPC. De toutes façons, je n'ai plus de lecteur de disquettes sur mon PC actuel, donc impossible de transférer Dams ou Maxam. Mais c'est pas grave.
Bon... il va falloir que je creuse un peu pour me faire une petite routine qui appellera &BB60 alors... C'est ça le fun de bidouiller sur nos bonnes vieilles bécanes!
Bon, finalement, j'ai jeté un oeil sur le sujet . Le plus simple est encore de récupérer dans une case mémoire le résultat du CALL.
ex :
CALL &BB60 LD (&BE80),A RET
Il suffit de faire un PEEK en &BE80 et hop.
Pour mettre à jour la variable appelée, c'est finalement pas beaucoup plus compliqué. A doit avoir été initialisée et appelée en paramètre lors du CALL. Comme le résultat est compris entre 0 et 255, ça devrait marcher à tous les coups .
Très bonne idée. Ca va m'éviter de chercher trop longtemps... En attendant, je m'étais résolu à coder sur 6128, avant de prendre le temps de regarder à la manière de procéder.
Ta méthode ne pouvait pas marcher car cette routine système, en &BB60, appellée "TXT RD CHAR", n'a pas besoin de recevoir de paramètre. Elle se borne à lire le caractère ASCII qui se trouve à l'emplacement du curseur, et à mettre sa valeur numérique dans le registre A. Tom&Jerry t'a donc donné une routine simple et pratique pour lire ce registre depuis le BASIC.
Plusieurs RSX très bien faites existent déjà, merci à l'ami hERMOL. Sinon, tu peux aussi faire comme ça en BASIC :
Code :
10 CLS: RESTORE 30 20 FOR i=&A000 to &A007:READ a$:POKE i,VAL("&"+a$):NEXT 30 DATA CD,60,BB,32,80,BE,C9 40 LOCATE 1,1:PRINT "CPCRULEZ" 50 LOCATE 7,1:CALL &A000 60 LOCATE 1,10:PRINT CHR$(PEEK(&BE80))
Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 8 invité(s)
Vous ne pouvez pas publier de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas insérer de pièces jointes dans ce forum