16ビットマイコンボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使ってみるつもりで入手してそのまま置いてあった16ビットCPUのことを思い出しました。
AMD社のAM188です。
その名の通り、CPUコアは80188互換の16ビットCPUです。
そのAM188を使った16ビットマイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第70回]
●JPコマンドをセグメント指定可能に
このところマシン語ツールの各コマンドを機能拡張してセグメント指定可能にしてきています。
当面の最後の仕上げはJPコマンドです。
これができるとセグメントベース[0000]以外のセグメントでもユーザープログラムが実行可能になります。
といってもその必要性は余り無いのかもしれませんが。
テストプログラムです。
2018/8/4 13:51 86test6.LST [00001] ;;; 8086 test [00002] ORG=1000 [00003] ADISP=1015 [00004] 1000 BB0011 MOV BX,1100 [00005] 1003 B041 MOV AL,41 [00006] 1005 B91A00 MOV CX,1A [00007] 1008 8807 LP1:MOV [BX],AL [00008] 100A FEC0 INC AL [00009] 100C 43 INC BX [00010] 100D E2F9 LOOP LP1 <1008> [00011] 100F CB RETF [00012] ; ADISP =1015 LP1 =1008 |
メモリアドレスの1100〜に41、42、43…(A、B、C…のASCIIコード)を書いて、システムにリターンします。
今気が付いたのですがADISPは使っていません。
最初は使うつもりだったのですが、このテストでは使う必要がないと考えて使うのを止めました。
うっかり最初の定義文だけが残ってしまいました。
ADISPが残っていることにそれ以上深い意味はありません。
テスト中の画像です。
念のためロード先のメモリ内容を
DM 1000,100F[7000]
を実行して確認しました。
次にそこにテストプログラム86TEST6.COMをロードし、もう一度DMコマンドでちゃんとロードされたことを確認しました。
このテストプログラムはアドレス1100〜に、41、42、43…を書き込みます。
プログラム実行前のメモリの中身をDMコマンドで確認しました。
そして今回の目的、セグメント指定付きのJPコマンドの実行です。
JP 1000[7000]を実行しました。
その後、DMコマンドで、プログラムが正しく実行されたことを確認しました。
今まで作業してきました、マシン語コマンドにセグメント指定ができるようにするという機能拡張は、対象となるメモリ範囲が同じセグメント内に限られます。
たとえばセグメントを越えてMVとかCPとかのコマンドを実行することはできません。
そうするようにできないことはないのですけれど、それだけコマンドパラメータの仕様が複雑になって、コマンドが使いにくくなります。
セグメントを越えて使いたいという場面はそれほど多くはないと思いますので、そういう場合には/SVと/LDを使うことで、あるセグメントから別のセグメントにメモリデータをコピーすることができますから、ちょっと面倒ですが、そのようにしていただくようにお願いいたします。
16ビットマイコンボードの製作[第70回]
2018.8.11upload
前へ
次へ
ホームページトップへ戻る