CPC Rulez
https://cpcrulez.fr/forum/

copychr$ ou call &BB60
https://cpcrulez.fr/forum/viewtopic.php?f=4&t=5143
Page 1 sur 1

Auteur :  SSX [ 08 Nov 2013, 22:13 ]
Sujet du message :  copychr$ ou call &BB60

Bonsoir les CPCistes,

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 :oops: , 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...

10 CLS
20 PRINT "Test"
30 valeur%=0
40 LOCATE 1,1
50 CALL &BB60,@valeur%
60 LOCATE 1,3
70 PRINT "Caractère lu:";CHR$(valeur%)

Mais après le CALL &BB60, valeur% vaut toujours 0...
Avez-vous une idée de ce qui pourrait manquer à mon code pour reçevoir cette valeur?

C'est la première fois que j'essaye de faire appel à une routine du vecteur système, avec passage de paramètre.

Merci d'avance pour votre lumière...

Salutations Amstradiennes,
SSX

Auteur :  markerror [ 09 Nov 2013, 09:41 ]
Sujet du message :  Re: copychr$ ou call &BB60

Bonjour,

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.

T&J/GPA

Auteur :  SSX [ 09 Nov 2013, 12:29 ]
Sujet du message :  Re: copychr$ ou call &BB60

Merci pour ta réponse Markerror.

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!

Encore merci à toi!
A+
SSX

Auteur :  markerror [ 10 Nov 2013, 10:46 ]
Sujet du message :  Re: copychr$ ou call &BB60

Bonjour,

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 :-).

PUSH DE
CALL &BB60
POP DE
LD (DE),A
RET

Auteur :  SSX [ 10 Nov 2013, 16:34 ]
Sujet du message :  Re: copychr$ ou call &BB60

Très bonne idée.
Ca va m'éviter de chercher trop longtemps... :D
En attendant, je m'étais résolu à coder sur 6128, avant de prendre le temps de regarder à la manière de procéder.

Merci Markerror!

Auteur :  hERMOL [ 11 Nov 2013, 16:34 ]
Sujet du message :  Re: copychr$ ou call &BB60

sinon il existe un tas d'RSX qui font ce taf -> https://cpcrulez.fr/search-engine.php?s= ... 3D%3D&z=GO

J'ai retenu UPGRADE de ROLAND WADDILOVE et Copy-Funktion ..

Auteur :  sPOKE [ 07 Mars 2014, 01:01 ]
Sujet du message :  Re: copychr$ ou call &BB60

SSX a écrit :
50 CALL &BB60,@valeur%
Salut SSX,

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))

Page 1 sur 1 Le fuseau horaire est UTC+1 heure
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/