シリーズ「コンピュータの文字のしくみ」 第3回
回路が「形を覚える」とは?
点で、描く
これまでの話を、短く振り返っておく。
コンピュータの中にあるのは、0 と 1 の並び、パターンだけだ。
0100 0001 を「A」と読むのは、人が決めた表(文字コード)のほうである(第1回)。
パターンを光る形にするには、「どのパターンのとき、どこを光らせるか」の表を書けばいい。 その表は、そのままゲートの配線になる。 4 桁のパターンから、7 本の棒で数字を光らせる回路を、そうやって作った(第2回)。
ただ、7 本の棒では、「M」や「W」が書けなかった。 「あ」も、掲示板の行き先の「品川」も、書けなかった。 前回は、こう締めくくった。
どんな形でも出せる光らせ方は、ないだろうか。
答えは、駅の掲示板そのものにある。 光る掲示板を、近くで見てほしい。 文字は、線ではなく、碁盤の目のように並んだ細かい点でできている。
棒を、どんどん細かく刻んでいくと、最後は点になる。 点を縦と横に並べておけば、どの点を光らせるかを選ぶだけで、どんな形でも描ける。 点(ドット)を碁盤の目(マトリクス)に並べたこの表示を、ドットマトリクスと呼ぶ。
縦 8 つ・横 8 つの、64 個の点で描いてみた。
棒では書けなかった「M」も「W」も、「あ」も描ける。
その代わり、光らせるかどうかを決めるものが、7 本から 64 個に増えた。 しかも、それが文字ごとに違う。 どの文字のとき、どの点を光らせるのか。それを、どこかに覚えておかなければならない。
この回は、文字の形を覚えておく回路を作る。
形を、メモリに
点は、光るか、消えているかの 2 通りだ。
光る点を 1、消えている点を 0 と書くことにしよう。
すると、横に並んだ 8 つの点は、8 桁のパターンになる。 第1回で、8 桁のまとまりを語と呼んだ。 点の 1 行が、ちょうど 1 語だ。
「A」の形を、1 行ずつパターンにしてみる。
いちばん上の行は、左から 4 つ目の点だけが光っているので、0001 0000。
真ん中あたりの横棒の行は、1111 1110。
パターンを左から読むと、そのまま点の並びになっている。
右の 1 列と、いちばん下の 1 行は、どの文字でも空けておく。 文字を横や縦に並べたとき、隣の文字とくっつかないようにするためだ。
8 行あるので、「A」の形は 8 語。 「M」も「W」も、同じく 8 語ずつだ。
この語を、しまっておく箱が要る。
パターンを、たくさんしまっておける箱を、メモリという。 しまう場所には、0 から順に番号が付いている。この番号を番地という。 番地を入れると、その番地にしまってある語が出てくる。
『記憶のしくみ』を読んだ人は、第8回で作った 4 語のメモリを思い出してほしい。番地をデコーダでほどき、選んだ番地の語だけを出口に通していた。『CPU のしくみ』の第1回では、同じメモリに、命令を並べてしまっていた。
文字のパターンを、番地に
さて、「A」の 8 語を、メモリのどの番地にしまおうか。
掲示板に届くのは、「A」の形ではなく、0100 0001 というパターンだった。
それなら、このパターンを、そのまま番地に使えばいい。
ただし、「A」の形は 8 語ある。番地が 1 つでは足りない。
そこで、文字のパターンの後ろに、行の番号を 3 桁つなげる。
3 桁あれば、000 から 111 までの 8 通り。0 行目から 7 行目までを指せる。
文字のパターン 8 桁と、行の番号 3 桁。あわせて 11 桁の番地だ。
| 番地(文字のパターン + 行の番号) | 中身(その行の点) |
|---|---|
0100 0001 000 | 0001 0000 |
0100 0001 001 | 0010 1000 |
0100 0001 010 | 0100 0100 |
0100 0001 011 | 1000 0010 |
0100 0001 100 | 1111 1110 |
0100 0001 101 | 1000 0010 |
0100 0001 110 | 1000 0010 |
0100 0001 111 | 0000 0000 |
番地の前の 8 桁は、どの行も「A」のパターン。後ろの 3 桁だけが、行ごとに変わる。
掲示板が「A」を描きたいときは、0100 0001 の後ろに 000 から 111 までを順につなげて、8 回読めばいい。
番地を、数として読んでみよう。
「A」のパターンは、数として読むと 65 だった。
後ろに 3 桁つなげると、1 桁増えるたびに位が 1 つずつ上がるので、65 は 2 × 2 × 2 = 8 倍になる。
だから、「A」の 3 行目の番地は、65 × 8 + 3 = 523 番地。
「A」の 8 語は、520 番地から 527 番地までに並んでいる。
「M」(0100 1101、77)なら、77 × 8 = 616 番地から。
第1回で、同じ 0011 0001 が、文字として読めば「1」、数として読めば 49 になる、と書いた。
今度は、同じ 0100 0001 を、番地の一部として読んでいる。
ここでも、名札を貼っているのは読む側だ。
では、このメモリを、回路でどう作るか。
実は、もう作り方を知っている。 第2回の 7 本の棒の回路と、まったく同じだ。
- 番地を、デコーダで、番地ごとの線にほどく。番地が
0100 0001 011のときは、「A の 3 行目の線」だけが1になる。この線を語の線と呼ぶ。 - 点の列ごとに、OR を 1 個置く。OR は、入口のどれか 1 つでも
1なら1を返すのだった。 その列の点が光る行の語の線を、全部その OR につなぐ。
第2回では、「表の ● を 1 つ書くことと、配線を 1 か所つなぐことは、同じこと」だった。 今回の表の ● は、文字の点そのものだ。 だから、配線の ● を並べると、文字の形がそのまま浮かび上がる。
このメモリは、一度しまった形を書き換えない。読むだけだ。 このような、読むだけのメモリを、ROM(ロム、Read Only Memory の頭文字)という。
押して、確かめる
「A」「M」「W」の 3 文字の形を、メモリにしまってみた。 3 文字 × 8 行で、24 語だ。
文字の形のメモリ シミュレータ
文字のパターンと行の番号のマスを押して、番地を替えてみてください
番地 0100 0001 00065 × 8 + 0 = 520 番地
「A」の 0 行目 → 0001 0000 を表示の 0 行目に
上の 8 つのマスが、文字のパターン。その下の 3 つのマスが、行の番号だ。
押すと、0 と 1 が切り替わる。
はじめは、0100 0001 000。「A」の 0 行目だ。
左のデコーダから出る 24 本の線のうち、「A」の 0 の線だけが緑になっている。
その線の ● は 1 つだけで、3 列にある(列は、いちばん左を 0 と数える)。
3 列の OR だけが 1 になり、読み出した語は 0001 0000。
図のいちばん下が、8 × 8 の表示だ。 列は、上の OR とそろえてある。 OR から下りる縦の線は、表示の 8 行すべてに届いている。
では、どの行が光るのか。 それを選んでいるのも、行の番号だ。
行の番号の 3 本は、番地の後ろ 3 桁として上のデコーダに入るだけではない。
図の左の端を下りて、表示の左の「行のデコーダ」にも入っている。
行のデコーダは、番地のデコーダと同じ作りで、行の番号を 8 本の「受け取る線」にほどく。
000 なら 0 行目の線、011 なら 3 行目の線だけが 1 になる。
受け取る線は、その行の点の下を横に走っている。
受け取る線が 1 の行(水色の帯)の点だけが、縦の線の値を受け取って、覚えておく。
ほかの行は、前に受け取った値のままだ。
いまは 0 行目の受け取る線が 1 なので、0 行目の 3 列に、点が 1 つ灯る。
行の番号のいちばん右のマスを押して、001 にしてみてほしい。
上では「A」の 1 行目の語の線に、下では 1 行目の受け取る線に、同時に替わる。
0010 1000 が出てきて、1 行目に点が 2 つ灯る。
0 行目の点は、さっき受け取った語のまま光っている。
同じ行の番号が、「メモリのどの行を読むか」と「表示のどの行に光らせるか」の両方を決めている。 だから、読んだ行と光る行が、ずれることはない。
1 行ずつ押していくのは手間なので、「8 行を順に読む」を押してみよう。
行の番号が 000 から 111 まで進み、表示に「A」が現れる。
ここで、図の ● の並びを見てほしい。 上から「A」「M」「W」の形が、縦に積んである。 配線が、そのまま文字の形をしている。
次は、文字のパターンを替えてみる。
「M」は 0100 1101。「A」から、下 4 桁の左の 2 つのマスを押せばいい。
押しても、表示はまだ「A」のままだ。
受け取る線が 1 なのは、いま読んでいる行だけだからである。
いまは 7 行目で、そこはどの文字でも空けてある行なので、見た目は変わらない。
「8 行を順に読む」を押すと、0 行目から順に「M」の行に替わり、表示が「M」になる。
「W」は 0101 0111 だ。こちらも試してみてほしい。
では、メモリにしまっていない文字はどうなるか。
「B」の 0100 0010 を押してみてほしい。
どの語の線も 1 にならず、読み出した語は 0000 0000。真っ暗だ。
第2回と同じで、表に書いていないパターンは、回路にも無い。
「B」の形も描きたければ、表に 8 行を足して、デコーダに 8 本の線を足し、点のところを OR につなげばいい。
文字の形も、点の並びのパターンとしてメモリに覚えておける。文字のパターンを番地にすれば、形が出てくる。
この回路は、「A」がどんな形かを知らない。
0100 0001 011 が来たら、ある 1 本の線が 1 になり、その線につないである OR が 1 になる。それだけだ。
並んで光った点を「A」と読んでいるのは、ここでもやはり、表示を見ている私たちである。
部品を数えてみよう。 メモリは、NOT 11 個(番地の桁ごとに 1 個)、AND 24 個(語の線 1 本に 1 個)、OR 8 個(点の列ごとに 1 個)。あわせて 43 個。 表示の行のデコーダは、NOT 3 個と AND 8 個だ。 まとめている場所(●)は 56 か所で、これは 3 文字の光る点の数と同じだ。 いちばん右の列は、どの文字でも空けてあるので、その列の OR には何もつないでいない。
ASCII の目に見える 95 文字を全部しまうなら、語の線は 95 × 8 = 760 本になる。 数は増えるが、作り方は変わらない。 本物のメモリは、ゲートを並べるのとは違う作り方をしているが、番地を入れるとその番地の語が出てくる、というところは同じだ。
流れる文字
掲示板では、文字が右から現れて、左へ流れていくことがある。 行き先が長くて、一度に入りきらないときなどだ。
文字が流れて見えるのは、点の並びを、1 列ずつ左へずらしているからである。
流れる文字
「1 列ずらす」を押して、文字を流してみてください
ずらした回数 0 回
「1 列ずらす」を押すたびに、どの点も、右隣の点の値を受け取る。 左端の列は、こぼれて消える。 右端の列には、文字の形のメモリから読んだ「次の列」が入る。
メモリにしまってあるのは行ごとの語なので、1 列ぶんの点は、8 つの語から、同じ列の点を 1 つずつ拾って作る。 メモリの中身は、1 つも変わらない。ずれているのは、表示のほうだけだ。
「続けて流す」を押すと、ずらす間隔が短くなり、文字がなめらかに流れていくように見える。
『記憶のしくみ』を読んだ人は、第7回のシフトレジスタを思い出してほしい。クロックが来るたびに、どの桁も隣の桁の値を受け取っていた。この表示は、行ごとに 16 桁のシフトレジスタが 8 本並んでいる、と見ることができる。
漢字は、細かい
英字は、8 × 8 の点で足りた。 ASCII の 128 通りぶんの形をしまっても、128 × 8 = 1024 語だ。
では、日本語はどうか。
1 節で、「あ」も 8 × 8 の点で描いた。 けれど、このメモリでは「あ」を出せない。 番地の前半に入れる、「あ」のパターンが無いからだ。 第1回の ASCII の表に、「あ」はいない。
漢字は、さらに厳しい。 「駅」の線の数を、8 × 8 の点に収めるのは無理だ。 少なくとも、縦 16・横 16 くらいの点は要る。
64 点・8 語
256 点・32 語
16 × 16 で 256 点。 1 行が 16 桁なので 2 語ずつ、1 文字で 32 語になる。
そして、漢字は数が多い。 ふだんの文章で使う目安として国が決めている常用漢字だけでも、2136 字ある。 1 文字 32 語なら、68352 語。 メモリは大きくなるが、形をしまう場所は、増やせばすむ。
困るのは、番地のほうだ。 番地の前半には、文字のパターンを使っていた。 けれど、8 桁のパターンは、256 通りしかない。 ASCII だけで、もう半分を使っている。 何千もの漢字に、1 つずつパターンを割り当てる余地は無い。
ちなみに、パソコンやスマホの画面の文字は、拡大してもなめらかなことが多い。 あれは、点の並びではなく、文字の輪郭の形を覚えておく別の作り方による。 けれど、どちらの作り方でも、まず「どの文字か」を、パターンで指さなければならない。
8 桁の語で、何千もの文字を、どう表すのか。
参考文献
- 松下俊介 著. 基礎からわかる論理回路. 第2版, 森北出版, 2021.7. 978-4-627-82842-1. https://ndlsearch.ndl.go.jp/books/R100000002-I031573740
- チャールズ・ペゾルド 著 ; 酒匂寛 訳. CODE : コードから見たコンピュータのからくり. 第2版, 日経BP, 2024.2. 978-4-296-08024-3. https://ndlsearch.ndl.go.jp/books/R100000002-I033318457
- 文化庁. "常用漢字表(平成22年内閣告示第2号)". 文化庁. https://www.bunka.go.jp/kokugo_nihongo/sisaku/joho/joho/kijun/naikaku/kanji/, (参照 2026-10-26).
- 日本規格協会. JIS X 9051:1984 表示装置用16ドット字形. 日本規格協会, 1984.
- 門真なむ. "美咲フォント". Little Limit. https://littlelimit.net/misaki.htm, (参照 2026-11-1).