Docs/E2J/Propeller Guts.pdf
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
&size(20){''プロペラの深層に迫る文書''};
//邦題タイトル
&size(15){''原題:Early Propeller Chip Documentation rev....
//洋題タイトル
状態:''この文書は現在翻訳中です''
//もしくは''この文書の翻訳作業は完了しています''
原文:http://forums.parallax.com/showthread.php?83682-Pro...
//原文へのリンクなど
翻訳者: [[@ksksue>http://twitter.com/#!/ksksue]],[[@yishi...
//翻訳協力者のTwitterID,ハンドル名 例:@ksksue
対象読者:プロペラのブートシーケンス、アセンブラ仕様など...
//誰向けの文書か簡単に。例:アセンブラ超初心者
#contents
*ハードウェアについて [#id7226e1]
**リセット詳細 [#t446d738]
リセットが起こると、すべてのCOGはシャットダウンし、すべ...
高レベルコードとはプログラマの視点で言う初期化プログラ...
**COG詳細 [#f88274ba]
各Cogは512 x 32-bit レジスタ領域を持っています。最後の...
RAM領域は実行コード、データ、変数のために使われます。最後...
一つのCOGがブートされたとき、そのCONGのRAM記憶領域はメ...
ロードされた後、そのCOGで$000から命令の実行がスタートしま...
I/Oピンや消費電力といったすべての影響をキャンセルするた...
ひとつのCOGがストップされたときもしくはリセットが起こった...
下の表はCOG内の特殊レジスタの概要です。
|Address|Name|Access|Description|h
|$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)
** 現状未実装。予約領域。
COGは512個のレジスタ領域にある32bit命令を実行します。命...
一般的なアセンブリ命令のフォーマットは以下のようになって...
{アドレスラベル}{実行コンディション}命令 ディスティネー...
例:
entry rdlong temp,PAR wz 'wait for command (non-0)
if_z jmp #entry
32bit命令の詳細
|オペコード|Zフラグ|Cフラグ|結果更新|ソース即値|実行コン...
|31..26|25|24|23|22|21..18|17..9|8..0|
|iiiiii|z|c|r|i|cccc|ddddddddd|sssssssss|
|フィールド|範囲|説明|h
|オペコード|31..26|ADD, SUB, AND, OR, JMP など|
|実行エフェクト|25..23|1の場合それぞれCフラグ、Zフラグそ...
|ソース即値|22|1の場合bit8..0が32ビットの即値として扱われ...
|実行コンディション|21..18|CとZフラグの状態によって命令を...
|ディスティネーションレジスタ|17..9|1番目のレジスタ。|
|ソースレジスタor即値|8..0|2番目のレジスタもしくは即値|
**ソースレジスタ or 即値 [#x974c339]
@yishii翻訳中
この9ビットのフィールドは、インストラクションのソースとし...
ビット22に対して0をセットすることでレジスタ選択、または1...
アセンブリコードにおいては、 #シンボルは即値モードをセッ...
**ディスティネーションレジスタ [#dd3e46ef]
@yishii翻訳中
この9ビットのフィールドは、インストラクションのディスティ...
**実行コンディション [#m35efb4f]
**実行エフェクト [#d9a3a046]
*HUB命令 [#g74e2afb]
**メインメモリアクセス [#p86e85af]
**CLKレジスタ書き込み [#i11f8854]
**COG制御 [#s18a4188]
@ksksue翻訳中
COGのスタートとストップを管理する3つのHUB命令があります。
COGID D `このCOG番号をDへ保存
COGINT D `Dに従ってCOGを初期化
COGSTOP D `COG番号Dをストップ
COGID命令でDへCOG番号を保存します。この命令は、そのCOG...
COGINIT命令はCOGをスタートもしくはリスタートさせます。...
+どのCOGがスタートするか
+メインメモリのどこからプログラムが始まるか、
+PARレジスタに何が含まれているか
この3つのフィールドを決定する情報を含んでいます。
スタートするCOGのPARレジスタのビット[15..2]をD[31..18]...
**LOCK使用方法 [#x6e0af98]
*分岐命令 [#a90af3cd]
*加算、減算、比較命令 [#f91658b7]
*乗算、除算、平方根命令 [#oae06a90]
*ウェイト命令 [#t5f8b709]
*メインメモリ [#db734528]
@yishii翻訳中
|アドレス範囲|メモリータイプ|内容|
|$0000-$7FFF|RAM|ユーザーメモリ – 8,192 longs / 16,...
|$8000-$BFFF|ROM|キャラクター定義 – 4,096 longs 256...
|$C000-$CFFF|ROM|対数テーブル – 2,048 words of frac...
|$D000-$DFFF|ROM|逆対数テーブル – 2,048 words of to...
|$E000-$F001|ROM|正弦テーブル – 2,049 unsigned word...
|$F002-$FFFF|ROM|ブートと割り込みプログラム|
ROM内テーブルは、アセンブリ言語で容易に高速なリアルタイム...
High-level programs may not find much direct use for thi...
**ユーザメモリ($0000-$7FFF) [#hd3dfc0a]
@yishii翻訳中
メインメモリーの前半は全てRAMである。この領域は、ユーザー...
本領域へは、シリアルインターフェースまたは外部EEPROMから...
ユーザープログラムは $0010 から開始する。この領域以降、 $...
この領域に格納されている、long長のマスタークロック周波数(...
もし、ユーザープログラムがグローバルクロックレジスタを変...
上位プログラムからは、マスタークロック周波数は、 'FREQ' ...
グローバルクロックレジスタ値のコピーへの読み書きアクセス...
**キャラクタ定義($8000-$BFFF) [#x0839f31]
**対数、逆対数テーブル($C000-$DFFF) [#e2335409]
**対数テーブル($C000-$CFFF) [#x107ae69]
**逆対数テーブル($D000-$DFFF) [#z9556c3c]
**サインテーブル($E000-$F001) [#ta5ffeba]
**ブートプログラムとインタプリタ($F002-$FFFF) [#l71eeb17]
ROMの最後のパートにはブートプログラムとインタプリタが置...
ブートプログラムはリセットされたら自動的に実行され、チ...
インタプリタは高レベルプログラムを実行します。そして、...
*グローバルクロックレジスタ [#f1e4f778]
@yishii 翻訳中
グローバルクロックレジスタは、チップのマスタークロック源...
このクロックレジスタに書き込みが発生した時には、クロック...
このレジスタが変更された際には、レジスタ値のコピーを BYTE...
これでオブジェクトは現在の情報を参照し、それぞれのタイミ...
このクロックレジスタは以下で構成されている。
|Bit|7|6|5|4|3|2|1|0|h
|Name|RESET|PLLENA|OSCENA|OSCM1|OSCM0|CLKSEL2|CLKSEL1|CLK...
~
|RESET|動作内容|h
|0|チップをリセットしない場合は '0' を書く|
|1|ハードウェアリセット。チップはリブートする|
~
|PLLENA|動作内容|h
|0|全PLL回路を無効にする|
|1|PLL回路を有効にする。PLLは内部でXINからの入力周波数を1...
~
|OSCENA|動作内容|h
|0|OSC回路を無効にする|
|1|OSC回路を有効にし、XINからのクロック入力、もしくはXIN...
~
|OSCM1|OSCM0|XOUT抵抗値|XIN/XOUT容量|周波数範囲|h
|0|0|無限大|6pF (パッドのみ)|DC to 80MHz Input|
|0|1|2000 Ω|36pF|4MHz 〜 16MHz 水晶/セラミック発振子|
|1|0|1000 Ω|26pF|8MHz 〜 32MHz 水晶/セラミック発振子|
|1|1|500 Ω|16pF|20MHz 〜 60MHz 水晶/セラミック発振子|
~
|CLKSEL2|CLKSEL1|CLKSEL0|マスタークロック|クロック源|備考|h
|0|0|0|〜12MHz|内部|外付け部品不要。8MHz〜20MHz|
|0|0|1|〜20KHz|内部|超低電力。13kHz〜33kHz|
|0|1|0|XIN|OSC|OSCENAは'1'をセットすること|
|0|1|1|XIN × 1|OSC+PLL|OSCENAとPLLENAは'1'をセットすること|
|1|0|0|XIN × 2|OSC+PLL|OSCENAとPLLENAは'1'をセットすること|
|1|0|1|XIN × 4|OSC+PLL|OSCENAとPLLENAは'1'をセットすること|
|1|1|0|XIN × 8|OSC+PLL|OSCENAとPLLENAは'1'をセットすること|
|1|1|1|XIN × 16|OSC+PLL|OSCENAとPLLENAは'1'をセットするこ...
* 更新履歴[#f49dd2e2]
2011/12/19:「ソースレジスタ or 即値」「ディスティネーショ...
2011/12/18:「リセット詳細」追記(@ksksue), 「ブートプログ...
2011/12/17:ページ作成。「COG詳細」「COG制御」追記(@ksksue)
終了行:
&size(20){''プロペラの深層に迫る文書''};
//邦題タイトル
&size(15){''原題:Early Propeller Chip Documentation rev....
//洋題タイトル
状態:''この文書は現在翻訳中です''
//もしくは''この文書の翻訳作業は完了しています''
原文:http://forums.parallax.com/showthread.php?83682-Pro...
//原文へのリンクなど
翻訳者: [[@ksksue>http://twitter.com/#!/ksksue]],[[@yishi...
//翻訳協力者のTwitterID,ハンドル名 例:@ksksue
対象読者:プロペラのブートシーケンス、アセンブラ仕様など...
//誰向けの文書か簡単に。例:アセンブラ超初心者
#contents
*ハードウェアについて [#id7226e1]
**リセット詳細 [#t446d738]
リセットが起こると、すべてのCOGはシャットダウンし、すべ...
高レベルコードとはプログラマの視点で言う初期化プログラ...
**COG詳細 [#f88274ba]
各Cogは512 x 32-bit レジスタ領域を持っています。最後の...
RAM領域は実行コード、データ、変数のために使われます。最後...
一つのCOGがブートされたとき、そのCONGのRAM記憶領域はメ...
ロードされた後、そのCOGで$000から命令の実行がスタートしま...
I/Oピンや消費電力といったすべての影響をキャンセルするた...
ひとつのCOGがストップされたときもしくはリセットが起こった...
下の表はCOG内の特殊レジスタの概要です。
|Address|Name|Access|Description|h
|$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)
** 現状未実装。予約領域。
COGは512個のレジスタ領域にある32bit命令を実行します。命...
一般的なアセンブリ命令のフォーマットは以下のようになって...
{アドレスラベル}{実行コンディション}命令 ディスティネー...
例:
entry rdlong temp,PAR wz 'wait for command (non-0)
if_z jmp #entry
32bit命令の詳細
|オペコード|Zフラグ|Cフラグ|結果更新|ソース即値|実行コン...
|31..26|25|24|23|22|21..18|17..9|8..0|
|iiiiii|z|c|r|i|cccc|ddddddddd|sssssssss|
|フィールド|範囲|説明|h
|オペコード|31..26|ADD, SUB, AND, OR, JMP など|
|実行エフェクト|25..23|1の場合それぞれCフラグ、Zフラグそ...
|ソース即値|22|1の場合bit8..0が32ビットの即値として扱われ...
|実行コンディション|21..18|CとZフラグの状態によって命令を...
|ディスティネーションレジスタ|17..9|1番目のレジスタ。|
|ソースレジスタor即値|8..0|2番目のレジスタもしくは即値|
**ソースレジスタ or 即値 [#x974c339]
@yishii翻訳中
この9ビットのフィールドは、インストラクションのソースとし...
ビット22に対して0をセットすることでレジスタ選択、または1...
アセンブリコードにおいては、 #シンボルは即値モードをセッ...
**ディスティネーションレジスタ [#dd3e46ef]
@yishii翻訳中
この9ビットのフィールドは、インストラクションのディスティ...
**実行コンディション [#m35efb4f]
**実行エフェクト [#d9a3a046]
*HUB命令 [#g74e2afb]
**メインメモリアクセス [#p86e85af]
**CLKレジスタ書き込み [#i11f8854]
**COG制御 [#s18a4188]
@ksksue翻訳中
COGのスタートとストップを管理する3つのHUB命令があります。
COGID D `このCOG番号をDへ保存
COGINT D `Dに従ってCOGを初期化
COGSTOP D `COG番号Dをストップ
COGID命令でDへCOG番号を保存します。この命令は、そのCOG...
COGINIT命令はCOGをスタートもしくはリスタートさせます。...
+どのCOGがスタートするか
+メインメモリのどこからプログラムが始まるか、
+PARレジスタに何が含まれているか
この3つのフィールドを決定する情報を含んでいます。
スタートするCOGのPARレジスタのビット[15..2]をD[31..18]...
**LOCK使用方法 [#x6e0af98]
*分岐命令 [#a90af3cd]
*加算、減算、比較命令 [#f91658b7]
*乗算、除算、平方根命令 [#oae06a90]
*ウェイト命令 [#t5f8b709]
*メインメモリ [#db734528]
@yishii翻訳中
|アドレス範囲|メモリータイプ|内容|
|$0000-$7FFF|RAM|ユーザーメモリ – 8,192 longs / 16,...
|$8000-$BFFF|ROM|キャラクター定義 – 4,096 longs 256...
|$C000-$CFFF|ROM|対数テーブル – 2,048 words of frac...
|$D000-$DFFF|ROM|逆対数テーブル – 2,048 words of to...
|$E000-$F001|ROM|正弦テーブル – 2,049 unsigned word...
|$F002-$FFFF|ROM|ブートと割り込みプログラム|
ROM内テーブルは、アセンブリ言語で容易に高速なリアルタイム...
High-level programs may not find much direct use for thi...
**ユーザメモリ($0000-$7FFF) [#hd3dfc0a]
@yishii翻訳中
メインメモリーの前半は全てRAMである。この領域は、ユーザー...
本領域へは、シリアルインターフェースまたは外部EEPROMから...
ユーザープログラムは $0010 から開始する。この領域以降、 $...
この領域に格納されている、long長のマスタークロック周波数(...
もし、ユーザープログラムがグローバルクロックレジスタを変...
上位プログラムからは、マスタークロック周波数は、 'FREQ' ...
グローバルクロックレジスタ値のコピーへの読み書きアクセス...
**キャラクタ定義($8000-$BFFF) [#x0839f31]
**対数、逆対数テーブル($C000-$DFFF) [#e2335409]
**対数テーブル($C000-$CFFF) [#x107ae69]
**逆対数テーブル($D000-$DFFF) [#z9556c3c]
**サインテーブル($E000-$F001) [#ta5ffeba]
**ブートプログラムとインタプリタ($F002-$FFFF) [#l71eeb17]
ROMの最後のパートにはブートプログラムとインタプリタが置...
ブートプログラムはリセットされたら自動的に実行され、チ...
インタプリタは高レベルプログラムを実行します。そして、...
*グローバルクロックレジスタ [#f1e4f778]
@yishii 翻訳中
グローバルクロックレジスタは、チップのマスタークロック源...
このクロックレジスタに書き込みが発生した時には、クロック...
このレジスタが変更された際には、レジスタ値のコピーを BYTE...
これでオブジェクトは現在の情報を参照し、それぞれのタイミ...
このクロックレジスタは以下で構成されている。
|Bit|7|6|5|4|3|2|1|0|h
|Name|RESET|PLLENA|OSCENA|OSCM1|OSCM0|CLKSEL2|CLKSEL1|CLK...
~
|RESET|動作内容|h
|0|チップをリセットしない場合は '0' を書く|
|1|ハードウェアリセット。チップはリブートする|
~
|PLLENA|動作内容|h
|0|全PLL回路を無効にする|
|1|PLL回路を有効にする。PLLは内部でXINからの入力周波数を1...
~
|OSCENA|動作内容|h
|0|OSC回路を無効にする|
|1|OSC回路を有効にし、XINからのクロック入力、もしくはXIN...
~
|OSCM1|OSCM0|XOUT抵抗値|XIN/XOUT容量|周波数範囲|h
|0|0|無限大|6pF (パッドのみ)|DC to 80MHz Input|
|0|1|2000 Ω|36pF|4MHz 〜 16MHz 水晶/セラミック発振子|
|1|0|1000 Ω|26pF|8MHz 〜 32MHz 水晶/セラミック発振子|
|1|1|500 Ω|16pF|20MHz 〜 60MHz 水晶/セラミック発振子|
~
|CLKSEL2|CLKSEL1|CLKSEL0|マスタークロック|クロック源|備考|h
|0|0|0|〜12MHz|内部|外付け部品不要。8MHz〜20MHz|
|0|0|1|〜20KHz|内部|超低電力。13kHz〜33kHz|
|0|1|0|XIN|OSC|OSCENAは'1'をセットすること|
|0|1|1|XIN × 1|OSC+PLL|OSCENAとPLLENAは'1'をセットすること|
|1|0|0|XIN × 2|OSC+PLL|OSCENAとPLLENAは'1'をセットすること|
|1|0|1|XIN × 4|OSC+PLL|OSCENAとPLLENAは'1'をセットすること|
|1|1|0|XIN × 8|OSC+PLL|OSCENAとPLLENAは'1'をセットすること|
|1|1|1|XIN × 16|OSC+PLL|OSCENAとPLLENAは'1'をセットするこ...
* 更新履歴[#f49dd2e2]
2011/12/19:「ソースレジスタ or 即値」「ディスティネーショ...
2011/12/18:「リセット詳細」追記(@ksksue), 「ブートプログ...
2011/12/17:ページ作成。「COG詳細」「COG制御」追記(@ksksue)
ページ名: