フォト
2023年1月
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        
無料ブログはココログ

本 : My Favorite!

  • 磯田道史: 武士の家計簿

コンピュータ

2017年8月16日 (水)

"Turbo HAMLOG"のデータを i Phone で活用する!

FBなこと、この上ない "Turbo HAMLOG" ですが、もちろん
私も愛用させて頂いています。

"Turbo HAMLOG" の便利な点を強いて3つ挙げるとしたら、
私個人としては、

 1.ログ入力のし易さ - 秀逸なユーザインタフェース

 2.相手局情報の閲覧 - その1:ユーザーリストの充実

 3.相手局情報の閲覧 - その2:既登録ログの検索機能

かな、と思います。 2 は、相手局からも良く「HAMLOGヒット
しております」という言葉を聞きますね。 3 も「前回のQSOは
~~で、xxxMHzでしたね」などの会話が飛び交っています。

手元にWindowsパソコンさえあれば、これらの恩恵を最大限に
享受できるのですが、出先やクルマで、ちょこっとモービル半固
定とかハンディ機などで運用するときは、手元にスマホしかない
ということも多いですよね。 こんなとき、せめて 3 だけでも
スマホでできないかな ... と思うのは私だけ?

で、"Turbo HAMLOG" の既登録ログ情報のサマリーを i Phone
で活用できるるようにしちゃいました。

きっかけは、i Phone 上で表形式のデータベースを簡便に閲覧
できるアプリ "表メモ" を見つけたことです。 実はこれまでも、
"Turbo HAMLOG" の既登録ログ情報をcsv形式でエクスポート
し、"Office Mobile" の "Excel" を使ってみたりもしたのですが、
操作性・視認性が良くなくて ... 一方、"表メモ" の方は、
検索機能がなかったりとか、機能が非常に限られるのですが、
単純な分、操作し易く、表示の視認性もGood!

"表メモ" は i Phone で受信したメールに添付されたcsv形式の
ファイルをインポートできるので、後は "Turbo HAMLOG"の
既登録ログ情報「HAMLOG.hdb」の内容をかいつまんで集約し
csv形式で吐き出すソフトを作ればOKです。

Visual C# と格闘すること丸1日半で、自作の「Ex_HMLOG」が
やっと完成しました。 (各画像はクリックで拡大できます!)

C

抽出する項目は、欲張らずに、(1) コールサイン、(2) 名前、
(3) QTH、(4) 前回交信日、(5) 既交信回数、(6) 交信バンド、
(7) 初回交信日 に絞りました。 「Ex_HMLOG」の実行画面。

Photo_5

結果ファイルはこんな形式になっています。

Photo_4

Excel で開くとこんな感じ。

Excel

このファイルをメールに添付して i Phone に送り、"表メモ" に
取り込みます。 "表メモ" で表示するとこんな感じ。
(各項目の幅は取り込み後に調整してあります)

Img_4187s

横画面にすると全体が入ります。

Img_4189s

目的のコールサインを検索する機能はありません (多分) が、
自作の「Ex_HMLOG」で、コールサインをABC順にソートして
あるので、スクロールすれば探すことができます (実は文字を
入力して検索するより楽?) 。但し、行数が多いとスクロール
が大変なので、下記のようにデータベースを予め分割しておく
と、楽になります。

Img_4190s

最初から外で交信しそうなバンドでの相手局に絞っておけば、
そんな膨大な局数にはならないかな?

にほんブログ村 その他趣味ブログ アマチュア無線へ
にほんブログ村

2016年3月 4日 (金)

「40年前のマイコンを作って動かす」 第八話 : 動作確認3

SRAM (CY62256) のリード/ライト制御の回路はこのようにして
あります(クリックで拡大)。 図中で、添え字の"85"は i8085の
信号、"32"は 32bit マイコンの信号を表します。 逆スラッシュ
は負論理の信号です。

Dmas_2

32bit マイコンが i8085にHOLDをかけてDMA転送でSRAMに
書き込むときは、1段目ゲートが閉じ、i8085からのリード/ライ
ト信号は遮断されます。 DMA転送が終わり、HOLDが解除に
なると1段目ゲートが開きますが、このとき32bit マイコンは
リード/ライト信号を共に"H"にします。 すると i8085からの
リード/ライト信号が2段目ゲートを通過できるので、i8085から
SRAMの読み書きが可能になります。

前出のお手製ロジックアナライザを使い、HOLD信号の変化で
トリガをかけて、HOLD信号(の元の負論理信号)と 32bit マイ
コンからのライト信号をチェックしました。 タイミング任せで
すが、この"ロジアナ"の信号記録はトリガ信号の最大 2μs前
から始まるので、うまくいくとトリガ信号の直前の状態から見ら
れます。 結果です。

Bad_wr

これを見て、はたと気が付きました。
32bit マイコン側の I/Oピンで i8085のアドレスバス/データバス
にWired-ORで直結しているものは、DMA転送が終わり i8085
側が走るときには、競合しないように入力状態 (3-stateでは
ないので) にしなくてはなりません。 ところが、そうしなくても
良いSRAMへのリード/ライト信号まで入力状態で待機させて
いました。 プルUpもプルDownもしていないので、信号を受け
取るデバイスから見れば"H"と同じになっていました。
さらに、i8085にHOLDをかけた後でSRAMへのライト信号の
I/Oピンを出力モードに切り替え、待機状態の"L"にしていた
のです。 そのため、その"L"にするまでの間=上図中の点線
で囲んだタイミングでは、SRAMは"書き込み"状態になって
いたのです! ここで不要な書き込みが起こって、i8085側の
プログラムの一部を破壊してしまったようです。

原因が推測できたので、32bit マイコン側のプログラムを手直し
しました。

Photo_2

今度は、先にSRAMへのライト信号のI/Oピンを待機状態の"L"
にし、その後で i8085にHOLDをかけるようにしたので、ここで
SRAMに不要な書き込みは発生しません。 (HOLDがかかる
直前のタイミングでは i8085側が無用にSRAMにライト信号を
出さないようにしてあります)

Good_wr

実際にターミナルソフト側で1文字キー入力すると、ちゃんと
正しい文字が1文字だけエコーバックされるようになりました!

ということで、"Palo-Alto版Tiny BASIC" のプログラムに書き
換えて、いよいよ最終テストです。

Tinybasic

動きました! 感動の一瞬でした。

にほんブログ村 その他趣味ブログ アマチュア無線へ
にほんブログ村

2016年3月 2日 (水)

「40年前のマイコンを作って動かす」 第七話 : 動作確認2

簡単なプログラムを i8085側へ転送して走らせるテストが動き、
32bit マイコン⇒ i8085へDMA転送ができることが確認できた
ので、続いて i8251通信エミュレートです。

実は、メモリ転送の検討をしている段階で、実際の i8251内で
の処理をそっくりそのまま 32bit マイコンでエミュレートさせる
のは大変だということが判明! そこで、できるだけ簡単な
やり方で i8085⇔ 32bit マイコン間で 1 byteデータを受け渡し
させ、ターミナルソフトとの間のシリアル通信 (実際はUSB仮想
シリアル) は32bit マイコンに元々備わっている機能をそのまま
使うことにしました。

i8085のデータバスと 32bit マイコンの8本の I/OピンをWired-
ORで直結しただけで 1 byteデータを双方向に転送できれば
話は簡単なのですが、残念ながらそうはなっていません。
送信・受信を別々にすると I/Oピンが16本も必要になっちゃう。

そこで、i8085が受信する側は、プログラム転送のためのDMA
転送機能を使って 1 byteだけ送ることに。 i8085が送信する側
ですが、32bit マイコンの I/Oピンには受信時のラッチ機能が
ないので、i8085のデータバスとの間に8bitラッチを追加。
第三話の記事にあったこの写真で2段重ねになっている74LS
373がこれです。 2段重ねにしたのは、ひとえに8本のデータ
バスと接続するのにハンダ付けが劇的に減らせるからです。
受信・送信とも、確実な転送のためにハンドシェークします。
( i8085特有のRIM・SIM命令を活用しました)

Img_0977s

配線作業も終わり、いよいよシリアル通信のテストプログラム
を作ってテストです。 テストプログラムの冒頭ではプログラム
が起動したしるしに、i8085 ⇒ 32bit マイコン ⇒ ターミナルソ
フト へ文字列を送出。 そしてその後、キー入力待ち ⇒ 入力
があったらエコーバック というのを3回繰り返す、という内容
です。

ところがいきなり異常発生! キーボードから1文字入力した
だけで、大量の文字数がエコーバックされます。 テストプログ
ラムの内容をちょこちょこ変えて調べてみたのですが、どうも
プログラムの走り方が怪しい。 少し暴走気味の感じ。 SRAM
へ転送したプログラムが何かのタイミングで書き換わる/壊れ
るのか?

そこで、SRAMへのライト信号をワッチすることにしました。

使ったのはコチラ。 お手製の "ロジックアナライザ"。

Img_0999s2

市販のものと比べるにはみすぼらしいくらいの性能ですが、
2chの信号を 250ns = 4MHz の分解能で監視できます。 監視
のスタートは、2chとは別の信号でトリガすることができます。
(この"ロジックアナライザ"の詳細は機会を改めてご紹介した
いと思います)

さて、その結果は?

勿体付けて申し訳ないのですが、ここからは さらに次回です。
(はたして次回でTiny BASICは走るのか?)

にほんブログ村 その他趣味ブログ アマチュア無線へ
にほんブログ村

2016年2月26日 (金)

祝 30万アクセス! - お気に入りの写真セレクト

訪問してくださる皆様のおかげで、拙ブログは30万アクセスを
達成することができました。

いつもなら、節目ごとに各ジャンル毎の記事まとめリストを掲載
するのですが、前回25万アクセス達成が昨年8月で、まだ半年
ちょっとしかたっていない (20万⇒25万までは9ヶ月でした) の
で、少し趣向を変えてこの間の掲載記事の中から、お気に入り
の写真5枚をセレクトしてみました。
(各写真はクリックで拡大できます)

最初は「移動用タイヤ踏みタワーの製作」。 ⇒ 前編後編

Img_0874s_2

二番手は「名古屋出張の合間に行ってきました」から「JR東海
リニア鉄道館」。 ⇒ <その1><その2>

7s

三番手です。 「出張で富士山に逢ってきました!」

Fuji_s

四番手は新シリーズ「40年前のマイコンを作って動かす」。
 ⇒ 第一話  第二話  第三話  第四話  第五話  第六話

Img_0977s

そして最後はつい最近の作品ですが、「真壁のひなまつり」

Makabe1s

「Donn Tacosのブログ」 をこれからもよろしくお願い致し
ます!

にほんブログ村 その他趣味ブログ アマチュア無線へ
にほんブログ村

にほんブログ村 犬ブログ 柴犬へ
にほんブログ村

2016年2月14日 (日)

「40年前のマイコンを作って動かす」 第六話 : 動作確認1

製作した i8085基板で最初に動かしたテストプログラム。

Test1

CPUチップ直出しの 1bit I/O出力ピンをOn/Offできる、i8085
特有のSIM命令と、10個のMVI命令からなる14μsのウェイトを
組み合わせて、無限ループで約30kHzの矩形波を出力させる
プログラムです。 短いプログラムなので、命令表から機械語
コードを拾い読みしてハンドアセンブルしました。

もちろん、これを動かすためには、これだけでは済みません。
これを32bitマイコン側から i8085側のSRAMへ転送する32bit
マイコン側のプログラムも必要です。 前に書いたように、i8085
にHOLDをかけてアドレスバス・データバスを解放させ、各バス
を32bitマイコン側から制御してSRAMに書き込み (いわゆる
DMA:Direct Memory Access) を行います。 こちらはC言語で
組みます。 組み終わって、テスト開始です。

1bit I/O出力ピンからちゃんと矩形波が出ていること、ウェイト
の命令個数を変えると周波数が変わること、を以前に紹介した
"簡易型オシロスコープ"で確認しました。

Oscillo01

自作オシロには少し厳し目の周波数ですが、結果はOK (周波
数差がMVI命令の7 Clock cycleの整数倍になっている) で、購
入した i8085チップはとりあえず生きていると確認でき、一安心
です。

その後、Windows 10上で動かせる80/85用クロスアセンブラ
完成したので、長いテスト用プログラムも簡単に組めるように
なりました。

この段階までは、32bitマイコン側から i8085側のSRAMへ転送
した直後に再度32bitマイコン側から i8085側のSRAMの中身を
読み出し、正しく書き込みができたかどうかをチェックしていま
した。 その結果、問題はなく、メモリ転送作戦はOKで完了だ
と考えていました。

そこで次の i8251通信エミュレートのテストに進んだのですが、
そこで次なる試練が ...

長くなったので、ここから先は「動作確認2」で。

にほんブログ村 その他趣味ブログ アマチュア無線へ
にほんブログ村

2016年2月13日 (土)

「40年前のマイコンを作って動かす」 第五話 : 基板製作3

動作確認に入って製作中の基板がほぼ固まったところで、
備忘録として部品リストと掛かった金額をまとめておきます。

  (手持ちを使った、小型SW類、パスコン、プルアップ抵抗、
  配線材料、32bitマイコンボードは含めていません。32bit
  マイコンは雑誌の付録なので、実質\1,000程度です)

               金額¥
 1. LSI類
  ・ D8085AH-2 (CPU)          900
  ・ CY62256NLL-55SNXI (SRAM) 400
  ・ M5M82C55AFP-2 (PPI)      250

 2. TTL類
  ・ 74LS03  (NANDx4)          30
  ・ 74LS32  (ORx4)            30
  ・ 74LS138 (3in1 Decoder)    56
  ・ 74LS373 (8bit Latch) x2  180 (90x2)
  ・ 74HC00  (NANDx4)          60
  ・ 74HC02  (NORx4)           60

 3. 基板・コネクタ類
  ・ 基板                   1,090
  ・ 0.8 mm×44pinゲタ        375
  ・ 1.27mm×28pinゲタ        124
  ・ 40pin ICソケット         250
  ・ 20pin×2列ピンヘッダ x2  110 (55x2)

 4. 小物部品
  ・ 10MHz水晶振動子          170
  ・ 22pFコンデンサ x2        140 (70x2)
  ・ 100pFコンデンサ           40
   -------------------------------------
          合 計 ¥ 4,265

新品部品で組んで、なんと TK-80の価格のたった 1/20 しか
掛かっていません!

CPUとPPIとメモリで\1,500ちょっと。 一番高いのは基板!
1970年代終わり頃のスペックを今作るとこんな金額でできて
しまうのですね。 隔世の感があります。

にほんブログ村 その他趣味ブログ アマチュア無線へ
にほんブログ村

2016年2月11日 (木)

「40年前のマイコンを作って動かす」 第四話 : クロスアセンブラ自作

i8085基板ができ上がったので、本格的に動作テストに入りま
す。 このあたりになると、テストプログラムを用意するのに
いつまでもハンドアセンブルという訳にもいきません。 が、
前に書いたように、可能な限り "全て自作" にこだわるのが
モットーなので、定石の "CP/M+MASM" ではなく、Windows
上で動かせるクロスアセンブラを自前で作っちゃいました。

参考にしたのは、インテルが発行した "8080/8085 Assembly
Language Programming Manual" の "Chapter 3. INSTRUC-
TION SET"(各命令の詳細内容) だけ。 オペランドの式の評価
は全くの自己流です。 出力はアセンブルリストとインテルHEX
形式のオブジェクトコード、そして自作基板で32bitマイコン
のソースに相乗りさせるためのオブジェクトコードの3つです。

いつものように、Visual C# で作っていきます。 Visual C# は、
C や C++ よりもストリング(文字列)処理機能が超豪華なので、
アセンブラやコンパイラのような言語処理系を作るのは非常
に楽です。 例えば、文字列変数 str の中の "abc" という部分
を "XYZ" に置き換えるのは、

  str.Replace("abc", "XYZ")

のように書くだけで済んじゃいます。 これを使えば、マクロを
簡単に展開することができます。

今のところWebで入手した Palo Alto版Tiny BASICのソース
さえアセンブルできれば良いので、それに最小限必要な部分
だけ作り込みました。 なので、エラー処理も未実装です。
正しく作られたソースしか掛けられません。 オペランドに書
かれている "XYZ SHR 8" のシフト演算子も「右8bitシフト」
しか用意していません。

最後にアセンブルリストの例です。 Excelで開くのを前提にし
て作ったので、ラベル・シンボルの一覧はExcel側でABC順、
アドレス順など後でいかようにもソートできます。

Assembler_2

肝心のアセンブル結果ですが、インテルHEX形式ファイルも
Webにあったので照合してみたら、合っていたので ホッ!

にほんブログ村 その他趣味ブログ アマチュア無線へ
にほんブログ村

「40年前のマイコンを作って動かす」 第三話 : 基板製作2

i8085基板製作の後編。 大変だったのは、面付け部品のゲタ
へのハンダ付け。 足のピッチは CY62256 (SRAM)が1.27mm、
M5M82C55 (PPI) が0.8mm。 ゲタのパターン側に先にハンダ
を盛っておき、足をコテ先で押しながらハンダ付けすると、
盛ったハンダが溶けて崩れる感触が手に伝わるので、何とか
やっつけました。 ハンダ付け後にテスターで念入りに導通を
チェック。 修正は、68本中、足が浮いていた1本だけでした。

Img_0978s2

ユニバーサル基板なので、アドレスバス16本+データバス8本
の引き回しも結構大変でしたが、何とか配線作業が終わりま
した。 が、ここから試練が始まることになるのです ...

最初の試練は、 32bitシングルボード・マイコンでROMのエミュ
レートがちゃんどできるかどうかのテストのとき。

32bitマイコンは 1命令/1クロックのRISCチップなので、25ns
ごとに動くはず、というのは機械語・アセンブラの世界。
i8085のアドレスバスの内容を読み、フラッシュメモリの該当
番地の内容をデータバスに載せる、それを繰り返す、という
プログラムをC言語で書いてみたら (アセンブラまで使って
書く気はしないので)、なんと 2μs/サイクル以上かかることが
判明! 単純にREADY信号で i8085側を待たせれば良い、と
はいかず、これで進めるには、74LS245のようなバスバッファ
か74LS373のようなラッチを間に入れてバスが競合しないよう
にしてやらないとダメです。

あ~ぁ、めんどくさい! う~ん、他に手はないのか?

と唸っているうちに、ほぼ同じ配線のままでできる代替案を
思い付きました。

32KBあるSRAMの半分の16KBをROM領域に割り付け、起動
時に i8085用のプログラムを32bitマイコンのフラッシュメモリ
からそこへ一括転送し、転送が終わってから i8085にRESET
をかければ良いのです。 これなら、i8085にHOLDをかけて
いくらでも待たせておいて転送すれば良いので、楽そうです。
(最初からコチラの方式にすれば良かったのですが ...)

配線を手直しして、i8085基板が完成!

32bitマイコンを載せる前。 USBケーブルはVccの5V供給用。

Img_0968s

載せた後。 写真右側のCPUの下、74LS373が2段重ねになっ
ていますが、これについては次回以降で。

Img_0977s

なお、i8085に特有の時分割アドレスバス・データバス信号の
分離などは、オフィス・テツさんのホームページを参考にさせ
て頂きました。 ありがとうございました。

にほんブログ村 その他趣味ブログ アマチュア無線へ
にほんブログ村

2016年2月10日 (水)

「40年前のマイコンを作って動かす」 第二話 : 基板製作1

前回書いたように、最低限 Palo Alto 版 Tiny BASIC を動か
せる i8085 シングルボード・マイコンを作ります。

目標スペックは、

  CPU             i8085 AH-2 ( 5MHz )
  ROM            ≧ 4 KB ( 0000H ~ )
  RAM            ≧ 4 KB ( 8000H ~ )
  シリアルI/O   i8251 (USART) 相当
  パラレルI/O   i8255 (PPI) 相当

とし、部品集めに入りました。 SRAMは CY62256 をGetでき、
i8255は三菱製互換品でCMOSの M5M82C55 が手に入りま
したが、i8251が見つかりません。 またROMの方は、本来
27256あたりのEPROMにするところなのですが、自宅に消去
用の紫外線ランプもROMライタも持っていません。
EEPROMにしても良いのですが、書き込む元はどうする?

ということで、EPROMとi8251の代わりに、手元に余っていた
組み込み用の小さな 32bitシングルボード・マイコン (CQ出版
のインターフェース誌に昔付いてきた付録) を i8085基板上に
載せて、それらの機能をエミュレートしてやることにしました。

Img_0967s

プログラム用のフラッシュメモリ容量は512KBもあり、i8085用
のプログラムなら何本でも不揮発で保存しておけます。
i8085で走らせるプログラムのマシン語コードは、この32bitマイ
コン自身のプログラムの中に一緒に記載しておけば、PCから
USB経由で転送できるので、超便利です。 アドレスバス16bit
+データバス8bit+αに必要な30本のI/Oピンも確保できます。
シリアル通信機能も内蔵しており、USB仮想シリアル通信の
ポートも1chあるので、簡単にPC上のターミナルソフトとやり
取りできます。

で、作戦変更後の目標。

  CPU             i8085 AH-2 ( 5MHz )
  ROM             32 KB ( 0000H ~ ) : エミュレート
  RAM             32 KB ( 8000H ~ ) : CY27256
  シリアルI/O   i8251相当動作をエミュレート
  パラレルI/O   M5M82C55

これからハンダごてを暖めて、基板製作に取り掛かります。

にほんブログ村 その他趣味ブログ アマチュア無線へ
にほんブログ村

2016年2月 1日 (月)

新:自作シリーズ 「40年前のマイコンを作って動かす」 第一話

拙ブログには、完結していない書き掛けのシリーズが一杯
あるというのに ...

 ・ 簡易型オシロスコープを自作しちゃう!
 ・ EDSAC から 自作PC まで - 出会ったコンピュータ達
 ・ 無線機のサウンド強化

1月にオークションサイトでこんなものを買ってしまいました。

Img_3612s

インテルの 8 bit CPU、8085 です。 バージョンは AH-2 なの
で、スピードは 5MHz 。 刻印のように、今からちょうど40年前
の1976年に製造されたチップです。 先の EDSAC から 自作
PCまで - 出会ったコンピュータ達
の第一話のコメント欄で
書いたのですが、大学の時にこれを使っていたので、つい
懐かしくなって買ってしまいました。 2個1組で、なんと未使
用の新品でした。 写真の通り、セラミックパッケージです!

もちろん、今どきの組み込み用マイコンと違って、X'tal さえ
つなげば動作するというシングルチップものではありません。
( i8085なので、i8080よりは相当楽ですが )

なので、メモリや周辺回路も合わせて作ってやらないと動かせ
ません。 また、最近の Windows や Mac の PC に入っている
CPUと比べると、笑っちゃうくらい低い処理能力です。 でも
自作の楽しみとしては、真空管アンプに匹敵するのではない
でしょうか。

ということで、また新たな自作シリーズを立ち上げちゃいます。

システム構成の検討から部品のハンダ付けまで、可能な限り
"全て自作" にこだわります。 ソフト開発環境は、CP/M 上で
動かせるマクロアセンブラ ( MASM ) と、Windows上でCP/M
を動かすエミュレータを Web から入手してアセンブルするの
が一般的なようですが、Windows上で直接動かせるクロス
アセンブラだったら自分で作れるかな?

とりあえず、Palo Alto 版 Tiny BASIC を動かすこところまでを
目標とします。

にほんブログ村 その他趣味ブログ アマチュア無線へ
にほんブログ村