; ***************************************************** ; *** Modes.68 *** ; *** Tests different addressing modes of Sim68k *** ; *** Tests MOVE, MOVEA, SWAP, CLR *** ; *** Also, uses BRA, INP, DSP, and HLT *** ; ***************************************************** ; Assembler OpCode Oper1 Oper2 ; MSB LSB MSB LSB MSL LSB ;---------------------------------------------------------- ; Branch to the first instruction BRA.W @Main ; ; Declarations DEF.W @Const1, #$FFFF ; DEF.B @Const2, #$00 ; DEF.L @Var1, #$12345678 ; DEF.L @Const3, #$FEDCBA98 ; DEF.W @Const4, #$0004 ; DEF.W @Const5, #$0007 ; DEF.B @ArrayB0, #$00 ; DEF.B @ArrayB1, #$01 ; DEF.B @ArrayB2, #$02 ; DEF.B @ArrayB3, #$03 ; DEF.B @ArrayB4, #$04 ; DEF.L @ArrayBSz, #$00000005 ; DEF.W @ArrayW0, #$0000 ; DEF.W @ArrayW1, #$0001 ; DEF.W @ArrayW2, #$0002 ; DEF.L @ArrayWSz, #$00000003 ; DEF.L @ArrayL0, #$11112222 ; DEF.L @ArrayL1, #$33334444 ; DEF.L @ArrayL2, #$55556666 ; DEF.L @ArrayL3, #$77778888 ; DEF.L @ArrayLSz, #$00000004 ; ; Main program LABEL @Main ; ;------------------------------ ; Data register direct ; CLR, DSP, MOVE, SWAP ;------------------------------ CLR.L D0 ; MOVE.L @Const3, D1 ; DSP.B D0 ; DSP.W D0 ; DSP.L D0 ; MOVE.L @Var1, D0 ; DSP.L D0 ; MOVE.W @Const1, D0 ; DSP.L D0 ; MOVE.B @Const2, D0 ; DSP.L D0 ; DSP.L D1 ; EXG.L D0, D1 ; DSP.L D0 ; DSP.L D1 ; INP.B D0 ; ;------------------------------ ; Absolute ; MOVE, CLR, DSP ;------------------------------ DSP.L $0007 ; CLR.B $0007 ; DSP.B $0007 ; DSP.W $0007 ; CLR.B $0008 ; DSP.L $0007 ; MOVE.L $000B, $0007 ; DSP.B $0009 ; DSP.B $000A ; DSP.L $0007 ; MOVE.W $0007, $0008 ; DSP.L $0007 ; MOVE.B $0007, $000A ; DSP.L $000A ; INP.B D0 ; ;------------------------------ ; Address register direct ; MOVEA ;------------------------------ MOVEA.W #$000F, A0 ; DSP.B A0 ; DSP.W A0 ; MOVEA.W #$0007, A0 ; DSP.W A0 ; MOVEA.W #$000B, A1 ; DSP.W A1 ; MOVEA.W #$0004, A1 ; DSP.W A1 ; INP.B D0 ; ;------------------------------ ; Address register indirect ; DSP ;------------------------------ DSP.B (A1) ; DSP.W (A1) ; DSP.L (A1) ; MOVEA.W @Const5, A0 ; DSP.B (A0) ; DSP.W (A0) ; DSP.L (A0) ; INP.B D0 ; ;------------------------------ ; Direct par registre d'adresse ; avec post-incrementation ou ; pre-decrementation ;------------------------------ ; Displays ArrayB 0..4 MOVE.L @ArrayBSz, D0 ; MOVEA.W #$0013, A0 ; LABEL @L0 ; DSP.B (A0)+ ; SUBQ.L #$1, D0 ; BEQ.W @L1 ; BRA.W @L0 ; ;------------------------------ ; Displays ArrayB 0..4 LABEL @L1 ; MOVE.L @ArrayBSz, D0 ; MOVEA.W #$0018, A0 ; LABEL @L2 ; DSP.B -(A0) ; SUBQ.L #$1, D0 ; BEQ.W @L3 ; BRA.W @L2 ; ;------------------------------ ; Displays 0..2 LABEL @L3 ; MOVE.L @ArrayWSz, D0 ; MOVEA.W #$001C, A0 ; LABEL @L4 ; DSP.W (A0)+ ; SUBQ.L #$1, D0 ; BEQ.W @L5 ; BRA.W @L4 ; ;------------------------------ ; Displays ArrayL 0..3 LABEL @L5 ; MOVE.L @ArrayLSz, D0 ; MOVEA.W #$0036, A0 ; LABEL @L6 ; DSP.L -(A0) ; SUBQ.L #$1, D0 ; BEQ.W @L7 ; BRA.W @L6 ; LABEL @L7 ; ; End of program HLT.B ;