プチコンまとめArchive

既知の不具合

パンくずリスト

このページの最終更新 : 2016/08/31 (水) 23:05:04
公式アーカイブのリンク: http://wiki.hosiken.jp/petc/html/Bug.html

プチコンmkII で見つかった、既知の不具合の一覧です。おもに Twitter や 2 ちゃんねるの報告から情報を集めてます。ここは見つかって間もない第一報的な情報も扱っているので、公式サイトで公開されている公式バグ情報も参照してください。

mkII では修正済みの旧プチコンのバグについては「旧プチコンの既知の不具合」をごらんください。

V2.3 のバグ

ファンクションキーで改行を含む文字列や100文字より長い文字列を編集モードに流し込むと挙動がおかしくなる

ファンクションキーで改行を含む文字列を編集モードに流し込むと改行されないことがある。また、100文字より長い文字列を編集モードに流し込むと101文字目以降がはき出されないことがある。

具体的には以下の様になる。

改行文字数入力モード結果
あり100文字越え上書き改行されず、100文字までしかはき出されない。BEEP 2が鳴る。
あり100文字越え挿入改行されるが、100文字までしかはき出されない。
あり100文字未満上書き改行されるが、はき出されない。
あり100文字未満挿入正常
なし100文字越え上書き100文字までしかはき出されない。
なし100文字越え挿入100文字までしかはき出されない。
なし100文字未満上書き正常
なし100文字未満挿入正常

INPUTでオーバーフロー

INPUT A に対し と入力すると Overflow エラーで止まってしまう。

SORT系命令で動作が一定でない

SORT,RSORTを使用したとき、並び替えの範囲が21以上で数値が同じ項目があり、その結果で別の配列を並び替える場合、同じ項目のある部分に対応する部分の並ぶ順番がころころ変わる。

  1. CLS
  2. CLEAR:DIM A(21),B(21)
  3. FOR I=0 TO 20
  4. A(I)=I
  5. B(I)=I%4
  6. NEXT
  7. SORT 0,21,A,B
  8. FOR I=0 TO 20
  9. PRINT A(I),B(I)
  10. NEXT

CHKCHR()の引数に文字列が渡せる

下のプログラムがエラーにならない。

  1. ?CHKCHR(””,0)
  2. ?CHKCHR(0,””)

ただし、両方の引数を文字列にするとエラーが出る。

  1. ?CHKCHR(””,””)

電子説明書の誤植

  • 「10 サウンド関係の表 → MML コマンド」の ) コマンドの説明で、「ベロシティ減算 ( (0~(127 )」と書かれているが、「ベロシティ減算 ( )0~)127 )」が正しい。
  • 「11 BASIC基本仕様 → エラー番号表」の説明に、エラー21 (FOR without NEXT), 22 (Illegal MML) が載っていない。

CONTの動作が不安定

CONTでプログラムを再開しようとするとき、一部のプログラムでCONTした瞬間に行番号つきのSyntax errorになる。

そこの行番号でおかしな文法があれば話は別だが、特におかしな文法がない場合がある。

エラーになったらプチコンの仕様で再開できなくなるため、RUNでやり直すしかない。

V2.1 のバグ

BGMPLAY の MML で、チャンネル指定を省略したときの挙動が V2.0 と異なる

BGMPLAY の MML で、チャンネル指定を省略したとき、V2.0 ではチャンネル 0 が使われていましたが、V2.1 では、和音を鳴らす際に異常な挙動となります。

以下のプログラムを実行すると、V2.1 では和音にならず「ドレミファソミファソラシ」とつながって鳴ってしまいます。

  1. BGMPLAY ”CDEFG:1EFGAB”

チャンネル指定を行うことで問題なくなります。

  1. BGMPLAY ”:0CDEFG:1EFGAB”

また、トラック内で単音の場合も問題ありません。

  1. BGMPLAY ”CDEFGFEDC”

説明書の一部が途切れている

取扱説明書の、10 サウンド関係の表 TALKコマンド(こちらについてはv2.3で修正)

  • 11 BASIC基本仕様 エラー番号表

の2つのページの終わりがなくなっている

V2.0 からあるバグ

BGMSTOP でエンベロープの音のリリースタイムの余韻を止められない

BGMSTOP では、演奏が終わったあとの音の余韻を止めることができない。もし BGMPLAY でエンベロープのリリースタイムの設定を誤り余韻が長い音を鳴らしてしまうと、それをプログラムから簡単に止める手段がないので、自然に鳴り終わるまでしばらくうるさい状態が続いてしまう。

緊急で音を止めたい場合は、電子説明書を開閉するとなんとかなるようです。

  1. ’ リリースタイム カ゛ セ゛ロ (キケン)
  2. BGMPLAY”@147@E127,0,0,0CDEFG”

拡大したスプライトが一定枚数以上重なると、グラフィック画面の一部が欠けて見える

SPOFS で拡大したスプライトが一定枚数 (15~20枚 ぐらい以上) 重なると、重なった部分のグラフィック画面が、横ライン上に一時的に (大量に重なっている間のみ) 欠けて見える。バグというか、ハードウェアの限界?

拡大したスプライトが重なると.jpg
  1. ACLS
  2. FOR I=0 TO 99
  3.   GLINE RND(256),RND(192),RND(256),RND(192),RND(256)
  4. NEXT
  5. FOR I=0 TO 31
  6.   SPSET I,100,0,0,0,0
  7.   SPSCALE I,200
  8. NEXT
  9. @LOOP
  10. FOR I=0 TO 31
  11.   SPOFS I,RND(32),RND(32),60
  12. NEXT
  13. WAIT 60
  14. GOTO @LOOP

グラフィック画面を隠した直後に描画すると、一瞬表示されてしまう。

VISIBLE 命令でグラフィック画面を隠した直後に描画すると、旧プチコンとは異なり一瞬グラフィック画面が表示されてしまう。たとえば、以下のプログラムを実行すると、一瞬画面が白くなる。

  1. ACLS:VISIBLE 1,1,0,0,0,0:GCLS 15

どうも、VISIBLE の表示状態が反映されるのが旧プチコンとは違って 1 フレーム遅れているもよう。WAIT 1 をはさむと白いのは見えなくなります。

  1. ACLS:VISIBLE 1,1,0,0,0,0:WAIT 1:GCLS 15

文字列+STR$(変数) がうまく動かない場合がある

「文字列+STR$(配列(変数))」とすると、ごくまれに STR$ が文字列の 1 文字目を返すことがある。「A$=STR$(配列(変数)):A$=文字列+A$」とすると回避できる模様。社長のつぶやきによると、文字列まわりまたは CLEAR 命令の不具合が潜んでいる可能性があるとのこと。

SYSBEEP を FALSE にしていても、特定の箇所のみキークリック音が鳴る

SYSBEEP を FALSE にしていると、システム音は何も鳴らなくなるはずだが、ダイレクトモードにおいて「A」(リターンキー) と「Y」(BS キー) の押下のみ、キークリック音 (ブチブチ) が鳴る。実行中は鳴らないので、そういう意味では問題ありません。

BGMSET などで設定した BGM の内容が、ホームメニューに戻っても残ったまま

BASIC 画面からホームメニューに戻ると基本的にすべての設定が初期化されるが、BGMSET や BGMSETD で設定した MML による BGM (128 ~ 255 番) の内容だけは残ったままになっている。ただし、基本的に MML 領域が不足することをしていない限り実害はないと思われます。

【仕様かも?】N コマンドをタイやスラー、ポルタメントでつなげられない

N コマンドをタイやスラー、ポルタメントでつなげようとしても、Illegal MML エラーになる。ただし、説明書にはできるとは特に書いていないので、できたら便利なのだが仕様かもしれない。

  1. BGMPLAY ”N60&N80”  ’エラー
  2. BGMPLAY ”N60_N80”  ’エラー

【仕様かも?】縦横比が正方形でない長方形枠で、拡大率 100% よりも大きいスプライトを回転させると、スプライトの長方形枠の外にはみ出す部分が表示されない

【仕様かも?】縦 64 ピクセル、拡大率 100% よりも大きいスプライトが画面外にはみ出すと、反対側から何か出てくる

縦 64 ピクセル、拡大率 100% よりも大きい (つまり、縦幅が 65 ピクセル以上) のスプライトが画面の上下からはみ出すと、反対側から顔を出してしまう。拡大していなくても、回転により縦幅が長くなった場合も同様。以下は再現用のテストプログラム (Twitter より引用)。

90yrkn.jpg

要は画面の縦幅 192 ピクセルに対して、見えていない部分の縦幅が 64 ピクセルしかなく、それを超えると反対側から出てくるという状況。バグではなく、DS のハードウェアによるスプライトの仕様の可能性もあります。

大きいスプライトが反対側から出てくる.jpg

【仕様かも?】サンプルプログラムのファイル名で保存

PC で ptc ファイルを直接書き換えるか、非純正の QR コード生成ツールを使い、ファイル名がサンプルプログラムのいずれかと被っている QR コードを作成すると、プチコン上で読み込めてしまう。この場合、サンプルプログラムが上書きされて消えることはなく、QR コードから保存した同名のプログラムと共存した状態となってしまい、以下のような状況になります。

  • LOADSAVEEXECDELETERENAMEAPPEND 命令においては、同名のサンプルプログラムが操作対象として扱われる (そのため、リネームや削除はできない)
  • 作品リストから実行した場合、同名のサンプルプログラムが実行される

バグではないが、不便な仕様

【不便仕様】BTRIG、BUTTON(1) などが 1/60 秒単位でしか取れない

これはバグではなく、不便な仕様。ボタン押した瞬間だけ有効になる BTRIG、BUTTON(1) 関数などが、1/60 秒 (1 フレーム) の瞬間でしか有効にならない。したがって、VSYNC 2 以上で処理を回していたり、処理落ちしたりすると、ボタンの入力取得が漏れてしまうタイミングが発生するので事実上使えない。

また、キーボードを表示した状態では、L ボタンの入力を取りこぼしやすい (キーボードの表示切り替えによる処理落ちが発生するため)。WAIT の直後ぐらいで値を読み取ると大丈夫そうです。

逆に VSYNC や WAIT を使わずに処理を回すと、1/60 秒の間はフラグが残り続けるので、FOR 文で時間調整をする場合も注意。

【不便仕様】COLOR で指定したテキスト画面の背景色の、表示優先順位が低い

COLOR で背景色を指定していても、同じ位置にスプライト・BG 面・グラフィック面のどれか一つでも描画されていたら背景色が表示されない、もしくは欠けてしまうので、COLOR の背景色で他の面をマスクしつつコンソール表示をさせるという使い方が出来ない。

CLS 命令に「コンソール背景色に対応した色を BG パレットの 0 番にコピーする」機能を追加すればコンソール面とコンソール背景色を同じ優先順位にすることが出来る…かもしれない。

【不便仕様】PCM のドラム音色の定位 (パンポット) が中央にない

PCM のドラム音色 (@128, @129) の定位が中央になく、音によって勝手に左や右に割り振られている。これが意図しないものである場合、それぞれの音ごとに P コマンドでパンポットの修正が必要です。また、たとえば P64 (本来の中央) で右寄りで鳴る音の場合、P0 (本来の左端) にしても、完全に左にならない。本格的にデータを作る人にとってはあまり歓迎されない仕様です。たとえば、定位の割り振られていないドラム音色を @130, @131 で使えるようになると良さそうなのですが。

【不便仕様】SUBST$ の最後の引数が "" のとき値が変更されない

例えば、SUBST$(”ABCD”,1,2,””) は "ABCD" を返すが、これは "AD" を返して欲しい。

【不便仕様】SPSCALEで拡大したところの当たり判定が行われない

SPSCALE命令で拡大した際、拡大した部分の当たり判定(SPHITSPなど)が行われなくなる。デフォルトのサイズ部分のみ、判定が行われる。

これはSPCOLでいちいち当たり判定を定義する必要があるという不便な仕様でした。SPSCALEを行った際にいちいち定義し直すのは面倒なので、当たり判定も引き延ばすなど、どうにかしてほしいものです。

バグではなく、仕様だったもの

【仕様でした】「BGMPLAY トラック(1~7),"MML文字列"」の使い方がエラーになる

BGMPLAY 1~7,”MML” の使い方でこの命令を呼ぶと、なぜか Out of Range エラーになってしまう。トラックが 0 の場合のみエラーとならない。→ Web 版説明書の間違いのようです。電子説明書には、MML を直接鳴らす場合、トラック 0 しか使えないと書かれています。

  1. BGMPLAY 1,”CDE”

ということで、短い MML をトラック 0 以外で鳴らしたい場合、BGMSET を使いましょう。

  1. BGMSET 128,”CDE”
  2. BGMPLAY 1,128

【仕様でした】MML を複数トラック鳴らした場合、チャンネルが欠けてしまうケースがある (PSG のみ)

BGMPLAY 命令で MML を複数トラック鳴らした場合、チャンネルを使い切っていないにもかかわらず、一部チャンネルの音が欠けてしまう場合がある。

再現テストプログラムの QR コードは以下の通り。A ボタンで音が鳴ります。2 行目の BGMPLAY 命令のトラック番号 (1 つめの引数) を 1 にすると、チャンネル欠けは大幅に軽減される。7 にすると、まったくチャンネル欠けが無くなります。

ApAEPpMCIAEMlVN.png

…ということでしたが、これは仕様でした。社長の Twitter によると、マニュアルに載っていない仕様として、PSG (@144~@150) の音色は同時発音数 6 音まで、ノイズ (@151) は同時発音数 2 音までという制限があり、上記 QR コードのサンプルプログラムの場合、この制限に引っかかって音が欠けています。

PCM 音源の音色 (@1~@128) は、仕様通り 16 音鳴ります。波形メモリ音源の音色 (@224~225) も PCM で鳴っているため同様の仕様です。したがって、矩形波を 7 音以上同時に鳴らしたい場合、波形メモリ音源に PSG 相当の矩形波を定義し、PSG の代用または併用すると良いことになります。波形メモリはデフォルトで @144 (PSG デューティ比 50%) 相当の矩形波が定義されているので、そのまま代用すればリストが長くなることはありません。ただし、PCM/波形メモリの音色は、PSG と比較して若干音量が小さいため、全体的なベロシティ (音量) の調整は必要です。

なお、PSG と PCM 両方が鳴っている場合でも、同時発音数は合わせて 16 音となります。それを超えた場合、PSG が優先されて鳴ります。詳しくは、社長のツイート (その1, その2, その3)、およびプチコン公式サイトにある解説資料 (付録) をご覧ください。

プチコンmkII V2.3 で修正されたもの

【V2.3 で修正】文字列の比較およびSORT命令の動作に問題

文字列の比較(CHR$同士の比較など)およびSORT/RSORTの結果において、両者の動作の不統一、直感的でない結果が発生します。これらは修正によって辞書順の比較に統一されます。

【V2.3 で修正】COLSET命令で不正な色情報文字列を指定した場合にフリーズ

COLSETで指定する色情報文字列に、書式より極端に長い文字列を指定した場合 に、フリーズが起こる危険性があります。

【V2.3 で修正】Aボタンによる命令入力候補の誤動作

命令入力支援機能で、本体Aボタンによる改行の直後に正しい変換候補が表示されない、または変換候補が消える場合があります。

【V2.3 で修正】電子説明書の起動によってコピー範囲の記憶がリセットされる

編集モードでプログラムリストのコピー機能を使用中に電子説明書を起動した場合、再び編集モードに戻ったときにコピーした内容がリセットされます。

【V2.3 で修正】大量の文字列の演算で誤動作

文字列に対する演算(A$+B$における+など)が極端に大量に行なわれたときの処理に問題があり、正しい演算結果が返されない場合があります。

【V2.3 で修正】非パッケージ型ファイルを読み込んでもPACKAGE$が変化しない

パッケージ型ファイルを読み込んだ後、パッケージリソースを含まないファイルをLOADした場合に、直前に読み込まれたパッケージ型ファイルの情報がシステム変数PACKAGE$に残ります。本来の正しい動作ではPACKAGE$はクリアされ”0”となります。

【V2.3 で修正】PRGNAME$,PACKAGE$をセーブ時にも対応

SAVE成功時に、システム変数PRGNAME$およびPACKAGE$が更新されるようになります。

【V2.3 で修正】COLINITで引数を省略した場合の動作

一切の引数を省略してCOLINITと記述した場合、全ての色が初期化されるようになります。また、COLINIT ”BG”のようにバンク名以降を省略した場合は、指定したバンクの色が全て初期化されます。

【V2.3 で修正】MMLのチャンネル指定省略時について

チャンネル指定を省略して書き出されたMML構文においては、続いて記述されたチャンネル指定が先頭にさかのぼって指定されます。たとえばBGMPLAY”C:1D”ではチャンネル:1で「ドレ」が再生されます。 これはチャンネルにデフォルト値を設けないことにより、チャンネルの重複を極力起こさないための措置ですが、感覚的に意図しないチャンネルが割り当てられる場合もあります。 次回更新時にはこれに対処し最も若いチャンネル:0をチャンネルのデフォルトとして厳密に解釈する予定です。たとえばBGMPLAY”C:1D”と記述した場合、”:0C:1D”と解釈されチャンネル:0「ド」とチャンネル:1「レ」が同時に再生されます。このためBGMPLAY”:1C:0D”と記述すると、”:0:1C:0D”と解釈されチャンネル:0の重複が起こりIllegal MMLエラーが発生します(この場合正しくはチャンネル:0を先頭にBGMPLAY”:0D:1C”と書きます。あるいはBGMPLAY”D:1C”やBGMPLAY”:1C:2D”と書いてもエラーにはなりません)。

【V2.3 で修正】サンプルプログラムのSAMPLE5の誤動作

日付を跨いだ場合の処理を修正しました。

【V2.3 で修正】サンプルプログラムのGAME4の誤用

キャラクタ入れ替え時のループ回数に関して、理論上の誤用を修正しました(実質的な動作に変化はありません)。

【V2.3 で修正】電子説明書の誤植

はじめに > 操作方法

Rボタンの説明をLボタンと同内容に

サウンド関係の表 > TALKコマンド > @E 数値

E9以降の説明を再度追加

数学三角関数 > ATAN()

引数が2個の型と1個の型について説明を分離

文字検索置換関数 > INSTR

×「変数=INSTR( 文字列, 検索文字列 )」 ○「変数=INSTR ( 文字列, 検索文字列 [, 開始位置 ] )」 追加「引数:開始位置:0~文字単位の開始位置」。 ただし、開始位置の指定は電子説明書にあるこの順序ではなく、「変数=INSTR ( [開始位置,] 文字列, 検索文字列 )」です。

説明書の一部が途切れている

取扱説明書の、「10 サウンド関係の表 → TALKコマンド」の内容が途中で途切れている

プチコンmkII V2.1 で修正されたもの

【V2.1 で修正】 【不便仕様】QR コード読み込み完了のファイル保存時、ファイル名が表示されないのが不便

これはバグではないですが、QR コードの読み込み時、ファイル名が表示されるのが 1 枚目を読み込んだときのみで、保存時にファイル名が表示されず、その頃にはファイル名なんていちいち覚えていないのが不便という声が多いです。

1 枚目を読み直すのがおっくうな場合、プログラムを作るモードから FILES 命令でファイル一覧を見て、そのリソース種類 (PRG など) の中で一番末尾にあるファイルが最後に保存したファイルなので、そこで判断すればとりあえずだいたい何とかなります。

【V2.1 で修正】【注意】MML で、タイ/スラー記号などを介して長さ指定を複数記述するとフリーズ

BGMPLAY 命令や BGMSET 命令、BGMSETD 命令で MML を記述する際、タイ/スラー記号 (&) の直後に数字を記述するなど、# + - . & _ などの記号を介して長さ指定を複数記述すると、実行時にプチコンがフリーズしてしまう。

たとえば、こんな感じに書くと止まってしまいます。本来は Iligal MML エラーで止まるのが正しい動作です。

  1. BGMPLAY ”C2&4”
  2. BGMPLAY ”C2+4”
  3. BGMPLAY ”C2.4”

ちなみに、& をタイとして使う場合、以下が本来の正しい記述です。

  1. BGMPLAY ”C2&C4”

【V2.1 で修正】【注意】MML で、無効なイコール記号を記述するとフリーズする

BGMPLAY 命令や BGMSET 命令、BGMSETD 命令の MML で「休符+イコール記号」「音階+イコール記号」のように、無効なイコール記号を記述すると、実行時にプチコンがフリーズしてしまう。以下はフリーズする一例です。本来は Iligal MML エラーで止まるのが正しい動作です。

  1. BGMPLAY ”R=”
  2. BGMPLAY ”C=”
  3. BGMPLAY ”C2+.=”

【V2.1 で修正】【注意】プログラム中の「★」記号が改行に変わってしまう

プログラム中に「★」記号を直接含むプログラムをセーブしてロードすると、改行に置き換えられてしまう。

  1. PRINT ”ツノタ゛★ヒロ”

ロードするとこんな感じになるので、動かなくなります。

  1. PRINT ”ツノタ゛
  2. ヒロ”

とりあえず、文字列であれば CHR$(10) でしのぐのが一番のようです。

  1. STAR$=CHR$(10)
  2. PRINT ”ツノタ゛”+STAR$+”ヒロ”

【V2.1 で修正】【注意】GDRAWMD 1 のときに、GCIRCLE で画面外にはみだす円を描くと誤動作やフリーズ

GDRAWMD 1 (XOR 描画) に設定しているときに、GCIRCLE 命令で画面外にはみ出す位置・大きさの円を描くと、はみ出した部分が変な位置に描画されたり、以降正常に動作しなくなったり、フリーズしたりする。

  1. ’ チュウイ! コレヲシ゛ッコウスルト フリース゛ シマス。
  2. BGMPLAY 2
  3. GDRAWMD 1
  4. FOR I=0 TO 100 STEP 4
  5.   GCIRCLE 80,80,I,255
  6.   BEEP:WAIT 8
  7. NEXT

【V2.1 で修正】【注意】実行モードで、行末で Shift+Del を押すと誤動作やフリーズ

実行モードにおいて、行末 (入力中の文字列の終端) で Shift+Del キーを押すと、誤動作やフリーズを起こすことがある。発生頻度はあまり高くないように見えますが、やらない方が良さそうです。

【V2.1 で修正】保存ファイル数が少ないとき、ホーム画面のファイル選択で特定の操作をするとフリーズ

ファイルが 1 ページ分の数 (1~7 個) しか保存されていない状態で、ホーム画面の「SD カードに保存」や「名前変更」などのファイル選択画面を表示し、「十字キーの右」や「L + 下ボタン」で本来存在しないはずの次のページに送ろうとすると、完全にフリーズするか、もしくは文字化けした謎のファイルが表示される (謎のファイルを選択しても、未選択状態として扱われ何かできるわけではない)。

ファイル選択文字化け.jpg

【V2.1 で修正】QR コード作成の際に表示される内容が入れ替わっている

QR コード作成の際、確認画面で表示される「リソース名」と「ファイル名」が入れ替わって表示されている。表示の問題だけで特に実害はありません。

QRコード作成入れ替わり.jpg

【V2.1 で修正】MML で、ゲート設定が短いと、短い音符の音が鳴らない

MML で、ゲート設定 (Q) が短いと、特定よりも短い音符の音が鳴らなくなる。1 フレーム未満の音になると鳴らないようです。Q0 だと全く鳴りません。また、テンポ設定は現象に影響しません。以下は音が鳴らない例。

  1. BGMPLAY ”Q0 @147 L1CDE”
  2. BGMPLAY ”Q1 @147 L32CDE”
  3. BGMPLAY ”Q2 @147 L64CDE”

上記ではプツプツした音が鳴るか鳴らないかでどうでもいいのですが、実使用では、以下のようにエンベロープのリリースタイムを使いたい場合にも全く鳴らなくなるという悪影響があります。

  1. BGMPLAY ”Q0 @147 @E127,1,1,110 L1CDE”
  2. BGMPLAY ”Q1 @147 @E127,1,1,110 C16 R2 C24 R2 C32”
  3. BGMPLAY ”Q2 @147 @E127,1,1,110 C32 R2 C48 R2 C64”

【V2.1 で修正】MML で Q の設定により音符の長さに誤差が発生する場合がある

( 192 / 音長の数値 ) * ( Q の数値 / 8 ) の計算結果が小数になる音を鳴らした場合、音符の長さに誤差が発生してしまう。たとえば、同じ 16 分音符を鳴らす場合、Q6 と Q7 でずれが発生する。以下が誤差が重なってズレが確認できる例。

  1. A$=”@147L16[CDEFGAB<C>]”
  2. BGMPLAY ”Q6”+A$+”:2Q7”+A$

【V2.1 で修正】BGFILL 命令でスクリーンデータを文字列指定したとき、キャラクターの配置が正しく処理されない

BGFILL 命令のスクリーンデータ文字列指定版では、複数のキャラクターを並べて指定できるが、埋めるキャラクターの数が指定した数の倍になる。

以下のコードでは、4 のキャラで埋めるはずが、4,0 の 2 キャラで繰り返され市松模様となってしまう。

  1. BGFILL 0,0,0,10,10,”0004”
BGFILLの不具合1.jpg

今度は以下のコードを実行すると、本来は 4,8 の 2 キャラの繰り返しが正しいが、キャラ番号 4,8,0,0 の 4 キャラのパターンで描画される。

  1. BGFILL 0,0,0,10,10,”00040008”
BGFILLの不具合2.jpg

なお、指定した以降のキャラは、前回指定したものがそのまま適用される。 例えば、上のコードを実行後に以下のコードを実行すると、キャラ番号 6,8 の2キャラのパターンで描画される。

  1. BGFILL 0,0,0,10,10,”0006”
BGFILLの不具合3.jpg

暫定的に対処するなら、1 キャラ分の塗りつぶしでは文字列指定版を使わないようにし、2 キャラ分以上を塗りつぶしたいならこんな感じになります。

  1. BG$=”00040008”
  2. BGFILL 0,0,0,0,0,BG$+BG$ ’シュウセイハ゛ン カ゛ テ゛タラ ケス
  3. BGFILL 0,0,0,10,10,BG$

【V2.1 で修正】GCOPY 命令で、転送元と転送先の座標が同じだと転送されない

GCOPY 命令で、転送元と転送先の座標が同じだと、転送が行われない。以下の再現手順は Twitter の報告 より引用。

  1. CLEAR:ACLS
  2. GCOLOR 15
  3. GPAGE 0,1,1:GCLS 0
  4. GLINE 0,0,255,191
  5. GPAGE 0,0,0:GCLS
  6. GCOPY 1,0,0,255,191,0,0,FALSE

【V2.1 で修正】GCIRCLE で、角度 0 をまたぐ円弧を描くことができない

GCIRCLE で円弧を描く場合、角度 0 をまたぐ円弧を描けない (1 回で描く方法がない)。開始角と終了角を入れ替えても円弧は変わらず、0~360 の範囲外の角度は無視されてしまう。これは不具合扱いとして、次のバージョンで改善される予定だそうです。

【V2.1 で修正】電子説明書を出入りすると、ファンクションキーの設定内容が化ける

電子説明書を出入りすると、各ファンクションキーの 3~4 文字目のみ、デフォルトの設定に戻ってしまう。

ファンクションキーの設定化け.jpg

【V2.1 で修正】「作品を見る」から RECVFILE 命令を使用すると、上書き確認のメッセージが表示されない

RECVFILE 命令を「プログラムを作る」モード内から使用した場合、受信ファイルがすでに存在していると上書き確認のメッセージが表示される。しかし、「作品を見る」から実行したプログラム内からこの命令を使用した場合、上書き確認が行われない。

【V2.1 で修正?】VAL("-") でオーバーフロー

PRINT VAL(”-”) でなぜか Overflow エラーに。本来は 0 を返すのが正しいと思われます。 修正したようですが、エラーの種類が変わっただけです。0を返す仕様の初代との互換性に問題があり、修正できたといえるのか微妙です。

【V2.1 で修正】プログラムを実行してから 1 回目の VSYNC 命令が無視される

初回実行時、およびプログラムを書き換えた直後の実行時、1 回目の VSYNC 命令が無視される。2 回目以降は正常に機能する。下記は再現用のプログラムで、1 回目の実行のみすぐに終了します。前回の VSYNC 命令を実行した時間が終了をまたいで記憶されているわけではないようです。

  1. ACLS:VSYNC 1000:PRINT ”オワリ”

【V2.1 で修正】PNLTYPE を実行すると、VISIBLE の状態が一部リセットされる

VISIBLE でテキスト画面を消している状態で PNLTYPE を実行すると、旧プチコンとは違ってテキスト画面が再び見えるようになってしまいます。再び VISIBLE で消す必要があります。

  1. ACLS
  2. VISIBLE 0,0,0,0,0,0
  3. PRINT ”ミエテルヨ!!”
  4. WAIT 60
  5. PNLTYPE ”OFF”
  6. @LOOP
  7. GOTO @LOOP

【V2.1 で修正】MML で、「<」コマンドで本来の上限である 8 オクターブを超えてしまう

MML でオクターブを 本来の上限である 8 より大きくしようとすると、エラーにならず、9 オクターブまであげることができてしまう。

  1. BGMPLAY ”O8<ABC”
  2. BGMPLAY ”<<<<<<<<<<BC”

この時点でまぎれもないバグなので何が起こってもおかしくないのだが、さらにこの状態では A (ラ) や B (シ) 以降の音が、音程の変化の無い効果音に変わる。

  1. BGMPLAY ”<<<<<<<<<CDEFGBC”

最初に A が来たときは銃声のような音が、A#~B# が来たときはピアノのような音がする。また、音の長さが高さに影響する (短いほど高くなる)。なお、@Dは効く (これらは、で音色をしない場合で検証)。

【V2.1 で修正】GCIRCLE の描画速度が旧プチコンよりも遅くなっている

プチコンmkII では、動作速度や各種グラフィック命令が旧プチコンよりも高速化されているが、GCIRCLE の描画速度のみ旧プチコンより 10~20% 程度遅くなっている。これは公式サイトのバグ情報によると、不具合だそうです。

【V2.1 で修正】「`」 と CHR$(96) など、一部文字とキャラクターコードが同じと認識されない

プログラムリスト上に直接記述した ¥ ` ― \ ・ ー のいずれかの文字と CHR$(キャラクターコード) が同じ文字と認識されない。たとえば、INSTR や == での比較に影響がある。

  1. PRINT INSTR(”ABC`”,”`”)       ’4 (OK)
  2. PRINT INSTR(”ABC`”,CHR$(96))  ’-1(NG)
  3. PRINT ”`”==CHR$(96)           ’0 (NG)
  4. PRINT ASC(”`”)                ’96(OK)
  5. PRINT CHR$(96)                ’` (OK)

文字列変数に入れみてもこんな感じで別扱いに。

  1. A$=”`”:B$=CHR$(96)
  2. PRINT A$==B$    ’0(NG)
  3. PRINT A$==”`”   ’1(OK)
  4. PRINT B$==”`”   ’0(NG)

この問題は、一度プログラムを保存して開き直すことで発生しなくなる。

【V2.1 で修正】命令文入力支援で、ページとページの境目に当たる入力候補 1 つが抜けている

命令文入力支援で、入力支援の候補が 1 ページに収まりきらない場合、「>>」が表示されてページをめくることができるが、ページとページの間の 1 候補が抜けている。

たとえば、G と入力した場合の入力候補はこんな感じだが…。

入力候補が足りない1.jpg

2 ページ目に行くと、最初にあるはずの「GOTO」が無いことがわかる。

入力候補が足りない2.jpg

【V2.1 で修正】PRINT のカンマ指定で出力した文字列の最後の文字が表示されない

PRINT 命令で、以下の条件がそろった場合、カンマ指定で出力した文字列の最後の文字が表示されない。

  • TABSTEP が 1, 2, 4, 8, 16 のいずれか (デフォルトは 4)
  • 文字列が右端32文字目で終わる
  • 出力の結果コンソールがスクロールする

以下が再現手順。2 ちゃんねるより引用しました。

  1. CLS:TABSTEP=4
  2. LOCATE 0,23
  3. A$=”A”*32
  4. PRINT A$;A$,A$
カンマ区切りPRINTの文字が1文字足りていない.jpg

【V2.1 で修正】ダイレクトモードのコマンドの入力履歴が一部無くなる

ダイレクトモード (実行モード) で、上ボタンを押し過去のコマンド入力履歴を表示した状態でスタートボタンを押して RUN させると、その項目以降の履歴が密かに削除されてしまう。

【V2.1 で修正】文字列で存在しないラベルを指定したときのエラーが違う

GOTO などでラベルを文字列変数で指定したとき、ラベルが存在しないと「Syntax Error」エラーになる。「Undefined Label」エラーが正しいはず。

【V2.1 で修正】GPAINT 命令で、塗りを指定した場所がすでに塗り色と同じ色だった場合、関係ない場所も塗られる

GPAINT 命令で、塗りを指定した場所がすでに塗り色と同じ色だった場合、関係ない場所も塗られてしまう。

以下の通りにすると再現できます (Twitter より引用)。

  1. GCIRCLE 命令で、画面の真ん中に赤色の円を描く
  2. GPAINT 命令で、円の外を起点に円の外を青色で塗りつぶす
  3. もう一度同じ座標に対して青色で塗りつぶすと、なぜか円の中まで塗りつぶされる
  1. GCLS
  2. GCIRCLE 128,96,50,2
  3. GPAINT 0,96,4,2
  4. GPAINT 0,96,4,2

実行した結果は、以下の通り (Twitter より引用)。

https://twitter.com/#!/Ackieee/status/183603149687357440

【V2.1 で修正】TALK 命令で合成音声を再生中、不正な TALK 命令を実行してエラーを起こさせると、TALKCHK() が TRUE のままになる

TALK 命令で合成音声の再生が終わる前に、不正な TALK 命令 (TALK”ABC”) で Illegal function call エラーを起こして、強制的に再生を中断させると、現在合成音声が再生されていないのにずっと TALKCHK() 関数が TRUE を返し続けてしまう。

この状態は、RUN や CLEAR、ACLS 命令でも復旧しないが、新たに TALK 命令による合成音声の再生を正常終了させると元に戻る。

【V2.1 で修正】ACLS 命令を実行すると、BG の背景色の変更がきかなくなる

ACLS 命令を一度でも実行すると、以降 BG のパレット 0 番の背景色の変更が反映されなくなる。以下は再現用テストプログラムの QR コード (Twitter より引用)。

91vwp6.jpg

どうやら、かわりに BG パレット 31 番が背景色となってしまうようです (Twitter での報告より)。

【V2.1 で修正】MML のマクロ定義にポルタメント (_) があると、以降の MML 解釈がおかしくなる場合がある

MML の隠し機能であるマクロ機能で、マクロ定義の中にポルタメント (_) が含まれていると、それを使用した箇所以降、MML の再生がおかしくなる場合がある。

再現用プログラムの QR コードはこちら。マクロ「A2」と「BD」の最後のほうにあるポルタメント (_) を取り除くか、タイ (&) に変更すると正常に再生されるようになる。単純にポルタメントを使うと必ずおかしくなるわけではないようです。

ApoosjzCAAEGPib.png

【V2.1 で修正】BGOFS の自動補完スクロールで、ループの境目をまたいだスクロールをすると 1 周してしまう

旧プチコンから存在する謎挙動。BGOFS の自動補完スクロール機能で、たとえば、(0, 0) 座標から (-1, 0) 座標に自動スクロールさせると、なぜかスクロールが 1 周してしまう。

  1. BGFILL 0,2,2,10,10,10
  2. BGOFS 0,0,0
  3. BGOFS 0,-1,0,60

【V2.1 で修正】メモリ不足になるほど文字列を定義すると、以降文字列の挙動に誤動作

Out of Memory エラーが発生するほどたくさんの文字列変数 (配列含む) を定義すると、エラーまたはエラーが無視されたあと、文字列を扱ったあらゆる挙動が異常になるようです。

【V2.1 で修正】SPCOLVEC の設定がないスプライトの衝突判定が誤っている場合がある

SPCOLVEC 命令で移動速度が定義されていないスプライトにおいて、SPHIT 命令の衝突判定時、移動速度の計算に誤りがあり、衝突結果が間違っている場合があるようです。

【V2.1 で修正】SPHIT 命令の当たり判定の縦幅が 1 ピクセル大きい

SPHIT 命令の当たり判定において、横幅は正確だが縦幅が実際よりも 1 ピクセル大きく判定されている。

【V2.1 で修正】サンプルの「GAME3」の動作が速すぎる

サンプルの「GAME3」(SAMPLE STG) の動作が速すぎる。これは、VSYNC にすべき部分が実質機能していない WAIT 0 になっているから。VSNYC 1 に置き換えるといい感じになります。旧プチコンでも VSYNC 0 になっていて、この変更をすると処理落ち地獄になるので、意図的に外していたものが mkII の高速化によって速すぎる事態になったものと思われます。

【V2.1 で修正】サンプルの「DRWED」で、BOX または FILL を描いた後の TEXT 入力がおかしい

サンプルの「DRWED」で、BOX または FILL を描いた直後に B ボタンで TEXT 入力に移行すると、テキストカーソルの位置がおかしくなり、場合 (最後に BOX や FILL を描いた座標) によっては、Out of range エラーでプログラムが停止してしまう。

これを回避するには、438, 445, 459 行目の 3 箇所で使用している変数 MX を別の適当な名前 (MX2 とか) に変更する。

【V2.1 で修正】サンプルの「SAMPLE12」で、存在しないファイルをロードするとエラーになる

サンプルの「SAMPLE12」(波形メモリ音色作成ツール)で、何も保存されていない音色番号の音色データを Y ボタンを押してロードしようとすると、Division by zero エラーが発生してプログラムが停止する。

エラー時に保存されていなかった音色データは再実行するとすべて初期化されてしまうので、もしそれが不便に感じて回避したい場合は、プログラムの以下の 2 箇所に赤字で示した行を追加する。

  1. MEM$=””
  2. LOAD NE$
  3. IF MEM$==”” THEN RETURN
  1. MEM$=””
  2. LOAD NW$
  3. IF MEM$==”” THEN RETURN

【V2.1 で修正】電子説明書の誤植

  • 「10 サウンド関係の表 → MML コマンド」の N コマンドの説明で、O4C (ド) の音が N40 と書かれているが、実際は N60 が正しい。