Z80-MBCが売り切れになっているので、ユニバーサル基板で作ってみた。

Z80-MBCの部品セットがいつのまにか売り切れになっていた。
遊ぶ用と保守用で2台作ったが、2台目を注文した時点ではまだ在庫は各色合わせてまだ数台ほど残っていたはず。

とりあえず緑が1台目。
何かあった時の保守用として2台目として白の部品セットを買った。
白基板は妙に半田付けがしづらかったのはなぜだろう。
2台買ってもう十分だろうと思っていたのだが、そのうちに件のサイトを見ると部品セットも基板のみも売り切れになってしまっていた。

売り切れになったのを眺めているうちに、何故か、無いなら自分で作ればいいじゃないかという思いが生まれてきて、何故か、ユニバーサル基板を使って製作してみることにしてしまった。

そして、連休を費やして何とかつくりあげた。
とにかく配線が面倒だった。
左側にまだ余白があるのは、ここからポケコン用の82C55ボードをつなげるためのピンヘッダを付けるつもりでいたから。
しかし、Z80のバスがむき出しの状態にして実装するのは、誤って端子に触れて誤動作を起こす可能性があることと、それ以上に配線が面倒だからやめた。

主要なIC付近の配線と基板の裏面の様子。
 
片面基板でもよかったような気もするが、コネクタの部分って結構力がかかって銅箔が応力ではがれることもあるので、端子数が多いコネクタやピンヘッダ・ピンソケットを使う場合は両面基板を好んで使ったりする。
裏面は基本的に電源ラインのみにして、信号は表面でポリウレタン線を使って配線している。
結果、表面のポリウレタン線がものすごい状態になってしまった。

回路図は本家のサイトにあるので、そこから各PDFファイルを落として参考に配線を行った。そのほか必要となるファイルもここにあるので今更ながら書いておく。
前回作ったHEXファイルをATMEGA32Aに書き込んで、実際に動かしてみたところ、無事動いてくれた。
これもCP/Mを使えるようにEEPROMにディスクイメージを書き込んでいく。
USERボタンを押しながらリセットボタンを押し、メニューが表示されるまでUSERボタンは押しっぱなしにする。

ファイル転送でも行間の遅延設定ができたと思ったのだが、ちょっと見当たらなかったので、コピペの設定で行間遅延を100ミリ秒に設定。
ここを忘れるとHEXファイルを転送する際にバッファあふれでHOLT状態になってしまうので注意。

メニューで「3」を選んで「iDisk – S250317.hex」をコピペする。

転送が終わると今度はディスクイメージのHEXファイルを転送するように表示される。
「D0CPM_SEG0.hex」をコピペで転送する。

転送が終わると書き込みを実施するか聞かれるので「W」→「Y」を順に選ぶ。

EEPROMにデスクイメージが書き込まれて、次のイメージの入力待ちになるので続いて「D0CPM_SEG1.hex」「D0CPM_SEG2.hex」……「D1PAS_SEG3.hex」と順番に繰り返していく。

最後のHEXファイルを書き終えたらUSERボタンを押しながらリセットボタンを押し、メニューが表示されるまでUSERボタンは押しっぱなしにする。
メニューが出たら「4」でCP/Mを起動する。

CP/MからMBASICを起動して、OUT 0,1としてUSER LEDを点灯させたところ。

USER LEDやほかのLEDはやたらとまぶしいので、拡散キャップを付けてある。

1台目と2台目と自作の3台目

別に3台目までほしいと思わなかったのに、何故ユニバーサル基板で作ろうなんて思ってしまったのだろう。

カテゴリー: Z80-MBC, 電子工作 | コメントする

ダイドーブレンドのCM

ダイドーブレンドのCM
どうみてもアオイホノオアンノにしか見えないw

カテゴリー: ひとりごと | コメントする

Z80-MBCのファームウェアをなおしてみた

Z80-MBCでI/Oを使えるようにするため、ファームウェアの修正を行うことにした。
ソースを眺めてどう直すべきかは見当はついているが、まずはその前にArduino IDEの準備を行う。

Arduino IDEでATMEGA32Aを扱えるように準備する。
「ファイル」→「環境設定」で、「追加のボードマネージャのURL」に次のURLを指定。
https://mcudude.github.io/MightyCore/package_MCUdude_MightyCore_index.json

次に「ツール」→「ボード」→「ボードマネージャ」を選択。
ボードマネージャで「MigtyCore」を選んでインストールする。
ちなみに、下のボードマネージャの画面はインストール済みの場合。

インストールが済むと、ATMEGA32が使えるようになるのでATMEGA32を選択して他のパラメータも設定する。
 

設定が済んだら準備完了。
ファームウエアの修正を行う。
「S221116_R100218_Z80.ino」を読み込んで、修正して別名で保存する。
修正内容はI/Oの読み込みの際にATMEGA32Aのポートを出力に設定してデータを出力するところ。
元のプログラムではI/O処理の後に無条件で出力に設定してデータを出力しているので、これをI/Oアドレスが0x0f以下のときのみ出力するように修正。
切りのいいところで0x10からは自由にI/Oが使えるようにした。
修正前

        DDRA = 0xFF;                               // Configure Z80 data bus D0-D7 (PA0-PA7) as output
        PORTA = ioData;                            // Current output on data bus

修正後

        if (ioAddress <= 0x0f)
        {
          DDRA = 0xFF;                               // Configure Z80 data bus D0-D7 (PA0-PA7) as output
          PORTA = ioData;                            // Current output on data bus
        }

修正が終わったらコンパイルしてATMEGA32Aに書き込みをおこなう。
「スケッチ」→「コンパイルしたバイナリを出力」でコンパイルする。

コンパイルが済んだら2つのHEXファイルが作られるので、とりあえず「with_bootloader」と付いたほうのHEXファイルをライターで書き込む。
念のため新品のATMEGA32Aに新しいファームウェア書き込んで、ダメだったら元のATMEGA32Aに取り換えれば済むようにした。
新品なので、ヒューズの設定を忘れないように。
ネットでいろいろ調べて以下のようにした。
HIGH = 0xD6
LOW = 0xE4
LOCKBIT = 0xCF

ATMEGA32Aに書き込んだ後、早速ボードに取り付けて起動してみる。

変更したファームウェアであることがわかるように、修正の際にバージョン情報のところにFJTとつけてみた。
正しく起動できているようなので、早速82C55ボードをつないでMBASICでプログラムを実行してみる。

正しくI/Oデータの読み取りができるようになった。
スイッチで値を変更したらそれに合わせて表示される値も変更されることを確認。
MCP23017のI/Oも試して正しく動くことを確認して、ほかに影響が出ていないことも確認。

これでI/Oを拡張して遊ぶことも可能になった。
さて、どうやって遊ぼうかな。

カテゴリー: Arduino, Z80-MBC, 電子工作 | コメントする

Z80-MBCのI/Oで遊んでみた(MCP23017と82C55)

Z80-MBCのI/Oで遊んでみる前に、I/Oマップを確認して空きアドレスを確認する。
ソースファイル(S221116_R100218_Z80.ino)を眺めてATMEGA32A上にあるI/Oマップを書き起こしてみた。

IOadd WRITE READ
0x00 USER LED USER KEY
0x01 SERIAL TX SERIAL RX
0x02 READ BOOT PHASE 2 PAYLOAD
0x03 GPIOA write GPIOA read
0x04 GPIOB write GPIOB read
0x05 IODIRA write ERRDISK
0x06 IODIRB write READSECT
0x07 GPPUA write SYSFLAGS
0x08 GPPUB write DATETIME
0x09 SELDISK
0x0a SELTRACK
0x0b SELSECT
0x0c WRITESECT

0x0cまで使われているので、それ以降のI/Oは自由に使えそうだ。

まずはMCP23017で遊んでみる。

Aポートは入力で、Bポートは出力として、CP/MのMBASICでプログラムを組んでみる。
ついでに日時の表示も行ってみた。

 
10 PRINT "I/O test"
20 SECONDS = INP(7)
30 SECONDS = INP(8)
40 MINUTES = INP(8)
50 HOURS = INP(8)
60 DAY = INP(8)
70 MONTH = INP(8)
80 YEAR = INP(8)
90 PRINT "THE TIME IS: ";HOURS;":";MINUTES;":";SECONDS
100 PRINT "THE DATE IS: ";DAY;"/";MONTH;"/";YEAR
110 PRINT
120 PRINT "Port A is input"
130 PRINT "Port B is output"
140 PRINT "Poat A => B"
150 PRINT "Port A = 0xFF is end"
160 OUT 5,255
170 OUT 6,0
180 OUT 7,0
190 OUT 8,0
200 PA = INP(3)
210 OUT 4,PA
220 IF PA=255 THEN END
230 GOTO 200

次はポケコン用に作った82C55ボードをつないでみる。
まずは、Z80から直で出ている信号からI/Oに必要な信号を82C55ボードをつなぐための拡張ボードを作成。

リセット信号がZ80ではLでリセットされるのに対し、ポケコンではリセット時にはHが出力されるので、トランジスタを使って信号を反転させてある。

拡張ボードを実装してみたところ。

早速82C55ボードを接続してテストしてみる。
ポートA,Bは出力に、ポートCは入力に設定。
あとはポートA,Bにデータを出力しながら、ポートCの値を読み取って表示するプログラムを組んでみる。

 
10 out &h23,&h89
20 for y=0 to 255
30  out &h21,y
40  for x=0 to 255
50   out &h20,x
60   a=inp(&h22)
70   print a
80  next
90 next


出力については問題ないが、I/Oの読み取りはできないようだ。
ソースファイル(S221116_R100218_Z80.ino)を読んでみると、I/Oの読み取りに関しては、ATMEGA32Aで使用しているI/Oアドレス外を指定した場合ATMEGA32Aから0が出力されるようになっている。


ソースファイルからどう直せばいいかある程度の見当はついているけど、果たしてうまくいくだろうか。
ATMEGA32をArduinoの環境で使うには、若干準備が必要らしいのでまずはその準備をしなければ。

カテゴリー: Z80-MBC, 電子工作 | コメントする

Z80-MBCを作ってみた

先日書いたZ80-MBCの部品セットについて。
セットについているATMEGA32にはすでにファームが書き込み済みで、最大の難問である書き込みは行わずICソケットにZ80やらICを差し込んでしまえばすぐに動作してくれる。(CP/Mはまた別に書き込む必要がある)

ユニバーサルエリアには IOエキスパンダのMCP23017RTCのDS1307+を搭載

特にRTCについてSOPタイプのDS1307ZN+T&RTRにしなかったのは、全体のデザイン的にDIPタイプの物を使ったほうが統一感があったし配線が楽だから。


裏面の様子。

すでにCP/MやMBASICで少し遊んでみたけど、それはまた後日。
ポケコン用に作った82C55ボードが繋がらないか思案中。

カテゴリー: Z80-MBC, 電子工作 | コメントする

ORANGE picoを作ってみた

何気に面白そうだったので、ORANGE picoType Dを作ってみた。

JP6,7と8,9はスライドスイッチに置き換えて切り替えやすくした。
特に、JP6,7はシリアルポートとUSBをつかさどるサブCPUとの切り離しを楽に行えるようにした。
ORANGE picoのほかにIchigoJamも作ってみたけど、Ichigo Jamは正直使い勝手が微妙。グラフィックを扱うにもPanCakeが必要でディスプレイを切り替えながらか2台準備して両方表示させるかしないとならない。
変数も整数しか扱えないし、子供向けなのはわかるけど、逆に取っつきにくくてほとんど放置状態。
ORANGE picoはその辺整数だけでなく実数も使えるようだし、グラフィックも普通に使えるので、そこそこ楽しめそうだ。
ただ、遊んでみて気づいたことだが、PS/2接続のキーボードではカナ入力できるのに、USB接続のキーボードの場合カナ入力ができなかったり、ディスプレイ(テレビ)出力では正しく動く表示できるものが表示先をLCDにした場合に正しく表示できない場合があったり、スクリーンエディタが思った通りに編集できなかったりと難点がないわけでもない。

ついでにプリンタも買ってつないでみた。
プリンタをつなぐ場合、プリンタに付属しているケーブルの色に惑わされてはいけない。
付属の取説は見事にケーブルの色に惑わされていて間違った内容になっているので注意。
プリンタ本体に刻印されている信号が正解で、正しく接続すればプリンタ用電源とORANGE picoのGNDを接続する配線も必要なくなる。
写真だとわかりにくいので、文字を書き足しておいた。

下が印刷した結果。

ナダ電子製AS-289R2プリンタシールドではないので、lptコマンドでは汎用プリンター(101または102)を選択する必要があるが、取説ではlpt 1となっている。
まあどっちでも使えるっぽいけど、プリンタ側とグラフィックを扱う命令が異なるっぽいので注意が必要かも。
また、一度lpt 1を実行した後にlpt 101と打たないと汎用プリンタが使えないのでこちらも注意。
で、文字コードについてデフォルトの状態(写真左)だとカナ文字が印字できないのだが、ダメ元でESC/POSコマンドで文字コードを選択してみたらカナ文字が印刷できるようになった(写真右)。

他にもZ80-MBCの部品セットも買って作ったので、いろいろいじってみる予定。

カテゴリー: 電子工作 | コメントする

オーディオ環境をでっちあげてみた

ラズパイマガジン 2018年4月号の付録を作ってみて、以前作ったアンプや買うだけ買って作ってなかったイコライザなとを組み合わせてみた。
とりあえず全景。

今回は、100円ショップで売っていたアクリル製品を利用している。

普段はアクリルの残材などを使って作っているスタンドですが、ちょうどいい大きさの物があったので、今回はそれを買って利用。
他にもアクリル板をコの字に加工したものがあって、サイズがちょうどだったので2つ使って棚状に組み合わせて使っている。そのまま重ねてもずれたりするので、ここは残材のアクリル板を接着して固定している。

上段の様子。

上からラズパイマガジン 2018年4月号の付録。
次におとなの科学で売られていた真空管アンプ
そしてベビー・アンプ [ PS-3238 ]TELキット 5分割グラフィックイコライザ
その下に電源(12V)と音源の分配ユニット。
スピーカーは以前作った物を塗装した。

中段の様子。

以前作ったローノイズパワーアンプ [AKIT-326]と新たに作ったスピーカー
枠に吊るされるように取り付けてあるのがオーディオ スペクトラムインジケータ
作るだけ作って使ってないものも置いてあるけど。

スペアナ用に単独で電源を用意すれば特に問題ないけど、ACアダプタをこれ以上増やしたくないため分配ユニットから電源を取るとようにしたのだが、そうするとノイズが回ってくるので、間にOPアンプを使ってバッファを設けようと考えた。

そしたらちょうど秋月のNJM4580DD使用ヘッドホンアンプキットというのが目的にぴったりだったので、これを使うことにした。
電源は3端子レギュレータキット 5V DCジャック版(DCJ版)で5Vに降圧している。

背面の様子。

分配ユニットで配線を減らそうとしたけど、やっぱりごちゃごちゃしてしまう。

概要は下の図の通り。

電源は一括でON/OFFできるようにつくってある。
図にはないけど、ユニット前面のジャックに別の音源を差すとそちらが優先されるようになっている。

今回、このオーディオラックを作ってみて、久々にいろんな曲を聴いてみた。
やっぱスペアナついていると、曲を聴いていて面白いよね。
この手のキットって、ほかの面白そうなキットも含めて最近は輸入物ばかりなんだけど、日本のメーカーも数が限られているからなぁ・・・

カテゴリー: RaspberryPi, 電子工作 | コメントする

VPNサーバの自力での構築はあきらめた

何年も前からVPNサーバの構築に挑んでいたが、結局あきらめた。

もともとは仕事の関係でスマホでL2TP/IPsecを使ってVPNのサービスできないものかと検討を始めたことがきっかけで、そのとき自分の家とVPNをつなげたら外出先で自宅のPCいじれるんじゃねってことで、ネットでググりながら構築を始めたのが最初。

どうやらPPTPよりもL2TPの方が制限事項もなくIPsecと組み合わせてセキュアにつなぐことができるらしいとのことだが、そのころはPPTPが使えるブロードバンドルーターはあっても、L2TPに対応しているルーターは皆無だったので、自分で構築するしかなかった。

旧ひとりごとでも何度か書いたような気がするけど、最初はPCでLinuxを動かしてOpenswan等を使って構築。
しかし最初の数分は通信ができるけど、それを過ぎると途端に通信できなくなる。
いろいろ試してみたけどダメだった。

その後引っ越しして、さらに時間が経った頃にRaspberry Piが発売された。
今度はRaspberry Piで同じように構築してみようと思い実行してみたが、やはり通信できるのは初めのうちだけで、そのうちに疎通が途切れる状態。

PC+LinuxでやってもRaspberry Piでやっても全然だめで、どうしたものかと思いながら、amazonでL2TP/IPsecに対応したルーターがないものかと検索したところ、値段的に高いものの対応しているルーターがいくつか見つかった。
数年間やってもうまくいかず、今後も見通しが立たないのであれは2万円ぐらいまで出してもいいかなと思ってたところ、手ごろな値段のルーターを見つけることができた。
PLANEX 10/100Mbps 有線タイプ VPNルータ VPN-41FE IPSec・L2TP・PPTP対応
結局このルーターを購入してVPNを使えるようにした。

VPNサーバを構築・試験するために作ったラック。
100円ショップで買ったパーツを組み合わせて試験ラックを作った。
Raspberry Piが3台あり、元VPNサーバ用、VPN接続確認兼WardPress練習兼プラグイン検証用のWebサーバ、試験用LANと室内LANをつなぐための踏み台サーバ。
さらにLATEPANDAがWindows版の踏み台サーバとしてつながっている。
VPNは試験用LANにつながって、直接室内LANには入れないようにしてある。

結局VPNは製品を使ってしまったので、これらの機器については今後どうしようか悩みどころだ。

カテゴリー: ひとりごと | コメントする

ラズパイマガジン 2018年4月号の付録をいじってみた

ラズパイマガジン 2018年4月号の付録について、筆者のページにて4月4日版の最新ソフトが公開されていたので、導入してみた。
リモコンから、再起動、シャットダウンの機能が追加されていた。
しかし、自分としてはIPアドレスの表示の機能がほしかったので、自力で追加してみた。

システムメニューの空きスペースに無理やりIPアドレスの表示を突っ込んでみた。
eth0はつながっていないので赤で000.000.000.000の表示をしている。

ソフトウエアの変更点だけをdiffで取ってみた。
もう少しうまくできると思うんだけど、Pythonをはじめから勉強する必要ありそうだな。

 
root@superdac:/usr/local/bin# diff superdac.py superdac.py.orig
350,357d349
<                               os.system('ip a show dev eth0 | grep "inet " | sed -e \'s/^ *inet //\' | cut -f1 -d "/" > /usr/local/bin/ip-eth0.txt')
<                               fe=open('/usr/local/bin/ip-eth0.txt')
<                               ipeth=fe.read()
<                               fe.close
<                               os.system('ip a show dev wlan0 | grep "inet " | sed -e \'s/^ *inet //\' | cut -f1 -d "/" > /usr/local/bin/ip-wlan0.txt')
<                               fw=open('/usr/local/bin/ip-wlan0.txt')
<                               ipwlan=fw.read()
<                               fw.close
366,378d357
<                               draw.text((0,58) , 'IPアドレス'      , font=jpfont, fill='#FFCC00')
<                               draw.text((0,72) , 'eth0'            , font=jpfont, fill='#88FFFF')
<                               if ipeth == '':
<                                       draw.text((0,86) , '000.000.000.000' , font=jpfont, fill='#FF0000')
<                               else:
<                                       draw.text((0,86) , ipeth             , font=jpfont, fill='#44FF88')
<
<                               draw.text((0,104), 'wlan0'           , font=jpfont, fill='#88FFFF')
<                               if ipwlan == '':
<                                       draw.text((0,118) , '000.000.000.000' , font=jpfont, fill='#FF0000')
<                               else:
<                                       draw.text((0,118), ipwlan            , font=jpfont, fill='#44FF88')
<
root@superdac:/usr/local/bin#

 

カテゴリー: RaspberryPi | コメントする

スマホ用Bluetoothリモートシャッター

ネットをウオッチしていたところ、ダイソーでBluetoothを使ってスマホのカメラのシャッターが操作できる商品があるとあった。
早速自分でも手に入れて確認してみる。

使い勝手は、まあ悪くない。
三脚を使って写真を撮ろうとすると、ズーム操作やシャッターが押しにくいと感じることがある。
ダイソーでスマホ用Bluetoothリモートシャッターを発見→分解→ちょい改造:ウェブ情報実験室で改造記事を読むと、ボリューム調整ができるように改造しています。
しかし記事のままの改造では、手持ちのスマホの場合、ボリュームの調整はそのままズームの調整だけでシャッターを切ることはできません。
そこで、ボリューム調整(ズーム調整)とシャッターが使えるようにタクトスイッチ3つ使ったものにしてみた。

新規で買ったのはタカチ電機のコイン電池が入れられるCS75Nと専用の基板ぐらい。
後は手持ちのタクトスイッチとスライドスイッチを使用。

実際組んでみたところ。
ポリイミドテープで絶縁して両面テープで固定。
面倒なのはICから直接配線するところぐらいで、あとか既存のスイッチのパターンやチェック用のパターンを利用して配線。

ケースに組んだところ。

ボリューム(V-,V+)でズーム調整で、シャッターボタンでシャッターを切ることができる。
使いやすいようにタクトスイッチは三角に配置してみた。
これで三脚を利用した撮影がやりやすくなった。

ただ、この改造はグレーゾーンでもある。
もとの商品は技適を取ってあるが、改造したことで技適的にどうなのだろうか。
スイッチを追加して外見を変化しているだけで、無線上の特性は変わってないはずだが。
室内だけで使って、あまり多様はしないほうがいいかもしれない。

そういえば以前、携帯電話端末関係の仕事で技適がどうこうってことで苦労したことがあったな。
かなり面倒で落としどころを見つけるまで結構時間がかかったような気がする。

しかし、某店では技適取ってないだろ的な商品や怪しい名称の機器や明らかにコピー品を売ってたりしてるし実際のところどうなんでしょう。

カテゴリー: 電子工作 | コメントする