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