ウトロのおみやげ屋さんでペナントは何枚まで購入出来るか? - オホーツクに消ゆ

※このページは作成中です。※
※このページに記載されている情報は、私(Taicho)が独自に調査した結果を記載しているものです。※
※内容の保証は出来ませんので、ご了承ください。※


■はじめに

2022年2月に決行された「ファンミーティングツアー」の2日目夜に、ホテル「KIKI知床ナチュラルリゾート」の宴会場「すずらん」で開催された「ファンミーティング2022」にて、参加者から以下の質問がありました。
参加者「ファミコン版のおみやげ屋では、ペナントを購入すると10枚で上限になりますが、PC版ではカンストするのでしょうか?」
この方は、MSX版で1111枚までは実際に購入してみたそうですが、上限は分からずじまいとのことでした。

この質問に対して、ツアーにスペシャルゲストとして参加された「ゲヱセン上野」さんから、以下の回答がありました。
上野さん「PC版は基本、BASICで書いているので、BASICの仕様の上限までは買えるはず。
ただ、エラーで止まりそうなので、上限まで買うのはやらない方がいい。」

本件について、私の方で後日調査を行い、Twitterに投稿しました。このページは、その内容に少し補足したものです。
ちなみに、以下の写真は内容と直接関係ありませんが、2022年のファンミーティングツアーで撮影したものです。


■MSX版

MSX用の「オホーツクに消ゆ」のプログラムを解析して確認したところ、購入枚数のチェックは無いため、ファミコン版のような売り切れはありません。
しかし、枚数を格納している変数が整数型で定義されているため、最大32767となり、それ以上買おうとすると「Overflow」エラーで止まってしまいました。
さすがゲヱセン上野さん、MSX版のプログラムを開発したご本人のおっしゃる通りでしたね。

以下は実際のBASICプログラムの抜粋です。
先頭で「DEFINT A-Z」としています。(符号ありなので、-32768~32767)
ペナントの枚数は「PB」という変数に格納されています。
1540行で、最初に購入した時と2枚目以降でセリフを変えています。
しかし、1550行では購入枚数のチェックはせず、単純に1枚プラスしているだけです。
そのため、PBに32768を代入しようとした時点でオーバーフローになってしまいます。


■PC-6001版

PC-6001用の「オホーツクに消ゆ」のプログラムを解析して確認したところ、MSX版と同様に、購入枚数のチェックはありません。
(最初に開発されたのがPC-6001版で、MSX版はPC-6001版の移植なので、当然かもしれませんが)
しかし、PC-6001には「DEFINT」命令は無く、変数が単精度実数型になるため、32768枚以上買うことが可能です。
私の検証では、8589934590枚まではカウントされますが、精度の関係で、それ以上買っても枚数が増えないと思います。
なお、BASICでは大きな数字や小さな小数は「浮動小数点表示」という形式で表示されます。「8.5899346E+08」は「8.5899346×10+08」を意味します。

以下は実際のBASICプログラムの抜粋です。
MSX版同様、ペナントの枚数は「PB」という変数に格納されています。
PC-6001版では1855行と1856行となっていますが、セリフをU$ではなくPRINT文で表示している以外は、MSX版と全く同じ処理ですね。

PC-6001のBASIC(N60-BASIC)では、数値は5バイトの単精度実数で実現されています。
0から8589934589 (FF FF FF 7F A1) までは1ずつ表現可能なようですが、8589934590から8589934593までは同じ内部表現(00 00 00 00 A2)になるため、1ずつ足しても8589934590から増えないことになります。

「オホーツクに消ゆ」に戻る


<taicho@taicho.jp> / @taicho_jp