*プロペラ アセンブラに関する文書 [#e2f15ed5]


''※この文書は現在翻訳途中です''


原文のPDF
http://forums.parallax.com/showthread.php?83682-Propeller-Guts-Download

翻訳者: [[@ksksue>http://twitter.com/#!/ksksue]]

#contents

**Cog詳細 [#f88274ba]
 各Cogは512 x 32-bit レジスタ領域を持っています。最後の特殊レジスタ16個を除いて、この512個のレジスタはすべてRAMです。
RAM領域は実行コード、データ、変数のために使われます。最後の16個のレジスタはHUB、IOピン、ローカルCOGペリフェラルのインタフェースとして使われます。

 一つのCOGがブートされたとき、そのCONGのRAM記憶領域はメインメモリからシーケンシャルにロードされます。そしてその特殊レジスタはゼロにクリアされます。
ロードされた後、そのCOGで$000から命令の実行がスタートします。リセットが起こるか、自身もしくは他のCOGによってストップかリブートがかかるまで、コードが実行され続けます。

 I/Oピンや消費電力といったすべての影響をキャンセルするため、
ひとつのCOGがストップされたときもしくはリセットが起こった時、すべてのCOGのI/Oレジスタは即座に0クリアされます。

 下の表はCOG内の特殊レジスタの概要です。
|Address|Name|Access|Description|
|$000-$1EF|-|リード/ライト|汎用RAM|
|$1F0|PAR|リードオンリー*|ロングアドレスパラメータ|
|$1F1|CNT|リードオンリー*|システムカウンタ|
|$1F2|INA|リードオンリー*|P31〜P0の入力値|
|$1F3|INB|リードオンリー*|P63〜P32の入力値**|
|$1F4|OUTA|リード/ライト|P31〜P0の出力値|
|$1F5|OUTB|リード/ライト|P63〜P32の出力値**|
|$1F6|DIRA|リード/ライト|P31〜P0の方向制御|
|$1F7|DIRB|リード/ライト|P63〜P32の方向制御**|
|$1F8|CTRA|リード/ライト|カウンタA制御|
|$1F9|CTRB|リード/ライト|カウンタB制御|
|$1FA|FRQA|リード/ライト|カウンタA周波数|
|$1FB|FRQB|リード/ライト|カウンタB周波数|
|$1FC|PHSA|リード/ライト|カウンタAフェーズ|
|$1FD|PHSB|リード/ライト|カウンタBフェーズ|
|$1FE|VCFG|リード/ライト|ビデオコンフィグレーション|
|$1FF|CSCL|リード/ライト|ビデオスケール|
 *ソースレジスタとしてのみアクセス可能(例 MOV DEST, SOURCE)
 ** 現状未実装。予約領域。

 512COGは32bit命令を実行します。


**COG制御 [#s18a4188]
 COGのスタートとストップを管理する3つのHUB命令があります。

 COGID   D `このCOG番号をDへ保存
 COGINT  D `Dに従ってCOGを初期化
 COGSTOP D `COG番号Dをストップ

 COGID命令でDへCOG番号を保存します。この命令は、そのCOGをストップまたはリスタートさせるために、COGのID(全8個)を知るときに使用します。

 COGINIT命令はCOGをスタートもしくはリスタートさせます。レジスタ D は
+どのCOGがスタートするか
+メインメモリのどこからプログラムが始まるか、
+PARレジスタに何が含まれているか

 この3つのフィールドを決定する情報を含んでいます。

 スタートするCOGのPARレジスタのビット[15..2]をD[31..18]へ書き込みます。

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS