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