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


16ビットマイコンボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使ってみるつもりで入手してそのまま置いてあった16ビットCPUのことを思い出しました。
AMD社のAM188です。
その名の通り、CPUコアは80188互換の16ビットCPUです。
そのAM188を使った16ビットマイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第102回]



●8086命令コードブック

ND80KL/86(AM188版)の説明書の作成とシステムプログラムの最終確認作業がともに終わりに近づきました。
もうあとほんの一息です。
説明書のなかでも圧巻は表記の「8086命令コードブック」です。

8080やZ80の命令説明書ではアセンブラ命令のニーモニックとともにマシン語の命令コード(16進コード)も表記しています。
一方ND80KL/86(AM188版)に附属予定の8086アセンブラの操作説明書では各命令の説明のところにはアセンブラニーモニックのみを記載してマシン語の16進コードは記載していません。
8080やZ80のマシン語命令コードに比べて8086のそれは桁違いに多いから、というのがその理由です。

ところでND80KL/86(AM188版)は5×5キーボードと7セグメントLEDを使ってマシン語命令コードを入力して使う「TK80的機能」を搭載しています。
実際の操作にあたってはコード表を検索して一々マシン語コードを求めるよりも、短くてもアセンブラニーモニックでソースプログラムを作成してそれをASM86アセンブラでアセンブルしてマシン語プログラムを求めてそれをND80KL/86(AM188版)に入力するほうが簡便だと思います。
ですけれど、せっかくマシン語コードの入力機能があるのに、そのシステムにマシン語のコード表が附属していないのはいかがなものか、という思いはこのセットの開発開始当初から抱いていたのも事実です。

いつかそのうち8086のマシン語コード表を作成しなければ。

それでここに来てND80KL/86(AM188版)の説明書の作成作業を集中して行なうなかで、この機会に8086のマシン語コード表も作ってしまおう、と思ったのでありましたが。
実際に取り掛かってみると、コード表などとはとても言えない、とんでもないボリュームのものになってしまいました。
それで今回の見出しにありますように「コードブック」というタイトルにしました。
どのくらいすごいものなのか、その一部をお見せします。
内容見本です。

[00001]                     ;adc r8,r8'
[00002] FFFE  12C0          ADC AL,AL
[00003] 0000  12C4          ADC AL,AH
[00004] 0002  12C1          ADC AL,CL
[00005] 0004  12C5          ADC AL,CH
[00006] 0006  12C2          ADC AL,DL
[00007] 0008  12C6          ADC AL,DH
[00008] 000A  12C3          ADC AL,BL
[00009] 000C  12C7          ADC AL,BH
[00010] 000E  12E0          ADC AH,AL
[00011] 0010  12E4          ADC AH,AH
[00012] 0012  12E1          ADC AH,CL
[00013] 0014  12E5          ADC AH,CH
[00014] 0016  12E2          ADC AH,DL
[00015] 0018  12E6          ADC AH,DH
[00016] 001A  12E3          ADC AH,BL
[00017] 001C  12E7          ADC AH,BH
[00018] 001E  12C8          ADC CL,AL
[00019] 0020  12CC          ADC CL,AH
[00020] 0022  12C9          ADC CL,CL
[00021] 0024  12CD          ADC CL,CH
[00022] 0026  12CA          ADC CL,DL
[00023] 0028  12CE          ADC CL,DH
[00024] 002A  12CB          ADC CL,BL
[00025] 002C  12CF          ADC CL,BH
[00026] 002E  12E8          ADC CH,AL
[00027] 0030  12EC          ADC CH,AH
[00028] 0032  12E9          ADC CH,CL
[00029] 0034  12ED          ADC CH,CH
[00030] 0036  12EA          ADC CH,DL
[00031] 0038  12EE          ADC CH,DH
[00032] 003A  12EB          ADC CH,BL
[00033] 003C  12EF          ADC CH,BH
[00034] 003E  12D0          ADC DL,AL
[00035] 0040  12D4          ADC DL,AH
[00036] 0042  12D1          ADC DL,CL
[00037] 0044  12D5          ADC DL,CH
[00038] 0046  12D2          ADC DL,DL
[00039] 0048  12D6          ADC DL,DH
[00040] 004A  12D3          ADC DL,BL
[00041] 004C  12D7          ADC DL,BH
[00042] 004E  12F0          ADC DH,AL
[00043] 0050  12F4          ADC DH,AH
[00044] 0052  12F1          ADC DH,CL
[00045] 0054  12F5          ADC DH,CH
[00046] 0056  12F2          ADC DH,DL
[00047] 0058  12F6          ADC DH,DH
[00048] 005A  12F3          ADC DH,BL
[00049] 005C  12F7          ADC DH,BH
[00050] 005E  12D8          ADC BL,AL
[00051] 0060  12DC          ADC BL,AH
[00052] 0062  12D9          ADC BL,CL
[00053] 0064  12DD          ADC BL,CH
[00054] 0066  12DA          ADC BL,DL
[00055] 0068  12DE          ADC BL,DH
[00056] 006A  12DB          ADC BL,BL
[00057] 006C  12DF          ADC BL,BH
[00058] 006E  12F8          ADC BH,AL
[00059] 0070  12FC          ADC BH,AH
[00060] 0072  12F9          ADC BH,CL
[00061] 0074  12FD          ADC BH,CH
[00062] 0076  12FA          ADC BH,DL
[00063] 0078  12FE          ADC BH,DH
[00064] 007A  12FB          ADC BH,BL
[00065] 007C  12FF          ADC BH,BH
[00066]                     ;adc r16,r16'
[00067] 007E  13C0          ADC AX,AX
[00068] 0080  13C1          ADC AX,CX
[00069] 0082  13C2          ADC AX,DX
[00070] 0084  13C3          ADC AX,BX
[00071] 0086  13C4          ADC AX,SP
[00072] 0088  13C5          ADC AX,BP
[00073] 008A  13C6          ADC AX,SI
[00074] 008C  13C7          ADC AX,DI
[00075] 008E  13C8          ADC CX,AX
[00076] 0090  13C9          ADC CX,CX
[00077] 0092  13CA          ADC CX,DX
[00078] 0094  13CB          ADC CX,BX
[00079] 0096  13CC          ADC CX,SP
[00080] 0098  13CD          ADC CX,BP
[00081] 009A  13CE          ADC CX,SI
[00082] 009C  13CF          ADC CX,DI
[00083] 009E  13D0          ADC DX,AX
[00084] 00A0  13D1          ADC DX,CX
[00085] 00A2  13D2          ADC DX,DX
[00086] 00A4  13D3          ADC DX,BX
[00087] 00A6  13D4          ADC DX,SP
[00088] 00A8  13D5          ADC DX,BP
[00089] 00AA  13D6          ADC DX,SI
[00090] 00AC  13D7          ADC DX,DI
[00091] 00AE  13D8          ADC BX,AX
[00092] 00B0  13D9          ADC BX,CX
[00093] 00B2  13DA          ADC BX,DX
[00094] 00B4  13DB          ADC BX,BX
[00095] 00B6  13DC          ADC BX,SP
[00096] 00B8  13DD          ADC BX,BP
[00097] 00BA  13DE          ADC BX,SI
[00098] 00BC  13DF          ADC BX,DI
[00099] 00BE  13E0          ADC SP,AX
[00100] 00C0  13E1          ADC SP,CX
[00101] 00C2  13E2          ADC SP,DX
[00102] 00C4  13E3          ADC SP,BX
[00103] 00C6  13E4          ADC SP,SP
[00104] 00C8  13E5          ADC SP,BP
[00105] 00CA  13E6          ADC SP,SI
[00106] 00CC  13E7          ADC SP,DI
[00107] 00CE  13E8          ADC BP,AX
[00108] 00D0  13E9          ADC BP,CX
[00109] 00D2  13EA          ADC BP,DX
[00110] 00D4  13EB          ADC BP,BX
[00111] 00D6  13EC          ADC BP,SP
[00112] 00D8  13ED          ADC BP,BP
[00113] 00DA  13EE          ADC BP,SI
[00114] 00DC  13EF          ADC BP,DI
[00115] 00DE  13F0          ADC SI,AX
[00116] 00E0  13F1          ADC SI,CX
[00117] 00E2  13F2          ADC SI,DX
[00118] 00E4  13F3          ADC SI,BX
[00119] 00E6  13F4          ADC SI,SP
[00120] 00E8  13F5          ADC SI,BP
[00121] 00EA  13F6          ADC SI,SI
[00122] 00EC  13F7          ADC SI,DI
[00123] 00EE  13F8          ADC DI,AX
[00124] 00F0  13F9          ADC DI,CX
[00125] 00F2  13FA          ADC DI,DX
[00126] 00F4  13FB          ADC DI,BX
[00127] 00F6  13FC          ADC DI,SP
[00128] 00F8  13FD          ADC DI,BP
[00129] 00FA  13FE          ADC DI,SI
[00130] 00FC  13FF          ADC DI,DI

8ビットのキャリー付き加算命令ADC R8,R8’と16ビットのADC R16,R16’です。
実は、こんなもんじゃないのです。
ADC命令はまだまだいっぱいあるのです。
その終わりのところを下にお見せします。

[00938] 0AAE  8090341212    ADC [BX+SI+1234]B,12
[00939] 0AB3  8091341212    ADC [BX+DI+1234]B,12
[00940] 0AB8  8092341212    ADC [BP+SI+1234]B,12
[00941] 0ABD  8093341212    ADC [BP+DI+1234]B,12
[00942] 0AC2  8094341212    ADC [SI+1234]B,12
[00943] 0AC7  8095341212    ADC [DI+1234]B,12
[00944] 0ACC  8096341212    ADC [BP+1234]B,12
[00945] 0AD1  8097341212    ADC [BX+1234]B,12
[00946] 0AD6  81103412      ADC [BX+SI]W,1234
[00947] 0ADA  81113412      ADC [BX+DI]W,1234
[00948] 0ADE  81123412      ADC [BP+SI]W,1234
[00949] 0AE2  81133412      ADC [BP+DI]W,1234
[00950] 0AE6  81143412      ADC [SI]W,1234
[00951] 0AEA  81153412      ADC [DI]W,1234
[00952] 0AEE  811634123412  ADC [1234]W,1234
[00953] 0AF4  81173412      ADC [BX]W,1234
[00954] 0AF8  8150123412    ADC [BX+SI+12]W,1234
[00955] 0AFD  8151123412    ADC [BX+DI+12]W,1234
[00956] 0B02  8152123412    ADC [BP+SI+12]W,1234
[00957] 0B07  8153123412    ADC [BP+DI+12]W,1234
[00958] 0B0C  8154123412    ADC [SI+12]W,1234
[00959] 0B11  8155123412    ADC [DI+12]W,1234
[00960] 0B16  8156123412    ADC [BP+12]W,1234
[00961] 0B1B  8157123412    ADC [BX+12]W,1234
[00962] 0B20  819034123412  ADC [BX+SI+1234]W,1234
[00963] 0B26  819134123412  ADC [BX+DI+1234]W,1234
[00964] 0B2C  819234123412  ADC [BP+SI+1234]W,1234
[00965] 0B32  819334123412  ADC [BP+DI+1234]W,1234
[00966] 0B38  819434123412  ADC [SI+1234]W,1234
[00967] 0B3E  819534123412  ADC [DI+1234]W,1234
[00968] 0B44  819634123412  ADC [BP+1234]W,1234
[00969] 0B4A  819734123412  ADC [BX+1234]W,1234
[00970]                     ;

行数にして970行です。
ADCだけではありません。
同じ量のADD、SBB、SUBもありますしAND、OR、XORもあります。
MOVもハンパではありません。
なんとA4版(53行/ページ)250ページにもなってしまいました(!!!)。
これはとてもプリントアウトできません。
PDFにして附属CDROMに収録いたします。

作業も終盤に近づきましたので、これからこのコードブックの校正にかかります。
といってもこのボリュームです。
大きな間違いがないか、落ちている命令はないかをざっと確かめる程度のことしかできそうにありません。
説明書の作成作業の過程で、すでに落ちている命令が2つみつかりました。
このコードブックを見ていただければ、16ビットCPUが8ビットCPUとは比較にならないすごいものだということを実感していただけると思います。
8086がPC9801に採用され、またWindowsパソコン誕生のもととなったというのも、なるほどと納得していただけることでしょう。

ところで、この膨大なコードブックなのですが、どうやって作ったかといいますと。
アセンブラのソースプログラムをテキストエディタの機能を利用しながら命令ごとに作成して、それをASM86アセンブラにかけて作成しました。
ASM86アセンブラはかれこれ20年ぐらいも前に作った自作のアセンブラです。
ASM86アセンブラも附属CDROMに収録いたします。

最後にもうひとつ。
縦にr、横にr’を配したマトリックスにすればページ数も減らせるし、見やすくなるのでは?とお思いかも。
ASM86にかける命令ブックのソースプログラムの作成だけでも大変だったのですよ。
それを表にまとめる?
そんなことをしたら、それこそ寿命が尽きてしまいまする。

16ビットマイコンボードの製作[第102回]
2018.10.20upload

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