480

Encore une nouvelle version. Cette fois ci il n'y a rien d'intéressant. Je voulais juste établir un checkpoint pour commencer avec les optimisations dont je vous ai déjà parlé.

Voici le changelog (vous pouvez le télécharger chez http://www.boogersoft.com/projects/tigb, comme d'hab'):

04/27/2003 - v0.5.1

No big changes but I'm about to attempt some optimizations that will require big
code modifications and I'd also like to rewrite the recompiler (to allow higher
level optimizations). So, this release only takes place to become some sort of a
"checkpoint".

- Fixed romsplit.exe so that it puts 7 half banks per file (instead of 6), wich
  allows 512k roms to be splitted into 10 files (instead of 11).
- Reduced ram write jump tables from word to byte (-256 bytes).
- Some 'move.b #0,dst' -> 'clr.b dst'.
- Moved almost all internal variables to dynamic memory. This reduced the binary
  by ~650 bytes (and increased memory requirement by that amount), but most
  importantly freed another address register (wich was pointing to the internal
  variable area), since now the same address register used for the GameBoy RAM
  is used for variables. I haven't yet figured out what I will be using that
  address register for. Please note that to acomplish this I had to modify
  almost every module of the emu, so I would like to be informed of any
  regressions.
- Recompiler optimizations: ASSUME_CALL_DONT_USE_FLAGS (assume function don't
  use caller's flags) and ASSUME_RET_DONT_USE_FLAGS (assume caller don't use
  functions flags).
Boogerman

Bouger, travailler, manger et se reposer, c'est la devise de la tortue!

481

yop, bon projetsmile

heu j'ai looké la partie lcd, et je ne comprend pas pourquoi tu n'utilises pas de registre?
les portion de code comme:
	move.b	0(atmp2),(atmp3)+	;copy even lines
	move.b	2(atmp2),(atmp3)+
	move.b	4(atmp2),(atmp3)+
	move.b	6(atmp2),(atmp3)+
	move.b	8(atmp2),(atmp3)+
	move.b	10(atmp2),(atmp3)+
	move.b	12(atmp2),(atmp3)+
	move.b	14(atmp2),(atmp3)+
	move.b	16(atmp2),(atmp3)+
	move.b	18(atmp2),(atmp3)+
	move.b	20(atmp2),(atmp3)+
	move.b	22(atmp2),(atmp3)+
	move.b	24(atmp2),(atmp3)+
	move.b	26(atmp2),(atmp3)+
	move.b	28(atmp2),(atmp3)+
	move.b	30(atmp2),(atmp3)+

sont tres lentes...

sinn bon courage.
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

482

atmp2 et atmp3 sont des registres. (On ne peut pas utiliser ces modes d'adressage avec des labels.) Je suppose qu'il utilise EQUR.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

483

Toutes ces lignes ne seraient pas optimisables par plusieurs movep.l avec un registre dn temporaire?
du genre:

movep.l (atmp2)+,dn
movep.l dn,(atmp3)+

pour remplacer 3 des lignes ci dessus?
Je pense que ça peut être plus rapide si ça marche, mais je peux me tromper...
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

484

Hu?
Bon j'ai vérifié les atmp sont bien des EQUR, qui représente comme leur nom l'indique des registres d'adresses temporaires.
avatar
;)

485

Oui il l'avait déjà dit dans au moins l'unes des 16 pages précédentes si je me rappelle bien wink
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

486

Oups.. dslwink j'ai pas lu toutes les pagessmile
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

487

BiHi a écrit :
Hu?
Bon j'ai vérifié les atmp sont bien des EQUR, qui représente comme leur nom l'indique des registres d'adresses temporaires.


En effet, il s'agit d'EQURs. Au début j'ai pensé que ce serait plus facile de coder en utilisant des mnémoniques (atmp1, flags, etc...) au lieu de nom de régistres. Le but a été réussi, mais ceci a rendu pénible la lecture de mon code par d'autres programmeurs.... en plus, certains régistres ne s'utilisent pas tjs comme indiqué par leur nom (notamment, la lib graphique a bessoin de pas mal de régistres donc elle sauve tout dans le stack et s'en sert sans aucune relation avec leurs noms). Donc en gros le bilan est assez négatif.... C'est un des trucs que je vais supprimer dans le futur...
Boogerman

Bouger, travailler, manger et se reposer, c'est la devise de la tortue!

488

Ximoon a écrit :
Toutes ces lignes ne seraient pas optimisables par plusieurs movep.l avec un registre dn temporaire?
du genre:

movep.l (atmp2)+,dn
movep.l dn,(atmp3)+

pour remplacer 3 des lignes ci dessus? Je pense que ça peut être plus rapide si ça marche, mais je peux me tromper...


Superbe, je conaissais pas cette instruction. D'après ce que j'ai lu dans 68kguide:

move.b	0(atmp2),(atmp3)+	;16
move.b	2(atmp2),(atmp3)+	;16
move.b	4(atmp2),(atmp3)+	;16
move.b	6(atmp2),(atmp3)+	;16


(ce que je fais actuellement) serait équivalent à:

movep.l 0(atmp2),dn		;24
move.l	dn,(atmp3)+		;12

.
Pas mal: 64 cycles vs 36 cycles... Je vais essayer ceci smile

Merci merci merci!
Boogerman

Bouger, travailler, manger et se reposer, c'est la devise de la tortue!

489

J'espère surtout que ça va marcher wink
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

490

En tout cas, tu devrais chercher a exploiter le self-modifying code... Ton code devient vite illisble mais generalement quand tu cherches de la vitesse y'a pas mieux... smile

491

Y´en a déjà du SMF, d´ailleurs, la superbe optimisation dont j´ai parlé et que je pense ajouter est basée sur du SMF.
Boogerman

Bouger, travailler, manger et se reposer, c'est la devise de la tortue!

492

Bon j'ai eu quelque temps ces derniers jours et j'ai fait la table de handlers.

Maintenant il faut que j'écrive un loader qui mette cela en RAM, chaque handler dans un endroit précis. Pour ceci, j'ai mon fichier handlers.asm que je compile vers handlers.9xz.

Je pourais lire le 9xz directement et copier ce que je veux dans la RAM, mais je trouve cela pas très propre car qq'un (de très con, bien évidamment) pourrait éxecuter directement handlers.9xz en écrivant handlers() dans la home screen.

J'aimerais savoir s'il éxiste une option command line de tigcc pour qu'au lieu de produire un 9xz il produise un .bin qui ne contienne que le code, sans rien d'autre. Après je me servirai de ttbin2oth, et voilà.
Boogerman

Bouger, travailler, manger et se reposer, c'est la devise de la tortue!

493

Tu utilises ttextract.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

494

merci
Boogerman

Bouger, travailler, manger et se reposer, c'est la devise de la tortue!

495

Salut à tous.

Il y a qq tps que j'ai finie l'optimisation dont je vous ai parlé, mais je n'ai pas pu en faire des mesures jusqu'aujourd'hui. Les résultats son malheureusement décevants. ~6% plus vite, avec 100% plus de RAM réquise (J'en ai même pas assez pour sauvegarder l'écran!). Je pense que le problème est que la lib graphique est en train de bouffer trop de cycles, donc faut chercher à l'optimiser. Le prob c'est que j'ai déjà fait cá 'y a pas très longtps et je ne vois pas comment l'optimiser d'avantage. Je pense que je vais y jetter un coup d'oeil d'ici peu (je n'ai ni le temps ni l'esprit en ce moment). Si je ne trouve pas d'optimisation intéresante, je vais abandoner le projet. Éh oui, on se fatigue de lutter contre des limites impossibles...

En tout cas, ça a été mon premier ému, et les résultats ne sont pas mauvais du tout (si on fait la grosse vue au sujet de la vitesse, il y a pas mal de jeux qui marchent assez bien). En plus, j'ai améilloré mes capacités de programmeur 68k. Et le plus important, j'ai apris que (j'estime) sans une relation de 20 à 1 niveau MHz, ça vaut même pas le coup d'essayer de faire un ému (c.à.d, avec une TI à ~80MHz ça devrait aller, mais pas avec 30MHz).

En plus, qui sait, qq'un de plus doué que moi pourrait continuer avec le projet...
Boogerman

Bouger, travailler, manger et se reposer, c'est la devise de la tortue!