# メモリマップ

## いろいろ

すべての値はリトル エンディアンであるため、小さい桁が小さいアドレスに格納されます。

| アドレス | サイズ       | 説明                                                           |
|--------|-----------:|--------------------------------------------------------------------|
|  00000 |          1 | MEG-4 ファームウェアバージョンメジャー                                         |
|  00001 |          1 | MEG-4 ファームウェアバージョンマイナー                                         |
|  00002 |          1 | MEG-4 ファームウェアバージョンのバグ修正                                 |
|  00003 |          1 | パフォーマンス カウンター、最後のフレームの未使用時間 (1/1000 秒単位)    |
|  00004 |          4 | 電源投入からの 1/1000 秒のティック数                                     |
|  00008 |          8 | UTC UNIX タイムスタンプ                                                        |
|  00010 |          2 | 現在のロケール                                                                  |

パフォーマンス カウンタは、最後のフレームが生成されたときに消費されなかった時間を示します。
これがゼロまたは負の場合、loop() 関数が利用可能な時間枠をどれだけ超えたかを意味します。

## ポインタ

| アドレス | サイズ       | 説明                                                           |
|--------|-----------:|--------------------------------------------------------------------|
|  00012 |          2 | ポインタ ボタンの状態 ([getbtn] および [getclk] を参照)                  |
|  00014 |          2 | ポインタ スプライト インデックス                                               |
|  00016 |          2 | ポインタのX座標                                               |
|  00018 |          2 | ポインタのY座標                                               |

ポインタボタンは次のとおりです:

| 定義    | ビットマスク | 説明                                                                |
|---------|----------:|--------------------------------------------------------------------|
| `BTN_L` |         1 | マウスの左ボタン                                                  |
| `BTN_M` |         2 | マウスの中ボタン                                                |
| `BTN_R` |         4 | マウスの右ボタン                                                 |
| `SCR_U` |         8 | 上にスクロール                                                                |
| `SCR_D` |        16 | 下へスクロール                                                                |
| `SCR_L` |        32 | 左にスクロール                                                                |
| `SCR_R` |        64 | 右にスクロール                                                                |

ポインタ スプライト インデックスの上位ビットはホットスポットに使用されます: ビット 13 ～ 15 ホットスポット Y、ビット 10 ～ 12 ホットスポット X、ビット 0 ～ 9
スプライト。事前定義された組み込みカーソルがいくつかあります:

| 定義         | 価値       | 説明                                                      |
|--------------|----------:|---------------------------------------------------------------|
| `PTR_NORM`   |      03fb | 通常（矢印）ポインタ                                                       |
| `PTR_TEXT`   |      03fc | テキストポインタ                                                  |
| `PTR_HAND`   |      0bfd | リンクポインタ                                                  |
| `PTR_ERR`    |      93fe | エラーポインタ                                                 |
| `PTR_NONE`   |      ffff | ポインタが隠れています                                         |

## キーボード

| アドレス | サイズ       | 説明                                                           |
|--------|-----------:|--------------------------------------------------------------------|
|  0001A |          1 | キーボードキューテール                                                |
|  0001B |          1 | キーボードキューヘッド                                                |
|  0001C |         64 | キーボードキュー、16 要素、各 4 バイト ([popkey] を参照)           |
|  0005C |         18 | スキャンコードによるキーボードのキーの押下状態 ([getkey] を参照)            |

キューからポップされたキーは UTF-8 で表されます。 一部の無効な UTF-8 シーケンスは、特殊な (印刷不可能な) キーを表します。次に例を示します:

| キーコード | 定義                                            |
|---------|-------------------------------------------------|
| `\x8`   | 文字 8、<kbd>←Backspace</kbd> キー       |
| `\x9`   | 文字 9、<kbd>Tab</kbd> キー             |
| `\n`    | 文字 10、<kbd>⏎Enter</kbd> キー         |
| `\x1b`  | 文字 27、<kbd>Esc</kbd> キー            |
| `Del`   | <kbd>Del</kbd> キー                          |
| `Up`    | カーソル矢印 <kbd>▴</kbd> キー               |
| `Down`  | カーソル矢印 <kbd>▾</kbd> キー               |
| `Left`  | カーソル矢印 <kbd>◂</kbd> キー               |
| `Rght`  | カーソル矢印 <kbd>▸</kbd> キー               |
| `Cut`   | カットキー (または <kbd>Ctrl</kbd>+<kbd>X</kbd>)   |
| `Cpy`   | コピーキー (または <kbd>Ctrl</kbd>+<kbd>C</kbd>)  |
| `Pst`   | 貼り付けキー (または <kbd>Ctrl</kbd>+<kbd>V</kbd>) |

スキャンコードは次のとおりです:

| スキャンコード | アドレス  | ビットマスク | 定義               |
|---------:|---------|--------:|-------------------|
|        0 |   0005C |       1 | `KEY_CHEAT`       |
|        1 |   0005C |       2 | `KEY_F1`          |
|        2 |   0005C |       4 | `KEY_F2`          |
|        3 |   0005C |       8 | `KEY_F3`          |
|        4 |   0005C |      16 | `KEY_F4`          |
|        5 |   0005C |      32 | `KEY_F5`          |
|        6 |   0005C |      64 | `KEY_F6`          |
|        7 |   0005C |     128 | `KEY_F7`          |
|        8 |   0005D |       1 | `KEY_F8`          |
|        9 |   0005D |       2 | `KEY_F9`          |
|       10 |   0005D |       4 | `KEY_F10`         |
|       11 |   0005D |       8 | `KEY_F11`         |
|       12 |   0005D |      16 | `KEY_F12`         |
|       13 |   0005D |      32 | `KEY_PRSCR`       |
|       14 |   0005D |      64 | `KEY_SCRLOCK`     |
|       15 |   0005D |     128 | `KEY_PAUSE`       |
|       16 |   0005E |       1 | `KEY_BACKQUOTE`   |
|       17 |   0005E |       2 | `KEY_1`           |
|       18 |   0005E |       4 | `KEY_2`           |
|       19 |   0005E |       8 | `KEY_3`           |
|       20 |   0005E |      16 | `KEY_4`           |
|       21 |   0005E |      32 | `KEY_5`           |
|       22 |   0005E |      64 | `KEY_6`           |
|       23 |   0005E |     128 | `KEY_7`           |
|       24 |   0005F |       1 | `KEY_8`           |
|       25 |   0005F |       2 | `KEY_9`           |
|       26 |   0005F |       4 | `KEY_0`           |
|       27 |   0005F |       8 | `KEY_MINUS`       |
|       28 |   0005F |      16 | `KEY_EQUAL`       |
|       29 |   0005F |      32 | `KEY_BACKSPACE`   |
|       30 |   0005F |      64 | `KEY_TAB`         |
|       31 |   0005F |     128 | `KEY_Q`           |
|       32 |   00060 |       1 | `KEY_W`           |
|       33 |   00060 |       2 | `KEY_E`           |
|       34 |   00060 |       4 | `KEY_R`           |
|       35 |   00060 |       8 | `KEY_T`           |
|       36 |   00060 |      16 | `KEY_Y`           |
|       37 |   00060 |      32 | `KEY_U`           |
|       38 |   00060 |      64 | `KEY_I`           |
|       39 |   00060 |     128 | `KEY_O`           |
|       40 |   00061 |       1 | `KEY_P`           |
|       41 |   00061 |       2 | `KEY_LBRACKET`    |
|       42 |   00061 |       4 | `KEY_RBRACKET`    |
|       43 |   00061 |       8 | `KEY_ENTER`       |
|       44 |   00061 |      16 | `KEY_CAPSLOCK`    |
|       45 |   00061 |      32 | `KEY_A`           |
|       46 |   00061 |      64 | `KEY_S`           |
|       47 |   00061 |     128 | `KEY_D`           |
|       48 |   00062 |       1 | `KEY_F`           |
|       49 |   00062 |       2 | `KEY_G`           |
|       50 |   00062 |       4 | `KEY_H`           |
|       51 |   00062 |       8 | `KEY_J`           |
|       52 |   00062 |      16 | `KEY_K`           |
|       53 |   00062 |      32 | `KEY_L`           |
|       54 |   00062 |      64 | `KEY_SEMICOLON`   |
|       55 |   00062 |     128 | `KEY_APOSTROPHE`  |
|       56 |   00063 |       1 | `KEY_BACKSLASH`   |
|       57 |   00063 |       2 | `KEY_LSHIFT`      |
|       58 |   00063 |       4 | `KEY_LESS`        |
|       59 |   00063 |       8 | `KEY_Z`           |
|       60 |   00063 |      16 | `KEY_X`           |
|       61 |   00063 |      32 | `KEY_C`           |
|       62 |   00063 |      64 | `KEY_V`           |
|       63 |   00063 |     128 | `KEY_B`           |
|       64 |   00064 |       1 | `KEY_N`           |
|       65 |   00064 |       2 | `KEY_M`           |
|       66 |   00064 |       4 | `KEY_COMMA`       |
|       67 |   00064 |       8 | `KEY_PERIOD`      |
|       68 |   00064 |      16 | `KEY_SLASH`       |
|       69 |   00064 |      32 | `KEY_RSHIFT`      |
|       70 |   00064 |      64 | `KEY_LCTRL`       |
|       71 |   00064 |     128 | `KEY_LSUPER`      |
|       72 |   00065 |       1 | `KEY_LALT`        |
|       73 |   00065 |       2 | `KEY_SPACE`       |
|       74 |   00065 |       4 | `KEY_RALT`        |
|       75 |   00065 |       8 | `KEY_RSUPER`      |
|       76 |   00065 |      16 | `KEY_MENU`        |
|       77 |   00065 |      32 | `KEY_RCTRL`       |
|       78 |   00065 |      64 | `KEY_INS`         |
|       79 |   00065 |     128 | `KEY_HOME`        |
|       80 |   00066 |       1 | `KEY_PGUP`        |
|       81 |   00066 |       2 | `KEY_DEL`         |
|       82 |   00066 |       4 | `KEY_END`         |
|       83 |   00066 |       8 | `KEY_PGDN`        |
|       84 |   00066 |      16 | `KEY_UP`          |
|       85 |   00066 |      32 | `KEY_LEFT`        |
|       86 |   00066 |      64 | `KEY_DOWN`        |
|       87 |   00066 |     128 | `KEY_RIGHT`       |
|       88 |   00067 |       1 | `KEY_NUMLOCK`     |
|       89 |   00067 |       2 | `KEY_KP_DIV`      |
|       90 |   00067 |       4 | `KEY_KP_MUL`      |
|       91 |   00067 |       8 | `KEY_KP_SUB`      |
|       92 |   00067 |      16 | `KEY_KP_7`        |
|       93 |   00067 |      32 | `KEY_KP_8`        |
|       94 |   00067 |      64 | `KEY_KP_9`        |
|       95 |   00067 |     128 | `KEY_KP_ADD`      |
|       96 |   00068 |       1 | `KEY_KP_4`        |
|       97 |   00068 |       2 | `KEY_KP_5`        |
|       98 |   00068 |       4 | `KEY_KP_6`        |
|       99 |   00068 |       8 | `KEY_KP_1`        |
|      100 |   00068 |      16 | `KEY_KP_2`        |
|      101 |   00068 |      32 | `KEY_KP_3`        |
|      102 |   00068 |      64 | `KEY_KP_ENTER`    |
|      103 |   00068 |     128 | `KEY_KP_0`        |
|      104 |   00069 |       1 | `KEY_KP_DEC`      |
|      105 |   00069 |       2 | `KEY_INT1`        |
|      106 |   00069 |       4 | `KEY_INT2`        |
|      107 |   00069 |       8 | `KEY_INT3`        |
|      108 |   00069 |      16 | `KEY_INT4`        |
|      109 |   00069 |      32 | `KEY_INT5`        |
|      110 |   00069 |      64 | `KEY_INT6`        |
|      111 |   00069 |     128 | `KEY_INT7`        |
|      112 |   0006A |       1 | `KEY_INT8`        |
|      113 |   0006A |       2 | `KEY_LNG1`        |
|      114 |   0006A |       4 | `KEY_LNG2`        |
|      115 |   0006A |       8 | `KEY_LNG3`        |
|      116 |   0006A |      16 | `KEY_LNG4`        |
|      117 |   0006A |      32 | `KEY_LNG5`        |
|      118 |   0006A |      64 | `KEY_LNG6`        |
|      119 |   0006A |     128 | `KEY_LNG7`        |
|      120 |   0006B |       1 | `KEY_LNG8`        |
|      121 |   0006B |       2 | `KEY_APP`         |
|      122 |   0006B |       4 | `KEY_POWER`       |
|      123 |   0006B |       8 | `KEY_KP_EQUAL`    |
|      124 |   0006B |      16 | `KEY_EXEC`        |
|      125 |   0006B |      32 | `KEY_HELP`        |
|      126 |   0006B |      64 | `KEY_SELECT`      |
|      127 |   0006B |     128 | `KEY_STOP`        |
|      128 |   0006C |       1 | `KEY_AGAIN`       |
|      129 |   0006C |       2 | `KEY_UNDO`        |
|      130 |   0006C |       4 | `KEY_CUT`         |
|      131 |   0006C |       8 | `KEY_COPY`        |
|      132 |   0006C |      16 | `KEY_PASTE`       |
|      133 |   0006C |      32 | `KEY_FIND`        |
|      134 |   0006C |      64 | `KEY_MUTE`        |
|      135 |   0006C |     128 | `KEY_VOLUP`       |
|      136 |   0006D |       1 | `KEY_VOLDN`       |


## ゲームパッド

| アドレス | サイズ       | 説明                                                           |
|--------|-----------:|--------------------------------------------------------------------|
|  0006E |          2 | ゲームパッド ジョイスティックのしきい値 (デフォルトは 8000)                       |
|  00070 |          8 | プライマリ ゲームパッド - キーボード スキャンコード マッピング ([キーボード] を参照)      |
|  00078 |          4 | 4 ゲームパッドのボタン状態 ([getpad] を参照)                     |

ゲームパッドのボタンは次のとおりです:

| 定義    | ビットマスク   | 定義                                                        |
|---------|----------:|--------------------------------------------------------------------|
| `BTN_L` |         1 | `◁` ボタンまたはジョイスティックの左                                   |
| `BTN_U` |         2 | `△` ボタンまたはジョイスティックを上に                                     |
| `BTN_R` |         4 | `▷` ボタンまたはジョイスティック右                                  |
| `BTN_D` |         8 | `▽` ボタンまたはジョイスティックを押す                                   |
| `BTN_A` |        16 | `Ⓐ` ボタン                                                     |
| `BTN_B` |        32 | `Ⓑ` ボタン                                                     |
| `BTN_X` |        64 | `Ⓧ` ボタン                                                     |
| `BTN_Y` |       128 | `Ⓨ` ボタン                                                     |

`△△▽▽◁▷◁▷ⒷⒶ` シーケンスにより、`KEY_CHEAT` の「キー」が押されます。

## グラフィックス処理装置

| アドレス | サイズ       | 説明                                                           |
|--------|-----------:|--------------------------------------------------------------------|
|  0007E |          1 | フォントグリフマッピングのUNICODEコードポイント上位ビット               |
|  0007F |          1 | マップのスプライト バンク セレクター                                   |
|  00080 |       1024 | パレット、256 色、各エントリ 4 バイト、RGBA                      |
|  00480 |          2 | x0, トリミング領域 X はピクセル単位で始まります (すべての描画機能の場合)        |
|  00482 |          2 | x1, トリミング領域 X 端 (ピクセル単位)                                      |
|  00484 |          2 | y0, トリミング領域 Y の開始点 (ピクセル単位)                                    |
|  00486 |          2 | y1, トリミング領域 Y 端 (ピクセル単位)                                      |
|  00488 |          2 | 表示されたビデオRAMの X オフセット（ピクセル単位または0xffff）                        |
|  0048A |          2 | 表示されたビデオRAMの Y オフセット（ピクセル単位または0xffff）                        |
|  0048C |          1 | カメペンダウンフラグ ([up]、[down]を参照)                            |
|  0048D |          1 | タートルペンの色、パレットインデックス 0 ～ 255 ([color] を参照)             |
|  0048E |          2 | タートルの方向 (度単位、0 ～ 359) ([left]、[right] を参照)        |
|  00490 |          2 | タートルの X オフセット (ピクセル単位) ([move] を参照)                             |
|  00492 |          2 | タートルの Y オフセット (ピクセル単位)                                          |
|  00494 |          2 | 1/128 タイルでの迷路の歩行速度 ([maze] を参照)                     |
|  00496 |          2 | 迷路の回転速度 (1 ～ 90)                           |
|  00498 |          1 | コンソールの前景色、パレットインデックス 0 ～ 255 ([printf] を参照)    |
|  00499 |          1 | コンソールの背景色、パレットインデックス 0 ～ 255                   |
|  0049A |          2 | コンソールの X オフセット (ピクセル単位)                                         |
|  0049C |          2 | コンソールの Y オフセット (ピクセル単位)                                         |
|  0049E |          2 | [3D空間] でのカメラ X オフセット ([tri3d]、[tritx]、[mesh] を参照)       |
|  004A0 |          2 | カメラの Y オフセット                                                    |
|  004A2 |          2 | カメラの Z オフセット                                                    |
|  004A4 |          2 | カメラの方向、ピッチ (上 0、前方 90)                         |
|  004A6 |          2 | カメラの方向、ヨー (左 0、前方 90)                         |
|  004A8 |          1 | 角度で表したカメラの視野 (デフォルトは 45、負の値は正投影を示します)   |
|  004AA |          2 | 光源位置 X オフセット ([tri3d]、[tritx]、[mesh] を参照)      |
|  004AC |          2 | 光源位置 Y オフセット                                     |
|  004AE |          2 | 光源位置 Z オフセット                                     |
|  00600 |      64000 | マップ、320 x 200 スプライト インデックス ([map] および [maze] を参照)               |
|  10000 |      65536 | スプライト、256 x 256 パレット インデックス、1024 8 x 8 ピクセル ([spr] を参照)  |
|  28000 |       2048 | 4096 フォントグリフ用のウィンドウ (0007E、[width] および [text] を参照)        |

## デジタルシグナルプロセッサ

| アドレス | サイズ       | 説明                                                           |
|--------|-----------:|--------------------------------------------------------------------|
|  0007C |          1 | 波形バンクセレクター（1 ～ 31）                                   |
|  0007D |          1 | ミュージックトラックバンクセレクター（0 ～ 7）                                 |
|  004BA |          1 | 現在のテンポ (行ごとのティック単位、読み取り専用)                        |
|  004BB |          1 | 再生中の現在のトラック (読み取り専用)                             |
|  004BC |          2 | 再生中の現在の行 (読み取り専用)                               |
|  004BE |          2 | 現在のトラックの総行数 (読み取り専用)                  |
|  004C0 |         64 | 16 個のチャネル ステータス レジスタ、各 4 バイト (読み取り専用)              |
|  00500 |        256 | 64 の効果音、各 4 バイト                                     |
|  20000 |      16384 | 波形サンプルのウィンドウ (0007C を参照)                            |
|  24000 |      16384 | 音楽パターンのウィンドウ (0007D を参照)                              |

DSP ステータス レジスタはすべて読み取り専用で、各チャネルは次のようになります。

| アドレス | サイズ       | 説明                                                           |
|--------|-----------:|--------------------------------------------------------------------|
|      0 |          2 | 再生中の波形内の現在位置                      |
|      2 |          1 | 電流波形 (1 ～ 31、チャンネルが無音の場合は 0)             |
|      3 |          1 | 現在の音量 (0 はチャンネルがオフであることを意味します)                     |

最初の 4 チャンネルは音楽用で、残りはサウンドエフェクト用です。

波形インデックス 0 は「前の波形を使用する」ことを意味するため、セレクターではインデックス 0 を使用できないことに注意してください。1 つおきの波形のフォーマット:

| アドレス | サイズ       | 説明                                                           |
|--------|-----------:|--------------------------------------------------------------------|
|      0 |          2 | サンプル数                                                  |
|      2 |          2 | ループスタート                                                         |
|      4 |          2 | ループの長さ                                                        |
|      6 |          1 | 値の微調整、-8 ～ 7                                            |
|      7 |          1 | ボリューム、0 ～ 64                                                    |
|      8 |      16376 | 符号付き 8 ビット モノラル サンプル                                          |

サウンドエフェクトと音楽トラックの形式は同じですが、唯一の違いは、音楽トラックには行ごとに 4 つのノートがあり、各チャネルに 1 つずつあり、
行数が 1024 であることです。 一方、サウンドエフェクトの場合は、1 つの音符と 64 行しかありません。

| アドレス | サイズ       | 説明                                                           |
|--------|-----------:|--------------------------------------------------------------------|
|      0 |          1 | ノート番号、`NOTE_x`の定義を参照、0 ～ 96                         |
|      1 |          1 | 波形インデックス、0 ～ 31                                            |
|      2 |          1 | エフェクトタイプ、0 ～ 255 ([効果音] を参照)                        |
|      3 |          1 | エフェクトパラメータ                                                   |

ノートのカウントは次のように行われます。0 はノートが設定されていないことを意味します。 8 オクターブが続き、それぞれに 12 の音符があるため、1 は C-0、12 は B-0
(最低オクターブ)、13 は C-1 (1 オクターブ上)、14 は C#1 (C シャープ、 半音高い）。 たとえば、4 オクターブの D 音は 1 + 4\*12 + 2 = 51 となります。
B-7 は 96、最高オクターブの最高音です。 また、組み込みの定義もあります。たとえば、C-1 は`NOTE_C_1`、C#1 は`NOTE_Cs1`です。
カウントしたくない場合は、これらをプログラム内で使用することもできます。

## 効果音

わかりやすくするために、MEG-4はAmiga MODファイルと同じコードを使用します (これにより、内蔵エディターとサードパーティの音楽トラッカーで同じコードが表示されます) が、
それらのすべてをサポートしているわけではありません。 前に述べたように、これらのコードは 3 つの 16 進数で表され、最初の 1 つはタイプ `t` で、最後の 2
つはパラメータ`xy`(または`xx`)です。 タイプ`E1`から`ED`はすべてタイプ バイトに格納されますが、それらのニブルの 1 つがパラメータに属しているように見えますが、
実際はそうではありません。

| 効果    | コード | 説明                                                |
|--------|------|------------------------------------------------------------|
| ...    | 000  | 効果がない                                                  |
| Arp    | 0xy  | アルペジオ、音符を演奏、音符+x半音、音符+y半音   |
| Po/    | 1xx  | ポルタメントアップ、スライドピリオドxアップ                        |
| Po\\   | 2xx  | ポルタメントダウン、スライドピリオドxダウン                    |
| Ptn    | 3xx  | トーンポルタメント、スライドピリオドからピリオド x                  |
| Vib    | 4xy  | ビブラート、x 周波数で y 半音ずつピッチを振動させます      |
| Ctv    | 5xy  | 続行 トーンポルタメント + ボリュームを x 上または y 下にスライドさせます  |
| Cvv    | 6xy  | ビブラートとボリュームを上に x または下に y スライドし続けます       |
| Trm    | 7xy  | トレモロ、x 周波数で y 振幅でボリュームを振動させます     |
| Ofs    | 9xx  | サンプル オフセットを x \* 256 に設定します                              |
| Vls    | Axy  | スライドボリューム x で上または y で下                          |
| Jmp    | Bxx  | 位置ジャンプ、行を x \* 64 に設定                          |
| Vol    | Cxx  | 音量をxに設定します                                            |
| Fp/    | E1x  | 細かいポルタメントアップ、ピリオドを x で増加                   |
| Fp\\   | E2x  | 細かいポルタメントダウン、ピリオドを x ずつ減少                 |
| Svw    | E4x  | ビブラート波形を設定します、0 サイン、1 ソー、2 スクエア、3 ノイズ     |
| Ftn    | E5x  | ファインチューンを設定し、チューニングを x (-8 ～ 7) で変更します                 |
| Stw    | E7x  | トレモロ波形を設定、0 サイン、1 ソー、2 スクエア、3 ノイズ     |
| Rtg    | E9x  | ノートを再トリガー、x ティックごとに現在のサンプルをトリガー       |
| Fv/    | EAx  | 微音量スライドアップ、x ずつ増加                        |
| Fv\\   | EBx  | 細かい音量を下にスライドさせ、x ずつ減少させます                      |
| Cut    | ECx  | x ティック後にメモを切り取ります                                        |
| Dly    | EDx  | x ティック分の遅延ノート                                      |
| Tpr    | Fxx  | 行ごとのティック数を x に設定します (ティックのデフォルトは 6)       |

## ユーザーメモリ

00000 から 2FFFF までのメモリ アドレスは MMIO に属し、それより上のすべて (30000 または `MEM_USER` から始まる) は自由に使用できるユーザー メモリです。

| アドレス | サイズ       | 説明                                                           |
|--------|-----------:|--------------------------------------------------------------------|
|  30000 |          4 | (BASIC のみ) DATA のオフセット                                        |
|  30004 |          4 | (BASIC のみ) 現在の READ カウンタ                                  |
|  30008 |          4 | (BASIC のみ) 最大 READ、DATA の数                          |

これに、プログラム内で宣言したグローバル変数が続き、その後に文字列リテラルなどの定数が続きます。BASIC の場合、この後に実際の DATA レコードが続きます。

初期化されたデータより上のメモリ アドレスは、プログラム内で [malloc] および [free] 呼び出しを介して動的に割り当てたり解放したりできます。

最後にスタックです。これは最上位 (C0000 または `MEM_LIMIT` から開始) にあり、*下方向*に成長します。 プログラムのローカル変数 (関数内で宣言したもの)
がここに入ります。 スタックのサイズは、プログラム内のどの関数が他のどの関数を呼び出すかによって常に変化します。

動的に割り当てられたデータの先頭とスタックの末尾が万が一重なった場合、MEG-4 は「メモリ不足」エラーをスローします。

## 書式設定文字列

一部の関数、[printf]、[sprintf]、および [trace] は、引数を参照し、それらを表示する方法を記述するために特殊文字を含む可能性のある書式文字列を使用します。
これらは：

| コード | 説明                                                       |
|------|------------------------------------------------------------|
| `%%` | `%` 文字                                          |
| `%d` | 次のパラメータを 10 進数で指定します                         |
| `%u` | 次のパラメータは符号なし 10 進数です               |
| `%x` | 次のパラメータを 16 進数で指定します                     |
| `%o` | 次のパラメータを 8 進数で指定します                          |
| `%b` | 次のパラメータを 2 進数で指定します                          |
| `%f` | 次のパラメータを浮動小数点数として指定                  |
| `%s` | 次のパラメータを文字列として指定                                 |
| `%c` | 次のパラメータをUTF-8文字として                       |
| `%p` | 次のパラメータをアドレス（ポインタ）として指定                     |
| `\t` | タブ、続行する前に垂直位置を修正します                 |
| `\n` | 新しい行を開始する                                           |

`%` とコードの間の長さを指定することでパディングを追加できます。 それが`0`で始まる場合、値はゼロで埋められ、そうでない場合はスペースで埋められます。 たとえば、
`%4d` は値の右側にスペースを埋め込み、`%04x` にはゼロを埋め込みます。`f` は、小数部の桁数 (最大 8) を示すドットの後の数値を受け入れます、例： `%.6f`。

## 3D空間

MEG-4 では、3 次元空間は右手の法則に従って処理されます。 +X は右側、+Y は上、+Z は観察者の方向にあります。

```
  +Y
   |
   |__ +X
  /
+Z
```

各ポイントは -32767 ～ +32767 の範囲内に配置する必要があります。 この 3D 世界が 2D スクリーンにどのように投影されるかは、カメラの設定方法によって異なります
([グラフィックス処理装置] アドレス 0049E を参照)。 もちろん、X、Y、Z 座標を使用してカメラをワールドに配置する必要があります。 次に、ピッチとヨーを使用して、
カメラがどこを見ているかを伝える必要があります。 最後に、視野角を指定して、カメラにどのようなレンズが搭載されているかを伝える必要もあります。 後者は通常、
30 度 (非常に狭い) から 180 度 (魚や鳥のように) の間でなければなりません。 MEG-4は127度まで対応していますが、コツがあります。 正の FOV
値は遠近法として投影されます(オブジェクトが遠くにあるほど小さくなります)。ただし、負の値も正射投影でのみ処理されます (距離に関係なく、
オブジェクトのサイズは同じになります)。 遠近法は FPS ゲームで使用されますが、正投影法は戦略ゲームで主に好まれます。

[mesh]機能を使用すると、三角形の集合(完成した3Dモデル)を効率よく表示できます。 モデルにはおそらくローカル座標があるため、すべてのモデルがオリゴの周囲に重ねて
描画されることになります。 したがって、ワールド内に複数のモデルを表示したい場合は、まず [trns] を使用してモデルをワールド座標に変換 (配置) し、次に [mesh]
で変換された頂点クラウド を使用する必要があります (モデルを移動したり回転させたりすることはできません) 三角形を変更します (頂点座標のみ)。

## コード エディターのショートカット

ソースを編集するときに使用できる追加の [キーボード] ショートカット:

| キー | 説明 |
|----------------------------|------------------------------------------------------------------------------------|
| <kbd>Ctrl</kbd>+<kbd>F</kbd> | 文字列を検索 |
| <kbd>Ctrl</kbd>+<kbd>G</kbd> | 再検索 |
| <kbd>Ctrl</kbd>+<kbd>H</kbd> | 検索と置換 (選択したテキスト内、またはそれがない場合はソース全体) |
| <kbd>Ctrl</kbd>+<kbd>J</kbd> | 行へ移動 |
| <kbd>Ctrl</kbd>+<kbd>D</kbd> | 関数定義へ移動 |
| <kbd>Ctrl</kbd>+<kbd>N</kbd> |ブックマークを一覧表示 |
| <kbd>Ctrl</kbd>+<kbd>B</kbd> | 現在の行のブックマークを切り替え  |
| <kbd>Ctrl</kbd>+<kbd>▴</kbd> | 前のブックマークに移動 |
| <kbd>Ctrl</kbd>+<kbd>▾</kbd> | 次のブックマークに移動 |
| <kbd>Ctrl</kbd>+<kbd>◂</kbd> | 前の単語の先頭へ移動 |
| <kbd>Ctrl</kbd>+<kbd>▸</kbd> | 次の単語の末尾へ移動 |
| <kbd>Ctrl</kbd>+<kbd>,</kbd> | 選択範囲のインデントを減らす  |
| <kbd>Ctrl</kbd>+<kbd>.</kbd> | 選択範囲のインデントを増やす  |
| <kbd>Home</kbd> | カーソルを行の先頭に移動 |
| <kbd>End</kbd> | カーソルを行の末尾に移動 |
| <kbd>PgUp</kbd> |カーソルを 42 行 (1 ページ) 上に移動します  |
| <kbd>PgDown</kbd> | カーソルを 42 行 (1 ページ) 下に移動します  |
| <kbd>F1</kbd> | カーソルが API の引数リスト内にある場合は、関数の組み込みヘルプ ページに移動します  |

プラットフォームのキーボードレイアウトに関係なく、プログラミングに必要なすべての文字 (およびその他) にいつでもアクセスできます:

| 左 <kbd>Alt</kbd> + |
|---------------------|
| <kbd> </kbd> <kbd>(</kbd> <kbd>)</kbd> <kbd>{</kbd> <kbd>}</kbd> <kbd>〈</kbd> <kbd>〉</kbd> <kbd>!</kbd> <kbd>^</kbd> <kbd>_</kbd> <kbd>-</kbd> <kbd>=</kbd> |
| <kbd>⇥</kbd> <kbd> </kbd> <kbd> </kbd> <kbd>€</kbd> <kbd>₹</kbd> <kbd>~</kbd> <kbd>¥</kbd> <kbd> </kbd> <kbd> </kbd> <kbd>°</kbd> <kbd>"</kbd> <kbd>\[</kbd> <kbd>\]</kbd> |
| <kbd>↨</kbd> <kbd>&</kbd> <kbd>$</kbd> <kbd>@</kbd> <kbd>¦</kbd> <kbd> </kbd> <kbd>#</kbd> <kbd> </kbd> <kbd> </kbd> <kbd>£</kbd> <kbd>;</kbd> <kbd>'</kbd> <kbd>\\</kbd> |
| <kbd>⇮</kbd> <kbd>:</kbd> <kbd>?</kbd> <kbd> </kbd> <kbd>元</kbd> <kbd>%</kbd> <kbd>+</kbd> <kbd>✶</kbd> <kbd>,</kbd> <kbd>.</kbd> <kbd>/</kbd> |

代替入力方法とそのキーボード ショートカットについては、メニューも参照してください。

# コンソール

## putc

```c
void putc(uint32_t chr)
```
<dl>
<dt>説明</dt><dd>
文字をコンソールに出力します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| chr | UTF-8文字 |
</dd>
</dl>
<hr>
## printf

```c
void printf(str_t fmt, ...)
```
<dl>
<dt>説明</dt><dd>
テキストをコンソールに出力します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| fmt | 表示する文字列, [書式設定文字列] |
| ... | オプションの引数 |
</dd>
</dl>
<hr>
## getc

```c
uint32_t getc(void)
```
<dl>
<dt>説明</dt><dd>
コンソールから文字を読み取り、入力がない場合はプログラムをブロックします。
</dd>
<dt>戻り値</dt><dd>
ユーザーが入力した UTF-8 文字。
</dd>
<dt>関連項目</dt><dd>
[popkey]
</dd>
</dl>
<hr>
## gets

```c
str_t gets(void)
```
<dl>
<dt>説明</dt><dd>
ユーザーから改行で終了した文字列を読み取ります (改行は返しません)。
</dd>
<dt>戻り値</dt><dd>
文字列内の読み取りバイト。
</dd>
</dl>
<hr>
## trace

```c
void trace(str_t fmt, ...)
```
<dl>
<dt>説明</dt><dd>
標準出力に出力して実行をトレースします。 `meg4` が `-v` 冗長フラグを指定して起動された場合にのみ機能します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| fmt | [書式設定文字列] |
| ... | オプションの引数 |
</dd>
</dl>
<hr>
## delay

```c
void delay(uint16_t msec)
```
<dl>
<dt>説明</dt><dd>
プログラムの実行を遅らせます。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| msec | ミリ秒単位の遅延 |
</dd>
</dl>
<hr>
## exit

```c
void exit(void)
```
<dl>
<dt>説明</dt><dd>
プログラムを終了します。
</dd>
</dl>

# オーディオ

## sfx

```c
void sfx(uint8_t sfx, uint8_t channel, uint8_t volume)
```
<dl>
<dt>説明</dt><dd>
効果音を再生します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| sfx | 効果音のインデックス、0 ～ 63 |
| channel | 使用するチャネル、0 ～ 11 |
| volume | 使用するボリューム、0 ～ 255、0 はチャンネルをオフにします |
</dd>
</dl>
<hr>
## music

```c
void music(uint8_t track, uint16_t row, uint8_t volume)
```
<dl>
<dt>説明</dt><dd>
音楽トラックを再生します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| track | 音楽トラックのインデックス、0 ～ 7 |
| row | 再生を開始する行、0 ～ 1023 (曲の最大長) |
| volume | 使用するボリューム、0 ～ 255、0 は音楽をオフにします |
</dd>
</dl>

# GPIO

## gpio_rev

```c
uint32_t gpio_rev(void)
```
<dl>
<dt>説明</dt><dd>
GPIO ボードのリビジョン番号を問い合わせます。 プラットフォームが GPIO に対応していない場合は 0 を返します。
</dd>
<dt>戻り値</dt><dd>
ボードのリビジョン番号、またはサポートされていない場合は 0。
</dd>
</dl>
<hr>
## gpio_get

```c
int gpio_get(uint8_t pin)
```
<dl>
<dt>説明</dt><dd>
GPIO ピンの値を読み取ります。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| pin | 物理ピン番号、1 ～ 40 |
</dd>
<dt>戻り値</dt><dd>
ピンが High の場合は 1、Low の場合は 0、エラーの場合は -1 を返します (GPIO ピンはサポートされていません)。
</dd>
<dt>関連項目</dt><dd>
[gpio_set]
</dd>
</dl>
<hr>
## gpio_set

```c
int gpio_set(uint8_t pin, int value)
```
<dl>
<dt>説明</dt><dd>
値を GPIO ピンに書き込みます。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| pin | 物理ピン番号、1 ～ 40 |
| value | ピンを設定する 1 高、0は低 |
</dd>
<dt>戻り値</dt><dd>
成功した場合は 0、エラーの場合は -1 を返します (GPIO ピンはサポートされていません)。
</dd>
<dt>関連項目</dt><dd>
[gpio_get]
</dd>
</dl>

# グラフィックス

## cls

```c
void cls(uint8_t palidx)
```
<dl>
<dt>説明</dt><dd>
画面全体をクリアして表示オフセットをリセットし、コンソールの背景色も設定します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| palidx | カラー、パレットインデックス 0 ～ 255 |
</dd>
<dt>関連項目</dt><dd>
[pget], [pset]
</dd>
</dl>
<hr>
## cget

```c
uint32_t cget(uint16_t x, uint16_t y)
```
<dl>
<dt>説明</dt><dd>
座標のピクセルを取得し、カラー RGBA を返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| x | X 座標 (ピクセル単位) |
| y | Y 座標 (ピクセル単位) |
</dd>
<dt>戻り値</dt><dd>
RGBA チャネルを含むパックされたカラー (赤は最下位バイトにあります)。
</dd>
<dt>関連項目</dt><dd>
[cls], [pget], [pset]
</dd>
</dl>
<hr>
## pget

```c
uint8_t pget(uint16_t x, uint16_t y)
```
<dl>
<dt>説明</dt><dd>
座標のピクセルを取得し、そのパレット インデックスを返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| x | X 座標 (ピクセル単位) |
| y | Y 座標 (ピクセル単位) |
</dd>
<dt>戻り値</dt><dd>
パレット インデックスのカラー、0 ～ 255。
</dd>
<dt>関連項目</dt><dd>
[cls], [pset], [cget]
</dd>
</dl>
<hr>
## pset

```c
void pset(uint8_t palidx, uint16_t x, uint16_t y)
```
<dl>
<dt>説明</dt><dd>
ある座標にピクセルをプロットします。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| palidx | カラー、パレットインデックス 0 ～ 255 |
| x | X 座標 (ピクセル単位) |
| y | Y 座標 (ピクセル単位) |
</dd>
<dt>関連項目</dt><dd>
[cls], [pget]
</dd>
</dl>
<hr>
## width

```c
uint16_t width(int8_t type, str_t str)
```
<dl>
<dt>説明</dt><dd>
表示されたテキストの幅をピクセル単位で返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| type | フォント タイプ、-4 ～ 4 |
| str | 測定する文字列 |
</dd>
<dt>戻り値</dt><dd>
テキストを表示するために必要なピクセル数。
</dd>
<dt>関連項目</dt><dd>
[text]
</dd>
</dl>
<hr>
## text

```c
void text(uint8_t palidx, int16_t x, int16_t y, int8_t type, uint8_t shidx, uint8_t sha, str_t str)
```
<dl>
<dt>説明</dt><dd>
画面上にテキストを印刷します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| palidx | カラー、パレットインデックス 0 ～ 255 |
| x | X 座標 (ピクセル単位) |
| y | Y 座標 (ピクセル単位) |
| type | フォント タイプ、-4 ～ -1 等幅、1 ～ 4 プロポーショナル |
| shidx | 影の色、パレットインデックス 0 ～ 255 |
| sha | シャドウのアルファ、0 (完全に透明) ～ 255 (完全に不透明) |
| str | 表示する文字列 |
</dd>
<dt>関連項目</dt><dd>
[width]
</dd>
</dl>
<hr>
## line

```c
void line(uint8_t palidx, int16_t x0, int16_t y0, int16_t x1, int16_t y1)
```
<dl>
<dt>説明</dt><dd>
アンチエイリアス処理された線を描画します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| palidx | カラー、パレットインデックス 0 ～ 255 |
| x0 | 開始 X 座標 (ピクセル単位) |
| y0 | 開始 Y 座標 (ピクセル単位) |
| x1 | 終了 X 座標 (ピクセル単位) |
| y1 | 終了 Y 座標 (ピクセル単位) |
</dd>
<dt>関連項目</dt><dd>
[qbez], [cbez]
</dd>
</dl>
<hr>
## qbez

```c
void qbez(uint8_t palidx, int16_t x0, int16_t y0, int16_t x1, int16_t y1,
    int16_t cx, int16_t cy)
```
<dl>
<dt>説明</dt><dd>
二次ベジェ曲線を描きます。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| palidx | カラー、パレットインデックス 0 ～ 255 |
| x0 | 開始 X 座標 (ピクセル単位) |
| y0 | 開始 Y 座標 (ピクセル単位) |
| x1 | 終了 X 座標 (ピクセル単位) |
| y1 | 終了 Y 座標 (ピクセル単位) |
| cx | 制御点の X 座標 (ピクセル単位) |
| cy | 制御点の Y 座標 (ピクセル単位) |
</dd>
<dt>関連項目</dt><dd>
[line], [cbez]
</dd>
</dl>
<hr>
## cbez

```c
void cbez(uint8_t palidx, int16_t x0, int16_t y0, int16_t x1, int16_t y1,
    int16_t cx0, int16_t cy0, int16_t cx1, int16_t cy1)
```
<dl>
<dt>説明</dt><dd>
3次ベジェ曲線を描きます。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| palidx | カラー、パレットインデックス 0 ～ 255 |
| x0 | 開始 X 座標 (ピクセル単位) |
| y0 | 開始 Y 座標 (ピクセル単位) |
| x1 | 終了 X 座標 (ピクセル単位) |
| y1 | 終了 Y 座標 (ピクセル単位) |
| cx0 | 最初の制御点の X 座標 (ピクセル単位) |
| cy0 | 最初の制御点の Y 座標 (ピクセル単位) |
| cx1 | 2 番目の制御点の X 座標 (ピクセル単位) |
| cy1 | 2 番目の制御点の Y 座標 (ピクセル単位) |
</dd>
<dt>関連項目</dt><dd>
[line], [qbez]
</dd>
</dl>
<hr>
## tri

```c
void tri(uint8_t palidx, int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2)
```
<dl>
<dt>説明</dt><dd>
三角形を描きます。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| palidx | カラー、パレットインデックス 0 ～ 255 |
| x0 | 最初のエッジの X 座標 (ピクセル単位) |
| y0 | 最初のエッジの Y 座標 (ピクセル単位) |
| x1 | 2 番目のエッジの X 座標 (ピクセル単位) |
| y1 | 2 番目のエッジの Y 座標 (ピクセル単位) |
| x2 | 3 番目のエッジの X 座標 (ピクセル単位) |
| y2 | 3 番目のエッジの Y 座標 (ピクセル単位) |
</dd>
<dt>関連項目</dt><dd>
[ftri], [tri2d], [tri3d], [tritx], [mesh], [trns]
</dd>
</dl>
<hr>
## ftri

```c
void ftri(uint8_t palidx, int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2)
```
<dl>
<dt>説明</dt><dd>
塗りつぶされた三角形を描画します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| palidx | カラー、パレットインデックス 0 ～ 255 |
| x0 | 最初のエッジの X 座標 (ピクセル単位) |
| y0 | 最初のエッジの Y 座標 (ピクセル単位) |
| x1 | 2 番目のエッジの X 座標 (ピクセル単位) |
| y1 | 2 番目のエッジの Y 座標 (ピクセル単位) |
| x2 | 3 番目のエッジの X 座標 (ピクセル単位) |
| y2 | 3 番目のエッジの Y 座標 (ピクセル単位) |
</dd>
<dt>関連項目</dt><dd>
[tri], [tri2d], [tri3d], [tritx], [mesh], [trns]
</dd>
</dl>
<hr>
## tri2d

```c
void tri2d(uint8_t pi0, int16_t x0, int16_t y0,
    uint8_t pi1, int16_t x1, int16_t y1,
    uint8_t pi2, int16_t x2, int16_t y2)
```
<dl>
<dt>説明</dt><dd>
カラーグラデーションを使用して塗りつぶされた三角形を描画します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| pi0 | 最初のエッジの色、パレットインデックス 0 ～ 255 |
| x0 | 最初のエッジの X 座標 (ピクセル単位) |
| y0 | 最初のエッジの Y 座標 (ピクセル単位) |
| pi1 | 2番目のエッジの色、パレットインデックス 0 ～ 255 |
| x1 | 2 番目のエッジの X 座標 (ピクセル単位) |
| y1 | 2 番目のエッジの Y 座標 (ピクセル単位) |
| pi2 | 3番目のエッジの色、パレットインデックス 0 ～ 255 |
| x2 | 3 番目のエッジの X 座標 (ピクセル単位) |
| y2 | 3 番目のエッジの Y 座標 (ピクセル単位) |
</dd>
<dt>関連項目</dt><dd>
[tri], [ftri], [tri3d], [tritx], [mesh], [trns]
</dd>
</dl>
<hr>
## tri3d

```c
void tri3d(uint8_t pi0, int16_t x0, int16_t y0, int16_t z0,
    uint8_t pi1, int16_t x1, int16_t y1, int16_t z1,
    uint8_t pi2, int16_t x2, int16_t y2, int16_t z2)
```
<dl>
<dt>説明</dt><dd>
[3D空間]に色のグラデーションで塗りつぶされた三角形を描画します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| pi0 | 最初のエッジの色、パレットインデックス 0 ～ 255 |
| x0 | 空間内の最初のエッジ X 座標 |
| y0 | 空間内の最初のエッジ Y 座標 |
| z0 | 空間内の最初のエッジ Z 座標 |
| pi1 | 2番目のエッジの色、パレットインデックス 0 ～ 255 |
| x1 | 空間内の 2 番目のエッジ X 座標 |
| y1 | 空間内の 2 番目のエッジ Y 座標 |
| z1 | 空間内の 2 番目のエッジ Z 座標 |
| pi2 | 3番目のエッジの色、パレットインデックス 0 ～ 255 |
| x2 | 空間内の 3 番目のエッジ X 座標 |
| y2 | 空間内の 3 番目のエッジ Y 座標 |
| z2 | 空間内の 3 番目のエッジ Z 座標 |
</dd>
<dt>関連項目</dt><dd>
[tri], [ftri], [tri2d], [tritx], [mesh], [trns]
</dd>
</dl>
<hr>
## tritx

```c
void tritx(uint8_t u0, uint8_t v0, int16_t x0, int16_t y0, int16_t z0,
    uint8_t u1, uint8_t v1, int16_t x1, int16_t y1, int16_t z1,
    uint8_t u2, uint8_t v2, int16_t x2, int16_t y2, int16_t z2)
```
<dl>
<dt>説明</dt><dd>
[3D空間]にテクスチャ付きの三角形を描画します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| u0 | 最初のエッジ テクスチャ X 座標 0 ～ 255 |
| v0 | 最初のエッジ テクスチャ Y 座標 0 ～ 255 |
| x0 | 空間内の最初のエッジ X 座標 |
| y0 | 空間内の最初のエッジ Y 座標 |
| z0 | 空間内の最初のエッジ Z 座標 |
| u1 | 2 番目のエッジ テクスチャ X 座標 0 ～ 255 |
| v1 | 2 番目のエッジ テクスチャ Y 座標 0 ～ 255 |
| x1 | 空間内の 2 番目のエッジ X 座標 |
| y1 | 空間内の 2 番目のエッジ Y 座標 |
| z1 | 空間内の 2 番目のエッジ Z 座標 |
| u2 | 3 番目のエッジ テクスチャ X 座標 0 ～ 255 |
| v2 | 3 番目のエッジ テクスチャ Y 座標 0 ～ 255 |
| x2 | 空間内の 3 番目のエッジ X 座標 |
| y2 | 空間内の 3 番目のエッジ Y 座標 |
| z2 | 空間内の 3 番目のエッジ Z 座標 |
</dd>
<dt>関連項目</dt><dd>
[tri], [ftri], [tri2d], [tri3d], [mesh], [trns]
</dd>
</dl>
<hr>
## mesh

```c
void mesh(addr_t verts, addr_t uvs, uint16_t numtri, addr_t tris)
```
<dl>
<dt>説明</dt><dd>
頂点のインデックスとテクスチャ座標(またはパレット)を使用して、[3D空間]に三角形で構成されるメッシュを描画します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| verts | 頂点配列のアドレス、各 3 x 2 バイト、X、Y、Z |
| uvs | UV 配列のアドレス (0 の場合、パレットが使用されます)、それぞれ 2 x 1 バイト、テクスチャ X、Y |
| numtri | 三角形の数 |
| tris | インデックス付き三角形配列のアドレス、各 6 x 1 バイト、vi1、ui1/pi1、vi2、ui2/pi2、vi3、ui3/pi3 |
</dd>
<dt>関連項目</dt><dd>
[tri], [ftri], [tri2d], [tri3d], [tritx], [trns]
</dd>
</dl>
<hr>
## rect

```c
void rect(uint8_t palidx, int16_t x0, int16_t y0, int16_t x1, int16_t y1)
```
<dl>
<dt>説明</dt><dd>
長方形を描画します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| palidx | カラー、パレットインデックス 0 ～ 255 |
| x0 | 左上隅の X 座標 (ピクセル単位) |
| y0 | 左上隅の Y 座標 (ピクセル単位) |
| x1 | 右下の X 座標 (ピクセル単位) |
| y1 | 右下の Y 座標 (ピクセル単位) |
</dd>
<dt>関連項目</dt><dd>
[frect]
</dd>
</dl>
<hr>
## frect

```c
void frect(uint8_t palidx, int16_t x0, int16_t y0, int16_t x1, int16_t y1)
```
<dl>
<dt>説明</dt><dd>
塗りつぶされた長方形を描画します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| palidx | カラー、パレットインデックス 0 ～ 255 |
| x0 | 左上隅の X 座標 (ピクセル単位) |
| y0 | 左上隅の Y 座標 (ピクセル単位) |
| x1 | 右下の X 座標 (ピクセル単位) |
| y1 | 右下の Y 座標 (ピクセル単位) |
</dd>
<dt>関連項目</dt><dd>
[rect]
</dd>
</dl>
<hr>
## circ

```c
void circ(uint8_t palidx, int16_t x, int16_t y, uint16_t r)
```
<dl>
<dt>説明</dt><dd>
円を描きます。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| palidx | カラー、パレットインデックス 0 ～ 255 |
| x | 中心の X 座標 (ピクセル単位) |
| y | 中心の Y 座標 (ピクセル単位) |
| r | ピクセル単位の半径 |
</dd>
<dt>関連項目</dt><dd>
[fcirc], [ellip], [fellip]
</dd>
</dl>
<hr>
## fcirc

```c
void fcirc(uint8_t palidx, int16_t x, int16_t y, uint16_t r)
```
<dl>
<dt>説明</dt><dd>
塗りつぶされた円を描きます。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| palidx | カラー、パレットインデックス 0 ～ 255 |
| x | 中心の X 座標 (ピクセル単位) |
| y | 中心の Y 座標 (ピクセル単位) |
| r | ピクセル単位の半径 |
</dd>
<dt>関連項目</dt><dd>
[circ], [ellip], [fellip]
</dd>
</dl>
<hr>
## ellip

```c
void ellip(uint8_t palidx, int16_t x0, int16_t y0, int16_t x1, int16_t y1)
```
<dl>
<dt>説明</dt><dd>
楕円を描きます。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| palidx | カラー、パレットインデックス 0 ～ 255 |
| x0 | 左上隅の X 座標 (ピクセル単位) |
| y0 | 左上隅の Y 座標 (ピクセル単位) |
| x1 | 右下の X 座標 (ピクセル単位) |
| y1 | 右下の Y 座標 (ピクセル単位) |
</dd>
<dt>関連項目</dt><dd>
[circ], [fcirc], [fellip]
</dd>
</dl>
<hr>
## fellip

```c
void fellip(uint8_t palidx, int16_t x0, int16_t y0, int16_t x1, int16_t y1)
```
<dl>
<dt>説明</dt><dd>
塗りつぶされた楕円を描画します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| palidx | カラー、パレットインデックス 0 ～ 255 |
| x0 | 左上隅の X 座標 (ピクセル単位) |
| y0 | 左上隅の Y 座標 (ピクセル単位) |
| x1 | 右下の X 座標 (ピクセル単位) |
| y1 | 右下の Y 座標 (ピクセル単位) |
</dd>
<dt>関連項目</dt><dd>
[circ], [fcirc], [ellip]
</dd>
</dl>
<hr>
## move

```c
void move(int16_t x, int16_t y, uint16_t deg)
```
<dl>
<dt>説明</dt><dd>
カメを画面上または迷路内の指定された位置に移動します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| x | ピクセル単位の X 座標 (または [maze] の 1/128 タイル) |
| y | ピクセル単位の Y 座標 |
| deg | 方向 (度単位)、0 ～ 359、0 は画面上で上向き、90 は右向き |
</dd>
<dt>関連項目</dt><dd>
[left], [right], [up], [down], [color], [forw], [back]
</dd>
</dl>
<hr>
## left

```c
void left(uint16_t deg)
```
<dl>
<dt>説明</dt><dd>
カメを左に回転させます。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| deg | 度単位の変化、0 ～ 359 |
</dd>
<dt>関連項目</dt><dd>
[move], [right], [up], [down], [color], [forw], [back]
</dd>
</dl>
<hr>
## right

```c
void right(uint16_t deg)
```
<dl>
<dt>説明</dt><dd>
カメを右に回転させます。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| deg | 度単位の変化、0 ～ 359 |
</dd>
<dt>関連項目</dt><dd>
[move], [left], [up], [down], [color], [forw], [back]
</dd>
</dl>
<hr>
## up

```c
void up(void)
```
<dl>
<dt>説明</dt><dd>
カメの尻尾を持ち上げます。 亀は線を引かなくても動きます。
</dd>
<dt>関連項目</dt><dd>
[move], [left], [right], [down], [color], [forw], [back]
</dd>
</dl>
<hr>
## down

```c
void down(void)
```
<dl>
<dt>説明</dt><dd>
亀の尻尾を下ろします。 カメは線を描いて移動します ([color] を参照)。
</dd>
<dt>関連項目</dt><dd>
[move], [left], [right], [up], [color], [forw], [back]
</dd>
</dl>
<hr>
## color

```c
void color(uint8_t palidx)
```
<dl>
<dt>説明</dt><dd>
タートルのペイントの色を設定します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| palidx | カラー、パレットインデックス 0 ～ 255 |
</dd>
<dt>関連項目</dt><dd>
[move], [left], [right], [up], [down], [forw], [back]
</dd>
</dl>
<hr>
## forw

```c
void forw(uint16_t cnt)
```
<dl>
<dt>説明</dt><dd>
カメを前方に移動させます。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| cnt | ピクセル単位の量 (または [maze] の場合は 1/128 タイル) |
</dd>
<dt>関連項目</dt><dd>
[move], [left], [right], [up], [down], [color], [back]
</dd>
</dl>
<hr>
## back

```c
void back(uint16_t cnt)
```
<dl>
<dt>説明</dt><dd>
カメを後方に移動します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| cnt | ピクセル単位の量 (または [maze] の場合は 1/128 タイル) |
</dd>
<dt>関連項目</dt><dd>
[move], [left], [right], [up], [down], [color], [forw]
</dd>
</dl>
<hr>
## spr

```c
void spr(int16_t x, int16_t y, uint16_t sprite, uint8_t sw, uint8_t sh, int8_t scale, uint8_t type)
```
<dl>
<dt>説明</dt><dd>
1 つのスプライト、または複数の隣接するスプライトを表示します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| x | X 座標 (ピクセル単位) |
| y | Y 座標 (ピクセル単位) |
| sprite | スプライト ID、0 ～ 1023 |
| sw | 水平スプライトの数 |
| sh | 垂直スプライトの数 |
| scale | スケール、-3 ～ 4 |
| type | 変換、 0=通常、 1=90回転、 2=180回転、 3=270回転、 4=垂直方向に反転、 5=反転+90、 6=水平方向に反転、 7=反転+270 |
</dd>
<dt>関連項目</dt><dd>
[dlg], [stext]
</dd>
</dl>
<hr>
## dlg

```c
void dlg(int16_t x, int16_t y, uint16_t w, uint16_t h, int8_t scale,
    uint16_t tl, uint16_t tm, uint16_t tr,
    uint16_t ml, uint16_t bg, uint16_t mr,
    uint16_t bl, uint16_t bm, uint16_t br)
```
<dl>
<dt>説明</dt><dd>
スプライトを使用してダイアログウィンドウを表示します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| x | X 座標 (ピクセル単位) |
| y | Y 座標 (ピクセル単位) |
| w | ダイアログの幅（ピクセル単位） |
| h | ダイアログの高さ (ピクセル単位) |
| scale | スケール、-3 ～ 4 |
| tl | 左上隅のスプライトID |
| tm | 上中スプライトID |
| tr | 右上隅のスプライトID |
| ml | 中央左側のスプライトID |
| bg | 背景スプライトID |
| mr | 中央右側のスプライトID |
| bl | 左下隅のスプライトID |
| bm | 下中央のスプライトID |
| br | 右下隅のスプライトID |
</dd>
<dt>関連項目</dt><dd>
[spr], [stext]
</dd>
</dl>
<hr>
## stext

```c
void stext(int16_t x, int16_t y, uint16_t fs, uint16_t fu, uint8_t sw, uint8_t sh, int8_t scale, str_t str)
```
<dl>
<dt>説明</dt><dd>
スプライトを使用して画面上にテキストを表示します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| x | X 座標 (ピクセル単位) |
| y | Y 座標 (ピクセル単位) |
| fs | 表示に使用される最初のスプライト ID |
| fu | 文字列内の最初の UNICODE (最小文字) |
| sw | 水平スプライトの数 |
| sh | 垂直スプライトの数 |
| scale | スケール、-3 ～ 4 |
| str | ゼロで終わる UTF-8 文字列 |
</dd>
<dt>関連項目</dt><dd>
[spr], [dlg]
</dd>
</dl>
<hr>
## remap

```c
void remap(addr_t replace)
```
<dl>
<dt>説明</dt><dd>
マップ上のタイルを置き換えます。 マップ上のタイルをアニメーション化するために使用できます。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| replace | 256 個のスプライト ID の配列 |
</dd>
<dt>関連項目</dt><dd>
[mget], [mset], [map], [maze]
</dd>
</dl>
<hr>
## mget

```c
uint16_t mget(uint16_t mx, uint16_t my)
```
<dl>
<dt>説明</dt><dd>
マップ上の 1 つのタイルを返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| mx | タイル単位のマップ上の X 座標 |
| my | タイル単位のマップ上の Y 座標 |
</dd>
<dt>戻り値</dt><dd>
指定された座標にあるタイルのスプライト ID。
</dd>
<dt>関連項目</dt><dd>
[remap], [mset], [map], [maze]
</dd>
</dl>
<hr>
## mset

```c
void mset(uint16_t mx, uint16_t my, uint16_t sprite)
```
<dl>
<dt>説明</dt><dd>
マップ上に 1 つのタイルを設定します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| mx | タイル単位のマップ上の X 座標 |
| my | タイル単位のマップ上の Y 座標 |
| sprite | スプライト ID、0 ～ 1023 |
</dd>
<dt>関連項目</dt><dd>
[remap], [mget], [map], [maze]
</dd>
</dl>
<hr>
## map

```c
void map(int16_t x, int16_t y, uint16_t mx, uint16_t my, uint16_t mw, uint16_t mh, int8_t scale)
```
<dl>
<dt>説明</dt><dd>
マップ (の一部) を描画します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| x | X 座標 (ピクセル単位) |
| y | Y 座標 (ピクセル単位) |
| mx | タイル単位のマップ上の X 座標 |
| my | タイル単位のマップ上の Y 座標 |
| mw | 水平タイルの数 |
| mh | 垂直タイルの数 |
| scale | スケール、-3 ～ 4 |
</dd>
<dt>関連項目</dt><dd>
[remap], [mget], [mset], [maze]
</dd>
</dl>
<hr>
## maze

```c
void maze(uint16_t mx, uint16_t my, uint16_t mw, uint16_t mh, uint8_t scale,
    uint16_t sky, uint16_t grd, uint16_t door, uint16_t wall, uint16_t obj, uint8_t numnpc, addr_t npc)
```
<dl>
<dt>説明</dt><dd>
タートルの位置を使用して地図を 3D 迷路として表示します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| mx | タイル単位のマップ上の X 座標 |
| my | タイル単位のマップ上の Y 座標 |
| mw | 水平タイルの数 |
| mh | 垂直タイルの数 |
| scale | タイルごとのスプライトの数 (2 のべき乗、0 ～ 3) |
| sky | スカイタイルインデックス |
| grd | 地面タイルインデックス |
| door | 最初のドアのタイルインデックス |
| wall | 最初の壁タイルのインデックス |
| obj | 最初のオブジェクトタイルインデックス |
| numnpc | NPCレコードの数 |
| npc | numnpc に x、y、タイル インデックスの 3 つの要素を掛けた uint32_t 配列 |
</dd>
<dt>関連項目</dt><dd>
[remap], [mget], [mset], [map]
</dd>
</dl>

# 入力

## getpad

```c
int getpad(int pad, int btn)
```
<dl>
<dt>説明</dt><dd>
ゲームパッドのボタンの現在の状態を取得します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| pad | ゲームパッドのインデックス、0 ～ 3 |
| btn | [ゲームパッド] ボタンの 1 つ、`BTN_` |
</dd>
<dt>戻り値</dt><dd>
押されていない場合はゼロ、押されている場合は非ゼロになります。
</dd>
<dt>関連項目</dt><dd>
[prspad], [relpad], [getbtn], [getclk], [getkey]
</dd>
</dl>
<hr>
## prspad

```c
int prspad(int pad, int btn)
```
<dl>
<dt>説明</dt><dd>
最後の呼び出し以降にゲームパッドのボタンが押された場合は true を返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| pad | ゲームパッドのインデックス、0 ～ 3 |
| btn | [ゲームパッド] ボタンの 1 つ、`BTN_` |
</dd>
<dt>戻り値</dt><dd>
押されていない場合はゼロ、押されている場合は非ゼロになります。
</dd>
<dt>関連項目</dt><dd>
[relpad], [getpad], [getbtn], [getclk], [getkey]
</dd>
</dl>
<hr>
## relpad

```c
int relpad(int pad, int btn)
```
<dl>
<dt>説明</dt><dd>
最後の呼び出し以降にゲームパッドのボタンが放された場合は true を返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| pad | ゲームパッドのインデックス、0 ～ 3 |
| btn | [ゲームパッド] ボタンの 1 つ、`BTN_` |
</dd>
<dt>戻り値</dt><dd>
リリースされなかった場合はゼロ、リリースされた場合は非ゼロになります。
</dd>
<dt>関連項目</dt><dd>
[prspad], [getpad], [getbtn], [getclk], [getkey]
</dd>
</dl>
<hr>
## getbtn

```c
int getbtn(int btn)
```
<dl>
<dt>説明</dt><dd>
マウスボタンの状態を取得します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| btn | [ポインタ] ボタン `BTN_` または `SCR_` のいずれか |
</dd>
<dt>戻り値</dt><dd>
押されていない場合はゼロ、押されている場合は非ゼロになります。
</dd>
<dt>関連項目</dt><dd>
[prspad], [relpad], [getpad], [getclk], [getkey]
</dd>
</dl>
<hr>
## getclk

```c
int getclk(int btn)
```
<dl>
<dt>説明</dt><dd>
マウスボタンのクリックを取得します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| btn | [ポインタ] ボタンの 1 つ、`BTN_` |
</dd>
<dt>戻り値</dt><dd>
クリックされなかった場合はゼロ、クリックされた場合は非ゼロになります。
</dd>
<dt>関連項目</dt><dd>
[prspad], [relpad], [getpad], [getbtn], [getkey]
</dd>
</dl>
<hr>
## getkey

```c
int getkey(int sc)
```
<dl>
<dt>説明</dt><dd>
キーの現在の状態を取得します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| sc | スキャンコード、1 ～ 144、[キーボード] を参照 |
</dd>
<dt>戻り値</dt><dd>
押されていない場合はゼロ、押されている場合は非ゼロになります。
</dd>
<dt>関連項目</dt><dd>
[prspad], [relpad], [getpad], [getbtn], [getclk]
</dd>
</dl>
<hr>
## popkey

```c
uint32_t popkey(void)
```
<dl>
<dt>説明</dt><dd>
キーボード キューから UTF-8 キーをポップします。 [キーボード] を参照し、ブロックバージョンについては [getc] を参照してください。
</dd>
<dt>戻り値</dt><dd>
キーの UTF-8 表現、またはキューが空 (ブロックなし) の場合は 0。
</dd>
<dt>関連項目</dt><dd>
[pendkey], [lenkey], [speckey], [getc]
</dd>
</dl>
<hr>
## pendkey

```c
int pendkey(void)
```
<dl>
<dt>説明</dt><dd>
キュー内に保留中のキーがある場合は true を返します (ただし、キーはキュー内に残り、削除されません)。
</dd>
<dt>戻り値</dt><dd>
キューに保留中のキーがある場合は 1 を返します。
</dd>
<dt>関連項目</dt><dd>
[popkey], [lenkey], [speckey]
</dd>
</dl>
<hr>
## lenkey

```c
int lenkey(uint32_t key)
```
<dl>
<dt>説明</dt><dd>
UTF-8 キーの長さをバイト単位で返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| key | キューからポップされたキー |
</dd>
<dt>戻り値</dt><dd>
UTF-8 表現の長さ (バイト単位)。
</dd>
<dt>関連項目</dt><dd>
[popkey], [pendkey], [speckey]
</dd>
</dl>
<hr>
## speckey

```c
int speckey(uint32_t key)
```
<dl>
<dt>説明</dt><dd>
キーが特殊キーの場合は真実を返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| key | キューからポップされたキー |
</dd>
<dt>戻り値</dt><dd>
特殊キーの場合は 1 を返し、印刷可能なキーの場合は 0 を返します。
</dd>
<dt>関連項目</dt><dd>
[popkey], [pendkey], [lenkey]
</dd>
</dl>

# 数学

## rand

```c
uint32_t rand(void)
```
<dl>
<dt>説明</dt><dd>
ランダムに取得します。 `%` モジュロを使用して小さくします。たとえば、`1 + rand() % 6` は、サイコロのように 1 から 6 までのランダムを返します。
</dd>
<dt>戻り値</dt><dd>
間の乱数 0 と 2^^32^^-1 (4294967295)。
</dd>
<dt>関連項目</dt><dd>
[rnd]
</dd>
</dl>
<hr>
## rnd

```c
float rnd(void)
```
<dl>
<dt>説明</dt><dd>
ランダムに取得します。 [rand] と同じですが、浮動小数点数を返します。
</dd>
<dt>戻り値</dt><dd>
0.0 から 1.0 までの乱数。
</dd>
<dt>関連項目</dt><dd>
[rand]
</dd>
</dl>
<hr>
## float

```c
float float(int val)
```
<dl>
<dt>説明</dt><dd>
整数に相当する浮動小数点を返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| val | 価値 |
</dd>
<dt>戻り値</dt><dd>
値の浮動小数点。
</dd>
<dt>関連項目</dt><dd>
[int]
</dd>
</dl>
<hr>
## int

```c
int int(float val)
```
<dl>
<dt>説明</dt><dd>
浮動小数点数に相当する整数を返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| val | 価値 |
</dd>
<dt>戻り値</dt><dd>
値の整数。
</dd>
<dt>関連項目</dt><dd>
[float]
</dd>
</dl>
<hr>
## floor

```c
float floor(float val)
```
<dl>
<dt>説明</dt><dd>
値以下の最大の整数を返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| val | 価値 |
</dd>
<dt>戻り値</dt><dd>
価値の底。
</dd>
<dt>関連項目</dt><dd>
[ceil]
</dd>
</dl>
<hr>
## ceil

```c
float ceil(float val)
```
<dl>
<dt>説明</dt><dd>
値以上の最小の整数を返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| val | 価値 |
</dd>
<dt>戻り値</dt><dd>
価値の天井。
</dd>
<dt>関連項目</dt><dd>
[floor]
</dd>
</dl>
<hr>
## sgn

```c
float sgn(float val)
```
<dl>
<dt>説明</dt><dd>
値の符号を返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| val | 価値 |
</dd>
<dt>戻り値</dt><dd>
1.0 または -1.0。
</dd>
<dt>関連項目</dt><dd>
[abs]
</dd>
</dl>
<hr>
## abs

```c
float abs(float val)
```
<dl>
<dt>説明</dt><dd>
値の絶対値を返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| val | 価値 |
</dd>
<dt>戻り値</dt><dd>
value または -value のいずれかで、常に正です。
</dd>
<dt>関連項目</dt><dd>
[sgn]
</dd>
</dl>
<hr>
## exp

```c
float exp(float val)
```
<dl>
<dt>説明</dt><dd>
値の指数、つまり自然対数の底を値で累乗した値を返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| val | 価値 |
</dd>
<dt>戻り値</dt><dd>
e^^val^^を返します。
</dd>
<dt>関連項目</dt><dd>
[log], [pow]
</dd>
</dl>
<hr>
## log

```c
float log(float val)
```
<dl>
<dt>説明</dt><dd>
値の自然対数を返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| val | 価値 |
</dd>
<dt>戻り値</dt><dd>
値の自然対数を返します。
</dd>
<dt>関連項目</dt><dd>
[exp]
</dd>
</dl>
<hr>
## pow

```c
float pow(float val, float exp)
```
<dl>
<dt>説明</dt><dd>
指数乗した値を返します。 これは処理が遅いため、避けてください。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| val | 価値 |
| exp | 指数 |
</dd>
<dt>戻り値</dt><dd>
val^^exp^^を返します。
</dd>
<dt>関連項目</dt><dd>
[exp], [sqrt], [rsqrt]
</dd>
</dl>
<hr>
## sqrt

```c
float sqrt(float val)
```
<dl>
<dt>説明</dt><dd>
値の平方根を返します。 これは処理が遅いため、避けてください。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| val | 価値 |
</dd>
<dt>戻り値</dt><dd>
値の平方根。
</dd>
<dt>関連項目</dt><dd>
[pow], [rsqrt]
</dd>
</dl>
<hr>
## rsqrt

```c
float rsqrt(float val)
```
<dl>
<dt>説明</dt><dd>
値の平方根の逆数 (`1 / sqrt(val)`) を返します。 John Carmack の高速メソッドを使用します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| val | 価値 |
</dd>
<dt>戻り値</dt><dd>
値の平方根の逆数。
</dd>
<dt>関連項目</dt><dd>
[pow], [sqrt]
</dd>
</dl>
<hr>
## clamp

```c
float clamp(float val, float minv, float maxv)
```
<dl>
<dt>説明</dt><dd>
値を制限値の間に固定します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| val | 価値 |
| minv | 最小値 |
| maxv | 最大値 |
</dd>
<dt>戻り値</dt><dd>
クランプされた値。
</dd>
<dt>関連項目</dt><dd>
[clampv2], [clampv3], [clampv4]
</dd>
</dl>
<hr>
## lerp

```c
float lerp(float a, float b, float t)
```
<dl>
<dt>説明</dt><dd>
線形補間は 2 つの数値を補間します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 最初の浮動小数点数 |
| b | 2 番目の浮動小数点数 |
| t | 0.0 ～ 1.0 の間の補間スケール |
</dd>
<dt>関連項目</dt><dd>
[lerpv2], [lerpv3], [lerpv4], [lerpq], [slerpq]
</dd>
</dl>
<hr>
## pi

```c
float pi(void)
```
<dl>
<dt>説明</dt><dd>
π を浮動小数点数として返します。
</dd>
<dt>戻り値</dt><dd>
値は 3.14159265358979323846 です。
</dd>
</dl>
<hr>
## cos

```c
float cos(uint16_t deg)
```
<dl>
<dt>説明</dt><dd>
コサインを返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| deg | 度、0 ～ 359、0 が上、90 が右 |
</dd>
<dt>戻り値</dt><dd>
-1.0 ～ 1.0 の次数のコサイン。
</dd>
<dt>関連項目</dt><dd>
[sin], [tan], [acos], [asin], [atan], [atan2]
</dd>
</dl>
<hr>
## sin

```c
float sin(uint16_t deg)
```
<dl>
<dt>説明</dt><dd>
正弦を返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| deg | 度、0 ～ 359、0 が上、90 が右 |
</dd>
<dt>戻り値</dt><dd>
-1.0 ～ 1.0 の度数の正弦。
</dd>
<dt>関連項目</dt><dd>
[cos], [tan], [acos], [asin], [atan], [atan2]
</dd>
</dl>
<hr>
## tan

```c
float tan(uint16_t deg)
```
<dl>
<dt>説明</dt><dd>
接線を返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| deg | 度、0 ～ 359、0 が上、90 が右 |
</dd>
<dt>戻り値</dt><dd>
-1.0 ～ 1.0 の度数の正接。
</dd>
<dt>関連項目</dt><dd>
[cos], [sin], [acos], [asin], [atan], [atan2]
</dd>
</dl>
<hr>
## acos

```c
uint16_t acos(float val)
```
<dl>
<dt>説明</dt><dd>
逆余弦を返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| val | 値、-1.0 ～ 1.0 |
</dd>
<dt>戻り値</dt><dd>
逆余弦 (度数)、0 ～ 359、0 が上、90 が右。
</dd>
<dt>関連項目</dt><dd>
[cos], [sin], [tan], [asin], [atan], [atan2]
</dd>
</dl>
<hr>
## asin

```c
uint16_t asin(float val)
```
<dl>
<dt>説明</dt><dd>
円弧正弦を返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| val | 値、-1.0 ～ 1.0 |
</dd>
<dt>戻り値</dt><dd>
円弧正弦 (度数)、0 ～ 359、0 が上、90 が右。
</dd>
<dt>関連項目</dt><dd>
[cos], [sin], [tan], [acos], [atan], [atan2]
</dd>
</dl>
<hr>
## atan

```c
uint16_t atan(float val)
```
<dl>
<dt>説明</dt><dd>
アークタンジェントを返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| val | 値、-1.0 ～ 1.0 |
</dd>
<dt>戻り値</dt><dd>
アークス タンジェントの度数は 0 ～ 359、0 が上、90 が右です。
</dd>
<dt>関連項目</dt><dd>
[cos], [sin], [tan], [acos], [asin], [atan2]
</dd>
</dl>
<hr>
## atan2

```c
uint16_t atan2(float y, float x)
```
<dl>
<dt>説明</dt><dd>
y と x の符号を使用して象限を決定し、y/x の逆正接を返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| y | Y座標 |
| x | X座標 |
</dd>
<dt>戻り値</dt><dd>
アークス タンジェントの度数は 0 ～ 359、0 が上、90 が右です。
</dd>
<dt>関連項目</dt><dd>
[cos], [sin], [tan], [acos], [asin]
</dd>
</dl>
<hr>
## dotv2

```c
float dotv2(addr_t a, addr_t b)
```
<dl>
<dt>説明</dt><dd>
2 つの要素を持つ 2 つのベクトルの内積を計算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 2 つの浮動小数点数のアドレス |
| b | 2 つの浮動小数点数のアドレス |
</dd>
<dt>戻り値</dt><dd>
ベクトルの内積。
</dd>
<dt>関連項目</dt><dd>
[lenv2], [scalev2], [negv2], [addv2], [subv2], [mulv2], [divv2], [clampv2], [lerpv2], [normv2]
</dd>
</dl>
<hr>
## lenv2

```c
float lenv2(addr_t a)
```
<dl>
<dt>説明</dt><dd>
2 つの要素を持つベクトルの長さを計算します。 これは遅いので、避けるようにしてください ([normv2] を参照)。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 2 つの浮動小数点数のアドレス |
</dd>
<dt>戻り値</dt><dd>
ベクトルの長さ。
</dd>
<dt>関連項目</dt><dd>
[dotv2], [scalev2], [negv2], [addv2], [subv2], [mulv2], [divv2], [clampv2], [lerpv2], [normv2]
</dd>
</dl>
<hr>
## scalev2

```c
void scalev2(addr_t a, float s)
```
<dl>
<dt>説明</dt><dd>
2 つの要素を持つベクトルをスケーリングします。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 2 つの浮動小数点数のアドレス |
| s | スケーラー値 |
</dd>
<dt>関連項目</dt><dd>
[dotv2], [lenv2], [negv2], [addv2], [subv2], [mulv2], [divv2], [clampv2], [lerpv2], [normv2]
</dd>
</dl>
<hr>
## negv2

```c
void negv2(addr_t a)
```
<dl>
<dt>説明</dt><dd>
2 つの要素を持つベクトルを否定します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 2 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[dotv2], [lenv2], [scalev2], [addv2], [subv2], [mulv2], [divv2], [clampv2], [lerpv2], [normv2]
</dd>
</dl>
<hr>
## addv2

```c
void addv2(addr_t dst, addr_t a, addr_t b)
```
<dl>
<dt>説明</dt><dd>
2 つの要素を持つベクトルを加算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 2 つの浮動小数点数のアドレス、出力 |
| a | 2 つの浮動小数点数のアドレス |
| b | 2 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[dotv2], [lenv2], [scalev2], [negv2], [subv2], [mulv2], [divv2], [clampv2], [lerpv2], [normv2]
</dd>
</dl>
<hr>
## subv2

```c
void subv2(addr_t dst, addr_t a, addr_t b)
```
<dl>
<dt>説明</dt><dd>
2 つの要素を持つベクトルを減算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 2 つの浮動小数点数のアドレス、出力 |
| a | 2 つの浮動小数点数のアドレス |
| b | 2 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[dotv2], [lenv2], [scalev2], [negv2], [addv2], [mulv2], [divv2], [clampv2], [lerpv2], [normv2]
</dd>
</dl>
<hr>
## mulv2

```c
void mulv2(addr_t dst, addr_t a, addr_t b)
```
<dl>
<dt>説明</dt><dd>
ベクトルと 2 つの要素を乗算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 2 つの浮動小数点数のアドレス、出力 |
| a | 2 つの浮動小数点数のアドレス |
| b | 2 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[dotv2], [lenv2], [scalev2], [negv2], [addv2], [subv2], [divv2], [clampv2], [lerpv2], [normv2]
</dd>
</dl>
<hr>
## divv2

```c
void divv2(addr_t dst, addr_t a, addr_t b)
```
<dl>
<dt>説明</dt><dd>
ベクトルを 2 つの要素で除算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 2 つの浮動小数点数のアドレス、出力 |
| a | 2 つの浮動小数点数のアドレス |
| b | 2 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[dotv2], [lenv2], [scalev2], [negv2], [addv2], [subv2], [mulv2], [clampv2], [lerpv2], [normv2]
</dd>
</dl>
<hr>
## clampv2

```c
void clampv2(addr_t dst, addr_t v, addr_t minv, addr_t maxv)
```
<dl>
<dt>説明</dt><dd>
2 つの要素を持つベクトルをクランプします。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 2 つの浮動小数点数のアドレス、出力 |
| v | 2 つの浮動小数点数のアドレス、入力 |
| minv | 2 つの浮動小数点数のアドレス、最小 |
| maxv | 2 つの浮動小数点数のアドレス、最大 |
</dd>
<dt>関連項目</dt><dd>
[dotv2], [lenv2], [scalev2], [negv2], [addv2], [subv2], [mulv2], [divv2], [lerpv2], [normv2]
</dd>
</dl>
<hr>
## lerpv2

```c
void lerpv2(addr_t dst, addr_t a, addr_t b, float t)
```
<dl>
<dt>説明</dt><dd>
線形補間は 2 つの要素を持つベクトルを補間します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 2 つの浮動小数点数のアドレス、出力 |
| a | 2 つの浮動小数点数のアドレス |
| b | 2 つの浮動小数点数のアドレス |
| t | 0.0 ～ 1.0 の間の補間スケール |
</dd>
<dt>関連項目</dt><dd>
[dotv2], [lenv2], [scalev2], [negv2], [addv2], [subv2], [mulv2], [divv2], [clampv2], [normv2]
</dd>
</dl>
<hr>
## normv2

```c
void normv2(addr_t a)
```
<dl>
<dt>説明</dt><dd>
2 つの要素を持つベクトルを正規化します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 2 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[dotv2], [lenv2], [scalev2], [negv2], [addv2], [subv2], [mulv2], [divv2], [clampv2], [lerpv2]
</dd>
</dl>
<hr>
## dotv3

```c
float dotv3(addr_t a, addr_t b)
```
<dl>
<dt>説明</dt><dd>
3 つの要素を持つ 2 つのベクトルの内積を計算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 3 つの浮動小数点数のアドレス |
| b | 3 つの浮動小数点数のアドレス |
</dd>
<dt>戻り値</dt><dd>
ベクトルの内積。
</dd>
<dt>関連項目</dt><dd>
[lenv3], [scalev3], [negv3], [addv3], [subv3], [mulv3], [divv3], [crossv3], [clampv3], [lerpv3], [normv3]
</dd>
</dl>
<hr>
## lenv3

```c
float lenv3(addr_t a)
```
<dl>
<dt>説明</dt><dd>
3 つの要素を持つベクトルの長さを計算します。 これは遅いので、避けるようにしてください ([normv3] を参照)。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 3 つの浮動小数点数のアドレス |
</dd>
<dt>戻り値</dt><dd>
ベクトルの長さ。
</dd>
<dt>関連項目</dt><dd>
[dotv3], [scalev3], [negv3], [addv3], [subv3], [mulv3], [divv3], [crossv3], [clampv3], [lerpv3], [normv3]
</dd>
</dl>
<hr>
## scalev3

```c
void scalev3(addr_t a, float s)
```
<dl>
<dt>説明</dt><dd>
3 つの要素を持つベクトルをスケーリングします。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 3 つの浮動小数点数のアドレス |
| s | スケーラー値 |
</dd>
<dt>関連項目</dt><dd>
[dotv3], [lenv3], [negv3], [addv3], [subv3], [mulv3], [divv3], [crossv3], [clampv3], [lerpv3], [normv3]
</dd>
</dl>
<hr>
## negv3

```c
void negv3(addr_t a)
```
<dl>
<dt>説明</dt><dd>
3 つの要素を持つベクトルを否定します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 3 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[dotv3], [lenv3], [scalev3], [addv3], [subv3], [mulv3], [divv3], [crossv3], [clampv3], [lerpv3], [normv3]
</dd>
</dl>
<hr>
## addv3

```c
void addv3(addr_t dst, addr_t a, addr_t b)
```
<dl>
<dt>説明</dt><dd>
3 つの要素を持つベクトルを加算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 3 つの浮動小数点数のアドレス、出力 |
| a | 3 つの浮動小数点数のアドレス |
| b | 3 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[dotv3], [lenv3], [scalev3], [negv3], [subv3], [mulv3], [divv3], [crossv3], [clampv3], [lerpv3], [normv3]
</dd>
</dl>
<hr>
## subv3

```c
void subv3(addr_t dst, addr_t a, addr_t b)
```
<dl>
<dt>説明</dt><dd>
3 つの要素を持つベクトルを減算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 3 つの浮動小数点数のアドレス、出力 |
| a | 3 つの浮動小数点数のアドレス |
| b | 3 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[dotv3], [lenv3], [scalev3], [negv3], [addv3], [mulv3], [divv3], [crossv3], [clampv3], [lerpv3], [normv3]
</dd>
</dl>
<hr>
## mulv3

```c
void mulv3(addr_t dst, addr_t a, addr_t b)
```
<dl>
<dt>説明</dt><dd>
ベクトルと 3 つの要素を乗算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 3 つの浮動小数点数のアドレス、出力 |
| a | 3 つの浮動小数点数のアドレス |
| b | 3 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[dotv3], [lenv3], [scalev3], [negv3], [addv3], [subv3], [divv3], [crossv3], [clampv3], [lerpv3], [normv3]
</dd>
</dl>
<hr>
## divv3

```c
void divv3(addr_t dst, addr_t a, addr_t b)
```
<dl>
<dt>説明</dt><dd>
ベクトルを 3 つの要素で分割します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 3 つの浮動小数点数のアドレス、出力 |
| a | 3 つの浮動小数点数のアドレス |
| b | 3 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[dotv3], [lenv3], [scalev3], [negv3], [addv3], [subv3], [mulv3], [crossv3], [clampv3], [lerpv3], [normv3]
</dd>
</dl>
<hr>
## crossv3

```c
void crossv3(addr_t dst, addr_t a, addr_t b)
```
<dl>
<dt>説明</dt><dd>
3 つの要素を含むベクトルの外積を計算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 3 つの浮動小数点数のアドレス、出力 |
| a | 3 つの浮動小数点数のアドレス |
| b | 3 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[dotv3], [lenv3], [scalev3], [negv3], [addv3], [subv3], [mulv3], [divv3], [clampv3], [lerpv3], [normv3]
</dd>
</dl>
<hr>
## clampv3

```c
void clampv3(addr_t dst, addr_t v, addr_t minv, addr_t maxv)
```
<dl>
<dt>説明</dt><dd>
3 つの要素を持つベクトルをクランプします。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 3 つの浮動小数点数のアドレス、出力 |
| v | 3 つの浮動小数点数のアドレス、入力 |
| minv | 3 つの浮動小数点数のアドレス、最小 |
| maxv | 3 つの浮動小数点数のアドレス、最大 |
</dd>
<dt>関連項目</dt><dd>
[dotv3], [lenv3], [scalev3], [negv3], [addv3], [subv3], [mulv3], [divv3], [crossv3], [lerpv3], [normv3]
</dd>
</dl>
<hr>
## lerpv3

```c
void lerpv3(addr_t dst, addr_t a, addr_t b, float t)
```
<dl>
<dt>説明</dt><dd>
線形補間では、3 つの要素を含むベクトルが補間されます。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 3 つの浮動小数点数のアドレス、出力 |
| a | 3 つの浮動小数点数のアドレス |
| b | 3 つの浮動小数点数のアドレス |
| t | 0.0 ～ 1.0 の間の補間スケール |
</dd>
<dt>関連項目</dt><dd>
[dotv3], [lenv3], [scalev3], [negv3], [addv3], [subv3], [mulv3], [divv3], [crossv3], [clampv3], [normv3]
</dd>
</dl>
<hr>
## normv3

```c
void normv3(addr_t a)
```
<dl>
<dt>説明</dt><dd>
3 つの要素を含むベクトルを正規化します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 3 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[dotv3], [lenv3], [scalev3], [negv3], [addv3], [subv3], [mulv3], [divv3], [crossv3], [clampv3], [lerpv3]
</dd>
</dl>
<hr>
## dotv4

```c
float dotv4(addr_t a, addr_t b)
```
<dl>
<dt>説明</dt><dd>
4 つの要素を持つ 2 つのベクトルの内積を計算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 4 つの浮動小数点数のアドレス |
| b | 4 つの浮動小数点数のアドレス |
</dd>
<dt>戻り値</dt><dd>
ベクトルの内積。
</dd>
<dt>関連項目</dt><dd>
[lenv4], [scalev4], [negv4], [addv4], [subv4], [mulv4], [divv4], [clampv4], [lerpv4], [normv4]
</dd>
</dl>
<hr>
## lenv4

```c
float lenv4(addr_t a)
```
<dl>
<dt>説明</dt><dd>
4 つの要素を持つベクトルの長さを計算します。 これは遅いので、避けるようにしてください ([normv4] を参照)。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 4 つの浮動小数点数のアドレス |
</dd>
<dt>戻り値</dt><dd>
ベクトルの長さ。
</dd>
<dt>関連項目</dt><dd>
[dotv4], [scalev4], [negv4], [addv4], [subv4], [mulv4], [divv4], [clampv4], [lerpv4], [normv4]
</dd>
</dl>
<hr>
## scalev4

```c
void scalev4(addr_t a, float s)
```
<dl>
<dt>説明</dt><dd>
4 つの要素を持つベクトルをスケーリングします。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 4 つの浮動小数点数のアドレス |
| s | スケーラー値 |
</dd>
<dt>関連項目</dt><dd>
[dotv4], [lenv4], [negv4], [addv4], [subv4], [mulv4], [divv4], [clampv4], [lerpv4], [normv4]
</dd>
</dl>
<hr>
## negv4

```c
void negv4(addr_t a)
```
<dl>
<dt>説明</dt><dd>
4 つの要素を持つベクトルを否定します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 4 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[dotv4], [lenv4], [scalev4], [addv4], [subv4], [mulv4], [divv4], [clampv4], [lerpv4], [normv4]
</dd>
</dl>
<hr>
## addv4

```c
void addv4(addr_t dst, addr_t a, addr_t b)
```
<dl>
<dt>説明</dt><dd>
4 つの要素を持つベクトルを加算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 4 つの浮動小数点数のアドレス、出力 |
| a | 4 つの浮動小数点数のアドレス |
| b | 4 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[dotv4], [lenv4], [negv4], [scalev4], [subv4], [mulv4], [divv4], [clampv4], [lerpv4], [normv4]
</dd>
</dl>
<hr>
## subv4

```c
void subv4(addr_t dst, addr_t a, addr_t b)
```
<dl>
<dt>説明</dt><dd>
4 つの要素を持つベクトルを減算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 4 つの浮動小数点数のアドレス、出力 |
| a | 4 つの浮動小数点数のアドレス |
| b | 4 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[dotv4], [lenv4], [scalev4], [negv4], [addv4], [mulv4], [divv4], [clampv4], [lerpv4], [normv4]
</dd>
</dl>
<hr>
## mulv4

```c
void mulv4(addr_t dst, addr_t a, addr_t b)
```
<dl>
<dt>説明</dt><dd>
ベクトルと 4 つの要素を乗算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 4 つの浮動小数点数のアドレス、出力 |
| a | 4 つの浮動小数点数のアドレス |
| b | 4 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[dotv4], [lenv4], [scalev4], [negv4], [addv4], [subv4], [divv4], [clampv4], [lerpv4], [normv4]
</dd>
</dl>
<hr>
## divv4

```c
void divv4(addr_t dst, addr_t a, addr_t b)
```
<dl>
<dt>説明</dt><dd>
ベクトルを 4 つの要素で除算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 4 つの浮動小数点数のアドレス、出力 |
| a | 4 つの浮動小数点数のアドレス |
| b | 4 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[dotv4], [lenv4], [scalev4], [negv4], [addv4], [subv4], [mulv4], [clampv4], [lerpv4], [normv4]
</dd>
</dl>
<hr>
## clampv4

```c
void clampv4(addr_t dst, addr_t v, addr_t minv, addr_t maxv)
```
<dl>
<dt>説明</dt><dd>
4 つの要素を持つベクトルをクランプします。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 4 つの浮動小数点数のアドレス、出力 |
| v | 4 つの浮動小数点数のアドレス、入力 |
| minv | 4 つの浮動小数点数のアドレス、最小 |
| maxv | 4 つの浮動小数点数のアドレス、最大 |
</dd>
<dt>関連項目</dt><dd>
[dotv4], [lenv4], [scalev4], [negv4], [addv4], [subv4], [mulv4], [divv4], [lerpv4], [normv4]
</dd>
</dl>
<hr>
## lerpv4

```c
void lerpv4(addr_t dst, addr_t a, addr_t b, float t)
```
<dl>
<dt>説明</dt><dd>
線形補間は 4 つの要素を持つベクトルを補間します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 4 つの浮動小数点数のアドレス、出力 |
| a | 4 つの浮動小数点数のアドレス |
| b | 4 つの浮動小数点数のアドレス |
| t | 0.0 ～ 1.0 の間の補間スケール |
</dd>
<dt>関連項目</dt><dd>
[dotv4], [lenv4], [scalev4], [negv4], [addv4], [subv4], [mulv4], [divv4], [clampv4], [normv4]
</dd>
</dl>
<hr>
## normv4

```c
void normv4(addr_t a)
```
<dl>
<dt>説明</dt><dd>
4 つの要素を持つベクトルを正規化します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 4 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[dotv4], [lenv4], [scalev4], [negv4], [addv4], [subv4], [mulv4], [divv4], [clampv4], [lerpv4]
</dd>
</dl>
<hr>
## idq

```c
void idq(addr_t a)
```
<dl>
<dt>説明</dt><dd>
恒等四元数をロードします。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 4 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[eulerq], [dotq], [lenq], [scaleq], [negq], [addq], [subq], [mulq], [rotq], [lerpq], [slerpq], [normq]
</dd>
</dl>
<hr>
## eulerq

```c
void eulerq(addr_t dst, uint16_t pitch, uint16_t yaw, uint16_t roll)
```
<dl>
<dt>説明</dt><dd>
オイラー角を使用して四元数を読み込みます。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 4 つの浮動小数点数のアドレス、出力 |
| pitch | X 軸を中心とした回転 (度単位、0 ～ 359) |
| yaw | Y 軸を中心とした回転 (度単位、0 ～ 359) |
| roll | Z 軸を中心とした回転 (度単位、0 ～ 359) |
</dd>
<dt>関連項目</dt><dd>
[idq], [dotq], [lenq], [scaleq], [negq], [addq], [subq], [mulq], [rotq], [lerpq], [slerpq], [normq]
</dd>
</dl>
<hr>
## dotq

```c
float dotq(addr_t a, addr_t b)
```
<dl>
<dt>説明</dt><dd>
クォータニオンの内積を計算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 4 つの浮動小数点数のアドレス |
| b | 4 つの浮動小数点数のアドレス |
</dd>
<dt>戻り値</dt><dd>
クォータニオンの内積。
</dd>
<dt>関連項目</dt><dd>
[idq], [eulerq], [lenq], [scaleq], [negq], [addq], [subq], [mulq], [rotq], [lerpq], [slerpq], [normq]
</dd>
</dl>
<hr>
## lenq

```c
float lenq(addr_t a)
```
<dl>
<dt>説明</dt><dd>
クォータニオンの長さを計算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 4 つの浮動小数点数のアドレス |
</dd>
<dt>戻り値</dt><dd>
クォータニオンの長さ。
</dd>
<dt>関連項目</dt><dd>
[idq], [eulerq], [dotq], [scaleq], [negq], [addq], [subq], [mulq], [rotq], [lerpq], [slerpq], [normq]
</dd>
</dl>
<hr>
## scaleq

```c
void scaleq(addr_t a, float s)
```
<dl>
<dt>説明</dt><dd>
クォータニオンをスケールします。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 4 つの浮動小数点数のアドレス |
| s | スケーラー値 |
</dd>
<dt>関連項目</dt><dd>
[idq], [eulerq], [dotq], [lenq], [negq], [addq], [subq], [mulq], [rotq], [lerpq], [slerpq], [normq]
</dd>
</dl>
<hr>
## negq

```c
void negq(addr_t a)
```
<dl>
<dt>説明</dt><dd>
クォータニオンを否定します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 4 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[idq], [eulerq], [dotq], [lenq], [scaleq], [addq], [subq], [mulq], [rotq], [lerpq], [slerpq], [normq]
</dd>
</dl>
<hr>
## addq

```c
void addq(addr_t dst, addr_t a, addr_t b)
```
<dl>
<dt>説明</dt><dd>
クォータニオンを加算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 4 つの浮動小数点数のアドレス、出力 |
| a | 4 つの浮動小数点数のアドレス |
| b | 4 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[idq], [eulerq], [dotq], [lenq], [scaleq], [negq], [subq], [mulq], [rotq], [lerpq], [slerpq], [normq]
</dd>
</dl>
<hr>
## subq

```c
void subq(addr_t dst, addr_t a, addr_t b)
```
<dl>
<dt>説明</dt><dd>
クォータニオンを減算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 4 つの浮動小数点数のアドレス、出力 |
| a | 4 つの浮動小数点数のアドレス |
| b | 4 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[idq], [eulerq], [dotq], [lenq], [scaleq], [negq], [addq], [mulq], [rotq], [lerpq], [slerpq], [normq]
</dd>
</dl>
<hr>
## mulq

```c
void mulq(addr_t dst, addr_t a, addr_t b)
```
<dl>
<dt>説明</dt><dd>
クォータニオンを乗算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 4 つの浮動小数点数のアドレス、出力 |
| a | 4 つの浮動小数点数のアドレス |
| b | 4 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[idq], [eulerq], [dotq], [lenq], [scaleq], [negq], [addq], [subq], [rotq], [lerpq], [slerpq], [normq]
</dd>
</dl>
<hr>
## rotq

```c
void rotq(addr_t dst, addr_t q, addr_t v)
```
<dl>
<dt>説明</dt><dd>
3 つの要素を持つベクトルをクォータニオンで回転します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 3 つの浮動小数点数のアドレス、出力 |
| q | 4 つの浮動小数点数のアドレス |
| v | 3 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[idq], [eulerq], [dotq], [lenq], [scaleq], [negq], [addq], [subq], [mulq], [lerpq], [slerpq], [normq]
</dd>
</dl>
<hr>
## lerpq

```c
void lerpq(addr_t dst, addr_t a, addr_t b, float t)
```
<dl>
<dt>説明</dt><dd>
線形補間は 2 つの四元数を補間します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 4 つの浮動小数点数のアドレス、出力 |
| a | 4 つの浮動小数点数のアドレス |
| b | 4 つの浮動小数点数のアドレス |
| t | 0.0 ～ 1.0 の間の補間スケール |
</dd>
<dt>関連項目</dt><dd>
[idq], [eulerq], [dotq], [lenq], [scaleq], [negq], [addq], [subq], [mulq], [rotq], [slerpq], [normq]
</dd>
</dl>
<hr>
## slerpq

```c
void slerpq(addr_t dst, addr_t a, addr_t b, float t)
```
<dl>
<dt>説明</dt><dd>
球面はクォータニオンを補間します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 4 つの浮動小数点数のアドレス、出力 |
| a | 4 つの浮動小数点数のアドレス |
| b | 4 つの浮動小数点数のアドレス |
| t | 0.0 ～ 1.0 の間の補間スケール |
</dd>
<dt>関連項目</dt><dd>
[idq], [eulerq], [dotq], [lenq], [scaleq], [negq], [addq], [subq], [mulq], [rotq], [lerpq], [normq]
</dd>
</dl>
<hr>
## normq

```c
void normq(addr_t a)
```
<dl>
<dt>説明</dt><dd>
クォータニオンを正規化します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 4 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[idq], [eulerq], [dotq], [lenq], [scaleq], [negq], [addq], [subq], [mulq], [rotq], [lerpq], [slerpq]
</dd>
</dl>
<hr>
## idm4

```c
void idm4(addr_t a)
```
<dl>
<dt>説明</dt><dd>
4 x 4 単位行列を読み込みます。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 16 個の浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[trsm4], [detm4], [addm4], [subm4], [mulm4], [mulm4v3], [mulm4v4], [invm4], [trpm4]
</dd>
</dl>
<hr>
## trsm4

```c
void trsm4(addr_t dst, addr_t t, addr_t r, addr_t s)
```
<dl>
<dt>説明</dt><dd>
移動、回転、スケーリングを備えた 4 x 4 行列を作成します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 16 個の浮動小数点数のアドレス、宛先行列 |
| t | 3 つの浮動小数点数のアドレス、翻訳ベクトル |
| r | 4 つの浮動小数点数のアドレス、回転四元数 |
| s | 3 つの浮動小数点数のアドレス、スケーリング ベクトル |
</dd>
<dt>関連項目</dt><dd>
[idm4], [detm4], [addm4], [subm4], [mulm4], [mulm4v3], [mulm4v4], [invm4], [trpm4]
</dd>
</dl>
<hr>
## detm4

```c
float detm4(addr_t a)
```
<dl>
<dt>説明</dt><dd>
行列の行列式を返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| a | 16 個の浮動小数点数のアドレス |
</dd>
<dt>戻り値</dt><dd>
マトリックスの決定要因。
</dd>
<dt>関連項目</dt><dd>
[idm4], [trsm4], [addm4], [subm4], [mulm4], [mulm4v3], [mulm4v4], [invm4], [trpm4]
</dd>
</dl>
<hr>
## addm4

```c
void addm4(addr_t dst, addr_t a, addr_t b)
```
<dl>
<dt>説明</dt><dd>
行列を加算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 16 個の浮動小数点数のアドレス、出力 |
| a | 16 個の浮動小数点数のアドレス |
| b | 16 個の浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[idm4], [trsm4], [detm4], [subm4], [mulm4], [mulm4v3], [mulm4v4], [invm4], [trpm4]
</dd>
</dl>
<hr>
## subm4

```c
void subm4(addr_t dst, addr_t a, addr_t b)
```
<dl>
<dt>説明</dt><dd>
行列を減算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 16 個の浮動小数点数のアドレス、出力 |
| a | 16 個の浮動小数点数のアドレス |
| b | 16 個の浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[idm4], [trsm4], [detm4], [addm4], [mulm4], [mulm4v3], [mulm4v4], [invm4], [trpm4]
</dd>
</dl>
<hr>
## mulm4

```c
void mulm4(addr_t dst, addr_t a, addr_t b)
```
<dl>
<dt>説明</dt><dd>
行列を乗算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 16 個の浮動小数点数のアドレス、出力 |
| a | 16 個の浮動小数点数のアドレス |
| b | 16 個の浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[idm4], [trsm4], [detm4], [addm4], [subm4], [mulm4v3], [mulm4v4], [invm4], [trpm4]
</dd>
</dl>
<hr>
## mulm4v3

```c
void mulm4v3(addr_t dst, addr_t m, addr_t v)
```
<dl>
<dt>説明</dt><dd>
3 つの要素を含むベクトルに行列を乗算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 3 つの浮動小数点数のアドレス、出力 |
| m | 16 個の浮動小数点数のアドレス |
| v | 3 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[idm4], [trsm4], [detm4], [addm4], [subm4], [mulm4], [mulm4v4], [invm4], [trpm4]
</dd>
</dl>
<hr>
## mulm4v4

```c
void mulm4v4(addr_t dst, addr_t m, addr_t v)
```
<dl>
<dt>説明</dt><dd>
4 つの要素を含むベクトルに行列を乗算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 4 つの浮動小数点数のアドレス、出力 |
| m | 16 個の浮動小数点数のアドレス |
| v | 4 つの浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[idm4], [trsm4], [detm4], [addm4], [subm4], [mulm4], [mulm4v3], [invm4], [trpm4]
</dd>
</dl>
<hr>
## invm4

```c
void invm4(addr_t dst, addr_t a)
```
<dl>
<dt>説明</dt><dd>
逆行列を計算します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 16 個の浮動小数点数のアドレス、出力 |
| a | 16 個の浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[idm4], [trsm4], [detm4], [addm4], [subm4], [mulm4], [mulm4v3], [mulm4v4], [trpm4]
</dd>
</dl>
<hr>
## trpm4

```c
void trpm4(addr_t dst, addr_t a)
```
<dl>
<dt>説明</dt><dd>
転置行列。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 16 個の浮動小数点数のアドレス、出力 |
| a | 16 個の浮動小数点数のアドレス |
</dd>
<dt>関連項目</dt><dd>
[idm4], [trsm4], [detm4], [addm4], [subm4], [mulm4], [mulm4v3], [mulm4v4], [invm4]
</dd>
</dl>
<hr>
## trns

```c
void trns(addr_t dst, addr_t src, uint8_t num,
    int16_t x, int16_t y, int16_t z,
    uint16_t pitch, uint16_t yaw, uint16_t roll,
    float scale)
```
<dl>
<dt>説明</dt><dd>
頂点クラウド、別名を変換します。 [3D空間]に3Dモデルを配置します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 宛先頂点配列、各 3 x 2 バイト、X、Y、Z |
| src | ソース頂点配列、各 3 x 2 バイト、X、Y、Z |
| num | 配列内の頂点座標トリプレットの数 |
| x | ワールド X 座標、-32767 ～ 32767 |
| y | ワールド Y 座標、-32767 ～ 32767 |
| z | ワールド Z 座標、-32767 ～ 32767 |
| pitch | X 軸を中心とした回転 (度単位、0 ～ 359) |
| yaw | Y 軸を中心とした回転 (度単位、0 ～ 359) |
| roll | Z 軸を中心とした回転 (度単位、0 ～ 359) |
| scale | スケール、元のサイズを維持するには 1.0 を使用します |
</dd>
<dt>関連項目</dt><dd>
[mesh]
</dd>
</dl>

# メモリ

## inb

```c
uint8_t inb(addr_t src)
```
<dl>
<dt>説明</dt><dd>
メモリから 1 バイト (byte) で読み取ります。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| src | アドレス、0x00000 ～ 0xBFFFF |
</dd>
<dt>戻り値</dt><dd>
そのアドレスの値を返します。
</dd>
</dl>
<hr>
## inw

```c
uint16_t inw(addr_t src)
```
<dl>
<dt>説明</dt><dd>
メモリからワード (word、2 バイト) で読み取ります。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| src | アドレス、0x00000 ～ 0xBFFFE |
</dd>
<dt>戻り値</dt><dd>
そのアドレスの値を返します。
</dd>
</dl>
<hr>
## ini

```c
uint32_t ini(addr_t src)
```
<dl>
<dt>説明</dt><dd>
メモリから整数 (int、4 バイト) を読み取ります。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| src | アドレス、0x00000 ～ 0xBFFFC |
</dd>
<dt>戻り値</dt><dd>
そのアドレスの値を返します。
</dd>
</dl>
<hr>
## outb

```c
void outb(addr_t dst, uint8_t value)
```
<dl>
<dt>説明</dt><dd>
1 バイト (byte) をメモリに書き込みます。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | アドレス、0x00000 ～ 0xBFFFF |
| value | 設定する値、0 ～ 255 |
</dd>
</dl>
<hr>
## outw

```c
void outw(addr_t dst, uint16_t value)
```
<dl>
<dt>説明</dt><dd>
ワード (word、2 バイト) をメモリに書き込みます。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | アドレス、0x00000 ～ 0xBFFFE |
| value | 設定する値、0 ～ 65535 |
</dd>
</dl>
<hr>
## outi

```c
void outi(addr_t dst, uint32_t value)
```
<dl>
<dt>説明</dt><dd>
整数 (int、4 バイト) をメモリに書き込みます。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | アドレス、0x00000 ～ 0xBFFFC |
| value | 設定する値、0 ～ 4294967295 |
</dd>
</dl>
<hr>
## memsave

```c
int memsave(uint8_t overlay, addr_t src, uint32_t size)
```
<dl>
<dt>説明</dt><dd>
メモリ領域をオーバーレイに保存します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| overlay | 書き込むオーバーレイのインデックス、0 ～ 255 |
| src | 保存先のメモリ オフセット、0x00000 ～ 0xBFFFF |
| size | 保存するバイト数 |
</dd>
<dt>戻り値</dt><dd>
成功した場合は 1、エラーの場合は 0 を返します。
</dd>
<dt>関連項目</dt><dd>
[memload]
</dd>
</dl>
<hr>
## memload

```c
int memload(addr_t dst, uint8_t overlay, uint32_t maxsize)
```
<dl>
<dt>説明</dt><dd>
オーバーレイを指定されたメモリ領域にロードします。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 保存先のメモリ オフセット、0x00000 ～ 0xBFFFF |
| overlay | 読み取るオーバーレイのインデックス、0 ～ 255 |
| maxsize | ロードする最大バイト数 |
</dd>
<dt>戻り値</dt><dd>
実際にロードされたバイト数を返します。
</dd>
<dt>関連項目</dt><dd>
[memsave]
</dd>
</dl>
<hr>
## memcpy

```c
void memcpy(addr_t dst, addr_t src, uint32_t len)
```
<dl>
<dt>説明</dt><dd>
メモリ領域をコピーします。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 宛先アドレス、0x00000 ～ 0xBFFFF |
| src | 送信元アドレス、0x00000 ～ 0xBFFFF |
| len | コピーするバイト数 |
</dd>
</dl>
<hr>
## memset

```c
void memset(addr_t dst, uint8_t value, uint32_t len)
```
<dl>
<dt>説明</dt><dd>
メモリ領域を指定された値に設定します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 宛先アドレス、0x00000 ～ 0xBFFFF |
| value | 設定する値、0 ～ 255 |
| len | 設定するバイト数 |
</dd>
</dl>
<hr>
## memcmp

```c
int memcmp(addr_t addr0, addr_t addr1, uint32_t len)
```
<dl>
<dt>説明</dt><dd>
メモリ領域を比較します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| addr0 | 最初のアドレス、0x00000 ～ 0xBFFFF |
| addr1 | 2 番目のアドレス、0x00000 ～ 0xBFFFF |
| len | 比較するバイト数 |
</dd>
<dt>戻り値</dt><dd>
2 つのメモリ領域が一致する場合は差を返し、0 を返します。
</dd>
</dl>
<hr>
## deflate

```c
int deflate(addr_t dst, addr_t src, uint32_t len)
```
<dl>
<dt>説明</dt><dd>
RFC1950 deflate (zlib) を使用してバッファを圧縮します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 宛先アドレス、0x30000 ～ 0xBFFFF |
| src | 送信元アドレス、0x30000 ～ 0xBFFFF |
| len | 圧縮するバイト数 |
</dd>
<dt>戻り値</dt><dd>
エラーの場合は 0 または負の値、それ以外の場合は圧縮バッファおよび dst 内の圧縮データの長さ。
</dd>
<dt>関連項目</dt><dd>
[inflate]
</dd>
</dl>
<hr>
## inflate

```c
int inflate(addr_t dst, addr_t src, uint32_t len)
```
<dl>
<dt>説明</dt><dd>
RFC1950 deflate (zlib) 圧縮データを含むバッファを解凍します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| dst | 宛先アドレス、0x30000 ～ 0xBFFFF |
| src | 送信元アドレス、0x30000 ～ 0xBFFFF |
| len | number of compressed bytes |
</dd>
<dt>戻り値</dt><dd>
エラーの場合は 0 または負の値、それ以外の場合は、dst 内の非圧縮バッファおよび非圧縮データの長さ。
</dd>
<dt>関連項目</dt><dd>
[deflate]
</dd>
</dl>
<hr>
## time

```c
float time(void)
```
<dl>
<dt>説明</dt><dd>
電源投入以降のティック数を返します。
</dd>
<dt>戻り値</dt><dd>
電源投入からの経過時間 (ミリ秒単位)。
</dd>
<dt>関連項目</dt><dd>
[now]
</dd>
</dl>
<hr>
## now

```c
uint32_t now(void)
```
<dl>
<dt>説明</dt><dd>
UNIX タイムスタンプを返します。 オフセット 0000C のバイトをチェックして、オーバーフローしていないかどうかを確認します。
</dd>
<dt>戻り値</dt><dd>
グリニッジ標準時、1970 年 1 月 1 日の午前 0 時からの経過時間 (秒単位)。
</dd>
<dt>関連項目</dt><dd>
[time]
</dd>
</dl>
<hr>
## atoi

```c
int atoi(str_t src)
```
<dl>
<dt>説明</dt><dd>
ASCII 10 進数文字列を整数に変換します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| src | 文字列アドレス、0x00000 ～ 0xBFFFF |
</dd>
<dt>戻り値</dt><dd>
文字列の数値。
</dd>
<dt>関連項目</dt><dd>
[itoa], [str], [val]
</dd>
</dl>
<hr>
## itoa

```c
str_t itoa(int value)
```
<dl>
<dt>説明</dt><dd>
整数を ASCII 10 進数文字列に変換します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| value | 値、-2147483648 ～ 2147483647 |
</dd>
<dt>戻り値</dt><dd>
変換された文字列。
</dd>
<dt>関連項目</dt><dd>
[atoi], [str], [val]
</dd>
</dl>
<hr>
## val

```c
float val(str_t src)
```
<dl>
<dt>説明</dt><dd>
ASCII 10 進数文字列を浮動小数点数に変換します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| src | 文字列アドレス、0x00000 ～ 0xBFFFF |
</dd>
<dt>戻り値</dt><dd>
文字列の数値。
</dd>
<dt>関連項目</dt><dd>
[itoa], [atoi], [str]
</dd>
</dl>
<hr>
## str

```c
str_t str(float value)
```
<dl>
<dt>説明</dt><dd>
浮動小数点数を ASCII 10 進数文字列に変換します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| value | 値 |
</dd>
<dt>戻り値</dt><dd>
変換された文字列。
</dd>
<dt>関連項目</dt><dd>
[atoi], [itoa], [val]
</dd>
</dl>
<hr>
## sprintf

```c
str_t sprintf(str_t fmt, ...)
```
<dl>
<dt>説明</dt><dd>
フォーマットと引数を使用して作成された、ゼロで終了する UTF-8 文字列を返します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| fmt | [書式設定文字列] |
| ... | オプションの引数 |
</dd>
<dt>戻り値</dt><dd>
構築された文字列。
</dd>
</dl>
<hr>
## strlen

```c
int strlen(str_t src)
```
<dl>
<dt>説明</dt><dd>
文字列内のバイト数を返します (終端ゼロは除きます)。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| src | 文字列アドレス、0x00000 ～ 0xBFFFF |
</dd>
<dt>戻り値</dt><dd>
文字列内のバイト数。
</dd>
<dt>関連項目</dt><dd>
[mblen]
</dd>
</dl>
<hr>
## mblen

```c
int mblen(str_t src)
```
<dl>
<dt>説明</dt><dd>
文字列内の UTF-8 マルチバイト文字の数を返します (終了ゼロは除きます)。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| src | 文字列アドレス、0x00000 ～ 0xBFFFF |
</dd>
<dt>戻り値</dt><dd>
文字列内の文字数。
</dd>
<dt>関連項目</dt><dd>
[strlen]
</dd>
</dl>
<hr>
## malloc

```c
addr_t malloc(uint32_t size)
```
<dl>
<dt>説明</dt><dd>
ユーザーメモリを動的に割り当てます。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| size | 割り当てるバイト数 |
</dd>
<dt>戻り値</dt><dd>
新しく割り当てられたバッファのアドレス、またはエラーの場合は NULL。
</dd>
<dt>関連項目</dt><dd>
[realloc], [free]
</dd>
</dl>
<hr>
## realloc

```c
addr_t realloc(addr_t addr, uint32_t size)
```
<dl>
<dt>説明</dt><dd>
以前に割り当てられたバッファのサイズを変更します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| addr | 割り当てられたバッファのアドレス |
| size | サイズ変更するバイト数 |
</dd>
<dt>戻り値</dt><dd>
新しく割り当てられたバッファのアドレス、またはエラーの場合は NULL。
</dd>
<dt>関連項目</dt><dd>
[malloc], [free]
</dd>
</dl>
<hr>
## free

```c
int free(addr_t addr)
```
<dl>
<dt>説明</dt><dd>
動的に割り当てられたユーザー メモリを解放します。
</dd>
<dt>パラメータ</dt><dd>
| 引数 | 説明 |
| addr | 割り当てられたバッファのアドレス |
</dd>
<dt>戻り値</dt><dd>
成功の場合は 1、エラーの場合は 0。
</dd>
<dt>関連項目</dt><dd>
[malloc], [realloc]
</dd>
</dl>
