はじめに

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

仮想ゲーム機で自分のレトロゲームを作る。クラシックな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アドベンチャーおよびデモスター・スクローラー

「マイプログラム」画面で、プログラムを選択してソースコードエディタを開き、「再生」ボタンをタップして実行する。
「programs」というフォルダに例がある。LowRes NXアプリケーションを開き、任意の.nxファイルをそのウィンドウにドラッグ&ドロップする。また、LowRes NXを.nxファイルのデフォルトアプリケーションとして選択することもできるため、プログラムをダブルクリックするだけで起動できる。

十分にプレイしたら、最初の独自のプログラムを作成できる。

「マイプログラム」画面で、「+」ボタンをタップして新しいプログラムを作成し、それを選択してソースコードエディタを開く。
任意のテキストエディタを使用して、新しいファイルを作成します。Windowsでは、テキストエディタがMac/Linuxの行端をサポートしていることを確認してください。サポートしていない場合、すべてが1行に表示される可能性があります。

次の行を入力します。

PRINT"WELCOME!"PRINT"WHAT IS YOUR NAME?"INPUT">";N$PRINT"HELLO";N$;"!"
プログラムファイルを有効な名前と拡張子「.nx」で保存します。

次に、プログラムを実行します。これは、キーボードを使用した簡単な例です。ゲームパッドで何かを試してみましょう。別の新しいプログラムを作成し、次のように入力します。

ゲームパッド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デザイナー]を選択する。

プログラムを開き、[ツール]ボタンをタップして、ツールを選択します。
プログラムを実行し、Escキーを押して開発メニューに入る。次に、編集(ED)ボタンを押してツールを選択する。デフォルトでは、ツールメニューは空であるため、プログラム「Gfx Designer」と「Sound Designer」をウィンドウにドラッグ&ドロップする。

何かを文字#1として描画し(#0は空のままにする)、「ファイル」をタップしてファイル2(「主な文字」)として保存する。次にソースコードエディタに戻ると、プログラムの下にいくつかの16進データが表示される。これがあなたのイメージです!それを見るためには、行を変更します。

SPRITE 0、X、Y、225(スプライト0、X、Y

SPRITE 0、X、Y、1

プログラムを実行します。そこにある!

LowRes NXアプリケーションでCtrl+Rキーを押して、現在のプログラムを再ロードして実行する。開発者メニューの「実行」ボタンでも同じことができる。

ツールは自動的に保存されないため、ツールを終了する前に保存することを忘れないようにしてください。

標準ROMエントリ

簡単に開始するには、次の表のROMエントリ番号を使用する必要がある。それらのデータは自動的に使用できるように準備されている。

#0デフォルトフォントの場合は空のままにする
#1カラーパレット
#2文字(スプライト、タイル)
#3背景(タイルマップ)
#15音と音楽

カートリッジROMエントリ0がプログラムで使用されていない場合、コンパイラはデフォルトフォントの文字データを追加する。これは192~255の文字を占有し、プログラムの起動時に自動的にビデオRAMにコピーされる。デフォルトフォントを使用する場合は、ROMエントリ0を未使用のままにしておく必要がある。

Gfxデザイナー

Gfxデザイナーを使用して、文字(スプライト、タイル、フォント)、デザイン背景(タイルマップ、画面レイアウト)を描画し、カラーパレットを編集する。

右下には、プログラムのさまざまなセクション(文字エディタ、パレットエディタ、背景エディタ)に対応する3つのタブがある。LowRes NXをパソコンで実行するときは、1、2、3のキーを使って切り替えることができる。

Gfx Designerは、起動時にメインパレット(ファイル1)、文字(ファイル2)、および背景(ファイル3)をロードするが、自動的には保存されないことに注意する。

文字エディタ

下部では、256文字が4ページに分割されているのがわかる。ここでは、現在の文字を選択して編集することができる。デフォルトのフォントを使用する場合は、最後のページを空にしておく。また、背景をきれいにするために、文字#0を空にする必要がある。

左上の四角形は、選択した色を使用して現在の文字を描画するためのものである。

ファイル文字ファイルメニューに移動します。
モフ現在の文字のピクセルを移動する。
16*1616×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)をロードするが、自動的には保存されないことに注意すること。サウンドファイルには、すべてのサウンドと音楽のデータが含まれている。

構造

16サウンド

サウンドは、使用可能なすべてのサウンドパラメータ(波形、エンベロープ、LFOなど)を備えたプリセットであり、プログラム内のPLAYコマンドで直接使用したり、トラック/ソングの楽器として使用したりすることができる。

64トラック

トラックは、1つの声に対して32のステップのシーケンスであり、各ステップは音符を演奏したり、音を修正したりすることができる。TRACKコマンドを使用して、複雑な音響効果や短いメロディー(例えば、「レベルアップ」)をプログラムで使用することができる。トラックは、曲を作成するためにも使用される。

64パターン

パターンは音楽のブロックであり、4つの声のそれぞれでどのトラックを再生すべきかを定義する。パターンは、次の場合を除いて、1つずつ再生される。次のパターンが空の場合、曲は停止される。現在のパターンが終了し、「ループ終了」フラグがある場合、プレーヤーは「ループ開始」フラグを使用して前のパターンにジャンプバックする。パターンが終了し、「停止」フラグがある場合、プレーヤーは停止する。
ゲーム用の音楽を作成したい場合で、追加の音響効果を使用する予定がある場合は、少なくとも1つの声を空にしておく必要がある。

64のパターンは、1つの長い曲やいくつかの短い曲に使用できる。「ループ」と「ストップ」のフラグを使用することで、曲を分けることができる。1つの特定の曲を再生するには、最初のパターンから始めるだけである。プログラム内の曲を再生するには、MUSICコマンドを使用する。

エディタ

サウンドコンポーザの右上隅には、パターンエディタ、トラックエディタ、サウンドエディタの3つのタブがある。これは「トラッカー」スタイルのプログラムで、タイムラインが左から右ではなく上から下に移動することを意味する。したがって、トラック内のステップは行とも呼ばれる。0から15の範囲のほとんどの値は、16進数形式(0-F)で表示される。

LowRes NXをコンピュータ上で実行する場合、いくつかのキーボードサポートがある。矢印キーでカーソルを移動し、キー行で2オクターブの音楽キーボードをシミュレートして音符を入力する。リターンキーで音符の停止を入力し、バックスペースで現在の音符を削除し、スペースで演奏(パターン/トラック)と停止を切り替える。

パターンエディタ

ここでは、パターンを選択し、すべての音声に対してそのトラックを選択し、選択した各トラックの音符を直接編集することができる。また、現在のパターンの「ループ」と「ストップ」フラグのトグルボタンもある。トラックのない音声に音符を設定すると、自動的にフリートラックが選択される。トラック内の音符を停止/解除したい場合は、音楽キーボードの星の記号を使用する。

トラックエディタ

ここでは、追加のパラメータを使用して、1つのトラックを選択して編集することができる。

Sキーサウンド
Vキーボリューム
Cキー[サウンド]コマンド
Pキーパラメータ

サウンドエディタ

ここでサウンドを定義してテストします。現在選択されているサウンドは、他のエディタで新しいノートに使用されます。

サウンドコマンド

これらのコマンドを使用すると、再生中にパラメータを動的に変更できます。これらのコマンドは、トラックエディタで使用します。

CキーPキー目的
00コマンドなし
0x個ミックス(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[寸法記入]

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

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)
0ではない
「しない」
および A=1およびB=12
170および15
「および」
または X=10またはY=0
128または2
「または」
排他的論理和 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[ゴ

GOTOラベル

指定されたラベルにジャンプし、そこでプログラムの実行を継続する。

PRINT「START」GOTO GAMELEVEL GAMEOVER:PRINT「GAMEOVER」END GAMELEVEL:PRINT「PLAYING」GOTO GAMEOVER

GOSUBの

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を待つ

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.END SUB

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

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プリント「ハロー」

=CURSOR.X/Y

カーソル.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法

スペースを含むウィンドウをクリアし、テキストカーソルの位置をリセットする。

プリント「ハロー」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

自動一時停止処理を有効または無効にします。デフォルトでは有効になっているため、一時停止ボタンを押すと、プログラムが停止し、ボタンを再度押すまで画面に「一時停止」と表示されます。

一時停止

一時停止

自動一時停止処理が無効になっている場合でも、プログラムを一時停止し、デフォルトの「一時停止」画面を表示する。

=PAUSE

一時停止

一時停止ボタンが押された場合はtrueを返し、それ以外の場合はfalseを返す。この関数を呼び出した後、その値はクリアされるので、各ボタンタップを1回だけ返す。この関数では、自動一時停止処理を無効にする必要がある。

ゲームパッド1 PAUSE OFF DO IF PAUSE THEN PRINT「PAUSE PRESSED」WAIT VBLループ

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

タッチスクリーンサポートは、コンピュータのマウスでもうまく機能すると思われる場合にのみ使用してください。独自のゲームボタンを作成したい場合は、キーボードや本物のゲームパッドをサポートしていないため、コンピュータ上でゲームをプレイできない可能性があることに注意してください。常に標準のゲームパッド機能を使用することを考慮してください。

タッチスクリーン

タッチスクリーン

タッチスクリーン/マウスのサポートを有効にする。一度有効になると、プログラムはゲームパッド入力に変更できなくなる。

=TOUCH.X/Y

タッチXタッチY

ユーザが画面に触れたとき、または最後に触れたときの現在のXまたはYピクセル位置を返す。

=タッチ

タッチ

画面が現在タッチされている場合はtrueを返す。

タッチスクリーンDO IF TOUCH THEN PRINT TOUCH.X,TOUCH.Y WAIT VBLループ

=TAP(タップ)

カッ

画面が現在タッチされており、最後のフレームにタッチされていない場合は、trueを返す。

タッチスクリーンDO IF TAP THEN PRINT TOUCH.X,TOUCH.Y WAIT VBL LOOP

キーボード

キーボードのオン/オフ/オプション

キーボードオンキーボードオフ

キーボードを有効または無効にします。キーボードが有効になっている間は、ゲームパッドは機能しません。

キーボード(オプション)

キーボードを有効にするが、タッチスクリーンデバイスにオンスクリーンキーボードを表示しない。このモードを使用するプログラムは、ゲームパッドまたはタッチコントロールで完全に使用可能であり、キーボードは代替入力にのみ使用する必要がある。

=INKEY$

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

スプライトA

SPRITE.A n、a

スプライトのすべての属性を設定するn個(0-63)を単一の8ビット値として指定する。「スプライトレジスタ」に登録してある。

注:これらの値は、次の属性構文で設定する方が簡単である。スプライトコマンド。

スプライトオフ

SPRITE OFF[n]SPRITE OFF aからb

1つ以上のスプライトを非表示にする。すべてのパラメータを省略すると、すべてのスプライト(0-63)が非表示になる。1つのパラメータを使用すると、指定されたスプライトのみが非表示になる。最後のオプションは、次の範囲のスプライトを非表示にすることである。ab

=SPRITE.X/Y

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

スプライトの位置を返すn個

=SPRITE.C(スプライトC)

SPRITE.C(n)(スプライトC(n)

スプライトの文字を返すn個

=SPRITE.A(スプライトA)

SPRITE.A(n)(スプライトA(n)

スプライトの属性を返すn個8ビット値として。「スプライトレジスタ」に登録してある。

=SPRITE HIT(スプライトヒット)

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

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群

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とする。

CELL.C(cx、cy)

位置にあるセルの文字を返すcx、cy現在の背景の。

=CELL.A(セルA)

CELL.A(cx、cy)

位置にあるセルの属性を返すcx、cy現在の背景を8ビット値で表したもの。「BGデータ」に登録してある。

BG FILL[BGフィル]

BG FILL cx1,cy1 TO cx2,cy2 CHAR c

領域内のすべてのセルを設定するcx1、cy1cx2、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ティント

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

領域内のすべてのセルのパレットやその他の属性をcx1、cy1cx2、cy2現在の背景の。セルの文字と省略された属性は変更されない。

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

BGソース

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 COPY[BGコピー]

BG cx1、cy1、w、hをcx2、cy2にコピー

現在のソースの2次元部分を現在の背景にコピーする。

GFXデザイナーBG COPY 0,0,20,16から0,0への'SHOW SCREEN

BGスクロール

BG SCROLL cx1,cy1からcx2,cy2 STEP dx,dy

領域内のすべてのセルの内容をcx1、cy1cx2、cy2水平にdxおよび垂直方向ディー細胞。

DO BG SCROLL 0,0から19,15ステップ-1,0セル18、RND(15)、193+RND(62)WAIT 5ループ

=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」エラーが発生する。

テキスト

テキスト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

=SCROLL.X/Y

スクロールX(b)スクロールY(b)

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

表示設定

SPRITE VIEW ON/OFF(スプライトビューのオン/オフ)

スプライトビューオン
スプライトビューオフ

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

BG VIEWのオン/オフ

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

=COLOR[色設定]

色(p,n)

色の値を返すn個(0-3)パレットからp(0-7)。RED、GREEN、およびBLUEの値は、次のように取得できる。

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

ON RASTER CALL/OFF(ラスター呼び出し時/オフ時)

ON RASTER CALL名

描画される前にすべての画面行に対して実行されるサブプログラムを設定する。通常は、カラーパレットを変更したり、スクロールオフセットを変更してグラフィカルな効果を得るために使用される。ラスタサブプログラムは短くする必要がある(「CPUサイクル」)。

オンラスターオフ

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

ON RASTER CALL RAINBOW PRINT"RAINBOW WRITER"INPUT A$SUB RAINBOW PALETTE 0,(RASTER+TIMER)MOD 64,,,END SUB

=ラスター

ラスター

現在の画面行(y位置)を返します。これは、ラスターサブプログラムで使用します。

VBLコールのオン/オフ

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法

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波

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(ピーク)

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

PEEKW(a)

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

POKEW

POKEW a、v

メモリアドレスに2バイトの値を書き込むavは、-32768~32767の数値式である。この範囲外の数値式は16ビットに切り捨てられる。

=PEEKL

PEEKL(a)

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

POKEL

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

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

FSIZE(n)は

ファイル番号のバイト数を返す。n個ファイルディレクトリにアクセスしてその内容を更新する前にFILESを呼び出すか、LOADまたはSAVEの後に直接FSIZEを使用する。

数学関数

三角関数

=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個:-1 ifx個<0、0 ifx個=0および+1 ifx個>0。

=INT(整数)

INT(x)は

より大きくない最大の整数x個例えば、INT(1.3)=1およびINT(-1.3)=-2。

=EXP

EXP(x)は

指数関数x個、すなわち、自然対数の底(e=271828.)をべき乗した値x個

=ログ

ログ(x)

の自然対数x個;x個は0より大きい必要がある。

=SQR(正数)

SQR(x)は

の非負の平方根x個;x個は負でない必要がある。

ランダムシーケンス

=RND(リアルタイム)

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社

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$=

RIGHT$(s$,n)

最後の文字列を含む新しい文字列を返すn個文字s$(ドル)

RIGHT$(s$,n)=a$

変数内の最後の文字を上書きするs$(ドル)最後のn個文字a$

=MID$=

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

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

最初の出現を検索するs$(ドル)内部d$(ドル)開始位置を返す。見つからない場合、この関数は0を返す。通常、この関数は文字列の先頭から検索を開始する。オプションで、次の位置から検索を開始することもできる。p

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

=CHR$

CHR$(n)

ASCIIコードを含む1文字を含む文字列を返す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])

数値を変換するn個少なくとも1つのバイナリ文字列に長さ数字。

=HEX$

HEX$(n[,len])

数値を変換するn個16進数文字列に変換し、少なくとも長さ数字。

システム

システムコマンドは、仮想コンソールとLowRes NXアプリケーション間のリンクである。

トレース

TRACE式-リスト

デバッグ・ウィンドウにテキストを出力します。式には、カンマで区切られた文字列または数値を使用できます。デバッグ・モードが有効でない場合、このコマンドは無視されます。

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

システム

システムn、v

システムステータスを設定するn個評価するv現在、次の1つのステータスのみが使用可能である。

0 省エネルギーモード:
有効化v0とは異なる。このモードでは、ユーザ入力がないときは常に、画面は非常に低いレートで更新される。仮想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レジスタ

文字データ

文字は、8×8ピクセルの画像で、1ピクセルあたり2ビットであり、結果として16バイトのサイズになる。ビデオRAMには、256文字分のスペースがある。

文字の最初の8バイトには、すべてのピクセルの下位ビットが含まれ、その後に、すべてのピクセルの上位ビットを含むさらに8バイトが続く。

BGデータ

背景は、32×32文字のセルのマップである。各セルは2バイトを占める。

-文字番号-属性:ビット目的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文字(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

I/Oレジスタ

$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