第3話「ZEBRAって、無骨で無愛想だけど、なんかイイ!」
セレスティア王国科学技術省の戦略AIプロジェクトでAffecticsの研究開発者となった澪。
その澪が普通の高校生から引きこもりになる迄のフラッシュ・バック ストーリー。
ある日の学校帰り。
澪はまた、商店街の端にある小さな店――“ルーペ堂”のドアを押していた。
カラン、と金属の鈴。乾いた木の匂い、磨かれた真鍮の冷たさ、色褪せた紙のざらつき、セピア色のライト。
長い時のなかで息づいてきた品々が地層の様な層になって積もっている感じがする。
(ここに来ると、やっぱり落ち着く。教室の光はまぶしすぎて、私の輪郭が薄くなる気がする)
澪は、いつも通りの順番で陳列棚をゆっくりと移動する。
棚のいちばん奥、古いラジオの陰に、それはあった。
手のひらより少し大きいディスプレイ。飴色の樹脂フレームが少し擦れている。黒い画面に、白い点がいくつも――ぎこちなく、でも確かに流れていく。
「……かわいい...流れ星?」
思わず声が漏れた。
可愛いのに、媚びていない。余計な飾りがない。流れる星達に「一生懸命さ」を感じてしまうのは何故だろう?
「うん、カワイイ」
カウンターにいた店主が、新聞より古そうな眼鏡を持ち上げる。
「お嬢ちゃん、気に入ったかい? それは、“マイクロコンピュータ”ってやつらしいよ。見慣れない爺さんが持ち込んだんだ。説明書付き。私しゃ、こういうのはさっぱりなもんでね...買うなら安くするよ」
紙の説明書。黄ばんで、角がほつれて、日向の匂いがする紙束。表紙には、細い英字。
ZEBRA Assembly Language
Zero-Based Extended Binary Recursive Architecture
(ZEBRA……ゼブラ。縞模様みたいな名前。かわいいくせに、硬い響き)
私は小銭の袋を握り直した。
「……これ、ください」
店主は目尻を下げ、ニコッと笑って紙袋にそっと包んでくれた。
ドアの鈴がもう一度鳴る。夕方の風が、紙袋の角で小さな音を作った。
(可愛い星たち、連れて帰るよ)
澪の部屋。
机の上のスタンドライトを少し下げる。
紙袋からマイクロコンピュータを出して電源に繋げる。
かすかな電子の匂い。スクリーンに、にじむような文字列が浮かぶ。
同梱されていた平たいキーボードは、キーが低くて重い。叩くたびに“カタ、カタ”と骨みたいな音がする。
(昔、私の知らない誰かもこんな風にこれを叩いていたんだよね、うん、何か...イイ)
説明書の一章目。“最初の流星”。短い命令が並んでいた。
澪は息を止めるみたいに、ひと文字ずつ打つ。
; shooting star demo
MOV R1, #0 ; X
MOV R2, #12 ; Y
CLR ; 画面を消去
LOOP: PSET R1, R2 ; ドットを描く
ADD R1, #1 ; Xを一つ進める
JMP LOOP
Enter。
ディスプレイの黒がわずかに深くなって、白い粒が、すっと横切った。
> Program loaded (16 bytes)
Running…
Video: mode=mono 64x32
OK
「おお!……動いた。こんにちは、私の作った星たち」
単純な世界。
ただ、命令が正しくて、だから世界が動く。
命令が間違っていれば「エラー」と出るだけ。
無骨で無愛想で無駄のない言語というより記号の様な命令達。
(こういうのが、好き。無駄のない返事。冗長じゃない会話)
古いキーボードに、指がもう一段深く馴染む。
行間のない、短い無駄のない言葉だけの対話――それがこんなにも温かいなんて。
説明書の末尾に、薄い青いインクの手書きがあった。
「この説明書を手に取ったあなたに感謝します。
私は子供の頃、このZEBRAでコンピュータの世界の美しさを知りました。どうかあなたも触れてみてください」
澪はその手書き文字を指でなぞった。
(知らない誰かの、時間の温度。私の手に渡って、まだ温かい)
澪はもう一度、画面の上の白い粒を追う。X=0から、右端まで、ぶつかって、戻らない。ずっと進む。
ぎこちない。だけど、嘘がない。
その夜から、澪は説明書の二章、三章を貪るように読んだ。
“レジスタ”“スタック”“割り込み”。
わからない単語は、スマホじゃなくて、付箋に書いて壁に貼った。忘れたくなかったから。
(CPUは、命令を一つずつ実行する頭。
レジスタは、作業台。
メモリは、倉庫。
スタックは、一時的に預ける棚。
割り込みは、急用のベル)
ZEBRAの画面の右下に、こんな小さなログが現れるのがたまらなく好きになった。
> CPU: 1MHz / REG: R0–R7 / FLAGS: Z N C V
STACK: 0x1F00–0x1FFF (downward)
INT: VBLANK=0x10, TIMER=0x11
次のページ、“トレイル(尾)を描く”。私はコードを少し変えてみる。
; star with fading trail
MOV R1, #0
MOV R2, #12
CLR
LOOP: PSET R1, R2
CALL FADE ; 前フレームを少し消す
ADD R1, #1
JMP LOOP
> Linking: FADE at 0x0300
Running…
Timer INT hooked
白い線が、流星の尾みたいにほんの少しだけ残る。
それがすぐに溶けて、黒に戻る。呼吸と同じ速度で。
澪は机に頬杖をついて、星が溶けるのを眺め続けた。
星を見つめながら、何故か学校での会話を思い出していた。
――限定スイーツ、彼氏、スタンプ。
澪は、皆に合わせて笑っている自分の顔を想像し、それを振り払うように頭を左右に振った。
ふいに、笑い声の残響が遠くで弾けて、消えた。
ディスプレイの中で、流星の尾だけが残って、消えた。
それから数日間。
澪は、ZEBRAの“仕組み”に夢中になっていく。
レジスタの値をメモ帳に写して、命令ごとのフラグ変化を書き足す。
割り込みベクタに小さなラベルを付ける。
メモリマップ――0x0000からのROM、0x0800からのRAM、0x1F00からのスタック。
0x2000以降は入出力。ビデオは0x3000から。1ビットのモノクロ。64×32。
学校の授業中。
澪はついタブレットで「仮想アドレス 空間」「メモリ保護」の検索に夢中になり、教師に当てられ、立ち上がるタイミングを逸してドタバタする。
「では、澪。続きを読んで」
「あ……あ、はいっ」
隣のリーが澪に囁く。
「38ページ」
放課後。
教室を出ようとする澪にリーが声をかける。
「澪、あんた最近変だよ。大丈夫なの?」
「うん...へへへ...大丈夫。ありがと。じゃ、明日ね」
澪の自室。
澪は授業中に調べた「仮想空間」の事を考えていた。
(あんな考え方があったなんて⋯
物理世界の上に自由な仮想の空間を変幻自在に作る事ができる。
その空間は在ると思うから在る、無いと思えば無い、でもその空間の中で何かの現実が進んで行く)
澪はベットに転がって天井を見つめていた。
(学校も、社会も、みんなの“在る”でできた仮想空間。共同幻想。
でも私は、その幻想の中で自分の輪郭を見失う。
だったら――私が素の私自身を受け入れられる世界を作ればいい...)
澪は机に座り、マイクロコンピュータの小さなディスプレイを見つめる。
星の動きをもう少し滑らかにするため、タイマ割り込みを使う。
; timer-driven star
MOV R1, #0
MOV R2, #12
CLR
STI TIMER, @TICK ; タイマ割り込みに飛ばす
HALT
TICK: ADD R1, #1
PSET R1, R2
IRET
> INT TIMER set -> 0x0410
Tick=16ms / VBlank=33ms
OK
星は一定のリズムで、正確に進む。
誰の気分にも左右されない。私の命令通りに、正直に。
(頭の中で、なにかが音を立てて組み上がっていく)
――もし、私がこの仕組みを全部理解して、思い通りに組み合わせられたら。
――もし、レジスタもメモリも割り込みも、全部、私の言葉で編めたら。
(私の理想の仮想空間を、作れるかもしれない)
息が浅くなる。指先が熱くなる。
ルーペ堂で買った星刻印のキーホルダーが、机の上でキラリと光った気がした。
夜更け。
窓の外の街灯が、カーテンの布目に沿って細い縞を作る。
ZEBRAのディスプレイの前で、澪は背筋を伸ばし、大あくびをする。
もういちど、星を流す。
> Build: success
Run: 0x0000 →
FPS: 60
No errors
星は画面の右端で消え、左端で再び生まれる。
何度でも。何度でも。
それは、誰かの気分で止まらない。
私が止めるまで、止まらない。
机の上のキーホルダーに指を触れる。
星の刻印。番号の消えたタグ。時間に取り残された、でも確かに“ある”もの。
「よし、決めた!」
窓を開け放ち、深く深呼吸する。
それはもうあの長いため息とは違っていた。
澪は学校からの帰りがけにリーに言った言葉を思い出した。
ーじゃ、明日ね。
澪は気付いていた。
その「明日」がもう来る事は無いことを。




