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

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個のファイルを掲載することはしませんでしたが、試してみようと思われた方には連絡していただければお送りできます。)

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


2024年12月30日月曜日

「FPGAボードで6809を作ってNitros9を走らせてみました」の基板化

 「FPGAボードで6809を作ってNitros9を走らせてみました」の基板を作成しました

2022年6月22日に上記のタイトルでアップしたCycloneⅡ(EP2C5T)搭載のFPGAボードの工作の際には、有り合わせの基板に手配線で仕上げました。それ以降、折に触れ使用してきましたが、いかにもそのやっつけ感が気になっていました。また、FPGAに書き込むプログラムを変えればZ80としても6809としても動作するのはすごいことなのですが、切り替えて使用するためにはその都度FPGAのプログラムを書き換えるという手間がかかります。

また、以前も参考にさせていただいたブログ「石原 博の覚書(https://blog.goo.ne.jp/ishihara-h/e/ea09920e03694aab5227db6f08fde76e)」を見ていて、プリント基板を作成できればZ80、6809のそれぞれ専用のボードが作れるなと思っていました。

そんな時に、倍ぐらいに価格が上がってしまっていたFPGAボードがAliExpressで以前のような価格で購入できるショップを見つけたので2枚購入し、プリント基板も作成することで、Z80、6809それぞれの専用ボードとすることにしました。

参考にしたオリジナルの記事

https://www.retrobrewcomputers.org/doku.php?id=boards:sbc:multicomp:cycloneii-c:start

の中にはプリント基板の回路等のデータがあることは知っていたのですが、それはEagleによるもので、以前、私が常用しているKiCadで読み込んで処理しようとしてうまくできずあきらめてしまっていたので、今回はEagleの無料版をインストールしてgerberデータを作成してみました。使い慣れたKiCadによるgerberデータではないので、正しく作られているのかどうか不安でしたが、そのまま発注してみました。

出来上がった基板が下の画像のものです。


基板とFPGAボード

かなりの高密度で、シルク印刷がパターンの穴等によって読めなくなっている箇所も複数あり、迷うところもありましたがオリジナルの記事等を参考にして何とか実装してみました。

それが下の画像の2枚です。


製作した基板2枚

私は基本、シリアル入力を使用するのですが、最初に作成した左の基板はうまく動かなかったので、PS/2キーボード入力、VGA出力に加えてRS-232Cコネクタまで実装してしまいました。動作させるために必要な最小限のものだけを実装したのが右の基板です。また、オリジナルで使用されているSDカードモジュールと同じものが入手できなかったので手持ちのもので間に合わせることになりましたが、モジュールを瞬間接着剤で固定して画像のように配線することで(多少見苦しいですが)無事に動作させることができました。

左下の6ピンのシリアル端子の上に乗っているのは、手持ちのUSB-シリアル変換ケーブルの端子配置に変換するためのアダプタで、最初に作成した基板が動作しなかった(ように見えた)のは、この配線を間違えていたためというお粗末な話でした。


参考までに、作成を通して気づいた点を列記しておきます。

1.gerberデータはオリジナルのデータからEagleで作成できますが、SDカードモジュール部のパターンと合致するモジュールは多分入手困難です。

2.シリアルの6ピン端子の配列は一般のUSB-シリアル変換ケーブルのピン配列と合致しない可能性があります。

3.512KBのSRAMのアクセススピードについてですが、上の画像のように、55nsのAS6C4008-55PCNだけでなく、70nsのHM628512CLP-7でも使用できました。

4.Z-80用としては mc-2g-1024.zip 中の14-Multicompを使用しましたが、何故かTTY版は正常に動作しませんでした。動作するVGA版をインストールしましたが、基板上のVDUFFD0端子をショートすることでシリアル入出力に切り替えることができました。

5.6809用としては multicomp09_nov2016.zip 中のものを使用しました。

6.FPGAボード上のROMに書き込むための手順については、ちかてつ.comさんの「Amazonの激安基板(CycloneⅡ)ではじめるFPGA開発(JICプログラミング編)(https://tikatetu.com/electronics/amazon-fpga-jic/)」を参考にさせていただきました。ありがとうございます。

今取り組んでいるいくつかのテーマがいずれもうまく進まず、いささか倦んでしまっていたのですが、ちょうど良い気分転換になりました。


2024年10月18日金曜日

自作の6809SBCにOS-9を移植する試み(その3 とりあえずROM化に成功)

 とりあえずですがSBCでOS-9が動作しました

その2で報告しましたように、いくつかのモジュールを書き換えてみたり、並び順を変えたりしましたが、何をどうやっても動作しませんでした。

そこで、実際にFM-7上でOS-9Level1が動作している時のメモリ上のモジュールの状態を調べてみようと考えました。そのためにはメモリ内容をダンプするmdumpというコマンドが必要ですが、もちろん、標準コマンドにはありません。自作してもよいのですが、時間がかかりそうですので、既成のものがないかとネットも含めて探しましたが見つかりませんでした。

唯一見つけたのは、末尾に載せた参考文献1に掲載されているmdumpのソースリストです。しかし、これはかなり以前にソースを入力してアセンブルしてみたが、正常に動作しなかったというものです。今回はどうしてもこれが必要ということで、本気で取り組んでみました。本体の他に4つのルーチンが必要なのですが、その中のahexdだけが参考文献1には載っておらず、参考文献2の方に載っているのでそれを取り込んでアセンブルしました。結果、アセンブルはできたのですが、やはり正常に動作しません。ソースを調べたところ、一行抜けがあって2バイト分飛んでいます。参考文献にはmdumpの他にfdumpのソースもあるのですが、それも同様なルーチン中で同じ個所が飛んでいます。。。


参考文献の2冊


どんな処理を補うべきかを判断するのに丸3日(!)かかりましたが(当たり前ですが他の方の書かれたアセンブルリストを理解するのは本当に大変です...)、見つけました。それを補って無事に動作するmdump(とついでにfdumpも)を作成することができました。

作成したmdumpを使ってFM-7上のOS-9Level1のモジュールOS9p1の位置を確認したところ、何と元にしているROM化の記事中のアドレスと5バイトずれているではありませんか。記事ではOS9p1は$F3F3からとなっているのですが、実際には$F3EEから始まっているのです。(OS9p1は$87,$CDから始まり、サイズは$07F2バイト)


OS9p1の位置を確認


ということで、OS9p1を$F3EEからに配置し、OS9p1の直後に置くセカンドベクタと$FFF2からのベクタアドレスをすべて5バイト小さい値に変更して配置してみました。

なお、動作テストのために、前回までは10msのインターバルタイマとACIA用のクロックが生成されているかをオシロで確認していましたが、今回は、RWモジュール中にACIAの入出力ルーチンを書き込んでおいて、Windows機のTeraTermからのキー入力がそのままエコーバックするかどうかで確認できるようにしました。(ACIAの初期化ルーチンはSYSGO中に追加しました。)

結果ですが、希望通りキー入力がそのままエコーバックされてきましたので、とりあえずですが、ROM中に書き込んだOS-9のモジュールが正常に動作していることが確認できました。(三か月近くの苦労が報われました、、、)

なお、前回のその2でSCFをFM-8のものに差し替えたと書きましたが、FM-7のものに戻しても正常に動作しましたので、以降、FM-7のものを使うことにします。


これからすべきことなど

とりあえず、ACIAによる入出力ルーチンを直接書き込んで動作を確認したわけですが、OS-9の作法としては、SCFの下に来るべきACIAドライバルーチンを作成し、その下にACIA-1用とACIA-2用のデバイスディスクリプタを用意するという形になります。また、ディスクが無ければファイルの読み込み・書き出しもできないのでそのドライバも用意しなければなりません。

構想としては、以前、FM77AV40SXで常用しているLevel2でWindows機上に仮想ドライブを構築してそれをACIAを通して読み書きするというドライバを書いて使用していましたので、そのような形を考えています。そのためにACIAを2個用意してあるのでした。

ドライバ作成には時間がかかりそうですが、出来上がりましたら公開する予定です。とりあえず、ハードの方は完成ということで回路図を載せておきます。

動作確認ができたのは下記の8253を使用した回路です。

82C54バージョンの回路図


6809Pと6809EPの両方が使えるようにするためにクロック周りが複雑になっていますが、他には特に変わった部分はありません。8253ではなく8MHzをカウント可能な82C54を使用しています。そのカウンタ0をACIAのクロック生成に、カウンタ1をOS-9のインターバルタイマとして、カウンタ2をASSIST09モニタを使用する際のNMI割り込みに使用しています。

6840を使用した回路です。

63B40バージョンの回路図


回路図中のP-ROMのA14,A13に切り替えスイッチがついていますが、A14のスイッチが現在の基板からの変更点です。32KB以上のP-ROMを使用して、下図のようにOS-9システムとモニタプログラムを切り替えられるように考えています。OS-9システムは$4000~$7FFFの範囲の上位か下位のどちらかに入れ、モニタープログラムは$0000~$3FFFの範囲の上位と下位に自作モニターとASSIST09をそれぞれ入れる予定です。


P-ROM中のシステム配置

あとは、上記の回路図で基板を作り直し、I/O関係のモジュール(ACIAによる入出力ルーチンや仮想ドライブ用ルーチンなど)を作成すれば一応の完成となります。まだまだ時間がかかるかと思いますが、途中経過などをその都度報告をさせていただきます。


元にした記事 「追究特集 OS-9活用テクノロジー」(マイコンピュータNo.21)中の記事「OS-9のROM化」(P148~165)
参考文献1 「FM-7・8 OS-9Level1解析マニュアルⅠ(金井隆著)秀和システム社」
参考文献2 「OS-9/6809Level2解析マニュアル(金井隆著)秀和システム社」


2024年10月16日水曜日

自作の6809SBCにOS-9を移植する試み(その2 OS-9のモジュールを構成)

 OS-9Level1のモジュールのうち必要なものを構成しましたが...

移植しようとしているのはFM-7用のOS-9Level1です。

FM-7用のLevel1とFM77AV40用のLevel2を所有しているのですが、常用しているのはもちろんLevel2で、Level1はほとんど使用していないのでこれを移植しようと考えたわけです。

これが所有しているOS-9のLevel1とLevel2です。


OS-9L1とL2のシステムディスク

以前は、OS-9をディスクから読み込んで起動するものだと思い込んでいたので、起動プロセスのイメージがなかなかつかめなかったのですが、参考にした「OS-9をROM化する」によると、8KBのROM中にOS-9のカーネル(OS9P1,OS9P2)や必要なモジュールを書き込んでおいてOS9P1を起動するだけで、メモリ(ROM)中のモジュールを検索してシステムに登録してくれるとのことです。

OS-9の一般的な構造を下に示します。

OS-9の構造

今回のプリンタ・バッファのモジュール構成を下に示します。

モジュール構成

プリンタ・バッファとして必要なモジュールは下図のようにP-ROM中に配置されています。

モジュールの配置

必要なモジュールのうち、IOMAN,SCF,OS9P2,OS9P1は動作しているOS-9から取り出します。残りのうちのOS9P1より上のINITからIODRVまでの5つは今回用意されたもので、OS-9システムとして必ず必要なものです。OS9P1の下の5つはプリンタ・バッファとして必要なもので、今回はSBCとして最小限の動作を目標としているので不要と考えています。

この配置のうち、OS9P1の位置はFM-7でのOS9P1の配置と合わせてあり、それによって割り込みベクタの値を変えずに済むように考慮されていますので、これに倣うことにしましたが、何とこの配置に従って並べていくとOS9P1の位置が$F3F3よりも後ろになってしまうのです。その原因ですが、SCFのサイズが配置図中では$0438であるのに対して、現用のFM-7から取り出したSCFでは$0504と大きいのです。

手持ちのFM-7のOS-9Level1のバージョンは1.2でして、もしかしたら1.2以前のバージョンがあったのかもしれません。仕方がないので、モジュールを並べ替えてOS9P1の位置を合わせてROMに焼いて試してみましたがうまく行きません。

FM-8版OS-9を所有している知人にお願いしてモジュールのサイズを確認してもらったところ、FM-8版のSCFは$438バイトで記事中のものと一致しました。ということで、とりあえずこのSCFを使わせてもらうことにして上記の配置通りに並べてみました。結果ですが、やはり動作しませんでした。。。

そもそもこの記事はプリンタバッファの製作記ですので、I/Oとしてはパソコンから受け取ったデータをバッファに溜めておいてプリンタに書き出すという機能しかありません。製作したSBCは基本部分だけですのでI/Oがありません。動作しているかどうかは、CLOCKモジュールに書かれている10msのインターバルタイマが機能しているかどうかで判断しています。CLOCKモジュールが正常に動作していればカーネルまで正常に動作していると判断できます。

しかし、そのインターバルタイマが動作しているようにも見えるのですが、不安定なのです。電源を何度も入り切りしたり、リセットボタンを複数回押しているとタイマやACIAのクロックが現れたりするのです。その1に書きましたように、モニタが正常に動作することは確認済みですので、ハードに不具合はないはずです。

ということで、まだ動作しない原因は掴めていません。

その3に続きます。


2024年10月10日木曜日

自作の6809SBCにOS-9を移植する試み(その1 SBCの製作)

 OS-9を移植するための2種のSBCを作ってみましたがモニターを走らせるだけで一苦労

数年前から6809用OS-9をSBCで走らせたいと思っていましたが、考えているだけではちっとも進まないので、思い切って、まずハードの製作から始めました。

実は以前、OS-9と互換性があると言われているNitros9の資料中にSBC用のモニターのソースがありましたので、そのメモリマップに合わせて6809ボードを作成してみたのですが、残念ながらそのモニターは動作しませんでした。。。(ソースを読んでも良く分からない個所もあって、それ以上は先に進めずギブアップ。)

ということで、今回参考にしたのは「マイコンピュータ21(CQ出版社)」中の「OS-9のROM化ープリンタ・バッファを例としてー」という記事です。

この回路中の6809MPU、2個の6850ACIA、8253PIC、RAM、PROMの部分のみを取り出してSBCとしました。この構成ですと私が自作しているSBCとほとんど同じ構成ですので、ほぼI/Oマップの変更のみで作成できました。ただし、8253PICを使用したことがなかったので、使い慣れている6840PTMを使用するボードも作成しました。

下の画像が製作した2種のカードです。

左が68B40使用、右が82C54使用のもの


以前から作成してきた6802ボード、6809ボード、6802/6809デュアルボードを元にしていますので、6809と6809Eのどちらでも使用できます。OS-9Level1をROMに収めるために、ROM領域を$E100~$FFFFの8KB弱と拡げ、I/O領域を$E000~$E0FFに、RAM領域を$0000~$DFFFとなるように変更しました。
また、カウンタICとして今までは6840を使用していましたが、参考にした回路が8253を使用していましたので、8253を使用した回路も作成しました。左が6840使用の従来の回路に似た構成のもので、右が8253を使用したものですが、回路拡張のためのコネクタのスペースを確保するために128KBのRAMをSOCタイプに変更してあります。(なお、実際には6840は63B40を、6850は63B50を、8253は82C54を使用しています。)

(1)ハードの動作確認のために入れたモニターの不具合にハマる
まずハードが正常に動作するかを確認するためにROMにモニタープログラムを入れて走らせてみました。従来から使用してきている自作のモニターでは正常に動作しましたが、ASSIST09を入れてみたところ、なんとRコマンドに余計なものが表示されるという異常が生じました。
今まで普通に使用してきたASSIST09のI/Oのアドレスを変更してアセンブルし直しただけなのに不具合が生じるのは不思議で、ついにはソースを元の書籍「MC6809-MC6809Eマイクロプロセッサ プログラミング マニュアル」中のソースリストと比較することまでしてみましたが間違いはありません。
この原因を見つけるのに2週間ほど要しましたが、結局、使用している自作のクロスアセンブラのバグのために、FCB 'C,'C,0,9が$43,$43,$07,$09となってしまっていたのが原因でした。以前は正しく変換できていたのですが、'Cでも'C'でも変換できるように手直しをした際にバグが入り込んだようです。今はクロスアセンブラの修正をする時間がないので、とりあえずソースをFCB 'C,'C,00,9と変更して正しく変換されるようにしました。
結局、ハードは正常に動作していたのに、モニタの不具合で右往左往することになってしまいました...

(2)2種のカウンタICの使い方でハマる
また、2種のカウンタICの違いにも苦労させられました。
63B40を使用した今までのボードでは、通信用の63B50ACIAのクロック生成のためにシステムクロックの4倍値の8MHzを74HC161で13分周して615KHzを作り出すことで38400baudで通信していました。


74HC161による13分周回路


しかし、参考にした8253使用の回路では、ACIA用のクロックを8253で生成しているのです。同じように63B40でもクロックを生成できれば74HC161を省略できます。

ということで、82C54使用の回路では74HC161を実装せずに82C54のカウンタ0を使用してACIA用の615KHzを生成しています。(カウンタ1はOS-9用、2はASSIST09のTraceコマンド用)
ところが、63B40使用の回路では8MHzを13分周して615KHzを作り出すことができないのです。8253と比べて6840のプログラムは複雑なので、プログラムのミスかと思いあれこれと書き直してみるのですが、何をどうやってもうまく行きません。入力が2MHzだとプログラム通りの分周値が得られるのですが、8MHzだとダメです。挙句の果てには6840ユーザーマニュアル中のサンプルプログラム通りにプログラムしてみましたがやはりダメです。
どうなっているのだろうとネットで検索した結果、6840のカウンタはE入力と同期してカウントダウンしているので、Eよりも高い周波数の入力はカウントできないという書き込みを見つけました。
ということで、結局、63B40使用のボードではACIA用のクロックは従来のボードと同様74HC161で生成することになりました。

さらに、2種のカウンタICのプログラムの違いですが、8253ではコントロールワード中でカウンタ0,1,2の選択と動作モード等の設定が同時にできるので簡単に設定ができ、カウントデータのロードで下位バイトを先に、上位バイトを後に書き込むという順序を守るという注意点があるぐらいなのに対して、6840の方は2つのコントロールレジスタで3つのカウンタを制御しているために、カウンタ1と3ではまずカウンタを選択してからコントロールワードを書き込むという順序になること、そして、コントロールレジスタ1のビット0がソフトウエアリセットになっているので、0にしないと全てのカウンタが止まったままになること、さらにコントロールレジスタ2のビット0がカウンタ1と3の選択を兼ねているために、選択をする際にはカウンタ2のコントロールワードが書き換わらないようにしなければならないことなどがあるので、3つのカウンタの設定順序にも注意が必要です。
迂闊なことに、今までは3つあるカウンタの内の1つしか使用したことがなかったので、これらのことに気づくまでに何と数週間を必要としました。。。

以上のような苦労をした挙句、何とかボードが正常に動作することが確認できましたので、次はいよいよOS-9の移植ですが、実はまだ成功していません。分からないことが多すぎるためですが、現状をその2に書きます。



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年12月7日木曜日

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

 FT245高速通信カードを用いるファイル転送ソフトのF-BASIC版とOS-9版を作成しました


【追記】Windows側のslwinft245.exeの機能拡張やOS-9版の修正をしましたので、次のブログ「FT245高速通信カードを用いるファイル転送ソフト(FLEX9版とOS-9版改)」の方にソフトの公開を移動しました。

今までFT245高速通信カードを用いる場合には、2D(2DD)ディスクを丸ごと転送するディスク転送ソフト(FDDIMG_RW77.exeやFT245DRV.exe)を使用していました。

しかし、いくら高速とはいえ2Dディスクで約1分、2DDディスクで約2分かかりますので、ファイルを一つだけコピーしたい場合には時間がかかりすぎです。
特に、Windows上の慣れたエディタで作成したプログラム等をF-BASICやOS-9等に転送して使用するという、私のプログラム開発の手順の中では転送時間が長いのは致命的です。
ということで、ディスク転送ソフトではなくファイル転送ソフトが必要と感じていました。

ディスク転送ソフトの場合にはOSの種類によらず、40(80)トラック、16x2セクタ/トラック
のディスクであればF-BASIC上のドライブソフトで転送できましたが(ただし、FLEX9だけは32セクタ/トラックなので転送できない)、ファイル転送の場合にはOSの機能を用いてファイルを読み書きしますので、当然OSに依存することになります。

ということで、まずは使用頻度の高いF-BASIC版を作成し、続いてOS-9版も作成しました。

Windows側のslwinft245.exeはもちろん、全OS共通です。
起動後にCOMポートとOSの選択をしたのちに使用可能状態になります。



Windows側のslwinft245




FM-7/77側のドライブソフトはOSに依存しますので、それぞれのOS用に作成しました。


【1】F-BASIC用のSLWINFT


まずF-BASIC用のSLWINFTを紹介します。
対象ドライブはデフォルトで1ですが、もちろん変更できます。
TXE機能のON,OFFはFT245通信カードの設定と一致させます。
(TXE機能がないカードの場合はOFFに設定します。)


FM-7/77側のSLWINFTメニュー



使用するソフト
〇FM-7/77側   メニュープログラムSLWINFT(F-BASIC)を実行する。
         起動時に機械語サブプログラムSLWINFToが読み込まれる。
         (SLWINFToは&H6000~&H61E7に配置される)
〇WindowsPC側 SLWINFT245.exeを実行する。

動作環境
〇FM-7     F-BASIC V3.0
〇FM77AV2   F-BASIC V3.0、V3.3
〇FM77AV40SX F-BASIC V3.0、V3.4
以上の環境で動作することを確認してあります。

使い方
◎WindowsPC -> FM-7/77 への転送
  FM-7/77側でメニュー2を選択する。
  Windows側で転送するファイルを選択(ドラッグ&ドロップまたは直接書き込み)して「FMへの書き込み」ボタンを押す。

  FM-7/77側に既に同名のファイルが存在する場合には、重ね書きをするかどうかを選択できます。

  ファイル種別は自動的に判別しますが、通常のバイナリファイルの場合は先頭に5バイトのヘッダー、末尾に5バイトのフッターが必要ですので、そのための情報として保存アドレスと実行アドレスをセットします。(既にヘッダー、フッターがついているファイルの場合はそのまま転送されます。)

◎FM-7/77 -> WindowsPC への転送
  Windows側で読み込んだファイルを保存するファイル名をセットして、「FMから読み込み」ボタンを押す。
  FM-7/77側のファイル名と異なるファイル名でも構いません。
  FM-7/77側でメニュー1を選択し、転送するファイル名を入力してEnterキーを押す。
  存在しないファイル名を入力した場合にはエラーメッセージが出て、再入力を促されます。
  機械語ファイルの場合にはヘッダーとフッターが削除された通常のバイナリファイルとして保存されます。(読み取った保存アドレスと実行アドレスは画面上に表示されます。)

その他
  FM-7/77側ではドライブ番号をメニュー3で変更できます。
  また、メニュー4でTXE機能を使用するかしないかを選択できます。通常は機能OFFで問題はありません。


【2】OS-9用のslwinftos9



OS-9側のslwinftos9のメニュー


使用するソフト
〇FM側      ドライブプログラムslwinftos9を実行する。
〇WindowsPC側 SLWINFT245.exe(F-BASIC版と同じ)を実行する。

 (FM側のslwinftos9をどうやってOS-9に読み込むかですが、OS-9のディスクもF-BASIC
上のディスク転送ソフトft245drvで転送できますので、これを利用してOS-9のディスクに
読み込みます。)

動作環境
〇FM77AV40SX OS-9Level2
 Level1では動作確認をしていません
 【12月15日追記】動作することを確認しました。

使い方
◎WindowsPC -> FM への転送


メニュー2の実行例

  FM側でメニュー2を選択する。
  「Send file from Windows...」が出て受信モードに入る。
  Windows側で転送するファイルを選択(ドラッグ&ドロップまたは直接書き込み)して「FMへの書き込み」ボタンを押す。このファイル名でFMに保存される。

  FM側に既に同名のファイルが存在する場合には上書きされる。

  ファイル種別は自動的に判別するので、実行モジュールファイルとテキストファイルのどちらであっても構わない。

◎FM -> WindowsPC への転送


メニュー1の実行例

  FM側でメニュー1を選択する。  
  Windows側で読み込んだファイルを保存するファイル名をセットして、「FMから読み込み」ボタンを押す。
  FM側のファイル名と異なるファイル名でも構いません。
  FM側でメニュー1を選択し、表示「Input file name:」に続いて転送するファイル名を入力してEnterキーを押す。
  存在しないファイル名を入力した場合にはメニューに戻ってしまうので、最初からやり直す。

その他
  メニュー3でTXE機能を使用するかしないかを選択できます。通常は機能OFFで構いません。

現在のところはF-BASIC版とOS-9版のみですが、順次CP/M版、FLEX9版を作成する予定です。

現在のF-BASIC版とOS-9版をOneDriveに上げておきますので、FT245高速通信カード(RAMディスク付きも)をお持ちの方は自由にご使用ください。
【12月15日追記】ソフトの公開は12月15日のブログに移動しました。



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以外は比較的安定しているようです。)

2022年6月22日水曜日

FPGAボードで6809を作ってNitros9を走らせてみました

安価なFPGAボードでOS-9互換と言われているNitros9を走らせてみました

「FPGAで6809を作ってOS9を動かす」というサイトを見て、同じFPGAボードを入手してNitros9を走らせようとしてみました。

 目的は2つありまして、一つはOS-9互換と言われていますが、本当なのかどうかを所有しているOS-9Level1(FM-7用)とLevel2(FM77AV40用)と比較して確認してみたいことと、もう一つは普段使用している自作の6809/6802DualボードでNitros9を走らせたいので、その前準備のためということです。

入手したFPGAボードは下画像のものです。ALTERAのCyclone IIのEP2C5が載っています。他に購入したのは3.3Vで動作するSRAMのみで、あとは全て手持ちの部品で済ませました。


購入したFPGAカード

ネットの情報に従って、裏面のR1, R2, R9, R10は取り外してあります。

その裏面

基板も使いまわしなので余計な穴が開いていたりします...

3.3Vの512KB SRAMが載っていますが、もう一個載せられるようにスペースを空けてあります。


製作したボード

まず最初の試みとして慣れているFLEX9を動作させる方が簡単かと思って、同じ著者の「FPGAで6809を作ってFLEXを動かすぞ」という記事の通りにインストールしてみることにしましたが、うまくいきませんでした。

コンパイルはエラー無く終了し、書き込みも一瞬で無事に終了します。コンフィグROMへの書き込みもできましたが、RAMでもROMでも動作しないのです。

FPGAに書き込んだ6809がまず動作してメッセージが表示され、続いてSDカードに書き込んだFLEX9が読み込まれて走るはずですが、画面には何も表示されません。SDカードを読みに行く気配がないので、それ以前のFPGAに書き込んだプログラムの動作がダメなようです。

一部Verilogで書かれているので、VHDLならともかくVerilogの細かいところは良く分かりません。

これはあかんということで、FLEX9ではなくOS-9の方も試みたのですが、やはり画面には何も表示されず、SDカードを読みにいく以前の段階に問題があるという状態でした。


ハードが悪いのかそれともソフトのせいか

何しろ回路が手配線なのでハードのミスがあるかもしれず、悪いのは回路なのかFPGAデータなのか、それともSDカードに書き込んだファイルなのかが全く分からず、途方に暮れるばかりでした。

そんな時に「Multicomp Cyclone II-CでCP/Mが動いた」という記事を見つけました。これも同じFPGAボードを使用しており、かつSDカードに書き込むイメージファイルも既に用意されていましたので、FPGA用のプログラムをそのままコンパイルして書き込み、さらに用意されているイメージファイルをSDカードにそのまま書き込むことで、あっさりとCP/Mが動作しました。


Z80書き込み中


CP/M3.0起動直後


CP/M3.0動作中


ハードには問題がなかった

この結果、ハードには問題がないことが確認できましたので、あとはFPGAに書き込むプログラムとSDカードに書き込むイメージファイルの作成という事に注力することができます。

FLEXとOS-9を走らせる記事は、こうすればできますよという手順を詳細に解説したというものではなく、分かっている人には分かるという書き方ですので、私のような素人には引っかかる個所が多すぎます。

ということで、あちこちを修正しながらコンパイルして実行することを繰り返しましたが、やはりSDカードを読みに行く前段階の、FPGAに書き込んだプログラムが動作しない状態から脱却できません...(VHDファイルのセット、コンパイル、実行の手順を数百回も繰り返したおかげで、操作手順だけは目を瞑っていても出来るぐらいになってしまいました...)


オリジナルのファイルで動作させることができた

結局、ブログ中のファイルを諦めて、元々のファイルから始めることにしてGithubにある「nealcrook/multicomp6809」をダウンロードし、その中のMicrocomputerPCBフォルダ中のMicrocomputer.vhdから作成することにしました。これについても色々と試行錯誤をしましたが、何とか6809を立ち上げることができました。

これはシリアル出力に設定してコンパイルした場合の出力画面です。まずCamelForthが立ち上がり、Enterー>OK表示ー>NITROS9入力でNitros9が立ち上がり、日付の入力の後、dir /d0でドライブ0の内容が表示されています。


シリアル出力の場合

こちらはビデオ出力に設定してコンパイルした場合で、PS/2キーボードから操作できます。


ビデオ出力の場合

なお、シリアル出力とビデオ出力の切り替えですが、VHDファイルの該当部分を有効・無効化するだけではダメで、シリアル出力に設定した場合はブログの著者による数か所の変更が必要なようです。(元のmulticomp6809中のVHDファイルと比較すると変更部が分かります。)

SDカードに書き込むデータファイルですが、ブログに書かれていますようにLinux環境で行いましたが、書かれていますようにbin\create_sd_imageをそのまま実行してもエラーで止まってしまいますので、実行行を一行ずつ手作業で修正しながら行いました。どうも、著者はLinuxかMac環境のようで(ファイルの改行コードが0x0D,0x0Aでなく0x0Aになっていた)、それもあって私のWindows環境では難しかったのかもしれません。

蛇足ですが、FPGAは便利なものですね。コンパイルに1分程度かかりますが、その手間をかけるだけで同じボードがZ80や6809に変身するのですから。また、ROMに書き込めば電源スイッチONで即起動しますし。

しかし、一ヶ月以上の試行錯誤の結果として何とか動作したので良かったのですが、つくづく自分の知識の無さを痛感しました。未だに理解しきれていない部分が多いですし、おまけに、何故かQuartus IIの13.0sp1をLinuxにインストールできない状態が続いています。


この後は

この後は、まず手持ちのOS-9L1, L2とどの位の互換性があるのかを確認してみたいと思います。その次には、いよいよ自作のボードマイコンへのNitros9の移植に挑戦したいです。