www.mtkn.jp

Manuscripts for my personal webpage.
git clone https://git.mtkn.jp/www.mtkn.jp
Log | Files | Refs | README

commit 759a35c7c18993643862dda253235389b7878cc9
parent cc793257f48b24b47c5dbcc13680b34f4d66a7f2
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Thu, 20 Apr 2023 20:15:45 +0900

update

Diffstat:
Mman/draft/rp2040_1.html | 63++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------
Mpub/draft/rp2040_1.html | 64++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
Mpub/rss.xml | 4++--
3 files changed, 114 insertions(+), 17 deletions(-)

diff --git a/man/draft/rp2040_1.html b/man/draft/rp2040_1.html @@ -138,17 +138,17 @@ RP2040は電源を入れるといくつかの段階(ここでは関係ないの ---------------------------------------------------------------------- 000000110010001110101000000000101 |......| - 000000110010001110101000000000101 1バイト目の結果 + 110010001110101000000000101000000 1バイト目の結果 |......| 10000001 入力の2バイト目 ---------------------------------------------------------------- - 100000100010001110101000000000101 1バイト目の結果と2バイト目のXOR - 100000100110000010001110110110111 除数 + 010010011110101000000000101000000 1バイト目の結果と2バイト目のXOR + 100000100110000010001110110110111 除数 ---------------------------------------------------------------- - 000000000100001100100110110110010 - . - . - . + 000100011011010010001111100110111 + . + . + . </code></pre> <p> 以上の操作は以下のようなアルゴリズムのループで実装できる。\ @@ -167,7 +167,56 @@ RP2040は電源を入れるといくつかの段階(ここでは関係ないの 上の例では最初は<code>0x0</code>とXORを取っているが、この値を<code>0x0</code>\ 以外にすることもできる。そうした方がいろいろいいこともあるらしい。\ RP2040では<code>0xffffffff</code>を使う。\ +更にこの工程を32ビットの<code>int</code>だけで行うことを考える: </p> +<pre><code>\ +111000111000000110000110111000111000001010010011111000111000000110010011 入力(適当) + +11111111111111111111111111111111 0xffffffff +11100011000000000000000000000000 先頭1バイトを24ビットシフト +-------------------------------- XOR +00011100111111111111111111111111 +先頭1ビットが0なので1ビットシフト +-------------------------------- シフト +00111001111111111111111111111110 +先頭1ビットが0なので1ビットシフト +-------------------------------- シフト +01110011111111111111111111111100 +先頭1ビットが0なので1ビットシフト +-------------------------------- シフト +11100111111111111111111111111000 +先頭1ビットが1なので1ビットシフトした後、除数の下位32ビットとXOR: +11001111111111111111111111110000 シフト +00000100110000010001110110110111 除数の下位32ビット +-------------------------------- XOR +11001011001111101110001001000111 +先頭1ビットが1なので1ビットシフトした後、除数の下位32ビットとXOR: +10010110011111011100010010001110 +00000100110000010001110110110111 除数の下位32ビット +-------------------------------- XOR +10010010101111001101100100111001 +先頭1ビットが1なので1ビットシフトした後、除数の下位32ビットとXOR: +00100101011110011011001001110010 +00000100110000010001110110110111 除数の下位32ビット +-------------------------------- XOR +00100001101110001010111111000101 +先頭1ビットが0なので1ビットシフト +-------------------------------- シフト +01000011011100010101111110001010 +先頭1ビットが0なので1ビットシフト +-------------------------------- シフト +10000110111000101011111100010100 1バイト目の結果 + +10000001 入力の2バイト目 +-------------------------------- XOR +00000111111000101011111100010100 +先頭1ビットが0なので1ビットシフト +-------------------------------- シフト +00001111110001010111111000101000 +. +. +. +</code></pre> <p> これを実装したのが以下のコード:\ </p> diff --git a/pub/draft/rp2040_1.html b/pub/draft/rp2040_1.html @@ -119,17 +119,17 @@ RP2040は電源を入れるといくつかの段階(ここでは関係ないの ---------------------------------------------------------------------- 000000110010001110101000000000101 |......| - 000000110010001110101000000000101 1バイト目の結果 + 110010001110101000000000101000000 1バイト目の結果 |......| 10000001 入力の2バイト目 ---------------------------------------------------------------- - 100000100010001110101000000000101 1バイト目の結果と2バイト目のXOR - 100000100110000010001110110110111 除数 + 010010011110101000000000101000000 1バイト目の結果と2バイト目のXOR + 100000100110000010001110110110111 除数 ---------------------------------------------------------------- - 000000000100001100100110110110010 - . - . - . + 000100011011010010001111100110111 + . + . + . </code></pre> <p> 以上の操作は以下のようなアルゴリズムのループで実装できる。</p> @@ -143,7 +143,55 @@ RP2040は電源を入れるといくつかの段階(ここでは関係ないの </li> </ul> <p> -これを<code>for</code>ループで回す都合上、最初のバイトもXORを取る。上の例では最初は<code>0x0</code>とXORを取っているが、この値を<code>0x0</code>以外にすることもできる。そうした方がいろいろいいこともあるらしい。RP2040では<code>0xffffffff</code>を使う。</p> +これを<code>for</code>ループで回す都合上、最初のバイトもXORを取る。上の例では最初は<code>0x0</code>とXORを取っているが、この値を<code>0x0</code>以外にすることもできる。そうした方がいろいろいいこともあるらしい。RP2040では<code>0xffffffff</code>を使う。更にこの工程を32ビットの<code>int</code>だけで行うことを考える: +</p> +<pre><code>111000111000000110000110111000111000001010010011111000111000000110010011 入力(適当) +|......| +11111111111111111111111111111111 0xffffffff +11100011000000000000000000000000 先頭1バイトを24ビットシフト +-------------------------------- XOR +00011100111111111111111111111111 +先頭1ビットが0なので1ビットシフト +-------------------------------- シフト +00111001111111111111111111111110 +先頭1ビットが0なので1ビットシフト +-------------------------------- シフト +01110011111111111111111111111100 +先頭1ビットが0なので1ビットシフト +-------------------------------- シフト +11100111111111111111111111111000 +先頭1ビットが1なので1ビットシフトした後、除数の下位32ビットとXOR: +11001111111111111111111111110000 シフト +00000100110000010001110110110111 除数の下位32ビット +-------------------------------- XOR +11001011001111101110001001000111 +先頭1ビットが1なので1ビットシフトした後、除数の下位32ビットとXOR: +10010110011111011100010010001110 +00000100110000010001110110110111 除数の下位32ビット +-------------------------------- XOR +10010010101111001101100100111001 +先頭1ビットが1なので1ビットシフトした後、除数の下位32ビットとXOR: +00100101011110011011001001110010 +00000100110000010001110110110111 除数の下位32ビット +-------------------------------- XOR +00100001101110001010111111000101 +先頭1ビットが0なので1ビットシフト +-------------------------------- シフト +01000011011100010101111110001010 +先頭1ビットが0なので1ビットシフト +-------------------------------- シフト +10000110111000101011111100010100 1バイト目の結果 + +10000001 入力の2バイト目 +-------------------------------- XOR +00000111111000101011111100010100 +先頭1ビットが0なので1ビットシフト +-------------------------------- シフト +00001111110001010111111000101000 +. +. +. +</code></pre> <p> これを実装したのが以下のコード:</p> <pre><code>uint32_t diff --git a/pub/rss.xml b/pub/rss.xml @@ -5,8 +5,8 @@ <description>ウェブページの更新履歴</description> <language>ja-jp</language> <link>https://www.mtkn.jp</link> -<lastBuildDate>Thu, 20 Apr 2023 11:46:06 +0900</lastBuildDate> -<pubDate>Thu, 20 Apr 2023 11:46:06 +0900</pubDate> +<lastBuildDate>Thu, 20 Apr 2023 20:12:16 +0900</lastBuildDate> +<pubDate>Thu, 20 Apr 2023 20:12:16 +0900</pubDate> <docs>https://www.rssboard.org/rss-specification</docs> <item> <title>Xlibで遊んでみる6</title>