16ビットマイコンボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使ってみるつもりで入手してそのまま置いてあった16ビットCPUのことを思い出しました。
AMD社のAM188です。
その名の通り、CPUコアは80188互換の16ビットCPUです。
そのAM188を使った16ビットマイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第20回]
●TK−80モニタ的動作の確認
簡単なテストプログラムを用意しました。
I/Oポート(82C55)に出力するだけの簡単なプログラムです。
;;; i/o test ;18/5/17 ORG=8000 ; LOOP:MOV AL,55 OUT 82,AL MOV AL,44 OUT 82,AL JMP LOOP ; |
まるで8080のニーモニックそのままです。
ただよく見るとレジスタ名がALになっているので、8080ではないな、とわかる程度です。
もちろんこれはアセンブラのニーモニック表記ですから、このままでは実行はできません。
これをマシン語に変換する必要があります。
8080やZ80でしたら、この程度のプログラムはいきなりマシン語コードでも書けてしまいます。
ええ。
私もこの程度のマシン語コードはすらすら出てきます。
3E 55 D3 82 3E 44 D3 82 C3 00 80
です。
しかし8086となると、簡単なプログラムでもハンドアセンブルは困難です。
ニーモニックは8080と似ていてもマシン語コードは全く異なります。
一番問題なのはジャンプ命令のアドレスが相対表記であることです。
ニーモニックで書けば
JMP LOOPです。
LOOPは8000番地ですから、8080(Z80)のマシン語ではC30080になります。
つまり絶対アドレス表記です。
しかし8086の場合には相対アドレス表記ですから、○バイト前に、あるいは○バイト先にジャンプする、というような表記になります。
それをいちいち計算で求めるのでは大変です。
そう。
8086ではアセンブラが必須です。
上のプログラム(ソースプログラム)をアセンブラにかけているところは前回お見せしました。
え?
気が付かなかったなあ、と言われる方のためにもう一度お見せします。
asm86 iotest1.txt
がそれです。
ASM80.COMは私が作った自作の8086アセンブラです。
前回も書きましたように、扱いも超簡単です。
リンカなども不要です。
1パスでオブジェクトコードを生成します。
下が作成されたアセンブルリストです。
このリストファイルとともに実行ファイル(COMファイル)が作成されます。
2018/5/17 7:226 iotest1.LST [00001] ;;; i/o test [00002] ;18/5/17 [00003] ORG=8000 [00004] ; [00005] 8000 B055 LOOP:MOV AL,55 [00006] 8002 E682 OUT 82,AL [00007] 8004 B044 MOV AL,44 [00008] 8006 E682 OUT 82,AL [00009] 8008 EBF690 JMP LOOP <8000> [00010] ; LOOP =8000 |
今回はTK−80モニタ風プログラムの動作テストですから、このリストを見ながらマシン語コードを入力していきます。
これからテストをするためにスタンバイ中のND80KL/86試作ボードです。
82C55にデータ出力しますから、I/O出力コネクタにLED表示ボードを接続しています。
AM188CPU基板を実装してパワーオンしたところです。
これからマシン語コードを入力していきます。
[8][0][0][0][ADRSSET]に続いて[B][0]とキー入力しました。
そのあと[WRITEINC]を入力し、
[5][5]を入力しました。
[WRITEINC]に続いて
[E][6]を入力しました。
[WRITEINC]に続いて
[8][2]を入力しました。
[WRITEINC]に続いて
[B][0]を入力しました。
[WRITEINC]に続いて
[4][4]を入力しました。
[WRITEINC]に続いて
[E][6]を入力しました。
[WRITEINC]に続いて
[8][2]を入力しました。
[WRITEINC]に続いて
[E][B]を入力しました。
[WRITEINC]に続いて
[F][6]を入力しました。
[WRITEINC]に続いて
[9][0]を入力しました。
[WRITEINC]に続いて
[8][0][0][0][ADRSSET]を入力しました。
ここまで、TK−80モニタの操作と同じです。
このあと[RUN]キーの入力でプログラムが実行されます。
しかし今回のテストプログラムは80C55のCポートに55と44を交互に高速で出力するだけの無限ループプログラムですから、ただ実行するだけではテストプログラムとしては余り意味のあるものにはなりません。
実はこのプログラムは別に目的があって作成したのです。
それは?
ステップ動作です。
8086のステップ動作をテストするのが目的です。
次回に続きます。
16ビットマイコンボードの製作[第20回]
2018.5.19upload
前へ
次へ
ホームページトップへ戻る