ラベル FLEX の投稿を表示しています。 すべての投稿を表示
ラベル FLEX の投稿を表示しています。 すべての投稿を表示

2025年9月28日日曜日

FLEXをOS-9上で走らせる(OS-9パラサイトシステム)

 FLEXをOS-9 Level2システム上で走らせてみました

Oh!FM誌の1985年5月号に「OS-9パラサイトシステム FLEXをOS-9上で走らせる(佐藤富美雄さん)」という記事が掲載されていました。


Oh!FM誌1985年5月号の記事

私はFLEXをFM77AV40SXなどで使用しているので、OS-9上でFLEXを走らせるという発想に興味を持ち、以前、必要な7個のファイルを入力してSXの2DDディスク上で試してみましたが、もちろんシステムを構築できませんでした。

先日、FM-11AD2(OS-9L2付き)を入手して、何とか2Dドライブ上でFLEXを走らせることができました。(2HDドライブで走らせることは未だできていません。。。)

上記の記事では、どうもFLEXが2Dドライブで動作していれば良いようで、これならシステムを構築できるかもと考えました。さらに良く読むと、このFLEXシステムで使用しているのはFLEX.CORのみなので、私が所有しているVer 3.01(今はネットで入手可能)で実現できそうでした。

ということで、以前入力してあった7個のファイルを使用してパラサイトシステムを構築してみましたが、分かりにくい事などがあって結構手間取りましたので、整理を兼ねてここに経過を記しておきます。


◎システムの構築


 (必要なシステム)
 最小1台の2HDでOS-9Level2が、1台の2DでFLEXが動作していること。
 2Dドライブはシステム構築後は不要。

1.OS-9の/D0/CMDSに下記の3ファイルをセットする。
 Flex(モニター)、Newdisk_flex(仮想ディスク作成)、Mfd_dcopy(Flex丸ごとコピー)

2.FLEXシステムに下記の4ファイルをセットする。
 OO.CMD(FLEXのOコマンド相当)、II.CMD(FLEXのIコマンド相当)、SHELL.CMD(OS-9のShellを起動)、PRINT.SYS(OS-9上でプリンタへ出力)

3.2DディスクでFLEXを起動してパラサイトシステム用のFLEX.SYSを作成する。
このFLEX.SYSの実体は元のFLEX.CORに起動アドレス$CD00をAPPENDしただけのものです。(FLEXシステムとして必要なI/OはOS-9が担当するのでCORのみで良い)

4.2HDディスクでOS-9Level2を立ち上げ、Mfd_dcopyでFLEXを丸ごとOS-9に取り込む。
この時、保存するFLEXファイル名として、例えば/D0/FlexSysを指定すると、これがドライブ0として使用するファイルになる。

5.FLEXは4台までのドライブを扱えるので、Newdisk_flexを用いて、例えば/D1/FlexWk1のようにワークドライブを作成する。

以上でシステムの構築は完了。


◎使用法

1.OS-9Level2を起動する。

2.Flexモニターを実行し、そのSコマンドで仮想ドライブを設定する。

ドライブ0には/D0/FlexSysを、ドライブ1には/D1/FlexWk1を指定する。必要ならドライブ2,3も指定する。

3.GコマンドでFLEXが起動する。

4.Xコマンドでシステムドライブを、Dコマンドでワークドライブを指定できる。また、SHELLコマンドでOS-9のShellが起動する。

5.終了するときには、MONコマンドを実行してFlexモニターに戻ってからQを入力してOS-9に戻る。

起動の手順

オリジナルのCATコマンドを改良したCAT1コマンドの実行結果です。


現在のFlexSys中のファイル一覧

◎使用してみて

FLEXのI/Oルーチンのみを使用しているプログラムは正常に動作するはずですが、直接I/Oをコントロールしているものは動作しません。例えば、直接サブシステムを使用しているDUET(スクリーンエディタ)はダメでした。また、何故かFORTH77もダメでした。

私の場合はアセンブラASMBを使用することがほとんどなので、これが動作するのはとてもありがたいです。

最後に

OS-9はもちろん、FLEXなども使用している方はまずおられないと思いますので、何の参考にもならないのですが、以前何とかしたかったことがようやく実現できたという自己満足の記事でした。

(このシステムを実際に試してみようと思われる方はおられないと思いますので、記事から入力した7個のファイルを掲載することはしませんでしたが、試してみようと思われた方には連絡していただければお送りできます。)

ユニークな発想を実現された佐藤富美雄さんに感謝いたします。


2025年8月23日土曜日

FM-11の増設2DドライブにFLEX9を移植

 FM-11にFLEX9を移植する第一段階として増設した2Dドライブに移植してみました

私は今までFLEX9の使いやすさが気に入って使用しておりましたので、FM-11を入手した時からFM-7系で使用してきたFLEX9を移植したいと考えていました。

私が使用しているFLEX9は大昔TSC社から直接購入した8インチ版のV3.01で古いのですが、特に不都合もないのでFM-7, FM77AV2, FM77AV40SXに移植して使用しておりました。

(今はネットの情報を元にしてFLEX9システムを構築することができます。私のブログ「FLEXシステムの作成方法(その2)・・・より具体的に」にその構築手順を公開しています。)https://www.blogger.com/blog/post/edit/1662007451717538019/8762567690989530647

いきなりFM-11の5インチ2HDに移植するのは敷居が高いと思い、まず増設した2Dドライブで動作させようと考えました。

2Dドライブ版であれば、IPLをFM-11用に書き換えるだけで良いのではと考えたのですが、そのIPLに良く分からない部分があり、試行錯誤を繰り返すことになりました。そのため途中から増設2DドライブをGOTEKに置き換えて、そのhfeファイルを書き直しながら動作するIPLを作成しました。

2Dドライブ0をGOTEKに置き換えた様子です。


中央が置き換えたGOTEKドライブ

IPL作成の手順

FM-11のBootLoaderやIPLについての知識は全くなかったので、次のような手順でIPLを作成しました。

1.既にあるIPLを読む。
・純正のF-Basic5.0のIPL
・はせりん様のブログ「FM-11用F-BASICのページ」(http://haserin09.la.coocan.jp/fbasic11.html)中の2D版F-Basic5.0のIPL
・「F-BASIC V3.0をFM-11で走らせる」(Oh!FM誌1985年2月号、1986年8月号)のIPL
上記のIPLの作成者の方に感謝いたします。

2.上のIPLを逆アセンブルしてFM-11固有の設定を抜き出す。
・最初はIPLがどのアドレスに読み込まれるのかも分からず$100、$300、$400などを仮定しましたが、その結果、どうも$400らしいと分かりました。
・いずれもF-Basic用のIPLでしたので、FLEX9用のIPLに不要と思われる部分を削除しました。

3.FM-7系で使用中のIPLに2.で抜き出した設定を追加する。
・2Dドライブで動作させるのでIPLのみを書き換えれば、FLEX9システムは変更せずにそのまま動作するはずと考えました。

手順としては簡単ですが、何しろFM-11のハード、ソフトが良く分かっていないので理解できない個所も多く、何度も書き直しては試すことになりました。

結局、IPLのアセンブルリストを作成ー>アセンブルしてバイナリを生成ー>エディタ上でFM-7用のDSK形式のシステムディスクのトラック0,セクタ1,2に書き込みー>D77形式に変換ー>GOTEK用のHxCFloppyEmulator.exeでhfeファイルに変換ー>USBに書き込んでFM-11のGOTEKにセットして起動テスト、という手順をひたすら繰り返すことになりましたが、GOTEKのお陰で、ほとんどの作業がWindows上で行なえましたので大変助かりました。

最初にFLEX9が起動したときの画面はこのようでした。


初めて起動したときの画面

FLEX9の起動メッセージやSTARTUPに書き込んであるファイルのメッセージが表示されていることから、ディスク関係は正常に動作していると判断できましたが、CRやLFが機能していない上に文字化けも生じています。

最初はIPLでのFM-11の初期設定がおかしいのかと思い、あちこちを変更してみましたが変化はありません。次に、表示関係ということでFLEX9システム中のCONSOLEを見直しましたが、もちろんFM-7系で正常に動作している実績のあるルーチンですのでおかしいところがあるはずはありません。。。


不具合の原因はCONSOLE CONTROLだった

困りはてて諦めかけましたが、ついに原因を突き止めました。

何と、Display Sub SystemのCONSOLE CONTROLコマンドが拡張されて書式が変更されていたのです。

FM-7系:$00,$00,$0C(コマンド),$23(制御フラグ1バイト,デフォルト値)
FM-11 :$00,$00,$0C(コマンド),$06,$D3(制御フラグ2バイト、デフォルト値)

これに合わせて4バイトのCONSOLE CONTROLを5バイトに変更することで正常に表示されるようになりました。DISK DRIVERルーチンはDMAを用いていない通常のものでしたが変更の必要はありませんでした。


正常に表示された起動画面


6809 以下が起動メッセージ、次行が日付要求画面で続く3行はSTARTUPに書き込んである自作の常駐モニター、ROM/RAM/Windows仮想ドライバ、ラインエディタの起動メッセージです。

以上で、とりあえず2D版のFLEX9がFM-11に移植できました。
しばらく使用してみましたが、特に不具合はないようです。

次に作成したIPLルーチンを示します。
意味が分からないまま入れてある部分もありますので、ご指摘頂けると有難いです。

 


今後は

あとは、これを2HDに移植すれば良いのですが、DISK DRIVERは当然書き直す必要がありますし、さらにF-Basicと同様にトラック0、サイド0を128バイトで処理することやDISKの読み書きにDMAを使うことなどを考慮すると、結構手間取りそうです。。。


2025年3月10日月曜日

FM-7/77用仮想ドライブ構築ソフトのFT245高速カード対応版

FM-7/77用仮想ドライブ構築ソフトをFT245高速カード対応させました

===昨年から取り組んでいるいくつかのハードやソフトの作成がいずれもうまく行っていない状態なので、気分転換を兼ねて表題のことに取り組んでみました===

以前からFM-7やFM77AV40SXを使用する際にはWindows機上で仮想ドライブを構築して使用してきましたが、その際にはシリアル通信(RS232C)を使用していました。(CP/M版のみFT245カードを使用)

それについてはその都度公開してきました。

・「拡張ROM/RAMディスクボードと仮想ドライブ用のF-BASICドライバ」(2022年5月18日)

・「F-BASIC用のWindows版仮想ドライブ構築ソフトの改良」(2022年2月12日)

・「FM-7/77用の改良版I/O拡張基板用のF-BASICドライバを作成」(2021年7月8日)

・「FM-7用 60K CP/M-80 の仮想ドライブ版が完成」(2021年2月23日)

・「CP/M用の仮想ドライブの構築ソフト(その2)」(2020年5月2日)

・「CP/M用の仮想ドライブの構築ソフト」(2020年4月29日)

・「FM-7/77のF-BASIC用の仮想ドライブ構築ソフトが完成」(2019年9月25日)

・「FM77用の拡張I/Oボード、ROM/RAMディスクボードのプリント基板化が完了」(2019年8月26日)

・「FM77用の拡張IOボード、ROM/RAMディスクボード」(2019年6月12日)


しかし、現在はRS232C通信を使用することはほとんどなく、もっぱら「思いつきハードでソフトに七転八倒(https://vehwk3yxv7hw.blog.fc2.com/blog-category-2.html)」の秋田修二さんが作成されたFT245高速通信カードを使用させていただいています。

ということで、ここで全ての仮想ドライブ構築ソフトをFT245カード対応に切り替えることにしました。(もちろん、従来通りRS232Cも使えます。)

今回作成したのは以下のものです。

動作確認した機器:FM-7、FM77AV2、FM77AV40SX
対応DOS:F-Basic、Flex9

使用したFT245カードは画像のものです。

使用したFT245カード

これはVer2でTXE端子の制御機能が追加されており、スイッチで有効・無効を切り替えることができるものですが、この機能がないVer1でも同様に使用できます。


全体の構成図

詳解するソフトの機能を大まかな図で示します


機能の説明

図に示しましたように、Windows側では使用するDOSに合わせて仮想ディスク構築ソフト(FbasDrvWin.exe, FlexDrvWin.exe, Os9DrvWin.exe, CpmDrvWin.exe)のいずれかを実行します。使用する通信カードや通信ポートはiniファイルで指定したものが選択されますが、起動後に変更できます。

FM側のドライバですが、Flex9ではWINDRVの起動時のオプションでFT245カードとRS232Cカードに対応させていますが、F-Basicでは裏RAMに常駐させていてその常駐部を少なくするために、FT245カード用のWINDRV(もちろんFlex9用とは別ソフトです)とRS232C用のWINDRVX7という別々のソフトになっていますので、使用する通信カードに合わせて選択します。FM-7やFM77AV2用のオプションRS232Cカードは38400baudまで動作しますが、FM77AV40SXなどに内蔵されているRS232Cは19200baudまでです。


動作している様子

F-Basic (Ver3.0)の場合です。
FM77AV2でFT245カードを使用しています。

FbasDrvWin.exeの場合

Flex9の場合です。
FM77AV40SXの内蔵RS232Cを使用しています。

Flex9DrvWin.exeの場合

この画像中のDrive2や3のボックスにディスクイメージファイルをdrag&dropするとその内容が左下のリストボックス中に表示され、読み出し、書き込み、削除、名称変更ができますので、Windows機中のファイルをイメージファイルに書き込んだり、読み出したりできて、そのままFM機で扱えます。
右のボックス中のRで始まっているリストがFMのfilesコマンド(F-Basic)やCATコマンド(Flex9)でドライブ2と3を連続して読んだ時の様子で、仮想ドライブのリードしているドライブ、トラック、セクタを表しています。もちろんFM側ではそれぞれのドライブのファイル一覧が表示されています。

Windows側のFbasDrvWin.exeは以前から公開しているものですが、使用しているうちに必要になった機能として、有効なポートを検出する「ポートスキャン」、ポートの種類を選択する「Port Select」ボタンを追加した最新のVer1.53です。またFlex用も同様に機能追加してあり、FlexDrvWin.exeはVer1.73です。


FM機とWindows機との間のファイル交換の手段として

このファイル交換の手段としては、従来からRS232Cによるものがありますが、使いやすさや速度面での問題がありました。それを改善するものとしてFT245カードを使用する方法があり、ディスクイメージファイル全体の転送や単一ファイルの転送用のソフトを作成してきました。速度的には大幅に改善されたとはいえ、それでも、毎回転送ソフトを起動してファイル操作を行う必要がありました。

今回、仮想ドライブ構築ソフトをFT245カードに対応させたことで、普通にディスクを読み書きする操作の延長でそのままWindows上のファイルを処理することができるようになりました。
もちろん、FT245カードがない場合でもその代わりにRS232Cを使うことで、全く同様な操作ができます。

今回はとりあえずですが、F-Basic V3.0用とFlex9用の2種のみ公開します。ただしF-Basic用はVer3.0のみに対応しており、また、Flex9用ですが私は8インチのGeneral版から移植したものを使用していますので、もしかしたら富士通製のFlex9には使えないかもしれません。

動作に必要なソフト一式をOneDriveに公開しますので、使用した結果に対して私は責任を負わないことを了解していただいたうえで自由にご利用ください。


2024年1月27日土曜日

FT245高速通信カードを用いるファイル転送ソフトのCP/M版とOS-9版をアセンブラで書き直しました

 Cで書いたCP/M版とOS-9版が満足できなかったのでアセンブラで書き直しました

先に作成したC版はサイズが12KB程度と大きく、そのために起動時や動作にやや時間がかかっていました。

その点が不満でしたのでアセンブラで書き直すことにしました。プログラム全体の構造はC版と同じで良いので、Cの命令をひとつひとつアセンブラの命令に置き換えていきました。CP/Mでのアセンブラ開発も初めてでしたので、命令表と首っ引きでしたが勘違いも多く、変なところで手間を食ったりしました。

結果、CP/M版もOS-9版もC版では12KBほどだったサイズが2KB程度と小さくなり、起動はもちろんですが動作も多少ですが速くなりました。


OS-9メニュー画面


CP/Mメニュー画面


メニュー3,4のディレクトリ表示のために、CP/M版ではディレクトリ表示ルーチンを作成してサブルーチンとして組み込みましたが、残念ながらOS-9版では今のところ、コンパクトなディレクトリ表示ルーチンをアセンブラで作成できていませんので、メニュー3,4は動作しません。メニュー3,4が必要な場合はC版を使用することになります。(以前、仮想ドライブ構築ソフトOs9DrvWin.exeをCで作成したときに、ディレクトリ表示部にはかなり複雑な処理が必要でしたので、これをアセンブラで作成できるかどうかは分かりません。)

これでF-BASIC版、FLEX9版、CP/M版、OS-9版の全てがアセンブラで作成できましたので、ファイル転送ソフトslwinftの制作はこれで一区切りをつけようと思います。あとはこれらをツールとしてプログラム開発に生かしていくつもりです。

参考までに、私のプログラム開発の手順を図で示します。


プログラム開発の手順

これで一区切りとしますので、今までに制作したFM側のF-BASIC版、FLEX9版、CP/M版、OS-9版のslwinftとWindows側のslwinft245.exeをOneDriveに上げておきます。ディスクイメージ転送ソフトft245も同梱してあり、簡単な使い方の説明も付けてあります。


2024年1月13日土曜日

FT245高速通信カードを用いるファイル転送ソフトのCP/M版ができました

 これでようやく、F-BASIC版、FLEX9版、OS-9版、CP/M版の4種が揃いました。

最後のCP/M版ができたので、FM-7で動作する全てのDOS(?)用の版(F-BASIC版、FLEX9版、OS-9版、CP/M版)が揃ったことになります。


CP/M版の動作画面です。FM-7上の富士通版CP/M-80上で動作しています。


CP/M版slwinft

しかし残念ながら、メニュー3,4のディレクトリ表示は未実装です。BDS-Cで書いたのですが、標準関数のexec()などではビルトインコマンドのdirは動作しないのです。ということで、dirコマンドに相当するものを作成する必要がありますが、それには時間がかかりそうです。

また、現在のところ、FM77AV2に装着してあるZ80Hカード(IDATEN)上のCP/Mでは何故か正常に動作していません。(ソフトは正常に動作しているように見えるのですが、実際にはファイルが転送されないのです...)AV2でもF-BASIC版など他の版では正常に転送できていますので、ハードには問題はないと思うのですが、原因はまだ分かっていません。


蛇足ですが、純正のCP/M-80カードは大切に保管してあるので、普段は自作のカードを使用しています。


自作CP/M-80カード


完成度については、F-BASIC版>FLEX9版>OS-9版>CP/M版という感じで、特にCP/M版についてはBDS-Cを使うのは初めてということもあり、試行錯誤の連続でした。現在のところ、メニューの3,4は実行できませんし、動作速度もアセンブラで書いたF-BASIC版やFLEX9版より遅いようです。

しかし、今まではディスクイメージ全体を転送するソフトしかなく、2Dディスク一枚の転送に1分ほどの時間がかかっていたので、Windows上のエディタでプログラムソースを作成し、それを各DOSに転送してアセンブルやコンパイルするという手順の繰り返しが面倒でしたが、これらのファイル転送ソフトのおかげで大幅に時間が短縮できるようになりました。これらのソフトの開発中も、Windowsー>FM-7方向の転送部分をまず作成し、それを繰り返し使いながらソフト全体を仕上げていくことができました。(CP/Mに標準添付のエディタEDを流石に使う気にはなれないので、制作途中の手直しは全てWindows上のエディタで行うという開発スタイルです。)

完成度の低いOS-9版とCP/M版についてはこれからも改善していくことになると思いますが、とりあえず一段落したということにして作成した4種の版をまとめてOneDriveに上げておきます。CP/M版以外の版も細かい修正を重ねていますので、ここに上げたものが最新版となります。また、ディスクイメージ転送ソフトも含まれています。


2023年12月15日金曜日

FT245高速通信カードを用いるファイル転送ソフト(FLEX9版とOS-9版改)

 

F-BASIC版、OS-9版に続いてFLEX9版を作成すると共にOS-9版を微修正しました


【2024年1月13日追記】F-BASIC版、OS-9版、FLEX9版、CP/M版の最新版を1月13日のブログ「FT245高速通信カードを用いるファイル転送ソフトのCP/M版ができました」にアップしましたので、このブログのOneDriveを削除しました。

【12月17日追記】OneDriveに上げたファイルの中のOS-9版が古いものでしたので、最新版に差し替えました。

ようやくFLEX9版ができあがり、これでCP/Mを除いて3つの環境でファイルをFMとWindowsPC間でファイルを自由に転送することができるようになりましたので、Windows上の慣れたエディタで作成したプログラムをFMに転送して最後の仕上げ作業をするという一連の流れがよりスムーズに進められるようになりました。(以前はRS232を使用したものを使っていたのですが、転送時間が格段に短くなりました。)

CP/M版の作成は80系の知識がない自分にとっては敷居が高く、時間がかかりそうですので、とりあえず、これまでのまとめとして3種の版をまとめて紹介しておきます。

まずはWindows側のslwinft245.exeです。



slwinft245.exe


F-BASIC版、OS-9版、FLEX9版に共通して使用できます。
COMポートはbaud:115200以上, 8bit, non-parity, 1stop bit に設定します。
また、FT245通信カードのTXE機能はOFFのままで構いません。

FM側のドライブソフトです。


(1)F-BASIC版です


F-BASIC版のSLWINFT


(2)OS-9版です


OS-9版のslwinft


前回のブログのものではディレクトリを表示するメニュー項目がありませんでしたが、追加することができました。また、FM-7用のOS-9LevelIで動作することも確認しました。

(3)FLEX9版です


FLEX9版のSLWINFT


見てわかりますようにメニューはほとんど同じにしてあり、操作性もほとんど同じですが、処理対象のドライブ指定だけは、OS-9やFLEX9ではOSであらかじめ指定できるのに対して、F-BASICではできないのでメニューでドライブ変更できるようにしてあります。ただし、メニューからディレクトリ表示できるのはドライブ0と1だけです。(メニューソフトはF-BASICで書いてありますので、簡単に書き換えることができますが。)

以上の3つのOS(F-BASIC版、OS-9版、FLEX9版)に対応したソフトをOneDriveに上げておきますので、FT245高速通信カード(RAMディスク付きも)をお持ちの方は自由にご使用ください。

12月17日追記】差し替えたのはOS-9版のみで、他は変更していません。

【2024年1月4日追記】最新版をOneDriveに上げました。


2023年8月20日日曜日

MC09でASSIST09など用のPL/0の実行ファイルを作成する(補足)

 MC09でASSIST09など用のPL/0の実行ファイルを作成していて気付いたこと

前回のブログで、MC09でコンパイルした実行ファイルをASSIST09などで走らせる方法を紹介しました。

その中で、wnoy さんのサイト「小さな言語」中でPL/0をMC09でコンパイルしてMPB6809のモニター上で走らせておられたので、それを私も走らせてみたと書きましたが、実際には、それはMPB6809のモニターを実装してサイト中のバイナリリストを入力したものを、そのまま走らせたということでした。


前回も掲載した画像ですが


上記サイトにはMC09でコンパイルした結果のアセンブルリストが掲載されていたので、その中のI/O関係を自分の環境に合わせて書き換えてアセンブルすれば実行ファイルが生成されるはずです。

しかし、実はこのようにして生成された実行ファイルは、最初は正常に動作しませんでした。

私が通常使用している6809用のアセンブラはFLEX09上のASMBと自作のWindows上で動作するクロスアセンブラです。加えて、リファレンス用としてアークピットさんのX6809を使用しています。

残念ながらPL/0のアセンブルリストはラベルの長さが6文字を超えているためにASMBではアセンブルできないので、自作のクロスアセンブラでアセンブルしていましたが、結果がwnoyさんのものと異なってしまうのです。これは自作のソフトのバグかと疑って、X6809でアセンブルしてみても結果は自作のものと全く同じでした。


LEAX 2,PC という命令の変換結果がおかしい!

誤変換されてしまう命令を示します。MC09によるコンパイル結果のアセンブルソースでは、文字列の表示に下記のパターンが多用されています。(十数か所あります!)

LEAX 2,PC

BRA ZZZZ <- 表示ルーチンへ

FCB $xx1,$xx2,$xx3,...,$xxn

ZZZZ (表示ルーチン)

これは、LEAX 2,PCで表示すべき文字列の先頭のアドレスをXに入れておいて、BRA命令で表示ルーチンへ飛んでいるわけですが、問題は先頭行の LEAX 2,PC で、これが正しく変換されていないのが正常に動作しない原因でした。

wnoyさんのサイトでは、変換結果は 30 8C 02 であるのに対して、自作のアセンブラやアークピットさんのX6809ではいずれも 30 8D XXXX となりますし、LEAX <2,PC と書き換えてみても X6809では 30 8C XX となるのですが、XXは02にはなりませんでした。

参考までに、X6809でのアセンブル結果を示します。 

 


このLEAX命令の意味としては、LEAX命令の位置のPC値に2を加えた値をXの値とするということですから、EFFEやF2という値は明らかにおかしくて0002や02にならなければなりません。

結局、自作のクロスアセンブラを修正することになった

めったに使うことのない命令でしたので気づくのが遅れましたが、自作のクロスアセンブラを正しく変換できるように修正し、改めてPL/0のアセンブルリストをアセンブルし直した結果、正しく動作する実行ファイルが得られました。ということで、ようやくPL/0をASSIST09や自作モニター上で走らせることができました。(長かった、、、)

ちなみに、この変換結果はアークピットさんのX6809だけでなく、FLEX09上のASMBでも同様で上記と全く同じ結果となります。ということは、これは誤変換ということではなく、このLEAX命令の解釈としては上記の変換結果の方が正しいということを意味するのでしょうか。しかし、実際に実行してみると、30 8C 02 でないと正しく動作しないのですが,,,

(wnoyさんがどのアセンブラを使用されたのかは分かりませんが、アセンブルリストの行末記号が$0Aですので、おそらくLinux上のクロスアセンブラas09を使用されたのだと推測しています。)


2023年8月16日水曜日

FLEX09上のMC09でASSIST09などのモニター下で動作する実行ファイルを作成する

 FLEX09上のMC09を用いてFLEX09がない環境で動作する実行ファイルを作成する

FLEX09には高機能で使いやすいアセンブラASMBがあって便利に使っています。さらに有名な整数型CコンパイラMC09もあります。

ASMBで作成した実行ファイルはもちろんFLEX09のない環境に移行して動作させることができるので、しばしばそのような使い方をしているのですが、MC09については、生成された実行ファイルがFLEX09と密接に関連していて、他の環境で動作させることはできないと思い込んでいました。

しかし以前、「小さな言語」というwnoy さんのサイトがありまして、そこではMPB6809というボードマイコンとそれ用のモニタープログラムが公開されていました。

(現在このサイトは存在しませんが、その内容を保存された方が紹介されています。「MPB6809」で検索するとヒットします。)

このサイトでは他にもForthの移植やTinyBasicの解析などもされているのですが、何とPL/0をMC09でコンパイルして移植しておられるのです。

私もこのモニタープログラムを入力してROMに焼き、自作の6809マイコンでPL/0を走らせてみました。PL/0は実用を目指したコンパイラではないので、特に使い続けるつもりはありませんでしたが、MC09でコンパイルした実行ファイルをMPB6809というマイコンに移植したという点に興味を持ちました。

FLEX09に依存しているファイルI/Oを使わないプログラムならFLEX09がなくても動作するのは当然ではありますが、初めて見る実例でした。このサイトを知ったのは十年以上前なのですが、それ以来、時々ですがMC09でコンパイルした結果のソースリストをいじって自作のマイコンで走らないかと試していました。

PL/0のソースは大幅に書き換えないとそのままではMC09でコンパイルできないので、まだPL/0をコンパイルすることはできていないのですが、他のプログラムについては、最近ようやく何とか動くようになりました。

動作試験に用いたマイコンは下画像のもので、2MHz動作の63B09と68B02を切り替えて使用しています。モニターは6809では自作のものとASSIST09を、6802では自作のものとMIKBUG2をROMに入れてあり、FlexDrvWin.exeという仮想ドライブ構築ソフトを用いることで6809のFLEX09と6800のFLEX2が走っています。


使用したボードマイコン


MC09での実行ファイル作成手順

MC09でコンパイルした結果はC.OUTというアセンブルリストとして出力され、それをMC09に標準で添付されているC.TXTというアセンブルリスト中に読み込んで、全体をアセンブルすることで実行ファイルが生成されます。

MC09 oooo.C --> アセンブルリスト C.OUTが作られる。

ASMB C.TXT oooo.CMD --> C.TXT中にC.OUTが読み込まれ、実行ファイル oooo.CMDが生成される。


C.TXTを書き換えれば良いはず

このC.TXT中にコンソールI/OやファイルI/Oなどが書き込まれているので、コンソールI/Oを自分の環境に合うように書き換え、ファイルI/Oは不要ということで削除すれば良いはずなのですが、エラーの連発でなかなかうまくいかず、試行錯誤の連続でしたが、wnoyさんのPL/0のアセンブルリストを参考にしながら何とか動作するものを作ることができました。

もちろん、FLEX09のファイルI/Oを必要とするプログラムはダメですが、ファイルI/OがないプログラムならMC09で作成して、マイコン等で走らせることができます。サンプルとしてメモリダンププログラム mdump.c を作成してみました。


ASSIST09用と自作モニター用の2種を作成した

作成したのは、私の自作マイコンにインストールしてある自作モニター用のC_SBC.TXTとモトローラ社のモニターASSIST09用のC_ASSIST.TXTの2種です。

これらを標準のC.TXTの代わりに用いることで、自作モニタ―上やASSIST09上で動作する実行ファイルが得られます。

MC09 -O1.C.OUT oooo.C --> アセンブルリスト C.OUTがドライブ1に作成される

ASMB C_SBC oooo.BIN +YLS または ASMB C_ASSIST oooo.BIN +YLS --> 実行ファイル oooo.BIN がドライブ1に作成される

この実行ファイルをFLEX09のディスクから取り出してマイコン側にインストールして、$100から実行します。

(C.TXTにORG $100と書いてあるので、MC09で作成した実行ファイルは$100から実行することになっていますが、実は、アドレス依存のコードではないのでどのアドレスに置いても実行できます。)

作成したC.SBC.TXTとC.ASSIST.TXTを下記に示します。基本的にI/O関係のアドレスが異なるだけですが、ASSIST09のI/OルーチンはSWI命令を使っているのに対して、私の自作モニターは普通にJSR命令を使っているので、コールの仕方もそれぞれに合わせています。


以下にC.ASSIST.TXTとC.SBC.TXTのリストを示します

C_SBC.TXT 

  
 


C_ASSIST.TXT 

  
 


(以下省略)の部分は標準のC.TXTの192行目以降と同じです。


参考までに、サンプルとして作成した mdump.c を示しておきます。このような、ファイルI/OがないプログラムはFLEX09がなくても動作するわけです。

mdump.c 

  
 

出来あがった mdump.bin のサイズは4.2KBほどでした。サイズは大きくなりますが、アセンブラで書くよりも作成時間が短くなるので、サイズがそれほど問題にならない場合にはMC09を使用するメリットはあると思います。


参考までに、私の場合の具体的な実行ファイル作成・実行手順を示します。

1.WindowsPC上のエディタでソースプログラムを作成する。

2.FlexDrvWin.exe中のイメージファイル(.DSKまたは.D77)にソースをドラッグ&ドロップする。

3.MC09でコンパイル、ASMBでアセンブルする。

4.出来あがった実行ファイル(.BIN)をイメージファイルからWindowsPCへ読み出す。

5.バイナリ形式の実行ファイルを自作の変換ソフトCvtMotHexBin.exeを用いてモトローラ形式(.MOT)に変換する。

6.モニターのLoadコマンドでモトローラ形式の実行ファイルを読み込む。

7.モニターのGoコマンドで実行する。


以上ですが、作成・使用したファイル(C_ASSIST.TXT, C_SBC.TXT, 最新版のFlexDrvWin.exe, CvtMotHexBin.exe, サンプルのmdump.c)をOneDriveに上げておきます。なお、FLEX09やMC09の作成手順は以前のブログで紹介しております。


2023年2月18日土曜日

FM-7/77用F-BASIC,OS-9,CP/M,FLEX9のディスクイメージを操作する

 Windows上でFM-7/77用F-BASIC,OS-9,CP/M,FLEX9のディスクイメージを操作するソフトの紹介

FM用のエミュレータであるXM7を使用されている方も多いと思います。私も使わせていただいています。素晴らしいソフトを作成された開発者に敬意を表します。

XM7を使用していると、しばしばD77形式のディスクイメージ中のファイルを操作したいことがあります。つまり、ディスクイメージ中にWindowsからファイルを書き込んだり、逆にディスクイメージからWindowsへファイルを読み出したりしたいということです。

今までにそのためのソフトを制作してきました。当然のことですが、各OS(?)によってディスク中への保存形式が異なりますので、ソフトも各OSで異なるものとなりました。

制作したソフトについてはその都度紹介してきましたが、扱えるファイル形式を今までのD77(D88)、DSKに加えて、FT245高速通信カードで用いられているDAT形式に対応するように拡張しましたので、ここでまとめて紹介します。

今までに制作したソフトは以下の4本です。

(1)F-BASIC用 FbasDrvWin.exe

(2)OS-9用   Os9DrvWin.exe

(3)CP/M用   CpmDrvWin.exe

(4)FLEX9用  FlexDrvWin.exe (DAT形式には対応しない)

それぞれ対応するOSが異なりますが、操作性は全て同じにしてあります。

(ただし、FLEX9用のみはディスク形式が異なるためにFT245通信カードを使用する転送ソフトは使用できませんので、DAT形式に対応する必要がありません。)

それぞれの画面イメージは次のようです。


FbasDrvWin.exe



Os9DrvWin.exe


CpmDrvWin.exe


FlexDrvWin.exe



イメージファイル処理ソフトとしての使い方


(1)処理したいイメージファイルをドライブ名ボックス(Drive 0~4)にドラッグ&ドロップすると、下のボックスにそのイメージファイル中のファイルが一覧表示される。
どのボックスに入れても構わない。また、いくつでも重ねて入れることができる。
(2)読み出し
読み出したいファイルをマウスの左ボタンで選択しておいて、右ボタンを押すと現れるメニューから「読み出し」を選択する。
(3)書き込み
書き込みたいWindows上のファイルをこのボックス中にドラッグ&ドロップする。
(4)全ファイルの一括読み出し
メインメニュー「編集」中の「全ファイル読み出し」を選択する。
(5)他の機能
右ボタンメニューには他のコマンドとして「削除」、「ファイル名変更」がある。


仮想ドライブ構築ソフトとして使用する


イメージファイル処理ソフトとしての使い方は上記のようですが、実はこれらのソフトは本来、Windows上の仮想ドライブ構築ソフトとして制作したものです。
(上の画面イメージ中のFlexDrvWin.exeで右側のボックス中にFM機がアクセスしたトラック/セクタが表示されています。)
ということで、FM機に各OSに対応するドライバをインストールすることで、FM機本体のドライブ(通常0と1)に加えて、これらのxxxxDrvWin.exeのDrive2と3が拡張ドライブとして使用できるようになります。
OS-9用以外の3つの仮想ドライブ構築ソフトについては以前紹介し、ドライバも公開しています。

RS-232C用のドライバをFT245通信カード用に書き換える


今までに、Flex用、F-BASIC用、CP/M用のドライバを紹介してきましたが、それらはいずれもFM機とWindows機との間の通信手段としてRS-232Cを使用していました。
しかし、最近はRS-232C機能を使用することはほとんどなくなり、もっぱら「思い付きハードでソフトに七転八倒」さん(ブログは下記)が製作されたFT-245高速通信カード(本ブログでも何回か紹介しています)を使用していますので、現在、各ドライバをFT-245通信カード用に書き換えているところです。完成し次第公開する予定ですが、残念ながら、私は80系は全くと言ってよいほど経験がないので、CpmDrvWin.exe用のドライバが作成できません。F-BASIC用、OS-9用の2つのみを作成中です。

「思い付きハードでソフトに七転八倒」さんのブログ
(1)FM-7用データ転送基板を使った新ユーティリティの紹介https://vehwk3yxv7hw.blog.fc2.com/blog-entry-39.html
 (2)FDDイメージをバックアップするFM-7専用ソフトの説明https://vehwk3yxv7hw.blog.fc2.com/blog-entry-31.html

以上、各OS用のイメージファイル処理ソフト(実は仮想ドライブ構築ソフト)の紹介でした。
これらの4ソフトと、共に使用することが多いD77,DSK,DATファイル間で形式を変換するソフト CvtDskD77.exeをOneDriveに上げておきます。

【注意】これらのソフトの制作にあたっては、それぞれのOSのFMS(ファイルマネージメントシステム)に相当するものの実装が必要ですが、OSの中身を知っているわけではないので、XM7上で読み書き、追加、削除などの操作をして、操作前後でイメージファイルのどの個所がどのように変化したかを確認することによってOS内の動作を推定し、それをもとにして実装しました。
従って実装が不完全、不十分なための誤動作が予想されますので、使用される場合はその点にご注意ください。特に、操作を何回も繰り返すとイメージファイルがおかしくなる可能性がありますので、何回か操作を繰り返したらXM7で別ファイルにコピーし直したり、転送ソフトを用いてフロッピーディスクにコピーしておくと安心です。(使用した感覚ですが、FlexDrvWin.exe以外は比較的安定しているようです。)

2020年9月16日水曜日

P-ROM Writerカードのドライブソフトが完成

 ようやくP-ROM Writerカード用のドライブソフトが完成しました


6月26日のブログで紹介したP-ROM Writerカードですが、元になった記事ではOS-9上のソフトでコントロールしていました。
その際には、とりあえずOS-9 Level1で動作させて27C256に書き込めることを確認しましたが、OS-9上ではなく他のOS上で動作するドライブソフトを作成する必要があると考えていました。
また、ブログには2716の書き込みができていないと書きましたが、その原因は使用した270uHのインダクタにあり、流れる電流が許容値を大幅に超えており、かなりの発熱が生じていたために25Vが安定しなかったことにありました。

ハードの不具合が解消できたのでソフトの作成にかかりました。
最初はOS-9上のソフトを手直しすれば良いと考えていたのですが、他の方の制作したソフトを読むのは結構難しくて、結局、一から作ることになりました。

制作したドライブソフトは使い慣れているFlex9上で動作するもので、コマンドとして以下の13個を用意しました。
Type, Erase, Pwidth, Info:ROM指定、Blankチェック、書き込みパルス幅指定
Info:ROM種他の設定値の表示
Read, Write, Verify:読み出し、書き込み、ベリファイ
Dump, Fill, Memory:バッファのダンプ、フィル、データ変更
Load, Save:ファイルのロード、ファイルへのセーブ
Quit:終了

これらのうち、Info(設定値を表示)とPwidth(書き込みパルス幅を設定)以外は元のドライブソフトと同様な機能です。(Memoryはスクリーンエディタではありませんが...)

対応しているROMは2716, 2732, 2764, 27128, 27256, 27512の6種ですが、27128は手持ちがないので動作確認はできていません。
バッファサイズとして32KB用意してあるので27256までは一回で書き込めますが、27512は2回に分けて書き込むことになります。(27512の指定時に書き込みエリアの前半・後半を選択します。)

起動してROM種を選択している様子です。


ライター全景です。
左が68B21が載ったI/O拡張カードで、右がP-ROMライターカードです。



2732に書き込んでいる様子です。ジャンパー線でVPPを21Vに設定しています。




カード上でのROMの選択は20PのICソケット上でのジャンパーで行いますが、書き込み電圧VPPの指定だけはROM毎に確認してジャンパー線で設定する必要があります。特に2732や2764は要注意です。

【参考】
VPP値ですが、手持ちのADVATESTROMライタ付属のROM一覧表で調べてみると、
・2716   25V ----------------------------- 25V
・2732   25V, 21V ----------------------- 25V,21Vのどちらか要確認
・2764   25V, 21V, 12.5V, 12.75V -- ほぼ21Vだが一部25Vあり
・27128 21V, 12.5V, 12.75V, 13V -- 21V,12.5Vのどちらか要確認
・27256 21V, 12.5V, 12.75V --------- ほぼ12.5Vだが一部21Vあり
・27512 12.5V, 12.75V, 13V --------- 12.5V
と様々です。
271625V2751212.5Vと決め打ちしてて良いようですが、他はほぼ2種類あります。
 
また書き込みパルス幅ですが、27256以降は1msで書き込めますが、それ以前のものはパルス幅を大きくする必要がありますので、パルス幅も設定する必要があります。


コマンドの実行例を示します。

リードコマンドとライトコマンドです。
進行状態を表すために1ページ(256バイト)読み書きするごとにドット(.)を表示しています。




ダンプコマンドです。
以前作成したモニタコマンド中のルーチンを流用しているために、16バイトごとのチェックサム表示という余分な機能も付いています。



メモリーコマンドです。
これもモニタコマンド中のルーチンの流用です。書き込みデータを表示・編集できます。Pキーでアドレスを戻すことができます。また、テンキーの「*/+-=,」はA-Fとして扱われます。



これで一応、2716から27512までのEP-ROMのライターのハード、ソフトが完成したと言って良いかと思いますが、ソフトについてはオリジナルがOS-9上、今回制作したものはFlex9上で動作するものですので、一般的ではありません。
F-Basic上で動作するソフトが作れれば良いのですが、私の手には余ります。
今回のFlex9版の実行ファイルと共にソースファイルをOneDriveにアップしておきます。

2019年4月20日土曜日

6809基板にLISP09をインプリメント

自作6809基板にLISP09をインプリメントしました


SBC8080にGAME80をインプリメントする試みがうまく行かず中断していますので、
自作の6809基板の方にLISP09をインプリメントしてみました。

LISP09は図書館から借りた「別冊トランジスタ技術 6809オールマイティ」に掲載
された芹沢照生さん作成のもので、アセンブルリストが23ページもありましたが
頑張って入力してみました。
このLISP09はFLEX09上のソフトとして作成されていますので、入力するだけで無事に
動作しました。
FLEX09上でLISP09と入力することで起動します。解説に載っていたサンプルプログ
ラムは全て動作しましたので、多分入力ミスはないかと思います。


起動画面とオブジェクトリスト


例にあったクイックソートプログラム


LISPを触るのは数十年ぶりで、何も覚えていないので、黒川先生の「LISP入門」を
本棚から引っ張り出して第一歩から勉強かな。

[4月27日追加] 入力リストのミスを1つ見つけましたが、アセンブル結果には影響
がありませんでした。もうミスはないと思いますのでチェックを終えます。

FLEX9上で動くものですが、ソースがあれば移植も可能かと思いますので、ソースと
アセンブルリストをOneDriveに上げておきます。
(雑誌で公開されていたものですので、個人使用のための公開はOKではないかなと
思っていますが、どうでしょうか。ちなみに芹沢先生は論文でも発表されているよう
です。)

2018年11月17日土曜日

I2C通信でLCD表示器に文字表示ができましたが...

LCD表示器に文字表示ができましたが、標準の書き方ではなく...


使用したのはスイッチサイエンスで購入した8文字2行表示のAQM0802A(5V版)です。
5V版なので、10月27日に公開したRTCの回路にそのまま追加しました。

接続図


コマンド・データの書き込み手順


コントロールICはST7032iで、そのマニュアルによると、コマンドやデータはいずれもコントロールバイトとデータバイトの2バイトのセットで書き込むようになっています。

コマンドの場合 複数連続して書き込む場合 :$80+1byte(コマンドコード)
        単独又は最後に書き込む場合:$00+1byte(コマンドコード)
データの場合 複数連続して書き込む場合 :$C0+1byte(データコード)
       単独又は最後に書き込む場合:$40+1byte(データコード)

$00+1byteや$40+1byteの後には必ずI2Cのストップコンディションが続いて終了することになっています。


連続書き込みでは$80や$C0を毎回書くのですが...


実際にプログラムを作って試してみると、
S+ADR+($80+CmdCode)+($80+CmdCode)+...+($00+CmdCode)+P

S+ADR+($C0+Data)+($C0+Data)+($C0+Data)+...+($40+Data)+P
 (S:スタートコンディション、ADR:スレーブアドレス、P:ストップコンディション)
という書式で確かに書き込みができました。

しかし、ネット検索をしてみますと、$80や$C0を用いて連続書き込みをするのではなく、$00や$40を用いて1byteずつ書き込む例も結構見られます。例えばArduinoのC言語であれば、Wireライブラリを用いて、

コマンド書き込みの場合は
Wire.beginTransmission()とWire.endTransmission()で挟んで
Wire.write()で$00と1byteのコマンドを書く。

データ書き込みの場合は
Wire.beginTransmission()とWire.endTransmission()で挟んで
Wire.write()で$40と1byteのデータを書く。

というような形式です。(この例のbeginTransmission()とendTransmission()はそれぞれS+ADRとPだと思われます。)


もう少し効率的に連続書き込みをする方法がありました


確かに、1文字の書き込みなら$00や$40を用いるのがマニュアル通りの書き方なので良いのですが、複数バイトのコマンドやデータを書き込みたい場合には、スタートコンディション、スレーブアドレス、ストップコンディションを1byte毎に書くことになり、いかにも非効率です。
かといって、連続書き込み用の$80や$C0を1byte毎に書くのもあまり効率が良いとは言えません。スタートコンディション、スレーブアドレス、ストップコンディションは1回で済むという利点はありますが。(これしか方法がないのなら仕方がないのですが)

他の書き込み方はないのかと色々と試行錯誤した結果、下記のような書式で書き込めることを確認しました。

コマンド書き込みの場合
S+ADR+$00+(複数のコマンドコードを順に)+P

データ書き込みの場合
S+ADR+$40+(複数のデータを順に)+P


この書き方は、明らかにマニュアルで説明されている書式とは異なっているのですが、画像のようにちゃんと書き込めています。

AQM0802A表示例


最後に

なぜST7032iのマニュアルに載っていない書式で連続書き込みができるのかは分かりませんし、マニュアルを熟読すればどこかに記載されているのかもしれませんが、あくまでもAQM0802Aの一使用例として見ていただければと思います。
何か勘違いや間違い等ありましたらご指摘いただけるとありがたいです。

6809のアセンブラでLCDWR.TXT,LCDWR1.TXT,LCDWR2.TXTの3つのプログラムを作成し、いずれも正常に書き込みできることを確認しました。

LCDWR.TXTの書式(最も短い)
  command : S+ADR+$00+cmd1+cmd2+...+lastcmd+P
  data         : S+ADR+$40+dat1+dat2+...+lastdat+P
LCDWR1.TXTの書式(初期化コマンドのみ短い)
  command : S+ADR+$00+cmd1+cmd2+...+lastcmd+P
  data         : S+ADR+($C0+dat1)+($C0+dat2)+...+($40+lastdat)+P
LCDWR2.TXTの書式(標準の書式)
  command : S+ADR+($80+cmd1)+($80+cmd2)+...+($00+lastcmd)+P
  data         : S+ADR+($C0+dat1)+($C0+dat2)+...+($40+lastdat)+P

参考になるかどうかわかりませんが、作成した3つのプログラムのソースをMicrosoftのOneDriveに上げておきます。


2018年11月3日土曜日

PIAのみでRTCからの時刻の読み書きができました

PIAに接続したRTCから時刻を読み書きするアセンブラのプログラムが完成


前回(10月27日)はRTCモジュールから時刻を読み込むまででしたが、時刻の書き込みもできるようになりました。
読み込み・書き込みプログラムはそれぞれRTC_RD.CMD、RTC_WR.CMDですが、読み込みプログラムに、FLEX9の起動時に時刻をRTCモジュールから読み込んでFLEX9の日付を設定する機能を追加したSETDATE.CMDを用意しました。

RTC_RD.CMDとRTC_WR.CMDはFLEX9上のコマンドとして使用します。


FLEX9システムに組み込んで使用する


SETDATE.CMDはFLEX9の起動時に自動的に実行されるように、STARTUP.TXTに書き込んでおいて使用しますが、FLEX9の起動時にデフォルトで実行される日付入力ルーチンが不要になりますので、FLEX9のシステムを一箇所変更します。

FLEX9システムをTrk01,Sct01から保存した場合、初期化ルーチンはSct08にあります。
そのうちの日付入力ルーチンはオフセット$76からのBD,CA,AC (JSR $CAAC) ですので、このBDを39 (RTS)に変更します。

初期化ルーチン(変更前)
初期化ルーチン(変更後)

これによって、起動時に日付を問い合わせてくることは無くなり、代わりに、STARTUP.TXTに書き込んだSETDATE.CMDがRTCモジュールから取得した日付を設定してくれることになります。

その様子を下図に示します。


起動画面(従来のもの)

今までは、起動時に日付を「月、日、年」の順に入力する必要がありました。
(FLEX9では時刻は管理していませんので、年月日のみです。)
それに対して、SETDATE.CMDを組み込むと、

起動画面(RTCモジュールから読み込み)

日付を問い合わせてくることなく、RTCモジュールから取得した日付と時刻を表示してそのままコマンド入力待ちになります。DATEコマンドを入力してみると、確かに日付が設定されていることが分かります。
なお、RTCモジュールが無い場合には、デフォルトの日付入力ルーチンが呼び出されて手動で日付を入力することになります。

起動画面(RTCモジュールが無い場合)

作成したRTC_RD.CMD, RTC_WR.CMD, SETDATE.CMDのソースをOneDriveに上げておきます。
入出力ルーチンなど一部にFLEX9のシステムルーチンを使用していますが、I2C通信部分は一般的な6809のアセンブラですので、I2C機能を持たないマイコンで、しかもアセンブラでI2C通信をしたいという場合の参考になれば嬉しいです。
(I2Cの解説も、DS3231のマニュアルも、もう少し分かりやすく書いてもらえればこんなに苦労しなくても済んだかもしれないのに...愚痴でした。)

2018年10月27日土曜日

アセンブラでのPIAとRTCの間のI2C通信に成功しました

アセンブラでPIAを経由してRTCの時刻の読み出しができました


使用したRTCモジュールはアマゾンで入手したHiLetgoのZS-042です。このモジュールにはDS3231というチップが使われており、I2C通信で時刻の設定や読み出しを行うようになっています。
I2C通信については、名前を知っているだけで具体的なことは全く知らなかったのですが、FLEXの起動時の日付の入力が煩わしいので、RTCからの自動読み込みに挑戦することにしました。

しかし、ネット上の情報は多くがArduinoとの接続の場合で、しかもWireライブラリを使うものがほとんどで、私もRTCモジュールが動作するかどうかをArduinoで確認しましたが、30分もあればできるという簡便さは誠にありがたいのですが(ライブラリを作成してくれた方には感謝です...)、6809のアセンブラでI2C通信プログラムを書きたい場合には全く役に立ちません。

また、PICやAVRなどのマイコンのアセンブラでI2C通信をしているものも幾つか見つけましたが、これらもマイコン自身にI2C通信機能を備えたものを使用している場合がほとんどで、これも役には立ちません。また、I2C通信機能を持たないPICやAVRでのケースもありましたが、これらのマイコンはポートのビット処理命令を持っているので、ビット処理命令を持たない6809ではプログラムの参考にはあまりなりませんでした。

ということで、結局、I2C通信の解説とDS3231のデータシートを読みながら、自力でプログラムを組むことになりました。

6821とRTC間の接続

6821とRTC間は下図のように配線しました。
図中のプルアップ抵抗はPortAの内蔵抵抗で代用しています。
6821のPortAはオープンドレインで、しかも5kΩの抵抗でプルアップされていますので、I2C通信に適しているということと、入出力の切り替えが不要で、出力に設定したままで入力も可能(但し、予めHを出力しておく必要あり)なので、プログラムが書きやすいと考えました。

RTC配線図


ロジアナを所有していないので、デジタルオシロで波形を見ながら試行錯誤を続けましたが、手順の最初のスレーブアドレスの書き込みからして成功しているのかどうかも分からず、全くACKが返ってこない状態が続き、間にPICでも挟まないとダメかとあきらめかけたこともありました。

最終的には、SDA信号は、Lowは0を出力するのに対して、Highは1を出力するのではなく開放、つまりHi-Zにするのだということに気づき、それに対応するように書き直すことで、ようやく読み込みができるようになりました。

読み出しに成功

下図で表示されたデータは、RTCの最初の7レジスタを読んだもので、順に、秒、分、時、曜日、日、月、年を表しています。

RTCから日付と時刻を読み取り

現段階では、ようやく読み取りができたというところまでですが、あとは書き込みルーチンを作成し、それを常駐プログラムの形式にして、FLEXの初期化ルーチン中の日付入力ルーチンと置き換えれば完成です。
(完成しましたらプログラムは公開します。)

[11月4日 追加] 完成したプログラムは11月3日のブログで公開しています。

2018年10月15日月曜日

6809/6802両用基板が完成しました

6809/6802両用基板を修正しました


最初に製作した6809/6802両用基板は、9月15日の投稿で述べたように、修正箇所があったこととPIA(6821)を載せたかったので修正基板を製作しました。

これは最初に製作した基板ですが、

6809 / 6802 両用基板の第1作


このようにPIA(6821)を外付けすると修正基板と同機能となります。


6821を追加しました


ブレッドボード風に使用できるようにピンを立ててみました。

6821基板


これが修正基板です。

修正基板(6821を追加しました)



回路図を掲載します。
6809と6802の切り替え部を簡略化し、それに応じて不要になった74HC08を除き、空いたスペースを利用して68B21を追加しました。



修正基板の回路図


これで当初の目標であった、シングルボードコンピュータで6809用、6800用のFLEXを動作させることができるようになりました。

===== 一応の完成! =====

あと残っている課題ですが、FM77AV40SX上のFLEXを使っていた時には、起動時に、内蔵されているリアルタイムクロックから現在時刻を取得して起動時の日付の入力を自動化していましたので、同様なことができないだろうかと考え、arduinoなどで使われているRTC基板ZS-042と6821との間でI2C通信を試みているのですが、今のところうまくいっていません。
(2MHzのMPUではI2Cの推奨の最低値である100KHzはとても無理で50KHz程度の速度しか出ないようなのですが、これが原因ではないとは思いますが。。。)


RTCとの通信実験中


これができたら、基板の製作は一応打ち止めにして、あとはFLEX上のソフトを活用して、プログラムの制作に本腰を入れようかと思います。

実現したいものとしては、まずはツール類の充実と、あとは願望ですが、
 MC09の改造、6809用コンパイラの自作、OS-9Level1の移植
などがあるのですが、いずれも難度が高いものばかりですので、どうなりますやら。。。

(いずれにしても趣味の世界ですので、無駄な「タイヤの再発明」をモットーとしており、ツール類を始めとしてアセンブラや逆アセンブラ等もすべて自作したものを使用することにしていますので、言語類も自作したいのです。。。究極はOSの自作でしょうか。)

OS-9の移植ですが、手元にFM-7用Level1、FM77AV40用Level2のライセンスがあり、Level1の方は今は使用していないので、これを使えればと考えています。
(以前、FM77AV40上でOS-9用のROM,RAMディスクとWindows上の仮想ドライブを製作した経験がありますので、それを生かせれば何とかなるかなあ。。。)