*プロペラ アセンブラに関する文書 [#e2f15ed5] 原文のPDF http://forums.parallax.com/showthread.php?83682-Propeller-Guts-Download #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]へ書き込みます。