Nº182 (6/2005)







  Download :
Comme vous avez pu le lire dans le Ceo-Mag du mois dernier, Mickaël Pointier a déménagé en Norvège pour raisons professionnelles. Ne pouvant y emporter toutes ses affaires, il en a brocardé la plus grande partie. Cela a créé un petit mouvement de panique chez les Oriciens. Mais ouf, il a emmené ses machines en état de marche et tout ce dont il a besoin pour continuer à programmer. Nous aurons donc encore le plaisir d'admirer ses chefs-d'oeuvre. Il nous a confié le reste de son patrimoine Oric, avec mission de l'utiliser pour dépanner les membres du CEO. Qu'il soit remercié de nous avoir fait confiance ! Nous lui souhaitons tout le succès qu'il mérite dans son travail et dans sa vie personnelle. A bientôt Mickaël ! André.

Visu ! Le Samedi 4 juin 2005, de 10 à 18 H, au 10 rue Montera, Paris 12e (Métro Porte de Vincennes).
Des Trucs pour Tricher : Honey-Kong !
Gif Animoric : La Disquette Démo !
Tout sur RND & Euphoric !
Fabriquez vos Cartouches Super-Oric !

sommaire

Adresses CEO / Sommaire / Editorial    Page 
Courrier Oricien    Page 
Petites Annonces    Page 
Bonnes Adresses    Page 
Prochaine Visu / Next Oric Meet    Page 
Mise au Point Software pour Cartouche Super-Oric (9)    Page 
Les Calembours de Schiro Dino    Page 
RND et Euphoric    Page 
Routinrs Mover, Movhaut et Movbas    Page 
Initiation Assembleur (4)    Page 
Savedisk 1.0 et Cloaddsk 1.0    Page 
Listing : Jeu des Allumettes    Page 
Gif Animoric : Mode d’Emploi de la disquette Démo    Page 
Oricien, Qui es-tu ? : Jean-Marie Hoy    Page 
Divertissements Mathématiques & Logiques    Page 
Réponses (52) : Sujets n°146 à 151    Page 
Nostalgie (59) : Publicité Oric-1    Page 
Des Trucs pour Tricher : Honey-Kong    Page 
Librairie Oric (54)    Page 
Abonnements 2005 / Anciens Numéros / Anciennes Disquette    Page 


RND et Euphoric

par Dominique Pessan et Fabrice Francès



De Dominique à Fabrice : Bonjour Fabrice, Voici ce qui m'emmène. Il s'agit d'une question sur le comportement d'Euphoric lors d'un boot. Il se trouve que je ne suis pas en mesure de faire tourner un Oric réel. Depuis quelques temps le poste de télévision qui me servait de moniteur est mort et je n'ai pas de solution de secours. Il va falloir que je me paye une petite télé. Bref.

La question se pose en fait, car Euphoric (semble-t-il) permet de booter directement sur une K7 (en cliquant sur une image K7.tap) Il est possible (probable) que j'aie mal configuré Euphoric. Mais après avoir cliqué sur l'image de la K7, Euphoric démarre en mode disquette et comme il n'y a pas de disquette dans le lecteur, l'Oric demande «une disquette master» Comme je souhaite lire une K7, j'appuis sur F7 (reset à chaud) l'Oric semble se bloquer, mais un deuxième appuis sur F7 reboote bien l'Oric et la K7 (sur laquelle on a cliqué au début tu suis toujours ?-) démarre normalement.

C'est ce que je pensais jusqu'à pas très longtemps. Dans la série d'articles «des trucs pour tricher», je me suis attaqué au jeu «La cité maudite». Ce jeu utilise abondamment la fonction RND() de l'Oric dès le lancement du jeu, il tire «au hasard» le numéro de l'étage auquel on se trouve. L'Oric étant ce qu'il est, après le boot de l'Oric, le jeu sur disquette démarre toujours à l'étage 2 :-)

Le calcul est le suivant : I=INT(RND(1)*6) pour encore mieux tricher, j'ai eu l'idée de regarder les 25 premiers tirages «aléatoires» calculés de la manière ci-dessus, voici ce que l'on obtient: 2, 0, 0, 3, 2, 5, 2, 2, 4, 2, 4, 2, 5, 5, 2, 5, 3, 5, 2, 4, 2, 4, 4, 3, 3.

Mais je me suis aperçu par hasard, en cliquant sur une image K7 du jeu, après le comportement d'Euphoric décrit ci dessus, on démarre le jeu à l'étage 1 ! J'ai donc demandé la même série de nombres dans ce cas, et voici le résultat : 1, 0, 5, 1, 5, 1, 2, 5, 0, 0, 2, 5, 3, 4, 0, 0, 1, 5, 5, 2, 5, 5, 5, 5, 1.

Rien à voir. On n'est pas décalé de un ou deux chiffres, non, la série est complètement différente.

La question que je me pose est : «Est ce que c'est normal docteur ?»

Je croyais que la fonction RND() était une «simple formule» en Rom qui donnait toujours le même résultat fonction du nombre de fois qu'on l'a appelée?

Je ne vois que deux explications possibles:

1-Lors d'un boot de l'Oric, la fonction RND() est appelée plus de 25 fois (!) (?) et de manière différente selon le type de boot ?

2-Comportement spécifique d'Euphoric? En vois tu d'autres?

Question subsidiaire : Le double appuis sur F7 lors d'un boot K7 est il normal? Autrement dit, que se passe-t-il sur un Oric réel lors d'un boot sans disquette dans le Microdisc et appuis sur le bouton reset sous l'Oric ?

La vérification serait simple, si je pouvais faire tourner un Oric réel...

Je me souviens d'une interview de toi dans SVM en 1996. Tu disais que ton objectif ultime en matière l'émulation, était que les programmes ne puissent pas faire la différence entre l'émulateur et la machine réelle. Peut-être sommes nous en face d'un cas qui pourrait t'intéresser où un programme fait une différence. Si ces questions t'intéressent, les réponses m'intéressent beaucoup :-) Oricalement. Dominique

Suite de Dominique : Pris de remords, (ai-je bien cherché suffisamment moi même avant d'embêter Fabrice) j'ai introduit le CD du CEO-mag dans mon lecteur. Le moteur de recherche de Simon sur le Mot Clé RND m'a donné : Mag n° 35 mars 93 article Roger Barbier «Aléatoire vous dites aléatoire ?», page 10-11. Alors là je dis, CHAPEAU messieurs les promoteurs de ce CD :-)

[NDLR : Simon, j'espère que tu lis ça !]

Effectivement, il m'est revenu à la lecture de ce passionnant article que la valeur rendue par RND était fonction d'une graine. Cette graine est située en page zéro entre #FA et #FE.

J'ai sorti ma bible (L'Oric à nu) et j'ai vu que cette zone était renseignée lors d'un «Cold start Basic» de l'Oric par la routine entre EA8E et EA96 qui transfère les octets situés en EA3C. A priori, lors d'un «Warm start Basic», pas d'initialisation de RND

J'ai fait un petit test sur Euphoric.

1- Boot normal sur une disquette. Série aléatoire obtenue: 2, 0, 0, 3, 2, 5... etc.

2 Boot normal sur une disquette APPUIS SUR F7 : Série aléatoire obtenue: 2, 0, 0, 3, 2, 5... etc.

Confirmation donc de mes recherches.

Il semblerait donc que le boot à froid soit interrompu par l'absence de disquette AVANT l'initialisation de la graine de RND() mais dans ce cas on n'a toujours pas quelque chose d'aléatoire puisque la série obtenue bien que différente, est toujours la même : pour mémoire, 1,0,5,1,5,1,2,…) La question reste entière: L'Oric réel réagit-il de la même manière ? Oricalement Dominique

Réponse de Fabrice Francès : [avoir cliqué sur l'image de la K7, Euphoric démarre en mode disquette] Oui, tu as mal configuré Euphoric. Tu as forcé la configuration Microdisc dans le fichier Euphoric.ini, ce qui fait que tu as toujours une configuration disquette, même quand tu ne voudrais qu'une configuration cassette... Supprime la ligne, ou utilise Configuratoric qui te simplifiera la vie... [Peut-être sommes nous en face d'un cas qui pourrait t'intéresser où un programme fait une différence] Pas cette fois-ci, Dom :-)

Je connais bien ce problème d'initialisation du générateur aléatoire, voici toute l'histoire... [Cette graine est située en page zéro entre #FA et #FE. J'ai sorti ma bible (L'Oric à nu) et j'ai vu que cette zone était renseignée lors d'un «COLD START BASIC» de l'Oric par la routine entre EA8E et EA96 qui transfère les octets situés en EA3C.] Tout à fait, mais c'est là qu'il y a un hic... Si tu regardes bien, tu constates que 28 octets sont transférés vers #E1... Pour commencer, le premier octet transféré est écrit en #E1+#1C=#FD... Et oui, bug... Le dernier octet (#FE) du générateur aléatoire n'est pas initialisé...

C'est 29 octets qu'il aurait fallu copier... Résultat, sur un Oric à cassettes, la valeur initiale du générateur aléatoire n'est pas entièrement initialisée : certains Oric auront une valeur de PEEK(#FE) à 0, d'autres à #FF (ça dépend du type de ram)... Quant aux Oric à Microdisc, l'initialisation de #FA-#FE faite par l'eprom est incorrecte aussi: la routine de recopie a été pompée sur celle de la rom Oric et de la même façon 28 octets au lieu de 29 sont transférés. En plus, #FE-#FF est utilisé par l'eprom pour contenir un pointeur vers les buffers disquette (tour à tour #C013 et #C023), ce qui fait que #FE contient #23 une fois Sedoric démarré...

[La question reste entière: L'Oric réel réagit-il de la même manière] Oui... Dans tes possibilités de conclusion, tu avais envisagé un bug d'Euphoric, mais pas un bug de l'Oric lui-même... L'initialisation du générateur aléatoire sur Oric est buggée, résultat on ne peut compter sur une séquence bien définie que si on initialise soit même le générateur (au moyen de RND(valeur négative))... Amitiés, Fabrice

De Dominique : MERCI beaucoup Fabrice, j'ai supprimé la ligne ad hoc dans euphoric.ini et tout marche beaucoup mieux. Je boote normalement sur une image .tap :-)

[La valeur initiale du générateur aléatoire n'est pas entièrement initialisée : certains Oric auront une valeur de PEEK(#FE) à 0, d'autres à #FF (ça dépend du type de ram)] Tu penses bien que j'ai refait mon test de série aléatoire avec un boot cassette correct et... surprise...

5 0 0 4 3 3 5 3 4 4 0 4 5 5 3 1 2 5 2 0 1 5 0 4 3

Troisième série inédite! elle correspond à une valeur de #FF en $FE.

Si après le boot je fais POKE#FE,0, j'obtiens

1 0 4 0 0 4 2 3 3 4 4 1 3 1 4 4 1 0 4 3 0 5 3 5 2

qui est donc, si j'ai bien compris, la série aléatoire des Oric dont le type de RAM «initialise» #FE à 0 ?

Boot K7 : Un essai réalisé avec mon Oric réel sur ma grosse télé de salon, (je n'ai pas pu résister, j'ai déménagé tout mon bazar) a donné des résultats «aléatoires».

Après le message «insert system disc», quand l'Oric reboote en appuyant sur le bouton sous le boîtier on obtient #13 en $FE (comme sur Euphoric) et la série obtenue est bien : 1 0 5 1 5 1 2 5 0 0... Comme sur Euphoric :-) (Bravo Fabrice)

Mais, contrairement à Euphoric, un seul appui sur ce bouton suffit (à priori). Par contre l'Oric ne reboote qu'une fois sur 5 au mieux! Les autres fois il reste bloqué le reset à chaud ne marche pas, il faut un reset à froid.

Il y a donc une légère différence entre Euphoric et «mon» Oric réel, Euphoric marche mieux, puisqu'il reboote systématiquement dans ces conditions scabreuses (même s'il faut appuyer 2 fois sur F7) alors que «mon» Oric réel reste le plus souvent planté. Je dis «mon» Oric, car il est possible que tous les Oric ne réagissent pas de la même manière:-)

Voilà voilà... C'est le résultat de mes petits tests. Je vais pouvoir réécrire la fin de mon article sur «la citée maudite». Oricalement. Dominique


BROWSE

NUMEROS
 [188] - [187] - [186] - [185] - [183] - [182] [181] - [180] - [179] - [178] - [177] 

YEAR
2013 - 2012 - 2011 - 2010 - 2009 - 2008 - 2007 - 2006 - 2005 - 2004 - 2003 - 2002 - 2001 - 2000 - 1999 - 1998 - 1997 - 1996 - 1995 - 1994 - 1993 - 1992 - 1991 - 1990



Hosted By oric.org server www.oric.org V 2.6 CNIL ID : 872370 Write to Webmaster © 2000-2024 Built in 0.04 Seconds