X-BASIC for iOS Q&A
Q.問い A.答え
V3.00で遅くなった気がします。 確かに遅くなりました。特に64ビット環境で遅さが困りものです。 プログラムでウエイトを入れている場合、減らす必要があるかもしれません。 原因は色々考えられますが、64ビット対応でメモリアクセスに更に高い負荷がかかるようになったことと、 iOS自体も遅くなったから、と思われます。 現状、解決策がありません。 スプライトが遅いのは単純に技量不足であり、別問題ですm(_ _)m
スプライトが遅い これはもう技量不足としか言いようがありませんm(_ _)m。 追加費用なしにしたのでご勘弁いただきたいと。
現在のスプライトは100%自作で、純然にソフトウエア的に実現しています。 X68000のスプライトの仕様は簡単そうで実は結構難しく、特に各スプライトごとに BGとの重ね合わせの優先順位が設定できる部分が難関でした。 でも、BGなしにしてもすごく遅いので、どこかに速度ネックがあると思われますが、解っていません。
iOSのスプライトを使えば速くなるでしょう。しかしそれを行うための時間と何よりも気力が足りません。
どのくらいのサイズまでのプログラムが作成可能ですか ソースは64KBまでです。配列のサイズは32ビットで管理しています(64ビット版でも)。 変数や配列は、グローバル・ローカル別に32K-1個まで登録できます(事実上無制限のはず)。 行数は(理論上)65533行までいけます。
iPhone/iPod touchの横画面で検索時にスクロール領域がほとんど取れないのですが。 これはデバイスの制約なので仕方ないです。
ヘルプ内の検索をエディター内のそれと同じに出来ませんか。 ヘルプ内検索は実はJavaScriptで実装されており、使える機能が全く違うため同じに出来ませんでした。 特に、検索で見つかった最初の位置にスクロールさせることは実現したかったのですが、 その命令を発行しているはずなのになぜかうまく動かないので今回は見送りました。
モーション系関数のサンプリングレートはどのくらいですか? 100ms固定です。
なお、方位取得は変更時即時なので、サンプリングレート設定はありません。
「最終行へ」を押したとき、最終行からちょっとずれている気がするのですが。 その通りです。が、iOSのバグのような気がしてます。現在のところ対策方法が見つかってません。
input/linput/inputWithPlaceholder()/selectMenu()/SelectMenu2()実行中にを押しても プログラムが止まりません。 これは仕様です。
input系は、iOSの仕様により、入力待ちから強制的に抜けると異常になるため、止めることができません。
それらの実行中にを押した場合、入力後にプログラムが停止します。
selectMenu()中はそもそもが押せません。
selectMenu2()ではキャンセル扱いになり、リターン値として帰ってきます。
selectMenu系の表示位置を変更できませんか? iOSで自動設定されるので、変更できないです。
正常に表示されないPICファイルがある。 いろいろなPICファイルを調べていると、どうも、Oh!X 1990年2月号に載っていたCで書かれたPICのサンプルソースの 仕様に合致していないデータを持つファイルが存在するようです(色数ではなく、データの格納され方がおかしい)。
たとえば、電脳倶楽部146号に掲載された、HIOTOKO.PICという画像がそれにあたります。 これはAPICG.rでは表示できますが、PIC.Rでは一応表示はできますがエラーが発生します。
原因を調べて対応しようかとも思いましたが、よくわからなかったのと、本来出力側の問題なので、止めました。
HIOTOKO.PICも、表示した後PIC.R /s または APICG.r /sで出力し直せば、正常に表示されるファイルになります。 IKPICなどで出力されたファイルなのだろうか・・・。
256色PICを表示できないか 256色PICは、ヘッダー情報はわかっても手元に実データが見つからず、APICGなどで無理矢理作ってまでサポートするのも面倒なので、 技術的の可不可はともかく、「時間をかけて実装するに値しない」と判断しました。 よほど要望が強ければ考えます。そのときはデータもくださいm(__)m。 でも、MAGで256色対応したので勘弁していただけるとありがたいかと。
MAKIファイル、200ライン画像、および16/256色アナログ以外のMAGファイルが表示できないのはなぜですか? 「データがない」が主な理由です。
MAG/MAKIファイルはかつて大量に持ってましたが、それを入れたMOやHDDがもう読めないので、 手元にかろうじて残っていた16色/256色アナログのMAGファイルのみサポートしました。
処理はフォーマット開発者Woody RINNさんの書いた「まぐろーだー仕様書・非売品」を基に一から起こしました(256色に関しては資料が記述不足で、どえらくデバッグに時間がかかりましたが)。 データをいただければ、MAKIや200ライン画像には対応するかもしれません。
これでPIC/MAG共に表示できるようになりましたが、残念ながら画面サイズを超える画像をスクロールや縮小して全体表示することは現状出来ません。 ビットマップ上には全体が格納されているので、表示処理だけ作れば良いのですが、 時間&気力不足です。
circleX68()/circle16X68()の扁平率の挙動が違う 横方向の扁平率は同じですが、縦方向は同じにしきれませんでした。 graph.fncをdisったりLIB-Cのソースも見ましたが、 処理の実態がIOCS内にあるのでフローがわかりません。 実行結果から推測した処理を実装していますが、すべての値範囲(256~65535)では同じに出来ませんでした。 特にiOSの楕円処理への変換処理の精度の問題もあり、おおよそ4096以上では一致しません。 フローをご存知のかた、お教え下さい。
なぜBASICプログラムのインポート機能がない、もしくは廃止されたのですか? アップルの審査で拒絶されたからです。 アップルは、BASICのソースも含め、いかなる形式の実行ファイルもインポートを許さない方針のようです(データは可能)。 BASICソースなんて、アプリの上でしか動かないスクリプトのようなものなのになぁ。
「何とかならないか」ということに対する答えは、サポートブログ(更新終了)の中にあります。 アップルにバレたら困るのでここでは詳しく書きません。


X-BASIC for iOS v3.00での注意点
X-BASIC for iOS v3.00ではいくつかの点が従来バージョンから変更になっています。
  1. 設定の最大文字列長の値が変更になっていますが、これは解釈仕方を変えただけで実質は変わりありません。
  2. テキスト文字の表示処理が変わっています。 表示結果が異なる場合もあるので確認してください。
  3. X68互換関数などが実装されたため、既存プログラムで関数名などが重複してしまう時は
    設定で「X68互換関数」を「オフ」にしてみてください。
  4. プログラムリストの並びが、ユーザ作成分で英大文字小文字区別あり~内蔵で英大文字小文字区別ありだったのが、
    すべて込みで英大文字小文字区別なし、ユーザー作成と内蔵で同名がある時はユーザー分優先と変わりました。
  5. randomise()を廃止
    そもそも綴り間違いの関数だったのでこの機会に廃止しました。 randomize()に書き換えてください。
以下はごめんなさいです。
  • 手元には64ビットの実機がありません。iPhone6や同plusもありません。なので、テストはシミュレーター上でしか行えていません。
    実機上で不具合が出るという方は、できるだけ詳細な情報とともにお知らせください。
  • エラー発生時、最初のエラー位置を表示するようエディターを自動でスクロールしますが、
    長いソースの場合、自動でスクロールしきれない事があります。これはiOSのバグです。
    エラー行を再度タップすればそこへスクロールします。


  • X-BASIC for iOS 既知の問題
    X-BASIC for iOS V3.10までの既知の問題は、以下の通りです。
    1. テキスト表示文字が小さくなりすぎる
    2. forに対応するnextが存在しないままプログラムが終わっていると、落ちる
    3. whileに対応するendwhileが存在しないままプログラムが終わっていると、落ちる
    4. repeatに対応するuntilが存在しないままプログラムが終わっていると、落ちる
    5. switchに対応するendswitchが存在しないままプログラムが終わっていると、落ちる
    6. funcに対応する endfuncが存在しないままプログラムが終わっていると、落ちる
    7. enum/fenum対応する endenumが存在しないままプログラムが終わっていると、落ちる
    8. 10次元配列を宣言するとシステムエラーが発生する
    9. 新規作成からファイルを保存しようとすると、ファイル名入力欄に「.!」と表示されている
    10. cardInit()でカードパターンファイル名がSHIFT-JISに対応してない
    11. 行番号付きプログラムが正しく読めない
    12. 設定の旧表示互換がONにならない
    13. プログラムソースの1文字目がサロゲートペア文字の場合、フォント選択画面で文字が表示されない
    14. symbolt()でサロゲートペア文字を含めた時、正しく表示されない
    15. 一部外部関数で、実行時エラーが発生しているはずなのに無視されてしまう
    16. テキスト文字が小さくなりすぎることがある
    17. beep2()のfloadonlyが無効だった
    18. removeTouchArea()してもタッチエリアが開放されたように見えない(もしくはタイミングがずれて開放されるようにみえる)
    19. bitmapImgLoad()/bitmapTileImgLoad()に引数指定時の動作がおかしい
    20. print 整数数字時の前のスペースの入り方が/68と異なる
    21. print "〜"; // とすると表示後改行が入ってしまう
    22. 最終桁で全角文字を表示するとき、先に改行されない
    23. スプライト関数が無効の時、互換関数内のスプライト関係関数を呼び出すと異常になる
    24. ファンクションキーの表示座標が実はおかしい
    25. bitmapOpen()で落ちることがある
    26. 全くの初回起動時、V3.0以降のSETUP分が初期化されない
    27. zipExpand()で、Windows環境下で作られたZip内の日本語ファイル名ファイルが展開できない
    28. jpegHeader()/pngHeader()の返す情報がおかしいことがある
    29. motionGetRotation()/compassGetData()/symbol(,ht)/fontSize(,wy)/getWidth(,fontWx,fontWy)でfloat変数に値を返すときに落ちることがある
    30. モーション関数を使った後にメモリが確保されたままになっている
    31. motionEnd()を呼び出さないでendするとモーション機能が動いたままになってしまう
    32. emailSend()でzip圧縮した時のファイル作成日時がおかしい
    33. str$(正の数字)で前にスペースが入る
    34. 同一グラフィックページに対するbitmapImgLoad()を短期間に呼び出すと、描画が遅れるまたは欠けることがある
    最後の1つ以外はV3.40で解決されました。

    また、以下は仕様です。
    1. 内部関数で配列を引数にする時、そのサイズ指定にenum定数を使えない
      「例」func f(masu(WW,WW);int):// エラー発生
    2. enumの値を式を使って記述するとき、一部演算子を2つ以上連続で使っているとエラーになる
      enum  C=1+2+4     OK
       D=1 or 2 and 4  エラーが発生する
       E=(1 or 2) and 4 OK
      endenum
    1は以下の理由に依ります。
    1. 内部関数の名前と引数の登録は、コンパイルの前処理で行われている
    2. enum定数の決定はコンパイル中に行われる
    3. このため、内部関数定義中は定数が未定
    これを解決するのは極めて難しく、使われる頻度と実装やデバッグの労力を考えた結果、 「仕様として制限する」ことにしました。
    あしからず、ご了承ください。

    2は、一部演算子は中間段階で整数化する処理を行い、その時に整数化の処理を追加する=一時的に定数でない式ができるので この現象が発生します。 enum内は定数式以外を許さないからです。 2項だと計算が終了して定数に戻されるのですが、連続する場合は否定数値を残したまま次の計算に移るためエラーになります。 この修正には中間コードの生成方法を変更する必要があり、簡単な修正では回避できないと判明したので、仕様とします。 enum内の式記述では、1演算子ごとに()でくくってください。


    X-BASIC for iOSで使っている主な技術

    <戻る>