旧プチコンの不具合です。これらは基本的に mkII では修正されています。mkII 以降の不具合については、既知の不具合のページをごらんください。
プチコン V1.2 の不具合一覧です。これらはすべて mkII で修正されています。
プログラム内から EXEC で別プログラムを起動すると、以下の様な現象が発生することがある。
たとえば、以下のプログラムを「TEST」という名前で保存して実行しても、正常に動作せず、A が 10 以上になっても終了しない。
- A=A+1
- IF A==10 THEN END
- EXEC ”TEST”
また、プログラム内から LOAD で別プログラムを読み込むと、Out of DATA などのエラーが発生することがある。
他の効果音は、周波数を打ち込めばその周波数が反映されるが、35 番の BEEP のみ、「BEEP 35,8192」などと入力しても、音が高くならない。また、低くしても同じ。
以下のプログラムがなぜかエラーとなってしまう。
- IF SYSBEEP==0 THEN PRINT ”シス゛カニ シテマス”
このように書いた場合は大丈夫。
- A=SYSBEEP
- IF A==0 THEN PRINT ”シス゛カニ シテマス”
- IF 0==SYSBEEP THEN PRINT ”シス゛カニ シテマス”
その他、TABSTEP, ICONPUSE, ICONPAGE, ICONPMAX, MEM$ でも同様にエラーとなる。とりあえず左辺と右辺を入れ替えれば大丈夫です。
プチコン V1.1 の不具合一覧です。2011 年 11 月 11 日に、修正版である、プチコン V1.2 がリリースされました。以下に書かれたバグのほとんどは修正されています。DSi ウェアは、セーブデータを残したままのバージョンアップが可能です。
プチコンのバージョンは V1.1 になったが、システム変数の「VERSION」はいかにも V1.0 な &H1000 が入ったままになっている。
以下は、V1.00 から修正されていないままでした。
開始が終了より大きい場合、対応した NEXT が行頭にないとうまく動かない。 ここまでは1.0と同じだが、1.1の場合、NEXTの前にスペースも含まない形で行頭に無いとエラーになる。
下記のプログラムを実行すると、 FOR without NEXT エラーとなってしまう。おそらく、高速化のために、行頭に NEXT がある場合しか対応していないものと思われる。これは1.0と1.1で共通のバグ。ちなみに、スペースをコロン (:)で代用してもダメである。
- FOR I=1 TO 0
- PRINT ”TEST”:NEXT I
下記の場合は、1.0ではエラーにならないが、1.1ではFOR without NEXT エラーとなってしまう。 NEXTの前のスペースが原因。
- FOR I=1 TO 0
- PRINT ”TEST”
- NEXT I
プログラム内から EXEC で別プログラムを起動すると、行番号のない Syntax error が発生し、起動に失敗することがある。
また、プログラム内から LOAD で別プログラムを読み込むと、行番号付きの Syntax error が発生することがある。
EXP() に小数点以下を含む数値を渡しても、小数点以下が無視され整数部のみで計算される。そのため、EXP(2) と EXP(2.5) がともに 7.389 となる。
この問題があるため、累乗 X^Y を計算したい時に、EXP(Y*LOG(X)) で代用することができない。
公式サイトのバグ情報より。DATA文の行の終わりにスペース文字が入っているとエラーが出ることがある。
公式サイトのバグ情報より。サイズの大きいプログラム(64KB 以上)の編集中に、こんな感じでリストの表示が異常になり、またその状態でプログラムを保存すると正常に保存されない。
STOPした後にCONTした場合、STOPの次の行から実行が再開される。そのため、STOPと同じ行に命令が書かれていたとしても再開時には実行されない。
通常、配列変数の添字が範囲外だと Subscript out of range エラーになるが、値を読み込む命令(READ,INPUT,TMREADなど)で添字が範囲外だと、なぜか Syntax error になる。
起動直後もしくは実行モードで NEW したあと、一度も編集モードに切り替えずにプログラムを SAVE する。適当なプログラムを LOAD したあと、先程保存したプログラムを LOAD しても、プログラムが読み込まれない。(最初に LOAD したプログラムがそのまま残る)
2011 年 6 月に、修正版であるプチコン V1.1 がリリースされ、以下に書かれたバグはほぼ修正されています。
公式サイトのバグ情報を参照。プログラムを一行修正すると回避できる。
- FOR I=1 TO 0:NEXT
ダイレクトモード (RUN とか LOAD とかを入力する場所) に、上記のように開始値よりも終了値のほうが小さい FOR ループを書くと、ブレークできなくなり、操作不能になる。こうなるともう DSi をリセットするしかない。
累乗の演算子 (^) は設計時に存在したが実装されず削除された仕様で、発売の前後にウェブサイトのコマンド一覧に間違って載ってしまったものである。つまり、バグではなくコマンド一覧の間違い。ウェブサイトからはすでに削除されており、ソフト内の説明書にも最初から載っていない。したがって、プチコンではこの演算子は使用できない。
- VISIBLE 1,0,1,1,1,1
上記のように、VISIBLE の 2 番目の引数が 0 でパネルを非表示にしている状態で、以下の操作を行うと表示がおかしくなる。
上画面が真っ暗、下画面が緑一色になってしまう。フリーズしたように見えるが、確認画面が見えないだけなので、右下の本来ボタンがある場所あたりをタッチすると復帰する。
下の画面が真っ暗になってしまう。これも本来「いいえ」あたり (右下の「はい」に触らないこと。右下に「はい」、その左に「いいえ」がある) をタッチすると復帰するが、その後キーボードが見えなくなるため、セーブすら困難になってしまう。この場合、スタートボタンを押して何でも (からっぽでも) 良いので何かプログラムを実行すれば復帰する。
DTREAD、TMREAD 命令で、時刻をあらわす文字列が間違っていると、文法が合っていても文法エラー (Syntax error) を示す。どのみちエラーになるのは間違いないが、エラーの意味合い的には Illigal function call を返すのが正しい。
- FOR I=0 TO 23
- FOR J=0 TO 31
- BGPUT 0,I,J,0,0,0,0
- NEXT
- NEXT
上記のようなネストされたループの処理はもちろん正常に動作する。
- FOR I=0 TO 23:FOR J=0 TO 31
- BGPUT 0,I,J,0,0,0,0
- NEXT:NEXT
しかし、上記のようにマルチステーメントを使用して FOR ループを 1 行にまとめると、1 行目で何かを使い切って謎の Out of memory エラーが発生。以降、スタートボタンによる実行では FOR 文があるたびに同種のエラーが発生し一切使えなくなってしまう。ダイレクトモードから RUN 命令による実行だと回復する。ちなみに、I と J は 0 のまま、処理が 256 回ほど回っている模様。
- FOR I=0 TO 23
- FOR J=0 TO 31
- BGPUT 0,I,J,0,0,0,0
- NEXT:NEXT
そこでこうすると、4 行目でなぜか謎の NEXT withour FOR エラーが発生。やはり正常に動かない。
- FOR I=0 TO 24*32−1:BGPUT 0,I%32,I/32,0,0,0,0:NEXT
どうしても 1 行にまとめたいなら、こうすればどうにかなる。
開始が終了より大きい場合、対応した NEXT が行頭にないとうまく動かない。下記のプログラムを実行すると、 FOR without NEXT エラーとなってしまう。おそらく、高速化のために、行頭に NEXT がある場合しか対応していないものと思われる。
- FOR I=1 TO 0
- PRINT ”TEST”:NEXT I
下記のようなサブルーチンの呼び出しは当然問題なく動作する。
- GOSUB @SUB1
- GOSUB @SUB2
- END
- @SUB1
- PRINT ”SUB1”:RETURN
- @SUB2
- PRINT ”SUB2”:RETURN
しかし、下記のようにマルチステーメントを使用して複数の GOSUB 文を 1 行にまとめると、なぜか @SUB2 が無限に呼び出され続けてしまい、ブレークをかけて止めるしかなくなってしまう。3 つ以上の GOSUB を並べても、無限に呼び出されるのは 2 つ目。厳密に言うと、同じ行の 2 つ目の GOSUB から飛んで戻ってくると、1 つ目の GOSUB の直後に戻ってしまうためのようである。
- GOSUB @SUB1:GOSUB @SUB2
- END
- @SUB1
- PRINT ”SUB1”:RETURN
- @SUB2
- PRINT ”SUB2”:RETURN
KEY 命令で設定したファンクションキーの設定内容が、ソフト内説明書に入り戻ってくると、起動時のデフォルトに戻ってしまう。
※ 元ネタはこちらのブログです。管理人が最小限のプログラムでも再現することを確認できたので、内容をアレンジして書きます。
下記のプログラムを実行中に適当にキーボードを押すと、フリーズしてしまうことがある。ただし、SYSBEEP=FALSE でキー入力確認音 (ブチッ という音) をオフにしている場合は発生しない。
- @A
- BEEP 0:GOTO @A
おそらく、プチコンの限界を遙かに超えてサウンドを鳴らしまくっているときにキー入力確認音が鳴ってしまうことでフリーズする。以下のプログラムリストのように VSYNC 命令で 1/60 秒中に鳴らす回数を制限してみると、ループ回数 85 回あたりがフリーズする・しないの境目であることがなんとなくわかる。
- @A
- FOR I=0 TO 85
- BEEP 0
- NEXT
- VSYNC 1
- GOTO @A
公式サイトのバグ情報より。GFILL 命令の描画が仕様よりも極端に遅い。確かに、8 ビット時代のマイコンのように、上から四角を描いていってるのが余裕で見えます。
保存した MEM ファイルを読み込む際、文字コード 0 (CHR$(0)) が含まれていると、それ以降が切り捨てられてしまう。
キャラクター番号 400 番のスプライトを画面に表示させると、誤った位置に表示される。
残り保存容量よりも大きなプログラムを上書きで保存すると、動作が停止する。上書きでない場合は停止しない。
一画面分を超える数のファイルを保存した状態で FILES 命令を実行し、エンターキーの入力待ちになったところで「停止」を押して中断すると、次に FILES 命令を実行したとき、いきなり続きから表示されてしまう。
さらに、GRP などのリソースファイルも保存されている場合は、GRP などのリソースファイルがプログラムの PRG と誤認識された状態で表示され、なおかつ、GRP のリソースファイルがもう一度表示されるという現象も発生する。
”1”>”2” が真に、”1”<”2” が偽になる。
ファイルを保存する際、ファイル名が CON, AUX, PRN, NUL のいずれかだった場合、一見ファイルの保存に成功したように見えるが実際には保存されていない。
表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.176 秒 | このページの最終更新 : 2022/09/20 (火) 12:44:03 (565d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30