Derniers sujets
» CEO-MAG 324
Hier à 23:40 par kenneth

» Fumons un peu...
Sam 22 Avr 2017 - 22:50 par Symoon

» Rions un peu....
Sam 22 Avr 2017 - 19:21 par kiwilevrai

» Bienvenue dans le Forum des Oriciens
Ven 14 Avr 2017 - 10:48 par Jede

» Organisation RAM vidéo
Jeu 13 Avr 2017 - 21:39 par Davros

» mode HIRES et mémoire perdue ?
Jeu 13 Avr 2017 - 8:44 par didierv

» MISE EN PLACE DE L'ENVIRONNEMENT C
Mer 12 Avr 2017 - 16:13 par Davros

» F83-Standard par Thierry Bestel
Mar 11 Avr 2017 - 16:33 par assinie

» AC 2017: écrans Hires
Lun 10 Avr 2017 - 21:11 par Symoon

» Interface Son Oric ?
Lun 10 Avr 2017 - 20:42 par Davros

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

Récupérer mon mot de passe

Statistiques
Nous avons 116 membres enregistrés
L'utilisateur enregistré le plus récent est Davros

Nos membres ont posté un total de 5239 messages dans 371 sujets
Portail ORIC




Programmation BASIC

Page 2 sur 3 Précédent  1, 2, 3  Suivant

Voir le sujet précédent Voir le sujet suivant Aller en bas

Re: Programmation BASIC

Message  kiwilevrai le Mer 19 Mar 2014 - 7:29

Bonjour,

Les adresses sont uniquement nécessaires lorsqu'il s'agit de programmes en langage machine.
J'avais oublié de le préciser  Embarassed 

Bon courage et bonne transformation .TAP en .COM

A plus
avatar
kiwilevrai

Messages : 131
Date d'inscription : 11/03/2014
Localisation : Nord

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  maximus le Mer 19 Mar 2014 - 8:15

Ha Ok merci bien  Very Happy 

Il ne faut pas hésiter à m'expliquer en détail, de plus je suis sur que d'autres apprécieront
avatar
maximus

Messages : 1079
Date d'inscription : 02/12/2012
Age : 56
Localisation : Nimes

http://cinema.forumactif.org/

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  maximus le Dim 23 Mar 2014 - 9:32

Bine le bonjour, est il possibe de stocker des valeurs numériques avec POKE ? j'essaie de stocker les valeurs du labyrinthe directement en mémoire, mais j'ai ILLEGAL QUANTITY ERROR en voulant mettre -1

Merci  Wink 
avatar
maximus

Messages : 1079
Date d'inscription : 02/12/2012
Age : 56
Localisation : Nimes

http://cinema.forumactif.org/

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  Hialmar le Dim 23 Mar 2014 - 10:00

Tu peux pas stocker de valeurs négatives avec des POKE donc soit tu décales tout de 1, -1 devient 0, 0 devient 1...
Ou alors tu le code de façon standard en complément à deux mais du coup ton Max sera à 127 sur un octet au lieu de 255 et quand tu fais un PEEK tu es obligé de faire 128 - la valeur peekée.

PS : c'est dimanche matin donc je suis un peu rouillé et si ça se trouve l'opération est un peu différente mais c'est l'idée.
Oui je me suis bien planté, si tu veux le faire correctement il faut faire ça :
http://fr.wikipedia.org/wiki/Complément_à_deux
avatar
Hialmar
Admin

Messages : 814
Date d'inscription : 03/03/2014
Age : 47
Localisation : Toulouse

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  maximus le Dim 23 Mar 2014 - 10:55

Houla des maths, vite un aspégic  clown 
avatar
maximus

Messages : 1079
Date d'inscription : 02/12/2012
Age : 56
Localisation : Nimes

http://cinema.forumactif.org/

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  Hialmar le Dim 23 Mar 2014 - 11:40

Bon j'ai essayé de faire du complément à 2 avec le BASIC Oric et c'est clairement galère puisqu'on a rien pour faire de l'arithmétique binaire.

Je te conseille plutôt de trouver tes valeurs min (exemple -10) et max (exemple 100) et de faire comme ça :
Si V contient la valeur a stocker, tu poke V-min
Ensuite après le peek tu ajoute min.

Dans mon exemple ça donne des poke adr,V+10 et des peek(adr)-10.

Attention de bien vérifier que max-min+1<=255 sinon tu va te reprendre une ILLEGAL QUANTITY ERROR.
Si tu veux des valeurs plus grandes il te faut faire avec des deek et des doke mais si ton but est d'économiser de la mémoire ça va pas être très utile.
avatar
Hialmar
Admin

Messages : 814
Date d'inscription : 03/03/2014
Age : 47
Localisation : Toulouse

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  kenneth le Dim 23 Mar 2014 - 12:06

Il faut etre sur qu'il n'y ait pas de valeurs décimales, sinon tout ce qui se trouve derriere la virgule disparait. Dans le cas obligé:
pour stocker V=3.22 multiplier par 100 puis le rediviser au moment de le récuperer. Comme la valeur dépasse 255, je la place dans un double octet avec DOKE

DOKE ADR,V*100

pour lire la valeur
V=DEEK(ADR)/100

Si je prends l'exemple le plus tordu avec des valeurs négatives, décimales et grandes en suivant le conseil de Hialmar

V=-300.22

DOKE ADR,V*100+32768

Pour lire la valeur
V=(DEEK(ADR)-32768)/100

Avec ca on peut gerer de -327.68 a +327.67

A plus Wink 

avatar
kenneth
Modérateur

Messages : 325
Date d'inscription : 13/01/2013
Age : 49
Localisation : 63

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  Hialmar le Dim 23 Mar 2014 - 12:07

Ah oui c'est vrai j'avais supposé que tu ne gérais que des entiers.
avatar
Hialmar
Admin

Messages : 814
Date d'inscription : 03/03/2014
Age : 47
Localisation : Toulouse

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  maximus le Dim 23 Mar 2014 - 13:39

Merci messieurs  Wink 
avatar
maximus

Messages : 1079
Date d'inscription : 02/12/2012
Age : 56
Localisation : Nimes

http://cinema.forumactif.org/

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  Hialmar le Ven 28 Mar 2014 - 9:11

Je suis en train de lire le bouquin de Geoff Phillips et c'est super intéressant :
http://home.btconnect.com/geffers/files/contents.htm

Pour les problèmes d'optimisation mémoire il y a quelques infos là dedans :
http://home.btconnect.com/geffers/files/chap2.htm

En particulier, il dit que les variables entières ne prennent pas moins de place que les variables numériques (7 octets dans les deux cas).
Pour avoir un gain de place il faut faire des tableaux et là on passe à 2 octets par "case" du tableau ce qui est bien plus efficace. Du moins si on en a beaucoup car il y a un entête de 5 octets + 2 octets par dimension donc ça commence à être intéressant à 3 car on remplace 3*7 = 21 octets par 5 + 2 + 2*3 = 13 octets.
Bien sûr stocker avec un POKE dans un octet c'est encore mieux mais moins pratique.
avatar
Hialmar
Admin

Messages : 814
Date d'inscription : 03/03/2014
Age : 47
Localisation : Toulouse

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  maximus le Sam 29 Mar 2014 - 20:58

^^ Oui c'est sûr qu'il faudrait potasser, mais j'ai la flemme  Embarassed 

Par contre oui tout ce qui est en DATA peut être stocké dans des tableaux et utilisé avec STORE et RECALL  Very Happy  (merci Chloé)

Quelqu'un sait il comment effacer le CAPS en haut à droite, mais sans passer en minuscule ?
avatar
maximus

Messages : 1079
Date d'inscription : 02/12/2012
Age : 56
Localisation : Nimes

http://cinema.forumactif.org/

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  kenneth le Sam 29 Mar 2014 - 21:58

maximus a écrit:

Quelqu'un sait il comment effacer le CAPS en haut à droite, mais sans passer en minuscule ?
POKE48035,0
avatar
kenneth
Modérateur

Messages : 325
Date d'inscription : 13/01/2013
Age : 49
Localisation : 63

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  maximus le Sam 29 Mar 2014 - 22:32

Merci  Wink 

avatar
maximus

Messages : 1079
Date d'inscription : 02/12/2012
Age : 56
Localisation : Nimes

http://cinema.forumactif.org/

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  Dom50 le Sam 29 Mar 2014 - 23:19

Attention Maxi,
si tu utilises STORE et RECALL pour sauver des variables ton jeu ne tournera pas sur disquette. Ces deux instructions ne sont pas gérées par SEDORIC.
avatar
Dom50

Messages : 623
Date d'inscription : 06/12/2012
Localisation : Normandie

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  maximus le Dim 30 Mar 2014 - 10:45

flute, crotte de bique et caca boudin, ...  Shocked 

j'ai aucune pratique de sédoric (n'ayant jamais eu de lecteur de disquette)

y a t il un équivalent qui permet de ne pas mettre tous les datas dans le programme principal ? mais à part, afin d'économiser de la mémoire

avatar
maximus

Messages : 1079
Date d'inscription : 02/12/2012
Age : 56
Localisation : Nimes

http://cinema.forumactif.org/

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  Dom50 le Dim 30 Mar 2014 - 12:42

j'ai testé un truc qui a l'air de marcher. Je te le livre tel quel.
 
Ecrire un premier programme BASIC pour créer les variables. Pour gagner réellement de la place comme le disait Hialmar, il vaut mieux des variables entières (%).
(par exemple)
10 DIMA%(10,10),B%(25)
20 FORI=0TO10
25 FORJ=0TO10
30 A%(I,J)=I*J (c'est un exemple, tu peux mettre ici une série de DATAet un READ)
40 NEXTJ,I
60 FORI=0TO25
70 B%(I)=16 (encore un exemple initialisation à une valeur constante)
75 NEXT
80 SAVEO"DATA.DAT",A DEEK(#9E),E DEEK(#A0) (sauve d'un coup la zone mémoire qui contient les valeurs des deux tableaux)
 
Pour comprendre ce bout de listing il faut savoir que les tableaux sont stokés entre les adresses contenues dans $9E-$9F (début des tableaux) et $A0-$A1 (fin des tableaux)
 
Donc, on crée les tableaux normalement et on sauve sur disquette, la zonne mémoire correspondante.
 
 
Dans le programme utilisateur ci dessous:
 
10 DIMA%(10,10),B%(25)
20 LOAD"DATA.DAT",A DEEK(#9E)
30 PRINTB%(22)
40 PRINTA%(5,9)
 
On crée les tableaux  par une suite d'instructions DIM identique à celle du premier programme.
puis immediatement derrière on charge les données, mais c'est là l'astuce, à la valeur actuelle (correspondant à CE listing) de l'adresse de début des tableaux. D'où le DEEK(#9E) après le LOAD.
 
Ca à l'air de marcher  Smile 
 
Après l'excution du premier programme les tableaux sauvés sont entre $05AB et $06E1.
Ils sont rechargés dans le deuxième entre $054E et $0684.
 
Les deux PRINT donnent bien 16 et 45 ....
avatar
Dom50

Messages : 623
Date d'inscription : 06/12/2012
Localisation : Normandie

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  maximus le Jeu 3 Avr 2014 - 0:03

Zut j'avais raté ton message Domi  Wink 

Merci beaucoup, j'en prends bonne note, il me faudra bien abandonner STORE/RECALL pour la version finale, mais pour le moment c'est plus simple pour moi d'utiliser les versions K7, car l'OSDK produit des fichiers TAP, rendez vous donc à la fin dans ...?? xx mois pour la version disquette  Wink 
avatar
maximus

Messages : 1079
Date d'inscription : 02/12/2012
Age : 56
Localisation : Nimes

http://cinema.forumactif.org/

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  Hialmar le Ven 25 Avr 2014 - 14:48

Je suis en train de réfléchir au passage du jeu au format disquette et je reviens sur ce message.

Le problème c'est qu'il faudrait sauver les tableaux indépendamment les uns des autres (comme le font STORE et RECALL).

Est-ce que quelqu'un à une idée de comment faire pour récupérer l'adresse de début et celle de fin d'un tableau ?

Je peux calculer tout ça à la main bien sûr mais si il y a une solution plus simple je suis preneur.

Je pense qu'en plus pour les tableaux de chaines de caractères ça va être encore plus compliqué.
avatar
Hialmar
Admin

Messages : 814
Date d'inscription : 03/03/2014
Age : 47
Localisation : Toulouse

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  Hialmar le Ven 25 Avr 2014 - 16:51

Bon je croyais avoir trouvé une solution en utilisant les fichiers séquentiels de Sedoric mais j'ai un pb.

Voilà mon code :
Code:

 1 PRINT "CRETAB"                   
  10 DIM A%(10,10)                   
  15 DIM B%(25)                       
  20 FOR I=0 TO 10                   
  25 FOR J=0 TO 10                   
  30 A%(I,J)=I*J                     
  40 NEXT J,I                         
  60 FOR I=0 TO 25                   
  70 B%(I)=16                         
  75 NEXT                             
  80 OPEN S,"DATA.DAT",0               
  90 PUT 0,10                         
  100 PUT 0,10                       
  110 FOR I=0 TO 10                   
  120 FOR J=0 TO 10                   
  130 PUT 0,A%(I,J)                   
  140 NEXT J,I                       
  150 CLOSE 0             

J'ai repris le programme de Dom mais au lieu de sauver avec les adresses, j'ouvre un fichier séquentiel, j'y écrit les tailles de la matrice A%, puis toutes les valeurs et je ferme le fichier.

Mais ça me génère l'erreur : ?FILE NOT OPEN ERROR IN 90
Si j'exécute les commandes à la main ça marche mais pas dans le programme.
Code:

  OPEN S,"DATA.TAB",0                 
                                       
  Ready                               
  PUT 0,10                             
                                       
  Ready                               
  CLOSE                               
                                       
  Ready                               
  OPEN S,"DATA.TAB",0                 
                                       
  Ready                               
  TAKE 0,A                             
                                       
  Ready                               
  PRINT A                             
  10                                 
                                       
  Ready                               
avatar
Hialmar
Admin

Messages : 814
Date d'inscription : 03/03/2014
Age : 47
Localisation : Toulouse

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  Dom50 le Ven 25 Avr 2014 - 17:49

Hialmar a écrit:Mais ça me génère l'erreur : ?FILE NOT OPEN ERROR IN 90
J'ai l'impression, après consultation de la doc du microdisc, que les numéros de fichiers doivent commencer à 1 et non à 0

Essaie :  80 OPEN S,"DATA.DAT",1

Ca va peut-être marcher  Very Happy
avatar
Dom50

Messages : 623
Date d'inscription : 06/12/2012
Localisation : Normandie

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  Danynou le Ven 25 Avr 2014 - 17:55

Bonsoir,

si tu ouvre ton fichier en premier ligne 5 tu n'as pas de message d'erreur !!

5 OPEN S,"DATA.DAT",0
bien sur il faut supprimer la ligne 80

à tester
avatar
Danynou

Messages : 115
Date d'inscription : 26/01/2014
Age : 66
Localisation : Entre Normandie et Var

http://famiglia-sinagra.forumdediscussions.com/

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  Hialmar le Ven 25 Avr 2014 - 18:11

Merci je vais tester ça.

C'est probablement parceque l'ouverture prend du temps non ?
avatar
Hialmar
Admin

Messages : 814
Date d'inscription : 03/03/2014
Age : 47
Localisation : Toulouse

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  Danynou le Ven 25 Avr 2014 - 18:35

Réponse !!




Bon courage pour la suite  Smile 

@++
avatar
Danynou

Messages : 115
Date d'inscription : 26/01/2014
Age : 66
Localisation : Entre Normandie et Var

http://famiglia-sinagra.forumdediscussions.com/

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  Hialmar le Ven 25 Avr 2014 - 19:17

Je viens de tester et ça marche nickel.

Pour le second programme qui ne fait que lire ça marche aussi très bien sans le délai donc ça vient  probablement d'autre chose qu'un problème de vitesse.

Je remet les deux programmes au cas où ça intéresserait quelqu'un :

Code:

  1 PRINT "CRETAB"                   
  5 OPEN S,"DATA.DAT",0               
  10 DIM A%(10,10)                   
  15 DIM B%(25)                       
  20 FOR I=0 TO 10                   
  25 FOR J=0 TO 10                   
  30 A%(I,J)=I*J                     
  40 NEXT J,I                         
  60 FOR I=0 TO 25                   
  70 B%(I)=16                         
  75 NEXT                             
  85 WAIT 100                         
  90 PUT 0,10                         
  100 PUT 0,10                       
  110 FOR I=0 TO 10                   
  120 FOR J=0 TO 10                   
  130 PUT 0,A%(I,J)                   
  140 NEXT J,I                       
  150 CLOSE 0                         
Code:
                                   
   1 PRINT "LOATAB"                    
  5 OPEN S,"DATA.DAT",0                
   10 DIM A%(10,10)                    
  15 DIM B%(25)                        
   90 TAKE 0,A                          
   100 TAKE 0,B                        
  110 FOR I=0 TO A                    
  120 FOR J=0 TO B                    
  130 TAKE 0,A%(I,J)                  
  135 PRINT A%(I,J)                    
   140 NEXT J,I                        
  150 CLOSE 0
avatar
Hialmar
Admin

Messages : 814
Date d'inscription : 03/03/2014
Age : 47
Localisation : Toulouse

Revenir en haut Aller en bas

Programmation Basic

Message  Zodiac le Ven 25 Avr 2014 - 20:24

Bonsoir Hialmar,

Cela provient du fait que le SED réserve un tampon, pour les entrées sorties lors de l'ouverture d'un fichier . Donc il est préférable de déclarer tes ouvertures de fichiers avant toute affectation de variable (dans ton cas le tableau A%).
D'ailleurs dans le cas d'autres SED tel que RANDOS ou autres, il faut déclarer, au début du programme un FILES N (N représentant le nombre de tampon à réserver ).
Pour tester mes dires dans ton programme, place une Ligne 77 CLEAR et tu verras que tu n'auras pas d'anomalie, mais c'est sûr du fait du CLEAR, le tableau A% est repassé à zéro avant le OPEN.
Au fait, de mémoire, je crois que le début de la zone des tableaux se trouve en  9E et 9F. Mais je pense que c'est possible de calculer l'adresse ou est stocké un tableau.

A+
avatar
Zodiac

Messages : 93
Date d'inscription : 27/01/2014
Localisation : Yvelines

Revenir en haut Aller en bas

Re: Programmation BASIC

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Page 2 sur 3 Précédent  1, 2, 3  Suivant

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum