15年の間をあけて完成(注:完成してない)
2021.09.19
MSX用SPDIFカートリッジの作成
ってのを15年ほど前に作って放置されてたんだけども、今更になって続き作ってみました。
※にがさんの影響

というわけで、初めて基板外注というのをしてみました。
中華業者なので、送料と輸送時間がネックだけど、それでも2週間程度で送込みで2000円ちょっとで10枚作れる感じ。
結構お安いですので、配線多いものとかはボード作った方がいい時代かなと思いました。
ちなみにエッチング基板とかも実はやったことありませんので、穴あき基板でひたすらジャンパするような基板しか作ったことありません。

出来上がった基板がこちら。値段変わらないので無駄に10枚も作ってしまいました。


組み立てて強引にケースに入れた(といいつつ入ってない)のがこちら。

まあ試作だし見た目は適当で。

15年前と違い、FPGAの容量もかなり余裕があるので、出来上がったものとしては、
・Xilinx XC3S250E搭載(注:15年前からありそう…)
・カートリッジ内でスロット拡張
・1MByteのSRAMを搭載してゴールドキャパシタでバックアップ
・似非SCC-RAM互換のSCC
・OPLLはVM2413使用
・MSX-RS232C HW上位互換のUART(MAX 460Kbps)
・OPLLとRS232C用のBIOS
・メモリーマッパー(MSX1対応)
・FPGAとMSXのI/F(3.3V←→5V)はきちんとレベルシフタIC使用
が乗ったコンボカートリッジになりました。
FPGAはマルツのMFPGA-SPAR3Eというボードをそのまま載せてます。
物理的に無駄にでかいですがロジック的にやりたいことはできてます。
レベルシフタは実は直列抵抗だけでも問題なく動くはずなのですが、「やってみたかった」というだけで実装してます。無駄に高コストです。

本来DOS2はMSX1で動かないんですが(メモリーマッパー規格がそもそもMSX1対応ではない)、セグメントレジスタをHWリセットで初期する構造であればMSX1でも動くので、DOS2の機種ID判定を潰すとMSX1でもDOS2が走ります。

なので、MGSPとかを使うと、MSX1単体でMGSの再生ができて、デジタルオーディオ出力なのでノイズ皆無な再生とかできます。
VM2413の再現度はかなり高いと思いますが、ノートオン時の音が違うような気も・・・。もしかするとXilinx用に特化させたときに何かミスった可能性もありますが。

UARTは、HW的にそこそこ大きな受信バッファを持たせたので、高速でも安定して受信できます。
IOレベルでMSX-RS232C互換で、24倍速モードを持たせてあるので、高速モードにして、ソフト的に19200bpsモードにすると460Kbpsになります。
フックを乗っ取って画面表示をUARTに転送するのと、タイマ割り込みで受信データをキーバッファに詰めておくことで、疑似的にtelnetのようにリモートアクセスができます。
ファイル送信も可能なので、Windows PCでコンパイル→MSXに転送→MSXで実行、が(IO直接アクセスでキースキャンしない限り)MSXに触ることなく可能で、クロスコンパイル開発環境でとても便利です。




15年前から(?)作りたかったものなので、(見た目はともかく)入れたい機能全部入れて動くものができたので満足。

ソースコードの配布ってしていいものなのかよくわかりません。VM2413以外は全部自分で書いたコードですが、VM2413はXilinx用に手を(かなり)入れてるので。うーん。
2021.09.19 00:27 | 固定リンク | MSX | コメント (0)
MSX熱再燃
2021.05.28
まあ、にがさんに炊き付けられた(何)のがきっかけですが、
やっぱりMSXいじってるのって楽しいよね。

ここ15年くらいはがっつりいじってなかったけど、触り出すといろいろ思い出すものね。
というわけで、最近は結構連日いじってます。
いじれるハードって面白いよね。


・・・つまりまた何か出るかもよ。
2021.05.28 22:53 | 固定リンク | MSX
似非SDisk
2020.12.02



すこしだけ開発をお手伝いさせて頂きました。
あわせて、SDisk用EVAプレーヤーとWaveファイルプレーヤーを公開しましたので、よろしければ使ってみて下さい。

http://d4.princess.ne.jp/msx/soft1.htm
2020.12.02 21:07 | 固定リンク | MSX | コメント (0)
似非RAMDisk MAXIMUM
2020.11.11


ほんの少しだけ関わらせていただきました!よろしく!
2020.11.11 20:12 | 固定リンク | MSX | コメント (0)
Z80のバグ
2020.10.16
超放置してましたが最近MSXをまたいじり始めました。
近々なんか公開するかもね。

それはそれとして、既知情報ですが本家ZilogのZ80には割り込み関連のバグ(エラッタ)があります。

というのは、
LD A,I
LD A,R
という命令は

Iレジスタ、Rレジスタの内容をAレジスタに入れるという見たまんまの機能の他に、

割り込みフリップフロップ(EI/DI状態)をPフラグに入れる

という機能がひっそりとあります。普通にZilogの資料に書かれていますが。
割り込み状態を取得するのに(MSXだと)1/60秒待って割り込みがかかればEIというような実装をしているソフトをわりと見たことあるので、あんまり有名では無い機能かもしれません。

Z80は割り込みがかかるとDIになって割り込みベクタに飛び、
通常のソフトであれば割り込み処理をしたあと、EI状態にしたあとRETIでメイン処理に戻ります。

で、ここで、この、割り込みフリップフロップをPフラグに入れる、という機能にバグがあって、

LD A,I(もしくはLD A,R)実行中に割り込みがかかると割り込み禁止になり、その状態がPフラグに取り込まれる、というバグがあります。
NMOS品はバグがあって、CMOS品は修正されているようです(詳しくはwikipedia参照)

で、これはMSX-ENGINE(T9769)とR800ではどうなっているのかという話。

検証方法自体は実に単純で、

D000 LD HL,0000H
D003 LD A,I
     JP PE,0D00CH
     LD (0F7F8H),HL
     RET
D00C INC HL
     JP 0D003H

とかで、
LD A,IでEI状態ならループした回数を数えて、DIであれば戻ってきます。
EI状態で開始した場合、ループから抜ける条件はないので、バグがあればループから抜けますね。

というわけで、試したところ、A1GT(T9769C)ではループを抜けて戻ってきます。つまり、バグ持ちです。
R800では戻ってきませんので、修正されているようです。

という、今更な話題でした。
2020.10.16 19:03 | 固定リンク | MSX | コメント (6)

- CafeNote -