import "exp/spacewar"

このパッケージとspacewar.goは、PDP-1オリジナルのビデオゲームSpacewar!を実行するに足る、簡単なPDP-1エミュレータを実装しています。実行するときの詳細は、exp/nacl/READMEを参照ください。

これは、Javaのエミュレータpdp1.javaの移植です。
http://spacewar.oversigma.com/sources/sources.zip

PDP-1 ハンドブックも参照ください。
http://www.dbit.com/~greeng3/pdp1/pdp1.html

http://spacewar.oversigma.com/readme.html には、こう書かれています。:

Spacewar!は、Martin Graetz、Stephen Russell、Wayne Wiitanenによって
1961年に考案されました。1962年に、Stephen Russell、Peter Samson、Dan
Edwards、Martin Graetらにより、Alan Kotok、Steve Piner、Robert A
Saundersと共に、PDP-1上に最初に登場しました。Spacewar!は、パブリック
ドメインですが、配布されるすべてのバージョンに、このクレジットを表記
する必要があります。

これは、オリジナルバージョンです!Martin Graetzは、我々に出力されたソース
を提供してくれました。我々はこれを再タイプしました - これは40ページにも及び
ます - そしてPERLで書かれたPDP-1アセンブラで再アセンブルしました。作成され
たバイナリはJavaアプレットとして作られたPDP-1エミュレータ上で動作します。
このコードは、オリジナルにとても忠実で、2箇所しか変更していません。1)宇宙船
はさらに大きくなった。2)タイミングは全般的に、様々なマシン速度に対応するため
に特別に見張っています。

「a」、「s」、「d」、「f」キーは、宇宙船をコントロールするときに使います。
「k」、「l」、「;」、「'」キーは、それ以外のコントロールに使います。
これらは、回転、反対方向への回転、突進、射撃です。

Barry Silverman
Brian Silverman
Vadim Gerasimov

パッケージファイル

pdp1.go

HaltError型

type HaltError Word

(HaltError) String関数

func (e HaltError) String() string

LoopError型

type LoopError Word

(LoopError) String関数

func (e LoopError) String() string

M型

Mは、PDP-1のマシン状態を表します。クライアントは、出力デバイスをインストールするためにDisplayをセットすることができます。

type M struct {
    AC, IO, PC, OV Word
    Mem            [010000]Word
    Flag           [7]bool
    Sense          [7]bool
    Halt           bool
}

(*M) Load関数

func (m *M) Load(r io.Reader) os.Error

Loadは、テキスト入力ファイルから、マシンのメモリにロードします。ファイルの内容は、8進数のアドレスと値のペアで、一行にひとつのペアを記述します。このフォーマットは次の正規表現とマッチします:^[ +]([0-7]+)\t([0-7]+)

(*M) Step関数

func (m *M) Step(t Trapper) os.Error

Stepは、マシンインストラクションをひとつ実行します。

Trapper型

Trapperは、Trapメソッドを持つオブジェクトです。マシンは、DP-1 IOTインストラクションをインプリメントするためTrapメソッドを呼び出します。

type Trapper interface {
    Trap(y Word)
}

UnknownInstrError型

type UnknownInstrError struct {
    Inst Word
    PC   Word
}

(UnknownInstrError) String関数

func (e UnknownInstrError) String() string

Word型

type Word uint32