仮想ゲーム機で自分のレトロゲームを作る。クラシックなBASIC言語でプログラムし、付属のツールを使用して、スプライト、タイルマップ、サウンド、および音楽を作成する。初心者であれば、簡単なテキストゲームの作成方法や、タイルマップ上で最初のスプライトを表示する方法をすぐに理解できる。経験豊富なプログラマであれば、レトロなハードウェアトリックの可能性を完全に発見できる!
LowRes NXを、スライド可能なタッチスクリーンの下にd-pad、2つのアクションボタン、小さなゴム製キーボードを備えたハンドヘルドゲーム機と想像してほしい。LowRes NXは、実際の8ビットおよび16ビットシステムにヒントを得て、グラフィックス、サウンド、およびI/O用のチップをシミュレートし、これらは実際には古典的なハードウェアのように機能する。ハードウェアスプライトとハードウェア視差スクロールをサポートしており、垂直ブランクとラスター割り込みを提供して本物のレトロ効果を生み出すこともできる。
LowRes NXのプログラム言語は、第2世代の構造化されたBASICをベースにしている。すべての古典的なコマンドを提供するが、行番号の代わりにラベル、ループ、サブプログラムを使用する。グラフィックスとサウンドは追加のコマンドでサポートされており、PEEKとPOKEを使用して仮想ハードウェアに直接アクセスすることもできる。プログラムの流れを完全に制御することができ、実装すべき標準的な更新機能はない。
LowRes NXには、必要なすべてのツールが含まれている。スプライト、タイル、フォント、マップを編集するためのGfx Designerと、音楽や音響効果のためのSound Composerである。これらはすべて通常のBASICプログラムである。これらを変更して改善したり、独自のカスタムエディタを作成することもできる。
ゲームを他のユーザーに直接送信したり、Webサイトを介して共有したりすることができる。すべてのプログラムはオープンソースであるため、ゲームをプレイしたり、ゲームから学んだり、ゲームを編集したりすることができる。あなたは芸術だけを作るのが好きですか、それとも音楽を作るのが好きですか?作成したものをアセットとして共有し、他のプログラマがプロジェクトで使用できるようにする。
LowRes NXがどのように見えるかを見るために、含まれているいくつかのプログラムを試してみてください。アクションゲームを見るLowResギャラクシー2テキストアドベンチャーLowResアドベンチャーおよびデモスター・スクローラー
十分にプレイしたら、最初の独自のプログラムを作成できる。
次の行を入力します。
PRINT"WELCOME!"PRINT"WHAT IS YOUR NAME?"INPUT">";N$PRINT"HELLO";N$;"!"
次に、プログラムを実行します。これは、キーボードを使用した簡単な例です。ゲームパッドで何かを試してみましょう。別の新しいプログラムを作成し、次のように入力します。
ゲームパッド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」が表示され、ゲームパッドを使用して移動できる。
プログラムファイルには、すべてのデータを含む完全なゲームまたはアプリケーションが含まれており、単純なテキストとして保存されている。最初の部分はBASICソースコードである。詳細については、プログラミングの章を参照のこと。
2番目の部分はカートリッジROMエントリである。これらは最大16個の番号付きデータブロックであり、グラフィック、レベルマップ、音楽など、あらゆる種類のデータを含むことができる。プログラムが実行されているとき、そのすべてのROMエントリはメモリの最初の32 KBでアクセス可能である。
ツールを使用すると、ROMエントリを簡単に作成および編集できる。ツールは通常のNXプログラムであるが、特にデータを編集するために作成されている。ツールは、任意のNXファイルに「仮想ディスク」としてアクセスし、そのROMエントリをファイルのように使用できる。
ツールの使用方法には、次の2つがある。
やってみましょう。(「はじめに」の章から)動く「A」でプログラムを開き、[ツール]メニューから[Gfxデザイナー]を選択する。
何かを文字#1として描画し(#0は空のままにする)、「ファイル」をタップしてファイル2(「主な文字」)として保存する。次にソースコードエディタに戻ると、プログラムの下にいくつかの16進データが表示される。これがあなたのイメージです!それを見るためには、行を変更します。
SPRITE 0、X、Y、225(スプライト0、X、Y
~
SPRITE 0、X、Y、1
プログラムを実行します。そこにある!
ツールは自動的に保存されないため、ツールを終了する前に保存することを忘れないようにしてください。
簡単に開始するには、次の表のROMエントリ番号を使用する必要がある。それらのデータは自動的に使用できるように準備されている。
#0 | デフォルトフォントの場合は空のままにする |
#1 | カラーパレット |
#2 | 文字(スプライト、タイル) |
#3 | 背景(タイルマップ) |
#15 | 音と音楽 |
カートリッジROMエントリ0がプログラムで使用されていない場合、コンパイラはデフォルトフォントの文字データを追加する。これは192~255の文字を占有し、プログラムの起動時に自動的にビデオRAMにコピーされる。デフォルトフォントを使用する場合は、ROMエントリ0を未使用のままにしておく必要がある。
Gfxデザイナーを使用して、文字(スプライト、タイル、フォント)、デザイン背景(タイルマップ、画面レイアウト)を描画し、カラーパレットを編集する。
右下には、プログラムのさまざまなセクション(文字エディタ、パレットエディタ、背景エディタ)に対応する3つのタブがある。LowRes NXをパソコンで実行するときは、1、2、3のキーを使って切り替えることができる。
Gfx Designerは、起動時にメインパレット(ファイル1)、文字(ファイル2)、および背景(ファイル3)をロードするが、自動的には保存されないことに注意する。
下部では、256文字が4ページに分割されているのがわかる。ここでは、現在の文字を選択して編集することができる。デフォルトのフォントを使用する場合は、最後のページを空にしておく。また、背景をきれいにするために、文字#0を空にする必要がある。
左上の四角形は、選択した色を使用して現在の文字を描画するためのものである。
ファイル | 文字ファイルメニューに移動します。 |
モフ | 現在の文字のピクセルを移動する。 |
16*16 | 16×16ピクセルの編集画面に移動する。 |
フリップ | 現在の文字を水平または垂直に反転する。 |
スピン | 現在の文字を回転させる。 |
CLR法 | 選択した色で現在の文字をクリアする。 |
カット | 現在の文字をコピーしてクリアする。 |
COP値 | 現在の文字をコピーする。 |
パス | コピーした文字を貼り付ける。 |
SEL[選択] | 選択範囲のサイズを変更する。 |
選択範囲のサイズは、この画面上のすべての編集ツールと、バックグラウンドエディタでの描画に影響する。
下部は、キャラクタエディタと同じである。
左側のボックスで、現在のカラーパレットを選択します。
右側では、RGBスライダを使用して現在のパレットの各色を編集できます。最初の色は通常透明で使用されませんが、画面の背景の色として使用されるパレット0の最初の色は例外です。
ファイル | パレットファイルメニューに移動します。 |
ここでは、他の画面で現在選択されている文字とカラーパレットを使用して、背景を描画する。
ファイル | バックグラウンドファイルメニューに移動します。 |
パン | 表示されているマップ領域をドラッグします。 |
描画 | 現在のモードで描画する。 |
消去 | 属性を含むセルを消去する。 |
フリップ | X/Y反転属性を切り替えます。 |
PRI(プライマリ | 優先順位属性を切り替えます。 |
コンピュータ上でLowRes NXを実行しているときは、矢印キーまたはWASDキーを使用してマップをスクロールすることができる。Z、X、C、V、Bキーでツールを選択する。
描画ツールにはさまざまなモードがある。ボタンがすでに選択されている場合は、もう一度タップすることで、モードを変更できる。
描画 | 単一のセルを編集する。 |
フィル | ドラッグして領域を編集する。 |
文字 | 選択した反転属性と優先度属性を使用して、選択した文字とカラーパレットで描画する。 |
パレット | カラーパレットのみを変更する。 |
優先度 | 優先度のみを変更します。優先度1のセルは緑で表示され、その他はすべて赤で表示されます。 |
スタンプ | ドラッグして領域を選択し、それを使用して描画する(コピー&ペースト)。 |
ここから、文字、カラーパレット、背景を別々にロードして保存する。すべてを一度に保存するオプションはない。
リストには、現在の仮想ディスクの16個のファイルすべて、つまり、編集中のプログラムのROMエントリが表示される。1つを選択し、[ロード]または[保存]をタップする。
新規 | すべての文字をクリアする。 |
フォン | 標準フォントを現在のページにコピーする。 |
PAGの | 選択したファイルから現在のページに1ページのみをロードする。たとえば、別のファイルからフォントを含めると便利である。 |
新規 | デフォルトの色にリセットする。 |
新規 | 背景全体をクリアする(サイズは維持する)。 |
サイズ | サイズメニューに移動します。ここでは、背景の幅と高さ(セル単位)、およびセルサイズ(8×8または16×16ピクセル)を選択できます。 |
サウンドコンポーザは、サウンドプリセット、シーケンス(「トラック」)、および完全な曲を作成する役割を果たす。
起動時にメインのサウンドデータ(ファイル15)をロードするが、自動的には保存されないことに注意すること。サウンドファイルには、すべてのサウンドと音楽のデータが含まれている。
サウンドは、使用可能なすべてのサウンドパラメータ(波形、エンベロープ、LFOなど)を備えたプリセットであり、プログラム内のPLAYコマンドで直接使用したり、トラック/ソングの楽器として使用したりすることができる。
トラックは、1つの声に対して32のステップのシーケンスであり、各ステップは音符を演奏したり、音を修正したりすることができる。TRACKコマンドを使用して、複雑な音響効果や短いメロディー(例えば、「レベルアップ」)をプログラムで使用することができる。トラックは、曲を作成するためにも使用される。
パターンは音楽のブロックであり、4つの声のそれぞれでどのトラックを再生すべきかを定義する。パターンは、次の場合を除いて、1つずつ再生される。次のパターンが空の場合、曲は停止される。現在のパターンが終了し、「ループ終了」フラグがある場合、プレーヤーは「ループ開始」フラグを使用して前のパターンにジャンプバックする。パターンが終了し、「停止」フラグがある場合、プレーヤーは停止する。
ゲーム用の音楽を作成したい場合で、追加の音響効果を使用する予定がある場合は、少なくとも1つの声を空にしておく必要がある。
64のパターンは、1つの長い曲やいくつかの短い曲に使用できる。「ループ」と「ストップ」のフラグを使用することで、曲を分けることができる。1つの特定の曲を再生するには、最初のパターンから始めるだけである。プログラム内の曲を再生するには、MUSICコマンドを使用する。
サウンドコンポーザの右上隅には、パターンエディタ、トラックエディタ、サウンドエディタの3つのタブがある。これは「トラッカー」スタイルのプログラムで、タイムラインが左から右ではなく上から下に移動することを意味する。したがって、トラック内のステップは行とも呼ばれる。0から15の範囲のほとんどの値は、16進数形式(0-F)で表示される。
LowRes NXをコンピュータ上で実行する場合、いくつかのキーボードサポートがある。矢印キーでカーソルを移動し、キー行で2オクターブの音楽キーボードをシミュレートして音符を入力する。リターンキーで音符の停止を入力し、バックスペースで現在の音符を削除し、スペースで演奏(パターン/トラック)と停止を切り替える。
ここでは、パターンを選択し、すべての音声に対してそのトラックを選択し、選択した各トラックの音符を直接編集することができる。また、現在のパターンの「ループ」と「ストップ」フラグのトグルボタンもある。トラックのない音声に音符を設定すると、自動的にフリートラックが選択される。トラック内の音符を停止/解除したい場合は、音楽キーボードの星の記号を使用する。
ここでは、追加のパラメータを使用して、1つのトラックを選択して編集することができる。
Sキー | サウンド |
Vキー | ボリューム |
Cキー | [サウンド]コマンド |
Pキー | パラメータ |
ここでサウンドを定義してテストします。現在選択されているサウンドは、他のエディタで新しいノートに使用されます。
これらのコマンドを使用すると、再生中にパラメータを動的に変更できます。これらのコマンドは、トラックエディタで使用します。
Cキー | Pキー | 目的 |
---|---|---|
0 | 0 | コマンドなし |
0 | x個 | ミックス(1=左、2=右、3=中央/両方) |
1個 | x個 | 攻撃時間 |
2個 | x個 | 減衰時間 |
3個 | x個 | サステインレベル |
4個 | x個 | リリース時間 |
5個 | x個 | LFOレート |
6個 | x個 | LFO周波数量 |
7個 | x個 | LFOボリューム量 |
8個 | x個 | LFOパルス幅量 |
9個 | x個 | パルス幅 |
Dキー | x個 | 低速(Eと同じだが+16) |
Eキー | x個 | 速度(1行あたりのティック数、デフォルトは8) |
Fキー | 0 | ブレークトラック/パターン |
Fキー | 1個 | カットノート/ボリューム0 |
LowRes NXのプログラミング言語は、第2世代の構造化されたBASIC(1985スタイル)をベースにしている。
このマニュアルは、プログラミングの経験がある人のための参考資料となることを意図している。プログラミングに不慣れな場合はLowRes NXのウェブサイト詳細については、このマニュアルを参照してください。
使用可能な値の型は、文字列と数値(浮動小数点)である。
変数名には、文字(A-Z)、数字(0-9)、およびアンダースコア(_)を含めることができるが、数字で始めることはできない。予約されたキーワード(コマンド、関数)は、変数名として使用することはできないが、変数名の一部とすることはできる。章にリストがある「予約済みキーワード」
有効な変数名の例:
X A1 LONG_VARIABLE_NAME PRINTER(ロングバリアブルネームプリンタ)
無効な変数名の例:
2B印刷
文字列変数名は、次のように$記号で終わる。
A$NAME$
変数は明示的に宣言されていないが、変数から読み取る前に値で初期化する必要がある。値は、等号記号を使用して変数に割り当てられる。
名前$="LOWRES NX"LIVES=3
数値には、16進数と2進数の表記を使用できる。
$FF02%11001011
DIM[GLOBAL]var-list
各次元のインデックスが最も高い配列を定義する。
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(var[,dimension])
配列の次元の上限(最高のインデックス)を返す。バール
その次元パラメータは、配列が多次元の場合に使用されるオプションの数値であり、配列の次元を指定する。デフォルト値は1である。
I=0からUBOUND(SCORES)までのDIM SCORES(9)PRINT SCORES(I)NEXT I
ラベルはプログラム内の位置をマークし、GOTOなどのコマンドに使用される。ラベルは、変数と同じ規則を使用する名前と、それに続くコロンで構成される。
TESTLABEL:
記号 | 例 | 目的 |
---|---|---|
- |
-Bキー
| 否定 |
^ |
X^3個
| 指数関数 |
* |
2*Y型
| 乗算 |
/ |
X/2回
| 分割 |
\ |
X\2個
| 整数除算 |
+ |
C+2キー
| 加算 |
- |
100-Dの
| 減算 |
MOD[モデル |
Xモード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(X=15)
| 「しない」 |
および |
A=1およびB=12
| 「および」 |
または |
X=10またはY=0
| 「または」 |
排他的論理和 |
A XOR B
| 「排他的論理和」 |
すべての演算子は、数値に対して使用できます。関係演算子と加算演算子は、文字列に対しても使用できます。
SUM=1+3 IF SUM<5 THEN PRINT "LESS THAN 5" NAME$="LOWRES NX" GREET$="HELLO "+NAME$+"!" IF NAME$>"LOWRES"THEN PRINT GREET$IF SUM=4 AND NAME$<>""THEN PRINT"OK"
REM所見の所見
プログラムにコメントを入れることができる。REM行は実行されない。単語REMの代わりにアポストロフィ(')を使用できる。
REM TIMO KLOSS PRINT"HELLO"'SHOW MORE TEXT.PRINT"BYE"によって書かれたテストプログラムREMである。
IF expr THENコマンド[ELSEコマンド]
指定された式が真か偽かをチェックします。真の場合はTHENの後のコマンドが実行され、そうでない場合はELSEの後のコマンドが実行されます。ELSE部分はオプションです。
INPUT"NUMBER A:";A INPUT"NUMBER B:";B PRINT"SAME?";IF A=B THEN PRINT"YES"ELSE PRINT"NO"IF A<B THEN PRINT "A LESS THAN B" IF A>B THEN PRINT"A GREATER THAN 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"SINGLE-PLAYER"ELSE PRINT"MULTI-PLAYER"IF N=4 THEN PRINT"MAXIMUM"END IF END IF
GOTOラベル
指定されたラベルにジャンプし、そこでプログラムの実行を継続する。
PRINT「START」GOTO GAMELEVEL GAMEOVER:PRINT「GAMEOVER」END GAMELEVEL:PRINT「PLAYING」GOTO GAMEOVER
GOSUBラベル
現在のプログラム位置をスタックに追加し、指定されたラベルにジャンプする。ラベルの後のプログラムはサブルーチンと呼ばれ、RETURNを使用して終了する必要がある。
I=1から5 GOSUB SHOWNUMBER NEXT I END SHOWNUMBER:PRINT「NUMBER」、I RETURN
注:サブルーチンは、主に歴史的な理由で存在する。より強力で安全なサブプログラムを選択する必要がある。
戻る
GOSUBの最後の呼び出しの位置にジャンプして戻り、スタックから削除する。
RETURNラベル
GOTOと同様に動作するが、スタック全体をクリアする。他の場所でプログラムを継続したい場合は、これを使用してサブルーチンを終了する。
I=1から5 GOSUB SHOWNUMBER NEXT I END SHOWNUMBER:I=4の場合、GAMEOVER PRINT「NUMBER」を返す。I GAMEOVER:PRINT「GAMEOVER」を返す。
終了
プログラムを任意の位置から停止します。また、プログラムは、コードの最後の行の後に自動的に停止します。
印刷「これは起こる」終了印刷「これは起こらない」
VBLを待つ
次のフレームを待つ。これ(またはWAIT n)は、メインゲームループのように、アニメーションを実行したり入力を処理したりするすべてのループの最後のコマンドである必要がある。
DO PAL RND(3)TEXT RND(19)、RND(15)、"*"WAIT VBL LOOP
待ちn
待機n個フレーム(n/60秒)。ここでn個は1である。割り込みから実行されるサブプログラム(ON VBL/RASTER、MUSIC)は、この期間中は通常通り動作し続ける。
WAIT 1はWAIT VBLと同じであるが、なぜWAIT VBLがあるのか?見た目が涼しくてオタクっぽいから!簡単なガイドライン:スムーズなアニメーションと入力処理のためにはループでWAIT VBLを使用し、実際にしばらく待ちたい場合はWAIT nを使用する。
プリント「INUTILIS」プリントプレゼント…「WAIT 60プリント」待機プログラム!
FOR var=a TO b[STEP s]コマンドNEXT var
一連のコマンドをループ内で指定された回数実行する。FORコマンドは変数を使用するバール値から始めて、カウンタとしてaNEXTまでのすべてのコマンドが実行され、次にカウンタが増加するs(STEPが省略されている場合は1)。カウンタが次の値よりも大きくなっているかどうかを確認するためのチェックが実行される。bそうでない場合は、プロセスが繰り返され、それより大きい場合は、プログラムはNEXTの後の行に継続する。
FOR I=1 TO 8 PRINT I NEXT I
Iの場合=2から16ステップ2印刷I次I
STEPの場合sが負の場合、カウンタが値より小さくなるまでループが実行されるb
FOR I=8 TO 1 STEP-1 PRINT I NEXT I
ループは他のループの内部に配置することができる。
FOR P=0から3 PAL P FOR N=1から4 PRINT N NEXT N NEXT P
DOコマンドLOOP
コマンドを無限ループで実行する。GOTOまたはEXITを使用して終了することができる。
DO PAL RND(3)PRINT「FOREVER」ループ
REPEATコマンドUNTIL式
指定された式が真になるまで、ループ内のコマンドを実行する。ループは少なくとも1回実行される。
A=0になるまでA=RND(9)PRINT Aを繰り返す
WHILE式コマンドWEND
指定された式が真である限り、コマンドをループで実行する。
A=4 WHILE A<10 PRINT A A=A+1 WEND
終了
FOR.NEXT、REPEAT.UNTIL、WHILE.WEND、またはDO.LOOPコマンドで作成されたループから直ちに終了する。
DO INPUT"ENTER E TO EXIT:";A$IF A$="E"THEN EXIT PRINT"GOING ON."LOOP PRINT"END"
SUB name[(parameter-list)]コマンドEND SUB
指定された名前でサブプログラムを定義します。オプションのパラメータ・リストには、単純変数と配列変数(後に空のカッコのペア)の2種類のエントリを含めることができます。エントリはカンマで区切られます。デフォルトでは、サブプログラム内のすべての変数はローカルです。
注:サブプログラムからジャンプするためにGOTOやGOSUBを使用しないでください!
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
END SUBに到達する前にサブプログラムを終了する。
GLOBAL変数リスト
メイン・プログラムの変数をすべてのサブプログラムで使用できるようにする。リストには単純な変数のみを含めることができる。配列の場合は、DIM GLOBALを使用する必要がある。このコマンドは、サブプログラム内では使用できない。
グローバルスコア、TRIES TRIES=3 CALL WIN(10)CALL WIN(20)SUB WIN(N)SCORE=SCORE+N PRINT「SCORE:」、SCORE、「TRIES:」、TRIES END SUB
PRINT式-リスト
現在のウィンドウにテキストを出力します。式には、コンマまたはセミコロンで区切られた文字列または数値を使用できます。コンマは出力をスペースで区切り、セミコロンはスペースなしで出力します。カーソルを出力の最後に保持するには、コンマまたはセミコロンでリストを終了します。そうでない場合は、新しい行が開始されます。
PRINT"HELLO WORLD"PRINT 42 PRINT 1+3 PRINT"SCORE:",100 PRINT"ONE";PRINT"LINE"
INPUT["prompt";]var
ユーザがキーボードでテキストまたは数字を入力し、それを変数に格納できるようにするバールオプションで、前にプロンプトテキストを表示することができる(変数にはできない)。
INPUTは自動的にキーボードを有効にする。
INPUT"NAME:";N$INPUT"AGE:";AGE PRINT"HELLO";N$;"!"PRINT"SOON YOU ARE";AGE+1
LOCATE cx,cy(cx、cyの
テキストカーソルを列に移動するcxおよび行シー現在のウィンドウに相対して。
ロケート2、4プリント「ハロー」
カーソル.Xカーソル.Y
現在のウィンドウを基準としたテキストカーソルの現在の列(X)または行(Y)を返す。
ウィンドウcx、cy、w、h、b
テキスト出力ウィンドウをセル位置に設定するcx、cyサイズをwの列およびh行。テキストは背景に書き込まれるb(0または1)。
WINDOW 6,4,8,4,0 PRINT「小さなウィンドウに長いテキスト」
CLW法
スペースを含むウィンドウをクリアし、テキストカーソルの位置をリセットする。
プリント「ハロー」CLWプリント「バイ」
ゲームパッドn
次のゲームパッドを有効にするn個(1人または2人の)プレーヤー。ゲームパッドが有効になると、プログラムはタッチスクリーン/マウス入力に変更できなくなる。
上(p)下(p)左(p)右(p)
指定された方向がプレーヤーの方向パッドで現在押されている場合にtrueを返す。p(0/1)。
上タップ(p)下タップ(p)左タップ(p)右タップ(p)
オプションのTAPキーワードを使用すると、この関数は、ボタンが押された最初のフレームに対してのみtrueを返す。
ゲームパッド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ループ
BUTTON(p[,n])
ボタンA(n個=0)またはB(n個=1)現在プレーヤーによって押されているp(0/1)。パラメータn個を省略すると、両方のボタン(AとB)がチェックされる。
ボタンタップ(p[,n])
オプションのTAPキーワードを使用すると、この関数は、ボタンが押された最初のフレームに対してのみtrueを返す。
GAMEPAD 1 DO IFボタン(0,0)THEN PRINT「A」IF BUTTON TAP(0,1)THEN PRINT「TAP B」WAIT VBLループ
PAUSE ON PAUSE OFF
自動一時停止処理を有効または無効にします。デフォルトでは有効になっているため、一時停止ボタンを押すと、プログラムが停止し、ボタンを再度押すまで画面に「一時停止」と表示されます。
一時停止
自動一時停止処理が無効になっている場合でも、プログラムを一時停止し、デフォルトの「一時停止」画面を表示する。
一時停止
一時停止ボタンが押された場合はtrueを返し、それ以外の場合はfalseを返す。この関数を呼び出した後、その値はクリアされるので、各ボタンタップを1回だけ返す。この関数では、自動一時停止処理を無効にする必要がある。
ゲームパッド1 PAUSE OFF DO IF PAUSE THEN PRINT「PAUSE PRESSED」WAIT VBLループ
タッチスクリーンサポートは、コンピュータのマウスでもうまく機能すると思われる場合にのみ使用してください。独自のゲームボタンを作成したい場合は、キーボードや本物のゲームパッドをサポートしていないため、コンピュータ上でゲームをプレイできない可能性があることに注意してください。常に標準のゲームパッド機能を使用することを考慮してください。
タッチスクリーン
タッチスクリーン/マウスのサポートを有効にする。一度有効になると、プログラムはゲームパッド入力に変更できなくなる。
タッチXタッチY
ユーザが画面に触れたとき、または最後に触れたときの現在のXまたはYピクセル位置を返す。
タッチ
画面が現在タッチされている場合はtrueを返す。
タッチスクリーンDO IF TOUCH THEN PRINT TOUCH.X,TOUCH.Y WAIT VBLループ
カッ
画面が現在タッチされており、最後のフレームにタッチされていない場合は、trueを返す。
タッチスクリーンDO IF TAP THEN PRINT TOUCH.X,TOUCH.Y WAIT VBL LOOP
キーボードオンキーボードオフ
キーボードを有効または無効にします。キーボードが有効になっている間は、ゲームパッドは機能しません。
キーボード(オプション)
キーボードを有効にするが、タッチスクリーンデバイスにオンスクリーンキーボードを表示しない。このモードを使用するプログラムは、ゲームパッドまたはタッチコントロールで完全に使用可能であり、キーボードは代替入力にのみ使用する必要がある。
INKEY$
最後に押されたキーを文字列として返します。キーが押されなかった場合は、空の文字列("")を返します。この関数を呼び出した後、値はクリアされるので、押された各キーを1回だけ返します。この関数では、キーボードを有効にする必要がある。
キーボードオンDO I$=INKEY$IF I$<>""THEN PRINT I$WAIT VBL LOOP
LowRes NXのすべてのグラフィックは文字に基づいている。文字は8×8ピクセルの画像で、3色と透明である。8つのプログラム可能なカラーパレットのいずれかで表示される。
プログラムの開始時に、ROMエントリ2からのすべての文字がビデオRAMにコピーされ、すぐに使用できるようになる。
ディスプレイは、背面から前面までの3つの層で構成されている。
各スプライトセルと背景セルには、「優先度」と呼ばれる属性がある。これを設定すると、セルまたはスプライトはより高い表示レイヤーに表示される。実際には、後ろから前へ6つのレイヤーがある。
スプライトは独立したオブジェクトであり、画面上で自由に移動できる。8×8ピクセル(1文字)のサイズ、または複数の文字をグループ化して32×32ピクセルまでのサイズを持つことができる。各スプライトには、標準の文字属性(カラーパレット、フリップX/Y、優先度)とそのサイズがある。
SPRITE n、[x]、[y]、[c]
位置を設定する(x、y)および文字(c)項スプライトのn個(0-63)。すべてのパラメータを省略して、現在の設定を維持することができる。
SPRITE n[PAL pal][FLIP fx,fy].[PRIO pri][SIZE s]
スプライトの1つまたは複数の属性を設定するn個(0-63):
パル | パレット番号(0-7) |
為替 | 水平に反転(0/1) |
年度 | 垂直方向に反転(0/1) |
プライマリ | 優先順位(0/1) |
s | サイズ(0-3): 0:1文字(8x8 px) 1:2x2文字(16x16 px) 2:3x3文字(24x24 px) 3:4x4文字(32x32 px) |
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 n、a
スプライトのすべての属性を設定するn個(0-63)を単一の8ビット値として指定する。「スプライトレジスタ」に登録してある。
注:これらの値は、次の属性構文で設定する方が簡単である。スプライトコマンド。
SPRITE OFF[n]SPRITE OFF aからb
1つ以上のスプライトを非表示にする。すべてのパラメータを省略すると、すべてのスプライト(0-63)が非表示になる。1つのパラメータを使用すると、指定されたスプライトのみが非表示になる。最後のオプションは、次の範囲のスプライトを非表示にすることである。a~b
SPRITE.X(n)SPRITE.Y(n)
スプライトの位置を返すn個
SPRITE.C(n)(スプライトC(n)
スプライトの文字を返すn個
SPRITE.A(n)(スプライトA(n)
スプライトの属性を返すn個8ビット値として。「スプライトレジスタ」に登録してある。
SPRITE HIT(n[,a[TO b]])
スプライトの場合にtrueを返すn個別のスプライトと衝突する(ピクセルがオーバーラップすることを意味する)。これ以上パラメータが指定されない場合、他のすべての可視スプライトをチェックする。aパラメータが追加された場合、そのスプライトのみをチェックするaすべてのパラメータが指定された場合、numberからのすべてのスプライトでチェックする。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
ヒット
SPRITE HITの最後の呼び出しのスプライトと衝突したスプライトの数を返す。
背景は、32x32文字セルのマップであり、テキストおよびタイルベースのマップまたは画像に使用される。各セルには、どの文字が含まれているかという情報と、追加の属性(カラーパレット、フリップX/Y、優先順位)がある。
文字のサイズは8×8ピクセルであるため、結果として得られる背景のサイズは256×256ピクセルであり、これは実際の画面(160×128)よりも大きい。背景のスクロールオフセットを変更することにより、表示領域を移動することができる。
可視領域が背景の境界から外側に移動すると、表示はエッジを囲む。これを使用して、無限のスクロールを実現できる。
16×16ピクセルのセル用のモードがある。アクティブにすると、各セルに2×2の文字が表示され、大きなスプライトのようになる。また、このモードでは、背景のサイズが512×512ピクセルに増加する。これを有効にするには、CELL SIZEコマンドを使用する。
背景にアクセスするほとんどのコマンドや関数では、セル座標を背景サイズ(32×32)の外にすることができる。それらはエッジの周りにラップされるので、例えば、位置34、-2に描かれた文字は、実際には位置2,30に現れる。
CLS
文字0の両方の背景をクリアし、現在のウィンドウをデフォルトのウィンドウにリセットする。
CLS b
背景をクリアするb文字0。
PALのp
セルおよびテキストコマンドのパレット番号(0-7)属性を設定する。
PRINT「HELLO」PAL 1 PRINT「LOWRES NX!」
フリップfx、fy
水平(の値(0または1)を設定します。為替)および垂直(年度)セルおよびテキストコマンドの属性を反転する。
プリント「LOWRES NX」FLIP 0,1プリント「LOWRES NX」FLIP 1,0プリント「XN SERWOL」
PRIO p
セルおよびテキストコマンドの優先順位(0または1)属性を設定する。
属性a
セルおよびテキスト・コマンドのすべての属性を、単一の8ビット値として設定します。「BGデータ」に登録してある。
注:コマンドを使用する方が簡単であるパルフリップおよびプリオ
BG n
セルおよびテキストコマンドの現在の背景(0または1)を設定します。
セルcx、cy、c
セルを位置に設定するcx、cy現在の背景から文字へc現在の属性を使用して。
PAL 2セル1,1,225セル2,1,226 PAL 1セル3,1,227
CELL.C(cx、cy)
位置にあるセルの文字を返すcx、cy現在の背景の。
CELL.A(cx、cy)
位置にあるセルの属性を返すcx、cy現在の背景を8ビット値で表したもの。「BGデータ」に登録してある。
BG FILL cx1,cy1 TO cx2,cy2 CHAR c
領域内のすべてのセルを設定するcx1、cy1~cx2、cy2現在の背景から文字へc現在の属性を使用して。
PAL 2 BG FILL 2,2 TO 17,13 CHAR 225 PAL 1 BG FILL 10,8 TO 17,13 CHAR 226
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 cx1,cy1 TO cx2,cy2.[PAL pal][FLIP fx,fy][PRIO pri]
領域内のすべてのセルのパレットやその他の属性をcx1、cy1~cx2、cy2現在の背景の。セルの文字と省略された属性は変更されない。
BG FILL 2,2から17,13 CHAR 225 BG TINT 10,8から15,11 PAL 1
BG SOURCE a[,w,h]
BG COPYコマンドの現在のソースを設定する。2次元マップはメモリアドレスから始まるaの幅はwのおよび高さh細胞。
サイズパラメータがない場合、Gfx Designerのバックグラウンドデータフォーマットが想定される。幅はアドレスから読み取られる。a+2、からの高さa+3で、実際のマップデータはa+4。
デフォルトでは、ROMエントリ3がソースとして使用される。
「ROMエントリ4 BGソースROM(4)からのマップの使用」作業RAM BGソース$A000,32,32からのマップの使用
BG cx1、cy1、w、hをcx2、cy2にコピー
現在のソースの2次元部分を現在の背景にコピーする。
GFXデザイナーBG COPY 0,0,20,16から0,0への'SHOW SCREEN
BG SCROLL cx1,cy1からcx2,cy2 STEP dx,dy
領域内のすべてのセルの内容をcx1、cy1~cx2、cy2水平にdxおよび垂直方向ディー細胞。
DO BG SCROLL 0,0から19,15ステップ-1,0セル18、RND(15)、193+RND(62)WAIT 5ループ
MCELL.C(cx、cy)
MCELL.A(cx、cy)
CELL.C関数およびCELL.A関数と同様に機能するが、現在の背景ではなくソースマップ(BG SOURCE)からセルを取得する。座標がマップ境界の外にある場合、関数は-1を返す。
MCELL cx、cy、c
CELLコマンドと同様に機能するが、現在の背景の代わりにソースマップ(BG SOURCE)にセルを設定する。ソースはワーキングRAMにある必要があり、そうでない場合は「Illegal Memory Access」エラーが発生する。
テキストcx、cy、s$
文字列を出力するs$(ドル)セル位置の現在の背景にcx、cy現在の属性を使用して。
PAL 3 TEXT 15,15、「HELLO」
数cx、cy、n、d
数値を出力するn個セル位置の現在の背景にcx、cy現在の属性を使用して。数値は常に表示されるようにフォーマットされているddigits。このコマンドは、数値を文字列に変換する必要がないため、数値を表示するためにTEXTよりも好まれる。
番号15,0,321,5
フォントc
テキスト出力に使用される現在の文字範囲を設定する。cは、フォントの開始文字(スペース)である。
デフォルト値は192で、標準フォント(使用可能な場合)をポイントする。
スクロールb、x、y
背景のスクロールオフセットを設定するb(0/1)からピクセル座標へx,y(x,y)
テキスト0,7、I=0から256までの「スクロール背景」スクロール0、I、0待機VBL NEXT I
スクロールX(b)スクロールY(b)
背景のスクロールオフセットを返すb
スプライトビューオン
スプライトビューオフ
スプライトの設定を変更せずに、スプライトレイヤ全体を表示または非表示にする。
n上のBGビュー
BG VIEW OFF n(BGビューオフn)
背景を表示または非表示にするn個(0または1)。
セルサイズb、s
背景のセルサイズを設定するb(0または1)、ここでs次のいずれかになります。
0 | 1文字(8×8ピクセル) |
1個 | 2×2文字(16×16ピクセル) |
パレットn、[c0]、[c1]、[c2]、[c3]
パレットの4色すべてを設定するn個(0-7)。色0はパレット0にのみ使用され、画面の背景の色として表示される。現在の設定を維持するために、色パラメータを省略することができる。有効な色値は0-63であり、次のように計算できる。
値=赤*16+緑*4+青
RED、GREEN、およびBLUEは0から3の値である。
デフォルトでは、すべてのパレットはROMエントリ1から読み取られる。
PRINT「COLORS!」WAIT 30 PALETTE 0,48,63,63,0 WAIT 30 PALETTE 0,3,,,WAIT 30 PALETTE 0,12,,,8
色(p,n)
色の値を返すn個(0-3)パレットからp(0-7)。RED、GREEN、およびBLUEの値は、次のように取得できる。
赤=INT(値/16)緑=INT(値/4)MOD 4青=VALUE MOD 4
ON RASTER CALL名
描画される前にすべての画面行に対して実行されるサブプログラムを設定する。通常は、カラーパレットを変更したり、スクロールオフセットを変更してグラフィカルな効果を得るために使用される。ラスタサブプログラムは短くする必要がある(「CPUサイクル」)。
オンラスターオフ
現在のサブプログラムを削除する。
ON RASTER CALL RAINBOW PRINT"RAINBOW WRITER"INPUT A$SUB RAINBOW PALETTE 0,(RASTER+TIMER)MOD 64,,,END SUB
ラスター
現在の画面行(y位置)を返します。これは、ラスターサブプログラムで使用します。
ON VBL CALL名
各フレームで実行されるサブプログラムを設定する。メインプログラムがWAITまたはINPUTでブロックされた場合でも、アニメーションやサウンドを更新するために使用できる。VBLサブプログラムはあまり長くすべきではない(「CPUサイクル」)。
オンVBL OFF
現在のサブプログラムを削除する。
オンVBLコールブリンクプリント「BLINK WRITER」入力A$SUB BLINK PALETTE 0、タイマーMOD 64、、、エンドサブ
タイマー
LowRes NXが開始されてから表示されたフレーム数を返します。この値は、5184000に達したとき(約24時間)に0に戻る。
LowRes NXには4つの独立したサウンドジェネレーター(ボイス)があり、それぞれがのこぎり歯、三角形、パルス、ノイズの波形を再生でき、周波数、音量、パルス幅を設定できる。追加のエンベロープジェネレーターとボイスごとのLFOにより、複雑なサウンドと楽器が可能になる。
ツールを使用できる「サウンド・コンポーザ」(または互換性のあるプログラム)を使用して、音楽、トラック、およびサウンドプリセットを作成する。
音楽[p]
パターンで曲の再生を開始するpパラメータpが省略された場合、パターン0から開始する。
トラックn、v
トラックを再生n個ワンス・オン・ヴォイスv各音声は独立してトラックを再生できるので、音楽再生中でも音響効果に使用できる。
PLAY v,p[,len][SOUND s]
音声で音を再生するv(0~3)。pはピッチ:
注記 | ピッチ(オクターブが異なる) | |||||||
---|---|---|---|---|---|---|---|---|
Cキー | 1個 | 13個 | 25個 | 37個 | 49個 | 61人 | 73人 | 85個 |
C# | 2個 | 14個 | 26個 | 38個 | 50人 | 62個 | 74人 | 86個 |
Dキー | 3個 | 15個 | 27個 | 39個 | 51人 | 63人 | 75人 | 87個 |
D# | 4個 | 16個 | 28個 | 40個 | 52人 | 64個 | 76人 | 88人 |
Eキー | 5個 | 17個 | 29個 | 41人 | 53個 | 65人 | 77人 | 89人 |
Fキー | 6個 | 18個 | 30人 | 42人 | 54個 | 66個 | 78個 | 90人 |
F# | 7個 | 19個 | 31個 | 43人 | 55個 | 67個 | 79個 | 91個 |
Gキー | 8個 | 20個 | 32個 | 44個 | 56個 | 68個 | 80個 | 92個 |
G# | 9個 | 21人 | 33個 | 45個 | 57個 | 69個 | 81人 | 93人 |
Aキー | 10個 | 22個 | 34個 | 46個 | 58個 | 70個 | 82人 | 94個 |
A# | 11個 | 23人 | 35個 | 47人 | 59個 | 71人 | 83名 | 95個 |
Bさん | 12個 | 24個 | 36個 | 48個 | 60個 | 72人 | 84個 | 96個 |
オプションのパラメータ長さは1/60秒単位の長さで、最大値は255である。0は、音が自動的に止まらないことを意味する。パラメータを省略した場合、音声の現在の値が保持される。
デフォルトでは、音声の現在のサウンド設定が使用される。サウンド番号を使用するには、SOUNDパラメータを追加するsSound Composerツールから。
再生0,49,20待機30再生0,53,20待機30再生0,56,40待機60
停止[v]
現在のサウンドと音声のトラックを停止するvパラメータを省略すると、すべての音声、トラック、および音楽が停止される。音声のエンベロープにリリースタイムがある場合、サウンドはすぐには停止せず、フェードアウトする。
VOLUME v、[vol]、[mix]
音声の音量を設定するn個(0-3)からボリューム(0-15)およびその出力混合(0-3):
0 | ミュート |
1個 | 左 |
2個 | 右 |
3個 | 左右(中央) |
すべてのパラメータを省略して、現在の設定を維持することができる。
SOUND v、[w]、[pw]、[len]
音声の基本的なサウンドパラメータを設定するv(0~3)。
wのは波形である。
0 | のこぎり歯 |
1個 | 三角形 |
2個 | パルス |
3個 | ノイズ |
パスワードはパルス幅(0~15)であり、値が8の場合は方形波になる。このパラメータはパルス波形にのみ影響する。
長さは1/60秒単位の音の長さで、最大値は255である。0は音が自動的に止まらないことを意味する。このコマンドを使用して長さを設定する場合、PLAYの長さパラメータは省略できる。
すべてのパラメータを省略して、現在の設定を維持することができる。
エンベロープv、[a]、[d]、[s]、[r]
音声のボリュームエンベロープジェネレータを設定するv(0~3)。
aは攻撃時間dは減衰時間rはリリース時間である。すべての時間は非線形であり、0(2 ms)から15(12 s)の範囲である。
sサステインレベル(0-15)であり、減衰時間の後、サウンドがリリースされる前のボリュームである。
すべてのパラメータを省略して、現在の設定を維持することができる。
封筒0,1,6,8,8再生0,49,20待機30再生0,53,20待機30再生0,56,40待機120
LFO v,[r],[fr],[vol],[pw]
音声のLFO(低周波発振器)を設定するv(0~3)。
rはLFOレートであり、0(0.12 Hz)から15(18 Hz)までの範囲が非線形である。
他のパラメータは、さまざまなサウンドパラメータに対するエフェクトの量を設定する。fr(frは周波数/ピッチボリュームボリュームおよびパスワードパルス幅。これらの値の範囲は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 v,[w],[i],[e],[t]
音声のLFO波のオプションを設定しますv(0-3)。すべてのパラメータを省略して、現在の設定を維持することができる。
wの | 波(0-3): 0:三角形 1:のこぎり歯 2:正方形 3:ランダム |
i型 | 反転(0/1) |
e | envモード有効(0/1) |
t | トリガー有効(0/1) |
デフォルトでは、LFOはその出力を通常のサウンドパラメータに追加する。invertが有効になっている場合は、減算する。envモードを有効にすることで、LFOは1サイクル後に停止するため、追加のエンベロープジェネレータとして使用できる。トリガーが有効になっている場合、LFOは再生されたサウンドごとに再起動する。そうでない場合は、継続的に実行される。トリガーはenvモードで暗黙的に有効になる。
音源a
PLAY、MUSIC、TRACKコマンドの現在のデータソースをメモリアドレスに設定するaこれは、これらのコマンドへの次の呼び出しにのみ影響し、すでに開始された再生は独自のデータソースを保持する。データは、サウンドコンポーザツールの形式であると仮定される。
デフォルトでは、ROMエントリ15がソースとして使用される。
音楽(n)
音楽の再生状況を返します。指定n個取得したい情報:
0 | 現在のパターン |
1個 | 現在の行 |
2個 | 現在のティック |
3個 | 現在の速度(0=停止) |
DATA定数リスト
READコマンドによってアクセスされる、コンマで区切られた数値および文字列定数(値であるが、変数または式ではない)を格納する。DATAコマンドは実行されず、プログラム内の任意の場所に配置できる。
READコマンドは、プログラムの先頭から末尾までの順序でDATAにアクセスする。すべてのDATAコマンドのすべての定数は、項目の1つの連続したリストとして読み取られる。
READ変数リスト
DATAコマンドから値を読み取り、次のコンマで区切られた変数に割り当てる。変数リストプログラムには、現在のデータ値への内部ポインタがある。各値が読み取られると、ポインタは次のデータ値に移動する。
I=0から3 READ TYPE$、POWER PRINT TYPE$;":"、POWER NEXT I DATA「LASER」、10、「BLASTER」、15 DATA「PLASMA」、20、「FUSION」、30
RESTORE[ラベル]
内部読み取りポインタを別の位置に変更する。これにより、データを再読み取りしたり、特定のデータを選択したりすることができる。ラベルパラメータを省略した場合、READはプログラムの先頭から再開する。それ以外の場合、ポインタはジャンプラベルに設定される。
RESTORE SHIELD FOR I=0 TO 1 READ TYPE$,POWER PRINT TYPE$;":",POWER NEXT I DATA"LASER",10,"BLASTER",15 SHIELD:DATA"SIMPLE",30,"ADVANCED",60
LowRes NXは、グラフィックス、サウンド、入出力用のチップ、カートリッジROM、ワーキングRAM、パーシステントRAMをシミュレートする。すべては、64 KBのメモリマップでアクセスできる。これについては、の章で説明する。「ハードウェアリファレンス」
PEEK(a)について
メモリアドレスのバイト値(0-255)を返す。a
タッチスクリーンプリント「タッチ!」DO IF PEEK($FF75)および%10 THEN PRINT PEEK($FF72)、PEEK($FF73)END IF WAIT VBL LOOP
POKE a、v
アドレスにメモリを設定するa評価するvvは0から255までの数値式であり、この範囲外の数値式は8ビットに切り捨てられる。
POKE$9000,232 POKE$9002,233
PEEKW(a)
メモリアドレスの2バイト値(-32768から32767)を返す。a
POKEW a、v
メモリアドレスに2バイトの値を書き込むavは、-32768~32767の数値式である。この範囲外の数値式は16ビットに切り捨てられる。
PEEKL(a)
メモリアドレスの4バイト値(-2147483648から2147483647)を返す。a
POKEL a、v
メモリアドレスに4バイトの値を書き込むavは、-2147483648~2147483647の数値式である。この範囲外の数値式は32ビットに切り捨てられる。
'使用例永続的なRAM HI=PEEKL($E000)PRINT"HIGHSCORE:"PRINT HI INPUT"SCORE:";SC IF SC>HI THEN POKEL$E000、SC PRINT"RESTART!"
a、nをdにコピー
コピーn個メモリアドレスから始まるバイトa対処するdソース領域と宛先領域が重複する場合がある。
「COPY CHARACTERS FROM ROM」エントリ4をビデオRAM COPY ROM(4)に、サイズ(4)を$8000に
FILL a,n[,v]
セットn個メモリアドレスから始まるバイトa評価するvパラメータが省略された場合は0。
ROL a、n
アドレスでバイトを取得するaビットを左に回転させる。n個場所。
ROR a、n
アドレスでバイトを取得するaビットを右に回転させn個場所。
ROM(n)
ROMエントリのメモリアドレスを返す。n個
サイズ(n)
ROMエントリのバイト数を返す。n個
ファイルコマンドを使用して、最大16個のファイルを含む仮想ディスクにデータを保存することができる。そのフォーマットは、プログラムファイルのROMエントリ部分と同じである。これにより、任意のNXプログラムを仮想ディスクとして直接使用して、データを編集することができる。
仮想ディスクは、画像やマップのエディタ、音楽プログラムなどの開発ツールにのみ使用することを目的としている。ゲームでは、代わりに永続メモリを使用する必要がある。標準的なLowRes NXコンソールにディスクドライブがないと想像してほしい。
負荷f、a[、n[、o]]
ファイル番号をロードするf値現在の仮想ディスクからアドレスから始まるメモリへa
オプションで、パラメータn個は、ロードされるべき最大バイト数に使用できる。0は制限なしを意味する。オプションのパラメータを使用してoファイル内のオフセットを設定することができる。
LOADはツールのみに使用されることを意図している。ゲームデータにはROMエントリを、ゲーム状態には永続メモリを使用する。
保存f、c$、a、n
保存n個メモリアドレスから始まるバイトa現在の仮想ディスクにファイル番号としてf値(0-15)コメント付きc$(最大31文字)。
このファイルが以前にロードされたことがある場合は、元のコメントを保持するか、保存する前にユーザーが編集できるようにすることを検討する。ファイルが新しい場合は、コメントには少なくとも「CHARACTERS」や「MUSIC」などのデータのタイプを含める必要がある。
SAVEは、ツールにのみ使用することを目的としている。永続メモリを使用してゲーム状態を保存する。
ファイル
FILE$で使用する現在のファイルディレクトリをロードする。
ファイル$(f)
ファイル番号のコメント文字列を返すf値ファイルディレクトリにアクセスしてその内容を更新する前にFILESを呼び出すか、LOADまたはSAVEの後に直接FILE$を使用する。
Iのファイル=0から15 PRINT I、FILE$(I)NEXT I
FSIZE(n)は
ファイル番号のバイト数を返す。n個ファイルディレクトリにアクセスしてその内容を更新する前にFILESを呼び出すか、LOADまたはSAVEの後に直接FSIZEを使用する。
PI法
PIは円の円周と直径の比である:3.1415926535.
SIN(x)は
の正弦x個ここでx個はラジアンである。
COS(x)は
のコサインx個ここでx個はラジアンである。
TAN(x)は
の接線x個ここでx個はラジアンである。
ASIN(x)は
の逆正弦x個ここでx個は-1から+1の範囲内である必要がある。関数の範囲は-(PI/2)<=ASIN(x)<=(PI/2)。
ACOS(x)の
のアークコサインx個ここでx個-1から+1の範囲である必要がある。関数の範囲は0<=ACOS(x)<=PI。
ATAN(x)の
のアークタンジェントx個ラジアン、つまり接線が次の角度であるx個関数の範囲は-(PI/2)<=ATAN(x)<=(PI/2)。
HSIN(x)の
の双曲線正弦x個
HCOS(x)
双曲線余弦x個
HTAN(x)は
双曲線正接x個
ABS(x)
の絶対値x個
SGN(x)の
の符号x個:-1 ifx個<0、0 ifx個=0および+1 ifx個>0。
INT(x)は
より大きくない最大の整数x個例えば、INT(1.3)=1およびINT(-1.3)=-2。
EXP(x)は
指数関数x個、すなわち、自然対数の底(e=271828.)をべき乗した値x個
ログ(x)
の自然対数x個;x個は0より大きい必要がある。
SQR(x)は
の非負の平方根x個;x個は負でない必要がある。
RND(リアルタイム)
0<=RND<1の範囲で一様に分布する乱数列の次の数。
RND(n)
2番目の構文は、0からn個包括的。
RANDOMIZE x(ランダム化)
乱数のシードをx個これは整数値である必要がある。デフォルトでは、プログラムはシード0から開始するので、乱数のシーケンスは常に同じである。
ランダム化タイマー
プログラムを実行するたびに異なる乱数が必要な場合は、この行を最初に挿入する必要がある。
Iのためのランダム化タイマー=1から16 PRINT RND(1000)NEXT I
最小(x,y)
MIN関数は、2つの式の最小値を返す。
MAX(x,y)
MAX関数は、2つの式の最大値を返す。
SWAP var1、var2
同じ型の任意の2つの変数間でデータをスワップする。
A=10 B=40 SWAP A,B PRINT A PRINT B
INC変数
変数の値を1つ増加させる。INC AはA=A+1と同じことをするが、CPUサイクルのコストは低くなる。
DEC変数
変数の値を1つ減少させる。DEC AはA=A-1と同じことをするが、CPUサイクルのコストは低い。
ADD変数、x
値を加算するx個ここでx個正か負か。ADD A,XはA=A+Xと同じことをするが、CPUサイクルのコストは低くなる。
var、x、baseをtopに追加
ADDの2番目の構文は、カウンタを繰り返すのに役立つ。
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$(s$,n)
最初の文字列を含む新しい文字列を返すn個文字s$(ドル)
PRINT LEFT$("LOWRES NX",3)
LEFT$(s$,n)=a$
変数の最初の文字を上書きするs$(ドル)最初のn個文字a$
A$="FOORES NX"LEFT$(A$,3)="LOWER"PRINT A$
RIGHT$(s$,n)
最後の文字列を含む新しい文字列を返すn個文字s$(ドル)
RIGHT$(s$,n)=a$
変数内の最後の文字を上書きするs$(ドル)最後のn個文字a$
MID$(s$,p,n)
新しい文字列を返す。n個文字s$(ドル)文字から開始p最初の文字の位置は1である。
PRINT MID$("LOWRES NX",4,3)
MID$(s$,p,n)=a$
変数内の指定されたテキスト範囲を上書きするs$(ドル)最初のn個文字a$
A$=「LOWFOO NX」MID$(A$,4,3)=「RESTAURANT」PRINT A$
INSTR(d$,s$[,p])
最初の出現を検索するs$(ドル)内部d$(ドル)開始位置を返す。見つからない場合、この関数は0を返す。通常、この関数は文字列の先頭から検索を開始する。オプションで、次の位置から検索を開始することもできる。p
PRINT INSTR("LOWRES NX","RES")
CHR$(n)
ASCIIコードを含む1文字を含む文字列を返すn個
FOR I=32 TO 90 PRINT CHR$(I)NEXT I
ASC(a$)
の最初の文字のASCIIコードを提供する。a$
PRINT ASC("L")
LEN(a$)
内の文字数を返すa$
VAL(a$)
記述された数値を変換するa$数値に変換します。
STR$(n)の場合
数値を変換するn個文字列に変換する。
BIN$(n[,len])
数値を変換するn個少なくとも1つのバイナリ文字列に長さ数字。
HEX$(n[,len])
数値を変換するn個16進数文字列に変換し、少なくとも長さ数字。
システムコマンドは、仮想コンソールとLowRes NXアプリケーション間のリンクである。
TRACE式-リスト
デバッグ・ウィンドウにテキストを出力します。式には、カンマで区切られた文字列または数値を使用できます。デバッグ・モードが有効でない場合、このコマンドは無視されます。
'デバッグモードで実行A=13 B$="GO"TRACE"TEST",A,B$
システムn、v
システムステータスを設定するn個評価するv現在、次の1つのステータスのみが使用可能である。
0 | 省エネルギーモード: 有効化v0とは異なる。このモードでは、ユーザ入力がないときは常に、画面は非常に低いレートで更新される。仮想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レジスタ
文字は、8×8ピクセルの画像で、1ピクセルあたり2ビットであり、結果として16バイトのサイズになる。ビデオRAMには、256文字分のスペースがある。
文字の最初の8バイトには、すべてのピクセルの下位ビットが含まれ、その後に、すべてのピクセルの上位ビットを含むさらに8バイトが続く。
背景は、32×32文字のセルのマップである。各セルは2バイトを占める。
-文字番号-属性:ビット目的0-2パレット番号3反転X 4反転Y 5優先度6-7未使用
ゲームカートリッジ上のバッテリバッファ付きRAMと考えてください。ゲームの位置やハイスコアテーブルなどのデータに使用します。永続的RAMの内容は、プログラムを終了すると自動的に保存され、プログラムを実行するとロードされます。各プログラムは、永続的RAMを個別に保存します。
64個のスプライトが利用可能であり、それぞれが4バイトを占有する。
-X位置-Y位置-文字番号-属性:ビット目的0-2パレット番号3反転X 4反転Y 5優先度6-7サイズ:0:1文字(8×8 px)1:2×2文字(16×16 px)2:3×3文字(24×24 px)3:4×4文字(32×32 px)
注:XおよびYスプライト位置レジスタのオフセットは32であるため、負の値を使用せずに画面の左上の境界から移動することができる。BASICコマンドを使用すると、このオフセットは便宜的に削除される。
4色ごとに8つのパレットがある。1色は1バイトである。
ビットコンポーネント0-1青2-3緑4-5赤
$FF20-属性:ビット目的0スプライト有効1 BG0有効2 BG1有効3 BG0セルサイズ、4 BG1セルサイズ:0:1文字(8×8 px)(BG 256×256 px)1:2×2文字(16×16 px)(BG 512×512 px)$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 Init 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ビット値である:f=hertz*16
$FF70-ゲームパッド0ステータス$FF71-ゲームパッド1ステータスゲームパッドステータス:ビット目的0上1下2左3右4ボタンA 5ボタンB$FF72-最後のタッチX位置$FF73-最後のタッチY位置$FF74-最後に押したキー(ASCIIコード)$FF75-ステータス:ビット目的0一時停止ボタン1タッチ$FF76-属性:ビット目的0-1ゲームパッド有効:0:オフ1:1プレイヤー2:2プレイヤー2キーボード有効3タッチスクリーン有効
これは、PLAY、MUSIC、およびTRACKコマンドで使用されるフォーマットである。このデータでMUSICまたはTRACKコマンドが使用されていない場合は、サウンドプリセットのみを保存することが有効である。使用可能なトラックがある場合は、すべてのパターンを保存する必要がある。最後に使用されたトラックの後の空のトラックは保存する必要はない。
Offset-Content 0-16サウンドプリセット128-64パターン384-64トラック
各サウンドプリセットは8バイトを占有し、1つの音声のオーディオレジスタのフォーマットに一致するが、最初の4バイトはない。
各パターンは4バイトを占有する。
-Voice 0:Bit Purpose 0-6 Track index(64=音声未使用)7 Flag loop start-Voice 1:Bit Purpose 0-6 Track index(64=音声未使用)7 Flag loop end-Voice 2:Bit Purpose 0-6 Track index(64=音声未使用)7 Flag song stop-Voice 3:Bit Purpose 0-6 Track index(64=音声未使用)
各トラックは96バイトを占有し、32個のエントリで構成され、各エントリは3バイトである。
-ノートピッチ(0=空)-データ(ノートが0の場合は無視される):ビット目的0-3ボリューム4-7サウンドコントロール:ビット目的0-3パラメータ4-7コマンド
これらのコマンド、関数、および構文は今後使用すべきではなく、将来のバージョンで削除される可能性がある。
SPRITE.A n、(pal、fx、fy、pri、s)
使用スプライト(新しい構文)またはスプライトA(単一値のみ)。
ATTR(pal,fx,fy,pri,s)[,m]
属性a、m
使用パルフリッププリオまたは属性(単一値のみ)を代わりに使用する。色およびBGティント属性マスクを置換する。
DISPLAY(s、b0、b1、c0、c1)
ディスプレイa
使用BG VIEWのオン/オフSPRITE VIEW ON/OFF(スプライトビューのオン/オフ)およびセルサイズに登録してある。
表示
使用PEEK($FF20)に登録してある。
LFO.A v、(w、r、e、t)
使用LFO波に登録してある。
以下は、LowRes NX BASICで使用されている予約語のリストである。これらの単語を変数名として使用すると、構文エラーが発生する。
アスタリスクでマークされたキーワードは、まだ機能していないが、将来のバージョン用に予約されている。
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*、DIM、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、OUTPUT*、PAL、PALETTE、PAUSE、REM、REPEAT、RESTORE、RETURN、RIGHT$、RIGHT、RND、ROL、ROM、ROR、SAVE、SCROLL、SCROLL.X、SCROLL.Y、SQN、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