オリジナル4ビットCPU「DL166」はプログラミングの基礎学習に最適:オリジナルCPUでバイナリコード入門(1)(1/2 ページ)
オリジナル4ビットCPUを用いてバイナリコードを学ぶ本連載。第1回はオリジナルCPU「DL166」のインストラクションセットについて解説する。
はじめに
今回から新しい連載を始めます。本連載では、学習用のオリジナルCPU「DL166」を用いてバイナリコードの世界にダイブしたいと思います。第1回は、本連載で用いるオリジナルCPUを紹介したいと思います。このCPUは、プログラミングの基本を教えるために専門学校の講義や企業内研修で実際に用いたものです。プログラミング未経験者や初学者には、高級言語を用いたプログラミング教育よりもバイナリコードを用いたプログラミング体験は効果が大きいと感じました。
FPGAへの実装からArduinoによるエミュレートで扱いやすく
当初、このオリジナルCPUはFPGAの評価ボードを使って実装していました。それにキーボードを付けユーザーが外部からプログラミングができるようにしていたのです。併せて、FPGA評価ボード内の4ビットDIPスイッチと4ビットLEDを用いてバイナリコードによるプログラミング環境を実現しています。
しかし、このオリジナルCPUを用いたプログラミング演習の連載を始めるに当たり、以下のように考えました。FPGAを搭載する評価ボードは高価ですし、開発環境を整備したり、使いこなしたりするためには少なからず学習コストを要します。そこで、より安価で取り扱いも容易な「Arduino」を使ってオリジナルCPUをエミュレートし、プログラミング環境を提供することにしました。これでより多くの読者にこのCPUを用いたバイナリコードプログラミングを体験する機会を提供できるものと考えました。
このArduino版DL166エミュレーターの回路図やソースコードは全てオープンソースとして公開しますので、それらの資料を基に自作することが可能です。作り方は本連載を続けていく中で紹介する予定ですので、作ってみたい読者は楽しみに待っててください。また、将来このエコシステムを活用していただける電子工作系コミュニティーやサードベンダーが出てくれば市販の機会もあるかもしれません。
「DL166」の仕様
オリジナルCPUである「DL166」は4ビットCPUです。16ステップのプログラミングスペースを持ちます。4ビット長のレジスタが8本あります(表1)。インストラクション(命令)セットは8ビット長です。
sss/ddd | レジスタ名 | 記載 |
---|---|---|
000 | R0 | アキュムレータ |
001 | R1 | 汎用レジスタ |
010 | R2 | 汎用レジスタ |
011 | R3 | 汎用レジスタ |
100 | R4 | 汎用レジスタ |
101 | R5 | 入力ポート |
110 | R6 | 出力ポート |
111 | R7 | プログラムカウンタ(PC) |
表1 レジスタ(4ビット) |
表2はDL166のインストラクションセットとその働きを示したものです。一番左の欄のバイナリは8ビットで表しておりインストラクションセットの2進表現となります。その次のニーモニックはアセンブリ言語でプログラミングする際に用いる記号です。多少2進で見るより分かりやすい表現になっています。一番右の欄の記載はこのインストラクションセットの動作を示したものです。
バイナリ | ニーモニック | 記載 |
---|---|---|
01-000-sss | ADD (sss) | acc=acc+(sss) |
01-001-sss | OR (sss) | acc=acc or (sss) |
01-010-sss | AND (sss) | acc = acc & (sss) |
01-011-sss | XOR (sss) | acc = acc ^ (sss) |
01-100-sss | INC (sss) | (sss)=(sss)+1 |
01-101-sss | NOT (sss) | (sss)=!(sss) |
01-110-sss | RROTATE (sss) | regs[sss]=regs[sss]>>1+(regs[sss]<<3 & 4'b1000) |
01-111-sss | LROTATE (sss) | regs[sss]=regs[sss]<<1+(regs[sss]>>3 & 4'b0001) |
10-00-#### | JNC #### | if (C==0) PC=#### else PC=PC+1 |
10-01-#### | JMP #### | PC = #### |
10-10-#### | MVI #### | acc=#### |
00-ddd-sss | MOV (ddd),(sss) | (ddd)=(sss) |
表2 インストラクションセット(8ビット) |
この表2を読むためには多少の約束事がありますので、次ページから命令ごとに説明します。
Copyright © ITmedia, Inc. All Rights Reserved.