NetWalker、4ビットマイコン GMC-4 用クロスアセンブラ gmc4asm

上の写真のように NetWalker(PC-Z1-B) を購入してしまいました。他の2台は iPhone 用のケースを付けていますが、両方とも iPod touch です。黒が iPod touch (2nd generation)、茶色が iPod touch (late 2009) です。

まず iPod touch (late 2009) から、今まで、拙作 iYKRSS [ http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=321871985&mt=8 ] ( インジケーター機能を付けたバージョン 1.0.1も公開中です。無料ですので良かったらダウンロードしてください。) で RSS フィードを読んでいるときに、英和辞書として ‘ニンテンドーDSi‘ の ‘漢字そのまま DS楽引辞典‘ を利用していたのですが、iYKRSS を iPod touch (late 2009) で使用し、’ i英辞郎‘ を iPod touch 2nd で利用できるようになり、大変便利です。最近 ‘ニンテンドーDSi‘ でゲームもほとんどしないので、’ニンテンドーDSi‘は、利用しなくなってしまいました。

後、iPod touch (2nd generation) の Safari で Web ページのリンクを長押し、新規ページを開き、元のページに戻ると、Web ページを再読み込みしてしまいます。そのため Web ページの位置が Web ページを開いた位置に戻ってしまいます。iPod touch (Late 2009) ではメモリが増えた分、キャシュが残っているので、前の読んだ位置でそのまま表示されます。地味な機能ですが、拙作 2ch Script Version 0.3 [ http://kyoshiaki.sakura.ne.jp/osx/leopard.html#2ch03 ]で ‘Web 共有’ をよく利用するので助かります。

iPhoneiPod touchGmail Sync を利用することで Gmail プッシュ配信が可能になりました。詳細は下記 URL を参考にしてください。

Google Sync : Set Up Your iPhone or iPod Touch - モバイル ヘルプ
http://www.google.com/support/mobile/bin/answer.py?answer=138740&topic=14252
Google Sync on your mobile phone
http://www.google.com/mobile/products/sync.html#p=apple

NetWalker(PC-Z1-B) は、以前使用していた Zaurus SL-C3200 も古くなったので、代用に購入してみました。Zaurus SL-C3200 は主に外出した時に、拙作 2ch Script Version 0.3 で作成した 2ch データを閲覧するのに利用していました。Zaurus SL-C3200 ではブラウザが Opera 7.25 でしたが、NetWalker では OS が Ubuntu 9.04 でブラウザが Firefox 3.0.13 なので願ったり叶ったりです。

Ubuntu については Mac OS XVMware Fusion 上で利用したことがある程度であまり知識はありません。参考に

を購入してみました。

とりあえず、メニュー ‘追加と削除…’、’システム/システム管理/Synaptic パッケージ・マネージャ’ を利用して

jd     : JD 2ch browser
ttf-konatsu : TrueType Font originally for BeOS
emacs    :  Gnu Emacs is the extensible self-document text editor. 
midori     : Midori is a lightweight web browser based on WebKit. 

を追加しました。念のため

モバイルインターネットツールNetWalker)|Netwalker(PC-Z1) 再インストール用microSDカード作成手順について:シャープ
http://www.sharp.co.jp/support/mit/doc/recovery.html

を参考に、リカバリmicroSDカード作成しておきました。

インタプリタコンパイラなどのプログラム言語を作成する書籍はいろいろ所有しているのですが、興味があったので、上の2冊を購入してみました。

プログラミング言語を作る C言語‘ は、yacc、lex 、’ふつうのコンパイラをつくろう 言語処理系をつくりながら学ぶコンパイルと実行環境の仕組み’の方は JavaJavaCC を利用しています。’ふつうのコンパイラをつくろう 言語処理系をつくりながら学ぶコンパイルと実行環境の仕組み’は、まだ読んでいる途中です。

~ $ info flex
~ $ info bison

ターミナル上で info コマンドを使って flex、bison のドキュメントを一部分読みました。

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

試しに gmc-4 クロスアセンブラ gmc4asm を作成してみました。はじめて lex、yacc を使って作ったプログラムなので無駄も多いし、稚拙です。特に私の技術不足で shift/reduce コンフリクトを取り除くことができませんでした。

Mac OS X Snow Leopard (gmc4asm)

Ubuntu 9.04 (gmc4asm)

NetWalker (gmc4asm)

クロスアセンブラ gmc4asm はターミナル上で動作するコマンドラインツールです。そこで Mac OS X Snow LeopardUbuntu 9.04 x86NetWalker 上で動作するものを別々に作成してファイル gmc4asm.zip に保存しておきました。はてなダイアリーPLUSでファイルをアップロードできるようになったので利用してみました。

gmc4asm.zip 直

gmc4asm.zip
http://kyoshiaki.sakura.ne.jp/osx/Hatena/gmc4asm.zip

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

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秒と短いのですが、ハイビジョン撮影にも対応しています。