Author: AKIKAWA, Hisashi

# PC-6001用互換BASIC変更履歴

## 2025.6.1

Ver.0.8.1公開。

- バグを修正。
  - RS-232Cの受信ができない
  - 整数値への丸めが正常に行われない場合がある
  - 挿入モードでCtrl-Gを押した時にスペースが挿入されない
  - ダイレクトコマンドモードでSTOP-CONTした時にエラーにならない

## 2024.6.15

Ver.0.8公開。

- 新たにSUBCPU.60とSUBCPU.61を同梱しました。
- 数字の表示について、実機 (初代PC-6001) と同じく最大9桁表示されるよう変更。mkII以降とは異なります。
- PLAY文での最小発音時間を実機 (初代PC-6001) と同程度に制限。非常に短い長さの音を含む場合に影響があります (計算通りの長さにならなくなります)。mkII以降とは長さが異なります。
- 対応ROM内ルーチンが増えました。(12B5h,1578h,15BAh,15D5h,18C3h,2286h,2296h,2874h,3913h)
- 以下の命令についてN60-BASICと同じアドレスに変更。STICK(2236h), STRIG(2256h), LCOPY(22A6h), PRESET(2D37h), PSET(2D3Ch), CLEAR(35A9h)
- バグを修正。
  - LINE、PAINT命令の後に@がある時にエラーになる
  - 文字列を結合する時に+を複数並べるとエラーになる
  - INPUT#n,の後に空白を挟んでプロンプト文字列があると誤動作する
  - INPUTとVAL()で先頭がハもしくはヒだと、それぞれ+と-に解釈される
  - INPUTで閉じダブルクォーテーションの後ろに文字を続けて入力してもエラーにならない
  - 行頭でDELを押すと前の行の最後の文字が壊れる
  - VAL("& ")がエラーにならない
  - chr$(12)を表示すると、直前に指定したグラフィック座標がリセットされる
  - スクリーンモードを変更した時に、カーソル位置が画面左上隅でなくCONSOLEで指定したスクロール領域の左上隅になる

## 2023.1.22

Ver.0.7.6公開。

- PLAY文の継ぎ目が少し目立ちにくくなりました。
- 対応ROM内ルーチンが増えました。(2905h)
- バグを修正。
  - INPUT命令で文字列変数を読む場合、何も入力しなかった時に、変数が空文字列で上書きされてしまう
  - 負数に対するEXP関数やべき乗で、正しくない結果を返す場合がある (EXP(-89)〜EXP(-177)あたり)
  - スクリーンモード2〜4でCLOADすると右上の*が正常に表示されない (eikhussiineokさん、ありがとうございます)
  - INPUT文で?が行末に来る位置だと正常に入力できない (eikhussiineokさん、ありがとうございます)

## 2022.5.29

Ver.0.7.5公開。

- 対応ROM内ルーチンが増えました。(1D52h,1E39h)
- 1061h (ゲームキー入力ルーチン) でCフラグが変化しないように修正。
- 割り算の結果が小さい時に暴走するバグを修正。(川俣さん、ありがとうございます)

## 2021.6.4

Ver.0.7.4公開。

- 宣言せずに配列変数を使うことができなくなっていたバグを修正。(eikhussiineokさん、ありがとうございます)

## 2021.6.1

Ver.0.7.3公開。

- PC-6001Aでの動作に対応 (起動メッセージとプリンタ動作)、BASICROM.61を同梱。中身はBASICROM.60と同じです。
- BASICROM.62の同梱を終了します。今後はPC-6001mkII/6601用互換BASICを使ってください。一応、BASICROM.60をリネームしてサイズを32KBにすれば、今まで通りmkII上で使うことも可能ですが、この機能は将来的に削除される可能性があります。
- iP6/iP6winでの16KB動作に仮対応。
- FRE()の表示値を微調整。
- 対応ROM内ルーチンが増えました。(0BEEh, 272Dh)
- 同梱のbdf2cgromでの文字割り当てと計算アルゴリズムを一部変更。また、新しいオプションとして-pc6001aと-ascentを追加。
- バグを修正。
  - LIST命令のESC状態が、N60-BASICでは無効となるキー入力で解除されることがある (じゃんめろ。さん、ありがとうございます)
  - 0/0がエラーにならない
  - ファンクションキーの文字列中にCHR$(0)があっても、続く文字が入力されてしまう
  - CSAVEやPRINT#-1での無音時間が少し短くなっていた (Ver.0.7から)

## 2020.11.21

Ver.0.7.2公開。

- スクリーンモード1と2のLINE BF命令が正常に動かない場合があるバグを修正。(eikhussiineokさん、ありがとうございます)

## 2020.6.1

Ver.0.7.1公開。

- 対応ROM内ルーチンが増えました。(1CD2h,1CF6h,1D73h,2701h)
- プログラム入力時の中間言語変換が少し速くなったはず。
- バグを修正。
  - スクリーンエディタ使用中に行頭でDELを押しても字が消えない
  - CLEARの第二パラメータで非常に小さいアドレスを指定すると誤動作を起こす
  - DIM命令で配列でない通常変数を複数指定するとエラーになる
  - 同梱のbdf2cgromで変換に失敗する可能性がある
  - プログラム入力時にオーバーメモリエラーチェックをしていない
  - LPRINT後のINPUTでプロンプトが正常に表示されない

## 2019.9.1

Ver.0.7公開。

- LGPLv2.1以降での利用を可能としました。
- 対応ROM内ルーチンが増えました。(1179h,1181h,14AFh,1A1Ch,1B2Ah)
- 等号不等号3種を1種ずつ3個並べた演算子 (>=<, <=>, ><=, <>=, =><, =<>) に対応。常に真となる比較演算を行います。
- EXEC命令で0以外のアドレスを指定した時にCフラグを立てるよう修正。
- 文字列演算時に?OS Errorや?ST Errorが出やすい問題を改善。
- バグを修正。
  - スクリーンモードが3か4の時、カーソルが行頭以外にある状態でプログラムが終わっても改行しない
  - 同梱のbdf2cgromがFONT_DESCENT 0の時に動かない
  - マイナス符号と小数点が両方ある数値に対してVAL()が正しく動作しない
  - マイナス符号と小数点が両方ある数値に対してREAD-DATAが正しく動作しない
  - INPUT命令での複数入力に失敗する
  - INPUT命令での入力に対しDELキーを使うと入力が欠けることがある
  - 文字列演算の途中でガベージコレクションが発生すると結果が壊れることがある

## 2018.1.30

Ver.0.6.4公開。

- 対応ROM内ルーチンが増えました。(0384h,038Bh,1B2Ah)
- バグを修正。
  - SCREEN()が正常に動作しない
  - COS()の引数が減算を含む式だった場合にエラーになる (0.6.3で直したつもりが直っていなかった)
  - 等号の演算順序が不等号より先になっていた (N60-BASICでは同順位)
  - 実機で拡張RAM無しの場合に起動に失敗する

## 2017.9.1

Ver.0.6.3公開。

- バグを修正。
  - カーソルキーを3個以上同時に押した時のSTICK()の値が異なる
  - DIM命令で配列変数でなく通常変数を指定した時に、続く命令が正常に実行されない
  - LEFT$(),RIGHT$(),MID$()においてグラフィック文字の途中で分割した時の結果が異なる
  - COS()の引数が減算を含む式だった場合エラーになることがある

## 2017.7.13

Ver.0.6.2公開。

- CLOAD時のアスタリスク点滅タイミングをN60-BASICと同様に変更。(Tsutsuiさん、ありがとうございます)
- バグを修正。
  - PLAY文の音程データが不正確だった (bookwormさん、ありがとうございます)
  - 同じFORループを途中で抜けるのを繰り返すとやがて?OM Errorになる
  - ?OM Errorの際にプログラムが破壊されることがある
  - 特定の条件下でNEXTやRETURNが誤動作する
  - PLAY"M0"がエラーにならない
  - 整数値を扱う命令で負数も有効になるもの (AND、PEEK、CLEARなど) の場合、小数点付きの負数を使った時の端数処理が正しくない
  - RND()の値がおかしい場合がある
  - 累乗計算で指数が大きい時の結果がおかしい
  - VAL関数で指数部を含む文字列を指定すると、別の文字列まで読んでしまうことがある
  - 多重ループのNEXT命令がコンマで終わった時にエラーにならない

## 2017.2.17

Ver.0.6.1公開。

- PLAY文の音長精度が少しだけ良くなったはず。
- 対応ROM内ルーチンが増えました。(1AEDh, 1B49h, 1B4Bh)
- CONSOLE文実行直後にファンクションキー表示の有無が変わらないことがあるバグを修正。(Tsutsuiさん、ありがとうございます)

## 2016.12.29

Ver.0.6公開。

- 実数演算や数学関数の精度が少し良くなったはず。
- 対応ROM内ルーチンが増えました。(0DE3h)
- バグを修正。
  - 音楽演奏中のジョイスティック読み出しとSOUND文が誤動作する可能性がある
  - CONSOLE命令でスクロール範囲を1行だけにした場合、直前の行との接続状態が保たれたままなので、復帰できないことがある
  - CONSOLE命令でエラーになる時や非常に大きな値を入力したときの挙動が異なる
  - INP関数とCHR$関数で、引数が数値かどうかのチェックをしていない
  - VAL関数で空白や小数点や指数部を含む文字列を指定すると、別の文字列まで読んでしまうことがある
  - EXP関数で正しくない結果を返す場合がある (EXP(45337)〜EXP(45426)あたり)
  - 指数表現の仮数部が0だとエラーになる (0e1など)
  - 累乗計算で、底がゼロや負数だとエラーになる
  - 差が非常に大きい数を引き算すると答えがおかしい
  - 答えが非常に小さくなる足し算や掛け算を行うとエラーになる

## 2016.1.29

Ver.0.5.1公開。

- 対応ROM内ルーチンが増えました。(2739h, 30CEh, 310Fh, 3AA5h, 3AACh)
- バグを修正。
  - グラフィック文字を実行させようとすると暴走する
  - プログラム中のグラフィック文字が正しく入力できない
  - REM文、DATA文中の仮名文字がLISTで正しく表示されない
  - SCREEN命令で画面モードを変更する時、第3パラメータで別のページを指してもモード変更の過程が一瞬見えてしまう
  - PRINT文で数字を表示する時、桁数が多いと途中で改行されてしまう (N60-BASICではあらかじめ改行してから表示してくれる)
  - PRINT文でスクリーンモード3でコンマを使った時の動作が違う

## 2015.12.7

Ver.0.5公開。

- 同梱のbdf2cgromを、縦横比1:1以外のフォントにも対応するよう変更。横幅はFONTBOUNDINGBOXを参照します。
- コマンド呼び出し時のレジスタなどをN60-BASICと同様に変更。
- 以下の命令についてN60-BASICと同じアドレスに変更。RUN(0781h), DATA(07E0h), REM(07E2h), LPRINT(087Ah), PRINT(087Eh), COLOR(1D9Bh), SCREEN(1E04h)
- 対応ROM内ルーチンが増えました。(0028h, 0390h, 0442h, 0781h, 07E0h, 07E2h, 087Ah, 087Eh, 10AAh, 1257h, 1A4Fh, 1BBEh, 1D9Bh, 1E04h, 274Dh, 2539h, 25A8h, 28F9h, 3BAFh)
- バグを修正。
  - スクリーンモード2でテキストのある位置にLINEやPSETでカラーコード0のドットを置いた時の挙動が異なる
  - 高速でキー入力したり、エミュレータのテキストペースト機能を使うと、取りこぼしが発生する
  - INPUT文実行中やコマンド入力時にCtrl-Cが効かない
  - PRINT/LPRINT文によるプリンタへの出力でTAB()を使った時に、直後の1文字が無視される
  - PAINT文で異常にスタックを消費する場合がある
  - キーバッファがいっぱいだとESCが効かない
  - DIM文で256以上の数字を指定するとエラーになる
  - DATA文を入力する時、""で囲んだ文字列の後がおかしくなる
  - DIM Aとした時に配列変数A(10)が生成される (N60-BASICでは通常変数Aが生成される)
  - プログラム入力時に先頭にスペースを挟むとエラーになる
  - PLAY中にキークリック音が鳴ると音が消える
  - STOP-CONTの動作が色々おかしい
  - プログラム中にグラフィック文字を直接置くと、うまく入力されない
  - PRINT#-2でSPC()かTAB()か,を使った時に正しく出力されない
  - CONSOLE,0とすると変になる

## 2014.12.3

Ver.0.4公開。

- mkIIの起動に対応。BASICROM.62をモード2相当の起動ROMとして使えます。ファイル名とサイズは違いますが中身はBASICROM.60と同じです。初代機画面モードかつ裏RAM使用といった類のmkII以降用プログラムを動かせるのではないかと思います。
- EXECやUSRの後ろに引数を追加して独自解析するようなプログラムに、ある程度対応。
- 対応ROM内ルーチンが増えました。(0008h, 0018h, 0038h, 0DE4h, 0E78h, 0E8Fh, 0EB0h, 0EB5, 0FC4h, 1478h, 1BCDh, 2030h, 204Bh, 25E5h, 2D13h, 2D47h, 2DE4h, 2E1Fh, 2E35h, 2EFAh, 397Ah, 3AA1h)
- バグを修正。
  - 一つのDIM文で複数の配列を定義する時、変数-コンマ間にスペースがあるとエラーになる (eighttailsさん、ありがとうございます)
  - 一つのINPUT文で複数のデータを入力させる時、文字列変数-コンマ間にスペースがあるとエラーになる
  - INPUT文で文字列をコンマで区切って入力した時、コンマの後ろのスペースが有効になってしまう
  - INPUT文で、入力行に最初から文字があった場合の挙動が異なる
  - LIST文で65531〜65535行も表示できる (N60-BASICでは65530行まで)
  - DATA文中や""中に小さい「ょ」があると、LISTを実行した時にREMと表示される
  - データが無かったりコンマで終わったりしているDATA文を数値変数でREADした時に正しく読めない (N60-BASICでは0があると見なされる)
  - PLAY文でチャンネルごとの演奏長さが違う場合、うまく揃わず演奏が長時間止まるケースがある
  - PLAY文中の=で配列変数が使えない
  - CSAVE文で、ファイルネーム部分とプログラム部分の間のショートヘッダ(0.5秒間のピー音)が出力されない
  - 環境によってはCSAVE中のSTOPが正常に動作しない
  - PAINT文で境界色を省略した時の挙動が異なる
  - CONSOLE0,1,1としてスクリーンモードを変えると表示が変になる
  - スクリーンモード3または4でのCLS文及び1DFBhコールで、アトリビュートもクリアしてしまう
  - エミュレータによってはRESTORE無しのREAD文がエラーになる
  - RND()が返す最小の数がN60-BASICより大きい
  - ガベージコレクションが起きた時の文字列領域解放が不完全
  - CHR$(&H14)出力の直後に改行が行われる場合の挙動が異なる場合がある
  - 「1(2)」のような表現があると2と解釈される
  - DELを押した時に、行末の字が残る
  - スクリーンモード2でCtrl-U/Ctrl-Eを押した時に、同行内のセミグラフィック部分が正しく消去されない
  - キーバッファがいっぱいだとCtrl-CでSTOPがかからない

## 2014.5.21

Ver.0.3.3公開。

- MID$の第3パラメータが省略された時に暴走する不具合を修正。(MORIYAさん、ありがとうございます)

## 2014.5.20

Ver.0.3.2公開。

- グラフィック文字が入力できるように見えて実はできない不具合を修正。
- PLAY文のNコマンドが正しく動かない不具合を修正。
- LETコマンドが使えない不具合を修正。

## 2014.5.19

Ver.0.3.1公開。

- グラフィック文字が入力できない不具合を修正。

## 2014.5.18

Ver.0.3公開。

- スクリーンエディタ実装。
- 対応ROM内ルーチンが増えました。(0010h, 11B8h, 11DAh, 1260h, 12A9h, 1DBBh, 2576h, 2583h, 26C7h)
- 同梱のbdf2cgromに-asciiオプションを追加。
- バグを修正。
  - PAGEキーでグラフィック画面を表示している時にSTOPキーを押してもテキスト画面に戻らない
  - P6T形式のファイルでオートスタートが効かない場合がある
  - プロンプトを表示するINPUT文で?Redo from startになると入力後エラーになる
  - INPUT文で入力した文字列の頭とお尻のスペースがカットされない
  - ファンクションキーをセットした時、後ろにゴミが付く場合がある
  - 何かの値の後にすぐ続けて関数があると、前の値が無視される
  - CONSOLE範囲外でのPRINT CHR$(&H1E);及びPRINT CHR$(&H1F);の挙動が違う (Ver.0.2で直したつもりが不完全だった)
  - 行番号、How Many Pages?、PLAY文のMパラメータで、65536〜65539が0〜3とみなされる
  - CONTした時、元のページに戻らない
  - PRINT CHR$(10);で行頭に戻ってしまう
  - CONSOLE実行直後にスクロール範囲より下でもカーソル位置がそのまま
  - キー入力ルーチン (0FBCh, 103Ah) でSTOPやESCが取得できない
  - KEY 0,"..."がエラーにならない
  - CONTに対する動作がいろいろおかしい場合がある
  - PRINT SPC(0)で空白が256個出力される
  - スクリーンモード3または4でスクロール範囲を1行にしてスクロールさせるとおかしくなる
  - SQR()の結果が間違っている
  - テキスト画面のLCOPYがおかしい
  - たまにカーソル表示が画面に残る
  - PRINT/INPUTで#の後のデバイス番号判定が不完全
  - スクリーンモード3のPRINTでコンマを使った時の表示位置が間違っている
  - サイズの異なる文字列同士の比較が正しくない場合がある
  - 文字列と数字の大小比較がエラーにならない
  - PAINTの塗り方が正しくない (fuzzballさん、ありがとうございます)
  - CLOADで実際より短いファイル名を指定した時にもFoundになる
  - DIM A(-1)などとすると暴走する
  - END文のたびにスタックを消費する
  - IF...GOTOの後が数字でなくコマンドだった場合にエラーになる
  - DATA...:コマンド と打ち込んだ場合の中間言語変換がおかしい
  - DATA"...":がREADで読めない
  - PRINT#-1によるテープ出力で、最後の改行が出力されない

## 2014.2.23

Ver.0.2公開。

- ダイレクトコマンドモード、プログラム入力機能実装。ただしラインエディタです。
- PLAY、LIST、LLISTを実装。これでとりあえず全コマンド実装。
- スクリーン3、4のLINE BFが実用的な速度になりました。
- エミュレータのパッチ機能が有効のままでも動くようにしました。パッチされるアドレスは使用せず。(PC6001V/VW/VX=1CB4h-1CB5h iP6plus=10EAh)
- 対応ROM内ルーチンが増えました。(0020h, 0F74h, 116Dh, 14A0h, 1B60h, 1BB3h, 1BC5h, 1CA6h, 1DFBh, 1EB3h, 254Eh)
- エラーの判定条件がN60-BASICに少し近付きました。
- バグを修正。
  - How Many Pages?時やINPUT文でキー入力が変な時がある (Hashiさん、ありがとうございます)
  - BASICの後ろにマシン語データが付加されている場合、変数を使用するとデータが破壊される (MORIYAさん、ありがとうございます)
  - PC6001VWでINPUT文が正常に動かないことがある
  - KEY文で空文字列がセットできない
  - スクリーンモード2のCOLOR文の挙動が少し違う
  - CONSOLE範囲外でのPRINT CHR$(&H1E)及びPRINT CHR$(&H1F)の挙動が違う
  - LOG(X)が0<X<=1でおかしい
  - 10 RUNのようなプログラムを実行すると、スタックを食い潰した末にプログラムを破壊してしまう
  - How Many Pages?でスペースを先頭に入れるとエラーになる
  - GOTOなどで65530〜65535行を指定できてしまう
  - LPOS()の括弧内が数値や文字列以外でもエラーにならない
  - LOCATEで範囲外を指定した時の挙動がおかしい場合がある
  - STICK()とSTRIG()で引数範囲の判定がおかしい
  - 関数の左括弧の前にスペースが入るとエラーになってしまう
  - -65535が1と同じ扱いになるべきでない命令で同じになっている
  - 1ページ目をスクリーンモード3や4にできてしまう
  - PAINTの塗り方が正しくない

## 2014.1.12

Ver.0.1公開。

- ダイレクトコマンドモードとプログラム入力機能無し
- テープ起動のみ (勝手にCLOAD+RUN実行)
- PLAY,LIST,LLIST未実装