[VG5000] comment trouver la bonne vram pour les setet et seteg resolu

Cette catégorie traite de développements récents pour nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [VG5000] comment trouver la bonne vram pour les setet et seteg resolu

Message par hlide »

Ben je ne sais plus faire du BASIC :/
Avatar de l’utilisateur
rendomizer
Messages : 413
Inscription : 17 juin 2016 21:00
Contact :

Re: [VG5000] comment convertir des decimal en hexadecimal

Message par rendomizer »

Resolu:
dectohex1.png
dectohex1.png (197.86 Kio) Consulté 4241 fois
dectohex2.png
dectohex2.png (163.73 Kio) Consulté 4241 fois
Je ne suis qu'un utilisateur pas un pro
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [VG5000] comment trouver la bonne vram pour les setet et seteg resolu

Message par __sam__ »

Que penses tu de ceci ?

Code : Tout sélectionner

INPUT A:H$="0123456789ABCDEF":PRINT MID$(H$, INT(A/16)+1,1);MID$(H$,(A AND 15)+1,1)
Remarque: on peut utiliser MOD 16 si le AND bit a bit n'existe pas
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
rendomizer
Messages : 413
Inscription : 17 juin 2016 21:00
Contact :

Re: [VG5000] comment trouver la bonne vram pour les setet et seteg resolu

Message par rendomizer »

__sam__ a écrit : 30 juil. 2020 15:11 Que penses tu de ceci ?

Code : Tout sélectionner

INPUT A:H$="0123456789ABCDEF":PRINT MID$(H$, INT(A/16)+1,1);MID$(H$,(A AND 15)+1,1)
Remarque: on peut utiliser MOD 16 si le AND bit a bit n'existe pas
wow !!! merci sam c'est du jedi ton code pour moi mais ça marche !
Je ne suis qu'un utilisateur pas un pro
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [VG5000] comment trouver la bonne vram pour les setet et seteg resolu

Message par __sam__ »

Merci. Tu devrais regarder et essayer de comprendre comment il marche. Ca vaut le coup!

Soluce: C'est juste pareil que ton code, mais en remplaçant les "IF" par un accès à un tableau (un caractère dans une chaîne en fait).

Le challenge quand on a compris le truc est d'en faire une version pour des nombres à 4 chiffres (genre 65535), puis avec autant de chiffres que nécessaire (4095 doit utiliser 3 chiffres, 65536 quant à lui: 5) ;)
[code]
10 INPUT A:H$="0123456789ABCDEF":R$=""
20 R$=MID$(H$,A-INT(A/16)*16+1,1) + R$:A=INT(A/16):IF A<>0 THEN GOTO 20 ' Utiliser FIX si INT fait un débordement de capacité
30 PRINT R$[/code]
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [VG5000] comment trouver la bonne vram pour les setet et seteg resolu

Message par __sam__ »

__sam__ a écrit : 30 juil. 2020 23:56 Merci. Tu devrais regarder et essayer de comprendre comment il marche. Ca vaut le coup!

Soluce: C'est juste pareil que ton code, mais en remplaçant les "IF" par un accès à un tableau (un caractère dans une chaîne en fait).

Le challenge quand on a compris le truc est d'en faire une version pour des nombres à 4 chiffres (genre 65535), puis avec autant de chiffres que nécessaire (15 :arrow: 1 chiffre, 255 :arrow: 2 chiffres, 4095 :arrow: 3 chiffres, 65536 quant à lui doit utiliser 5 chiffres) ;)
Soluce: [code]
10 INPUT A:H$="0123456789ABCDEF":R$=""
20 R$=MID$(H$,A-INT(A/16)*16+1,1) + R$:A=INT(A/16):IF A<>0 THEN GOTO 20 ' Utiliser FIX si INT fait un débordement de capacité
30 PRINT R$[/code]
(débrouillez vous pour trouver un moyen de la lire dans mon message si vous n'arrivez pas à la coder tout seul, non mais ca serait trop façile sinon :mrgreen: )
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [VG5000] comment trouver la bonne vram pour les setet et seteg resolu

Message par hlide »

Ou le faire en 1+log2(nombre de chiffre hexa) dans l'hypothèse que ça reste un nombre compris entre 0 et 65535

Code : Tout sélectionner


10 INPUT A:GOSUB 100
...
100 H$="0123456789ABCDEF"
110 B = INT(A/256): GOSUB 120: A = A AND 255
120 B = INT(A/16): GOSUB 130: A = A AND 15
130 PRINT MID$(H$,(B AND 15)+1,1); 
121 RETURN
Non testé...

Si on place la définition de H$ initialement au début du programme, il suffirait de faire GOSUB 130 pour afficher un nibble en hexa, GOSUB 120 pour un octet, GOSUB 110 pour un mot 16-bit.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [VG5000] comment trouver la bonne vram pour les setet et seteg resolu

Message par __sam__ »

Ce prog marche peut-être (jai un doute car les manips entre B et A ne me semble pas homogènes), mais il a surtout un gros défaut: il affiche 0007 (4 chiffres) quand on entre 7. Or on en voudrait qu'un, pas quatre ou trois qui lui est réservé à la version britannique (on en a pour son ag[r]ent) [*]. La solution est pas loin (je la vois, mais j'ai une bonne lunette, cf mes centres d’intérêts dans mon profil), et pratiquement plus simple.
___
[*] cette blague m'a mise sur le Q :mrgreen:
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [VG5000] comment trouver la bonne vram pour les setet et seteg resolu

Message par hlide »

J'aime bien que les octets soient sur deux chiffres et les mots 16-bit sur quatre, je trouve ça plus homogène pour l'indentation.

Et je déteste les programmes qui génère du C avec un tableau contenant des octets avec 1 ou deux chiffres hexa : c'est illisible et ça illustre la paresse du codeur de ne pas faire l'effort d'une indentation pour rendre lisible.
Dernière modification par hlide le 31 juil. 2020 12:26, modifié 1 fois.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [VG5000] comment trouver la bonne vram pour les setet et seteg resolu

Message par __sam__ »

Oui sauf que là c'est toujours 4 octets. Si on veut a tout prix une longueur paire j'ajoute un

Code : Tout sélectionner

IF (LEN(R$)AND1) THEN R$="0"+R$
dans ma soluce.

PS: En basic, du moins sur thomson, 0 s'interprète en faux. Sinon il faut faire "(EXPRESSION)<>0" et ca marche pareil.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [VG5000] comment trouver la bonne vram pour les setet et seteg resolu

Message par hlide »

Oui mais là je montre une solution récursive : tu veux du 32-bit, tu rajoutes une ligne. Tu veux du 64-bit, ça fera deux lignes (mais je doute que le basic soit en mesure de le contenir parfaitement). Tu veux un affichage 1, 2, 4 ou 8 chiffres, tu appelles le bon GOSUB et le code reste mutualisé - pas optimal mais de toute façon tout ce qui est fait en BASIC n'est pas optimal, ce MID$ par exemple ne vaut pas la version en C :

Code : Tout sélectionner

"0123456789ABCDEF"[number&15]
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [VG5000] comment trouver la bonne vram pour les setet et seteg resolu

Message par hlide »

Et tu as raison de douter, je viens de le voir :

B = A / 256: GOSUB ... -> B = A / 16 <-------------- ce n'est pas bon. Bon je vais arrêter avec le BASIC. Je n'ai jamais vraiment aimé ce langage qui ne t'incite pas à faire de la bonne programmation. Surtout avec les GOTO <ligne> Beuuurk !
Répondre