読者です 読者をやめる 読者になる 読者になる

KOYAMA Yoshiaki のブログ

プログラミングについての試行錯誤をつらつら書き溜めていきます。

[書籍][購入][感想][プログラム] GMC-4、Canon デジタルカメラ IXY DIGITAL 210 IS レッド

GMC-4
Vol.24 4ビットマイコン | 大人の科学マガジン | 大人の科学.net
http://otonanokagaku.net/magazine/vol24/

GMC-4

いろいろなブログで紹介されているので興味がわき、購入してしまいました。

学生時代、授業でワンボードマイコンの TK-80 を使用したことがあります。

GMC-4 の命令コード早見表を見ると、4ビットで動作させるため、いろいろ工夫されているのでしょうが、あまりにも特殊で驚いてしまいました。

Vol.24 4ビットマイコン | 大人の科学マガジン | 大人の科学.net
http://otonanokagaku.net/magazine/vol24/description.html

'Vol.24 4ビットマイコン | 大人の科学マガジン' の取扱説明書でマイコンの歴史を読んだ後、一通り、操作方法を学び、上の URL から FX−マイコン・全マニュアル[PDF:5.3MB]をダウンロード後、GMC-4 にサンプルを入力し理解を深めました。


どこで見つけたのか忘れてしまいましたが、下記URL

GMC-4 software
http://spreadsheets.google.com/ccc?key=0AqitP89E8bQTcnJjeURVdWxoRHRGdTFkWjExNzVfU2c&hl=ja

の '08潜水艦' で遊んでみました。貧弱な環境で、ここまで遊べるのには感服します。


FX−マイコン・全マニュアル[PDF:5.3MB]のサンプルをいくつか印刷し、理解した動作を書き留めておこうと思います。(間違っている可能性もあると思います。)


最初は CALL SIFT 命令を使ったビット状態の判別です。

注意が必要なのは CALL 命令は、実行フラグが 1の時にしか動作しません。

ここで肝になるのは、実行フラグが変化する命令以外は、実行フラグが 1 になることです。

これを利用して A レジスタの2ビット目が 0、1 か判断をするサンプルを作りました。(JUMP 命令が多いので最適化の余地があるかもしれません。)

番地: 命令コード                          命令記号
 00: 0                INPUT:           KA
 01: F  0  0                           JUMP  *INPUT
 04: E  6                              CALL SIFT        
 06: 2                                 CH        
 07: 2                                 CH   
 08: E  6                              CALL SIFT        
 0A: F  1  2                           JUMP  *EVEN        
 0D: 8  1                              TIA 1            
 0F: F  1  4                           JUMP  *PRINT            
 12: 8  0             EVEN:            TIA 0                                  
 14: E  9            PRINT:            CALL SHTS                                              
 16: 1                                 AO       
 17: F  0  0                           JUMP  *INPUT 

CH命令は Aレジスタと Bレジスタ、Yレジスタと Zレジスタの値を交換します。実行フラグは、変化しないので 1 になります。もう一度、CH 命令を実行することで、レジスタの値を戻し、実行フラグを 1 にします。結局、CH 命令を2度繰り返すことで、レジスタの値も変化せず、実行フラグを 1 にすることができます。


また、GMC-4には停止命令がないので、プログラムの最後に

番地: 命令コード                             命令記号
・
 XY: F  X  Y         LOOP:                JUMP  *LOOP

のように無限ループを作る必要があります。


一番理解しにくいのは CAL DEM+、CALL DEM- 命令だと思います。 FX−マイコン・全マニュアル[PDF:5.3MB]の

No. 71 CAL DEM+ と CALL ENDS の実験 P104
No. 72 CAL DEM- 命令を使った実験 P106

が理解の参考になると思います。


このプログラムで多用しているのは Yレジスタの値の引き算です。例えば Yレジスタを1引きたい場合は、16進数の $F を足しています。

Y - 1 = Y + $F
Y - 2 = Y + $E

のようになります。


CAL DEM+、CALL DEM- 命令で参照するデータメモリ M は 50番地に Yレジスタの値を足した値(メモリ番地)です。Yレジスタが 6、Aレジスタ 2 の時に CAL DEM+命令を実行すると

CALL DEM+ 命令前
54番地 55番地 56番地
0    5   8   
[50 + Y] + A = 8 + 2 = 10
CALL DEM+ 命令後
54番地 55番地 56番地
0    6   0 

となります。この場合、56番地 の 8 と Aレジスタの 2 を足すと桁上げが生じるので 55 番地の値に 1加わることになります。桁上がりは連鎖していくので注意してください。


同様に Yレジスタが 6、Aレジスタ 2 の時に CAL DEM- 命令を実行すると

CALL DEM- 命令前
54番地 55番地 56番地
0    5    1   
 [50 + Y] - A = 1 - 2 = 9
CALL DEM- 命令後
54番地 55番地 56番地
0    1    9

となり、桁下げが生じた場合 55 番地の値は、無条件に 1 にセットされるので注意してください。連鎖もおきません。CAL DEM+、CALL DEM- 命令は 10進数の加減算ですが、10進数以外の値( $A - $F ) を入力しても動作します。

学研 大人の科学マガジン Vol.24 4ビットマイコン GMC-4 @ wiki - トップページ
http://www15.atwiki.jp/gmc4/

上の Wiki のリンクで アセンブラコンパイラ、Windows 用ですが FXマイコンシミュレータ などが紹介されています。私も可能なら アセンブラなどは作ってみたいですね!


ブログに書くなら GMC-4 の写真が必要だと思ったのですが、随分前にデジカメを持っていましたが、現在、所有していません。あまりお金を使いたくなかったので、資金は2万円ぐらいで、サイトをいろいろ調べました。家電はあまり買わないし、ポイントもあまり使い道がないので、アマゾンから 'Canon デジタルカメラ IXY DIGITAL (イクシ) 210 IS レッド IXYD210IS(RE) '

を購入しました。あんまり、深く考えずに購入したのですが、最近のデジカメは2万円代でも、かなりのスペックを備えているんですね!時間は 29分59秒と短いのですが、ハイビジョン撮影にも対応しています。