 
66666666     88888888     00000000     00000000     00000000 
66           88    88     00    00     00    00     00    00 
66           88    88     00    00     00    00     00    00 
66666666       8888       00    00     00    00     00    00 
66    66     88    88     00    00     00    00     00    00 
66    66     88    88     00    00     00    00     00    00 
66666666     88888888     00000000     00000000     00000000 
 
 
OOOOOOO                                 DD 
OO   OO                                 DD 
OO   OO  PPPPPPP  CCCCCC  OOOOOOO  DDDDDDD  EEEEEEE  SSSSSSS 
OO   OO  PP   PP  CC      OO   OO  DD   DD  EE   EE  SS 
OO   OO  PP   PP  CC      OO   OO  DD   DD  EEEEEEE   SSSSS 
OO   OO  PP   PP  CC      OO   OO  DD   DD  EE            SS 
OOOOOOO  PPPPPPP  CCCCCC  OOOOOOO  DDDDDDD  EEEEEEE  SSSSSSS 
         PP 
         PP 
 
 
 
 
 
 
bersicht: 
 
    $0    %0000        Bitzugriffe,immediate 
     1     0001        move.b 
     2     0010        move.l 
     3     0011        move.w 
     4     0100        lea,trap,clr,not,movem,link,rts... 
     5     0101        db??,addq,subq,s?? 
     6     0110        b?? 
     7     0111        moveq 
     8     1000        div,or 
     9     1001        sub 
     A     1010        linea 
     B     1011        cmp 
     C     1100        mul,and,exg... 
     D     1101        add 
     E     1110        Schiften und Rollen 
     F     1111        linef, FPU-Ansteuerung 
 
 
 
Adressierungsarten: 
 
Modus:      0   1   2   3   4   5   6   7   7   7   7   7 
Reg.Nr.:                                0   1   2   3   4 
            D   A  (A) (A)+ |   |   |  $W  $L d(PC) |   | 
                           -(A) |   |           d(PC,R) | 
                               d(A) |                   # 
                                   d(A,R) 
 
Codierung von d(A,R.?) und d(PC,R.?): 
 
      dRRR  G000  dddd  dddd 
 
   d=0 :  R->D             G=0 : -> R.w 
     1 :  R->A               1 : -> R.l 
 
Codierung von ([b,A,R.?*m],o) und ([b,A],R.?*m) (ab MC68020) 
 
      dRRR  Gmm1  bbbb  oooo  (+16 oder 32Bit b) (+...o) 
 
      d,R und G siehe oben 
      o=0 : b(A,R.?)   mit b=32Bit Offset 
      sonst ([b,A],R.?*m) 
      b: Bit 3 : A nicht in [] vorhanden 
             2 : R nicht in [] vorhanden 
             0 und 1 : 01 : b nicht vorhanden 
                       10 : b ist wortlang 
                       11 : b ist long 
      o: Bit 3 : immer 0 
             2 : R ist auerhalb [] vorhanden 
                 ,wenn Bit 2 bei b nicht gesetzt! 
             0 und 1 : 01 : o nicht vorhanden 
                       10 : o ist wortlang 
                       11 : o ist long 
      m : Multiplikationsfaktor:  00 : R.? 
                                  01 : R.?*2 
                                  10 : R.?*4 
                                  11 : R.?*8 
 
 
unerlaubte Adresierungsarten: 
  gelten im folgenden immer fr R 
 
             *      d(PC),d(PC,R.?),# 
             **     A,* 
             ***    D,A,* 
             ****   A 
             *****  D,A,-(A),(A)+,#             
             6*     D,A,# 
             7*     # 
 
  Wenn bei dem Datenformat .b die Adressierungsart A verboten 
  ist, wird lediglich ein Wert von 16 hinzuaddiert! 
 
 
Abkrzungen: 
            R : Register aller Art 
            Y : Register im zweiten Nibble (von oben) 
            X : Register im vierten Nibble (von oben) 
            D : Datenregister 
            A : Adressregister 
            M : Adressierungsmodus 
            K : Konstante 
            N : Nummer 
            G : Datenformat  ( %00=.b  %01=.w  %10=.l ) 
            d : Flag fr Daten-(0) oder Adressregister(1) 
            s : Steuerregister (siehe unten) 
 
            +X  : Erweiterung je nach Datenformat 
            +W  : nchstes Wort als wortlange Konstante 
            +Wb : nchstes Wort als bytelange Konstante 
 
 
Prozessoren: 
               M1  :  MC68010 
               M2  :  MC68020 
               M3  :  MC68030 
               M4  :  MC68040 
               MF  :  MC68881/68882 
z.B. bedeutet >M2 ab MC68020 vorhanden 
 
 
Steuerregister (s): 
                     $0  : SFC     >M1 
                     $1  : DFC     >M1 
                     $2  : CACR    >M2 
                     $3  : TC      >M4 
                   $800  : USP     >M1 
                   $801  : VBR     >M1 
                   $802  : CAAR    M2,M3 
                   $803  : MSP     >M2 
                   $804  : ISP     >M2 
                   $805  : MMUSR   >M4 
                   $807  : SRP     >M4 
 
 
 
           LINE 0 
 
0000 0000 GGMM MRRR  +X    ori.? #k,R        ** 
          0011 1100  +Wb   ori #k,ccr 
          0111 1100  +W    ori #k,sr 
0000 0010 GGMM MRRR  +X    andi.? #k,R       ** 
          0011 1100  +Wb   andi #k,ccr 
          0111 1100  +W    andi #k,sr 
0000 0010 GGMM MRRR  +X    eori.? #k,R       ** 
          0011 1100  +Wb   eori #k,ccr 
          0111 1100  +W    eori #k,sr 
  
0000 0100 GGMM MRRR  +X    subi.? #k,R       ** 
0000 0110 GGMM MRRR  +X    addi.? #k,R       ** 
          1100 dRRR        rtm R             M2 
0000 1100 GGMM MRRR  +X    cmpi.? #k,R       ** 
0000 1000 00MM MRRR  +Wk   btst #Wk,R     **, bei R=D: 
          01               bchg #Wk,R         Wk=0..31 
          10               bclr #Wk,R         sonst: 
          11               bset #Wk,R         Wk=0..7 
 
0000 1110 GGMM MRRR  dXXX 0000 0000  moves.? R,X    6*,>M1 
                          1000 0000  moves.? X,R    6*,>M1 
 
0000 DDD1 00MM MRRR        btst D,R          ** 
     DDD1 0000 1AAA  +W    movep.w k(A),D 
     DDD1 01MM MRRR        bchg D,R          ** 
     DDD1 0100 1AAA  +W    movep.l k(A),D 
     DDD1 10MM MRRR        bclr D,R          ** 
     DDD1 1000 1AAA  +W    movep.w D,k(A) 
     DDD1 11MM MRRR        bset D,R          ** 
     DDD1 1100 1AAA  +W    movep.l D,k(A) 
 
 
 
           LINE 1 
 
0001 YYYM MMMM MXXX        move.b X,Y        -,17* 
 
 
 
           LINE 2 
 
0010 YYYM MMMM MXXX        move.l X,Y        -,* 
 
 
 
           LINE 3 
 
0011 YYYM MMMM MXXX        move.w X,Y        -,* 
 
 
 
           LINE 4 
 
0100 0000 GGMM MRRR        negx.? R    ** 
          11MM MRRR        move sr,R   ** 
0100 0010 GGMM MRRR        clr.? R     ** 
0100 0100 GGMM MRRR        neg.? R     ** 
          11MM MRRR        move R,ccr  **** 
0100 0110 GGMM MRRR        not.? R     ** 
          11MM MRRR        move R,sr   **** 
0100 1000 00MM MRRR        nbcd R      ** 
          01MM MRRR        pea R       ***** 
          0100 0DDD        swap D 
               1NNN        bkpt #N     >M1 
          10MM MRRR  +W    movem.w Liste,R siehe MOVEM 
          1000 0DDD        ext.w D 
          11MM MRRR  +W    movem.l Liste,R siehe MOVEM 
          1100 0DDD        ext.l D 
0100 1010 GGMM MRRR        tst.? R     **, bei >M2: 23* 
          11MM MRRR        tas.b R     ** 
          1111 1100        illegal 
0100 1100 00MM MRRR  0DDD 0000 0000 0000  mulu.l R,D   >M2 
                          1               muls.l R,D   >M2 
          01MM MRRR  0DDD 0000 0000 0000  divu.l R,D   >M2 
                          1               divs.l R,D   >M2 
          10MM MRRR  +W    movem.w R,Liste siehe MOVEM 
          11MM MRRR  +W    movem.l R,Liste siehe MOVEM 
0100 1110 0100 NNNN        trap #N 
          0101 0AAA  +W    link A,#k 
               1AAA        unlk A 
          0110 0AAA        move A,USP 
               1AAA        move USP,A 
          0111 0000        reset 
               0001        nop 
               0010  +W    stop #k 
               0011        rte 
               0100  +W    rtd #16Bit Adressdistanz    >M1 
               0101        rts 
               0110        trapv 
               0111        rtr 
               1010  +W    movec.l steuer,X            >M1 
                  1  +W    movec.l X,steuer            >M1 
                     dXXX ssss ssss ssss   s:Steuerregister 
          10MM MRRR        jsr R       ***** 
          11               jmp R       ***** 
0100 DDD1 10MM MRRR        chk R,D     **** 
     AAA1 11MM MRRR        lea R,A     ***** 
 
 
 
           MOVEM 
 
erlaubte Adressierungen: 
        Register -> Speicher : (A),-(A),d(A),d(A,R),$W,$L 
        Speicher -> Register : (A),(A)+,d(A),d(A,R),$W,$L 
                                         d(PC),d(PC,R) 
Codierung der Registerliste: 
                  BIT  15 14 13   08 07   02 01 00 
bei Pre-Dekrement:     D0 D1 D2...D7 A0...A5 A6 A7 
sonst:                 A7 A6 A5...A0 D7...D2 D1 D0 
 
Ablage im Heap:   1. opcode 
                  2. Registerliste 
                  3. Adressierungsart 
 
 
 
           LINE 5 
 
0101 KKK0 GGMM MRRR        addq.? #k,R       17* (k= 08) 
        1 GGMM MRRR        subq.? #k,R       17* (k= 08) 
0101 CCCC 1100 1DDD  +W    db?? D,label      siehe CCR 
          11MM MRRR        s?? R             ** siehe CCR 
     0100 1111 1010  +X    trapcc.w #X       >M2 
                  1  +X    trapcc.l #X       >M2 
 
 
 
           LINE 6 
 
0110 CCCC kkkk kkkk        b??.s label       siehe CCR 
          0000 0000  +W    b?? label         siehe CCR 
 
 
 
           CCR  (Conditional Code Register) 
 
0000  bra   -    st     0100  cc    1000  vc    1100  ge 
0001  bsr  dbra  sf     0101  cs    1001  vs    1101  lt 
0010  bhi  dbhi  shi    0110  ne    1010  pl    1110  gt 
0011  bls  dbls  sls    0111  eq    1011  mi    1111  le 
 
 
 
           LINE 7 
 
0111 DDD0 kkkk kkkk        moveq #k,D 
 
 
 
           LINE 8 
 
1000 DDD0 GGMM MRRR        or.? R,D          **** 
          11               divu R,D          **** 
1000 DDD1 GGMM MRRR        or.? D,R          *** 
     YYY1 0000 0XXX        sbcd Dx,Dy 
     YYY1 0000 1XXX        sbcd -(Ax),-(Ay) 
     DDD1 11MM MRRR        divs R,D          **** 
 
 
 
           LINE 9 
 
1001 DDD0 GGMM MRRR        sub.? R,D         16* 
     AAA0 11MM MRRR        suba.w R,A 
1001 DDD1 GGMM MRRR        sub.? D,R         *** 
     YYY1 GG00 0XXX        subx.? Dx,Dy 
     YYY1 GG00 1XXX        subx.? -(Ax),-(Ay) 
     AAA1 11MM MRRR        suba.l R,A 
 
 
 
           LINE A 
 
1010 0000 0000 NNNN        linea #N 
 
 
 
           LINE B 
 
1011 DDD0 GGMM MRRR        cmp.? R,D         16* 
     AAA0 11MM MRRR        cmpa.w R,A 
1011 DDD1 GGMM MRRR        eor.? D,R         ** 
     YYY1 GG00 1XXX        cmpm.? (Ax)+,(Ay)+ 
     AAA1 11MM MRRR        cmpa.l R,A 
 
 
 
           LINE C 
 
1100 DDD0 GGMM MRRR        and.? R,D         **** 
          11MM MRRR        mulu R,D          **** 
1100 DDD1 GGMM MRRR        and.? D,R         *** 
     YYY1 0000 0XXX        abcd Dx,Dy 
               1           abcd -(Ax),-(Ay) 
     YYY1 0100 0XXX        exg Dy,Dx 
               1           exg Ay,Ax 
     DDD1 1000 1AAA        exg A,D 
     DDD1 11MM MRRR        muls R,D          **** 
 
 
           LINE D 
 
1101 DDD0 GGMM MRRR        add.? R,D         16* 
     AAA0 11MM MRRR        adda.w R,A 
1101 DDD1 GGMM MRRR        add.? D,R         *** 
     YYY1 GG00 0XXX        addx.? Dx,Dy 
     YYY1 GG00 1XXX        addx.? -(Ax),-(Ay) 
     AAA1 11MM MRRR        adda.l R,A 
 
 
 
           LINE E 
 
1110 YYYP GGKS SDDD        ???.? ?,D 
                           [SSP.G Y,D] 
1110 0SSP 11MM MRRR        ???.w R           *** 
                           [SSP.w R] 
         P=0 : rechts 
           1 : links 
 
              K=0 : Y=Konstante (08) 
                1 : Y=Datenregister 
 
                SS=%00 : AS 
                   %01 : LS 
                   %10 : ROX 
                   %11 : RO 
 
 
 
 
 
 
           PROGRAMMHEADER 
 
    offset    length 
      $0        2       branch ($601A) 
       2        4       Lnge des TEXT-Segmentes 
       6        4       Lnge des DATA-Segmentes 
       A        4       Lnge des BSS 
       E        4       Lnge der Symboltabelle 
      12        4       ??? 
      16        4       Header-Flags 
    ab TOS 1.4: 
      Bit 0: Fast-Load-Bit (nur den Speicher frs BSS lschen) 
    ab TOS 3.0: 
          1: Das Programm wird ins Fast-Ram geladen 
          2: mit malloc() erhlt man Speicherblcke mglichst 
             aus dem Fast-Ram 
          3..27: reserviert 
          28..31: TPA-Grenfeld (0-15 bedeutet: Programm  
                  belegt 128k-2048kByte) 
 
      1A        2       =0 : Relozierinformationen vorhanden 
  
      1C        -       TEXT-Segment 
       +        -       DATA-Segment 
       +        -       Symboltabelle 
   bis EOF      -       Reloziertabelle 
  
  
  
  
  
           SYMBOLTABELLE 
  
    offset    length 
     $0         8       String 
      8         2       Kennung 
      A         4       Offset-Adresse 
              =14 Bytes pro Symbol 
 
 
Kennungen der GFA-Basic/ST-Pascal plus Symboltabelle 
      $00A1       zeigt ins BSS 
      $00A2       zeigt ins TEXT-Segment 
      $00A4       zeigt ins DATA-segment 
      $00E0       MEMSIZE 
 
Kennungen der Digital-Research-Symboltabelle 
      $0200       zeigt ins TEXT-Segment 
      $0400       zeigt ins DATA-segment 
      $0100       zeigt ins BSS 
 
Alle Adressen werden ab Programmanfang gezhlt! 
 
 
Kennungen der TurboAss Symboltabelle 
      $00C0       EQU (wird von Desert Drain nicht ausgewertet) 
      $0081       zeigt ins BSS 
      $0082       zeigt ins TEXT-Segment 
      $0084       zeigt ins DATA-Segment 
 
Alle Adressen werden ab Segmentanfang gezhlt! 
 
 
 
 
           RELOZIERTABELLE 
  
Sie steht hinter der Symboltabelle und enthlt Informationen 
ber die zu relozierenden 4 Byte Adressen im TEXT und DATA- 
Segment. 
  
erstes Langwort:    erster Offset ab Programmanfang 
danach byteweise:   Wert=$01: Zhler+$FE 
                    sonst:    Zhler+Wert 
                              ->Zieladresse 
Das Ende ist durch ein Nullbyte gekennzeichnet. Was dann noch 
kommt, ist ein Linkvirus oder Linkerfehler! 
 
Beispiel: $0000 
          $0102                    ->$102=258 
          $0101     +2*$FE 
          $01EC     +$FE+$EC=$3E6  ->$4E8=1256 
          $2A06     +$2A           ->$512=1298 
                    +$06           ->$518=1304 
          usw. 
 
Die Langworte in den rechts stehenden Adressen mssen  
vor Programmstart vom Betriebssystem reloziert werden! 
 
 
