前回のNew City Hero @ j80/macの続き。
エミュレータで動作確認してから実機で〜という事で奮闘しておりました。
まずは搭載メモリの確認からです。
これ、手持ちの実機調べたら32KB載ってるみたいだった。めでたしめでたし。
— とよしま (@toyoshim) December 31, 2023
> 発売当初は搭載メモリ16Kモデルのみの販売であった。さらに16Kの増設が可能で、増設して購入するユーザが大半であったため、32Kモデルも後に販売された。 https://t.co/BXpnYbpg8R
そしてM.K WorkshopさんのPSA基板を利用してボードを作成しようと思ったのですが……上のスレッドでも書いているように、どうにも世の中は半導体不足。表面実装の74ロジックICが思うように手配できません。指定ではLSになっている部品もやむを得ずHCを使う事に……そしておそらくこれが敗因。HCだと出力弱いからファンアウト大きくできないし遠くに飛ばすには不向きってあたりが怪しいのかな、と。
NCH起動直後に落ちる問題の調査。
— とよしま (@toyoshim) January 20, 2024
内藤さんがプログでPCG定義するBASICのサンプルを置いてくれてたので、まずはありがたくそれを試す……と、これはメモリが不安定デスねwww pic.twitter.com/oE5rbCv23X
ハンダ周りを見直して気になるとこは盛り直したり、色々とチェックしてみたんだけど改善せず。タイミング周りを調査するのは手間だし、頑張ってもあまり得るものも無い気がしたので、元々の最終ゴールだった完全自作へと踏み出します。
基本はPSAベースなのでI/O 1981年6月号の記事を読み解いていきますが、論理はCPLDに全部収める方針。また、NCHが3chサウンド対応なので、その部分の拡張も取り込んでいきます。またこのPSAではPCG-8100同様に文字コードの半分の128キャラ分を任意パターンに置き換えられるようになっていますが、256キャラ全部を置き換える拡張にも対応させました。
PSAが安定しなくて納得いかないんで、ソケットに直刺しして8253とアンプ以外はCPLDで組む、不確定要素の少ない基板をおこそうと思ってるんだけど、なんか元記事みたら嫌な回路が混ざってた。CHR RAM書く時の制御信号。帰還させる口を出すか、FFに置き換えるか…… pic.twitter.com/Ks1Jsbdiet
— とよしま (@toyoshim) January 28, 2024
この辺りの回路も同期回路で置き換え。Verilogで100行ちょっとくらいの論理です。Z80からのI/Oを受けて、かつキャラクタージェネレータ側のアドレスバスとデータバスに繋げる必要がありピン数は70くらいは必要。またピン数多い=レベル変換したくないので5Vトレラントなデバイスが良い……という事で現行チップから候補を見つけるのは難しく、骨董品のMAX7000(7128STC100)
足の多いCPLDは入手困難だし、制御以外のバスマルチプレクサやレジスタは外に出すかーって見積もったら、制御はGALで十分だな……こういうの1つ中に入れるたびに最低16くらいの単位で必要ピン数増えてくし、FPGAとかレベルシフタ並べると部品減らないし。
— とよしま (@toyoshim) February 3, 2024
ミキサーとアンプはM.K.Workshopさんの回路を追ってこんなもんかなーって書き起こした回路図を眺めて、増幅回路の教科書的なものと見比べて怪しいと思ったところを手直し。たぶん回路を追いそびれたり読み間違えたりしてる。
そして届いたのがこれ。
表面実装のコンデンサは綺麗につけるの難しいし、確実に線が繋がってるかの自信が持ちにくい。ただでさえ回路に自信がないから不確定要素を減らすために工場で実装してもらっちゃってます。CPLDとかSRAM、ボリュームなんかはあちらで手に入らないものだから自分の方で実装。
取り敢えずノーマルモードは動いてるのでピンアサイン間違えたり配線失敗したりとかは無さそう。
— とよしま (@toyoshim) March 6, 2024
PSAモードの論理は基板と一緒に書いたけどテスト全くしてない。本体壊しても嫌なので少しテスト書いてから明日にでも試してみますわ。 pic.twitter.com/NTFLAah7qw
最初のテストはこんな感じでCPLDの書き込みをして、次はZ80とキャラクターROMだけ載せた状態でCPLDには信号をほぼほぼパスするーするだけの本体基板相当の回路を書き込んで通常モードの動作を確認します。ここまで動けば基板の方は問題ないからCPLD側の論理のデバッグに集中できる。
んでまぁ、ここでCPLDの論理も一通り出来てたんだけど、検証してからじゃないと本体壊しても嫌だし……と2週間くらい渋るわけですが(笑)とりあえず最低限のテストをして最終動作確認へ。この辺り、趣味でやろうとすると大した環境がなくて辛い。仕事でやってた頃はQuestaでOVM使ってSystemVerilogで書いたテストをぶん回してたんですが、手頃にCI回せる選択肢となるとiverilogになってしまう。でも環境についてはVS Codeで新たにいくつか拡張を導入して試してみました。Verilog-HDL/SystemVerilog/Bluespec SystemVerilogとかWaveTraceとか。後者はライセンス購入しないと8chまでしか信号見れないので購入しちゃった。gtkwaveと比べて何が良いって全てCodeで片付くってだけではあるんだけど、まぁ高くはないし。
という事で出来た成果物はここに置いてあります。実はサイズを図って作ったにも関わらず、Z80とキャラROMの位置が少しずれてて、幅が2.5ピン分くらい狭くなってしまっています。何かしら不具合あるだろうし、この基板で確認できるとこだけでも確認しよう……とソケットの下駄を履かせ、ピンが少し外側に出るように折り曲げて2.5ピン分を補正してます(汗)もしこれを参考に自作する際には、基板は作り直してくださいませ。あとSRAMもこれはもう秋月に売ってないので別のやつに差し替えるなり。そもそもMAX7000ありますか?って話でもありますけど。
自作PSA、検証終わったので試しに火を入れた。こいつ、動くぞ!
— とよしま (@toyoshim) March 20, 2024
ひゃっほー!! pic.twitter.com/GLdWbKPpLy
こんな感じでばっちり動作、安定してます。NCHクリアまで遊び倒したいと思います。ちなみに実装スペース的には下に一段下駄を入れて上下ちょうど収まる感じですね。下駄がないと下側で他のチップとぶつかるかもしれないし、上もこの状態でキーボード基板に接触しないスレスレでした。接触してもショートしそうな部分がないのは安心ですが、放熱的に少し心配ではありますね。Z80やROMはそれなりに熱くなりますし。