10.アセンブラによるRTLシミュレーション、デバッグ

さていよいよデバッグです。構想からハードの記述にここまで約一週間を要しています。多くはマイクロコードの記述に時間がかかっています。CPUのデバッグはハード設計以上に時間のかかかるつらい作業です。(全体の構想を考えているときは楽しいのですが。) 

論理合成できることを確認しておきます。(5400LUT,34MHz程度)。また、致命的な構想のミスもないように思われます

実際のCPUの命令を走らせて動作をWaveformviewで確認しながら、デバッグします。全アドレシングモード、全命令パターンをアセンブラで書いてデバッグします。筆者は、次の手順でデバッグしています。

RTLシミュレーションのコンパイル開始から目的時刻の波形表示まで、数秒です。一命令のテスト記述、アセンブル、Reload&Go、波形確認をしながらデバッグを進めます。
Veritakは筆者が使い易いように設計しているので(筆者にとっては)快適なデバッグ環境になっています。

この過程で、マイクロコードを含む数十箇所を修正しました。




< 例 >
 WaveformViewerで割り込み動作を確認しましょう。



ステート
ST0 スタックポインタ(ER7)が示すアドレス(Daddr)にNEXT_PC(3Byte)とCCR(フラグ1Byte)をRAMの入力in_dataに出力しRAMにWrite(ram_write)します。これで、割り込み前の情報をSPの示すアドレスにSaveします。
ST1 スタックポインタ(ER7)をデクリメントします。4ByteSaveしたので、この場合は、−4します。 Daddに割り込みVectorアドレス(20Hex)を出力します。これに対するRAMのデータ出力は2クロック遅れのST4で得られます。
ST2 アイドルです。(RAMのRead結果出力待ち)
ST4 割り込みを受け付けたことを示すフラグをOnにします。(CCR:79=> f9h) 割り込みアドレス7d0hexがRAMから出力されました。これを、PCとします。割り込み
サイクルの終了です。次のステートST0は、割り込みルーチンの最初の命令のフェッチサイクルになります。

と言う具合に確認、デバッグしていきます。

筆者環境でのアセンブル、モトローラ形式からIntel Hexファイルへの変換バッチファイル

a38h h8_test.mar
l38h h8_test.obj
c38h h8_test.abs
genromh8_1 h8_test.mot -16
copy code0.hex f:\altera\h8_project\*.*
copy code1.hex f:\altera\h8_project\*.*
copy code2.hex f:\altera\h8_project\*.*
copy code3.hex f:\altera\h8_project\*.*
copy code4.hex f:\altera\h8_project\*.*
copy code5.hex f:\altera\h8_project\*.*
copy code6.hex f:\altera\h8_project\*.*
copy code7.hex f:\altera\h8_project\*.*


テストベンチ

 テストベンチは、Cによるデバッグに同じです。次章をご参照ください。違うのは、RAMの初期値(code0.hex..code7.hex プログラム)が違います。


アセンブラテスト全ソース

;Jun.5.2004
;秋月のアセンブラが古いのか?いくつかテストできなかった命令あり。
;GCC がd:24相対を吐くのでd:24もBYTEとWORDのみ対応。幸いLONGは今のところない。
;割り込みもインプリメントしたが、割り込みコントローラを書いていないので、Vector20Hに固定になっている。
;-----CPUの指定----- 
        .CPU 300HA

;-----リセットベクトル-----
;       .SECTION RESET0,DATA,LOCATE=H'000000
        .DATA.L INIT            ;リセットベクトル
        .DATA.L H'0000

jmp_check3:
        .DATA.L jmp_check4
jsr_check:
        .DATA.L sub

        .ORG H'20
        .DATA.L interrupt;//暫定割り込みVector
aa_check:
        .DATA.L H'00000000


;       .ORG    H'100
        .ORG    H'100

;       .DATA.L INIT
;-----I/Oの初期設定-----     
        .SECTION ROM,CODE,LOCATE=H'100

INIT:   MOV.L   #H'000FF0,ER7   ;スタックポインタ設定
        

        LDC #H'7f,CCR ;割り込みEnable
        MOV.B   #H'01,R0L       
        MOV.B   #H'02,R0H
        MOV.B   #H'03,R1L
        MOV.B   #H'04,R1H
        MOV.B   #H'05,R2L       
        MOV.B   #H'06,R2H
        MOV.B   #H'07,R3L
        MOV.B   #H'08,R3H
        MOV.B   #H'09,R4L       
        MOV.B   #H'0A,R5H
        MOV.B   #H'0B,R5L
        MOV.B   #H'0C,R5H
        MOV.B   #H'0D,R6L
        MOV.B   #H'0D,R6H
;disp:24 test   
        mov.l   #(work+2),ER0;
        mov.w  #H'ccdd,R3
        mov.w  #H'aabb,R2
        mov.w  R3,@(-2:24,ER0)
        mov.w  R2,@( 2:24,ER0)
        mov.w  @(-2:24,ER0),R4  
        mov.w  @( 2:24,ER0),R5
        mov.b  @(3:24,ER0),R1L
        mov.b  @(-1:24,ER0),R1H
        mov.b  #H'aa,R1l
        mov.b  #H'55,R1H
        mov.b  R1L,@(2:24,ER0)
        mov.b  R1H,@(-2:24,ER0)
        mov.W  @(-2:24,ER0),E2
        mov.W  @(2:24,ER0),E3

        



;mulxs.W Test
        mov.W  #2,E1
        mov.W  #3,R2
        mulxs.W E1,ER2

        mov.W  #30584,E1
        mov.W  #30952,R2
        mulxs.W E1,ER2

        mov.W  #H'10,E1
        mov.W  #H'10,R2
        mulxs.W E1,ER2


        mov.W  #-1,E1
        mov.W  #H'100,R2
        mulxs.W E1,ER2

        mov.W  #H'100,E1
        mov.W  #-1,R2
        mulxs.W E1,ER2

;Mulxs.B 
        mov.B  #2,R1L
        mov.B  #3,R2L
        mulxs.B R1L,R2

        mov.B  #127,R1L
        mov.B  #125,R2L
        mulxs.B R1L,R2

        mov.B  #H'10, R1L
        mov.B  #H'10, R2L
        mulxs.B R1L,R2


        mov.B  #-1,R1L
        mov.B  #127,R2L
        mulxs.B R1L,R2

        mov.B  #124,R1L
        mov.B  #-1,R2L
        mulxs.B R1L,R2

;mulxu.W Test
        mov.W  #2,E1
        mov.W  #3,R2
        mulxu.W E1,ER2

        mov.W  #30584,E1
        mov.W  #30952,R2
        mulxu.W E1,ER2

        mov.W  #H'10,E1
        mov.W  #H'10,R2
        mulxu.W E1,ER2


        mov.W  #-1,E1
        mov.W  #H'100,R2
        mulxu.W E1,ER2

        mov.W  #H'100,E1
        mov.W  #-1,R2
        mulxu.W E1,ER2

;Mulxu.B 
        mov.B  #2,R1L
        mov.B  #3,R2L
        mulxu.B R1L,R2

        mov.B  #127,R1L
        mov.B  #125,R2L
        mulxu.B R1L,R2

        mov.B  #H'10, R1L
        mov.B  #H'10, R2L
        mulxu.B R1L,R2


        mov.B  #-1,R1L
        mov.B  #127,R2L
        mulxu.B R1L,R2

        mov.B  #124,R1L
        mov.B  #-1,R2L
        mulxu.B R1L,R2

;divxs.W Test
        mov.W  #1,E1
        mov.L  #20,ER2
        divxs.W E1,ER2

        mov.W  #2,E1
        mov.L  #20,ER2
        divxs.W E1,ER2

        mov.W  #3,E1
        mov.L  #20,ER2
        divxs.W E1,ER2

        mov.W  #14444,E1
        mov.L  #12343120,ER2
        divxs.W E1,ER2


        mov.W  #11,E1
        mov.L  #20,ER2
        divxs.W E1,ER2

        mov.W  #20,E1
        mov.L  #20,ER2
        divxs.W E1,ER2

        mov.W  #21,E1
        mov.L  #20,ER2
        divxs.W E1,ER2
;minus test
        mov.W  #-1,E1
        mov.L  #20,ER2
        divxs.W E1,ER2

        mov.W  #-2,E1
        mov.L  #20,ER2
        divxs.W E1,ER2

        mov.W  #-3,E1
        mov.L  #20,ER2
        divxs.W E1,ER2

        mov.W  #10,E1
        mov.L  #-20,ER2
        divxs.W E1,ER2


        mov.W  #11,E1
        mov.L  #-20,ER2
        divxs.W E1,ER2

        mov.W  #20,E1
        mov.L  #-20,ER2
        divxs.W E1,ER2

        mov.W  #21,E1
        mov.L  #-20,ER2
        divxs.W E1,ER2


        mov.W  #-1,E1
        mov.L  #-20,ER2
        divxs.W E1,ER2

        mov.W  #-2,E1
        mov.L  #-20,ER2
        divxs.W E1,ER2

        mov.W  #-3,E1
        mov.L  #-20,ER2
        divxs.W E1,ER2

        mov.W  #-10,E1
        mov.L  #-20,ER2
        divxs.W E1,ER2


        mov.W  #-11,E1
        mov.L  #-20,ER2
        divxs.W E1,ER2

        mov.W  #20000,E1
        mov.L  #-2000000,ER2
        divxs.W E1,ER2

        mov.W  #-20001,E1
        mov.L  #-2000000,ER2
        divxs.W E1,ER2





;divxs.B Test
        mov.B  #1,R1L
        mov.W  #20,R2
        divxs.B R1L,R2

        mov.B  #1,R1L
        mov.W  #1,R2
        divxs.B R1L,R2

        mov.B  #1,R1L
        mov.W  #2,R2
        divxs.B R1L,R2

        mov.B  #2,R1L
        mov.W  #2,R2
        divxs.B R1L,R2

        mov.B  #3,R1L
        mov.W  #20,R2
        divxs.B R1L,R2

        mov.B  #127,R1L
        mov.W  #(127*127-1),R2
        divxs.B R1L,R2

;divxu.W Test
        mov.W  #1,E1
        mov.L  #20,ER2
        divxu.W E1,ER2

        mov.W  #2,E1
        mov.L  #20,ER2
        divxu.W E1,ER2

        mov.W  #3,E1
        mov.L  #20,ER2
        divxu.W E1,ER2

        mov.W  #10,E1
        mov.L  #20,ER2
        divxu.W E1,ER2


        mov.W  #11,E1
        mov.L  #20,ER2
        divxu.W E1,ER2

        mov.W  #20,E1
        mov.L  #20,ER2
        divxu.W E1,ER2

        mov.W  #21,E1
        mov.L  #20,ER2
        divxu.W E1,ER2

;divxu.B Test
        mov.B  #1,R1L
        mov.W  #20,R2
        divxu.B R1L,R2

        mov.B  #1,R1L
        mov.W  #1,R2
        divxu.B R1L,R2

        mov.B  #1,R1L
        mov.W  #2,R2
        divxu.B R1L,R2

        mov.B  #2,R1L
        mov.W  #2,R2
        divxu.B R1L,R2

        mov.B  #3,R1L
        mov.W  #20,R2
        divxu.B R1L,R2

        mov.B  #127,R1L
        mov.W  #(127*127-1),R2
        divxu.B R1L,R2
        
        mov.B  #0,R1L; zflag test
        mov.W  #(127*127-1),R2
        divxu.B R1L,R2

        bra     INIT2
        .SECTION ram0,code,locate=H'0000500

INIT2:
        mov.l   #H'abcd0123 ,ER6
        mov.l   #H'5555555  ,ER5
        mov.l   #H'4455555  ,ER4
        mov.l   #H'3355555  ,ER3
        mov.l   #H'2222555  ,ER2
        mov.l   #H'1111115  ,ER1
        mov.l   #H'0000005  ,ER0
        bra     INIT3
        nop
INIT3:
        mov.L  #work,ER0
        mov.L  #H'10,ER6
        mov.L  #H'0,ER1

loop1:
        mov.B  @ER0+,R2L;
        mov.B  @ER0+,R2L;
        mov.B  @ER0+,R2L;
        mov.B  @ER0+,R2L;
        mov.B  @ER0+,R2L;
        mov.B  @ER0+,R2L;
        mov.B  @ER0+,R2L;
        mov.B  @ER0+,R2L;

        mov.B  #H'FF,R2L
        mov.B  R2L,@-ER0        
        mov.B  R2L,@-ER0        
        mov.B  R2L,@-ER0        
        mov.B  R2L,@-ER0        
        mov.B  R2L,@-ER0        
        mov.B  R2L,@-ER0        
        mov.B  R2L,@-ER0        
        mov.B  R2L,@-ER0        

        mov.B  @ER0+,R3L
        mov.B  @ER0+,R3H
        mov.B  @ER0+,R4L
        mov.B  @ER0+,R4H
        mov.B  @ER0+,R5L
        mov.B  @ER0+,R5H
        mov.B  @ER0+,R6L
        mov.B  @ER0+,R6H

        mov.L  #H'44332211,ER1
        mov.L  #0,ER2
        mov.L  #0,ER3
        mov.L  #0,ER4
        mov.L  #0,ER5
        mov.L  #0,ER6




        
        mov.L  ER1,@work
        add.L  ER1,ER1
        mov.L  ER1,@(work+4)



;mov.W TEST
        mov.L  #work,ER0
        mov.W  @ER0+,R2;
        mov.W  @ER0+,R2;
        mov.W  @ER0+,R2;
        mov.W  @ER0+,R2;

        mov.L  #work,ER0
        mov.L  @ER0+,ER3
        mov.L  @ER0+,ER4

        
        mov.W  #H'abcd,E1
        mov.W  #H'0123,E2
        mov.W  #H'aa55,E3
        mov.W  #H'ef01,E4

        mov.W  E1,@-ER0
        mov.W  E2,@-ER0
        mov.W  E3,@-ER0
        mov.W  E4,@-ER0

        mov.W  @ER0+,R1
        mov.W  @ER0+,R2
        mov.W  @ER0+,R3
        mov.W  @ER0+,R4

        mov.L #work,ER0

        mov.W #H'aaaa,E1;
        mov.W E1,@ER0
        mov.W @ER0,R1

        mov.W #H'bbbb,E2;
        mov.W E2,@ER0
        mov.W @ER0,R2

        mov.W #H'cccc,E3;
        mov.W E3,@ER0
        mov.W @ER0,R3

        mov.W #H'dddd,E4
        mov.W E4,@ER0
        mov.W @ER0,R4

        inc.L #2,ER0
        mov.W @(-2:16,ER0),R5
        mov.W @(-2:16,ER0),R6
        mov.W @(-2:16,ER0),E5
        mov.W @(-2:16,ER0),E6

        mov.W R5,@(2:16,ER0)
        mov.W @(2:16,ER0),R1
        mov.W R5,@(2:16,ER0)
        mov.W @(2:16,ER0),E1
        mov.W R6,@(2:16,ER0)
        mov.W @(2:16,ER0),R2
        mov.W E6,@(2:16,ER0)
        mov.W @(2:16,ER0),E2


        mov.W #H'eeee,E1
        mov.W E1,@(work:16)
        mov.W @(work:16),R1
        
        mov.W #H'7777,E2
        mov.W E2,@(work:24)
        mov.W @(work:24),R2     
        mov.W R2,R3
        mov.W R2,E3
        mov.W r2,E2
        mov.W R2,E6
        mov.W R2,R6

;mov.L TEST
        mov.L  #work,ER0
        mov.L  #H'88888888, ER1
        mov.L  ER1, @ER0;
        mov.L  #H'99999999, ER1
        mov.L  ER1,@(4:16,ER0)
        mov.L  #H'AAAAAAAA, ER1
        mov.L  ER1,@(8:16,ER0)

        mov.L  @ER0+,ER2;
        mov.L  @ER0+,ER3;
        mov.L  @ER0+,ER4;
        
        mov.L  ER6,@-ER0
        mov.L  ER5,@-ER0
        mov.L  ER4,@-ER0

        mov.L  @ER0+,ER2;
        mov.L  @ER0+,ER3;
        mov.L  @ER0+,ER4;

        mov.L #work,ER0
        mov.L #H'aaaaaaaa,ER1
        mov.L ER1,@ER0
        mov.L @ER0,ER4

        mov.L #H'bbbbbbbb,ER2;
        mov.L ER2,@ER0
        mov.L @ER0,ER5

        mov.L #H'cccccccc,ER3;
        mov.L ER3,@ER0
        mov.L @ER0,ER6

        mov.L #H'dddddddd,ER4
        mov.L ER4,@ER0
        mov.L @ER0,ER3

        add.L #4,ER0
        mov.L @(-4:16,ER0),ER5


        mov.L ER5,@(4:16,ER0)
        mov.L @(4:16,ER0),ER1



        mov.L #H'eeeeeeee,ER1
        mov.L ER1,@(work:16)
        mov.L @(work:16),ER2
        
        mov.L #H'77777777,ER2
        mov.L ER2,@(work:24)
        mov.L @(work:24),ER3    
        mov.L ER3,ER5
        mov.L ER5,ER4
        mov.L ER4,ER1



;mov.B TEST
        mov.L  #work,ER0
        mov.B  #H'88, R1L
        mov.B  R1L, @ER0;
        mov.B  #H'99, R1H
        mov.B  R1H,@(1:16,ER0)
        mov.B  #H'AA, R2L
        mov.B  R2L,@(2:16,ER0)

        mov.B  @ER0+,R3L;
        mov.B  @ER0+,R3H;
        mov.B  @ER0+,R4L;
        
        mov.B  R3L,@-ER0
        mov.B  R4L,@-ER0
        mov.B  R3H,@-ER0

        mov.B  @ER0+,R4H;
        mov.B  @ER0+,R5L;
        mov.B  @ER0+,R5H;

        mov.L #work,ER0
        mov.B #H'aa,R1L
        mov.B R1L,@ER0
        mov.B @ER0,R1H

        mov.B #H'bb,R2L;
        mov.B R2L,@ER0
        mov.B @ER0,R2H

        mov.B #H'cc,R3L;
        mov.B R3L,@ER0
        mov.B @ER0,R3H

        mov.B #H'dd,R4L
        mov.B R4L,@ER0
        mov.B @ER0,R4H

        add.L #1,ER0
        mov.B @(-1:16,ER0),R5L


        mov.B R5L,@(1:16,ER0)
        mov.B @(1:16,ER0),R6L



        mov.B #H'ee,R1L
        mov.B R1L,@(work:16)
        mov.B @(work:16),R1H
        
        mov.B #H'77,R2L
        mov.B R2L,@(work:24)
        mov.B @(work:24),R3L    
        mov.B R3L,R5L
        mov.B R5L,R4H
        mov.B R4H,R1H


        mov.B #H'55,R1H
;;秋月アセンブラNG      mov.B R1H,@(H'a0:8)
;;                  mov.B @(H'a0:8),R1L
        
        nop
        nop
;BSR
        bsr sub
        bsr sub:8
        mov.L #jmp_check1, ER6
;JMP
        jmp @ER6
        bra check_port
jmp_check1:
        jmp @jmp_check2


        
sub:
        push.W R1
        push.W R2

        pop.W R2
        pop.W R1
        rts

interrupt:
        push.W R1
        push.W R2

        pop.W R2
        pop.W R1
        rte

check_port:
        
        bra   INIT3
jmp_check4:
        mov.L #sub, ER6
        jsr   @ER6
        jsr   @sub
        jsr   @@jsr_check

;NOT Test
        mov.B #H'ff,R6L
        NOT.B R6L
        mov.W #H'ffff,E6
        NOT.W E6
        mov.L #H'FFFFFFFF,ER6
        NOT.L ER6

;EXTU TEST
        mov.L #H'FFFFffff,ER5
        extu.w R5
        mov.L #H'FFFFffff,ER5
        extu.L ER5
;EXTS TEST
        mov.L #H'0000080,ER5
        exts.w R5
        mov.L #H'00008000,ER5
        exts.L ER5
;INC TEST
        mov.B #H'00,R0L
        inc.B R0L
        mov.B #H'ff,R0L
        inc.B R0L
        mov.W #H'0000,R0
        inc.W #1,R0
        mov.W #H'fffe,R0
        inc.W #2,R0
        mov.W #H'0000,R0
        inc.W #2,R0
        mov.W #H'fffe,R0
        inc.W #2,R0
        mov.L #H'ffffffff,ER0
        inc.L #1,ER0
;DEC TEST
        dec.L #1,ER0
        dec.L #1,ER0
        inc.L #2,ER0
        dec.L #2,ER0
        mov.L #H'00000000,ER0
        dec.B R0L
        inc.B R0L
        dec.W #1,R0
        inc.W #1,R0
        dec.W #2,R0
        
;NEG TEST
        mov.B #H'ff,R0L
        NEG.B R0l

        mov.B #H'7f,R0L
        NEG.B R0L

        mov.B #H'80,R0L
        NEG.B R0L

        mov.W #H'ffff,R0
        NEG.W R0

        mov.W #H'7fff,R0
        NEG.W R0

        mov.W #H'8000,R0
        NEG.W R0

        mov.L #H'ffffffff,ER0
        NEG.L ER0

        mov.L #H'7fffffff,ER0
        NEG.L ER0

        mov.L #H'80000000,ER0
        NEG.L ER0

;BSET BNOT BCLR
        mov.L #H'00000000,ER1
        BSET #3,R1L
        BNOT #3,R1L
        BNOT #4,R1l
        BNOT #7,R1L
        BCLR #7,R1L
        BCLR #4,R1L
        BSET #7,R1L
        BCLR #7,R1L

        mov.L #work,ER0
        mov.L #H'00000000,ER1
        mov.L ER1,@ER0
        mov.W #H'ffff,R2
        BSET #1,@ER0
        BSET #7,@ER0
        BNOT #2,@ER0
        BNOT #4,@ER0
        mov.B @ER0, R2L
        BNOT #2,@ER0
        BNOT #4,@ER0
        BCLR #1,@ER0
        BCLR #7,@ER0
        mov.B @ER0, R2H
;BTST
        mov.B #H'a5,R3H
        BTST #0,R3H
        BTST #1,R3H
        BTST #2,R3H
        BTST #3,R3H
        BTST #4,R3H
        BTST #5,R3H
        BTST #6,R3H
        BTST #7,R3H

        mov.B R3H,@ER0
        BTST #0,@ER0
        BTST #1,@ER0
        BTST #2,@ER0
        BTST #3,@ER0
        BTST #4,@ER0
        BTST #5,@ER0
        BTST #6,@ER0
        BTST #7,@ER0
;CMP TEST       
        mov.B #H'bb,R3H
        cmp.B #H'bb,R3H
        mov.W #H'aacc,R3
        cmp.W #H'aacc,R3
        mov.W R3,R4
        cmp.W R3,R4
        mov.L #H'aabbccdd,ER3
        cmp.L #H'aabbccdd,ER3
        mov.L ER3,ER4
        cmp.L ER3,ER4

;ANDC,XORC,ORC
        ldc #H'00,CCR
        orc #H'ff,CCR
        andc #H'ff,CCR
        andc #H'00,CCR
        xorc #H'ff,CCR
        xorc #H'ff,CCR

;LDC/STC TEST
        mov.B #H'aa,R1L
        ldc #H'00,CCR
        stc CCR,R1L
        ldc #H'FF,CCR
        stc CCR,R1L

;XOR TEST
        mov.B #H'FF,R1L
        mov.B #H'FF,R1H
        xor.B R1H,R1L
        mov.W R1,R2
        xor.W R1,R2
        mov.L #H'aabbccdd,ER3
        mov.L ER3,ER4
        xor.L ER3,ER4
        xor.L #H'aabbccdd,ER3
        xor.W #H'aabb,E3
        xor.B #H'ff,R1H


;OR TEST
        mov.B #H'00,R1L
        mov.B #H'FF,R1H
        or.B R1H,R1L
        mov.W R1,R2
        mov.W #H'0000,R2
        or.W R1,R2
        mov.L #H'aabbccdd,ER3
        mov.L ER3,ER4
        mov.L #00000000,ER4
        or.L ER3,ER4
        mov.L #00000000,ER3
        or.L #H'aabbccdd,ER3
        mov.L #00000000,ER3
        or.W #H'aabb,E3
        mov.B #H'00,R1H
        or.B #H'ff,R1H

;AND TEST
        mov.B #H'FF,R1L
        mov.B #H'FF,R1H
        and.B R1H,R1L
        NOT.B R1H
        and.B R1H,R1L
        mov.W #H'aa55,R1
        mov.W R1,R2
        and.W R1,R2
        not.W R1
        and.W R1,R2
        mov.L #H'aabbccdd,ER3
        mov.L ER3,ER4
        and.L ER3,ER4
        not.L ER3
        and.L ER3,ER4
        and.L #H'aabbccdd,ER3
        mov.W #H'aabb,E3
        and.W #H'aabb,E3
        not.W E3
        and.W #H'aabb,E3
        mov.B #H'ff,R1H
        and.B #H'ff,R1H
        not.B R1H
        and.B #H'ff,R1h

;ADDS,SUBS
        mov.L #H'00000000,ER3
        SUBS.L #1,ER3
        SUBS.L #2,ER3
        SUBS.L #4,ER3

        ADDS.L #1,ER3
        ADDS.L #2,ER3
        ADDS.L #4,ER3

;ADD/SUB TEST
        ADD.B #1,R3L
        ADD.B R3L,R3L
        mov.B #0,R3H
        ADD.W #H'1000,R3
        ADD.W R3,R3
        ADD.L #H'11111111,ER3
        ADD.L ER3,ER3

        SUB.L ER3,ER3
        SUB.L #H'11111111,ER3
        SUB.W R3,R3
        SUB.W #H'1000,R3
        mov.B #H'fe,R3H
        mov.B #H'11,R3L
        SUB.B R3L,R3H

        LDC #00,CCR
        ORC #01,CCR ;CARRY ON
        mov.B #00,R4L
        mov.B #01,R4H
        ADDX #1,R4L

        LDC #00,CCR
        ORC #01,CCR ;CARRY ON
        ADDX R4H,R4L

        LDC #00,CCR
        ORC #01,CCR ;CARRY ON
        SUBX #1,R4L

        LDC #00,CCR
        ORC #01,CCR ;CARRY ON
        SUBX R4H,R4L

;SHAL TEST
        LDC #00,CCR
        mov.b #H'40,R1H
        SHAL.B R1H
        SHAL.B R1H
        SHAL.B R1H
        
        LDC #00,CCR
        mov.W #H'4000,R1
        SHAL.W R1
        SHAL.W R1
        SHAL.W R1

        LDC #00,CCR
        mov.L #H'40000000,ER1
        SHAL.L ER1
        SHAL.L ER1
        SHAL.L ER1
                
;SHLL TEST
        LDC #00,CCR
        mov.b #H'40,R1H
        SHLL.B R1H
        SHLL.B R1H
        SHLL.B R1H
        
        LDC #00,CCR
        mov.W #H'4000,R1
        SHLL.W R1
        SHLL.W R1
        SHLL.W R1

        LDC #00,CCR
        mov.L #H'40000000,ER1
        SHLL.L ER1
        SHLL.L ER1
        SHLL.L ER1
                
;SHAR TEST
        LDC #00,CCR
        mov.b #H'82,R1H
        SHAR.B R1H
        SHAR.B R1H
        SHAR.B R1H
        
        LDC #00,CCR
        mov.W #H'8002,R1
        SHAR.W R1
        SHAR.W R1
        SHAR.W R1

        LDC #00,CCR
        mov.L #H'80000002,ER1
        SHAR.L ER1
        SHAR.L ER1
        SHAR.L ER1

;SHLR TEST
        LDC #00,CCR
        mov.b #H'82,R1H
        SHLR.B R1H
        SHLR.B R1H
        SHLR.B R1H
        
        LDC #00,CCR
        mov.W #H'8002,R1
        SHLR.W R1
        SHLR.W R1
        SHLR.W R1

        LDC #00,CCR
        mov.L #H'80000002,ER1
        SHLR.L ER1
        SHLR.L ER1
        SHLR.L ER1

;ROTXL TEST
        LDC #00,CCR
        mov.b #H'82,R1H
        ROTXL.B R1H
        ROTXL.B R1H
        ROTXL.B R1H
        
        LDC #00,CCR
        mov.W #H'8002,R1
        ROTXL.W R1
        ROTXL.W R1
        ROTXL.W R1

        LDC #00,CCR
        mov.L #H'80000002,ER1
        ROTXL.L ER1
        ROTXL.L ER1
        ROTXL.L ER1

;ROTXR TEST
        LDC #00,CCR
        mov.b #H'82,R1H
        ROTXR.B R1H
        ROTXR.B R1H
        ROTXR.B R1H
        
        LDC #00,CCR
        mov.W #H'8002,R1
        ROTXR.W R1
        ROTXR.W R1
        ROTXR.W R1

        LDC #00,CCR
        mov.L #H'80000002,ER1
        ROTXR.L ER1
        ROTXR.L ER1
        ROTXR.L ER1

;ROTL TEST
        LDC #00,CCR
        mov.b #H'82,R1H
        ROTL.B R1H
        ROTL.B R1H
        ROTL.B R1H
        
        LDC #00,CCR
        mov.W #H'8002,R1
        ROTL.W R1
        ROTL.W R1
        ROTL.W R1

        LDC #00,CCR
        mov.L #H'80000002,ER1
        ROTL.L ER1
        ROTL.L ER1
        ROTL.L ER1

;ROTR TEST
        LDC #00,CCR
        mov.b #H'82,R1H
        ROTR.B R1H
        ROTR.B R1H
        ROTR.B R1H
        
        LDC #00,CCR
        mov.W #H'8002,R1
        ROTR.W R1
        ROTR.W R1
        ROTR.W R1

        LDC #00,CCR
        mov.L #H'80000002,ER1
        ROTR.L ER1
        ROTR.L ER1
        ROTR.L ER1

;BCC TEST
        bra bra8:8
        nop
        nop
        nop
bra8:
        bra bra16:16
        nop
        nop
        nop
bra16:
        brn bra8:8
        brn bra8:16
        LDC #00,CCR
        bhi bhi8:8
        jmp @fail
bhi8:
        bhi bhi16:16
        jmp @fail
bhi16:
        bcc bcc8:8
        jmp @fail

bcc8:
        bcc bcc16:16
        jmp @fail

bcc16:
        bne bne8:8
        jmp @fail

bne8:
        bne bne16:16
        jmp @fail
bne16:
        bvc bvc8:8
        jmp @fail
bvc8:
        bvc bvc16:16
        jmp @fail

bvc16:
        bpl bpl8:8
        jmp @fail
bpl8:
        bpl bpl16:16
        jmp @fail
bpl16:
        bge bge8:8
        jmp @fail

bge8:
        bge bge16:16
        jmp @fail
bge16:
        bgt bgt8:8
        jmp @fail
bgt8:
        bgt bgt16:16
        jmp @fail
bgt16:
        LDC #01,CCR     ; C_bit ON
        bls bls8:8
        jmp @fail
bls8:
        bls bls16:16
        jmp @fail
bls16:
        bcs bcs8:8
        jmp @fail
bcs8:
        bcs bcs16:16
        jmp @fail
bcs16:
        LDC #H'02,CCR   ;V_bit On
        bvs bvs8:8
        jmp @fail
bvs8:
        bvs bvs16:16
        jmp @fail
bvs16:
        blt blt8:8
        jmp @fail
blt8:
        blt blt16:16
        jmp @fail
blt16:
        ble ble8:8
        jmp @fail
ble8:
        ble ble16:16
        jmp @fail
ble16:
        LDC #H'04,CCR   ;Z_bit On
        bls bls8_1:8
        jmp @fail
bls8_1:
        bls bls16_1:16
        jmp @fail
bls16_1:
        beq beq8:8
        jmp @fail
beq8:
        beq beq16:16
        jmp @fail
beq16:
        ble ble8_1:8
        jmp @fail
ble8_1:
        ble ble16_1:16
        jmp @fail
ble16_1:
        LDC #H'08,CCR;  N flag On
        bmi bmi8:8
        jmp @fail
bmi8:
        bmi bmi16:16
        jmp @fail
bmi16:
        blt blt8_1:8
        jmp @fail
blt8_1:
        blt blt16_1:16
        jmp @fail
blt16_1:
        ble ble8_2:8
        jmp @fail
ble8_2:
        ble ble16_2:16
        jmp @fail
ble16_2:
        LDC #H'0a,CCR; N V ON
        bge bge8_2:8
        jmp @fail
bge8_2:
        bge bge16_2:16
        jmp @fail
bge16_2:
        bgt bgt8_2:8
        jmp @fail
bgt8_2:
        bgt bgt16_2:16
        jmp @fail
bgt16_2:
        

        

        



        



        mov.b  #H'ff,R1L
        LDC R1L,CCR
        mov.b #H'dd,R0L
        mov.b R1L,@ER0
;;秋月アセンブラNG      LDC @ER0,CCR
        ADD.L #1,ER0
        mov.B #H'CC,R1L
        mov.B R1L,@(-1,ER0);
;;秋月アセンブラNG      LDC @(-1,ER0),CCR
        mov.B #H'BB,R1L
        mov.B R1L, @(-1,ER0)
;;秋月アセンブラNG      ldc @work:16,CCR
        mov.B #H'aa,R1L
        mov.B R1L,@(-1,ER0)
;;秋月アセンブラNG      ldc @work:24,CCR




;;秋月アセンブラNG      mov.B #H'aa:8,R2L
;;秋月アセンブラNG      mov.B R2L,@H'00:8
;;秋月アセンブラNG      BSET #1,@H'00
;;秋月アセンブラNG      BSET #7,@H'00
;;秋月アセンブラNG      BNOT #2,@H'00
;;秋月アセンブラNG      BNOT #4,@H'00
;;秋月アセンブラNG      mov.B @H'00:8, R2H
;;秋月アセンブラNG      BNOT #2,@H'00
;;秋月アセンブラNG      BNOT #4,@H'00
;;秋月アセンブラNG      BCLR #1,@H'00
;;秋月アセンブラNG      BCLR #7,@H'00
;;秋月アセンブラNG      mov.B @H'00:8, R3H

        bra   INIT3
fail:                   ;Fail無限ループ
        bra fail

jmp_check2:
        jmp @@jmp_check3



        .SECTION RAM,DATA,LOCATE=H'e00
work:
        .DATA.B H'00
        .DATA.B H'01
        .DATA.B H'02
        .DATA.B H'03
        .DATA.B H'04
        .DATA.B H'05
        .DATA.B H'06
        .DATA.B H'07
work1:
        .DATA.B H'10
        .DATA.B H'11
        .DATA.B H'12
        .DATA.B H'13
        .DATA.B H'14
        .DATA.B H'15
        .DATA.B H'16
        .DATA.B H'17
        .DATA.L H'00000
work2:









        .END    


デバッグ中のWaveformViewer