|
ORANGE-4
プログラマーを目指すなら
機械語を学ぼう
コンピューターの仕組みを
理解しよう
ORANGE-4は4ビットマイコンボードで、
本体のみで機械語の学習ができます。
パソコンもキーボードもテレビも不要です。
4ビットマイコン(*1)はとてもシンプルで、
最初に機械語を学ぶのに最適です。
作成した機械語プログラムは
内蔵フラッシュメモリーに保存できます。
(電源を切っても消えません。)
*1 大人の科学マガジン Vol.24付録GMC-4と
機械語レベルで互換性があります。
組立キット 価格 2,700円(税抜き)
公式ショップで販売中
TK-80互換機 ZK-80登場
|
|
【他に必要なものは?】
電源をご用意ください。
micro USBケーブルとUSBチャージャーかモバイルバッテリーが必要です。
どちらもスマートフォン用のものがご利用できます。
|
マニュアル
「必ずわかるORANGE-4機械語プログラミング」
ダウンロード(2020/3/23版)
|
中学1年の1学期に2進数を教えるのは、
昭和46年から54年までの9年間だけだったそうです。
本書は2進数の仕組みから説明し、
コンピューターの構成、原理、機械語(アセンブラ)をやさしく解説します。
1.ORANGE-4の動作確認
電源を入れる
サンプルプログラムを動かす
2. 数の表現
10進数
2進数
ORANGE-4での2進数
16進数
3.ORANGE-4の仕組み
ORANGE-4の構成
メモリーの中を見る
メモリーの中を書き換える
特定番地からのデータ修正
データのクリア
4.機械語入門
機械語とは?
CPUの中
CPUはどう動くの?
5.アセンブリ言語入門
アセンブリ言語とは?
ハンドアセンブル
アセンブラとは?
アセンブラの文法
Lチカ
数字LEDに1~9を表示する
10秒タイマーを作る
|
ORANGE-4の命令セット
オペコード |
ニーモニック |
オペランド |
実行フラグ |
0 |
ink |
|
0, 1 |
1 |
outn |
|
1 |
2 |
abyz |
|
1 |
3 |
ay |
|
1 |
4 |
st |
|
1 |
5 |
ld |
|
1 |
6 |
add |
|
0, 1 |
7 |
sub |
|
0, 1 |
8 |
ldi |
x |
1 |
9 |
addi |
x |
0, 1 |
A |
ldyi |
x |
1 |
B |
addyi |
x |
0, 1 |
C |
cpi |
x |
0, 1 |
D |
cpyi |
x |
0, 1 |
E |
scall |
x |
0, 1 |
F |
jmpf |
xx |
1 |
F60 |
call |
xx |
1 |
F61 |
ret |
|
1 |
F62 |
pushA |
|
1 |
F63 |
popA |
|
1 |
F64 |
pushB |
|
1 |
F65 |
popB |
|
1 |
F66 |
pushY |
|
1 |
F67 |
popY |
|
1 |
F68 |
pushZ |
|
1 |
F69 |
popZ |
|
1 |
F70 |
ioctrl |
|
1 |
F71 |
out |
|
1 |
F72 |
in |
|
1 |
|
ORANGE-4のレジスター
レジスター |
サイズ |
アドレス |
A |
4ビット |
6f |
B |
4ビット |
6c |
Y |
4ビット |
6e |
Z |
4ビット |
6d |
A' |
4ビット |
69 |
B' |
4ビット |
67 |
Y' |
4ビット |
68 |
Z' |
4ビット |
66 |
PC |
8ビット |
|
SP |
8ビット |
|
ORANGE-4のメモリーマップ
アドレス |
内容 |
00-4f |
プログラム領域 |
50-5f |
データ領域 |
60-7f |
システム領域 |
80-ef |
プログラム領域/スタック領域 |
f0-ff |
スタック領域 |
操作説明
スイッチ操作 |
説明 |
[0]~[F] |
数字LEDが表示している値を変更します。 |
[INC] |
2進LEDが表示しているアドレスに数字LEDが表示している値を格納し、アドレス一つ進めます。 |
[X][X][ADR] |
2進LEDの表示しているアドレスをXXに設定します。 |
[RST] |
2進LEDの表示しているアドレスをを00に設定します。
プログラムが実行中のときはプログラムを中断します。 |
[1][RUN] |
プログラムを実行します。(2進LEDにアドレス表示なし、キー入力音なし) |
[2][RUN] |
プログラムを実行します。(2進LEDにアドレス表示あり、キー入力音なし) |
[5][RUN] |
プログラムをステップ実行します。(2進LEDにアドレス表示なし、キー入力音なし) |
[6][RUN] |
プログラムをステップ実行実行します。(2進LEDにアドレス表示あり、キー入力音あり) |
[A][RUN] |
メモリーに格納されたデータを音楽データとして自動実行します。 |
[B][RUN] |
シリアルプリンターに出力します。(9600bps)
数字LEDがDに変わった後に機能番号(0~1)を入力します。
[0]ダンプリスト
[1]逆アセンブルリスト |
[C][RUN] |
あらかじめ組み込んであるプログラムをロードします。
数字LEDがLに変わった後に数字を入力します。
[1] 15秒タイマー
[6] 証城寺の狸ばやし
[8]ナイトライダー |
[D][RUN] |
モニターを起動します。(115200bpsのシリアルコンソールを接続しておいてください。) |
[E][RUN] |
フラッシュRAMのデータをメモリーにロードします。
数字LEDがLに変わった後にページ番号(0~3)を入力します。 |
[F][RUN] |
メモリー内のデータをフラッシュRAMにセーブします。
数字LEDがSに変わった後にページ番号(0~3)を入力します。 |
|
*PC(GUI版クロスアセンブラ)からのプログラム転送は、テキストのコピーペーストを利用します。
GUI版クロスアセンブラのコンソールウィンドウ内のアセンブル結果をマウスで範囲選択し、CTRL-Cを押下します。
シリアルコンソール(Tera Teram)でマウス右クリックでコピーしたテキストはペーストできます。
|
【拡張機能】
パソコンとUSBシリアルケーブルを接続して、
シリアルコンソール(115200bps)からプログラムを転送(*)したり、
デバッグすることもできます。
接続方法はこちらをごらんください。
I/Oピンのピン番号は以下の通りです。
ピン番号 |
信号 |
1 |
3.3V |
2 |
RXD |
3 |
TXD |
4 |
GND |
5 |
5V |
6 |
PORT1 |
7 |
PORT2 |
8 |
PORT3 |
モニターの起動
パソコンと接続してから、[RST][D][RUN]を押下します。
モニターコマンド
パラメーターが必要な場合はコマンドとパラメーターの間に空白は入れません。
コマンド |
説明 |
q |
モニターを終了します。 |
0(ゼロ) |
プログラムカウンター、スタックポインターをリセットします。 |
x |
現在の状態を表示します。 |
d |
メモリー(00-7f)の内容を表示します。パラメーターにeを指定すると、メモリー(80-ff)の内容を表示します。
[例]
d
de |
e |
レジスターやメモリーに値を設定します。
(メモリーの設定)
nn:16進文字列
nnは開始アドレスで16進数2桁で指定する。
[例]e30:123abcde
(レジスタの設定)
XX:n
XXはレジスター指定
nは1桁の16進数
レジスター指定 |
レジスター |
ax |
A |
bx |
B |
yx |
Y |
zx |
Z |
a' |
A' |
b' |
B' |
y' |
Y' |
z' |
Z' |
[例]sax:0 |
r |
フラッシュメモリーの指定したページ番号のデータをメモリーに読み込みます。
ページ番号は0~3です。
[例]r2 |
w |
メモリーの内容をフラッシュメモリーの指定したページ番号に書き込みます。
ページ番号は0~3です。
[例]w2 |
l |
逆アセンブルリストを表示します。コマンドの後に16進数2桁を指定して開始アドレスを指定できます。 |
t |
1ステップ実行します。(call命令の呼出し先をトレースしたい場合に使用します。) |
s |
1ステップ実行します。(call命令の呼出し先をトレースしたくない場合に使用します。) |
g |
プログラムを実行します。 |
b |
ブレークポイントを設定します。ブレークポイントは16進数2桁で指定します。
[例]b1f |
m |
メモリー内のデータをミュージックデータとして自動演奏します。 |
|
GUI版クロスアセンブラ
Windows、Mac、Linuxで動作します。
ORANGE4.jarの実行にはJava8が必要です。
テキストファイル(UTF-8)をエディターウインドウに読み込んで、
Aボタンをクリックすると、コンソールウインドウにアセンブル結果が出力されます。
ダウンロード(Ver 1.02)
Ver 1.02 アセンブラエラーチェック強化、ニーモニック大文字許可
Ver 1.01 アセンブラ不具合修正
本ソフトに関するご質問等はFacebookでお願いします。
|
各種資料(更新中)
PORT1に接続したLEDの点滅
[ソース]
start:
ldyi 1 a1
ldi 1 81
out f71
ldi 5 85
scall c ec
ldi 0 80
out f71
ldi 5 85
scall c ec
jmpf start f00
[モニター入力用オブジェクト]
e00:a181f7185ec80f7185ecf00
|
2進LEDの連続表示(ナイトライダー風)
[ソース]
start:
ldyi 0 a0
incLoop:
call ledOnOff f601f
addyi 1 b1
cpyi 7 d7
jmpf incLoop f02
ldyi 6 a6
decLoop:
addyi f bf
call ledOnOff f601f
cpyi 1 d1
jmpf decLoop f10
jmpf start f00
ledOnOff:
scall 1 e1
ldi 0 80
scall c ec
scall 2 e2
ret f61
[モニター入力用オブジェクト]
e00:a0f601fb1d7f02a6bff601fd1f10f00e180ece2f61
|
|
部品表(組立て説明)
回路図
タクトスイッチのラベル(0-Fがグリーン)
タクトスイッチのラベル(0-Fがオレンジ)
最新ファーム(Ver 1.08)
Ver 1.08
out命令不具合修正
Ver 1.07
ロード/セーブ関連の不具合修正
Ver 1.06
逆アセンブルリストの形式変更
モニターコマンド追加(Sコマンド)
Ver 1.05
ioctrl、out、in命令追加
ダイナミック点灯改善
2進LEDのアドレス表示で0x7fを超えたときは
数字LEDのドットを点灯
Ver 1.04
push/pop系命令追加
Eコマンド変更
Sコマンド削除(Eコマンドに統合)
シリアルプリンターサポート
Ver 1.03
メモリーを拡張
スタックポインター追加
拡張命令追加(call、ret、push、pop)
モニターコマンド変更(Lコマンド、Dコマンド)
モニターコマンド追加(Sコマンド)
Ver 1.02
[RST]を押しながら電源ONでキークリック音を抑止
Ver 1.01
モニターコマンド追加(ブレークポイント設定)
コマンド入力でのBackspaceキーサポート
|