Forum Oric
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Derniers sujets
» Bla Bla général du Jury
Equivalent de la commande NEW du Basic EmptyJeu 21 Mar 2024 - 8:51 par Dom50

» carte mère Oric (re)tracée
Equivalent de la commande NEW du Basic EmptyMar 5 Mar 2024 - 18:54 par kenneth

» Meurtre à Grande Vitesse
Equivalent de la commande NEW du Basic EmptyDim 25 Fév 2024 - 5:09 par Iurius

» ORIC-1 sur LE BON COIN
Equivalent de la commande NEW du Basic EmptyVen 23 Fév 2024 - 23:01 par Mcar

» ORIC ATMOS sur LE BON COIN
Equivalent de la commande NEW du Basic EmptyDim 4 Fév 2024 - 12:06 par kiwilevrai

» Problème d'affichage des couleurs avec un Oric Atmos
Equivalent de la commande NEW du Basic EmptySam 27 Jan 2024 - 1:26 par pierbail

» Bienvenue dans le Forum des Oriciens
Equivalent de la commande NEW du Basic EmptyMar 9 Jan 2024 - 12:33 par Dom50

» Rencontre avec Laurant Weill, co-fondateur de Loriciel, et mon garçon de 12 ans
Equivalent de la commande NEW du Basic EmptyVen 29 Déc 2023 - 14:13 par Arcade-des-Monts

» Bonnes fêtes
Equivalent de la commande NEW du Basic EmptyMar 26 Déc 2023 - 10:21 par Dom50

» Murders in Venice / Meutres à Venise
Equivalent de la commande NEW du Basic EmptySam 18 Nov 2023 - 22:44 par retroric

» Un clavier PS/2 pour tester un ORIC
Equivalent de la commande NEW du Basic EmptyDim 27 Aoû 2023 - 9:49 par Voyageur

» Disquette 3" Sedoric
Equivalent de la commande NEW du Basic EmptyMar 1 Aoû 2023 - 14:22 par AtomeX

» faire un 6502 avec des phototransistor
Equivalent de la commande NEW du Basic EmptyDim 16 Juil 2023 - 17:26 par Voyageur

» Oricutron linux et DSK
Equivalent de la commande NEW du Basic EmptyJeu 29 Juin 2023 - 18:34 par Voyageur

» No Problem !
Equivalent de la commande NEW du Basic EmptyDim 25 Juin 2023 - 17:53 par Voyageur

Qui est en ligne ?
Il y a en tout 2 utilisateurs en ligne :: 0 Enregistré, 0 Invisible et 2 Invités

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 241 membres enregistrés
L'utilisateur enregistré le plus récent est ben_frog

Nos membres ont posté un total de 8921 messages dans 811 sujets
Sites Sympas

> Culture Club


Le Deal du moment : -50%
-50% sur les sacs à dos pour ordinateur ...
Voir le deal
19.99 €

Equivalent de la commande NEW du Basic

3 participants

Aller en bas

Equivalent de la commande NEW du Basic Empty Equivalent de la commande NEW du Basic

Message par Hialmar Jeu 8 Mai 2014 - 18:07

J'ai un programme écrit en C et ASM qui démarre, via Sedoric, un programme écrit en Basic (et vice-versa - en fait ça fait des aller-retours).

Mon problème c'est qu'apparemment je bousille la gestion des variables et des tableaux.

Donc il faudrait que je ré-initialise ça avant de charger le programme Basic avec Sedoric.

En fait il me faudrait donc l'équivalent de la commande NEW. Est-ce qu'il y a ça quelque part en ROM sous forme de routine que je pourrais appeler ?

Sinon que devrais-je faire pour faire l'équivalent en ASM ?
Hialmar
Hialmar
Admin

Messages : 840
Date d'inscription : 03/03/2014
Age : 53
Localisation : Toulouse

Revenir en haut Aller en bas

Equivalent de la commande NEW du Basic Empty Re: Equivalent de la commande NEW du Basic

Message par assinie Jeu 8 Mai 2014 - 19:33

L'adresse de la commande NEW est #C71B pour un Oric-1 et #C6F0 pour un Atmos.
Elle a 2 actions:

  1. Ajuster le pointeur de fin du programme (#9C-9D) et mettre 2 octes nuls au début du programme (ce qui explique qu'on puisse récupérer un programme après un NEW)
  2. Effacer les variables (exécution de la comande CLEAR)


Dernière édition par assinie le Jeu 8 Mai 2014 - 19:37, édité 1 fois (Raison : Correction adresse du pointeur de fin de programme)
assinie
assinie

Messages : 271
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

Equivalent de la commande NEW du Basic Empty Re: Equivalent de la commande NEW du Basic

Message par Hialmar Jeu 8 Mai 2014 - 21:18

Merci.

J'ai essayé de l'appeler mais ça continue de faire n'importe quoi.

Je tombe sur une "Formula too complex error" alors que je fais que faire ça :
Code:

41 PRINT PEEK(#9D) PEEK(#9C)
42 PRINT PEEK(#9F) PEEK(#9E)
43 PRINT PEEK(#A1) PEEK(#A0)
44 PRINT PEEK(#A3) PEEK(#A2)
45 PRINT PEEK(#A5) PEEK(#A4)
46 PRINT PEEK(#A7) PEEK(#A6)
49 END

Je me demande bien ce que je peux flinguer d'autre avec mon programme C.

Si vous avez une idée je suis preneur.
Hialmar
Hialmar
Admin

Messages : 840
Date d'inscription : 03/03/2014
Age : 53
Localisation : Toulouse

Revenir en haut Aller en bas

Equivalent de la commande NEW du Basic Empty Re: Equivalent de la commande NEW du Basic

Message par Hialmar Jeu 8 Mai 2014 - 22:35

En faisant des essais/erreurs je suis parvenu à localiser la source du problème.

Ca vient des routines de tracé de lignes optimisées qui sont disponibles sur le SVN de defense-force :
http://miniserve.defence-force.org/svn/public/oric/routines/rasterization/linebench/line8.s

Je suppose que je vais devoir les abandonner pour l'instant.

C'est dommage car elles sont deux fois plus rapides que le DRAW de la ROM.
Hialmar
Hialmar
Admin

Messages : 840
Date d'inscription : 03/03/2014
Age : 53
Localisation : Toulouse

Revenir en haut Aller en bas

Equivalent de la commande NEW du Basic Empty Re: Equivalent de la commande NEW du Basic

Message par assinie Ven 9 Mai 2014 - 0:03

J'ai eu un truc dans ce genre avec leFig-Forth que je l'avais modifié pour pouvoir utiliser un lecteur Jasmin.
Au retour vers le BASIC, j'avais de temps en temps le même message que toi et un reset n'y changeait rien (le message s'affichait parfois sans arrêt)

J'ai fini par trouver que c'était du au fait que le Forth utilisait la page zéro pour sa pile et pouvait écraser les pointeurs de pile BASIC en #85-87 (suivant le nombre de valeur empilées)
Le problème était résolu en mettant un 0 en #87 avant le retour au BASIC, ce qui est fait lors de l'initialisation de l'Oric.

Je ne sais pas si les programmes générés par l'OSDK touchent à cette partie de la mémoire, mais c'est peut être une piste.
assinie
assinie

Messages : 271
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

Equivalent de la commande NEW du Basic Empty Re: Equivalent de la commande NEW du Basic

Message par didierv Ven 9 Mai 2014 - 5:33

OSDK Utilisa la page 0
Voir http://osdk.defence-force.org/index?page=documentation&subpage=zeropage
mais $9A ne semble pas atteint

A voir s'il n'affecte pas un autre élément du basic.
didierv
didierv

Messages : 810
Date d'inscription : 19/01/2014
Age : 61
Localisation : Nord de la France

http://www.dmacoco.fr

Revenir en haut Aller en bas

Equivalent de la commande NEW du Basic Empty Re: Equivalent de la commande NEW du Basic

Message par Hialmar Ven 9 Mai 2014 - 9:04

En mettant 0 en #87 ça marche Smile

Merci beaucoup assinie.

Si vous voulez voir ce qui se passe, j'ai mis en place un petit exemple ici :
http://torguet.net/Hialmar/OSDK/
* http://torguet.net/Hialmar/OSDK/C2BasicTest.zip contient le projet OSDK.
* il vous faudra aussi soit
http://torguet.net/Hialmar/OSDK/bas2tap.exe
ou
http://torguet.net/Hialmar/OSDK/tap2dsk.exe
ou lancer le programme namer.com du dsk pour renommer le programme basic.
Hialmar
Hialmar
Admin

Messages : 840
Date d'inscription : 03/03/2014
Age : 53
Localisation : Toulouse

Revenir en haut Aller en bas

Equivalent de la commande NEW du Basic Empty Re: Equivalent de la commande NEW du Basic

Message par Hialmar Ven 9 Mai 2014 - 9:22

Bon j'ai été trop rapide.

Maintenant ça plante beaucoup plus loin : quand je quitte le programme Basic (le vrai) et qu'il essaie de regarder combien il reste de mémoire.

Il essaie d'exécuter un opcode #72 en #20C9.

Il écrase probablement autre chose.

J'ai essayé de modifier mon petit programme de test mais malheureusement en faisant le
48 PRINT FRE("");" Octets"
Ca marche quand même.

Il doit falloir remplir plus la mémoire ou alors il y a autre chose qui cloche dans mon programme C.

Je vais essayer de trouver un programme minimaliste pour ça.
Hialmar
Hialmar
Admin

Messages : 840
Date d'inscription : 03/03/2014
Age : 53
Localisation : Toulouse

Revenir en haut Aller en bas

Equivalent de la commande NEW du Basic Empty Re: Equivalent de la commande NEW du Basic

Message par Hialmar Ven 9 Mai 2014 - 11:30

Voilà j'en ai fait un.

Il est disponible ici :
http://torguet.net/Hialmar/OSDK/C2BasicTest.zip
(comme avant si vous voulez compiler il faut soit utiliser NAMER.COM avant d'exécuter ou prendre mes versions de tap2dsk ou bas2tap qui renomment correctement les fichiers basic).

Il ne fait pas exactement la même chose que mon programme complet mais il fait une boucle infinie autour de #D6DA.
Ce qui prouve qu'il y a un pb.

Au niveau du C, je trace une ligne diagonale (ça utilise du code différent des lignes horizontales et verticales qui faisaient planter la pile).
Si on met en commentaire le dernier DrawLine8(); (ligne 86) ça marche.

Edit: je viens de le régénérer car j'avais oublié de mettre à jour la map du programme.
La map est ici au cas où ça suffirait pour isoler le pb : http://torguet.net/Hialmar/OSDK/map.htm
Hialmar
Hialmar
Admin

Messages : 840
Date d'inscription : 03/03/2014
Age : 53
Localisation : Toulouse

Revenir en haut Aller en bas

Equivalent de la commande NEW du Basic Empty Re: Equivalent de la commande NEW du Basic

Message par assinie Ven 9 Mai 2014 - 11:46

D'après la table des symboles:

  • OSDK utilise les octets de #50 à #7B ce qui ne devrait pas poser trop de problèmes sauf si on veut exécuter une commande de plus 25 octets (il s'agit d'une partie du tampon clavier)
  • Ton programme utilise les octets de #7C à #88, le tampon clavier va jusqu'en #83


Il faudrait faire un test

  • soit en déplaçant les variables de ton programme, la suppression de la directive .zero dans line8.s devrait faire l'affaire
  • soit en copiant quelque part les octets de #84 à #88 au début du programme et en les retaurant juste avant l'appel à SwitchToCommand.


Je pense que la meilleure solution serait la seconde pour éviter de perdre en performance (une instruction du type memcpy devrait faire l'affaire)

Attention, si tu rajoutes des variables, la zone à sauvegarder sera plus grande.

Si cela résoud le problème, il restera à déterminer une zone mémoire utilisable pour la sauvegarde.
assinie
assinie

Messages : 271
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

Equivalent de la commande NEW du Basic Empty Re: Equivalent de la commande NEW du Basic

Message par Hialmar Ven 9 Mai 2014 - 11:52

Et ça marche Smile

Je vais re-tester avec le programme complet.
Hialmar
Hialmar
Admin

Messages : 840
Date d'inscription : 03/03/2014
Age : 53
Localisation : Toulouse

Revenir en haut Aller en bas

Equivalent de la commande NEW du Basic Empty Re: Equivalent de la commande NEW du Basic

Message par Hialmar Ven 9 Mai 2014 - 14:52

Le programme complet marche très bien.

Sur les conseils de Chema j'ai ajouté les octets #89 et #90 à ma sauvegarde.
Hialmar
Hialmar
Admin

Messages : 840
Date d'inscription : 03/03/2014
Age : 53
Localisation : Toulouse

Revenir en haut Aller en bas

Equivalent de la commande NEW du Basic Empty Re: Equivalent de la commande NEW du Basic

Message par assinie Ven 9 Mai 2014 - 15:02

Ok, bonne nouvelle  Smile 
C'est bizarre pour les emplacements #89 et #90 je ne les ai pas trouvé dans la table des symboles... Il s'agit bien de 2 octets qui ne se suivent pas?

Je pense qu'on pourrait se passer de cette copie mais il faudrait préciser les emplacements des différentes variables.
De mémoire, il y a de la place disponible au début de la page zéro, à voir si elle n'est pas utilisée par Sedoric.
assinie
assinie

Messages : 271
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

Equivalent de la commande NEW du Basic Empty Re: Equivalent de la commande NEW du Basic

Message par Hialmar Ven 9 Mai 2014 - 15:06

D'après Geoff Phillips ( http://home.btconnect.com/geffers/files/chap5.htm ) voilà ce qui est stocké là :
#86 – Address of last temporary string.
#88 – #90 – A table of temporary strings.

En suivant les conseils de Chema j'ai essayé de remplacer les déclarations de variables par des define :
;save_a .dsb 1
;curBit .dsb 1
;chunk .dsb 1
;lastSum .dsb 1
#define save_a $00
#define curBit $01
#define chunk $02
#define lastSum $03

Pour l'instant ça fonctionne sans problème.

J'espère effectivement que je n'écrase pas des données de Sedoric.
Peut-être que je pourrais aussi sauver ces 4 octets et les restaurer avant d'appeler des commandes Sedoric.
Hialmar
Hialmar
Admin

Messages : 840
Date d'inscription : 03/03/2014
Age : 53
Localisation : Toulouse

Revenir en haut Aller en bas

Equivalent de la commande NEW du Basic Empty Re: Equivalent de la commande NEW du Basic

Message par Hialmar Jeu 12 Juin 2014 - 10:12

J'ai peut-être encore des problèmes avec mon passage C/ASM vers Basic.

On a des OUT OF MEMORY ERRORs aléatoires.

Est-ce que ça peut venir de la pile ?

Je pensais que ça pouvait venir des chaines de caractères en Basic et j'ai donc rajouté des FRE("") dans la boucle principale du Basic mais bon si vous avez d'autres idées...
Hialmar
Hialmar
Admin

Messages : 840
Date d'inscription : 03/03/2014
Age : 53
Localisation : Toulouse

Revenir en haut Aller en bas

Equivalent de la commande NEW du Basic Empty Re: Equivalent de la commande NEW du Basic

Message par assinie Jeu 12 Juin 2014 - 23:26

Si tu as ajouté des variables à ton programme depuis la dernière fois, il est possible que tu écrases les pointeurs qui gèrent les zones mémoire contenant les variables.
Il faudrait vérifier ça dans la map générée par l'OSDK.

Les adresses en questions vont de #9A à #A7:
#9A-9B: Pointeur vers l'adresse de début du programme BASIC
#9C-9D: Pointeur vers l'adresse de fin du programme BASIC ( début des variables )
#9E-9F: Pointeur vers l'adresse de début des tableaux
#A0-A1: Pointeur vers l'adresse de fin des tableaux
#A2-A3: Pointeur vers l'adresse de début des chaines
#A4-A5: Pointeur vers l'adresse de fin des chaines
#A6-A7: Pointeur vers le haut de la mémoire ( argument de la commande HIMEM )

Peut-être que certaines sont modifiées par ton programme C (avec un peu de chance quelque part du côté de #A6-A7)
Sinon je ne vois pas d'autres zones qui pourraient provoquer ce message.
assinie
assinie

Messages : 271
Date d'inscription : 09/02/2014

Revenir en haut Aller en bas

Equivalent de la commande NEW du Basic Empty Re: Equivalent de la commande NEW du Basic

Message par Hialmar Ven 13 Juin 2014 - 8:58

Non je ne monte pas au dessus de $84.

Bon je suppose que c'est parce que je consomme un peu plus de mémoire que Maximus.

Au pire je rajouterais un GRAB en début de programme et un RELEASE à la fin.

Merci pour ton aide.
Hialmar
Hialmar
Admin

Messages : 840
Date d'inscription : 03/03/2014
Age : 53
Localisation : Toulouse

Revenir en haut Aller en bas

Equivalent de la commande NEW du Basic Empty Re: Equivalent de la commande NEW du Basic

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

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