当サイトの一部ページには、アフィリエイト・アドセンス・アソシエイト・プロモーション広告を掲載しています。

Amazonのアソシエイトとして、Security Akademeiaは適格販売により収入を得ています。

広告配信等の詳細については、プライバシーポリシーページに掲載しています。

消費者庁が、2023年10月1日から施行する景品表示法の規制対象(通称:ステマ規制)にならないよう、配慮して記事を作成しています。もし問題の表現がありましたら、問い合わせページよりご連絡ください。

参考:令和5年10月1日からステルスマーケティングは景品表示法違反となります。 | 消費者庁

ミジンコによるNandGame攻略

2023年12月31日

NandGameとは

NandGameはCPUアーキテクチャーを学べるゲームです。自作CPUに興味を持っている方に向いています。

最初はリレーでNANDゲートを構築し、それをベースとして徐々に複雑なデジタル回路を構成していきます。マシン語やアセンブリ言語の実装を経て、最終的にプロセッサーまで構築します。

インストール不要で、ブラウザーでアクセスするだけ遊べます。アカウントの作成も不要です。組んだ回路のセーブデータはブラウザーが保持していますので、再度アクセスした際には途中から再開できます。

「From NAND to Tetris – Building a Modern Computer From First Principles」プロジェクトにインスパイアされて開発されたとのことです。

NandGameの特徴

  • 完全無料。
    • これが強い。
  • ブラウザーでアクセスするだけ。
    • アカウントの作成、ソフトウェアのインストールなし。
  • オートセーブ。
    • 明示的にセーブして、別の回路を組んでから、先の回路をロードするということがやりにくい(実質的にできない)。
    • 別マシン(あるいは別ブラウザー)とセーブデータを共有しにくい。
  • 英語。
  • 実装したマシン語やアセンブリー言語を用いたプログラミングに関するステージはほとんどない。
  • 仕様の説明がたまに雑、不親切。特に後半の課題に、この問題が当てはまる。

Turing Completeとの比較

似たゲームとしてTuring Completeがありますが、比較すると次のような違いがあります。

NandGameTuring Complete
価格無料有料
環境OSに依存しないWindows、MacOS
ゲーム性
セーブ機能オートセーブSteamクラウドにセーブされ、OS別で共有可
1つの課題に複数の回路のセーブできる。
カスタムコンポーネント機能ありあり
※Labステージ以降で使える。
サンドボックス機能なしあり
※独自の回路を組んで楽しんだり、シミュレーターとして活用したりできる。
ボリューム
デジタル回路のステージリレーを用いてNANDゲートを構成するステージからスタート。
最終的にマルチタスクをサポートするプロセッサーを作る。
NANDゲートからスタート。
最終的に2つのCPUを作る。
アセンブリー言語のステージマシン語やアセンブリー言語の実装ステージはあるが、プログラミングステージはあまりない。プログラミングステージも豊富。
NandGameとTuring Completeの比較

個人的にはTuring Completeのほうが楽しく遊べました。

各レベルの攻略記事

NandGameではステージをレベル(Level)と表現しています。それに習って、当サイトでも「レベル」という呼称を使うことにします。

NandGameで用意されているレベルは、Hardware、Software、Optional Levelsの3部構成になっています。

カテゴリー内のステージを全クリアした時点で次のカテゴリーにアクセスできます。

例えば、最初のHardwareをクリアするとSoftwareが表示され、SoftwareをクリアするとOptinal Levelsが表示されます。

ここで解説する内容は、2023年12月時点のNandGameになります。
NandGameがバージョンアップされ、レベルの内容が新しくなっていたり、新レベルが追加されていたりしてします。
そのため、解説記事とギャップが出てくる可能性があります。

Hardwareカテゴリー

Hardwareカテゴリー
No.グループレベル名
1.1.1Logic GatesNand
1.1.2Logic GatesInvert
1.1.3Logic GatesAnd
1.1.4Logic GatesOr
1.1.5Logic GatesXor
1.2.1ArithmeticsHalf Adder
1.2.2ArithmeticsFull Adder
1.2.3ArithmeticsMulti-bit Adder
1.2.4ArithmeticsIncrement
1.2.5ArithmeticsSubtraction
1.2.6ArithmeticsEqual to Zero
1.2.7ArithmeticsLess than Zero
1.3.1SwitchingSelector
1.3.2SwitchingSwitch
1.4.1Arithmetic Logic UnitLogic Unit
1.4.2Arithmetic Logic UnitArithmetic Unit
1.4.3Arithmetic Logic UnitALU
1.4.4Arithmetic Logic UnitCondition
1.5.1MemoryLatch
1.5.2MemoryData Flip-Flop
1.5.3MemoryRegister
1.5.4MemoryCounter
1.5.5MemoryRAM
1.6.1ProcessorCombined Memory
1.6.2ProcessorInstruction
1.6.3ProcessorControl Unit
1.6.4ProcessorComputer
1.6.5ProcessorInput and Output
Hardwareカテゴリーのレベル一覧

Softwareカテゴリー

Softwareカテゴリー
No.グループレベル名
2.1.1Low levelMachine code
2.1.2Low levelAssembler Language
2.1.3Low levelAssembler program
2.1.4Low levelEscape Labyrinth
2.1.5Low levelDisplay
2.1.6Low levelNetwork
2.2.1Stack machineInit stack
2.2.2Stack machinePush D
2.2.3Stack machinePop D
2.2.4Stack machinePop A
2.2.5Stack machinePush Value
2.2.6Stack machineAdd
2.2.7Stack machineSub
2.2.8Stack machineNeg
2.2.9Stack machineAnd
2.2.10Stack machineOr
2.3.1High-level languageTokenize
2.3.2High-level languageGrammar
2.3.3High-level languageCode generation
2.4.1ConditionalsEq
2.4.2ConditionalsGt
2.4.3ConditionalsLt
2.4.4ConditionalsNot
2.4.5ConditionalsGoto
2.4.6ConditionalsIf-goto
2.5.1MemoryPush Memory
2.5.2MemoryPop Memory
2.5.3MemoryPush Static
2.5.4MemoryPop Static
2.6.1FunctionsCall
2.6.2FunctionsFunction
2.6.3FunctionsReturn
2.6.4FunctionsPush argument
2.6.5FunctionsPop argument
2.6.6FunctionsPush local
2.6.7FunctionsPop local
Softwareカテゴリーのレベル一覧

Optional Levelsカテゴリー

Optical Levelsカテゴリー
No.グループレベル名
3.1.1Transistor levelNand (CMOS)
3.1.2Transistor levelInvert (CMOS)
3.1.3Transistor levelNor (CMOS)
3.2.1LogicXnor
3.2.2LogicLeft Shift
3.2.3LogicLogical Right Shift
3.2.4LogicArtithmetic Right Shift
※"Arithmetic"のスペルミス?
LogicBarrel Shift Left
3.3.1ArithmeticsMax
3.3.2ArithmeticsMultiplication
3.4.1Floating pointUnpack floating-point value
3.4.2Floating pointFloating-point multiplication
※3.4.9と同一名なので注意。
3.4.3Floating pointNormalize overflow
3.4.4Floating pointVerity exponent
3.4.5Floating pointAlign significands
3.4.6Floating pointAdd signed magnitude
3.4.7Floating pointNormalize underflow
3.4.8Floating pointPack floating-point value
3.4.9Floating pointFloating-point multiplication
※なぜか3.4.2と同一レベル名。
3.4.10Floating pointFloating-point addition
3.5.1MultitaskingTimer Trigger
3.5.2MultitaskingMode controller
3.5.3MultitaskingRegister with backup
3.5.4MultitaskingProgram Counter
3.5.5MultitaskingRegister bank
3.5.6MultitaskingGeneral-purpose Memory
3.5.7MultitaskingVirtual Memory
3.5.8MultitaskingControl Unit
3.5.9MultitaskingProcessor
Optional Levelsカテゴリーのレベル一覧

その他の情報

異なるPC(あるいはブラウザー)間でセーブデータを共有する

知っている方がいればXのDMでお知らせください。

Posted by ipusiron