2018.8.11
前へ
次へ
ホームページトップへ戻る


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

前へ
次へ
ホームページトップへ戻る