FT245RL AVRライター製作 2007.10.05(金)〜
著作者名: 中野 良知 作成開始: 2007.10.04(木) 最新更新: 2007.11.19(月)
目次 1. 概要 2. ROMライター 2.1. 対応品種 2.2. 操作例 2.2.1. デバイス選択 2.2.2. 書き込み 2.2.3. 読み出し 2.2.4. 電源 2.3. Appのダウンロード 3. ハードウェアー 3.1. FT245RLの信号配置 3.2. 回路図 3.3. マウント図 3.4. 切削基板 3.5. インサーキットプログラミング 4. ソフトウェアー 4.1. Appプログラムの概要 4.1.1. FT_Open() 4.1.2. FT_Close() 4.1.3. ROM読み出し 4.1.4. ROM書き込み 4.2. シリアルプログラミングコマンド 4.2.1. プログラム許可 4.2.2. ROM読み出し 4.2.3. チップ消去 4.2.4. ROMバッファー転送 4.2.5. ROM書き込み 4.3. シリアルデータ出力 4.3.1. タイミングチャート 4.3.2. シリアルデータの生成 4.3.3. シリアル出力プログラム例 4.4. シリアルデータ入力 4.4.1. タイミングチャート 4.4.2. 入力手順 4.4.3. シリアル入力プログラム例 5. 参考資料 5.1. FT245RL用DLLの使用方法 5.2. コマンド一覧 1. 概要 「FT245RLモジュールの実験」のAVRマイコン用ROMライターの製作記事からROMの読み 出しと書き込みに関連した箇所を抜粋し加筆しました。 シリアルプログラミングで、インサーキットプログラミングに対応。 ターゲットマイコンへの電源供給オン/オフをROMライターAppから行える為、 ROM書き込みから動作テストへの移行がスムースです。 ターゲットマイコンへはUSB電源ラインの5Vを供給する為、外部電源が不要です。 実験に使用したFT245RLモジュールは秋月製です。 App開発にはMicrosoftのVC#(Express Edition)を使用しました。 インストールと簡単な使用方法はVisual C#の導入検討をご利用ください。 2. ROMライターApp 最新のフォームです。 2.1. 対応品種 ATtiny26L、ATtiny2313、ATmega8、AT90S2313 2.2. 操作例 以下の操作例では、制作途中の画像を流用している為、最新版とは少し異なる画像 があります。 2.2.1. デバイス選択 使用するデバイスメニューをクリックします。 2.2.2. 書き込み 1) ROM 「書込」「ROM」メニューを選択するとファイルオープンダイアログが開きます。 書き込むファイル(file.hex)を選択し、「OK]をクリックします。 2) ヒューズビット 編集」で編集フォームが開き、 「OK」で編集した結果をリストに反映、 「FUSE」のサブメニュー「書込」をクリック出来るようになります。 2.2.3. 読み出し 「読出」「ROM」メニューをクリックするとROMデータを読み出し、 リストボックスに表示します。 読み出しバイト数は128バイトに制限しています。 2.2.4. 電源 「電源」「入り」でターゲットデバイスへ5V電源に供給します。 「電源」「切り」でターゲットデバイスへの電源供給をOFFします。 5Vの電源元はUSBケーブルの5V電源です。 2.3. Appのダウンロード ここ をクリックして下さい。 最新版は 20071119 です。 ATtiny26L,ATtiny2313,ATmega8,AT90S2313全てのボーレートを9600に設定し、 使用環境による不安定性を改善しました。 Appの実行には、 Microsoft社の「.NET Framework」とFTDI社の「FT245用デバイスドライバー」が 必要です。 それぞれのHPから該当するソフトウェアーをダウンロードしインストールして下さ い。 3. ハードウェアー 3.1. FT245RLの信号配置 DB I/O 名称 用途 ------+-----+---------+----------------------- DB7 OUT MOSI シリアルデータ出力 DB6 OUT CLK クロック DB5 OUT POWER 電源 ON/OFF DB4 OUT RESET RESET ON/OFF DB3 Non use DB2 Non use DB1 Non use DB0 IN MISO シリアルデータ入力 MSBからのデータ出力処理と、MSBからのデータ入力処理を簡単にする為に データ出力をDB7に、データ入力をDB0に割り付けました。 3.2. 回路図 回路図です。 3.3. マウント図 3.4. 切削基板 上:少しコンパクトにしました。 下:初回切削基板。 IC1 FT245RLは半田面にマウントします。 3.5. インサーキットプログラミング ケーブルの先端のICソケットにターゲットマイコンを取り付け、ターゲット基板に 実装します。 ターゲット基板に実装したままでROMにデータを書き込む事ができます。 更に、ROMラーターAppの「電源」「入り」メニューをクリックすると、ターゲット基 板に5V電源を供給したあとRESETがOFFになり、プログラムを実行する事が出来ます。 4. ソフトウェアー 4.1. Appプログラムの概要 4.1.1. FT_Open() 以下を実行するサブルーチンです。 1) FT245RLとの通信を開く 2) BitBangモードを設定 DB7-DB1:出力ポート DB1 :入力ポート 3) ボーレートを設定 ATtiny26L,ATtiny2313,ATmega8用が14400ボー AT90S2313用が9600ボー 4) RESET ON 5) 20msec遅延 5) POWER ON 6) 20msec遅延 7) プログラミング許可コマンド発行 8) 20msec遅延 4.1.2. FT_Close() 以下を実行するサブルーチンです。 1) RESET ON 2) 20msec遅延 3) POWER OFF 4) 500msec遅延 5) 全ポートにLowを出力。 POWER OFF、RESET OFF 4.1.3. ROM読み出し 以下を実行するイベントプログラムです。 1) FT_Open() 2) ROMデータ読み出し 128バイトに制限 3) FT_Close() 4.1.4. ROM書き込み 以下を実行するイベントプログラムです。 1) hexファイルデータを読み込む 2) FT_Open() 3) チップ消去コマンド発行 4) 20msec遅延 5) 書き込みコマンド発行 ATtiny26L,ATtiny2313,ATmege8はページ書き込み AT90S2313はバイト書き込み 6) 5msec遅延 7) 書き込みサイズ分、5) 6)繰返す。 8) ベリファイ 16バイトに1バイトの一致をテスト 9) FT_Close() 4.2. シリアルプログラミングコマンド 4.2.1. プログラム許可 ROMの読み出しや書き込みに先立って、プログラム許可コマンドをAVRマイコン (デバイス)に送ります。 コマンド名 第1 第2 第3 第4 -----------------+-----+---------+---------+---------+---------+---- プログラム許可 26L 1010 1100 0101 0011 xxxx xxxx xxxx xxxx 2313 1010 1100 0101 0011 xxxx xxxx xxxx xxxx m8 1010 1100 0101 0011 xxxx xxxx xxxx xxxx s2313 1010 1100 0101 0011 xxxx xxxx xxxx xxxx 4品種ともに、0xAC,0x53,0x00,0x00を送ればデバイスはプログラム可能な状態に なります。 4.2.2. ROM読み出し 3バイトのコマンドを出力した後に、1バイトのROMデータを読み出します。 コマンド名 第1 第2 第3 第4 -----------------+-----+---------+---------+---------+---------+---- ROM読み出し 26L 0010 P000 xxxx xxHH LLLL LLLL RRRR RRRR 2313 0010 P000 0000 00HH LLLL LLLL RRRR RRRR m8 0010 P000 0000 HHHH LLLL LLLL RRRR RRRR s2313 0010 P000 xxxx xxHH LLLL LLLL RRRR RRRR HはROMの上位アドレスで、LはROMの下位アドレスです。 Rは読み出すROMデータです。 4.2.3. チップ消去 ROM書き込みに先立ってマイコンのROMデータとEEPROMデータを消去します。 コマンド名 第1 第2 第3 第4 差異 -----------------+-----+---------+---------+---------+---------+---- チップ消去 26L 1010 1100 100x xxxx xxxx xxxx xxxx xxxx 2313 1010 1100 100x xxxx xxxx xxxx xxxx xxxx m8 1010 1100 100x xxxx xxxx xxxx xxxx xxxx s2313 1010 1100 100x xxxx xxxx xxxx xxxx xxxx 4.2.4. ROMバッファー転送 マイコンのROMバッファーへROMデータを転送します。 バッファーの容量はデバイスにより異なります。 バッファーへROMデータを転送後に、ROM書き込みコマンドでバッファーのデータを ROMへ書き込みます。 コマンド名 第1 第2 第3 第4 容量差異 -----------------+-----+---------+---------+---------+---------+----------- ROM BUF転送 26L 0100 P000 xxxx xxxx xxxx LLLL WWWW WWWW 16ワード 2313 0100 P000 000x xxxx xxxx LLLL WWWW WWWW 16ワード m8 0100 P000 0000 xxxx xxxL LLLL WWWW WWWW 32ワード s2313 1バイトのROM書き込み毎に設ける書き込み完了の待ち時間が、バッファー書き込み毎 に軽減されるため高速な書き込みが可能です。 4.2.5. ROM書き込み 3バイトのコマンドを出力した後に、1バッファー又は1ワードのROMデータをROMへ書 き込みます。 コマンド名 第1 第2 第3 第4 書き込み量 -----------------+-----+---------+---------+---------+---------+----------- ROM書き込み 26L 0100 1100 xxxx xxHH LLLL xxxx xxxx xxxx 16ワード 2313 0100 1100 0000 00HH LLLL xxxx xxxx xxxx 16ワード m8 0100 1100 0000 HHHH LLLx xxxx xxxx xxxx 32ワード s2313 0100 P000 xxxx xxHH LLLL LLLL WWWW WWWW 1バイト HはROMアドレスの上位バイトです。 LはROMアドレスの下位バイトです。 ATtiny26L、ATtiny2313、ATmega8の第3バイトのx印のビットは、バッファー書き込み の為無視されます。 ATtiny26L,ATtiny2313,ATmega8は、ROM書き込みコマンドでROMバッファーのデータが 一括でROMへ書き込まれます。 4.3. シリアルデータ出力 4.3.1. タイミングチャート 4バイト又は3バイトのコマンドを、第1バイト目のMSBから順にマイコンのMOSI端子へ 送信します。 タイミングチャート ──┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌─ CLOCK ──┴┘└┘└┘└┘└┘└┘└┘└┘ MOSI ──┬─┬─┬─┬─┬─┬─┬─┬── DATA ──┴─┴─┴─┴─┴─┴─┴─┴── MSB LSB クロックの立下がりでデータを出力し、クロックの立上がりでターゲットマイコンが データを取り込みます。 4.3.2. シリアルデータの生成 1) 元データをバッファーにコピーし、0x80でマスクします。 CLKビット=0に設定されます。 MSB LSB ┌─┬─┬─┬─┬─┬─┬─┬─┐ 元データ │b7│b6│b5│b4│b3│b2│b1│b0│ └─┴─┴─┴─┴─┴─┴─┴─┘ ↓コピー ┌─┬─┬─┬─┬─┬─┬─┬─┐ バッファー │b7│b6│b5│b4│b3│b2│b1│b0│ └─┴─┴─┴─┴─┴─┴─┴─┘ マスクデータ and) 1 0 0 0 0 0 0 0 ───────────────────────────── バッファー b7 0 0 0 0 0 0 0 ↑ ↑ │ └─ CLKビット └─ MOSIシリアルデータ 2) 更に0x40で論理和を行い、CLKビット=1に設定します。 バッファー b7 0 0 0 0 0 0 0 クロックビット or) 0 1 0 0 0 0 0 0 ───────────────────────────── バッファー b7 1 0 0 0 0 0 0 ↑ ↑ │ └─ CLKビット └─ MOSIシリアルデータ 3) 元データを左シフト1回で、次の出力データをMSBに設定します。 ←シフト1回 ┌─┬─┬─┬─┬─┬─┬─┬─┐ 元データ │b6│b5│b4│b3│b2│b1│b0│ 0│ └─┴─┴─┴─┴─┴─┴─┴─┘ MSB LSB 4) バッファーのデータにPOWER制御ビットとRESET制御ビットを追加します。 バッファー b7 1 0 0 0 0 0 0 POWERとRESET 0 0 1 1 0 0 0 0 ───────────────────────────── バッファー b7 1 1 1 0 0 0 0 ↑ ↑ ↑ ↑ │ │ │ │ │ │ │ └─RESET制御ビット │ │ └─POWER制御ビット │ └─ CLKビット └─ MOSIシリアルデータ 5) 生成したシリアルデータを順次バイト型配列に収納します。 ┌──配列添え字 │ ┌──シリアルデータ │ │ ┌──CLKビット │ │ │ ┌──POWER制御ビット │ │ │ │ ┌───RESET制御ビット │ │ │ │ │ ↓ ↓ ↓ ↓ ↓ ┌─┬─┬─┬─┬─┬─┬─┬─┐ 0 │b7│ 0│ 1│ 1│ 0│ 0│ 0│ 0│ 1 │b7│ 1│ 1│ 1│ 0│ 0│ 0│ 0│ 2 │b6│ 0│ 1│ 1│ 0│ 0│ 0│ 0│ ................................ ................................ 12 │b1│ 0│ 1│ 1│ 0│ 0│ 0│ 0│ 13 │b1│ 1│ 1│ 1│ 0│ 0│ 0│ 0│ 14 │b0│ 0│ 1│ 1│ 0│ 0│ 0│ 0│ 15 │b0│ 1│ 1│ 1│ 0│ 0│ 0│ 0│ └─┴─┴─┴─┴─┴─┴─┴─┘ 6) 第4バイト目のコマンドまで連続して配列に収納します。 配列の容量は16×4=64バイトです。 7) 配列データを作成した順にFT245RLに書き込みます。 PCのバッファー → FT245RLのFIFO → FT245RLのデータポート を経由してシリアルのコマンドが出力されます。 4.3.3. シリアル出力プログラム例 コマンドはcommand_buf[]配列に設定されています。 port_bufにはPOWER制御ビットとRESET制御ビットがセットされています。 //------------------------------------------ // コマンドをシリアルで出力 // 1) command_buf[]にあるデータをtempにコピー // 2) tempのMSB以外をマスクしport_bufとORをとる // (port_bufにはPOWERとRESETの制御ビットが設定) // 3) tempをtx_bufに格納(CLK=0) // 4) temp OR 0x40(CLK=1) を次のtx_bufに格納 // 5) tempを1回左シフト // 6) 8ビット分2)から5)を繰返す // 7) 引数のtx_size分1)に戻って繰返す // 8) tx_buf配列データをFT245RLに書き込む //------------------------------------------ unsafe private void avr_command_out(int tx_size) { Byte[] tx_buf = new Byte[8192]; // コマンドバッファー Byte temp; // データ一時保管用 UInt32 writesize = 0; // 送信済みカウンタ UInt32 tx_count; // 送信バイト数 int n, i; // ループカウンタ tx_count = 0; for (i = 0; i < tx_size; i++) { // tx_sizeバイト数を繰返し temp = command_buf[i]; // コマンドをコピー // tx_bufに1ビット毎のシリアルデータとクロックビットを生成 for (n = 0; n < 16; n += 2) { // 8ビット繰返し // MSBから出力 tx_buf[tx_count] = (Byte)((temp & 0x80) | port_buf); tx_buf[tx_count + 1] = (Byte)(tx_buf[tx_count] | CLOCK_H); temp <<= 1; // 次の出力ビットをMSBへ tx_count += 2; // 送信バイトカウンタを更新 } } // 終端のクロックビットをLowに設定 tx_buf[tx_count] = tx_buf[tx_count - 2]; tx_count++; // tx_bufのデータをFT245RLに書き込む。tx_size×8+1バイト ftStatus = FT_Write(ftHandle, tx_buf, tx_count, &writesize); } 4.4. シリアルデータ入力 4.4.1. タイミングチャート クロックの立上がりでターゲットマイコンからデータを取り込みます。 タイミングチャート ──┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌─ CLOCK ──┴┘└┘└┘└┘└┘└┘└┘└┘ MISO ──┬─┬─┬─┬─┬─┬─┬─┬── DATA ──┴─┴─┴─┴─┴─┴─┴─┴── MSB LSB コマンドの第1バイトから第3バイトを出力した後に1バイトの入力を行います。 4.4.2. 入力手順 1) 送信バッファー配列にCLK=0とCLK=1、POWER、RESETの制御ビットを設定したデー タを用意します。 ┌──配列添え字 │ │ ┌──CLKビット │ │ ┌──POWER制御ビット │ │ │ ┌───RESET制御ビット │ │ │ │ ↓ ↓ ↓ ↓ ┌─┬─┬─┬─┬─┬─┬─┬─┐ 0 │ 0│ 0│ 1│ 1│ 0│ 0│ 0│ 0│ 1 │ 0│ 1│ 1│ 1│ 0│ 0│ 0│ 0│ └─┴─┴─┴─┴─┴─┴─┴─┘ 2) 送信バッファー配列を順にFT245RLに書き込みむと ─┐ ┌── CLKが ─┴─┘ と変化します。 ↑ ↑ │ └─配列[0]を出力 └─配列[0]を出力 3) FT245RLからデータを読み出しビット0以外をマスクします。 4) 受信バッファーを左に1回シフトし、3)の値との論理和をとります。 5) 1)から4)を8回繰返すと、受信バッファーに1バイトのデータが揃います。 4.4.3. シリアル入力プログラム例 以下のプログラムを呼び出す前に、コマンドバッファーに3バイトのコマンドを設定し て置きます。 //------------------------------------------ // 1バイトシリアルデータ入力 //------------------------------------------ unsafe private Byte avr_data_in() { Byte rx_buf = 0; Byte[] tx_buf = new Byte[2]; Byte[] temp = new Byte[1]; UInt32 writesize; int n; // コマンドの第1バイトから第3バイトまでを送信 avr_command_out(3); // 1バイトデータを受信 for (n = 0; n < 8; n++) { // 8ビット繰返し // MSBから入力 tx_buf[0] = port_buf; tx_buf[1] = (Byte)(CLOCK_H | port_buf); ftStatus = FT_Write(ftHandle, tx_buf, 2, &writesize); ftStatus = FT_GetBitMode(ftHandle, temp); rx_buf <<= 1; rx_buf |= (Byte)(temp[0] & 0x01); } return rx_buf; } 5. 参考資料 5.1. FT245RL用DLLの使用方法 VC# AppからFT245RL用のDLLを使用する方法は、 FT245RL用DLLの使用方法を参考にして下さい。 5.2. コマンド一覧 コマンド名 Device 第1 第2 第3 第4 差異 -----------------+-----+---------+---------+---------+---------+---- プログラム許可 26L 1010 1100 0101 0011 xxxx xxxx xxxx xxxx 2313 1010 1100 0101 0011 xxxx xxxx xxxx xxxx m8 1010 1100 0101 0011 xxxx xxxx xxxx xxxx s2313 1010 1100 0101 0011 xxxx xxxx xxxx xxxx -----------------+-----+---------+---------+---------+---------+---- チップ消去 26L 1010 1100 100x xxxx xxxx xxxx xxxx xxxx 2313 1010 1100 100x xxxx xxxx xxxx xxxx xxxx m8 1010 1100 100x xxxx xxxx xxxx xxxx xxxx s2313 1010 1100 100x xxxx xxxx xxxx xxxx xxxx -----------------+-----+---------+---------+---------+---------+---- ROM読み出し 26L 0010 P000 xxxx xxHH LLLL LLLL RRRR RRRR 2313 0010 P000 0000 00HH LLLL LLLL RRRR RRRR ○ m8 0010 P000 0000 HHHH LLLL LLLL RRRR RRRR ○ s2313 0010 P000 xxxx xxHH LLLL LLLL RRRR RRRR -----------------+-----+---------+---------+---------+---------+---- ROM BUF設定 26L 0100 P000 xxxx xxxx xxxx LLLL WWWW WWWW 16ワード 2313 0100 P000 000x xxxx xxxx LLLL WWWW WWWW ○ 16ワード m8 0100 P000 0000 xxxx xxxL LLLL WWWW WWWW ○ 32ワード s2313 -----------------+-----+---------+---------+---------+---------+---- ROM書き込み 26L 0100 1100 xxxx xxHH LLLL xxxx xxxx xxxx 16ワード 2313 0100 1100 0000 00HH LLLL xxxx xxxx xxxx ○ 16ワード m8 0100 1100 0000 HHHH LLLx xxxx xxxx xxxx ○ 32ワード s2313 0100 P000 xxxx xxHH LLLL LLLL WWWW WWWW △ -----------------+-----+---------+---------+---------+---------+---- EEPROM読み出し 26L 1010 0000 xxxx xxxx xLLL LLLL RRRR RRRR 2313 1010 0000 000x xxxx xLLL LLLL RRRR RRRR ○ m8 1010 0000 00xx xxxH LLLL LLLL RRRR RRRR ○ s2313 1010 0000 xxxx xxxx xLLL LLLL RRRR RRRR -----------------+-----+---------+---------+---------+---------+---- EEPROM書き込み 26L 1100 0000 xxxx xxxx xLLL LLLL WWWW WWWW 2313 1100 0000 000x xxxx xLLL LLLL WWWW WWWW ○ m8 1100 0000 00xx xxxH LLLL LLLL WWWW WWWW ○ s2313 1100 0000 xxxx xxxx xLLL LLLL WWWW WWWW -----------------+-----+---------+---------+---------+---------+---- ロックビット読出 26L 0101 1000 0000 0000 xxxx xxxx xxxx xxRR 2313 0101 1000 0000 0000 xxxx xxxx xxxx xxRR m8 0101 1000 0000 0000 xxxx xxxx xxRR RRRR ○ s2313 -----------------+-----+---------+---------+---------+---------+---- ロックビット書込 26L 1010 1100 111x xxxx xxxx xxxx 1111 11WW 2313 1010 1100 111x xxxx xxxx xxxx 1111 11WW m8 1010 1100 111x xxxx xxxx xxxx 11WW WWWW ○ s2313 1010 1100 111x xWWx xxxx xxxx xxxx xxxx △ -----------------+-----+---------+---------+---------+---------+---- FUSE下位読出 26L 0101 0000 0000 0000 xxxx xxxx RRRR RRRR 2313 0101 0000 0000 0000 xxxx xxxx RRRR RRRR m8 0101 0000 0000 0000 xxxx xxxx RRRR RRRR s2313 -----------------+-----+---------+---------+---------+---------+---- FUSE下位書込 26L 1010 1100 1010 0000 xxxx xxxx WWWW WWWW 2313 1010 1100 1010 0000 xxxx xxxx WWWW WWWW m8 1010 1100 1010 0000 xxxx xxxx WWWW WWWW s2313 -----------------+-----+---------+---------+---------+---------+---- FUSE上位読出 26L 0101 1000 0000 1000 xxxx xxxx xxxR RRRR 2313 0101 1000 0000 1000 xxxx xxxx RRxR RRRR ○ m8 0101 1000 0000 1000 xxxx xxxx RRRR RRRR ○ s2313 -----------------+-----+---------+---------+---------+---------+---- FUSE上位書込 26L 1010 1100 1010 1000 xxxx xxxx xxxW WWWW 2313 1010 1100 1010 1000 xxxx xxxx WW0W WWWW ○ m8 1010 1100 1010 1000 xxxx xxxx WWWW WWWW ○ s2313 -----------------+-----+---------+---------+---------+---------+---- SIGバイト読出 26L 0011 0000 xxxx xxxx xxxx xxLL RRRR RRRR 2313 0011 0000 000x xxxx xxxx xxLL RRRR RRRR m8 0011 0000 000x xxxx xxxx xxLL RRRR RRRR s2313 0011 0000 xxxx xxxx xxxx xxLL RRRR RRRR -----------------+-----+---------+---------+---------+---------+---- CK較正値読出 26L 0011 1000 xxxx xxxx 0000 00LL RRRR RRRR 2313 0011 1000 000x xxxx 0000 000L RRRR RRRR ○ m8 0011 1000 00xx xxxx 0000 00LL RRRR RRRR s2313 -----------------+-----+---------+---------+---------+---------+---- EEPROMページ設定 26L 2313 1100 0001 0000 0000 0000 00LL WWWW WWWW ○ m8 s2313 -----------------+-----+---------+---------+---------+---------+---- EEPRMページ書込 26L 2313 1100 0010 00xx xxxx xLLL LL00 xxxx xxxx ○ m8 s2313 -----------------+-----+---------+---------+---------+---------+---- 拡張FUSE読出 26L 2313 0101 0000 0000 1000 xxxx xxxx xxxx xxxR ○ m8 s2313 -----------------+-----+---------+---------+---------+---------+---- 拡張FUSE書込 26L 2313 1010 1100 1010 0100 xxxx xxxx xxxx xxxW ○ m8 s2313 -----------------+-----+---------+---------+---------+---------+---- ビジーチェック 26L 2313 1111 0000 0000 0000 xxxx xxxx xxxx xxxR ○ m8 s2313 -----------------+-----+---------+---------+---------+---------+----
ページのTopへ
サイトのTopへ
法律条項 この資料により生じたいかなる障害や損害に対し、著者は全てを免責されるものとします。 この資料は、著作権法の下で保護され、入手先、著者、日付、法律条項を含んだ場合に複製が可能です。
inserted by FC2 system