アセンブラ入門 機械語入門 学研 大人の科学 vol.24 GMC-4 TK-80

 
 
 

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
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 
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キーサポート

Home