2013年07月03日の日記です


TX-0エミュレータ進捗  2013-07-03 17:15:18  コンピュータ
TX-0エミュレータ進捗

すっかりTX-0エミュレータを作るのが楽しくなっています。


紙テープ先頭に書かれたローダは完全動作するようになり、いくつか小さなプログラムが動き始めています。


ただ、その動作が「正しい」のかどうか判断するのが難しい。

なにせ、何をするプログラムかもわからない状態ですから。




tst 、と名称についているいくつかのプログラムがありました。

どうやら、TX-0 を改造したりしたときに、動作確認のために使ったプログラムっぽいです。


その中で一番小さな tstDisplay が動作した、と思ったのが昨日のこと。

画面に光の点が走る、と言うだけのプログラム。なるほど、ディスプレイテスト用だ。


…でも、しばらく走らせていると、光の点が出なくなる。

おかしいなぁ、と思ってプログラム解析すると、どうも動作が違う。


エミュレータ上で動くプログラムは、光の点は縦に動きつつ、少しづつ横にずれる。

でも、プログラム解析したら、横座標は変わらないらしい。


…と言うところまで理解できれば、どの命令がおかしいかはわかる。

その命令の実行プログラムにデバッグ用の「ログ表示」を仕込むと、動いていないとわかる。

なにかおかしいらしい。


呼び出し部分のバグを見つけ、修正したら正しい動作になった。




これでプログラムが正しく動作するようになったようなので、次へ。

いちいち解析しないといけないので、短いプログラムがいい。

lightGunTst というのが小さいから、それ行ってみよう。


ライトペン(ライトガン)のプログラムはまだできていないので、先に解析してみる。

どうやら、先のプログラムと同じように光が走り、ライトペンで触れると停止する、と言うプログラムのようだ。


ライトペンの動作を実装し、プログラムを動かす。

…触れると非常に遅くなるが、停止はしない。


ライトペンの実装方法がおかしいかな、とか散々調べてわかった。

元のプログラム、一見「停止する」ように見えるのだが、バグがあって停止はしない。遅くなるだけ。


えーと、半世紀前に作られたプログラムのバグを発見したんですけど、誰に連絡すれば?


まぁ、テスト用プログラムだから、当時も「なにか反応すればよし」だったのだろう。

動作したから次。




なんかわからんが、flexo という小さなプログラムがあった。

動作させると、flexowriter から アルファベットと数字が繰り返し出力される。

うん。一発で動いてた。


でも、動作が速すぎ。

flexowriter がそんなに早いわけないから、wait 入れよう。

当時の flexowriter ってどのくらいの速度だったんだろう。



…調べていて、重大な勘違いを発見する。

TX-0 、5MHz と書いてある文献があったのでその速度で作っていたのだけど、1cycle が 6μsec という資料があった。

5Mhz だと、1cycle は 0.2μだ。速度がかなり違う。


TX-0は16cycle で1命令をこなすので、1秒間に3万命令くらい動くつもりでいた。

同じ資料に「8千命令以上」と書いてあったが、これだと 6μsec と合致する。


というわけで速度調整。

flexowriter の動作速度や、テープリーダーの速度も調整する。

(テープリーダーは TX-0 は 250 line/min とわかったが、穿孔機と flexowriter の速度は不明。

 PDP-1 を参考に、穿孔機 60 line/sec、flexowriter 10文字/sec とする)


…うん。flexo のプログラム、それらしく動いたから終わり。

文字が延々出ていても面白くない。




tssDisplay 、と言うプログラムが2つある。

tss って、tst の間違いじゃないかな?


実は、初期のころに読み込んでみて、全然動かなかった。

というか、画面がガビガビしたので、エミュレータの動作が悪くて暴走しているらしい、と判断した。


ところが、これまで速度調整などして「遅く」なっているので、動作させると一瞬画面が出た。

…一瞬だけで、そのごはやはりガビガビ。


もう一個の tss プログラムを動かしてみると…なぜか、こちらは動いた。


そしてわかった。なるほど、tss、Toggle Switch Storage のテスト用か。

TSS 部分のハードウェアをエミュレートする部分を作ってみる。



そして、TSS のトグルスイッチをパチパチすると、それを8進表記で画面上に表示する。

なんか、はじめて「対話的な」プログラムが動作した。ちょっと感動。


ほぼ同じプログラムらしいが、片方動いて片方動かない。

逆アセンブルして(動作確認のために、簡単なものを作った)、命令を比べると、片方にしか使われていない命令がある。


じゃぁ、この命令の動作がおかしいのかな…と調べると、もともと動作がややこしくて、実装のために「なんとなく」動く部分しか作っていない命令だった。

厳密に動作を作りこむ。


で、動かしてみると、もう一つの tssDisplay も動作した。


画面のフリッカーは結構激しい。

この程度の画面表示でちらつくとなると、もっと残光時間伸ばしたほうがよいのか。


0.25 秒程度にしていたのを、0.5 秒まで伸ばしてみた。

それでキャプチャしたのがこの日記の冒頭の図。

下の方で、画面の「リフレッシュ」を行っているのがわかる。

(縮小されいるとよくわからないので、クリックして拡大してください)




なんか画面も表示されるし、調子に乗って大きなプログラムに手を出してみる。


当初目標の、TicTacToe を読み込むと…なんと動作した!


…けど、動作がへん。

まず、ライトペンの動作が変で、まともに操作できない。


で、無茶苦茶なりに操作してみると、すでに○×を書き込んであるマスに上書きしたりしてしまう。

内部動作もおかしいようだ。


しかし、画面が出たことがちょっと励みになった。ぜひ、こいつを完動させたい。


mouse 、と名付けられたプログラムも動かしてみる。

格子模様が画面に描かれる。…それ以上動作しない。


でも、これはおそらく Mouse in Maze 。


格子模様をライトペンでつついて迷路作るのかな?

ライトペンの動作がどうもおかしいので、まだよくわからない。


こちらもぜひ動作を見てみたいプログラム。

もう少し頑張ります。




同じテーマの日記(最近の一覧)

コンピュータ

別年同日の日記

02年 帰ってきました

17年 血液型別性格診断

17年 当たる占いの作り方


申し訳ありませんが、現在意見投稿をできない状態にしています


戻る
トップページへ

-- share --

0000

-- follow --




- Reverse Link -