Nº259 (11/2011)
Download :
|
Après l’abondance de l’été (juillet-août 50 pages, septembre 42 pages), c’est maintenant la marée basse! Ce mag de novembre est hélas bien maigre. J’aurai pu égaliser les sommaires, mais il m’a semblé peu encourageant pour les auteurs de voir la publication de leurs articles ainsi différée. En fait, si une régularité absolue était impérative autrefois pour éviter un gaspillage de timbres, la diffusion se fait maintenant presque exclusivement par Internet... Ce n'est donc pas si grave.
Bonne lecture.
André |
|
La protection de Titan!
Optimisation de la Rom 1.1!
Super-Oric: Routinothèque (4) - Périphériques d'entrée (3)
BasiX: Char, Pack, Unpack & Where
Vu sur le web: Matos Snes!
|
|
|
|
|
|
sommaire
|
Adresses CEO / Sommaire / Editorial |
|
Page 2 |
Courrier Oricien |
|
Page 3-6 |
Petites Annonces & Bonnes Adresses |
|
Page 5-6 |
Rom 1.1 : Optimisation et Correction des Bugs (1/2) |
|
Page 7 |
Rush Hour Supplément n°11 (2/3) |
|
Page 8-9 |
Vu sur le Web : Matos Snes |
|
Page 10-11 |
Divertissements Mathématiques et Logiques |
|
Page 12 |
Le Coin Sudoku Oric : Les Grilles 7 à 12 de Septembre |
|
Page 13 |
Listing Basic : Road Runner |
|
Page 14 |
Atelier : Mise au Point de la Carte Amplibus-Décodeur |
|
Page 15-16 |
BasiX : La Commande CHAR |
|
Page 17 |
BasiX : Les Commandes PACK, UNPACK & WHERE |
|
Page 18 |
Quelques Photos de la Visu du 25 Juin 2011 |
|
Page 19-21 |
Routinothèque Super-Oric (4) : Périphèriques d'Entrée (3) |
|
Page 22-26 |
Dino : Dictons, Devinettes, etc... |
|
Page 4, 6, 8, 9, 11 |
|
ROM V1.1: Optimisation et correction des bugs (1/2)
Par Yann L.
Comment tout a débuté.
Depuis quelques années, je souhaitais porter des améliorations à la ROM V1.1 de l'Oric Atmos.
L'excellente bible de Fabrice BROCHE ("L'Oric à nu") donnait de nombreuses pistes sur le sujet et je trouvais moi-même que des commandes telles que TRON/TROFF souffrait de défauts inacceptables.
Après plusieurs échanges de courriels avec André C. et Fabrice F., je me suis lancé dans l'aventure.
De quoi avons-nous besoin ?
Pour parvenir à mes fins, j'ai eu recours à l'assembleur Frankenstein utilisé par Fabrice F. pour construire les ROM dont a besoin Euphoric pour fonctionner.
J'ai ainsi pu construire une nouvelle ROM grâce au programme source de la V1.1, aimablement transmise par André C (cette nouvelle ROM porte le numéro de version V1.1C).
Pour cela, j'ai ouvert une fois de plus "L'Oric à nu" que j'ai parcouru page par page, en notant soigneusement les commentaires faits par Fabrice BROCHE.
Les améliorations
Elles sont de plusieurs natures :
- suppression de code inutile, pouvant dans certains cas améliorer les performances de l'Oric (même si cela se joue souvent à quelques micro-secondes) ;
- optimisation du code, avec gains d'octets au passage ;
- correction de bogues généralement mineures mais particulièrement aggaçantes (ce travail sera fait dans une nouvelle version).
Les "erreurs" que l'on retrouve fréquemment :
- appel d'une sous-routine par JSR + RTS en fin de routine principale : dans ces cas là, un simple JMP suffit et fait gagner un octet très facilement.
- sauvegarde / récupération inutile de registre sur la pile (le plus souvent, il s'agit du registre `A´).
- reécriture de sous-routine déjà existante dans la ROM.
- mauvaise utilisation des commandes de permutation : LSR, ASL, ROL, ROR.
- redondance de code.
Quelques exemples
Le plus difficile dans l'histoire est de conserver les adresses d'origine d'exécution des routines corrigées.
Aussi dans la majorité des cas, il m'a fallut placer des instructions NOP lorsqu'un gain d'un ou plusieurs octets était possible.
Le meilleur exemple d'optimisation de code figure en #F801 (routine Afficher/effacer le curseur) avec en entrée de routine le registre A qui vaut 0 ou 1 selon le mode vidéo (inverse ou normal).
CODE (voir "Oric à nu" page 361)
Original Optimisé
F801 AND 026A F801 AND 026A
F804 LSR A F804 LDY 0269
F805 ROR A F807 LSR A
F806 STA 0265 F808 PHP
F809 LDY 0269 F809 LDA (12),Y
F80C LDA (12),Y F80B ASL A
F80E AND #7F F80C PLP
F810 ORA 0265 F80D ROR A
F813 STA (12),Y F80E STA (12),Y
F815 RTS F810 RTS
Pour cette optimisation, on gagne 5 octets et on évite d'utiliser une variable de travail (0265).
Autre exemple, du même accabit au niveau de la commande PLAY située entre #FBD0 et #FC0F.
CODE (voir "Oric à nu" page 380
Original Optimisé
FBE2 LDA 0207 FBE2 ASL 0207
FBE5 ASL A FBE5 ROL 0208
FBE6 STA 0207 |
FBE9 LDA 0208 |
FBEC ROR A | Gain : 7 octets
FBED STA 0208 |
... ...
FC06 LDA FC10,Y FBFF LDX FC10,Y
FC09 TAX Gain : 1 octet
... ...
D'où un gain total de 8 octets et l'obtention d'un code plus "académique".
Retrouvez toutes les corrections apportées à la ROM V1.1 dans le prochain numéro. |
|
|
|
|
BROWSE
NUMEROS
[260] - [259] - [258] - [257] - [255] - [254] - [253] - [252] - [251] - [250] - [249]
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
|