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
前へ
次へ
ホームページトップへ戻る