オリジナル4ビットCPU「DL166」はプログラミングの基礎学習に最適オリジナルCPUでバイナリコード入門(1)(1/2 ページ)

オリジナル4ビットCPUを用いてバイナリコードを学ぶ本連載。第1回はオリジナルCPU「DL166」のインストラクションセットについて解説する。

» 2023年02月14日 07時00分 公開
[今岡通博MONOist]

はじめに

 今回から新しい連載を始めます。本連載では、学習用のオリジナルCPU「DL166」を用いてバイナリコードの世界にダイブしたいと思います。第1回は、本連載で用いるオリジナルCPUを紹介したいと思います。このCPUは、プログラミングの基本を教えるために専門学校の講義や企業内研修で実際に用いたものです。プログラミング未経験者や初学者には、高級言語を用いたプログラミング教育よりもバイナリコードを用いたプログラミング体験は効果が大きいと感じました。

FPGAへの実装からArduinoによるエミュレートで扱いやすく

 当初、このオリジナルCPUはFPGAの評価ボードを使って実装していました。それにキーボードを付けユーザーが外部からプログラミングができるようにしていたのです。併せて、FPGA評価ボード内の4ビットDIPスイッチと4ビットLEDを用いてバイナリコードによるプログラミング環境を実現しています。

「DL166」を実装したFPGAの評価ボード 「DL166」を実装したFPGAの評価ボード[クリックで拡大]

 しかし、このオリジナルCPUを用いたプログラミング演習の連載を始めるに当たり、以下のように考えました。FPGAを搭載する評価ボードは高価ですし、開発環境を整備したり、使いこなしたりするためには少なからず学習コストを要します。そこで、より安価で取り扱いも容易な「Arduino」を使ってオリジナルCPUをエミュレートし、プログラミング環境を提供することにしました。これでより多くの読者にこのCPUを用いたバイナリコードプログラミングを体験する機会を提供できるものと考えました。

開発中の「Arduino」を使った「DL166」エミュレーター 開発中の「Arduino」を使った「DL166」エミュレーター。写真は執筆時のもの[クリックで拡大]

 この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を読むためには多少の約束事がありますので、次ページから命令ごとに説明します。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.