MSX2修理 SONY HB-F1XD

今回のブツはこちら

RsDSC00029

 

SONY HB-F1XD MSX2

人々のヒットビットというやつだ。ダイレクトドライブFDDのおかげで発売から25年たった今でも2DDフロッピーが読める。

だがこいつテレビにつなぐとこうなる。

MSX2-A

ゲームを起動してもこのありさま。twinbee

 

どうしたものか。VDPの故障を疑ったが、某MSXスレでVDP以降ではないかというアドバイスをいただけたのでパターンを追ってみた。

 

RsDSC00065

これがメインボード。映像出力系は右上である。

パターンを追って気づいたのだが、VDPからはRGBしか結線されてない。取り出されたRGB出力は、VDPの右横にある基板で処理されるようで、コンポジット出力はそこで作られているらしい。

MSX2のVDPであるV9938のデータシートを見ると、21pinがVIDEO OUTとなっており、VDPから直接コンポジット出力を取り出せるようだ。

試しに21pinと適当なGNDを拾って映像を出力してみた。

 

MSX2-D

 

うおおおおおおおおおおおおおお!!!!

ちゃんと表示されるではないか!

根本的に直すならばVDPの横の基板を外して修理しなければならないが、どうせコンポジットしか使わないので21pinから映像を取り出すことにした。

 

RsDSC00067

 

さすがにVDPとRCA端子直結は怖いのでアンプ回路を挟む。

なお、このアンプ回路は一般的なもので、ファミコンのAV化を紹介しているページだとだいたい載ってると思う。

ちなみにこのアンプ回路はてきとうに組んだので色味がよろしくない。あまり参考にしないこと。VCCは近くのコントローラ端子からとった。ATARI仕様の9pinコントローラ端子では5pinが5V+になっている。

 

完璧ではないが、とりあえず乱れがなくなったのでいいことにしよう。

nemesisまとめ

 

 

HSP3基礎編 ループ命令

今回はHSPネタです。

以前自分が書いたコードを見ていたら、「星の多重スクロール」をさせるプログラムがありました。星といってもpsetで点を打って動かしてるだけです。横スクロールシューティングの背景でよくあるアレです。

 

仕様としては、3レイヤーで各20個の点が移動します。

そのコードがこちら。

 

 

いやぁもう長くて酷いですね。驚いたことに、なんとループを使っていません。アホかと。

 

このプログラムは配列変数の数だけ繰り替し処理を行っていますが、ループを使わず、すべてずらずらと記述してあります。大変無駄ですね。

 

ループの説明に入る前に配列変数について少し。

たとえば、arrValという変数を用意します。配列は5です。

続いて、これに値を代入します。

これで値が代入されました。

ではこれを全部足してみます。

これで画面には1+2+3+4+5の結果が表示されることでしょう。

 

この例の場合では配列が少ないのでたいした手間ではありませんが、最初にあげたプログラムのように、配列が多くなった場合はどうでしょうか。

入力するのは大変手間ですね。そこでループを使います。

今度は、arrValの配列を100として、先ほどと同様に値を1から順番に入れていきます。

ループを使うとたったこれだけです。

ここではfor~next文を用いています。2行目の意味は「i」を「0」から「100」まで「1」づつ増やせ。となります。

従ってarrVal(0)には1が、arrVal(1)には2が、というように順番に代入されていくのです。

 

ではこれを足していきます。

今度はforeach~loop文を使用しました。

arrValの配列の数だけforeach~loop間を繰り返せ、という意味になります。ここではarrValの配列は100ですから、100回繰り返されます。

cntはループした回数を表します。すなわち、1回目のループではcnt=0、2回目のループではcnt=1となります。

 

それでは、以上を踏まえた上で、最初のプログラムを書き換えてみます。

いかがでしょうか。行数は1/5となり、大幅な軽量化ができました。

基本中の基本ながら、以前の私のように容量にものをいわせたようなコードを割とよく見かけます。もういちどコードを見返してみるのもいいかもしれませんね。

 

 

余談ですが、さらにコンパクトにもできます。

配列0~19に1層目のデータを、20~39に2層目を、40~59に3層目のデータを格納させました。

もっとも、リソースが豊富な今のコンピュータ環境からいうと、容量よりも可読性の方を優先すべきでしょうね。

 

aswRvrt.sysで止まるはなし

久しぶりの更新。

先日WindowsUpdate関連のエラーで、PCがまともに立ち上がらなくなり、ほかにもいろいろゴミがたまっていたので思い切って再インストールを行った。

OSはWindows7 Professional x64。

ところが昨日から起動後5分以内に停止、ブルースクリーンを繰り返すように。

画面には0x000000F4。調べてみたところ、メモリ・ハードディスクを疑えという記述が見られたのでとりあえずメモリチェックを実施。しかし問題は発見できない。

私のノートPCはHDDをSSDに換装して使っているので、SSDの故障とすればなかなか痛い出費を覚悟していたのだが、原因は意外なところだった。

 

データ救出だけでもと思い、起動オプションでセーフモードを選択するも、ドライバなどが呼び込まれていくところで停止する。

何回やっても「aswRvrt.sys」でとまるので、こりゃ1CDlinuxかなと思いつつ

このファイルはなんじゃらほいと調べると、どうやらAvast!Antivirus関連らしい。確かにPCにはAvastが入っている。

ならばと思いWindowsを通常起動、速攻でAvast!のアンインストールを試みた。

成功した結果、システムは停止しなくなり、ブルスクも解消。よかったよかった。

 

 

それにしてもPCを守るためのセキュリティソフトがPCを破壊してどうするんだと…