関数が完成

パロアルト版TinyBASICの関数は乱数を返すRND、絶対値を返すABS、リストの空きを返すSIZEの3つ。このうちSIZEはプログラムをリストに保存する処理ですでに空きを計算する記述があったし、ABSも引数が負なら-1を掛けるというだけなので、すぐに完成した。

意外に苦労したのがRND。そもそも正確さを身上とするコンピュータにでたらめな値を返せという趣旨に無理があり、パロアルト版も東大版もかなり混乱している。パロアルト版は初期化していないRAMのでたらめな値をポインタとしてROMのBASICのコードのどこかからバイナリを拾ってくる。東大版は、この方法を踏襲し、ROMの先頭アドレスが0でない場合を考慮する。という話が「マイクロコンピュータのプログラミング」にのっているけれど、紙面のリストに存在しないラベル(IENT)を示して説明しており、本当かどうか定かでない(リストを見る限りそうなのだと思う)。

これをC言語で書き直す場合、たいていのコンパイラは変数をすべて初期化してしまい、この方法が使えない。現状、開発環境はWindowsのVisual C++だから、関数rndを使うというそのまんまの方法で何とか解決した。CPUがZ80ならリフレッシュ用レジスタの値を使う方法が古くからよく知られている。まあそんな具合に、乱数を作る方法はハードウェア依存ということでしかたがない。

広告
カテゴリー: TinyBASIC パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中