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

|user, |ren et poke.
https://cpcrulez.fr/forum/viewtopic.php?f=4&t=5285
Page 1 sur 1

Auteur :  Subaru [ 24 Juin 2014, 20:38 ]
Sujet du message :  |user, |ren et poke.

Yoo all.

En bouquinant un A100%, je suis tombée sur un poke permettant l'accés à l'user 229.

Ca a été easy de faire un ptit prog pour récupérer et déplacer (en les renommant) les fichiers effacés, mais en approfondissant le truc, je bute sur un problème.

Avec un poke &a701,xx (xx= 0 à 255), on peut naviguer dans les user d'un disque en outre-passant la barrière des 16 dispos depuis le basic (0 à 15).

Là, je bute sur la commande |ren car, si tout fonctionne très bien du 229 vers les user 0 à 15 (par exemple "rere.bak","0:rere.bak"), l'inverse est en train de me rendre dingue.

J'aimerais faire un truc complet, et donc, pouvoir faire naviguer mes fichiers de l'user 0 vers le 255 et vice-versa.

Comment "intégrer" ce fameux POKE, dans ma ligne de commande |ren ?

voici "grossomodo" à quoi ça ressemble.

Image

Les lignes en "REM" sont une des soluces que j'ai déjà tenté.

Merci pour vos éclaircissements. Image Image

Auteur :  TotO [ 24 Juin 2014, 21:49 ]
Sujet du message :  Re: |user, |ren et poke.

REN, ERA, ... ne doivent pas utiliser le numéro d'user.
Tu dois simplement poker l'user avant d'utiliser la commande.

Par contre POKE &A701,xx n'est pas la bonne façon de procéder et beaucoup font cette erreur.
(AMSDOS n'étant pas toujours à la même adresse mémoire. C'est fonction des autres ROMs installées sur le CPC)

Voici deux lignes de code à insérer au début de ton programme :
Code :
10 DOSADDR=VAL("&"+HEX$(PEEK(&BE7E),2)+HEX$(PEEK(&BE7D),2))
20 DRVADDR=DOSADDR:USRADDR=DOSADDR+1

DOSADDR correspond à l'adresse de AMSDOS en mémoire. (&A700 sur un CPC sans extension, donc)
DRVADDR correspond à l'adresse du "drive" courant. (c'est la même oui)
USRADDR correspond à l'adresse du "user" courant.

Tu feras donc un POKE USRADDR,229 pour accéder proprement aux fichiers effacés.

Maintenant, ton programme montre que tu ne sais pas comment utiliser POKE.
Ecrire à octet : POKE <adresse>,<octet>
Lire un octet : octet=PEEK(<adresse>)

Auteur :  Subaru [ 24 Juin 2014, 22:17 ]
Sujet du message :  Re: |user, |ren et poke.

J'avoue être un peu paumée là. Les tests que je fais, le sont sur emul en mode 6128, et ça fonctionne bien au niveau de l'adresse mém. :twisted: (A moins que cela vienne du fait que le bank manager n'est pas activé, pour la seconde bank de 64k ?)

Donc, si j'ai bien capté, vu que la commande |ren a besoin de "voir" le fichier source, je ne peux pas faire ce transfert au delà de l'user 15, en le mentionnant dans le nouveau nom ? :(


Edit: Oui, les peek et poke ont toujours été ma bête noire. Même en parcourant le livre de Micro Application, j'avoue avoir toujours du mal. :sweatingbullets:

Mais je vais me pencher sur ce que tu préconises. thx. Image Image

Auteur :  TotO [ 24 Juin 2014, 23:19 ]
Sujet du message :  Re: |user, |ren et poke.

Ce que je dis, c'est qu'il ne faut pas utiliser le paramètre "user" avec les RSX |REN, |ERA, |DIR car il est limité à une valeur comprise entre 0 à 15. Mais tu peux quand même utiliser ces RSX sans spécifier l'user !!!
(dans ce cas, c'est le numéro courant qui est utilisé par défaut... Et c'est ça que tu dois modifier)

Code :
POKE &A701,229:|REN,"0:filename","filename"
au lieu de
Code :
|REN,"0:filename","229:filename"
qui lui ne fonctionne pas !

La même chose pour |ERA et |DIR... On utilise pas le paramètre user.

Auteur :  Subaru [ 24 Juin 2014, 23:32 ]
Sujet du message :  Re: |user, |ren et poke.

Ok thx. Image

C'est donc normal que je bute dessus alors. :sigh:

Je peux donc REN dans un sens, mais pas l'autre (au delà du |user,15).

Tans pis, ça aurait été marrant et bien plus complet. :D

Auteur :  TotO [ 24 Juin 2014, 23:37 ]
Sujet du message :  Re: |user, |ren et poke.

j'ai mis à jour mon post précédent, car je me suis trompé dans la syntaxe.
En gros, tu utilises le user avec le nom de fichier s'il est compris entre 0 et 15.
Sinon, tu utilises le POKE pour changer la valeur par défaut et tu n'indiques pas le numéro de user.

Tu peux donc utiliser REN pour déplacer dans les deux sens, à la seule condition qu'il y ait l'un ou l'autre avec une valeur inférieure à 15 !
Donc pas de soucis pour 0 vers 229 ou 229 vers 0.

Auteur :  remax [ 24 Juin 2014, 23:47 ]
Sujet du message :  Re: |user, |ren et poke.

TotO a écrit :
Ce que je dis, c'est qu'il ne faut pas utiliser le paramètre "user" avec les RSX |REN, |ERA, |DIR car il est limité à une valeur comprise entre 0 à 15. Mais tu peux quand même utiliser ces RSX sans spécifier l'user !!!
(dans ce cas, c'est le numéro courant qui est utilisé par défaut... Et c'est ça que tu dois modifier)

Code :
POKE &A701,229:|REN,"0:filename","filename"
au lieu de
Code :
|REN,"0:filename","229:filename"
qui lui ne fonctionne pas !

La même chose pour |ERA et |DIR... On utilise pas le paramètre user.


moi j'ai compris et c'était parfaitement clair :lechecul:

Auteur :  Subaru [ 24 Juin 2014, 23:52 ]
Sujet du message :  Re: |user, |ren et poke.

Code :
POKE &A701,229:|REN,"0:filename","filename"

Ceci ne fonctionne pas. :(

Le CPC répond que le fichier existe déjà, puis migre sur l'user "poké"

Puis le problême, vient du fait que je voudrais utiliser |REN avec les valeurs obtenues via les input, pour les noms source et cible (@nn$ et @an$). :sigh:

Auteur :  TotO [ 25 Juin 2014, 08:04 ]
Sujet du message :  Re: |user, |ren et poke.

Le problème, c'est que si tu ne comprends pas ce qui est écrit, tu n'arriveras jamais à faire ton programme.

Si le CPC t'indique que le fichier existe déjà, c'est... Qu'il existe déjà.
Tu ne peux pas déplacer de 229 vers 0, si en 0 un fichier du même nom est présent.
- Soit, tu renommes celui en 0 avant de faire le déplacement.
- Soit, tu effaces celui en 0 avant de faire le déplacement.
- Soit, tu déplaces avec un nom différent.

Concernant le poke, comme expliqué, il change la valeur du "user" courant.
Il est donc normal de te retrouver en 229 si tu ne restaures pas l'ancienne valeur.

ce que tu dois faire:
- en début de programme: olduser=peek(&a701)
- en fin de programme: poke &a701,olduser

Concernant tes variables, il suffit de remplacer les valeurs numériques et les chaines de texte avec.

Auteur :  Subaru [ 25 Juin 2014, 16:28 ]
Sujet du message :  Re: |user, |ren et poke.

Ce que je comprends dans ce texte,

Code :
POKE &A701,229:|REN,"0:filename","filename"

C'est que:

Le poke passe l'user "courant" en 229, puis renomme un fichier de l'user 0 vers le 229 (et donc, le déplace).

Donc si ma compréhension est OK, bin ça fonctionne pas et le CPC me répond ce que j'ai marqué plus haut.

Il semble vouloir renomer le fichier sur l'user 0 puis passe sur l'user "destination" pour le déplacer.

'fin bon. Je termine dabord les dump que j'ai à faire, puis je me replonge dans ce truc.

Merci en tous cas. Image

Auteur :  Serpico [ 25 Sep 2014, 17:57 ]
Sujet du message :  Re: |user, |ren et poke.

Image

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