Derniers sujets
Qui est en ligne ?
Il y a en tout 1 utilisateur en ligne :: 0 Enregistré, 0 Invisible et 1 Invité Aucun
Le record du nombre d'utilisateurs en ligne est de 29 le Mer 25 Fév 2015 - 14:01
Connexion
Statistiques
Nous avons 243 membres enregistrésL'utilisateur enregistré le plus récent est paul225l
Nos membres ont posté un total de 8922 messages dans 811 sujets
Nombres négatifs 16 bits via DEEK
3 participants
Forum Oric :: Forums :: Forum Public :: BASIC
Page 1 sur 1
Nombres négatifs 16 bits via DEEK
Bonjour à tous,
Je rencontre un sérieux problème avec l'usage des nombres négatifs en BASIC.
Je veux pouvoir charger des entiers signés 16 bits et les manipuler dans des opérations arithmétique.
Mais je ne parviens pas à expliquer à DEEK que ce sont des nombres signés.
Voici le programme qui me permet de mettre en évidence le point sur lequel je bloque.
Ce programme charge les données 3, -2 et 2 fournies par DATA dans une plage mémoire (à #800) puis va les relire avec des DEEK.
Cela marche très bien pour les nombres positifs 3 et 2
Mais cela ne marche pas pour le nombre négatif -2
V1 = 3 , V2 = 65534 , V3 = 2
Alors que moi je voudrais qu'il affiche:
V1 = 3 , V2 = -2 , V3 = 2
Si je remplace la ligne 130 par
130 DATA 3, 0, -2, 0, 2, 0
Je tombe sur le message d'erreur:
?ILLEGAL QUANTITY ERROR IN 40
Comment puis-je faire pour avoir
V1 = 3 , V2 = -2 , V3 = 2
Merci d'avance à ceux qui pourront me venir en aide ..
Je rencontre un sérieux problème avec l'usage des nombres négatifs en BASIC.
Je veux pouvoir charger des entiers signés 16 bits et les manipuler dans des opérations arithmétique.
Mais je ne parviens pas à expliquer à DEEK que ce sont des nombres signés.
Voici le programme qui me permet de mettre en évidence le point sur lequel je bloque.
Ce programme charge les données 3, -2 et 2 fournies par DATA dans une plage mémoire (à #800) puis va les relire avec des DEEK.
Cela marche très bien pour les nombres positifs 3 et 2
Mais cela ne marche pas pour le nombre négatif -2
- Code:
10 LET ADRBASE = # 800
20 ' Je stocke mes donnees en memoire
30 FOR N=0TO5
40 : READ DTA: POKE ADRBASE+N,DTA
50 NEXT N
60 ' Je relis mes donnees depuis la memoire
70 LET OFFSET = 0
80 V1 = DEEK (ADRBASE + OFFSET): OFFSET = OFFSET + 2
90 V2 = DEEK (ADRBASE + OFFSET): OFFSET = OFFSET + 2
100 V3 = DEEK (ADRBASE + OFFSET): OFFSET = OFFSET + 2
110 PRINT "V1 = ";V1;", V2 = ";V2;", V3 = ";V3
120 ' Mes donnees
130 DATA 3, 0, #FE, #FF, 2, 0
V1 = 3 , V2 = 65534 , V3 = 2
Alors que moi je voudrais qu'il affiche:
V1 = 3 , V2 = -2 , V3 = 2
Si je remplace la ligne 130 par
130 DATA 3, 0, -2, 0, 2, 0
Je tombe sur le message d'erreur:
?ILLEGAL QUANTITY ERROR IN 40
Comment puis-je faire pour avoir
V1 = 3 , V2 = -2 , V3 = 2
Merci d'avance à ceux qui pourront me venir en aide ..
jbperin- Messages : 132
Date d'inscription : 05/11/2019
Localisation : Drôme
Re: Nombres négatifs 16 bits via DEEK
Si on stocke des valeurs en mémoire avec des variables Basic, on peut utiliser des nombres avec décimales, de grand format et négatifs, si l'on souhaite stocker "sois-même" des valeurs en mémoire avec Doke, on se retrouve avec des outils réduits: nombres positifs, entiers, avec une valeur maximum de 65535. La signature est choisie par le programmeur: on peut décider de la placer sur le bit 7 si on se contente de nombres sur un octet ou le bit 15 pour un nombre en 2 octets. Il faudra faire un calcul pour retrouver la valeur souhaitee.
kenneth- Modérateur
- Messages : 879
Date d'inscription : 13/01/2013
Age : 56
Localisation : 63
Re: Nombres négatifs 16 bits via DEEK
OK je comprends .. merci
Je te remercie pour cette explication.
Je tente d'abuser de ta gentillesse pour te soumettre deux questions concernant cette approche.
En fait à terme j'envisage de traiter ces données en assembleur.
Je les charge de cette manière pour maîtriser (et surtout) connaître leurs adresses.
Si je définis ces données en BASIC comment puis-je connaitre leurs adresses ?
Est-ce que je peux être sur que ce sera des 16 bits signés ?
Je te remercie pour cette explication.
Je tente d'abuser de ta gentillesse pour te soumettre deux questions concernant cette approche.
En fait à terme j'envisage de traiter ces données en assembleur.
Je les charge de cette manière pour maîtriser (et surtout) connaître leurs adresses.
Si je définis ces données en BASIC comment puis-je connaitre leurs adresses ?
Est-ce que je peux être sur que ce sera des 16 bits signés ?
jbperin- Messages : 132
Date d'inscription : 05/11/2019
Localisation : Drôme
Re: Nombres négatifs 16 bits via DEEK
kenneth a écrit:La signature est choisie par le programmeur:.
Oui je réalise que j'ai déjà un bout de code qui manipule une donnée BASIC en Assembleur .. et j'ai une piste pour connaitre l'adresse d'une variable BASIC dans le bouquin "les cléfs de l'Oric"
Merci pour tout ;-)
jbperin- Messages : 132
Date d'inscription : 05/11/2019
Localisation : Drôme
Re: Nombres négatifs 16 bits via DEEK
jbperin a écrit:Bonjour à tous,
Je rencontre un sérieux problème avec l'usage des nombres négatifs en BASIC.
Je veux pouvoir charger des entiers signés 16 bits et les manipuler dans des opérations arithmétique.
Mais je ne parviens pas à expliquer à DEEK que ce sont des nombres signés.
Voici le programme qui me permet de mettre en évidence le point sur lequel je bloque.
Ce programme charge les données 3, -2 et 2 fournies par DATA dans une plage mémoire (à #800) puis va les relire avec des DEEK.
Cela marche très bien pour les nombres positifs 3 et 2
Mais cela ne marche pas pour le nombre négatif -2Ce programme m'affiche:
- Code:
10 LET ADRBASE = # 800
20 ' Je stocke mes donnees en memoire
30 FOR N=0TO5
40 : READ DTA: POKE ADRBASE+N,DTA
50 NEXT N
60 ' Je relis mes donnees depuis la memoire
70 LET OFFSET = 0
80 V1 = DEEK (ADRBASE + OFFSET): OFFSET = OFFSET + 2
90 V2 = DEEK (ADRBASE + OFFSET): OFFSET = OFFSET + 2
100 V3 = DEEK (ADRBASE + OFFSET): OFFSET = OFFSET + 2
110 PRINT "V1 = ";V1;", V2 = ";V2;", V3 = ";V3
120 ' Mes donnees
130 DATA 3, 0, #FE, #FF, 2, 0
V1 = 3 , V2 = 65534 , V3 = 2
Alors que moi je voudrais qu'il affiche:
V1 = 3 , V2 = -2 , V3 = 2
Si je remplace la ligne 130 par
130 DATA 3, 0, -2, 0, 2, 0
Je tombe sur le message d'erreur:
?ILLEGAL QUANTITY ERROR IN 40
Comment puis-je faire pour avoir
V1 = 3 , V2 = -2 , V3 = 2
Merci d'avance à ceux qui pourront me venir en aide ..
Salut jbperin !
J'ai essayé de t'apporter un élément de réponse :
J'ai codé ce mini programme qui demande un nombre (négatif ou positif ) et le stock en ram adresse 0, puis il lit le nombre à cette même adresse et il l'affiche avec son signe. La condition est que le nombre 16 bits ne soit pas supérieur à 32767 ...
- Code:
10 CLS
20 PRINT "NOMBRE:";:INPUT A
30 PRINT"N/P";:INPUT S$
40 IF S$="N" THENA=A+32768
50 DOKE0,A
55 A=DEEK(0)
60 IFA>=32768THENA=A-32768:B=-A:ELSE
B=A
70 PRINT "NOMBRE LU EN RAM=";B
goyo- Messages : 199
Date d'inscription : 02/05/2014
Age : 52
Localisation : Massy
Re: Nombres négatifs 16 bits via DEEK
ha oui ok excellent ! :-)
c'est super astucieux ton histoire.
en plus ça illustre exactement le principe évoqué par kenneth .. c'est nous qui décidons si c'est négatif ou positif .. et il y a une petite mécanique à faire pour concrétiser ce choix.
Merci pour ce snippet
c'est super astucieux ton histoire.
en plus ça illustre exactement le principe évoqué par kenneth .. c'est nous qui décidons si c'est négatif ou positif .. et il y a une petite mécanique à faire pour concrétiser ce choix.
Merci pour ce snippet
jbperin- Messages : 132
Date d'inscription : 05/11/2019
Localisation : Drôme
Re: Nombres négatifs 16 bits via DEEK
Je viens de voir que Zodiac avait ouvert un sujet:
http://forums.oric.org/t100-a-propos-des-pokes-de-valeurs-negatives
http://forums.oric.org/t100-a-propos-des-pokes-de-valeurs-negatives
kenneth- Modérateur
- Messages : 879
Date d'inscription : 13/01/2013
Age : 56
Localisation : 63
Re: Nombres négatifs 16 bits via DEEK
belle astuce également
jbperin- Messages : 132
Date d'inscription : 05/11/2019
Localisation : Drôme
Forum Oric :: Forums :: Forum Public :: BASIC
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|
Dim 31 Mar 2024 - 14:35 par kenneth
» Bla Bla général du Jury
Jeu 21 Mar 2024 - 8:51 par Dom50
» carte mère Oric (re)tracée
Mar 5 Mar 2024 - 18:54 par kenneth
» Meurtre à Grande Vitesse
Dim 25 Fév 2024 - 5:09 par Iurius
» ORIC-1 sur LE BON COIN
Ven 23 Fév 2024 - 23:01 par Mcar
» ORIC ATMOS sur LE BON COIN
Dim 4 Fév 2024 - 12:06 par kiwilevrai
» Problème d'affichage des couleurs avec un Oric Atmos
Sam 27 Jan 2024 - 1:26 par pierbail
» Bienvenue dans le Forum des Oriciens
Mar 9 Jan 2024 - 12:33 par Dom50
» Rencontre avec Laurant Weill, co-fondateur de Loriciel, et mon garçon de 12 ans
Ven 29 Déc 2023 - 14:13 par Arcade-des-Monts
» Bonnes fêtes
Mar 26 Déc 2023 - 10:21 par Dom50
» Murders in Venice / Meutres à Venise
Sam 18 Nov 2023 - 22:44 par retroric
» Un clavier PS/2 pour tester un ORIC
Dim 27 Aoû 2023 - 9:49 par Voyageur
» Disquette 3" Sedoric
Mar 1 Aoû 2023 - 14:22 par AtomeX
» faire un 6502 avec des phototransistor
Dim 16 Juil 2023 - 17:26 par Voyageur
» Oricutron linux et DSK
Jeu 29 Juin 2023 - 18:34 par Voyageur