UIAPduino Pro Micro CH32V003で「自作パソコン」を作ってみよう

UIAPduino Pro Micro CH32V003で「自作パソコン」を作ってみよう(老後の暇つぶし企画)

 

わずか290円ほどで入手できる小さなRISC-Vマイコンボード「UIAPduino Pro Micro CH32V003」を使って、パソコンを作ることはできるのでしょうか?

結論から言えば、WindowsやLinuxを動かす一般的なパソコンを作ることはできません。しかし、処理速度が遅くてもよいのであれば、キーボードから文字を入力し、画面に表示し、計算し、プログラムを実行し、SDカードにデータを保存する「昔の8bitパソコンのようなコンピューター」を作ることは十分に挑戦できます。

しかも、この工作の面白いところは、単にマイコンを使った電子工作をするだけではありません。CPU、メモリ、入出力、画面表示、キーボード、ファイル保存、BASICなど、「コンピューターとは何なのか」を実際の機械で理解できることです。

この記事では、UIAPduino Pro Micro CH32V003を中心に、最終的に「CH32V003パソコン」を完成させるまでの構想を紹介します。

子供のころドキドキした8bitマイコンのようなレトロパソコンを自作しよう!

今回使用するコンピューターの心臓部

使用するのは、UIAPduino Pro Micro CH32V003 V1.4です。税込290円で販売されてます。

このボードにはWCHのCH32V003F4U6が搭載されています。CH32V003は32bit RISC-V QingKe V2Aコアを搭載し、最大48MHzで動作します。Flashは16KB、SRAMは2KBです。I²C、SPI、USART、ADC、タイマーなども搭載されています。

項目 仕様
マイコン CH32V003F4U6
CPU 32bit RISC-V QingKe V2A
最大クロック 48MHz
Flash 16KB
SRAM 2KB
GPIO 最大18ポート(MCU仕様)
ADC 10bit
UART USART ×1
I²C ×1
SPI ×1
USB USB 2.0 Low-Speed
USB端子 USB Type-C
電源 3.3V / 5V選択式

つまり、スペックだけを見ると非常に小さなマイコンです。しかし、昔のパソコンと比較すると、意外なほど面白い実験ができます。

「パソコン」と呼ぶには何が必要なのか

一般的なパソコンには、少なくとも次のような機能があります。

  • CPU
  • メモリ
  • 入力装置
  • 表示装置
  • 記憶装置
  • プログラム
  • 入出力を管理する仕組み
  • ユーザーが操作する環境

これをCH32V003に置き換えると、次のようになります。

一般的なパソコン CH32V003パソコン
CPU CH32V003
RAM CH32V003内蔵SRAM
画面 OLED / LCD
キーボード 4×4キーパッド、PS/2キーボードなど
ストレージ microSDカード
サウンド 圧電ブザー
OS 自作の簡易OS
アプリケーション BASIC、電卓、ゲーム、テキストエディタなど

目標は「昔の8bitパソコン」

ここで重要なのは、最初から現代のWindowsパソコンを目指さないことです。

むしろ、1980年代の8bitパソコンのようなコンピューターを目標にします。

CH32V003 COMPUTER
-----------------
Memory : OK
Display: OK
Keyboard: OK
SD Card: OK

CH32 BASIC

READY
>

そしてキーボードから、

> PRINT "HELLO WORLD"

HELLO WORLD

さらに、

> PRINT 10+20

30

といった操作ができるようにします。

これなら、わずかなメモリしかないCH32V003でも、十分に「コンピューターを作った」と言えるでしょう。

最終的なシステム構成

最終的には、次のような構成を目指します。

                    ┌───────────────────┐
                    │    CH32V003       │
                    │   32bit RISC-V    │
                    │      48MHz        │
                    └─────────┬─────────┘
                              │
             ┌────────────────┼────────────────┐
             │                │                │
             ▼                ▼                ▼
        ┌─────────┐      ┌──────────┐     ┌──────────┐
        │  OLED   │      │ Keyboard │     │ microSD  │
        │ Display │      │  Input   │     │ Storage  │
        └─────────┘      └──────────┘     └──────────┘
             │                │                │
             └────────────────┼────────────────┘
                              │
                        ┌─────▼─────┐
                        │   BASIC   │
                        │   Editor  │
                        │   Games   │
                        └───────────┘

第1段階はOLEDディスプレイ

最初に取り付けたいのが、SSD1306などの128×64ドットOLEDです。

これを使えば、非常に小さい画面ですが文字を表示できます。

┌──────────────────────────────┐
│ CH32V003 COMPUTER             │
│                              │
│ HELLO WORLD!                 │
│                              │
│ SYSTEM READY                 │
│                              │
│ > _                          │
└──────────────────────────────┘

ここで初めて、CH32V003が「何かを表示するコンピューター」になります。

UIAPduinoのI²C端子を使う

UIAPduino Pro Micro CH32V003 V1.4には、Qwiic互換のI²C端子が用意されています。基板上のSDAはPC1、SCLはPC2です。citeturn0search1turn0search12

OLEDをI²C接続する場合は、基本的に次の4本を使用します。

OLED UIAPduino
VCC 3.3V
GND GND
SDA SDA / PC1 / D3
SCL SCL / PC2 / D4

ただし、OLEDモジュールの電源電圧やI²Cプルアップの構成には違いがあるため、使用するOLEDの仕様を確認してから接続します。

最初の目標は「文字表示」

いきなりBASICを作る必要はありません。

まずはArduino IDEから、

  1. CH32V003を起動する
  2. I²Cを初期化する
  3. SSD1306を初期化する
  4. 文字を表示する

というところまで進めます。

表示できるようになったら、次に文字入力を作ります。

第2段階はキーボード

次に必要なのが入力装置です。

最初は、パソコン用キーボードを接続するよりも、4×4キーパッドを使用すると簡単です。

┌────┬────┬────┬────┐
│  1 │  2 │  3 │  4 │
├────┼────┼────┼────┤
│  5 │  6 │  7 │  8 │
├────┼────┼────┼────┤
│  9 │  0 │  + │  - │
├────┼────┼────┼────┤
│  * │  / │  = │ ENT│
└────┴────┴────┴────┘

この段階では、数字と簡単な演算子だけで構いません。

CH32V003を「電卓」にする

キーボードとOLEDが動くようになったら、次は電卓を作ります。

> 10+20=

30

> 100/4=

25

> 123*45=

5535

この段階では、まだOSもBASICも必要ありません。

キーボードから入力された文字をCH32V003が読み取り、その文字列を解析して計算結果をOLEDに表示します。

コンピューターらしくする「BASIC」

電卓が完成したら、いよいよBASICです。

例えば次のプログラムを入力できるようにします。

10 PRINT "HELLO"
20 PRINT 10+20
30 GOTO 10

そして、

> RUN

HELLO
30
HELLO
30
HELLO
30

と動くようにします。

これは単なる「Arduinoプログラム」ではありません。

自分で作ったプログラミング言語を、自分で作ったコンピューター上で動かすことになります。

BASICで何を作るか

BASICの命令は、最初から大量に実装する必要はありません。

まずは次の程度で十分です。

命令 用途
PRINT 文字・数字を表示
INPUT キーボードから入力
LET 変数に値を入れる
IF 条件判断
GOTO 指定行へ移動
FOR 繰り返し
NEXT 繰り返し終了
END プログラム終了

これだけでも、かなり多くのプログラムを作ることができます。

ゲームも作れる

OLEDとキーボードがあれば、簡単なゲームも作れます。

┌────────────────────────────┐
│ SCORE 120                  │
│                            │
│       *                    │
│                            │
│             O              │
│                            │
│        <PLAYER>            │
│                            │
└────────────────────────────┘

例えば、

  • 数字当てゲーム
  • 迷路
  • テトリス風ゲーム
  • シューティング
  • ブロック崩し
  • 反射神経ゲーム
  • 簡易RPG

などを作れます。

microSDカードを接続する

次の大きな課題がストレージです。

CH32V003のFlashは16KBしかありません。そのため、大量のプログラムやデータを保存するには外部ストレージが必要になります。CH32V003にはSPIが搭載されているため、microSDカードをSPI接続する構成が考えられます。

すると、例えば次のようなファイルを扱えるコンピューターにできます。

> DIR

AUTO.BAS
CALC.BAS
GAME.BAS
TEST.TXT

4 FILES

さらに、

> RUN GAME.BAS

と入力してゲームを起動できるようにします。

SPI端子

UIAPduino Pro Micro CH32V003では、SPI関係の端子として、SCK、MISO、MOSIが用意されています。資料ではSCKがPC5、MOSIがPC6、MISOがPC7として示されています。Arduino側ではD7、D8、D9に対応します。citeturn0search1turn0search12

microSD UIAPduino
VCC モジュール仕様に合わせる
GND GND
SCK PC5 / D7
MOSI PC6 / D8
MISO PC7 / D9
CS 空いているGPIO

SDカードモジュールには5V対応タイプと3.3V専用タイプがあるため、ここもモジュールの仕様確認が必要です。

RAMが2KBしかない問題

このプロジェクトで最大の問題になるのがRAMです。

CH32V003F4U6のSRAMは2KBです。

現代のパソコンから考えると、とんでもなく少ない容量です。

しかし、昔のコンピューターでは、現在から見ると非常に小さなメモリでプログラムを動かしていました。

そこで、このパソコンでは「少ないメモリを徹底的に使う」という設計にします。

2KB SRAM
│
├── システム領域
├── キーボード入力バッファ
├── 画面バッファ
├── BASIC変数
├── BASICプログラム
└── 作業領域

大きなデータはmicroSDに保存し、必要な部分だけ読み込む方式にすれば、限られたRAMでも面白いコンピューターを作れます。

外付けRAMを追加する構想

さらに本格的なコンピューターにするなら、外付けRAMを追加する方法もあります。

ただし、CH32V003には2KBという制約があるため、外部メモリを追加する場合は、単純に「RAMをつなげれば全部解決」というわけではありません。

SPI RAMなどを利用して、

CH32V003
    │
    ├── 内部RAM
    │
    └── SPI
          │
          ▼
      外部RAM

という構成にすることができます。

この方式なら、外部RAMを「メモリ拡張領域」として使う設計もできます。

画面をもっと大きくする

最初は128×64 OLEDで十分ですが、最終的には320×240程度のカラー液晶などに発展させることも考えられます。

ただし、ここでも2KB SRAMが大きな制約になります。

320×240のフルカラー画面をそのままRAMに保持するような方式は現実的ではありません。

そのため、

  • 文字中心の画面にする
  • 画面を部分的に更新する
  • 外部RAMを利用する
  • 液晶側の機能を利用する

といった工夫が必要になります。

キーボードを本格化する

4×4キーパッドで基本機能が完成したら、次にパソコン用キーボードを接続します。

CH32V003はUSB Low-Speedデバイスとして使用でき、USB HIDの用途にも対応できます。UIAPduinoもUSB HIDの動作例を持っています。citeturn0search1turn0search3

ただし、USBキーボードを「ホスト」として直接接続する場合と、USBデバイスとしてキーボード相当の機能を実装する場合は別の話です。

そのため、最初の自作パソコンでは、PS/2キーボードや外部USBホスト機器など、構成を単純化できる方法から始めるのがよいでしょう。

ブザーを付ける

パソコンらしさを出すなら、音も重要です。

圧電ブザーをGPIOまたはPWMに接続すれば、

起動音

ピッ!

> PRINT 10+20

ピッ
30

というようなコンピューターにできます。

ゲームでは効果音も出せます。

ファイルシステムを作る

microSDが使えるようになったら、次はファイル管理です。

例えば、次のようなコマンドを作ります。

DIR
TYPE
LOAD
SAVE
RUN
DELETE
RENAME

すると、

> DIR

CALC.BAS
GAME.BAS
MEMO.TXT

> TYPE MEMO.TXT

CH32V003 COMPUTER
MY FIRST COMPUTER

という操作が可能になります。

テキストエディタを作る

ここまで来たら、簡単なテキストエディタを搭載します。

┌──────────────────────────────┐
│ MEMO.TXT                     │
├──────────────────────────────┤
│ CH32V003でパソコンを作る     │
│                              │
│ CPU  : RISC-V                │
│ RAM  : 2KB                   │
│ Flash: 16KB                  │
│                              │
│                              │
│                              │
└──────────────────────────────┘

そして、

> EDIT MEMO.TXT

で編集画面を起動します。

最終的なコマンド画面

最終的には、こんな画面を目指します。

CH32V003 COMPUTER
=================

CPU     : CH32V003
ARCH    : RISC-V
CLOCK   : 48MHz
RAM     : 2KB
FLASH   : 16KB

SD CARD : OK
DISPLAY : OK
KEYBOARD: OK

CH32 BASIC V1.0

READY

>

ここから、

> HELP

PRINT
INPUT
LET
IF
GOTO
FOR
NEXT
LIST
RUN
SAVE
LOAD
DIR
TYPE
EDIT

という操作ができるようにします。

「OS」を作る

さらに発展させると、CH32V003専用の簡易OSを作ることができます。

構造としては、

┌─────────────────────────┐
│ アプリケーション         │
│ BASIC / GAME / EDITOR   │
├─────────────────────────┤
│ コマンドインタプリタ     │
├─────────────────────────┤
│ ファイルシステム         │
├─────────────────────────┤
│ デバイスドライバ         │
│ OLED / Keyboard / SD     │
├─────────────────────────┤
│ Kernel                  │
├─────────────────────────┤
│ CH32V003 Hardware       │
└─────────────────────────┘

という構成になります。

これは、現代のWindowsのような巨大なOSではありません。

「CH32V003を動かすためだけの小さなOS」です。

Arduino IDEから始められる

今回のプロジェクトの大きなメリットは、最初からアセンブラやRISC-Vの開発環境を完全に理解する必要がないことです。

UIAPduino Pro Micro CH32V003はArduino IDEで開発できます。公式資料でもArduino IDEを使った開発環境が案内されています。

まずArduinoでハードウェアを動かし、その後、

Arduino
   ↓
C/C++
   ↓
レジスタ操作
   ↓
RISC-V
   ↓
ブートローダ
   ↓
簡易OS

という順番で低レベルへ進んでいけばよいでしょう。

CH32V003の性能を逆手に取る

「たった2KBのRAMで何ができるのか?」という制限こそ、このプロジェクトの面白いところです。

現代のパソコンでは、何MB、何GBというメモリを簡単に使います。

しかし、CH32V003では、

「本当に必要なデータは何なのか?」

「画面をどうやって効率よく表示するか?」

「どうすれば少ないRAMでプログラムを実行できるか?」

を考えなければなりません。

これは、コンピューターの仕組みを学ぶには非常に良い教材になります。

実際の開発手順

このプロジェクトは、次の順番で進めるのがおすすめです。

  1. CH32V003の書き込み環境を完成させる
  2. 内蔵LEDを点滅させる
  3. OLEDを接続する
  4. OLEDに文字を表示する
  5. 数字を表示する
  6. キーパッドを接続する
  7. キー入力を表示する
  8. 電卓を作る
  9. 文字列入力を作る
  10. BASICのPRINTを実装する
  11. 変数を実装する
  12. IFを実装する
  13. GOTOを実装する
  14. FOR/NEXTを実装する
  15. LISTを実装する
  16. SDカードを接続する
  17. SAVE/LOADを実装する
  18. DIR/TYPEを実装する
  19. 簡易テキストエディタを作る
  20. ゲームを作る
  21. 簡易OSとして統合する

最初から全部作らないことが重要

このプロジェクトでは、最初から「パソコン」を完成させようとすると失敗しやすくなります。

最初は、

CH32V003
   ↓
LED点滅
   ↓
OLED
   ↓
文字表示
   ↓
キーボード
   ↓
電卓
   ↓
BASIC
   ↓
SDカード
   ↓
ファイル
   ↓
ゲーム
   ↓
簡易OS

と、一つずつ完成させます。

一つの機能が完成するたびに「自分のパソコン」が少しずつ成長していく形にします。

実は「パソコン作り」そのものが教材になる

このプロジェクトでは、単に電子部品を接続するだけではありません。

最終的には、次のような分野を一度に勉強できます。

  • Arduino
  • C/C++
  • RISC-V
  • マイコン
  • GPIO
  • I²C
  • SPI
  • UART
  • USB
  • メモリ
  • CPU
  • 割り込み
  • タイマー
  • ディスプレイ制御
  • キーボード制御
  • ファイルシステム
  • プログラミング言語
  • OSの基本

つまり、「小さなマイコンからコンピューターを理解する」という非常に良い教材になります。

UIAPduinoならではの面白さ

UIAPduino Pro Micro CH32V003はPro Micro系のサイズを採用しているため、ブレッドボードを利用した実験にも向いています。また、USB Type-C、リセットボタン、ユーザーLEDなども搭載されています。citeturn0search1turn0search3

さらに、V1.4ではRISC-Vマイコンを使ったデバッガとして利用するための仕組みも用意されています。公式資料では、別のCH32V003ボードをデバッガとして利用する「rvswdio programmer」についても説明されています。citeturn0search1turn0search2

つまり、単なるArduino互換ボードとして使うだけでなく、RISC-Vの世界に入るための実験基板としても利用できます。

今回作る「CH32V003パソコン」の完成イメージ

┌──────────────────────────────────┐
│       CH32V003 COMPUTER           │
│                                  │
│  CPU : RISC-V 48MHz              │
│  RAM : 2KB                       │
│                                  │
│  ┌────────────────────────────┐  │
│  │ READY                      │  │
│  │                            │  │
│  │ > PRINT "HELLO"            │  │
│  │ HELLO                      │  │
│  │                            │  │
│  │ > 100+200                  │  │
│  │ 300                        │  │
│  │                            │  │
│  │ > DIR                      │  │
│  │ GAME.BAS                   │  │
│  │ CALC.BAS                   │  │
│  │ MEMO.TXT                   │  │
│  │                            │  │
│  │ > _                        │  │
│  └────────────────────────────┘  │
│                                  │
│  CH32V003 BASIC                  │
└──────────────────────────────────┘

そして最終目標は「自分で作ったパソコン」

一般的なパソコンは、CPU、メモリ、OS、ディスプレイ、キーボードなどが高度に統合されているため、ユーザーは内部構造を意識することなく使えます。

しかし、このCH32V003パソコンでは、

「キーを押す」
      ↓
CH32V003が信号を読む
      ↓
文字コードに変換
      ↓
プログラムが処理
      ↓
OLEDへ送る
      ↓
画面に文字が出る

という一つ一つの処理を、自分で作っていきます。

最終的には、電源を入れると自分で作ったプログラムが起動し、

CH32V003 COMPUTER

Booting...

Display OK
Keyboard OK
SD Card OK

CH32 BASIC

READY
>

と表示されるところまで持っていきます。

これなら「CH32V003でパソコンを作った」と胸を張って言えるでしょう。

この記事の次のステップ

まずは大きな計画を立てず、第1号機を最小構成で完成させることをおすすめします。

最初の構成は、

UIAPduino Pro Micro CH32V003
          +
       SSD1306
       128×64 OLED
          +
      4×4キーパッド
          +
        ブザー

です。

これだけで、

文字表示
   ↓
キー入力
   ↓
電卓
   ↓
BASIC
   ↓
ゲーム

まで発展させることができます。

その後にmicroSD、外部RAM、より大きな液晶、パソコン用キーボードなどを追加していきます。

まとめ

UIAPduino Pro Micro CH32V003でパソコンを作ることは可能です。

もちろん、2KBのSRAMと16KBのFlashしかないため、Windows 11を動かすようなパソコンにはなりません。

しかし、処理速度が遅くてもよい、画面は小さくてよい、機能は自分で作るという条件なら、非常に面白いコンピューターを作ることができます。

むしろ重要なのは性能ではありません。

「CPUが動く」

「メモリを使う」

「キーボードから入力する」

「画面に表示する」

「プログラムを実行する」

「ファイルを保存する」

というコンピューターの基本機能を、一つずつ自分で作れることに価値があります。

しかも、そのCPUは32bit RISC-Vです。

290円程度の小さなボードから始めて、最終的に「自分で設計したコンピューター」を作る。

これはかなり面白いプロジェクトです。


参考資料

PC☆LIVE!「税込290円で購入できるArduino互換マイコンボード」

UIAP公式「UIAPduino Pro Micro CH32V003 V1.4」

Zephyr Project「UIAPduino Pro Micro CH32V003」

UIAPduino Pro Micro CH32V003 V1.4 回路図

戻る

Verified by MonsterInsights