はじめに

BASIC でレトロゲームをプログラム

仮想ゲームコンソールであなただけのレトロゲームを作ってみよう。プログラムは古典 BASIC 言語で、スプライト、タイルマップ、サウンドとミュージックは付属ツールで作成します。初心者さんはシンプルなテキストゲームの開発方法やスプライトをタイルマップに初めて表示する方法をすぐに理解できるようになります。老練なるプログラマはレトロハードウェアの魔術的潜在能力を完全に引き出せます!

仮想ゲームコンソール

LowRes NX は引き出し可能なタッチスクーンの下部に小型キーボード (キートップはゴム成形)、十字キーと二個の操作ボタンを搭載した携帯型ゲームコンソールであると考えてください。LowRes NX は実在の 8 bit と 16 bit システムに影響を受けているため、グラフィックス、サウンドと I/O チップを疑似処理します。これにより、実在する古典的なハードウェアと同じように動作します。ハードウェア実装のパララックス・スクロールと同様にハードウェア実装のスプライトをサポートしており、さらに垂直帰線消去 (Vertical Blank, V-Blank, VBL) とラスター割り込み機能などによる本物のレトロエフェクトを扱えます。

古き良き時代のプログラミング

LowRes NX のプログラミング言語は第二世代の構造化 BASIC をお手本にしたものです。古典的なコマンドはすべて使えますが、行番号はありません。その代わり、ラベル、ループとサブプログラムに対応しています。グラフィックスとサウンドは拡張コマンドでサポートしています。さらに PEEK と POKE で仮想ハードウェアへ直接アクセスすることもできます。プログラムの流れに関する完全な制御ができるため、標準的な更新処理関数の実装は不要です。

想像力を掻き立てるツール

LowRes NX には開発に必要なツールがすべて付属しています。Gfx Designer (グラフィックスデザイナー) でスプライト、タイル、フォントとマップの編集を行います。また、 Sound Composer (サウンドコンポーザー) ではミュージックとサウンドの編集を行います。付属のツール全体は BASIC プログラムとして記述されています。変更や改良をするだけでなく、独自のカスタムエディタを開発することも可能です。

みんなで遊ぼう

仲間にゲームをそのまま送付したり、ウェブサイトで共有してみましょう。プログラム全体はオープンソースであるため、遊ぶ、学ぶ、だけでなく編集ができます。アートやミュージックを作るほうがお好きですか? アセットとして創作物を共有することで、ほかのプログラマがプロジェクトで創作物を使えるようになります。

基本仕様

目次

はじめよう

LowRes NX でデキることを確かめるには付属プログラムを試してみてください。アクションゲーム LowRes Galaxy 2、テキストアドベンチャー LowRes Adventure、そしてデモ Star Scroller を試してみてください。

"My Programs" スクリーンからソースコードエディタで編集するプログラムを選択します。続けて Play ボタンをタップすると実行します。
用例は "programs" フォルダにあります。LowRes NX アプリケーションを開いた後に表示されるウィンドウへ .nx ファイルをドロップします。.nx ファイルを開くデフォルトのアプリケーションとして LowRes NX を選択可能です。その場合は、プログラムをダブルクリックするだけで起動できるようになります。

思う存分遊び終えたら、はじめてのプログラムを作成してみましょう。

"My Programs" (わたしのプログラム) スクリーンでプラス (+) ボタンをタップすると新しいプログラムを作成します。ソースコードを開くためにテキストエディタを選択します。
新しいファイルを作成するためにお好みのテキストエディタが使えます。Windows において、お使いのテキストエディタが Mac/Linux の改行コードをサポートしているか確認してください。サポートしてなければ、改行が無視されてしまい、すべての行が一行につながった状態で表示されてしまいます。

以下のプログラムを入力します。

PRINT "ようこそ!"
PRINT "あなたの名前は?"
INPUT ">";N$
PRINT "こんにちわ ";N$;"!"
わかりやすい名前と拡張子 ".nx" を付けたプログラムのファイルを保存してください。

このプログラムを実行します。こちらはキーボードを用いた簡単な用例です。ゲームパッドでなにかしてみましょう。もうひとつプログラムを新規作成します。以下を入力します。

GAMEPAD 1
X=76
Y=60
DO
  IF UP(0) THEN Y=Y-1
  IF DOWN(0) THEN Y=Y+1
  IF LEFT(0) THEN X=X-1
  IF RIGHT(0) THEN X=X+1
  SPRITE 0,X,Y,225
  WAIT VBL
LOOP

このプログラムを実行するとゲームパッドで移動できる "A" の文字がスクリーンに表示されます。

プログラムの実行中に、右上にあるメニューボタンをタップして "Capture Program Icon" (プログラムのアイコンを取得) を選択します。これでプログラムは終了します。その後 "My Programs" スクリーンに復帰します。ここでプログラムが新しいイメージで表示されます。アイコンを長めにタップして "Rename..." を選択するとわかりやすい名前を付けることができます。

編集

プログラムとデータ

プログラムファイルは完全なゲーム、またはアプリケーション本体であり、関連データ一式も含めた通常のテキスト形式で構成されます。最初の部分は BASIC ソースコードです。詳しい解説はプログラミングの章をお読みください。

第二の部分はカートリッジ ROM エントリです。これらはあらゆる種類のデータを保存できる最大 16 枚の番号付きデータブロックです。例えば、グラフィックス、レベルマップ、ミュージックなどです。プログラムの実行中、 ROM エントリ全体はメモリの先頭 32KB にアクセス可能です。

ツールを使うと手軽に ROM エントリの作成と編集ができます。ツールは標準的な NX プログラムですが、データの編集に特化して作成されています。NX ファイルは「仮想ディスク」としてアクセス可能であり、その ROM エントリはファイルのように扱えます。

ツールには二通りの使いかたがあります。

早速試してみましょう。移動できる "A" ("はじめよう" の章に掲載) のプログラムを開き、 Tools メニューから "Gfx Designer" を選択します。

プログラムを開いた後に、 Tools ボタンをタップしてからツールを選択します。
プログラムの実行中に Escape キーを押すと開発者メニューに移動します。その後、 Edit (ED) を押してからツールを選択します。デフォルトの Tools メニューはなにも登録されていないため、 "Gfx Designer" と "Sound Designer" プログラムを LowRes NX のウィンドウへドラッグ・アンド・ドロップします。

キャラクタ #1 番 (#0 番は未使用のままにしてください) に何か描いた後、 "File" をタップしてファイル 2 ("主人公") としてセーブしてください。さて、ソースコードエディタに戻るとプログラムの下部に十六進数データが表示されていると思います。これがイメージ (画像) です!確認するには、以下の行を

SPRITE 0,X,Y,225

へ変更してから

SPRITE 0,X,Y,1

プログラムを実行します。見ての通りです! 

LowRes NX アプリケーションで Ctrl+R を押すと現在のプログラムを再ロード後に実行します。これは開発者メニューの Run ボタンと同じ動作です。

付属のツールは自動的にセーブしないことに留意してください。したがって、必要であれば終了前に必ずセーブすることを習慣にしてください。

標準 ROM エントリ

始めやすくするために以下のテーブルに記載されている ROM エントリ番号をお使いください。関連データを使用するために ROM エントリは自動的に準備します。

#0デフォルトのフォントでは空のままにします
#1カラーパレット
#2キャラクタ (スプライト、タイル)
#3背景 (タイルマップ)
#15サウンドとミュージック

カートリッジの ROM エントリ 0 番はプログラムで使いません。この領域にはコンパイラがキャラクタデータからデフォルトのフォントを追加します。この領域は 192 ~ 255 のキャラクタで使用します。また、プログラムの開始時にビデオ RAM へ自動的にコピーされます。デフォルトのフォントを使う場合は、 ROM エントリ 0 番は未使用のままにしておいてください。

グラフィックスデザイナー

グラフィックスデザイナーはキャラクタ (スプライト、タイル、フォント)、背景のデザイン (タイルマップ、スクリーンレイアウト) およびカラーパレットの編集で使います。

右下には異なる役割を持つ三種類のタブがあります: キャラクタエディタ、パレットエディタ、および背景エディタです。LowRes NX をコンピュータで実行する場合は 1 (キャラクタ), 2 (パレット) と 3 (背景) キーでタブを切り替えられます。

グラフィックデザイナーはメインパレット (ファイル 1)、キャラクタ (ファイル 2)、および背景 (ファイル 3) をロードしますが、自動的にセーブしないことに留意してください。

キャラクタエディタ

下部の領域には 256 キャラクタを 4 ページで分割したものが表示されます。この表示領域で現在の編集対象を選択します。デフォルトのフォントを使うならば、最終ページは空のままにします。また、キャラクタ #0 番は無垢の背景として使われるため未使用のままにしてください。

左上の領域には選択したカラーで現在のキャラクタを描画します。

FILEキャラクタのファイルメニューへ移動します。
MOV現在のキャラクタに関するピクセルを移動します。
16*1616x16 ピクセル編集スクリーンへ移動します。
FLIP現在のキャラクタを水平、または垂直方向へ反転します。
SPIN現在のキャラクタを回転します。
CLR選択したカラーで現在のキャラクタを消去します。
CUT現在のキャラクタをコピーと消去します。
COP現在のキャラクタをコピーします。
PASコピーしたキャラクタを貼り付けます。
SEL選択範囲のサイズを変更します。

サイズの選択は、背景エディタの描画も含む、このスクリーンにある編集ツール全体の動作に影響します。

パレットエディタ

後半部分はキャラタエディタと全く同じです。

現在のカラーパレットは左枠から選択します。

右枠にある RGB スライダーで現在のパレットにある各カラーの編集ができます。スクリーンの背景カラーとして使われるパレット 0 番にある最初のカラーを除き、通常時において最初のカラーは透明色であるため未使用です。

FILEパレットのファイルメニューへ移動します。

背景エディタ

こちらのエディタでは現在選択されているキャラクタとカラーパレットを用いて専用スクリーンへ背景を描画します。

FILE背景のファイルメニューへ移動します。
Pan可視状態のマップ領域をドラッグします。
Draw現在のモードで描画します
Erase属性も併せてセルを消去します。
FLIPX/Y 軸における反転属性を切り替えます。
PRI優先度の属性を切り替えます。

LowRes NX をコンピュータで実行する場合は、矢印、または WASD キーでマップをスクロールできます。Z, X, C, V と B キーでツールを選択します。

描画ツールには様々なモードがあります。ツールの選択後に、ボタンを再タップすることで、モードを変更可能です。

Drawセル単体を編集します。
Fillドラッグにより領域を編集します。
Character選択した反転と優先度の属性を用いて、選択したキャラクタとカラーパレットで描画します。
Paletteカラーパレットのみ変更します。
Priority優先度のみ変更します。優先度 1 のセルは緑色、それ以外はすべて赤色で表示されます。
Stampドラックで領域を選択したものを描画します (コピーと貼り付け)。

File メニュー

このメニューから個別にキャラクタ、カラーパレット、および背景のロードとセーブをします。データ全体を一括セーブするオプションは用意されていません。

現在の仮想ディスクに存在する全 15 ファイル、あるいは言い換えると編集中のプログラムに関する ROM エントリをリスト表示します。対象の選択後に Load または Save をタップします。

キャラクタ

NEWすべてのキャラクタを消去します。
FON現在のページへ標準フォントをコピーします。
PAG選択したファイルから現在のページへ 1 ページだけロードします。別のファイルからフォントを取り込むときに便利です。例えば、

パレット

NEWデフォルトカラーへリセットします。

背景

NEW背景を完全に消去します (サイズはそのままです)。
SIZESIZE メニューでは、セルの寸法 (8x8 または 16x16 ピクセル) も含む、背景の幅と高さ (セル単位) を選択します。

サウンドコンポーザー

Sound Composer はサウンドプリセット、シーケンス ("トラック") および完成版のソングを作成します。

なお、起動時にメインサウンドデータ (ファイル 15 番) をロードしますが、自動的にセーブしないことに留意してください。サウンドファイルにはすべてのサウンドとミュージックデータが収録されています。

サウンドファイルの構造

16 サウンド

サウンドには利用可能なサウンドパラメータ全般 (波形、エンベロープ、 LFO など) をプリセットします。サウンドはプログラムの PLAY コマンド、またはトラックやソングのインスツルメントとしてそのまま使用可能です。

64 トラック

トラックはシングルボイスで使う 32 ステップのシーケンスです。ステップごとに音符の再生やサウンドの変更が可能です。これは TRACK コマンドによりプログラムで複雑な効果音 (例えばレベルアップ) や短いメロディーで使えます。トラックはソングの作成でも使われます。

64 パターン

パターンはミュージックのブロックであり、 4 ボイスごとにどのトラックを割り当てて演奏するか定義します。以下の場合を除き、パターンは連続的に再生されます: 後続するパターンが空ならばソングの再生は停止します。現在のパターンの完了後に "loop end" (ループ終了) フラグが見つかれば、プレイヤーは "loop start" (ループ開始) フラグのある以前のパターンへ戻るために移動します。パターンの完了後に "stop" (停止) フラグが見つかれば、プレイヤーの再生は停止します。
ゲームで使うミュージックを作曲したい、あるいは効果音を追加することを考えているのであれば、最低でも 1 ボイスは未使用のままにしてください。

ソング

64 パターンは長めの単独ソング、または複数の短いソングで使えます。"loop" と "stop" フラグを使うことでソングを分割できます。指定のソングを再生するには、最初のパターンから開始してください。プログラムでソングを再生するには MUSIC コマンドを使います。

エディタ

Sound Composer の右上角には異なる役割を持つ三種類のタブがあります: パターンエディタ、トラックエディタ、およびサウンドエディタです。これは「トラッカー」スタイルのプログラムです。つまり、タイムラインは左側から右側ではなく、上側から下側へ進行します。つまり、トラックに内在するステップは列 (rows) とも呼ばれます。通常の値は 0 ~ 15 までの範囲を十六進数形式 (0-F) で表したものです。

LowRes NX をコンピュータで実行する場合は、キーボードをサポートします: 矢印キーはカーソルの移動、キーの横列は 2 オクターブの鍵盤楽器に見立てたものであり音符を入力するために使います。Enter キーは休符の入力、Backspace キーは現在の音符を削除、および Space キーは再生 (パターン、トラック) と停止を切り換えます。

パターンエディタ

こちらのスクリーンではパターンの選択、ボイスを割り当てるトラック全体の選択、および選択したトラックごとに音符をそのまま編集できます。また、現在のパターンに関する "loop" と "stop" フラグを切り換えるためのボタンもあります。トラックを指定せずにボイスに音符を書き込むと、自動的に未使用のトラックを選択します。トラックの音符を停止・減衰したければ、鍵盤楽器部分にある星印をお使いください。

トラックエディタ

こちらのスクリーンではトラックを選択して追加パラメータを編集できます。

Sサウンド
V音量
Cサウンドコマンド
Pパラメータ

サウンドエディタ

ここではサウンドの定義とテストを行います。現在選択中のサウンドは、ほかのエディタでは新しい音符で使われます。

サウンドコマンド

以下のコマンドは再生中におけるパラメータの動的変更が可能です。以下はトラックエディタで使用できるコマンドです。

CP用途
00コマンドなし
0x定位 (1=左側, 2=右側, 3=中央・両側)
1xアタックタイム
2xディケイタイム
3xサステインレベル
4xリリースタイム
5xLFO レート
6xLFO 周波数量
7xLFO 音量
8xLFO パルス振幅
9xパルス幅
Dx減速 (E と同じですが、 +16 になります)
Ex再生速度 (列あたりのティックであり、デフォルトは 8 です)
F0トラック、パターンの分割
F1音符の分割・音量 0

言語仕様

LowRes NX のプログラミング言語は第二世代の構造化 BASIC をお手本にしたものです (1985 年風)。

この取扱説明書は、以前にプログラミングの経験がある方々向けのリファレンスとして想定してあります。プログラミング初心者さんは、 LowRes NX ウェブサイトの入門記事を読了後に、この取扱説明書の詳細情報を確認してください。

型と変数

値の型として利用できるものは文字列と数値 (浮動小数点数) です。

変数名には、文字 (A-Z)、および数字、アンダースコア (_) を使えますが、先頭は数字で書き始めることはできません。予約語 (コマンド、関数) は変数名として使えませんが、変数名の一部として使うことはできます。予約語のリストは "予約語" の章に掲載してあります。

有効な変数名の用例:

X
A1
LONG_VARIABLE_NAME
PRINTER

無効な変数名の用例:

2B
PRINT

文字列変数名の末尾には $ 記号を付けます。例えば、

A$
NAME$

変数は明示的に宣言しないものの、読み取り前に値を代入して初期化する必要があります。変数へ値を代入するには等号記号を使います。

NAME$="LOWRES NX"
LIVES=3

十六進数と二進数表記は数値で使われます。

$FF02
%11001011

配列

DIM

DIM [GLOBAL] 変数リスト

次元ごとに最上位インデックスから成る配列を定義します。

DIM A(100)
DIM MAP(31,23,1),NAMES$(9),SCORES(9)

配列から要素にアクセスする場合、インデックスは 0 が起点となります。

DIM SCORES(9)
SCORES(0)=100
SCORES(9)=5
PRINT SCORES(0),SCORES(9)

配列の要素全体はゼロ (0)、または空文字 ("") で自動的に初期化されます。

オプションの GLOBAL キーワードを指定した配列はサブプログラム全体からアクセス可能になります。

=UBOUND

UBOUND(var[,dimension])

配列 var における次元数の上限 (最上位のインデックス) を返します。

dimension パラメータは多次元配列のとき、配列の次元を指定するためにオプションの数値として使われます。 デフォルト値は 1 です。

DIM SCORES(9)
FOR I=0 TO UBOUND(SCORES)
  PRINT SCORES(I)
NEXT I

ラベル

ラベルはプログラム内の任意位置に目印をつけるものであり、 GOTO などでのコマンドで使われます。ラベルの構成は、変数と同じ規則を用いており、名前の後に続けてコロンを記述します。

TESTLABEL:

演算子

算術演算子

記号 用例 用途
- -B 負数
^ X^3 指数
* 2*Y 乗算
/ X/2 除算
\ X\2 整数の除算
+ C+2 加算
- 100-D 減算
MOD X MOD 2 剰余

演算は数学上の評価順位で行われます。例えば、乗算と除算は加算と減算より前に行われます。

PRINT 10+2*5-8/4+5^2

評価順位は丸括弧を使うことで明示的に指定可能です。例えば、

PRINT (3+4)*5

関係演算子

記号 用例 用途
= A=10 等しい
<> A<>100 等しくない
> B>C 大なり
< 5<X 小なり
>= X>=20 大なりか等しい
<= X<=30 小なりか等しい

関係演算子の式は true (-1) または false (0) の値を返します。

論理・ビット単位演算子

記号 用例 用途
NOT NOT (X=15)
NOT 0
論理否定
AND A=1 AND B=12
170 AND 15
論理積
OR X=10 OR Y=0
128 OR 2
論理和
XOR A XOR B 排他的論理和

演算子の用法

演算子全般は数値で利用可能です。また、関係演算子と加算演算子は文字列でも利用可能です。

SUM=1+3
IF SUM<5 THEN PRINT "5 以下"
NAME$="LOWRES NX"
GREET$="こんにちわ "+NAME$+"!"
IF NAME$>"LOWRES" THEN PRINT GREET$
IF SUM=4 AND NAME$<>"" THEN PRINT "OK"

プログラムのフロー制御

基本構造

REM

REM 注釈
' 注釈

プログラムにコメントを記述できるようにします。REM の行は実行されません。REM 語の代わりアポストロフィ (') を使えます。

REM これはテストプログラムです
REM 開発者は TIMO KLOSS (ティモ・クロス)
PRINT "HELLO"
'テキストの続きを表示...
PRINT "さようなら"

IF...THEN...ELSE

IF 式 THEN コマンド [ELSE コマンド]

指定された式が true か false であるか確認します。true ならば、 THEN の後に続くコマンドを、そうでなければ ELSE の後に続くコマンドが実行されます。必要に応じて ELSE 節を記述します。

INPUT "番号 A:";A
INPUT "番号 B:";B
PRINT "同じですか?";
IF A=B THEN PRINT "はい" ELSE PRINT "いいえ"
IF A<B THEN PRINT "B 以下"
IF A>B THEN PRINT "A は B 以上"

複数のコマンドを実行 (あるいは長行回避) したいならば、 IF コマンドのブロック版を使えます。その場合は、必ず END IF で閉じてください。

IF 式 THEN
  コマンド
[ELSE IF 式 THEN]
  コマンド
[ELSE]
  コマンド
END IF

この用例のようにブロックは入れ子にできます。

PRINT "NUMBER OF PLAYERS"
INPUT "1-4: ";N

IF N<1 OR N>4 THEN
  PRINT "WRONG INPUT"
  PRINT "RESTART!"
ELSE IF N=1 THEN
  PRINT "シングルプレイヤー"
ELSE
  PRINT "マルチプレイヤー"
  IF N=4 THEN
    PRINT "MAXIMUM"
  END IF
END IF

GOTO

GOTO ラベル

指定されたラベルへ移動後に、その移動先からプログラムの実行を継続します。

PRINT "スタート"
GOTO GAMELEVEL

GAMEOVER:
PRINT "ゲームオーバー"
END

GAMELEVEL:
PRINT "プレイ中"
GOTO GAMEOVER

GOSUB

GOSUB ラベル

現在のプログラムに関する位置をスタックへ追加後に指定されたラベルへ移動します。ラベルからサブルーチンを呼び出した後に RETURN でプログラムを完了します。

FOR I=1 TO 5
  GOSUB SHOWNUMBER
NEXT I
END

SHOWNUMBER:
PRINT "番号",I
RETURN

備考: サブルーチンがある主な理由は歴史的な都合です。より強力で安全性の高いサブプログラムを推奨します。

RETURN

RETURN

最後に GOSUB を呼び出した位置へ戻るために移動した後、その位置をスタックから削除します。

RETURN ラベル

GOTO と同じ動作ですが、スタック全体を消去します。ほかの場所でプログラムを続行したいならば、これでサブルーチンを終了してください。

FOR I=1 TO 5
  GOSUB SHOWNUMBER
NEXT I
END

SHOWNUMBER:
IF I=4 THEN RETURN GAMEOVER
PRINT "番号",I
RETURN

GAMEOVER:
PRINT "ゲームオーバー"

END

END

位置を問わずプログラムを停止します。プログラムはコードの最終行でも自動停止します。

PRINT "なんからの処理"
END
PRINT "ここではなにもしない"

WAIT VBL

WAIT VBL

次のフレームまで待機します。このコマンド (または WAIT n) はゲームのメインループなどでアニメーションや入力のハンドルを扱うために、ループ全体の最後に記述してください。

DO
  PAL RND(3)
  TEXT RND(19),RND(15),"*"
  WAIT VBL
LOOP

WAIT

WAIT n

n フレーム (n/60 秒) 待機します。なお、 n の最小値は 1 です。サブプログラムは割り込み中 (ON VBL/RASTER, MUSIC) に実行するため、この期間は通常のプログラムとして動作を継続します。

WAIT 1 は WAIT VBL に相当します。では WAIT VBL と書くのですか? なぜなら、すっきりしてデキるヒトっぽく見えますので。些細な指針: 円滑なアニメーションと入力処理では WAIT VBL を、本当にしばらく待機したければ WAIT n を使います。

PRINT "わんこユーティリティーズ"
PRINT "提供..."
WAIT 60
PRINT "体重プログラム!"

ループ

FOR...NEXT

FOR var=a TO b [STEP s]
  コマンド
NEXT var

ループ内に記述されたコマンドの列を指定回数実行します。FOR コマンドはカウンタとして var 変数を使います。開始値は a です。コマンド全体は NEXT に到達するまで実行された後に、カウンタは s (または STEP の省略時は 1) で加算されますこの判定はカウンタが b よりも大きいか調べるために行われます。条件を満たしていなければ、処理は繰り返されます。大きければ、プログラムは NEXT 以降の行から継続します。

FOR I=1 TO 8
  PRINT I
NEXT I
FOR I=2 TO 16 STEP 2
  PRINT I
NEXT I

STEP s が負数ならば、ループのカウンタは b 以下の値まで実行されます。

FOR I=8 TO 1 STEP -1
  PRINT I
NEXT I

ほかのステートメントの内側にループを記述できます。

FOR P=0 TO 3
  PAL P
  FOR N=1 TO 4
    PRINT N
  NEXT N
NEXT P

DO...LOOP

DO
  コマンド
LOOP

無限ループを行うコマンドです。GOTO または EXIT で抜け出せます。

DO
  PAL RND(3)
  PRINT "FOREVER"
LOOP

REPEAT...UNTIL

REPEAT
  コマンド
UNTIL 式

指定された式が true になるまでコマンドをループで実行します。最低でも一回はループが実行されます。

REPEAT
  A=RND(9)
  PRINT A
UNTIL A=0

WHILE...WEND

WHILE 式
  コマンド
WEND

指定された式が true の間はコマンドをループで実行します。

A=4
WHILE A<10
  PRINT A
  A=A+1
WEND

EXIT

EXIT

FOR...NEXT, REPEAT...UNTIL, WHILE...WEND, または DO...LOOP コマンドで作成したループから直ちに抜け出します。

DO
  INPUT "E を入力すると終了します:";A$
  IF A$="E" THEN EXIT
  PRINT "実行中..."
LOOP
PRINT "終了"

サブプログラム

SUB...END SUB

SUB 名前 [(パラメータのリスト)]
  コマンド
END SUB

名前を付けてサブプログラムを定義します。オプションのパラメータリストは二種類のエントリを指定できます。つまり、通常の変数と配列の変数です (続けて空の丸括弧ペア)。エントリはカンマで書き分けます。デフォルトでは、サブプログラムの内側で宣言された変数はすべてローカルスコープとなります。

注意: サブプログラムから抜け出すために GOTO や GOSUB は使用禁止です!

CALL

CALL 名前 [(引数のリスト)]

指定された名前のサブプログラムを実行後に現在の位置へ復帰します。引数リストは SUB 定義のパラメータと必ず一致させてください。通常の変数、配列の要素単体と配列全体 (続けて空の丸括弧ペア) はサブプログラムへ参照渡しされます。それ以外の式は値渡しとなります。

CALL GREET("LOWRES NX",3)
CALL GREET("YOU",1)
CALL BYE

SUB BYE
  PAL 1
  PRINT "BYE"
END SUB

SUB GREET(N$,A)
  FOR I=1 TO A
    PAL RND(3)
    PRINT "HELLO",N$
  NEXT I
END SUB

EXIT SUB

EXIT SUB

END SUB の到達前にサブプログラムを終了します。

GLOBAL

GLOBAL 変数リスト

サブプログラム全体で利用可能な変数をメインプログラムで作成します。変数のリストには通常の変数のみ指定してください。配列では DIM GLOBAL をお使いください。このコマンドはサブプログラムの内側で使用できません。

GLOBAL SCORE,TRIES

TRIES=3

CALL WIN(10)
CALL WIN(20)

SUB WIN(N)
  SCORE=SCORE+N
  PRINT "スコア:",SCORE,"挑戦回数:",TRIES
END SUB

テキスト

PRINT

PRINT 式のリスト

現在のウィンドウへテキストを出力します。式にはカンマやセミコロンで書き分けた文字列、または数値を指定できます。カンマで書き分けるとスペースを出力しますが、セミコロンであればスペースを出力しません。カーソルを出力の末尾に置いたままにするには、リストの末尾にカンマやセミコロンを記述してください。無ければ改行で始まります。

PRINT "こんにちは世界"
PRINT 42
PRINT 1+3
PRINT "スコア:",100
PRINT "ひとり ";
PRINT "ライン"

INPUT

INPUT ["プロンプト";]var

キーボードからテキストや数値の入力をユーザに求めた後に、その結果を変数 var へ代入します。オプションとして入力を求める前にテキストを表示できます (プロンプトに変数は指定できません)。

INPUT は自動的にキーボードを有効化します。

INPUT "名前:";N$
INPUT "年齢:";AGE
PRINT "こんにちは ";N$;"!"
PRINT "そろそろ誕生日ですね ";AGE+1

LOCATE

LOCATE cx,cy

現在のウィンドウと関連するテキストカーソルを列 cx と行 cy へ移動します。

LOCATE 2,4
PRINT "HELLO"

=CURSOR.X/Y

CURSOR.X
CURSOR.Y

現在のウィンドウと関連するテキストカーソルの列 (X) と行 (Y) を返します。

WINDOW

WINDOW cx,cy,w,h,b

テキストの出力ウィンドウへセル座標として cx,cy の設定、およびサイズとして w 列と h 行を設定します。テキストは背景 b (0 または 1) に書き込まれます。

WINDOW 6,4,8,4,0
PRINT "長文テキストを狭小ウィンドウで表示"

CLW

CLW

ウィンドウをスペースで消去後にテキストのカーソル位置をリセットします。

PRINT "こんにちは"
CLW
PRINT "さようなら"

ユーザ入力

ゲームパッド

GAMEPAD

GAMEPAD n

n (1 または 2) プレイヤーのゲームパッドを有効化します。ゲームパッドを有効にすると、プログラムでタッチスクリーンやマウスへ入力機器を変更できなくなります。

=UP/DOWN/LEFT/RIGHT

UP(p)
DOWN(p)
LEFT(p)
RIGHT(p)

プレイヤー p (0/1) により十字キーが指定された方向に現在押されていれば true を返します。

UP TAP(p)
DOWN TAP(p)
LEFT TAP(p)
RIGHT TAP(p)

オプションの TAP キーワードを指定すると、この関数は最初のフレームでボタンが押された場合に限り true を返します。

GAMEPAD 1
DO
  IF UP(0) THEN PRINT "UP"
  IF DOWN(0) THEN PRINT "DOWN"
  IF LEFT TAP(0) THEN PRINT "TAP <"
  IF RIGHT TAP(0) THEN PRINT "TAP >"
  WAIT VBL
LOOP

=BUTTON

BUTTON(p[,n])

プレイヤー p (0/1) によりボタン A (n=0) または B (n=1) が現在押されていれば true を返します。パラメータ n の省略時、 両方のボタン (A と B) が確認されます。

BUTTON TAP(p[,n])

オプションの TAP キーワードを指定すると、この関数は最初のフレームでボタンが押された場合に限り true を返します。

GAMEPAD 1
DO
  IF BUTTON(0,0) THEN PRINT "A"
  IF BUTTON TAP(0,1) THEN PRINT "TAP B"
  WAIT VBL
LOOP

PAUSE ON/OFF

PAUSE ON
PAUSE OFF

自動 PAUSE 処理を有効化・無効化します。デフォルトでは有効であり、 PAUSE ボタンを押したときに、 "PAUSE" をスクリーンへ表示後に PAUSE ボタンが再び押されるまでプログラムは一時停止します。

PAUSE

PAUSE

自働一時停止処理が無効であるかに関わらず、プログラムの一時停止とデフォルトの "PAUSE" スクリーンを表示します。

=PAUSE

PAUSE

PAUSE ボタンが押されたときは true を、押されていなければ false を返します。この関数の呼び出し後に値は消去されるため、ボタンごとのタップ状況を返すのは一度だけです。この関数では自働一時停止処理を無効化する必要があります。

GAMEPAD 1
PAUSE OFF
DO
  IF PAUSE THEN PRINT "PAUSE が押された"
  WAIT VBL
LOOP

タッチスクリーンとマウス

無論、コンピュータにマウスが正常に接続されていると考えられる場合に限り、タッチスクリーン機能をお使いください。スクリーンにゲームのボタンを実装する場合、キーボードや物理ゲームパッドに対応していない環境では、コンピュータでゲームを操作できなくなる恐れがあることを念頭においてください。必ず標準ゲームパッド関数の利用を考慮してください。

TOUCHSCREEN

TOUCHSCREEN

タッチスクリーンとマウスのサポートを有効化します。有効化すると、プログラムでゲームパッドへ入力機器を変更できなくなります。

=TOUCH.X/Y

TOUCH.X
TOUCH.Y

ユーザがスクリーンにタッチしたか最後にタッチした現在の X または Y のピクセル座標を返します。

=TOUCH

TOUCH

直前にスクリーンを触れた場合は true を返します。

TOUCHSCREEN
DO
  IF TOUCH THEN PRINT TOUCH.X,TOUCH.Y
  WAIT VBL
LOOP

=TAP

TAP

直前にスクリーンに触れているが最後のフレームでは触れていなければ true を返します。

TOUCHSCREEN
DO
  IF TAP THEN PRINT TOUCH.X,TOUCH.Y
  WAIT VBL
LOOP

キーボード

KEYBOARD ON/OFF/OPTIONAL

KEYBOARD ON
KEYBOARD OFF

キーボードの有効・無効化を指定します。キーボードの有効時、ゲームパッドによる操作はできません。

KEYBOARD OPTIONAL

キーボードを有効化しますが、タッチスクリーンデバイスにはスクリーンキーボードを表示しません。このモードを使うプログラムはゲームパッド、またはタッチ操作の双方を使えるようにしてください。この場合、キーボードは代替入力手段としてのみ扱います。

=INKEY$

INKEY$

最後に押されたキーを文字列として返します。なにも押されていなければ、空文字列 ("") を返します。この関数の呼び出し後は値が消去されるため、キーを押すたびに一度だけ結果を返します。この関数を使うにはキーボードを有効化する必要があります。

KEYBOARD ON
DO
  I$=INKEY$
  IF I$<>"" THEN PRINT I$
  WAIT VBL
LOOP

グラフィックス

LowRes NX のグラフィックス機構全体はキャラクタベースです。キャラクタは 3 色と透明色から成る 8x8 ピクセルのイメージです。調色可能な 8 本のカラーパレットを同時に表示可能です。

プログラムの起動時に ROM エントリ 2 番からキャラクタ全体をビデオ RAM へコピーされるため、すぐに使えます。

ディスプレイは背面から前面に重なった三層 (3 layers) で構成されています。

スプライトと背景セルごとに「優先度」と呼ばれる属性があります。優先度の設定時、セルやスプライトは上層のディスプレイレイヤーに表示します。その実体は背景から前景の順に重なる六枚のレイヤーです。

スプライト

スプライトは独立したオブジェクトであり、スクリーンを自由に移動できます。複数のキャラクタをグループとしてまとめて扱うことで 8x8 ピクセル (キャラクタ単体)、または最大 32x32 ピクセルのサイズを使用可能です。スプライトごとに標準キャラクタ属性 (カラーパレット、X/Y 座標の反転、優先度) に加えてサイズの情報があります。

SPRITE

SPRITE n,[x],[y],[c]

スプライト n (0-63) の座標(x,y) とキャラクタ (c) を設定します。パラメータはすべて省略可能であり、その場合は現在の設定を維持します。

SPRITE n [PAL pal] [FLIP fx,fy]
... [PRIO pri] [SIZE s]

一枚、またはそれ以上のスプライト n (0 - 63) に関する属性を設定します。

pal パレット番号 (0-7)
fx 水平反転 (0/1)
fy 垂直反転 (0/1)
pri 優先度 (0/1)
s 寸法 (0-3):
0: 1 キャラクタ (8x8 ピクセル)
1: 2x2 キャラクタ (16x16 ピクセル)
2: 3x3 キャラクタ (24x24 ピクセル)
3: 4x4 キャラクタ (32x32 ピクセル)
SPRITE 0,32,64,193
SPRITE 1,64,64,193
SPRITE 1 PAL 1 SIZE 3
FOR X=64 TO 128
  SPRITE 1,X,,
  IF X=96 THEN SPRITE 1 FLIP 1,0
  WAIT VBL
NEXT X

SPRITE.A

SPRITE.A n,a

スプライト n (0-63) の全属性を 8bit 単体値で設定します。詳細情報は "スプライトレジスタ" を参照してください。

備考: 関連する属性値の設定は SPRITE コマンドのシンタックスでしたほうが簡単です。

SPRITE OFF

SPRITE OFF [n]
SPRITE OFF a TO b

一枚、またはそれ以上のスプライトを非表示にします。パラメータの省略時、すべてのスプライト (0 ~ 63) が非表示となります。パラメータを単体指定した場合は指定されたスプライトが非表示となります。最後のオプションは a から b までスプライトを非表示にする範囲を指定します。

=SPRITE.X/Y

SPRITE.X(n)
SPRITE.Y(n)

スプライト n の座標を返します。

=SPRITE.C

SPRITE.C(n)

スプライト n のキャラクタを返します。

=SPRITE.A

SPRITE.A(n)

スプライト n の属性を 8-bit 値で返します。詳細情報は "スプライトレジスタ" を参照してください。

=SPRITE HIT

SPRITE HIT(n[,a [TO b]])

スプライト n が別のスプライトと衝突 (つまり、ピクセルが重なった) したならば true を返します。パラメータの省略時は、可視状態である他のスプライト全部との衝突を確認します。a パラメータの指定時、スプライト a のみを確認します。パラメータの全指定時、 a 番から b 番までのスプライトをすべて確認します。

SPRITE 0,32,64,225
SPRITE 1,96,68,226
FOR X=32 TO 128
  SPRITE 0,X,,
  IF SPRITE HIT(0,1) THEN
    SPRITE 0 PAL 1
  ELSE
    SPRITE 0 PAL 0
  END IF
  WAIT VBL
NEXT X

=HIT

HIT

SPRITE HIT を最後に呼び出してから衝突を検出したスプライトに関するスプライト番号を返します。

背景

背景はテキストとタイルベースのマップやイメージとして使われる 32x32 のサイズから成るキャラクタセルのマップです。セルごとにキャラクタのデータに関する情報と拡張属性 (カラーパレット、X/Y反転座標、優先度) があります。

キャラクタのサイズを 8x8 ピクセルにすると、背景のサイズは 256x256 ピクセルとなります。これはスクリーンのサイズ (160x128 ピクセル) よりも大きいです。背景のスクロールオフセットを変更すると、可視領域の移動ができます。

背景の範囲外に可視領域を移動する場合は、四隅を折り返して表示します。これは無限スクロールを実現するために使われます。

このモードは 16x16 ピクセルのセルで使います。有効時は、巨大スプライトと同じく、セルごとに 2x2 キャラクタを表示します。また、このモードは背景のサイズを 512x512 ピクセルへ拡張します。有効化するには CELL SIZE コマンドを使います。

セル座標として背景にアクセスするコマンドと関数の大部分は、背景サイズの範囲外 (32x32) を扱えます。これにより四隅を折り返します。例えば、キャラクタを座標 34,-2 に描画すると、その実体は座標 2,30 へ表示されます。

CLS

CLS

表裏の背景をキャラクタ 0 番で消去後に現在のウィンドウをデフォルト設定でリセットします。

CLS b

背景 b をキャラクタ 0 で消去します。

PAL

PAL p

CELL と TEXT コマンドで使うパレット番号の属性を設定します (0-7)。

PRINT "こんにちは"
PAL 1
PRINT "LOWRES NX!"

FLIP

FLIP fx,fy

CELL と TEXT コマンドで使う水平 (fx) と垂直 (fy) の反転属性値を設定します (0 または 1)。

PRINT "LOWRES NX"
FLIP 0,1
PRINT "LOWRES NX"
FLIP 1,0
PRINT "XN SERWOL"

PRIO

PRIO p

CELL と TEXT コマンドで使う優先度の属性を設定します (0 または 1)。

ATTR

ATTR a

CELL と TEXT コマンド全体の属性を 8bit 単体値で設定します。詳細情報は "BG データ" を参照してください。

備考: PAL, FLIP および PRIO コマンドを使うほうが簡単です。

BG

BG n

CELL と TEXT コマンドで使う現在の背景を設定します (0 または 1)。

CELL

CELL cx,cy,c

現在の属性を用いたキャラクタ c を現在の背景に関するセル座標 cx,cy へ設定します。

PAL 2
CELL 1,1,225
CELL 2,1,226
PAL 1
CELL 3,1,227

=CELL.C

CELL.C(cx,cy)

現在の背景におけるキャラクタのセル座標 cx,cy を返します。

=CELL.A

CELL.A(cx,cy)

現在の背景におけるキャラクタのセル座標 cx,cy に関する属性を 8-bit 値で返します。詳細情報は "BG データ" を参照してください。

BG FILL

BG FILL cx1,cy1 TO cx2,cy2 CHAR c

現在の属性を用いたキャラクタ c において現在の背景に関する領域 cx1,cy1 から cx2,cy2 までをセル全体へ設定します。

PAL 2
BG FILL 2,2 TO 17,13 CHAR 225
PAL 1
BG FILL 10,8 TO 17,13 CHAR 226

TINT

TINT cx,cy [PAL pal]
... [FLIP fx,fy] [PRIO pri]

現在の背景におけるキャラクタのセル座標 cx,cy に関するパレットやそれ以外の属性を変更します。セルのキャラクタと省略された属性は無変更のままとなります。

BG FILL 2,2 TO 17,13 CHAR 225
TINT 10,8 PAL 1 FLIP 0,1

BG TINT

BG TINT cx1,cy1 TO cx2,cy2
... [PAL pal] [FLIP fx,fy] [PRIO pri]

現在の背景の cx1,cy1 から cx2,cy2 までの領域にあるセル全体のパレットやその他属性を変更します。セルのキャラクタと省略された属性は無変更のままとなります。

BG FILL 2,2 TO 17,13 CHAR 225
BG TINT 10,8 TO 15,11 PAL 1

BG SOURCE

BG SOURCE a[,w,h]

BG COPY コマンドで使う現在の転送元を設定します。二次元マップの開始メモリアドレスは a であり、セルの幅 w と高さ h があります。

サイズ (w, h) パラメータの省略時、 Gfx Designer の背景データ形式であるものとして扱われます: 幅はアドレス a+2、高さはアドレス a+3、そしてマップデータの実体に関する開始アドレスは a+4 から読み取ります。

デフォルトでは、 ROM エントリ 3 番は転送元として使われます。

'ROM エントリ 4 番のマップを使用
BG SOURCE ROM(4)
'作業用 RAM のマップを使用
BG SOURCE $A000,32,32

BG COPY

BG COPY cx1,cy1,w,h TO cx2,cy2

現在の転送元にある二次元部分を背景へコピーします。

'グラフィックスデザイナーからスクリーンを表示します
BG COPY 0,0,20,16 TO 0,0

BG SCROLL

BG SCROLL cx1,cy1 TO cx2,cy2 STEP dx,dy

セルの水平 dx と垂直dy に従い、cx1,cy1 から cx2,cy2 までの範囲内にあるセル全体の内容を移動します。

DO
  BG SCROLL 0,0 TO 19,15 STEP -1,0
  CELL 18,RND(15),193+RND(62)
  WAIT 5
LOOP

=MCELL.C/A

MCELL.C(cx,cy)
MCELL.A(cx,cy)

CELL.C と CELL.A 関数の動作と類似性はありますが、現在の背景ではなく転送元のマップ (BG SOURCE) にセルを設定します。マップの範囲外に座標が指定された場合は、この関数は -1 を返します。

MCELL

MCELL cx,cy,c

CELL コマンドの動作と類似性はありますが、現在の背景ではなく転送元のマップ (BG SOURCE) にセルを設定します。転送元となるセルは作業用 RAM に必ず存在する必要があります。さもなければ、 "Illegal Memory Access" (不正なメモリアクセス) のエラーになります。

TEXT

TEXT cx,cy,s$

現在の属性を用いて現在の背景にあるセル座標 cx,cy に文字列 s$ を出力します。

PAL 3
TEXT 15,15,"HELLO"

NUMBER

NUMBER cx,cy,n,d

現在の属性を用いて現在の背景にあるセル座標 cx,cy に数値 n を出力します。数値は必ず d 桁の形式で表示されます。数値を文字列へ変換する手間はないため、数値を表示するときは TEXT コマンドではなく、このコマンドがお勧めです。

NUMBER 15,0,321,5

FONT

FONT c

テキストの出力で使われる現在のキャラクタ範囲を設定します。c はキャラクタにおけるフォントの開始位置 (スペース) です。

利用可能ならば、標準フォントでの位置に関するデフォルト値は 192 です。

SCROLL

SCROLL b,x,y

背景のスクロールオフセット b (0/1) へピクセル座標 x,y を設定します。

TEXT 0,7,"背景のスクロール"
FOR I=0 TO 256
  SCROLL 0,I,0
  WAIT VBL
NEXT I

=SCROLL.X/Y

SCROLL.X(b)
SCROLL.Y(b)

背景 b のスクロールオフセットを返します。

表示設定

SPRITE VIEW ON/OFF

SPRITE VIEW ON
SPRITE VIEW OFF

スプライトの設定を一切変更せずにスプライトのレイヤー全体を表示、または非表示にします。

BG VIEW ON/OFF

BG VIEW ON n
BG VIEW OFF n

背景 n の表示・非表示 (0 または 1)。

CELL SIZE

CELL SIZE b,s

背景 b のセルサイズを設定します (0 または 1)。 s に指定可能な値は、

0 1 キャラクタ (8x8 ピクセル)
1 2x2 キャラクタ (16x16 ピクセル)

PALETTE

PALETTE n,[c0],[c1],[c2],[c3]

パレット n (0-7) の 4 色全体を設定します。カラー 0 番はパレット 0 番専用であり、スクリーンの背景カラーとして表示されます。カラーパラメータはすべて省略可能であり、その場合は現在の設定を維持します。有効なカラーの値は 0 ~ 36 です。以下の計算式で求めることができます。

有効値 = 赤色 * 16 + 緑色 * 4 + 青色

赤色、緑色、および青色は 0 ~ 63 の値です。

デフォルトでは、すべてのパレットは ROM エントリ 1 番から読み込みます。

PRINT "カラー!"
WAIT 30
PALETTE 0,48,63,63,0
WAIT 30
PALETTE 0,3,,,
WAIT 30
PALETTE 0,12,,,8

=COLOR

COLOR(p,n)

パレット p (0-7) から n (0-3) のカラー値を返します。赤色、緑色、青色の値は以下の式で算出できます。

赤色 = INT(値 / 16)
緑色 = INT(値 / 4) MOD 4
青色 = 値 MOD 4

ON RASTER CALL/OFF

ON RASTER CALL 名前

スクリーンラインごとの描画前に実行されるサブプログラムを設定します。通常、カラーパレットの変更やグラフィックエフェクトを得るためにスクロールのオフセット計算で使われます。ラスターのサブプログラムの処理時間は短時間にしてください ("CPU サイクル" を参照)。

ON RASTER OFF

現在のサブプログラムを削除します。

ON RASTER CALL RAINBOW
PRINT "RAINBOW WRITER"
INPUT A$

SUB RAINBOW
  PALETTE 0,(RASTER+TIMER) MOD 64,,,
END SUB

=RASTER

RASTER

現在のスクリーンラインを返します (y 座標)。これはラスター処理用のサブプログラムで使います。

ON VBL CALL/OFF

ON VBL CALL 名前

フレームごとに実行されるサブプログラムを設定します。メインプログラムが WAIT や INPUT で待機状態であっても、アニメーションやサウンドの更新で使えます。VBL サブプログラムの処理時間は長時間占有しないでください ("CPU サイクル" を参照)。

ON VBL OFF

現在のサブプログラムを削除します。

ON VBL CALL BLINK
PRINT "BLINK WRITER"
INPUT A$

SUB BLINK
  PALETTE 0,TIMER MOD 64,,,
END SUB

=TIMER

TIMER

LowRes NX 起動直後からの表示フレーム数を返します。値が 5184000 (約 24 時間) になったときは 0 へ巻き戻します。

サウンド

LowRes NX は 4 基の独立したサウンド生成器 (ボイス) が搭載されています。ボイスごとに、のこぎり波、三角波、パルスとノイズの波形を再生可能であり、周波数、音量、パルス幅の設定ができます。ボイスごとに拡張エンベロープジェネレータと LFO を割り当てることができるため、表現力の高いサウンドとインスツルメントが実現できます。

"Sound Composer" (または互換プログラム) のツールでミュージック、トラックとサウンドプリセットを作成できます。

MUSIC

MUSIC [p]

パターン p からソングを再生開始します。パラメータ p の省略時は、パターン 0 から再生開始します。

TRACK

TRACK n,v

トラック n をボイス v で即時再生します。ボイスごとに独立したトラックを再生できるため、これはミュージックの再生中であっても、サウンドエフェクトの再生で使えます。

PLAY

PLAY v,p[,len] [SOUND s]

ボイス v (0-3) でサウンドを再生します。p は音調です。

音符音調 (オクターブ別)
C113253749617385
C#214263850627486
D315273951637587
D#416 28405264 7688
E517294153657789
F618304254667890
F#719314355677991
G820324456688092
G#921334557698193
A1022344658708294
A#1123354759718395
B1224364860728496

オプションのパラメータ len は 1/60 秒単位によるサウンドの再生長です。最大値は 255 です。 0 を指定すると、サウンドは自動的に停止しなくなります。パラメータの省略時、現在のボイス値を保持します。

デフォルトは、サウンドで使われている現在のサウンド設定となります。SOUND パラメータで使うサウンド番号 s は Sound Composer ツールで追加します。

PLAY 0,49,20
WAIT 30
PLAY 0,53,20
WAIT 30
PLAY 0,56,40
WAIT 60

STOP

STOP [v]

ボイス v で再生中の現在のサウンドとトラックを停止します。パラメータの省略時、すべてのボイス、トラックとミュージックは停止されます。ボイスのエンベロープにリリースタイムが設定されている場合は、サウンドは即時停止せずに、フェードアウトします。

VOLUME

VOLUME v,[vol],[mix]

ボイス n (0-3) の音量 vol (0-15) と出力先の定位 mix (0-3) を設定します。

0消音
1左側
2右側
3左側と右側 (中央)

パラメータはすべて省略可能であり、その場合は現在の設定を維持します。

SOUND

SOUND v,[w],[pw],[len]

ボイス v (0-3) の基本サウンドパラメータを設定します。

w は波形です。

0のこぎり波
1三角波
2パルス波
3ノイズ

pw はパルス波 (0-15) です。値に 8 を指定すると矩形波になります。このパラメータはパルス波形のみ影響を与えます。

len は 1/60 秒単位によるサウンドの再生長です。最大値は 255 です。 0 を指定すると、サウンドは自動的に停止しなくなります。このコマンドで再生長を指定した場合、 PLAY では length パラメータを省略可能です。

パラメータはすべて省略可能であり、その場合は現在の設定を維持します。

ENVELOPE

ENVELOPE v,[a],[d],[s],[r]

ボイス v (0-3) の音量エンベロープジェネレータ (包絡線発生器) を設定します。

a はアタックタイム、 d はディケイタイム、そして r はリリースタイムです。タイム全般は非線形であり、指定可能範囲は 0 (2 ミリ秒) ~ 15 (12 秒) です。

s はサステインレベル (0-15) です。つまり、ディケイタイムの後とサウンドのリリース前の音量です。

パラメータはすべて省略可能であり、その場合は現在の設定を維持します。

ENVELOPE 0,1,6,8,8
PLAY 0,49,20
WAIT 30
PLAY 0,53,20
WAIT 30
PLAY 0,56,40
WAIT 120

LFO

LFO v,[r],[fr],[vol],[pw]

ボイス v (0-3) の LFO (低周波発振器) を設定します。

r は LFO レートであり、有効範囲は 0 (0.12 Hz) ~ 15 (18 Hz) までの非線形方式です。

そのほかのパラメータは様々なサウンドパラメータに対応するエフェクトの適用量を設定します: fr は周波数・音調、 vol は音量、そして pw はパルス幅です。値の範囲は 0 ~ 15 までです。

パラメータはすべて省略可能であり、その場合は現在の設定を維持します。

LFO 0,12,4,0,0
PLAY 0,49,20
WAIT 30
PLAY 0,53,20
WAIT 30
PLAY 0,56,40
WAIT 120

LFO WAVE

LFO WAVE v,[w],[i],[e],[t]

ボイス v (0-3) の LFO 波形オプションを設定します。パラメータはすべて省略可能であり、その場合は現在の設定を維持します。

w 波形 (0-3):
0: 三角波
1: のこぎり波
2: 矩形波
3: ランダム
i 反転 (0/1)
e env モードの有効化 (0/1)
t トリガーの有効化 (0/1)

デフォルトでは、標準サウンドパラメータの出力に LFO を付加します。反転有効時は、減算モードとなります。env モードを有効化すると、 LFO は 1 サイクル後に停止します。これにより、拡張エンベロープジェネレータとして使用することも可能です。トリガーの有効時、 LFO はサウンドを再生するたびに再起動します。さもなくば連続的に実行します。env モードにおいて、トリガーは暗黙的に有効化されます。

SOUND SOURCE

SOUND SOURCE a

メモリアドレス a に PLAY, MUSIC と TRACK コマンドで使う現在のデータソースを設定します。関連コマンドの次回呼び出し以降に限り影響を与えるため、すでに再生開始したデータ本体の転送元には保持します。使用できるデータ形式は Sound Composer で作成したものになります。

デフォルトでは、 ROM エントリ 15 番がデータの転送元として使われます。

=MUSIC

MUSIC(n)

再生中のミュージックに関するステータスを返します。n には取得したい情報を指定します。

0現在のパターン
1現在の行
2現在のティック
3現在の再生速度 (0 = 停止)

データ

DATA

DATA 定数リスト

READ コマンドでアクセスされるカンマで書き分けた数値と文字列 (変数や式ではなく値) の定数を割り当てます。DATA コマンドは実行対象外であり、プログラムのどこでも記述可能です。

READ コマンドは プログラムの先頭から末尾まで、 DATA を順にアクセスします。DATA コマンド全体のすべての定数は連続的なアイテムのリストとして読み取ります。

READ

READ var-list

DATA コマンドの値を読み取り後にカンマで書き分けられた値を変数 var-list へ代入します。プログラムには現在の DATA 値を指すために内部処理専用のポインタが存在します。値を読み取るたびに、次の DATA 値へポインタを移動します。

FOR I=0 TO 3
  READ TYPE$,POWER
  PRINT TYPE$;":",POWER
NEXT I
DATA "LASER",10,"BLASTER",15
DATA "PLASMA",20,"FUSION",30

RESTORE

RESTORE [ラベル]

READ の内部ポインタを別の位置へ変更します。これは特定のデータを選択することでデータを再読み取りできるようにします。ラベルパラメータの省略時、 READ はプログラムの先頭から再開します。そうでなければ、ポインタはジャンプラベルへ設定します。

RESTORE SHIELDS
FOR I=0 TO 1
  READ TYPE$,POWER
  PRINT TYPE$;":",POWER
NEXT I
DATA "LASER",10,"BLASTER",15
SHIELDS:
DATA "SIMPLE",30,"ADVANCED",60

メモリアクセス

グラフィックス、サウンドと I/O、カートリッジ ROM、作業用 RAM と不揮発性 RAM のチップを疑似処理します。アクセス可能なメモリマップ全体は 64 KB です。詳しくは "ハードウェアリファレンス" の章で解説してあります。

=PEEK

PEEK(a)

メモリアドレス a から単バイト値 (0 ~ 255) を返します。

TOUCHSCREEN
PRINT "TOUCH!"
DO
  IF PEEK($FF75) AND %10 THEN
    PRINT PEEK($FF72),PEEK($FF73)
  END IF
  WAIT VBL
LOOP

POKE

POKE a,v

メモリのアドレス a へ値 v を設定します。v は 0 ~ 255 までの数値表現です。この範囲外の数値表現は 8 bit に丸め込みます。

POKE $9000,232
POKE $9002,233

=PEEKW

PEEKW(a)

メモリアドレス a から 2 バイト値 (-32768 ~ 32767) を返します。

POKEW

POKEW a,v

メモリアドレス a へ 2 バイト値を書き込みます。v は -32768 ~ 32767 までの数値表現です。この範囲外の数値表現は 16 bit に丸め込みます。

=PEEKL

PEEKL(a)

メモリアドレス a から 4 バイト値 (-2147483648 ~ 2147483647) を返します。

POKEL

POKEL a,v

メモリアドレス a へ 4 バイト値を書き込みます。v は -2147483648 ~ 2147483647 までの数値表現です。この範囲外の数値表現は 32 bit に丸め込みます。

'不揮発性 RAM の用例
HI=PEEKL($E000)
PRINT "ハイスコア:"
PRINT HI
INPUT "スコア:";SC
IF SC>HI THEN POKEL $E000,SC
PRINT "リスタート!"

COPY

COPY a,n TO d

転送元のメモリアドレス a を起点とした n バイトを転送先のアドレス d へコピーします。転送元と転送先の領域は重複しても問題はありません。

'ROM エントリ 4 番からビデオ RAM へ
'キャラクタをコピーします
COPY ROM(4),SIZE(4) TO $8000

FILL

FILL a,n[,v]

v (パラメータの省略時は 0) を開始メモリアドレス a から n バイト設定します。

ROL

ROL a,n

アドレス a をバイト単位として扱い、そのビットを n 桁により左側へ循環します。

ROR

ROR a,n

アドレス a をバイト単位として扱い、そのビットを n 桁により右側へ循環します。

=ROM

ROM(n)

ROM エントリ n のメモリアドレスを返します。

=SIZE

SIZE(n)

ROM エントリ n のバイト数を返します。

ファイル

ファイルコマンドは最大で 16 ファイルを扱える仮想ディスクのデータを記録するために使われます。この形式は ROM エントリのプログラムファイル部分と同じです。これによりNX プログラムをそのまま仮想ディスクとして扱う事でデータの編集が可能になります。

仮想ディスクはイメージとマップエディタ、あるいはミュージックプログラムなどの開発ツール専用機能として設計されています。なお、ゲームでは不揮発性メモリをお使いください。標準構成の LowRes NX コンソールにおいてディスクドライブは未搭載であると考えてください。

LOAD

LOAD f,a[,n[,o]]

現在の仮想ディスクからファイル番号 f をメモリの開始アドレス a へロードします。

オプションのパラメータ n はロードする最大バイト数の指定で使われます。0 は無制限であることを意味します。オプションのパラメータ o でファイルのオフセットを設定可能です。

LOAD はツールでのみ使用することを想定しています。ゲームデータでは ROM エントリを、あるいはゲームステートでは不揮発性メモリをお使いください。

SAVE

SAVE f,c$,a,n

メモリアドレスの先頭 a から n バイトまでを現在の仮想ディスクのファイル番号 f (0-15) へコメント c$ (最大 31 文字) を付けてセーブします。

このファイルを以前にロードしていれば、オリジナルのコメントを保持するか、あるいはセーブ前にユーザが編集できるようにしてください。新規作成したファイルの場合は、最低でもコメントとしてデータ型を記述してください。例えば "CHARACTERS" または "MUSIC" です。

SAVE はツールでのみ使用することを想定しています。不揮発性メモリはゲームステートの記録で使います。

FILES

FILES

FILE$ を用いて現在のディレクトリからファイルをロードします。

=FILE$

FILE$(f)

ファイル番号 f のコメント文字列を返します。ファイルの情報を更新するには、ファイルのあるディレクトリへアクセスする前に FILES の呼び出し、または LOAD や SAVE の呼び出し直後に FILE$ を使います。

FILES
FOR I=0 TO 15
  PRINT I,FILE$(I)
NEXT I

=FSIZE

FSIZE(n)

ファイル番号 n のバイト数を返します。ファイルの情報を更新するには、ファイルのあるディレクトリへアクセスする前に FSIZE の呼び出し、または LOAD や SAVE の呼び出し直後に FILE$ を使います。

算術関数

三角関数

=PI

PI

PI は円周率です: 3.1415926535...

=SIN

SIN(x)

x の正弦です。なお、 x はラジアン単位です。

=COS

COS(x)

x の余弦です。なお、 x はラジアン単位です。

=TAN

TAN(x)

x の正接です。なお、 x はラジアン単位です。

=ASIN

ASIN(x)

x の逆正弦です。なお、 x の範囲は必ず -1 ~ +1 までにしてください。関数の範囲は -(PI/2) <= ASIN(x) <= (PI/2) です。

=ACOS

ACOS(x)

x の逆余弦です。なお、 x の範囲は必ず -1 ~ +1 までにしてください。関数の範囲は 0 <= ACOS(x) <= PI です。

=ATAN

ATAN(x)

ラジアン表記による x のアークタンジェントです。すなわち、タンジェントは x の角度です。関数の範囲は -(PI/2) <= ATAN(x) <= (PI/2) です。

=HSIN

HSIN(x)

x の双曲線正弦です。

=HCOS

HCOS(x)

x の双曲線余弦です。

=HTAN

HTAN(x)

x の双曲線正接です。

標準算術関数

=ABS

ABS(x)

x の絶対値です。

=SGN

SGN(x)

x の正負符号です。 x < 0 ならば -1 を、 x = 0 ならば 0 を、そして x > 0 ならば +1 となります。

=INT

INT(x)

x よりも小さい最大整数です。すなわち、 INT(1.3) = 1 や INT(-1.3) = -2 です。

=EXP

EXP(x)

x の指数です。すなわち、 x を累乗した自然対数 (e = 2,71828...) を底とする値です。

=LOG

LOG(x)

x の自然対数です。 x は必ず 0 以上になります。

=SQR

SQR(x)

負数ではない x の平方根です。 x は非負数を指定してください。

乱数列

=RND

RND

これは 0 <= RND < 1の範囲内による一様分布の乱数列です。

RND(n)

この異種シンタックスは 0 ~ n までの整数により乱数を包括的に生成します。

RANDOMIZE

RANDOMIZE x

乱数のシード値 x を整数で指定します。デフォルトではプログラム開始時のシード値は 0 であるため、乱数列は必ず同じ値になります。

RANDOMIZE TIMER

プログラムの実行ごとに違う乱数が必要ならば、この行を先頭に挿入してください。

RANDOMIZE TIMER
FOR I=1 TO 16
  PRINT RND(1000)
NEXT I

数値操作

=MIN

MIN(x,y)

MIN 関数は互いの式における最小値を返します。

=MAX

MAX(x,y)

MAX 関数は互いの式における最大値を返します。

SWAP

SWAP 変数1,変数2

同一型の変数同士でデータを交換します。

A=10
B=40
SWAP A,B
PRINT A
PRINT B

INC

INC 変数

変数の値を 1 増やします。INC A は A=A+1 相当ですが、 CPU サイクルのコストは少なくて済みます。

DEC

DEC 変数

変数の値を 1 減らします。DEC A は A=A-1 相当ですが、 CPU サイクルのコストは少なくて済みます。

ADD

ADD 変数,x

x を変数へ加算します。 x には正数、または負数を使用可能です。ADD A,X は A=A+X 相当ですが、 CPU サイクルのコストは少なくて済みます。

ADD var,x,base TO top

ADD の第二シンタックスはカウンタの繰り返しで便利です。

A=0
DO
  ADD A,2,0 TO 10
  PRINT A
LOOP

は以下と同じです。

A=0
DO
  A=A+2
  IF A>10 THEN A=0
  IF A<0 THEN A=10
  PRINT A
LOOP

とはいえ、それでも ADD コマンドは CPU サイクルのコストは少なくて済みます。

文字列関数

=LEFT$=

LEFT$(s$,n)

s$ の先頭から n 文字を新規文字列として返します。

PRINT LEFT$("LOWRES NX",3)
LEFT$(s$,n)=a$

a$ の先頭 n 文字で変数 s$ の先頭文字を上書きします。

A$="FOORES NX"
LEFT$(A$,3)="LOWER"
PRINT A$

=RIGHT$=

RIGHT$(s$,n)

s$ の末尾から n 文字を新規文字列として返します。

RIGHT$(s$,n)=a$

a$ の末尾 n 文字で変数 s$ の末尾文字を上書きします。

=MID$=

MID$(s$,p,n)

p 文字を起点することで、 s$n 文字を新規文字列として返します。最初の文字の位置は 1 です。

PRINT MID$("LOWRES NX",4,3)
MID$(s$,p,n)=a$

a$ の先頭 n 文字により指定されたテキストの範囲で変数 s$ を上書きします。

A$="LOWFOO NX"
MID$(A$,4,3)="RESTAURANT"
PRINT A$

=INSTR

INSTR(d$,s$[,p])

d$ 内にある s$ と最初に一致するものを検索後に、その開始位置を返します。見つからなければ、関数は 0 を返します。通常、この関数は文字列の先頭から検索開始します。オプションとして検索開始位置 p を指定可能です。

PRINT INSTR("LOWRES NX","RES")

=CHR$

CHR$(n)

文字列にある文字の ASCII コード n を返します。

FOR I=32 TO 90
  PRINT CHR$(I)
NEXT I

=ASC

ASC(a$)

ASCII コードで a$ の先頭文字を指定します。

PRINT ASC("L")

=LEN

LEN(a$)

a$ の文字数を返します。

=VAL

VAL(a$)

a$ に記述した数値表現の文字列を数値へ変換します。

=STR$

STR$(n)

数値 n を文字列へ変換します。

=BIN$

BIN$(n[,len])

最低 len 桁から成る二進数形式の文字列へ数値 n を変換します。

=HEX$

HEX$(n[,len])

最低 len 桁から成る十六進数形式の文字列へ数値 n を変換します。

システム

システムコマンドは仮想コンソールと LowRes NX アプリケーションを接続します。

TRACE

TRACE 式のリスト

デバッグウィンドウへテキストを出力します。式にはカンマで書き分けた文字列、または数値を指定できます。デバッグモードの無効時、このコマンドは無視されます。

'デバッグモードで実行
A=13
B$="GO"
TRACE "TEST",A,B$

SYSTEM

SYSTEM n,v

システムステータス n へ値 v を設定します。現在、利用可能な唯一のステータスは、

0 省電力モード:
有効化は v に 0 以外を指定します。このモードはユーザの入力がない時は必ず非常に低いリフレッシュレートで動作します。仮想 CPU には一切影響しないため、コードは実行速度無制限のまま実行します。

技術情報

CPU サイクル

LowRes NX は簡易的な方法で CPU サイクルを疑似処理します。フレームごとにサイクルの固定制限値があります。これはすべてのデバイスでプログラムの同一実行速度を保証します。これにより、お使いのデバイスでプログラムを円滑に動作するよう最適化すると、ほかのデバイスでも同じ動作を得られます。

変数や定数のアクセスと同じく、コマンド、関数または演算子を実行するたびに 1 サイクルのカウントをします。一部処理には追加コストが発生します。

フレームごとの合計サイクル17556
VBL 割り込みごとのサイクル1140
ラスター割り込みごとのサイクル51

メインプログラムは大量のサイクルを消費しますが、 WAIT VBL や WAIT 以前にサイクルの限界に達すると、次回のフレームへその処理を持ち越します。割り込みサイクルの制限を超過した場合は、スクリーンに黒色の走査線が表示されます。

ハードウェアリファレンス

メモリマップ

$0000 - カートリッジ ROM (32 KB)

$8000 - キャラクタデータ (4 KB)
$9000 - BG0 データ (2 KB)
$9800 - BG1 データ (2 KB)

$A000 - 作業用 RAM (16 KB)

$E000 - 不揮発性 RAM (4 KB)

$FE00 - スプライトレジスタ (256 B)
$FF00 - カラーレジスタ (32 B)
$FF20 - ビデオレジスタ
$FF40 - オーディオレジスタ
$FF70 - I/O レジスタ

キャラクタデータ

キャラクタはピクセルごとに 2 ビットの 8x8 ピクセルイメージであるため、サイズは 16 バイトとなります。ビデオ RAM は 256 キャラクタの容量があります。

キャラクタに関する最初の 8 バイトはピクセル全体の下位ビットに関する情報を、後続する 8 バイトはピクセル全体の上位ビットに関する情報です。

BG データ

背景は 32x32 キャラクタのセルから成るマップです。セルごとに 2 byte を使用します。

- キャラクタ番号
- 属性:
    ビット  用途
    0-2  パレット番号
    3    X 方向の反転
    4    Y 方向の反転
    5    優先度
    6-7  未使用

不揮発性 RAM

ゲームカートリッジに内蔵されたバッテリバックアップ方式の RAM であると考えられます。ゲーム内の位置やハイスコア表などのデータで使います。不揮発性 RAM の内容はプログラムの終了時に自動セーブされます。その後、プログラムを起動するとロードされます。プログラムごとに独立した不揮発 RAM のセーブ領域があります。

スプライトレジスタ

64 枚のスプライトが利用可能であり、スプライトごとに 4 バイトを使用します。

- X 座標
- Y 座標
- キャラクタ番号
- 属性:
    ビット  用途
    0-2  パレット番号
    3    X 方向の反転
    4    Y 方向の反転
    5    優先度
    6-7  寸法:
         0: 1 キャラクタ (8x8 ピクセル)
         1: 2x2 キャラクタ (16x16 ピクセル)
         2: 3x3 キャラクタ (24x24 ピクセル)
         3: 4x4 キャラクタ (32x32 ピクセル)

注意: X および Y スプライト座標レジスタにはオフセットが 32 あります。そのため、負数を使わずに上側・左側のスクリーンの範囲外へ移動可能です。BASIC コマンドの使用時、このオフセットは利便性の観点から撤廃されています。

カラーレジスタ

パレット × 8 (パレットあたり 4 色)。カラー単体は 1 バイトです。

ビット  成分
0-1   青色
2-3   緑色
4-5   赤色

ビデオレジスタ

$FF20 - 属性:
    ビット  用途
    0    スプライトの有効化
    1    BG0 の有効化
    2    BG1 の有効化
    3    BG0 のセル寸法、
    4    BG1 のセル寸法:
         0: 1 キャラクタ (8x8 ピクセル)
            (BG 256x256 ピクセル)
         1: 2x2 キャラクタ (16x16 ピクセル)
            (BG 512x512 ピクセル)

$FF21 - BG0 におけるスクロールのオフセット X
$FF22 - BG0 におけるスクロールのオフセット Y
$FF23 - BG1 におけるスクロールのオフセット X
$FF24 - BG1 におけるスクロールのオフセット Y
$FF25 - スクロールのオフセット - MSB
    (最上位ビット)
    巨大なセルの寸法に限り使用されます:
    ビット  用途
    0    BG0 X+256
    1    BG0 Y+256
    2    BG1 X+256
    3    BG1 Y+256

$FF26 - ラスターライン

オーディオレジスタ

以下は 4 ボイスのレジスタです。

$FF40 - ボイス 0
$FF4C - ボイス 1
$FF58 - ボイス 2
$FF64 - ボイス 3

ボイスごとに 12 バイトを使用します。

- 周波数 (下位バイト)
- 周波数 (上位バイト)
- ステータス:
    ビット  用途
    0-3  音量
    4    左側の定位
    5    右側の定位
    6    初期化
    7    ゲート
- ピークメーター (読み取り専用)
- 属性:
    ビット  用途
    0-3  パルス幅
    4-5  波形:
         0: のこぎり波
         1: 三角波
         2: パルス波
         3: ノイズ
    6    タイムアウトの有効化
- 長さ (タイムアウト)
- エンベロープのバイト 1:
    ビット  用途
    0-3  アタック
    4-7  ディケイ
- エンベロープのバイト 2:
    ビット  用途
    0-3  サステイン
    4-7  リリース
- LFO の属性:
    ビット  用途
    0-1  波形:
         0: 三角形
         1: のこぎり波
         2: 矩形波
         3: ランダム
    2    反転
    3    Env モードの有効化
    4    トリガーの有効化
- LFO 設定バイト 1:
    ビット  用途
    0-3  LFO レート
    4-7  周波数量
- LFO 設定バイト 2:
    ビット  用途
    0-3  音量
    4-7  パルス振幅
- 予約済み

備考: 周波数は 16-bit 値です: f = hertz * 16

I/O レジスタ

$FF70 - ゲームパッド 0 のステータス
$FF71 - ゲームパッド 1 のステータス

ゲームパッドのステータス:
    ビット  用途
    0    上
    1    下
    2    左
    3    右
    4    ボタン A
    5    ボタン B

$FF72 - 最後にタッチした X 座標
$FF73 - 最後にタッチした Y 座標
$FF74 - 最後に押されたキー (ASCII コード)
$FF75 - ステータス:
    ビット  用途
    0    Pause ボタン
    1    タッチ

$FF76 - 属性:
    ビット  用途
    0-1  ゲームパッドの有効化:
         0: 無効化
         1: 1 プレイヤー
         2: 2 プレイヤー
    2    キーボードの有効化
    3    タッチスクリーンの有効化

サウンドデータ形式

この形式は PLAY, MUSIC および TRACK コマンドで使われます。有効なサウンドプリセットのみ保存可能です。このデータは MUSIC または TRACK コマンドが無いときに使われます。トラックが利用可能であれば、すべてのパターンを保存する必要があります。空トラックの後に使われるものは保存する必要はありません。

オフセット - 内容
0      - 16 サウンドプリセット
128    - 64 パターン
384    - 64 トラック

サウンドプリセットごとに 8 バイトを使用します。これは先頭の 4 バイトを除き、オーディオレジスタの構成と一致します。

パターンごとに 4 バイトを使用します。

- ボイス 0:
    ビット  用途
    0-6  トラックのインデックス
         (64 = ボイスは未使用)
    7    ループ開始フラグ
- ボイス 1:
    ビット  用途
    0-6  トラックのインデックス
         (64 = ボイスは未使用)
    7    ループ終了フラグ
- ボイス 2:
    ビット  用途
    0-6  トラックのインデックス
         (64 = ボイスは未使用)
    7    ソング停止フラグ
- ボイス 3:
    ビット  用途
    0-6  トラックのインデックス
         (64 = ボイスは未使用)

トラックごとに 96 バイト (32 エントリ × エントリあたり 3 バイトの構成) を使用します。

- 音符の音調 (0 = 空)
- データ (音符が 0 の場合は無視):
    ビット  用途
    0-3  音量
    4-7  サウンド
- 制御:
    ビット  用途
    0-3  パラメータ
    4-7  コマンド

廃止予定のシンタックス

以下のコマンド、関数とシンタックスの使用は非推奨であり将来のバージョンで廃止予定です。

SPRITE.A n,(pal,fx,fy,pri,s)

代替品として SPRITE (新型シンタックス) または SPRITE.A (単体値のみ) をお使いください。

ATTR (pal,fx,fy,pri,s)[,m]
ATTR a,m

代替品として PAL, FLIP, PRIO または ATTR (単体値のみ) をお使いください。属性マスクの置換では TINT および BG TINT をお使いください。

DISPLAY (s,b0,b1,c0,c1)
DISPLAY a

代替品として BG VIEW ON/OFF, SPRITE VIEW ON/OFF および CELL SIZE をお使いください。

DISPLAY

代替品として PEEK($FF20) をお使いください。

LFO.A v,(w,r,e,t)

代替品として LFO WAVE をお使いください。

予約語

以下は LowRes NX BASIC で使われている予約語の一覧です。下記の予約語を変数名として使うと、シンタックスエラーになります。

アスタリスクの付いたものはキーワードです。 FUNCTION は未実装ですが、将来のバージョンのために予約されています。

ABS, ACOS, ADD, AND, ANIM*, ASC, ASIN, ATAN, ATTR, BG, BIN$, BUTTON, CALL, CELL, CELL.A, CELL.C, CHAR, CHR$, CLOSE*, CLS, CLW, COLOR, COPY, COS, DATA, DEC, DECLARE*, DEF*, DIM, DISPLAY, DO, DOWN, ELSE, END, ENVELOPE, EXIT, EXP, FILE$, FILES, FILL, FLASH*, FLIP, FN*, FONT, FOR, FSIZE, FUNCTION*, GAMEPAD, GLOBAL, GOSUB, GOTO, HCOS, HEX$, HIT, HSIN, HTAN, IF, INC, INKEY$, INPUT, INSTR, INT, KEYBOARD, LBOUND*, LEFT$, LEFT, LEN, LET, LFO, LFO.A, LOAD, LOCATE, LOG, LOOP, MAX, MCELL, MCELL.A, MCELL.C, MID$, MIN, MOD, MUSIC, NEXT, NOT, NUMBER, OFF, ON, OPEN*, OPTIONAL, OR, OUTPUT*, PAL, PALETTE, PAUSE, PEEK, PEEKL, PEEKW, PI, PLAY, POKE, POKEL, POKEW, PRINT, PRIO, RANDOMIZE, RASTER, READ, REM, REPEAT, RESTORE, RETURN, RIGHT$, RIGHT, RND, ROL, ROM, ROR, SAVE, SCROLL, SCROLL.X, SCROLL.Y, SGN, SHARED*, SIN, SIZE, SOUND, SOURCE, SPRITE, SPRITE.A, SPRITE.C, SPRITE.X, SPRITE.Y, SQR, STATIC*, STEP, STOP, STR$, SUB, SWAP, SYSTEM, TAN, TAP, TEMPO*, TEXT, THEN, TIMER, TINT, TO, TOUCH, TOUCH.X, TOUCH.Y, TOUCHSCREEN, TRACE, TRACK, UBOUND, UNTIL, UP, VAL, VBL, VIEW, VOICE*, VOLUME, WAIT, WAVE, WEND, WHILE, WINDOW, WRITE*, XOR