60

scanline :/
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

61

Et pour la version TI?

62

scanline aussi ^^
meme code smile qui va d'ailleur partir a la poubelle (le code)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

63

move.b (a0)+,d1 ;8 cycles
move.b (a0),d0 ;8 cycles
rol.w #8,d0 ;22 cycles
move.b d1,d0 ;4 cycles
total = 42

OR
move.b (a0)+,d1 ;8 cycles
move.b (a0),-(a7) ;12 cycles
move.w (a7)+,d0 ;8 cycles
move.b d1,d0 ;4 cycles
total = 32
I am the one and only cheerio.
-Samuel Stearley

64

move.b d7,d1 ;old C flag
spl.b d1
addq.b #1,d1
add.b d1,d2 ;M + A + C

into:

move.b d7,d1 ;old c flag
smi.b d1
subq.b d1,d2 ;subtract -1 = add 1 if c flag set

EDIT: forget it, does not set carry flag properly
I am the one and only cheerio.
-Samuel Stearley

65

and.b d3,(a2) ;12 clocks
smi.b (a2) ;12 clocks

into:

and.b (a2),d3 ;8 clocks
smi (a2) ;12 clocks
I am the one and only cheerio.
-Samuel Stearley

66

move.b d7,d1
andi.b #$80,d1
lsr.b #1,d0
scs.b d7
add.b d1,d0

->

move.b d7,d1
add.b d1,d1
roxr.b #1,d0

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

67

Nyall :move.b (a0)+,d1 ;8 cycles
move.b (a0),d0 ;8 cycles
rol.w #8,d0 ;22 cycles
move.b d1,d0 ;4 cycles
total = 42

OR
move.b (a0)+,d1 ;8 cycles
move.b (a0),-(a7) ;12 cycles
move.w (a7)+,d0 ;8 cycles
move.b d1,d0 ;4 cycles total = 32


oula

je reprend a0 = 0x0000
les valeurs a 0x0000 et 0x0001 sont 0x01 et 0x02

donc

move.b (a0)+,d1 ;d1 = 0x01
move.b (a0),d0 ;d0 = 0x02
rol.w #8,d0 ;d0 = 0x0200
move.b d1,d0 ;d0 = 0x01 (et en .w 0x0201)

la on a :

move.b (a0)+,d1 ; d1 = 0x01
move.b (a0),-(a7) ; (a7)+1 = 0x02
move.w (a7)+,d0 ; d0 = 0x02gg (gg == qq chose de la pile..)
move.b d1,d0 ;d0 = 0x0201

bref neutral meme si ça semble marcher neutral le pointeur de pile n'est plus a sa place
vu que a7 se retrouve a a7 -1 par raport au début du code

and.b d3,(a2) ;12 clocks
smi.b (a2) ;12 clocks

into:

and.b (a2),d3 ;8 clocks
smi (a2) ;12 clocks


oula

je suis vraiment pas sur que ça soit une bonne optimisation neutral
gagner 4 cycles pour un code dont on est meme pas sur qu'il ce comporte correctement par rapport a l'original neutral

l'original dit "je met d3 dans la mémoire pointé par a2"
on change pas "je met le contenu de la mémoire pointé par a2 dans d3"

et si la valeur de d3 sert un peu plus loin on fait quoi dans ce cas ? ben on plante neutral
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

68

Godzil> neutral²²²
Faut que t'arrêtes de faire la tête...

move.b dn,-(a7) ne décrémente pas la pile d'une unité, il me semble, mais de deux (pour éviter de se retrouver avec une adresse impaire).

Pour l'autre code, à mon avis il a regardé la suite du code pour voir si d3 était utilisé.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

69

move.b (a0),d0
move.b d7,d1
spl.b d1
addq.b #1,d1
move.b d0,d7
add.b d0,d0
add.b d1,d0

->

move.b (a0),d0
move.b d7,d1
move.b d0,d7
add.b d1,d1 ;set x flag if bit 7 is set
addx.b d0,d0
I am the one and only cheerio.
-Samuel Stearley

70

Godzil>
If the address register is the
stack pointer and the operand size is byte, the address is decremented by two to keep the stack pointer aligned to a word boundary.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

71

Sasume: je suis pas tres reveillé donc cheeky



pour le move.b dn,-(a7)

je ne trouve pas d'info comme quoi en realité a7 serait décrémenté de 2 au lieu de 1

en plus le code move.b dn,-(an) n'est pas spécifique a a7.

non je suis désolé (cf mon livre sur le 68000) :

Addressage indirect Prédécrémenté

Le registre d'addresse An contienu une addresse mémoire. Cette addresse doit être décrémenté de N pour donner l'addresse de l'opérande.
N = 1 si l'opérande est un octet
N = 2 si l'opérande est un mot
N = 4 si l'opérand est un mot double
An = An - N et AE = (An)


avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

72

Sasume
: Godzil>
If the address register is the
stack pointer and the operand size is byte, the address is decremented by two to keep the stack pointer aligned to a word boundary.


Ca c'est l'assembleur qui fait ça pas le processeur
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

73

Nyall & Pollux > Exellent! Congratulations for having found those optimisations wink
Godzil > j'ai vu ca plusieurs fois sur le forum dans je sais plus quels topics. Le mieux est de tester et de s'en rendre compte par soi-meme.

74

Godzil
:
Sasume
: Godzil>
If the address register is the
stack pointer and the operand size is byte, the address is decremented by two to keep the stack pointer aligned to a word boundary.
Ca c'est l'assembleur qui fait ça pas le processeur
Tu rigoles ? L'assembleur va substituer les instructions du type move.b dn,-(a7) par subq.l #2,a7 ; move.b dn,(a7) ??
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

75

Pardon the anglais but is there a reason why you are not using the addx instruction for the various adc instructions? Why cant 'adc_indx' look like:


adc_indx:
moveq.l #0,d0
move.b (a3)+,d0
add.b d3,d0
lea.l 0(a4,d0.l),a0
move.b (a0)+,d1
move.b (a0),-(a7)
move.w (a7)+,d0
move.b d1,d0
lea.l 0(a4,d0.l),a0
move.b (a0),d0
add.b d7,d7 ;maybe set extend flag
addx.b d0,d2 ;Edit: swapped the args
scs d7
svs (a2)
move.b d2,d5 ;N
move.b d2,d6 ;Z
bra.l update_timer

Edit: Changed
move.b d7,d1 ;get carry flag
add.b d1,d1 ;maybe set extend flag

to

add.b d7,d7

I am the one and only cheerio.
-Samuel Stearley

76

I simply didn't think about using addx to set properly the carry flag. But for the V flag, I think it is not as trivial as in your piece of code. Here is how it should be set for an 6502 ADC instruction:
"set if: A register (before operation) and value to add (d0 before the addx here) have the same sign
AND
A register (before operation) and result of addition have opposite sign"
however, if the addx instruction set the X flag as in the V flag must be set in the synopsis above, then you're right (I'm going to check this out).

77

heuu

nerick j'ai pas trop regardé la dessus

comment tu alloue la mémoire du 6502 ? (aka les 64Ko)

j'ai l'impression que tu utilise a4 pour stoquer un pointeur sur le début de la mémoire
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

78

j'alloue 2 blocs consécutifs de 64/2 Ko chacun, en prenant soin de stocker le header (4 octets) du bloc le plus éloigné avant de l'écraser

79

c'est crado mais bon :/
t'as une autre solution? confus

80

I can use boolean algebra to manipulate the overflow logic: v=(~ (source xor destination)) and (source xor result) into the logic given in table 3-18 of the motorolla programmer reference manual: v= (source and destination and ~result) or (~source and ~destination and result).
I am the one and only cheerio.
-Samuel Stearley

81

Godzil :
pour le move.b dn,-(a7)
je ne trouve pas d'info comme quoi en realité a7 serait décrémenté de 2 au lieu de 1

Tu n'as pas bien cherché alors.
en plus le code move.b dn,-(an) n'est pas spécifique a a7.

Mais a7 est traîté spécialement par le processeur.
non je suis désolé (cf mon livre sur le 68000) :

Addressage indirect Prédécrémenté

Le registre d'addresse An contienu une addresse mémoire. Cette addresse doit être décrémenté de N pour donner l'addresse de l'opérande.
N = 1 si l'opérande est un octet
N = 2 si l'opérande est un mot
N = 4 si l'opérand est un mot double
An = An - N et AE = (An)

Jette ton livre alors. Le 68kguide donne la bonne information.
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é

82

Next thing are the unrolled:

moveq.l #0,d0
move.b (a0)+,d0
lsl.w #4,d0
lea.l 0(a5,d0.l),a1
bsr.l draw_tile

A bsr is 18 clocks. An rts is 16 clocks. Total of 34 clocks to use the routine. Looping with dbra takes 10 clocks each loop and 14 clocks the final loop. It will be smaller and faster to inline 'draw_tile' and loop.
I am the one and only cheerio.
-Samuel Stearley

83

Heres another idea. Before the loop starts load 0 into d5, and d6. If an 8 bit value needs to be used as 32 bits, load it into d5. If a 16 bit value needs to be used as 32 bits load it into d6.

adc_indx:
move.b (a3)+,d5
add.b d3,d5
lea.l 0(a4,d5.l),a0
move.b (a0)+,d1
move.b (a0),-(a7)
move.w (a7)+,d6
move.b d1,d6
move.b 0(a4,d6.l),d0
add.b d7,d7 ;maybe set extend flag
addx.b d0,d2
scs d7
svs (a2)
move.b d2,d5 ;N
move.b d2,d6 ;Z
bra.l update_timer
I am the one and only cheerio.
-Samuel Stearley

84

Et c quoi les routines critiques dans ton ému, Nerick ?

Nyall> je ne pense pas que les .l soient nécessaires, de toute façon...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

85

./80 >
V = ~(S ^ D) & (S ^ R) #6502#
V = ~[(~S & D) | (S & ~D)] & [(~S & R) | (S & ~R)]
V = ~(~S & D) & ~(S & ~D) & [(~S & R) | (S & ~R)]
V = [~(~S) | ~D] & [~S | ~(~D)] & [(~S & R) | (S & ~R)]
V = (S | ~D) & (~S | D) & [(~S & R) | (S & ~R)]
V = (S | ~D) & [(~S | D) & (~S & R) | (~S | D) & (S & ~R)]
V = (S | ~D) & (~S | D) & ~S & R | (S | ~D) & (~S | D) & S & ~R
V = ~S & R & (S | ~D) | ~R & S & (~S | D)
V = [(~S & S | ~S & ~D) & R] | [(S & ~S | S & D) & ~R]
V = (~S & ~D & R) | (S & D & ~R) #68k#

top
thanks a lot Nyall, now the adc instructions are much faster.
Edit: it must be quite the same for sbc instructions, using 68k subx. To be continued happy

86

./82 > anyway, the current drawing routines are not definitive yet (just for the demo), I'm rewriting them differently for the next versions.
./83 > yes, good idea smile
Pollux > l'émulation de chaque opcode évidemment, et l'affichage en second (mais l'affichage est en train d'etre réécrit).

87

What about continuing in english in the International forum so that Nyall and other people can help more ? smile
So much code to write, so little time.

88

What about stopping to advertise your empty forum?
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é

89

Ça te pose un problème ? T'avise même pas d'aller le pourrir volontairement, j'ai pas envie de compter les avertissements avant "mesure effective".
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

90

You guys do know that Nyall is Samuel? Anyways I updated my sig.
nitro :
What about continuing in english in the International forum so that Nyall and other people can help more ? smile


I think I'll stop with the suggestions before I become obnoxious wink
I am the one and only cheerio.
-Samuel Stearley