2019年9月26日木曜日

RS232Cカードに関するちょっとした工夫

より使い易いようにRS232Cカードの使い方の工夫をしました


8月16日や9月25日のブログの画像で分かりますように、RS232Cカードの先にはD-Sub 9ピンコネクタがつながり、その先にストレート接続をクロス(リバース?)接続に変換する変換回路があり、最後はシリアルーUSB変換ケーブルでWindows機に接続されています。

もう少しすっきりさせたいということで、次のように考えました。
1.シリアルーUSB変換ケーブルではなく、普通に出回っているTTL-USB変換ケーブルを用いる。
2.RS232Cカードの出力を最初からクロス接続にする。

1.については、そもそもRS232Cに変換するのではなく、8251Aの入出力をそのまま取り出せばよいのですから、基板上のADM232を取り去って、代わりに画像のようなジャンパ基板をソケットに装着します。


ICの代わりにジャンパー


2.については、現在のRS232Cカードにストレート/クロス切替機能を追加した基板を製作中ですが、現在のRS232Cカードの場合にはケーブルで工夫することになります。
ということで、画像のようなケーブルを製作しました。


TTLクロス出力のケーブル



これで、比較的高価なシリアルーUSB変換ケーブルを使うことなく、低価格のTTLーUSB変換ケーブルが使えますので、見た目もすっきりです。


これだけでOK!すっきり



私はヤフオクでの3~400円程度のものを使用していますが不都合はありません。また、5V仕様だけでなく、3.3V仕様のものでも同じように使えています。
(蛇足ですが、3.3V仕様と言いながらVCCに5Vが出ているものもあるようで、私はこれでPICのICを破壊してしまいました。(泣))

2019年9月25日水曜日

FM-7/77のF-BASIC用の仮想ドライブ構築ソフトが完成

F-BASIC(V3.0)のドライブ2,3として仮想ドライブを構築するソフトが完成


今まで、FM77AV40SX上でFLEX9とOS-9用にWindows機上の仮想ドライブを構築して、内蔵ドライブ0,1に加えて仮想ドライブを2,3として使用していましたが、最近、常用しているSXに加えて、再びFM-7をいじりだしたこともあり、ディスクドライブを持たないFM-7でDISK-BASICを使いたくて、先日製作したRS232Cカードを使用して何とかしたいと考えていました。
そんな時に、日本橋電気街徘徊日誌さんからプリンタポートに接続するシリアルメモリからDISK-BASICを起動するカードを頂きましたので、これをベースにして仮想ドライブを構築することとしました。

RS232Cを内蔵しているFM77AV以降の機種ではそのままで、FM-7(DISK-BASICが動作する環境が必要)等ではRS232Cカードを追加すれば仮想ドライブが実現できます。これによって、ファイルは全てWindows上のファイルとして保存でき、簡単にDISK-BASICとの間でやり取りできます。
さらに、私の製作した拡張I/OボードのFT245RLやFT232RLを用いたパラレル/シリアルポートを使用することもできます。

全体の構成図は以下のようです。


全体の構成


FM-7用のRS232Cカードは8月16日のブログで紹介したもので、拡張I/Oボードは6月12日と8月26日のブログで紹介したものです。


制作したプログラム


(1)仮想ドライブ構築ソフト FBasDrvWin.exe(Windows側)
基本的な考え方は2018年4月16日のブログ「FLEX用Virtual Driveの作り方」で説明した通りですが、DISK-BASICのFMS(ファイルマネージメントシステム)に相当するものを実装する必要がありますので、エミュレータXM7を用いて、ファイルを追加・削除・名称変更などをする毎に変更前と変更後のDSKファイルの全体を比較し、どこが書き変わっているかを調べるという愚直な手法で調査し実装しました。
手間としては、OS-9のような複雑なシステムではなく、比較的単純なFATシステムですので、それ程大変ではありませんでした。

実際に使用してみると、BASICプログラムについては、Windowsで作成して仮想ドライブにDrag/Dropすることで簡単にDISK-BASIC側に持っていけるのですが、機械語プログラムはそのままでは持っていけないので、S-format形式やHex形式のファイルを読み込んでDISK-BASICの機械語ファイル形式に変換して保存する機能を追加しました。

(2)ドライブ拡張ソフト WINDRVxx(FM側)
基本的にはドライブ番号が2,3の場合にBIOSの8,9,10を切り替えて、仮想ドライブにアクセスするようにすれば良いわけですが、それをどこに置くかが問題です。
参考にしたのは、Oh'FM 1984年11月号に掲載された「裏RAMディスク」(轍名聡さん)です。これを見習ってBIOSの変更部のみを$FC30~に置き、その他は裏RAMの$8000~に置くことで表RAMの消費を少なくすることができました。

後はFMとWindows間の通信に関わる部分のみで、3種類の通信経路を実装しました。
RS232Cの8251A、拡張I/Oボード上の6850+FT232RL(または6850+ADM232)と6821+FT245RLの3つです。

8251Aのプログラムに関して


6850と6821を使用した場合のプログラムは、慣れていることもあり、割とすんなりと作成できましたが、8251Aを使用する方には苦労しました。
FM側からの送信はできるのですが受信ができないのです。F-BASICのプログラムでは問題なく送受信ができることからハードに問題がないことは分かりますし、プログラムも単純なもので、それにRTS/CTSによるハードウエア制御を加えただけで、6850では同様な制御がちゃんとできています。
この問題に一ヶ月以上を費やしましたが、ネットにも8251Aを機械語でハードウエア制御した例は見つからず、お手上げ状態でした。そんな時に、ネットのルネサスの質問箱のようなところで、USARTでのRTSは送信・受信の両方を同時には制御できないようだという書き込みを見ましたので、もしかしたらこれかもと思いましたら、ビンゴでした。

つまり、8251AでRTS制御するときには、RxEとTxENを同時にイネーブルにしてはいけないということでした。受信時にはRxEのみをイネーブルにし、送信時にはTxENのみをイネーブルにしなければならないということなのです。その部分のソースリストを示します。

*
MRSTU EQU $40 ;master reset
MODEU EQU $4E ;1stopbit,non pari,8bit,16x
CLRTSU EQU $15 ;RTS=H,ER,RxE,TxEN
SERTSUR EQU $34 ;RTS=L,ER,RxE for receive
SERTSUS EQU $31 ;RTS=L,ER,TxEN for send
TxEMPTY EQU $04
*
*--------------------------------------
* receive from serial port
* (use USART 8251A)
*    A <- port
*
RCVCH EQU *
 LDA #SERTSUR ;RTS=L
 STA SCMD
 NOP
RCV1 LDA SSTS
 ASRA
 ASRA
 BCC RCV1
 LDA SDATA ;get data
 PSHS A
 LDA #CLRTSU ;RTS=H
 STA SCMD
 PULS A,PC
*
*--------------------------------------
* send to serial port
* (use USART 8251A)
*    port <- A
*
SNDCH EQU *
 PSHS A
 LDA #SERTSUS ;RTS=L
 STA SCMD
 NOP
SND1 LDA SSTS
 ASRA
 BCC SND1
 PULS A
 STA SDATA ;send data
 PSHS A
SND2 LDA SSTS
 BITA #TxEMPTY
 BEQ SND2
 LDA #CLRTSU ;RTS=H
 STA SCMD
 PULS A,PC
*

6850では同時にイネーブルにしても何の不都合もありませんので、8251Aのこの制約は何なのだろうかと思います。
知っている方には常識かもしれませんが、どなたかのプログラミングの参考になればと思いますのであえて書き記しておきます。

プログラムですが、メモリ節約のためにすべてに対応するプログラムではなく、別々のプログラムとしました。
 FM-7(8251Aカード)用     :WINDRVU7
 FM77AV40SX(内蔵8251A)用  :WINDRVUX
 FM-7/FM77AV40SX共通(6850+FT232RL用):WINDRVA
            (6821+FT245RL用):WINDRVP (要RTS制御)
の4種類です。


動作中の様子


各部の接続の様子を示します。左上に見えるのがシリアルメモリからDISK-BASICを起動するカードで、プリンタポートに接続されており、電源は拡張ポートから取っています。
左が自作の拡張I/Oボードで、FM77AV40SX用に製作したものですが、インターフェースボードを介して32Pスロットに接続しています。

動作中の様子


Windows機上のFBasDrvWin.exeの画面です。DSKファイルだけでなく、D77ファイルも扱えます。

FBasDrvWin.exeの画面


RS232Cカードと拡張I/Oボードへのケーブルの接続の様子です。

RS232Cカードと拡張I/Oボードへのケーブル


拡張I/Oボードへのインターフェース基板です。単なるピン配置の変換のみです。

拡張I/O ボードへのインターフェース基板


プログラムのインストール方法

インストールするためのF-BASICプログラムを用意しました。インストールの手順書を添付しましたので、そちらをご覧ください。


プログラムの使用方法


(1)FM-7,FM77AV40SX側
起動時にドライブ数として4を指定します。
LOADM "x:WINDRVxx",,R と入力して、必要なプログラムを起動します。

(2)Windows側
FBasDrvWin.exeを起動します。
起動時に同じフォルダ中に.INIファイルがあれば、それを読んでポート番号、ボーレート、ハンドシェークを設定します。
ボーレートはFM77AV40SXで8251A使用の場合のみ19200baud、その他は38400baudです。
処理するディスクファイルをDrive 2や3のボックスにDrag/Dropします。
ディスクファイルの形式はDSK形式とD77(D88)形式のどちらにも対応しています。
ファイルリスト欄でファイルの追加、削除、名称変更ができます。

【制約】2DDディスク対応について
FBasDrvWin.exeは2DDディスクファイルに対応するように制作してありますが、WINDRVxxの方は現在のバージョンではF-BASIC V3.0にのみ対応しています。
F-BASIC V3.3では$FC30からの領域を使っているのか、それとも裏RAMの$8000からの領域を使っているのか不明です。保存領域をずらしてみたりしているのですが、今のところ動作させることができていません。もしかしたらBIOSそのものの場所がV3.0とは違っているのかも。(F-BASICのことは良く分からない。。。)

(FBasDrvWin.exe単独で2DDディスクファイルを処理することはできますので、例えばこれを用いて作成したディスクファイルをエミュレータXM7で使用することもできます。)

(3)F-BASICで扱うファイルの形式(の一部)
(3-1)BASICファイル(アスキーセーブ)
先頭に改行($0D,$0A)があればBASICアスキーファイルと解釈される。
(3-2)BASICファイル(バイナリセーブ)
先頭からプロテクトフラグ($FF,$FE)、UNLIST開始行番号、以降にテキストが続く。
(3-3)機械語ファイル
先頭から$00、データ長(2バイト)、格納開始アドレス(2バイト)、データという形のデータブロックが一つだけ。最後に$FF、ダミー(2バイト)、入り口番地(2バイト)という形の終了ブロックが続く。

WinodwsからファイルをDrag/Dropで追加する場合、先頭の文字を見て、以上の3つを判別してディスクファイルに格納しています。
例えばBASICプログラムをWindows上で作成する場合は、先頭に空行を入れておけば良いということです。また、機械語ファイルの場合はS-format形式あるいはHex-format形式にして放り込めば、機械語ファイル形式に変換されて保存されます。

終わりに


もう使わないだろうと思ってFM-7の5インチ・3.5インチディスクシステムやディスプレイ一式を処分してしまっていたのですが、63C09カードなどがあるので全てを処分するには忍びなく、本体2台とソフトだけは残しておいたのですが、これでフロッピィを使わずにDISK-BASICを使うことができるようになりました。
カードを下さった日本橋電気街徘徊日誌さんに感謝いたします。

制作したプログラム(WINDRVxxはソースとバイナリ、FBasDrvWin.exeはバイナリのみ、インストールに使用するBASICプログラム)をOneDriveに上げておきます。

蛇足というか愚痴というか...
しかし、32Pスロット用のコネクタは入手しにくいですね。1個1,000円近く出せば入手できるようですが高すぎる。ちょっと前には秋葉原の通販で少しは安く買えたのですが、今回注文したら、何と入荷が11月半ばだそうです。(でも待つしかない、トホホ)
手持ちももう切らしているので、工作が進まない。。。



2019年8月26日月曜日

FM77用の拡張I/Oボード、ROM/RAMディスクボードのプリント基板化が完了

6月12日のブログで紹介しましたFM77用の拡張I/Oボード、ROM/RAMディスクボードのプリント基板が完成しました


拡張I/Oボードの方は比較的単純な回路なのですが、ROM/RAMディスクボードはソフトに合わせて回路をかなり変更したのに、変更記録を完全に取っていなかったこともあり、製作時の記憶をなかなか思い出せず、KiCadの回路図に起こすのにかなり苦労しました。

例によって、勘違いによるミスもあり、修正を余儀なくされましたが、そう大きな修正でもなく何とか修正できました。
今回のミスで最大のものは同じピン数のコネクタで番号配置の異なるものを部品指定してしまったので、配線がでたらめになってしまったことでした。

でも、格安基板の10cmx10cmまでというサイズに収めるためにかなり無理をしましたがなんとか収まったので良しとします。

制作した基板を示します。
右が拡張I/Oボードで、左がROM/RAMボードです。

右:拡張I/Oボード、左:ROM/RAMボード

下画像のように2枚を重ねた状態で使用できます。


重ねた状態

それぞれの基板の回路図を示します。

拡張I/Oボード


ROM/RAMボード


それぞれの基板の部品配置です。
(1)拡張I/Oボード
FM77AVの拡張ポート(アンフェノール50P)に接続します。基板上の68B21にはAE-FT245RL、68B50にはAE-FT232RLとMAX232が接続されており、他に68B40(PTM)があります。(AE-FT232RLとMAX232は排他使用です。)


拡張I/Oボードの部品配置

(2)ROM/RAMボード
68B21を1個のみで4MbitのROMとRAMを制御しています。
ROMとRAMのペアが2組あり、それぞれスイッチで切り替えます。私はFLEX9システムとOS-9システムとで使用しています。RAMはバッテリバックアップされています。


ROM/RAMボードの部品配置

私の使用機器はFM77AV40SXなので、拡張ポートはアンフェノール50P ですので、途中で50Pフラットケーブルに変換して接続しています。
基板の入力を50Pフラットケーブルにしたのは、FM-7でも使用できるようにと考えたからですが、残念ながら、FM-7の拡張ポートには2.5MHzのクロックが出ていませんし、ピン配置等も異なりますので、そのままでは接続できません。
むしろFM-7の場合には、32Pの拡張コネクタの方が必要な信号が揃っていますので、こちらに接続するべきかもしれません。


左がFM77からの50Pケーブル、右がWindows機へのUSBケーブル

これらの基板のみで使用する場合は、本体のドライブが0と1で、ROMがドライブ2、RAMがドライブ3という形で使用することになります。
FLEX9やOS-9のディスクドライブルーチンをフックして、ドライブ番号が2と3の時のみROMやRAMをアクセスするように切り替えるルーチンを追加します。

さらにWindows機上の仮想ドライブを使用する場合には、ドライブ3や2を仮想ドライブに切り替えるルーチンを使用します。使用するFlexDrvWin.exeは以前公開したものがそのまま使えます。

現在は、F-BASICでも使用できるように、FbasDrvWin.exeを作りましたので、F-BASIC側のディスクドライブルーチンをフックするプログラムを作っているところです。



[蛇足]+++++++++++++++++++++++++++++++++++++++++++++
手持ちの過去の製作物でプリント基板化したいものとしては、もう一つ、数十年前に製作したFM-7用のFDD基板があります。


MB8877A使用のFDD基板(表面)

長い間、この基板の先に5インチ2台と3.5インチ2台のフロッピードライブを計4台接続して使用していました。

同(裏面)

今となってはドライブも処分してしまいましたし、特にプリント基板化して製作する必要もないのですが、捨てるのもためらわれるので未だに手元に置いてありますので、プリント基板化して資料として保管しておいた方が良いかなと思うわけですが、迷っている理由が2つあります。
(1)ICが20個もあるので格安基板の10cmx10cmには収まりそうもないのでコストがかかりそう。(恐らく12cmx8cm位になりそう)
(2)昔の製作物なのでデータセパレータとして、アナログでなくデジタルセパレータのFDC9216Bを使用しているので、現在のものよりも性能は落ちる。(特に不都合はないが)
ということで、FDC9216BとMB8877Aは予備も複数保管してあるのですが、KiCadで回路図を書き上げたところで止まっています。
アイディアとしては、現在普通に出回っているパソコン用の3.5インチFDD(2DD,2HD)をFM-7で使用できる基板にすれば使い道があるかなと。STEP信号を2倍にする回路を付加すればできそうな気がするのですが、まだきちんと追及していません。



2019年8月16日金曜日

FM-7/77用のRS232Cカードを作りました

富士通純正のFM-7/77用RS232Cカードの回路図を元にして基板を作りました。


YSFLIGHT.COMさんが富士通純正のRS232Cカードの回路を解析して回路図を公開されていましたので、私もその回路図を元にして作成してみました。

以前、FM-7でZ80カード(とCP/M-80)やOS-9Level1を使用していた頃はRS232Cカードも所有していたのですが、FM77AV40SXがメインになってからは、もう使うことは無いだろうと思ってFM-7一式を処分してしまいました。
ところが最近になって、FDDの代わりにSDカードやWin上の仮想ドライブなどを用いてFM-7を使うという試みをネット上で見ることがあり(shuji_akita2001さん、日本橋電気街俳諧日誌さんなど)、自分もやってみようということで放置してあった残りのFM-7を2台引っ張り出してきました。

まずはWindows機と通信ができなければ話にならないということで、shuji_akita2001さんから頂いたFT-245を用いた基板を使用して始めていました。
そんな中で、YSFLIGHT.COMさんのブログを見て、純正と同じボードを持っているのも悪くないな、FM-7が2台あるのだから2枚作れば良いかなと思って作ることにしました。

YSFLIGHT.COMさんが公開された回路図を見ると75188と75189を使っているので、今どきこれはないだろうということで、この部分をADM232に置き換え、さらに格安基板にするために10cmx10cmに収めることを目標に作成しました。
その結果、ADM232がIN/OUTそれぞれ2セットしかないので8251AのDTRとDSRは未接続となり、純正とは完全互換ではなくなりましたが、この2つを使用したソフトはまずないだろうと考えました。結局、10㎝×8cmのコンパクトな基板が出来上がりました。

回路図を下に示します

回路図(間違いあり)

実はこの回路図には1箇所間違いがあります。ADM232のピン2に接続されているC17はGNDではなくVCCに接続しなければなりません。

間違いを修正して無事に動作したと言いたいところですが、修正中に誤って隣のラインもカットしてしまったことに気づかず、送信はできるのに受信ができないという変な現象に悩まされることになりました。全配線を確認する作業の後、ようやくカットされた箇所を見つけて修理、無事に動作しました。

YSFLIGHT.COMさんは、C-MOSの8251Aなら38400baudで動作したと書かれているのですが、私のところでは、’83年製の8251Aでも38400boudで動作しました。(短いデータの通信しかしていませんが...)

動作している様子を示します。
F-BASICのプログラムでWindows機のTeraTermに送信し、TeraTermからファイル送信されたデータを受信して表示しています。38400baudで動作しています。


動作画面

下画像のようにRS232Cカードから自作のストレート/クロス変換ボードを通してRS232C-USBケーブルでWindows機に接続しています。
また、ディスプレイですが、以前使用していたXRGB-2は処分してしまったので、画像にあるようにFM-7のグリーンディスプレイ端子から自作のケーブルでI-O DATAのTVBOX2のコンポーネント端子に接続し、RGB出力をCENTURYのLCD-10000Vに入れています。
これでも80x25で表示できています。

接続の様子

基板の装着状態です。フラットケーブルで取り出せば、カバーを閉じることができます。

基板のアップ(1)


基板のアップ(2)

基板の表面と裏面を示します。
実は製作で最も時間がかかったのはD-Sub9ピンの工作です。使用したのはD-Sub9ピンのメスコネクタのL字タイプのものです。これの余分な個所をヤスリで削り、ピンをストレート状態に直してハンダ付けしています。(もう少し削って薄くした方が良かったようです...)

完成基板と生基板の表面


同裏面(本来不要な修正線が入っている)

ということで、無事に38400baudで動作するRS232Cカードが出来上がりましたので、FDDもカセットテープもない素のFM-7ですがプログラムを送り込んで動作させることができそうです。

今は、FLEXやOS-9と同様なF-BASIC用の仮想ドライブ構築ソフトFbasDrvWin.exeを作成してありますので、F-BASIC側のDISK BASICのFDDアクセスルーチンをフックして仮想ドライブをアクセスするように切り替えるルーチンを作成中です。
(それにしても、F-BASICをほとんど使用したことがないので良く分からないことが多い...)
素のFM-7なので保存する手段がなく、FM-7側の切り替えルーチンを送り込んで動作を確認という作業を繰り返すのにこのカードを使用しています。
完成すれば、このRS232Cカードではなく、shuji_akita2001さんの基板に置き換えて高速化を図る予定です。

回路図を公開していただいたYSFLIGHT.COMさんに感謝いたします。


2019年7月31日水曜日

FM77AVにPS/2キーボードを接続する変換器の基板化

FM77AVにPS/2キーボードを接続するためのキーコード変換器のプリント基板化が完了


6月12日のブログで紹介しましたキーコード変換器をプリント基板化しました。
ドジをして作り直したものですから時間がかかってしまいました。。。

右:製作した基板, 左:完成した基板

画像左が完成した基板です。現用のものではリセットスイッチを使用することがなかったので、回路図にはありますが実装していません。



ケースに収めた様子

TAKACHIのケースSW-50に収めた様子。予定通りピッタリです。
左のMini DINコネクタにPS/2キーボードのコネクタを、右の4ピンヘッダにFM77へのケーブルを接続します。(機種交換の予定がなければ、4ピンヘッダを用いずにFM77へのケーブルを直接ハンダ付けする方が良いでしょう。)


本来は自分のための製作物で、公開する予定はありませんでしたが、ご希望がありましたので公開することにしました。
前回のブログのコメント欄にも書きましたが、ごく普通の用途で使うことを想定しており、ゲーム等での早打ちには対応しておりませんので、そのつもりで使っていただければと思います。キーコードとキーコードの間に若干のウエイトを入れないとキーコードを正しく認識できなかったためですが、ソースも公開しますので、必要なら修正することも可能かと。。。
(そもそも、実用になるものが必要な方は商品として販売されているものがありますので、そちらを使用される方が良いと思います。)


回路図


回路図
注意! 回路図中のコメントのうち、FM77の機種ごとのピン配置は全てが正しいとは限りません。(実機を所有しているのはSXのみですので、他はネットの情報です。)

部品表    

  
    基板     専用プリント基板あり
    IC1      ATtiny85-20PU
    J1        ピンヘッダ 4pin(ケーブルを基板に直結する場合は不要)
    J2        MiniDIN-6 メスコネクタ
    SW1    タクトスイッチ(特にリセットが必要な場合もないので不要かも)
    C1       47uF 16V
    C2       0.1uF
    C3       0.1uF
    R1      10kΩ
    R2      4.7kΩ
    R3      4.7kΩ
    ICソケット  8pin
    ケース タカチ SW-50(必要なら)
    ケーブル S端子付き(FM77AV40SX)
    ケーブル モジュラー付き(4芯:FM77AV, 6芯:FM77AV20/40, EX)


製作上の注意点


回路は簡単ですので、専用プリント基板でなくユニバーサル基板に手配線してもそれほどの手間ではありません。私も手配線でまずATtiny2313で作り、小型化するためにATtiny85で作り直し、それを常用して3年以上になります。

注意すべき点は、本体に接続するコネクタです。
注意点は2つあります。
一つ目は機種によるコネクタの違いがあることです。
私のようにFM77AV40SXを使用している方はオーディオ用のSケーブルが使えるのですが、SXよりもFM77AVやAV20/40(EXも)を使用しておられる方が多いと思います。その場合はモジュラージャックの4極4芯(4P4C)か6極4芯(6P4C)となります。型番が不明ですがRJ-9,-12,-22などと呼ばれているようです。

二つ目はコネクタのオス・メスの違いに留意することです。ネットの情報は注意して見ないと本体側かケーブル側かがあいまいなものがあります。
特にSケーブルの場合は、間違えるとVCCとGNDが逆になりますので、最悪PS/2キーボードを破損します。(私が経験者です...)


特殊キーの割り当て


特殊キーについては次のように割り当ててありますが、ソースがありますので自由に変更できます。
 FM77 <--->PS/2 Key     
    DUP          F11
    HOME       F12
    BREAK      Kanji
    GRAPH      L_ALT, R_ALT
    EL            L_Win, R_Win
    CLS          ScrLk


ソフトの使用上の条件


本ソフトは上記のようにアマチュアが自分で使用するために制作したものであり、機能・性能上の不備がありますが、それを承知していただければ自由に使っていただいて結構です。
使用にあたっては、以下を守っていただくことを条件とします。
(1)このソフトを使用した結果、いかなる損害が生じても私は責任を負わないこととします。
(2)本ソフトはですくまさんが解析し、ブログ「ですくま備忘録」で公開してくださった貴重なデータがあって初めて制作できたものですので、ソフトのソースからですくまさんの名前を消さないこと。
(3)同様に、本ソフトはapplication note AVR313を使用させてもらっていますが、私が独自に作成した箇所もありますのでソフトのソースから私の名前も消さないこと。
(4)商用になるほど完成度の高いソフトではないので杞憂とは思いますが、本ソフトあるいは改変したソフトを商用利用しないこと。

さらに、これは条件ではありませんが、バグの修正を含めてソースの改変は自由ですが、その際には、そのソースを公開するとともに、私にもフィードバックしていただけるとありがたいです。(メールでも、このブログでも結構です。)

ソフトの公開


制作したソフトと回路図をMicrosoftのOneDriveに公開します。
cnvps2fm_tiny85.hexが実行ファイルですので、これをそのままATtiny85に書き込んでもらえば動作します。ただし、ソースファイルの先頭に書いてありますが、Config bitの変更を忘れないでください。


プリント基板を配布します


プリント基板の余分がありますので希望される方がおられましたらお譲りします。
(1)プリント基板のみ(118円 送料82円 計200円)
(2)プリント基板とプログラムを書き込んだATtiny85のセット(330円 送料120円 計450円
[8月16日訂正]厚さが1cm以内で収まりますので送料は82円で合計412円です。
(3)多分おられないとは思いますが、完成品を希望の方はご相談ください。(お持ちのFM77の機種によってケーブルが変わりますので。但し、ケースの穴あけはご自分でお願いします。) (1500円 送料140円 計1640円)
という形を考えています。

ご希望の方は、自己紹介のページにOld68funのメールがありますので、そこから希望の番号(1~3)を記してご連絡ください。折り返し、振り込んでいただくゆうちょ銀行の口座をお知らせします。枚数に限りがありますので、希望の方が多い場合は先着順とさせていただきます。ご容赦ください。

2019年7月15日月曜日

ようやくプリント基板ができたと思ったら

FM77AVにPS/2キーボードを接続する変換器のプリント基板が...失敗!


本日ようやくプリント基板が届きましたので、早速組み立てようとしたら...
何と、PS/2キーボード用のコネクタが逆向きでした。。。ドジ!


なんとPS/2コネクタが内向きだった


さらに、PS/2コネクタとしてMiniDIN-6pinのフットプリントを使用したのですが、ピン間隔が現物(秋月電子で購入)と微妙にずれているようで、すんなりと入りません。
フットプリントの修正も必要なようです。

現在使用中のものは手配線でしたが、これぐらいの回路はプリント基板化するのも簡単だろうとナメていたようで、反省しています。もっと慎重に進めなければ。。。

これでは何ともなりません。作り直しということで、完成はさらに一ヶ月後ということになりそうです。

2019年7月7日日曜日

Pic24CPM-80とPic24CPM-68kマイコンボードの製作記

skyriverさんが公開されている2種のマイコンボードを製作しました


最近は、本業(?)である68系から離れて、CP/Mの走るボードを作ったり、CP/Mソフトの使い方を練習したりしていますが、CP/M-68Kをいじってみたいという動機からです。
ということで、またまたCP/Mマイコンを製作しました。

製作したのは、CPUとMemoryの他にはPic24FJ64GA004だけという3チップマイコンです。skyriverさんはCPUにZ80と68008を用いたボードの設計・製作の経過をブログにアップされており、さらに製作手順のまとめを詳細な説明付きで公開されていますので、両方とも製作してみました。

上:Pic24CPM-68K,下:Pic24CPM-80

左:Pic24CPM-68K,右:Pic24CPM-80

CP/M-80の走るZ80ボードについては、中日電工さんのND80Z3.5を所有している上に、興味本位でJust4FunさんのZ80-MBC,MBC2を製作しましたので、これ以上は必要がないといえるのですが、skyriverさんの説明がとても丁寧でしたので、CP/Mの知識がほとんどない自分にとっての練習のためという動機もありました。

製作してみた結果ですが、SDカードのアクセスのSPI通信に結構工夫されているせいか
立ち上がりもSDのアクセスも速く、とても軽快で、使いやすいという感想を持っています。
また、独自のpicleというpic24FJ用コンパイラ(インタプリタも)を自作され、それを用いてシステムを構成されているのも興味深いですし、Z80,68Kの両方で同じ操作性のスクリーンエディタsked (Z80用68K用) も作られているので、ソフトの開発がしやすいと思います。

[1]Pic24CPM-80製作記
目標は68Kの製作でしたが、CP/Mの知識がほとんどないので、練習のつもりで、まずPic24CPM-80を製作することにしました。
skyriverさんのブログのここに「3チップ構成Pic24CPMマイコン(CP/M起動までの作業まとめ)[Z80]」という手順説明がありますので、その通りに進めていけば動作させることができます。

基板についてですが、skyriverさんがガーバーデータを公開されておりますので、それを元に基板を製作しましたが、表面実装部品を使用するものでした。残念ながら表面実装部品の手持ちがなかったのでKiCadで回路図を書き直し、そのガーバーデータで作り直しました。
(skyriverさんの方はシンプルで見栄えも良いですが、私の方はそれに比べてゴチャゴチャしていますね。。。残念!)


Pic24CPM-80 表面

Picの書き込み端子のVCCとSDコネクタのケースグランドを忘れていた

起動直後の画面


SDアダプタのケースがグランドに落ちていなかったり、表面のシルクのレイヤーを入れ忘れたりなどのミスはありましたが、無事に動作しました。



[2]Pic24CPM-68K製作記
続いて、Pic24CPM-68Kの製作に進みました。Pic24CPM-80と同様、KiCadで回路図を書き直し、そのガーバーデータで基板を作りました。

Pic24CPM-68K 表面

回路図では交差しているだけなのに接続されていたというミスあり

起動直後の画面


これにも若干のミスがありましたが、無事にメモリ書き込みテストまで確認できました。
私が作り始めた時には製作手順は公開されていなかったこともあり、第2段階のHello表示でつまずき、どうにもならず、skyriverさんに助けを求めてしまいました。
その結果、Pic24用のプログラムだけでなく、製作手順をここに、「3チップ構成Pic24CPM68Kマイコン(CP/M-68K起動までの作業まとめ)[68K]」として公開していただけました。(なお、ガーバーファイルも公開されています。)
そのおかげで、すんなりと動作させることができました。

これで念願だった68000を使うツールとしてのCP/M-68Kを手中にすることができました。また、上にも書きましたが、Z80にも68Kにも共通のスクリーンエディタも使いやすいものを用意してくださっていますので、CP/Mのソフト開発に力を入れることができそうです。skyriverさんに感謝いたします。

2019年6月12日水曜日

FM77用の拡張IOボード、ROM/RAMディスクボード

FM77用の拡張ボードを紹介します


最近はソフトの手直しばかりで、とりたてて紹介するものがありません。そこで、以前製作して今でも使用しているFM77用の拡張ボードを紹介します。
このボードのために制作した、Windows上で仮想ドライブを実現するソフトFlexDrvWin.exeがこのブログのシングルボードマイコンを製作するベースとなったと言えるものです。

製作したのは、FM77AV40SX用のIO拡張ボードとROM/RAMディスクボードです。
私はFM77AV40SXでFLEX09とOS-9Level2を使用しているのですが、2DDフロッピーはかなり遅く、また、ドライブもメディアもいつまで使えるのかも分かりませんので、何とかFDDと縁を切りたいと思っていました。

色々と考慮した結果、手持ちのFM-7とFM77AV40SXに共通して装備されている50ピンのIO拡張コネクタを利用して、まずIO拡張ボードを作り、それに接続する形のROM/RAMディスクを製作することとしました。

製作したIOボードとROM/RAMボードを下に示します。

下がIO拡張ボード、上がROM/RAMボード

上部の空ソケットには512KBのSRAMを装着してRAMディスクとして利用していましたが、後述のようにWindows上の仮想ドライブに切り替えたので不要となりました。

左がIO拡張ボード、右がROM/RAMボード

今では、こんな配線をする気力はもうないかも...

それぞれの裏面配線の様子



ROM/RAMボードの構成を下に示します。
RAM/ROMボードの構成


6821によるROM/RAMディスクのアクセス方法を下に示します。
6821によるTrk,Sct番号のセット方法


IO拡張ボードには、6821PIA、6850ACIA、6840PTMが搭載してあり、6850にはRS-232Cシリアルインターフェースが、6821にはFT-245パラレルインタフェースが接続してあります。どちらも38400baudです。
ROM/RAMボードには、512KBのROMとRAMのペアが2組あり、それらを6821PIAが制御しています。RAMはバッテリバックアップしてあります。
ROM/RAMディスクの容量は
 4Mbit(512KB)では Trk 64、Sct 32 で(64-1)*32=2016セクタ
 2Mbit(256KB)では Trk 32、Sct 32 で(32-1)*32=  992セクタ
 1Mbit(128KB)では Trk 16、Sct 32 で(16-1)*32=  480セクタ
となります。

2組あるのは、FLEX09用とOS-9用で、それぞれをスイッチで切り替えて使用します。
(端にあるソケットはROMライターですが、未完成です。)

記録を見ると、2014年12月末から作り始めて2015年3月初めにハードは完成していますが、実用になる制御ソフトの完成には年末近くまでかかっています。

最初はROM/RAMディスクとして使用


FLEXでは実質4台までしかドライブが接続できないので、
ドライブ0:内蔵ドライブ0
ドライブ1:内蔵ドライブ1
ドライブ2:ROMディスク
ドライブ3:RAMディスク
として利用することになります。
内蔵ドライブ0のシステムディスクで起動し、その後、システムドライブを2に、ワークドライブを3に切り替えれば、フロッピーを使用せずに済みますので、結構快適になりました。

最初はシリアル/パラレルのインターフェースは実装していなかったのですが、ROM/RAMディスクのみでは結局、データ保存にフロッピーが必要なので、Windows上の仮想ドライブも追加することにしました。
FT-245モジュールを搭載しているのは、Windows上の仮想ドライブとパラレルインターフェースで通信したかったからで、作る前は、シリアルインターフェースでは遅くて実用にならないからパラレルでと思っていたのですが、実際に製作してみると、確かに転送速度は10倍以上違うのですが、DISKの読み書きに時間がかかるのでトータルの時間は少し速い程度であると分かりましたので、現在はシリアルも使用しています。

その時に制作したのが、6809シングルボードコンピュータでWindows上の仮想ドライブを実現しているFlexDrvWin.exeというソフトの原型で、このソフトのドライブ3にDSKファイルをセットすればFM77AV40SX上のFLEX09で読み書きできます。(OS-9の場合は別ソフトのOS9DrvWin.exeを使います。)

ドライブ3をRAMディスクからWindows上の仮想ドライブに変更


動作中の様子を示します。
手前がFM77AV40SXのディスプレイとキーボード、後方がWindows機です。
後方右上のWindows上のFlexWinDrvの画面で分かるように、ドライブ3にセットした仮想ディスクを読んでいます。


動作中の様子

画面表示


この拡張ボードによってデータ等はフロッピーでなくWindows上のファイルとして保存できるようになったのですが、起動時はフロッピーが必要です。これを解決するためにはフロッピーエミュレータが必要ですが、まだ製作できていません。。。

ドライブ2も仮想ドライブに変更


現在は、FLEX09システムのドライバールーチンをさらに書き換えて、ドライブ3だけでなく2もWindows上の仮想ドライブに設定変更をしていますので、FlexWinDrvのドライブ2と3に仮想ディスクをセットして使用しています。(結局、ROMディスクもRAMディスクも使わなくなってしまった。。。)

[蛇足]画像で分かりますように、FM77AV40SXの純正キーボードは使用せず、大切に保管してあります。代わりに、自作のキーコード変換器を接続したPS/2キーボードを使用しています。さらに、内蔵ドライブも取り外して保管し、代わりに一般的なDOS/V機用のFDDを装着しています。
自作のキーコード変換器は下の画像のものです。
ATtiny85を使用したハードは簡単なものです。ソフトには結構苦労しましたが、FM77AVのスキャンコードをですくまさんが調べて公開してくださっていたので、とても助かりました。感謝いたします。

自作のキーコード変換器


資料の整理を兼ねて、手配線のボードをプリント基板化しようと考えています。無事に完成したら公開するつもりです。

2019年5月23日木曜日

SBC6303に自作6802ボードのモニタープログラムを移植

SBC6303に自作6802ボードのモニタープログラムを移植しました


しばらく前にSBC6303を製作していじっていたのですが、LILBUGがどうも手になじまず、結局、使い慣れている6802/6809ボード用のモニターを移植することにしました。
モニターのサイズが4KByteありますので、SBC6303ボードとBLボードを接続して32KByteのRAMを増設する必要があります。

6801系の命令は6800系の命令より拡張されており、特にXのPUSH,PULLとCPXのフラグ対応が有難い拡張で、プログラムがかなり組みやすくなっています。
Windows上でアセンブルしてできたMotorola S-formatのファイルをSDに書き込んでセットし、Arduino Proのリセットボタンを押すとSD内のファイル一覧が表示されます。
そこでSBC6303ボードのリセットボタンを押すとファイルが表示順に起動します。下の画像では、最初にLILBUGが起動し、さらにリセットボタンを押すことで6303MONが起動しています。

起動画面とコマンドリスト

コマンドリストは画像の通りです。私の自作ボード用のモニターとの違いはLoad,Saveコマンドです。
機能を同等にしたかったのですが、内蔵シリアルインターフェースが一つしかないのでLoad,Save機能は同等にできません。やむを得ず、LoadはTeraTermのファイル送信機能を利用することとし、Saveは画面にMotorolaのS-formatで表示し、それを画面からコピペでWindowsに保存することとしました。(従って、SaveではなくPunchコマンドです。)
コマンド入力ラインではASSIST09と同様に、アドレスは何桁入力しても最後の4桁のみが有効で、データでは最後の2桁のみが有効です。

Loadコマンドは、L(Retern)と入力した後、TeraTermの「ファイル送信」でLoadしたいファイルを指定します。
なお、Loadコマンドでは、9600baudは遅いので、TeraTermの送信遅延を下の画像のように設定する必要があります。


Loadコマンドの設定

Load中は、S-formatファイルの各行の先頭アドレスが表示されますので、どこまで読み込んでいるかが分かります。最後に実行アドレスが(あれば)表示されます。


Loadコマンド

Punchコマンドでは、Pに続いて開始アドレスと終了アドレスを入力します。実行アドレスは入力してもしなくても構いません。下の画像のように画面にS-format形式で表示されますので、これをコピペしてWindows上で名前を付けて保存します。

Punchコマンド

最後に


6801系のプログラムは6800よりもかなり組みやすくて良いのですが、ベースページの$00から$14までをCPUが使っているので、アプリケーションでの使用が制限されてしまうのが残念です。これさえなければ、6802を捨てて移行できるのに。。。

移植にあたっては、結構引っかかることが多く、アセンブルしては走らせて、結果を見ては修正を繰り返しました。最初はEP-ROMを1ダースほど並べて焼いては取り付けて実行・修正を繰り返していましたが、途中でSDに書き込めばよいと気づいてからは、かなり効率が上がりました。それにしても、SD中のファイルをリセットで順に起動するというVintagechipsさんのアイディアには感心しますね。
(なお、アセンブラですがツールは全て自作するという方針を一時棚上げにして、arcpitさんのX6801を使用させていただきました。感謝です。)

出来上がったSBC6303用のモニタープログラムのソースとS-formatをOneDriveに上げておきます。S-formatファイルをそのままSDに書き込めば動作します。ソースをつけておきますので、より使い易いように改造も可能です。

これで、6800,6809,6303で共通した操作性で扱うことができます。
また、Leo_yumesichiさんがSBC6800,SBC6809に移植されたので、68系のSBCで同じ操作性のモニターが動くことになりました。(使われる方がどれだけあるのかは疑問ですが。。。)

2019年5月14日火曜日

SBC8080でmcroPASCAL80を走らせる

SBC8080(CPUボード+SUBボード)でmicroPASCAL80が走りました


4月27日のブログで、SBC8080でGAME80が動作したと報告しましたが、それを見てくださったskyriverさんが、CP/M80上でGAME80インタプリタだけでなく、コンパイラも走らせました。それを参考にして、私のSBC8080でもコンパイラを走らせることができました。

GAMEIIIは68系で使用していましたが、アセンブラよりも手軽にコンピュータを自由にあやつれるのはとても魅力的ですが、プログラムの可読性がいまいちだなと思うのは私だけでしょうか。(私が慣れることができなかっただけ?)その頃はUCSD PASCALにあこがれていましたね。

GAMEIIIより1年半ほど後に、丸山定信さんによりASCII誌(1980年1月号)にmicroPASCAL80が発表された時は、68系の私はうらやましくてただ指を銜えて見ているだけでした。
ようやく11月号に河崎道明さんによってmicroPASCAL68が発表され、当然私も5KB近いバイナリを頑張って入力しました。今でも、私の自作6802基板で動いています。

今回、SBC8080基板を製作し、GAME80が動いたので、当時あこがれていたmicroPASCAL80も走らせてみることにしました。
丸山さんの発表ではソースリストも掲載されていたのでアドレス変更も含めて楽勝だと思ったのですが、当時の放電プリンタの文字には悩まされましたね。
動くことは動くのですが、変数の代入ができないという変な状況に悩まされましたが、何回も見直した結果、ソースの入力間違いが一文字あるのをようやく見つけ、それを訂正して無事に動作しました。

ということで、GAME80インタプリタ, GAME80コンパイラ, microPASCAL80の3つをSBC8080SUBボード上のROMに入れ、モニタから自作のLoadコマンドで選択・実行する形で仕上げました。

(1)GAME80インタプリタ 元がソースでなくバイナリなのでそのままのアドレス8600hからのバイナリファイルをROMの7800hからに収めるようにHEXファイルに変換します。→ GAME80-7800.hex
(2)GAME80コンパイラ 元はGAME80のプログラムですからGAME80インタプリタの動作中に読み込めばよいのですが、その手間を省くために、予めメモリ中の保存形式に変換してROMに収めておき、メモリのA000hからに転送します。ROMの6000hからに収めるようにHEXファイルに変換します。保存形式への変換は前回のブログで公開したCvtMotHexBin.exeを使っています。→ GAME80C-6000.hex
  [5月25日訂正]変換用のプログラムはCvtMotHexBin.exeではなくChglno.exeです。
(3)microPASCAL80インタプリタ 元がソースですのでオリジナルの2000hからの開始アドレスを8000hに変えてアセンブルします。できたバイナリをROMの4800hからに収めるようにHEXファイルに変換します。→ MPas80-4800.hex
(4)Loader ソースは7F00hからですので、そのままアセンブルしてHEXファイルに変換します。 → LOADER.hex
(保存形式への変換、HEX形式への変換には前回のブログで公開した自作のChglno.exe, CvtMotHexBin.exeを使っています。)


ROM中の配置図


[5月16日訂正]上図中のGAME80インタプリタとGAME80コンパイラの位置が入れ替わっています。正しくは、コンパイラが6000hからで、インタプリタが7800hからです。

これら4つのHEXファイルを、SBC8080のdatapck中のPTBEXSA.HEXファイルの後ろにつけてROM用ファイルの出来上がりです。

各ファイルの変更点をまとめておきます。
(1)GAME80 4月27日公開の「SBC8080でGAME80がようやく動作しました」に書いた通りです。
(2)GAME80C skyriverさんのブログにありますような変更・修正を加えます。
(3)MPas80 以下に変更・追加部分を示します。 

オリジナル
 2792 32D9 CDC003       BREAK:     CALL     PLIN
 2793 32DC FE03                    CPI      03H
 2794 32DE C0                      RNZ
 2795 32DF C30320                  JMP      START2
 2796                   ;
 2797 32E2 CDB903       GETCH:     CALL     GETCHR
 2798 32E5 CAE232                  JZ       GETCH
 2799 32E8 C3DC32                  JMP      BREAK+3

変更・追加部分
 2793 92D9 CDFA92       BREAK:     CALL     PLIN
 2794 92DC FE03                    CPI      03H
 2795 92DE C0                      RNZ
 2796 92DF C30380                  JMP      START2
 2797                   ;
 2798 92E2 CDF792       GETCH:     CALL     GETCHR
 2799                   ; JZ GETCH
 2800 92E5 00                      NOP
 2801 92E6 00                      NOP
 2802 92E7 00                      NOP
 2803 92E8 C3DC92                  JMP      BREAK+3
 2804                   
 2805                   ;++++++++++++++++++++++++++++++++++++++
 2806                   ;*  I/O ROUTINE
 2807                   
 2808 92EB F5           PUTCHR:    PUSH     PSW
 2809 92EC DB01         PUT0       IN       01H
 2810 92EE E601                    ANI      01H
 2811 92F0 CAEC92                  JZ       PUT0
 2812 92F3 F1                      POP      PSW
 2813 92F4 D300                    OUT      00H
 2814 92F6 C9                      RET
 2815                   
 2816 92F7 C37C00       GETCHR:    JMP      007CH
 2817                   
 2818 92FA 3E00         PLIN:      MVI      A,00H
 2819 92FC C9                      RET

(4)Loader 公開するファイル中にソースも入れてあります。(転送ルーチンは、松本吉彦著「私だけのマイコン 設計&製作」中の8080の解説から借用しました。)
(1),(2),(4)のいずれも、入力ルーチンはモニタ内のルーチンを使用しています。

下の画像は、起動・動作の様子です。例として入力したプログラムはmicroPASCAL68の記事中の階乗の計算プログラムです。

起動・動作画面

これで68基板と同様にGAMEとmicroPASCALという2つの言語が使えるようになりましたので、8080の機械語に触れずにSBC8080で遊ぶことができそうです。

(1)GAME80のバイナリとHEXファイル
(2)GAME80Cのメモリ保存形式に変換したものとそのHEXファイル
(3)MPas80のバイナリとそのHEXファイル
(4)LoaderのソースとバイナリのHEXファイル
と、これらを1つにまとめたものをOneDriveに上げておきます。

今となっては、誰でもが普通に高級言語が使えますので、GAMEやMicroPascalにそれ程の魅力は感じられないかとは思いますが、40年近く前に、信じられないぐらい機能的には貧弱なコンピュータ上でこれらの言語が動いていたことを思い返すと、感無量です。