| Gコード3桁までの仕組みを徹底解説 |
3桁までは、Gコードに含まれている要素は、チャンネル4種類、開始時刻、録画時間のパターン8種類、日付31種類の992通りです。
4桁以上の解説は、3桁までが理解できないと、わけがわからなくなりますので、興味がある方は、ぜひ理解してください。
まず、チャンネル(C)・時刻(T)・日付(D)のそれぞれの要素を2進数に分解して、合成してGコードを作成しています。
|
チャンネルの要素(C) |
||
| C1 | C0 | チャンネル |
| 0 | 0 | 80(NHK-G) |
| 0 | 1 | 90(NHK-E) |
| 1 | 0 | 04 |
| 1 | 1 | 06 |
|
開始時刻と録画時間の要素(T) |
|||
| T2 | T1 | T0 | 開始時刻と録画時間 |
| 0 | 0 | 0 | 18:00から30分間 |
| 0 | 0 | 1 | 19:00から30分間 |
| 0 | 1 | 0 | 20:00から30分間 |
| 0 | 1 | 1 | 21:00から30分間 |
| 1 | 0 | 0 | 22:00から30分間 |
| 1 | 0 | 1 | 23:00から30分間 |
| 1 | 1 | 0 | 17:00から30分間 |
| 1 | 1 | 1 | 16:00から30分間 |
|
日付の要素(D) |
|||||
| D4 | D3 | D2 | D1 | D0 | 日付 |
| 0 | 0 | 0 | 0 | 0 | 1日 |
| 0 | 0 | 0 | 0 | 1 | 2日 |
| 0 | 0 | 0 | 1 | 0 | 3日 |
|
途中略 |
|||||
| 1 | 1 | 1 | 0 | 0 | 29日 |
| 1 | 1 | 1 | 0 | 1 | 30日 |
| 1 | 1 | 1 | 1 | 0 | 31日 |
| 1 | 1 | 1 | 1 | 1 | (エラー) |
私の解析により、2進数で、D4 D3 D2 D1 D0 T2 C1 T1 C0 T0 の順で合成してGコードが作成されていることが分かっています。
しかし、ただ合成するだけではなく、同じ日、チャンネル、録画時間帯の場合で、予約する月だけが違う場合は、
Gコードが同じにならないようになってます。どのような仕組みかというと、上記の下位5ビットT2 C1 T1 C0 T0に
月の要素を加えています。ただ、この要素の加え方がかなり複雑で、月の数+1と日の数を掛けた値を下位5ビットから引いて、
その下位5ビットを取り出しています。
例を1日の場合で説明します。この場合は、日付の要素の上位5ビットは、すべて0です。
1月で90chで18:00から30分間の場合、日付とチャンネルを合成すると、下位5ビットは、 0 0 0 1 0 となり、
単純に合成した数値は、0 0 0 0 0 0 0 0 1 0 となります。ここで、月の要素を加えます。
月の数と日の数を掛けた値は、(1月+1)×1日=2となります。2進数で2は、0 0 0 0 0 0 0 0 1 0 です。
単純に合成した数値から、2を引くと、0 0 0 0 0 0 0 0 0 0となります。これに1を加えると
0 0 0 0 0 0 0 0 0 1 = 1(10進数)になり、1桁の場合は、それがGコードになります。
2月の6chで18:00から30分間の場合、下位5ビットは、0
1 0 1 0 となり、(1日なので、上位5ビットは、すべて0です。)
月の数と日の数を掛けた値は、(2月+1)×1日=3となり、差し引くと、0 0 1 1 1となります。これに1を加えると
Gコードが 0 1 0 0 0 = 8になります。
これは、1桁の場合は、これで終わりですが、2桁以上になるとさらに特殊な操作が必要になります。
1月の4chで21:00から30分間の場合、単純合成では、下位5ビットは、0
1 1 0 1 となり、
月の数と日の数を掛けた値は、(1月+1)×1日=2となり、差し引くと、0 1 0 1 1となります。
これに1を加えると0 1 1 0 0 = 12(10進数)となります。ただ、12がGコードではありません。
ここで、新たな法則によって計算しなければ、いけません。
Gコード10の位 = 単純合成の1の位× 7 + 単純合成の10の位 の下位1桁
Gコード1の位 = 単純合成の1の位 ←先ほどの1桁の場合は、これで問題なかったわけです。
この法則によって計算すると、
Gコード10の位 = 2× 7 + 1 = 15の下位1桁 = 5
Gコード1の位 = 2
これで、Gコードは、52になります。
ただ、この計算で問題が起こる場合があります。
1月で80chで18:00から30分間の場合、単純合成では、下位5ビットは、 0 0 0 0 0 ですが、
月の数と日の数を掛けた値は、(1月+1)×1日=2となり、差し引くと、1 1 1 1 0となります。
これに1を加えると1 1 1 1 1 = 31(10進数)となります。
法則によって計算すると、
Gコード10の位 = 1× 7 + 3 = 10の下位1桁 = 0
Gコード1の位 = 1
となり、作成したGコードが01となってしまいます。この場合は、この01をもう一度法則によって計算します。
Gコード10の位 = 1 × 7 + 0 = 7
Gコード1の位 = 1
となりGコードが71になり、正しくなります。
3桁以上がどうなるかを説明します。
1月4日で80chで18:00から30分間の場合、単純合成では、0 0 0 1 1 0 0 0 0 0 です。
月の数と日の数を掛けた値は、(1月+1)×4日=8となり、差し引くと、下位5ビットは、1 1 0 0 0となります。
1 1 0 0 0に1を加えると1 1 0 0 1 となります。日付を合成して、0 0 0 1 1 1 1 0 0 1 = 121(10進数)
になります。
Gコード1の位は、1で確定。
Gコード10の位は、1×7 + 2 = 9
Gコード100の位は、また新たな法則で計算しなければいけません。
Gコード100の位 = 単純合成の1の位× 3 + 単純合成の10の位 × 7 + 単純合成の100の位
という式を使います。
Gコード100の位は、1×3 + 2×7 + 1 = 18の下1桁 = 8
よって、Gコードは、891となります。
この法則にしたがって作成したGコードが、001や033など、上1桁が0の場合は、先ほど同様に、
作成したコードを単純合成値として、上1桁が0にならなくなるまで、計算を繰り返します。
合成のやり方に戻りますが、
| 要素 | D4 | D3 | D2 | D1 | D0 | T2 | C1 | T1 | C0 | T0 |
| 重み | 512 | 256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
となっているため、日付のビットD1,D0が1日(0,0)2日(0,1)3日(1,0)の場合は、単純合成100以上にならないので、
1日から3日までは、絶対Gコードは3桁にならないことがわかります。
また、1桁は、かならす1日になるということがわかります。
D4からD0まですべて1の場合(32日と設定している)、それ以下0の場合の単純合成値は、512+256+128+64+32=992
となります。1を加えて合成値は、993になります。この場合のGコードは103になり、実際には設定できません。
その他の設定できないGコードは、以下の通りです。
| 合成値 | 993 | 994 | 995 | 996 | 997 | 998 | 999 |
| Gコード | 103 | 474 | 745 | 536 | 387 | 658 | 929 |
合成値が1000以上になると、Gコードも4桁になります。4桁は、さらにチャンネル、時間設定を拡張しています。
以上お分かりいただけたでしょうか?