|
| 1 | +# MineCode リフェレンス |
| 2 | +## MineCodeについて |
| 3 | +MineCodeは主にWii Uのチートコード(機械語)を作成するためのツールです |
| 4 | + |
| 5 | +## 型の概念 |
| 6 | +MineCodeには型の概念がなく、すべて整数型として処理されます。 |
| 7 | +floatなどの少数型は現時点では、サポートしていません(今度のアップデートで対応する可能性)。 |
| 8 | +文字列型はその文字列へのポインタ(整数)になって格納されます。 |
| 9 | + |
| 10 | +## mcl |
| 11 | +MineCodeでは色々な情報をjsonで記述できるmclというシステムがあります。 |
| 12 | +mclの例はこのリポジトリのmclsディレクトリにあるのでそこを参考にしてください。 |
| 13 | +構造は以下のとおりです。 |
| 14 | +```jsonc |
| 15 | +{ |
| 16 | + "name": "そのmclの名前", |
| 17 | + "ver": 1, // 現時点では1を指定してください |
| 18 | + // ストリームのような機能を提供できます |
| 19 | + "put": { |
| 20 | + "label": { |
| 21 | + "type": "asm", // アセンブラであることを示します |
| 22 | + // "asm" の他に "MineCode"も使用できます。 |
| 23 | + "proc": "$arg:" // $arg には渡されたものが入ります |
| 24 | + }, |
| 25 | + // 木構造で書くこともできます |
| 26 | + "a": { |
| 27 | + "b": { |
| 28 | + "type": "asm", |
| 29 | + "proc": "hello:" // $argが使われてなくてもエラーにはなりませんが推奨しません |
| 30 | + } |
| 31 | + } |
| 32 | + }, |
| 33 | + // ポインタの宣言 |
| 34 | + // 上から順に処理されるので、依存関係順に書いてください |
| 35 | + "pointers": [ |
| 36 | + ["ポインタの名前", "ポインタ式"], |
| 37 | + // 例 |
| 38 | + ["manager", "[0x20000000]"] |
| 39 | + ], |
| 40 | + // 関数の宣言 |
| 41 | + "functions": { // これもまた木構造でもかけます |
| 42 | + "exit": { |
| 43 | + "addr": 33554432, // json の制約上10進数で書く必要があります |
| 44 | + "args": [ // 現時点では無視されます |
| 45 | + { |
| 46 | + // 引数の型です |
| 47 | + // 使える識別子は |
| 48 | + // int, cstr, wstr, ptr |
| 49 | + // cstrとwstrはstd::stringとstd::wstringの違いと同じです |
| 50 | + "T": "int", |
| 51 | + // デフォルトで渡される値の式です |
| 52 | + "default": "0" |
| 53 | + } |
| 54 | + ] |
| 55 | + } |
| 56 | + } |
| 57 | +} |
| 58 | +``` |
| 59 | + |
| 60 | +## 変数 |
| 61 | +MineCodeは変数をサポートしています。 |
| 62 | +この変数は型が無いため(すべて整数)型チェックができないという欠点があります。 |
| 63 | + |
| 64 | +### 特徴 |
| 65 | +MineCodeの型はC系の言語と違い、自動的に変数が宣言されます。 |
| 66 | +なので以下のようなソースがエラーなく動作します。 |
| 67 | +``` |
| 68 | +a = 1 |
| 69 | +b = a + 1 |
| 70 | +``` |
| 71 | + |
| 72 | +## 関数 |
| 73 | +MineCodeでは型の概念がないため関数の定義が非常に簡単です。 |
| 74 | +ユーザー関数はまだまだ未熟ですが例を以下に示します |
| 75 | +``` |
| 76 | +// int とか 実引数名は現時点では見ていません |
| 77 | +func hoge(int a, int b){ |
| 78 | +} |
| 79 | +``` |
| 80 | +アドレス指定関数呼び出しは他の言語より簡単に呼べます。 |
| 81 | +※型チェックが行われないためクラッシュする可能性があります。 |
| 82 | +例を以下に示します |
| 83 | +``` |
| 84 | +func[0x02000000](0) // 0x02000000にある関数を呼べる |
| 85 | +``` |
| 86 | + |
| 87 | +## フロー制御 |
| 88 | +### For (特定の範囲だけのループ) |
| 89 | +MineCodeには範囲を指定してループできる構文が有ります。 |
| 90 | +それを以下に示します。 |
| 91 | +``` |
| 92 | +for i in 0...10{ |
| 93 | +
|
| 94 | +} |
| 95 | +``` |
| 96 | + |
| 97 | +### If / While |
| 98 | +多言語と同じなので略。 |
0 commit comments