L'école [En Cours] Space Manbow Mappe complète. Mappe du Jeu Space Manbow.
ericb59
Membre non connecté
Conseiller Municipal
Reprise du message précédent
igal, si tu ne veux que des nombres positifs, tu peux multiplier ta variable par SGN(variable)SGN() retourne -1 ou 1 suivant que la variable est negative ou positive
A=-5
a=((a-1)MOD190)*SGN(a)
Te donnera toujours un nombre positif ou 0
Y a surement moyen de l'utiliser aussi avec la formule de Metalion
igal :
@Métalion: Ta formule fonctionne parfaitement avec les Valeurs positives mais pour les valeurs négatives, le scroll reste figé à Zéro.
Il suffit que tu travailles uniquement avec les valeurs positives ....
Je ne vois d'ailleurs pas pourquoi tu as besoin des valeurs négatives.
Pour rappel, VDP(24) est un registre du VDP qui prends uniquement concrètement les valeurs de 0 à 255.
Le BASIC permet des valeurs négatives, mais c'est uniquement une question d'encodage en octet signé (-127 est codé par la valeur binaire 129 par exemple). Edité par Metalion Le 08/08/2017 à 13h38
MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
igal
Membre non connecté
Conseiller Municipal
Je vous remercie pour vos idées que je n'ai pas encore expérimenté.
Cependant, cette nuit en réfléchissant au pourquoi du comment, je me suis rappelé que VDP(24) n'accepte pas les valeurs négatives si bien que pour scroller dans le sens "non naturel", il faut procéder comme suit:
1) incrémenter VDP(24) de 254.
2) indiquer que si la valeurs 255 est atteinte, celle ci se réinitialise à 0.
3) retourner à la ligne (1)
Concrètement, cela donne cette formule.
10 A=254
20 VDP(24)=VDP(24)+A AND 255
30 GOTO 20
Dans mon cas, puisque je ne veux "surtout" pas de "Boucle, je dois procéder comme suit:
Sachant que les formules proposées par Métalion, Manuel ainsi que Sd_Snatcher (du forum Msx.org) ont tous les trois donnés une solution pour scroller dans le "Sens Naturel".
Voici la formule de manuel que j’appréhende le mieux:
VDP(24) = VDP(24) + 1 + (VDP(24) = HS)
Ce qui donne ceci:
460 'choix du repertoire des bribes
470 CALL CHDIR ("0")
471 COPY"1"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+1+(VDP(24)=HS)
472 COPY"2"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+1+(VDP(24)=HS)
473 COPY"3"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+1+(VDP(24)=HS)
474 COPY"4"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+1+(VDP(24)=HS)
475 COPY"5"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+1+(VDP(24)=HS)
476 COPY"6"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+1+(VDP(24)=HS)
477 COPY"7"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+1+(VDP(24)=HS)
478 COPY"8"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+1+(VDP(24)=HS)
480 CALL CHDIR (".."):CALL CHDIR ("1")
Nb: CALL CHDIR ("0") jusqu'à CALL CHDIR ("F") contiennent les 128 Bribes larges de 2 Pixels pour afficher une "Image complète" par la biais de la commande SET SCROLL VA.
Maintenant, le problème consiste à remplacer +1 par une variable "DR" comme suggéré par "Manuel".
En théorie:
Si l'on "valorise" DR par 1, on devrait obtenir un scroll avec des décors qui ont l'air de "monter".
Si l'on "valorise" DR par 254, on devrait obtenir un scroll avec des décors qui ont l'air de "descendre".
Sachant que VDP(24) se limite à 255, il faut donc intégrer AND255 pour réinitialiser l'incrémentation ce qui nous donnerait:
10 DR=254 :' Donne l'impression de scroller un décor descendant.
15 'DR=1 :' Donne l'impression de scroller un décor montant.
20 HS=180
460 'choix du repertoire des bribes
470 CALL CHDIR ("0")
471 COPY"1"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+DR AND 255+(VDP(24)=HS)
472 COPY"2"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+DR AND 255+(VDP(24)=HS)
473 COPY"3"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+DR AND 255+(VDP(24)=HS)
474 COPY"4"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+DR AND 255+(VDP(24)=HS)
475 COPY"5"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+DR AND 255+(VDP(24)=HS)
476 COPY"6"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+DR AND 255+(VDP(24)=HS)
477 COPY"7"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+DR AND 255+(VDP(24)=HS)
478 COPY"8"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+DR AND 255+(VDP(24)=HS)
480 CALL CHDIR (".."):CALL CHDIR ("1")
La grande question est de savoir si HS et DR peuvent cohabiter dans la même "Formule" sachant que DR s'incrémente de 254 mais se réinitialise à 0 lorsque 255 est atteint et que dans le même temps, HS attend d'atteindre 180 pour limiter l'incrémentation
Bref...En attendant de mener les essais qui conviennent, j'attends vos spéculations Edité par igal Le 08/08/2017 à 12h03
Cependant, cette nuit en réfléchissant au pourquoi du comment, je me suis rappelé que VDP(24) n'accepte pas les valeurs négatives si bien que pour scroller dans le sens "non naturel", il faut procéder comme suit:
1) incrémenter VDP(24) de 254.
2) indiquer que si la valeurs 255 est atteinte, celle ci se réinitialise à 0.
3) retourner à la ligne (1)
Concrètement, cela donne cette formule.
10 A=254
20 VDP(24)=VDP(24)+A AND 255
30 GOTO 20
Dans mon cas, puisque je ne veux "surtout" pas de "Boucle, je dois procéder comme suit:
Sachant que les formules proposées par Métalion, Manuel ainsi que Sd_Snatcher (du forum Msx.org) ont tous les trois donnés une solution pour scroller dans le "Sens Naturel".
Voici la formule de manuel que j’appréhende le mieux:
VDP(24) = VDP(24) + 1 + (VDP(24) = HS)
Ce qui donne ceci:
460 'choix du repertoire des bribes
470 CALL CHDIR ("0")
471 COPY"1"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+1+(VDP(24)=HS)
472 COPY"2"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+1+(VDP(24)=HS)
473 COPY"3"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+1+(VDP(24)=HS)
474 COPY"4"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+1+(VDP(24)=HS)
475 COPY"5"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+1+(VDP(24)=HS)
476 COPY"6"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+1+(VDP(24)=HS)
477 COPY"7"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+1+(VDP(24)=HS)
478 COPY"8"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+1+(VDP(24)=HS)
480 CALL CHDIR (".."):CALL CHDIR ("1")
Nb: CALL CHDIR ("0") jusqu'à CALL CHDIR ("F") contiennent les 128 Bribes larges de 2 Pixels pour afficher une "Image complète" par la biais de la commande SET SCROLL VA.
Maintenant, le problème consiste à remplacer +1 par une variable "DR" comme suggéré par "Manuel".
En théorie:
Si l'on "valorise" DR par 1, on devrait obtenir un scroll avec des décors qui ont l'air de "monter".
Si l'on "valorise" DR par 254, on devrait obtenir un scroll avec des décors qui ont l'air de "descendre".
Sachant que VDP(24) se limite à 255, il faut donc intégrer AND255 pour réinitialiser l'incrémentation ce qui nous donnerait:
10 DR=254 :' Donne l'impression de scroller un décor descendant.
15 'DR=1 :' Donne l'impression de scroller un décor montant.
20 HS=180
460 'choix du repertoire des bribes
470 CALL CHDIR ("0")
471 COPY"1"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+DR AND 255+(VDP(24)=HS)
472 COPY"2"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+DR AND 255+(VDP(24)=HS)
473 COPY"3"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+DR AND 255+(VDP(24)=HS)
474 COPY"4"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+DR AND 255+(VDP(24)=HS)
475 COPY"5"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+DR AND 255+(VDP(24)=HS)
476 COPY"6"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+DR AND 255+(VDP(24)=HS)
477 COPY"7"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+DR AND 255+(VDP(24)=HS)
478 COPY"8"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=VDP(24)+DR AND 255+(VDP(24)=HS)
480 CALL CHDIR (".."):CALL CHDIR ("1")
La grande question est de savoir si HS et DR peuvent cohabiter dans la même "Formule" sachant que DR s'incrémente de 254 mais se réinitialise à 0 lorsque 255 est atteint et que dans le même temps, HS attend d'atteindre 180 pour limiter l'incrémentation
Bref...En attendant de mener les essais qui conviennent, j'attends vos spéculations Edité par igal Le 08/08/2017 à 12h03
igal:
CQFD
Cependant, cette nuit en réfléchissant au pourquoi du comment, je me suis rappelé que VDP(24) n'accepte pas les valeurs négatives
CQFD
MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
igal
Membre non connecté
Conseiller Municipal
Finalement, Manuel à apporté une solution qui me convient
200 HA=0:'Latitude du copy Verticale
205 HS=190:'Buté du scroll V Verticale
210 DR=-2:'Direction du scroll V Verticale vers le Bas
215 'DR=2:'Direction du scroll V Verticale vers le Haut
471 COPY"1"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=(VDP(24)+DR+DR*(HS=VDP(24)))AND255
472 COPY"2"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=(VDP(24)+DR+DR*(HS=VDP(24)))AND255
473 COPY"3"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=(VDP(24)+DR+DR*(HS=VDP(24)))AND255
474 COPY"4"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=(VDP(24)+DR+DR*(HS=VDP(24)))AND255
475 COPY"5"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=(VDP(24)+DR+DR*(HS=VDP(24)))AND255
476 COPY"6"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=(VDP(24)+DR+DR*(HS=VDP(24)))AND255
477 COPY"7"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=(VDP(24)+DR+DR*(HS=VDP(24)))AND255
478 COPY"8"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=(VDP(24)+DR+DR*(HS=VDP(24)))AND255
480 CALL CHDIR (".."):CALL CHDIR ("1")
J'ai intégré un simple sprite pour voir ce que cela donne
La prochaine étape est encore une fois, le déplacement de la zone de sprite depuis la page Zéro vers la Page 1
J'ai tendu la perche à Manuel, on va voir si il maitrise cette question
200 HA=0:'Latitude du copy Verticale
205 HS=190:'Buté du scroll V Verticale
210 DR=-2:'Direction du scroll V Verticale vers le Bas
215 'DR=2:'Direction du scroll V Verticale vers le Haut
471 COPY"1"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=(VDP(24)+DR+DR*(HS=VDP(24)))AND255
472 COPY"2"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=(VDP(24)+DR+DR*(HS=VDP(24)))AND255
473 COPY"3"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=(VDP(24)+DR+DR*(HS=VDP(24)))AND255
474 COPY"4"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=(VDP(24)+DR+DR*(HS=VDP(24)))AND255
475 COPY"5"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=(VDP(24)+DR+DR*(HS=VDP(24)))AND255
476 COPY"6"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=(VDP(24)+DR+DR*(HS=VDP(24)))AND255
477 COPY"7"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=(VDP(24)+DR+DR*(HS=VDP(24)))AND255
478 COPY"8"TO(VA,HA):VA=VA+2:SETSCROLLVA:VDP(24)=(VDP(24)+DR+DR*(HS=VDP(24)))AND255
480 CALL CHDIR (".."):CALL CHDIR ("1")
J'ai intégré un simple sprite pour voir ce que cela donne
La prochaine étape est encore une fois, le déplacement de la zone de sprite depuis la page Zéro vers la Page 1
J'ai tendu la perche à Manuel, on va voir si il maitrise cette question
"igal":
Sujet déjà discuté en long, en large et en travers, avec présentation des différentes solutions, ici : https://msxvillage.fr/forum/topic.php?id=2642
A quoi ça sert qu'on se décarcasse si tu n'utilises pas les solutions qu'on te propose et qu'on explique en détail ...
La prochaine étape est encore une fois, le déplacement de la zone de sprite depuis la page Zéro vers la Page 1
J'ai tendu la perche à Manuel, on va voir si il maitrise cette question
J'ai tendu la perche à Manuel, on va voir si il maitrise cette question
Sujet déjà discuté en long, en large et en travers, avec présentation des différentes solutions, ici : https://msxvillage.fr/forum/topic.php?id=2642
A quoi ça sert qu'on se décarcasse si tu n'utilises pas les solutions qu'on te propose et qu'on explique en détail ...
MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
igal
Membre non connecté
Conseiller Municipal
J'essais de trouver la solution.
Je dois entrer dans 16 répertoires classés identifiés en hexadécimale de 0 à F.
une partie de la solution concernant les bribes à lire m'a été donnée par Manuel du forum Msx.org.
Pour le moment, le programme se présente comme suit:
J'ai donc besoin de réduire efficacement ce programme.
Sachant encore une fois que l'incrémentation doit se faire depuis 0 jusqu'à F.
Nb: Merci de ne pas me faire chier à me dire "...solution page macin etc..."
J'ai essayé et rééssayé mais j'y arrive pas...Donc si vous avez une solution (plutôt qu'une remarque), merci
Je dois entrer dans 16 répertoires classés identifiés en hexadécimale de 0 à F.
une partie de la solution concernant les bribes à lire m'a été donnée par Manuel du forum Msx.org.
Pour le moment, le programme se présente comme suit:
Code CPP :
4700 CALL CHDIR ("0") 4710 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880 4720 PC=PC+1:IFPC<9THEN4710ELSEPC=1 4790 CALL CHDIR ("..") 4800 CALL CHDIR ("1") 4810 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880 4820 PC=PC+1:IFPC<9THEN4810ELSEPC=1 4890 CALL CHDIR ("..") 4900 CALL CHDIR ("2") 4910 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880 4920 PC=PC+1:IFPC<9THEN4910ELSEPC=1 4990 CALL CHDIR ("..") 5000 CALL CHDIR ("3") 5010 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880 5020 PC=PC+1:IFPC<9THEN5010ELSEPC=1 5090 CALL CHDIR ("..") 5100 CALL CHDIR ("4") 5110 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880 5120 PC=PC+1:IFPC<9THEN5110ELSEPC=1 5190 CALL CHDIR ("..") 5200 CALL CHDIR ("5") 5210 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880 5220 PC=PC+1:IFPC<9THEN5210ELSEPC=1 5290 CALL CHDIR ("..") 5300 CALL CHDIR ("6") 5310 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880 5320 PC=PC+1:IFPC<9THEN5310ELSEPC=1 5390 CALL CHDIR ("..") 5400 CALL CHDIR ("7") 5410 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880 5420 PC=PC+1:IFPC<9THEN5410ELSEPC=1 5490 CALL CHDIR ("..") 5500 CALL CHDIR ("8") 5510 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880 5520 PC=PC+1:IFPC<9THEN5510ELSEPC=1 5590 CALL CHDIR ("..") 5600 CALL CHDIR ("9") 5610 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880 5620 PC=PC+1:IFPC<9THEN5610ELSEPC=1 5690 CALL CHDIR ("..") 5700 CALL CHDIR ("A") 5710 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880 5720 PC=PC+1:IFPC<9THEN5710ELSEPC=1 5790 CALL CHDIR ("..") 5800 CALL CHDIR ("B") 5810 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880 5820 PC=PC+1:IFPC<9THEN5810ELSEPC=1 5890 CALL CHDIR ("..") 5900 CALL CHDIR ("C") 5910 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880 5920 PC=PC+1:IFPC<9THEN5910ELSEPC=1 5990 CALL CHDIR ("..") 6000 CALL CHDIR ("D") 6010 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880 6020 PC=PC+1:IFPC<9THEN6010ELSEPC=1 6090 CALL CHDIR ("..") 6100 CALL CHDIR ("E") 6110 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880 6120 PC=PC+1:IFPC<9THEN6110ELSEPC=1 6190 CALL CHDIR ("..") 6200 CALL CHDIR ("F") 6210 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880 6220 PC=PC+1:IFPC<9THEN6210ELSEPC=1 6290 CALL CHDIR ("..")
J'ai donc besoin de réduire efficacement ce programme.
Sachant encore une fois que l'incrémentation doit se faire depuis 0 jusqu'à F.
Nb: Merci de ne pas me faire chier à me dire "...solution page macin etc..."
J'ai essayé et rééssayé mais j'y arrive pas...Donc si vous avez une solution (plutôt qu'une remarque), merci
Visiteurs
Vagabond
Message : 0
as tu essayé un truc du genre :
4700 CALL CHDIR ("0")
4710 GOSUB 10000
4790 CALL CHDIR ("..")
4800 CALL CHDIR ("1")
4810 GOSUB 10000
4890 CALL CHDIR ("..")
etc....
10000 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880
10010 PC=PC+1:IFPC<9THEN10000ELSEPC=1
10020 RETURN
4700 CALL CHDIR ("0")
4710 GOSUB 10000
4790 CALL CHDIR ("..")
4800 CALL CHDIR ("1")
4810 GOSUB 10000
4890 CALL CHDIR ("..")
etc....
10000 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880
10010 PC=PC+1:IFPC<9THEN10000ELSEPC=1
10020 RETURN
igal
Membre non connecté
Conseiller Municipal
Salut sylvain: merci pour l'intérêt que tu portes à ma question mais dans mon cas, je ne dois pas changer d'arborescence.
D'ailleurs, il s'agit la de l'arborescence la plus profonde du moteur puisqu'on y atteint les fichiers "bribes" nommées 0,1,2...jusqu'à 7.
Salut jipe: le but étant de réduire le volume de ce listing , voici un début de solution que m'avais proposé manuel se msx.org.
CHDIR(CHR$(65+DR))
DR=DR+1 etc...
Qui a pour effet de désigné la lettre A puis B puis C etc.. jusqu'à F.
Le problème c'est que mes répertoires vont de 0 à F et non pas de A à F
Le but de la manoeuvre étant de réduire ce listing de 16 paquets de commandes à 1 seul paquet de commandes.
Comment corriger la solution de manuel pour que ça le fasse de 0 à F?
Merci de votre aide Edité par igal Le 18/01/2018 à 19h57
D'ailleurs, il s'agit la de l'arborescence la plus profonde du moteur puisqu'on y atteint les fichiers "bribes" nommées 0,1,2...jusqu'à 7.
Salut jipe: le but étant de réduire le volume de ce listing , voici un début de solution que m'avais proposé manuel se msx.org.
CHDIR(CHR$(65+DR))
DR=DR+1 etc...
Qui a pour effet de désigné la lettre A puis B puis C etc.. jusqu'à F.
Le problème c'est que mes répertoires vont de 0 à F et non pas de A à F
Le but de la manoeuvre étant de réduire ce listing de 16 paquets de commandes à 1 seul paquet de commandes.
Comment corriger la solution de manuel pour que ça le fasse de 0 à F?
Merci de votre aide Edité par igal Le 18/01/2018 à 19h57
Visiteurs
Vagabond
Message : 0
Solution 1 :
4690 PC=1
4700 FOR I=48 TO 70:IF I=58 THEN I=65
4710 CALL CHDIR (CHR$(I))
4720 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880
4730 PC=PC+1:IFPC<9THEN4710ELSEPC=1
4740 CALL CHDIR ("..")
4750 NEXT I
Solution 2 :
4690 PC=1
4700 RESTORE 9000
4710 FOR I=1 TO 16
4720 CALL CHDIR (READ A$)
4730 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880
4740 PC=PC+1:IFPC<9THEN4710ELSEPC=1
4750 CALL CHDIR ("..")
4760 NEXT I
...
9000 DATA 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
Solution 3 : nommer les répertoire de A à P au lieu de 0 à F
4690 PC=1
4700 FOR I=65 TO 80
4710 CALL CHDIR (CHR$(I))
4720 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880
4730 PC=PC+1:IFPC<9THEN4710ELSEPC=1
4740 CALL CHDIR ("..")
4750 NEXT I
Solution 4 : créer des répertoires récursifs tous nommés 0 et placer les fichiers bribes de 1 à 8 dans chacun de ces répertoires
avantage : évite de faire un CALL CHDIR ("..") donc gain de temps
4690 PC=1
4700 FOR I=1 TO 16
4710 CALL CHDIR ("0")
4720 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880
4730 PC=PC+1:IFPC<9THEN4710ELSEPC=1
4750 NEXT I
Solution 5 : nommer les bribes A1 à A8, B1 à B8, .. , P1 à P8 et rester dans le même répertoire.
Edité par Visiteurs Le 19/01/2018 à 08h09
4690 PC=1
4700 FOR I=48 TO 70:IF I=58 THEN I=65
4710 CALL CHDIR (CHR$(I))
4720 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880
4730 PC=PC+1:IFPC<9THEN4710ELSEPC=1
4740 CALL CHDIR ("..")
4750 NEXT I
Solution 2 :
4690 PC=1
4700 RESTORE 9000
4710 FOR I=1 TO 16
4720 CALL CHDIR (READ A$)
4730 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880
4740 PC=PC+1:IFPC<9THEN4710ELSEPC=1
4750 CALL CHDIR ("..")
4760 NEXT I
...
9000 DATA 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
Solution 3 : nommer les répertoire de A à P au lieu de 0 à F
4690 PC=1
4700 FOR I=65 TO 80
4710 CALL CHDIR (CHR$(I))
4720 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880
4730 PC=PC+1:IFPC<9THEN4710ELSEPC=1
4740 CALL CHDIR ("..")
4750 NEXT I
Solution 4 : créer des répertoires récursifs tous nommés 0 et placer les fichiers bribes de 1 à 8 dans chacun de ces répertoires
avantage : évite de faire un CALL CHDIR ("..") donc gain de temps
4690 PC=1
4700 FOR I=1 TO 16
4710 CALL CHDIR ("0")
4720 COPY RIGHT$(STR$(PC),1)TO(VA,HA):ONS+1GOSUB 800,810,820,830,840,850,860,870,880
4730 PC=PC+1:IFPC<9THEN4710ELSEPC=1
4750 NEXT I
Solution 5 : nommer les bribes A1 à A8, B1 à B8, .. , P1 à P8 et rester dans le même répertoire.
Edité par Visiteurs Le 19/01/2018 à 08h09
igal
Membre non connecté
Conseiller Municipal
Ouaouh...Tu carbure au banania au p'tit dèj
La solution 1: ajoute une condition supplémentaire avec "IF I=" ainsi que des valeurs qui s'entremêlement. Pas évident pour une évolution éventuelle du moteur.
La solution 2: peut être une bonne solution d'autant qu'on très facilement envisager une lecture dans le sens inverse pour scroller en sens inverse
La solution 3 Semble être la plus rapide pour le MSX puisqu'elle incrémente simplement de A à 16 fois jusqu'à P
Solution 5: Par expérience, je sais qu'elle n'est pas très adapté au MSX. En effet, la lecture de fichiers nommés sur 2 octets prends beaucoup plus de temps que sur 1 seul octet. D'autre part, le regroupement d'un grand nombre de fichier dans un même répertoire fait chuter lourdement le temps d'accès au fichier désiré.
Concernant la solution 4 semble la plus adaptée:
1) On peut créer une certaine profondeur en mettant répertoire dans répertoire comme un jeu de poupée russe, mais je connais pas la limite d'arborescences possible sur le MSX sachant qu'il en faut 16 en tout!
2) Le gain serait très intéressant puisqu'on se débarrasse de 50% des appelles Disques pour changer de répertoire.
3) on économise une commande en Basic.
J'essais de plonger la dedans dans la journée et si c'est concluant, je ferai un vidéo du moulin
Merci pour vos idées, ca fait plaisir de lire des suggestions positives, peu importe qu'elles soient farfelues ou présentés avec des arguments en béton le principale étant d'avoir une approche positive, le reste n'étant que le plaisir de mettre en pratique diverses idées et voir même les comparer à d'autres.
Que ça rame ou que ça plane, le principal est le petit plaisir de faire et le grand plaisir d'avoir fait
La solution 1: ajoute une condition supplémentaire avec "IF I=" ainsi que des valeurs qui s'entremêlement. Pas évident pour une évolution éventuelle du moteur.
La solution 2: peut être une bonne solution d'autant qu'on très facilement envisager une lecture dans le sens inverse pour scroller en sens inverse
La solution 3 Semble être la plus rapide pour le MSX puisqu'elle incrémente simplement de A à 16 fois jusqu'à P
Solution 5: Par expérience, je sais qu'elle n'est pas très adapté au MSX. En effet, la lecture de fichiers nommés sur 2 octets prends beaucoup plus de temps que sur 1 seul octet. D'autre part, le regroupement d'un grand nombre de fichier dans un même répertoire fait chuter lourdement le temps d'accès au fichier désiré.
Concernant la solution 4 semble la plus adaptée:
1) On peut créer une certaine profondeur en mettant répertoire dans répertoire comme un jeu de poupée russe, mais je connais pas la limite d'arborescences possible sur le MSX sachant qu'il en faut 16 en tout!
2) Le gain serait très intéressant puisqu'on se débarrasse de 50% des appelles Disques pour changer de répertoire.
3) on économise une commande en Basic.
J'essais de plonger la dedans dans la journée et si c'est concluant, je ferai un vidéo du moulin
Merci pour vos idées, ca fait plaisir de lire des suggestions positives, peu importe qu'elles soient farfelues ou présentés avec des arguments en béton le principale étant d'avoir une approche positive, le reste n'étant que le plaisir de mettre en pratique diverses idées et voir même les comparer à d'autres.
Que ça rame ou que ça plane, le principal est le petit plaisir de faire et le grand plaisir d'avoir fait
Visiteurs
Vagabond
Message : 0
Donc ma première réponse était bonne Je ne me suis pas suffisamment fait comprendre
Je n'ai pas trouvé la profondeur maximum du nombre de sous répertoires dans les spécifications MS-DOS, mais un petit test m'indique que c'est 32.
Là c'est une copie d'écran le test en cours :
Bonne continuation! Edité par Visiteurs Le 19/01/2018 à 10h12
Je n'ai pas trouvé la profondeur maximum du nombre de sous répertoires dans les spécifications MS-DOS, mais un petit test m'indique que c'est 32.
Là c'est une copie d'écran le test en cours :
Bonne continuation! Edité par Visiteurs Le 19/01/2018 à 10h12
igal
Membre non connecté
Conseiller Municipal
C'est cool j'ai essayé aussi de mon coté l’arborescence sous dos jusqu'à 16 niveau et ca devrait aussi fonctionner sous basic je pense
En fait, la complétude des arborescences d'un profondeur de 16 répertoires dans lesquels se trouvent 8 fichiers (bribes) soit (16 rep X 8 fichiers = 128 fichiers) forment un ensemble qui est en fait une image large de 256 pixels découpée en tranches verticales larges de 2 pixels (tranches verticales permettant l'affichage par COPY) .
De fait, un nouveau problème va se poser:
Avec mon ancienne approche:
Disons que mon approche pour lire l'ensemble des fichiers consistait à consulter des répertoires de façon latérale...Comme si les répertoires étaient rangés les uns à la droite des autres... Il suffisait donc de ressortir "d'une seule arborescence après lecture de chaque groupe de 8 fichiers" pour pouvoir ensuite rentrer dans un nouveau répertoire... L'opération étant répétée 16 fois.
Avec ton approche:
En appliquant ta technique, une fois qu'on a fini de lire le 8 ieme fichier qui se trouve dans la 16 arborescence en profondeur, il faut remonter 16 arborescences pour pouvoir attaquer une nouvelle série de répertoires contenant les 128 fichiers formant une nouvelle image qui formera la suite du scrolling
CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR ("..")
Ma question est donc la suivante:
Existe t il une commande en BASIC ou encore une astuce (n'importe laquelle) qui permette de remonter à la racine ou encore de 16 arborescence?
Merci pour toute vos idées
Edité par igal Le 19/01/2018 à 11h28
En fait, la complétude des arborescences d'un profondeur de 16 répertoires dans lesquels se trouvent 8 fichiers (bribes) soit (16 rep X 8 fichiers = 128 fichiers) forment un ensemble qui est en fait une image large de 256 pixels découpée en tranches verticales larges de 2 pixels (tranches verticales permettant l'affichage par COPY) .
De fait, un nouveau problème va se poser:
Avec mon ancienne approche:
Disons que mon approche pour lire l'ensemble des fichiers consistait à consulter des répertoires de façon latérale...Comme si les répertoires étaient rangés les uns à la droite des autres... Il suffisait donc de ressortir "d'une seule arborescence après lecture de chaque groupe de 8 fichiers" pour pouvoir ensuite rentrer dans un nouveau répertoire... L'opération étant répétée 16 fois.
Avec ton approche:
En appliquant ta technique, une fois qu'on a fini de lire le 8 ieme fichier qui se trouve dans la 16 arborescence en profondeur, il faut remonter 16 arborescences pour pouvoir attaquer une nouvelle série de répertoires contenant les 128 fichiers formant une nouvelle image qui formera la suite du scrolling
CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR (".."):CALL CHDIR ("..")
Ma question est donc la suivante:
Existe t il une commande en BASIC ou encore une astuce (n'importe laquelle) qui permette de remonter à la racine ou encore de 16 arborescence?
Merci pour toute vos idées
Edité par igal Le 19/01/2018 à 11h28
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie