1

bonjour à tous,

dans la doc de rmac, j'ai récupéré les conditions de test pour le GPU et le DSP :

;-------------------------
;CC (Carry Clear) = %00100
;CS (Carry Set) = %01000
;EQ (Equal) = %00010
;MI (Minus) = %11000
;NE (Not Equal) = %00001
;PL (Plus) = %10100
;HI (Higher) = %00101
;T (True) = %00000
;-------------------------

étant habitué au 68000 et ses bge / ble etc je m'interroge sur la possibilité de faire des tests avec plus grand ou égal / plus petit ou égal
a priori pl intègre le zéro, c'est a dire qu'il semble être plus grand ou égal ?

parce que ça, ça me semble tout cracra :

jump mi,(saut_pas_de_collision)
nop
jump eq,(saut_pas_de_collision)
nop

( même si ça fonctionne )
avatar

2

PL n'intègre pas le sens "égal" : PL est équivalent à "jump if negative flag is clear"

Bit Description
0 zero flag must be clear for jump to occur
1 zero flag must be set for jump to occur
2 flag selected by bit 4 must be clear for jump to occur
3 flag selected by bit 4 must be set for jump to occur
4 if set select negative flag, if clear select carry

du coup si tu veux faire un jump si >= il faut créer le condition code %00110 ou %10110 selon si tu es en signed ou unsigned (si je dis pas de bétises).
tu peux la déclarer avec la directive :
jumpifge .ccdef %00110 et l'utiliser de la manière suivante :
jump jumpifge, (saut_pas_de_collision) nop

smile

[edit]raturage de la partie fausse.[/edit]
avatar

3

impressive !

merci beaucoup
avatar

4

de rien top
avatar

5

j'avais noté ça
.GPU

LT ccdef %11001
GT ccdef %10101
GE ccdef %10100 ; PL
LE ccdef %11000 ; MI

6

ouais c'est vrai que ce que j'ai dit est faux.
c'est un AND qui est fait et non un OR sur les différentes options du cc.

mea coulpa. scotch (faut pas répondre quand on est en réunion cheeky


Néanmoins GE n'est pas équivalent à PL et LE n'est pas équivalent à MI si la comparaison est sur du signé où du coup sur jag il n'y a finalement pas d'équivalent.
Dans le cas de comparaison unsigned, on peut utiliser PL & MI comme le dit Artemis.
avatar

7

J'avais fait une antisèche : https://www.mirari.fr/9d0k
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

8

merci pour l'antisèche, pour les cancres dont je fais partie bisoo
avatar

9

Tu dis impossible pour certaines conditions mais il faut juste inverser les opérandes smile
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

10

Oui bien sûr, tu peux faire ça (sauf quand l'un des deux est une valeur immédiate), ou alors tester la condition opposée. "Impossible" veut simplement dire que ça n'est pas supporté directement sous cette forme.

Par contre à ma connaissance, il n'y a pas de conditions qui permettent des comparaisons signées sur le GSP et le DSP.

Quant à PL et MI, ils testent le MSB (pas le carry), ce n'est pas ce qu'il faut pour faire des comparaisons non signées.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

11

ouais effectivement, j'ai ptet des potentiels bugs dans mes vieux code alors tongue (ou pas, ca fait tellement longtemps que j'ai pas codé sur jag...)
après en principe tant qu'il n'y a pas d'overflow ca fonctionne non ?
avatar

12

Oui, tant que les nombres sont suffisamment petits (et donc qu'il n'y a pas de différence entre la valeur du MSB et celui du carry), ça doit fonctionner quand même.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo