プチコンまとめWiki (初代/mkII)

旧プチコンの既知の不具合

パンくずリスト

旧プチコンの不具合です。これらは基本的に mkII では修正されています。mkII 以降の不具合については、既知の不具合のページをごらんください。

プチコン V1.2 不具合一覧

プチコン V1.2 の不具合一覧です。これらはすべて mkII で修正されています。

プログラム内から EXEC で別プログラムを起動したり、LOAD でプログラムを読み込むとエラーになる

プログラム内から EXEC で別プログラムを起動すると、以下の様な現象が発生することがある。

  • FOR文で初期値<=終了値の場合、NEXT without FOR のエラーが発生する。
  • 一行に複数の命令を書いても、最初の命令しか実行されない。
  • IF のTHEN以降に命令を書いても実行されない。(ラベルは問題なし)

たとえば、以下のプログラムを「TEST」という名前で保存して実行しても、正常に動作せず、A が 10 以上になっても終了しない。

  1. A=A+1
  2. IF A==10 THEN END
  3. EXEC ”TEST”

また、プログラム内から LOAD で別プログラムを読み込むと、Out of DATA などのエラーが発生することがある。

BEEP 35 の周波数を設定しても反映されない

他の効果音は、周波数を打ち込めばその周波数が反映されるが、35 番の BEEP のみ、「BEEP 35,8192」などと入力しても、音が高くならない。また、低くしても同じ。

IF SYSBEEP==0 THEN 〜 がエラーとなる

以下のプログラムがなぜかエラーとなってしまう。

  1. IF SYSBEEP==0 THEN PRINT ”シス゛カニ シテマス”

このように書いた場合は大丈夫。

  1. A=SYSBEEP
  2. IF A==0 THEN PRINT ”シス゛カニ シテマス”
  1. IF 0==SYSBEEP THEN PRINT ”シス゛カニ シテマス”

その他、TABSTEP, ICONPUSE, ICONPAGE, ICONPMAX, MEM$ でも同様にエラーとなる。とりあえず左辺と右辺を入れ替えれば大丈夫です。

プチコン V1.1 不具合一覧

プチコン V1.1 の不具合一覧です。2011 年 11 月 11 日に、修正版である、プチコン V1.2 がリリースされました。以下に書かれたバグのほとんどは修正されています。DSi ウェアは、セーブデータを残したままのバージョンアップが可能です。

システム変数「VERSION」が変わっていない

プチコンのバージョンは V1.1 になったが、システム変数の「VERSION」はいかにも V1.0 な &H1000 が入ったままになっている。

ソフト内説明書の誤植

以下は、V1.00 から修正されていないままでした。

  • プチコン基本仕様 → サウンド機能 の、BGM リストの 13 番「激しいロック超」→「激しいロック調」
  • 分岐系命令の ON〜GOTO と ON〜GOSUB の書式に、「行番号 (または@ラベル)」と書いてあるが、実際には行番号は指定できない
  • SPCLR と PNLSTR の最後の引数は省略可能なのに、書式の引数が[]で囲まれていない
  • SPRITE 制御命令のトップページ(赤文字で命令一覧が載っているところ)に SPCHR が含まれていない

FOR 〜 NEXT の開始値が終了値よりも大きい場合、対応した NEXT が行頭にないと誤動作する

開始が終了より大きい場合、対応した NEXT が行頭にないとうまく動かない。 ここまでは1.0と同じだが、1.1の場合、NEXTの前にスペースも含まない形で行頭に無いとエラーになる。

下記のプログラムを実行すると、 FOR without NEXT エラーとなってしまう。おそらく、高速化のために、行頭に NEXT がある場合しか対応していないものと思われる。これは1.0と1.1で共通のバグ。ちなみに、スペースをコロン ()で代用してもダメである。

  1. FOR I=1 TO 0
  2. PRINT ”TEST”:NEXT I

下記の場合は、1.0ではエラーにならないが、1.1ではFOR without NEXT エラーとなってしまう。 NEXTの前のスペースが原因。

  1. FOR I=1 TO 0
  2. PRINT ”TEST”
  3.         NEXT I

プログラム内から EXEC で別プログラムを起動したり、LOAD でプログラムを読み込むと Syntax error になる

プログラム内から EXEC で別プログラムを起動すると、行番号のない Syntax error が発生し、起動に失敗することがある。

また、プログラム内から LOAD で別プログラムを読み込むと、行番号付きの Syntax error が発生することがある。

EXP() で小数点以下が無視される

EXP() に小数点以下を含む数値を渡しても、小数点以下が無視され整数部のみで計算される。そのため、EXP(2) と EXP(2.5) がともに 7.389 となる。

この問題があるため、累乗 X^Y を計算したい時に、EXP(Y*LOG(X)) で代用することができない。

DATA文の末尾にスペース文字があるとエラー

公式サイトのバグ情報より。DATA文の行の終わりにスペース文字が入っているとエラーが出ることがある。

長いプログラムを編集すると表示がおかしくなる

公式サイトのバグ情報より。サイズの大きいプログラム(64KB 以上)の編集中に、こんな感じでリストの表示が異常になり、またその状態でプログラムを保存すると正常に保存されない。

STOPした後にCONTしても、STOPの後ろの命令が実行されない

STOPした後にCONTした場合、STOPの次の行から実行が再開される。そのため、STOPと同じ行に命令が書かれていたとしても再開時には実行されない。

値を読み込む命令で配列変数の添字が範囲外だと Syntax error になる

通常、配列変数の添字が範囲外だと Subscript out of range エラーになるが、値を読み込む命令(READ,INPUT,TMREADなど)で添字が範囲外だと、なぜか Syntax error になる。

NEW 直後に SAVE したプログラムを LOAD しても、プログラムが読み込まれない

起動直後もしくは実行モードで NEW したあと、一度も編集モードに切り替えずにプログラムを SAVE する。適当なプログラムを LOAD したあと、先程保存したプログラムを LOAD しても、プログラムが読み込まれない。(最初に LOAD したプログラムがそのまま残る)

プチコン V1.00 不具合一覧

2011 年 6 月に、修正版であるプチコン V1.1 がリリースされ、以下に書かれたバグはほぼ修正されています。

サンプルプログラム「CHRED」でリソースを保存できない。

公式サイトのバグ情報を参照。プログラムを一行修正すると回避できる。

ダイレクトモードで操作不能になる。

  1. FOR I=1 TO 0:NEXT

ダイレクトモード (RUN とか LOAD とかを入力する場所) に、上記のように開始値よりも終了値のほうが小さい FOR ループを書くと、ブレークできなくなり、操作不能になる。こうなるともう DSi をリセットするしかない。

累乗の演算子 (^) を使うと文法エラーになる。

累乗の演算子 (^) は設計時に存在したが実装されず削除された仕様で、発売の前後にウェブサイトのコマンド一覧に間違って載ってしまったものである。つまり、バグではなくコマンド一覧の間違い。ウェブサイトからはすでに削除されており、ソフト内の説明書にも最初から載っていない。したがって、プチコンではこの演算子は使用できない。

VISIBLE 命令でパネルを非表示にしたまま、特定の操作で表示がおかしくなる

  1. VISIBLE 1,0,1,1,1,1

上記のように、VISIBLE の 2 番目の引数が 0 でパネルを非表示にしている状態で、以下の操作を行うと表示がおかしくなる。

RUN 命令、SAVE 命令のように、下画面に確認画面が出る命令

上画面が真っ暗、下画面が緑一色になってしまう。フリーズしたように見えるが、確認画面が見えないだけなので、右下の本来ボタンがある場所あたりをタッチすると復帰する。

下画面右上の×ボタン (DSi メニューに戻る) を押す

下の画面が真っ暗になってしまう。これも本来「いいえ」あたり (右下の「はい」に触らないこと。右下に「はい」、その左に「いいえ」がある) をタッチすると復帰するが、その後キーボードが見えなくなるため、セーブすら困難になってしまう。この場合、スタートボタンを押して何でも (からっぽでも) 良いので何かプログラムを実行すれば復帰する。

DTREAD、TMREAD 命令で、文法が合っても文法エラーとなる

DTREAD、TMREAD 命令で、時刻をあらわす文字列が間違っていると、文法が合っていても文法エラー (Syntax error) を示す。どのみちエラーになるのは間違いないが、エラーの意味合い的には Illigal function call を返すのが正しい。

複数の FOR 文または NEXT 文を一行に詰めるとループが正しく機能しない

  1. FOR I=0 TO 23
  2.  FOR J=0 TO 31
  3.   BGPUT 0,I,J,0,0,0,0
  4.  NEXT
  5. NEXT

上記のようなネストされたループの処理はもちろん正常に動作する。

  1. FOR I=0 TO 23:FOR J=0 TO 31
  2.  BGPUT 0,I,J,0,0,0,0
  3. NEXT:NEXT

しかし、上記のようにマルチステーメントを使用して FOR ループを 1 行にまとめると、1 行目で何かを使い切って謎の Out of memory エラーが発生。以降、スタートボタンによる実行では FOR 文があるたびに同種のエラーが発生し一切使えなくなってしまう。ダイレクトモードから RUN 命令による実行だと回復する。ちなみに、I と J は 0 のまま、処理が 256 回ほど回っている模様。

  1. FOR I=0 TO 23
  2.  FOR J=0 TO 31
  3.   BGPUT 0,I,J,0,0,0,0
  4. NEXT:NEXT

そこでこうすると、4 行目でなぜか謎の NEXT withour FOR エラーが発生。やはり正常に動かない。

  1. FOR I=0 TO 24*32−1:BGPUT 0,I%32,I/32,0,0,0,0:NEXT

どうしても 1 行にまとめたいなら、こうすればどうにかなる。

FOR 〜 NEXT の開始値が終了値よりも大きい場合、対応した NEXT が行頭にないと誤動作する

開始が終了より大きい場合、対応した NEXT が行頭にないとうまく動かない。下記のプログラムを実行すると、 FOR without NEXT エラーとなってしまう。おそらく、高速化のために、行頭に NEXT がある場合しか対応していないものと思われる。

  1. FOR I=1 TO 0
  2. PRINT ”TEST”:NEXT I

複数の GOSUB 文を一行に詰めるとサブルーチン呼び出しが正しく機能しない

下記のようなサブルーチンの呼び出しは当然問題なく動作する。

  1. GOSUB @SUB1
  2. GOSUB @SUB2
  3. END
  4. @SUB1
  5. PRINT ”SUB1”:RETURN
  6. @SUB2
  7. PRINT ”SUB2”:RETURN

しかし、下記のようにマルチステーメントを使用して複数の GOSUB 文を 1 行にまとめると、なぜか @SUB2 が無限に呼び出され続けてしまい、ブレークをかけて止めるしかなくなってしまう。3 つ以上の GOSUB を並べても、無限に呼び出されるのは 2 つ目。厳密に言うと、同じ行の 2 つ目の GOSUB から飛んで戻ってくると、1 つ目の GOSUB の直後に戻ってしまうためのようである。

  1. GOSUB @SUB1:GOSUB @SUB2
  2. END
  3. @SUB1
  4. PRINT ”SUB1”:RETURN
  5. @SUB2
  6. PRINT ”SUB2”:RETURN

ファンクションキーの設定内容が、説明書の出入りでリセットされる

KEY 命令で設定したファンクションキーの設定内容が、ソフト内説明書に入り戻ってくると、起動時のデフォルトに戻ってしまう。

BEEP 命令で音をたくさん鳴らしながらキーボードの入力音を鳴らすとフリーズ

元ネタはこちらのブログです。管理人が最小限のプログラムでも再現することを確認できたので、内容をアレンジして書きます。

下記のプログラムを実行中に適当にキーボードを押すと、フリーズしてしまうことがある。ただし、SYSBEEP=FALSE でキー入力確認音 (ブチッ という音) をオフにしている場合は発生しない。

  1. @A
  2. BEEP 0:GOTO @A

おそらく、プチコンの限界を遙かに超えてサウンドを鳴らしまくっているときにキー入力確認音が鳴ってしまうことでフリーズする。以下のプログラムリストのように VSYNC 命令で 1/60 秒中に鳴らす回数を制限してみると、ループ回数 85 回あたりがフリーズする・しないの境目であることがなんとなくわかる。

  1. @A
  2. FOR I=0 TO 85
  3. BEEP 0
  4. NEXT
  5. VSYNC 1
  6. GOTO @A

GFILL 命令の描画が極端に遅い

公式サイトのバグ情報より。GFILL 命令の描画が仕様よりも極端に遅い。確かに、8 ビット時代のマイコンのように、上から四角を描いていってるのが余裕で見えます。

MEM ファイルの読み込み時、文字コード 0 以降の文字列が切り捨てられる

保存した MEM ファイルを読み込む際、文字コード 0 (CHR$(0)) が含まれていると、それ以降が切り捨てられてしまう。

スプライトのキャラクター番号 400 番のみ、表示がずれる

キャラクター番号 400 番のスプライトを画面に表示させると、誤った位置に表示される。

容量超過したプログラムの上書き保存でハングアップする

残り保存容量よりも大きなプログラムを上書きで保存すると、動作が停止する。上書きでない場合は停止しない。

FILES 命令でページ送りを中断すると、次の FILES の表示内容が変になる

一画面分を超える数のファイルを保存した状態で FILES 命令を実行し、エンターキーの入力待ちになったところで「停止」を押して中断すると、次に FILES 命令を実行したとき、いきなり続きから表示されてしまう。

さらに、GRP などのリソースファイルも保存されている場合は、GRP などのリソースファイルがプログラムの PRG と誤認識された状態で表示され、なおかつ、GRP のリソースファイルがもう一度表示されるという現象も発生する。

文字列の大小比較の結果が逆になる

”1”>”2” が真に、”1”<”2” が偽になる。

特定のファイル名でファイルを保存できない

ファイルを保存する際、ファイル名が CON, AUX, PRN, NUL のいずれかだった場合、一見ファイルの保存に成功したように見えるが実際には保存されていない。

ソフト内説明書の誤植

  • 公式サイトのバグ情報にいくつか訂正が載っています。
  • プチコン基本仕様 → サウンド機能 の、BGM リストの 13 番「激しいロック超」→「激しいロック調」
  • 分岐系命令の ON〜GOTO と ON〜GOSUB の書式に、「行番号 (または@ラベル)」と書いてあるが、実際には行番号は指定できない

表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.080 秒 | このページの最終更新 : 2012/03/17 (土) 20:30:51 (2677d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30