自分自身のための ものづくり / 自分自身のためのものづくりメモ

* Bad Apple!! PV-FC (2) がファミコン実機で映像が乱れる。原因は黒より暗い黒

#ファミコン
※最新版では問題は修正済

発端

Bad Apple!! PVをファミコンで再現してみた。(その2)
http://www.nicovideo.jp/watch/sm9170895
に感動した。
 エミュレータでの再生では満足できず、実機で再生するためにMMC3搭載カセットのROMを剥いでEP-ROMを載せたカセットを作成した。


事象

 RF接続した赤白ファミコン(HVC-001)では映像が乱れる。RP2C03を載せたRGB出力AV仕様ファミコン+XRGB-2plusでは乱れない。

↑MTV-2000にRF接続し、キャプチャ

調査とわかった事

 後期型ファミコンの裏蓋を外し、オシロスコープでPPUの出力を眺めた。その結果、映像の黒部分に、バースト直後の黒レベルよりも低いレベルの信号が出ていた。

↑はAV仕様ファミコン(無改造)の映像出力

黒より暗い黒

http://nesdev.parodius.com/2C02%20technical%20reference.TXT
+-----------------------+
|Video signal generation|
+-----------------------+
(中略)
Luminance value 0, mixed with chrominance value 13 yield a "blacker than 
black" pixel color. This super black pixel has an output voltage level close 
to the vertical/horizontal syncronization pulses. Because of this, some 
video monitors will display warped/distorted screens for games which use 
this color for black (Game Genie is the best example of this). Essentially 
what is happening is the video monitor's horizontal timing is compromised by 
what it thinks are extra syncronization pulses in the scanline. This is not 
damaging to the monitors which are effected by it, but use of the super 
black color should be avoided, due to the graphical distortion it causes.

 パレットについての関連参考資料。
ファミコンの詳しい話
http://www.wizforest.com/OldGood/FamiCom/FamiMisc.html

 Bad Apple!! PV-FC では、黒として 'Luminance value 0, mixed with chrominance value 13' つまり 0x0D を使っているのだろう。(未確認。VirturalNESのパレットビューアでは、どのパレットを使っているかが数値では表示されない)
 作者の門真なむさんは実機で動かしているが、RP2C05-99を積んだツインファミコンで動かしたために、普通のファミコンで映像が乱れる(モニタにもよるだろう)ことに気づかなかったのかな。

追記

 問題が出る環境はかなり限られている模様。悪条件に相当弱い機器でなければ、はっきりした問題にはならないのかも。
 うちでは、MTV-2000にRF接続でノイズだらけになる。(MTV-2000はノンスタンダード信号に弱いので、blacker than black 以前の問題もあるかも)LGの安物VHSビデオデッキにチューナが死んだテレビデオ(普通のテレビ放送でも同期外れがたまに出るほど、同期周りが弱い)にて、同期外れが頻発。

* 携帯殺菌ライトでEPROMの消去

#電子工作


 タニタの携帯用殺菌ライト EC-966 を、ROMイレーサとして使っている。普通の殺菌灯よりも小型で、単4電池2本で動くので、便利で手軽。一度に1個しかイレースできないのが欠点。
 15分で消去が完了する。10分だと消えてないビットが残る。

 ボタンを押している間だけ照射なので、トグルスイッチを並列にして連続照射できるように改造した。
 タイマーをつければもっといいが、面倒なのでやってない。キッチンタイマーをセットして、手動で切っている。

 EC-966は現行商品ではないが、中古品や新古品はまだヤフオクなどで入手可能。

* NEO GEO 用メモリカード(等)のSRAMの、FRAM化の検討

#NEOGEO #メモ
MCS48(8048)マイコンのページ(2007-05)
http://www.protom.org/micon/?date=200705
通常のSRAMのように扱えるので乗せ変えるだけと思いきや、これが全く動かず。しばしデータシートを眺めると、/CS(チップセレクト)端子を動かしてアドレスを内部にラッチさせないとダメとありました。この8048ボードは/CS線はGNDに繋がっているので原因究明。空きスペースにTTLの74LS08を置いて、8048からのPSEN,RD,WRでNegative-ORして/CS線に繋いであげると動き出しました。

  • FRAM Design Considerations
When designing with FRAM for the first time, users of SRAM will recognize a few minor differences. First, bytewide FRAM memories latch each address on the falling edge of chip enable. This allows the address bus to change after starting the memory access. Since every access latches the memory address on the falling edge of /CE, users cannot ground it as they might with SRAM.

 富士通の場合は、/CEがLにて/WEか/OEの↓でラッチアドレス?
 非同期SRAMと置き換えるだけでは、ダメか…。

* NEO GEO / MVS 用メモリーカード (MV-IC) の 分解

#資料 #NEOGEO #分解

フタを剥がした


同様のタブの付いた電池があれば、電池交換できるだろう。が、試していない。
#分解したのは2006年頃だが、放置中。

Digi-Keyにタブ付CR2016の在庫あり。
http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=P222-ND
単価108円。最小数量1。

タブ付CR1616の在庫もあった。
http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&name=P273-ND
NEO GEO とは関係ないけど、メモ。ゲームボーイのソフトの電池交換に。


載っているのは、16Kbit(2KByte)のSRAM、他

高解像度画像


HP200LXにてフォーマット。容量は16Kと誤認されている。


カード自体が認識されれば、dd等でデータの待避・復帰ができるだろう。
ただし、他のDOSやWindowsやLinuxでの認識は未確認。

* LP3872/LP3875 1.5A 高速超低ドロップアウト・リニア・レギュレータ

#電子工作 #メモ #部品 #電源
http://www.national.com/JPN/ds/LP/LP3875.pdf
ドロップアウト電圧: 超低ドロップアウト電圧。 代表値は150mA負荷電流時38mV、1.5A 負荷電流時380mV。
 入力電源電圧上限7.0Vが、昔ながらの5VのICに使う際にやや面倒。別のLDOで6Vでも作っておくか?


RSオンラインにて取り扱いあり。
LP3875EMP-5.0,Fast,Ultra LDO,Linear Reg,5.0V
(1.5A, SENSE, SOT223-5)
5〜 @360

LP3875ES-5.0,Fast,Ultra LDO,Linear Reg,5.0V
(1.5A, SENSE, TO-263-5)
5〜 @410

TO220 の LP3875ET の取り扱いは無し、か。


 入力コンデンサ・出力コンデンサは、データシートの「代表的な性能特性」によると、各々100uFのOSCONでいいか。それで、1.5A・100usの負荷にて2.5V出力の電圧変動を20mV以下に抑え込めるようだ。
 RS扱いの面実装のだと、
導電性高分子コンデンサ,SMT,PCG0J151MCL1GS,105°C,6.3V,150μF
あたりか。5〜で@200。
 入力側を耐圧10V(6.3x6),出力側を6.3V(5x6)。各々150uF。
http://www.nichicon.co.jp/products/pdf/cg.pdf

 面実装のタンタルでもいいか?
コンデンサ,固体タンタル,面実装,7343,T491D107K010AT,10V,100uF
10〜 @68
T 491 D 107 K 010 A T
タンタル 491シリーズ Dサイズ 100uF ±20% 10V
Dサイズ:L7.3 W4.3 H2.8


プリント基板のレイアウト設計
プリント基板の設計が適切でない場合、グラウンド・ループと電圧ドロップが原因となり不安定動作を引き起こすので、必ず適切なレイアウト設計を行わなければなりません。入力コンデンサと出力コンデンサは、他の回路の電流が流れないよう独立した配線パターンを用いてLP3872/3875 の入力ピンまたまたは出力ピンとグラウンド・ピンに直接接続します( ケルビン接続)。
(中略)
VIN に対しては大電流が流れ込み、またVOUT からは大電流が流れ出しますが、入力コンデンサと出力コンデンサのグラウンド側リードをケルビン接続すれば、配線パターンによる直列抵抗分の影響を考慮する必要はありません。

 SENSEピンは使うか、使わないか。
また、LP3872/3875 の出力に接続されている負荷が、例えばクロックなど高速にスイッチングするような場合、LP3872/3875 の出力コンデンサが過渡的な負荷電流を供給できるように設計しなければなりません。これはレギュレータのループ帯域が100kHz 以下と低いため、そのような高周波の過渡的な負荷変動に対してレギュレータの制御ループが応答できないからです。すなわち、100kHzを超える周波数領域でのLP3872/3875 回路の実効的な出力インピーダンスは、出力コンデンサによって決まります。
 ちょっと遠目程度なら、SENSEを引き回すより、その分電源パターンを太くした方がいいだろう。

* ビデオゲーム機のRGB出力、傾向と対策

#RGB #メモ
機種工作難易度部品入手難易度信号源信号備考
ファミコン普通至難RP2C05-99等-
スーパーファミコン容易普通背面端子0.7Vp-p(75Ω終端時)-
Nintendo64 前期型普通普通VDC-NUS0.7Vp-p (0〜0.7V)-
Nintendo64 後期型不明アナログRGB無し?
SG-1000II 前期型無しTMS9918Aはビデオ出力のみ
SG-1000II 後期型普通普通カスタムチップ1.4Vp-p-
SEGA MarkIII普通背面端子1.4Vp-p (0〜1.4V)150Ω負荷の駆動不可
MASTER SYSTEM背面端子0.7Vp-p (75Ω終端時) CXA1145の出力に100μFと75Ωが付いている
MEGA DRIVE背面端子1.4Vp-pCXA1145のピンがそのまま繋がっている
スーパーカセットビジョン背面端子-
PC Engine普通HuC6260 0.8Vp-p (4.2〜5V)-
NEO GEO背面端子-

* シリアルマウス

PC mouse info
http://www.tkk.fi/Misc/Electronics/then/mytexts/mouse.html
更新:リンク変更

PIC K iT PS/2⇔シリアル マウスインターフェイス
http://members.jcom.home.ne.jp/irv/documents/sermouse/0511123_SirialMouse_manualB0.pdf
スクロールマウスのデータフォーマットの情報あり。その他にも色々参考になる。


 比較的簡単なハードウェアとソフトウェアでWindows機(等)にマウス扱いされる自作ハードを繋げるのは魅力だが、Windows2000, XPでは電源ON時にしか認識されない(?)等、微妙に面倒が多いのが難点。
 あと、近頃はシリアルポート搭載率が減少傾向。USB<->シリアル変換はシリアルマウスには対応していないのが多い。

#電子工作

* Vista環境にて、PL-2303を使用したUSB接続COMポートで、TEXCELLのRubyシリアル通信ライブラリを用いてデータを受信できない。その原因と対処法

#プログラミング #Ruby #シリアルポート

事象

 Windows Vista の環境にて、USB接続のCOMポート(シリアルポート)を介して繋いだ機器のデータを、TEXCELLのRubyシリアル通信ライブラリ wincom.rb にて全く受信できない。teratermでは受信できる。。
 同じ接続対象機器・同じプログラムでも、レガシーな COM1 に繋いだならば受信できる。
 同じ接続対象機器・同じUSB接続シリアルポート・同じプログラムで、WindowsXP 環境では受信できる。

原因

 Vista環境にて、USB接続シリアルポートでは、ReadFileを実行した際、「読み取ったバイト数」として常にゼロが帰ってくるため。
 ドライバのバグか?

対処

 ReadFileの「読み取ったバイト数」は使わず、ClearCommErrorを実行した際に得られた COMSTAT構造体 の「受信バッファにあるデータのバイト数」を使う。
 ReadFileでそのバイト数読むと指示しているのだから、問題ない…と思う。問題あったとしても、常に0バイトよりはマシだ。
    def receive
(中略)
#                rcvchar = @wcrecv.unpack("a#{irlen[0]}")[0]
                rcvchar = @wcrecv.unpack("a#{ilen}")[0]

補足

 試したUSB接続シリアルポートアダプタは、以下2点。
 UC-232Aのドライバは、uc232a_windows_vista.rar (Ver._v1.0 2007-7-10)を使用。
 URS232GFは、Vista標準ドライバで利用できるとの事だが、できなかった。「URS232GFは一部ロットにて使用できません。」とのこと。チップ製造元であるProlificのサイトから、PL2303_Prolific_DriverInstaller_v10518.zip (2009/7/23 v1.0.5.18 )をダウンロードし、インストール。
 上記2点、チップ自体は同じか。ならば、ドライバもほぼ同一なのだろう。

あとがき

 今までTEXCELLのwincom.rbをありがたく便利なブラックボックスとして使わせて頂いていたのだが、中身を見て、色々と面倒な Win32API を隠蔽してくれていた事を実感した。今回必要に迫られてベールの下を覗いたけど、Win32APIは直接触らずに済むならそうしたい代物だ。


関連ページ

TEXCELL Rubyシリアル通信ライブラリ
http://www.texcell.co.jp/ruby/wincom/rubywincom.html

hirax.net::wincom.rbのCOM10以上対応
http://www.hirax.net/diaryweb/2009/07/29.html

Serial Communications in Win32
http://msdn.microsoft.com/en-us/library/ms810467.aspx

Windows/Vista/USB-RS232C(シリアル) - Tomocha WikiPlus
Windows Vista で動く、USB-RS232C変換ケーブル情報
http://wiki.tomocha.net/Windows_Vista_USB-RS232C.html

* Windows環境にて、USB接続COMポートを、個体識別する

#メモ #プログラミング #シリアルポート #Ruby
 Windows環境(少なくともWindows XP)では、USB接続のRS-232C(正確にはEIA-574)アダプタのCOMポート番号は、差すUSBポートを変えるとコロコロ変わる。COM19になったりCOM6になったり…。とても困る。
 一方、USB接続のその手の機器は、デバイスマネージャ上で個体識別できる。ならば当然、自作プログラムでも個体識別し、COMポート番号を自動設定できる。
 WMIを介して情報を得る。Win32_SerialPortではUSB接続の情報が得られない(場合が多い?)ので、Win32_PnPEntity からCOMポートを抜き出すのが確実。

require 'win32ole'

def ports
    locator = WIN32OLE.new("WbemScripting.SWbemLocator")
    services = locator.ConnectServer(".","root/cimv2")
    ports = services.ExecQuery "Select * From Win32_SerialPort"
    ports.each do |port|
        p port.Caption
        p port.Description
        print "\n"
    end
end

def ports_pnp
    ps = []
    locator = WIN32OLE.new("WbemScripting.SWbemLocator")
    services = locator.ConnectServer(".","root/cimv2")
    ports = services.ExecQuery "Select * From Win32_PnPEntity"
    ports.each do |port|
        if /\(COM\d+\)$/ =~ port.Caption
            p port.Caption
            p port.Description
            p port.Manufacturer
            print "\n"
        end
    end
end
   


print "Select * From Win32_SerialPort\n"
ports

print "Select * From Win32_PnPEntity\n"
ports_pnp

ruby -Ks comports.rb

Select * From Win32_SerialPort
"通信ポート (COM1)"
"通信ポート"

"通信ポート (COM2)"
"通信ポート"

Select * From Win32_PnPEntity
"Prolific USB-to-Serial Comm Port (COM19)"
"Prolific USB-to-Serial Comm Port"
"Prolific"

"USB-to-Serial Comm. Port (COM6)"
"USB-to-Serial Comm. Port"
"Aten"

"通信ポート (COM1)"
"通信ポート"
"(標準ポート)"

"通信ポート (COM2)"
"通信ポート"
"(標準ポート)"


参考文献:

Kick4 BBS
USBシリアルのポート名を知る方法?
http://www.kick4.net/bbs/c-board.cgi?cmd=ntr;tree=4;id=

Win32_SerialPort Class (Windows)
http://msdn.microsoft.com/en-us/library/aa394413(VS.85).aspx
Win32_PnPDevice Class (Windows)
http://msdn.microsoft.com/en-us/library/aa394352(VS.85).aspx

* RandomNoteWiki記法 - TextFormat

* オムロンツーフォーサービス オンラインショップ、他

#電子工作 #部品調達

2008年3月29日追記

2009年8月1日、変化に合わせて訂正

 「オムロンツーフォーサービス株式会社」が「オムロンエフエーストア株式会社」に社名変更し、扱う品々がオムロン商品に特化された。
 これで、個人の電子回路工作には、ほぼ縁のないWebショップになってしまった。送料525円(送金手数料込み)は小物の買い物に魅力的だったんだけどなぁ。

 オムロンツーフォーサービスで扱っていた品は、チップワンストップで扱われるとのこと。<DEL>送料が1000円(注文金額が8000円未満の場合)なので、個人のちょっとした買い物には微妙に使いにくい。(まぁ、秋月---代引き手数料と合わせて800円---と同程度なのだけど)</DEL>
 チップワンストップは配送料が送金手数料込みで450円になったので、少量のパーツも割と手軽に注文できる。注文5000円以上で、配送料無料。
 Webサイトの検索結果が返ってくるのがかなり遅いのが不満。5秒は待たされる。RSオンラインなら1秒で表示されるのに。

<DEL>
 チップワンストップのWebサイトは、RSオンラインの激しく使いづらいWebサイトよりは、使いやすい。なんといっても、RSと違って、個々のパーツを別のウィンドウ|タブで開けるし。
RSのが不便すぎるだけだけど
</DEL>
 RSオンラインのWebサイトは、だいぶ前のリニューアルで、だいぶ使いやすくなった。以前はリンクがJavaScriptで何かと不便だったが、普通のリンクになって新しいタブで開いたりとか普通にできるようになった。


506 名前:774ワット発電中さん 投稿日:2007/02/04(日) 21:24:30 ID:rcOaP9bn
チップ抵抗は5%品は千石でチェック。1%品はオムロン・ツー・フォーでミニリールを買うようにしている。
digikeyも代引き使えればありがたいね。
_【代引き】_____電子部品通販のスレ_____【送料】_
http://science5.2ch.net/test/read.cgi/denki/1131720549/

OMRON | 通販・通信販売のオムロンツーフォーサービス オンラインショップ
http://www.omron24.co.jp/

 コンビニでの後払い(手数料はオムロン負担)ができたり、クレジットカードが使えたりと、個人での利用がしやすそうだ。
 また、計5000円以上で送料無料。

 精度1%のチップ抵抗を扱っているのはありがたい。千石とかじゃ扱ってないからなぁ。
 RGB用バッファアンプとかR-2Rラダーとかに使えば、金皮のリード品よりも大幅にコンパクトにできるだろう。

面実装抵抗器角形チップ抵抗器(精密級)【RK73H】
http://www.koaproducts.com/catalogue/rk73h.htm
2.0x1.2mmなので、手作業にはほどよい大きさ。

* OR-216 16KB増設RAMカートリッジ の主要部品

#資料 #部品取り
 CASIOのMSX KB-7 用の増設RAM

HM48416AP-15DRAM (16K*4 = 64Kbit)日立
HM48416AP-15DRAM (16K*4 = 64Kbit)日立
M74LS157P三菱
M74LS157P三菱
M74LS04P三菱
M74LS010P三菱
M74LS074AP三菱

 80年代の香り漂う構成だ。

* TURBO FILE TWIN、他 の主要部品

#資料 #部品取り

TURBO FILE TWIN の主要部品

番号型番機能メーカー備考
U1uPD431000AGW-85LSRAM (128K*8 = 1Mbit)NEC
U2-カスタムチップASCII
U3HM62256LFP-10TSRAM(32K*8 = 256Kbit)日立
U4HC04ゲート日立
U5MB3790バッテリバックアップ制御富士通
C15.5V 0.047F電気二重層コンデンサ?

 1MbitのSRAM目当てにターボファイルツインを捜すのもいいかも。

サウンドノベルツクールの主要部品

番号型番機能メーカー備考
U1SHVC-ZSNJ-0MASK ROM不明
U2LH512NF-10TTLSRAM (64K*8 = 512Kbit)SHARP
U3MAD-1 XLU2230不明不明
U4F411B不明Nintendo

サテラビュー8Mメモリーパックの主要部品

番号型番機能メーカー備考
U1LH28F800SUT-Z1Flash Memory (8Mbit 512K*8|1M*8)SHARPピン間隔 0.5mm

ターボファイルGB の主要部品

番号型番機能メーカー備考
U1LH28F800BVE-TL10Flash Memory (8Mbit)SHARP
U4BS62LV1024TCSRAM (128K*8 = 1Mbit)Brilliance SemiconductorTSOP-32 (ピン間隔 0.5mm)

* MDプリンタとラミネータによる転写プリント基板の作成の試み

#途中経過 #プリント基板
 満足する結果はまだ得られていないが、なんとかなりそうな感触はある。




 ラミネータを使うと、アイロンより楽に安定した転写ができる。
 紙を使う場合、転写後に紙を剥がす際に転写パターンを痛めるのが難。

ALPS純正の「ハイグレードペーパー」は、耐水性が高いのが災いするのか、剥がれにくい。
・「KOKUYO カラーレーザー&カラーコピー用紙 光沢紙 A4」は、そこそこ剥がしやすかった。
・手元にあった適当なFAX用熱転写ロール紙は、薄くて平滑なのが幸いして、いい感じに転写できた。薄いので比較的剥がしやすい。
 以上はどれも、剥がすのに水につけて指で擦る必要がある。その際に、パターンが滲む。

 素直に、Press-n-Peelを使うのがいいかも。マイクロドライプリンタを使った例は、探した限りではWebで見つからなかったけど、いけそうな気がする。

 MDプリンタの必殺技の一つ「ページ合成」により、パターンを5回重ね塗りした。
(詳細設定にてチェックをつけると、その後は用紙が排出されない。再び詳細設定を開くと、チェックが自動的に外れ、排紙される。)
 5回重ねは多すぎたかも。剥がす際に擦ると、こすれて広がる。

参考:
【自作】 オリジナルプリント基板製作スレ 5層目
http://science6.2ch.net/test/read.cgi/denki/1220190927/
298 名前:774ワット発電中さん 投稿日:2009/01/09(金) 16:07:26 ID:3o2nXDNa
>>191です。
パターン書いたんで先日の改造ラミネーターでP-N-Pを試して見ました。
プリンターはCanonLBP3210、トナーは詰め替えのパチモノです。

ラミの温度は最高に設定。1,2回ではあきらかに一部しか張り付いていませんでしたが、
基板が熱くなるまで5回ほど通した所、見た目にもぺったりと完全に張り付きました。
しかもアイロンでしばしば問題となるパターンの広がり(押し潰れ)もまったくありません。
そして、現れた転写パターンはサンハヤトの感光膜もかくやと思われる
クッキリぺったりした艶のある大変美しいものでした。

一部パターンに欠損が有りますが、すべて埃が挟まった事が原因です。
この点に気を付ければパーフェクト…と思ったらパターンを裏焼きしている事に今気づいたorz
191 名前:774ワット発電中さん 投稿日:2008/12/23(火) 01:55:36 ID:kZ8NPRV5
>>180です。いいだしっぺなので近所のカインズホームでラミネーターを買ってきました。
やはりそのままではt=1.6mmは通りませんですた。

分解してみたところ、引っかかるのは前後のガイドで、
ローラーはシリコーンゴムだからなんとかなりそう。
というわけでガイドを外したら通りました。
出口の最後でゴムの弾性ではじき飛ばされますが通ってます。

転写はまだしてみていません。
圧力が強すぎて潰れるようならローラーの間隔を広げる改造が必要でしょう。
180 名前:774ワット発電中さん 投稿日:2008/12/20(土) 16:59:07 ID:vchQMyrX
アイロンじゃなくてラミネーターでうまく行った方います?
ttp://www.pulsarprofx.com/PCBfx/main_site/pages/start_here/index.html
これなんかどう見てもラミネーターなんではありますが、
買おうか買うまいか迷ってます(普通のラミネーターを)。

* SG-1000II 後期版 主要部品表

#資料 #SEGA #SG-1000II
IC1LH00080AZ80SHARP
IC2TMM2009P-BSRAM(8K Bit ?)Toshiba
IC3
IC4MB74LS32Quad 3 Input OR富士通
IC5
IC6
IC7AN78055Vレギュレータ松下
IC874LS257AQuad 3-State 2 to 1松下
IC974LS257AData Selectors松下
IC10315-5066VDPと音源を集積?SEGA
IC11MB81416-12DRAM(NMOS 64K Bit) 富士通
IC12MB81416-12DRAM(NMOS 64K Bit) 富士通