2013年4月23日火曜日

X-BASIC for iOSのX-BASIC/68との互換性について

X-BASIC for iOSは基本的に「SHARP X68000のX-BASIC v2.0」(以下X-BASIC/68) および「ぺけ-BASIC v0.2」と互換性を持っています。
プログラムもSHIFT-JISのまま読み込むことが出来ます。

主な違いは以下の通りです。
for iOS X-BASIC/68 ぺけ-BASIC
行番号 ×(自動削除)
gosub × ×
goto行番号 ×
goto "ラベル" 常時○ × 設定で○
goto *ラベル × × 設定で○
戻り値のないreturnで()の省略 ×
エディタ 内蔵 内蔵 なし(呼び出し可)
コマンド なし(一部関数化)あり なし
ダイレクト実行 不可 不可
?(print省略形) ×
その他省略形 × ×
文字列長 設定で変更可 任意に設定可 255バイト固定
配列次元 10次元 255次元 10次元
配列要素上限 OS状態による FREE設定まで OS上限まで
宣言なしint変数標準ではエラー 警告
dimなし配列 標準ではエラー 警告
表示コントロールコードCTRL-G/CTRL-J以外ありあり 一部あり
多バイト文字の
バイト単位出力による表示
×
chars2Sjis()/chars2UTF8()で処理可能
可変長配列 常時○ なし 設定で○
配列引数 常時○ なし 設定で○
using指定 文字列定数のみ 変数も可文字列定数のみ
using ! 1文字 1バイト 1バイト
using "%" 不足桁を0で埋める%が表示される %が表示される
e表現float
(>3e10,4E-10など)
×(バグ)
単項演算子の連続
(-notなど)
×(バグ)
起動時引数 なし なし 設定で○
startup.bas
(自動実行ファイル)
あり なし なし
変数の初期化 常時 常時 設定でなし
エラー停止 コンパイル時は全体
実行時発生行
実行時発生行 コンパイル時発生行
実行時発生行
date$/time$ 代入不可 代入可 代入可
inkey$ あり
ただしタッチまたはファンクションキー設定が必須
あり あり
外部関数互換性 機種依存分以外 あり あり
マルチステートメント 可(省略不可)
//コメント × ×
空行 ×
ファイルエンド サイズ/&h1a &h1a必須 サイズ/&h1a
文字コード UTF-8/SHIFT-JISSHIFT-JIS SHIFT-JIS
変数宣言時代入 制約なし 定数式のみ 制約なし
.cnf設定 一部SETUP あり 拡張あり
マルチステートメントについてはわかりにくいので補足しておきます。
X-BASICでは ':' で区切ることでマルチステートメントを書けますが、X-BASIC/68ではその後の文を省略できません(存在しないとエラーになる)。iOS版及びぺけ-BASICでは省略できます。
この差は特にcase文で顕著になります。
case 1:    X-BASIC/68ではエラーになるのでcase 1と記述しなければならない


オーバーフローチェック
for iOSX-BASIC/68 ぺけ-BASIC補足
charで255+1 0 エラー 0 8ビットオーバーフロー
0-1 255 エラー 255 8ビットアンダーフロー
dim a(65536) dim a(0)相当 エラー dim a(0)相当配列要素数は16ビットで管理されているから

また、ハードやOSの違い等により、以下の項目の取り得る値や規則が異なります。
  • テキスト座標
  • グラフィック座標(float)
  • スプライト枚数(定義/表示)、座標
  • 色コード
  • ファイル名規則
  • メモリの格納順はL→H(リトルエンディアン)
一部はX-BASIC/68→X-BASIC for iOS変換関数が存在します。

さらに、ほぼ同じ動きを目指した関数でも、iOSとX68実機の動作の違いにより、結果が微妙に異なる場合があります。特にグラフィック系は、iOSは基本的にアンチエイリアスと合成描画を基本としているため、描画結果がX68と異なる場合が多々あります。さらに、テキスト画面の座標とグラフィック画面の位置関係がX68とは異なります。

0 件のコメント:

コメントを投稿