COREWAR

/
Step 2: プロセスの停止と「RESET」での復旧
🎯[STEP] を3回押して DAT によるプロセス停止を確認する(1/1)

ミッション一覧 (全30ステップ)

第1章:画面とメモリの基本 (1-6)
BASIC★☆☆
Step 1: 時間を進める「STEP」ボタン
🔒
BASIC★☆☆
Step 2: プロセスの停止と「RESET」での復旧
🔒
BASIC★☆☆
Step 3: 「編集できる状態」と「実行中の状態」EDIT
🔒
BASIC★☆☆
Step 4: メモリの箱の3つの部屋(右の部屋 B を変える)EDIT
🔒
BASIC★☆☆
Step 5: 左の部屋(A)と右の部屋(B)を書き換えるEDIT
🔒
BASIC★☆☆
Step 6: 「数値(#)」と「番地($)」の記号の違いEDIT
第2章:代表的な命令とループ (7-13)
🔒
ARITHMETIC★☆☆
Step 7: 足し算の命令「ADD」の観察
🔒
ARITHMETIC★☆☆
Step 8: 足す「数値(A)」を変えてみようEDIT
🔒
ARITHMETIC★☆☆
Step 9: 足す「相手の場所(B)」を変えてみようEDIT
🔒
ARITHMETIC★☆☆
Step 10: 引き算の命令「SUB」を使ってみようEDIT
🔒
BASIC★☆☆
Step 11: 箱を丸ごとコピーする命令「MOV」EDIT
🔒
CONTROL★☆☆
Step 12: 時間を巻き戻すジャンプ命令「JMP」EDIT
🔒
CONTROL★☆☆
Step 13: 簡単なプログラムを作ろう(自動カウンター)EDIT
第3章:ノイマン型とデジタル生命 (14-18)
🔒
BASIC★☆☆
Step 14: なぜ「DAT」が爆弾になるのか?EDIT
🔒
BASIC★☆☆
Step 15: 自分自身の命令をコピーする(コード=データ)EDIT
🔒
BASIC★☆☆
Step 16: お手本観察:最古の生命体「Imp」をSTEP実行する
🔒
BASIC★☆☆
Step 17: Impの簡単な変更(コピー先の観察と実験)EDIT
🔒
ARITHMETIC★★☆
Step 18: 間接参照(@ポインタ)の仕組みを知るEDIT
第4章:伝統的アルゴリズム (19-24)
🔒
STRATEGY★★☆
Step 19: お手本観察:爆撃機「Dwarf」をSTEP実行で解剖する
🔒
STRATEGY★★☆
Step 20: Dwarfの簡単な変更(爆弾の間隔を変える)EDIT
🔒
STRATEGY★★☆
Step 21: 実戦デビュー:爆弾の間隔を調整して標的を破壊せよEDIT
🔒
CONTROL★★☆
Step 22: お手本観察:分裂命令「SPL」と増殖の仕組み
🔒
CONTROL★★☆
Step 23: お手本観察:条件比較命令「SEQ / CMP」で敵を探すEDIT
🔒
STRATEGY★★☆
Step 24: お手本観察と変更:防衛罠「Imp-Gate」でImpを止めろEDIT
第5章:実戦改造と総合演習 (25-30)
🔒
STRATEGY★★☆
Step 25: 【Stone(石)】高速爆撃機の観察とステップ幅の改造EDIT
🔒
STRATEGY★★☆
Step 26: 【Paper(紙)】自己複製スウォーム「Mice」を観察する
🔒
STRATEGY★★★
Step 27: 【Paperの改造】クローン投下距離を変更して増殖せよEDIT
🔒
STRATEGY★★☆
Step 28: 【Scissors(鋏)】索敵スキャナーの観察とスキャン間隔の改造EDIT
🔒
STRATEGY★★★
Step 29: 【Trap(罠)】敵の魂を誘拐する「Vampire」の観察と改造EDIT
🔒
STRATEGY★★★
Step 30: 卒業試験:愛機のチューニングと総合バトルEDIT
👁️ お手本観察モード([STEP] で観察)
[番地][命令 (Opcode)][A (左の値)][B (右の値)]
📦 データ領域 / 爆弾 (DAT)
0000
▼MOV
#
$
0001
▼MOV
<
<
0002
↺JMN
$
$
0003
❖SPL
@
#
0004
+ADD
#
$
0005
↺JMP
$
$
0006
■DAT
$0
$0
0007
■DAT
$0
$0
0008
■DAT
$0
$0
0009
■DAT
$0
$0
0010
■DAT
$0
$0
0011
■DAT
$0
$0
0012
■DAT
$0
$0
0013
■DAT
$0
$0
0014
■DAT
$0
$0
0015
■DAT
$0
$0
0016
■DAT
$0
$0
0017
■DAT
$0
$0
0018
■DAT
$0
$0
0019
■DAT
$0
$0
0020
■DAT
$0
$0
0021
■DAT
$0
$0
0022
■DAT
$0
$0
0023
■DAT
$0
$0
0024
■DAT
$0
$0
0025
■DAT
$0
$0
0026
■DAT
$0
$0
0027
■DAT
$0
$0
🏟️ARENA (20 ROWS)SCOPE: 0000 - 0019
[メモリ空間 800番地 (20行 × 40列)]左のエディタと1対1で同期
TASKS: 0
CYC: 0
📖 講義ノート // STEP 02 OF 30第1章:画面操作とメモリの基本構造⏱ 読了目安:約5分
📖 講義ノート:この実験で起きているコンピュータ科学と人工生命の原理

プロセスの異常終了(例外)と決定論的リセットの科学

なぜCPUは「データ」を実行すると停止するのか? そして初期状態の再現性が実験科学にもたらす意味

#Process Termination#Illegal Instruction#DAT (Data)#Deterministic Reproducibility#State Reset
🔬Step 2: プロセスの停止と「RESET」での復旧

先ほどの続きを観察しましょう。 3行目(0002 番地)には DAT(データ) という箱があります。 DAT はただの「数字を入れておくデータ箱」であり、動かすための命令ではありません。

もし実行ポインタが DAT の行を実行してしまうと、プログラムは 「プロセス停止(クラッシュ / 消滅)」 となります。 そして一度でも時間を進めると、画面は 🔒 実行モード になり、そのままではコードを編集できません。[RESET] ボタン を押すと、いつでも時間(Cycle 0)を巻き戻して元の編集状態に復旧できます!

🎯 やってみよう(編集不要) [STEP] ボタンを 3回 押して、3行目の DAT でプロセスが停止(💥バッジが表示)されるのを確認しましょう!

1. 命令ではない箱「DAT」とプロセスの死

Step 2の実験では、[STEP] ボタンを3回押すことで、プログラムカウンタ(PC)が 0000 ➔ 0001 ➔ 0002 番地へと進み、3行目の『DAT.F #0, #0』を実行した瞬間に「💥 プロセス停止(Process Terminated)」となる現象を確認しました。

なぜ 0000 番地や 0001 番地の『ADD』では生き続けられたのに、0002 番地の『DAT』を踏んだ瞬間にプログラムは死んでしまったのでしょうか? その理由は、『DAT』が「Data(データ:単なる数値の保管箱)」を表す特別な記号だからです。ノイマン型コンピュータのメモリには、CPUを動かすための「命令(ADDやMOVなど)」と、計算結果や数値をしまっておくための「データ(DAT)」が同じ並びの箱に同居しています。

CPUのデコーダ(命令解読器)が 0002 番地の箱を開けたとき、そこに入っていたのは実行可能な命令ではなく「ただのデータ(DAT)」でした。現実のCPU(x86やARMなど)においても、実行不可能なビット列をプログラムカウンタが読み込むと「不正命令例外(Illegal Instruction Exception / SIGILL)」が発生し、OSはそのプロセスを即座に強制終了(Kill)します。CoreWarの世界では、この「CPUがデータ領域を実行しようとして引き起こす異常終了」こそが、デジタル生命の「死(プロセスの消滅)」として定義されているのです。

[0000] ADD.AB #1, $2   ──► Valid Opcode (ALU executes addition)
[0001] ADD.AB #1, $1   ──► Valid Opcode (ALU executes addition)
[0002] DAT.F  #0, #0   ──► Non-Executable Data! ➔ 💥 Hardware Exception (Process Killed)

2. なぜ実行中にメモリは汚れていくのか?(副作用と状態変化)

[STEP] を進めるにつれて、0002 番地のB値が 0 から 1、そして 2 へと書き換わっていくことにも気づいたはずです。プログラムが実行されるということは、メモリ上の数値が次々と変更され、初期状態(Cycle 0)から別の状態へと不可逆的に変化していくことを意味します。

もし、プログラムが動き出してメモリが書き換わっている最中に、人間がエディタからコードを書き足したらどうなるでしょうか?「最初からそのコードだったから動いたのか、それとも途中で書き換わったメモリの上に乗ったから動いたのか」が分からなくなり、科学的な実験として成立しなくなってしまいます。そのため、Cycle 1 以降の実行モード(🔒 RUNNING MODE)ではメモリがロックされ、プログラム自身の命令による変化だけを純粋に観察できるようになっているのです。

3. 決定論的機械と「RESET」が保証する再現性

では、実験に失敗したり、プロセスが停止した後にコードを改良したいときはどうすればよいでしょうか? そこで決定的な役割を果たすのが [RESET] ボタンです。

[RESET] を押すと、時計の針は Cycle 0 へと巻き戻され、実行中に書き換わったすべてのメモリセルが初期コードの状態へと完全に復元されます。コンピュータ科学において、同じ初期状態(Initial State)と同じ入力を与えれば、100万回実行しても100万回とも1ビットの狂いもなく全く同じ結果になる性質を「決定論的性質(Determinism)」と呼びます。

現実の生物実験では、死んでしまった細胞を時間を巻き戻して蘇らせることはできません。しかし、デジタル・ビバリウム(計算機上の実験室)では、[RESET] ボタンを押すだけで宇宙の時間を Cycle 0 に戻し、何度でも条件を変えて試行錯誤(トライ&エラー)を繰り返すことができます。「クラッシュを恐れずに実行し、結果を見て [RESET] で巻き戻す」——このサイクルこそが、プログラミング上達の最強のエンジンです。

🔒

🔒 MISSION CLEAR で講義ノートの全編が解放されます

上段の実験シミュレーターでミッションを達成すると自動的に全編がアンロックされます。(下のボタンから今すぐ全文を先に読むことも可能です)