 
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 
 
 
 
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(An,Rx.?) und d(PC,Rx.?): 
 
       dRRR  G000  ----- ----- 
 
   d=0 :  Rx->D             G=0 : -> Rx.w 
     1 :  Rx->A               1 : -> Rx.l 
 
unerlaubte Adresierungsarten: 
  gelten im folgenden immer fr R (meistens Quelle) 
 
             *      d(PC),d(PC,R.?),# 
             **     A,* 
             ***    D,A,* 
             ****   A 
             *****  D,A,-(A),(A)+,#             
             6*     bei A kein ?.b 
             7*     6*,* 
 
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 ) 
 
            +X  : Erweiterung je nach Datenformat 
            +W  : nchstes Wort als wortlange Konstante 
            +Wb : nchstes Wort als bytelange Konstante 
           +W31 : nchstes Wort als Konstante von 0..31 
                  wenn R=D, sonst W31=0..7 
 
 
 
 
           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       ** 
0000  1100  GGMM  MRRR  +X    cmpi.? #k,R       ** 
0000  1000  00MM  MRRR  +W31  btst #k,R         ** 
            01                bchg #k,R         ** 
            10                bclr #k,R         ** 
            11                bset #k,R         ** 
 
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        -,7* 
 
 
 
           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 
            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     ** 
            11MM  MRRR        tas.b R     ** 
            1111  1100        illegal 
0100  1100  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 
                  0101        rts 
                  0110        trapv 
                  0111        rtr 
            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       7* (k= 08) 
         1                    subq.? #k,R       7* (k= 08) 
0101  CCCC  1100  1DDD +W     db?? D,label      siehe CCR 
            11MM  MRRR        s?? R             ** siehe CCR 
 
 
 
           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         6* 
      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         6* 
      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         6* 
      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! 
 
 
