FC2ブログ

my memorandum

興味のあることを備忘録的に綴る

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

PS/2-PS/2変換(1): KVM切替器の解析

タイトルのPS/2-PS/2変換の意味は最後に書くとして、まずは経緯から。

以前、Realforce 101 PS/2キーボードとKVM切替器との相性の悪さを書いた。KVMにキーボードを繋ぐと、入力を不規則に取りこぼす問題が出る。別のキーボードを繋いでお茶を濁し、相性問題は放置していた。

最近、別の省スペースのキーボードに変えようとしたら、また同じ問題が出たので、今回は少し真面目に調べてみることにした。前回は悪さをしているのがRealforce 101なのかKVMなのか切り分けられなかったが、別のキーボードでも同じ問題が出るので、KVM切替器が悪いような気がする。インターネット上では同じような問題は見つからなかったので、自分で解析してみる。

2018年にPS/2キーボードの切替器の情報は今さら感が半端ないが、わかった範囲でここに記してみる。なお、問題のKVM切替器の型名も一応書いておくと、コレガのCG-PC2KDMXASである (とっくの昔に販売終了の品)。

KVMとキーボード間のPS/2インターフェースの解析


まずはKVMとキーボードとの間で起こっていることを把握する。

USBに繋ぐ簡易ロジアナを用意して信号を観測してみる。KVMとキーボード間のPS/2インターフェース信号が次の図である。なおD0がPS/2のCLK, D2がDATAに対応する。送受信のない無信号状態なので、PS/2の仕様上は本来CLK, DATAともHighのままになっているはずなのだが、CLKがバタバタしているのがわかる。よく見ると、図の右半分と左半分で挙動が異なることに気づく。



図の左半分の方を拡大すると次の図のとおり。ほぼ5msおきに300μsくらいだけCLKがLowになる。



図の右半分の方は、次の図。10μs周期でCLKがHigh, Lowがバタバタする動作を10回1セットで繰り返す。これ以外の期間はCLKがLowになっている。



今度は時間方向を縮小してみると、次の図のようになる。画面解像度の都合で波形は潰れてしまっているが、後者のバタバタ期間がおよそ400ms続いていることがわかる。



PS/2の仕様に照らすと、この期間は問題あり。仕様によると、デバイス (今回の場合PS/2キーボード) がデータを送信したい場合、CLKが最低でも50μsの間Highであることが必要である。CLKがLowの場合はホスト (今回の場合はKVM) が送信を禁止している状態なので送信することができない。バタバタ期間はCLKが基本的にLowであり、Highになる期間は10μs周期の短い間なので、デバイスがデータを送信できない。この期間が400msも続いてしまう。

これで不規則に入力を取りこぼす原因が推測できた。バタバタ期間にキーボード入力があると、キーボードからデータを送信できない期間は400msも続く。この間にキーボードが送信を諦めてしまうようだ。たとえ諦めなくとも、キー入力がPCに送信されるのに400msも待たされることになる。人間でも十分認識できる遅延なので、やはりおかしい。

実際にキー入力をしながら信号をキャプチャしてみると、バタバタ期間にキーを押下しても、そのデータがPS/2インターフェース上に出てくることがなかった。次の図が一例だが、右半分の期間ではデータを送っているが、左半分の期間でデータを送っているケースは見つけられなかった。



一方で、問題の出ないキーボードを繋いで信号をキャプチャしてみると、次の図のようにバタバタ期間でもデータ送出を行っている。PS/2の仕様に照らすと、逆にこのキーボードの動作は仕様違反のようにも思うが、結果としてこちらのキーボードの方が正しく動作している。



その他の可能性


アナログレベルのノイズが乗って、CLKのHighとLowを誤認している可能性も考えられなくはない。HighとLowの閾値レベルのノイズが乗ると、個体差でHighとLowが変わるケースはあるかもしれない。この可能性は、アナログ信号を観測する環境が用意できなかったので未検証のまま。ただし、ノイズというには作為的な信号に見えるのでこの可能性は低いのではないかと思っている。

対策方針


いずれにせよ、Realforce 101や省スペースキーボードが正しく動作しない事実は動かないので、対策を講じる。バタバタ期間でもキーボードからデータを送出してしまえばKVMは受け取ってくれるのはわかったので、KVMとキーボードとの間に仕掛けを入れ、キーボードから受け取ったデータをバタバタ期間も強引にKVMに送ってしまうようにする。タイトルのPS/2-PS/2変換はそういう意味だが、変換というほど大仰なことはやっていない。

続きはいずれ書く。

スポンサーサイト
  1. 2018/05/27(Sun) 13:00:00|
  2. 電子工作
  3. | トラックバック:0
  4. | コメント:0

SBC6809 (3): 6809/6309の判別をしてみた

引き続いて前回、偽造品であることが判明した HC63C09P の中身が、6309E なのか、それとも 6809E なのかを調べてみる。

引き続き電脳伝説さんにお世話になる。ここにある CHK309 は、まっさらな ROM に書き込む前提なので、BASIC9 用に移植してみる。プログラムはここに置いておく。マシン語プログラム用の領域はどこにするのが正解なのかわからないので、適当に 6000h 番地とした。リロケータブルにはなっていないので、開始番地を変える場合は、プログラム中のコメントを見て適当に変えてほしい。

結果、中身は 6309E のようだ。



ebay の別の出品者から HD63B09P も買ってみた。こちらもリマークされた偽造品で、中身は同じく 6309E だった。偽造品のマーキングを書いておく。後に続く人の参考になればと思う。


  1. 2018/04/23(Mon) 18:41:12|
  2. 電子工作
  3. | トラックバック:0
  4. | コメント:0

SBC6809 (2): 6309 に挿し替えてみる

6809 を 6309 に差し替えてみた。

6309 は 6809 の CMOS 版として日立が開発した CPU で、表向きは 6809 として動作する。しかし、表の顔とは別に、機能が拡張されたネイティブモードを持つ変わり種である。このモードは事情によりお蔵入りになったようだが、マニアによって解析されるなど当時は話題になったらしい。

6309 は現在は ebay などで数百円から購入できる。購入して SBC6809 の 6809 を、6309 (HD63C09P) に差し替えてみた。結論からいうと動作せず。リマークされたもののようだ (要するに偽造品)。

ネットの情報によると、リマーク品の中味は、クロックジェネレータが内蔵されていない 6809E/6309E の可能性が高い模様だ。これまた電脳伝説さんのブログに書いてある方法で、PIC でクロックジェネレータを拵え、6809E/6309E 対応してみた。IC ソケットをゲタのように使い、基板には手を入れなくて済むようにした。PIC は IC ソケットの中に埋め込む。PIC は手持ちの関係で8ピンの 12F1822 ではなく、20ピンの 16F1829 を使った (少々もったいないが)。これを SBC6809 に挿し、さらにその上から 6809E/6309E を挿す。



これで動作させてみると、ちゃんと動作した。やはりリマーク品の中身は 6809E もしくは 6309E であるようだ。この段階では中身が 6809E なのか 6309E なのかはわからないので、こちらも後ほど調べることにする。

ちなみに、電脳伝説さんの PIC のクロックジェネレータは 500kHz 動作だが、68B09E/63B09E 以上の高速品を使う場合は PIC のプログラムをこのように変更すると 1MHz のクロックにできる。ただし生成しているクロック Q と E との時間差が 125μs しか取れないので、データシートを見る限り 6809E と 68A09E は動作しないと思われる。

  1. 2018/04/17(Tue) 22:45:51|
  2. 電子工作
  3. | トラックバック:0
  4. | コメント:0

SBC6809 (1): アレンジして作ってみた

電脳伝説さんの SBC6809 を (ちょっと変更して) 作ってみた。

SBC6809 は基板のみが販売されており、CPU、SRAM、EPROM などの部品一式は自分で揃えて組み立てる形になっている。ルーズキットと呼ぶらしい。基板は、スイッチサイエンスさんのここで買える。技術資料として回路図や CAD データ、ガーバーデータも公開されているので、自分で基板を作ることもできる。

今回は基板をアレンジして作ってみた。どうせ作るなら RAM 領域を広げたくて、手持ちの 600mil 幅の 62256 を使うようにしたかったのが主な理由。使い慣れた KiCad を使いたかったので、技術資料の回路図を手で入力した後、小変更を加えた。変更点は次のとおり。SRAM を 6264 (64Kbit) から 62256 (256Kbit) に変更。628128 (1024Kbit) も挿せるようにしておいた。メモリマップは、RAM 0000-7FFF, ROM C000-FFFF, ACIA 8018-8019 として、アドレスデコーダ回路を変更。EPROM は色々な容量のものを想定するのが面倒になったので 27256 しか想定していない。

基板サイズやネジ穴位置はオリジナルと同じ、いわゆる B 基板サイズにした。部品配置は見直した。EPROM/SRAM と CPU との配線数が多いので両者を近づけたのだが、配線効率はきちんと検証したわけではない。また、後々バスを基板の外に引き出せるように、ピンヘッダのスペースを確保した。後は、電源用の mini-USB コネクタや電源 LED の追加くらい。

手配線する自信がなかったので、初めて KiCad の自動配線機能を使った。電源ラインだけ大まかに手配線して、後は自動で配線したが、ものの数分で配線してくれた。

配線が終われば、後はデータをまとめて基板を外注するだけである。今回、基板の外注も初めて行った。今なら (2018/04 現在)、FusionPCB で送料込み $7.9 で作れる (10cm×10cm 以内、2層、5枚)。基板の色も選べるが、この時代の CPU にはやはり緑が似合うと思って、オリジナルと同じ緑にした。注文から到着まで2週間強ほどかかったが、届いた基板がこちら。シルクも奇麗だし、自分の基板が形になってみると、月並みな感想だが感慨深い。ただ、5枚できてしまうが、5枚もいらない。どうしようか。




24ピン、32ピンの IC ソケットの手持ちがなかったりして部品集めのひと手間がかかったが、組み上がった。組み立て後の写真。水晶発振子の穴の間隔がが現物より微妙に狭いミスがあり、水晶が奥まで差し込めなかったが、他は問題く組み上がった。



オリジナルから回路変更しているのに大胆だが、一通りのチェックの後は、IC 類をすべて挿入し、EPROM には 電脳伝説さんでも紹介されている BASIC9 をいきなり書き込んで動作試験。手持ちの USB-Serial 変換器に RTS/CTS ピンがないので、CTS をプルダウンしないと通信できないトラブルがあった。それを除けばすんなり起動。RAM がきちんと 32KB 使えるかどうかは後で確認してみよう。



巷ではこれまで扱っていた店で 6809 が品切れになったりと、SBC6809 が広がりを見せているのではないかと思っている。自分も68系の CPU を触るのは初めてなので、いろいろ遊んでみたい。また HD6309 に差し替えたりもしてみるつもりだ。

参考にしたサイト。

  1. 2018/04/15(Sun) 11:05:31|
  2. 電子工作
  3. | トラックバック:0
  4. | コメント:6

AKI-80 で CP/M を動かす (4): CP/M に表参道アドベンチャーを移植する

CP/M で、何かプログラムを動かしてみる。既存のアプリケーションやゲームを動かすだけでは味気ないが、逆に完全自作はハードルが高い。なので、ありもののゲームを CP/M 用に改造してみる。

今回は、知る人ぞ知る、アスキーの表参道アドベンチャーを移植することにする。このゲームはもともとマルチプラットフォーム対応で、コードの大部分は機種非依存であり、一部の機種依存部分を差し替えることで PC-8001 や MZ-80K/C, 80B など複数の Z80 パソコンで動く。これなら、機種依存部分のみを CP/M 対応させれば動くはずで、移植がしやすい。

表参道アドベンチャーのゲーム内容については他のサイトに譲るが、ゲームといってもテキストが表示されて、英語でコマンドを入力して謎解きを進めるだけの地味なゲームだ。当時はアドベンチャーゲームというジャンル自体がまだ新しく、新鮮だったようだ。

表参道アドベンチャーの入手


ゲーム本体の入手が一番難しい。年刊ア・スキー1982年号に掲載されたのが初出のようだ。年刊ア・スキーは当時のパソコン雑誌月刊アスキーの付録らしい。35年も前の雑誌を手に入れるのは今では困難だろう。また、2004年発行の「蘇る PC-9801 伝説」というムック本に、この年刊ア・スキーの復刻版が掲載されるとともに CD-ROM にエミュレータベースのゲームが収録されている。自分はこれを使った。ただ、残念ながらこの本も既に絶版、手に入れるのは難しいと思う。

プログラムのバイナリをファイルに抽出


本には当時のまま機械語のダンプリストが載っているが、せっかく CD-ROM に電子化されているのでこれを使った。ただ、CD-ROM にダンプリストがそのまま格納されているわけではなく、エミュレータ本体とゲームが一体となった実行ファイルがあるだけなので、この中からゲームのバイナリのみを抜き出すのは一工夫必要だった。

エミュレータを起動して、Windows のタスクマネージャーからダンプファイルを作成した後、雑誌のダンプリストと一致する部分を検索で探し出し、バイナリイメージを切り出した。これを OMOMAIN.DAT というファイル名で保存しておく。残念ながらこれは公開できない。

機種依存コードの解析


ダンプリストの最初の256バイトが機種依存部分である (開始アドレスが 9000h なので、9000h-90FFh の256バイト)。ここを解析して、CP/M 用に移植すればよい。PC-8001 用を解析したところ次のとおり (と思われる)。
9000h: エントリポイント (機種非依存の先頭番地 9100h へジャンプ)
9003h: ジャンプベクタ (一文字入力ルーチン 9014h にジャンプ)
9005h: ジャンプベクタ (一文字表示ルーチン 900Eh にジャンプ)
9007h: ジャンプベクタ (ホットリセット 900Dh にジャンプ)
9009h: ジャンプベクタ (ゲームセーブ処理 9020h にジャンプ)
900Bh: ジャンプベクタ (ゲームロード処理 9050h にジャンプ)
900Dh: ホットリセット処理 (RST 1 命令実行)
900Eh: 一文字表示ルーチン (A レジスタの内容を画面表示)
9014h: 一文字入力ルーチン (A レジスタに格納、小文字→大文字変換)
9020h: セーブ処理ルーチン (メモリアドレス A535h-C35Dh の範囲をテープにセーブ)
9050h: ロード処理ルーチン (テープからメモリにロード)

900Dh からの五つの処理を CP/M 用に移植し 9003h-900Ch の五つのジャンプベクタを設定するとともに、ファイル OMOMAIN.DAT に格納したゲーム本体のバイナリをメモリにロードする導入プログラムを作ればよい。

CP/M 用プログラムの作成


CP/M 用の導入プログラムは大まかに次の構成になっている。

上記の導入プログラム自体の占有メモリは極々小さく 0100h-03FFh の範囲に収まるが、ゲーム本体の開始アドレスは 9000h 固定なので、実行時は 0400-8FFFh は使われないのに 0100h-C387h までメモリを占有する変なメモリマップになる。したがってメモリの少ない CP/M では実行できない。アセンブラのソースプログラムはここに置いておく。使う場合はファイル名を OMOTE.Z80 にリネームして使う。

Z80 アセンブリで書いたので、アセンブルには Commercial CP/M Software Archive の Programming Languages and Tools にある SLR Z-80 Assembler v1.32 を使った。

アセンブルと実行時の画面がこちら。画面ではわからないが、当時の実機と比べると実行速度はかなり速いはず。また、ロード、セーブもテープベースでは数分掛かっていたはずだが、本機では一瞬で終わる。
201709_AKI80CPM_02.png

201709_AKI80CPM_03.png


遊ぶだけならエミュレータで事足りるが、実際の Z80 で動いていることに意味がある。なお、移植したら満足してしまって、肝心のゲームはまだ解けていない。

参考にしたサイト。

  1. 2017/09/30(Sat) 12:17:09|
  2. 電子工作
  3. | トラックバック:0
  4. | コメント:0

AKI-80 で CP/M を動かす (3): CP/M ディスクイメージの作成

AKI-80 を使った Z80 マイコンボードで CP/M をブートするのに必要なディスクイメージの作成方法のメモ。

CP/M の BIOS, IPL はハードウェア構成に合わせて作成する必要がある。ハードウェアおよび PIC 用のファームウェアと同様、こちらのサイトのものを使わせてもらう。ただし、ディスクイメージそのものは置かれておらず、自分で作成する必要がある。必要な情報は同サイトの「CP/M ディスクイメージ作成手順」他を読めば集まるが、ある程度理解しないと、どのファイルを流用できて、どのファイルを作らねばならないか見えにくい。ここでは、これだけをやれば作れるという手順を記載しておく。

用意するファイルとダウンロード先




bios.asm/ipl.asm の書き換え


CPM.SYS, bios.asm, ipl.asm の三つのファイルは想定メモリサイズを合わせる必要がある。AKI80CPM_HALT20140531.zip の中の bios.asm/ipl.asm は 64KB CP/M 用である。一方 cpm22-b.zip の中の CPM.SYS は 62KB CP/M 用である。そこで、bios.asm/ipl.asm を 62KB 版に書き換える。


BIOS/IPL のバイナリ作成


bios62k.asm/ipl62k.asm は CP/M 上のマクロアセンブラ用のソースなので、CP/M エミュレータ上でアセンブルする。もちろん既に使える CP/M 環境がある場合は、それを使えばよい。また、Windows/Linux 上の 8080 マクロアセンブラがあれば、それを使ってもよい。


CPM.SYS/BIOS/IPL の連結


dd コマンドを使う。Windows 用もあると思うが、今回は Linux 上で行った。CPM.SYS のファイルサイズより連結サイズが小さいが、これで合っている (後半部分は他機種用の BIOS なので切り捨てる)。
$ dd conv=sync bs=128 count=2 if=ipl62k.bin > cpm62k.bin
$ dd conv=sync bs=128 count=44 if=CPM.SYS >> cpm62k.bin
$ dd conv=sync bs=128 count=10 if=bios62k.bin >> cpm62k.bin


ディスクイメージの作成




ファイルコピー




イメージを SD カードに書き込み


DDWin で diskimage を SD カードに書き込む。

この記事では Petit FatFs を導入したと書いた。FAT 版では SD カードをフォーマットして diskimage ファイルをそのままファイルシステムに置いている。この際に落とし穴があったので、別途記載するかもしれない。

  1. 2017/08/26(Sat) 17:30:02|
  2. 電子工作
  3. | トラックバック:0
  4. | コメント:0

Machikania: 2SC1815 の代わりに 2N3904 を使うと動かない

この回Machikania type Z を作成したが、PS/2 キーボードを接続すると動かないことが判明。イニシャライズ時に Keyboard Not Found となる。そのトラブルシューティングの顛末。

PS/2 コネクタとトランジスタ (Tr) のコレクタ間に接続されている抵抗値 (下図 R15, R16) によっては、動かないキーボードがあるという情報をネット上に見つけた。低抵抗に変えたり、別の PS/2 キーボードを変えたりして試行錯誤。結果変わらず。

そこで USB 接続の簡易ロジアナを準備して PS/2 インターフェース周りの波形を観測。PS/2 は必ずデバイス側 (キーボード側) からクロックを出すのだが、Tr のコレクタにはこの PS/2 のクロック信号波形が来ている。しかし、PIC32MX の入力ピンには信号波形が現れず、H レベルからピクリとも動かない。PIC32MX の入力ピンは Tr のエミッタに繋がっているので、コレクタまで来ている信号が、エミッタには現れて来ていないことになる。Tr の壊れを疑い、二つとも取り替えるが、これもダメ。プリント基板の配線ミスなども5回くらい確認するが、間違いはない。

何が原因なのか完全に行き詰まった。ふと、オリジナルは Tr に 2SC1815 を使っているのに対して、今回は 2N3904 を使っていることに思い立った。ピンアサインの違いを除けば 2N3904 は 2SC1815 とほぼ互換という意識があり、デジタル回路でシビアな違いが出るとは思えないが、藁にもすがる思いで 2SC1815 に変えてみる。すると、動いた。こんなこともあるのか…。

回路の詳細を説明できるだけの知識に乏しいが、推測してみた。PS/2 側の信号が L の時、Tr が逆接続 (コレクタとエミッタが逆) 状態で ON になっているように思う。電流は 5V から 10kΩ (R8, R9) を通り、Tr のエミッタからコレクタに抜け、100Ω (R15, R16) を通り、PS/2 キーボードへ抜けていく。2SC1815 は逆接続でも Tr がある程度 ON になるので、エミッタの電位が L まで落ちる。2N3904 は ON になりきらないので、エミッタの電位が L レベルまで落ちずに、H のままとなってしまっているのではないか。

201608_Machikania_01s


これが正しいとすれば、想定する Tr の使用方法から外れているように思う。こういう使い方なら、2SC1815 と 2N3904 に差異があっても仕方ないのだろう。Machikania はわかった上でトリッキーな回路設計をしているのだろうか。それともよくあるテクニックなのだろうか。そもそも自分のこの解釈は正しいのだろうか。

詳しい方がいたらぜひ教えてほしい。

参考にさせていただいたサイトなど。

  1. 2017/08/13(Sun) 15:25:28|
  2. 電子工作
  3. | トラックバック:0
  4. | コメント:0

AKI-80 で CP/M を動かす (2): 制御用 PIC プログラムの作成

前回書いたように、参考にさせていただいたサイトの製作例 (以下、オリジナル) では AKI-80 の周辺制御用のマイコンに AVR を使っていた。機能の詳細説明はオリジナルのサイトに譲るが、バスマスタとなってメインメモリや SD カード、I2C EEPROM といった CPU 周辺の装置の読み書き、コンソール用のシリアル入出力などを受け持つ。これを AVR から PIC に変更したため、制御用プログラムも当然 PIC 用に移植した。基本的な考え方とソースコードは流用させてもらっているが、主に次の数点を変更している。
  1. ディスク I/O 用のバッファサイズを2048バイト→512バイトに変更。オリジナルでは CP/M のブロックサイズ2048バイトを意識して、バッファを2048バイト用意している。今回使った PIC は RAM が1024バイトしかないので、2048バイトのバッファを用意できない。ソースコードを読み解くと、CP/M のアクセスはセクタ単位 (128バイト) でよく、ブロックは意識しなくてよさそう。逆に、SD カードのブロックサイズ (512バイト) 以上のバッファは必要なので、バッファは512バイトにした。これで多少ソースコードがすっきりしたような気がする。

  2. オリジナルは SD カードを RAW デバイスとして使っている。SD カードを FAT ファイルシステムにして CP/M のディスクイメージをファイルとして置けるように変更した。ディスクイメージを Windows で作った場合に、ファイルのドラッグ & ドロップで SD カードに移せるので、少し楽になる。また、CP/M のディスクイメージを SD カードに複数置いて、モニタで切り替えるといった使い方に拡張も可能。

  3. モニタ機能の追加。AKI-80 (Z80) に制御を移す前に、メモリの内容をダンプしたり、変更したりすることができる。この機能だけだと手打ちで Z80 プログラムを入力して実行するくらいしか使い道がないが。本当は SD カードや I2C EEPROM とメモリとの間のロード、セーブ機能、上記の CP/M ディスクイメージの切り替え機能なども付けたいが、作成のモチベーションが下がって保留中。

  4. オリジナルにあった PC と I2C EEPROM の通信機能はとりあえず削除。後から追加するかも。

2.はこちらの Petit FatFs Module をそのまま使わせてもらっている。(Petit の付かない) FatFs の機能は不要だし、そもそも PIC には収まらないので Petit を使っている。ただ、この Petit FatFs は、基本的にはシーケンシャルアクセスで使うような作りになっている。今回の CP/M ディスクイメージはランダムアクセスされるので、何も工夫しないで使うとものすごく遅い。pf_lseek でシークするたびに、ディレクトリのチェインを読む (?) ようなのだが、チェインを進めるたびに毎回 SD カードを512バイト丸々読み出すので遅いようだ。例えば、CP/M 上でドライブを変更しただけで数秒待たされる。この問題を、読み捨てする部分をできる限り PIC 上の RAM にキャッシュする形で改善してある。

TeraTerm で接続して、モニタメニューと CP/M の起動メッセージを表示させたスクリーンショットがこちら。Z80 は 12MHz なので実行速度は速い。SD カードへのアクセスも、フロッピーディスクだと思って使えば十分速い、くらいのスピードで動いている。
201708_AKI80CPM_01.png


後日、CP/M のディスクイメージの作成法もまとめておきたい。

参考にしたサイト。

  1. 2017/08/11(Fri) 21:57:12|
  2. 電子工作
  3. | トラックバック:0
  4. | コメント:0

AKI-80 で CP/M を動かす (1): ハードウェア製作

レトロな 8bit 時代のマイコンや PC を語るとき、CP/M は外せない話題のようだ。自分の最初の 8bit マシンは初代の PC-8801 で、その頃は高価なフロッピーディスクドライブなど持っていないし、せいぜい雑誌のゲームを入力して遊ぶのが関の山で、CP/M 現役時代は触れたこともなかった。当時を語ったサイトなどを見るにつけ、自分も一度その世界を追体験したいと思っていた。

CP/M を動かすための情報は今でもネット上にはたくさん存在している。PC 上のエミュレータ、AVR などの現代のマイコンでエミュレーションするものなどもあるが、やはり実 CPU 上で動かしたい。8080/8085/Z80 など単体 CPU もコレクションの傍ら持っているが、自分で一からボードを設計して完成させ、その上で CP/M まで動かすのはハードルが高い。習作としては出来合いのマイコンボードを使い、マイコンが動くところまでの苦労をスキップして楽をしたい。秋月電子で一度は終売となったはずの AKI-80 が再入荷したという情報を見て、一つ確保した。これで CP/M を動かしてみようと思う。

と言いながらも、これまた先人は存在する。このサイトが詳しい。同じものを作るだけではちょっと寂しいので、メインメモリや EEPROM、SD カードなどの周辺制御を行っている AVR のところを、使い慣れた PIC に変えて動かしてみる。

まずはボードの作製をする。AKI-80 (Z80) とのインターフェースなど、回路の考え方はそのまま流用させてもらい、制御を行う AVR を PIC に変えた。オリジナルは64ピンの AVR を使っているが、40ピンの PIC (PIC16F1939) にする。I/O ピン数が足りないので、PIC からアドレスバスへの出力を上位、下位の 8bit ずつに分け、74HC574 でラッチするように変更した。I2C の EEPROM と SD カードスロットを用意する辺りはオリジナルを踏襲させてもらった。

基板はこちら。ジャンパーが多いが、これが限界だった。ピンソケットを用意し、AKI-80 ボードがそのままささるようになっている。3ピンのピンヘッダはシリアル入出力で、このピンを経由して端末 (TeraTerm 等) に接続する。デバッグをやっていると電源スイッチがないのが不便なので、空いたスペースに後付けするかも。
201707_AKI80CPM_01s.jpg


基板裏面はこちら。裏面には電源用の miniUSB コネクタと、SD カードスロット、メインメモリとして使う SRAM といくつかの表面実装部品を実装している。自分のトナー転写の技術だとやはりあまり美しく作れない。
201707_AKI80CPM_02s.jpg


現時点でとりあえず CP/M の画面が拝めるところまでできたが、動かすところまでの手順は気長に書いていくつもり。

参考にしたサイト。

  1. 2017/07/22(Sat) 11:32:46|
  2. 電子工作
  3. | トラックバック:0
  4. | コメント:0

Raspberry Pi Zero W (2): Raspbian のインストール

Raspberry Pi Zero W には KODI を入れてメディアプレーヤーにしようと思う。まずは OS をインストールする。

ブート用マイクロ SD カードの準備


作業は Windows 上で行う。参考になるサイトは数多くあるので、ここでは簡単に。
  1. Raspbian イメージを公式サイトからダウンロードする。Desktop は使用しないので lite 版でよい。適当なフォルダに展開する。
  2. DDWin をダウンロードし、展開する。SD カードに OS イメージを書き込むためのツール。
  3. DDWin を起動し、書き込み先の SD カードを指定、OS イメージを指定し、SD カードに書き込む。Windows 10 では SD カードが選択できないことがあった。この時は、DDWin.exe のプロパティを開き、互換性を Windows XP にしてみること。

これで OS イメージが書かれた SD ブートカードできた。これを Zero W に挿す前にもう一作業する。

シリアルコンソールを使ったブート


Zero W は LAN に繋いでヘッドレスで使いたい。Zero W には有線 LAN がないので、無線 LAN を設定するまではディスプレイとキーボードを繋ぐのが一般的だと思う。ただ、USB キーボードを持っていないので、面倒だがシリアルコンソールで起動することにした。SD カードにこの設定をしておく必要がある。SD カードは Windows 上でドライブに見えているはずである。
  1. ファイル config.txt の最後に下記を追加。Zero W では Bruetooth と UART のピンが共通となっているので Bruetooth を無効にする、ということらしい。
    dtoverlay=pi3-miniuart-bt

  2. ファイル cmdline.txt を次のように変更。途中改行はしないこと。
    dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait


ここまでできたら、SD カードを Zero W に挿入。

次に、シリアルコンソールを準備する。Arduino (びんぼうでいいの) の USB-シリアル変換チップを USB-シリアル変換ケーブルの代わりにして、TeraTerm をコンソールとして使う。
  1. 「何もしない」スケッチを作って Arduino に書き込み。AVR のシリアル接続ピン 0, 1 を INPUT モード (ハイインピーダンス) にして、電気的に AVR が悪さをしないように設定するだけのスケッチ。
  2. Arduino と Zero W を接続。TX と TxD, RX と RxD を接続しているのが奇妙に見えるが、Arduino の RX/TX は AVR から見た場合の RX/TX なので、これで正しい。



    Arduino 側---Zero W 側
    0(RX)---GPIO#10(RxD)
    1(TX)---GPIO#08(TxD)
    GND ---GPIO#06(GND)

  3. TeraTerm で仮想 COM ポートに接続。
    115200 baud / 8ビット / パリティなし / ストップビット1ビット / フロー制御なし
  4. Zero W に USB 電源を接続。TeraTerm にコンソールメッセージが出れば成功。
  5. ユーザ名 pi, パスワード raspberry でログイン。


無線 LAN 設定


無線 LAN の設定をする。SSID と PASSPHRASE は適切なものに置き換えて入力。
$ sudo sh -c 'wpa_passphrase SSID PASSPHRASE >> /etc/wpa_supplicant/wpa_supplicant.conf'
$ sudo vi /etc/wpa_supplicant/wpa_suplicant.conf
生のパスフレーズが書いてある行を削除 (セキュリティ対策)
$ sudo shutdown -h now

以上で無線 LAN に繋がれば、インストール作業は終わり。シリアルコンソールは外してよい。

その他各種設定


ホスト名を変更しておく。下記を立ち上げればインタラクティブに設定可能。
$ sudo rapbi-config


タイムゾーンを変更。Japan/Tokyo にする。
$ sudo dpkg-reconfigure tzdata


SD カードの寿命対策として、テンポラリ、ログ領域を tmpfs にする。ログの数は絞る。
$ cd /etc
$ sudo cp fstab fstab.org
$ sudo vi fstab
(以下を追記する)
tmpfs /tmp tmpfs defaults,size=32m,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,size=16m,noatime,mode=1777 0 0
tmpfs /var/log tmpfs defaults,size=16m,noatime,mode=0755 0 0

$ cd /etc
$ sudo cp rsyslog.conf rsyslog.conf.org
$ sudo vi rsyslog.conf
(auth.log, syslog, daemon.log の行だけ残してコメントアウトする)

$ cd /etc
$ sudo cp rc.local rc.local.org
$ sudo vi rc.local
(以下を追記する)
mkdir -p /var/log/ConsoleKit
mkdir -p /var/log/apt
mkdir -p /var/log/fsck
mkdir -p /var/log/ntpstats
mkdir -p /var/log/samba
chown ntp.ntp /var/log/ntpstats
chown root.adm /var/log/samba
touch /var/log/lastlog
touch /var/log/wtmp
touch /var/log/btmp
chown root.utmp /var/log/lastlog
chown root.utmp /var/log/wtmp
chown root.utmp /var/log/btmp

以上で終わり。

  1. 2017/03/29(Wed) 15:14:02|
  2. 電子工作
  3. | トラックバック:0
  4. | コメント:0
次のページ>>

プロフィール

tkyy

Author:tkyy
のんびりと昔の PC をいじったり、電子工作をしたりの日々。

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

カテゴリー

ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する

ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。