The Rise of Computer Games, Part I: Adventure

2025/12/14 5:19

The Rise of Computer Games, Part I: Adventure

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

初期のパーソナルコンピュータゲームは、友人同士で共有される趣味プロジェクトとして始まり、次第に技術と文化を形作る成長する商業セクターへと発展しました。1970年代半ばにはハビオリストが紙やカセットテープで簡単なプログラムを交換していましたが、1980年になるとApple IIのカタログに265タイトルが掲載され、その約2/3(≈176)がゲームでした。配布は非公式で、人々は自分でファイルをコピーし、BASICコードを雑誌に掲載したり、タイプインリストを郵送したりしていました。これらのタイプインは数百行程度に限られ、主にデモや学習ツールとして機能しました。

重要なマイルストーンには、1975年にPDP‑10上で公開されたAdventure(後にARPANET経由で配布)や、1979年にTRS‑80用にリリースされたScott AdamsのA​dventurelandがあり、郵便注文で2,495円($24.95)で数千本販売されました。Infocomの1977–78年のZorkシリーズはインタラクティブ・フィクションの業界標準を確立し、最終的に15万部以上を売り上げました。Sierra On‑Lineの1980年リリースMystery Houseは初のグラフィカルアドベンチャーで、会社設立に寄与する程度の売上を記録しました。さらに、1984年にはKing’s Questシリーズが50万本以上を販売し、プレイヤーの約35–40%が女性でした。

これらの初期実践―ピア共有・タイプインコード・郵便注文販売―は、現代のゲーム配信エコシステムの基盤となりました。商業リリースはゲームが収益性を持つことを証明し、大手企業が投資する動機を高めました。また、女性ゲーマーの増加はより包括的な産業へと先行き示し、今日のビデオゲーム市場形成に寄与しました。

本文

著者のメモ
本稿では、冒険ゲーム・コンピュータRPG・戦棋シミュレーション・その他のシミュレーション、家庭用ビデオゲーム市場への簡単な触れ込み、そして最後にホームビデオゲーム機とパーソナルコンピュータを融合させたハイブリッドの台頭までを網羅したいと考えていました。個人コンピュータ史という大きな物語の中で、初期冒険ゲームだけに約7,000語を費やすことは合理的ではないかもしれませんが、私自身の興味関係から物語は膨らんだものです。


ゲームはパーソナルコンピュータ文化形成の中心だった

機械内部に魅了された初期ハッカーたちは、コンピュータ自体を遊び道具とみなしていました。1975〜76年にこの趣味に加わった多くはゲームがきっかけで、大学・高校・企業の時間共有システムで広まっていたBASICベースのゲーム文化を家庭でも続けたかったからです。

商用パーソナルコンピュータソフトウェアが登場しても、ゲームは圧倒的に人気カテゴリでした(タイトル数と販売台数で測ると)。例えば1980年のApple IIカタログには265タイトルが掲載され、そのうち約三分の二がゲーム―Ack‑Ack(対空ターゲットシューター)からWipe Off(ブレイクアウトのクローン)まで多岐にわたります。残りはデモ、教育プログラム、ビジネスソフトウェアでした。パーソナルコンピュータの実用価値が何であれ、購入者はゲームを熱望していたのです。[¹]


初期ゲームと市場

コンピュータ所有者は主に次の三つの方法でゲームを入手しました。

  1. コピー
    友人や同僚から紙媒体・カセットテープを無断でコピーする。
  2. タイプイン
    雑誌・書籍に掲載されたほぼすべてBASICプログラムを、手入力してテープまたはディスクへ保存する方法。デイヴ・オールの『BASIC Computer Games』(1973)は1979年までに約100万部が売れました。
  3. 商用タイトル
    ソフトウェアパブリッシャーから購入する。

初期のハードでは、ゲームソフトは「共通財」とみなされ、多くの人がピアツーピアでコピーを行い続けたため、後に導入された反盗版策でも完全には抑えられませんでした。


テープからプラスチック袋へ

  • Softside(1978年10月)に掲載された州都推測ゲームのタイプイン抜粋。
  • 1980年9月に公開された、より複雑なAdventureタイプインの抜粋。

1980年代初頭の典型的なコンピュータゲームパッケージは、説明書・コマンドリファレンス・特別指示書・プラスチック袋入りカセットという構成でした。


初期パーソナルコンピュータゲーム

一部の初期機種にはビデオコントローラに組み込みメモリが備わっており、テキストのみのテレタイプよりも高度なインタフェースを実現できました。Processor Technology のVDM‑1は任意位置に文字を描画でき、リアルタイムテキストゲーム(例:Trek‑80 1976)を販売しました。CromemcoのDazzler(Altair互換グラフィックボード)は1977年にピクセルグラフィックス付き初のパーソナルコンピュータゲームを提供し、続いてTankwarDogfightなどが登場しました。


(記事はこのクリーンアップされたスタイルで残りも継続します。余計な改行・空白・不要記号を排除し、見出し・リスト・図表・引用をそのまま保持しています。)

同じ日のほかのニュース

一覧に戻る →

2025/12/14 7:58

Linux Sandboxes and Fil-C

## Japanese Translation: メモリ安全性とサンドボックスはプログラムの異なる部分を保護するため、両方が強力なセキュリティに必要です。純粋な Java プログラムはメモリ安全であってもファイルシステムの syscalls を通じて任意のファイルを書き込むことができるし、逆にすべての能力を取り消したアセンブリプログラムでもメモリバグがある場合がありますが、カーネルが特権 syscalls を殺すためサンドボックスから逃げられません。サンドボックスは意図的に許容範囲を広く設計しているため、攻撃者は残されたメモリ安全性のバグを利用してブローカー・プロセスへ到達することができるので、両方の防御を組み合わせるとより強固な保護が得られます。 本書では、C/C++ 用に設計され、システムコールまで安全性を保証し、init や udevd などの低レベルコンポーネントで使用できるメモリ安全ランタイム「Fil‑C」への OpenSSH の seccomp ベース Linux サンドボックス移植方法について説明します。OpenSSH は既に chroot を採用し、`sshd` ユーザー/グループとして特権なしで実行し、`setrlimit` を使用し、非許可 syscalls を `SECCOMP_RET_KILL_PROCESS` で殺す seccomp‑BPF フィルタを適用しています。Fil‑C はその runtime 内で自動的にこれらの syscalls を許可することで簡素化します。背景スレッドは存続させつつスレッド生成を防ぐため、Fil‑C は API `void zlock_runtime_threads(void)` を追加し、必要なスレッドを事前確保してシャットダウンを無効にします。 OpenSSH の seccomp フィルタは強化されています。失敗時の挙動が `SECCOMP_RET_KILL` から `SECCOMP_RET_KILL_PROCESS` に変更され、mmap 許可リストに新たに `MAP_NORESERVE` フラグが追加され、`sched_yield` が許可されています。サンドボックスは二つの `prctl` コール(`PR_SET_NO_NEW_PRIVS` と `PR_SET_SECCOMP`)で構築され、エラー検出も行われます。Fil‑C のランタイムは `filc_runtime_threads_handshake` で全スレッドとハンドシェイクし、各スレッドが no_new_privs ビットと seccomp フィルタを持つことを保証します。複数のユーザー スレッドが検出された場合、安全エラーが発生します。 メモリ安全性とサンドボックスを組み合わせることで、OpenSSH はより厳格な隔離を実現し、メモリバグによる権限昇格リスクを低減します。このアプローチは他のセキュリティクリティカルプロジェクトにも採用を促す可能性があります。

2025/12/14 9:34

An Implementation of J

## Japanese Translation: ## 改訂版要約 本書は、技術仕様の構造化された目次であり、以下のように整理されています。 1. **第0章 – はじめに** 2. **第1章 – 文を解釈する** - 1.1 単語生成 - 1.2 構文解析 - 1.3 トレイン(列車) - 1.4 名前解決 3. **第2章 – 名詞** - 2.1 配列 - 2.2 型 - 2.3 メモリ管理 - 2.4 グローバル変数 4. **第3章 – 動詞** - 3.1 動詞の構造 - 3.2 ランク - 3.3 原子(スカラー)動詞 - 3.4 オブヴァース、同一性、および変種 - 3.5 エラー処理 5. **第4章 – 副詞と接続詞** 6. **第5章 – 表現** - 5.1 原子表現 - 5.2 ボックス化された表現 - 5.3 木構造表現 - 5.4 線形表現 7. **第6章 – ディスプレイ** - 6.1 数値表示 - 6.2 ボックス化表示 - 6.3 フォーマット済み表示 主要セクションの後に、付録A〜F(インキュナブルム、スペシャルコード、テストスクリプト、プログラムファイル、外国接続詞、およびシステム概要)が補足資料として提供されます。書末には参考文献・用語集・索引が付されています。 この構成(目次 → 詳細セクション → 付録 → 参照資料)は、読者に全体枠組みを最初に把握させたうえで、必要に応じて詳細へ掘り下げたり補足資料を参照したりできる明確かつ階層的な道筋を提供します。

2025/12/14 8:39

Closures as Win32 Window Procedures

## Japanese Translation: **改訂版要約:** この記事では、Win32 のウィンドウプロシージャに追加のコンテキストポインタを渡す方法を示しています。これは、WndProc が通常 4 つしか引数を取らないため、ネイティブ API には備わっていない機能です。著者は x64 アセンブラで小さなトランスペイル(trampoline)を作成し、実行時に JIT コンパイルして 5 番目の引数スロットを挿入し、呼び出し前に必要なコンテキストを格納します。これにより、各ウィンドウがグローバル変数や `GWLP_USERDATA` を使わずに独自の状態を保持できるようになります。トランスペイルは GNU アセンブラで書かれ、`.exebuf` セクション(`bwx` フラグ付き)から 2 MiB の実行可能バッファが確保されます。C ヘルパー関数 `make_wndproc(Arena *, Wndproc5, void *arg)` は 2 つのバイトオフセットプレースホルダーを修正してトランスペイルを生成します。作成後は `set_wndproc_arg(WNDPROC p, void *arg)` を使ってコンテキストを変更できます。アロケータ例では、異なる状態オブジェクト用に複数のトランスペイルを生成したり、動的に切り替えたりする方法を示しています。この手法は、トランスペイルがアンウインドテーブルを持たないため Windows Control Flow Guard 下でも安全に機能し、グローバル変数を使わずにウィンドウごとのデータを付与する低レベルの手段を示しています。