2013年07月01日の日記です


凝集度の高いプログラム  2013-07-01 14:24:23  コンピュータ

昨日書いたTX-0の紙テープの話。


えーと、まず前提として、TX-0 (だけじゃないけど)の資料やソフトを保存しているサイトがあって、そこで見つけた紙テープイメージをロードしようとしていた。


必ずではないが、ソースコードがある場合は一緒に置いてある。

さらに、これも必ずではないが、ソースコードは紙テープイメージと共に、テキスト化したものも置いてある。


で、ちゃんと読み込めているか試験するために、ソースコードがわかっている紙テープを読もうとしていた。

しかし、ソースとは全然違うデータが入っている。

さらにいえば、ソースイメージが非常に大きくても、ほんのちょっとしか読み込まない。


なんか読み込み方法が間違っているのかな、と思っていたのが昨日の段階。




TX-0 には、3つのモードがある。

プログラム実行モードと、テストモード(ステップ実行ができる)、そして紙テープ読み込みモードだ。


紙テープ読み込みモードで実行を開始すると、紙テープから 1word を読み込んで命令として解釈する。この際、sto (ストア:メモリ書き込み)命令だった場合は、紙テープからもう 1word 読んで AC とする。

つまり、sto とデータを並べれば、メモリ内をデータで埋めることが出来る。


紙テープから読み込むのは「命令」であることに注意。

最後に trn(transfer:分岐) 命令を読み込むと、そこで TX-0 は自動的にプログラム実行モードに切り替わり、指定されたアドレスから、メモリ内のプログラム実行を開始する。



当全、紙テープだからこの形式で書きこまれているのだろうと思っていた。

動作がおかしいので冒頭を解読したら、違っていた。


冒頭に、たった 18word の小さなプログラムが入っている。

おそらくは、紙テープを読み込むためのローダープログラム。まずはこれを解読しないといけない。




というわけで解読し、凝集度に驚いた。


たった 18word だけど、以下の機能を持つ。


・圧縮されたプログラムデータを展開しながら読み込む。

・データのチェックサムを用意し、最後に比較することで読み取りエラーの警告を出す。

・複数のプログラムの紙テープをつないでおくと、次々メモリに読み込む。(リンカに相当する機能)

・もちろん、最後に自動実行できる。この際、実行直前に一時停止し、ユーザーに準備を促すことも可能。


…まぁ、圧縮と言っても、元々のデータは必ず「メモリアドレスと、書き込みデータ」が必要だったので、メモリアドレスを省略しただけだけどね。

最初のアドレスと、最後のアドレスを最初に与えて、後はデータを並べればよいようになっている。これで、紙テープの長さはおよそ半分になる。


リンカ機能も、「紙テープをセロテープで貼ってつなげておく」という単純なものだけど、当時としては十分便利だったようだ。


#このプログラム、解読後に気づいたけど、ちゃんと説明あった

 でも、下に書くように、解読したことは無駄じゃなかった。




そして、このプログラムの解読中に、自分のページの記述間違いを発見したりもした (^^;

もうなおしてあるけど、改造後の TX-0 には、ループ命令とレジスタ内容の交換命令があった。


ループ命令(tix)は文書に書かれた説明がややこしくて理解できていなかっただけ。


レジスタ交換は、非常に特殊な組み合わせで命令を実行した時だけ「発動」する、隠しコマンド的機能だった。

(ちゃんと資料に書いてあったが、特殊条件なので気づいていなかった)


どちらも、自分でプログラムの流れを追わないと気づかなかった。

特に、レジスタ交換命令。一見すると全く無意味な処理をしているので「どういう意味だろう?」と資料を調べて、やっと特殊動作に気づいた。


書いた記事を修正するとともに、作成中エミュレータの該当機能も修正。



どうやら、ローダプログラムは正常に動くようになったようだ。

何やらデータをロードして、実行を開始しているのがわかる。



…でも、動作がおかしい。というか、暴走しているようにしか思えない。

少なくとも、ローダープログラムに使われる命令は正しく動いているが、他に動作のおかしな命令も多いのだろう。




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

コンピュータ

関連ページ

TX-0エミュレータ進捗【日記 13/07/03】

別年同日の日記

05年 再引越し

08年 溶連菌感染症

11年 節電

14年 「我々が考えるように」発表(1945)

14年 NOP 命令が作られた日(1960)

15年 A Dark Room , Candy box! , Cookie Clicker.

16年 PHSサービスが始まった日(1995)

18年 氷川丸


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


戻る
トップページへ

-- share --

0000

-- follow --




- Reverse Link -