2024年10月07日

プ〇ステコントローラコンバータ高速版

先日アップしたプ〇ステコントローラ ATARI変換器ですが、6ボタンの切替に思ったより時間がかかっているようです。
測定したところ、25μs程度掛かっています。本来はマルチプレクサで切り替えるだけの装置ですので圧倒的に時間が長いのはソフトウェア処理である以上、致し方ないものなのですが、できるだけ早いに越したことがないので早い設定に変更しました。
といっても、消費電流を考えいままでPICのPLLを止めて8MHz駆動にしていたものをPLLを有効にし、32MHz駆動にしたのみです。
パッド情報の更新をそこまで早くする必要はありませんし、SPIの速度も速すぎるとコントローラが反応できないのでそのあたりは遅くする設定に変更していますがそれだけの変更になっています。
この状態で6μs程度まで短くなっていると思います。コントローラの読み込みは本体側はソフトで行っていると思いますのでそのソフトがどの程度待ってからポートを読みに行っているのか、ソフトによって時間はまちまちだと思いますので動作確認いただけると幸いです。
PS2atari.X.241007.zip
posted by プー at 15:42| Comment(0) | 日記 | 更新情報をチェックする

2024年09月25日

プ〇ステコントローラコンバータ

MiSTerはUSB接続のゲームコントローラが使用できるので現在でも入手に難はありませんが、DE0やDE0-CV、1chip MSXのコントローラは9pin DSUBコネクタの付いたコントローラ、通称ATARI互換のコントローラ使用を想定しています。こちらは新品では出ていませんし、中古であればものを選ばなければ比較的容易に入手は出来ますが、FM TOWNS用には6padに拡張したものがあり、こちらは多少入手が困難なようです。
まぁ、無いものは作ってしまえばよいわけですがコントローラ部分は手への馴染みの問題があり一から作るのは結構大変です。
(昔、ユニバーサル基板とタクトスイッチで作ったことはありますが手が痛くなったり押しにくかったり。)
なので、既存の(別機種用)コントローラを流用するのが手っ取り早いと思います。一番入手が容易なのはUSBコントローラなのですが、USBホスト側をマイコンで扱うのは難儀なことですのでUSBは諦めて、それ以外で手元にあるコントローラでボタン数に余裕のあるものを探したところ、ゲーム機のプ〇イステーション(1 or 2)のコントローラが発掘されました。これであればノーマルの物でも10個のボタンがあり、6pad+Select+Runの8ボタン全てに割り当て可能です。これをATARI互換に変換するボードを作成しました。
このコントローラは本体との通信をSPIプロトコルで行うようです。SPIならPIC等の安価なマイコンで通信可能であり、有名な機種でもありネットに情報も溢れています。本体側コネクタもAliExpress等で安価に入手できそうです。ということで早速作ってみました。

回路図:PSCONT_SCH.pdf
パターン図:PSCONT.pdf
プログラム:PS2atari.X.zip

使用するマイコンはPIC16F1827、僕はDIPタイプを使いました。

肝心な6padに関しては、対応したゲームを持っていないため確認できていません。COM信号の変化には即座に対応する必要があるためCOM信号の変化での出力信号切替のみ割り込みで処理し、それ以外の処理はポーリングで処理しています。
×-A 〇-B □-X △-Y L1-Z R1-Cに割りあてています。
プルアップ抵抗は1~5kΩ、コンデンサはそこらへんにある適当な(0.01~2μF程度のMLCC、数十μFの電解)コンデンサでいいと思います。
出力はオープンドレインにしてありますので3.3VでプルアップしてあればそのままFPGAの入力に直結できます。
PS2atari.jpg
posted by プー at 09:37| Comment(0) | 日記 | 更新情報をチェックする

2024年06月27日

Linux for FMR

FM TOWNSには結構早い段階でLinuxが移植されており、現在でもまだ更新が続いております。
FM TOWNSとアーキテクチャ的に近いFMRにも移植はされておりますが、かなり古いものしかなく、僕の手持ちは2.0.14バージョンです。
この時代のカーネルはswapはパーティションあたり128MBしか使用できない等、いろいろ使いづらいところがあり、もう少し新しいバージョンのカーネルを使いたいと常々思っておりました。
ちなみに僕のFM TOWNS 20Fで使用しているカーネルは2.4.33ですので同じバージョンなら都合がいい、ということで移植を始めています。
2.0.14もTOWNS用にさらにパッチを充てることでFMR用にする手順です。

まだまだ動作するところまでは至っておらず、何とかカーネルが起動するところまで達することができました。
FMR-linux-1.jpg
ここに到達するまでは、まず画面表示に手こずり、次がタイマ割り込みが掛からないところにはまり、で現在の状況です。
mmあたりが原因だと思うのですが、arch/i386/mm/init.c内でzap_low_mappings()関数で止まってしまいます。
set_pgdを行うループで1ループ目で止まってしまう状況。swapper_pg_dir[i]に0を書き込むループです。書き込む前の値が0x102027で、これは正常に起動するTOWNSの同バージョンでも同値でした。プロテクトモードのメモリ管理は僕には難しすぎてよくわかりませんが、おそらくそのあたりが原因だと思います。
posted by プー at 23:28| Comment(0) | 日記 | 更新情報をチェックする

2024年05月07日

MIDI修正

MIDI I/FであるYM3802にはタイマーや割り込み機能が搭載されていますが
今まではただのFIFO付MIDI速度に合わせたUARTでした。
ソフトによっては割り込み等使用せずに動作しているようですが、やはり割り込みを使用するソフトも多いので対応させました。
タイマに関してはかなり怪しい実装になっていると思います。OutsideX68000だけでは理解できないことだらけです。
データシートを読んでもわからないし、アプリケーションノートは入手できないし。
MIDIの用語を理解すれば多少は理解できるのかもしれません。MIDIクロックタイマーは記述はしましたが値をどこでも使っていないし、
レコーディングカウンタやプレイバックカウンタは実装すらしていません。割り込みのかかる汎用タイマとクリックカウンタのみ、一応機能しそうな実装にしたつもりです。

追記<5/9>
割り込み関係の修正とMIDI送信バッファはFIFOがあるため不要と判断し削除(ゲート数削減)しています。

DE0-CV版:release-F68k_MiSTer.240509.qar
DE0-CV ディスクエミュレーション版:release-F68k_DE0CVDEMU.240509.qar
DE10-nano MiSTer版:release-F68k_MiSTer.240509.qar
DE10-nano MiSTer FDCエミュレーション版:release-F68k_MiSTerFDC.240509.qar
posted by プー at 20:40| Comment(1) | リリース/X68k | 更新情報をチェックする

2024年05月03日

MT32-pi対応

X68000コアはかなり初期の段階からMIDI I/Fに対応させています。
これは、どうしてもMIDIで音楽を再生させたかった、という理由ではなく、使用しているMPUコアであるtg68がBUS ERRORを発生させられない構造であることから実装せざるを得ない、というところから始まっています。
MIDI I/F対応ゲームではMIDI I/Fをアクセスし、アクセス出来たらMIDI I/F搭載、バスエラーが発生したら非搭載、という判断をしているソフトがあり、バスエラーを発生させられない=搭載するしか選択肢がなかったためです。同様にメモリに関しても搭載容量を認識させるためにバスエラーを用いているルーチンがIPLにありますが、これを回避させるために最大容量まで実装、またSRAMデータに細工をしてメモリチェックより前で別ルーチンに飛ぶようにしています。

そんなこんなでMIDI I/Fは搭載してあるのですが、僕自身MIDI音源は持っていません。一部のユーザの方でMIDI I/Fの動作確認をしていただけているという情報は頂いて感謝しておりますが何せ自分自身ではチェックできていませんでした。
そんな中、raspberry piを用いたソフトMIDI音源がMiSTerの姉妹プロジェクトとして立ち上がっており、MiSTerオフィシャルに移植された方ではこれに対応しているようですのでこちらのコアにもこれを盛り込みました。MT32-piのLCD出力をコア画面に重ねる機能もオフィシャル版にはありますがそれはまだ移植できていません。(設定にはありますが機能しません)
合わせて、MiSTer本体側のRTLもバージョンアップされており、これに合わせて(DISK emulation関連)RTLの更新をしています。
MiSTerオフィシャル側はMIDI出力側FIFOの深さを深くしており、ソフト動作もそのほうが良さそうですのでその変更も行っています。
(僕のオリジナルRTL部分ではその部分の変更のみ。従いMT32-pi直結ではないDE0-CVでの変更はその部分の変更のみです)
DE0-CV 実ドライブ版:release-F68k_DE0CV.240503.qar
DE0-CV ディスクエミュレーション版:release-F68k_DE0CVDEMU.240503.qar
MiSTer FDDエミュレーション(D88)版:release-F68k_MiSTer.240503.qar
MiSTer FDCエミュレーション(XDF)版:release-F68k_MiSTerFDC.240503.qar
posted by プー at 21:34| Comment(0) | 日記 | 更新情報をチェックする

2024年04月10日

TOWNS、久しぶりの更新です

TOWNSのRTLを久しぶりに見直しました。
現在一生懸命実機の方をメンテナンスしていますがまぁそれとあまり関係ありません。
タイマ周辺とI/O CVRAMあたりの修正をしています。あと、こっそり6ボタンパッドにも対応させました。
release-TOWNS_240409.qar
アーカイブ内に合成済み.rbfファイルも入れてありますので単純にそれをロードすれば動くと思います。
怪しくも、Windows3.1は動作するようになりました。TownsOSは相変わらず起動できませんがTownsOS on DOS6はTownsOSのマウスカーソルが表示されるところまでは進みました。
(表示されるだけでマウスを動かしてもピクリとも動きませんが)
win3_1.png
posted by プー at 18:47| Comment(0) | TOWNS | 更新情報をチェックする

2024年01月08日

うちのTOWNS

あけましておめでとうございます。2024年もよろしくお願いします。
ということで、年末年始休みが終わったのですが、その前後してTOWNS実機もメンテナンスしましたのでそのメンテナンスの中で分かったこと等を記録していきたいと思います。

<ベース機種>
FM-TOWNS 20F
<CPU>
i386DX(20MHz)⇒CX486DLC-25(20MHz動作)⇒CX486DRx2 20/40(32MHz動作)
<メモリ>
26MB
<キーボード>
FMR-50付属(FMRマウス端子付き)
<マウス>
TOWNSマウス、PS/2マウス→バスマウス変換しFMRマウス接続
<光学ドライブ>
本体内蔵(CD-R読めない)、SATA DVDマルチ→SCSI変換
<ストレージ>
SATA SSD→SCSI変換
<LAN>
FM50L189→FM50L187
<OS>
Windows3.1,95 MS-DOS 3.1,6.2 TownsOS 1.1,2.1 Linux(Slackware/Plamo)
<その他>
全アルミ電解を新品に交換、電源をATX化(スイッチやソフト制御はPICでの制御回路を搭載し対応)

オリジナルのi386DXではWindows95はインストール途中で止まってしまいますが、CX486DLCに交換し、キャッシュを有効にした状態ではファイルコピーは最後まで進むようです。但し、再起動後はフリーズしてしまいます。SAFE MODEであれば起動できるようです。

キャッシュを有効にした状態ではTOWNSマウスはOSやソフトによって正常に動作しないようです。マウスに送るパルス幅が短くなってしまうためだと思います。FMRマウスであれば移動に対しデータを送信し、割り込みが掛かるのでスムーズに動作するし飛びも発生しません。ただ、対応ソフトが限られます。

LANはL189を当初は使用していましたが、CPUを交換したりしているうちにLinuxの起動時LANドライバのロードでハングアップする頻度がどんどん高くなり、L187に交換しています。L187に交換したのが良かったのかN189が単純にくたばってしまっただけなのかは分かりませんがL187では正常にネットワークに繋がっています。


posted by プー at 22:33| Comment(0) | 日記 | 更新情報をチェックする

2023年11月18日

TOWNS 20F CPU交換

電源もATX電源内蔵化して元気に動くようになったTOWNSですが、まぁ元気といってもさすがは386DX 16MHz。とても遅いです。
なので互換CPUに載せ替えを行いました。載せ替えたのはCyrixのCX486DLC-25。
TOWNSは3代目の20Fなのですが、このあたりのTOWNSはCPUがメイン基板に直接はんだ付けされています。なのでまずは現在ついているCPUを剝がすところから始まります。
いろいろ試してみましたが、最終的にうまくいったのは噴流式はんだ槽でした。CPU近傍、はんだ面に実装されている部品ははんだ槽で取れてしまうため、先に外しておきます。20Fではセラミック4個とタンタル4個の面実装コンデンサが該当しましたので外しています。
また、その周辺もブリッジしたりする可能性があるのでCPU周囲はマスキングテープで養生しておきます。
この状態で噴流槽に浸し、数秒でCPUが浮いてくる為ピンセットを使ってCPUを基板から抜き取ります。
交換するCPUを刺すためにはスルーホールのはんだを抜く必要があるのでバキューム式でソルダーで全ピンのはんだを抜いています。
その後、交換するCPUを刺してはんだ付けしなおせばCPU交換は完了なのですが、もっと良いCPUが今後入手できるかもしれませんし何らかの理由で元に戻す必要が出るかもしれませんのでCPUをコネクタ化しています。386DXのパッケージは132ピンPGAです。新品で386DXが売られていたころであればソケットやZIFソケットも入手できたのでしょうが現在はなかなか入手困難です。代用として1列タイプの丸ピンソケットを必要な本数に折って、配置に合わせて実装しました。正確に言うとCPUにICソケットを刺した状態ではんだ付けしています。はんだ付けもさすがに132ピン手はんだするのは面倒なので液体フラックスを基板に塗布し、再度噴流槽ではんだ付けしています。
本来であればこれでめでたし、めでたしだったのですが、最初の時には全く起動しない状態になってしまいました。CPUをもとの386DXに戻しても起動しません。パターンを切った?拡大鏡でしっかりと見直しましたがおかしなところは見当たりません。内層?であればお手上げです。
ダメ元でコネクタを外し、元の386DXを基板直接はんだに戻したところ見事復活しました。であればCX486を直接はんだしたらどうなるか、やってみましたが、こちらも正常に動作します。じゃ、なんで?折った丸ピンソケットの余りをCPUの足に刺したところスカスカです。どうやらソケットの穴径が大きく接触不良を起こしているようです。386DXの足のピン径はデータシートによるとφ0.47です。購入した丸ピンソケットはデータシートで適用ピン径の記載がありませんでした。別の部品で、国内メーカのやはり丸ピン一列ICソケットのデータシートを確認するとφ0.47が範囲内に入っていましたのでこれを購入しなおし、実装しなおしたところ今度は正常に起動してくれています。CPUを交換する際も元のコネクタではCPUを素手で引っ張れば簡単に交換できましたが新コネクタではドライバ頭等を使わないと抜けませんのできちんと接触しているようです。
ということでめでたく386DX-16MHz⇒CX486DLC-16MHzになりました。CPU自体は25MHz品ですが、25MHzでは起動もできませんでした。20MHzでは、TOS,Win3.1,Linuxともに起動は出来ますが、Win3.1起動時の「ジャジャーン」の音が高くなっています。周波数が1.25倍になったため2音程度上がっているのでしょうか。それだけならまぁ気にしなければよいのでしょうが、LANに正常に接続できなくなってしまいました。拡張ボードに出ているクロックは本来8MHzのはずなので、これが10MHzになり、タイミングが合わなくなってしまったものと思われます。拡張ボード側のクロックをメインクロックの1/3に設定できるのであれば6.67MHzとなり動いてくれると思うのですが簡単に変更できるものなのか。クロックも容易に交換できるようにコネクタ化しています。(ピンの構造上、オシレータステムとコネクタで接触してしまう可能性があるため簡易的に紙をコネクタとオシレータの間に挟み絶縁しています)
当面はこれで頑張ってもらおうと思います。次はCPU近くにあるCN5、これを何とかしたいな、と思っています。これ、あまり市場に出ないんだよな。
CPU付近.jpg

コネクタ化.jpg
posted by プー at 21:01| Comment(0) | TOWNS | 更新情報をチェックする