 
*****************************************************************
* tst68k	standard 68000 family testcase			*
*								*
* 16 Errors,	13 Warnings	- unexpected errors -> bugs	*
*								*
*						JC 13 NOV  1986 *
*****************************************************************
*     68000 ASSEMBLER TEST CASE
          LLEN       116           ; MAXIMIZE LISTING LINE LENGTH
          OPT        CRE           ; TURN ON CROSS REFERENCE
*
*DEFINE SOME SYMBOLS FOR LATER USE
*
          ORG        $100
AVAL      DS         1             ; ABSOLUTE SYMBOL
          ORG        $ffffff
AVALHI    NOP                      ; ABSOLUTE SYMBOL REQUIRING 32 BITS
                                   ; NOTE ROUNDING OF LOCATION COUNTER
                                   ; TO EVEN ADDRESS
          SECT       SEC1
RVAL1     NOP                      ; RELOCATABLE SYMBOL IN SAME SECTION
          SECT       SEC2    
RVAL2     NOP                      ; RELOCATABLE SYMBOL IN DIFFERENT SECTION
          SECTION    SEC1          ; BACK TO FIRST RELOCATABLE SECTION
          XREF       EVAL          ; EXTERNAL REFERENCE
          INCLUDE    incl1.src     * TEST INCLUDE DIRECTIVE
*
*ALLOW ERRORLESS ASSEMBLY OF 68010 INSTRUCTIONS
          CHIP       68010
*
* C.1 BIT MANIPULATION, MOVEP, MOVES, IMMMEDIATE INSTRUCTIONS
*
          ORI.B      #255,AVAL
          ORI.B      #255,CCR
          ORI.W      #10000,-(A5)
          ORI        #255,SR
          ORI.L      #43000,(A0)+
          MOVEP      10(A2),D0
          BTST       D0,(A0)
          BCHG       D0,(A0)
          MOVEP      D0,10(A2)
          BCLR       D0,(A0)
          BSET       D0,(A0)
          ANDI.B     #'A',D0
          ANDI.B     #255,AVAL
          ANDI.B     #255,CCR
          ANDI       #20000,D0
          ANDI       #255,SR
          ANDI.L     #$FfFfFfFf,EVAL
          MOVEP.W    D1,10(A0)
          SUBI.B     #255,D7
          SUBI       #4096,D1
          SUBI.L     #40000,(A7)+
          ADDI.B     #255,-(A0)
          ADDI       #100,D0
          ADDI.W     #255,EVAL
          ADDI.L     #-40000,10(A2)
          BTST       #6,EVAL
          BCHG       #6,EVAL
          BCLR       #6,EVAL
          BSET       #6,EVAL
          EORI.B     #'A',$7F(A2,D7)
          EORI       #255,CCR
          EORI.W     #25,EVAL
          EORI       #255,SR
          EORI.L     #10000,(A1)
          MOVEP.L    D5,10(A3)
          CMPI.B     #'z',D5
          CMPI       #1200,D2
          CMPI.W     #5,32(A7)
          CMPI.L     #255,(A0)
          MOVEP.W    10(A1),D6
          MOVEP.L    10(A1),D6
          MOVES.B    D1,(A1)+                     ;68010
          MOVES.W    -(A0),D2                     ;68010
          MOVES.L    (A5),D1                      ;68010
*
* C.2 MOVE BYTE, MOVES INSTRUCTION
*
          move.b     d0,(a7)
          MOVE.B     (A3)+,-(A7)
*
* C.3 MOVE, MOVEA LONG INSTRUCTION
*
          MOVE.L     A1,D0
          MOVEA.L    (A0),A1
          MOVE.L     AVAL(A1),D3
*
* C.4 MOVE, MOVEA WORD INSTRUCTION
*
          MOVE.W     #'A',AVAL
          MOVEA.W    D1,A1
          MOVE       -(A0),(A7)+
*
* C.5 MISCELLANEOUS INSTRUCTIONS
*
          NEGX.B     D5
          NEGX.W     -(A7)
          NEGX       AVAL(A2)
          NEGX.L     (A5)
          MOVE       SR,(A1)+
          CHK        (A3)+,D0
          CLR.B      10(A3,D4)
          CLR        D0
          CLR.W      AVAL
          CLR.L      -(A0)
          MOVE       CCR,(A1)+            ; 68010
          NEG.B      AVAL
          neg        D2
          NEG.W      2(A0)
          NEG.L      AVAL(A7)
          MOVE       AVAL,CCR
          NOT.B      AVAL(A0)
          NOT        D5
          NOT.W      -(A7)
          NOT.L      D5
          MOVE       AVAL,SR
          LEA        (A2),A3
          NBCD       AVAL(A0)
          SWAP       D0
          PEA        (A0)
          EXT.W      D0
          MOVEM      A1-A3/D0/A6-A7,(A1)
          MOVEM.W    A1/A2,-(A5)
          MOVEM.W    A1-A7/D0-D3,EVAL
          EXT.L      D0
          MOVEM.L    A4-A6,-(A3)
          MOVEM.L    A5/A6/A7,EVAL
          CHK        (A5),D4
          TST.B      D5
          TST.W      (A0)
          TST        EVAL
          TST.L      10(A5)
          TAS        D0
          ILLEGAL
          CHK        -(A3),D5
          MOVEM      (A0),A1-A3/D0/A6-A7
          MOVEM.W    (A5)+,A1/A2
          MOVEM.W    EVAL,A1-A7/D0-D3
          MOVEM.L    (A3)+,A4-A6
          MOVEM.L    EVAL,A5/A6/A7
          TRAP       #15
          LINK       A0,#16000
          UNLK       A0
          MOVE       A0,USP
          MOVE       USP,A0
          RESET
          NOP
          STOP       #123
          RTE
          RTD        #16000             ; 68010
          RTS
          TRAPV
          RTR
          MOVEC      USP,D1             ;68010
          MOVEC.L    VBR,D3             ;68010
          MOVEC      D1,SFC             ;68010
          MOVEC      A0,DFC             ;68010
          JSR        EVAL
          JMP        $400
RVAL3     JMP        *+10
          JMP        RVAL3(PC,A2.W)
          chk        D5,D7
*
* c.6 add quick, subtract quick, set conditionally, decrement
*     instructions
* 
          ADDQ       #8,D5
          DBT        D6,EVAL
          ST         RVAL2
          SUBQ.B     #8,(A7)
          DBF        D4,*-4
          DBRA       D4,*-4
          SF         (A5)+
          ADDQ.B     #1,D5
          ADDQ.L     #1,45(A3,A5)
          DBHI       D7,RVAL2
          SHI        EVAL
          SUBQ.W     #1,45(A6)
          SUBQ.L     #1,(A7)+
          DBLS       D1,AVAL
          SLS        -(A1)
          DBCC       D1,AVAL
          SCC        D3
          DBCS       D2,RVAL1
          SCS        (A5)
          ADDQ.W     #3,(A6)
          DBNE       D4,RVAL2
          SNE        AVAL
          DBEQ       D3,*+0  ; NOTE * WITHOUT +0 DOES NOT WORK
          SEQ        (A3)
          DBVC       D7,*+0
          SVC        EVAL
          DBVS       D0,*+8
          SVS        AVAL
          DBPL       D5,AVAL
          SPL        RVAL1
          DBMI       D3,RVAL1
          SMI        RVAL2
          DBGE       D5,*+4
          SGE        -(A2)
          DBLT       D2,EVAL
          SLT        RVAL1
          ADDQ       #7,D5
          DBGT       D6,EVAL
          SGT        AVAL
          SUBQ       #7,AVAL(A0)
          DBLE       D0,AVAL
          SLE        (A3)
*
* C.7 BRANCH CONDITIONALLY INSTRUCTION
*
          BRA        EVAL
          BSR        AVAL
          BHI        RVAL1
          BLS        RVAL2
          BCC        *+0
          BCS        *+4
          BNE        AVAL+5
          BEQ        EVAL+3
          BVC        *-4
          BVS        RVAL1
          BPL        EVAL
          BMI        AVAL
          BGE        RVAL1
          BLT        RVAL2
          BGT        EVAL
          BLE        EVAL+1
*
* C.8 MOVE QUICK INSTRUCTION
*
          MOVEQ      #-1,D5
*
* C.9 OR, DIVIDE, SUBTRACT DECIMAL INSTRUCTIONS
*
          OR.L       77(A7),D0
          OR.B       D0,-(A1)
          DIVS       (A6),D0
          OR         AVAL,D1
          OR.L       D5,D3
          OR.B       D3,D5
          DIVU       10(A0),D5
          DIVU       D3,D6
          SBCD       D1,D6
          OR.W       D6,(A7)+
          SBCD       -(A0),-(A7)
          OR.B       D7,456(A3)
*
* C.10 SUB, SUBX, SUBA INSTRUCTIONS
*
          SUB.W      456(A0),D0
          SUBA.W     D1,A1
          SUBX       D0,D1
          SUBX.L     D0,D1
          SUB.L      D1,(A3)
          SUBA.L     (A0),A1
          SUB.B      D3,D2
          SUB        D1,D2
          SUBX.W     -(A1),-(A2)
          SUBX.L     -(A1),-(A2)
          SUB.W      77(A3),D6
          SUBX.W     D2,D6
          SUB.B      (A2),D7
          SUB.L      34(A3,D7),D7
          SUBX.B     D1,D7
          SUBX.B     -(A0),-(A7)
          SUB.W      D7,(A5)+
*
* C.11 COMPARE, CMPA, EXCLUSIVE OR INSTRUCTIONS
*
          CMP.B      (A6),D0
          EOR.B      D0,(A5)
          CMPM.W     (A7)+,(A0)+
          CMPA.W     D1,A1
          CMPA       #3,A1
          EOR.B      D1,(A5)+
          CMPA.L     (A0),A1
          CMP        (A3)+,D2
          EOR.W      D2,-(A0)
          EOR        D3,$7F(A3)
          EOR.L      D4,34(A0,D0.L)
          CMP.W      -(A0),D5
          CMPM       (A5)+,(A6)+
          CMPM.L     (A1)+,(A6)+
          CMP.B      D1,D7
          CMP.L      45(A7,D4),D7
          CMPM.B     (A0)+,(A7)+
*
* C.12 AND, MULTIPLY, ADD DECIMAL, EXCHANGE INSTRUCTIONS
*
          AND.B      (A1),D0
          AND.W      (A1),D0
          AND.L      (A1),D0
          MULU       D3,D0
          EXG        D0,D7
          EXG        D0,A7
          EXG        A7,D0
          MULU       (A3),D1
          AND.B      D1,(A1)
          AND.W      D1,(A1)
          AND.L      D1,(A1)
          AND        D1,D2
          MULU       (A4)+,D3
          MULS       -(A5),D4
          MULS       45(A5,D7),D6
          ABCD       D1,D7
          ABCD       -(A0),-(A7)
          EXG        A0,A7
*
* C.13 ADD, ADDA, ADDX INSTRUCTIONS
*
          ADD.B      (A5),D0
          ADD.L      (A1),D0
          ADD.W      EVAL,D1
          ADDA.W     D1,A1
          ADDA       #3,A1
          ADDX       D0,D1
          ADDX.L     D0,D1
          ADDA.L     (A0),A1
          ADD        D1,D2
          ADDX.B     D0,D7
          ADDX.B     -(A0),-(A7)
          ADDX.W     -(A0),-(A7)
          ADD.W      D7,45(A7,D4)
          ADDX.L     -(A0),-(A7)
*
* C.14 SHIFT/ROTATE INSTRUCTIONS
*
          ASR.B      D0,D7
          LSR.B      D0,D7
          ROXR.B     D0,D7
          ROR.B      D0,D7
          ASR.W      #8,D7
          LSR.W      #8,D7
          ROXR.W     #8,D7
          ROR.W      #8,D7
          ASR.W      D0,D1
          LSR.W      D0,D1
          ROXR.W     D0,D1
          ROR.W      D0,D1
          ASR.L      #8,D1
          LSR.L      #8,D1
          ROXR.L     #8,D1
          ROR.L      #8,D1
          ASR.L      D0,D1
          LSR.L      D0,D1
          ROXR.L     D0,D1
          ROR.L      D0,D1
          ASR        EVAL
          ASL.B      D0,D1
          LSL.B      D0,D1
          ROXL.B     D0,D1
          ROL.B      D0,D1
          ASL.W      D0,D1
          LSL.W      D0,D1
          ROXL.W     D0,D1
          ROL.W      D0,D1
          ASL.L      #8,D2
          LSL.L      #8,D2
          ROXL.L     #8,D2
          ROL.L      #8,D2
          ASL.L      D0,D1
          LSL.L      D0,D1
          ROXL.L     D0,D1
          ROL.L      D0,D1
          ASL        AVAL
          ASR.B      #1,D0
          LSR.B      #1,D0
          ROXR.B     #1,D0
          ROR.B      #1,D0
          LSR        EVAL
          ASL.B      #1,D1
          LSL.B      #1,D1
          ROXL.B     #1,D1
          ROL.B      #1,D1
          LSL        AVAL
          ROXR       EVAL
          ROXL       AVAL
          ROR        EVAL
          ROL        AVAL
          ASL.W      #7,D2
          LSL.W      #7,D2
          ROXL.W     #7,D2
          ROL.W      #7,D2
* END OF TEST INSTRUCTION SET
*
* DISPLAY GENERIC INSTRUCTION RESOLUTION
*
          ADD        (A0),D1
          ADD        (A0),A1       ; ADDA
          ADD        #7,(A0)       ; ADDQ
          ADD        #$FFFF,(A0)   ; ADDI
          AND        (A0),D1
          AND        #10,D1        ; ANDI
          CMP        (A0),D1
          CMP        (A0),A1       ; CMPA
          CMP        #99,(A0)      ; CMPI
          CMP        (A1)+,(A0)+   ; CMPM
          EOR        D1,(A0)
          EOR        #99,(A0)      ; EORI
          MOVE       (A0),D1
          MOVE       (A0),A1       ; MOVEA
          MOVE.L     #3,D1         ; MOVEQ - .L EXTENSION IS REQUIRED
          OR         (A0),D1
          OR         #99,(A0)      ; ORI
          SUB        (A0),D1
          SUB        (A0),A1       ; SUBA
          SUB        #7,(A0)       ; SUBQ
          SUB        #$FFFF,(A0)   ; SUBI
*
*  DISPLAY DIFFERENT POSSIBLE ADDRESSING MODES
*
          MOVE       D2,D1
          MOVE       A1,D1
          MOVE       (A1),D1
          MOVE       (A1)+,D1
          MOVE       -(A1),D1
RVAL4     MOVE       5(A1),D1
          MOVE       5(A1,D2.L),D1
          MOVE       AVAL,D1
          MOVE       AVALHI,D1
          MOVE       RVAL4(PC),D1
          MOVE       RVAL4(PC,D2.L),D1
          MOVE       #9,D1
*
*   DISPLAY USER CONTROL OF ADDRESSING MODES
*
          ORG        $FFF000
          MOVE       AVAL,D1
          MOVE       AVALHI,D1
          OPT        P
          MOVE       AVAL,D1       ; DISPLACEMENT TOO BIG FOR 16 BITS
          MOVE       AVALHI,D1
*
          SECT       SEC1
          MOVE       RVAL2,D1
          OPT        R
          MOVE       RVAL2,D1
*
          BCC        FORREF0
          BCC.S      FORREF0
          OPT        B
          BCC        FORREF0
          BCC.L      FORREF0
*
          JMP        EVAL
          JMP.S      EVAL
          OPT        F
          JMP        EVAL
          JMP.L      EVAL
FORREF0    NOP
*
          OPT        -B,-F,-R,-P
*
*   DISPLAY DIRECTIVES
*
*   FOR ORG, SECT AND OPT DIRECTIVES SEE ABOVE
*
LABEL     EQU        3
LAB2      EQU        $FFFFFFFF
LAB3      SET        1
          MOVE.L     #LABEL,D1
          MOVE.L     #LAB3,D1
LAB3      SET        LAB3+1
          MOVE.L     #LAB3,D1
REGS      REG        A1/A2-A4/D3/D6
          MOVEM      REGS,-(A6)
          MOVEM      (A6)+,REGS
          FAIL                         ; PROGRAMMED ERROR
          DS         $100
          COMLINE    $100
          MASK2
          OFFSET     $20
OFF1      DS         $100
OFF2      DS         $100
OFF3      DS         $100
          SECTION    SEC1
ARRAY     DS $300
          MOVE       ARRAY+OFF2,D2
          DCB        5,$FFF
          DC         3,4
          DC.B       'A'
          DC.B       'BCDEFG'
          DC         'H'              ; NOTE LOCATION COUNTER JUMP
          DC.L       'H'              ; "PAGE" DIRECTIVE FOLLOWS
          PAGE
                                      ; TURNING OFF LISTING - WATCH LC
                                      ; SKIPPED INSTRUCTIONS ARE NOP NOP  
          NOLIST 
          NOP
          NOP
          LIST
          NOP                         ; "SPC 2" DIRECTIVE FOLLOWS
          SPC        2
          NOP
          LLEN       72  ; TRUNCATES COMMENT WHICH GOES OUT TO COLUMN 80 XXXXX
          LLEN       116  ; BACK TO MAXIMUM
          TTL        'TITLE FOR NEXT PAGE'     ; "PAGE" DIRECTIVE FOLLOWS
          PAGE
TEST      IDNT
          XDEF       RVAL1,RVAL2
          XREF.S     SECT1:XR1,3:XR2
          ADD        XR1,D1                  ; NOTE SHORT ADDRESSING MODE
          ADD        XR2,D1
*
*  DISPLAY ERRORS
*
AC:       NOP
AC        NOP                             ; DUPLICATE LABEL
2         GO TO 10                        ; ILLEGAL LABEL
AC+       NOP                             ; ILLEGAL LABEL
          JUNK                            ; ILLEGAL OPCODE
          SBCD.L     D1,D1                ; ILLEGAL OPCODE/EXTENSION
          ADD        D1                   ; MISSING OPERAND
          EQU        7                    ; MISSING LABEL
          EXT        D1,D2                ; EXTRA OPERAND
          ASL        (A1),D1              ; (A1) LEGAL AS SINGLE OPERAND
                                          ; BUT COMBINATION ILLEGAL
          ADDX       (A1),D1              ; ILLEGAL OPERAND COMBINATION
          JMP        AVAL*/3              ; SYNTAX ERROR
          XDEF       JUNK                 ; UNDEFINED XDEF
          BCC.S      *+2                  ; RELOCATION ERROR - 8BIT 
                                          ; DISPLACEMENT OF 0
          BCC        AVALHI               ; 16 BIT DISPLACEMENT OUT OF
                                          ; RANGE
          COMMON     COMSEC
          NOP                             ; CODE GENERATION IN COMMON
          COMMON.S   COMSEC               ; LONG/SHORT SECTION MISMATCH
          SECT       SEC1
*
*  DISPLAY VALUE WARNINGS
*
          ADD.B      #0,D1                ; ALL INSTRUCTIONS NOT SPECIFICALLY
          ADD.B      #$FF,D1              ; LISTED BELOW DO THE SAME THING 
          ADD.B      #-1,D1               ; ADD DOES (ALTHOUGH ALL EXTENSIONS
          ADD.B      #$100,D1             ; MAY NOT BE LEGAL)
          ADD.W      #0,D1
          ADD.W      #$FFFF,D1
          ADD.W      #-1,D1
          ADD.W      #$10000,D1
*  NOTE ALL VALUES ARE LEGAL FOR ADD.L 
          ADDQ.L     #1,D1                ; SUBQ AND ALL SHIFTS DO THE SAME
          ADDQ.L     #8,D1                ; THING ADDQ DOES
          ADDQ.L     #0,D1
          ADDQ.L     #9,D1
          TRAP       #0
          TRAP       #15
          TRAP       #16
          TRAP       #-1
          MOVEQ      #-128,D1             ; NOTE SIGN FILL
          MOVEQ      #127,D1
          MOVEQ      #-129,D1
          MOVEQ      #128,D1
          LINK       A1,#32767            ; NOTE SIGN FILL
          LINK       A1,#-32768
          LINK       A1,#32768
          LINK       A1,#-32769
          STOP       #0 
          STOP       #$FFFF
          STOP       #-1
          STOP       #$10000
*
*  DISPLAY ARITHMETIC AND FLOATING POINT NUMBERS
*
          MOVE.L     #(2+@3)*4/(5<<6),D1
          ADD.L      #((((99!%1011)!!3)&10)+"1),D1
          DC.D       3.14159
          DC.S       3.14159
          DCB.S      3,1.0
          DCB.D      3,1.0
          DC.S       :3F8,1.0
          DC.D       1.0,:3FF0000000000000
*
*  CHECK ASCII CHARACTER SET
*
          DC.B       ' !"#$%&''()*+'
          DC.B       ',-./'
          DC.B       '0123456789'
          DC.B       ':;<=>?@'
          DC.B       'ABCDEFGHIJKLM'
          DC.B       'NOPQRSTUVWXYZ'
          DC.B       '[\]^_`'
          dc.b       'abcdefghijklm'
          dc.b       'nopqrstuvwxyz'
          DC.B       '{|}~'
*
*  DEFINE A MACRO
*
MAC1      MACRO      W,X,Y
          LOCAL      SYM1
          MOVE       W,D1
          CMP.L      #3,\1               ; NOTE W AND \1 ARE EQUIVALENT
          Y
SYM1      EXT        D0
          ADD.\0     X,\4
S\@LOC    JMP        \@LOC2
\@LOC2    JMP        SYM1
          ENDM
*
*   DEFINE A MACRO CALLING FIRST MACRO
*
MAC2      MACRO      Z
          LOCAL      SYM1
SYM1      MAC1       A1,Z,<ADD  A1,D1>,D1
          IFNC       \2,                 ; CHECK FOR NULL PARAMETER
          ADD.\0     D1,D2
          ENDC
          ENDM
*
*  CALL THE MACROS
*
          MAC2       #9
          MAC1.L     D2,SYM1,NOP,A1      ; NOTE SYM1 IS NOT CONFUSED
                                         ; WITH LOCAL SYMBOLS ABOVE
SYM1      NOP
*
*  CHECK CONDITIONAL ASSEMBLY
*
CTRL      EQU        1
          IFEQ       CTRL-1
            MOVE       D1,A1
            ADD        #3,A1
            MOVE       (A1),D1
          ELSEC
            FAIL
          ENDC
          IFLE       CTRL
            IFNE       CTRL+5
              MOVE       A1,A0
              ADD        #$FFFF,A1
            ELSEC
              FAIL
            ENDC
          ELSEC
            EXT        D2
            MOVE       #0,A0
          ENDC
*
*  DISPLAY STRUCTURED SYNTAX
*
          WHILE.L <LE> AND.W (A2) <NE> #0 DO.S
            MOVE.L (A1)+,(A2)+
            CMP.L ARRAY+OFF3,A1
          ENDW
;
          REPEAT
            MOVE.L (A1)+,(A2)+
            CMP.L ARRAY+OFF3,A1
          UNTIL.L <GT> OR.W (A2) <EQ> #0
;
          FOR D1 = #0 TO #ARRAY+OFF3 BY #4 DO.S
            MOVE.L (A1)+,(A2)+
            IF.W (A2) <EQ> #0 THEN.S
              BREAK.S
            ELSE.S
              NEXT
            ENDI
          ENDF
;
          IF.L D1 <EQ> #3 THEN.S
            MOVE.L #0,D1
            ADD.L #1,D0
          ELSE.S
            ADD.L #0,D1
          ENDI

NINECHARS EQU        3             ;SHOW EFFECT OF SYMBOL LENGTH ON LISTING
*
*         DEMONSTRATE 68020 INSTRUCTIONS
*
          ORG $1000
          OPT P=68020      ; ALLOW WARNING FREE ASSEMBLY
          BCC *+$1000000    ; 32 BIT DISPLACEMENT
          BKPT #4
          CALLM #17,(A3)
          CAS D0,D1,(A3)
          CHK.L (A3),D0
          CHK.W (A3),D0
          CHK (A3),D0
          CHK2 (A3),D0
          CHK2.B (A3),D0
          CHK2.W (A3),D0
          CHK2.L (A3),D0
          CMP2 (A3),D0
          CMP2.B (A3),D0
          CMP2.W (A3),D0
          CMP2.L (A3),D0
          EXT D0
          EXT.W D0
          EXT.L D0
          EXTB.W D0
          EXTB.L D0
          EXTW.L D0
          LINK A1,#16000
          LINK.W A1,#16000
          LINK.L A1,#16000
          MOVEC A1,CACR
          MOVEC A1,CAAR
          MOVEC A1,VBR
          MOVEC A1,USP
          MOVEC A1,MSP
          MOVEC A1,ISP
          PACK D1,D2,#33
          PACK -(A1),-(A2),#33
          PACK -(A1),-(A2)
          PACK D1,D2
          RTM A1
          TCC                    ; equivalent to TRAPcc, no argument allowed
          TPCC #3                ; equivalent to TRAPcc, argument required
          TPCC.W #3
          TPCC.L #3
          TRAPCC
          TRAPCC #3
          TRAPCC.W #3
          TRAPCC.L #3
          UNPK -(A1),-(A2),#33
          UNPK D1,D2,#33
          UNPK -(A1),-(A2)
          UNPK D1,D2
          BFCHG (A1){5:8}
          BFCLR (A1){5:8}
          BFEXTS (A1){5:8},D2
          BFEXTU (A1){5:8},D2
          BFFFO (A1){5:8},D2
          BFINS D2,(A1){5:8}
          BFSET (A1){5:8}
          BFTST (A1){5:8}
          BFCHG (A1){D1:D2}
          BFCLR (A1){D1:D2}
          BFEXTS (A1){D1:D2},D3
          BFEXTU (A1){D1:D2},D3
          BFFFO (A1){D1:D2},D3
          BFINS D3,(A1){D1:D2}
          BFSET (A1){D1:D2}
          BFTST (A1){D1:D2}
          DIVS.L (A2),D0          ; 64/32 bits, as per Motorola assembler
                                  ; manual (contradicts User manual)
          DIVS.L (A2),D0:D0
          DIVS.L (A2),D0:D1
          TDIVS.L (A2),D0         ; equivalent to DIVSL
          TDIVS.L (A2),D0:D0
          TDIVS.L (A2),D0:D1
          DIVU.L (A2),D0
          DIVU.L (A2),D0:D0
          DIVU.L (A2),D0:D1
          TDIVU.L (A2),D0
          TDIVU.L (A2),D0:D0
          TDIVU.L (A2),D0:D1
          MULS.L (A0),D0
          MULS.L (A0),D0:D0
          MULS.L (A0),D0:D1
          MULU.L (A0),D0
          MULU.L (A0),D0:D0
          MULU.L (A0),D0:D1
          CAS2.B D1:D2,D3:D4,(D5):(D6)    ; Illegal as of 68020 User's
                                          ; manual 2nd edition - change
                                          ; from 1st edition
          CAS2.W D1:D2,D3:D4,(A5):(A6)
          CAS2.L D1:D2,D3:D4,(D5):(A6)
          CAS2   D1:D2,D3:D4,(A5):(D6)
;
;  New addressing modes
;
          MOVE ($7FF,A2,D3.L*4),D0
          MOVE ((2).L,[$7FF,A2],D3.L*4),D0  ; explicit longword displacement
          MOVE (D3.L*4,[A2,$7FF],(2).L),D0  ; same as previous example
          MOVE ([A2,$7FF,D3.L*8],2),D0      ; default: word displacement
;
; By default, absolute values with PC are considered as displacements
; rather than addresses. The OPT ABSPCADD switch overrides this.
;
          MOVE ($7FF,PC,D3.L*8),D0
          MOVE ([$7FF,PC],D3.L*8,(2).L),D0
          MOVE ([$7FF,PC,D3.L*8],(2).L),D0
          opt abspcadd
          MOVE ($7FF,PC,D3.L*8),D0
          MOVE ([$7FF,PC],D3.L*8,(2).L),D0
          MOVE ([$7FF,PC,D3.L*8],(2).L),D0
;
; Demonstrate 68881 floating point instructions and constants
;
ONE	  FEQU	1.0
PI	  FEQU	3.14159
NINES	  FEQU	0.999999999999999999999999999999999
HEXONE	  FEQU	:3F8

	  FABS.B D3,FP6
	  FABS.W D3,FP6
	  FABS.L D3,FP6
	  FABS.S (A3),FP6
	  FABS.D (A3),FP6
	  FABS.X (A3),FP6
	  FABS.P (A3),FP6
    	  FABS.L FP3,FP7
    	  FABS.X FP3
	  FACOS FP3
	  FASIN FP3
	  FATAN FP3
	  FATANH FP3
	  FCOS FP3
	  FCOSH FP3
	  FETOX FP3
	  FETOXM1 FP3
	  FGETEXP FP3
	  FGETMAN FP3
	  FINT FP3
	  FINTRZ FP3
	  FLOGN FP3
	  FLOGNP1 FP3
	  FLOG10 FP3
	  FLOG2 FP3
	  FNEG FP3
	  FSIN FP3
	  FSINH FP3
	  FSQRT FP3
	  FTAN FP3
	  FTANH FP3
	  FTENTOX FP3
	  FTWOTOX FP3
	  FSINCOS.B D3,FP3:FP7
	  FSINCOS.W D3,FP3:FP7
	  FSINCOS.L D3,FP3:FP7
	  FSINCOS.S (A3),FP3:FP7
	  FSINCOS.D (A3),FP3:FP7
	  FSINCOS.X (A3),FP3:FP7
	  FSINCOS.P (A3),FP3:FP7
	  FADD.B D3,FP6
    	  FADD.X FP3,FP6
	  FCMP FP3,FP6
	  FDIV FP3,FP6
	  FMOD FP3,FP6
	  FMUL FP3,FP6
	  FREM FP3,FP6
	  FSCALE FP3,FP6
	  FSGLDIV.S FP3,FP6
	  FSGLMUL.S FP3,FP6
    	  FSUB FP3,FP6
	  FNOP
	  FBEQ.W FORREF
	  FBF FORREF
	  FBGE FORREF
	  FBGL FORREF
	  FBGLE FORREF
	  FBGT FORREF
	  FBLE FORREF
	  FBLT FORREF
	  FBNE FORREF
	  FBNEQ FORREF
	  FBNGE FORREF
	  FBNGL FORREF
	  FBNGLE FORREF
	  FBNGT FORREF
	  FBNLE FORREF
	  FBNLT FORREF
	  FBOGE FORREF
	  FBOGL FORREF
	  FBOGT FORREF
	  FBOLE FORREF
	  FBOLT FORREF
	  FBOR FORREF
	  FBSEQ FORREF
	  FBSF FORREF
	  FBSNE FORREF
	  FBSNEQ FORREF
	  FBST FORREF
	  FBT FORREF
	  FBUEQ FORREF
	  FBUGE FORREF
	  FBUGT FORREF
	  FBULE FORREF
	  FBULT FORREF
	  FBUN FORREF
	  FDBEQ D3,FORREF
	  FDBF D3,FORREF
	  FDBGE D3,FORREF
	  FDBGL D3,FORREF
	  FDBGLE D3,FORREF
	  FDBGT D3,FORREF
	  FDBLE D3,FORREF
	  FDBLT D3,FORREF
	  FDBNE D3,FORREF
	  FDBNEQ D3,FORREF
	  FDBNGE D3,FORREF
	  FDBNGL D3,FORREF
	  FDBNGLE D3,FORREF
	  FDBNGT D3,FORREF
	  FDBNLE D3,FORREF
	  FDBNLT D3,FORREF
	  FDBOGE D3,FORREF
	  FDBOGL D3,FORREF
	  FDBOGT D3,FORREF
	  FDBOLE D3,FORREF
	  FDBOLT D3,FORREF
	  FDBOR D3,FORREF
	  FDBSEQ D3,FORREF
	  FDBSF D3,FORREF
	  FDBSNE D3,FORREF
	  FDBSNEQ D3,FORREF
	  FDBST D3,FORREF
	  FDBT D3,FORREF
	  FDBUEQ D3,FORREF
	  FDBUGE D3,FORREF
	  FDBUGT D3,FORREF
	  FDBULE D3,FORREF
	  FDBULT D3,FORREF
	  FDBUN D3,FORREF
FORREF:
	  FMOVE.B D3,FP6
      	  FMOVE.S #1.0,FP3
	  FMOVE.D #1.0,FP3
	  FMOVE.X #1.0,FP3
	  FMOVE.S #ONE,FP3
	  FMOVE.D #ONE,FP3
	  FMOVE.X #ONE,FP3
	  FMOVE.S #-1.0,FP3
	  FMOVE.D #-1.0,FP3
	  FMOVE.X #-1.0,FP3
	  FMOVE.S #-ONE,FP3
	  FMOVE.D #-ONE,FP3
	  FMOVE.X #-ONE,FP3
	  FMOVE.S #:3F800,FP3
	  FMOVE.D #:3F800,FP3
	  FMOVE.X #:3F800,FP3
	  FMOVE.S #HEXONE,FP3
	  FMOVE.D #HEXONE,FP3
	  FMOVE.X #HEXONE,FP3
	  FMOVE.S #-:3F800,FP3
	  FMOVE.D #-:3F800,FP3
	  FMOVE.X #-:3F800,FP3
	  FMOVE.S #-HEXONE,FP3
	  FMOVE.D #-HEXONE,FP3
	  FMOVE.X #-HEXONE,FP3
	  MOVE.L #1.0,D4	; real value not valid in regular instruction

	  DC.S HEXONE,HEXONE
	  DC.D :3FF0000000000000000000000,HEXONE
	  DC.X ONE,'ABCDEF',ONE
	  DC.X 1.000000000000000,+3.14159,-PI
	  DC.X NINES,+PI
	  DC.S ONE
	  DC.S ONE
	  DC.S NINES
	  DC.D ONE
	  DC.D 1.000000000000000
	  DC.D NINES
	  DC.X PI,NINES,3.3E1000
	  DC.S PI,NINES,3.3E100		; too big
	  DC.D PI,0.999999,3.3E20

	  FMOVECR.X #$1A,FP3
FPREGS    REG FP1-FP3/FP5-FP7	; define floating point register list
	  FMOVEM.X (A3)+,FP1-FP3/FP5-FP7
    	  FMOVEM.L IADDR/STATUS/CONTROL,(A3)
	  FRESTORE (A3)+
	  FSAVE -(A3)
	  FSEQ.B (A3)
	  FSF.B (A3)
	  FSGE.B (A3)
	  FSGL.B (A3)
	  FSGLE.B (A3)
	  FSGT.B (A3)
	  FSLE.B (A3)
	  FSLT.B (A3)
	  FSNE.B (A3)
	  FSNEQ.B (A3)
	  FSNGE.B (A3)
	  FSNGL.B (A3)
	  FSNGLE.B (A3)
	  FSNGT.B (A3)
	  FSNLE.B (A3)
	  FSNLT.B (A3)
	  FSOGE.B (A3)
	  FSOGL.B (A3)
	  FSOGT.B (A3)
	  FSOLE.B (A3)
	  FSOLT.B (A3)
	  FSOR.B (A3)
	  FSSEQ.B (A3)
	  FSSF.B (A3)
	  FSSNE.B (A3)
	  FSSNEQ.B (A3)
	  FSST.B (A3)
	  FST.B (A3)
	  FSUEQ.B (A3)
	  FSUGE.B (A3)
	  FSUGT.B (A3)
	  FSULE.B (A3)
	  FSULT.B (A3)
	  FSUN.B (A3)
	  FTEST.B (A3)
	  FTEST.P (A3)
	  FTST.B (A3)
	  FTST.P (A3)
	  FTPEQ.W #123
	  FTPF.W #123
	  FTPGE.W #123
	  FTPGL.W #123
	  FTPGLE.W #123
	  FTPGT.W #123
	  FTPLE.W #123
	  FTPLT.W #123
	  FTPNE.W #123
	  FTPNEQ.W #123
	  FTPNGE.W #123
	  FTPNGL.W #123
	  FTPNGLE.W #123
	  FTPNGT.W #123
	  FTPNLE.W #123
	  FTPNLT.W #123
	  FTPOGE.W #123
	  FTPOGL.W #123
	  FTPOGT.W #123
	  FTPOLE.W #123
	  FTPOLT.W #123
	  FTPOR.W #123
	  FTPSF.W #123
	  FTPSNE.W #123
	  FTPSNEQ.W #123
	  FTPST.W #123
	  FTPT.W #123
	  FTPUEQ.W #123
	  FTPUGE.W #123
	  FTPUGT.W #123
	  FTPULE.W #123
	  FTPULT.W #123
	  FTPUN.W #123
	  FTPEQ.L #123
	  FTPF.L #123
	  FTPUN.L #123
	  FTEQ
	  FTF
	  FTGE
	  FTGL
	  FTGLE
	  FTGT
	  FTLE
	  FTLT
	  FTNE
	  FTNEQ
	  FTNGE
	  FTNGL
	  FTNGLE
	  FTNGT
	  FTNLE
	  FTNLT
	  FTOGE
	  FTOGL
	  FTOGT
	  FTOLE
	  FTOLT
	  FTOR
	  FTSEQ
	  FTSF
	  FTSNE
	  FTSNEQ
	  FTST
	  FTT
	  FTUEQ
	  FTUGE
	  FTUGT
	  FTULE
	  FTULT
	  FTUN
	  FTRAPEQ
	  FTRAPF
	  FTRAPGE
	  FTRAPGL
	  FTRAPGLE
	  FTRAPGT
	  FTRAPLE
	  FTRAPLT
	  FTRAPNE
	  FTRAPNEQ
	  FTRAPNGE
	  FTRAPNGL
	  FTRAPNGLE
	  FTRAPNGT
	  FTRAPNLE
	  FTRAPNLT
	  FTRAPOGE
	  FTRAPOGL
	  FTRAPOGT
	  FTRAPOLE
	  FTRAPOLT
	  FTRAPOR
	  FTRAPSEQ
	  FTRAPSF
	  FTRAPSNE
	  FTRAPSNEQ
	  FTRAPST
	  FTRAPT
	  FTRAPUEQ
	  FTRAPUGE
	  FTRAPUGT
	  FTRAPULE
	  FTRAPULT
	  FTRAPUN

          END        RVAL1
