OpenCores
URL https://opencores.org/ocsvn/rf68000/rf68000/trunk

Subversion Repositories rf68000

[/] [rf68000/] [trunk/] [software/] [examples/] [cputest.asm] - Rev 3

Compare with Previous | Blame | View Log

** @name cputest.s Tests 68000 cpu
*
* Based on https://github.com/MicroCoreLabs/Projects/blob/master/MCL68/MC68000_Test_Code/MC68000_test_all_opcodes.X68
*
* Converted into a CD-i system ROM image by CD-i Fan:
* - comment lines must start in first column
* - replaced org instructions by suitable rept
* - copy vectors to low memory at startup
* - replaced jsr/jmp by bsr/bra for position independence
* - replaced move.l by moveq whenever possible
* - converted branches to short form whenever possible (e.g. beq => beq.s)
* - added immediate suffix to opcodes where required (e.g. and => andi)
* The last three modifications are required to make the test work;
* apparently the original assembler was somewhat smarter then
* the Microware OS-9 assembler and did this automatically.
*
* In some cases the opcodes of the test are used as test data!
*
* Original file header follows.
*
*  File Name   :  MCL68 Opcode Tests
*  Used on     :
*  Author      :  Ted Fried, MicroCore Labs
*  Creation    :  7/14/2020
*
*   Description:
*   ============
*
*  Program to test all of the Motorola 68000's opcodes.
*
*  If failures are detected, the code will immediately loop on itself.
*  All addressing modes, data sizes, and opcode combinations are tested.
*
*  This code was developed using the Easy68K simulator where all tests passed!
*
*------------------------------------------------------------------------
*
* Modification History:
* =====================
*
* Revision 1 7/14/2020
* Initial revision
*
*
*------------------------------------------------------------------------
*
* Copyright (c) 2020 Ted Fried
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.

* Modified for rf68000 project (c) 2022 Robert Finch

*       data
*       dc.l            $0001FFFC                                               ; top of local ram area
*       dc.l            start

*    org $1000                                                                                          ; code starts at $400 in local ram
*start:
*       move.l  $FFFFFFE0,d0            ; get core number
*       cmpi.b  #2,d0
*       bne                     do_nothing

*       lea                     EXCEPTION_6,a0  * check exception vector
*       move.l  a0,6*4
*       lea                     EXCEPTION_7,a0  * TRAPV exception vector
*       move.l  a0,7*4

cpu_test:
        bsr     op_ORI_TO_CCR
        bsr     op_ORI_TO_SR
        bsr     op_EORI_TO_CCR
        bsr     op_EORI_TO_SR
        bsr     op_ANDI_TO_CCR
        bsr     op_ANDI_TO_SR
        bsr     op_BTST
        bsr     op_BCHG
        bsr     op_BCLR
        bsr     op_BSET
        bsr op_MOVEP
        bsr op_BOOL_I
        bsr op_CMP_I
        bsr op_ADD_I
        bsr op_SUB_I
        bsr op_MOVE
        bsr op_MOVE_xxx_FLAGS
        bsr op_EXT
        bsr op_SWAP
        bsr op_LEAPEA
        bsr op_TAS
        bsr op_TST
        bsr op_LINKS
        bsr op_MOVE_USP
        bsr op_CHK
        bsr op_NEGS
        bsr op_MOVEM
*       bsr op_ABCD
*       bsr op_SBCD
*       bsr op_NBCD
        bsr op_TRAPV
        bsr op_RTR
        bsr op_BSR
        bsr op_BCC
        bsr op_DBCC
        bsr op_SCC
        bsr op_ADDQ
        bsr op_SUBQ
        bsr op_MOVEQ
        bsr op_DIVU
*       bsr op_DIVS
        bsr op_OR
        bsr op_AND
        bsr op_EOR
        bsr op_CMP
        bsr op_CMPA
        bsr op_CMPM
        bsr op_ADD
        bsr op_SUB
        bsr op_ADDA
        bsr op_SUBA
        bsr op_ADDX     
        bsr op_SUBX
        bsr op_MULU
        bsr op_MULS
        bsr op_EXG
        bsr op_ROx
        bsr op_ROXx
        bsr op_SHIFTS
        bsr op_SHIFTS2

        rts
        bra ALL_DONE

* Loop here when all tests pass
*

ALL_DONE: bra.s ALL_DONE

BSR_FAR1:       move.l #$33333333,d3
                rts

;       moveq           #-1,d0
;       move.l  d0,$FD0FFF00
;do_nothing:
;       bra                     *               


* Exception Vector = 6   CHK Instruction
*
*       align   4
EXCEPTION_6:
        move.l #$EEEE0006,d6      * Set d6 to the exception vector
        rte

* Exception Vector = 7   TRAPV Instruction
*
*       align   4
EXCEPTION_7:
        move.l #$12345678,d0      * Set d6 to the exception vector
        rte

;-----------------------------------------------------------
;-----------------------------------------------------------
; OPCODE : ORI_TO_CCR
;-----------------------------------------------------------
;-----------------------------------------------------------
op_ORI_TO_CCR:

    ori.b #$FF,CCR
    bpl.s *                   ; branch if Z clear
    bne.s *                   ; branch if N clear
    bvc.s *                   ; branch if V clear
    bcc.s *                   ; branch if C clear

    move #$00,CCR
    ori.b #$00,CCR
    beq.s *                   ; branch if Z set
    bmi.s *                   ; branch if N set
    bvs.s *                   ; branch if V set
    bcs.s *                   ; branch if C set

    move.w #$2700,SR          ; Put flags back to initial value

    rts

;-----------------------------------------------------------
;-----------------------------------------------------------
; OPCODE : ORI_TO_SR
;-----------------------------------------------------------
;-----------------------------------------------------------

op_ORI_TO_SR:

    ori.w #$2FFF,SR
    bpl.s *                   * branch if Z clear
    bne.s *                   * branch if N clear
    bvc.s *                   * branch if V clear
    bcc.s *                   * branch if C clear

    move.w #$2000,SR
    ori.w #$0000,SR
    beq.s *                   * branch if Z set
    bmi.s *                   * branch if N set
    bvs.s *                   * branch if V set
    bcs.s *                   * branch if C set

    move.w #$2700,sr         * Put flags back to initial value

    rts
; 
;-----------------------------------------------------------
;-----------------------------------------------------------
; OPCODE : EORI_TO_CCR
;-----------------------------------------------------------
;-----------------------------------------------------------
op_EORI_TO_CCR:

    move #$00,CCR
    eori.b #$FF,CCR
    bpl.s *                   ; branch if Z clear
    bne.s *                   ; branch if N clear
    bvc.s *                   ; branch if V clear
    bcc.s *                   ; branch if C clear

    move #$00,CCR
    eori.b #$00,CCR
    beq.s *                   ; branch if Z set
    bmi.s *                   ; branch if N set
    bvs.s *                   ; branch if V set
    bcs.s *                   ; branch if C set

    move.w #$2700,sr           ; Put flags back to initial value

    rts



*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : EORI_TO_SR
*-----------------------------------------------------------
*-----------------------------------------------------------
op_EORI_TO_SR:

    move.w #$2000,SR
    eori.w #$0FFF,SR
    bpl.s *                   * branch if Z clear
    bne.s *                   * branch if N clear
    bvc.s *                   * branch if V clear
    bcc.s *                   * branch if C clear

    move.w #$2000,SR
    eori.w #$0000,SR
    beq.s *                   * branch if Z set
    bmi.s *                   * branch if N set
    bvs.s *                   * branch if V set
    bcs.s *                   * branch if C set

    move.w #$2700,sr          * Put flags back to initial value

    rts



*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : ANDI_TO_CCR
*-----------------------------------------------------------
*-----------------------------------------------------------
op_ANDI_TO_CCR:

    move #$FF,CCR
    andi.b #$FF,CCR
    bpl.s *                   * branch if Z clear
    bne.s *                   * branch if N clear
    bvc.s *                   * branch if V clear
    bcc.s *                   * branch if C clear

    move #$FF,CCR
    andi.b #$00,CCR
    beq.s *                   * branch if Z set
    bmi.s *                   * branch if N set
    bvs.s *                   * branch if V set
    bcs.s *                   * branch if C set

    move #$2700,SR           * Put flags back to initial value

    rts



*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : ANDI_TO_SR
*-----------------------------------------------------------
*-----------------------------------------------------------
op_ANDI_TO_SR:
    move.w #$20FF,SR
    andi.w #$FFFF,SR
    bpl.s *                   * branch if Z clear
    bne.s *                   * branch if N clear
    bvc.s *                   * branch if V clear
    bcc.s *                   * branch if C clear

    move.w #$20FF,SR
    andi.w #$FF00,SR
    beq.s *                   * branch if Z set
    bmi.s *                   * branch if N set
    bvs.s *                   * branch if V set
    bcs.s *                   * branch if C set

    move.w #$2700,sr           * Put flags back to initial value

    rts


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : BTST
*-----------------------------------------------------------
*-----------------------------------------------------------
op_BTST:

*  Bit Number.s Static

*             EA = Dn  - LONG only
            move.l #$80000001,d0      * populate test data
            btst.l #0,d0
            beq.s *               * branch if Z set
            btst.l #1,d0              *
            bne.s *               * branch if Z clear
            btst.l #31,d0             *
            beq.s *               * branch if Z set


*             EA = (An)  - BYTE only
            move.l #$00000100,a0      * point to memory to address 0x100
            move.b #$81,(a0)          * populate test data
            move.b (a0),d1            * Check to see if data in memory is 0x81
            btst.b #0,(a0)
            beq.s *               * branch if Z set
            btst.b #1,(a0)            *
            bne.s *               * branch if Z clear
            btst.b #7,(a0)            *
            beq.s *               * branch if Z set


*             EA = (An)+  - BYTE only
            move.l #$00000100,a0      * point to memory to address 0x100
            move.b #$01,(a0)+         * populate test data
            move.b #$FC,(a0)+         * populate test data
            move.b #$80,(a0)+         * populate test data
            move.l #$00000100,a0      * point to memory to address 0x100
            btst.b #0,(a0)+
            beq.s *               * branch if Z set
            btst.b #1,(a0)+           *
            bne.s *               * branch if Z clear
            btst.b #7,(a0)+           *
            beq.s *               * branch if Z set


*             EA = -(An)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.b #$80,(a0)+         * populate test data
            move.b #$FC,(a0)+         * populate test data
            move.b #$01,(a0)+         * populate test data
            move.l #$00000103,a0      * point to memory to address
            btst.b #0,-(a0)
            beq.s *               * branch if Z set
            btst.b #1,-(a0)           *
            bne.s *               * branch if Z clear
            btst.b #7,-(a0)           *
            beq.s *               * branch if Z set


*             EA = n(An)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.b #$01,(a0)+         * populate test data
            move.b #$FC,(a0)+         * populate test data
            move.b #$80,(a0)+         * populate test data
            move.l #$00000100,a0      * point to memory to address
            btst.b #0,0(a0)
            beq.s *               * branch if Z set
            btst.b #1,1(a0)           *
            bne.s *               * branch if Z clear
            btst.b #7,2(a0)           *
            beq.s *               * branch if Z set


*             EA = n(An,R.W)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.l #$00000000,a1      * point to memory to address
            move.l #$00000001,a2      * point to memory to address
            moveq  #$00000000,d0      * point to memory to address
            moveq  #$00000001,d1      * point to memory to address
            btst.b #0,0(a0,d0.w)
            beq.s *               * branch if Z set
            btst.b #1,0(a0,d1.w)      *
            bne.s *               * branch if Z clear
            btst.b #7,1(a0,d1.w)      *
            beq.s *               * branch if Z set
*             EA = n(An,R.L)  - BYTE only
            btst.b #0,0(a0,d0.l)
            beq.s *               * branch if Z set
            btst.b #1,0(a0,d1.l)      *
            bne.s *               * branch if Z clear
            btst.b #7,1(a0,d1.l)      *
            beq.s *               * branch if Z set
*             EA = n(An,A.W)  - BYTE only
            btst.b #0,0(a0,a1.w)
            beq.s *               * branch if Z set
            btst.b #1,0(a0,a2.w)      *
            bne.s *               * branch if Z clear
            btst.b #7,1(a0,a2.w)      *
            beq.s *               * branch if Z set
*             EA = n(An,A.L)  - BYTE only
            btst.b #0,0(a0,a1.l)
            beq.s *               * branch if Z set
            btst.b #1,0(a0,a2.l)      *
            bne.s *               * branch if Z clear
            btst.b #7,1(a0,a2.l)      *
            beq.s *               * branch if Z set


*             EA = x.W  - BYTE only
            btst.b #0,$0100
            beq.s *               * branch if Z set
            btst.b #1,$0101           *
            bne.s *               * branch if Z clear
            btst.b #7,$0102           *
            beq.s *               * branch if Z set


*             EA = x.L  - BYTE only
            move.l #$F100,a0      * point to memory to address 0x100
            move.b #$01,(a0)+         * populate test data
            move.b #$FC,(a0)+         * populate test data
            move.b #$80,(a0)+         * populate test data
            btst.b #0,$F100
            beq.s *               * branch if Z set
            btst.b #1,$F101       *
            bne.s *               * branch if Z clear
            btst.b #7,$F102       *
            beq.s *               * branch if Z set


*             EA = x(PC)  - BYTE only
            lea op_BTST(pc),a5
            btst.b #0,op_BTST(pc)
            bne.s *               * branch if Z clear
            btst.b #3,op_BTST0(pc)     *
            beq.s *               * branch if Z set
            btst.b #6,op_BTST12(pc)    *
            beq.s *               * branch if Z set


*             EA = n(PC,R.W)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.l #$00000000,a1      * point to memory to address
            move.l #$00000001,a2      * point to memory to address
            moveq  #$00000000,d0      * point to memory to address
            moveq  #$00000001,d1      * point to memory to address

op_BTST0:   btst.b #0,op_BTST0(pc,d0.w)
            bne.s *               * branch if Z clear

            lea op_BTST1(pc,d1.w),a5
op_BTST1:   btst.b #1,op_BTST1(pc,d1.w)      *
            beq.s *               * branch if Z set
op_BTST2:   btst.b #7,op_BTST2(pc,d1.w)      *
            bne.s *               * branch if Z clear
*             EA = n(PC,R.L)  - BYTE only
op_BTST3:   btst.b #0,op_BTST3(pc,d0.l)
            bne.s *               * branch if Z clear
op_BTST4:   btst.b #1,op_BTST4(pc,d1.l)      *
            beq.s *               * branch if Z set
op_BTST5:   btst.b #7,op_BTST5(pc,d1.l)      *
            bne.s *               * branch if Z clear
*             EA = n(PC,A.W)  - BYTE only
op_BTST6    btst.b #0,op_BTST6(pc,a1.w)
            bne.s *               * branch if Z clear
op_BTST7:   btst.b #1,op_BTST7(pc,a2.w)      *
            beq.s *               * branch if Z set
op_BTST8:   btst.b #7,op_BTST8(pc,a2.w)      *
            bne.s *               * branch if Z clear
*             EA = n(PC,A.L)  - BYTE only
op_BTST9:   btst.b #0,op_BTST9(pc,a1.l)
            bne.s *               * branch if Z clear
op_BTST10:  btst.b #1,op_BTST10(pc,a2.l)      *
            beq.s *               * branch if Z set
op_BTST11:  btst.b #7,op_BTST11(pc,a2.l)      *
op_BTST12:  bne.s *               * branch if Z clear



* Bit Number.s Dynamic

*             EA = Dn  - LONG only
            move.l #$80000001,d0      * populate test data
            move.l #0,d5              * populate bit.s number to test
            move.l #1,d6              * populate bit.s number to test
            move.l #31,d7              * populate bit.s number to test

            btst.l d5,d0
            beq.s *               * branch if Z set
            btst.l d6,d0              *
            bne.s *               * branch if Z clear
            btst.l d7,d0             *
            beq.s *               * branch if Z set


*             EA = (An)  - BYTE only
            move.l #0,d5              * populate bit.s number to test
            move.l #1,d6              * populate bit.s number to test
            move.l #7,d7              * populate bit.s number to test
            move.l #$00000100,a0      * point to memory to address 0x100
            move.b #$81,(a0)          * populate test data
            move.b (a0),d1            * Check to see if data in memory is 0x81
            btst.b d5,(a0)
            beq.s *               * branch if Z set
            btst.b d6,(a0)            *
            bne.s *               * branch if Z clear
            btst.b d7,(a0)            *
            beq.s *               * branch if Z set

* ---


*             EA = (An)+  - BYTE only
            move.l #$00000100,a0      * point to memory to address 0x100
            move.b #$01,(a0)+         * populate test data
            move.b #$FC,(a0)+         * populate test data
            move.b #$80,(a0)+         * populate test data
            move.l #$00000100,a0      * point to memory to address 0x100
            btst.b d5,(a0)+
            beq.s *               * branch if Z set
            btst.b d6,(a0)+           *
            bne.s *               * branch if Z clear
            btst.b d7,(a0)+           *
            beq.s *               * branch if Z set


*             EA = -(An)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.b #$80,(a0)+         * populate test data
            move.b #$FC,(a0)+         * populate test data
            move.b #$01,(a0)+         * populate test data
            move.l #$00000103,a0      * point to memory to address
            btst.b d5,-(a0)
            beq.s *               * branch if Z set
            btst.b d6,-(a0)           *
            bne.s *               * branch if Z clear
            btst.b d7,-(a0)           *
            beq.s *               * branch if Z set


*             EA = n(An)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.b #$01,(a0)+         * populate test data
            move.b #$FC,(a0)+         * populate test data
            move.b #$80,(a0)+         * populate test data
            move.l #$00000100,a0      * point to memory to address
            btst.b d5,0(a0)
            beq.s *               * branch if Z set
            btst.b d6,1(a0)           *
            bne.s *               * branch if Z clear
            btst.b d7,2(a0)           *
            beq.s *               * branch if Z set


*             EA = n(An,R.W)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.l #$00000000,a1      * point to memory to address
            move.l #$00000001,a2      * point to memory to address
            moveq  #$00000000,d0      * point to memory to address
            moveq  #$00000001,d1      * point to memory to address
            btst.b d5,0(a0,d0.w)
            beq.s *               * branch if Z set
            btst.b d6,0(a0,d1.w)      *
            bne.s *               * branch if Z clear
            btst.b d7,1(a0,d1.w)      *
            beq.s *               * branch if Z set
*             EA = n(An,R.L)  - BYTE only
            btst.b d5,0(a0,d0.l)
            beq.s *               * branch if Z set
            btst.b d6,0(a0,d1.l)      *
            bne.s *               * branch if Z clear
            btst.b d7,1(a0,d1.l)      *
            beq.s *               * branch if Z set
*             EA = n(An,A.W)  - BYTE only
            btst.b d5,0(a0,a1.w)
            beq.s *               * branch if Z set
            btst.b d6,0(a0,a2.w)      *
            bne.s *               * branch if Z clear
            btst.b d7,1(a0,a2.w)      *
            beq.s *               * branch if Z set
*             EA = n(An,A.L)  - BYTE only
            btst.b d5,0(a0,a1.l)
            beq.s *               * branch if Z set
            btst.b d6,0(a0,a2.l)      *
            bne.s *               * branch if Z clear
            btst.b d7,1(a0,a2.l)      *
            beq.s *               * branch if Z set


*             EA = x.W  - BYTE only
            btst.b d5,$0100
            beq.s *               * branch if Z set
            btst.b d6,$0101           *
            bne.s *               * branch if Z clear
            btst.b d7,$0102           *
            beq.s *               * branch if Z set


*             EA = x.L  - BYTE only
            move.l #$F100,a0      * point to memory to address 0x100
            move.b #$01,(a0)+         * populate test data
            move.b #$FC,(a0)+         * populate test data
            move.b #$80,(a0)+         * populate test data
            btst.b d5,$F100
            beq.s *               * branch if Z set
            btst.b d6,$F101       *
            bne.s *               * branch if Z clear
            btst.b d7,$F102       *
            beq.s *               * branch if Z set


*             EA = x(PC)  - BYTE only
            move.l #3,d6              * populate bit.s number to test
            move.l #6,d7              * populate bit.s number to test
            lea op_BTST(pc),a5
            btst.b d5,op_BTST(pc)
            bne.s *               * branch if Z clear
            btst.b d6,op_BTST0(pc)     *
            beq.s *               * branch if Z set
            btst.b d7,op_BTST12(pc)    *
            beq.s *               * branch if Z set


*             EA = n(PC,R.W)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.l #$00000000,a1      * point to memory to address
            move.l #$00000001,a2      * point to memory to address
            moveq  #$00000000,d0      * point to memory to address
            moveq  #$00000001,d1      * point to memory to address
            move.l #1,d6              * populate bit.s number to test
            move.l #7,d7              * populate bit.s number to test

op_BTST20:  btst.b d5,op_BTST20(pc,d0.w)
            beq.s *               * branch if Z set
            lea op_BTST21(pc,d1.w),a5
op_BTST21:  btst.b d6,op_BTST21(pc,d1.w)      *
            beq.s *               * branch if Z set
op_BTST22:  btst.b d7,op_BTST22(pc,d1.w)      *
            bne.s *               * branch if Z clear
*             EA = n(PC,R.L)  - BYTE only
op_BTST23:  btst.b d5,op_BTST23(pc,d0.l)
            beq.s *               * branch if Z set
op_BTST24: btst.b d6,op_BTST24(pc,d1.l)      *
            beq.s *               * branch if Z set
op_BTST25  btst.b d7,op_BTST25(pc,d1.l)      *
            bne.s *               * branch if Z clear
*             EA = n(PC,A.W)  - BYTE only
op_BTST26   btst.b d5,op_BTST26(pc,a1.w)
            beq.s *               * branch if Z set
op_BTST27:  btst.b d6,op_BTST27(pc,a2.w)      *
            beq.s *               * branch if Z set
op_BTST28:  btst.b d7,op_BTST28(pc,a2.w)      *
            bne.s *               * branch if Z clear
*             EA = n(PC,A.L)  - BYTE only
op_BTST29:  btst.b d5,op_BTST29(pc,a1.l)
            beq.s *               * branch if Z set
op_BTST30:  btst.b d6,op_BTST30(pc,a2.l)      *
            beq.s *               * branch if Z set
op_BTST31:  btst.b d7,op_BTST31(pc,a2.l)      *
op_BTST32:  bne.s *               * branch if Z clear

*             EA = #x  - BYTE only

            move.l #0,d5              * populate bit.s number to test
            move.l #3,d6              * populate bit.s number to test
            move.l #7,d7              * populate bit.s number to test

            btst.b d5,#$88
            bne.s *               * branch if Z clear
            btst.b d6,#$88
            beq.s *               * branch if Z set
            btst.b d7,#$88
            beq.s *               * branch if Z set


    rts

*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : BCHG
*-----------------------------------------------------------
*-----------------------------------------------------------
op_BCHG:


*  Bit Number.s Static

*             EA = Dn  - LONG only
            move.l #$80000001,d0      * populate test data
            bchg.l #0,d0
            beq.s *               * branch if Z set
            bchg.l #1,d0              *
            bne.s *               * branch if Z clear
            bchg.l #31,d0             *
            beq.s *               * branch if Z set
            cmpi.l #$00000002,d0
            bne.s *               * branch if Z clear


*             EA = (An)  - BYTE only
            move.l #$00000100,a0      * point to memory to address 0x100
            move.b #$81,(a0)          * populate test data
            move.b (a0),d1            * Check to see if data in memory is 0x81
            bchg.b #0,(a0)
            beq.s *               * branch if Z set
            bchg.b #1,(a0)            *
            bne.s *               * branch if Z clear
            bchg.b #7,(a0)            *
            beq.s *               * branch if Z set
            cmpi.b #$02,(a0)
            bne.s *               * branch if Z clear

*             EA = (An)+  - BYTE only
            move.l #$00000100,a0      * point to memory to address 0x100
            move.b #$01,(a0)+         * populate test data
            move.b #$FC,(a0)+         * populate test data
            move.b #$80,(a0)+         * populate test data
            move.l #$00000100,a0      * point to memory to address 0x100
            bchg.b #0,(a0)+
            beq.s *               * branch if Z set
            bchg.b #1,(a0)+           *
            bne.s *               * branch if Z clear
            bchg.b #7,(a0)+           *
            beq.s *               * branch if Z set
            move.l #$00000100,a0      * point to memory to address 0x100
            cmpi.b #$00,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$FE,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$00,(a0)+
            bne.s *               * branch if Z clear

*             EA = -(An)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.b #$80,(a0)+         * populate test data
            move.b #$FC,(a0)+         * populate test data
            move.b #$01,(a0)+         * populate test data
            move.l #$00000103,a0      * point to memory to address
            bchg.b #0,-(a0)
            beq.s *               * branch if Z set
            bchg.b #1,-(a0)           *
            bne.s *               * branch if Z clear
            bchg.b #7,-(a0)           *
            beq.s *               * branch if Z set
            move.l #$00000103,a0      * point to memory to address 0x100
            cmpi.b #$00,-(a0)
            bne.s *               * branch if Z clear
            cmpi.b #$FE,-(a0)
            bne.s *               * branch if Z clear
            cmpi.b #$00,-(a0)
            bne.s *               * branch if Z clear


*             EA = n(An)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.b #$01,(a0)+         * populate test data
            move.b #$FC,(a0)+         * populate test data
            move.b #$80,(a0)+         * populate test data
            move.l #$00000100,a0      * point to memory to address
            bchg.b #0,0(a0)
            beq.s *               * branch if Z set
            bchg.b #1,1(a0)           *
            bne.s *               * branch if Z clear
            bchg.b #7,2(a0)           *
            beq.s *               * branch if Z set
            move.l #$00000100,a0      * point to memory to address 0x100
            cmpi.b #$00,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$FE,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$00,(a0)+
            bne.s *               * branch if Z clear


*             EA = n(An,D.W)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.l #$00000000,a1      * point to memory to address
            move.l #$00000001,a2      * point to memory to address
            moveq  #$00000000,d0      * point to memory to address
            moveq  #$00000001,d1      * point to memory to address
            bchg.b #0,0(a0,d0.w)
            bne.s *               * branch if Z clear
            bchg.b #1,0(a0,d1.w)      *
            beq.s *               * branch if Z set
            bchg.b #7,1(a0,d1.w)      *
            bne.s *               * branch if Z clear
*             EA = n(An,D.L)  - BYTE only
            bchg.b #0,0(a0,d0.l)
            beq.s *               * branch if Z set
            bchg.b #1,0(a0,d1.l)      *
            bne.s *               * branch if Z clear
            bchg.b #7,1(a0,d1.l)      *
            beq.s *               * branch if Z set
*             EA = n(An,A.W)  - BYTE only
            bchg.b #0,0(a0,a1.w)
            bne.s *               * branch if Z clear
            bchg.b #1,0(a0,a2.w)      *
            beq.s *               * branch if Z set
            bchg.b #7,1(a0,a2.w)      *
            bne.s *               * branch if Z clear
*             EA = n(An,A.L)  - BYTE only
            bchg.b #0,0(a0,a1.l)
            beq.s *               * branch if Z set
            bchg.b #1,0(a0,a2.l)      *
            bne.s *               * branch if Z clear
            bchg.b #7,1(a0,a2.l)      *
            beq.s *               * branch if Z set
            move.l #$00000100,a0      * point to memory to address 0x100
            cmpi.b #$00,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$FE,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$00,(a0)+
            bne.s *               * branch if Z clear


*             EA = x.W  - BYTE only
            bchg.b #0,$0100
            bne.s *               * branch if Z clear
            bchg.b #1,$0101           *
            beq.s *               * branch if Z set
            bchg.b #7,$0102           *
            bne.s *               * branch if Z clear
            move.l #$00000100,a0      * point to memory to address 0x100
            cmpi.b #$01,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$FC,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$80,(a0)+
            bne.s *               * branch if Z clear

*             EA = x.L  - BYTE only
            move.l #$F100,a0      * point to memory to address 0x100
            move.b #$01,(a0)+         * populate test data
            move.b #$FC,(a0)+         * populate test data
            move.b #$80,(a0)+         * populate test data
            bchg.b #0,$F100
            beq.s *               * branch if Z set
            bchg.b #1,$F101       *
            bne.s *               * branch if Z clear
            bchg.b #7,$F102       *
            beq.s *               * branch if Z set
            move.l #$00000100,a0      * point to memory to address 0x100
            cmpi.b #$01,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$FC,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$80,(a0)+
            bne.s *               * branch if Z clear


* Bit Number.s Dynamic

*             EA = Dn  - LONG only
            move.l #$80000001,d0      * populate test data
            move.l #0,d5              * populate bit.s number to test
            move.l #1,d6              * populate bit.s number to test
            move.l #31,d7              * populate bit.s number to test

            bchg.l d5,d0
            beq.s *               * branch if Z set
            bchg.l d6,d0              *
            bne.s *               * branch if Z clear
            bchg.l d7,d0             *
            beq.s *               * branch if Z set
            cmpi.l #$00000002,d0
            bne.s *               * branch if Z clear


*             EA = (An)  - BYTE only
            move.l #0,d5              * populate bit.s number to test
            move.l #1,d6              * populate bit.s number to test
            move.l #7,d7              * populate bit.s number to test
            move.l #$00000100,a0      * point to memory to address 0x100
            move.b #$81,(a0)          * populate test data
            move.b (a0),d1            * Check to see if data in memory is 0x81
            bchg.b d5,(a0)
            beq.s *               * branch if Z set
            bchg.b d6,(a0)            *
            bne.s *               * branch if Z clear
            bchg.b d7,(a0)            *
            beq.s *               * branch if Z set
            cmpi.b #$02,(a0)
            bne.s *               * branch if Z clear


*             EA = (An)+  - BYTE only
            move.l #$00000100,a0      * point to memory to address 0x100
            move.b #$01,(a0)+         * populate test data
            move.b #$FC,(a0)+         * populate test data
            move.b #$80,(a0)+         * populate test data
            move.l #$00000100,a0      * point to memory to address 0x100
            bchg.b d5,(a0)+
            beq.s *               * branch if Z set
            bchg.b d6,(a0)+           *
            bne.s *               * branch if Z clear
            bchg.b d7,(a0)+           *
            beq.s *               * branch if Z set
            move.l #$00000100,a0      * point to memory to address 0x100
            cmpi.b #$00,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$FE,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$00,(a0)+
            bne.s *               * branch if Z clear

*             EA = -(An)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.b #$80,(a0)+         * populate test data
            move.b #$FC,(a0)+         * populate test data
            move.b #$01,(a0)+         * populate test data
            move.l #$00000103,a0      * point to memory to address
            bchg.b d5,-(a0)
            beq.s *               * branch if Z set
            bchg.b d6,-(a0)           *
            bne.s *               * branch if Z clear
            bchg.b d7,-(a0)           *
            beq.s *               * branch if Z set
            move.l #$00000103,a0      * point to memory to address 0x100
            cmpi.b #$00,-(a0)
            bne.s *               * branch if Z clear
            cmpi.b #$FE,-(a0)
            bne.s *               * branch if Z clear
            cmpi.b #$00,-(a0)
            bne.s *               * branch if Z clear

*             EA = n(An)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.b #$01,(a0)+         * populate test data
            move.b #$FC,(a0)+         * populate test data
            move.b #$80,(a0)+         * populate test data
            move.l #$00000100,a0      * point to memory to address
            bchg.b d5,0(a0)
            beq.s *               * branch if Z set
            bchg.b d6,1(a0)           *
            bne.s *               * branch if Z clear
            bchg.b d7,2(a0)           *
            beq.s *               * branch if Z set
            move.l #$00000100,a0      * point to memory to address 0x100
            cmpi.b #$00,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$FE,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$00,(a0)+
            bne.s *               * branch if Z clear

*             EA = n(An,R.W)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.l #$00000000,a1      * point to memory to address
            move.l #$00000001,a2      * point to memory to address
            moveq  #$00000000,d0      * point to memory to address
            moveq  #$00000001,d1      * point to memory to address
            bchg.b d5,0(a0,d0.w)
            bne.s *               * branch if Z clear
            bchg.b d6,0(a0,d1.w)      *
            beq.s *               * branch if Z set
            bchg.b d7,1(a0,d1.w)      *
            bne.s *               * branch if Z clear
*             EA = n(An,R.L)  - BYTE only
            bchg.b d5,0(a0,d0.l)
            beq.s *               * branch if Z set
            bchg.b d6,0(a0,d1.l)      *
            bne.s *               * branch if Z clear
            bchg.b d7,1(a0,d1.l)      *
            beq.s *               * branch if Z set
*             EA = n(An,A.W)  - BYTE only
            bchg.b d5,0(a0,a1.w)
            bne.s *               * branch if Z clear
            bchg.b d6,0(a0,a2.w)      *
            beq.s *               * branch if Z set
            bchg.b d7,1(a0,a2.w)      *
            bne.s *               * branch if Z clear
*             EA = n(An,A.L)  - BYTE only
            bchg.b d5,0(a0,a1.l)
            beq.s *               * branch if Z set
            bchg.b d6,0(a0,a2.l)      *
            bne.s *               * branch if Z clear
            bchg.b d7,1(a0,a2.l)      *
            beq.s *               * branch if Z set
            cmpi.b #$00,(a0)+
            bne.s *               * branch if Z clear

*             EA = x.W  - BYTE only
            bchg.b d5,$0100
            bne.s *               * branch if Z clear
            bchg.b d6,$0101           *
            beq.s *               * branch if Z set
            bchg.b d7,$0102           *
            bne.s *               * branch if Z clear
            cmpi.b #$FC,(a0)+
            bne.s *               * branch if Z clear

*             EA = x.L  - BYTE only
            move.l #$F100,a0      * point to memory to address 0x100
            move.b #$01,(a0)+         * populate test data
            move.b #$FC,(a0)+         * populate test data
            move.b #$80,(a0)+         * populate test data
            bchg.b d5,$F100
            beq.s *               * branch if Z set
            bchg.b d6,$F101       *
            bne.s *               * branch if Z clear
            bchg.b d7,$F102       *
            beq.s *               * branch if Z set
            move.l #$F101,a0      * point to memory to address 0x100
            cmpi.b #$FE,(a0)
            bne.s *               * branch if Z clear


    rts

*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : BCLR
*-----------------------------------------------------------
*-----------------------------------------------------------
op_BCLR:


*  Bit Number.s Static

*             EA = Dn  - LONG only
            move.l #$FF0000FF,d0      * populate test data
            bclr.l #0,d0
            beq.s *               * branch if Z set
            bclr.l #1,d0              *
            beq.s *               * branch if Z set
            bclr.l #15,d0             *
            bne.s *               * branch if Z clear
            bclr.l #31,d0             *
            beq.s *               * branch if Z set
            cmpi.l #$7F0000FC,d0
            bne.s *               * branch if Z clear


*             EA = (An)  - BYTE only
            move.l #$00000100,a0      * point to memory to address 0x100
            move.b #$0F,(a0)          * populate test data
            bclr.b #0,(a0)
            beq.s *               * branch if Z set
            bclr.b #7,(a0)            *
            bne.s *               * branch if Z clear
            cmpi.b #$0E,(a0)
            bne.s *               * branch if Z clear

*             EA = (An)+  - BYTE only
            move.l #$00000100,a0      * point to memory to address 0x100
            move.b #$01,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.l #$00000100,a0      * point to memory to address 0x100
            bclr.b #0,(a0)+
            beq.s *               * branch if Z set
            bclr.b #1,(a0)+           *
            bne.s *               * branch if Z clear
            move.l #$00000100,a0      * point to memory to address 0x100
            cmpi.b #$00,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$00,(a0)+
            bne.s *               * branch if Z clear


*             EA = -(An)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.b #$01,(a0)+         * populate test data
            move.b #$80,(a0)+         * populate test data
            bclr.b #7,-(a0)
            beq.s *               * branch if Z set
            bclr.b #0,-(a0)           *
            beq.s *               * branch if Z set
            move.l #$00000102,a0      * point to memory to address 0x100
            cmpi.b #$00,-(a0)
            bne.s *               * branch if Z clear
            cmpi.b #$00,-(a0)
            bne.s *               * branch if Z clear


*             EA = n(An)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.b #$FF,(a0)+         * populate test data
            move.b #$FF,(a0)+         * populate test data
            move.l #$00000100,a0      * point to memory to address
            bclr.b #0,0(a0)
            beq.s *               * branch if Z set
            bclr.b #4,1(a0)           *
            beq.s *               * branch if Z set
            move.l #$00000100,a0      * point to memory to address 0x100
            cmpi.b #$FE,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$EF,(a0)+
            bne.s *               * branch if Z clear


*             EA = n(An,D.W)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.l #$00000000,a1      * point to memory to address
            move.l #$00000001,a2      * point to memory to address
            moveq  #$00000000,d0      * point to memory to address
            moveq  #$00000001,d1      * point to memory to address
            move.b #$FF,(a0)+         * populate test data
            move.b #$FF,(a0)+         * populate test data
            move.l #$00000100,a0      * point to memory to address
            bclr.b #0,0(a0,d0.w)
            beq.s *               * branch if Z set
            bclr.b #1,0(a0,d1.w)      *
            beq.s *               * branch if Z set
            bclr.b #2,1(a0,d1.w)      *
            bne.s *               * branch if Z clear
*             EA = n(An,D.L)  - BYTE only
            bclr.b #3,0(a0,d0.l)
            beq.s *               * branch if Z set
            bclr.b #4,0(a0,d1.l)      *
            beq.s *               * branch if Z set
            bclr.b #5,1(a0,d1.l)      *
            bne.s *               * branch if Z clear
*             EA = n(An,A.W)  - BYTE only
            bclr.b #6,0(a0,a1.w)
            beq.s *               * branch if Z set
            bclr.b #1,0(a0,a2.w)      *
            bne.s *               * branch if Z clear
            bclr.b #7,1(a0,a2.w)      *
            beq.s *               * branch if Z set
*             EA = n(An,A.L)  - BYTE only
            bclr.b #0,0(a0,a1.l)
            bne.s *               * branch if Z clear
            bclr.b #0,0(a0,a2.l)      *
            beq.s *               * branch if Z set
            bclr.b #1,1(a0,a2.l)      *
            bne.s *               * branch if Z clear
            move.l #$00000100,a0      * point to memory to address 0x100
            cmpi.b #$B6,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$EC,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$59,(a0)+
            beq.s *               * branch if Z set


*             EA = x.W  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.b #$FF,(a0)+         * populate test data
            bclr.b #0,$0100
            beq.s *               * branch if Z set
            bclr.b #1,$0100           *
            beq.s *               * branch if Z set
            move.l #$00000100,a0      * point to memory to address 0x100
            cmpi.b #$FC,(a0)+
            bne.s *               * branch if Z clear


*             EA = x.L  - BYTE only
            move.l #$F100,a0      * point to memory to address 0x100
            move.b #$FF,(a0)          * populate test data
            bclr.b #0,$F100
            beq.s *               * branch if Z set
            bclr.b #1,$F100       *
            beq.s *               * branch if Z set
            bclr.b #2,$F100       *
            beq.s *               * branch if Z set
            move.l #$F100,a0      * point to memory to address 0x100
            cmpi.b #$F8,(a0)+
            bne.s *               * branch if Z clear


* Bit Number.s Dynamic

*             EA = Dn  - LONG only
            move.l #$FF00FF00,d0      * populate test data
            move.l #0,d5              * populate bit.s number to test
            move.l #1,d6              * populate bit.s number to test
            move.l #31,d7              * populate bit.s number to test

            bclr.l d5,d0
            bne.s *               * branch if Z clear
            bclr.l d6,d0              *
            bne.s *               * branch if Z clear
            bclr.l d7,d0             *
            beq.s *               * branch if Z set
            cmpi.l #$7F00FF00,d0
            bne.s *               * branch if Z clear


*             EA = (An)  - BYTE only
            move.l #0,d5              * populate bit.s number to test
            move.l #1,d6              * populate bit.s number to test
            move.l #7,d7              * populate bit.s number to test
            move.l #$00000100,a0      * point to memory to address 0x100
            move.b #$81,(a0)          * populate test data
            bclr.b d5,(a0)
            beq.s *               * branch if Z set
            bclr.b d6,(a0)            *
            bne.s *               * branch if Z clear
            bclr.b d7,(a0)            *
            beq.s *               * branch if Z set
            cmpi.b #$00,(a0)
            bne.s *               * branch if Z clear


*             EA = (An)+  - BYTE only
            move.l #$00000100,a0      * point to memory to address 0x100
            move.b #$01,(a0)+         * populate test data
            move.b #$FC,(a0)+         * populate test data
            move.b #$80,(a0)+         * populate test data
            move.l #$00000100,a0      * point to memory to address 0x100
            bclr.b d5,(a0)+
            beq.s *               * branch if Z set
            bclr.b d6,(a0)+           *
            bne.s *               * branch if Z clear
            bclr.b d7,(a0)+           *
            beq.s *               * branch if Z set
            move.l #$00000100,a0      * point to memory to address 0x100
            cmpi.b #$00,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$FC,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$00,(a0)+
            bne.s *               * branch if Z clear

*             EA = -(An)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.b #$80,(a0)+         * populate test data
            move.b #$FC,(a0)+         * populate test data
            move.b #$01,(a0)+         * populate test data
            move.l #$00000103,a0      * point to memory to address
            bclr.b d5,-(a0)
            beq.s *               * branch if Z set
            bclr.b d6,-(a0)           *
            bne.s *               * branch if Z clear
            bclr.b d7,-(a0)           *
            beq.s *               * branch if Z set
            move.l #$00000103,a0      * point to memory to address 0x100
            cmpi.b #$00,-(a0)
            bne.s *               * branch if Z clear
            cmpi.b #$FC,-(a0)
            bne.s *               * branch if Z clear
            cmpi.b #$00,-(a0)
            bne.s *               * branch if Z clear

*             EA = n(An)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.b #$01,(a0)+         * populate test data
            move.b #$FC,(a0)+         * populate test data
            move.b #$80,(a0)+         * populate test data
            move.l #$00000100,a0      * point to memory to address
            bclr.b d5,0(a0)
            beq.s *               * branch if Z set
            bclr.b d6,1(a0)           *
            bne.s *               * branch if Z clear
            bclr.b d7,2(a0)           *
            beq.s *               * branch if Z set
            move.l #$00000100,a0      * point to memory to address 0x100
            cmpi.b #$00,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$FC,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$00,(a0)+
            bne.s *               * branch if Z clear

*             EA = n(An,R.W)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.b #$FF,(a0)+         * populate test data
            move.b #$FF,(a0)+         * populate test data
            move.b #$FF,(a0)+         * populate test data
            move.l #$00000103,a0      * point to memory to address
            move.l #$00000100,a0      * point to memory to address
            move.l #$00000000,a1      * point to memory to address
            move.l #$00000001,a2      * point to memory to address
            moveq  #$00000000,d0      * point to memory to address
            moveq  #$00000001,d1      * point to memory to address
            bclr.b d5,0(a0,d0.w)
            beq.s *               * branch if Z set
            bclr.b d6,0(a0,d1.w)      *
            beq.s *               * branch if Z set
            bclr.b d7,1(a0,d1.w)      *
            beq.s *               * branch if Z set
*             EA = n(An,R.L)  - BYTE only
            bclr.b d5,0(a0,d0.l)
            bne.s *               * branch if Z clear
            bclr.b d6,0(a0,d1.l)      *
            bne.s *               * branch if Z clear
            bclr.b d7,1(a0,d1.l)      *
            bne.s *               * branch if Z clear
*             EA = n(An,A.W)  - BYTE only
            bclr.b d5,0(a0,a1.w)
            bne.s *               * branch if Z clear
            bclr.b d6,0(a0,a2.w)      *
            bne.s *               * branch if Z clear
            bclr.b d7,1(a0,a2.w)      *
            bne.s *               * branch if Z clear
*             EA = n(An,A.L)  - BYTE only
            bclr.b d5,0(a0,a1.l)
            bne.s *               * branch if Z clear
            bclr.b d6,0(a0,a2.l)      *
            bne.s *               * branch if Z clear
            bclr.b d7,1(a0,a2.l)      *
            bne.s *               * branch if Z clear
            move.l #$00000100,a0      * point to memory to address
            cmpi.b #$FE,(a0)
            bne.s *               * branch if Z clear

*             EA = x.W  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.b #$FF,(a0)+         * populate test data
            move.b #$FF,(a0)+         * populate test data
            move.b #$FF,(a0)+         * populate test data
            bclr.b d5,$0100
            beq.s *               * branch if Z set
            bclr.b d6,$0101           *
            beq.s *               * branch if Z set
            bclr.b d7,$0102           *
            beq.s *               * branch if Z set
            move.l #$00000100,a0      * point to memory to address
            cmpi.b #$FE,(a0)+
            bne.s *               * branch if Z clear

*             EA = x.L  - BYTE only
            move.l #$F100,a0      * point to memory to address 0x100
            move.b #$01,(a0)+         * populate test data
            move.b #$FC,(a0)+         * populate test data
            move.b #$80,(a0)+         * populate test data
            bclr.b d5,$F100
            beq.s *               * branch if Z set
            bclr.b d6,$F101       *
            bne.s *               * branch if Z clear
            bclr.b d7,$F102       *
            beq.s *               * branch if Z set
            move.l #$F101,a0      * point to memory to address 0x100
            cmpi.b #$FC,(a0)
            bne.s *               * branch if Z clear



    rts

*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : BSET
*-----------------------------------------------------------
*-----------------------------------------------------------
op_BSET:


*  Bit Number.s Static

*             EA = Dn  - LONG only
            moveq  #$00000000,d0      * populate test data
            bset.l #0,d0
            bne.s *               * branch if Z clear
            bset.l #1,d0              *
            bne.s *               * branch if Z clear
            bset.l #15,d0             *
            bne.s *               * branch if Z clear
            bset.l #31,d0             *
            bne.s *               * branch if Z clear
            cmpi.l #$80008003,d0
            bne.s *               * branch if Z clear


*             EA = (An)  - BYTE only
            move.l #$00000100,a0      * point to memory to address 0x100
            move.b #$00,(a0)          * populate test data
            bset.b #0,(a0)
            bne.s *               * branch if Z clear
            bset.b #7,(a0)            *
            bne.s *               * branch if Z clear
            cmpi.b #$81,(a0)
            bne.s *               * branch if Z clear

*             EA = (An)+  - BYTE only
            move.l #$00000100,a0      * point to memory to address 0x100
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.l #$00000100,a0      * point to memory to address 0x100
            bset.b #0,(a0)+
            bne.s *               * branch if Z clear
            bset.b #1,(a0)+           *
            bne.s *               * branch if Z clear
            move.l #$00000100,a0      * point to memory to address 0x100
            cmpi.b #$01,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$02,(a0)+
            bne.s *               * branch if Z clear


*             EA = -(An)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            bset.b #7,-(a0)
            bne.s *               * branch if Z clear
            bset.b #0,-(a0)           *
            bne.s *               * branch if Z clear
            move.l #$00000102,a0      * point to memory to address 0x100
            cmpi.b #$80,-(a0)
            bne.s *               * branch if Z clear
            cmpi.b #$01,-(a0)
            bne.s *               * branch if Z clear


*             EA = n(An)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.l #$00000100,a0      * point to memory to address
            bset.b #0,0(a0)
            bne.s *               * branch if Z clear
            bset.b #4,1(a0)           *
            bne.s *               * branch if Z clear
            move.l #$00000100,a0      * point to memory to address 0x100
            cmpi.b #$01,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$10,(a0)+
            bne.s *               * branch if Z clear


*             EA = n(An,D.W)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.l #$00000000,a1      * point to memory to address
            move.l #$00000004,a2      * point to memory to address
            moveq  #$00000000,d0      * point to memory to address
            moveq  #$00000001,d1      * point to memory to address
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.l #$00000100,a0      * point to memory to address
            bset.b #0,0(a0,d0.w)
            bne.s *               * branch if Z clear
            bset.b #1,0(a0,d1.w)      *
            bne.s *               * branch if Z clear
            bset.b #2,1(a0,d1.w)      *
            bne.s *               * branch if Z clear
*             EA = n(An,D.L)  - BYTE only
            bset.b #3,2(a0,d0.l)
            bne.s *               * branch if Z clear
            bset.b #4,0(a0,d1.l)      *
            bne.s *               * branch if Z clear
            bset.b #5,1(a0,d1.l)      *
            bne.s *               * branch if Z clear
*             EA = n(An,A.W)  - BYTE only
            bset.b #6,0(a0,a1.w)
            bne.s *               * branch if Z clear
            bset.b #1,0(a0,a2.w)      *
            bne.s *               * branch if Z clear
            bset.b #7,1(a0,a2.w)      *
            bne.s *               * branch if Z clear
*             EA = n(An,A.L)  - BYTE only
            bset.b #0,2(a0,a2.l)
            bne.s *               * branch if Z clear
            bset.b #0,3(a0,a2.l)      *
            bne.s *               * branch if Z clear
            bset.b #1,4(a0,a2.l)      *
            bne.s *               * branch if Z clear
            move.l #$00000100,a0      * point to memory to address 0x100
            cmpi.l #$41122C00,(a0)+
            bne.s *               * branch if Z clear
            cmpi.l #$02800101,(a0)+
            bne.s *



*             EA = x.W  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.b #$00,(a0)+         * populate test data
            bset.b #0,$0100
            bne.s *               * branch if Z clear
            bset.b #1,$0100           *
            bne.s *               * branch if Z clear
            move.l #$00000100,a0      * point to memory to address 0x100
            cmpi.b #$03,(a0)+
            bne.s *


*             EA = x.L  - BYTE only
            move.l #$F100,a0      * point to memory to address 0x100
            move.b #$00,(a0)          * populate test data
            bset.b #0,$F100
            bne.s *               * branch if Z clear
            bset.b #1,$F100       *
            bne.s *               * branch if Z clear
            bset.b #2,$F100       *
            bne.s *               * branch if Z clear
            move.l #$F100,a0      * point to memory to address 0x100
            cmpi.b #$07,(a0)+
            bne.s *


* Bit Number.s Dynamic

*             EA = Dn  - LONG only
            moveq  #$00000000,d0      * populate test data
            move.l #0,d5              * populate bit.s number to test
            move.l #1,d6              * populate bit.s number to test
            move.l #31,d7              * populate bit.s number to test

            bset.l d5,d0
            bne.s *               * branch if Z clear
            bset.l d6,d0              *
            bne.s *               * branch if Z clear
            bset.l d7,d0             *
            bne.s *               * branch if Z clear
            cmpi.l #$80000003,d0
            bne.s *               * branch if Z clear


*             EA = (An)  - BYTE only
            move.l #0,d5              * populate bit.s number to test
            move.l #1,d6              * populate bit.s number to test
            move.l #7,d7              * populate bit.s number to test
            move.l #$00000100,a0      * point to memory to address 0x100
            move.b #$00,(a0)          * populate test data
            bset.b d5,(a0)
            bne.s *               * branch if Z clear
            bset.b d6,(a0)            *
            bne.s *               * branch if Z clear
            bset.b d7,(a0)            *
            bne.s *               * branch if Z clear
            cmpi.b #$83,(a0)
            bne.s *               * branch if Z clear


*             EA = (An)+  - BYTE only
            move.l #$00000100,a0      * point to memory to address 0x100
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.l #$00000100,a0      * point to memory to address 0x100
            bset.b d5,(a0)+
            bne.s *               * branch if Z clear
            bset.b d6,(a0)+           *
            bne.s *               * branch if Z clear
            bset.b d7,(a0)+           *
            bne.s *               * branch if Z clear
            move.l #$00000100,a0      * point to memory to address 0x100
            cmpi.b #$01,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$02,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$80,(a0)+
            bne.s *               * branch if Z clear

*             EA = -(An)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.l #$00000103,a0      * point to memory to address
            bset.b d5,-(a0)
            bne.s *               * branch if Z clear
            bset.b d6,-(a0)           *
            bne.s *               * branch if Z clear
            bset.b d7,-(a0)           *
            bne.s *               * branch if Z clear
            move.l #$00000103,a0      * point to memory to address 0x100
            cmpi.b #$01,-(a0)
            bne.s *               * branch if Z clear
            cmpi.b #$02,-(a0)
            bne.s *               * branch if Z clear
            cmpi.b #$80,-(a0)
            bne.s *               * branch if Z clear

*             EA = n(An)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.l #$00000100,a0      * point to memory to address
            bset.b d5,0(a0)
            bne.s *               * branch if Z clear
            bset.b d6,1(a0)           *
            bne.s *               * branch if Z clear
            bset.b d7,2(a0)           *
            bne.s *               * branch if Z clear
            move.l #$00000100,a0      * point to memory to address 0x100
            cmpi.b #$01,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$02,(a0)+
            bne.s *               * branch if Z clear
            cmpi.b #$80,(a0)+
            bne.s *               * branch if Z clear

*             EA = n(An,R.W)  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.l #$00000100,a0      * point to memory to address
            move.l #$00000000,a1      * point to memory to address
            move.l #$00000001,a2      * point to memory to address
            moveq  #$00000000,d0      * point to memory to address
            moveq  #$00000001,d1      * point to memory to address
            bset.b d5,0(a0,d0.w)
            bne.s *               * branch if Z clear
            bset.b d6,0(a0,d1.w)      *
            bne.s *               * branch if Z clear
            bset.b d7,1(a0,d1.w)      *
            bne.s *               * branch if Z clear
*             EA = n(An,R.L)  - BYTE only
            bset.b d5,2(a0,d0.l)
            bne.s *               * branch if Z clear
            bset.b d6,3(a0,d1.l)      *
            bne.s *               * branch if Z clear
            bset.b d7,4(a0,d1.l)      *
            bne.s *               * branch if Z clear
*             EA = n(An,A.W)  - BYTE only
            bset.b d5,5(a0,a1.w)
            bne.s *               * branch if Z clear
            bset.b d6,6(a0,a2.w)      *
            bne.s *               * branch if Z clear
            bset.b d7,7(a0,a2.w)      *
            bne.s *               * branch if Z clear
*             EA = n(An,A.L)  - BYTE only
            bset.b d5,8(a0,a1.l)
            bne.s *               * branch if Z clear
            bset.b d6,9(a0,a2.l)      *
            bne.s *               * branch if Z clear
            bset.b d7,10(a0,a2.l)      *
            bne.s *               * branch if Z clear
            move.l #$00000100,a0      * point to memory to address 0x100
            cmpi.l #$01028100,(a0)+
            bne.s *               * branch if Z clear
            cmpi.l #$02810002,(a0)+
            bne.s *


*             EA = x.W  - BYTE only
            move.l #$00000100,a0      * point to memory to address
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            bset.b d5,$0100
            bne.s *               * branch if Z clear
            bset.b d6,$0100           *
            bne.s *               * branch if Z clear
            bset.b d7,$0100           *
            bne.s *               * branch if Z clear
            move.l #$00000100,a0      * point to memory to address
            cmpi.b #$83,(a0)+
            bne.s *               * branch if Z clear

*             EA = x.L  - BYTE only
            move.l #$F100,a0      * point to memory to address 0x100
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            move.b #$00,(a0)+         * populate test data
            bset.b d5,$F100
            bne.s *               * branch if Z clear
            bset.b d6,$F100       *
            bne.s *               * branch if Z clear
            bset.b d7,$F100       *
            bne.s *               * branch if Z clear
            move.l #$F100,a0      * point to memory to address 0x100
            cmpi.b #$83,(a0)
            bne.s *               * branch if Z clear


    rts

*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : MOVEP
*-----------------------------------------------------------
*-----------------------------------------------------------
op_MOVEP:

* Dn --> x(An)
            move.l #$00000100,a0
            move.l #$12345678,d0
            move.l #$AABBCCDD,d1
            move.l #0,(a0)
            move.l #0,4(a0)

            movep.w d0,0(a0)      * even offset
            movep.w d1,1(a0)      * odd offset

            movep.l d0,4(a0)      * even offset
            movep.l d1,5(a0)      * odd offset

            cmpi.l #$56CC78DD,(a0)
            bne.s *
            cmpi.l #$12AA34BB,4(a0)
            bne.s *
            cmpi.l #$56CC78DD,8(a0)
            bne.s *


* x(An)--> Dn
            move.l #$5a5a5a5a,d0
            move.l #$5a5a5a5a,d1
            move.l #$5a5a5a5a,d2
            move.l #$5a5a5a5a,d3

            movep.w 0(a0),d0      * even offset
            movep.w 1(a0),d1      * odd offset

            movep.l 4(a0),d2      * even offset
            movep.l 5(a0),d3      * odd offset

            cmpi.l #$5a5a5678,d0
            bne.s *
            cmpi.l #$5a5aCCDD,d1
            bne.s *
            cmpi.l #$12345678,d2
            bne.s *
            cmpi.l #$AABBCCDD,d3
            bne.s *

            rts



*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : BOOL_I
*-----------------------------------------------------------
*-----------------------------------------------------------
op_BOOL_I:

*     Dn -- BYTE
            move.l #$12345678,d0
            move.w #$000F,CCR          * pre-set Flags
            ori.b  #$FF,d0
            eori.b #$5A,d0
            andi.b #$F0,d0
            bvs.s *                       * Check V,C are cleared
            bcs.s *
            bpl.s *                       * Verify if N flag is set
            andi.b #$00,d0
            bmi.s *                       * Verify if N flag is cleared
            bne.s *                       * Verify if Z flag is set

*     Dn -- WORD
            move.l #$12345678,d1
            move.w #$000F,CCR          * pre-set Flags
            ori.w  #$FFFF,d1
            eori.w #$5A5A,d1
            andi.w #$F0F0,d1
            bvs.s *                       * Check V,C are cleared
            bcs.s *
            bpl.s *                       * Verify if N flag is set
            andi.w #$0000,d1
            bmi.s *                       * Verify if N flag is cleared
            bne.s *                       * Verify if Z flag is set

*     Dn -- LONG
            move.l #$12345678,d2
            move.w #$000F,CCR          * pre-set Flags
            ori.l  #$FFFFFFFF,d2
            eori.l #$5A5A5A5A,d2
            andi.l #$F0F0F0F0,d2
            bvs.s *                       * Check V,C are cleared
            bcs.s *
            bpl.s *                       * Verify if N flag is set
            andi.l #$00000000,d2
            bmi.s *                       * Verify if N flag is cleared
            bne.s *                       * Verify if Z flag is set


*     (An) -- BYTE
            move.l #$00000100,a0
            move.l #$12345678,(a0)
            move.w #$000F,CCR          * pre-set Flags
            ori.b  #$FF,(a0)
            eori.b #$5A,(a0)
            andi.b #$F0,(a0)
            bvs.s *                       * Check V,C are cleared
            bcs.s *
            bpl.s *                       * Verify if N flag is set
            andi.b #$00,(a0)
            bmi.s *                       * Verify if N flag is cleared
            bne.s *                       * Verify if Z flag is set
            cmpi.b #$00,(a0)
            bne.s *                       * Verify if Z flag is set

*     (An) -- WORD
            move.l #$12345678,(a0)
            move.w #$000F,CCR          * pre-set Flags
            ori.w  #$FFFF,(a0)
            eori.w #$5A5A,(a0)
            andi.w #$F0F0,(a0)
            bvs.s *                       * Check V,C are cleared
            bcs.s *
            bpl.s *                       * Verify if N flag is set
            andi.w #$0000,(a0)
            bmi.s *                       * Verify if N flag is cleared
            bne.s *                       * Verify if Z flag is set
            cmpi.w #$00,(a0)
            bne.s *                       * Verify if Z flag is set

*     (An) -- LONG
            move.l #$12345678,(a0)
            move.w #$000F,CCR          * pre-set Flags
            ori.l  #$FFFFFFFF,(a0)
            eori.l #$5A5A5A5A,(a0)
            andi.l #$F0F0F0F0,(a0)
            bvs.s *                       * Check V,C are cleared
            bcs.s *
            bpl.s *                       * Verify if N flag is set
            andi.l #$00000000,(a0)
            bmi.s *                       * Verify if N flag is cleared
            bne.s *                       * Verify if Z flag is set
            cmpi.l #$00,(a0)
            bne.s *                       * Verify if Z flag is set



*     (An)+ -- BYTE
            move.l #$00000100,a0
            move.l #$00A5FF88,(a0)
            move.w #$000F,CCR          * pre-set Flags

            ori.b  #$F5,(a0)+
            bpl.s *                       * Verify if N flag is set
            beq.s *                       * Verify if Z flag is cleared

            eori.b #$FF,(a0)+
            bmi.s *                       * Verify if N flag is cleared
            beq.s *                       * Verify if Z flag is cleared

            andi.b #$AA,(a0)+
            bpl.s *                       * Verify if N flag is set
            beq.s *                       * Verify if Z flag is cleared

            move.l #$00000100,a0
            cmpi.l #$F55AAA88,(a0)
            bne.s *                       * Verify if Z flag is set


*     (An)+ -- WORD
            move.l #$00000100,a0
            move.l #$00000104,a1
            move.l #$00005a5a,(a0)
            move.l #$12345678,(a1)
            move.w #$000F,CCR          * pre-set Flags

            ori.w  #$5678,(a0)+
            bmi.s *                       * Verify if N flag is cleared
            beq.s *                       * Verify if Z flag is cleared

            eori.w #$FFFF,(a0)+
            bpl.s *                       * Verify if N flag is set
            beq.s *                       * Verify if Z flag is cleared

            andi.w #$A55A,(a0)+
            bmi.s *                       * Verify if N flag is cleared
            beq.s *                       * Verify if Z flag is cleared

            move.l #$00000100,a0
            cmpi.l #$5678a5a5,(a0)
            move.l #$00000104,a0
            cmpi.l #$00105678,(a0)
            bne.s *                       * Verify if Z flag is set

*     (An)+ -- LONG
            move.l #$00000100,a0
            move.l #$00000000,(a0)+
            move.l #$5a5a5a5a,(a0)+
            move.l #$FFFFFFFF,(a0)+
            move.l #$00000100,a0
            move.w #$000F,CCR          * pre-set Flags

            ori.l  #$12345678,(a0)+
            bmi.s *                       * Verify if N flag is cleared
            beq.s *                       * Verify if Z flag is cleared

            eori.l #$FFFFFFFF,(a0)+
            bpl.s *                       * Verify if N flag is set
            beq.s *                       * Verify if Z flag is cleared

            andi.l #$A5A5A55A,(a0)+
            bpl.s *                       * Verify if N flag is set
            beq.s *                       * Verify if Z flag is cleared

            move.l #$00000100,a0
            cmpi.l #$12345678,(a0)+
            cmpi.l #$a5a5a5a5,(a0)+
            cmpi.l #$a5a5a55a,(a0)+
            bne.s *                       * Verify if Z flag is set

            rts


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : BSR
*-----------------------------------------------------------
*-----------------------------------------------------------


BSR_CLOSE1:     move.l #$11111111,d1
                rts



op_BSR:         bsr BSR_CLOSE1        * Negative 8-bit.s displacement
                bsr BSR_CLOSE2        * Positive 8-bit.s displacement
                bsr.w BSR_FAR1          * Negative 16-bit.s displacement
                bsr.w BSR_FAR2          * Positive 16-bit.s displacement

                cmpi.l #$11111111,d1
                bne.s *
                cmpi.l #$22222222,d2
                bne.s *
                cmpi.l #$33333333,d3
                bne.s *
                cmpi.l #$44444444,d4
                bne.s *

                rts


BSR_CLOSE2:     move.l #$22222222,d2
                rts

*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : op_CMP_I
*-----------------------------------------------------------
*-----------------------------------------------------------
op_CMP_I:

            move.l #$00000100,a0
            move.l #$00000100,(a0)

*     REGISTER - BYTE
            move.l #$FFFFFF80,d0
            cmpi.b #$80,d0
            bne.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs

            move.l #$FFFFF000,d1
            cmpi.b #$00,d1
            bne.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs

            move.l #$FFFFFF02,d2
            cmpi.b #$FF,d2
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs

            move.l #$FFFFFF7F,d3
            cmpi.b #$FF,d3
            beq.s *                       * Check Z Flag  beq/bne
            bpl.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvc.s *                       * Check V Flag  bvc/bvs


*     REGISTER - WORD
            move.l #$FFFF8000,d0
            cmpi.w #$8000,d0
            bne.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs

            move.l #$FFF00000,d1
            cmpi.w #$0000,d1
            bne.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs

            move.l #$FFFF0002,d2
            cmpi.w #$FFFF,d2
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs

            move.l #$FFFF7FFF,d3
            cmpi.w #$FFFF,d3
            beq.s *                       * Check Z Flag  beq/bne
            bpl.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvc.s *                       * Check V Flag  bvc/bvs

*     REGISTER - LONG
            move.l #$80000000,d0
            cmpi.l #$80000000,d0
            bne.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs

            moveq  #$00000000,d1
            cmpi.l #$00000000,d1
            bne.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs

            moveq  #$00000002,d2
            cmpi.l #$FFFFFFFF,d2
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs

            move.l #$7FFFFFFF,d3
            cmpi.l #$FFFFFFFF,d3
            beq.s *                       * Check Z Flag  beq/bne
            bpl.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvc.s *                       * Check V Flag  bvc/bvs




*     EA=x(An,Dn) - BYTE
            move.l #$00000100,a0
            moveq  #$00000004,d7

            move.l #$FFFFFF80,12(a0,d7)
            move.l #$FFFFFF80,12(a0,d7)
            cmpi.b #$80,15(a0,d7)
            bne.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs

            move.l #$FFFFF000,12(a0,d7)
            cmpi.b #$00,15(a0,d7)
            bne.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs

            move.l #$FFFFFF02,12(a0,d7)
            cmpi.b #$FF,15(a0,d7)
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs

            move.l #$FFFFFF7F,12(a0,d7)
            cmpi.b #$FF,15(a0,d7)
            beq.s *                       * Check Z Flag  beq/bne
            bpl.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvc.s *                       * Check V Flag  bvc/bvs


*     EA=x(An,Dn) - WORD
            move.l #$FFFF8000,12(a0,d7)
            cmpi.w #$8000,14(a0,d7)
            bne.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs

            move.l #$FFF00000,12(a0,d7)
            cmpi.w #$0000,14(a0,d7)
            bne.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs

            move.l #$FFFF0002,12(a0,d7)
            cmpi.w #$FFFF,14(a0,d7)
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs

            move.l #$FFFF7FFF,12(a0,d7)
            cmpi.w #$FFFF,14(a0,d7)
            beq.s *                       * Check Z Flag  beq/bne
            bpl.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvc.s *                       * Check V Flag  bvc/bvs

*     EA=x(An,Dn) - LONG
            move.l #$80000000,12(a0,d7)
            cmpi.l #$80000000,12(a0,d7)
            bne.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs

            move.l #$00000000,12(a0,d7)
            cmpi.l #$00000000,12(a0,d7)
            bne.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs

            move.l #$00000002,12(a0,d7)
            cmpi.l #$FFFFFFFF,12(a0,d7)
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs

            move.l #$7FFFFFFF,12(a0,d7)
            cmpi.l #$FFFFFFFF,12(a0,d7)
            beq.s *                       * Check Z Flag  beq/bne
            bpl.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvc.s *                       * Check V Flag  bvc/bvs




            rts



*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : ADD_I
*-----------------------------------------------------------
*-----------------------------------------------------------
op_ADD_I:

*     EA = Dn  - Byte
            move.l #$12345678,d0      * populate test data
            addi.b #0,d0
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            addi.b #$10,d0
            beq.s *                       * Check Z Flag  beq/bne
            bpl.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvc.s *                       * Check V Flag  bvc/bvs
            addi.b #$A5,d0
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvc.s *                       * Check V Flag  bvc/bvs
            cmpi.b #$2D,d0
            bne.s *                       * Check Z Flag  beq/bne

*     EA = Dn  - WORD
            move.l #$12345678,d0      * populate test data
            addi.w #0,d0
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            addi.w #$7000,d0
            beq.s *                       * Check Z Flag  beq/bne
            bpl.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvc.s *                       * Check V Flag  bvc/bvs
            addi.w #$A55A,d0
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvc.s *                       * Check V Flag  bvc/bvs
            cmpi.w #$6BD2,d0
            bne.s *                       * Check Z Flag  beq/bne

*     EA = Dn  - LONG
            move.l #$12345678,d0      * populate test data
            addi.l #0,d0
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            addi.l #$F0000000,d0
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            addi.l #$855AA55A,d0
            beq.s *                       * Check Z Flag  beq/bne
            bpl.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            addi.l #$A0000000,d0
            bvc.s *                       * Check V Flag  bvc/bvs
            cmpi.l #$278EFBD2,d0
            bne.s *                       * Check Z Flag  beq/bne



*     EA = x.L  - Byte
            move.l #$F100,a0      * populate test data
            move.l #$12345678,(a0)     * populate test data
            addi.b #0,$F103
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            addi.b #$10,$F103
            beq.s *                       * Check Z Flag  beq/bne
            bpl.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvc.s *                       * Check V Flag  bvc/bvs
            addi.b #$A5,$F103
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvc.s *                       * Check V Flag  bvc/bvs
            cmpi.b #$2D,$F103
            bne.s *                       * Check Z Flag  beq/bne

*     EA = x.L- WORD
            move.l #$F100,a0      * populate test data
            move.l #$12345678,(a0)     * populate test data
            addi.w #0,$F100
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            addi.w #$7000,$F100
            beq.s *                       * Check Z Flag  beq/bne
            bpl.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvc.s *                       * Check V Flag  bvc/bvs
            addi.w #$A55A,$F100
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvc.s *                       * Check V Flag  bvc/bvs
            cmpi.w #$278E,$F100
            bne.s *                       * Check Z Flag  beq/bne

*     EA = x.L- LONG
            move.l #$12345678,$F100  * populate test data
            addi.l #0,$F100
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            addi.l #$F0000000,$F100
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            addi.l #$855AA55A,$F100
            beq.s *                       * Check Z Flag  beq/bne
            bpl.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            addi.l #$A0000000,$F100
            bvc.s *                       * Check V Flag  bvc/bvs
            cmpi.l #$278EFBD2,$F100
            bne.s *                       * Check Z Flag  beq/bne

            rts


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : SUB_I
*-----------------------------------------------------------
*-----------------------------------------------------------
op_SUB_I:

*     EA = Dn  - Byte
            move.l #$12345678,d0      * populate test data
            subi.b #0,d0
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            subi.b #$10,d0
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            subi.b #$A5,d0
            beq.s *                       * Check Z Flag  beq/bne
            bpl.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvc.s *                       * Check V Flag  bvc/bvs
            cmpi.b #$C3,d0
            bne.s *                       * Check Z Flag  beq/bne

*     EA = Dn  - WORD
            move.l #$12345678,d0      * populate test data
            subi.w #0,d0
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            subi.w #$7000,d0
            beq.s *                       * Check Z Flag  beq/bne
            bpl.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            subi.w #$A55A,d0
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            cmpi.w #$411E,d0
            bne.s *                       * Check Z Flag  beq/bne

*     EA = Dn  - LONG
            move.l #$12345678,d0      * populate test data
            subi.l #0,d0
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            subi.l #$F0000000,d0
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            subi.l #$855AA55A,d0
            beq.s *                       * Check Z Flag  beq/bne
            bpl.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvc.s *                       * Check V Flag  bvc/bvs
            subi.l #$A0000000,d0
            bvs.s *                       * Check V Flag  bvc/bvs
            cmpi.l #$FCD9B11E,d0
            bne.s *                       * Check Z Flag  beq/bne



*     EA = x.L  - Byte
            move.l #$F100,a0      * populate test data
            move.l #$12345678,(a0)     * populate test data
            subi.b #0,$F103
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            subi.b #$10,$F103
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            subi.b #$A5,$F103
            beq.s *                       * Check Z Flag  beq/bne
            bpl.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvc.s *                       * Check V Flag  bvc/bvs
            cmpi.b #$C3,$F103
            bne.s *                       * Check Z Flag  beq/bne

*     EA = x.L- WORD
            move.l #$F100,a0      * populate test data
            move.l #$12345678,(a0)     * populate test data
            subi.w #0,$F100
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            subi.w #$7000,$F100
            beq.s *                       * Check Z Flag  beq/bne
            bpl.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            subi.w #$A55A,$F100
            beq.s *                       * Check Z Flag  beq/bne
            bpl.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            cmpi.w #$FCDA,$F100
            bne.s *                       * Check Z Flag  beq/bne

*     EA = x.L- LONG
            move.l #$12345678,$F100  * populate test data
            subi.l #0,$F100
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcs.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            subi.l #$F0000000,$F100
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvs.s *                       * Check V Flag  bvc/bvs
            subi.l #$855AA55A,$F100
            beq.s *                       * Check Z Flag  beq/bne
            bpl.s *                       * Check N Flag  bmi/bpl
            bcc.s *                       * Check C Flag  bcc/bcs
            bvc.s *                       * Check V Flag  bvc/bvs
            subi.l #$A0000000,$F100
            bvs.s *                       * Check V Flag  bvc/bvs
            cmpi.l #$FCD9B11E,$F100
            bne.s *                       * Check Z Flag  beq/bne

            rts



*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : MOVE
*-----------------------------------------------------------
*-----------------------------------------------------------
op_MOVE:
            move.l #$11223344,d0
            move.l #$55667788,d1
            move.l #$8899aabb,d2
            move.l #$ccddeeff,d3
            moveq  #$00000000,d4
            moveq  #$00000000,d5
            moveq  #$00000000,d6
            moveq  #$00000000,d7
            move.l #$44332211,a0
            move.l #$88776655,a1
            move.l #$bbaa9988,a2
            move.l #$ffeeddcc,a3

            move.b d0,d4              * BYTE - DATA REGISTER
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            cmpi.l #$00000044,d4
            bne.s *                       * Check Z Flag  beq/bne

            move.w d1,d5              * WORD - DATA REGISTER
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            cmpi.l #$00007788,d5
            bne.s *                       * Check Z Flag  beq/bne

            move.l d2,d6              * LONG - DATA REGISTER
            beq.s *                       * Check Z Flag  beq/bne
            bpl.s *                       * Check N Flag  bmi/bpl
            cmpi.l #$8899aabb,d6
            bne.s *                       * Check Z Flag  beq/bne

            move.w a1,d5              * WORD - ADDRESS REGISTER
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            cmpi.l #$00006655,d5
            bne.s *                       * Check Z Flag  beq/bne

            move.l a2,d6              * LONG - ADDRESS REGISTER
            beq.s *                       * Check Z Flag  beq/bne
            bpl.s *                       * Check N Flag  bmi/bpl
            cmpi.l #$bbaa9988,d6
            bne.s *                       * Check Z Flag  beq/bne


            movea.w d2,a4             * WORD - ADDRESS REGISTER as SOURCE ## MOVEA
            cmpa.l d2,a4
            beq.s *                       * Check Z Flag  beq/bne ## comopare fails because A4 was sign extended

            movea.l d1,a5             * LONG - ADDRESS REGISTER as SOURCE ## MOVEA
            cmpa.l d1,a5
            bne.s *                       * Check Z Flag  beq/bne



*   Too mamy EA combinations to test,so we focus on a few of the more complicted EA's

            move.l #$11223344,d0
            move.l #$00010100,d1
            move.l #$8899aabb,d2
            moveq  #$00000001,d3
            moveq  #$00000000,d4
            moveq  #$00000000,d5
            moveq  #$00000000,d6
            moveq  #$00000000,d7
            move.l #$00000000,a0
            move.l #$00010100,a1

*     x(An,AL) --> x.L
            move.b #$5A,4(a0,a1.l)    * BYTE
            lea 4(a0,a1.l),a3
            move.b 4(a0,a1.l),$00010105
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            cmpi.b #$5A,5(a0,a1.l)
            bne.s *                       * Check Z Flag  beq/bne

*     x.L --> n(An,Dw)
MOVE2:      move.b  $00010105,7(a0,d1.w)    * BYTE
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            cmpi.b #$5A,7(a0,d1.w)
            bne.s *                       * Check Z Flag  beq/bne

*     x(PC,Ds) --> x.w
            move.b  MOVE1(pc,d3.w),$0100 * BYTE
            beq.s *                       * Check Z Flag  beq/bne
            bpl.s *                       * Check N Flag  bmi/bpl
            cmpi.b #$B9,1+MOVE2
            bne.s *                       * Check Z Flag  beq/bne

*     #x -->    n(An,AL)
            move.b  #$78,7(a0,d1.w)    * BYTE
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            cmpi.b #$78,7(a0,d1.w)
            bne.s *                       * Check Z Flag  beq/bne

            move.l #$11223344,d0
            move.l #$00010100,d1
            move.l #$8899aabb,d2
            moveq  #$00000002,d3
            moveq  #$00000000,d4
            moveq  #$00000000,d5
            moveq  #$00000000,d6
            moveq  #$00000000,d7
            move.l #$00000000,a0
            move.l #$00010100,a1

*     x(An,AL) --> x.L
            move.w #$5A5A,4(a0,a1.l)    * WORD
            lea 4(a0,a1.l),a4
            move.w 4(a0,a1.l),$00010104
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            cmpi.w #$5A5A,4(a0,a1.l)
            bne.s *                       * Check Z Flag  beq/bne

*     x.L --> n(An,Dw)
MOVE1:      move.w  $00010104,6(a0,d1.w)    * WORD
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            cmpi.w #$5A5A,6(a0,d1.w)
            bne.s *                       * Check Z Flag  beq/bne

*     x(PC,Ds) --> x.w
            move.w  MOVE1(pc,d3),$0100 * WORD
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            cmpi.w #$67FE,8+MOVE1
            bne.s *                       * Check Z Flag  beq/bne

*     #x -->    n(An,AL)
            move.w  #$7878,6(a0,d1.w)    * WORD
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            cmpi.w #$7878,6(a0,d1.w)
            bne.s *                       * Check Z Flag  beq/bne

* ---

            move.l #$11223344,d0
            move.l #$00010100,d1
            move.l #$8899aabb,d2
            moveq  #$00000002,d3
            moveq  #$00000000,d4
            moveq  #$00000000,d5
            moveq  #$00000000,d6
            moveq  #$00000000,d7
            move.l #$00000000,a0
            move.l #$00010100,a1

*     x(An,AL) --> x.L
            move.l #$5A5A1234,4(a0,a1.l)    * LONG
            lea 4(a0,a1.l),a4
            move.l 4(a0,a1.l),$00010104
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            cmpi.l #$5A5A1234,4(a0,a1.l)
            bne.s *                       * Check Z Flag  beq/bne

*     x.L --> n(An,Dw)
MOVE3:      move.l  $00010104,6(a0,d1.w)    * LONG
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            cmpi.l #$5A5A1234,6(a0,d1.w)
            bne.s *                       * Check Z Flag  beq/bne

*     x(PC,Ds) --> x.w
            move.l  MOVE3(pc,d3),$0100 * LONG
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            cmpi.l #$67FE6BFE,8+MOVE3
            bne.s *                       * Check Z Flag  beq/bne

*     #x -->    n(An,AL)
            move.l  #$78782323,6(a0,d1.w)    * LONG
            beq.s *                       * Check Z Flag  beq/bne
            bmi.s *                       * Check N Flag  bmi/bpl
            cmpi.l #$78782323,6(a0,d1.w)
            bne.s *                       * Check Z Flag  beq/bne


         rts


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : MOVE_xxx_FLAGS
*-----------------------------------------------------------
*-----------------------------------------------------------
op_MOVE_xxx_FLAGS:

*     Move_To_SR

*     Dn

            move.w #$2FFF,d0
            move.w d0,SR
            bpl.s *           * branch if Z clear
            bne.s *           * branch if N clear
            bvc.s *           * branch if V clear
            bcc.s *           * branch if C clear
            move.w #$2F00,d0
            move d0,CCR
            beq.s *           * branch if Z set
            bmi.s *           * branch if N set
            bvs.s *           * branch if V set
            bcs.s *           * branch if C set

            move.w #$2000,d0
            move.w d0,SR
            beq.s *           * branch if Z set
            bmi.s *           * branch if N set
            bvs.s *           * branch if V set
            bcs.s *           * branch if C set

*     (An)
            move.l #$00000100,a0
            move.w #$2FFF,(a0)
            move.w (a0),SR
            bpl.s *           * branch if Z clear
            bne.s *           * branch if N clear
            bvc.s *           * branch if V clear
            bcc.s *           * branch if C clear

            move.w #$2000,(a0)
            move.w (a0),SR
            beq.s *           * branch if Z set
            bmi.s *           * branch if N set
            bvs.s *           * branch if V set
            bcs.s *           * branch if C set

*     (An)+
            move.l #$00000100,a0
            move.w #$2FFF,(a0)
            move.w (a0)+,SR
            bpl.s *           * branch if Z clear
            bne.s *           * branch if N clear
            bvc.s *           * branch if V clear
            bcc.s *           * branch if C clear

            move.w #$2000,(a0)
            move.w (a0)+,SR
            beq.s *           * branch if Z set
            bmi.s *           * branch if N set
            bvs.s *           * branch if V set
            bcs.s *           * branch if C set

*     -(An)
            move.l #$00000102,a0
            move.w #$2FFF,(a0)
            move.w (a0)+,SR
            bpl.s *           * branch if Z clear
            bne.s *           * branch if N clear
            bvc.s *           * branch if V clear
            bcc.s *           * branch if C clear

            move.w #$2000,(a0)
            move.w (a0)+,SR
            beq.s *           * branch if Z set
            bmi.s *           * branch if N set
            bvs.s *           * branch if V set
            bcs.s *           * branch if C set

*     n(An)
            move.l #$00000102,a0
            move.w #$2FFF,2(a0)
            move.w 2(a0),SR
            bpl.s *           * branch if Z clear
            bne.s *           * branch if N clear
            bvc.s *           * branch if V clear
            bcc.s *           * branch if C clear

            move.w #$2000,2(a0)
            move.w 2(a0),SR
            beq.s *           * branch if Z set
            bmi.s *           * branch if N set
            bvs.s *           * branch if V set
            bcs.s *           * branch if C set

*     n(An,Rn.l)
            move.l #$00000100,a0
            moveq  #$00000002,d0
            move.w #$2FFF,2(a0,d0.l)
            move.w 2(a0,d0.l),SR
            bpl.s *           * branch if Z clear
            bne.s *           * branch if N clear
            bvc.s *           * branch if V clear
            bcc.s *           * branch if C clear

            move.w #$2000,2(a0,d0.l)
            move.w 2(a0,d0.l),SR
            beq.s *           * branch if Z set
            bmi.s *           * branch if N set
            bvs.s *           * branch if V set
            bcs.s *           * branch if C set

*     x.W
            move.w #$2FFF,$0100
            move.w $0100,SR
            bpl.s *           * branch if Z clear
            bne.s *           * branch if N clear
            bvc.s *           * branch if V clear
            bcc.s *           * branch if C clear

            move.w #$2000,$0100
            move.w $0100,SR
            beq.s *           * branch if Z set
            bmi.s *           * branch if N set
            bvs.s *           * branch if V set
            bcs.s *           * branch if C set

*     x.L
            move.w #$2FFF,$00010100
            move.w $00010100,SR
            bpl.s *           * branch if Z clear
            bne.s *           * branch if N clear
            bvc.s *           * branch if V clear
            bcc.s *           * branch if C clear

MOVE4:      move.w #$2000,$00010100
            move.w $00010100,SR
            beq.s *           * branch if Z set
            bmi.s *           * branch if N set
            bvs.s *           * branch if V set
            bcs.s *           * branch if C set

*     x(PC)
            move.w MOVE4+2(pc),SR
            beq.s *           * branch if Z set
            bmi.s *           * branch if N set
            bvs.s *           * branch if V set
            bcs.s *           * branch if C set

*     x(PC,d0.l)
            moveq  #$00000000,d0
            move.w MOVE4+2(pc,d0.l),SR
            beq.s *           * branch if Z set
            bmi.s *           * branch if N set
            bvs.s *           * branch if V set
            bcs.s *           * branch if C set
            move MOVE4+2(pc,d0.l),CCR
            beq.s *           * branch if Z set
            bmi.s *           * branch if N set
            bvs.s *           * branch if V set
            bcs.s *           * branch if C set

*     #x
            move.w #$2FFF,SR
            bne.s *           * branch if Z clear
            bpl.s *           * branch if N clear
            bvc.s *           * branch if V clear
            bcc.s *           * branch if C clear



*  MOVE_From_SR



*     Dn
            move.w #$275A,SR          * Initial value
            move.w SR,d0
            cmpi.w #$271A,d0
* The following fails because sr bits are implemented and non-zero so later code works.           
*            bne.s *                   * branch if Z set

*     (An)
            move.l #$00000100,a0
            move.w #$275A,SR          * Initial value
            move.w SR,(a0)
            cmpi.w #$275A,(a0)
            bne.s *                   * branch if Z set

*     (An)+
            move.l #$00000100,a0
            move.w #$257A,SR          * Initial value
            move.w SR,(a0)+
            move.l #$00000100,a0
            cmpi.w #$257A,(a0)+
            bne.s *                   * branch if Z set

*     -(An)
            move.l #$00000102,a0
            move.w #$2766,SR          * Initial value
            move.w SR,-(a0)
            move.l #$00000100,a0
            cmpi.w #$2766,(a0)
            bne.s *                   * branch if Z set

*     x(An)
            move.l #$00000102,a0
            move.w #$2733,SR          * Initial value
            move.w SR,4(a0)
            cmpi.w #$2733,4(a0)
            bne.s *                   * branch if Z set

*     x(An,rn)
            move.l #$00000102,a0
            moveq  #$00000004,d0
            move.w #$275a,SR          * Initial value
            move.w SR,4(a0,d0.l)
            cmpi.w #$275a,4(a0,d0.l)
            bne.s *                   * branch if Z set

*     x.W
            move.w #$2777,SR          * Initial value
            move.w SR,$0102
            cmpi.w #$2777,$0102
            bne.s *                   * branch if Z set

*     x.L
            move.w #$2777,SR          * Initial value
            move.w SR,$10102
            cmpi.w #$2777,$10102
            bne.s *                   * branch if Z set



            move.w #$2700,SR          * Put flags back to initial value

            rts


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : EXT
*-----------------------------------------------------------
*-----------------------------------------------------------
op_EXT:

            move.l #$0000007F,d0
            move.l #$00008FFF,d1
            moveq  #$00000000,d2

            ext.w d0
            bmi.s *                   * Check N Flag  bmi/bpl
            beq.s *                   * Check Z Flag  beq/bne
            cmpi.l #$0000007F,d0
            bne.s *                   * branch if Z set

            ext.l d1
            bpl.s *                   * Check N Flag  bmi/bpl
            beq.s *                   * Check Z Flag  beq/bne
            cmpi.l #$FFFF8FFF,d1
            bne.s *                   * branch if Z set

            ext.l d2
            bne.s *                   * Check Z Flag  beq/bne



            rts


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : SWAP
*-----------------------------------------------------------
*-----------------------------------------------------------
op_SWAP:

            move.l #$12345678,d0

            swap d0
            bmi.s *                   * Check N Flag  bmi/bpl
            beq.s *                   * Check Z Flag  beq/bne
            cmpi.l #$56781234,d0
            bne.s *                   * branch if Z set



            rts


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : LEA_PEA
*-----------------------------------------------------------
*-----------------------------------------------------------
op_LEAPEA:

            move.l #$00345678,a0
            moveq  #$00000000,d4

*     (An)
            lea (a0),a6
            move.l a6,d0
            cmpi.l #$00345678,d0
            bne.s *                   * branch if Z set
            pea (a0)
            cmpi.l #$00345678,(a7)
            bne.s *                   * branch if Z set
            * This was without a specifier which the assembler defaulted to .w
            addq.l #4,a7            * Restore Stack Pointer

*     x(An)
            lea 4(a0),a6
            move.l a6,d0
            cmpi.l #$0034567C,d0
            bne.s *                   * branch if Z set
            pea 4(a0)
            cmpi.l #$0034567C,(a7)
            bne.s *                   * branch if Z set
            * This was without a specifier which the assembler defaulted to .w
            addq.l #4,a7            * Restore Stack Pointer

*     x(An,Dn.l)
            lea 4(a0,d4),a6
            move.l a6,d0
            cmpi.l #$0034567C,d0
            bne.s *                   * branch if Z set
            pea 4(a0,d4.l)
            cmpi.l #$0034567C,(a7)
            bne.s *                   * branch if Z set
            * This was without a specifier which the assembler defaulted to .w
            addq.l #4,a7            * Restore Stack Pointer

*     x.W
            lea $1234,a6
            move.l a6,d0
            cmpi.w #$1234,d0
            bne.s *                   * branch if Z set
            pea $1234
            cmpi.l #$00001234,(a7)
            bne.s *                   * branch if Z set
            * This was without a specifier which the assembler defaulted to .w
            addq.l #4,a7            * Restore Stack Pointer

*     x.L
            lea $00345678,a6
            move.l a6,d0
            cmp.l a6,d0
            bne.s *                   * branch if Z set
            pea $00345678
            cmpi.l #$00345678,(a7)
            bne.s *                   * branch if Z set
            * This was without a specifier which the assembler defaulted to .w
            addq.l #4,a7            * Restore Stack Pointer

*     x(PC)
            lea LEA1(pc),a6
            move.l a6,d0
            cmp.l a6,d0
            bne.s *                   * branch if Z set
LEA1:       pea LEA1(pc)
            cmpi.l #$0000241E,(a7)
            beq.s *                   * branch if Z clear
            * This was without a specifier which the assembler defaulted to .w
            addq.l #4,a7              * Restore Stack Pointer




            move.w #$2700,sr          * Put flags back to initial value

            rts
        


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : LEA_TAS
*-----------------------------------------------------------
*-----------------------------------------------------------
op_TAS:

*     Test just one addressing mode

            move.l #$00000100,a0

*     (An)
            move.b #$00,(a0)
            bmi.s *                   * Check N Flag  bmi/bpl
            bne.s *                   * Check Z Flag  beq/bne
            tas (a0)
            cmpi.b #$80,(a0)
            bne.s *                   * branch if Z set
            move.b #$F5,(a0)
            tas (a0)
            bpl.s *                   * Check N Flag  bmi/bpl
            beq.s *                   * Check Z Flag  beq/bne
            tas (a0)
            cmpi.b #$F5,(a0)
            bne.s *                   * branch if Z set

            rts


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : LEA_TST
*-----------------------------------------------------------
*-----------------------------------------------------------
op_TST:

*     Test just one addressing mode

            move.l #$00000100,a0

*     (An) - BYTE
            move.b #$00,(a0)
            tst.b (a0)
            bmi.s *                   * Check N Flag  bmi/bpl
            bne.s *                   * Check Z Flag  beq/bne
            move.b #$F5,(a0)
            tst.b (a0)
            bpl.s *                   * Check N Flag  bmi/bpl
            beq.s *                   * Check Z Flag  beq/bne

*     (An) - WORD
            move.w #$0000,(a0)
            tst.w (a0)
            bmi.s *                   * Check N Flag  bmi/bpl
            bne.s *                   * Check Z Flag  beq/bne
            move.w #$F567,(a0)
            tst.w (a0)
            bpl.s *                   * Check N Flag  bmi/bpl
            beq.s *                   * Check Z Flag  beq/bne

*     (An) - LONG
            move.l #$00000000,(a0)
            tst.l (a0)
            bmi.s *                   * Check N Flag  bmi/bpl
            bne.s *                   * Check Z Flag  beq/bne
            move.l #$F56789ab,(a0)
            tst.l (a0)
            bpl.s *                   * Check N Flag  bmi/bpl
            beq.s *                   * Check Z Flag  beq/bne


            rts


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : LINKS
*-----------------------------------------------------------
*-----------------------------------------------------------
op_LINKS:

            move.l #$11223344,a0
            move.l #$11223344,d0
            link a0,#$0
            cmpi.l #$11223344,(a7)

            unlk a0
            cmp.l d0,a0
            bne.s *                   * branch if Z set

            rts

*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : MOVE_USP
*-----------------------------------------------------------
*-----------------------------------------------------------
op_MOVE_USP:

            move.l #$11223344,a0
            move a0,USP
            move USP,a1
            cmp.l a0,a1
            bne.s *                   * branch if Z set

            rts


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : CHK
*-----------------------------------------------------------
*-----------------------------------------------------------
op_CHK:
            move.w #$1122,d0
            move.w #$1122,d1
            chk d0,d1

            nop
            nop

            move.w #$1122,d1
            chk #$1122,d1

            move.w #$1122,d1
            chk #00122,d1
            cmp.l #$EEEE0006,d6
            bne.s *                   * branch if Z set

            move.w #$1122,d0
            move.w #$8000,d1
            chk d0,d1
            cmp.l #$EEEE0006,d6
            bne.s *                   * branch if Z set

            rts


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : NEGS
*-----------------------------------------------------------
*-----------------------------------------------------------
op_NEGS:

*     NOT - BYTE
            move.l #$00000100,a0
            moveq  #$00000000,d0
            not.b d0
            bpl.s *                   * Check N Flag  bmi/bpl
            beq.s *                   * Check Z Flag  beq/bne
            not.b d0
            bmi.s *                   * Check N Flag  bmi/bpl
            bne.s *                   * Check Z Flag  beq/bne
            cmpi.b #$00,d0
            bne.s *                   * Check Z Flag  beq/bne
            move.b #$80,(a0)
            not.b (a0)
            bmi.s *                   * Check N Flag  bmi/bpl
            beq.s *                   * Check Z Flag  beq/bne
            not.b (a0)
            bpl.s *                   * Check N Flag  bmi/bpl
            beq.s *                   * Check Z Flag  beq/bne
            cmpi.b #$80,(a0)
            bne.s *                   * Check Z Flag  beq/bne

*     NOT - WORD
            move.l #$00000100,a0
            moveq  #$00000000,d0
            not.w d0
            bpl.s *                   * Check N Flag  bmi/bpl
            beq.s *                   * Check Z Flag  beq/bne
            not.w d0
            bmi.s *                   * Check N Flag  bmi/bpl
            bne.s *                   * Check Z Flag  beq/bne
            cmpi.w #$0000,d0
            bne.s *                   * Check Z Flag  beq/bne
            move.w #$5a5a,(a0)
            not.w (a0)
            bpl.s *                   * Check N Flag  bmi/bpl
            beq.s *                   * Check Z Flag  beq/bne
            not.w (a0)
            bmi.s *                   * Check N Flag  bmi/bpl
            beq.s *                   * Check Z Flag  beq/bne
            cmpi.w #$5a5a,(a0)
            bne.s *                   * Check Z Flag  beq/bne

*     NOT - LONG
            move.l #$00000100,a0
            moveq  #$00000000,d0
            not.l d0
            bpl.s *                   * Check N Flag  bmi/bpl
            beq.s *                   * Check Z Flag  beq/bne
            not.l d0
            bmi.s *                   * Check N Flag  bmi/bpl
            bne.s *                   * Check Z Flag  beq/bne
            cmpi.l #$00000000,d0
            bne.s *                   * Check Z Flag  beq/bne
            move.l #$5a5a1234,(a0)
            not.l (a0)
            bpl.s *                   * Check N Flag  bmi/bpl
            beq.s *                   * Check Z Flag  beq/bne
            not.l (a0)
            bmi.s *                   * Check N Flag  bmi/bpl
            beq.s *                   * Check Z Flag  beq/bne
            cmpi.l #$5a5a1234,(a0)
            bne.s *                   * Check Z Flag  beq/bne

* -----

*     NEG - BYTE
            move.l #$00000100,a0
            moveq  #$00000000,d0
            move.l #$00000080,d1
            neg.b d0
            bmi.s *                   * Check N Flag  bmi/bpl 0
            bne.s *                   * Check Z Flag  beq/bne 1
            bcs.s *                   * Check C Flag  bcc/bcs 1
            bvs.s *                   * Check V Flag  bvc/bvs 1
            neg.b d1
            bpl.s *                   * Check N Flag  bmi/bpl 1
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            bvc.s *                   * Check V Flag  bvc/bvs 0
            cmpi.b #$80,d1
            bne.s *                   * Check Z Flag  beq/bne
            move.b #$7F,(a0)
            neg.b (a0)
            bpl.s *                   * Check N Flag  bmi/bpl 1
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            bvs.s *                   * Check V Flag  bvc/bvs 1
            move.b #$F5,(a0)
            neg.b (a0)
            bmi.s *                   * Check N Flag  bmi/bpl 0
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            bvs.s *                   * Check V Flag  bvc/bvs 1
            cmpi.b #$0B,(a0)
            bne.s *                   * Check Z Flag  beq/bne

* -----

*     NEG - WORD
            move.l #$00000100,a0
            moveq  #$00000000,d0
            move.l #$00008000,d1
            neg.w d0
            bmi.s *                   * Check N Flag  bmi/bpl 0
            bne.s *                   * Check Z Flag  beq/bne 1
            bcs.s *                   * Check C Flag  bcc/bcs 1
            bvs.s *                   * Check V Flag  bvc/bvs 1
            neg.w d1
            bpl.s *                   * Check N Flag  bmi/bpl 1
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            bvc.s *                   * Check V Flag  bvc/bvs 0
            cmpi.w #$8000,d1
            bne.s *                   * Check Z Flag  beq/bne
            move.w #$7FFF,(a0)
            neg.w (a0)
            bpl.s *                   * Check N Flag  bmi/bpl 1
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            bvs.s *                   * Check V Flag  bvc/bvs 1
            move.w #$F578,(a0)
            neg.w (a0)
            bmi.s *                   * Check N Flag  bmi/bpl 0
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            bvs.s *                   * Check V Flag  bvc/bvs 1
            cmpi.w #$0A88,(a0)
            bne.s *                   * Check Z Flag  beq/bne

* -----

*     NEG - LONG
            move.l #$00000100,a0
            moveq  #$00000000,d0
            move.l #$80000000,d1
            neg.l d0
            bmi.s *                   * Check N Flag  bmi/bpl 0
            bne.s *                   * Check Z Flag  beq/bne 1
            bcs.s *                   * Check C Flag  bcc/bcs 1
            bvs.s *                   * Check V Flag  bvc/bvs 1
            neg.l d1
            bpl.s *                   * Check N Flag  bmi/bpl 1
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            bvc.s *                   * Check V Flag  bvc/bvs 0
            cmpi.l #$80000000,d1
            bne.s *                   * Check Z Flag  beq/bne
            move.l #$7FFFFFFF,(a0)
            neg.l (a0)
            bpl.s *                   * Check N Flag  bmi/bpl 1
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            bvs.s *                   * Check V Flag  bvc/bvs 1
            move.l #$F5781234,(a0)
            neg.l (a0)
            bmi.s *                   * Check N Flag  bmi/bpl 0
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            bvs.s *                   * Check V Flag  bvc/bvs 1
            cmpi.l #$0A87EDCC,(a0)
            bne.s *                   * Check Z Flag  beq/bne


* -----

*     NEGX - BYTE
            move.l #$00000100,a0
            moveq  #$00000000,d0
            move.l #$00000080,d1
            ori.b #$10,CCR        * Set X Flag
            negx.b d0
            bpl.s *                   * Check N Flag  bmi/bpl 0
            beq.s *                   * Check Z Flag  beq/bne 1
            bcc.s *                   * Check C Flag  bcc/bcs 1
            bvs.s *                   * Check V Flag  bvc/bvs 1
            andi.b #$EF,CCR       * Clear X Flag
            negx.b d0
            bmi.s *                   * Check N Flag  bmi/bpl 0
            beq.s *                   * Check Z Flag  beq/bne 1
            bcc.s *                   * Check C Flag  bcc/bcs 1
            bvs.s *                   * Check V Flag  bvc/bvs 1
            ori.b #$10,CCR        * Set X Flag
            negx.b d1
            bmi.s *                   * Check N Flag  bmi/bpl 1
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            bvs.s *                   * Check V Flag  bvc/bvs 0
            cmpi.b #$7F,d1
            bne.s *                   * Check Z Flag  beq/bne
            andi.b #$EF,CCR       * Clear X Flag
            negx.b d1
            bpl.s *                   * Check N Flag  bmi/bpl 1
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            bvs.s *                   * Check V Flag  bvc/bvs 0
            cmpi.b #$81,d1
            bne.s *                   * Check Z Flag  beq/bne
            move.b #$7F,(a0)
            ori.b #$10,CCR        * Set X Flag
            negx.b (a0)
            bpl.s *                   * Check N Flag  bmi/bpl 1
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            * I think overflow should happen here.
*            bvs.s *                   * Check V Flag  bvc/bvs 1
            move.b #$7F,(a0)
            andi.b #$EF,CCR       * Clear X Flag
            negx.b (a0)
            bpl.s *                   * Check N Flag  bmi/bpl 1
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            bvs.s *                   * Check V Flag  bvc/bvs 1
            move.b #$F5,(a0)
            ori.b #$10,CCR        * Set X Flag
            negx.b (a0)
            bmi.s *                   * Check N Flag  bmi/bpl 0
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            bvs.s *                   * Check V Flag  bvc/bvs 1
            cmpi.b #$0A,(a0)
            bne.s *                   * Check Z Flag  beq/bne
            andi.b #$EF,CCR       * Clear X Flag
            negx.b (a0)
            bpl.s *                   * Check N Flag  bmi/bpl 0
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            bvs.s *                   * Check V Flag  bvc/bvs 1
            cmpi.b #$F6,(a0)
            bne.s *                   * Check Z Flag  beq/bne



* -----

*     NEGX - WORD
            move.l #$00000100,a0
            moveq  #$00000000,d0
            move.l #$00008000,d1
            ori.b #$10,CCR        * Set X Flag
            negx.w d0
            bpl.s *                   * Check N Flag  bmi/bpl 0
            beq.s *                   * Check Z Flag  beq/bne 1
            bcc.s *                   * Check C Flag  bcc/bcs 1
            bvs.s *                   * Check V Flag  bvc/bvs 1
            andi.b #$EF,CCR       * Clear X Flag
            negx.w d0
            bmi.s *                   * Check N Flag  bmi/bpl 0
            beq.s *                   * Check Z Flag  beq/bne 1
            bcc.s *                   * Check C Flag  bcc/bcs 1
            bvs.s *                   * Check V Flag  bvc/bvs 1
            ori.b #$10,CCR        * Set X Flag
            negx.w d1
            bmi.s *                   * Check N Flag  bmi/bpl 1
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            bvs.s *                   * Check V Flag  bvc/bvs 0
            cmpi.w #$7FFF,d1
            bne.s *                   * Check Z Flag  beq/bne
            andi.b #$EF,CCR       * Clear X Flag
            negx.w d1
            bpl.s *                   * Check N Flag  bmi/bpl 1
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            bvs.s *                   * Check V Flag  bvc/bvs 0
            cmpi.w #$8001,d1
            bne.s *                   * Check Z Flag  beq/bne
            move.w #$7FFF,(a0)
            ori.b #$10,CCR        * Set X Flag
            negx.w (a0)
            bpl.s *                   * Check N Flag  bmi/bpl 1
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
***            
*            bvs.s *                   * Check V Flag  bvc/bvs 1
            move.w #$F567,(a0)
            andi.b #$EF,CCR       * Clear X Flag
            negx.w (a0)
            bmi.s *                   * Check N Flag  bmi/bpl 1
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            bvs.s *                   * Check V Flag  bvc/bvs 1
            move.w #$F567,(a0)
            ori.b #$10,CCR        * Set X Flag
            negx.w (a0)
            bmi.s *                   * Check N Flag  bmi/bpl 0
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            bvs.s *                   * Check V Flag  bvc/bvs 1
            cmpi.w #$0A98,(a0)
            bne.s *                   * Check Z Flag  beq/bne
            andi.b #$EF,CCR       * Clear X Flag
            negx.w (a0)
            bpl.s *                   * Check N Flag  bmi/bpl 0
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            bvs.s *                   * Check V Flag  bvc/bvs 1
            cmpi.w #$F568,(a0)
            bne.s *                   * Check Z Flag  beq/bne


* -----

*     NEGX - LONG
            move.l #$00000100,a0
            moveq  #$00000000,d0
            move.l #$80000000,d1
            ori.b #$10,CCR        * Set X Flag
            negx.l d0
            bpl.s *                   * Check N Flag  bmi/bpl 0
            beq.s *                   * Check Z Flag  beq/bne 1
            bcc.s *                   * Check C Flag  bcc/bcs 1
            bvs.s *                   * Check V Flag  bvc/bvs 1
            andi.b #$EF,CCR       * Clear X Flag
            negx.l d0
            bmi.s *                   * Check N Flag  bmi/bpl 0
            beq.s *                   * Check Z Flag  beq/bne 1
            bcc.s *                   * Check C Flag  bcc/bcs 1
            bvs.s *                   * Check V Flag  bvc/bvs 1
            ori.b #$10,CCR        * Set X Flag
            negx.l d1
            bmi.s *                   * Check N Flag  bmi/bpl 1
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            bvs.s *                   * Check V Flag  bvc/bvs 0
            cmpi.l #$7FFFFFFF,d1
            bne.s *                   * Check Z Flag  beq/bne
            andi.b #$EF,CCR       * Clear X Flag
            negx.l d1
            bpl.s *                   * Check N Flag  bmi/bpl 1
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
****            
*            bvs.s *                   * Check V Flag  bvc/bvs 0
            cmpi.l #$80000001,d1
            bne.s *                   * Check Z Flag  beq/bne
            move.l #$7FFF,(a0)
            ori.b #$10,CCR        * Set X Flag
            negx.l (a0)
            bpl.s *                   * Check N Flag  bmi/bpl 1
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
****            
*            bvs.s *                   * Check V Flag  bvc/bvs 1
            move.l #$F5671234,(a0)
            andi.b #$EF,CCR       * Clear X Flag
            negx.l (a0)
            bmi.s *                   * Check N Flag  bmi/bpl 1
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            bvs.s *                   * Check V Flag  bvc/bvs 1
            move.l #$F5675678,(a0)
            ori.b #$10,CCR        * Set X Flag
            negx.l (a0)
            bmi.s *                   * Check N Flag  bmi/bpl 0
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            bvs.s *                   * Check V Flag  bvc/bvs 1
            cmpi.l #$0A98A987,(a0)
            bne.s *                   * Check Z Flag  beq/bne
            andi.b #$EF,CCR       * Clear X Flag
            negx.l (a0)
            bpl.s *                   * Check N Flag  bmi/bpl 0
            beq.s *                   * Check Z Flag  beq/bne 0
            bcc.s *                   * Check C Flag  bcc/bcs 0
            bvs.s *                   * Check V Flag  bvc/bvs 1
            cmpi.l #$F5675679,(a0)
            bne.s *                   * Check Z Flag  beq/bne


* -----

*     CLR - BYTE
            move.l #$00000100,a0
            move.l #$12345678,d0
            move.l #$12345678,d1
            move.l #$12345678,d2
            move.l #$12345600,d4
            move.l #$12340000,d5
            moveq  #$00000000,d6

            clr.b d0
            bne.s *                   * Check Z Flag  beq/bne 0
            bmi.s *                   * Check N Flag  bmi/bpl 0
            cmp.l d0,d4
            bne.s *                   * Check Z Flag  beq/bne 0

            clr.w d1
            bne.s *                   * Check Z Flag  beq/bne 0
            bmi.s *                   * Check N Flag  bmi/bpl 0
            cmp.l d1,d5
            bne.s *                   * Check Z Flag  beq/bne 0

            clr.l d2
            bne.s *                   * Check Z Flag  beq/bne 0
            bmi.s *                   * Check N Flag  bmi/bpl 0
            cmp.l d2,d6
            bne.s *                   * Check Z Flag  beq/bne 0

            rts



*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : MOVEM
*-----------------------------------------------------------
*-----------------------------------------------------------
op_MOVEM:

*     WORD  Registers --> Memory
            move.l #$0000d0d0,d0
            move.l #$0000d1d1,d1
            move.l #$0000d2d2,d2
            move.l #$0000d3d3,d3
            move.l #$0000d4d4,d4
            move.l #$0000d5d5,d5
            move.l #$0000d6d6,d6
            move.l #$0000d7d7,d7
            move.l #$00000a0a,a0
            move.l #$00001a1a,a1
            move.l #$00002a2a,a2
            move.l #$00003a3a,a3
            move.l #$00004a4a,a4
            move.l #$00005a5a,a5
            move.l #$00006a6a,a6
*           move.l #$00007a7a,a7  * Dont change the Stack Pointer

            movem.w D0-D7/A0-A7,$00000100

            move.l #$00000100,a0

            cmp.w (a0)+,d0
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w (a0)+,d1
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w (a0)+,d2
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w (a0)+,d3
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w (a0)+,d4
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w (a0)+,d5
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w (a0)+,d6
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w (a0)+,d7
            bne.s *                   * Check Z Flag  beq/bne 0

            cmpi.w #$0A0A,(a0)+    * Because we are using a0 as a pointer
            bne.s *                   * Check Z Flag  beq/bne 0

            cmp.w (a0)+,a1
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w (a0)+,a2
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w (a0)+,a3
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w (a0)+,a4
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w (a0)+,a5
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w (a0)+,a6
            bne.s *                   * Check Z Flag  beq/bne 0




*     LONG  Registers --> Memory
            move.l #$d0d0d0d0,d0
            move.l #$d1d1d1d1,d1
            move.l #$d2d2d2d2,d2
            move.l #$d3d3d3d3,d3
            move.l #$d4d4d4d4,d4
            move.l #$d5d5d5d5,d5
            move.l #$d6d6d6d6,d6
            move.l #$d7d7d7d7,d7
            move.l #$0a0a0a0a,a0
            move.l #$1a1a1a1a,a1
            move.l #$2a2a2a2a,a2
            move.l #$3a3a3a3a,a3
            move.l #$4a4a4a4a,a4
            move.l #$5a5a5a5a,a5
            move.l #$6a6a6a6a,a6
*           move.l #$7a7a7a7a,a7  * Dont change the Stack Pointer


            movem.l D0-D7/A0-A7,$00000120

            move.l #$00000120,a0

            cmp.l (a0)+,d0
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l (a0)+,d1
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l (a0)+,d2
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l (a0)+,d3
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l (a0)+,d4
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l (a0)+,d5
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l (a0)+,d6
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l (a0)+,d7
            bne.s *                   * Check Z Flag  beq/bne 0

            cmpi.l #$0A0A0A0A,(a0)+    * Because we are using a0 as a pointer
            bne.s *                   * Check Z Flag  beq/bne 0

            cmp.l (a0)+,a1
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l (a0)+,a2
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l (a0)+,a3
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l (a0)+,a4
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l (a0)+,a5
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l (a0)+,a6
            bne.s *                   * Check Z Flag  beq/bne 0
*      ----


*     WORD  Registers --> Memory  -(An) EA Mode
            move.l #$0000d0d0,d0
            move.l #$0000d1d1,d1
            move.l #$0000d2d2,d2
            move.l #$0000d3d3,d3
            move.l #$0000d4d4,d4
            move.l #$0000d5d5,d5
            move.l #$0000d6d6,d6
            move.l #$0000d7d7,d7
            move.l #$00000a0a,a0
            move.l #$00001a1a,a1
            move.l #$00002a2a,a2
            move.l #$00003a3a,a3
            move.l #$00004a4a,a4
            move.l #$00005a5a,a5
            move.l #$00006a6a,a6
*           move.l #$00007a7a,a7  * Dont change the Stack Pointer

            move.l #$000001A0,a0
            movem.w D0-D7/A0-A7,-(a0)

            move.l #$0000019E,a0

            cmp.w -(a0),a6
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w -(a0),a5
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w -(a0),a4
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w -(a0),a3
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w -(a0),a2
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w -(a0),a1
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w -(a0),a0
*            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w -(a0),d7
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w -(a0),d6
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w -(a0),d5
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w -(a0),d4
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w -(a0),d3
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w -(a0),d2
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w -(a0),d1
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.w -(a0),d0
            bne.s *                   * Check Z Flag  beq/bne 0




*     LONG  Registers --> Memory   -(An) EA Mode
            move.l #$d0d0d0d0,d0
            move.l #$d1d1d1d1,d1
            move.l #$d2d2d2d2,d2
            move.l #$d3d3d3d3,d3
            move.l #$d4d4d4d4,d4
            move.l #$d5d5d5d5,d5
            move.l #$d6d6d6d6,d6
            move.l #$d7d7d7d7,d7
            move.l #$0a0a0a0a,a0
            move.l #$1a1a1a1a,a1
            move.l #$2a2a2a2a,a2
            move.l #$3a3a3a3a,a3
            move.l #$4a4a4a4a,a4
            move.l #$5a5a5a5a,a5
            move.l #$6a6a6a6a,a6
*           move.l #$7a7a7a7a,a7  * Dont change the Stack Pointer


            move.l #$000001A0,a0
            movem.l D0-D7/A0-A7,-(a0)

            move.l #$0000019C,a0

            cmp.l -(a0),a6
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l -(a0),a5
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l -(a0),a4
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l -(a0),a3
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l -(a0),a2
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l -(a0),a1
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l -(a0),a0
*            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l -(a0),d7
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l -(a0),d6
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l -(a0),d5
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l -(a0),d4
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l -(a0),d3
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l -(a0),d2
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l -(a0),d1
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l -(a0),d0
            bne.s *                   * Check Z Flag  beq/bne 0



*     ----

*     WORD - Memory --> Registers
            moveq  #$00000000,d0
            moveq  #$00000000,d1
            moveq  #$00000000,d2
            moveq  #$00000000,d3
            moveq  #$00000000,d4
            moveq  #$00000000,d5
            moveq  #$00000000,d6
            moveq  #$00000000,d7
            move.l #$00000000,a0
            move.l #$00000000,a1
            move.l #$00000000,a2
            move.l #$00000000,a3
            move.l #$00000000,a4
            move.l #$00000000,a5
            move.l #$00000000,a6
*           move.l #$00000000,a7  * Dont change the Stack Pointer

            movem.w $00000100,D0/D2/D4/D6/A1/A3/A5

            cmp.l #$FFFFD0D0,d0
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l #$FFFFD1D1,d2
            bne.s *                  * Check Z Flag  beq/bne 0
            cmp.l #$FFFFD2D2,d4
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l #$FFFFD3D3,d6
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l #$FFFFD4D4,a1
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l #$FFFFD5D5,a3
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l #$FFFFD6D6,a5
            bne.s *                   * Check Z Flag  beq/bne 0


*     LONG - Memory --> Registers
            moveq  #$00000000,d0
            moveq  #$00000000,d1
            moveq  #$00000000,d2
            moveq  #$00000000,d3
            moveq  #$00000000,d4
            moveq  #$00000000,d5
            moveq  #$00000000,d6
            moveq  #$00000000,d7
            move.l #$00000000,a0
            move.l #$00000000,a1
            move.l #$00000000,a2
            move.l #$00000000,a3
            move.l #$00000000,a4
            move.l #$00000000,a5
            move.l #$00000000,a6
*           move.l #$00000000,a7  * Dont change the Stack Pointer

            movem.l $00000120,D0/D2/D4/D6/A1/A3/A5

            cmp.l #$D0D0D0D0,d0
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l #$D1D1D1D1,d2
            bne.s *                  * Check Z Flag  beq/bne 0
            cmp.l #$D2D2D2D2,d4
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l #$D3D3D3D3,d6
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l #$D4D4D4D4,a1
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l #$D5D5D5D5,a3
            bne.s *                   * Check Z Flag  beq/bne 0
            cmp.l #$D6D6D6D6,a5
            bne.s *                   * Check Z Flag  beq/bne 0

            rts


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : ABCD
*-----------------------------------------------------------
*-----------------------------------------------------------
op_ABCD:

*     Test with X Flag CLEARED
                move.l #$00000110,a0 * Address pointer-X
                move.l #$00000120,a1 * Address pointer-Y
                moveq  #$00000000,d0 * BCD byte-X
                moveq  #$00000000,d1 * BCD byte-Y
                moveq  #$00000000,d2
                moveq  #$00000000,d3 * Cumulative -(An) BCD results
                moveq  #$00000000,d4 * Cumulative number.s of times C was set
                moveq  #$00000000,d5 * Cumulative Register BCD results
                move.l #$00000099,d6 * Inner loop counter
                move.l #$00000099,d7 * Outer loop counter

ABCD_OUTER1:    move.l d7,d0
ABCD_INNER1:    move.l d6,d1
                andi.b #$EF,CCR     * Clear X Flag
                move.l #$00000110,a0 * Address pointer-X
                move.l #$00000120,a1 * Address pointer-Y
                move.b d0,-1(a0)
                move.b d1,-1(a1)

                abcd d0,d1
                bcc.s ABCD_NO_C1          * Check C Flag  bcc/bcs 0
                add.l #1,d4
ABCD_NO_C1:     add.l d1,d5

                abcd -(a0),-(a1)
                bcc.s ABCD_NO_C2          * Check C Flag  bcc/bcs 0
                add.l #1,d4
ABCD_NO_C2:     add.b (a1),d3


                dbf d6,ABCD_INNER1
                move.l #$00000099,d6
                dbf d7,ABCD_OUTER1
                cmpi.l #$00005AFC,d4  * Check the cumulative results
                bne.s *
                cmpi.l #$001C9A34,d5
                bne.s *
                cmpi.l #$00000034,d3
                bne.s *

*     Test with X Flag SET
                move.l #$00000110,a0 * Address pointer-X
                move.l #$00000120,a1 * Address pointer-Y
                moveq  #$00000000,d0 * BCD byte-X
                moveq  #$00000000,d1 * BCD byte-Y
                moveq  #$00000000,d2
                moveq  #$00000000,d3 * Cumulative -(An) BCD results
                moveq  #$00000000,d4 * Cumulative number.s of times C was set
                moveq  #$00000000,d5 * Cumulative Register BCD results
                move.l #$00000099,d6 * Inner loop counter
                move.l #$00000099,d7 * Outer loop counter

ABCD_OUTER2:    move.l d7,d0
ABCD_INNER2:    move.l d6,d1
                ori.b #$10,CCR      * Set X Flag
                move.l #$00000110,a0 * Address pointer-X
                move.l #$00000120,a1 * Address pointer-Y
                move.b d0,-1(a0)
                move.b d1,-1(a1)

                abcd d0,d1
                bcc.s ABCD_NO_C3          * Check C Flag  bcc/bcs 0
                add.l #1,d4
ABCD_NO_C3:     add.l d1,d5

                abcd -(a0),-(a1)
                bcc.s ABCD_NO_C4          * Check C Flag  bcc/bcs 0
                add.l #1,d4
ABCD_NO_C4:     add.b (a1),d3


                dbf d6,ABCD_INNER2
                move.l #$00000099,d6
                dbf d7,ABCD_OUTER2
                cmpi.l #$00005B60,d4  * Check the cumulative results
                bne.s *
                cmpi.l #$001CCFC8,d5
                bne.s *
                cmpi.l #$00000034,d3
                bne.s *

*             Quick check of Z Flag
                move.b #$00,d0
                move.b #$00,d1
                move #$00,CCR              * Set Z flag to 0
                abcd d1,d0                  * Should NOT set Z Flag to 1
                beq.s *                       * Check Z Flag  beq/bne

                move.b #$01,d0
                move.b #$00,d1
                move #$04,CCR              * Set Z flag to 0
                abcd d1,d0                  * Should NOT set Z Flag to 1
                beq.s *                       * Check Z Flag  beq/bne

                rts

*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : SBCD
*-----------------------------------------------------------
*-----------------------------------------------------------
op_SBCD:

*     Test with X Flag CLEARED
                move.l #$00000110,a0 * Address pointer-X
                move.l #$00000120,a1 * Address pointer-Y
                moveq  #$00000000,d0 * BCD byte-X
                moveq  #$00000000,d1 * BCD byte-Y
                moveq  #$00000000,d2
                moveq  #$00000000,d3 * Cumulative -(An) BCD results
                moveq  #$00000000,d4 * Cumulative number.s of times C was set
                moveq  #$00000000,d5 * Cumulative Register BCD results
                move.l #$00000099,d6 * Inner loop counter
                move.l #$00000099,d7 * Outer loop counter

SBCD_OUTER1:    move.l d7,d0
SBCD_INNER1:    move.l d6,d1
                andi.b #$EF,CCR     * Clear X Flag
                move.l #$00000110,a0 * Address pointer-X
                move.l #$00000120,a1 * Address pointer-Y
                move.b d0,-1(a0)
                move.b d1,-1(a1)

                sbcd d0,d1
                bcc.s SBCD_NO_C1          * Check C Flag  bcc/bcs 0
                add.l #1,d4
SBCD_NO_C1:     add.l d1,d5

                sbcd -(a0),-(a1)
                bcc.s SBCD_NO_C2          * Check C Flag  bcc/bcs 0
                add.l #1,d4
SBCD_NO_C2:     add.b (a1),d3


                dbf d6,SBCD_INNER1
                move.l #$00000099,d6
                dbf d7,SBCD_OUTER1
                cmpi.l #$00005C0A,d4  * Check the cumulative results
                bne.s *
                cmpi.l #$001C459E,d5
                bne.s *
                cmpi.l #$0000009E,d3
                bne.s *

*     Test with X Flag SET
                move.l #$00000110,a0 * Address pointer-X
                move.l #$00000120,a1 * Address pointer-Y
                moveq  #$00000000,d0 * BCD byte-X
                moveq  #$00000000,d1 * BCD byte-Y
                moveq  #$00000000,d2
                moveq  #$00000000,d3 * Cumulative -(An) BCD results
                moveq  #$00000000,d4 * Cumulative number.s of times C was set
                moveq  #$00000000,d5 * Cumulative Register BCD results
                move.l #$00000099,d6 * Inner loop counter
                move.l #$00000099,d7 * Outer loop counter

SBCD_OUTER2:    move.l d7,d0
SBCD_INNER2:    move.l d6,d1
                ori.b #$10,CCR      * Set X Flag
                move.l #$00000110,a0 * Address pointer-X
                move.l #$00000120,a1 * Address pointer-Y
                move.b d0,-1(a0)
                move.b d1,-1(a1)

                sbcd d0,d1
                bcc.s SBCD_NO_C3          * Check C Flag  bcc/bcs 0
                add.l #1,d4
SBCD_NO_C3:     add.l d1,d5

                sbcd -(a0),-(a1)
                bcc.s SBCD_NO_C4          * Check C Flag  bcc/bcs 0
                add.l #1,d4
SBCD_NO_C4:     add.b (a1),d3

                dbf d6,SBCD_INNER2
                move.l #$00000099,d6
                dbf d7,SBCD_OUTER2
                cmpi.l #$00005CA4,d4  * Check the cumulative results
                bne.s *
                cmpi.l #$001C5C66,d5
                bne.s *
                cmpi.l #$0000009E,d3
                bne.s *


*             Quick check of Z Flag
                move.b #$00,d0
                move.b #$00,d1
                move #$00,CCR              * Set Z flag to 0
                sbcd d1,d0                  * Should NOT set Z Flag to 1
                beq.s *                       * Check Z Flag  beq/bne

                move.b #$01,d0
                move.b #$00,d1
                move #$04,CCR              * Set Z flag to 0
                sbcd d1,d0                  * Should NOT set Z Flag to 1
                beq.s *                       * Check Z Flag  beq/bne

                rts

*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : NBCD
*-----------------------------------------------------------
*-----------------------------------------------------------
op_NBCD:

*        NBCD to a  Register

                moveq  #$00000000,d0 * BCD byte
                moveq  #$00000000,d1
                moveq  #$00000000,d2
                moveq  #$00000000,d3 * Cumulative number.s of times Z was set
                moveq  #$00000000,d4 * Cumulative number.s of times C was set
                moveq  #$00000000,d5 * Cumulative BCD results
                move.l #$00000099,d6
                move.l #$00000099,d7 * Loop counter

NBCD_LOOP:      move.l d7,d0
                move #$04,CCR        * Set Z flag to 0

                nbcd d0

                bcc.s NBCD_NO_C         * Check C Flag
                add.l #1,d4
NBCD_NO_C:      bne.s NBCD_NO_Z         * Check Z Flag
                add.l #1,d3
NBCD_NO_Z:      add.l d0,d5         * Add results into d5

                dbf d7,NBCD_LOOP

                cmpi.l #$00000001,d3  * Check the cumulative results
                bne.s *
                cmpi.l #$00000099,d4
                bne.s *
                cmpi.l #$00002E3B,d5
                bne.s *


*        NBCD to a memory location

                moveq  #$00000000,d0 * BCD byte
                moveq  #$00000000,d1
                moveq  #$00000000,d2
                moveq  #$00000000,d3 * Cumulative number.s of times Z was set
                moveq  #$00000000,d4 * Cumulative number.s of times C was set
                moveq  #$00000000,d5 * Cumulative BCD results
                move.l #$00000099,d6
                move.l #$00000099,d7 * Loop counter

NBCD_LOOP1:     move.b d7,$00000100
                move #$04,CCR        * Set Z flag to 0

                nbcd $00000100
                move.b $00000100,d0

                bcc.s NBCD_NO_C1        * Check C Flag
                add.l #1,d4
NBCD_NO_C1:     bne.s NBCD_NO_Z1        * Check Z Flag
                add.l #1,d3
NBCD_NO_Z1:     add.l d0,d5         * Add results into d5

                dbf d7,NBCD_LOOP1

                cmpi.l #$00000001,d3  * Check the cumulative results
                bne.s *
                cmpi.l #$00000000,d4
                bne.s *
                cmpi.l #$00002E3B,d5
                bne.s *


                rts



*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : TRAPV
*-----------------------------------------------------------
*-----------------------------------------------------------
op_TRAPV:

*     TRAPV will set d0 to 12345678 if V flag is set

                moveq  #$00000000,d0 * Clear d0

                move #$00,CCR        * Clear V flag
                trapv
                cmpi.l #$00000000,d0  * Check of d0 was updated (should not be_)
                bne.s *

                move #$02,CCR        * Set V flag
                trapv
                cmpi.l #$12345678,d0  * Check of d0 was updated (should not be_)
                bne.s *


                rts



*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : RTR
*-----------------------------------------------------------
*-----------------------------------------------------------

op_RTR:

*     Leventhal claims only 5 LSB's are popped from the stack to the CCR

                lea             RTR_DONE,a0
                move.l  a0,-(a7)     * push destination PC to the stack
                move.w  #$FF15,-(a7)       * push flags=0xFFFF to the stack
                rtr

RTR_DONE:       move.w SR,d0
                andi.w #$1F,d0
                cmpi.w #$15,d0
                bne.s *

                rts


BSR_FAR2:       move.l #$44444444,d4
                rts


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : BCC
*-----------------------------------------------------------
*-----------------------------------------------------------

op_BCC:         move #$00,CCR
                bhi.s BCC1            * Higher Than         C=0 AND Z=0
                bra.s *

BCC1:           move #$01,CCR
                bls.w BCC2            * Lower or Same       C=1 OR Z=1
                bra.s *

BCC2:           move #$00,CCR
                bcc.s BCC3            * Carry Clear         C=0
                bra.s *

BCC3:           move #$01,CCR
                bcs.w BCC4            * Carry Set           C=1
                bra.s *

BCC4:           move #$00,CCR
                bne.s BCC5            * Not Equal           Z=0
                bra.s *

BCC5:           move #$04,CCR
                beq.w BCC6            * Equal               Z=1
                bra.s *

BCC6:           move #$00,CCR
                bvc.s BCC7            * V Clear             V=0
                bra.s *

BCC7:           move #$02,CCR
                bvs.w BCC8            * V Set               V=1
                bra.s *

BCC8:           move #$00,CCR
                bpl.s BCC9            * Plus                N=0
                bra.s *

BCC9:           move #$08,CCR
                bmi.w BCC10           * Minus               N=1
                bra.s *

BCC10:          move #$00,CCR
                bge.s BCC11           * Greater or Equal    N=V
                bra.s *

BCC11:          move #$02,CCR
                blt.w BCC12           * Less Than           N!=V
                bra.s *

BCC12:          move #$0A,CCR
                bgt.s BCC13           * Greater Than        N=V  AND Z=0
                bra.s *

BCC13:          move #$06,CCR
                ble.w BCC14           * Less Than or Equal  N!=V AND Z=1
                bra.s *


BCC14:          rts


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : DBCC
*-----------------------------------------------------------
*-----------------------------------------------------------

op_DBCC:        moveq  #$00000003,d0    * Loop counter
                moveq  #$00000000,d1    * Accumulator
                move #$00,CCR

DBCC_LOOP1:     addi.b #$1,d1
                dbf d0,DBCC_LOOP1

                cmpi.l #$00000004,d1  * Check Accumulator results
                bne.s *

DBCC_LOOP2:     addi.b #$1,d1
                dbcc d0,DBCC_LOOP2    * Dont loop

                cmpi.l #$00000005,d1  * Check Accumulator results
                bne.s *

                rts


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : SCC
*-----------------------------------------------------------
*-----------------------------------------------------------

op_SCC:         move #$01,CCR
                scc $00010000                   * Clear the EA byte
                cmpi.b #$00,$00010000
                bne.s *

                move #$00,CCR
                scc $00010000                   * Set the EA byte to 0xFF
                cmpi.b #$FF,$00010000
                bne.s *

                                                                scc d0                                                                                                  * Test setting a data register
                                                                cmpi.b #$FF,d0
                                                                bne.s *
                rts



*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : ADDQ
*-----------------------------------------------------------
*-----------------------------------------------------------

op_ADDQ:

*     BYTE
                move.l #$000000FF,d0    * Loop counter
                moveq  #$00000000,d1    * Flag results accumulator
                moveq  #$00000000,d2    * Data results accumulator
                moveq  #$00000000,d3
                moveq  #$00000000,d4
                moveq  #$00000000,d5
                moveq  #$00000000,d6
                moveq  #$00000000,d7

ADDQ_LOOP1:     addq.b #3,d5
                move.w SR,d6
                andi.l #$1F,d6        * Isolate flags
                add.l d6,d1           * Copy flag results into accumulator
                add.l d5,d2           * Copy data results into data accumulator
                dbf d0,ADDQ_LOOP1

                cmpi.l #$0000043D,d1
                bne.s *
                cmpi.l #$00007F80,d2
                bne.s *


*     WORD
                move.l #$000000FF,d0    * Loop counter
                moveq  #$00000000,d1    * Flag results accumulator
                moveq  #$00000000,d2    * Data results accumulator
                moveq  #$00000000,d3
                moveq  #$00000000,d4
                move.l #$0000FFF0,d5
                moveq  #$00000000,d6
                moveq  #$00000000,d7
                move.l #$00000100,a0

ADDQ_LOOP2:     addq.w #5,d5
                move.w SR,d6
                andi.l #$1F,d6        * Isolate flags
                add.l d6,d1           * Copy flag results into accumulator
                add.l d5,d2           * Copy data results into data accumulator
                dbf d0,ADDQ_LOOP2

                cmpi.l #$00000029,d1
                bne.s *
                cmpi.l #$00057280,d2
                bne.s *


*     LONG
                move.l #$000000FF,d0    * Loop counter
                moveq  #$00000000,d1    * Flag results accumulator
                moveq  #$00000000,d2    * Data results accumulator
                moveq  #$00000000,d3
                moveq  #$00000000,d4
                move.l #$FFFFFFF0,d5
                moveq  #$00000000,d6
                moveq  #$00000000,d7

ADDQ_LOOP3:     addq.l #1,d5
                move.w SR,d6
                andi.l #$1F,d6        * Isolate flags
                add.l d6,d1           * Copy flag results into accumulator
                add.l d5,d2           * Copy data results into data accumulator
                dbf d0,ADDQ_LOOP3

                cmpi.l #$0000008D,d1
                bne.s *
                cmpi.l #$00007080,d2
                bne.s *

*     Check that Flags are not updated for Address registers
                move.l #$0000FFFF,a0
                move #$00,CCR         * Clear flags
                addq.w #$7,a0
                bcs.s *

                rts



*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : SUBQ
*-----------------------------------------------------------
*-----------------------------------------------------------

op_SUBQ:

*     BYTE
                move.l #$000000FF,d0    * Loop counter
                moveq  #$00000000,d1    * Flag results accumulator
                move.l #$00001234,d2    * Data results accumulator
                moveq  #$00000000,d3
                moveq  #$00000000,d4
                moveq  #$00000012,d5
                moveq  #$00000000,d6
                moveq  #$00000000,d7

SUBQ_LOOP1:     subq.b #1,d5
                move.w SR,d6
                andi.l #$1F,d6        * Isolate flags
                add.l d6,d1           * Copy flag results into accumulator
                add.l d5,d2           * Copy data results into data accumulator
                dbf d0,SUBQ_LOOP1

                cmpi.l #$00000417,d1
                bne.s *
                cmpi.l #$000091B4,d2
                bne.s *


*     WORD
                move.l #$000000FF,d0    * Loop counter
                moveq  #$00000000,d1    * Flag results accumulator
                moveq  #$00000000,d2    * Data results accumulator
                moveq  #$00000000,d3
                moveq  #$00000000,d4
                moveq  #$00000002,d5
                moveq  #$00000000,d6
                moveq  #$00000000,d7
                move.l #$00000100,a0

SUBQ_LOOP2:     subq.w #5,d5
                move.w SR,d6
                andi.l #$1F,d6        * Isolate flags
                add.l d6,d1           * Copy flag results into accumulator
                add.l d5,d2           * Copy data results into data accumulator
                dbf d0,SUBQ_LOOP2

                cmpi.l #$00000811,d1
                bne.s *
                cmpi.l #$00FD7F80,d2
                bne.s *


*     LONG
                move.l #$000000FF,d0    * Loop counter
                moveq  #$00000000,d1    * Flag results accumulator
                moveq  #$00000000,d2    * Data results accumulator
                moveq  #$00000000,d3
                moveq  #$00000000,d4
                moveq  #$00000007,d5
                moveq  #$00000000,d6
                moveq  #$00000000,d7

SUBQ_LOOP3:     subq.l #1,d5
                move.w SR,d6
                andi.l #$1F,d6        * Isolate flags
                add.l d6,d1           * Copy flag results into accumulator
                add.l d5,d2           * Copy data results into data accumulator
                dbf d0,SUBQ_LOOP3

                cmpi.l #$000007DD,d1
                bne.s *
                cmpi.l #$FFFF8680,d2
                bne.s *

*     Check that Flags are not updated for Address registers
                move.l #$0001FFFF,a0
                move #$00,CCR         * Clear flags
                subq.w #$7,a0
                bcs.s *

                rts




*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : MOVEQ
*-----------------------------------------------------------
*-----------------------------------------------------------

op_MOVEQ:
                moveq  #$00000000,d0
                moveq #$0,d0
                bne.s *
                cmpi.l #$00000000,d0
                bne.s *

                moveq  #$00000000,d0
                moveq #-128,d0
                beq.s *
                bpl.s *
                cmpi.l #$FFFFFF80,d0
                bne.s *


                rts


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : DIVU
*-----------------------------------------------------------
*-----------------------------------------------------------

op_DIVU:

                move.l #$a5a5a5a5,d0        * Initial Numerator
                move.l #$00005a5a,d1        * Initial Divisor
                move.l #$a5a5a5a5,d2
                moveq  #$00000000,d3
                moveq  #$00000000,d4        * Cumulative data results
                moveq  #$00000000,d5       * Cumulative flag results
                move.l #$0000000E,d6       * Inner loop counter
                move.l #$0000001E,d7       * Outer loop counter


DIVU_OUTER1:    divu d1,d0               * !! Easy68K C not always cleared
                move.w SR,d3
                andi.l #$0C,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator
                lsr.l #$1,d1

                dbf d6,DIVU_OUTER1
                lsr.l #$1,d2
                move.l d2,d0
                move.l #$00005a5a,d1       * Initial Divisor
                move.l #$0000000E,d6       * Inner loop counter
                dbf d7,DIVU_OUTER1

                cmpi.l #$92FEDB89,d4      * Check the data results
                bne.s *

                cmpi.l #$00000110,d5      * Check the Flag results
                bne.s *


                rts



*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : DIVS
*-----------------------------------------------------------
*-----------------------------------------------------------

op_DIVS:

                move.l #$a5a5a5a5,d0        * Initial Numerator
                move.l #$00005a5a,d1        * Initial Divisor
                move.l #$a5a5a5a5,d2
                moveq  #$00000000,d3
                moveq  #$00000000,d4        * Cumulative data results
                moveq  #$00000000,d5       * Cumulative flag results
                move.l #$0000000E,d6       * Inner loop counter
                move.l #$0000001E,d7       * Outer loop counter


DIVS_OUTER1:    divs d1,d0               * !! Easy68K C not always cleared
                move.w SR,d3
                andi.l #$0C,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator
                lsr.l #$1,d1

                dbf d6,DIVS_OUTER1
                lsr.l #$1,d2
                move.l d2,d0
                move.l #$00005a5a,d1       * Initial Divisor
                move.l #$0000000E,d6       * Inner loop counter
                dbf d7,DIVS_OUTER1

                cmpi.l #$4EC5D057,d4      * Check the data results
                bne.s *

                cmpi.l #$00000038,d5      * Check the Flag results
                bne.s *


                rts



*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : OR
*-----------------------------------------------------------
*-----------------------------------------------------------

op_OR:

*  * <EA> to Register

                move.l #$a5a5a5a5,d0       * Initial Data-X  Inner loop
                move.l #$8167E123,d1       * Initial Data-Y  Outer loop
                move.l #$a5a5a5a5,d2
                moveq  #$00000000,d3
                moveq  #$00000000,d4       * Cumulative data results
                moveq  #$00000000,d5       * Cumulative flag results
                move.l #$0000001E,d6       * Inner loop counter
                move.l #$0000001E,d7       * Outer loop counter
                move.l #$00000100,a0       * Address for memory EA operations


OR_OUTER1:

*     BYTE
                move.l d1,(a0)
                or.b (a0),d0
                move.w SR,d3
                andi.l #$0C,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator

*     WORD
                move.l d1,(a0)
                or.w (a0),d0
                move.w SR,d3
                andi.l #$0C,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator

*     LONG
                move.l d1,(a0)
                or.l (a0),d0
                move.w SR,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator


                lsr.l #$1,d1
                dbf d6,OR_OUTER1
                lsr.l #$1,d2
                move.l #$8167E123,d1       * Initial Data-Y
                move.l #$0000001E,d6       * Inner loop counter
                dbf d7,OR_OUTER1

                cmpi.l #$76EAC803,d4      * Check the data results
                bne.s *
                cmpi.l #$00005A18,d5      * Check the Flag results
                bne.s *


*  * Register to <EA>

                move.l #$86738374,d0       * Initial Data-X  Inner loop
                move.l #$FC55F2FE,d1       * Initial Data-Y  Outer loop
                move.l #$86738374,d2
                moveq  #$00000000,d3
                moveq  #$00000000,d4       * Cumulative data results
                moveq  #$00000000,d5       * Cumulative flag results
                move.l #$0000001E,d6       * Inner loop counter
                move.l #$0000001D,d7       * Outer loop counter
                move.l #$00000100,a0       * Address for memory EA operations


OR_OUTER2:

*     BYTE
                move.l d0,(a0)
                or.b d1,(a0)
                move.w SR,d3
                andi.l #$0C,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l (a0),d4             * Copy data results into data accumulator

*     WORD
                move.l d0,(a0)
                or.w d1,(a0)
                move.w SR,d3
                andi.l #$0C,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l (a0),d4             * Copy data results into data accumulator

*     LONG
                move.l d0,(a0)
                or.l d1,(a0)
                move.w SR,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l (a0),d4             * Copy data results into data accumulator


                lsr.l #$1,d1
                dbf d6,OR_OUTER2
                lsr.l #$1,d2
                move.l #$8167E123,d1       * Initial Data-Y
                move.l #$0000001E,d6       * Inner loop counter
                dbf d7,OR_OUTER2

                cmpi.l #$FA82B9E4,d4      * Check the data results
                bne.s *
                cmpi.l #$00005730,d5      * Check the Flag results
                bne.s *


                rts



*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : AND
*-----------------------------------------------------------
*-----------------------------------------------------------

op_AND:

*  * <EA> to Register

                move.l #$a5a5a5a5,d0       * Initial Data-X  Inner loop
                move.l #$8167E123,d1       * Initial Data-Y  Outer loop
                move.l #$a5a5a5a5,d2
                moveq  #$00000000,d3
                moveq  #$00000000,d4       * Cumulative data results
                moveq  #$00000000,d5       * Cumulative flag results
                move.l #$0000001E,d6       * Inner loop counter
                move.l #$0000001E,d7       * Outer loop counter
                move.l #$00000100,a0       * Address for memory EA operations


AND_OUTER1:

*     BYTE
                move.l d1,(a0)
                and.b (a0),d0
                move.w sr,d3
                andi.l #$0C,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator

*     WORD
                move.l d1,(a0)
                and.w (a0),d0
                move.w sr,d3
                andi.l #$0C,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator

*     LONG
                move.l d1,(a0)
                and.l (a0),d0
                move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator


                lsr.l #$1,d1
                dbf d6,AND_OUTER1
                lsr.l #$1,d2
                move.l #$8167E123,d1       * Initial Data-Y
                move.l #$0000001E,d6       * Inner loop counter
                dbf d7,AND_OUTER1

                cmpi.l #$CF212883,d4      * Check the data results
                bne.s *
                cmpi.l #$00002D10,d5      * Check the Flag results
                bne.s *


*  * Register to <EA>

                move.l #$86738374,d0       * Initial Data-X  Inner loop
                move.l #$FC55F2FE,d1       * Initial Data-Y  Outer loop
                move.l #$86738374,d2
                moveq  #$00000000,d3
                moveq  #$00000000,d4       * Cumulative data results
                moveq  #$00000000,d5       * Cumulative flag results
                move.l #$0000001E,d6       * Inner loop counter
                move.l #$0000001D,d7       * Outer loop counter
                move.l #$00000100,a0       * Address for memory EA operations


AND_OUTER2:

*     BYTE
                move.l d0,(a0)
                and.b d1,(a0)
                move.w sr,d3
                andi.l #$0C,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l (a0),d4             * Copy data results into data accumulator

*     WORD
                move.l d0,(a0)
                and.w d1,(a0)
                move.w sr,d3
                andi.l #$0C,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l (a0),d4             * Copy data results into data accumulator

*     LONG
                move.l d0,(a0)
                and.l d1,(a0)
                move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l (a0),d4             * Copy data results into data accumulator


                lsr.l #$1,d1
                dbf d6,AND_OUTER2
                lsr.l #$1,d2
                move.l #$8167E123,d1       * Initial Data-Y
                move.l #$0000001E,d6       * Inner loop counter
                dbf d7,AND_OUTER2

                cmpi.l #$4A3DE544,d4      * Check the data results
                bne.s *
                cmpi.l #$000018E8,d5      * Check the Flag results
                bne.s *


                rts



*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : EOR
*-----------------------------------------------------------
*-----------------------------------------------------------

op_EOR:

*  * Register to <EA>

                move.l #$86738374,d0       * Initial Data-X  Inner loop
                move.l #$FC55F2FE,d1       * Initial Data-Y  Outer loop
                move.l #$86738374,d2
                moveq  #$00000000,d3
                moveq  #$00000000,d4       * Cumulative data results
                moveq  #$00000000,d5       * Cumulative flag results
                move.l #$0000001E,d6       * Inner loop counter
                move.l #$0000001D,d7       * Outer loop counter
                move.l #$00000100,a0       * Address for memory EA operations


EOR_OUTER2:

*     BYTE
                move.l d0,(a0)
                eor.b d1,(a0)
                move.w sr,d3
                andi.l #$0C,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l (a0),d4             * Copy data results into data accumulator

*     WORD
                move.l d0,(a0)
                eor.w d1,(a0)
                move.w sr,d3
                andi.l #$0C,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l (a0),d4             * Copy data results into data accumulator

*     LONG
                move.l d0,(a0)
                eor.l d1,(a0)
                move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l (a0),d4             * Copy data results into data accumulator


                lsr.l #$1,d1
                dbf d6,EOR_OUTER2
                lsr.l #$1,d2
                move.l #$8167E123,d1       * Initial Data-Y
                move.l #$0000001E,d6       * Inner loop counter
                dbf d7,EOR_OUTER2

                cmpi.l #$55C5EB70,d4      * Check the data results
                bne.s *
                cmpi.l #$00004430,d5      * Check the Flag results
                bne.s *


                rts


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : CMP
*-----------------------------------------------------------
*-----------------------------------------------------------

op_CMP:


*  * <EA> to Register

                move.l #$a5a5a5a5,d0       * Initial Data-X  Inner loop
                move.l #$8167E123,d1       * Initial Data-Y  Outer loop
                move.l #$a5a5a5a5,d2
                moveq  #$00000000,d3
                moveq  #$00000000,d4       * Cumulative data results
                moveq  #$00000000,d5       * Cumulative flag results
                move.l #$0000001E,d6       * Inner loop counter
                move.l #$0000001E,d7       * Outer loop counter
                move.l #$00000100,a0       * Address for memory EA operations


CMP_OUTER1:

*     BYTE
                move.l d1,(a0)
                cmp.b (a0),d0
                move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator

*     WORD
                move.l d1,(a0)
                cmp.w (a0),d0
                move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator

*     LONG
                move.l d1,(a0)
                cmp.l (a0),d0
                move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator


                lsr.l #$1,d1
                dbf d6,CMP_OUTER1
                lsr.l #$1,d2
                move.l #$8167E123,d1       * Initial Data-Y
                move.l #$0000001E,d6       * Inner loop counter
                dbf d7,CMP_OUTER1

                cmpi.l #$7878712F,d4      * Check the data results
                bne.s *
                cmpi.l #$00005502,d5      * Check the Flag results
                bne.s *



                rts


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : CMPA
*-----------------------------------------------------------
*-----------------------------------------------------------

op_CMPA:


*  * <EA> to Register

                move.l #$a5a5a5a5,a0       * Initial Data-X  Inner loop
                move.l #$8167E123,d1       * Initial Data-Y  Outer loop
                move.l #$a5a5a5a5,d2
                moveq  #$00000000,d3
                moveq  #$00000000,d4       * Cumulative data results
                moveq  #$00000000,d5       * Cumulative flag results
                move.l #$0000001E,d6       * Inner loop counter
                move.l #$0000001E,d7       * Outer loop counter
                move.l #$00000100,a1       * Address for memory EA operations


CMPA_OUTER1:


*     WORD
                move.l d1,(a1)
                cmpa.w (a1),a0
                move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l a0,d4               * Copy data results into data accumulator

*     LONG
                move.l d1,(a1)
                cmpa.l (a1),a0
                move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l a0,d4               * Copy data results into data accumulator


                lsr.l #$1,d1
                dbf d6,CMPA_OUTER1
                lsr.l #$1,d2
                move.l #$8167E123,d1       * Initial Data-Y
                move.l #$0000001E,d6       * Inner loop counter
                dbf d7,CMPA_OUTER1

                cmpi.l #$a5a5a0ca,d4      * Check the data results
                bne.s *
                cmpi.l #$00003A7D,d5      * Check the Flag results
                bne.s *


                rts



*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : CMPM
*-----------------------------------------------------------
*-----------------------------------------------------------

op_CMPM:

                move.l #$00000100,a0       * Address for Data-X
                move.l #$00000200,a1       * Address for Data-Y
                moveq  #$00000000,d0
                moveq  #$00000000,d1
                moveq  #$00000000,d2

                move.l #$11FF5580,(a0)+   * Populate test data
                move.l #$1111FFFF,(a0)+   * Populate test data
                move.l #$33333333,(a0)+   * Populate test data
                move.l #$44444444,(a0)+   * Populate test data

                move.l #$80FF337F,(a1)+   * Populate test data
                move.l #$FFFF1111,(a1)+   * Populate test data
                move.l #$33333333,(a1)+   * Populate test data
                move.l #$44444444,(a1)+   * Populate test data

                move.l #$00000100,a0       * Address for Data-X
                move.l #$00000200,a1       * Address for Data-Y
                move.l #$0000000F,d6       * Loop counter

CMPM_LOOP1:     cmpm.b (a0)+,(a1)+
                move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d0               * Copy flag results into accumulator
                dbf d6,CMPM_LOOP1


                move.l #$00000100,a0       * Address for Data-X
                move.l #$00000200,a1       * Address for Data-Y
                moveq  #$00000007,d6       * Loop counter

CMPM_LOOP2:     cmpm.w (a0)+,(a1)+
                move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d1               * Copy flag results into accumulator
                dbf d6,CMPM_LOOP2


                move.l #$00000100,a0       * Address for Data-X
                move.l #$00000200,a1       * Address for Data-Y
                moveq  #$00000003,d6       * Loop counter

CMPM_LOOP3:     cmpm.l (a0)+,(a1)+
                move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d2               * Copy flag results into accumulator
                dbf d6,CMPM_LOOP3


                cmpi.l #$0000004C,d0      * Check the data results
                bne.s *
                cmpi.l #$00000024,d1
                bne.s *
                cmpi.l #$00000012,d2
                bne.s *

                rts


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : ADD
*-----------------------------------------------------------
*-----------------------------------------------------------

op_ADD:


*  * <EA> to Register
                move.l #$a5a5a5a5,d0       * Initial Data-X  Inner loop
                move.l #$8167E123,d1       * Initial Data-Y  Outer loop
                move.l #$a5a5a5a5,d2
                moveq  #$00000000,d3
                moveq  #$00000000,d4       * Cumulative data results
                moveq  #$00000000,d5       * Cumulative flag results
                move.l #$0000001E,d6       * Inner loop counter
                move.l #$0000001E,d7       * Outer loop counter
                move.l #$00000100,a0       * Address for memory EA operations


ADD_OUTER1:

*     BYTE
                move.l d1,(a0)
                add.b (a0),d0
                move.w sr,d3
                andi.l #$1F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator

*     WORD
                move.l d1,(a0)
                add.w (a0),d0
                move.w sr,d3
                andi.l #$0C,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator

*     LONG
                move.l d1,(a0)
                add.l (a0),d0
                move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator


                ror.l #$1,d1
                dbf d6,ADD_OUTER1
                ror.l #$1,d2
                move.l #$8167E123,d1       * Initial Data-Y
                move.l #$0000001E,d6       * Inner loop counter
                dbf d7,ADD_OUTER1

                cmpi.l #$23ED428F,d4      * Check the data results
                bne.s *
                cmpi.l #$00004C96,d5      * Check the Flag results
                bne.s *


*  * Register to <EA>
                move.l #$86738374,d0       * Initial Data-X  Inner loop
                move.l #$FC55F2FE,d1       * Initial Data-Y  Outer loop
                move.l #$86738374,d2
                moveq  #$00000000,d3
                moveq  #$00000000,d4       * Cumulative data results
                moveq  #$00000000,d5       * Cumulative flag results
                move.l #$0000001E,d6       * Inner loop counter
                move.l #$0000001D,d7       * Outer loop counter
                move.l #$00000100,a0       * Address for memory EA operations


ADD_OUTER2:

*     BYTE
                move.l d0,(a0)
                add.b d1,(a0)
                move.w sr,d3
                andi.l #$0C,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l (a0),d4             * Copy data results into data accumulator

*     WORD
                move.l d0,(a0)
                add.w d1,(a0)
                move.w sr,d3
                andi.l #$1F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l (a0),d4             * Copy data results into data accumulator

*     LONG
                move.l d0,(a0)
                add.l d1,(a0)
                move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l (a0),d4             * Copy data results into data accumulator


                ror.l #$1,d1
                dbf d6,ADD_OUTER2
                ror.l #$1,d2
                move.l #$8167E123,d1       * Initial Data-Y
                move.l #$0000001E,d6       * Inner loop counter
                dbf d7,ADD_OUTER2

                cmpi.l #$6701B884,d4      * Check the data results
                bne.s *
                cmpi.l #$00005467,d5      * Check the Flag results
                bne.s *

                rts

*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : SUB
*-----------------------------------------------------------
*-----------------------------------------------------------

op_SUB:

*  * <EA> to Register
                move.l #$a5a5a5a5,d0       * Initial Data-X  Inner loop
                move.l #$8167E123,d1       * Initial Data-Y  Outer loop
                move.l #$a5a5a5a5,d2
                moveq  #$00000000,d3
                moveq  #$00000000,d4       * Cumulative data results
                moveq  #$00000000,d5       * Cumulative flag results
                move.l #$0000001E,d6       * Inner loop counter
                move.l #$0000001E,d7       * Outer loop counter
                move.l #$00000100,a0       * Address for memory EA operations


SUB_OUTER1:

*     BYTE
                move.l d1,(a0)
                sub.b (a0),d0
                move.w sr,d3
                andi.l #$1F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator

*     WORD
                move.l d1,(a0)
                sub.w (a0),d0
                move.w sr,d3
                andi.l #$0C,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator

*     LONG
                move.l d1,(a0)
                sub.l (a0),d0
                move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator


                ror.l #$1,d1
                dbf d6,SUB_OUTER1
                ror.l #$1,d2
                move.l #$8167E123,d1       * Initial Data-Y
                move.l #$0000001E,d6       * Inner loop counter
                dbf d7,SUB_OUTER1

                cmpi.l #$1A8D14CF,d4      * Check the data results
                bne.s *
                cmpi.l #$00004FC4,d5      * Check the Flag results
                bne.s *


*  * Register to <EA>
                move.l #$86738374,d0       * Initial Data-X  Inner loop
                move.l #$FC55F2FE,d1       * Initial Data-Y  Outer loop
                move.l #$86738374,d2
                moveq  #$00000000,d3
                moveq  #$00000000,d4       * Cumulative data results
                moveq  #$00000000,d5       * Cumulative flag results
                move.l #$0000001E,d6       * Inner loop counter
                move.l #$0000001D,d7       * Outer loop counter
                move.l #$00000100,a0       * Address for memory EA operations


SUB_OUTER2:

*     BYTE
                move.l d0,(a0)
                sub.b d1,(a0)
                move.w sr,d3
                andi.l #$0C,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l (a0),d4             * Copy data results into data accumulator

*     WORD
                move.l d0,(a0)
                sub.w d1,(a0)
                move.w sr,d3
                andi.l #$1F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l (a0),d4             * Copy data results into data accumulator

*     LONG
                move.l d0,(a0)
                sub.l d1,(a0)
                move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l (a0),d4             * Copy data results into data accumulator


                ror.l #$1,d1
                dbf d6,SUB_OUTER2
                ror.l #$1,d2
                move.l #$8167E123,d1       * Initial Data-Y
                move.l #$0000001E,d6       * Inner loop counter
                dbf d7,SUB_OUTER2

                cmpi.l #$36D38BEC,d4      * Check the data results
                bne.s *
                cmpi.l #$000045A5,d5      * Check the Flag results
                bne.s *




                rts



*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : ADDA
*-----------------------------------------------------------
*-----------------------------------------------------------

op_ADDA:

*  * <EA> to Register
                move.l #$a5a5a5a5,d0       * Initial Data-X  Inner loop
                move.l #$8167E123,d1
                move.l #$a5a5a5a5,d2
                moveq  #$00000000,d3
                moveq  #$00000000,d4       * Cumulative data results
                moveq  #$00000000,d5       * Cumulative flag results
                move.l #$0000001E,d6       * Inner loop counter
                move.l #$0000001E,d7       * Outer loop counter
                move.l #$00000100,a0       * Address for memory EA operations
                move.l #$8167E123,a1       * Initial Data-Y  Outer loop

ADDA_OUTER1:

*     WORD
*                move.l d1,(a0)       * !!! Easy68K is not altering the whole 32-bits of the address register
*                adda.w (a0),a1
*                add.l a1,d4               * Copy data results into data accumulator

*     LONG
                move.l d1,(a0)
                adda.l (a0),a1
                add.l a1,d4               * Copy data results into data accumulator

                ror.l #$1,d1
                dbf d6,ADDA_OUTER1
                ror.l #$1,d1
                move.l d1,a1
                move.l #$8167E123,d1       * Initial Data-Y
                move.l #$0000001E,d6       * Inner loop counter
                dbf d7,ADDA_OUTER1

                cmpi.l #$AC04DB4C,d4      * Check the data results
                bne.s *


                rts


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : SUBA
*-----------------------------------------------------------
*-----------------------------------------------------------

op_SUBA:

*  * <EA> to Register
                move.l #$a5a5a5a5,d0       * Initial Data-X  Inner loop
                move.l #$8167E123,d1
                move.l #$a5a5a5a5,d2
                moveq  #$00000000,d3
                moveq  #$00000000,d4       * Cumulative data results
                moveq  #$00000000,d5       * Cumulative flag results
                move.l #$0000001E,d6       * Inner loop counter
                move.l #$0000001E,d7       * Outer loop counter
                move.l #$00000100,a0       * Address for memory EA operations
                move.l #$8167E123,a1       * Initial Data-Y  Outer loop

SUBA_OUTER1:

*     WORD
*                move.l d1,(a0) * !!! Easy68K is not altering the whole 32-bits of the address register
*                suba.w (a0),a1
*                add.l a1,d4               * Copy data results into data accumulator

*     LONG
                move.l d1,(a0)
                suba.l (a0),a1
                add.l a1,d4               * Copy data results into data accumulator

                ror.l #$1,d1
                dbf d6,SUBA_OUTER1
                ror.l #$1,d1
                move.l d1,a1
                move.l #$8167E123,d1       * Initial Data-Y
                move.l #$0000001E,d6       * Inner loop counter
                dbf d7,SUBA_OUTER1

                cmpi.l #$E1E36D7A,d4      * Check the data results
                bne.s *


                rts



*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : ADDX
*-----------------------------------------------------------
*-----------------------------------------------------------

op_ADDX:


*  * Register to Register
                move.l #$a5a5a5a5,d0       * Initial Data-X  Inner loop
                move.l #$8167E123,d1       * Initial Data-Y  Outer loop
                move.l #$a5a5a5a5,d2
                moveq  #$00000000,d3
                moveq  #$00000000,d4       * Cumulative data results
                moveq  #$00000000,d5       * Cumulative flag results
                move.l #$0000001E,d6       * Inner loop counter
                move.l #$0000001E,d7       * Outer loop counter
                move.l #$00000100,a0       * Address for memory EA operations


ADDX_OUTER1:

*     BYTE
                move.l d2,d0
                addx.b d1,d0
                move.w sr,d3
                andi.l #$1F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator

*     WORD
                move.l d2,d0
                addx.w d1,d0
                move.w sr,d3
                andi.l #$1F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator

*     LONG
                move.l d2,d0
                addx.l d1,d0
                move.w sr,d3
                andi.l #$1F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator

                ror.l #$1,d1
                dbf d6,ADDX_OUTER1
                ror.l #$1,d2
                move.l #$8167E123,d1       * Initial Data-Y
                move.l #$0000001E,d6       * Inner loop counter
                dbf d7,ADDX_OUTER1

                cmpi.l #$4E96A4D9,d4      * Check the data results
                bne.s *
                cmpi.l #$000085CD,d5      * Check the Flag results
                bne.s *



*     -(An),-(An)

                moveq  #$00000000,d0       * BYTE Flag Results Accumulator
                moveq  #$00000000,d1
                moveq  #$00000000,d2
                move.l #$00000100,a0       * Address for Data-X
                move.l #$00000200,a1       * Address for Data-Y
                move.l #$11FF5580,(a0)+   * Populate test data
                move.l #$1111FFFF,(a0)+   * Populate test data
                move.l #$33333333,(a0)+   * Populate test data
                move.l #$44444444,(a0)+   * Populate test data
                move.l #$80FF337F,(a1)+   * Populate test data
                move.l #$FFFF1111,(a1)+   * Populate test data
                move.l #$33333333,(a1)+   * Populate test data
                move.l #$44444444,(a1)+   * Populate test data


                move.l #$0000000F,d6       * Loop counter

ADDX_LOOP3:     addx.b -(a0),-(a1)
                move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d0               * Copy flag results into accumulator
                add.b (a1),d1
                dbf d6,ADDX_LOOP3


                move.l #$00000110,a0       * Address for Data-X
                move.l #$00000210,a1       * Address for Data-Y
                moveq  #$00000007,d6       * Loop counter

ADDX_LOOP4:     addx.w -(a0),-(a1)
                move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d0               * Copy flag results into accumulator
                add.w (a1),d1
                dbf d6,ADDX_LOOP4


                move.l #$00000110,a0       * Address for Data-X
                move.l #$00000210,a1       * Address for Data-Y
                moveq  #$00000003,d6       * Loop counter

ADDX_LOOP5:     addx.l -(a0),-(a1)
                move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d0               * Copy flag results into accumulator
                add.l (a1),d1
                dbf d6,ADDX_LOOP5


                cmpi.l #$00000095,d0      * Check the flag results
                bne.s *
                cmpi.l #$C812A682,d1      * Check the data results
                bne.s *

                rts




*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : SUBX
*-----------------------------------------------------------
*-----------------------------------------------------------

op_SUBX:


*  * Register to Register
                move.l #$a5a5a5a5,d0       * Initial Data-X  Inner loop
                move.l #$8167E123,d1       * Initial Data-Y  Outer loop
                move.l #$a5a5a5a5,d2
                moveq  #$00000000,d3
                moveq  #$00000000,d4       * Cumulative data results
                moveq  #$00000000,d5       * Cumulative flag results
                move.l #$0000001E,d6       * Inner loop counter
                move.l #$0000001E,d7       * Outer loop counter
                move.l #$00000100,a0       * Address for memory EA operations


SUBX_OUTER1:

*     BYTE
                move.l d2,d0
                subx.b d1,d0
                move.w sr,d3
                andi.l #$1F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator

*     WORD
                move.l d2,d0
                subx.w d1,d0
                move.w sr,d3
                andi.l #$1F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator

*     LONG
                move.l d2,d0
                subx.l d1,d0
                move.w sr,d3
                andi.l #$1F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator

                ror.l #$1,d1
                dbf d6,SUBX_OUTER1
                ror.l #$1,d2
                move.l #$8167E123,d1       * Initial Data-Y
                move.l #$0000001E,d6       * Inner loop counter
                dbf d7,SUBX_OUTER1

                cmpi.l #$FCAA913E,d4      * Check the data results
                bne.s *
                cmpi.l #$00007E89,d5      * Check the Flag results
                bne.s *



*     -(An),-(An)

                moveq  #$00000000,d0       * BYTE Flag Results Accumulator
                moveq  #$00000000,d1
                moveq  #$00000000,d2
                move.l #$00000100,a0       * Address for Data-X
                move.l #$00000200,a1       * Address for Data-Y
                move.l #$11FF5580,(a0)+   * Populate test data
                move.l #$1111FFFF,(a0)+   * Populate test data
                move.l #$80FF337F,(a0)+   * Populate test data
                move.l #$44444444,(a0)+   * Populate test data
                move.l #$80FF337F,(a1)+   * Populate test data
                move.l #$1111FFFF,(a1)+   * Populate test data
                move.l #$33333333,(a1)+   * Populate test data
                move.l #$5580EECC,(a1)+   * Populate test data


                move.l #$0000000F,d6       * Loop counter

SUBX_LOOP3:     subx.b -(a0),-(a1)
                move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d0               * Copy flag results into accumulator
                add.b (a1),d1
                dbf d6,SUBX_LOOP3


                move.l #$00000110,a0       * Address for Data-X
                move.l #$00000210,a1       * Address for Data-Y
                moveq  #$00000007,d6       * Loop counter

SUBX_LOOP4:     subx.w -(a0),-(a1)
                move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d0               * Copy flag results into accumulator
                add.w (a1),d1
                dbf d6,SUBX_LOOP4


                move.l #$00000110,a0       * Address for Data-X
                move.l #$00000210,a1       * Address for Data-Y
                moveq  #$00000003,d6       * Loop counter

SUBX_LOOP5:     subx.l -(a0),-(a1)
                move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d0               * Copy flag results into accumulator
                add.l (a1),d1
                dbf d6,SUBX_LOOP5


                cmpi.l #$000000B1,d0      * Check the flag results
                bne.s *
                cmpi.l #$62C6F417,d1      * Check the data results
                bne.s *

                rts


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : MULU
*-----------------------------------------------------------
*-----------------------------------------------------------

op_MULU:

                move.l #$FE805501,d0        * Initial
                move.l #$5697EDB6,d1        * Initial Y
                move.l #$FE805501,d2
                moveq  #$00000000,d3
                moveq  #$00000000,d4        * Cumulative data results
                moveq  #$00000000,d5       * Cumulative flag results
                move.l #$0000000E,d6       * Inner loop counter
                move.l #$0000000E,d7       * Outer loop counter


MULU_OUTER1:    mulu d1,d0
                move.w sr,d3
                andi.l #$0C,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator
                ror.l #$1,d1

                dbf d6,MULU_OUTER1
                ror.l #$1,d2
                move.l d2,d0
                move.l #$0000000E,d6       * Inner loop counter
                dbf d7,MULU_OUTER1

                cmpi.l #$76FB988C,d4      * Check the data results
                bne.s *

                cmpi.l #$00000170,d5      * Check the Flag results
                bne.s *


                rts


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : MULS
*-----------------------------------------------------------
*-----------------------------------------------------------

op_MULS:

                move.l #$FE805501,d0        * Initial
                move.l #$5697EDB6,d1        * Initial Y
                move.l #$FE805501,d2
                moveq  #$00000000,d3
                moveq  #$00000000,d4        * Cumulative data results
                moveq  #$00000000,d5       * Cumulative flag results
                move.l #$0000000E,d6       * Inner loop counter
                move.l #$0000000E,d7       * Outer loop counter


MULS_OUTER1:    muls d1,d0
                move.w sr,d3
                andi.l #$0C,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                add.l d0,d4               * Copy data results into data accumulator
                ror.l #$1,d1

                dbf d6,MULS_OUTER1
                ror.l #$1,d2
                move.l d2,d0
                move.l #$0000000E,d6       * Inner loop counter
                dbf d7,MULS_OUTER1

                cmpi.l #$D4E2988C,d4      * Check the data results
                bne.s *

                cmpi.l #$000003E0,d5      * Check the Flag results
                bne.s *


                rts



*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : EXG
*-----------------------------------------------------------
*-----------------------------------------------------------

op_EXG:
                move.l #$d1d1d1d1,d1
                move.l #$d2d2d2d2,d2
                move.l #$d3d3d3d3,d3
                move.l #$a1a1a1a1,a1
                move.l #$a2a2a2a2,a2
                move.l #$a3a3a3a3,a3

                exg d1,d2
                exg a1,a2
                exg d3,a3

                cmpi.l #$d2d2d2d2,d1      * Check the results
                bne.s *
                cmpi.l #$d1d1d1d1,d2
                bne.s *
                cmpi.l #$a3a3a3a3,d3
                bne.s *

                move.l a1,d1
                move.l a2,d2
                move.l a3,d3

                cmpi.l #$a2a2a2a2,d1
                bne.s *
                cmpi.l #$a1a1a1a1,d2
                bne.s *
                cmpi.l #$d3d3d3d3,d3
                bne.s *

                rts


*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : ROx
*-----------------------------------------------------------
*-----------------------------------------------------------

*     Subroutine to check and accumulate the flags
ROx_FLAGS:      move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                rts

op_ROx:

*     Shift a Register LEFT and RIGHT with shift_count ## IN A REGISTER ##

*        BYTE LEFT
                move.l #$80018FF1,d0
                moveq  #$00000000,d5
                moveq  #$00000011,d6
ROx_LOOP1:
                rol.b d6,d0
                bsr ROx_FLAGS
                dbf d6,ROx_LOOP1
                cmpi.l #$80018FE3,d0
                bne.s *
                cmpi.l #$0000006B,d5
                bne.s *

*        BYTE RIGHT
                move.l #$80018FF1,d0
                moveq  #$00000012,d6
ROx_LOOP2:
                ror.b d6,d0
                bsr ROx_FLAGS
                dbf d6,ROx_LOOP2
                cmpi.l #$80018F3E,d0
                bne.s *
                cmpi.l #$000000C5,d5
                bne.s *


*        WORD LEFT
                move.l #$80018FF1,d0
                moveq  #$00000013,d6
ROx_LOOP3:
                rol.w d6,d0
                bsr ROx_FLAGS
                dbf d6,ROx_LOOP3
                cmpi.l #$800163FC,d0
                bne.s *
                cmpi.l #$00000131,d5
                bne.s *

*        WORD RIGHT
                move.l #$80018FF1,d0
                move.l #$0000001E,d6
ROx_LOOP4:
                ror.w d6,d0
                bsr ROx_FLAGS
                dbf d6,ROx_LOOP4
                cmpi.l #$8001C7F8,d0
                bne.s *
                cmpi.l #$000001DB,d5
                bne.s *


*        LONG LEFT
                move.l #$80018FF1,d0
                moveq  #$00000015,d6
ROx_LOOP5:
                rol.l d6,d0
                bsr ROx_FLAGS
                dbf d6,ROx_LOOP5
                cmpi.l #$00C7F8C0,d0
                bne.s *
                cmpi.l #$0000021A,d5
                bne.s *

*        LONG RIGHT
                move.l #$80018FF1,d0
                moveq  #$00000016,d6
ROx_LOOP6:
                ror.l d6,d0
                bsr ROx_FLAGS
                dbf d6,ROx_LOOP6
                cmpi.l #$000C7F8C,d0
                bne.s *
                cmpi.l #$00000250,d5
                bne.s *


*     Shift a Register LEFT and RIGHT with shift_count ## IN THE OPCODE ##

                move.l #$80018FF1,d0
                moveq  #$00000000,d5

*        BYTE LEFT
                rol.b #1,d0
                bsr ROx_FLAGS
                rol.b #5,d0
                bsr ROx_FLAGS
                rol.b #7,d0
                bsr ROx_FLAGS
                rol.b #8,d0
                bsr ROx_FLAGS
                cmpi.l #$80018F3E,d0
                bne.s *
                cmpi.l #$00000009,d5
                bne.s *

*        BYTE RIGHT
                ror.b #1,d0
                bsr ROx_FLAGS
                ror.b #5,d0
                bsr ROx_FLAGS
                ror.b #7,d0
                bsr ROx_FLAGS
                ror.b #8,d0
                bsr ROx_FLAGS
                cmpi.l #$80018FF1,d0
                bne.s *
                cmpi.l #$00000024,d5
                bne.s *

*        WORD LEFT
                rol.w #1,d0
                bsr ROx_FLAGS
                rol.w #5,d0
                bsr ROx_FLAGS
                rol.w #7,d0
                bsr ROx_FLAGS
                rol.w #8,d0
                bsr ROx_FLAGS
                cmpi.l #$8001FE31,d0
                bne.s *
                cmpi.l #$00000037,d5
                bne.s *

*        WORD RIGHT
                ror.w #1,d0
                bsr ROx_FLAGS
                ror.w #5,d0
                bsr ROx_FLAGS
                ror.w #7,d0
                bsr ROx_FLAGS
                ror.w #8,d0
                bsr ROx_FLAGS
                cmpi.l #$80018FF1,d0
                bne.s *
                cmpi.l #$0000005B,d5
                bne.s *

*        LONG LEFT
                rol.l #1,d0
                bsr ROx_FLAGS
                rol.l #5,d0
                bsr ROx_FLAGS
                rol.l #7,d0
                bsr ROx_FLAGS
                rol.l #8,d0
                bsr ROx_FLAGS
                cmpi.l #$FE300031,d0
                bne.s *
                cmpi.l #$00000065,d5
                bne.s *

*        LONG RIGHT
                ror.l #1,d0
                bsr ROx_FLAGS
                ror.l #5,d0
                bsr ROx_FLAGS
                ror.l #7,d0
                bsr ROx_FLAGS
                ror.l #8,d0
                bsr ROx_FLAGS
                cmpi.l #$80018FF1,d0
                bne.s *
                cmpi.l #$00000080,d5
                bne.s *


*     Shift a Memory location LEFT and RIGHT with shift_count of 1 - WORD only

                moveq  #$00000000,d5
                move.l #$00000100,a0
                move.w #$8FF1,(a0)

*        WORD LEFT
                rol (a0)
                bsr ROx_FLAGS
                rol (a0)
                bsr ROx_FLAGS
                rol (a0)
                bsr ROx_FLAGS
                rol (a0)
                bsr ROx_FLAGS
                move.w (a0),d0
                cmpi.l #$8001FF18,d0
                bne.s *
                cmpi.l #$00000009,d5
                bne.s *

*        WORD RIGHT
                ror (a0)
                bsr ROx_FLAGS
                ror (a0)
                bsr ROx_FLAGS
                ror (a0)
                bsr ROx_FLAGS
                ror (a0)
                bsr ROx_FLAGS
                ror (a0)
                bsr ROx_FLAGS
                ror (a0)
                bsr ROx_FLAGS
                move.w (a0),d0
                cmpi.l #$800163FC,d0
                bne.s *
                cmpi.l #$0000001B,d5
                bne.s *

                rts



*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : ROXx
*-----------------------------------------------------------
*-----------------------------------------------------------

*     Subroutine to check and accumulate the flags
ROXx_FLAGS:     move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                rts

op_ROXx:

*     Shift a Register LEFT and RIGHT with shift_count ## IN A REGISTER ##

*        BYTE LEFT
                move.l #$80018FF1,d0
                moveq  #$00000000,d5
                moveq  #$00000011,d6
ROXx_LOOP1:
                roxl.b d6,d0
                bsr ROXx_FLAGS
                dbf d6,ROXx_LOOP1
                cmpi.l #$80018FD0,d0
                bne.s *
                cmpi.l #$00000042,d5
                bne.s *

*        BYTE RIGHT
                move.l #$80018FF1,d0
                moveq  #$00000012,d6
ROXx_LOOP2:
                roxr.b d6,d0
                bsr ROXx_FLAGS
                dbf d6,ROXx_LOOP2
                cmpi.l #$80018F51,d0
                bne.s *
                cmpi.l #$0000009C,d5
                bne.s *


*        WORD LEFT
                move.l #$80018FF1,d0
                moveq  #$00000013,d6
ROXx_LOOP3:
                roxl.w d6,d0
                bsr ROXx_FLAGS
                dbf d6,ROXx_LOOP3
                cmpi.l #$80013980,d0
                bne.s *
                cmpi.l #$000000C9,d5
                bne.s *

*        WORD RIGHT
                move.l #$80018FF1,d0
                move.l #$0000001E,d6
ROXx_LOOP4:
                roxr.w d6,d0
                bsr ROXx_FLAGS
                dbf d6,ROXx_LOOP4
                cmpi.l #$80010A1D,d0
                bne.s *
                cmpi.l #$0000014D,d5
                bne.s *


*        LONG LEFT
                move.l #$80018FF1,d0
                moveq  #$00000015,d6
ROXx_LOOP5:
                roxl.l d6,d0
                bsr ROXx_FLAGS
                dbf d6,ROXx_LOOP5
                cmpi.l #$800185D0,d0
                bne.s *
                cmpi.l #$000001A1,d5
                bne.s *

*        LONG RIGHT
                move.l #$80018FF1,d0
                moveq  #$00000016,d6
ROXx_LOOP6:
                roxr.l d6,d0
                bsr ROXx_FLAGS
                dbf d6,ROXx_LOOP6
                cmpi.l #$082D8200,d0
                bne.s *
                cmpi.l #$000001DE,d5
                bne.s *


*     Shift a Register LEFT and RIGHT with shift_count ## IN THE OPCODE ##

                move.l #$80018FF1,d0
                moveq  #$00000000,d5

*        BYTE LEFT
                roxl.b #1,d0
                bsr ROXx_FLAGS
                roxl.b #5,d0
                bsr ROXx_FLAGS
                roxl.b #7,d0
                bsr ROXx_FLAGS
                roxl.b #8,d0
                bsr ROXx_FLAGS
                cmpi.l #$80018F09,d0
                bne.s *
                cmpi.l #$0000000B,d5
                bne.s *

*        BYTE RIGHT
                roxr.b #1,d0
                bsr ROXx_FLAGS
                roxr.b #5,d0
                bsr ROXx_FLAGS
                roxr.b #7,d0
                bsr ROXx_FLAGS
                roxr.b #8,d0
                bsr ROXx_FLAGS
                cmpi.l #$80018F00,d0
                bne.s *
                cmpi.l #$00000015,d5
                bne.s *

*        WORD LEFT
                roxl.w #1,d0
                bsr ROXx_FLAGS
                roxl.w #5,d0
                bsr ROXx_FLAGS
                roxl.w #7,d0
                bsr ROXx_FLAGS
                roxl.w #8,d0
                bsr ROXx_FLAGS
                cmpi.l #$8001B000,d0
                bne.s *
                cmpi.l #$00000027,d5
                bne.s *

*        WORD RIGHT
                roxr.w #1,d0
                bsr ROXx_FLAGS
                roxr.w #5,d0
                bsr ROXx_FLAGS
                roxr.w #7,d0
                bsr ROXx_FLAGS
                roxr.w #8,d0
                bsr ROXx_FLAGS
                cmpi.l #$80010A00,d0
                bne.s *
                cmpi.l #$00000028,d5
                bne.s *

*        LONG LEFT
                roxl.l #1,d0
                bsr ROXx_FLAGS
                roxl.l #5,d0
                bsr ROXx_FLAGS
                roxl.l #7,d0
                bsr ROXx_FLAGS
                roxl.l #8,d0
                bsr ROXx_FLAGS
                cmpi.l #$40000010,d0
                bne.s *
                cmpi.l #$0000002A,d5
                bne.s *

*        LONG RIGHT
                roxr.l #1,d0
                bsr ROXx_FLAGS
                roxr.l #5,d0
                bsr ROXx_FLAGS
                roxr.l #7,d0
                bsr ROXx_FLAGS
                roxr.l #8,d0
                bsr ROXx_FLAGS
                cmpi.l #$00010200,d0
                bne.s *
                cmpi.l #$00000032,d5
                bne.s *


*     Shift a Memory location LEFT and RIGHT with shift_count of 1 - WORD only

                moveq  #$00000000,d5
                move.l #$00000100,a0
                move.w #$8FF1,(a0)

*        WORD LEFT
                roxl (a0)
                bsr ROXx_FLAGS
                roxl (a0)
                bsr ROXx_FLAGS
                roxl (a0)
                bsr ROXx_FLAGS
                roxl (a0)
                bsr ROXx_FLAGS
                move.w (a0),d0
                cmpi.l #$0001FF10,d0
                bne.s *
                cmpi.l #$00000009,d5
                bne.s *

*        WORD RIGHT
                roxr (a0)
                bsr ROXx_FLAGS
                roxr (a0)
                bsr ROXx_FLAGS
                roxr (a0)
                bsr ROXx_FLAGS
                roxr (a0)
                bsr ROXx_FLAGS
                roxr (a0)
                bsr ROXx_FLAGS
                roxr (a0)
                bsr ROXx_FLAGS
                move.w (a0),d0
                cmpi.l #$000103FC,d0
                bne.s *
                cmpi.l #$0000000A,d5
                bne.s *

                rts




*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : SHIFTS
*-----------------------------------------------------------
*-----------------------------------------------------------

*     Subroutine to check and accumulate the flags
SHIFTS_FLAGS:   move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                rts

op_SHIFTS:

*     Shift a Register LEFT and RIGHT with shift_count ## IN A REGISTER ##

*        BYTE LEFT
                move.l #$80018F81,d0
                moveq  #$00000000,d5
                moveq  #$00000002,d6
SHIFTS_LOOP1:
                asl.b d6,d0
                bsr SHIFTS_FLAGS
                dbf d6,SHIFTS_LOOP1
                cmpi.l #$80018F08,d0
                bne.s *
                cmpi.l #$00000002,d5
                bne.s *

*        BYTE RIGHT
                move.l #$80018F81,d0
                moveq  #$00000002,d6
SHIFTS_LOOP2:
                asr.b d6,d0
                bsr SHIFTS_FLAGS
                dbf d6,SHIFTS_LOOP2
                cmpi.l #$80018FF0,d0
                bne.s *
                cmpi.l #$0000001A,d5
                bne.s *


*        WORD LEFT
                move.l #$80018FF1,d0
                moveq  #$00000002,d6
SHIFTS_LOOP3:
                asl.w d6,d0
                bsr SHIFTS_FLAGS
                dbf d6,SHIFTS_LOOP3
                cmpi.l #$80017F88,d0
                bne.s *
                cmpi.l #$0000001C,d5
                bne.s *

*        WORD RIGHT
                move.l #$80018FF1,d0
                moveq  #$00000002,d6
SHIFTS_LOOP4:
                asr.w d6,d0
                bsr SHIFTS_FLAGS
                dbf d6,SHIFTS_LOOP4
                cmpi.l #$8001F1FE,d0
                bne.s *
                cmpi.l #$00000034,d5
                bne.s *


*        LONG LEFT
                move.l #$80018FF1,d0
                moveq  #$00000002,d6
SHIFTS_LOOP5:
                asl.l d6,d0
                bsr SHIFTS_FLAGS
                dbf d6,SHIFTS_LOOP5
                cmpi.l #$000C7F88,d0
                bne.s *
                cmpi.l #$00000036,d5
                bne.s *

*        LONG RIGHT
                move.l #$80018FF1,d0
                moveq  #$00000002,d6
SHIFTS_LOOP6:
                asr.l d6,d0
                bsr SHIFTS_FLAGS
                dbf d6,SHIFTS_LOOP6
                cmpi.l #$F00031FE,d0
                bne.s *
                cmpi.l #$0000004E,d5
                bne.s *


*     Shift a Register LEFT and RIGHT with shift_count ## IN THE OPCODE ##

                move.l #$80018FF1,d0
                moveq  #$00000000,d5

*        BYTE LEFT
                asl.b #1,d0
                bsr SHIFTS_FLAGS
                asl.b #2,d0
                bsr SHIFTS_FLAGS
                asl.b #1,d0
                bsr SHIFTS_FLAGS
                asl.b #3,d0
                bsr SHIFTS_FLAGS
                cmpi.l #$80018F80,d0
                bne.s *
                cmpi.l #$0000001F,d5
                bne.s *

*        BYTE RIGHT
                asr.b #1,d0
                bsr SHIFTS_FLAGS
                asr.b #2,d0
                bsr SHIFTS_FLAGS
                asr.b #3,d0
                bsr SHIFTS_FLAGS
                asr.b #1,d0
                bsr SHIFTS_FLAGS
                cmpi.l #$80018FFF,d0
                bne.s *
                cmpi.l #$0000003F,d5
                bne.s *

*        WORD LEFT
                asl.w #1,d0
                bsr SHIFTS_FLAGS
                asl.w #2,d0
                bsr SHIFTS_FLAGS
                asl.w #3,d0
                bsr SHIFTS_FLAGS
                asl.w #5,d0
                bsr SHIFTS_FLAGS
                cmpi.l #$8001F800,d0
                bne.s *
                cmpi.l #$00000056,d5
                bne.s *

*        WORD RIGHT
                asr.w #5,d0
                bsr SHIFTS_FLAGS
                asr.w #1,d0
                bsr SHIFTS_FLAGS
                asr.w #2,d0
                bsr SHIFTS_FLAGS
                asr.w #4,d0
                bsr SHIFTS_FLAGS
                cmpi.l #$8001FFFF,d0
                bne.s *
                cmpi.l #$00000077,d5
                bne.s *

*        LONG LEFT
                move.l #$80018FF1,d0
                asl.l #1,d0
                bsr SHIFTS_FLAGS
                asl.l #2,d0
                bsr SHIFTS_FLAGS
                asl.l #7,d0
                bsr SHIFTS_FLAGS
                asl.l #4,d0
                bsr SHIFTS_FLAGS
                cmpi.l #$63FC4000,d0
                bne.s *
                cmpi.l #$0000007A,d5
                bne.s *

*        LONG RIGHT
                move.l #$80018FF1,d0
                asr.l #1,d0
                bsr SHIFTS_FLAGS
                asr.l #5,d0
                bsr SHIFTS_FLAGS
                asr.l #7,d0
                bsr SHIFTS_FLAGS
                asr.l #8,d0
                bsr SHIFTS_FLAGS
                cmpi.l #$FFFFFC00,d0
                bne.s *
                cmpi.l #$0000009C,d5
                bne.s *


*     Shift a Memory location LEFT and RIGHT with shift_count of 1 - WORD only

                moveq  #$00000000,d5
                move.l #$00000100,a0
                move.w #$8FF1,(a0)

*        WORD LEFT
                asl  (a0)
                bsr SHIFTS_FLAGS
                asl  (a0)
                bsr SHIFTS_FLAGS
                asl  (a0)
                bsr SHIFTS_FLAGS
                asl  (a0)
                bsr SHIFTS_FLAGS
                move.w (a0),d0
                cmpi.l #$FFFFFF10,d0
                bne.s *
                cmpi.l #$0000000D,d5
                bne.s *

*        WORD RIGHT
                asr (a0)
                bsr SHIFTS_FLAGS
                asr (a0)
                bsr SHIFTS_FLAGS
                asr (a0)
                bsr SHIFTS_FLAGS
                asr (a0)
                bsr SHIFTS_FLAGS
                asr (a0)
                bsr SHIFTS_FLAGS
                asr (a0)
                bsr SHIFTS_FLAGS
                move.w (a0),d0
                cmpi.l #$FFFFFFFC,d0
                bne.s *
                cmpi.l #$0000003E,d5
                bne.s *

                rts



*-----------------------------------------------------------
*-----------------------------------------------------------
* OPCODE : SHIFTS2
*-----------------------------------------------------------
*-----------------------------------------------------------

*     Subroutine to check and accumulate the flags
SHIFTS2_FLAGS:  move.w sr,d3
                andi.l #$0F,d3            * Isolate flags
                add.l d3,d5               * Copy flag results into accumulator
                rts

op_SHIFTS2:

*     Shift a Register LEFT and RIGHT with shift_count ## IN A REGISTER ##

*        BYTE LEFT
                move.l #$80018F81,d0
                moveq  #$00000000,d5
                moveq  #$00000002,d6
SHIFTS2_LOOP1:
                lsl.b d6,d0
                bsr SHIFTS2_FLAGS
                dbf d6,SHIFTS2_LOOP1
                cmpi.l #$80018F08,d0
                bne.s *
                cmpi.l #$00000000,d5
                bne.s *

*        BYTE RIGHT
                move.l #$80018F81,d0
                moveq  #$00000002,d6
SHIFTS2_LOOP2:
                lsr.b d6,d0
                bsr SHIFTS2_FLAGS
                dbf d6,SHIFTS2_LOOP2
                cmpi.l #$80018F10,d0
                bne.s *
                cmpi.l #$00000000,d5
                bne.s *


*        WORD LEFT
                move.l #$80018FF1,d0
                moveq  #$00000002,d6
SHIFTS2_LOOP3:
                lsl.w d6,d0
                bsr SHIFTS2_FLAGS
                dbf d6,SHIFTS2_LOOP3
                cmpi.l #$80017F88,d0
                bne.s *
                cmpi.l #$00000000,d5
                bne.s *

*        WORD RIGHT
                move.l #$80018FF1,d0
                moveq  #$00000002,d6
SHIFTS2_LOOP4:
                lsr.w d6,d0
                bsr SHIFTS2_FLAGS
                dbf d6,SHIFTS2_LOOP4
                cmpi.l #$800111FE,d0
                bne.s *
                cmpi.l #$00000000,d5
                bne.s *


*        LONG LEFT
                move.l #$80018FF1,d0
                moveq  #$00000002,d6
SHIFTS2_LOOP5:
                lsl.l d6,d0
                bsr SHIFTS2_FLAGS
                dbf d6,SHIFTS2_LOOP5
                cmpi.l #$000C7F88,d0
                bne.s *
                cmpi.l #$00000000,d5
                bne.s *

*        LONG RIGHT
                move.l #$80018FF1,d0
                moveq  #$00000002,d6
SHIFTS2_LOOP6:
                lsr.l d6,d0
                bsr SHIFTS2_FLAGS
                dbf d6,SHIFTS2_LOOP6
                cmpi.l #$100031FE,d0
                bne.s *
                cmpi.l #$00000000,d5
                bne.s *


*     Shift a Register LEFT and RIGHT with shift_count ## IN THE OPCODE ##

                move.l #$80018FF1,d0
                moveq  #$00000000,d5

*        BYTE LEFT
                lsl.b #1,d0
                bsr SHIFTS2_FLAGS
                lsl.b #2,d0
                bsr SHIFTS2_FLAGS
                lsl.b #1,d0
                bsr SHIFTS2_FLAGS
                lsl.b #3,d0
                bsr SHIFTS2_FLAGS
                cmpi.l #$80018F80,d0
                bne.s *
                cmpi.l #$0000001B,d5
                bne.s *

*        BYTE RIGHT
                lsr.b #1,d0
                bsr SHIFTS2_FLAGS
                lsr.b #2,d0
                bsr SHIFTS2_FLAGS
                lsr.b #3,d0
                bsr SHIFTS2_FLAGS
                lsr.b #1,d0
                bsr SHIFTS2_FLAGS
                cmpi.l #$80018F01,d0
                bne.s *
                cmpi.l #$0000001B,d5
                bne.s *

*        WORD LEFT
                lsl.w #1,d0
                bsr SHIFTS2_FLAGS
                lsl.w #2,d0
                bsr SHIFTS2_FLAGS
                lsl.w #3,d0
                bsr SHIFTS2_FLAGS
                lsl.w #5,d0
                bsr SHIFTS2_FLAGS
                cmpi.l #$80010800,d0
                bne.s *
                cmpi.l #$00000025,d5
                bne.s *

*        WORD RIGHT
                lsr.w #5,d0
                bsr SHIFTS2_FLAGS
                lsr.w #1,d0
                bsr SHIFTS2_FLAGS
                lsr.w #2,d0
                bsr SHIFTS2_FLAGS
                lsr.w #4,d0
                bsr SHIFTS2_FLAGS
                cmpi.l #$80010000,d0
                bne.s *
                cmpi.l #$0000002A,d5
                bne.s *

*        LONG LEFT
                move.l #$80018FF1,d0
                lsl.l #1,d0
                bsr SHIFTS2_FLAGS
                lsl.l #2,d0
                bsr SHIFTS2_FLAGS
                lsl.l #7,d0
                bsr SHIFTS2_FLAGS
                lsl.l #4,d0
                bsr SHIFTS2_FLAGS
                cmpi.l #$63FC4000,d0
                bne.s *
                cmpi.l #$0000002B,d5
                bne.s *

*        LONG RIGHT
                move.l #$80018FF1,d0
                lsr.l #1,d0
                bsr SHIFTS2_FLAGS
                lsr.l #5,d0
                bsr SHIFTS2_FLAGS
                lsr.l #7,d0
                bsr SHIFTS2_FLAGS
                lsr.l #8,d0
                bsr SHIFTS2_FLAGS
                cmpi.l #$00000400,d0
                bne.s *
                cmpi.l #$0000002D,d5
                bne.s *


*     Shift a Memory location LEFT and RIGHT with shift_count of 1 - WORD only

                moveq  #$00000000,d5
                move.l #$00000100,a0
                move.w #$8FF1,(a0)

*        WORD LEFT
                lsl  (a0)
                bsr SHIFTS2_FLAGS
                lsl  (a0)
                bsr SHIFTS2_FLAGS
                lsl  (a0)
                bsr SHIFTS2_FLAGS
                lsl  (a0)
                bsr SHIFTS2_FLAGS
                move.w (a0),d0
                cmpi.l #$0000FF10,d0
                bne.s *
                cmpi.l #$00000009,d5
                bne.s *

*        WORD RIGHT
                lsr (a0)
                bsr SHIFTS2_FLAGS
                lsr (a0)
                bsr SHIFTS2_FLAGS
                lsr (a0)
                bsr SHIFTS2_FLAGS
                lsr (a0)
                bsr SHIFTS2_FLAGS
                lsr (a0)
                bsr SHIFTS2_FLAGS
                lsr (a0)
                bsr SHIFTS2_FLAGS
                move.w (a0),d0
                cmpi.l #$000003FC,d0
                bne.s *
                cmpi.l #$0000000A,d5
                bne.s *

                rts

;-----------------------------------------------------------
;-----------------------------------------------------------
; OPCODE : BSR / RTS
;-----------------------------------------------------------
;-----------------------------------------------------------

;t3_bsr:
;       moveq   #3,d3
;       rts

;t1_bsr:
;       moveq   #1,d1
;       rts

;op_bsr:
;       bsr                     t1_bsr
;       bsr                     t2_bsr
;       bsr.w           t3_bsr
;       bsr.w           t4_bsr
;       cmpi.l  #1,d1
;       bne                     *
;       cmpi.l  #2,d2
;       bne                     *
;       cmpi.l  #3,d3
;       bne                     *
;       cmpi.l  #4,d4
;       bne                     *
;       rts

;t2_bsr:
;       moveq   #2,d2
;       rts
        
;t4_bsr:
;       moveq   #4,d4
;       rts
*    END
    

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.