forked from IchigoJam/asm15
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.html
178 lines (169 loc) · 10.3 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
<!DOCTYPE html><html><head><meta charset="utf-8">
<title>asm15 assembler for IchigoJam / IchigoLatte</title>
<meta property="og:image" content="asm15.png">
<link rel="icon" href="asm15.ico" sizes="16x16">
<link rel="apple-touch-icon" href="asm15.png"/>
<script src="asm15constants.js"></script>
<script src="asm15output.js"></script>
<script src="asm15.js"></script>
<script src="asm15dom.js"></script>
<!--<script src="asm15_example.js"></script>-->
<style>
body {
font-family: sans-serif;
}
li {
padding: 0.5em;
}
</style>
</head><body>
<h1>asm15 assembler for IchigoJam / IchigoLatte</h1>
<h3>SRC</h3>
<div>
<select name="selex" id="selex" onchange="example();">
<option value="">Select Example</option>
<option value="LOOP">LOOP</option>
<option value="PEEKPOKE">PEEK POKE</option>
<option value="BYTE_WORD_LONG">BYTE WORD LONG</option>
<option value="LED">LED</option>
<option value="CALL">CALL</option>
<option value="RET">RET</option>
<option value="BIGSCREEN">BIGSCREEN</option>
<option value="CALC32">CALC32</option>
<option value="LDM">LDM</option>
<option value="STM">STM</option>
</select>
</div>
<div>
<textarea id="textarea1" style="width:80%;height:30em;word-break: break-all;">
</textarea>
</div>
<input id="submit-button" value="assemble" type="button" onclick="run_assemble();">
<script>
window.onload = function() {
var hash = document.location.hash;
if (hash.length > 1) {
hash = hash.substring(1);
document.getElementById("selex").value = hash;
example();
}
run_assemble();
};
</script>
<h3>BIN</h3>
<select name="selfmt" id="selfmt" onchange="run_assemble();">
<option value="bas10">bas (dec)</option>
<option value="bas2">bas (bin)</option>
<option value="bas16">bas (hex)</option>
<option value="basar2">bas (array bin)</option>
<option value="basar16">bas (array hex)</option>
<option value="basarmin">bas (array dec+hex)</option>
<option value="bin">binary</option>
<option value="latte">for IchigoLatte</option>
<option value="c">for C language</option>
<option value="hex">hex file</option>
<option value="mot">mot file</option>
<option value="uf2">uf2 file</option>
</select>
start address <input name="txtadr" id="txtadr" value="0x700">
<label for="uselineno"><input type="checkbox" name="uselineno" id="uselineno" checked> line no.</label>
start <input name="linenostart" id="linenostart" value="10" size="6">
delta <input name="linenodelta" id="linenodelta" value="10" size="6">
size <span id="binsize">-</span>
<a href="#" id="downloadlink">download</a>
<div>
<textarea id="textarea2" style="width:80%;height:15em;word-break: break-all;"></textarea>
</div>
<h3>疑似命令</h3>
<div>
<dl>
<dt>@文字列</dt>
<dd>ラベルを設定する。ラベルはGOTOの飛び先などに使用可能である。</dd>
<dt>'文字列 / REM 文字列</dt>
<dd>コメントを入れる。' を用いたコメントは他の命令がある行につけることもできる。</dd>
<dt>DATA[B|W|L] データ(列)</dt>
<dd>4バイト単位にアライメントした後、指定したデータを出力する。データ列はコンマで区切る。
DATA/DATABは1バイトずつ、DATAWは2バイトずつ、DATALは4バイトずつである。<br>
データは整数または文字列 ("" で囲む) で指定する。文字列は UTF-8 の各バイトに展開される。</dd>
<dt>UDATA[B|W|L] データ(列)</dt>
<dd>DATAと同様に指定したデータを出力するが、アライメントは行わない。</dd>
<dt>(I|D)ADDR(W|L) @文字列</dt>
<dd>指定したラベルのアドレスをデータとして出力する。アライメントは行わない。
Iは命令用(命令セットがM0の時、LSBを1にする)、Dはデータ用。Wは2バイト、Lは4バイト。</dd>
<dt>CHECKSUM 対象開始アドレス, 対象バイト数, 種類[, デフォルト値]</dt>
<dd>対象範囲のチェックサムを求め、出力する。アライメントは行わない。「デフォルト値」が指定されている場合、値が未定義のバイトの値として用いる。<br>
種類は「LSUM2COMP」(4バイトずつ足した和の2の補数)・「CRC32」(CRC-32)・「CRC32MPEG2」(CRC32_MPEG2) のいずれかを指定する。</dd>
<dt>CHECKSUMR 対象開始位置, 対象バイト数, 種類[, デフォルト値]</dt>
<dd>CHECKSUM と同様にチェックサムを出力する。対象範囲の開始位置を start address との差分で設定する。</dd>
<dt>MODE (M0|RV32C)</dt>
<dd>命令セットを切り替える。デフォルトはM0である。</dd>
<dt>IF M0 GOTO @文字列</dt>
<dd>命令セットがM0の時はジャンプし、RV32Cのときは素通りする命令を出力する。
副作用として、命令セットがM0のときはフラグレジスタの値が、RV32CのときはR31レジスタの値が破壊される。<br>
(参考:<a href="https://qiita.com/mikecat_mixc/items/5c14111e8f144d16b4fa">これまでの(LPC1114を用いた) IchigoJam と IchigoJam R 両対応のマシン語 - Qiita</a>)</dd>
<dt>ORG 値</dt>
<dd>出力位置(アドレス)を設定する。</dd>
<dt>ORGR 値</dt>
<dd>出力位置(アドレス)をstart addressとの差分で設定する。</dd>
<dt>ALIGN 割る値[, 余り[, 埋める値]]</dt>
<dd>出力位置(アドレス)を進め、「割る値」で割った余りが「余り」になるように調整する。
「余り」を省略した場合は余りが0になるようにする。
「埋める値」を指定した場合、出力位置が条件を満たすまでその値(2バイト)で埋める。</dd>
<dt>ALIGNR 割る値[, 余り[, 埋める値]]</dt>
<dd>出力位置の代わりに「出力位置(アドレス)とstart addressの差分」をALIGNと同様に調整する。</dd>
<dt>SPACE 増分[, 埋める値]</dt>
<dd>出力位置(アドレス)を指定した「増分」バイト進める。
「埋める値」を指定した場合、出力位置が条件を満たすまでその値(2バイト)で埋める。</dd>
<dt>UF2FAMILY 値</dt>
<dd>uf2 形式での出力時、以降のデータを family ID を指定の値に設定したブロックに出力する。</dd>
<dt>UF2FAMILY NONE</dt>
<dd>uf2 形式での出力時、以降のデータを family ID を設定していないブロックに出力する。</dd>
<dt>UF2BLOCK ブロックサイズ[, セクタサイズ], 埋める値</dt>
<dd>uf2 形式での出力時、以降のデータを指定サイズのブロック単位で出力する。値が未定義のバイトは「埋める値」を出力する。<br>
セクタサイズを指定した場合、各セクタのデータが揃うよう、必要に応じて空ブロックを出力する。<br>
ブロックサイズ・セクタサイズともにバイト数で指定する。セクタサイズはブロックサイズの整数倍でなければならない。</dd>
<dt>UF2BLOCK NONE</dt>
<dd>uf2 形式での出力時、以降のデータをバイト単位で出力する。</dd>
</dl>
</div>
<h3>IchigoJam Armマシン語解説ページ</h3>
<div>
<ul>
<li>参考<br>
<a href="armasm.html">Cortex-M0 ARMマシン語表(抜粋)</a><br>
<a href="rvasm.html">RV32C RISC-Vマシン語表 (asm15r、抜粋)</a><br>
<a href="cpuemu.html">IchigoJam マシン語エミュレーター on web</a>(2進数表記をコピペで一部対応、<a href="https://fukuno.jig.jp/1328">説明</a>)<br>
<a href="disasm15.html">asm15対応逆アセンブラ</a>
</li>
<li>連載、IchigoJamではじめる、ARMマシン語入門<br>
<a href=https://fukuno.jig.jp/1184>1. はじめてのマシン語</a><br>
<a href=https://fukuno.jig.jp/1186>2. ハンドアセンブルで超速計算!</a><br>
<a href=https://fukuno.jig.jp/1188>3. マシン語メモリアクセスで画面超速表示!</a><br>
<a href=https://fukuno.jig.jp/1476>4. マシン語でLEDを光らせよう!</a><br>
<a href=https://fukuno.jig.jp/1479>5. 楽しさ広がるマルチバイトメモリアクセスとスタック</a><br>
<a href=https://fukuno.jig.jp/1484>6. マシン語使いこなしTIPS</a><br>
<a href=https://fukuno.jig.jp/1485>7. カジュアルに使うインラインマシン語</a><br>
<a href=https://fukuno.jig.jp/1757>8. アセンブラを使って楽しよう</a><br>
<a href=https://fukuno.jig.jp/1849>9. マシン語で高速SPI</a><br>
<a href=https://fukuno.jig.jp/1872>10. マシン語を制するもの時間を制す</a><br>
<a href=https://fukuno.jig.jp/1889>11. 画面をイチゴで埋め尽くす12の方法</a><br>
<a href=https://fukuno.jig.jp/2035>12. レジスタ不足に上位レジスタとスタック操作</a><br>
<a href=https://fukuno.jig.jp/2493>13. コンパイラはじめのいっぽ、EVAL実現法とマシン語生成</a><br>
<a href=https://fukuno.jig.jp/2494>14. サイズを取るかスピードを取るか、割り算のアルゴリズムとマシン語実装</a><br>
<a href=https://fukuno.jig.jp/2495>15. マシン語化で1万倍速!? セットで学ぶアルゴリズムとコンピューター</a><br>
<a href=https://fukuno.jig.jp/2942>16. フラグ活用テクニック、オールマシン語74byteで作る「かわくだりゲーム」</a><br>
</li>
<li>応用例<br>
<a href="https://fukuno.jig.jp/1748">マシン語で赤外線リモコン機能を追加してレゴのロボットを制御</a><br>
<a href="https://fukuno.jig.jp/1871">最大512chの照明コントロール!照明界の標準DMX512 x IchigoJam</a><br>
<a href="https://fukuno.jig.jp/2018">FFF?40F?16進数3桁で色を決めよう、WS2812BのIchigoJam用マシン語ドライバで電光掲示!</a><br>
<a href="https://fukuno.jig.jp/2022">IchigoJamの画面からダイレクトであやつる、256色カラー32x8電光掲示板!Armマシン語ジグザグドライバ for WS2812B</a><br>
<a href="https://fukuno.jig.jp/2498">オールマシン語かわくだり - API対応 IchigoJam 1.3.2β12</a><br>
</li>
</ul>
</div>
Base App: by <a href=http://d.hatena.ne.jp/boxheadroom/20160306>BoxHeadRoom</a> / <a href=http://tagiyasoft.blog.jp/archives/6538415.html>tagiyasoft</a> / <a href=https://fukuno.jig.jp/>fukuno.jig.jp</a><br>
Src on <a href="https://github.com/mikecat/asm15">GitHub</a><br>
Original Src on <a href=https://github.com/IchigoJam/asm15/>GitHub@IchigoJam</a><br>
License: <a href="https://creativecommons.org/publicdomain/zero/1.0/deed.ja">CC0 パブリックドメイン</a><br>
</body></html>