blog

Tech|ビンテージ・コンピュータ・プログラムでローレベル・プログラミングを学ぶ Toy CPU

私は副業として、すべての専攻を対象とした一般的なコンピューティングのトピックを含む大学のコースを教えています。これは、コンピューティングにまつわる神話を解明するために、テクノロジーがどのように機能する...

Oct 18, 2025 · 6 min. read
シェア

私は非常勤で大学の講義を担当しており、その中には全専攻を対象とした一般的なコンピューティングのトピックに関するコースもあります。このコースは、コンピューティングにまつわる神話を解明するために、テクノロジーがどのように機能するかを学生に教える入門コースです。

機械語プログラミング

Apple II、TRS-80、IBM PCのような初期のパーソナル・コンピューターでは、ユーザーはキーボードでプログラムを入力し、その結果を画面に表示することができました。しかし、コンピュータには常に画面とキーボードがついていたわけではありません。

Altair 8800 と IMSAI 8080 では、ユーザーはパネル上の「スイッチとライト」入力手順を使用する必要があります。スイッチのセットを使って機械語でコマンドを入力すると、機械が各バイナリコマンドの1と0を表すLEDを点灯させます。

トイCPUのプログラミング

トイCPUは非常にシンプルなレトロコンピュータでした。わずか256バイトのメモリと最小限の命令セットで、「スイッチとライト」のプログラミングモデルを再現しながら、物事をシンプルに保つように設計されました。そのインターフェースはAltair 8800を模倣しており、カウンター、命令、アキュムレーター、ステータスを表す8つのLEDが並んでいます。

Toy CPUを起動すると、メモリをクリアして「起動」をシミュレートします。起動すると画面右下のステータスランプに "INI "と表示されます。PWR "ランプはToy CPUの電源が入っていることを示します。

Toy CPUのプログラムは常にカウンタ0から始まります。

入力」モードでは、上下矢印キーで各プログラムカウンタを表示し、Enter キーで現在のカウンタの命令を編集します。編集」モードに入ると、Toy CPU のステータスランプに「EDT」と表示されます。

Toy CPUには、ディスプレイの前面に "テープ止め "されたクイックリファレンス表があります。この表には、Toy CPUが扱えるさまざまなオペコードが列挙されています。

  • STOP): プログラムの実行を停止します。
  • アキュムレータのビットを右に 1 つシフトします。値は、 になります。
  • アキュムレータのビットを左に 1 つシフトします。値は、 になります。
  • アキュムレータに対してバイナリ非演算を実行します。例えば、値は .
  • アドレスに格納された値で、アキュムレータにバイナリ演算を実行します。このアドレスは次のカウンタに格納されます。
  • アドレスに値が格納されたアキュムレータに対してバイナリ演算または演算を実行します。
  • アドレスに値が格納されたアキュムレータに対してバイナリ差分 OR 演算を実行します。
  • アドレスの値をアキュムレータにロードします。
  • アキュムレータの値をアドレスに格納します。
  • アドレスに格納された値をアキュムレータに加算します。
  • アキュムレータからアドレスの値を減算します。
  • カウンターアドレスに移動します。
  • アキュムレータがゼロの場合、カウンタ・アドレスに移動します。
  • これは安全に無視できます。

Edit "モードでは、左矢印キーと右矢印キーを使ってオペコードのビットを選択し、スペース・バーを押してオフとオンの間で値を反転させます。編集が終了したら、Enter キーを押して "Enter" モードに戻ります。

サンプルプログラム

2つの値を加算し、その結果をToy CPUのメモリに格納する短いプログラムを入力して、Toy CPUを探求してみたいと思います。事実上、これは算術演算A+B=Cを実行します。このプログラムを作成するには、いくつかのオペコードが必要なだけです:

  • LOAD)
  • ADD)
  • STORE)
  • STOP)

LOAD、ADD、STORE命令では、常に次のカウンタ位置にあるメモリアドレスが必要です。例えば、プログラムの最初の2つの命令は次のようになります。

  1. カウンタ1:最初の値Aが格納されるメモリアドレス。

カウンタ 0 の命令は LOAD 命令で、カウンタ 1 の値は値を格納するメモリアドレスです。この2つの命令により、メモリ上の値がToy CPUのアキュムレータにコピーされ、その値を演算することができます。

数値 A をアキュムレータにロードした後、数値 B をアキュムレータに加算する 必要があります。これを行うには、以下の 2 つの命令を使用します:

  1. カウンタ3:2番目の値Bを格納するメモリアドレス

アキュムレータに値をロードし、その値を加算したとします。アキュムレータの値は .この 2 つの命令を使用して、値を別のメモリ・アドレスにコピーする必要が あります:

  1. カウンタ5:新しい値を保存できるメモリアドレス

この2つの値を足し合わせたら、この指示でプログラムを終了します:

  1. カウンター6:

カウンタ 6 以降の命令は、プログラムによって記憶メモリとして使用できます。つまり、カウンタ 7 のメモリを値 A の格納に、カウンタ 8 のメモリを値 B の格納に、カウンタ 9 のメモリを値 C の格納に使用することができます:

すべての命令とA、B、Cのメモリ位置を把握した後、完全なプログラムをToy CPUに入力することができます。このプログラムは1と3を足して4とします:

プログラムを実行するには、"INPUT "モードで R キーを押します。

Toy CPU にはかなりの遅延があるため、プログラムの各ステップを実行しているのがわかります。プログラムが進むにつれて、カウンタが .カウンタから .カウンタに移動するのがわかります。カウンタ 1 の後、プログラムはメモリ位置 7 から値をロードし、アキュムレータを .カウンタ 3 の後、 プログラムは値を加算し、アキュムレータの表示を更新します。アキュムレータは、カウンタ 5 の後にプログラムがメモリ位置 9 に値を 入れるまでこの状態を維持し、カウンタ 6 で終了します。

機械語プログラミングの探究

Toy CPUを使って他のプログラムを作成し、機械語プログラミングをさらに探求することができます。機械語でプログラムを書いて、創造性を試してみましょう。

アキュムレータを点滅させるプログラム

アキュムレータの右 4 ビット、左 4 ビット、全ビットの順に点灯できますか?このプログラムは 2 つの方法で書くことができます。

簡単な方法は、次のように異なるメモリアドレスから3つの値をロードすることです:

  1. カウンタ 0: LOAD
  2. カウンター1:「右”
  3. カウンター2:LOAD
  4. カウンター3:「左”
  5. カウンター4:LOAD
  6. カウンター5:「すべて”
  7. カウンター6:STOP

このプログラムを書くもう一つの方法は、NOTとORの2進演算を使ってみることです。そうすれば、より小さなプログラムになるでしょう:

  1. カウンタ 0: LOAD
  2. カウンター1:「右”
  3. カウンター2:NOT
  4. カウンター3:OR
  5. カウンター4:「右”
  6. カウンター5:STOP

数字からのカウントダウン。

Toy CPUをカウントダウンタイマーとして使用することができます。このプログラムでは IFZERO テストを実行し、アキュムレータがゼロのときだけ新しいカウンタにジャンプします:

  1. カウンタ 0: LOAD
  2. カウンタ1:「初期値”
  3. カウンター2:IFZERO
  4. カウンター3:「終了”
  5. カウンター4:SUB
  6. カウンター5:「1”
  7. カウンター6:GOTO
  8. カウンター7:「スタート”
  9. カウンター8:STOP
  10. カウンター001

Toy CPUは機械語を学ぶのに最適です。私は入門コースでToy CPUを使いましたが、学生たちは、最初のプログラムを書くのは難しいが、次のプログラムを書くのはずっと簡単だと言っていました。Toy CPUは教育的で楽しいものです!

Read next