Nº209 (9/2007)







  Download :
Encore une photo de couverture étonnante. Merci Thierry pour cette trouvaille. Ce n'est pas tous les jours que l'Oric voisine avec le Micral... sauf au Musée des Arts et Métiers. Merci aussi aux quelques Oriciens qui m'envoient régulièrement des matériaux pour le mag. Contrairement à ce qu'on pourrait penser (surtout à la lecture du présent numéro), le Rédac-Chef n'est pas censé rédiger tout seul le mag, mais rassembler les contributions qu'on lui fait parvenir. Autrement dit, ceci est un appel urgent: ma table de travail est vide et j'ai besoin d'articles, de dessins, de photos, d'anecdotes, de programmes... A+ André

Photos de la Visu du 23 Juin 2007 (Suite et fin)!
L’Oric au Musée des Arts et Métiers!
Programmez votre Super-Oric!
Trucs pour Le Manoir du Dr Génius!
Aide pour Terminus!

sommaire

Adresses CEO / Sommaire / Editorial   Page 
Courrier Oricien   Page 
Petites Annonces & Bonnes Adresses   Page 
Brève: Oric au Musée des Arts et Métiers   Page 
Quelques Photos de la Visu du 23 juin 2007 (fin)   Page 
Le Coin Sudoku   Page 
Banc d’Essai: Demo Hires pour Super-Oric   Page 
Les Calembours de Schizo Dino   Page 
Journal de Transfert   Page 
Vu sur le Web: Oric Nova 64   Page 
Enhanced Version of Tap2dsk   Page 
Mmmh, une Différence Euphoric / Oric?   Page 
La page de Yann: Des Nouveautés pour Oric   Page 
Vu sur eBay   Page 
Software pour Cartouche Super-Oric (12)   Page 
Librairie Oric (71): Programmation Basic   Page 
Aide Terminus   Page 
Dino fait le Chat   Page 
Des Trucs pour Tricher: Le Manoir du Dr Génius   Page 


Mmmh, une différence Euphoric / Oric ?

par Simon Guyart et Fabrice Francès



De Simon: Je sais bien qu'à chaque fois qu'on a cru qu'Euphoric avait un "problème", en fait le comportement était normal ;-) Bon eh bien me voilà confronté à un cas de "différence de comportement" entre Euphoric et Oric. Voici ma petite histoire ! J'essayais de transférer le programme M.A.R.C. depuis la K7 originale. La bande était un peu réfractaire, mais rien de trop dramatique (quelques erreurs de parité par-ci par-là). Seulement voilà: à chaque fois que je le testais sur Euphoric, j'avais le même plantage: si je démarre le jeu et que je laisse le vaisseau exploser (suite à un trop-plein de fuel), je reste bloqué sur le "GET READY" qui suit. Et ce avec deux cassettes différentes. J'ai bien testé avec Euphoric version Oric-1 ou Atmos, même problème. Bon, je me dis que je suis tombé sur une série de K7 avec une version buggée... Je teste la version fournie avec Sedoric 3.0: pas de problème, ça fonctionne. Et puis, je suis revenu à cette K7 ce week-end. Je teste à nouveau, même problème, et là j'avais un vrai Atmos sous la main. Alors avec TAP2WAV je me fais un WAV, je charge sur le vrai Oric la version "buggée-qui-reste-bloquée-au-GET-READY-après-avoir-perdu-une-vie", et là... Ca fonctionne sur le vrai Oric ! Bien sûr j'ai aussi essayé de charger sur Euphoric à partir du fichier WAV: Mêmes symptômes que pour le TAP, le jeu plante. Je joins à ce mail le fichier TAP, le WAV correspondant... Bon le transfert contient 3 erreurs de parité, mais rien qui n'empêche de faire le test ci-dessus. Si l'un de vous a une idée de ce qui se passe... Je suis preneur ! Je ne vois vraiment pas... Bon courage :-)

De Fabrice: Ton problème est intéressant, je n'ai pas encore vérifié sur Oric réel mais j'ai constaté que le blocage sous Euphoric est dû au fait que lors du GET READY, il regarde l'apparition d'interruptions timer 1 sur un registre du VIA, mais comme malheureusement les interruptions ne sont pas désactivées, la prise en compte de l'interruption vide le registre en question. Tes erreurs de parité ne sont pas anodines, je vois que par rapport à une version que j'ai sur mon disque, un appel à une routine a été affecté, et du coup l'appel en question part dans les pâquerettes dans la rom... Mais bon, le comportement devrait être le même sur émulateur et Oric réel, même avec un programme abîmé, donc je vais vérifier sur Oric réel avec le. tap que tu m'as envoyé... Par contre, tu parles d'une version fournie avec Sedoric 3 qui marche, je n'ai pas cette disquette, pourrais-tu me l'envoyer pour m'aider à identifier la différence?

De Simon: J'ai dû fumer à propos de Sedoric: j'ai re-testé, et ça déconne pareil que la version K7. Je t'enverrai quand même la disquette si tu veux, mais en fait le jeu est sur la disquette Sedoric 3 "de base" (disponible sur ton site je pense). Il n'apparaît pas dans les menus, mais un DIR te révèlera un fichier MARC.COM (qui donc, n'a plus grand intérêt puisque mêmes symptômes que la version K7). Par contre je te garantis que le jeu fonctionne normalement avec un Atmos réel, ou alors je vais finir à l'asile :-) Sinon ne t'en fais pas pour les erreurs de parité, sauf cas exceptionnels de K7 rarissime, je ne me permets en principe jamais de diffuser un soft qui n'est pas 100% sans erreurs détectées. Là c'est juste un transfert rapide de MARC que j'avais fait pour re-tester, à partir de K7 différentes, pour m'assurer qu'il n'existait pas des versions "buggées au Get Ready" (eh oui, certains softs buggés ont parfois été réédités corrigés, comme Mission Delta ou, de mémoire, Tyrann...)

De Fabrice: Je n'ai pas encore testé sur Oric réel, mais si tu l'as observé, c'est que c'est réel, pas d'asile en vue :-) Je crois qu'il y a effectivement une différence, et je pense savoir d'où elle vient... Sur Euphoric, pour des raisons de performance qui remontent aux premières versions sur PC 386, les timers du VIA ne sont pas décrémentés de un en un. Au lieu de ça, entre deux instructions, je soustrais le nombre de cycles de l'instruction suivante et je regarde si le timer passe en négatif (franchit la valeur zéro), auquel cas l'interruption correspondante peut être levée... Comme l'interruption ne peut pas être déclenchée au milieu d'une instruction, dans le cas normal la différence n'est pas détectable...

Dans M-A-R-C, il y a un bug qui est passé inaperçu aux yeux des développeurs et qui révèle la différence que j'énonce ci-dessus : la routine de temporisation de base est la suivante et est appelée 200 fois :

Wait LDA $030D

AND #$40

BEQ Wait

Cette routine teste l'apparition du bit 6 dans le registre des interruptions du VIA (le bit 6 correspond au passage à 0 du timer 1), mais si cette routine est exécutée avec les interruptions autorisées, le passage à zéro du timer 1 provoque instantanément une interruption et le traitement de l'interruption provoque la remise à zéro du bit 6 de ce registre. Résultat, quand le traitement d'interruption est terminé, on revient dans la boucle Wait et le bit 6 est toujours à 0.

Cette routine est donc faite pour être exécutée avec les interruptions interdites, dans ce cas le passage du bit 6 à 1 ne provoque pas d'interruption et la routine détecte bien ce bit 6 passé à 1. A plusieurs endroits du jeu, cette routine est bien appelée avec les interruptions interdites, par exemple lors du premier écran (si on attend, ça passe automatiquement aux instructions au bout d'un certain temps) ou lors du premier GET READY... Mais ensuite, après l'explosion due au trop plein du remplissage si on ne décolle pas, les interruptions sont malencontreusement laissées autorisées...

Et alors, sur l'Oric réel, ça marche quand même en "fonctionnement dégradé", c.a.d que si le décompte à zéro du timer arrive pendant l'instruction AND ou l'instruction BEQ, une interruption est générée qui va remettre à 0 le bit 6 du registre $030D avant que l'instruction LDA ne puisse récupérer la valeur avec le bit à 1. Mais si le décompte à zéro du timer arrive pendant les trois premiers cycles de l'instruction LDA, alors la lecture du registre lors du quatrième cycle va bien récupérer une valeur avec le bit 6 à 1, et l'interruption ne sera déclenchée qu'après l'instruction LDA. Autrement dit, on rate parfois le passage à zéro, et d'autre fois on le détecte. Ce qui fait que sur l'Oric réel, la temporisation est plus longue que ce qui était prévu parce qu'on rate des passages à zéro de timer, mais c'est passé inaperçu.

Bon, il faut que je trouve un moyen de gommer cette différence, mais je préfèrerais le faire sans avoir à passer à une décrémentation du timer cycle après cycle qui est assez coûteuse (c'est ce que j'ai fait dans Atmosphere et dans un émulateur Microtan en Java)... Je te tiens au jus...

De Simon: Quelle analyse! Merci pour ces explications (je saisis bien l'idée mais je m'y perds un peu sur le détail technique j'avoue;-)). Je suis plus désolé que ravi d'avoir "trouvé" un cas particulier qui t'amènera peut-être à revoir un bout d'Euphoric... Enfin toujours est-il que le mystère MARC est levé. Je suis bien content parce que je m'arrachais les cheveux avec ce transfert ;-)

De Fabrice: Voici une version d'Euphoric remaniée pour autoriser la détection du passage à 0 d'un timer dans l'instruction précédant la levée de l'interruption... M.A.R.C tourne maintenant... J'en ai profité pour simplifier pas mal l'émulateur 6502, que j'avais optimisé pour des processeurs 386 sans cache à l'époque... Du coup, l'exécutable fait une belle cure d'amaigrissement, mais j'espère que je n'ai rien cassé... Je vais attendre un peu avant de mettre cette version sur le site web, des fois que vous trouviez que j'ai rajouté plus de bugs que je n'en ai enlevé... :-)

De Simon: Merci beaucoup, on peut dire que tu n'as pas trainé ! J'essaie ça dès que j'ai 5 minutes à moi et je te préviens si je rencontre des soucis ! (mais je parie que non :-) A bientôt!




BROWSE

NUMEROS
 [212] - [211] - [210] - [209] [207] - [206] - [205] - [204] - [203] - [202] 

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.12 Seconds