<?xml version="1.0" encoding="utf-8" ?>
<rdf:RDF
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
 >

  <channel rdf:about="http://sourceforge.jp/projects/unagi/wiki/!feeds/list">
    <title>unagi Wiki</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/!feeds/list</link>
    <description>
      SourceForge.jp Wiki pages for unagi project.    </description>
        <dc:date>2011-09-14T00:53:32+09:00</dc:date>
        <items>
      <rdf:Seq>
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/FrontPage" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/technical_problem_ja" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/order_ja" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/flash_hard_en" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/script_workram_ja" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/script_flash_ja" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/script_dump_ja" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/script_common_ja" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/kazzo_pcb2.0_syusei" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/kazzo_pcb2_0_tester_ja" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/kazzo_intro_en" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/kazzo_ja" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/flash_w29c020_ja" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/kazzo_0.1.1_problem_ja" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/flash_device_en" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/script_flash_en" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/script_dump_en" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/script_common_en" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/kazzo_pcb1.0_ja" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/problem_ja" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/flash_device_ja" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/flash_74161_en" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/flash_hard_ja" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/flash_soft_en" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/flash_soft_ja" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/unagi/wiki/RAMaccess" />
              </rdf:Seq>
    </items>
  </channel>

      <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/FrontPage">
    <title>FrontPage</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/FrontPage</link>
    <dc:identifier>FrontPage</dc:identifier>
    <dc:date>2011-09-14T00:53:32+09:00</dc:date>
        <description>
      <![CDATA[= にほんご
== おしらせ ==
2011/09/14
  * [technical_problem_ja kazzo に関する技術的問題]なる文書を作ってみました。
2011/04/22:
  * kazzo 2.1 kit, flash memory の個別販売も品切れのため販売終了。長らくありがとうございました。
2011/04/13:
  * kazzo 2.1 kit +]]>
    </description>
    <content:encoded>
      <![CDATA[<h1 id="h1-.E3.81.AB.E3.81.BB.E3.82.93.E3.81.94">にほんご</h1><h2 id="h2-.E3.81.8A.E3.81.97.E3.82.89.E3.81.9B">おしらせ</h2><p>2011/09/14
</p><ul><li><a href="http://sourceforge.jp/projects/unagi/wiki/technical_problem_ja">kazzo に関する技術的問題</a>なる文書を作ってみました。
</li></ul><p>2011/04/22:
</p><ul><li>kazzo 2.1 kit, flash memory の個別販売も品切れのため販売終了。長らくありがとうございました。
</li></ul><p>2011/04/13:
</p><ul><li>kazzo 2.1 kit + flash memory の販売終了。個別の部品も残りわずかです。
</li></ul><p>2011/04/20:
</p><ul><li>AM29F040B の販売終了。kazzo 2.1 kit も残り1個。
</li></ul><h2 id="h2-kazzo">kazzo</h2><ul><li><a href="http://sourceforge.jp/projects/unagi/wiki/kazzo_ja">ご紹介</a>
</li><li><a href="http://sourceforge.jp/projects/unagi/wiki/order_ja">販売ページ</a> 
</li><li><a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja">kazzo PCB revision 2.1 キットの組み立て方, anago の基本的な使い方</a>
</li><li><a href="http://sourceforge.jp/projects/unagi/wiki/kazzo_pcb1.0_ja">PCB revision 1.0</a>
</li></ul><h2 id="h2-flash.20memory.20cartridge">flash memory cartridge</h2><p>理論的な説明です。
</p><ul><li><a href="http://sourceforge.jp/projects/unagi/wiki/flash_hard_ja">hardware 編</a> 
</li><li><a href="http://sourceforge.jp/projects/unagi/wiki/flash_soft_ja">software 編</a> 
</li><li><a href="http://sourceforge.jp/projects/unagi/wiki/flash_w29c020_ja">W29C020 に対する注意</a>
</li></ul><p>具体的な配線方法は専用の wiki を別に設けてあります。
</p><ul><li><a href="http://unagi.sourceforge.jp/cgi-bin/hiki/hiki.cgi" class="external" rel="nofollow">unagi flashmemory/SRAM cartridge hiki</a>
</li><li>参考記事: <a href="http://ponrevival.blogspot.com/2010/01/flash.html" class="external" rel="nofollow">Flashカートリッジの製作例（あくまで例）</a> (ぽんRev!! 個人的備忘録)
</li></ul><h2 id="h2-anago.20script.20referrence">anago script referrence</h2><p>anago系 の各種スクリプトファイルについて記載したものです。
</p><ul><li><a href="http://sourceforge.jp/projects/unagi/wiki/script_common_ja">common</a>
</li><li><a href="http://sourceforge.jp/projects/unagi/wiki/script_dump_ja">dump</a>
</li><li><a href="http://sourceforge.jp/projects/unagi/wiki/script_flash_ja">flash memory programming</a>
</li><li><a href="http://sourceforge.jp/projects/unagi/wiki/flash_device_ja">flash memory device configuration</a>
</li></ul><h2 id="h2-.E3.81.8A.E5.95.8F.E3.81.84.E5.90.88.E3.82.8F.E3.81.9B">お問い合わせ</h2><ul><li>個別のお問い合わせは <img src="http://sourceforge.jp/projects/unagi/wiki/FrontPage/attach/contact.png" alt="contact.png" id="emb-contact.png-1" title="contact.png" class="embed-image" width="165" height="25"> まで。
</li><li>質問内容を公にしたいなら <a href="http://d.hatena.ne.jp/na6ko/" class="external" rel="nofollow">筆者の開発日記</a> のコメント欄で聞いてください。
</li></ul><h1 id="h1-English.20version">English version</h1><h2 id="h2-kazzo-2">kazzo</h2><ul><li><a href="http://sourceforge.jp/projects/unagi/wiki/kazzo_intro_en">introduction</a>
</li></ul><h2 id="h2-flash.20memory.20cartridge-2">flash memory cartridge</h2><p>These are theoretical documents. 
</p><ul><li><a href="http://sourceforge.jp/projects/unagi/wiki/flash_hard_en">Hardware Terminology</a>
</li><li><a href="http://sourceforge.jp/projects/unagi/wiki/flash_soft_en">Software Terminology</a>
</li><li><a href="http://sourceforge.jp/projects/unagi/wiki/flash_74161_en">74161 Terminology</a>
</li></ul><p>A concrete wiring technique has separately installed special wiki. (written in Japanese only)
</p><ul><li><a href="http://unagi.sourceforge.jp/cgi-bin/hiki/hiki.cgi" class="external" rel="nofollow">unagi flashmemory/SRAM cartridge hiki</a>
</li><li>Reference article: <a href="http://ponrevival.blogspot.com/2010/01/flash.html" class="external" rel="nofollow">Flashカートリッジの製作例（あくまで例）</a> (ぽんRev!! 個人的備忘録)
</li></ul><h2 id="h2-anago.20script.20referrence-2">anago script referrence</h2><ul><li><a href="http://sourceforge.jp/projects/unagi/wiki/script_common_en">common</a>
</li><li><a href="http://sourceforge.jp/projects/unagi/wiki/script_dump_en">dump</a>
</li><li><a href="http://sourceforge.jp/projects/unagi/wiki/script_flash_en">flash memory programming</a>
</li><li><a href="http://sourceforge.jp/projects/unagi/wiki/flash_device_en">flash memory device configuration</a>
</li></ul><h2 id="h2-contact.20us">contact us</h2><ul><li>Email Address: <img src="http://sourceforge.jp/projects/unagi/wiki/FrontPage/attach/contact.png" alt="contact.png" id="emb-contact.png-2" title="contact.png" class="embed-image" width="165" height="25">
</li></ul>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/technical_problem_ja">
    <title>technical_problem_ja</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/technical_problem_ja</link>
    <dc:identifier>technical_problem_ja</dc:identifier>
    <dc:date>2011-09-14T00:51:45+09:00</dc:date>
        <description>
      <![CDATA[= はじめに
最近 nesdev の forum で [http://nesdev.parodius.com/bbs/viewtopic.php?t=7912&amp;start=105&amp;sid=2ba3e21bf3acba52797a6f963313169e kazzo を広めてくださっている英語圏の方がいらっしゃいます]。kazzo にはいくつか問題があり、自分の中では満足していませ]]>
    </description>
    <content:encoded>
      <![CDATA[<h1 id="h1-.E3.81.AF.E3.81.98.E3.82.81.E3.81.AB">はじめに</h1><p>最近 nesdev の forum で <a href="http://nesdev.parodius.com/bbs/viewtopic.php?t=7912&amp;start=105&amp;sid=2ba3e21bf3acba52797a6f963313169e" class="external" rel="nofollow">kazzo を広めてくださっている英語圏の方がいらっしゃいます</a>。kazzo にはいくつか問題があり、自分の中では満足していません。
これを機会に問題を解決してくれると助かります。(つまり他力本願)
</p><p>私個人(naruko)は12月頃には開発を再開しようと思っています。
</p><h1 id="h1-V-USB.20.E3.83.89.E3.83.A9.E3.82.A4.E3.83.90.E9.96.A2.E9.80.A3">V-USB ドライバ関連</h1><h2 id="h2-.E3.83.8F.E3.83.96.E3.82.92.E7.B5.8C.E7.94.B1.E3.81.97.E3.81.AA.E3.81.84.E3.81.A8.E8.BB.A2.E9.80.81.E3.81.8C.E9.81.85.E3.81.84">ハブを経由しないと転送が遅い</h2><p>ハブを経由する問題は、USB の転送方法に control 転送を利用している点です。control 転送は少ないデータを低い頻度で通信することが目的になっています。そのため、 kazzo のように高い頻度で通信するには interrupt や bulk 転送を利用すべきだと思います。
</p><p>V-USB では control 転送や HID 向けの interrupt 転送のサンプルばかりで、よく分からない状態です。さらにいうと、ホスト側の作り方もよくわからない。
</p><h2 id="h2-.E3.83.99.E3.83.B3.E3.83.80ID.E3.81.A8.E3.83.A9.E3.82.A4.E3.82.BB.E3.83.B3.E3.82.B9">ベンダIDとライセンス</h2><p>現状実験用のベンダIDを利用していますが、他の V-USB 機器も同じベンダID だったりしてドライバが干渉してしまっています。
</p><p>上記の control 転送問題を解決と一緒に有料ライセンスと固有ベンダIDを取得するつもりでしたが、できていません。
</p><h1 id="h1-Atmega8U2.20.E3.83.89.E3.83.A9.E3.82.A4.E3.83.90.E9.96.A2.E9.80.A3"><a href="http://sourceforge.jp/projects/unagi/wiki/Atmega8U2">Atmega8U2</a> ドライバ関連</h1><p>AVR USB 対応機器の <a href="http://sourceforge.jp/projects/unagi/wiki/AtMega8U2">AtMega8U2</a> を載せた kazzo PCB 3.0 を昨年こっそりと作ってあります。これも V-USB 同様によいサンプルソースに巡り会えてないまま開発が放置されています。
</p><p>先月に <a href="http://sourceforge.jp/projects/unagi/wiki/Atmega32U4">Atmega32U4</a> で開発している方からよいソースを教えていただいたので時間がとれれば改善する可能性があります。
</p><h1 id="h1-.E3.82.A2.E3.82.AF.E3.82.BB.E3.82.B9.E6.B3.A2.E5.BD.A2.E3.81.AE.E5.95.8F.E9.A1.8C">アクセス波形の問題</h1><p>MMC5 を経由する Work RAM と EXRAM や namcot の 163 内部の internal RAM には正しくアクセスできていません。私が把握していないだけでアクセスできないメモリがあるかもしれません。
</p><p>これの原因は深くは追っておらず予想で言うと、ファミコンの CPU が出す制御信号とはかなり違うものだと思っています。対処策はわりと簡単で、ロジックアナライザで実機の出すメモリ波形を計測すればよいだけだと思います。
</p><p>これをやってくれる人が出てくれると、以前は放置した RAM アダプタ経由での disk アクセスもできるかもしれません。
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/order_ja">
    <title>order_ja</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/order_ja</link>
    <dc:identifier>order_ja</dc:identifier>
    <dc:date>2011-04-22T19:29:58+09:00</dc:date>
        <description>
      <![CDATA[= 注文の仕方
  * 本業の空き時間を利用して、対応作業を行いますので、対応にお時間をいただく場合がございます。
  * ガラクタは複数人希望がございましたら、抽選いたします。

下記2項目を満たさない方は優先度が下がります。ご注意下さい。
  * 製品には通常製品と、ガラクタがございます。ガラクタは通常製品と一緒に注文してください。
  * ご希望の商品名と数量を記載の上、 [[E]]>
    </description>
    <content:encoded>
      <![CDATA[<h1 id="h1-.E6.B3.A8.E6.96.87.E3.81.AE.E4.BB.95.E6.96.B9">注文の仕方</h1><ul><li>本業の空き時間を利用して、対応作業を行いますので、対応にお時間をいただく場合がございます。
</li><li>ガラクタは複数人希望がございましたら、抽選いたします。
</li></ul><p>下記2項目を満たさない方は優先度が下がります。ご注意下さい。
</p><ul><li>製品には通常製品と、ガラクタがございます。ガラクタは通常製品と一緒に注文してください。
</li><li>ご希望の商品名と数量を記載の上、 <img src="http://sourceforge.jp/projects/unagi/wiki/order_ja/attach/designmail.png" alt="designmail.png" id="emb-designmail.png-1" title="designmail.png" class="embed-image" width="148" height="25"> までメールをください。件名は「通販の注文」としてください。
</li></ul><h1 id="h1-.E3.81.94.E6.B3.A8.E6.96.87.E3.81.AE.E6.B5.81.E3.82.8C">ご注文の流れ</h1><ul><li>お客様: 注文メールを発送
</li><li>開発チーム: 在庫を確認、入金先を指示
</li><li>お客様: 入金
</li><li>開発チーム: 入金確認後、発送
</li></ul><h1 id="h1-.E9.80.81.E6.96.99">送料</h1><p>flash memory のみは普通郵便で 200 円です。
その他はレターパック 350 です。希望者があればレターパック 500 の変更も行います。
</p><h1 id="h1-.E9.80.9A.E5.B8.B8.E8.A3.BD.E5.93.81">通常製品</h1><h2 id="h2-kazzo.20PCB.20revision.202.1.20.E8.A3.BD.E4.BD.9C.E3.82.AD.E3.83.83.E3.83.88.E3.81.AE.E3.81.BF">kazzo PCB revision 2.1 製作キットのみ</h2><a href="http://sourceforge.jp/projects/unagi/wiki/order_ja/attach/kit2.1.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/order_ja/thumb/small/kit2.1.jpg" alt="kit2.1.jpg" id="emb-kit2.1.jpg-1" title="kit2.1.jpg" class="embed-image embed-image-right" width="127" height="79" align="right"></a><p>
商品情報
</p><ul><li>famicom bus simulator
</li><li>価格: 3500円
</li><li>在庫: うりきれ
</li><li>部品未実装。お客様側で組み立ててご使用下さい。組み立て方は<a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja">専用ページ</a>をご覧下さい。
</li></ul><p>備考
</p><ul><li>ファームウェアは AVR に書き込み済みでお送りしますので、はんだ付けのみで使用できます。
</li><li>ISP 用のピンヘッダと AVR 用の IC ソケットは動作に必要ではないので基本的に付属していません。ついている場合はオマケです。
</li></ul><h2 id="h2-.E3.82.A8.E3.83.83.E3.82.B8.E3.82.B3.E3.83.8D.E3.82.AF.E3.82.BF.2060.20pin">エッジコネクタ 60 pin</h2><p>商品情報
</p><ul><li>価格: 1000円
</li><li>在庫: 18 
</li><li>耳がないのでそのまま利用可能
</li></ul><h2 id="h2-.E3.82.A8.E3.83.83.E3.82.B8.E3.82.B3.E3.83.8D.E3.82.AF.E3.82.BF.2072.20pin">エッジコネクタ 72 pin</h2><p>商品情報
</p><ul><li>価格: 1000円
</li><li>在庫: 1
</li><li>このコネクタのピッチは 2.54 mm ですが、 NES カートリッジのピッチは 2.50 mm です。このため接触不良が発生しやすいことに注意してください。こちらで試したところでは、手持ちの NES カートリッジではアクセスできています。
</li><li>耳がないのでそのまま利用可能
</li></ul><h2 id="h2-AM29F040B-90PC">AM29F040B-90PC</h2><a href="http://sourceforge.jp/projects/unagi/wiki/order_ja/attach/am29f040b.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/order_ja/thumb/small/am29f040b.jpg" alt="am29f040b.jpg" id="emb-am29f040b.jpg-1" title="am29f040b.jpg" class="embed-image embed-image-right" width="128" height="79" align="right"></a><p>
商品情報
</p><ul><li>flash memory, 512K x 8bit, 5.0 Volt-only
</li><li>価格: 5個3000円, 10個 5000円, 20個 7500円
</li><li>在庫: うりきれ (再入荷の予定なし、値上げの可能性あり)
</li></ul><p>備考
</p><ul><li>昨今のぶるまより入手と実装が容易な DIP type.
</li><li>実装が容易な DIP type.
</li><li>コマンドアドレス幅が A10-A0 なので、どのマッパでも書き込みが可能です。
</li></ul><h1 id="h1-flash.20memory.20cartridge.20.E3.81.AE.E8.A3.BD.E4.BD.9C.E4.BB.A3.E8.A1.8C">flash memory cartridge の製作代行</h1><p>ご承諾いただくこと
</p><ul><li>カセットをこじ開けるのでケースに傷がついてます
</li><li>作成済みでないものは部品調達から行いますので時間と人件費がそれなりにかかります
</li></ul><h2 id="h2-TKROM.20flash.20memory.20cartridge">TKROM flash memory cartridge</h2><a href="http://sourceforge.jp/projects/unagi/wiki/order_ja/attach/tkrom.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/order_ja/thumb/small/tkrom.jpg" alt="tkrom.jpg" id="emb-tkrom.jpg-1" title="tkrom.jpg" class="embed-image embed-image-right" width="128" height="87" align="right"></a><p>
商品情報
</p><ul><li>価格: 4000円
</li><li>PRG ROM, CHR ROM 共に AM29F040B を換装済み
</li><li>動作確認済み
</li><li>在庫: 11
</li></ul><p>ご承諾いただくこと
</p><ul><li>カセットをこじ開けるのでケースに傷や欠けがあります
</li></ul><p>備考
</p><ul><li>kazzo と一緒に発送可能
</li><li>MMC3 + CHR ROM のものが全て動きます。
</li><li>電池がある程度持つことは確認しましたが保証外です。
</li><li>TKROM, TSROM のゲームを入れるとセーブデータが消えます。
</li><li>外見は写真と異なりますが、内面は全て同じ TKROM です。
</li></ul><h2 id="h2-.E3.81.9D.E3.81.AE.E4.BB.96.20.E3.81.AE.20flash.20memory.20cartridge">その他 の flash memory cartridge</h2><ul><li>TKROM 以外で flash memory hiki に書いてあるものは対応可能です。
</li><li>SNROM, TNROM のように CHR RAM の場合は交換作業量が半分になるので安く作れます。
</li><li>VRC4 系は各種作業の省力化のため、ゴエモン外伝2を使用します。グラディウスIIは使用しません。
</li></ul><h1 id="h1-.E3.82.AC.E3.83.A9.E3.82.AF.E3.82.BF">ガラクタ</h1><h2 id="h2-kazzo.20PCB.20revision.202.0.20.E5.9F.BA.E6.9D.BF.E3.81.A0.E3.81.91">kazzo PCB revision 2.0 基板だけ</h2><a href="http://sourceforge.jp/projects/unagi/wiki/order_ja/attach/pcb20.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/order_ja/thumb/small/pcb20.jpg" alt="pcb20.jpg" id="emb-pcb20.jpg-1" title="pcb20.jpg" class="embed-image embed-image-right" width="128" height="96" align="right"></a><p>
商品情報
</p><ul><li>famicom bus simulator
</li><li>価格: 500円
</li><li>在庫: 14 くらい
</li><li>動作保証なし
</li></ul><p>備考
</p><ul><li>配線に問題がある revision 2.0 が余ってるので欲しい人はどうぞ。
</li></ul><h2 id="h2-TLROM.20flash.20memory.20cartridge">TLROM flash memory cartridge</h2><p>商品情報
</p><ul><li>改造失敗品
</li><li>価格: 1500円
</li><li>在庫: 1
</li><li>PRG ROM, CHR ROM 共に AM29F040B を換装済み
</li></ul><p>備考
</p><ul><li>実際には TKROM ですが、 W-RAM が使えなくなったため、 TLROM として動作可能です。TSROM は動作不可。
</li><li>使えなくなった理由は調査していませんので、もしかすると簡単になおせるかもしれません。
</li></ul>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/flash_hard_en">
    <title>flash_hard_en</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/flash_hard_en</link>
    <dc:identifier>flash_hard_en</dc:identifier>
    <dc:date>2011-02-23T18:14:00+09:00</dc:date>
        <description>
      <![CDATA[== Flash Memory Cartridge - Hardware Terminology ==
= CPU region
Normally write waveforms are sent via the 60 pin edge connector. However occasionally this method causes three problems: 
  * accide]]>
    </description>
    <content:encoded>
      <![CDATA[<h2 id="h2-Flash.20Memory.20Cartridge.20-.20Hardware.20Terminology">Flash Memory Cartridge - Hardware Terminology</h2><h1 id="h1-CPU.20region">CPU region</h1><p>Normally write waveforms are sent via the 60 pin edge connector. However occasionally this method causes three problems: 
</p><ul><li>accidental bank switching
</li><li>securing command addresses
</li><li>databus conflicting
</li></ul><h2 id="h2-Accidental.20Bank.20Switching">Accidental Bank Switching</h2><p>Read-access ROM area ($8000-$ffff) is assigned for reading ROM data, while the write-access ROM area is assigned as a control register for bank switching. But in order to program flash memory data, it requires sending a write-access signal. Due to this signal sharing the same function as bank switch control, certain steps must be taken in order to prevent such an accidental bank switch from occurring.
</p><p>Flash memory has 3 control signals. They are CS (Chip Select), WE (Write Enable) and OE (Outout Enable). When these control signals are used, flash memory latches data. 
</p><ul><li>Condition 1: /CS==L and /OE==H and /WE==raising L to H
</li><li>Condition 2: /WE==L and /OE==H and /CS==raising L to H
</li></ul><img src="http://sourceforge.jp/projects/unagi/wiki/flash_hard_en/attach/flashmemory.png" alt="flashmemory.png" id="emb-flashmemory.png-1" title="flashmemory.png" class="embed-image" width="420" height="602"><p>
</p><p>The 6502 has 2 control signals and 1 address-decoded signals: R/W (read or write), PHI2 (machine cycle), and /ROMCS (inverted (A15 and PHI2)). Many different mappers will latch data on the following condition:
</p><img src="http://sourceforge.jp/projects/unagi/wiki/flash_hard_en/attach/6502write.png" alt="6502write.png" id="emb-6502write.png-1" title="6502write.png" class="embed-image" width="420" height="485"><p>
</p><p>The write cycle condition varies among different flash memory and mapper types. In order to successfully program data to flash memory, keep the PHI2 signal as a low state in order to prevent accidental bank switching.
</p><h2 id="h2-securing.20command.20addresses">securing command addresses</h2><p>When writing 0x2aaa, 0x5555 on address bus A0-14, flash memory will undesirably accept these writes as various other functions. Keep in mind that each bank switching specification amongst different devices will vary. In this case you will need to match the correct command addresses.
</p><p>Please check out more info on command addresses in the accompanying Software Terminology document.
</p><h2 id="h2-databus.20conflicting">databus conflicting</h2><p>When using a basic board (which utilizes a 74xx161) the control signal for ROM is not fully decoded. This causes both the CPU and ROM to send data at the same time whenever the CPU sends a write waveform, which results in unusable data.
</p><p>Normally this shouldn't pose a problem when using a ROM + 74xx161. However, it's a serious problem for both RAM and flash memory.
</p><p>Many ASICs (e.g. MMC and VRC series) won't have such a databus conflicting problem. ASICs outputs a mixed signal, /OE and /CS, for ROM.
<pre>R/W CPU /ROMCS|memory /enable
L   L         |H
L   H         |H
H   L         |L
H   H         |H
</pre></p><h2 id="h2-connecting.20flash.20memory">connecting flash memory</h2><p>Address bus and data bus is same connection for ROM. Connect GND or +5V to the higher address bus that is INDEPENDENT from the mapper logic.
</p><h3 id="h3-.2FCS">/CS</h3><p>/CS requires address decoded parts. Connect to /ROMCS. Otherwise if $6000-$7fff is assigned for ROM, the flash process will not work.
</p><h3 id="h3-.2FWE">/WE</h3><p>Connect to R/W.
</p><h3 id="h3-.2FOE">/OE</h3><p>/OE requires a high state while R/W is at low state. This normally shouldn't matter with ASICs since it outputs a mixed signal. Otherwise if the mixed signal is not available, connect /OE to the inverted R/W instead.
</p><h1 id="h1-PPU.20region">PPU region</h1><p>Address bus and databus connection share the same CPU region. But since the PPU control signals are much simpler than CPU signals, there's no issues with accidental bank switching. Connect following assingment.
</p><ul><li>/CS = A13 (positive)
</li><li>/OE = /RD
</li><li>/WE = /WR
</li></ul><p>Notes: 
</p><ul><li>/A13 (negative, edge connector's 49 pin) is similar to A13 (positive, edge connector's 56 pin), MAKE SURE THIS IS CONNECTED PROPERLY.
</li><li>Since the PPU /WR signal is routed to an unused pin, you will need to wire this directly. 
</li><li>Some mapper mixes A13 and /RD (e.g. VRC4 mapper). In this case, you'll need to re-separate the signals.
</li></ul><img src="http://sourceforge.jp/projects/unagi/wiki/flash_hard_en/attach/ppuwrite.png" alt="ppuwrite.png" id="emb-ppuwrite.png-1" title="ppuwrite.png" class="embed-image" width="420" height="497"><p>
</p><h1 id="h1-Wiring.20Picture">Wiring Picture</h1><p>Sample picture for HVC-TKROM (60pin connector, MMC3, Program ROM, Charcter ROM and Battery-backuped W-RAM)
</p><a href="http://sourceforge.jp/projects/unagi/wiki/flash_hard_en/attach/tkrom_cut.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/flash_hard_en/thumb/small/tkrom_cut.jpg" alt="tkrom_cut.jpg" id="emb-tkrom_cut.jpg-1" title="tkrom_cut.jpg" class="embed-image" width="97" height="128"></a><p> <a href="http://sourceforge.jp/projects/unagi/wiki/flash_hard_en/attach/tkrom_connect2.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/flash_hard_en/thumb/small/tkrom_connect2.jpg" alt="tkrom_connect2.jpg" id="emb-tkrom_connect2.jpg-1" title="tkrom_connect2.jpg" class="embed-image" width="104" height="128"></a>
You need to bend the leg <a href="http://sourceforge.jp/projects/unagi/tracker/detail/31" class="tracker">#31</a> in CHR memory and legs <a href="http://sourceforge.jp/projects/unagi/tracker/detail/30" class="tracker">#30</a> and <a href="http://sourceforge.jp/projects/unagi/tracker/detail/31" class="tracker">#31</a> in PRG memory.
</p><p>Pictures were provided by Mike. (Thanks!)
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja">
    <title>pcb2.1_place_ja</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja</link>
    <dc:identifier>pcb2.1_place_ja</dc:identifier>
    <dc:date>2010-11-18T20:47:48+09:00</dc:date>
        <description>
      <![CDATA[= 2010年11月再販版からの部品の変更のおしらせ
写真と異なるものが混在している場合がありますが、動作は同じです。
R1,R2 はシルク印刷とは異なる値になりますが、120 ohm を使用してください。

{{{
name |変更前              |変更後
-----+--------------------+-------------
U2,U3|Fairchild]]>
    </description>
    <content:encoded>
      <![CDATA[<h1 id="h1-2010.E5.B9.B411.E6.9C.88.E5.86.8D.E8.B2.A9.E7.89.88.E3.81.8B.E3.82.89.E3.81.AE.E9.83.A8.E5.93.81.E3.81.AE.E5.A4.89.E6.9B.B4.E3.81.AE.E3.81.8A.E3.81.97.E3.82.89.E3.81.9B">2010年11月再販版からの部品の変更のおしらせ</h1><p>写真と異なるものが混在している場合がありますが、動作は同じです。
R1,R2 はシルク印刷とは異なる値になりますが、120 ohm を使用してください。
</p><pre>name |変更前              |変更後
-----+--------------------+-------------
U2,U3|Fairchild製 74VHC574|NXP製 74HC574
R1,R2|68.0 ohm(68R0)      |120 ohm(121)
R3   |1.50 kohm(1501)     |1.5 kohm(152)
D1,D2|3.6V (|W4)          |3.3V (|W3)
</pre><h1 id="h1-.E8.A3.BD.E4.BD.9C.E7.B7.A8">製作編</h1><h2 id="h2-.E7.94.A8.E6.84.8F.E3.81.99.E3.82.8B.E3.82.82.E3.81.AE">用意するもの</h2><p>チップ部品を使っていますが、予想よりかは楽に組み立てが出来ます。チップ部品をなくさないように、パーツ入れや小皿があるとよいです。
</p><ul><li>kazzo PCB revision 2.1 キット
</li><li>はんだごて
</li><li>テスタ
</li><li>ニッパ
</li><li>糸はんだ
</li><li>はんだ吸い取り線
</li><li>フラックス
</li></ul><h2 id="h2-.E3.82.BB.E3.83.A9.E3.83.9F.E3.83.83.E3.82.AF.E3.82.B3.E3.83.B3.E3.83.87.E3.83.B3.E3.82.B5.E3.82.92.E4.BB.98.E3.81.91.E3.82.8B.3A.20C1.2C.20C2.2C.20C3">セラミックコンデンサを付ける: C1, C2, C3</h2><a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/attach/capsitor0.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/thumb/small/capsitor0.jpg" alt="capsitor0.jpg" id="emb-capsitor0.jpg-1" title="capsitor0.jpg" class="embed-image embed-image-right" width="128" height="94" align="right"></a><p>
まずはコンデンサをつけてチップ部品の実装の練習をします。
<br clear="right" />
</p><a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/attach/capsitor1.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/thumb/small/capsitor1.jpg" alt="capsitor1.jpg" id="emb-capsitor1.jpg-1" title="capsitor1.jpg" class="embed-image embed-image-right" width="128" height="96" align="right"></a><p>
印字がない2端子のチップ部品がコンデンサです。
<br clear="right" />
</p><a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/attach/capsitor2.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/thumb/small/capsitor2.jpg" alt="capsitor2.jpg" id="emb-capsitor2.jpg-1" title="capsitor2.jpg" class="embed-image embed-image-right" width="128" height="91" align="right"></a><p>
とりあえずはんだと基板と部品をくっつけてから、
<br clear="right" />
</p><a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/attach/capsitor3.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/thumb/small/capsitor3.jpg" alt="capsitor3.jpg" id="emb-capsitor3.jpg-1" title="capsitor3.jpg" class="embed-image embed-image-right" width="128" height="89" align="right"></a><p>
こてをあてながら場所を調整します(写真は抵抗の所を参考にしてください)。反対側はあとではんだ付けします。
<br clear="right" />
</p><h2 id="h2-.E6.8A.B5.E6.8A.97.E3.82.92.E4.BB.98.E3.81.91.E3.82.8B.3A.20R1.2C.20R2.2C.20R3.2C.20R4">抵抗を付ける: R1, R2, R3, R4</h2><a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/attach/resistor0.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/thumb/small/resistor0.jpg" alt="resistor0.jpg" id="emb-resistor0.jpg-1" title="resistor0.jpg" class="embed-image embed-image-right" width="128" height="91" align="right"></a><p>
抵抗には極性はありませんが、シルクの文字の流れに合わせて設置すると良いでしょう。
シルクの文字に抵抗値を合わせてください。(R1:68R0, R2:68R0, R3:1501, R4:3002) (または R1:121, R2:121, R3:152, R4:3002)
<br clear="right" />
</p><a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/attach/basho.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/thumb/small/basho.jpg" alt="basho.jpg" id="emb-basho.jpg-1" title="basho.jpg" class="embed-image embed-image-right" width="128" height="70" align="right"></a><p>
片方はラジオペンチやピンセット、もう片方ははんだごてで場所を調整します。
<br clear="right" />
</p><h2 id="h2-.E3.83.80.E3.82.A4.E3.82.AA.E3.83.BC.E3.83.89.E3.82.92.E4.BB.98.E3.81.91.E3.82.8B.3A.20D1.2C.20D2">ダイオードを付ける: D1, D2</h2><a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/attach/diode0.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/thumb/small/diode0.jpg" alt="diode0.jpg" id="emb-diode0.jpg-1" title="diode0.jpg" class="embed-image embed-image-right" width="74" height="128" align="right"></a><p>
ダイオードには極性があります。
非常に見づらいのですが W4 or W3 の文字とシルクの方向をあわせてください。
</p><p>C,D,R の 2 端子のチップ部品はすべて片側のみ固定してから、反対側をはんだ付けすると効率がよいと思います。
<br clear="right" />
</p><h2 id="h2-Resonator.20.E3.82.92.E4.BB.98.E3.81.91.E3.82.8B.3A.20X1">Resonator を付ける: X1</h2><a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/attach/diode1.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/thumb/small/diode1.jpg" alt="diode1.jpg" id="emb-diode1.jpg-1" title="diode1.jpg" class="embed-image embed-image-right" width="81" height="128" align="right"></a><p>
</p><p>3端子あり、両端の極性はありません。
中央と両端がくっつかないようにつけてください。
<br clear="right" />
</p><h2 id="h2-74VHC574.20.E3.82.92.E4.BB.98.E3.81.91.E3.82.8B.3A.20U2.2C.20U3">74VHC574 を付ける: U2, U3</h2><a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/attach/u0.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/thumb/small/u0.jpg" alt="u0.jpg" id="emb-u0.jpg-1" title="u0.jpg" class="embed-image embed-image-right" width="128" height="102" align="right"></a><p>
逆方向につけると IC が故障してしまいます。
シルクの半円と VHC574 or HC574 のくぼみの方向をあわせます。
ずれないようにテープで固定するといいかもしれません。
<br clear="right" />
</p><a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/attach/u1.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/thumb/small/u1.jpg" alt="u1.jpg" id="emb-u1.jpg-1" title="u1.jpg" class="embed-image embed-image-right" width="128" height="111" align="right"></a><p>
右端の1ピンをはんだ付けし、実装パターンと足の方向を揃えます。
<br clear="right" />
</p><a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/attach/u2.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/thumb/small/u2.jpg" alt="u2.jpg" id="emb-u2.jpg-1" title="u2.jpg" class="embed-image embed-image-right" width="127" height="105" align="right"></a><p>
フラックスを塗布し、ピンにはんだを流し込みます。
<br clear="right" />
</p><a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/attach/u3.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/thumb/small/u3.jpg" alt="u3.jpg" id="emb-u3.jpg-1" title="u3.jpg" class="embed-image embed-image-right" width="128" height="108" align="right"></a><p>
この段階ではブリッジしててよいです。
<br clear="right" />
</p><a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/attach/u4.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/thumb/small/u4.jpg" alt="u4.jpg" id="emb-u4.jpg-1" title="u4.jpg" class="embed-image embed-image-right" width="128" height="96" align="right"></a><p>
はんだ吸い取り線でブリッジとはみ出た部分を吸い取ります。
<br clear="right" />
</p><a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/attach/u5.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/thumb/small/u5.jpg" alt="u5.jpg" id="emb-u5.jpg-1" title="u5.jpg" class="embed-image embed-image-right" width="128" height="103" align="right"></a><p>
テスタで近隣のピンが接触していないか確認し、補修を行います。目視だけではくっついてるか判断できないことが多いです。
<br clear="right" />
</p><h2 id="h2-AVR.20.E3.82.92.E3.81.A4.E3.81.91.E3.82.8B.3A.20U1">AVR をつける: U1</h2><a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/attach/avr0.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/thumb/small/avr0.jpg" alt="avr0.jpg" id="emb-avr0.jpg-1" title="avr0.jpg" class="embed-image embed-image-right" width="128" height="91" align="right"></a><p>
シルクの半円と AVR のくぼみの方向をあわせます。キットではファームウェアと fuse の書き込み済みでお送りします。
<br clear="right" />
</p><a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/attach/avr1.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/thumb/small/avr1.jpg" alt="avr1.jpg" id="emb-avr1.jpg-1" title="avr1.jpg" class="embed-image embed-image-right" width="128" height="96" align="right"></a><p>
ソケットなしで直づけして大丈夫です。ファームウェアの変更は USB 経由もしくは ISP から変更できます。
<br clear="right" />
</p><h2 id="h2-.E3.81.9D.E3.81.AE.E4.BB.96.E3.82.92.E3.81.A4.E3.81.91.E3.82.8B.3A.20CP1.2C.20CN1.2C.20CN3">その他をつける: CP1, CN1, CN3</h2><a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/attach/cp0.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/thumb/small/cp0.jpg" alt="cp0.jpg" id="emb-cp0.jpg-1" title="cp0.jpg" class="embed-image embed-image-right" width="128" height="93" align="right"></a><p>
CP1 は + がある方向に長いリード線があるものをつけます。
<br clear="right" />
</p><a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/attach/usb0.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/thumb/small/usb0.jpg" alt="usb0.jpg" id="emb-usb0.jpg-1" title="usb0.jpg" class="embed-image embed-image-right" width="128" height="98" align="right"></a><p>
CN1, CN3 は問題なくつけられるでしょう。
<br clear="right" />
</p><a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/attach/jumper.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/thumb/small/jumper.jpg" alt="jumper.jpg" id="emb-jumper.jpg-1" title="jumper.jpg" class="embed-image embed-image-right" width="128" height="115" align="right"></a><p>
スイッチを付けない場合は CP1 を切ったときのリード線で JP1 をショートします。
<br clear="right" />
</p><h2 id="h2-.E3.81.8A.E3.82.8F.E3.82.8A">おわり</h2><a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/attach/ohari.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/thumb/large/ohari.jpg" alt="ohari.jpg" id="emb-ohari.jpg-1" title="ohari.jpg" class="embed-image" width="480" height="320"></a><p>
</p><h1 id="h1-.E3.82.A4.E3.83.B3.E3.82.B9.E3.83.88.E3.83.BC.E3.83.AB.E7.B7.A8.20.28Windows.29">インストール編 (Windows)</h1><h2 id="h2-.E7.94.A8.E6.84.8F.E3.81.99.E3.82.8B.E3.82.82.E3.81.AE-2">用意するもの</h2><ul><li>kazzo_0.1.x.zip → <a href="http://sourceforge.jp/projects/unagi/releases/">ダウンロード一覧へ</a>
</li></ul><h2 id="h2-.E3.82.A4.E3.83.B3.E3.82.B9.E3.83.88.E3.83.BC.E3.83.AB">インストール</h2><p>kazzo と PC を接続します。以下の画面が出たら kazzo_0.1.x.zip に含まれる <tt>windows_driver/kazzo.inf</tt> を指定してください。このときに kazzo と表示されない場合は配線を見直してください。
</p><p>インストールが済んだら、 kazzo_test.exe で USB の通信を確認します。
</p><h1 id="h1-dump.20.E7.B7.A8.20.28Windows.29">dump 編 (Windows)</h1><h2 id="h2-.E7.94.A8.E6.84.8F.E3.81.99.E3.82.8B.E3.82.82.E3.81.AE-3">用意するもの</h2><ul><li>unagi_client_windows_062.zip → <a href="http://sourceforge.jp/projects/unagi/releases/">ダウンロード一覧へ</a>
</li><li>カセット (ここでは赤川次郎の幽霊列車)
</li></ul><h2 id="h2-anago.20.E3.82.92.E4.BD.BF.E3.81.86">anago を使う</h2><a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/attach/cartset.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/thumb/small/cartset.jpg" alt="cartset.jpg" id="emb-cartset.jpg-1" title="cartset.jpg" class="embed-image embed-image-right" width="128" height="102" align="right"></a><p>
kazzo とカセットを接続してから、 USB ケーブルを接続します。
<br clear="right" />
</p><h3 id="h3-GUI">GUI</h3><ul><li>anago_wx.exe を実行するとフォームが出ます。
</li><li>dump タブ, script にて mmc1_skrom.ag を選択します。
</li><li>ROM image で出力ファイルをきめます。
</li><li>電池がついてる場合は battery にチェックを入れてから、 dump ボタンを押します。
</li><li>接触不良でなければ、しばらく待つとファイルが生成されます。
</li></ul><h3 id="h3-CUI">CUI</h3><a href="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/attach/cmd.png"><img src="http://sourceforge.jp/projects/unagi/wiki/pcb2.1_place_ja/thumb/small/cmd.png" alt="cmd.png" id="emb-cmd.png-1" title="cmd.png" class="embed-image embed-image-right" width="128" height="85" align="right"></a><p>
cmd.exe を開いて anago.exe があるディレクトリまで移動します.ここでは配布ファイルを <tt>d:\unagi</tt> に展開したとします。
<pre> スタートボタンを押す, R を押す, cmd と書く, Enter を押す
 &gt; d:
 &gt; cd \unagi\anago
 &gt; unagi.exe d mmc1_skrom.ag kin_yu.nes
</pre>接触不良に問題がなければ、作成された kin_yu.nes をエミュレータで動かすことが出来ます。
<br clear="right" />
</p><p>その他詳細は付属のテキストファイルや説明されているサイトなどをご覧の上いろいろお試し下さい。
</p><h1 id="h1-.E3.82.A4.E3.83.B3.E3.82.B9.E3.83.88.E3.83.BC.E3.83.AB.E7.B7.A8.20.28.E3.81.9D.E3.81.AE.E4.BB.96.E3.81.AEOS.29">インストール編 (その他のOS)</h1><p>kazzo と PC を接続します。 USB 接続状態を確認し一覧に kazzo があれば大丈夫です。
</p><p>kazzo_test.exe に準ずるものは用意してないので、Makefile を修正して各自コンパイルしてください。
</p><h1 id="h1-dump.20.E7.B7.A8.20.28.E3.81.9D.E3.81.AE.E4.BB.96.E3.81.AEOS.29">dump 編 (その他のOS)</h1><p>ビルド方法は <a href="http://sourceforge.jp/projects/unagi/releases/49771/note">client 0.6.2 のリリースノート</a> をご覧下さい。
コンパイルに成功すれば、 anago ができます。操作方法は Windows とほぼ同じです。
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/script_workram_ja">
    <title>script_workram_ja</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/script_workram_ja</link>
    <dc:identifier>script_workram_ja</dc:identifier>
    <dc:date>2010-11-18T08:33:02+09:00</dc:date>
        <description>
      <![CDATA[== anago script file reference - workram access mode ==
= スクリプトファイル
workram access mode では `dumpcore.nut` と指定された スクリプトファイル(`.ae or .ag`) を2つ読み込みます。`dumpcore.nut` の内容は変更しないでください。

スクリプトファイルでは `boar]]>
    </description>
    <content:encoded>
      <![CDATA[<h2 id="h2-anago.20script.20file.20reference.20-.20workram.20access.20mode">anago script file reference - workram access mode</h2><h1 id="h1-.E3.82.B9.E3.82.AF.E3.83.AA.E3.83.97.E3.83.88.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB">スクリプトファイル</h1><p>workram access mode では <tt>dumpcore.nut</tt> と指定された スクリプトファイル(<tt>.ae or .ag</tt>) を2つ読み込みます。<tt>dumpcore.nut</tt> の内容は変更しないでください。
</p><p>スクリプトファイルでは <tt>board, cpu_ram_access()</tt> の2つの定義が必要です。簡潔な記述のために関数を追加することも可能です。
</p><h1 id="h1-.E3.82.B9.E3.82.AF.E3.83.AA.E3.83.97.E3.83.88.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.81.AB.E5.BF.85.E8.A6.81.E3.81.AA.E5.A4.89.E6.95.B0.E3.81.A8.E9.96.A2.E6.95.B0">スクリプトファイルに必要な変数と関数</h1><h2 id="h2-board">board</h2><ul><li><tt>cpu_ram</tt>: そのハードの work RAM の設定
</li></ul><p><a href="http://sourceforge.jp/projects/unagi/wiki/script_common_ja">script_common_ja</a> での記載も参考にしてください。
</p><h2 id="h2-cpu_ram_access.28.29">cpu_ram_access()</h2><p><tt>function cpu_ram_access(d, pagesize, banksize)</tt>
</p><h3 id="h3-.E5.BC.95.E6.95.B0">引数</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>pagesize</tt>: <tt>board.cpu_ram.size_base * scale / board.cpu_ram.banksize</tt>
</li><li><tt>banksize</tt>: <tt>board.cpu_ram.banksize</tt> と同じ
</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4">戻り値</h3><p>なし
</p><h3 id="h3-.E8.AA.AC.E6.98.8E">説明</h3><p>work RAM access 方法を定義します。下記の手順で実装します。
</p><ul><li>RAM 制御レジスタを read/write protect を解除する (レジスタがあれば)
</li><li>cpu_ramrw で RAM へアクセス
</li><li>RAM 制御レジスタの read/write protect をアクセス不可にする (レジスタがあれば)
</li></ul><p>pagesize が 1 以外を取り得る場合は for ループを使用します。
</p><h1 id="h1-.ae.20or.20.ag.20.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.81.8B.E3.82.89.E5.88.A9.E7.94.A8.E3.81.A7.E3.81.8D.E3.82.8B.E9.96.A2.E6.95.B0">.ae or .ag ファイルから利用できる関数</h1><h2 id="h2-cpu_write.28.29">cpu_write()</h2><p><a href="http://sourceforge.jp/projects/unagi/wiki/script_common_ja">script_common_ja</a> を参照。
</p><p>この命令を使用して work RAM への書き込みができてしまいますが、読み込みはできないので <tt>cpu_ramrw()</tt>を使用してください。
</p><h2 id="h2-cpu_ramrw.28.29">cpu_ramrw()</h2><p><tt>function cpu_ramrw(d, address, length)</tt>
</p><h3 id="h3-.E5.BC.95.E6.95.B0-2">引数</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>address</tt>: 対象アドレス。利用可能範囲は 0x6000-0x7fff。
</li><li><tt>length</tt>: 取得長。利用可能範囲は 1-0x2000。
</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-2">戻り値</h3><p>なし
</p><h3 id="h3-.E8.AA.AC.E6.98.8E-2">説明</h3><p>CPU 領域の対象アドレスから Work RAM データへアクセスします。
</p><ul><li>workram read mode 時には対象アドレスからデータを取得し PC 上に RAM image file を作成します。
</li><li>workram write mode 時には読み込んだ RAM image file を対象アドレスへ書き込みます。
</li></ul>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/script_flash_ja">
    <title>script_flash_ja</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/script_flash_ja</link>
    <dc:identifier>script_flash_ja</dc:identifier>
    <dc:date>2010-11-18T08:20:12+09:00</dc:date>
        <description>
      <![CDATA[== anago script file reference - program mode ==
= スクリプトファイル
program mode では programcore.nut と指定されたスクリプトファイル(.af or .ag)を2つ読み込みます。programcore.nut の内容は変更しないでください。

スクリプトファイルでは `board, program_initi]]>
    </description>
    <content:encoded>
      <![CDATA[<h2 id="h2-anago.20script.20file.20reference.20-.20program.20mode">anago script file reference - program mode</h2><h1 id="h1-.E3.82.B9.E3.82.AF.E3.83.AA.E3.83.97.E3.83.88.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB">スクリプトファイル</h1><p>program mode では programcore.nut と指定されたスクリプトファイル(.af or .ag)を2つ読み込みます。programcore.nut の内容は変更しないでください。
</p><p>スクリプトファイルでは <tt>board, program_initialize(), cpu_transfer(), ppu_transfer()</tt> の4つの定義が必要です。簡潔な記述のために関数を追加することも可能です。
</p><h1 id="h1-program.20mode.20.E3.81.AE.E6.B5.81.E3.82.8C">program mode の流れ</h1><p>flash memory にはデータ書き込み時に待ち時間が発生します。この待ち時間の間にもう1つのデバイスを書き込みます。このために下記の順に定義された処理が実行されます。
</p><ul><li>program_initialize()
</li><li>erase 実行, 完了待ち
</li><li>cpu_transfer() と ppu_transfer() を並行動作
</li></ul><p>最も重要な関数が program_initialize() です。program_initialize() の直後に erase が行える状態にしてください。
</p><ul><li>CPU, PPU 領域のコマンドアドレスの定義/ cpu_command(), ppu_command()
</li><li>CPU, PPU 領域のコマンドアドレスの確保/ cpu_write()
</li></ul><p>xxx_transfer() 内でもコマンドアドレスが変更できますが、それを利用するのは特殊な条件なので、それ以外は program_initialize() で完結するはずです。
</p><p>xxx_transfer() では順番に ROM image を転送できるように記載します。並行処理の切り替えは自動で行います。
</p><h1 id="h1-.af.20.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.81.AB.E5.BF.85.E8.A6.81.E3.81.AA.E5.A4.89.E6.95.B0.E3.81.A8.E9.96.A2.E6.95.B0">.af ファイルに必要な変数と関数</h1><h2 id="h2-board">board</h2><ul><li><tt>mappernum</tt>: 使用する nes ファイルの iNES headernumber の記載
</li><li><tt>cpu</tt>, <tt>ppu</tt>:
<ul><li><tt>banksize</tt>: xxx_program() に使用する可変領域のサイズ。0 は不可。
</li><li><tt>maxsize</tt>: 対象ハードが扱える最大容量
</li></ul></li></ul><p>banksize と maxsize の単位は byte です。
</p><h2 id="h2-program_initialize.28.29">program_initialize()</h2><p><tt>function program_initialize(d, cpu_banksize, ppu_banksize)</tt>
</p><h3 id="h3-.E5.BC.95.E6.95.B0">引数</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>cpu_banksize</tt>: <tt>board.cpu_rom.banksize</tt> と同じ
</li><li><tt>ppu_banksize</tt>: <tt>board.ppu_rom.banksize</tt> と同じ
</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4">戻り値</h3><p>なし
</p><h3 id="h3-.E8.AA.AC.E6.98.8E">説明</h3><p>CPU, PPU 領域のコマンドアドレスの定義と確保を行います。program_initialize() のあとに erase が行えるようにしてください。
</p><h2 id="h2-cpu_transfer.28.29">cpu_transfer()</h2><p><tt>function cpu_transfer(d, start, end, banksize)</tt>
</p><h3 id="h3-.E5.BC.95.E6.95.B0-2">引数</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>start</tt>: 転送開始ページ番号。for ループの初期入力に使用。
</li><li><tt>end</tt>: 転送終了ページ番号。for ループの終了条件に使用。
</li><li><tt>banksize</tt>: cpu_program() の引数に使用。
</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-2">戻り値</h3><p>なし
</p><h3 id="h3-.E8.AA.AC.E6.98.8E-2">説明</h3><p>CPU 領域の ROM image を転送する処理です。for ループで可変領域データを転送し、最後に固定領域のデータを転送してください。
</p><h2 id="h2-ppu_transfer.28.29">ppu_transfer()</h2><p><tt>function ppu_transfer(d, start, end, banksize)</tt>
</p><h3 id="h3-.E5.BC.95.E6.95.B0-3">引数</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>start</tt>: 転送開始ページ番号。for ループの初期入力に使用。
</li><li><tt>end</tt>: 転送終了ページ番号。for ループの終了条件に使用。
</li><li><tt>banksize</tt>: ppu_program() の引数に使用。
</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-3">戻り値</h3><p>なし
</p><h3 id="h3-.E8.AA.AC.E6.98.8E-3">説明</h3><p>PPU 領域の ROM image を転送する処理です。for ループで可変領域データを転送してください。
</p><p>PPU 領域の ROM image が存在しないハードの場合は ppu_transfer() 定義だけして内容なしにしてください。
</p><h1 id="h1-.af.20or.20.ag.20.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.81.8B.E3.82.89.E5.88.A9.E7.94.A8.E3.81.A7.E3.81.8D.E3.82.8B.E9.96.A2.E6.95.B0">.af or .ag ファイルから利用できる関数</h1><h2 id="h2-cpu_write.28.29">cpu_write()</h2><p><a href="http://sourceforge.jp/projects/unagi/wiki/script_common_ja">script_common_ja</a> を参照。
</p><h2 id="h2-cpu_command.28.29">cpu_command()</h2><p><tt>function cpu_command(d, romoffset, memorymapoffset, banksize)</tt>
</p><h3 id="h3-.E5.BC.95.E6.95.B0-4">引数</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>romoffset</tt>: flash memory command address. Acceptable addresses are 0, 0x02aa, 0x0555, 0x2aaa or 0x5555.
</li><li><tt>memorymapoffset</tt>: flash memory command address for CPU region. Acceptable range is 0x8000 to 0xffff.
</li><li><tt>banksize</tt>: target cpu memory address banksize. Acceptable values are 0x2000, 0x4000 or 0x8000.
</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-4">戻り値</h3><p>なし
</p><h3 id="h3-.E8.AA.AC.E6.98.8E-4">説明</h3><p>cpu 領域に接続された flash memory のメモリマップ上のコマンドアドレスを定義します。program_initialize() で定義し、 xxx_transfer() 内部で再定義ができます。
</p><h2 id="h2-ppu_command.28.29">ppu_command()</h2><p><tt>function ppu_command(d, romoffset, memorymapoffset, banksize)</tt>
</p><h3 id="h3-.E5.BC.95.E6.95.B0-5">引数</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>romoffset</tt>: flash memory command address. Acceptable addresses are 0, 0x02aa, 0x0555, 0x2aaa or 0x5555.
</li><li><tt>memorymapoffset</tt>: flash memory command address for PPU region. Acceptable range is 0x0000 to 0x1fff.
</li><li><tt>banksize</tt>: target ppu memory address banksize. Acceptable values are 0x0400, 0x0800, 0x1000 or 0x2000.
</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-5">戻り値</h3><p>なし
</p><h3 id="h3-.E8.AA.AC.E6.98.8E-5">説明</h3><p>対象が ppu 領域になる。詳細は cpu_command の説明を参照。
</p><h2 id="h2-cpu_program.28.29">cpu_program()</h2><p><tt>function cpu_program(d, address, length)</tt>
</p><h3 id="h3-.E5.BC.95.E6.95.B0-6">引数</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>address</tt>: 対象アドレス。利用可能範囲は 0x8000-0xffff。
</li><li><tt>length</tt>: 書き込む長さ。利用可能範囲は 0x0100-0x3fff。
</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-6">戻り値</h3><p>なし
</p><h3 id="h3-.E8.AA.AC.E6.98.8E-6">説明</h3><p>指定領域を書き込みます。処理の切り替えは内部で自動に行います。
</p><h2 id="h2-ppu_program.28.29">ppu_program()</h2><p><tt>function ppu_program(d, address, length)</tt>
</p><h3 id="h3-.E5.BC.95.E6.95.B0-7">引数</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>address</tt>: 対象アドレス。利用可能範囲は 0x0000-0x1fff。
</li><li><tt>length</tt>: 書き込む長さ。利用可能範囲は 0x0100-0x1fff。
</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-7">戻り値</h3><p>なし
</p><h3 id="h3-.E8.AA.AC.E6.98.8E-7">説明</h3><p>指定領域を書き込みます。処理の切り替えは内部で自動に行います。
</p><h2 id="h2-cpu_erase.28.29.2C.20ppu_erase.28.29">cpu_erase(), ppu_erase()</h2><p><tt>function cpu_erase(d)</tt><br />
<tt>function ppu_erase(d)</tt>
</p><h3 id="h3-.E5.BC.95.E6.95.B0-8">引数</h3><ul><li>d: userpointer
</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-8">戻り値</h3><p>なし
</p><h3 id="h3-.E8.AA.AC.E6.98.8E-8">説明</h3><p>対象領域の flash memory を erase します。この関数は .af or .ag ファイルで使用しないでください。
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/script_dump_ja">
    <title>script_dump_ja</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/script_dump_ja</link>
    <dc:identifier>script_dump_ja</dc:identifier>
    <dc:date>2010-11-18T08:10:10+09:00</dc:date>
        <description>
      <![CDATA[== anago script file reference - dump mode ==
= スクリプトファイル
dump mode では `dumpcore.nut` と指定された スクリプトファイル(`.ad .ae .af or .ag) を2つ読み込みます。dumpcore.nut の内容は変更しないでください。

スクリプトファイルでは `board, cpu_dump(), ]]>
    </description>
    <content:encoded>
      <![CDATA[<h2 id="h2-anago.20script.20file.20reference.20-.20dump.20mode">anago script file reference - dump mode</h2><h1 id="h1-.E3.82.B9.E3.82.AF.E3.83.AA.E3.83.97.E3.83.88.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB">スクリプトファイル</h1><p>dump mode では <tt>dumpcore.nut</tt> と指定された スクリプトファイル(<tt>.ad .ae .af or .ag) を2つ読み込みます。dumpcore.nut の内容は変更しないでください。
</tt></p><p>スクリプトファイルでは <tt>board, cpu_dump(), ppu_dump()</tt> の3つの定義が必要です。簡潔な記述のために関数を追加することも可能です。
</p><h1 id="h1-.E3.82.B9.E3.82.AF.E3.83.AA.E3.83.97.E3.83.88.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.81.AB.E5.BF.85.E8.A6.81.E3.81.AA.E5.A4.89.E6.95.B0.E3.81.A8.E9.96.A2.E6.95.B0">スクリプトファイルに必要な変数と関数</h1><h2 id="h2-board">board</h2><ul><li><tt>mappernum</tt>: iNES header mappernumber の標準値
</li><li><tt>cpu_rom</tt>: そのハードの program ROM の設定
</li><li><tt>ppu_rom</tt>: そのハードの charcter ROM の設定
</li><li><tt>ppu_ramfind</tt>: true のとき charcter メモリが ROM か RAM を判別します。
</li><li><tt>vram_mirrorfind</tt>: true のとき H/V フラグを自動判別します。プログラム制御できるハードは false にしてください。
</li></ul><p><a href="http://sourceforge.jp/projects/unagi/wiki/script_common_ja">script_common_ja</a> での記載も参考にしてください。
</p><h2 id="h2-cpu_dump.28.29">cpu_dump()</h2><p><tt>function cpu_dump(d, pagesize, banksize)</tt>
</p><h3 id="h3-.E5.BC.95.E6.95.B0">引数</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>pagesize</tt>: <tt>board.cpu_romsize * scale / board.cpu_banksize</tt>. for ループの終了条件に使用する。
</li><li><tt>banksize</tt>: <tt>board.cpu_romsize</tt>. cpu_read() の引数に利用する。
</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4">戻り値</h3><p>なし
</p><h3 id="h3-.E8.AA.AC.E6.98.8E">説明</h3><p>CPU 領域の ROM を read するための関数です。for ループを作成し可変領域を取得後、可能であれば固定領域を取得してください。
</p><h2 id="h2-ppu_dump.28.29">ppu_dump()</h2><p><tt>function ppu_dump(d, pagesize, banksize)</tt>
</p><h3 id="h3-.E5.BC.95.E6.95.B0-2">引数</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>pagesize</tt>: <tt>board.ppu_romsize * scale / board.ppu_banksize</tt>. for ループの終了条件に使用する。
</li><li><tt>banksize</tt>: <tt>board.ppu_romsize</tt>. ppu_read() の引数に利用する。
</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-2">戻り値</h3><p>なし
</p><h3 id="h3-.E8.AA.AC.E6.98.8E-2">説明</h3><p>この関数は ppu_rom.size_base が 0 の場合は定義する必要がありません。ppu_ramfind が true かつ、接続ハードウェアの charcter メモリが RAM の場合はこの関数を実行しません。
</p><p>PPU 領域の ROM を read するための関数です。for ループを作成し可変領域を取得してください。
</p><h1 id="h1-.ad.20.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.81.8B.E3.82.89.E5.88.A9.E7.94.A8.E3.81.A7.E3.81.8D.E3.82.8B.E9.96.A2.E6.95.B0">.ad ファイルから利用できる関数</h1><h2 id="h2-cpu_write.28.29">cpu_write()</h2><p><a href="http://sourceforge.jp/projects/unagi/wiki/script_common_ja">script_common_ja</a> を参照。
</p><h2 id="h2-cpu_read.28.29">cpu_read()</h2><p><tt>function cpu_read(d, address, length)</tt>
</p><h3 id="h3-.E5.BC.95.E6.95.B0-3">引数</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>address</tt>: 対象アドレス。利用可能範囲は 0x8000-0xffff。
</li><li><tt>length</tt>: 取得長。利用可能範囲は 0-0x3fff。
</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-3">戻り値</h3><p>なし
</p><h3 id="h3-.E8.AA.AC.E6.98.8E-3">説明</h3><p>CPU 領域の対象アドレスから Program ROM データを取得します。length が 0 のときは読みだしを行いますが、記録を行いません。これは MMC2 と MMC4 で必要です。
</p><h2 id="h2-ppu_read.28.29">ppu_read()</h2><p><tt>function ppu_read(d, address, length)</tt>
</p><h3 id="h3-.E5.BC.95.E6.95.B0-4">引数</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>address</tt>: 対象アドレス。利用可能範囲は 0x0000-0x1fff。
</li><li><tt>length</tt>: 取得長。利用可能範囲は 1-0x1fff。
</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4-4">戻り値</h3><p>なし
</p><h3 id="h3-.E8.AA.AC.E6.98.8E-4">説明</h3><p>PPU 領域の対象アドレスから Charcter ROM データを取得します。
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/script_common_ja">
    <title>script_common_ja</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/script_common_ja</link>
    <dc:identifier>script_common_ja</dc:identifier>
    <dc:date>2010-11-17T21:51:46+09:00</dc:date>
        <description>
      <![CDATA[== anago script file reference - common ==
= 拡張子について
anago その1では、dump と program で別の様式としていましたが、 anago その2から workram read/write を搭載し、様式を統合しました。スクリプトが行える機能は拡張子で区別しますが、書式は全て同じです。

下記が拡張子別にサポートしている機能です]]>
    </description>
    <content:encoded>
      <![CDATA[<h2 id="h2-anago.20script.20file.20reference.20-.20common">anago script file reference - common</h2><h1 id="h1-.E6.8B.A1.E5.BC.B5.E5.AD.90.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">拡張子について</h1><p>anago その1では、dump と program で別の様式としていましたが、 anago その2から workram read/write を搭載し、様式を統合しました。スクリプトが行える機能は拡張子で区別しますが、書式は全て同じです。
</p><p>下記が拡張子別にサポートしている機能です。
</p><ul><li>ad: dump
</li><li>ae: dump + workram
</li><li>af: dump + program
</li><li>ag: dump + workram + program
</li><li>ai: include 向け, このファイルは ad, ae, af, ag ファイル内で dofile() として読まれるために存在します。単体では使用できません。
</li></ul><h1 id="h1-.E6.96.87.E6.B3.95">文法</h1><p>スクリプトエンジンとして Squirrel 2.2.4 を採用していますので、文法はそれに準拠します。雰囲気は型宣言のない C だと思います。
</p><h1 id="h1-.E7.89.B9.E6.AE.8A.E5.A4.89.E6.95.B0.2F.E5.AE.9A.E6.95.B0">特殊変数/定数</h1><h2 id="h2-d">d</h2><p>多くの関数の最初の引数が <tt>d</tt> になっています。これは制御用に必要な userpointer というもので、スクリプト内部では関数の引数を渡すことのみに使用します。
</p><h2 id="h2-board">board</h2><p>対象ハードのパラメータを定義します。メンバの扱いを指定します。
</p><h3 id="h3-mappernum">mappernum</h3><p>対象ファイルの iNES mapper number を指定します。
</p><ul><li>dump: ファイル生成時に番号をヘッダに埋め込みます。
</li><li>program: ファイル読み込み時に指定番号か確認します。
</li><li>workram: 使用しません。
</li></ul><h3 id="h3-vram_mirrorfind">vram_mirrorfind</h3><p>いわゆる H/V を検出するか判断の材料にします。
</p><ul><li>dump: H/V を読み込み、ヘッダに埋め込みます。
</li><li>program: ファイル読み込み後、接続カートリッジが一致するか比較します。
</li><li>workram: 使用しません。
</li></ul><h3 id="h3-ppu_ramfind">ppu_ramfind</h3><p>PPU area <tt>0x0000-0x1fff</tt> が ROM or RAM の可能性がある場合を指定します。
</p><ul><li>dump: RAM か検出し、 dump size が auto の場合、 Program ROM の読み込みサイズを増やします。
</li><li>program: 使用しません。
</li><li>workram: 使用しません。
</li></ul><h3 id="h3-cpu_rom.2C.20ppu_rom">cpu_rom, ppu_rom</h3><p>Program ROM (<tt>cpu_rom, $8000-$ffff</tt>, 例外あり), Charcter ROM (<tt>ppu_rom</tt>, <tt>0x0000-0x1fff</tt>) の管理可能メモリサイズとバンクの大きさを指定します。workram access mode では使用しません。
</p><ul><li><tt>size_base</tt>: 読み込みサイズが x1 の場合のメモリサイズを指定します。
</li><li><tt>size_max</tt>: そのハードウェアの管理可能なメモリサイズの最大値を指定します。
</li><li><tt>bank_size</tt>: バンクのサイズを指定します。バンクによってサイズが異なる場合はスクリプトの記載の都合で変更しちゃいます。
</li></ul><h3 id="h3-cpu_ram">cpu_ram</h3><p>Work RAM (<tt>cpu_ram, $6000-$7fff</tt>, 例外あり) の管理可能メモリサイズとバンクの大きさを指定します。dump mode と program mode では使用しません。
</p><ul><li><tt>size_base</tt>: 読み書きサイズが x1 の場合のメモリサイズを指定します。
</li><li><tt>size_max</tt>: そのハードウェアの管理可能なメモリサイズの最大値を指定します。
</li><li><tt>bank_size</tt>: バンクのサイズを指定します。
</li></ul><p>この3つのパラメータはすべて同じ値になることがほとんどですが、すべて指定してください。
</p><h2 id="h2-mega">mega</h2><p>0x20000 を定数にしています。board 変数のメンバに利用します。
</p><h1 id="h1-.E4.BD.BF.E7.94.A8.E3.81.A7.E3.81.8D.E3.82.8B.E9.96.A2.E6.95.B0">使用できる関数</h1><h2 id="h2-cpu_write.28.29">cpu_write()</h2><p><tt>function cpu_write(d, address, data)</tt>
</p><h3 id="h3-.E5.BC.95.E6.95.B0">引数</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>address</tt>: 対象アドレス開始値。利用可能範囲は <tt>0x4200-0xffff</tt>。
</li><li><tt>data</tt>: write data, 整数か配列。配列の場合、要素内は全て整数にすること。
</li></ul><h3 id="h3-.E6.88.BB.E3.82.8A.E5.80.A4">戻り値</h3><p>なし
</p><h3 id="h3-.E8.AA.AC.E6.98.8E">説明</h3><p>カートリッジ上の制御レジスタを write するために使用します。整数単体の場合は 1byte だけの write です。配列の場合は要素の整数を連続で write します。1byte 書くことに address は 1 ずつ増加します。
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/kazzo_pcb2.0_syusei">
    <title>kazzo_pcb2.0_syusei</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/kazzo_pcb2.0_syusei</link>
    <dc:identifier>kazzo_pcb2.0_syusei</dc:identifier>
    <dc:date>2010-08-07T21:24:16+09:00</dc:date>
        <description>
      <![CDATA[基板のハンダ面をパターンカットとジャンパ配線します

[[Thumb(pcb2.0_syusei.jpg, size=small, float=left)]]
]]>
    </description>
    <content:encoded>
      <![CDATA[<p>基板のハンダ面をパターンカットとジャンパ配線します
</p><a href="http://sourceforge.jp/projects/unagi/wiki/kazzo_pcb2.0_syusei/attach/pcb2.0_syusei.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/kazzo_pcb2.0_syusei/thumb/small/pcb2.0_syusei.jpg" alt="pcb2.0_syusei.jpg" id="emb-pcb2.0_syusei.jpg-1" title="pcb2.0_syusei.jpg" class="embed-image embed-image-left" width="128" height="96" align="left"></a><p>
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/kazzo_pcb2_0_tester_ja">
    <title>kazzo_pcb2_0_tester_ja</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/kazzo_pcb2_0_tester_ja</link>
    <dc:identifier>kazzo_pcb2_0_tester_ja</dc:identifier>
    <dc:date>2010-01-31T22:35:52+09:00</dc:date>
        <description>
      <![CDATA[= kazzo PCB revision 2.0 kit モニター募集
== ご案内
わりと好評だった kazzo PCB revision 1.0 ですが、実験的な要素も多く、問題がありキット販売ができませんでした。再販希望の方もいらっしゃいましたのでこの度基板を設計し直しました。

今回は基板と部品を別にしたキット販売を行いたいので、販売前の調査としてモニターを募集いたします。

]]>
    </description>
    <content:encoded>
      <![CDATA[<h1 id="h1-kazzo.20PCB.20revision.202.0.20kit.20.E3.83.A2.E3.83.8B.E3.82.BF.E3.83.BC.E5.8B.9F.E9.9B.86">kazzo PCB revision 2.0 kit モニター募集</h1><h2 id="h2-.E3.81.94.E6.A1.88.E5.86.85">ご案内</h2><p>わりと好評だった kazzo PCB revision 1.0 ですが、実験的な要素も多く、問題がありキット販売ができませんでした。再販希望の方もいらっしゃいましたのでこの度基板を設計し直しました。
</p><p>今回は基板と部品を別にしたキット販売を行いたいので、販売前の調査としてモニターを募集いたします。
</p><h2 id="h2-.E5.8F.82.E5.8A.A0.E8.A6.81.E9.A0.85">参加要項</h2><p>募集人数2名で下記の意志がある人
</p><ul><li>半田付けの経験があり、自信がある人か自信がない人(1名ずつ)
<ul><li>試していただいて、「部品をなくした」「部品が小さすぎてできない」など完成しなくても OK です。
</li><li>完成した場合、 anago で dump mode と flash memory programming mode で動作確認をしていただきます。「コマンドラインなんてつかえない」と諦めていただいても OK です。
</li></ul></li><li>メールを出したら2日ぐらいまでに返事を書いていただける人
</li><li>アンケートに答えていただけるか、または製作記事を blog などにしてくれる人 (アンケートで聞きたいことを書いてくれれば、製作記事とみなします)
</li></ul><p>その他条件
</p><ul><li>AVR ライタは不要ですが、持っていれば別の調査もお願いする可能性があります。
</li><li>部品代(2000円)と flash memory cartridge が必要です。 
</li><li>flash memory cartridge をお持ちでない場合は、製作代行費(割り引きます)が必要です。
</li><li>kazzo PCB 1.0 や mega16/mega164p ベースを自作した人でも応募可能です。
</li><li>モニター期間終了後は PCB 2.0 はご自由にお使いいただけます
</li></ul><h2 id="h2-kazzo.20PCB.202.0.20.E6.A6.82.E8.A6.81">kazzo PCB 2.0 概要</h2><a href="http://sourceforge.jp/projects/unagi/wiki/kazzo_pcb2_0_tester_ja/attach/pcb2.0.jpg"><img src="http://sourceforge.jp/projects/unagi/wiki/kazzo_pcb2_0_tester_ja/thumb/small/pcb2.0.jpg" alt="pcb2.0.jpg" id="emb-pcb2.0.jpg-1" title="pcb2.0.jpg" class="embed-image embed-image-right" width="128" height="86" align="right"></a><p>
</p><ul><li>AVR は DIP に変更
</li><li>74VHC574 が 2 つ. TSSOP (0.65mm ピッチ)でとても小さい
</li><li>diode, resonator, register などは表面実装のチップ部品
</li><li>72 pin edge connector を併設, 同時に使用不可
</li></ul><p>写真は試作品でフルオプション装備ですが、製品版は下記の変更を予定しています。
</p><ul><li>edge connector は 1つ, もう1個は追加料金が発生
</li><li>AVR の IC ソケットはなし
</li><li>ISP コネクタもなし, ファームウェアが飛んだときにはつけます
</li></ul><p>PCB 1.0 と mega16/mega164p ベースを自作した方に PCB 2.0 の補足をいたします。
</p><ul><li>2.0 を出したからといって 1.0 のサポートと開発は停めることはありません。
</li><li>各種コストとスペース削減のため mega168p を採用しています。
</li><li>現状どの AVR でも、使える機能は全て同じです。
</li><li>client の使用方法は同じで、設定の変更などはとくにございません。
</li><li>論理機能的には 1.0 と比べてスペックがやや落ちています。
<ul><li>IO ピンの空きはなく拡張性に乏しいです。
</li><li>USB D+ の割り込みに PCINT を使用しており、USB のレスポンスがちょっと遅くなってます。
</li><li>CPU /IRQ 端子にも PCINT を使用しており、開発停止状態の disk drive の DRQ 関連は詳しく調査しておりません。
</li></ul></li><li>配線数、部品点数ともに増えてますので、自作するなら引き続き mega16/164p ベースをおすすめします。
</li></ul><h2 id="h2-.E5.BF.9C.E5.8B.9F.E8.A6.81.E9.A0.85">応募要項</h2><p>たくさんのご応募ありがとうございました。当選者2人にメールをだしました。
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/kazzo_intro_en">
    <title>kazzo_intro_en</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/kazzo_intro_en</link>
    <dc:identifier>kazzo_intro_en</dc:identifier>
    <dc:date>2010-01-19T17:48:10+09:00</dc:date>
        <description>
      <![CDATA[== famicom cartridge bus simulator &#039;kazzo&#039; ==
= overview
Although there are already various Famicom cartridge dumping hardware available, each have their own design flaws. 
  * First, man]]>
    </description>
    <content:encoded>
      <![CDATA[<h2 id="h2-famicom.20cartridge.20bus.20simulator.20.27kazzo.27">famicom cartridge bus simulator 'kazzo'</h2><h1 id="h1-overview">overview</h1><p>Although there are already various Famicom cartridge dumping hardware available, each have their own design flaws. 
</p><ul><li>First, many have to rely on legacy interfaces no longer supported on today's PC architectures. 
</li><li>Second, they're only designed merely for dumping, with less regard for quick programming development purposes. 
</li></ul><p>We developed a &quot;flash memory cartridge&quot; in the beginning of 2009 for starters, but these solutions often require complex machinery to program. Therefore, we designed 'kazzo' as an easy solution for programming.
</p><p>We created 'kazzo' with the following design goals in mind:
</p><ul><li>Easy control of the programming / dumping features. 
</li><li>Uses USB, a universal standard found in every PC manufactured today.
</li><li>Composed with common off-the-shelf parts using the fewest amount as possible, therefore simplifying the design and keeping the overall price as affordable as possible.
</li></ul><h2 id="h2-flash.20memory.20cartridge">flash memory cartridge</h2><p>Once an existing game cartridge has been retrofitted with flash memory into a &quot;flash memory cartridge&quot;:
</p><ul><li>Using a ROM progammer becomes unnecessary. 
</li><li>The cartridge can interface with kazzo, which transfers/programs ROM image into the flash memory chips.
</li><li>Reading/Dumping is same behavior as it is with a normal ROM cartridge.
</li><li>There are no switches nor IC sockets needed. 
</li><li>The original case can be re-used with no modification once the board itself is retrofitted.
</li></ul><p>Flash memory cartridge works on Famicom/NES hardware. Even with emulators becoming more accurate as ever, it's never a complete replacement for testing with real hardware. Therefore this can be used as a powerful development/debugging tool for testing your Famicom/NES programs on the real thing.
</p><h2 id="h2-Supported.20Functions">Supported Functions</h2><p>fully support
</p><ul><li>USB 1.1 communication
</li><li>ROM cartridge bus simulation
<ul><li>ROM dumping
</li><li>flash memory erasing/programming
</li><li>auto-detection of VRAM mirroring
</li><li>auto detection of character (CHR) memory types
</li></ul></li></ul><p>typically support
</p><ul><li>ROM cartridge bus simulation
<ul><li>CPU region's work-RAM access (MMC5 W-RAM is not supported)
</li></ul></li></ul><p>currently unsupported
</p><ul><li>disk drive access
</li></ul><h1 id="h1-hardware">hardware</h1><img src="http://sourceforge.jp/projects/unagi/wiki/kazzo_intro_en/attach/kazzo_pcb_rev1.0.png" alt="kazzo_pcb_rev1.0.png" id="emb-kazzo_pcb_rev1.0.png-1" title="kazzo_pcb_rev1.0.png" class="embed-image" width="368" height="246"><p>
</p><h2 id="h2-List.20of.20Parts">List of Parts</h2><pre>#    |name
-----+-------------------
U1   |ATmega164P or ATmega16
U2   |74HC574
CN1  |type B female USB socket
CN2  |3x2 pin header, 2.54 mm spacing
CN3  |30x2 pin cardedge connecter, 2.54 mm spacing
R1,R2|68 ohm register
R3   |1.5 kohm register
R4   |30 kohm register
D1,D2|3.6 V zener diode
X1   |16.0 MHz ceramic resonator
C1,C2|0.1uF ceramic capacitor
CP1  |10uF electric capacitor
JP1  |toggle switch
JP2  |push switch
</pre><h2 id="h2-Schematics">Schematics</h2><a href="http://sourceforge.jp/projects/unagi/wiki/kazzo_intro_en/attach/kazzo_schematics.png"><img src="http://sourceforge.jp/projects/unagi/wiki/kazzo_intro_en/thumb/default/kazzo_schematics.png" alt="kazzo_schematics.png" id="emb-kazzo_schematics.png-1" title="kazzo_schematics.png" class="embed-image" width="300" height="265"></a><p>
</p><h2 id="h2-Pin.20assignments">Pin assignments</h2><p>See the readme.txt documentation which is included in the kazzo firmware package.
</p><h1 id="h1-Firmware">Firmware</h1><h2 id="h2-Distribution.20Package">Distribution Package</h2><p>The following are included in the distribution package. 
</p><ul><li>firmware image hex file
</li><li>Schematics, Pin assignments and List of Parts
</li><li>Source code for firmware
</li><li>USB Driver for Windows 
</li></ul><p>download -&gt; <a href="http://sourceforge.jp/projects/unagi/downloads/45464/kazzo_0.1.2.zip/">kazzo.0.1.2.zip</a>
</p><h2 id="h2-About.20USB">About USB</h2><ul><li>Firmware uses <a href="http://www.obdev.at/products/vusb/" class="external" rel="nofollow">V-USB</a>'s standard licence.
</li><li>Firmware uses V-USB's shared Vender ID and Device ID.
</li><li><a href="http://libusb-win32.sourceforge.net/" class="external" rel="nofollow">libusb-Win32</a> is used for kazzo's Windows driver.
</li></ul><p>The software interface of 'kazzo' uses <a href="http://www.obdev.at/products/vusb/" class="external" rel="nofollow">V-USB</a>, an extremely powerful library responsible for simplifying our hardware design into a mere few off-the-shelf parts, therefore keeping the price of the hardware as affordable as possible.
</p><p>download:
</p><ul><li><a href="http://sourceforge.jp/projects/unagi/downloads/44990/unagi_client_windows_060.zip/">unagi_client_windows_060.zip</a> binary for MS-Windows
</li><li><a href="http://sourceforge.jp/projects/unagi/downloads/44990/unagi_client_source.0.6.0.tar.gz/">unagi_client_source.0.6.0.tar.gz</a> source code
</li></ul><h1 id="h1-Clients">Clients</h1><h2 id="h2-unagi">unagi</h2><p>unagi 0.6.x is meant to support kazzo with exsiting functions and scripts. unagi 0.6.x supports Parallel Port based Readers.
</p><h2 id="h2-anago">anago</h2><p>'anago' is a special version of 'unagi', with added experimental functions. anago supports 'kazzo' only, but also supports parallel programming with <a href="http://squirrel-lang.org/" class="external" rel="nofollow">Squirrel</a>.
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/kazzo_ja">
    <title>kazzo_ja</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/kazzo_ja</link>
    <dc:identifier>kazzo_ja</dc:identifier>
    <dc:date>2010-01-19T17:32:42+09:00</dc:date>
        <description>
      <![CDATA[== famicom bus simulator 鰹 ==

= 概要
既存の famicom 用の吸い出し器は設計が古いので現在のPCで使えなかったり、「吸い出し」に特化されすぎていました。2009 年初旬に開発した flash memory cartridge には複雑な機能が必要なため、正確に write も行える機器を設計することにしました。

コンセプトは下記です。
  * ]]>
    </description>
    <content:encoded>
      <![CDATA[<h2 id="h2-famicom.20bus.20simulator.20.E9.B0.B9">famicom bus simulator 鰹</h2><h1 id="h1-.E6.A6.82.E8.A6.81">概要</h1><p>既存の famicom 用の吸い出し器は設計が古いので現在のPCで使えなかったり、「吸い出し」に特化されすぎていました。2009 年初旬に開発した flash memory cartridge には複雑な機能が必要なため、正確に write も行える機器を設計することにしました。
</p><p>コンセプトは下記です。
</p><ul><li>制御線を制御しやすくする
</li><li>PC とのインターフェースを USB にする
</li><li>入手しやすい部品を選ぶ
</li><li>部品点数と配線数を減らす
</li></ul><p>吸い出しも当然行えますが、それ以上の機能を有しているため、 bus simulator としました。
</p><h2 id="h2-.E3.81.8A.E9.A1.98.E3.81.84">お願い</h2><p>kazzo + flash memory cartridge はソフト開発における実機確認作業の効率化を目的として製作しました。いわゆるマジコンの場合はこれを名目としてソフトの違法コピーを助長しておりますが、 kazzo は名目ではなく本当にそれを目的にしています。
</p><p>マジコン的な使い方も可能ですが、その目的では効率やコストがとても悪いです。
</p><p>AVR, USB, flash memory, 6502, nsf などハードウェア/ソフトウェア技術関連や自作ソフト開発などの技術活性化につながるところからのご紹介は大歓迎です。
</p><p>混乱とモラルの低下を防ぐために、上記以外の目的でのリンクはご一報の上ご連絡下さい(事後連絡は不可)。非公式ツールなので、怒られたら終わります。
</p><h2 id="h2-flash.20memory.20cartridge">flash memory cartridge</h2><p>既存の ROM カートリッジから ROM を取り外して、flash memory をつけたものです。
</p><ul><li>書き込みは kazzo に接続し、データを転送できます。ROM ライタは必要ありません。
</li><li>読み込みは通常の ROM カートリッジと同じです。
</li><li>書き込み用スイッチや IC ソケットはいりません。
</li><li>部品の取り替えは1度なので、ケースに収められます。
</li></ul><p>flash memory cartridge は既存のハードを利用しますので、エミュレーションやシミュレーションで問題になる再現度は100%です。ソフト開発時の実機確認に非常に便利です。
</p><p>配線方法など詳細は専用 wiki にまとめてあります。認証ありにしていましたが、準備ができ次第認証を解きます。
</p><h2 id="h2-.E3.82.B5.E3.83.9D.E3.83.BC.E3.83.88.E6.A9.9F.E8.83.BD">サポート機能</h2><p>full support
</p><ul><li>USB 1.1 communication
</li><li>ROM cartridge bus simulation
<ul><li>ROM dumpping
</li><li>flash memory erasing/programming
</li><li>VRAM mirroring auto decect
</li><li>charcter memory type auto decect
</li></ul></li></ul><p>typical support
</p><ul><li>ROM cartridge bus simulation
<ul><li>CPU region work RAM access (MMC5 W-RAM is not supported)
</li></ul></li></ul><p>unsupport
</p><ul><li>disk drive access
</li></ul><h1 id="h1-.E3.83.8F.E3.83.BC.E3.83.89.E3.82.A6.E3.82.A7.E3.82.A2">ハードウェア</h1><img src="http://sourceforge.jp/projects/unagi/wiki/kazzo_ja/attach/kazzo_pcb_rev1.0.png" alt="kazzo_pcb_rev1.0.png" id="emb-kazzo_pcb_rev1.0.png-1" title="kazzo_pcb_rev1.0.png" class="embed-image" width="368" height="246"><p>
</p><h2 id="h2-.E9.83.A8.E5.93.81.E3.83.AA.E3.82.B9.E3.83.88">部品リスト</h2><pre>U1   |ATmega164P or ATmega16
U2   |74HC574
CN1  |type B female USB socket
CN2  |3x2 ピンヘッダ, 2.54 mm spacing
CN3  |30x2 pin エッジコネクタ, 2.54 mm spacing
R1,R2|68 ohm 抵抗
R3   |1.5 kohm 抵抗
R4   |30 kohm 抵抗
D1,D2|3.6 V ツェナーダイオード
X1   |16.0 MHz セラミック発振子 (セラロック)
C1,C2|0.1uF セラミックコンデンサ
CP1  |10uF 電解コンデンサ
JP1  |トグルスイッチ
JP2  |プッシュスイッチ
</pre><h2 id="h2-.E5.9B.9E.E8.B7.AF.E5.9B.B3">回路図</h2><a href="http://sourceforge.jp/projects/unagi/wiki/kazzo_ja/attach/kazzo_schematics.png"><img src="http://sourceforge.jp/projects/unagi/wiki/kazzo_ja/thumb/default/kazzo_schematics.png" alt="kazzo_schematics.png" id="emb-kazzo_schematics.png-1" title="kazzo_schematics.png" class="embed-image" width="300" height="265"></a><p>
</p><h2 id="h2-.E9.85.8D.E7.B7.9A.E8.A1.A8">配線表</h2><p>kazzo ファームパッケージの readme.txt を参照。
</p><h1 id="h1-.E3.83.95.E3.82.A1.E3.83.BC.E3.83.A0.E3.82.A6.E3.82.A7.E3.82.A2">ファームウェア</h1><h2 id="h2-.E9.85.8D.E5.B8.83.E3.83.91.E3.83.83.E3.82.B1.E3.83.BC.E3.82.B8">配布パッケージ</h2><p>配布パッケージには下記が含まれています。
</p><ul><li>ファームウェアイメージ (hex file)
</li><li>回路図, 配線表, 部品表
</li><li>ソースコード
</li><li>Windows driver
</li></ul><p>download → <a href="http://sourceforge.jp/projects/unagi/downloads/45464/kazzo_0.1.2.zip/">kazzo.0.1.2.zip</a>
</p><h2 id="h2-USB.20.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">USB について</h2><ul><li>ライブラリに <a href="http://www.obdev.at/products/vusb/" class="external" rel="nofollow">V-USB</a> を standards licence で使用しています。
</li><li>ベンダ ID/デバイス ID には V-USB 共有 ID を使用しています。
</li><li>Windows driver に <a href="http://libusb-win32.sourceforge.net/" class="external" rel="nofollow">libusb-Win32</a> を使用しています。
</li></ul><p>V-USB が無ければ低価格、少数部品で構成することはできませんでした。素晴らしいライブラリを提供していただき感謝です。
</p><h1 id="h1-.E3.82.AF.E3.83.A9.E3.82.A4.E3.82.A2.E3.83.B3.E3.83.88">クライアント</h1><p>配布パッケージには下記が含まれています。
</p><ul><li>unagi 実行ファイルと readme
</li><li>anago 実行ファイルと readme
</li><li>anago 用スクリプト
</li></ul><p>download:
</p><ul><li><a href="http://sourceforge.jp/projects/unagi/downloads/44990/unagi_client_windows_060.zip/">unagi_client_windows_060.zip</a> windows用 binary
</li><li><a href="http://sourceforge.jp/projects/unagi/downloads/44990/unagi_client_source.0.6.0.tar.gz/">unagi_client_source.0.6.0.tar.gz</a> source code
</li></ul><h2 id="h2-unagi">unagi</h2><p>unagi 0.6.x は kazzo をサポートし、従来の機能とスクリプトがそのまま使えます。またパラレルポート経由の既存のハードをサポートしますが、それらでは flash memory programming mode を使用できません。
</p><p>パラレルポートハードのサポートは unagi 0.6.x のみで、それ以降は使用できません。
</p><h2 id="h2-anago">anago</h2><p>anago は unagi のソースコードを流用しつつ、実験的な機能を盛り込んだものです。スクリプトエンジンに <a href="http://squirrel-lang.org/" class="external" rel="nofollow">Squirrel</a> を使用しているのでスクリプトが高機能になっています。
</p><p>anago の最大の特徴は flash memory programming で CPU/PPU 領域を同時に書き込むことが出来ます。これにより書き込み時間が短くなりました。
</p><h1 id="h1-kazzo.20.E3.82.AD.E3.83.83.E3.83.88.E3.81.AE.E3.81.94.E6.A1.88.E5.86.85">kazzo キットのご案内</h1><p>kazzo は自作も可能ですが、プリント基板と部品をすべて揃えたキットを販売していました。また dip の flash memory は販売再開準備中です。
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/flash_w29c020_ja">
    <title>flash_w29c020_ja</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/flash_w29c020_ja</link>
    <dc:identifier>flash_w29c020_ja</dc:identifier>
    <dc:date>2010-01-16T01:51:22+09:00</dc:date>
        <description>
      <![CDATA[= 概要
10年以上昔の PC マザーボードの bios として W29C020 がよく載っていますが、 flash memory cartridge に使いづらい仕様があります。

= write 信号に対する問題
W29C020 では write 信号のあとに toggle bit などの状態出力を行います。計測機器がないため、詳細は不明ですが 1 回の write であっても状態出力]]>
    </description>
    <content:encoded>
      <![CDATA[<h1 id="h1-.E6.A6.82.E8.A6.81">概要</h1><p>10年以上昔の PC マザーボードの bios として <a href="http://sourceforge.jp/projects/unagi/wiki/W29C020">W29C020</a> がよく載っていますが、 flash memory cartridge に使いづらい仕様があります。
</p><h1 id="h1-write.20.E4.BF.A1.E5.8F.B7.E3.81.AB.E5.AF.BE.E3.81.99.E3.82.8B.E5.95.8F.E9.A1.8C">write 信号に対する問題</h1><p><a href="http://sourceforge.jp/projects/unagi/wiki/W29C020">W29C020</a> では write 信号のあとに toggle bit などの状態出力を行います。計測機器がないため、詳細は不明ですが 1 回の write であっても状態出力モードに入ってしまうようです。
</p><p>データシートのそれらしい値をみると、 write cycle (erase and program) の max 10 mS がそれに相当しそうです。
</p><p>このためバンク切り替えのための write 信号のあとにデータを正しく出力してくれません。具体的には unagi/kazzo の dump mode でバンク切り替え直後のデータは 0xff になっていることが多いです。
</p><h1 id="h1-.E5.AF.BE.E7.AD.96">対策</h1><h2 id="h2-CPU.2FProgram.20ROM.20.E3.81.A8.E3.81.97.E3.81.A6.E4.BD.BF.E3.81.86.E5.A0.B4.E5.90.88">CPU/Program ROM として使う場合</h2><p>実機動作時には頻繁に起きるバンク切り替えのため、 /WE 端子をそのままにすると実機では動きません。
</p><p>プログラム書き込み時には /WE 端子に CPU R/W を接続し、実機動作時には +5V を接続する... と動きますがスイッチの加工などが必要で不便です。
</p><h2 id="h2-PPU.2FCharcter.20ROM.20.E3.81.A8.E3.81.97.E3.81.A6.E4.BD.BF.E3.81.86.E5.A0.B4.E5.90.88">PPU/Charcter ROM として使う場合</h2><p>実機動作時には Charcter ROM 領域に write 信号が入ることはバグかプロテクトの意味で RAM になってるかチェックするぐらいです。また、Charcter ROM の出力がおかしくなっても、プログラムがとまることはありません。
</p><p>コマンドアドレスが A14-A0 タイプなので後期マッパのようにバンクが4つ以上あるものに使用可能です。
</p><h2 id="h2-.E3.81.82.E3.81.8D.E3.82.89.E3.82.81.E3.81.A6.E4.BA.A4.E6.8F.9B.E3.81.99.E3.82.8B">あきらめて交換する</h2><p>残念ながら <a href="http://sourceforge.jp/projects/unagi/wiki/W29C020">W29C020</a> は flash memory cartridge として使いづらいのですが ... 捨てないでください。27C020 と同じピン配置なので他に 27C020/27C010 として使ってるメモリデバイスと交換できます。
</p><p>読者が使わなくても na6ko がその目的で使いますので、メールをいただけば AM29F040B と等価交換したいと思います。現在(2010.01.16)、在庫が尽きていますが、在庫が復活次第、受け付ける予定です。
</p><h1 id="h1-W29C040.20.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6"><a href="http://sourceforge.jp/projects/unagi/wiki/W29C040">W29C040</a> について</h1><p>容量増加版の <a href="http://sourceforge.jp/projects/unagi/wiki/W29C040">W29C040</a> ではこの問題が起きず、安定した動作と高速な書き込みをサポートしており flash memory cartridge において大変優秀です。
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/kazzo_0.1.1_problem_ja">
    <title>kazzo_0.1.1_problem_ja</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/kazzo_0.1.1_problem_ja</link>
    <dc:identifier>kazzo_0.1.1_problem_ja</dc:identifier>
    <dc:date>2010-01-15T23:55:58+09:00</dc:date>
        <description>
      <![CDATA[= firmware 0.1.1 の問題 =
firmware 0.1.1 には致命的なバグが存在することが判明しました。このバグが起きると常に「不明なデバイス」と表示されて kazzo が使用できなくなります。

1月10日以降に発送した分は 0.1.2 に更新してありますが、手違いの可能性がありますのでバージョンの確認をお願いします。

== 対象バージョン
0.1.1 のみ。 (]]>
    </description>
    <content:encoded>
      <![CDATA[<h1 id="h1-firmware.200.1.1.20.E3.81.AE.E5.95.8F.E9.A1.8C">firmware 0.1.1 の問題</h1><p>firmware 0.1.1 には致命的なバグが存在することが判明しました。このバグが起きると常に「不明なデバイス」と表示されて kazzo が使用できなくなります。
</p><p>1月10日以降に発送した分は 0.1.2 に更新してありますが、手違いの可能性がありますのでバージョンの確認をお願いします。
</p><h2 id="h2-.E5.AF.BE.E8.B1.A1.E3.83.90.E3.83.BC.E3.82.B8.E3.83.A7.E3.83.B3">対象バージョン</h2><p>0.1.1 のみ。 (0.1.0 にはこのバグは発生しません)
</p><h2 id="h2-.E7.99.BA.E7.94.9F.E6.9D.A1.E4.BB.B6.E5.8F.8A.E3.81.B3.E9.A0.BB.E5.BA.A6">発生条件及び頻度</h2><p>不明。筆者を含め 4 人の環境で 6 回発生しています。
</p><h2 id="h2-.E5.AF.BE.E5.87.A6.E6.96.B9.E6.B3.95">対処方法</h2><p>対処済みの <a href="http://sourceforge.jp/projects/unagi/downloads/45464/kazzo_0.1.2.zip/">firmware 0.1.2</a> を用意しました。以下の2通りの方法があります。
</p><ul><li>kazzo と USB 通信が出来る方はブートローダ経由での更新
</li><li>USB 通信が出来ない方は ISP 経由での更新
</li></ul><h3 id="h3-.E3.83.96.E3.83.BC.E3.83.88.E3.83.AD.E3.83.BC.E3.83.80.E7.B5.8C.E7.94.B1.E3.81.A7.E3.81.AE.E6.9B.B4.E6.96.B0">ブートローダ経由での更新</h3><h4 id="h4-.E7.94.A8.E6.84.8F.E3.81.99.E3.82.8B.E3.82.82.E3.81.AE">用意するもの</h4><ul><li>kazzo 本体
</li><li><a href="http://sourceforge.jp/projects/unagi/downloads/45464/kazzo_0.1.2.zip/">firmware 0.1.2</a>
<ul><li>kazzo_test.exe
</li><li>kazzo 0.1.2 に含まれる kazzo_mega16*.hex ファイル (以降 kazzo_mega164p.hex を使用している体で進めます)
</li></ul></li><li>SNROM カセット
<ul><li>どのソフトが SNROM かは<a href="http://blog-imgs-41-origin.fc2.com/b/a/k/bakutendo/STxROM.html" class="external" rel="nofollow">リスト</a>を参照してください。
</li><li>セーブデータが消えますので消えて困るデータをお持ちの方は unagi で待避してください。
</li><li>待避方法は <tt>unagi.exe r snrom.urw kietekomarudata.sav</tt> です。
</li><li>無改造のカセットが使用可能です。
</li><li>カセット内部の電池が切れていても問題ありません。
</li></ul></li></ul><h4 id="h4-.E6.89.8B.E9.A0.86">手順</h4><ul><li>電源を切った状態で SNROM カセットを接続する
</li><li>電源及び USB を接続する
</li><li>下記のコマンドでバージョンを確認します。
<pre>kazzo_test.exe v
kazzo16 0.1.1 Jan  2 2010
</pre></li></ul><p>と表示されたら 0.1.2 へ更新してください。
</p><ul><li>下記のコマンドでファームウェアを更新します。
<pre>kazzo_test.exe w kazzo_mega164p.hex
</pre></li><li>下記の表示が出て、USB の接続がきれますが問題ありません。別の表示が出る場合は SNROM の接続ができていません。
<pre>USB connection will be disconnteced. This is normally.
Re-turn on kazzo's power.
</pre></li><li>5秒程度待ち電源を切ります。<strong>電源の再投入は重要です。必ず行ってください。</strong>
</li><li>5秒程度待ち電源を入れます。
</li><li>下記のコマンドでバージョンを確認します。
<pre>kazzo_test.exe v
</pre></li></ul><p>kazzo16 0.1.2 / Jan 10 2010 と表示されれば成功です。
</p><ul><li>下記のコマンドでファームウェアの詳細な比較も可能です。
<pre>kazzo_test.exe v kazzo_mega164p.hex
</pre></li></ul><img src="http://sourceforge.jp/projects/unagi/wiki/kazzo_0.1.1_problem_ja/attach/cmd_update.png" alt="cmd_update.png" id="emb-cmd_update.png-1" title="cmd_update.png" class="embed-image" width="504" height="331"><p>
</p><p>更新に失敗し、再投入後も不明なデバイスと表示される場合は ISP 経由での更新が必要です。
</p><p>注意: この方法で 0.1.1 から 0.1.0 に更新できますが、 <strong>0.1.0 ではこの方法で更新することはできません。</strong>
</p><h3 id="h3-ISP.20.E7.B5.8C.E7.94.B1.E3.81.A7.E3.81.AE.E6.9B.B4.E6.96.B0">ISP 経由での更新</h3><p>AVR ライタを使用して更新します。 AVR ライタをお持ちでない方は下記メールアドレスまで至急連絡をください。
</p><img src="http://sourceforge.jp/projects/unagi/wiki/kazzo_0.1.1_problem_ja/attach/designmail.png" alt="designmail.png" id="emb-designmail.png-1" title="designmail.png" class="embed-image" width="148" height="25"><p>
</p><h2 id="h2-.E7.99.BA.E7.94.9F.E7.90.86.E7.94.B1">発生理由</h2><p>firmware 0.1.1 には AVR ライタ不要のブートローダという機能を搭載しました。ブートローダは RAM に転送されたイメージをファームウェアとしてファームウェア自身を更新することが出来ます。
</p><p>ファームウェアの更新手順を記載します。
</p><ol><li>ユーザー: RAM がのったカートリッジを接続する
</li><li>ホスト: ファームウェアイメージを送信 (REQUEST_CPU_WRITE, REQUEST_PPU_WRITE)
</li><li>ファームウェア: 受信したイメージを RAM に書き込む
</li><li>ホスト: イメージを送信要求 (REQUEST_CPU_READ, REQUEST_PPU_READ)
</li><li>ファームウェア: RAM を読み込みホストへ送信
</li><li>ホスト: イメージを受信, イメージの中身を確認
</li><li>ホスト: 問題なければファームウェア更新要求を送信 (REQUEST_FIRMWARE_PROGRAM)
</li><li>ファームウェア: RAM を読み込み、ファームウェア自身を更新
</li></ol><p>問題は下記の通りに起きています。
</p><ol><li>ファームウェア: ファームウェア更新要求を誤認
</li><li>ファームウェア: 接続されていない RAM を読み込み、ファームウェア自身を更新
</li></ol><h2 id="h2-.E5.AF.BE.E7.AD.96.E6.96.B9.E6.B3.95">対策方法</h2><p>firmware 0.1.2 では下記の処理を加え、誤認後の更新を回避しています。
</p><ol><li>ファームウェア: ファームウェア更新要求を誤認
</li><li>ファームウェア: RAM を読み込み、内容とリクエスト引数を確認する。異常があった場合、更新しない。
</li><li>ファームウェア: 接続された RAM を読み込み、ファームウェア自身を更新
</li></ol>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/flash_device_en">
    <title>flash_device_en</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/flash_device_en</link>
    <dc:identifier>flash_device_en</dc:identifier>
    <dc:date>2010-01-12T18:48:41+09:00</dc:date>
        <description>
      <![CDATA[= Basic Sorting
If you plan to use unsupported devices with anago, please refer to the device&#039;s datasheet if available. The important points with the datasheet is the following: 

[[Embed(am29]]>
    </description>
    <content:encoded>
      <![CDATA[<h1 id="h1-Basic.20Sorting">Basic Sorting</h1><p>If you plan to use unsupported devices with anago, please refer to the device's datasheet if available. The important points with the datasheet is the following: 
</p><img src="http://sourceforge.jp/projects/unagi/wiki/flash_device_en/attach/am29f040b_00.png" alt="am29f040b_00.png" id="emb-am29f040b_00.png-1" title="am29f040b_00.png" class="embed-image" width="542" height="407"><img src="http://sourceforge.jp/projects/unagi/wiki/flash_device_en/attach/w49f002_00.png" alt="w49f002_00.png" id="emb-w49f002_00.png-1" title="w49f002_00.png" class="embed-image" width="403" height="322"><p>
</p><h2 id="h2-Databus.20is.208.20bit">Databus is 8 bit</h2><p>(pointed 'A' in figure)
</p><p>This point may be written in the title of the datasheet. Look &quot;x8&quot; of &quot;xxxK x8 CMOS flash memo&quot;. It is written DQ0 to DQ7 in the PIN CONFIGURATION section.
</p><h2 id="h2-5V.20programming.20support">5V programming support</h2><p>(pointed 'B' in figure)
This point may be written in the top of the datasheet. It is not possible to program which old flash memories required 12V.
</p><h2 id="h2-Command.20Address.20Range.20of.20Address.20Format">Command Address Range of Address Format</h2><img src="http://sourceforge.jp/projects/unagi/wiki/flash_device_en/attach/am29f040b_01.png" alt="am29f040b_01.png" id="emb-am29f040b_01.png-1" title="am29f040b_01.png" class="embed-image" width="467" height="656"><img src="http://sourceforge.jp/projects/unagi/wiki/flash_device_en/attach/w49f002_02.png" alt="w49f002_02.png" id="emb-w49f002_02.png-1" title="w49f002_02.png" class="embed-image" width="368" height="268"><p>
(pointed 'C' in figure)
</p><p>The important point is &quot;address format: A14-A0&quot; in the margin. Avaible devices are &quot;A14-A0&quot; or &quot;A10-A0&quot;.
</p><h2 id="h2-Packaging.20Information">Packaging Information</h2><p>The DIP style is the easiest to replace. SOP and QFP style are also replaceable.
</p><h1 id="h1-Add.20Configurations.20to.20flashcore.nut">Add Configurations to flashcore.nut</h1><p>Please refer to an existing item. Please add the set item correctly often reading the data sheet. 
</p><h2 id="h2-capacity">capacity</h2><ul><li>type: integer
</li><li>unit: byte
</li></ul><p>Define capacity of target device. Don't define capacity of management capacity of the cartridge.
</p><h2 id="h2-pagesize">pagesize</h2><ul><li>type: integer
</li><li>unit: byte
</li></ul><p>When target device supports Byte Program, pagesize is 1. When target device supports Page Program, pagesize is whatever written value is stated in the datasheet. The firmware suppports 1 to 0x100.
</p><h2 id="h2-erase_wait">erase_wait</h2><ul><li>type: integer
</li><li>unit: mS
</li></ul><p>Erase Cycle Time is usually written in the Program/Write Cycle Characteristics of the DC CHARACTERISTICS section. 
</p><h2 id="h2-erase_require">erase_require</h2><ul><li>type: boolean
</li><li>unit: nothing
</li></ul><p>When Byte/Page Programming is specified, this value is true.
Please note that 
</p><blockquote class="citation"><p>a data 0 cannot be programmed back to a '1'; only erase operations can convert '0's to '1's.
</p></blockquote><img src="http://sourceforge.jp/projects/unagi/wiki/flash_device_en/attach/w49f002_01.png" alt="w49f002_01.png" id="emb-w49f002_01.png-1" title="w49f002_01.png" class="embed-image" width="533" height="159"><p>
</p><h2 id="h2-id_manufacurer.2C.20id_device">id_manufacurer, id_device</h2><ul><li>type: integer
</li><li>unit: nothing
</li></ul><p>Target values are written in 'profuct identification'.
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/script_flash_en">
    <title>script_flash_en</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/script_flash_en</link>
    <dc:identifier>script_flash_en</dc:identifier>
    <dc:date>2010-01-12T18:35:58+09:00</dc:date>
        <description>
      <![CDATA[== anago script file reference - flash mode ==
= Script Files
Anago loads two script files - flashcore.nut and a spcified .af file. Please leave the flashcore.nut file unchanged.

.af file must de]]>
    </description>
    <content:encoded>
      <![CDATA[<h2 id="h2-anago.20script.20file.20reference.20-.20flash.20mode">anago script file reference - flash mode</h2><h1 id="h1-Script.20Files">Script Files</h1><p>Anago loads two script files - flashcore.nut and a spcified .af file. Please leave the flashcore.nut file unchanged.
</p><p>.af file must define a variable and three functions. The variable is 'board', while the functions are 'initialize()', 'cpu_transfer()' and 'ppu_transfer()'. It's possible to define another function via brief scripting.
</p><h1 id="h1-Sequence.20on.20Flash.20Programming.20Mode">Sequence on Flash Programming Mode</h1><p>Flash memory has a programming waiting period. During this period, the firmware can program another flash memory. Anago executes the following sequence:
</p><ul><li>intialize()
</li><li>execute erase, wait until done
</li><li>parallel execute cpu_tranfer() and ppu_transfer()
</li></ul><p>The most important function is initialize(), as it will configure an erase state once the initialize() function finishes.
</p><ul><li>Define command addresses by cpu_command() and ppu_command().
</li><li>Locate command addresses by cpu_write()
</li></ul><p>In rare instances, it's possible to change command addresses on xxx_transfer().
</p><p>The script file must be defined to transfer data sequentially. Anago switches programming threads automatically.
</p><h1 id="h1-Needed.20functions.20and.20constants.20for.20.af.20file">Needed functions and constants for .af file</h1><h2 id="h2-board">board</h2><ul><li><tt>mappernum</tt>: mapper number of iNES header when programming a NES file
</li><li><tt>cpu, ppu</tt>:
<ul><li><tt>banksize</tt>: bank area length for xxx_program(). 0 is not a valid value.
</li><li><tt>maxsize</tt>: maximum manageable capacity for the target mapper.
</li></ul></li></ul><div class="indent">
</div><p>The unit of both banksize and maxsize are in bytes.
</p><h2 id="h2-initialize.28.29">initialize()</h2><p><tt>function initialize(d, cpu_banksize, ppu_banksize)</tt>
</p><h3 id="h3-Arguments">Arguments</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>cpu_banksize</tt>: uses board.cpu.banksize
</li><li><tt>ppu_banksize</tt>: uses board.ppu.banksize
</li></ul><h3 id="h3-Returns">Returns</h3><p>nothing
</p><h3 id="h3-Description">Description</h3><p>This function defines and locates command addresses, which then configures an erase state when the initialize() function finishes.
</p><h2 id="h2-cpu_transfer">cpu_transfer</h2><p><tt>function cpu_transfer(d, start, end, banksize)</tt>
</p><h3 id="h3-Arguments-2">Arguments</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>start</tt>: Starting page number. This is used to substitute a variable for a loop.
</li><li><tt>end</tt>: Ending page number. This is used to define a term condition for the loop.
</li><li><tt>banksize</tt>: uses board.cpu.banksize. This is used to define an argument for cpu_program().
</li></ul><h3 id="h3-Returns-2">Returns</h3><p>nothing
</p><h3 id="h3-Description-2">Description</h3><p>This function is defined in order to transfer the ROM image to the CPU region. This transfers variable bank data by a defined loop, then transfers fixed bank data afterwards.
</p><h2 id="h2-ppu_transfer">ppu_transfer</h2><p><tt>function ppu_transfer(d, start, end, banksize)</tt>
</p><h3 id="h3-Arguments-3">Arguments</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>start</tt>: Starting page number. This is used to substitute a variable for a loop.
</li><li><tt>end</tt>: Ending page number. This is used to define a term condition for the loop.
</li><li><tt>banksize</tt>: uses board.ppu.banksize. This is used to define an argument for ppu_program()
</li></ul><h3 id="h3-Returns-3">Returns</h3><p>nothing
</p><h3 id="h3-Description-3">Description</h3><p>This function is defined to transfer ROM image to PPU region. All bank data is transferred by a defined loop.
</p><h1 id="h1-Available.20functions.20for.20.af.20file">Available functions for .af file</h1><h2 id="h2-cpu_write.28.29">cpu_write()</h2><p><tt>function cpu_write(d, address, data)</tt>
See decsription <a href="http://sourceforge.jp/projects/unagi/wiki/script_common_en">script_common_en</a>
</p><h2 id="h2-cpu_command.28.29">cpu_command()</h2><p><tt>function cpu_command(d, romoffset, memorymapoffset, banksize)</tt>
</p><h3 id="h3-Arguments-4">Arguments</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>romoffset</tt>: flash memory command address (0, 0x02aa, 0x0555, 0x2aaa or 0x5555)
</li><li><tt>memorymapoffset</tt>: flash memory command address for CPU. Available range is 0x8000 to 0xffff.
</li><li><tt>banksize</tt>: target cpu memory address's banksize. 0x2000, 0x4000 or 0x8000.
</li></ul><h3 id="h3-Returns-4">Returns</h3><p>nothing
</p><h3 id="h3-Description-4">Description</h3><p>This function defines command addresses for the connected flash memory on the CPU region. It is defined via initialize(). In addition, it's possible to redefine this function during xxx_transfer(). 
</p><h2 id="h2-ppu_command.28.29">ppu_command()</h2><p><tt>function ppu_command(d, romoffset, memorymapoffset, banksize)</tt>
</p><h3 id="h3-Arguments-5">Arguments</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>romoffset</tt>: flash memory command address (0, 0x02aa, 0x0555, 0x2aaa or 0x5555)
</li><li><tt>memorymapoffset</tt>: flash memory command address for PPU. range is 0x0000 to 0x1fff:
</li><li><tt>banksize</tt>: target ppu memory address banksize. 0x0400, 0x0800, 0x1000 or 0x2000.
</li></ul><h3 id="h3-Returns-5">Returns</h3><p>nothing
</p><h3 id="h3-Description-5">Description</h3><p>Similar to the cpu_command(), this function defines command addresses for the connected flash memory on the PPU region.
</p><h2 id="h2-cpu_program.28.29">cpu_program()</h2><p><tt>function cpu_program(d, address, length)</tt>
</p><h3 id="h3-Arguments-6">Arguments</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>address</tt>: target address. Available range is 0x8000 to 0xffff.
</li><li><tt>length</tt>: writing length. Available range is 0x0100 to 0x3fff.
</li></ul><h3 id="h3-Returns-6">Returns</h3><p>nothing
</p><h3 id="h3-Description-6">Description</h3><p>This function programs data into the current CPU memory region. Anago switches threads automatically.
</p><h2 id="h2-ppu_program.28.29">ppu_program()</h2><p><tt>function ppu_program(d, address, length)</tt>
</p><h3 id="h3-Arguments-7">Arguments</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>address</tt>: target address. Available range is 0x0000 to 0x1fff.
</li><li><tt>length</tt>: writing length. Available range is 0x0100 to 0x3fff.
</li></ul><h3 id="h3-Returns-7">Returns</h3><p>nothing
</p><h3 id="h3-Description.3A">Description:</h3><p>This function programs data into the current PPU memory region. Anago switches threads automatically.
</p><h3 id="h3-cpu_erase.28.29.2C.20ppu_erase.28.29">cpu_erase(), ppu_erase()</h3><p><tt>function cpu_erase(d)</tt><br />
<tt>function ppu_erase(d)</tt>
</p><h3 id="h3-Arguments-8">Arguments</h3><ul><li><tt>d</tt>: userpointer
</li></ul><h3 id="h3-Returns-8">Returns</h3><p>nothing
</p><h3 id="h3-Description-7">Description</h3><p>This function erases flash memory data on the current memory region. Since this function is already used in flashcore.nut, please do not use this function in an .af file.
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/script_dump_en">
    <title>script_dump_en</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/script_dump_en</link>
    <dc:identifier>script_dump_en</dc:identifier>
    <dc:date>2010-01-12T18:35:04+09:00</dc:date>
        <description>
      <![CDATA[== anago script file reference - dump mode ==
= Script Files
Anago loads two script files: flashcore.nut and the spcified .ad file. Do not change dumpcore.nut.

.ad file must define a variable and]]>
    </description>
    <content:encoded>
      <![CDATA[<h2 id="h2-anago.20script.20file.20reference.20-.20dump.20mode">anago script file reference - dump mode</h2><h1 id="h1-Script.20Files">Script Files</h1><p>Anago loads two script files: flashcore.nut and the spcified .ad file. Do not change dumpcore.nut.
</p><p>.ad file must define a variable and two functions. There are 'board', 'cpu_dump()' and 'ppu_dump()'. It's possible to define another function with brief scripting.
</p><h1 id="h1-Required.20Variables.20and.20Functions.20on.20ROM.20Dump.20Mode">Required Variables and Functions on ROM Dump Mode</h1><h2 id="h2-board">board</h2><ul><li><tt>mappernum</tt>: default number for iNES header mapper value.
</li><li><tt>cpu_romsize</tt>: default rom capacity for target Program ROM
</li><li><tt>cpu_banksize</tt>: variable bank size for target mapper on CPU region
</li><li><tt>ppu_romsize</tt>: default rom capacity for target Charcter ROM
</li><li><tt>ppu_banksize</tt>: variable bank size for target mapper on PPU region
</li><li><tt>ppu_ramfind</tt>: If assigned as &quot;true&quot;, anago will autodetect the type of charcter memory ROM or RAM.
</li><li><tt>vram_mirrorfind</tt>: If assigned as &quot;true&quot;, anago will autodectect the vram conncetion. If the target mapper is controlled by the program, it must be set as &quot;false.&quot;
</li></ul><p>The unit of xxx_romsize and xxx_banksize are in bytes. It is possible to change values via the commandline.
</p><h2 id="h2-cpu_dump.28.29">cpu_dump()</h2><p><tt>function cpu_dump(d, pagesize, banksize)</tt>
</p><h3 id="h3-Arguments">Arguments</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>pagesize</tt>: <tt>board.cpu_romsize * scale / board.cpu_banksize</tt>. This is used to specify the loop term condition.
</li><li><tt>banksize</tt>: board.cpu_romsize. It is used to specify an argument for cpu_read()
</li></ul><h3 id="h3-Returns">Returns</h3><p>nothing
</p><h3 id="h3-Description">Description</h3><p>This function is assigned to the dump ROM data on CPU region. This is used for the 'loop' and 'dump' variables, as well as for fixed rombanks.
</p><h2 id="h2-ppu_dump.28.29">ppu_dump()</h2><p><tt>function ppu_dump(d, pagesize, banksize)</tt>
</p><h3 id="h3-Arguments-2">Arguments</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>pagesize</tt>: <tt>board.ppu_romsize * scale / board.ppu_banksize</tt>. It is used to be term condition 'for' loop.
</li><li><tt>banksize</tt>: board.ppu_romsize. It is used to be a argument for ppu_read()
</li></ul><h3 id="h3-Returns-2">Returns</h3><p>nothing
</p><h3 id="h3-Description-2">Description</h3><p>If ppu_romsize is 0, this function is unnecessary. When ppu_ramfind() returns true and charcter memory is connected RAM, this function is not called.
This function is assigned to dump ROM data on PPU region. Please use this for loop and dump variable rombank.
</p><h1 id="h1-Available.20functions.20for.20.ad.20file">Available functions for .ad file</h1><h2 id="h2-cpu_write.28.29">cpu_write()</h2><p>see decsription <a href="http://sourceforge.jp/projects/unagi/wiki/script_common_en">script_common_en</a>.
</p><h2 id="h2-cpu_read.28.29">cpu_read()</h2><p><tt>function cpu_read(d, address, length)</tt>
</p><h3 id="h3-Arguments-3">Arguments</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>address</tt>: target address. Available range is 0x8000 to 0xffff.
</li><li><tt>length</tt>: read length. Available range is 0 to 0x3fff.
</li></ul><h3 id="h3-Returns-3">Returns</h3><p>nothing
</p><h3 id="h3-Description-3">Description</h3><p>This function dumps program ROM data from the specified CPU region target address. When length is 0, the host will read data, but will not save any of it. Please note that this function is required when using MMC2 and MMC4 mappers.
</p><h2 id="h2-ppu_read.28.29">ppu_read()</h2><p><tt>function ppu_read(d, address, length)</tt>
</p><h3 id="h3-Arguments-4">Arguments</h3><ul><li><tt>d</tt>: userpointer
</li><li><tt>address</tt>: target address. Available range is 0x0000 to 0x1fff.
</li><li><tt>length</tt>: read length. Available range is 1 to 0x1fff.
</li></ul><h3 id="h3-Returns-4">Returns</h3><p>nothing
</p><h3 id="h3-Description-4">Description</h3><p>This function dumps charcter ROM data from the PPU region's target address.
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/script_common_en">
    <title>script_common_en</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/script_common_en</link>
    <dc:identifier>script_common_en</dc:identifier>
    <dc:date>2010-01-12T18:09:39+09:00</dc:date>
        <description>
      <![CDATA[== anago script file reference - common ==
= Syntax
Anago uses Squirrel 2.1.2 as its script engine, which highly resembles C style.
(Please note that the current version of Squirrel will output &#0]]>
    </description>
    <content:encoded>
      <![CDATA[<h2 id="h2-anago.20script.20file.20reference.20-.20common">anago script file reference - common</h2><h1 id="h1-Syntax">Syntax</h1><p>Anago uses Squirrel 2.1.2 as its script engine, which highly resembles C style.
(Please note that the current version of Squirrel will output 'unknown error' whenever resuming a thread. Squirrel 2.1.x does not have this problem. If you have a solution to this bug, please let me know.)
</p><h1 id="h1-special.20variables.20and.20constants">special variables and constants</h1><h2 id="h2-d">d</h2><p>First argument is assigned 'd' in many functions. 'd' is userpointer, which is needed for executing internal control commands. 'd' is used to give argument to functions.
</p><h2 id="h2-board">board</h2><p>This defines parameters for the target cartridge. Members of the board will depend on the script mode.
</p><h2 id="h2-mega">mega</h2><p>It is assigned 0x20000 as a constant. This is useful for defining members of the board.
</p><h1 id="h1-functions">functions</h1><h2 id="h2-cpu_write.28.29">cpu_write()</h2><p><tt>function cpu_write(d, address, data)</tt>
</p><h2 id="h2-Arguments">Arguments</h2><ul><li><tt>d</tt>: userpointer
</li><li><tt>address</tt>: target address. Available address range are 0x4200 to 0xffff.
</li><li><tt>data</tt>: writing data
</li></ul><h2 id="h2-Returns">Returns</h2><p>nothing
</p><h2 id="h2-Description">Description</h2><p>This is used to write control registers on the cartridge. Writing data length is 1 byte.
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/kazzo_pcb1.0_ja">
    <title>kazzo_pcb1.0_ja</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/kazzo_pcb1.0_ja</link>
    <dc:identifier>kazzo_pcb1.0_ja</dc:identifier>
    <dc:date>2010-01-03T03:57:57+09:00</dc:date>
        <description>
      <![CDATA[= kazzo PCB revision 1.0 について
== カセットの挿す方向
スイッチのジャンパに前に、USB コネクタを背にしてください。
[[Embed(front.jpg)]]
== スイッチの配線
電源スイッチ(JP1)とリセットスイッチ(JP2)が配線できます。

JP1 を使用しない場合はショートしてください。ケーブルの抜き差しが電源と直結します。カートリッジを挿]]>
    </description>
    <content:encoded>
      <![CDATA[<h1 id="h1-kazzo.20PCB.20revision.201.0.20.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">kazzo PCB revision 1.0 について</h1><h2 id="h2-.E3.82.AB.E3.82.BB.E3.83.83.E3.83.88.E3.81.AE.E6.8C.BF.E3.81.99.E6.96.B9.E5.90.91">カセットの挿す方向</h2><p>スイッチのジャンパに前に、USB コネクタを背にしてください。
<img src="http://sourceforge.jp/projects/unagi/wiki/kazzo_pcb1.0_ja/attach/front.jpg" alt="front.jpg" id="emb-front.jpg-1" title="front.jpg" class="embed-image" width="243" height="214">
</p><h2 id="h2-.E3.82.B9.E3.82.A4.E3.83.83.E3.83.81.E3.81.AE.E9.85.8D.E7.B7.9A">スイッチの配線</h2><p>電源スイッチ(JP1)とリセットスイッチ(JP2)が配線できます。
</p><p>JP1 を使用しない場合はショートしてください。ケーブルの抜き差しが電源と直結します。カートリッジを挿す場合は電源を off にしてから差し込んでください。
</p><p>JP2 を使用しない場合はなにも接続しないでください。
</p><h2 id="h2-.E3.83.95.E3.82.A1.E3.83.BC.E3.83.A0.E3.82.A6.E3.82.A7.E3.82.A2">ファームウェア</h2><p>ファームウェア 0.1.1 を書き込み済みですので、専用のライタは不要です。ファームウェア 0.1.1 から USB + SNROM 経由でファームウェアが更新できますので、将来の拡張にも専用のライタは不要です。
</p><p>万が一ファームウェアの更新に失敗した場合は開発チームにお送り下さい。
</p><h2 id="h2-.E9.80.9A.E4.BF.A1.E9.80.9F.E5.BA.A6">通信速度</h2><p>PC の USB コネクタから kazzo を直結すると通信速度がとてもおそい場合があります(20秒, kazzo パッケージに含まれる kazzo_test.exe の処理時間)。
この場合、ハブ経由すると通信速度が4秒前後まで改善することが多いです。なぜ改善するのかは把握できていません。
</p><h3 id="h3-test.206.0.20passed">test 6.0 passed</h3><p>naruko のメイン PC で通信速度は 3.0 秒前後なのですが、製作したなかで書き込み中に通信が切れてしまうものを kazzo PCB revision 1.0 test 6.0 passed としています。
</p><p>その他の PC ではこの不具合は再現していませんが、問題が発生する可能性があります。あらかじめご了承の上ご注文下さい。
</p><h3 id="h3-test.203.0.20passed">test 3.0 passed</h3><p>naruko のメインPC で問題なく動きました。
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/problem_ja">
    <title>problem_ja</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/problem_ja</link>
    <dc:identifier>problem_ja</dc:identifier>
    <dc:date>2009-12-25T00:19:14+09:00</dc:date>
        <description>
      <![CDATA[= DISK
DISK DRIVE へのアクセス方法での問題は下記です。
== DRAM アクセス
CPU area $6000-$dfff は DRAM ですが、kazzo からはまともなアクセスができませんでした。6502 simlulated read/write waveform でも同様でした。

PPU area 0x0000-0x1fff は SRAM なので読み書きできま]]>
    </description>
    <content:encoded>
      <![CDATA[<h1 id="h1-DISK">DISK</h1><p>DISK DRIVE へのアクセス方法での問題は下記です。
</p><h2 id="h2-DRAM.20.E3.82.A2.E3.82.AF.E3.82.BB.E3.82.B9">DRAM アクセス</h2><p>CPU area $6000-$dfff は DRAM ですが、kazzo からはまともなアクセスができませんでした。6502 simlulated read/write waveform でも同様でした。
</p><p>PPU area 0x0000-0x1fff は SRAM なので読み書きできます。
</p><h2 id="h2-.E3.83.89.E3.83.A9.E3.82.A4.E3.83.96.E3.82.A2.E3.82.AF.E3.82.BB.E3.82.B9">ドライブアクセス</h2><p>$4025, $4026, $4032 あたりを BIOS をまねて下記のように制御してみました。C の write timing でドライブのモーターが停まります。ヘッドが最内周に移動するタイミングでとまっているので $4032.1 が正しくとれているはずです。
<pre>A init
B motor_on
C read_start_mark
D IRQ_ENABLE
E read_end_mark
      | A |  B   | C | D | |    E    |
D.0bit|LLL|HHHHHH|HHH|HHH| |HHHHHHLLL|
T.1bit|HHH|HHHLLL|LLL|LLL| |LLLLLLLLL|
R.2bit|HHH|HHHHHH|HHH|HHH| |HHHHHHHHH|
B.4bit|LLL|LLLLLL|LLL|LLL| |LLLHHHLLL|
1.5bit|HHH|HHHHHH|HHH|HHH| |HHHHHHHHH|
S.6bit|LLL|LLLLLL|HHH|HHH| |HHHHHHLLL|
I.7bit|LLL|LLLLLL|LLL|HHH| |HHHHHHLLL|
Note  |   |      |   |   | | 1  2    |
*1. readdata, end of head == 0
*2. readdata, block end mark exist == 0
</pre>停まった直後に無理矢理書き直すと、モーターが再始動し DRQ が発生するのですが、USB の通信がきれてしまいます。きれる理由は割り込みの制御が悪いのか、電源の問題なのかは調査手段がないので詰まっています。
</p><p>詳細は firmware の disk_process.c をご覧下さい。
</p><h1 id="h1-MMC5.20W-RAM.2C.20EXRAM">MMC5 W-RAM, EXRAM</h1><p>RAM adapter の DRAM 同様アクセスできません。
</p><h1 id="h1-.E3.81.9D.E3.81.AE.E4.BB.96.20battery.20backup.20RAM">その他 battery backup RAM</h1><p>battery backup RAM は実際のカートリッジには制御レジスタがあるのですが、エミュレータでは実装されてない(アクセスし放題)とか RAM の容量が適当な場合が多く、実際のカートリッジにフィードバックできません。
</p><p>Namco, Taito 専用カートリッジだとソフト個別にばらばらというのもざらで、マッパ番号が役に立たないなどエミュレータと本物の違いがよくわかるところです。
</p><p>さらに前述の問題もありますので、RAM のアクセスに関しては Copy NES を利用するのが最善解ではないかと思っています。
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/flash_device_ja">
    <title>flash_device_ja</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/flash_device_ja</link>
    <dc:identifier>flash_device_ja</dc:identifier>
    <dc:date>2009-12-17T16:27:21+09:00</dc:date>
        <description>
      <![CDATA[= 基本的な選別
anago で正式対応してないデバイスを見つけたら、データシートを見てください。データシートで確認する事項は下記です。

[[Embed(am29f040b_00.png)]][[Embed(w49f002_00.png)]]
== databus が 8 bit
(画像A)

この項目はデータシートの題名に入ってるでしょう。 xxxK x8 CMOS flash ]]>
    </description>
    <content:encoded>
      <![CDATA[<h1 id="h1-.E5.9F.BA.E6.9C.AC.E7.9A.84.E3.81.AA.E9.81.B8.E5.88.A5">基本的な選別</h1><p>anago で正式対応してないデバイスを見つけたら、データシートを見てください。データシートで確認する事項は下記です。
</p><img src="http://sourceforge.jp/projects/unagi/wiki/flash_device_ja/attach/am29f040b_00.png" alt="am29f040b_00.png" id="emb-am29f040b_00.png-1" title="am29f040b_00.png" class="embed-image" width="542" height="407"><img src="http://sourceforge.jp/projects/unagi/wiki/flash_device_ja/attach/w49f002_00.png" alt="w49f002_00.png" id="emb-w49f002_00.png-1" title="w49f002_00.png" class="embed-image" width="403" height="322"><p>
</p><h2 id="h2-databus.20.E3.81.8C.208.20bit">databus が 8 bit</h2><p>(画像A)
</p><p>この項目はデータシートの題名に入ってるでしょう。 xxxK x8 CMOS flash memory の x8 に注目してください。PIN CONFIGURATIONS に DQ0 から DQ7 まであれば大丈夫です。
</p><h2 id="h2-5V.20programming.20support">5V programming support</h2><p>(画像B)
</p><p>この項目はデータシートの先頭に書いてあるはずです。古い flash memory は書き込みに 12V が必要なものがあり、それは対応できません。
</p><h2 id="h2-command.20address.20.E3.81.AE.20address.20.E5.B9.85">command address の address 幅</h2><img src="http://sourceforge.jp/projects/unagi/wiki/flash_device_ja/attach/am29f040b_01.png" alt="am29f040b_01.png" id="emb-am29f040b_01.png-1" title="am29f040b_01.png" class="embed-image" width="467" height="656"><img src="http://sourceforge.jp/projects/unagi/wiki/flash_device_ja/attach/w49f002_02.png" alt="w49f002_02.png" id="emb-w49f002_02.png-1" title="w49f002_02.png" class="embed-image" width="368" height="268"><p>
(画像C)
</p><p>command codes for xxxxx の欄外に address format: A14-A0 などと書いてある箇所がとても重要です。A14-A0 もしくは A10-A0 のものが使用可能です。
</p><h2 id="h2-.E7.89.A9.E7.90.86.E5.BD.A2.E7.8A.B6">物理形状</h2><p>DIP が最も配線しやすいですが、正しく配線すれば SOP や QFP でも使用可能です。
</p><h1 id="h1-flashdevice.nut.20.E3.82.92.E8.BF.BD.E5.8A.A0.E3.81.99.E3.82.8B">flashdevice.nut を追加する</h1><p>既存の項目を参考にしてください。設定する項目はデータシートをよくよんで正しく追加してください。
</p><h2 id="h2-capacity">capacity</h2><ul><li>型: 整数
</li><li>単位: byte
</li></ul><p>デバイスの容量を記載します。カートリッジの管理容量は記載しないでください。
</p><h2 id="h2-pagesize">pagesize</h2><ul><li>型: 整数
</li><li>単位: byte
</li></ul><p>software data proctection の項目に 0x5555:0xaa, 0x2aaa:0x55, 0x5555:a0 のあとに連続に書き込める数が記載されています。ファームウェアでは 1 から 0x100 まで対応しています。
</p><p>余談ですが、この値が大きいほど転送速度があがります。
</p><h2 id="h2-erase_wait">erase_wait</h2><ul><li>型: 整数
</li><li>単位: mS
</li></ul><p>DC CHARACTERISTICS の write cycle timing parameters の項目に erase の待ち時間が書いてあります。書いてないデバイスは動かしてみての値をいれてあります。
</p><h2 id="h2-erase_require">erase_require</h2><ul><li>型: bool
</li><li>単位: なし
</li></ul><p>programming の説明の箇所に「データを 1 から 0 にする。 0 から 1 にできるのは erase のみ。」といった記載があれば true, なければ false にしてください。
</p><p>pagesize が 1 の場合は erase_require は true の傾向が多いです。
</p><img src="http://sourceforge.jp/projects/unagi/wiki/flash_device_ja/attach/w49f002_01.png" alt="w49f002_01.png" id="emb-w49f002_01.png-1" title="w49f002_01.png" class="embed-image" width="533" height="159"><p>
</p><h2 id="h2-id_manufacurer.2C.20id_device">id_manufacurer, id_device</h2><ul><li>型: 整数
</li><li>単位: なし
</li></ul><p>profuct identification の項目に値が書いてありますので記載してください。この値を得る方法はソフトウェア側ハードウェア側共にデバイスによってばらばらなので現在の実装では確認できません。
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/flash_74161_en">
    <title>flash_74161_en</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/flash_74161_en</link>
    <dc:identifier>flash_74161_en</dc:identifier>
    <dc:date>2009-12-11T05:22:52+09:00</dc:date>
        <description>
      <![CDATA[== Flash Memory Cartridge - 74161 ==
= Introduction
74xx161-based boards were used in many games. Being based on an off-the-shelf general purpose 4-bit counter, these boards have less functionality ]]>
    </description>
    <content:encoded>
      <![CDATA[<h2 id="h2-Flash.20Memory.20Cartridge.20-.2074161">Flash Memory Cartridge - 74161</h2><h1 id="h1-Introduction">Introduction</h1><p>74xx161-based boards were used in many games. Being based on an off-the-shelf general purpose 4-bit counter, these boards have less functionality compared to ASIC mappers specifically designed to take advantage of the Famicom's specifications. When converting such a board to flash memory, certain problems will still exist:
</p><ul><li>H/V mirroring is only switchable by hardwiring means.
</li><li>If the software uses unsettled data whenever a bus conflict occurs, flash memory won't operate in the same way as a Mask ROM does.
</li></ul><h1 id="h1-Supported.20Devices">Supported Devices</h1><p>Devices that support A0-A10 command addresses are supported (e.g. AM29B040B). Unfortunately this type of board is unable to allocate A0-A14 command addresses. 
</p><h1 id="h1-Wiring.20Confirmation">Wiring Confirmation</h1><p>So far, HVC-UNROM-10 and HVC-UOROM-01 have been successfully tested. Other 74xx161-based boards not referenced in this document might not comply with the following instructions.
</p><ul><li>1: /RES = H
</li><li>2: CK = CPU /ROMCS
</li><li>7: Enable P = L
</li><li>9: LD = CPU R/W
</li><li>10: Enable T = L
</li></ul><p>The unreferenced wires will depend on hardware design. However there shouldn't be any problem with these referenced wires.
</p><h1 id="h1-Wiring">Wiring</h1><p>Add a 74xx00. Using the same 'xx' family of 74xx161 devices that already exists on the board is recommended.
<pre> 74xx00     +-v--+
 CPU R/W -+-|1 14|--- +5V
          | |    |
          +-|2 13|-+- CPU /ROMCS
            |    | |
 PRG /OE -+-|3 12|-+
          | |    |
          +-|4 11|-+
          | |    | |
          +-|5 10|-+
            |    |
         NC |6  9|--- CPU PHI2
            |    |  
     GND ---|7  8|--- 74xx161 CK
            +----+
</pre></p><ul><li>Cut exsiting 74xx161 CK wiring, connect to 74xx00 8 pin.
</li><li>Connect PRG /OE to flash memory /OE
</li><li>Connect flash memory /WE to CPU R/W
</li><li>Connect flash memory /CS to CPU /ROMCS
</li></ul><h1 id="h1-UNROM.2FUOROM">UNROM/UOROM</h1><p>Since the MaskROM of a UNROM board has only 28 pins, modifying this type of board is not recommended. It may be possible to replace the MaskROM with a 32-pin flash memory chip, but the chip will stick out on the board as a side effect. So if you're wanting to keep a cartridge casing intact, a game containing a UOROM board would be a better choice. In addition, hardwiring any connections would be much more stable.
</p><h2 id="h2-Games.20which.20contain.20an.20HVC-UOROM.20board">Games which contain an HVC-UOROM board</h2><ul><li>Momotarou Dentetsu (first Momo-tetsu, not Den|se|tsu)
</li><li>Seireigari
</li><li>Maniac Mansion (uses a compatible non-standard board, not recommended)
</li></ul><h2 id="h2-Board.20Pin.20Assignment">Board Pin Assignment</h2><pre> 1:A17 32:+5V
 2:*1  31:+5V
       30:+5V
       24:A16
       22:CPU /ROMCS
</pre><div class="indent">*1 CPU /ROMCS
</div><h2 id="h2-Flash.20Memory.20Pin.20Assignment">Flash Memory Pin Assignment</h2><pre> 1:A18  = mask ROM 1pin,  UxROM Program A17 (optional, *2)
 2:A16  = mask ROM 24pin, UxROM Program A16 
 31:/WE = cartridge 14pin, CPU R/W
 30:A17 = mask ROM 1pin,  +5V (optional)
 24:/OE = 74xx00 3pin
 22:/CS = cartridge 44pin, CPU /ROMCS (unchanged wiring)
</pre><div class="indent">*2 For perfect compatibility with UNROM, keep the signal in either a constant high or low state.
</div>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/flash_hard_ja">
    <title>flash_hard_ja</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/flash_hard_ja</link>
    <dc:identifier>flash_hard_ja</dc:identifier>
    <dc:date>2009-12-11T04:25:46+09:00</dc:date>
        <description>
      <![CDATA[== flash memory cartridge - hardware 編 ==

= CPU area
60pin edge connecter 経由で書き込み信号を送る際に問題となる点は下記の3点です。
  * バンク切り替えの暴発
  * コマンドアドレスの確保
  * データバス衝突

== バンク切り替えの暴発
ROM 領域 ($8000-$ffff) の read ]]>
    </description>
    <content:encoded>
      <![CDATA[<h2 id="h2-flash.20memory.20cartridge.20-.20hardware.20.E7.B7.A8">flash memory cartridge - hardware 編</h2><h1 id="h1-CPU.20area">CPU area</h1><p>60pin edge connecter 経由で書き込み信号を送る際に問題となる点は下記の3点です。
</p><ul><li>バンク切り替えの暴発
</li><li>コマンドアドレスの確保
</li><li>データバス衝突
</li></ul><h2 id="h2-.E3.83.90.E3.83.B3.E3.82.AF.E5.88.87.E3.82.8A.E6.9B.BF.E3.81.88.E3.81.AE.E6.9A.B4.E7.99.BA">バンク切り替えの暴発</h2><p>ROM 領域 ($8000-$ffff) の read は ROM のデータですが、ほとんどのカセット(マッパ)で write はバンク切り替えの制御用アドレスになっています。flash memory へデータを書き込むときは write 信号を送る必要があり、一見矛盾します。
</p><p>flash memory の制御線には CS (Chip Select), WE (Write Enable), OE (Output Enable)があります。flash memory は /CS:L and /OE:H and /WE の立ち上がりまたは /WE:L and /OE:H and /CS の立ち上がりで書き込みデータを取得します。
<img src="http://sourceforge.jp/projects/unagi/wiki/flash_hard_ja/attach/flashmemory.png" alt="flashmemory.png" id="emb-flashmemory.png-1" title="flashmemory.png" class="embed-image" width="420" height="602">
</p><p>対して 6502 の制御線は R/W (read or write), φ2 (machine cycle) で構成されており、マッパは /ROMCS:L and R/W: L and φ2 の立ち下がりで書き込みデータを取得します(例外有り)。
<img src="http://sourceforge.jp/projects/unagi/wiki/flash_hard_ja/attach/6502write.png" alt="6502write.png" id="emb-6502write.png-1" title="6502write.png" class="embed-image" width="420" height="485">
</p><p>flash memory が write と認識する条件と、マッパが write が認識する条件がことなることを利用して、flash memory へ書き込むときはφ2を動かさないことによりバンク切り替えの暴発を防ぐことが出来ます。
</p><h2 id="h2-.E3.82.B3.E3.83.9E.E3.83.B3.E3.83.89.E3.82.A2.E3.83.89.E3.83.AC.E3.82.B9.E3.81.AE.E7.A2.BA.E4.BF.9D">コマンドアドレスの確保</h2><p>flash memory はアドレスバス A0-A14 が 0x2aaa, 0x5555 へ指定のコマンドを書き込むと ROM 以外の処理が行えます。これを利用してデータを書き込みます。バンクの仕様はハードによってばらばらなので、個別に辻褄を合わせる必要があります。
</p><p>詳細は<a href="http://sourceforge.jp/projects/unagi/wiki/flash_soft_ja">ソフトウェア編</a>に記載します。
</p><h2 id="h2-.E3.83.87.E3.83.BC.E3.82.BF.E3.83.90.E3.82.B9.E8.A1.9D.E7.AA.81">データバス衝突</h2><p>74xx161 などで構成されている単純なハードウェアでは ROM の制御線の接続が不十分でデータバスが ROM と CPU 両方からデータが出ることになり、データが不安定になる可能性があります。
</p><p>ROM を接続する場合は 74xx161 が認識する程度の安定したデータを送ればいいのに対し、 flash memory では RAM 同様の制御線を接続する必要があります。
</p><p>MMCx などカスタムチップの場合は制御線を構成しなおしているものがほとんどでこの問題はありません。カスタムチップから /OE と /CS を混合した制御線が1本でています。
<pre>R/W CPU /ROMCS|memory /enable
L   L         |H
L   H         |H
H   L         |L
H   H         |H
</pre></p><h2 id="h2-flash.20memory.20.E3.81.AE.E6.8E.A5.E7.B6.9A">flash memory の接続</h2><p>アドレスバス、データバスについては ROM と同様の接続でよいです。あまってしまう上位アドレスバスは GND か +5V (どちらでもよいので配線しやすい方を選ぶ)で入力を固定してください。
</p><h3 id="h3-.2FCS">/CS</h3><p>/CS はアドレスデコード部分が入っていればよいので、 /ROMCS を接続します。$6000-$7fff が ROM になっているまれなカセットはうまくいかないと思います。
</p><h3 id="h3-.2FWE">/WE</h3><p>/WE には R/W を接続します。
</p><h3 id="h3-.2FOE">/OE</h3><p>ROM の場合 /OE と /CS が混合されているのでこれを分離します。Output Enable は R/W:H (read) 時に /OE が L になればよいので、 R/W の反転を接続します。
</p><p>カスタムチップの場合は /ROMCS 成分が入ってますが、辻褄はあうので ROM enable 信号を接続します。
</p><h1 id="h1-PPU.20area">PPU area</h1><p>データバスとアドレスバスは CPU area (Program Memory) と同じです。
PPU area の制御線は CPU に比べてとても素直で、バンク切り替え暴発がないので単純です。RAM と同じく下記の配線にしてください。
</p><ul><li>/CS = A13
</li><li>/OE = /RD
</li><li>/WE = /WR
</li></ul><p>注意する点は下記です。
</p><ul><li>A13 (edge 56) に似た /A13 (edge 49) があるので間違えないこと
</li><li>PPU /WR 信号は未使用端子になっているので無理矢理配線する必要がある
</li><li>A13 と /RD が混合されているものがある (VRC4) のでその場合は分離しなおす
</li></ul><img src="http://sourceforge.jp/projects/unagi/wiki/flash_hard_ja/attach/ppuwrite.png" alt="ppuwrite.png" id="emb-ppuwrite.png-1" title="ppuwrite.png" class="embed-image" width="420" height="497"><p>
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/flash_soft_en">
    <title>flash_soft_en</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/flash_soft_en</link>
    <dc:identifier>flash_soft_en</dc:identifier>
    <dc:date>2009-12-11T04:11:50+09:00</dc:date>
        <description>
      <![CDATA[== Flash Memory Cartridge - Software Terminology ==

= command addresses
In order to successfully send a command, the bus will need to send write commands to the following 3 addresses in sequential]]>
    </description>
    <content:encoded>
      <![CDATA[<h2 id="h2-Flash.20Memory.20Cartridge.20-.20Software.20Terminology">Flash Memory Cartridge - Software Terminology</h2><h1 id="h1-command.20addresses">command addresses</h1><p>In order to successfully send a command, the bus will need to send write commands to the following 3 addresses in sequential order: 0x2aaa, 0x5555, and programming address.
</p><h2 id="h2-example.201.3A.20MMC3">example 1: MMC3</h2><p>Configure CPU memory bank on MMC3:
<pre> cpu address|rom address    |page|task
 $8000-$9fff|0x02000-0x03fff|1   |write 0x2aaa
 $a000-$bfff|n * 0x2000     |n   |write area
 $c000-$ffff|0x7c000-0x7ffff|fix |write 0x5555, boot area
</pre></p><p>When switching the CPU bank to page 1 on $8000-0x9fff, the command address 0x2aaa appears on $8aaa. 0x5555 is also placed on a fixed-area, $d555. Finally, programming address is used on $a000-$bfff. Which area is translated ROM image with bank switching.
</p><p>Once configuration is finished, the bus will request an erasing command, followed by the actual flash programming. Configuration should be simple if the CPU bank has 3 areas.
</p><pre> ppu address|rom address    |page|task
 $0000-$07ff|0x02800-0x02fff|0x0a|write 0x2aaa
 $0800-$0fff|0x05000-0x057ff|0x14|write 0x5555
 $1000-$1fff|n * 0x1000     |n   |write area
</pre><p>Since the PPU region's bank size is smaller compared to the CPU, calculating page numbers for command addresses will take a while.
</p><h2 id="h2-example.202.3A.20MMC1.20SLROM">example 2: MMC1 SLROM</h2><p>MMC1 has two two CPU banks. In this case, the bus secures command addresses and the programming area in an even/odd interleaved order.
</p><pre> cpu address|rom address    |page|task
 $8000-$bfff|n * 0x4000     |even|write 0x2aaa + write area
 $c000-$ffff|0x3c000-0x3ffff|fix |write 0x5555
</pre><p>First, the &quot;even&quot; addresses are transferred.
</p><pre> cpu address|rom address    |page|task
 $8000-$bfff|0x00000-0x03fff|fix |write 0x2aaa
 $c000-$ffff|n * 0x4000     |odd |write 0x5555 + write area
</pre><p>Then, the &quot;odd&quot; addresses follow. 
</p><p>MMC1 has two PPU banks as well. But unlike the previous command addresses, 0x2aaa and 0x5555 are programmed together in the first bank. Please keep in mind that programming character memory for MMC1 is only possible for command address A0-A10 style flash memory. A0-A14 style flash is incompatible.
<pre> ppu address|rom address    |page|task
 $0000-$0fff|0x00000 * n    |n   |write area + 0x2aa + 0x555
 $0000-$1fff|0x01000 * n    |n+1 |write area
</pre>Even though the previous directions imply writing for A0-A14 flash, this also applies for A0-A10 flash. 
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/flash_soft_ja">
    <title>flash_soft_ja</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/flash_soft_ja</link>
    <dc:identifier>flash_soft_ja</dc:identifier>
    <dc:date>2009-12-11T04:03:57+09:00</dc:date>
        <description>
      <![CDATA[== flash memory cartridge - software 編 ==

= コマンドアドレス
コマンドを送るには flash memory の 0x2aaa と 0x5555 (共にA0-A14) と書き込むアドレスの3要素を同時に書き込む必要があります。

== 例1: MMC3
MMC3 の CPU memory bank は下記に設定します。
{{{
 cpu ]]>
    </description>
    <content:encoded>
      <![CDATA[<h2 id="h2-flash.20memory.20cartridge.20-.20software.20.E7.B7.A8">flash memory cartridge - software 編</h2><h1 id="h1-.E3.82.B3.E3.83.9E.E3.83.B3.E3.83.89.E3.82.A2.E3.83.89.E3.83.AC.E3.82.B9">コマンドアドレス</h1><p>コマンドを送るには flash memory の 0x2aaa と 0x5555 (共にA0-A14) と書き込むアドレスの3要素を同時に書き込む必要があります。
</p><h2 id="h2-.E4.BE.8B1.3A.20MMC3">例1: MMC3</h2><p>MMC3 の CPU memory bank は下記に設定します。
<pre> cpu address|rom address    |page|task
 $8000-$9fff|0x02000-0x03fff|1   |write 0x2aaa
 $a000-$bfff|n * 0x2000     |n   |write area
 $c000-$ffff|0x7c000-0x7ffff|fix |write 0x5555, boot area
</pre>0x2aaa は cpu address $8000-$9fff を page1 に設定すると、 cpu address $8aaa にでてきます。0x5555 は固定領域の $d555 に出てきます。$a000-$bfff は書き込むアドレスとして、バンク切り替えをしながらすべての ROM イメージを転送する領域にします。
</p><p>あとは、erase command, program command, polling wait などを繰り返しデータを書き込みます。このように 3 bank あると割と素直に書き込むことができます。
<pre> ppu address|rom address    |page|task
 $0000-$07ff|0x02800-0x02fff|0x0a|write 0x2aaa
 $0800-$0fff|0x05000-0x057ff|0x14|write 0x5555
 $1000-$1fff|n * 0x1000     |n   |write area
</pre>PPU 領域に関しては CPU 領域に比べて bank の size が小さいので page 番号をうまく計算してコマンドアドレスを出します。
</p><h2 id="h2-.E4.BE.8B2.3A.20MMC1.20SLROM">例2: MMC1 SLROM</h2><p>MMC1 にはプログラムバンクが 2 つあります。しかし、固定領域を移動できるという特殊な機能を利用することでコマンドアドレスと書き込み領域を確保します。
<pre> cpu address|rom address    |page|task
 $8000-$bfff|n * 0x4000     |even|write 0x2aaa + write area
 $c000-$ffff|0x3c000-0x3ffff|fix |write 0x5555
</pre>まず偶数ページ。これを書いた後に固定領域を変更します。
</p><pre> cpu address|rom address    |page|task
 $8000-$bfff|0x00000-0x03fff|fix |write 0x2aaa
 $c000-$ffff|n * 0x4000     |odd |write 0x5555 + write area
</pre><p>次に奇数ページ。こんな感じに MMC1 の機能をフル活用して、辻褄を合わせます。
</p><p>PPU 領域は 0x1000 byte の bank が2つ。結論から言うと 0x2aaa, 0x5555 を同時に出せるページ数がありません。よって command address A0-A14 タイプは書き込めません。
command address A0-A10 タイプも存在しており、これの場合は面倒くさい設定がいりません。
</p><pre> ppu address|rom address    |page|task
 $0000-$0fff|0x01000 * n    |n   |write area + 0x2aa + 0x555
 $0000-$1fff|0x01000 *(n+1) |n+1 |write area
</pre><p>いままで command address A0-A14 タイプで説明してきましたが、 A0-A10 タイプでも互換性があるので書き込むことが出来ます。
</p><p>面倒くさい A0-A14 タイプで説明した理由は DIP type の flash memory の有効活用を重視しています。SOP, QFP type の flash memory は入手が非常に容易ですが、現在の産業で需要がない DIP type は入手困難です。限られた flash memory を使い切るには古い PC マザーボードから外すなどの苦労が必要です。そういったデバイスを使うために書いています。
</p><p>仮に大量の dip type の flash memory を売っているところを見つけたとしても買い占めることなく必要な人が使えるようにしてあげてください。これは筆者からの願いです。
</p><p>ここまで書いて気づいたのですが、コマンド書き込みの途中にバンク切り替えをすると辻褄は合わせられるでしょう。ただ、スクリプト言語としての実装が困難なので現実的ではないと考えています。
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/unagi/wiki/RAMaccess">
    <title>RAMaccess</title>
    <link>http://sourceforge.jp/projects/unagi/wiki/RAMaccess</link>
    <dc:identifier>RAMaccess</dc:identifier>
    <dc:date>2008-11-22T19:24:32+09:00</dc:date>
        <description>
      <![CDATA[== アクセスに手間取った理由
 * A15:L でのメモリアクセスハードウェアタイミングに確証が持てなかった
 * 実験対象としていた mmc1 が RAM を使用するレジスタがあることに気づいていなかった
   * nesdev や vitruaNES のソースにも書いてなかった
 * 実験対象その2としていた vrc7 も同様だった
 * RAM イメージはなくてもエミュレータでも]]>
    </description>
    <content:encoded>
      <![CDATA[<h2 id="h2-.E3.82.A2.E3.82.AF.E3.82.BB.E3.82.B9.E3.81.AB.E6.89.8B.E9.96.93.E5.8F.96.E3.81.A3.E3.81.9F.E7.90.86.E7.94.B1">アクセスに手間取った理由</h2><ul><li>A15:L でのメモリアクセスハードウェアタイミングに確証が持てなかった
</li><li>実験対象としていた mmc1 が RAM を使用するレジスタがあることに気づいていなかった
<ul><li>nesdev や vitruaNES のソースにも書いてなかった
</li></ul></li><li>実験対象その2としていた vrc7 も同様だった
</li><li>RAM イメージはなくてもエミュレータでも遊べる
<ul><li>RAM 使用レジスタを無視して常にアクセス可能にすれば問題がない
</li></ul></li></ul><h2 id="h2-.E3.82.A2.E3.82.AF.E3.82.BB.E3.82.B9.E6.96.B9.E6.B3.95.E3.81.8C.E7.A2.BA.E7.AB.8B.E3.81.97.E3.81.9F.E3.83.9E.E3.83.83.E3.83.91">アクセス方法が確立したマッパ</h2><p>read/write ともに確認済み
</p><h3 id="h3-mmc1.208KB">mmc1 8KB</h3><ul><li>program ROM bank register bit4 を 0 にすること
</li><li>charcter ROM bank register bit4 を 0 にすること, メモリが RAM であってもやる
</li><li>この2つを満たすと $6000-$7fff 上に RAM がでてくる
</li></ul><h3 id="h3-mmc1.2032KB">mmc1 32KB</h3><ul><li><a href="http://nesdevwiki.org/wiki/SXROM" class="external" rel="nofollow">http://nesdevwiki.org/wiki/SXROM</a>
</li><li>final fantasyI.II では 16KB として使っている
</li><li>32KB をフル活用しているソフトはなさそう
</li><li>その他光栄系で RAM バンク切り替えをしているようだ
</li></ul><h3 id="h3-mmc3">mmc3</h3><ul><li>$a001 を設定する
</li><li><a href="http://nesdevwiki.org/wiki/MMC3" class="external" rel="nofollow">http://nesdevwiki.org/wiki/MMC3</a> 
</li></ul><h3 id="h3-mmc4">mmc4</h3><ul><li>設定不要
</li></ul><h3 id="h3-vrc4">vrc4</h3><ul><li>設定不要?
</li><li>少なくともグラディウスIIはいけなかった
<ul><li>どうもグラディウスIIのみ専用レジスタを使っていた
</li><li>RAM のサイズが 0x800 と小さい
</li></ul></li></ul><h3 id="h3-vrc6">vrc6</h3><ul><li>設定レジスタあり, 文書に書いてあった
</li><li>初期値が RAM 使用可になっているので設定不要らしい
</li><li><a href="http://nesdev.parodius.com/vrc6-j.txt" class="external" rel="nofollow">http://nesdev.parodius.com/vrc6-j.txt</a>
</li></ul><h3 id="h3-vrc7">vrc7</h3><ul><li>設定レジスタあり, 文書に書いてない
</li></ul><h2 id="h2-.E3.82.A2.E3.82.AF.E3.82.BB.E3.82.B9.E6.96.B9.E6.B3.95.E3.81.8C.E5.88.A4.E6.98.8E.E3.81.97.E3.81.A6.E3.81.84.E3.82.8B.E3.83.9E.E3.83.83.E3.83.91">アクセス方法が判明しているマッパ</h2><p>試していない
</p><h3 id="h3-mmc5">mmc5</h3><ul><li>対象ソフトを持っていないので対応する気が起きない
</li><li><a href="http://nesdevwiki.org/wiki/MMC5" class="external" rel="nofollow">http://nesdevwiki.org/wiki/MMC5</a>
</li><li>光栄系はバンク切り替えが必須でソフトによって16KBか32KBか
</li><li>ジャストブリードと役萬天国はもってないので不明
</li></ul><h2 id="h2-.E3.82.A2.E3.82.AF.E3.82.BB.E3.82.B9.E6.96.B9.E6.B3.95.E3.81.8C.E4.B8.8D.E6.98.8E.E3.81.AE.E3.83.9E.E3.83.83.E3.83.91">アクセス方法が不明のマッパ</h2><p>試した
</p><h3 id="h3-x1_0005">x1_0005</h3><p>minelvaton saga
</p><ul><li>$7f00-$7fff が RAM 領域らしい
</li><li>書き込み前に lda #$A3; sta $7ef8 とある
</li><li>書き込み後に lda #$00; sta $7ef8 とある
</li><li>ソフト個別? RAM の電池切れが原因??
</li></ul><h3 id="h3-namcot.20106">namcot 106</h3><p>king of kings
</p><ul><li>それ以前に ROM が安定して読めない
</li><li>$6000-$7fff が RAM 領域らしい
<ul><li>偶数アドレスは $ff で埋まることが多い
</li><li>奇数アドレスは $00 で埋まることが多い
</li></ul></li><li>このマッパはソフト個別なのは確定で、mindseeker は別方法のようだ
<ul><li>クリア寸前の mindseeker のデータには価値があるかもしれないそれ以外は価値がないよな...
</li></ul></li></ul><h3 id="h3-family.20basic.20V3">family basic V3</h3><ul><li>電池は入ってない, backup スイッチは ON にした
</li><li>どのエリアが RAM か不明
</li></ul>]]>
    </content:encoded>
      </item>
    </rdf:RDF>

