4IBM ph -----E-COPY-----(c) 1991, 92 bei Robert Weiss Dorfstr. 5 8401 Gralfing Tel 09405-6185 EMail (Mausnetz)Robert Weiss @ R----------------D @`! #@%`')+-/1 3@5`79;=?A C@EGIKMOQ S@U`W[]_a c@ogikmq s@uwy{} O` @ ` @ @ ` ` ǀ  @ o ٠  @ @`!Aa   !Aa!!#A%a')+-/1!3A5a79;=A!CAEaGIKMOQ!SAUaWY[]_a!cAeagikmoq!sAuwy{}!Oa!Aa!Oa!Aa!Aaǁɡ!Aaׁ١!Aa!Oa " B  !"!B!b!!!!!"!""#B"%b"'")"+"-/1"#O#5b#7#9#=#?$A"$CB$Eb$G$I$K$M$O%/%SB%Ub%W%Y[%]%_a"&cB&eb&g&i&k&m&o'q"'sB'ub'w'y'{'}'("(B(b((((()/)b)))))*"*B*b*****+"+B+b+++ @`! #@%`')+-/1 3@5`79;=?A C@EGIKMOQ S@U`W[]_a c@ogikmq s@uwy{} O` @ ` @ @ ` ` ǀ  @ o ٠  @ @`!Aa   !Aa!!#A%a')+-/1!3A5a79;=A!CAEaGIKMOQ!SAUaWY[]_a!cAeagikmoq!sAuwy{}!Oa!Aa!Oa!Aa!Aaǁɡ!Aaׁ١!Aa!Oa " B  !"!B!b!!!!!"!""#B"%b"'")"+"-/1"#O#5b#7#9#=#?$A"$CB$Eb$G$I$K$M$O%/%SB%Ub%W%Y[%]%_a"&cB&eb&g&i&k&m&o'q"'sB'ub'w'y'{'}'("(B(b((((()/)b)))))*"*B*b*****+"+B+b+++PASKUD ѵ=68000 H68030  HAUTO  HBLITTER  HDIVERS  HDSP HFALCON H JOYSTICK H POLYGO H ROLLER H ST H TRACK HVIDEL HMAG PRG ,5!GM. %XJ.. %XJCYCLES_TASC `-DEBUTANTDOC AcFHOPTIMIS DOC VY&/POINTS DOC +!e $POINTS S |`o. %XJ.. %XJ68030_INDOC f+!v^2. &XJ.. &XJMAG PRG 5!GM. &XJ.. &XJBLITTER DOC 9!G8CRB LST mCRB S m=RESET PRG mlSCREEN S 6! STE S mb. &XJ.. &XJADEBOG DOC `CONTACT DOC !aEDITO DOC `PUB DOC . &XJ.. &XJDIVERS HARTICLE S .a!. 'XJ.. 'XJEDITO DOC p!. 'XJ .. 'XJFALCON30DOC =FALCONR2DOC =5HARDWAREDOC =?. 'XJ .. 'XJBLIT_JOYS Uv3EXEMPLE NEO "=}JOY DOC XJOY S =vf ROAD NEO &=}WORK NEO *=}. 'XJ .. 'XJARTICLE AST BZHTC_POLYS ^E. 'XJ .. 'XJFONT BAS ==,FONT DAT A=FONT PI1 D=B}LEMNISCABAS H=.LEMNISCADAT K=0` ROLLER_CS U3ROTATE_5BAS N=;~ROTATE_5DAT Q=<Q. (XJ .. (XJREGISTERASC W=Q#. (XJ.. (XJINITS DOC BXZINITS S a=`0. (XJ.. (XJVIDEL LST h=J VIDEL TXT f!wJ ***************************************************** * * * TEMPS D'EXECUTION DES INSTRUCTIONS * * DU MC 68000 UTILISANT LE SHIFTER ATARI STF * * PAR EQUINOX * * * * ATTENTION , CE N'EST PAS PARIEL SUR FALCON * * DANS LE PROCHAIN NUMERO IL Y AURA SUREMENT * * UN TEST DES CYCLES SUR FALCON... ENFIN * * SI QUELQU'UN VEUT LE FAIRE ... SI VOUS * * L'AVEZ DEJA FAIT ECRIVEZ MOI A MON ADRESSE * * A TOULOUSE... (Pour comparer !!!) * * * ***************************************************** INSTRUCTIONS CONDITIONNELLES --------------------------------------------------------------------------- | Instruction | Taken | Not taken | Taken (short) | Not taken (short) | |-------------------|-------|-----------|---------------|-------------------| | Bra | 12 | * | 12 | * | |-------------------|-------|-----------|---------------|-------------------| | Bcs | 12 | 12 | 12 | 8 | |-------------------|-------------------------------------------------------| | | De meme pour Bcc,Bmi,Bhi,Bls,Bpl,Beq,Bgt,Bvs,Bvc,Bge | | | Blt,Blo,Ble,Bhs,Bne | |-------------------|-------------------------------------------------------| | Instruction | Taken | Not taken | |-------------------|-------------------------|-----------------------------| | Dbra | 16+12n | * | |-------------------|-------------------------|-----------------------------| | Dbf | 16+12n | * | |-------------------|-------------------------|-----------------------------| | Dbeq | 16+12n | 12 | |-------------------|-------------------------------------------------------| | | De meme pour Dbcc,Dbmi,Dbhi,Dbls,Dbpl,Dbgt,Dbvs,Dbvc | | | Dblt,Dblo,Dble,Dbhs,Dbne,Dbge,Dbcs | --------------------------------------------------------------------------- INSTRUCTIONS DIVERSES --------------------------------------------------------------------------- | Destination | Source | |-----------------|---------------------------------------------------------| | |Dn|(An)|d(An)|-(An)|d(An,Dn)|x.w|x.l|d(Pc)|d(Pc,Dn)| #xxx| | ----------------|--|----|-----|-----|--------|---|---|-----|--------|-----| | Move to sr |12| 16 | 20 | 20 | 24 | 20| 24| 20 | 24 | 16 | | ----------------|--|----|-----|-----|--------|---|---|-----|--------|-----| | Move to ccr |12| 16 | 20 | 20 | 24 | 20| 24| 20 | 24 | 16 | |-----------------|---------------------------------------------------------| | Source | Destination | |-----------------|---------------------------------------------------------| | | Dn | (An) | -(An) | d(An) | d(An,Dn) | xxx.w | xxx.l | |-----------------|------|------|-------|-------|----------|-------|--------| | Move from sr to | 8 | 12 | 16 | 16 | 20 | 16 | 20 | |-----------------|------|------|-------|-------|----------|-------|--------| | St | 8 | 12 | 16 | 16 | 20 | 16 | 20 | |-----------------|------|------|-------|-------|----------|-------|--------| | Sf | 4 | 12 | 16 | 16 | 20 | 16 | 20 | --------------------------------------------------------------------------- - 1 - ------------------------------------------------------------------------------ | Source | Destination | |----------|-------------------------------------------------------------------| | Move.B.W | Dn | An | (An) | (An)+ | -(An) | d(An) | d(An,Dn) | xxx.W | xxx.L | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Dn | 4 | 4 | 8 | 8 | 8 | 12 | 16 | 12 | 16 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | An | 4 | 4 | 8 | 8 | 8 | 12 | 16 | 12 | 16 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | (An) | 8 | 8 | 12 | 12 | 12 | 16 | 20 | 16 | 20 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | (An)+ | 8 | 8 | 12 | 12 | 12 | 16 | 20 | 16 | 20 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | -(An) | 12 | 12 | 16 | 16 | 16 | 20 | 24 | 20 | 24 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An) | 12 | 12 | 16 | 16 | 16 | 20 | 24 | 20 | 24 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An,Dn) | 16 | 16 | 20 | 20 | 20 | 24 | 28 | 24 | 28 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.W | 12 | 12 | 16 | 16 | 16 | 20 | 24 | 20 | 24 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.L | 16 | 16 | 20 | 20 | 20 | 24 | 28 | 24 | 28 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc) | 12 | 12 | 16 | 16 | 16 | 20 | 24 | 20 | 24 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc,Dn) | 16 | 16 | 20 | 20 | 20 | 24 | 28 | 24 | 28 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | #xxx | 8 | 8 | 12 | 12 | 12 | 16 | 20 | 16 | 20 | ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ | Source | Destination | |----------|-------------------------------------------------------------------| | Move.L | Dn | An | (An) | (An)+ | -(An) | d(An) | d(An,Dn) | xxx.W | xxx.L | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Dn | 4 | 4 | 12 | 12 | 12 | 16 | 20 | 16 | 20 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | An | 4 | 4 | 12 | 12 | 12 | 16 | 20 | 16 | 20 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | (An) | 12 | 12 | 20 | 20 | 20 | 24 | 28 | 24 | 28 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | (An)+ | 12 | 12 | 20 | 20 | 20 | 24 | 28 | 24 | 28 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | -(An) | 16 | 16 | 24 | 24 | 24 | 28 | 32 | 28 | 32 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An) | 16 | 16 | 24 | 24 | 24 | 28 | 32 | 28 | 32 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An,Dn) | 20 | 20 | 28 | 28 | 28 | 32 | 36 | 32 | 36 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.W | 16 | 16 | 24 | 24 | 24 | 28 | 32 | 28 | 32 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.L | 20 | 20 | 28 | 28 | 28 | 32 | 36 | 32 | 36 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc) | 16 | 16 | 24 | 24 | 24 | 28 | 32 | 28 | 32 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc,Dn) | 20 | 20 | 28 | 28 | 28 | 32 | 36 | 32 | 36 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | #xxx | 12 | 12 | 20 | 20 | 20 | 24 | 28 | 24 | 28 | ------------------------------------------------------------------------------ - 2 - ------------------------------------------------------------------------------ | Source | Destination | |----------|-------------------------------------------------------------------| | Add.B.W | Dn | An | (An) | Var | -(An) | d(An) | d(An,Dn) | xxx.W | xxx.L | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Dn | 4 | 8 | 12 | 20 | 16 | 16 | 20 | 16 | 20 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | An | 4 | 8 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | (An)+ | 8 | 12 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | -(An) | 12 | 16 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An) | 12 | 16 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An,Dn) | 16 | 20 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.W | 12 | 16 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.L | 16 | 20 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc) | 12 | 16 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc,Dn) | 16 | 20 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | #xxx | 8 | 12 | 16 | 24 | 20 | 20 | 24 | 20 | 24 | ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ | Source | Destination | |----------|-------------------------------------------------------------------| | Add.L | Dn | An | (An) | Var | -(An) | d(An) | d(An,Dn) | xxx.W | xxx.L | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Dn | 8 | 8 | 20 | 28 | 24 | 24 | 28 | 24 | 28 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | An | 8 | 8 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | (An)+ | 16 | 16 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | -(An) | 20 | 20 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An) | 20 | 20 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An,Dn) | 24 | 24 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.W | 20 | 20 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.L | 24 | 24 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc) | 20 | 20 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc,Dn) | 24 | 24 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | #xxx | 16 | 16 | 28 | 36 | 32 | 32 | 36 | 32 | 36 | ------------------------------------------------------------------------------ - 3 - ------------------------------------------------------------------------------ | Source | Destination | |----------|-------------------------------------------------------------------| | Sub.B.W | Dn | An | (An) | Var | -(An) | d(An) | d(An,Dn) | xxx.W | xxx.L | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Dn | 4 | 8 | 12 | 20 | 16 | 16 | 20 | 16 | 20 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | An | 4 | 8 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | (An)+ | 8 | 12 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | -(An) | 12 | 16 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An) | 12 | 16 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An,Dn) | 16 | 20 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.W | 12 | 16 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.L | 16 | 20 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc) | 12 | 16 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc,Dn) | 16 | 20 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | #xxx | 8 | 12 | 16 | 24 | 20 | 20 | 24 | 20 | 24 | ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ | Source | Destination | |----------|-------------------------------------------------------------------| | Sub.L | Dn | An | (An) | Var | -(An) | d(An) | d(An,Dn) | xxx.W | xxx.L | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Dn | 8 | 8 | 20 | 28 | 24 | 24 | 28 | 24 | 28 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | An | 8 | 8 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | (An)+ | 16 | 16 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | -(An) | 20 | 20 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An) | 20 | 20 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An,Dn) | 24 | 24 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.W | 20 | 20 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.L | 24 | 24 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc) | 20 | 20 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc,Dn) | 24 | 24 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | #xxx | 16 | 16 | 28 | 36 | 32 | 32 | 36 | 32 | 36 | ------------------------------------------------------------------------------ - 4 - ------------------------------------------------------------------------------ | Source | Destination | |----------|-------------------------------------------------------------------| | And.B.W | Dn | An | (An) | Var | -(An) | d(An) | d(An,Dn) | xxx.W | xxx.L | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Dn | 4 | * | 12 | 20 | 16 | 16 | 20 | 16 | 20 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | An | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | (An)+ | 8 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | -(An) | 12 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An) | 12 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An,Dn) | 16 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.W | 12 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.L | 16 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc) | 12 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc,Dn) | 16 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | #xxx | 8 | * | 16 | 24 | 20 | 20 | 24 | 20 | 24 | ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ | Source | Destination | |----------|-------------------------------------------------------------------| | And.L | Dn | An | (An) | Var | -(An) | d(An) | d(An,Dn) | xxx.W | xxx.L | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Dn | 8 | * | 20 | 28 | 24 | 24 | 28 | 24 | 28 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | An | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | (An)+ | 16 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | -(An) | 20 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An) | 20 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An,Dn) | 24 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.W | 20 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.L | 24 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc) | 20 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc,Dn) | 24 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | #xxx | 16 | * | 28 | 36 | 32 | 32 | 36 | 32 | 36 | ------------------------------------------------------------------------------ - 5 - ------------------------------------------------------------------------------ | Source | Destination | |----------|-------------------------------------------------------------------| | Or.B.W | Dn | An | (An) | Var | -(An) | d(An) | d(An,Dn) | xxx.W | xxx.L | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Dn | 4 | * | 12 | 20 | 16 | 16 | 20 | 16 | 20 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | An | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | (An)+ | 8 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | -(An) | 12 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An) | 12 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An,Dn) | 16 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.W | 12 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.L | 16 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc) | 12 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc,Dn) | 16 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | #xxx | 8 | * | 16 | 24 | 20 | 20 | 24 | 20 | 24 | ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ | Source | Destination | |----------|-------------------------------------------------------------------| | | Dn | An | (An) | Var | -(An) | d(An) | d(An,Dn) | xxx.W | xxx.L | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Or.L | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Dn | 8 | * | 20 | 28 | 24 | 24 | 28 | 24 | 28 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | An | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | (An)+ | 16 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | -(An) | 20 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An) | 20 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An,Dn) | 24 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.W | 20 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.L | 24 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc) | 20 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc,Dn) | 24 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | #xxx | 16 | * | 28 | 36 | 32 | 32 | 36 | 32 | 36 | ------------------------------------------------------------------------------ - 6 - ------------------------------------------------------------------------------ | Source | Destination | |----------|-------------------------------------------------------------------| | Cmp.B.W | Dn | An | (An)+| Var | -(An) | d(An) | d(An,Dn) | xxx.W | xxx.L | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Dn | 4 | 8 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | An | 4 | 8 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | (An)+ | 8 | 12 | 12 | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | -(An) | 12 | 16 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An) | 12 | 16 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An,Dn) | 16 | 20 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.W | 12 | 16 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.L | 16 | 20 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc) | 12 | 16 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc,Dn) | 16 | 20 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | #xxx | 8 | 12 | 12 | 20 | 16 | 16 | 20 | 16 | 20 | ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ | Source | Destination | |----------|-------------------------------------------------------------------| | Cmp.L | Dn | An | (An)+| Var | -(An) | d(An) | d(An,Dn) | xxx.W | xxx.L | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Dn | 8 | 8 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | An | 8 | 8 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | (An)+ | 16 | 16 | 20 | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | -(An) | 20 | 20 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An) | 20 | 20 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An,Dn) | 24 | 24 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.W | 20 | 20 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.L | 24 | 24 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc) | 20 | 20 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc,Dn) | 24 | 24 | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | #xxx | 16 | 16 | 20 | 28 | 24 | 24 | 28 | 24 | 28 | ------------------------------------------------------------------------------ - 7 - ------------------------------------------------------------------------------ | Source | Destination | |----------|-------------------------------------------------------------------| | Eor.B.W | Dn | An | (An) | Var | -(An) | d(An) | d(An,Dn) | xxx.W | xxx.L | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Dn | 4 | * | 12 | 20 | 16 | 16 | 20 | 16 | 20 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | An | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | (An)+ | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | -(An) | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An) | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An,Dn) | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.W | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.L | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc) | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc,Dn) | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | #xxx | 8 | * | 16 | 24 | 20 | 20 | 24 | 20 | 24 | ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ | Source | Destination | |----------|-------------------------------------------------------------------| | Eor.L | Dn | An | (An) | Var | -(An) | d(An) | d(An,Dn) | xxx.W | xxx.L | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Dn | 8 | * | 20 | 28 | 24 | 24 | 28 | 24 | 28 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | An | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | (An)+ | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | -(An) | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An) | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(An,Dn) | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.W | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | xxx.L | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc) | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | d(Pc,Dn) | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | #xxx | 16 | * | 28 | 36 | 32 | 32 | 36 | 32 | 36 | ------------------------------------------------------------------------------ - 8 - ------------------------------------------------------------------------------ | Source | Destination | |----------|-------------------------------------------------------------------| | | Dn | An | (An) | Var | -(An) | d(An) | d(An,Dn) | xxx.W | xxx.L | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Addq.W | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | #xxx | 4 | 8 | 12 | 20 | 16 | 16 | 20 | 16 | 20 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Subq.W | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | #xxx | 4 | 8 | 12 | 20 | 16 | 16 | 20 | 16 | 20 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Movep.W | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Dn | * | * | 16 | * | * | 16 | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | (An) | 16 | * | * | * | * | * | * | * | * | ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ | Source | Destination | |----------|-------------------------------------------------------------------| | | Dn | An | (An) | Var | -(An) | d(An) | d(An,Dn) | xxx.W | xxx.L | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Addq.L | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | #xxx | 8 | 8 | 20 | 28 | 24 | 24 | 28 | 24 | 28 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Subq.L | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | #xxx | 8 | 8 | 20 | 28 | 24 | 24 | 28 | 24 | 28 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Moveq | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | #xxx | 4 | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Movep.L | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Dn | * | * | 24 | * | * | 24 | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | (An) | 24 | * | * | * | * | * | * | * | * | ------------------------------------------------------------------------------ - 9 - INSTRUCTIONS PORTANT SUR UNE OPERANDE UNIQUE ------------------------------------------------------------------------------ | Source | Destination | |----------|-------------------------------------------------------------------| | | Dn | An | (An) | Var | -(An) | d(An) | d(An,Dn) | xxx.W | xxx.L | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Clr.w | 4 | * | 12 | 20 | 16 | 16 | 20 | 16 | 20 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Nbcd.b | 8 | * | 12 | 20 | 16 | 16 | 20 | 16 | 20 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Neg.w | 4 | * | 12 | 20 | 16 | 16 | 20 | 16 | 20 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Negx.w | 4 | * | 12 | 20 | 16 | 16 | 20 | 16 | 20 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Not.w | 4 | * | 12 | 20 | 16 | 16 | 20 | 16 | 20 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Tas.b | 4 | * | 16 | 24 | 20 | 20 | 24 | 20 | 24 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Tst.w | 4 | * | 8 | 16 | 12 | 12 | 16 | 12 | 16 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Scc | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | True | 8 | * | 12 | 20 | 16 | 16 | 20 | 16 | 20 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | False | 4 | * | 12 | 20 | 16 | 16 | 20 | 16 | 20 | ------------------------------------------------------------------------------ De meme pour : -Scs -Smi -Seq -Shi -Sls -Spl -Svs -Svc -Sge -Slt -Sgt -Sne -Sle -Slo -Shs ------------------------------------------------------------------------------ | Source | Destination | |----------|-------------------------------------------------------------------| | | Dn | An | (An) | Var | -(An) | d(An) | d(An,Dn) | xxx.W | xxx.L | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Clr.l | 8 | * | 20 | 28 | 24 | 24 | 28 | 24 | 28 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Neg.l | 8 | * | 20 | 28 | 24 | 24 | 28 | 24 | 28 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Negx.l | 8 | * | 20 | 28 | 24 | 24 | 28 | 24 | 28 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Not.l | 8 | * | 20 | 28 | 24 | 24 | 28 | 24 | 28 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Tst.l | 4 | * | 12 | 20 | 16 | 16 | 20 | 16 | 20 | ------------------------------------------------------------------------------ - 10 - INSTRUCTIONS EN MULTIPRECISIONS ------------------------ ------------------------ | Source | Destination | | Source | Destination | |----------|-------------| |----------|-------------| | | Dn | -(An) | | | Dn | -(An) | |----------|----|--------| |----------|----|--------| | Addx.W | * | * | | Addx.L | * | * | |----------|----|--------| |----------|----|--------| | Dn | 4 | * | | Dn | 8 | * | |----------|----|--------| |----------|----|--------| | -(An) | * | 20 | | -(An) | * | 32 | |----------|----|--------| |----------|----|--------| | Subx.W | * | * | | Subx.L | * | * | |----------|----|--------| |----------|----|--------| | Dn | 4 | * | | Dn | 8 | * | |----------|----|--------| |----------|----|--------| | -(An) | * | 20 | | -(An) | * | 32 | |----------|----|--------| |----------|----|--------| | Abcd.B | * | * | | Sbcd.B | * | * | |----------|----|--------| |----------|----|--------| | Dn | 8 | * | | Dn | 8 | * | |----------|----|--------| |----------|----|--------| | -(An) | * | 20 | | -(An) | * | 20 | ------------------------ ------------------------ INSTRUCTIONS DIVERSES --------------------------------------------------------------------------- | Eor #xxx,ccr | 20 | Move usp,An | 4 | |------------------|------------------|------------------|------------------| | Eor #xxx,sr | 20 | Move An,usp | 4 | |------------------|------------------|------------------|------------------| | Reset | | Link An,#xxx | | |------------------|------------------|------------------|------------------| | Rte | 20 | And #xxx,ccr | 20 | |------------------|------------------|------------------|------------------| | Rtr | 20 | And #xxx,sr | 20 | |------------------|------------------|------------------|------------------| | Rts | 16 | Exg Dn,Dn | 8 | |------------------|------------------|------------------|------------------| | Stop #xxx | | Exg An,An | 8 | |------------------|------------------|------------------|------------------| | Swap | 4 | Exg Dn,An | 8 | |------------------|------------------|------------------|------------------| | Trap #xx | | Exg An,Dn | 8 | |------------------|------------------|------------------|------------------| | Trapv | 4 | Ext.w Dn | 4 | |------------------|------------------|------------------|------------------| | Unlk An | | Ext.l Dn | 4 | |------------------|------------------|------------------|------------------| | Nop | 4 | Illegal | | |------------------|------------------|------------------|------------------| | Or #xxx,ccr | 20 | Bus error | 116 | |------------------|------------------|------------------|------------------| | Or #xxx,sr | 20 | | | --------------------------------------------------------------------------- - 11 - MANIPULATION DE BIT ------------------------------------------------------------------------------ | Source | Destination | |----------|-------------------------------------------------------------------| | | Dn | An | (An) | Var | -(An) | d(An) | d(An,Dn) | xxx.W | xxx.L | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Bchg | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Dn | 8 | * | 12 | 20 | 16 | 16 | 20 | 16 | 20 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | #xxx | 12 | * | 16 | 24 | 20 | 20 | 24 | 20 | 24 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Btst | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Dn | 8 | * | 8 | 16 | 12 | 12 | 16 | 12 | 16 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | #xxx | 12 | * | 12 | 20 | 16 | 16 | 20 | 16 | 20 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Bset | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Dn | 8 | * | 12 | 20 | 16 | 16 | 20 | 16 | 20 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | #xxx | 12 | * | 16 | 24 | 20 | 20 | 24 | 20 | 24 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Bclr | * | * | * | * | * | * | * | * | * | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | Dn | X1 | * | 12 | 20 | 16 | 16 | 20 | 16 | 20 | |----------|----|----|------|-------|-------|-------|----------|-------|-------| | #xxx | X2 | * | 16 | 24 | 20 | 20 | 24 | 20 | 24 | ------------------------------------------------------------------------------ X1: Si 0<=|Dn|<16 [32] => 8 cycles Si 16<=|Dn|<32 [32] => 12 cycles X2: Si 0<=|xx|<16 [32] => 12 cycles Si 16<=|xx|<32 [32] => 16 cycles - 12 - DECALAGES ROTATIONS ------------------------------------------------------------------------------ | Source | Destination | |----------|-------------------------------------------------------------------| | | Dn | |----------|-------------------------------------------------------------------| | Asl.w | * | |----------|-------------------------------------------------------------------| | Dn | Si n est pair => 8+2n [64]. Si n est impair => 8+2(n-1) [64]. | |----------|-------------------------------------------------------------------| | Asl.l | * | |----------|-------------------------------------------------------------------| | Dn | Si n est pair => 8+2n [64]. Si n est impair => 8+2(n+1) [64]. | |----------|-------------------------------------------------------------------| | Asl.w | * | |----------|-------------------------------------------------------------------| | #xxx | Si n est pair => 8+2n. Si n est impair => 8+2(n-1). | |----------|-------------------------------------------------------------------| | Asl.l | * | |----------|-------------------------------------------------------------------| | #xxx | Si n est pair => 8+2n. Si n est impair => 8+2(n+1). | |----------|-------------------------------------------------------------------| | Source | Destination | |----------|-------------------------------------------------------------------| | | (An) | (An)+ | -(An) | d(An) | d(An,Dn) | xxx.w | xxx.l | |----------|--------|--------|--------|--------|-----------|---------|---------| | Asl | 12 | 12 | 16 | 16 | 20 | 16 | 20 | ------------------------------------------------------------------------------ De meme pour Asr,Lsl,Lsr,Rol,Ror,Roxl,Roxr JMP,JSR,BSR,LEA,PEA ET MOVEM --------------------------------------------------------------------- | Source | Destination | |----------|----------------------------------------------------------| | | (An)|(An)+|-(An)|d(An)|d(An,Dn)|xxx.W|xxx.L|d(Pc)|d(Pc,Dn| |----------|-----|-----|-----|-----|--------|-----|-----|-----|-------| | Jmp | 8 | * | * | 12 | 16 | 8 | 12 | 12 | 16 | |----------|-----|-----|-----|-----|--------|-----|-----|-----|-------| | Jsr | 16 | * | * | 20 | 24 | 16 | 20 | 20 | 24 | |----------|-----|-----|-----|-----|--------|-----|-----|-----|-------| | Lea | 4 | * | * | 8 | 16 | 8 | 12 | 8 | 16 | |----------|-----|-----|-----|-----|--------|-----|-----|-----|-------| | Pea | 12 | * | * | 16 | 24 | 16 | 20 | 16 | 24 | |----------|-----|-----|-----|-----|--------|-----|-----|-----|-------| | M->R | * | * | * | * | * | * | * | * | * | |----------|-----|-----|-----|-----|--------|-----|-----|-----|-------| | Movem.w |12+4n|12+4n| * |16+4n| 20+4n |16+4n|20+4n|16+4n| 20+4n | |----------|-----|-----|-----|-----|--------|-----|-----|-----|-------| | Movem.l |12+8n|12+8n| * |16+8n| 20+8n |16+8n|20+8n|16+8n| 20+8n | |----------|-----|-----|-----|-----|--------|-----|-----|-----|-------| | R->M | * | * | * | * | * | * | * | * | * | |----------|-----|-----|-----|-----|--------|-----|-----|-----|-------| | Movem.w | 8+4n| * | 8+4n|12+4n| 16+4n |12+4n|16+4n| * | * | |----------|-----|-----|-----|-----|--------|-----|-----|-----|-------| | Movem.l | 8+8n| * | 8+8n|12+8n| 16+8n |12+8n|16+8n| * | * | |---------------------------------------------------------------------| | Bsr etiquette -> 20 cycles | --------------------------------------------------------------------- - 13 - ------------------------------- | PROGRAMMATION EN ASSEMBLEUR | ------------------------------- J'ai fait cet article pour les debutants,ceux qui ne connaissent pas l'assembleur.J'essaies d'expliquer comment ca marche en gros,alors je risque de choquer certain puriste. Excusez-moi pour ca et pour mes fautes d'orthographe.Mais sachez que j' ai fais ca pour le plaisir. Si vous avez des problemes,car c' est trop complique ou vous ne comprenez pas tout,ben ecrivez moi. Mais je vous conseille d' ecrire en salon *PATA 2 sur RTEL1, la il y a toujours quelqu' un pour vous expliquez ce qu' il faut faire.Ca ira plus vite que de m ' ecrire , car je vois Alexis que toutes les deux semaines.En outre si vous savez deja programmer en assembleur, et si vous pensez que je suis a cote de la plaque pour certaines de mes explications rien ne vous empeche d' ecrire un bout de l'article pour que je puisse l' inserer dans l' article. Ce qui est bien dans ce mag, c' est que c'est un bon vecteur pour faire bouger la scene. ( Vecteur glissant ... ) --------------------------------------------------- | INTRODUCTION sur la Programmation en ASSEMBLEUR | --------------------------------------------------- By Mr Corto --------------- 1) Le Debuger : ________________ ---------------- Pour moi,les personnes desirant coder en assembler (=asm) sont obligees de savoir utiliser un DEBUGER.Le plus simple est d'utiliser MONST . En effet grace au debuger vous allez pouvoir acquerir les notions de base de la programmation en asm.Si vous maitrisez parfaitement le debuger de genst ( Monst ) , vous pouvez commencer a faire de petits programmes et les assembler et les debugger (Alternate + D)pour voir l'effet qu'a une instruction et son mode d' adressage sur un registre ou sur la memoire. Remarquez que je vous conseille Monst car c'est tres simple de passer de Genst a Monst. A-debug me sert surtout pour faire du bon debugage de programme,avec plein d'interruptions etc... Cependant BRAINSTORM a sorti son KIT developpeur et peux etre qu'il est possible d'appeler A-debug dirrectement avec ASSEMBLE... J' attends qu' ils veuillent bien m' en envoyer un (ALEXIS me le fera passer) ou bien peuvent peut etre faire un bref expose de leur produits pour: HOW TO CODE.... 2) Convention servant a la programmation en ASM: __________________________________________________ -------------------------------------------------- A)Binaire,decimal et hexadecimal: --------------------------------- Une notion importante en assembleur est cette notion de base binaire decimal et hexadecimal... C'est simple vous allez voir: Nous avons 10 chiffres avant de rajouter une dizaine, nous comptons donc en base decimal.C'est chiffres sont le 0,1,2,3,4,5,6,7,8 et le 9.Le mode binaire est constitue de 2 chiffres qui sont le 0 et le 1. Avec ces deux chiffres ont arrive a faire tous les chiffres du decimal.Par exemple, 3 se represente: %0 => 0 , %1=>1 , %10=>2 ,%11=>3,%101=>5 et %11001=>19 Le signe % sert a differencier en assembleur les decinaux et les nombres binaires.Ainsi losrque l'on a: Move.w #%01,d0 ; c'est qu'on met 2 dans d0. En memoire ( par le debugeur ) vous allez pourvoir remarquer qu ' a l' assemblage il met tout dans la meme unite qui est l ' hexadecimal qui est la base de 16. Toutes la memoire et meme le contenu des registes est dans ce mode car il y a des facilite a programmer en hexadecimal. En effet dans un ordinateur , toutes les adresses sont representes en hexadecimal. On peux remarquer que comme avec le % pour le binaire , l ' hexadecimal ce represente avec un $. Il y a 16 nombres dans l'hexadeciamal qui sont : 1,2,3,4,5,6,7,8,9,A,B,C ,D,E,F . On peut avoir par exemple: $7=7 , $A=10 , $B=11 , $C=12 ,$F=15 $10=16 , $155=341. Voila si vous ne comprennez pas cette notion de base qui est tres importante, laissez un message en *PATA 2, sachez que toute calculatrice fais ca,alors pendant les cours de math ... B)Systeme metrique d'un ordinateur: ------------------------------------ En assembleur,il y a 4 quantites de memoire qui sont importantes. La premiere est le bit : Un bit est en fait un 0 ou un 1. On peut donc mettre 2 valeur dans un bit. C ' est tres important surtout au niveau du graphisme.On y accede par des instructions speciales. Voir la routine de points qui est explique dans ce mag... Le second est l'octet : Un octet est en fait 8 bits l'un a cote de l' autre.Ainsi on ne peut avoir que 256 valeurs dans un octet , ce qui veut dire que le nombre ira de 0 a 255 ( 256 valeurs car 2 exp 8 ).En asm on note le bit par un label qui se met a la fin de l'instrution: - C'est le label .b -. L' instruction n'agira que sur 1 octet. ( .b car en anglais OCTET=BYTE a ne pas confondre avec bit).En hexadecimal le chiffre maxi- -mum que peut contenir un bit est $FF. Le troisieme est le Mot : 1 mot est represente en 2 octets soit 16 bits. En asm on le represente par le label - .w - (word) qui se met a la fin d une instruction.Il y a 2 exp 16 valeurs dans un mots.Pour simplifier l' utilisation du mot on l'a divise en 2 partie: l'octet fort et l 'octet faible... En effet le mot se divisant en 2 octets il y a l'octet du haut et l'octet du bas (Comme l'on dit dans les Pyrenees). $ffff est la valeur maximum d'un mot en hexadecimal. ^ ^ | --- Octet faible. ----- Octet fort. Ainsi dans le mots $a1e5, $a1 et l'octet fort et $e5 est l'octet faible. Et dans le mot $0001 , $01 est l'octet faible et $00 est l'octet fort. Le quatrieme est le mot-long: Ce mot long est represente par 2 mots,4 .b et donc 32 bits !!!! Il est represente par le label - .l - et sa valeur maximum est $ffffffff.Il est divise en 2 partie qui son le mot faible et le mot fort (Voir meme chose pour le mot avec les octets). Attention $00000001 est un mot-long, un mot et un octet, cela depend comment est le label de votre instruction. C)Les principaux registres du 68000: ------------------------------------ Bon on commence a nous plonger dans la structure du 68000 . Donc les registres du 68000 'sont de la memoire' qu'utilise le programmeur pour simplifier ses programmes et ne pas acceder a la ram sans arret. Grace a ces registres le 68000 va pouvoir augmenter la vitesse des instructions et ca simplifie la tache du programmeur. Ainsi , nous allons constamment utiliser ces registres dans nos programmes. Ces registres sont: Les registres de donnees: -------------------------- Ils sont au nombre de 8.Ils s'appellent - D0 , D1 , D2 , D3 , D4 , D5 , D6 et D7 -. On les utilise surtout pour les calculs ou pour garder un nombre (compteur etc... ).Ils ont pour taille 32 bits ou un mot long. Les registres d'adresse: ------------------------- Ils sont aux nombre de 7.Ils s'appellent - A0 , A1 , A2 , A3 , A4 , A5 , et A6. -.On les utilise surtout pour stocker les adresses de la RAM par exemple on stocke le debut de l'adresse ecran.On les appelle comme ca car il y a un mode d'adressage special,qui ne s'utilise qu'avec les registres d'adresse. ( En 68000 )... Pointeur de Pile: ------------------ La pile est une place memoire tres utilisee par les programmeur . On la represente par A7. Dans A7 il y a une adresse et ce qui est interressant c'est l' utilisation qu 'on fait de la pile plus que son contenu. Je vais essayer de vous expliquer l'utilisation de la pile,mais sachez que c 'est l'aspect de l'asm que j'ai mis le plus de temps a comprendre.Donc si vous ne comprenez pas c'est normal , je reexpliquerai en detail une autre fois (surement la prochaine fois quand je traiterai des modes d'adressage). Donc A7 contient une adresse memoire,pour l'instant cette adresse on s'en tape.Par contre a cette adresse,dans la memoire il y a un contenu.On peut y ecrire et la lire grace a A7.On appelle pile par ce que ce qu' on y lit et se qu'on y ecrit ce fais comme si on traitait un tas de papier. On met un 1er papier sur le tas,puis un 2d ,un 3eme etc... Et ainsi lorsque l'on a fini de les empiler, le premier papier que l'on prend sur le tas est le dernier que l'on a pose, et le dernier papier lu est le 1er pose. C' est en fait l'utilite de la pile qui est difficile a voir. Enfin vous prennez Monst et vous allez voir ca va devenir d'une simplicite !!!! Attention pour utiliser la pile,il faut connaitre deja certain modes d'adressage... En effet : MOVE.L #$05555,a7 ne met pas $05555 dans la pile,met ca dit que la pile se situe maintemant a l'adresse $05555 ( qui est equivalente a $5555). D)Les modes d' adressage: --------------------------- Je ne vous explique pas comment ca marche,car il faut faire ca d'un coup (dans HOW TO CODE 2),je vous direz seulement qu'on peut les utiliser pour tirer pleinement partie des registres. En effet il n ' existe pas que le mode: => Move.w #$1526,d0 Vous rendez-vous compte de la complexite et de la longueurs des prg s' il n' existait que ce mode... D 'ailleur une grande partie de l'optimisation pour un debutant est de mettre le bon mode d'adressage au bon moment. Je sais que comme explication c' est sommaire, mais si vous voulez a tout pris savoir comment ca marche,mettez le en *PATA 2 sur RTEL... E)Le mode superviseur du 68000: -------------------------------- Il existe 2 modes d'etat dans le 68000.La il n'a pas de questions a ce poser pour les debutants qui lisent cet articles,il vaut mieux se mettre en mode SUPERVISEUR . Pour cela vous pouvez utiliser la fonction $20 du GEMDOS et faire: ( Voir aussi doc sur le GEMDOS ) Move.w #$20,-(sp) Trap #1 Addq.l #6,sp Voila pour les curieux , l'autre mode est le mode UTILISATEUR. Le mode superviseur est un mode dans lequel on peut appeller avoir acces a une partie des principaux vecteurs permettant la programmation avancee. Donc mieux vaut mettre ca au debut de vos programmes...Question d'habitudes. 3) Instrucions type de base: _________________________________ --------------------------------- Bon alors ca c'est le passage que tout le monde va lire. Mais sachez que connaitre des instructions et savoir ce qu'elles font ce n'est pas coder en ASM. En effet, le passage sur les modes d'adressage , que nous voyons plus loin est tout aussi important mais il est plus balaise a comprendre Voyons chaque instruction de base dans un ordre croissant (vous avez les instructions du 68030 dans un autre article ... ) L'instruction MOVE: ------------------- (MOVE .b.w.l) est l 'intruction de l 'assembleur,elle en est sa base. L'instruction MOVE veut dire 'bouge' quelque chose dans autre chose ... Exemples: Move un chiffre dans une adresse => move.w #10,$150 A l'adresse $150 de la memoire le mot ( car ya .w ) 00000010 a ete mis. Ainsi l'ancienne valeur de $150 a ete effacee... Move un chiffre > 65536 (2 exp 16) dans l'adresse appele: ADDI de votre programme => move.l #65537,ADDI dans la section data de votre programme vous avez: => ADDI: dc.l 0 La valuer 0 de ADDI a ete remplacee par 65537. Si votre nombre est inferieur a 256 alors vous pouvez utiliser move.b => move.b #$16,d0 Le nombre $16 (22) est mis dans d0. ATTENTION,l'intruction move est interressante par la suite qu'avec les differents modes d'addressage. Les instructions conditionnelles: --------------------------------- Dans tout les langages de programmations vous avez des instrutions de condition.Par exemple en Pascal c'est : IF a>b then En asm nous avons des instruction de comparaison (CMP .b.w.l)et de test (TST .b.w.l). Nous allons nous interresser a l'instrution CMP qui est bien utile aux programmeurs .Nous allons aussi nous interresser aux instructions Bcc qui sont des instructions qui permettent au programmeur de faire les differentes actions apres les comparaisons . Ces instrutions vont brancher le programmeur vers une adresse suivant la comparaison que l' on viens juste de faire... ( Voir exercices et surtout les debuger ). Exemples: On a deja dans mis dans D0 la valeur 19. => move.l #$19,d0 (ou move.w #$19,d0 ou move.b #$19,d0) On compare d0 et $19 => cmp.l #$19,d0 Si #$19 et d0 a la meme valeur on va en Touche => beq Touche (beq=branch if equal) Pour bien comprendre comment reagit le 68000,il vaut mieux prendre Monst et tracer les petits programmes qui sont a la fin de l' article. Ainsi vous allez voir le chemin que l'on fait. ATTENTION , un compare ne s'utilise qu'une fois ainsi on ne peut pas mettre plusieurs Bcc pour 1 test: cmp.l #$17,d0 beq lola bne loli * a ne pas faire !!! Tableau des Bcc suivant le compare place precedemment: ---------------------------------------------------------- ************************************************************************** * BEQ * EQual * Egal * * BNE * Not Equal * Different * * BMI * MInus * Negatif * * BPL * PLus * Positif * * BHI * HIgh * Superieur * * BLS * Low or Same * Inferieur ou egal * * BGE * Greater or Equal * Superieur ou egal * * BLT * Less Than * Inferieur * * BGT * Greater Than * Superieur * * BLE * Less or Equal * Inferieur ou egal * * BCC * Carry Clear * Retenue a zero * * BCS * Carry Set * Retenue a un * * BVC * oVerflow Clear * Depassement a zero * * BVS * oVerflow Set * Depassement a un * ************************************************************************** Les instructions Arithmetiques: --------------------------------- Add: Cette instruction est en fait l'addition.On peut l'utiliser avec des octets,des mots ou des mots long. => Add(.b .w .l) Add.l d0,d1 => d1=d0+d1 (On additionne D0 a d1). Remarque: Ainsi pour la multiplication par 2 il suffira de faire - add.w d0,d0 -. En effet l'addition est beaucoup plus rapide que la multiplication... Sub: Cette instruction est en fait la soustraction.On peut l'utilise avec des octets,des mots ou des mots long. => Sub(.b .w .l) Sub.b d0,d1 => d1=d1-d0 (On soustrait D0 a d1). Mulu: Cette instruction est en fait la multiplication. On l ' utilise avec des mots en 68000 ou mots et mots long en 68030.Le resultat est un motlong en 68000 ou 2 mots long en 68030. Mulu.w d0,d1 => d1=d1*d0 (On multiplie d0 a d1). ( 16 * 16 --> 32 bits en 68000 et 68030) Juste en 68030 on a en plus: Mulu.l d0,d1 => d1=d1*d0 (On multiplie d0 a d1). ( 32 * 32 --> 32 bits en 68030) ( 32 * 32 --> 64 bits en 68030) Mulu est la multiplication non signee.En effet meme s'il y a -5 dans d0,le resultat restera quand meme positif. Muls est la multiplication signee.Elle s' utilise comme Mulu mais le signe des registres compte pour le resultat final. Divu: Cette instruction est en fait la division.On l'utilise avec des mots en 68000 ou des mots et mots long en 68030.Le resultat est un mot en 68000 ou 2 mots long en 68030. Divu.w d0,d1 => d1=d1/d0 (On divise d1 par d0). ( 32 / 16 --> reste sur 16 et quotient sur 16 en 68000 et 68030) Juste en 68030 on a en plus: Divu.l d0,d1 => d1=d1*d0 (On divise d1 par d0). ( 32 / 32 --> q=32 bits ) ( 64 / 32 --> q=32 bits et r=32 bits ) Etat du registre. 31<---- 1 mot ---->15<------ 1 mot ------>0 -------------------------------------------- d1 | Reste sur 16 bits | Quotient sur 16 bits | -------------------------------------------- Divu est la division non signee et s'il y a -5 dans d0 le resultat restera quand meme positif. Divs est la division signee. Elle s ' utilise comme Divu mais le signe des registres compte pour le resultat final. Remarque: Pour la multiplication et la division (signee ou pas signee) ,le registre qui recoit le resultat doit etre forcement un registre de donnee. Mulu x,d1 ^ ----- Oblige d'avoir Dn divs x,d1 ^ ----- Oblige d'avoir Dn Remarque: La multiplication et la division prennent du temps au 68000.Donc ce qui est bien pour un programmeur c' est d'en avoir le moins possible. Mais ne faites pas cas de cette remarque, car pour l' instant vous en etes encore loin de l'optimisation. EXERCICES: ---------- Ainsi se termine notre premier cours d' asm et pour ne pas que vous ne vous embetiez jusqu'au prochaine article voila des exercices que vous pouvez tracer sous MONST pour vous donner une idee de l' utilisation de ce que nous venons de voir: 1) Debut: Move.w #$120,d0 Move.w #$128,d2 cmp.w d0,d2 beq ici cmp.w d0,d2 bls ici Ici: cmp.w d2,d0 *attention a l'ordre des resgistres !!! bgt debut cmp.w d0,d2 bgt debut 2) Attention -1=ffffffff en hexadecimal et regardez bien la valeur des registres apres avoir fait les move et decouvrez une des principales fautes que l'on fait en assembleur... move.l #$ffffffff,d0 move.l #-1,d2 cmp.b d0,d2 ble ok bob move.l #0,d0 * voir la difference lors du passage sur Monst ok move.w #0,d0 move.l #0,d2 cmp.l d2,d0 bne lola bra ok * Branchement sans aucune condition Pour les instructions arithmetique , c' est a vous de vous faire des exercices. Si vous voulez calculer le reste d' une division , vous pouvez utiliser l'instruction- SWAP d0 -qui sert a inverser le mot fort et le mot faible... Je pense que si vous voulez programmer en assembleur vous devez faire un minimum d'effort et de decouverte par vous meme ... ***************************************************************************** * * * Optimisations en 68000 * * -------------------------- * * * * Je ne sais pas qui a ecris cet article,ni d'ou il vient.Ca fait un * * moment que je l'avais,et comme il est extrement interressant,je vous l'ai * * mis. Remarque: Si vous avez des trucs ou des optimisations qui n' ont pas * * ete ecrites pour ST ou FALCON ecrivez nous quelque chose dessus.En outre * * je lance un grand concours : * * -> Comment effacer un ecran le plus rapidement possible <- * * Le gagnant gagnera BEAUCOUP d'argent,et en plus sera reconnu par TOUTE la * * scene... Grosses gruges acceptees ... Avis aux amateurs. * * * * * ***************************************************************************** METTRE LES INDICATIONS : [nb octets,nb cycles] CF ST MAG 17/18 1 cycle = 125 nanoseconde =125.10^(-9) secondes a 8Mhz 4 cycles = 500 ns donc en 1 seconde, le 68000 peut executer (au maximum) 2 millions d'instructions !! PETIT MANUEL A L'USAGE DE CEUX QUI VOUDRAIENT OPTIMISER DU 68000 optimisations locales : MODES D'ADRESSAGE : - Quand on peut remplacer une portion de code par une autre qui prennent autant de cycle l'une que l'autre Il faut choisir la solution qui prend le moins d'octets ou celle qui transfere le moins de memoire (a va plus vite, le processeur ne travaillant a pleine vitesse que quand il execute une instruction, ENTRE LES INSTRUCTIONS, IL PERD DU TEMPS) - Les assembleurs rajoutent seuls les I et les A dans les ADD,SUB ... - UTILISER AU MAXIMUM LES REGISTRES. Dans le cas de calculs repetitifs, stocker les constantes les plus utilisees dans les registres. - LES MODES D'ADRESSAGE DANS L'ORDRE DE PREFERENCE : Adressage cycles cycles .W ou .B .L Dn 0 0 An 0 0 #xxxx 4 8 (An) 4 8 (An)+ 4 8 -(An) 6 10 d(An) 8 12 xxxx.W 8 12 d(PC) 8 12 (READ ONLY) d(An,Ri) avec Ri=An.W,An.L,Dn.W ou Dn.L 10 14 d(PC,Ri) 10 14 d=8 bits signes xxxx.L 12 16 - UTILISER AU MAXIMUM L'ADRESSAGE ABSOLU COURT pour la zone BSS cela signifie qu'il faut empecher tout acces a la ROM parce que les 32 premiers K sont utilises par la ROM en tant que variables systeme. On gagne 2 octets et 4 cycles avec un adressage court au lieu d'un adressage long. Ex : move $118,d0 Certains assembleurs (ALCYON 4.03 et FASTASM) l'assemblent ainsi : MOVE.W $00000118.L,D0 Le SEKA 1.6 et le DEVPAC 2.0 font de meme sauf si on indique : move $118.W,d0 Le GSTASM 1.0 et le MEGAMAX 1.1 assemblent comme il faut : MOVE.W $0118.W,D0 Ceci est valable pour les 32 premiers Ko et les 32 derniers Ko: MOVE.W $FFFF8240.W,D0 - UTILISER AU MAXIMUM L'ADRESSAGE INDEXE PAR RAPPORT A (PC) POUR LA ZONE DATA OU CODE. SI LE CODE FAIT PLUS DE 32 K UTILISER d(An). PLUTOT QUE DE FAIRE : LEA DATA(PC),A0 MOVE.W 10(A0,D0.W),D1 UTILISER : MOVE.W DATA+10(PC,D0.W),D1 QUI PERMET D'ECONOMISER LE REGISTRE A0 MAIS PAR CONTRE IL FAUT REUSSIR A CASER DATA DANS UNE LIMITE DE 128 OCTETS AVANT OU APRES (PC) !! - (An)+ etant plus rapide que -(An), les zones de stockage devraient etre remplies par incrementation (pas comme un pile). - Le mode immediat prenant 4 cycles de plus que les registres, il vaut mieux stocker les constantes dans les registres quand ces constantes sont souvent utilisees dans une routine. - Toutes les instructions concernant les registres An (comme MOVEA,ADDA,SUBA,etc..) affectent les 32 bits quand on travaille en .W. Exemple : MOVE.W #$8,A0 = LEA.L $8.W,A0 (pas de difference) ADDQ.W #$1,A0 = ADDQ.L #$1,A0 (pas de difference) MOVE.W D0,A0 = MOVE.W D0,A0 "EXT.L A0" (instruction inexistante) ADD.W #-100,A0 = ADD.L #-100,A0 (gain=2 octets) - Les instructions suivantes doivent etre bannies du repertoire du programmeur 68000 (sauf si on gagne des octets avec...) Instructions (trop) utilisees par les compilateurs : EXT.W et EXT.L LINK et UNLK AND.W #$FF,Dn et AND.L #$FFFF,Dn (a remplacer par MOVEQ #0,Dn avant le transfert dans Dn) TST inutile derriere une operation (ADD/SUB/AND/EOR/OR/MUL/DIV/SWAP/EXT) CMP.x #0, = TST.x - Attention aux bugs : ADDX bit Z inchange ASL.W #n,memoire (avec n>1) n'existe pas MOVEM.W mode,An/An... etend le bit 15 OR.W #1,CCR n'existe pas (OR.B #1,CCR) MOVEP 0(An) a transformer en MOVEP 65536(An) sur certain assembleur MOVEM ne positionne pas les bits de CCR (contrairement a MOVE) MOVEM peut empiler et depiler 0 octets !!! LSL est equivalent a ASL ! - Liste des instructions avec description de leur utilisation optimale : * MOVE.L #adresse,An mieux : LEA adresse(PC),An suivant le cas ou : LEA adresse.W,An * MOVE.L #adresse.W,An mieux : MOVE.W #adresse.W,An ou : LEA adresse.W,An * MOVE.L #nn,Dn mieux : MOVEQ #nn,Dn si -128<=nn<=127 mieux : MOVEQ #nn-128,Dn si 128<=nn<=255 TAS Dn * MOVE.W #nn,Dn mieux : MOVEQ #nn,Dn meme chose qu'au-dessus mais on perd les bits 16 a 31 * MOVE.x #0,MODE mieux : CLR.x MODE * MOVE.B #$FF,MODE mieux : ST MODE * ADD.x #n,MODE mieux : ADDQ.x #n,MODE * MOVE.L #nnnn,-(SP) ;SP=A7 mieux : PEA nnnn.W si -$8000<=nnnn<$7FFF * MOVE.L #adresse,-(SP) mieux : PEA adresse.W suivant le cas PEA adresse(PC) * MOVE.L An,-(SP) mieux : PEA (An) (mieux en 68008) * MOVEM.L An/An,-(SP) mieux : PEA (An) gain 2 cycles PEA (An) * MOVEM.L An,-(SP) mieux : PEA (An) ou : MOVE.L An,-(SP) * MOVE.L An,-(SP) MOVE.L An,-(SP) MOVE.L An,-(SP) mieux : MOVEM.L An/An/An,-(SP) les MOVEM sont interessants quand il y a plus de 2 registres a transferer ex : MOVEM.L D0-D1,-(SP) CCR non modifie mieux : MOVE.L D0,-(SP) gain 4 cycles MOVE.L D1,-(SP) attention CCR modifie * MOVE.x adresse,MODE mieux : MOVE.x adresse.W,MODE suivant le cas ou : MOVE.x adresse(PC),MODE * ASL.x #1,Dn mieux : ADD.x Dn,Dn * ASL.x #2,Dn mieux : ADD.x Dn,Dn ADD.x Dn,Dn * ROXL.x #2,Dn mieux : ADDX.x Dn,Dn ADDX.x Dn,Dn * ROXL.x #1,Dn mieux : ADDX.x Dn,Dn attention bit Z inchange * AND.x Dn,Dn est equivalent a : TST.x Dn * AND.L #$7FFFFFF,Dn mieux : BCLR #31,Dn astuce valable pour tous les bits de 16 a 31 si un seul bit different des autres * EOR.L #$8000000,Dn mieux : BCHG #31,Dn cf au-dessus * OR.L #$8000000,Dn mieux : BSET #31,Dn cf au-dessus * OR.x #$80,MODE ou : BSET #7,MODE mieux : TAS MODE * AND.x #0,Dn mieux : CLR.x Dn * CLR.x Dn OR.x #nn,Dn mieux : MOVE.x #nn,Dn * AND.x #aa,Dn avec aa=NOT(bb) OR.x #bb,Dn mieux : OR.x #bb,Dn (AND inutile) * AND.B #$FF,Dn ou : AND.W #$FFFF,Dn ou : AND.L #$FFFFFFFF,Dn mieux : rien !! * AND.W #$FF00,Dn mieux : CLR.B Dn * AND.L #$FFFF0000,Dn mieux : CLR.W Dn * AND.L #$FFFFxxxx,Dn mieux : AND.W #$xxxx,Dn * AND.W #$FFxx,Dn mieux : AND.B #$xx,Dn * OR.L #$0000xxxx,Dn mieux : OR.W #$xxxx,Dn * OR.W #$00xx,Dn mieux : OR.B #$xx,Dn * EOR.L #$0000xxxx,Dn mieux : EOR.W #$xxxx,Dn * EOR.W #$00xx,Dn mieux : EOR.B #$xx,Dn * AND.L #$0000FFFF,Dn ou : MULU #1,Dn (2 octets gagnes, 20 cycles perdus) mieux : SWAP Dn CLR Dn SWAP Dn * BRA LABEL mieux : BRA.S LABEL (pas automatique dans tous les assembleurs) * JMP LABEL mieux : BRA LABEL * JSR LABEL mieux : BSR.S LABEL si limite 128 octets JSR LABEL(PC) si limite 32 K BSR.W LABEL si limite 32 K * CLR.L Dn mieux : MOVEQ #0,Dn * MOVE.W #0,Dn mieux : CLR.W Dn * CMP #n,Dn mieux : SUBQ #n,Dn si Dn n'a pas besoin d'etre conserve * CMP.L #0,An mieux : MOVE.L An,Dn positionne Z * SUBQ #1,Dn BNE LABEL mieux : DBRA Dn,LABEL Dn doit etre decremente de 1 au debut de la boucle en sortie de boucle Dn.W=-1 * AND.L #$FFFFFFFE,Dn mieux : AND.W #$FFFE,Dn si bits 16 a 31=1 ou : BCLR #0,Dn si un seul bit touche * OR.L #$0000F000,Dn mieux : OR.W #$F000,Dn si bits 16 a 31=0 * EOR.L #$0000F000,Dn mieux : EOR.W #$F000,Dn si bits 16 a 31=0 * ADDA.L #nnnn,An mieux : ADDQ.L #n,An si n<9 ADDA.W #nnnn,An si Abs(nnnn)<$8000 encore mieux : LEA.W nnnn(An),An * PENSEZ A MOVEM POUR LES TRANSFERTS RAPIDES DE BLOCS DE MEMOIRE MOVEM.L (A0)+,D0-D7 MOVEM.L D0-D7,(A1) LEA 8*4(A1),A1 * MOVEP PEUT ETRE UTILE POUR DES TRANSFERTS AVEC DECALAGES DE 8 * MULU Dm,Dn MULU travaille avec Dm.W et Dn.W donc on n'a pas besoin d'effacer les bits 16 a 31 * DIVU Dm,Dn DIVU travaille avec Dm.W et Dn.L donc on n'a pas besoin d'effacer les bit 16 a 31 de Dm * MULU #2^n,Dn mieux : ASL.x #n,Dn attention aux bits >15 * MULU #value,Dn mieux : decalages-additions dans certains cas : ex: MULU #160,D0 avec D0*160<65536 mieux : ASL #5,D0 MOVE D0,D1 ADD D0,D0 ADD D0,D0 ADD D1,D0 * DIVU #2^n,Dn mieux : LSR.x #n,Dn attention au reste (cf suivant) * DIVU #2^n,Dn SWAP Dn mieux : AND #2^n-1,Dn * DIVS #2^n,Dn mieux : ASR.x #n,Dn * EOR.x #-1,MODE mieux : NOT.x MODE * NOT.x MODE ADDQ.x #1,MODE mieux : NEG.x MODE * JSR LABEL1 JMP LABEL2 mieux : PEA LABEL2 avec optimisation de PEA et JMP JMP LABEL1 * MOVE.L #0,An ou : MOVE.W #0,An ou : LEA 0,An ou : LEA 0.W,An mieux : SUB.L An,An ou : SUB.W An,An (extension du signe) * CMP.x #0,MODE mieux : TST.x MODE * TST.x MODE mieux : MOVE.x MODE,Dn charge Dn avec la valeur de MODE ex : TST.B d(PC) interdit devient MOVE.B d(PC),D0 autorise * AND.B #$EF,CCR =CLX and CLC mieux : SUB.x Dn,Dn * CMP.L #0,An mieux : MOVE.L An,Dm scratch Dm * OR.B #1,CCR =SEC ou : MOVE #1,CCR =SEC mieux : NEG Dn Dn doit etre different de 0 positionne en meme temps Dn : MOVE.L #$81,D0 mieux : MOVEQ #$7F,D0 NEG.B D0 * si on desire faire une JuMP table : LEA TABLE,A0 MOVE.L 0(A0,D0.W),A0 JMP (A0) TABLE: DC.L ADRESSE1 DC.L ... ou : JMP TABLE(PC,D0.W) TABLE: BRA ADRESSE1 BRA ... * si on veut calculer une puissance de 2, il vaut mieux utiliser BSET que faire une boucle : ex : D1=2^D0 MOVEQ #0,D1 BSET D0,D1 * si on veut tester le bit 7, il vaut mieux utiliser TST que BTST #7, ex : BTST #7,D0 BEQ ZERO mieux : TST.B D0 BPL ZERO ex : BTST #7,MEMORY BEQ ZERO mieux : TST.B MEMORY+1 BPL ZERO * CMPA,ADDA,SUBA ne modifient pas X ca peut etre utile dans une boucle de decalage * penser a DBcc pour une boucle avec test de fin * pour mettre un bit a 1, on peut utiliser ADD si le bit concerne est a 0 avant l'operation. ex : AND #$F0,D0 OR #1,D0 mieux : AND #$F0,D0 ADDQ #1,D0 * meme chose pour le mettre a 0 (utiliser SUBQ) * op.L #$xxxx0000,D0 mieux : SWAP D0 op.W #$xxxx,D0 SWAP D0 op peut etre : ADD,SUB,AND,EOR,OR * certains assembleurs n'optimisent pas : CLR 0(A0) en CLR (A0) * instructions non mentionnees : BTST Dn,#$xxxx BTST Dn,d(PC) BTST Dn,d(PC,Ri) OPTIMISATIONS GLOBALES - restructurer le source pour avoir le moins de sous-programmes (enlever le maximum de BSR/JSR) - optimiser les boucles (calculs minimum a l'interieur, le plus gros de calcul doit etre fait a l'exterieur de la boucle) - eviter les redondances (cf code genere par Compilateur C) - utiliser au maximum l'adressage .W ou d(An) -------------------------------------- | Routine de plot(x,y) en assembleur | -------------------------------------- Voila une routine de points en assembleur.L' article sera divise en 2 parties dans un premier temps j' expliquerai comment on fait pour afficher un point et comment marche la gestion graphique en basse resolution ( identique que le 256 couleurs sur FALCON).A la fin, vous trouverez un source semi-commente et dans le fichier 68000 vous trouverez le source qui marche. J' expliquerai en detail la prochaine fois le fonctionnement du source,car il y a pas mal d' optimisa- -tions et je mettrai 30 pages a tout expliquer. Mais vous comprendrez quand meme comment cette routine marche,meme si vous ne comprennez pas tout. Attention,j'ai pas la pretention de vous donnez la plus rapide des routines de points.J'aimerai bien la faire d'ailleurs. I) Gestion Graphique sur ST et FALCON : ----------------------------------------- En basse resolution,le codage ce fait comme le represente ce schemas: 1er mot (plan numero 1): 0000 0000 0000 0000 <=>1er au 16em points du 1er plan ^ |_ Ce 0 represente 1 bit et 1 point du plan 1. 2em mot (plan numero 2): 0000 0000 0000 0000 <=>1er au 16em points du 2em plan 3em mot (plan numero 3): 0000 0000 0000 0000 <=>1er au 16em points du 3em plan 4em mot (plan numero 4): 0000 0000 0000 0000 <=>1er au 16em points du 4em plan 5em mot (plan numero 1): 0000 0000 0000 0000 <=>16em a 32em points du 1er plan 6em mot (plan numero 2): 0000 0000 0000 0000 <=>16em a 32em points du 2em plan On a donc 4 mots (2 mots long)pour 16 points,d'ou la complexite de preparation pour un BSET. Comme vous le voyez,les plans et les mots sont entrelaces ce qui permet d'avoir des plans. En effet en TRUE COLOR cette notion de plan n'existe pas sauf sur la JAGUAR , avec un octet definissant la profondeur du sprite. La notion de plan est tres importante , par exemple pour le masquage de nos sprites.Mais ici,je vais pas vous expliquer ca, je vais vous expliquer a quoi servent ces plans pour les couleurs. Comme vous le savez , il y a 16 couleurs en basse resolution et il y a 4 plans, donc 4 mots entrelaces donc 4 bits pour chaque point. Donc il y a 16 combinaisons qui sont: 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 ^^^^ ||||_ 1 er plan |||_ 2 eme plan ||_ 3 eme plan |_ 4 eme plan Chacune de ces combinaisons representent une couleur. Ainsi, on doit faire attention losque l'on choisit les couleurs de l' ordre dans lequel on les met. Par extention,tous les modes du FALCON marchent comme ca ( sauf le TRUE COLOR) Ainsi en 256 couleurs, on a 8 plans, ce qui represente 8 mots entrelaces. Vous pouvez aussi regarder l' excellent article sur le VIDEL de DMO qui est aussi inclu dans ce mag. II) Moyens utilises pour allumer un point : --------------------------------------------- Il y a bien sur pas mal de moyens pour allumer un point mais je vais parler du plus simple ( pour moi). En fait pour allumer un point a l' ecran, il suffit de mettre le bit a 1 d'un mot precis qui se trouve dans la memoire ecran.Et cette operation se fait avec l'instruction BSET.Il existe d'autres methodes pour mettre a 1 un bit, mais je trouve que celle-ci est la plus pedagogique (voir methode du OR qui est plus rapide avec quelques precalculs ). Mais voila, il y a des problemes(sinon tout le monde coderait).En effet 8 bits peuveut etre allumes avec bset en 68000(le BSET n'agit que sur un octet)on met le numero du bit que l' on veut allumer, puis l' adresse ou ce trouve l' octet ou il y a le bit. Ainsi -> BSET #7,(a1) <- allume le bit numero 7 de l'octet dont l'adresse et en (a1).Simple non ??? Oui mais voila en 68030 c'est simle,mais en 68000 c'est le bordel.Comme vous le savez,on a 16 bits ( 1 mot ) qui se suivent, mais le BSET n'allume que sur 8 bit. Donc il faut une division par 8 pour voir s' il y a un reste, si oui on rajoute 1 octet. Donc il faut s' avoir si on doit allumer l'octet faible ou l'octet fort du mot.Cependant,ce n' pas tout.Regardez ce schemas -> 1er octet de l'adresse ecran: 0000 0000 . Si on fait bset #0,(a1) , on a ce schemas -> 1er octet de l'adresse ecran: 0000 0001 . En fait on allume le 8eme point, et pour allumer le premier il faudrait faire: bset #7,(a1) et on aurait -> 1er octet de l'adresse ecran: 1000 0000 . C'est pour cela que je soustrais 15 a d2 ca me donne le bit a allumer ,faites le test. III) Transformation des coordonnee X,Y en coordonnees pour le BSET: ---------------------------------------------------------------------- Ces faciles dans un premier temps si vous voulez le faire lentement,mais c'est cette etapes que normalement il faut optimiser.Donc ca peut devenir complique et la routine ici presente n' est pas tres difficile. Admettons que nous avons X (0 a 319) et Y (0 a 199) et le debut de l'adresse ecran ( Ac ). Pour 1 ligne vertical ( Y ) nous avons 160 octets ( 320/16*4*2 ) donc nous pouvons faire -> Ac = Ac + y*160 <- et nous sommes places sur la ligne que nous voulons. Maintemant pour connaitre dans quel mot est ce point ,nous allons diviser X par 16 car dans chaque mot il y a 16 points,puis nous allons multiplier par 8 car il y a 4 mots pour tout les 16 points.( n' oubliez pas que les mots sont entrelaces ).Je sais que cette notion de mots entrelaces est difficile, et je vous conseille de refaire une routine simple pour mieux comprendre. -> Ac = Ac + ( x / 16 )*8 <- et on ne peut pas inverser les operations, sinon on aurait le reste de cette dision par 16 qui interviendrait. Nous connaissons le mot dans lequel se trouve le bit a allumer , il nous reste qu'a connaitre le numero du bit a allumer.Ce numero est facile car c'est le reste de la division par 16.Mais paf, comme je l' explique il ne suffit pas de connaitre ce numero du bit,il faut le mettre a la sauce BSET.Pour cela nous faisons -> N = 15 - reste <- N etant le numero du bit a allumer. Il ne nous reste qu' a savoir si ce numero est > a 7 , si c' est le cas le bit se trouve dans l' octet fort du mot et dans ce cas, on ajoute 1 a L'Ac ( espace memoire de l'octet ),si le bit est inferieur ou egal a 8 on ne touche pas a l'Ac. IV) Source commentee : -------------------------- ; Pour la souce complete voir dans le dossier 68000 ; ; Dans d0 on met la valeur de X (0-319) ; ; Dans d2 on met la valeur de Y (0-199) ; plotxy: ; Met l'adresse de tableau des multiple de 160 dans a0 ; lea tableau,a0 ; met le debut de l'adresse de l'ecran dans a1 ; movea.l $44e,a1 ; addition la d2 eme case de a0 dans a1 qui est l'adresse ecran. Ainsi on va ; connaitre la ligne ou se trouve le mot a allumer. ; grace a ce move et a la table de multiplication ca permet d' economiser un ; mulu #160,d2 , qui est fait gagner du temps facilement , j' expliquerai ; ulterieurement pourquoi on doit multiplier par deux le registre d2 pour ; utiliser cette technique. (voir dans le source). add (a0,d2),a1 ; Cette addition choisi le 4eme mot donc le 4eme plan ; add.l #6,a1 ; Division de x par 16 ( sans reste ) puis on multiplie par 8.On divisise par ; 16 car il y a 16 points par mot, puis on multiplie par 8 car il y a 4 mots ; pour les quatre plans,enfin on multiplie par 2 car un mot a 2 octets,c' est ; une question de memoire. Ainsi on connait l' adresse du mot ou se trouve le ; bit a allumer. ; (La routine ci dessous est optimisee, mais fait ce qui est dis au-dessus. ) move.l d0,d1 lsr d1 and #248,d1 add.l d1,a1 ; Reste de la division par 16 pour savoir quel bit du mot il faut mettre a 1 ; a 1 pour allumer le point correspondant ( optimisation ) ; and #15,d0 ; Encore un probleme d'utilisation du bset,voir commentaires ; move #15,d2 sub d0,d2 lsr #3,d0 ; Division par 8 ; ; 8 bits peuveut etre allumes avec bset en 68000 ( il n'agit que sur un octet ; or comme on en a 16 ( 1 mot) il faut faire une division par 8 et voir s' il ; y a un reste,si oui on rajoute 1 octet. beq.s SoGood ; d0=0 <=> d0<8 sinon d0>=8 ; add.l #1,a1 ; a1 est l'adresse point a l'ecran ; ; on augmente d'un octet si d0 >8 ; SoGood bset d2,(a1) ; allume le d2eme point a l'ecran ; rts ; construction de la table des multiples de 160 ; lea tableau,a0 clr d0 move #199,d1 turlututu move d0,(a0)+ add #160,d0 dbra d1,turlututu ; Reserve 400 octet pour y mettre la table des multiple de 160 ; tableau dcb.w 200 Il vous reste a voir le prochain numero de HOW TO CODE pour connaitre toutes les optimisations que j'ai utilise dans ce programme et je ferais si j' ai le temps une routine speciale pour le FALCON en 68030.Il sera alors interressant de comparer... Si vous avez des idees ou d'autres trucs, vous pouvez faire un article... Signed: --> LITHIUM <-- ***************************************************************************** * * * Voici la source de la routine de points(STF/E-FALCON) en basse resolution * * Attention code pour 68000, n' est pas optimise pour 68030. * * * * Code et article par -> LITHIUM * * * ***************************************************************************** ***************************************************************************** ****************************** debut du programme *************************** ***************************************************************************** Section Text BRA Init RUN: ***************************************************************************** **************** Calcul de la table des multiple de 160 ********************* ***************************************************************************** lea tableau,a0 clr d0 move #199,d1 turlututu move d0,(a0)+ add #160,d0 dbra d1,turlututu ***************************************************************************** ******************************* Efface l'ecran ****************************** ***************************************************************************** move.l $44e.w,a0 move.w #7999,d0 cpy: clr.l (a0)+ dbra d0,cpy ***************************************************************************** ************************** Routine placee en syncro VBL ********************* ***************************************************************************** move.l #VSYNC,$70 * Met vsync en VBL vbl: cmp.b #1,flag * Test si la vbl est finie, voir VSYNC bne.s vbl * mieu que le vsync avec un trap #14 move.b #0,flag move #$700,$ff8240 * Rouge en debut de vbl move.l #500,d7 * 500 fois 1 point blop move.w #319,d0 * X move.w #199,d2 * Y bsr plot dbra d7,blop move #$777,$ffff8240 * blanc en fin de vbl , ainsi on sait combien * prend la routine sur l'ecran,c'est toute la * la bande rouge ... cmp.b #$39,$fffffc02 * Test de la touche espace bne.s vbl * Part si elle est appuyee rts * Retour aux initialisations ****************************************************************************** ************** Routine de PLOT(X,Y) Avec d0 pour X et d2 pour Y ************** ******************* Pour les explications voir l'article ********************* ****************************************************************************** plot: lea tableau,a0 * A retirer du BSR pour optimisation movea.l $44e,a1 * Adresse ecran dans a1 add.w d2,d2 * multiplie par 2 le registre d2 add.w (a0,d2),a1 lea 6(a1),a1 * 4eme plan move.w d0,d1 lsr d1 and #248,d1 add.w d1,a1 and #15,d0 move.b #15,d2 sub.b d0,d2 lsr #3,d0 beq.s SoGood lea 1(a1),a1 SoGood: bset d2,(a1) rts ****************************************************************************** ****************************************************************************** ****************************************************************************** * Routine VBL VSYNC: move.b #1,flag rte * Data pour la routine de points pointx dc.l 0 flag dc.b 0 even * Bss pour la table de mul tableau ds.w 200 ****************************************************************************** **************************** INITIALISATIONS ********************************* ****************************************************************************** Init: CLR.W -(A7) MOVE.W #$20,-(A7) TRAP #1 ADDQ.L #6,A7 MOVE.L D0,SAVE_SSP MOVE #$2700,SR DC.B $A0,$0A MOVE.B #0,$00000484.L MOVE.B -$7DF6,SAVE20A MOVE.B -$7DA0,SAVE260 MOVE.B -$7DFF,SAVE201 MOVE.B -$7DFD,SAVE203 MOVEM.L -$7DC0,D0-D7 MOVE.L $00000436.L,EC1 MOVE.W #4,-(A7) TRAP #$E ADDA.L #2,A7 MOVE.W D0,SAVE_REZ MOVE.W #0,-(A7) MOVE.L #-1,-(A7) MOVE.L #-1,-(A7) MOVE.W #5,-(A7) TRAP #$E ADDA.L #$C,A7 MOVE.B -$5ED,SAVEA13 MOVE.B -$5EB,SAVEA15 MOVE.L $70,SAVE70 MOVE.L $118,SAVE118 MOVE.L $134,SAVE134 MOVE #$2300,SR JSR RUN DC.B 'F',$FC,$27,$00,'!',$F9 DC.L SAVE118 DC.B $01,$18,'!',$F9 DC.L SAVE134 DC.B $01,'4',$11,$FC,$00,$08,$FC,$02 DC.B '!',$F9 DC.L SAVE70 DC.B $00,'p?9' DC.L SAVE_REZ DC.B '/<',$FF,$FF,$FF,$FF,'/<' DC.B $FF,$FF,$FF,$FF,'?<',$00,$05 DC.B 'NN',$DF,$FC,$00,$00,$00,$0C DC.B $11,$F9 DC.L SAVE201 DC.B $82,$01,$11,$F9 DC.L SAVE203 DC.B $82,$03,$11,$F9 DC.L SAVEA13 DC.B $FA,$13,$11,$F9 DC.L SAVEA15 DC.B $FA,$15,$13,$FC,$00,$03,$00,$00 DC.B $04,$84,'F',$FC,'#',$00,$11,$FC DC.B $00,$08,$88,$00,$11,$FC,$00,$00 DC.B $88,$02,$11,$FC,$00,$09,$88,$00 DC.B $11,$FC,$00,$00,$88,$02,$11,$FC DC.B $00,$0A,$88,$00,$11,$FC,$00,$00 DC.B $88,$02,'/9' DC.L SAVE_SSP DC.B '?<',$00,' NA\',$8F *DC.B '.y' *DC.L SAVEA7 DC.B 'B',$A7,'NA' EC1: DS.W 2 SAVEA7: DS.W 2 SAVE70: DS.W 2 SAVE_SSP: DS.W 2 SAVE118: DS.W 2 SAVE134: DS.W 2 SAVE_REZ: DC.B $00,$00 SAVE260: DC.B $00,$00 SAVE201: DC.B $00 SAVE203: DC.B $00 SAVEA15: DC.B $00 SAVEA13: DC.B $00 SAVE20A: DC.B $00,$00 ----------------------------------------------------------------------------- THE 68030 INSTRUCTIONS par Rusty / E.K.O ------------------------------------------------------------------------------ Yoyo ,voici les instructions du 68030 et ces principales caracteristiques pour que toutes les personnes codant sur 68000 exploitent a fond les possibli- -lites de ce super micro-proscesseur.La prochaine fois il y aura un expose sur les nouveaux modes d'addressage !!!! Avant de passer a l'article en lui meme,je tiens a avertir les lecteurs que je vais faire plein de tests de rapidite des instructions sur mon falcon. Ainsi je suis interresse par n ' importe quelle remarque surtout sur l ' utilisation du cache d' instruction et de donnee. Surtout si vous arrivez a faire tourner le blitter et le cache en meme temps. Par exp, pour effacer l'ecran on pourait faire comme sur amiga,1/2 au 68000 et 1/2 par le blitter. Pour tout ca ecrivez moi chez ALEX ... (c moi !!!) Presentation Generale du 68030: --------------------------------- ( Pique dans MISE EN OEUVRE DU 68030 ). -> Code objet compatible avec les predecesseurs de la famille 68000. -> 16 registres generaux d'adresses et de donnees sur 32 bits. -> 18 registres de controle dont trois pointeurs de pile. -> Un cache d'instruction de 256 octets. -> Un cache donnee de 256 octets. -> 18 Modes d'adressage. Presentation du CACHE D'INSTRUCTION DU 68030: ----------------------------------------------- Le cache d'instructions du 68030 est naturellement situe au sien du processeur Il sert a memoriser les instructions. Ainsi , en plus de la rapidite effective obtenue dans la recherche des instructions , l' existence de ce cache provoque une diminution du taux d'occupation des bus ... Le cache d' instruction offre une capacite de 256 octets compose de 16 blocs. Chaque bloc contient 4 mots longs soit 16 octets. Le cache instruction permet la recherche rapide des instructions sans acces a la memoire externe et donc les bus sont libres pour effectuer d'autres operations en parallele. Presentation du CACHE DONNEE DU 68030: ---------------------------------------- Ce cache interne au processeur permet de stocker les donnees referencees au cours de l'execution d'instructions. Cela a l'exception d'un adressage dans l' espace CPU,d'un adressage en mode relatif (induit l'acces en espace programme) ,de l'instruction MOVES. INSTRUCTIONS ARITHMETIQUE: ---------------------------- ADD: Dn, ou ,dn Taille operandes: 8,16,32 bytes source+destination-->destination ADDA: ,An Taille operandes: 16,32 source+destination-->destination ADDQ: #, Taille operandes: 8,16,32 bytes donnee+destination-->destination ADDX Dn,Dn ou -(An),-(An) Taille operandes: 8,16,32 bytes source+destination+X-->destination CLR Taille operandes: 8,16,32 0--->destination CMP ,Dn Taille operandes: 8,16,32 destination-source CMPA ,An Taille operandes: 16,32 destination-source CMPI #, Taille operandes: 8,16,32 destination-donnee CMPM (An)+,(An)+ Taille operandes: 8,16,32 destination-source CMP2 ,Rn Taille operandes: 8,16,32 limite inferieure,Dn Taille operandes: 32/16-->16:16 destination/source-->destination signe ou non signe (- ou +) DIVS/DIVU ,Dr:Dq Taille operandes: 64/32-->32:32 destination/source-->destination signe ou non signe (- ou +) DIVS/DIVU ,Dq Taille operandes: 32/32-->32 destination/source-->destination signe ou non signe (- ou +) DIVSL/DIVUL ,Dr:Dq Taille operandes: 32/32-->32:32 EXT Dn Taille operandes: 8-->16 ou 16-->32 destination etendue par le signe. (- ou +) --> destination EXTB Dn Taille operandes: 8-->32 destination etendue par le signe. (- ou +) --> destination MULS/MULU ,Dn Taille operandes: 16*16-->32 source * destination-->destination (signe ou non signe) MULS/MULU ,Dl Taille operandes: 32*32-->32 source * destination-->destination (signe ou non signe) MULS/MULU ,Dh:Dl Taille operandes: 32*32-->64 source * destination-->destination (signe ou non signe) NEG Taille operandes: 8,16,32 0-destination-->destination NEGX Taille operandes: 8,16,32 0-destination-X-->destination SUB ,Dn ou Dn, Taille operandes: 8,16,32 destination-source-->destination SUBA ,An Taille operandes: 16,32 destination-source-->destination SUBI #, Taille operandes: 8,16,32 destination-donnee-->destination SUBQ #, Taille operandes: 8,16,32 destination-donnee-->destination SUBX Dn,Dn ou -(An),-(An) Taille operandes: 8,16,32 destination-source-x-->destination NOP aucune aucune PC+2-->PC INSTRUCTIONS LOGIQUE: ----------------------- AND ,Dn ou Dn, Taille operandes: 8,16,32 source AND (ET) destination -->destination ANDI #, Taille operandes: 8,16,32 donnee AND (ET) destination -->destination EOR Dn, Taille operandes: 8,16,32 source OU exclusif (ou exclusive) destination-->destination EORI #, Taille operandes: 8,16,32 donnee immediate OU exclusif destination-->destination OR ,Dn ou Dn, Taille operandes: 8,16,32 source OU destination-->destination ORI Taille operandes: 8,16,32 #, 8,16,32 donnee OU destination-->destination NOT Taille operandes: 8,16,32 NOT(destination)-->destination TST Taille operandes: 8,16,32 source-0--> positionnement des indicateurs Scc Taille operandes: 8 Si condition vraie:$ff-->destination sinon $00-->destination INSTRUCTION de DECALAGES et de ROTATIONS: ------------------------------------------- ASL Dn,Dn:Taille operandes: 8,16,32 #,:Taille operandes 8,16,32 :Taille operandes: 16 ASR Dn,Dn:Taille operandes: 8,16,32 #,:Taille operandes 8,16,32 :Taille operandes: 16 LSL Dn,Dn:Taille operandes: 8,16,32 #,:Taille operandes 8,16,32 :Taille operandes: 8,16,32 LSR Dn,Dn:Taille operandes: 8,16,32 #,:Taille operandes 8,16,32 :Taille operandes: 8,16,32 ROL Dn,Dn:Taille operandes: 8,16,32 #,:Taille operandes 8,16,32 :Taille operandes: 8,16,32 ROR Dn,Dn:Taille operandes: 8,16,32 #,:Taille operandes 8,16,32 :Taille operandes: 8,16,32 ROXL Dn,Dn:Taille operandes: 8,16,32 #,:Taille operandes 8,16,32 :Taille operandes: 8,16,32 ROXR Dn,Dn:Taille operandes: 8,16,32 #,:Taille operandes 8,16,32 :Taille operandes: 8,16,32 SWAP Dn : Taille operandes: 32 INSTRUCTION de MANIPULATION de BIT: ------------------------------------- BCHG Dn, ou #, Taille operandes: 8,32 Bit numero X(indique par source) de destination teste -->z ce bit est inverse. BCLR Dn, ou #, Taille operandes: 8,32 Bit numero X(indique par source) de destination teste -->z bits est mis a 0. BTST Dn, ou #, Taille operandes: 8,32 Bit numero X(indique par source) bits teste -->z BSET Dn, ou #, Taille operandes: 8,32 Bit number X(show by the source) of destination tested -->z; ce bit est mis a 1. INSTRUCTIONS de MANIPULATION de CHAMP de BITS: ------------------------------------------------ BFCHG (deplacement,largeur) Taille operandes: 1-32 Champ de bits inverse BFCLR (deplacement,largeur) Taille operandes: 1-32 Champ de bits is clear BFTST (deplacement,largeur) Taille operandes: 1-32 Champ de bits teste-->N ET Z BFSET (deplacement,largeur) Taille operandes: 1-32 Champ de bits est mis a 1. BFEXTS (deplacement,largeur),Dn Taille operandes: 1-32 Champ de bits -->Dn; extension du signe. BFEXTU (deplacement,largeur),Dn Taille operandes: 1-32 Champ de bits -->Dn; etendu par 0 BFFFO (deplacement,largeur),Dn Taille operandes: 1-32 scrutation of the first 1 in Champ de bits -->Dn BFINS Dn,(deplacement,largeur) Taille operandes: 1-32 Dn-->Champ de bits INSTRUCTIONS BCD: ------------------- ABCD Dn,Dn ou -(An),-(An) Taille operandes: 8 source(10)+destination(10)+X -->destination NBCD Taille operandes: 8 0-destination(10)-X -->destination SBCD Dn,Dn ou -(An),-(An) Taille operandes: 8 source(10)-destination(10)-X -->destination PACK -(An),-(An),# ou Dn,Dn,# Taille operandes: 16-->8 source non packee +donnee -->destination packee UNPACK -(An),-(An),# ou Dn,Dn,# Taille operandes: 8-->16 source packed -->source non packee; source non packee+donnee -->destination non packee INSTRUCTION de TRANSFERT: --------------------------- EXG Rn,Rn Taille operandes: 32 Rn<-->Rn LEA ,An Taille operandes: 32 <-->An LINK An,# Taille operandes: 16,32 An-->(Sp);(Sp)-->An Sp+d-->Sp MOVE , Taille operandes: 8,16,32 source-->destination MOVEA ,An Taille operandes: 16,32-->32 Source-->destination MOVEM registre liste, Taille operandes: 16,32 registre liste-->destination MOVEM ,registre liste Taille operandes: 16,32 destination-->registre liste MOVEQ #,dn Taille operandes: 8-->32 donnee-->destination MOVEP Dn,(d,An) Taille operandes: 16,32 MOVEP (d,An),Dn Taille operandes: 16,32 PEA Taille operandes: 32 -->(sp) UNLINK An Taille operandes: 32 An-->sp;(sp)-->An INSTRUCTION de BRANCHEMENT: ----------------------------- Bcc