G400 PINファイル解析結果 レポート


G400のPINファイル

PINファイルとは、Matroxのビデオカード特有のもので、ビデオカードのEEPROM(Flash-ROM?)に書き込まれたビデオBIOSの領域の一部をテキストファイルとして出力したものです。
このPINファイルにはビデオカードが動作のための多くの指定(ビデオカード種類・コアクロック・メモリクロック・メモリアクセスタイミング・RAMDACクロック等)が記述されています。
逆を言えば、このPINファイルを書き換えて、その内容をVIDEOカードに書きこめば、グラフィックカードのチューンナップが可能なのです。

PINファイルの取得は progbios -d > mypins.txt と実行することで行うことが出来ます。
この作業により、mypins.txtというファイルにG400のPIN内容が記録されます。

逆に、PINファイルの内容ををG400に書きこむには progbios -s mypins.txt と実行します。
この作業の後マシンをリブートすることにより、変更が反映されます。
この書込作業は Safe mode Command Prompt Only でマシンを立ち上げなおして行いましょう。
また、CPU等は定格で行いましょう。

progbios.exeはBIOSアップデートファイルの中に含まれています。

ただし、異常な値をカードに書きこんだ場合は、最悪G400が故障することも考えられます。これらの作業は自己責任でお願いします。PINファイルによる書き換えもカードの改造にあたるため、メーカーの保証は無くなります。

PINファイルに付いてはいろいろなG400系サイトで解析記事を紹介しているので、そちらも参照してみるとよいでしょう。

MXINFO.exeというツールを使用すると、PINファイルの設定内容が解析できるようです。

PINファイルの変更の前に、エマージェンシーディスクを作成しておくことをお勧めします。(→FAQ16
うまく書き換えが行かなかった場合には、エマージェンシーディスクから立ち上げることで、元のBIOS・PINファイルに戻すことが出来ます。

MGATweakというツールを使用すると、各クロック・メモリアクセスタイミング・メモリウエイトタイミング等を変更することが出来ます。
あらかじめこのMGATweakを使用して動作チェックをしておきましょう。(→FAQ60

うさぎ家さんがPINファイル変更ツールである、”G400 PinFile Editor”を発表しました。
このページで紹介しているPINファイルの解析結果に関する内容確認・変更が可能です。

このソフトウェアは、メールウェアとなっており、使用するには専用掲示板にその旨を書きこむ必要があります。
私もベータテストをさせていただきましたが、使いやすいと思います。
残念ながら、このツールは現在配布中止になっています。

現在、「Crossing The Rubicon」、クロスさんHOMEPAGEの情報交換BBSでPINファイルについての解析・実験が行われており、このページもココの内容を参考にさせていただいています。


PINファイル解析結果


PINファイルに関しては、さまざまなWebページで解析が進んでいます。
いま、私が理解しているG400 PINファイルの情報は以下の通りです。


PINファイルは、テキストファイルで書かれています。

PINファイルの基本的なフォーマットは、

項目開始番地  項目長(Byte単位)  設定値 

となります。

先頭に”;”がついた行はコメント行として扱われます。

数字に関しては、
0xの付いた数字は、16進数(0-9,a-f)として扱われます。
そのままの数字は、10進数(0-9)として扱われます。

設定値に”’”で囲まれた値は、文字列として扱われます。


下の表では、その他に、0bが頭についた数字列が出てきますが、これは2進数(0,1)表現となります。

念のため、10進・16進・2進の変換表を用意しました。

G400 PINファイルの情報
(あくまで予想であるので、正確である保証はありません。)

項    目

G400 Dualhead 32MB

G400 MAX化例

PROGBIOSのバージョン[コメント] ;MGA Bios Programming Utility v1.93d ;MGA Bios Programming Utility v1.93d
 Matroxの(C)表示[コメント] ;(C) Matrox Graphics Inc. (1999) ;(C) Matrox Graphics Inc. (1999)
 [コメント] ; ;
PINファイル範囲クリア Fill: 0 127 0xFF Fill: 0 127 0xFF
 カードタイプ ;Matrox G400 AGP ;Matrox G400 AGP
BIOSのバージョン[コメント](V1.5 TVO) ;VGA Enabled - BIOS V1.5 TVO ;VGA Enabled - BIOS V1.5 TVO
Signature(PIN) 0 2 0x412e 0 2 0x412e
PINサイズ(128) 2 1 0x80 2 1 0x80
不明 3 1 0xff 3 1 0xff
PINS Version(4.1) 4 2 0x0401 4 2 0x0401
プログラム日付(1999-10-01)

BIOS(PINファイルを含む)を書き込んだ年月日

1〜 5bit:日
6〜 9bit:月
10〜16bit:年
6 2 0xc741 6 2 0xc741
BIOS書換回数(6)

最新PROGBIOS(v2.08.000d)では、
この項目の内容が16進表記で
PINファイルに出力されます。
例:8 2 0x0006
(要:注意)
8 2 6 8 2 6
カード種別(DH->MAX) 10 2 0x0300 10 2 0x0700
シリアルナンバー(XXXXXXXX) 12 16 'XXXXXXXX' 12 16 'XXXXXXXX'
カードバージョン(104) 28 6 '104' 28 6 '104'
PCB Version(906-1)

最新PROGBIOS(v2.08.000d)では、
この項目がPINファイルに出力
されません。(要:注意)

34 2 0x38a1 34 2 0x38a1
  36 2 0xfff0 36 2 0xfff0
Max VCO freq - SClkの1/4 38 1 75 38 1 90
Max VCO freq - PClkの1/4 39 1 75 39 1 90
RAMDACクロック(PClk)の1/4(CRTC1,8bpp) 40 1 75 40 1 90
RAMDACクロック(PClk)の1/4(CRTC1,16bpp) 41 1 75 41 1 90
RAMDACクロック(PClk)の1/4(CRTC1,24bpp) 42 1 75 42 1 90
RAMDACクロック(PClk)の1/4(CRTC1,32bpp) 43 1 75 43 1 90
RAMDACクロック(PClk)の1/4(CRTC2,16bpp) 44 1 34 44 1 34
RAMDACクロック(PClk)の1/4(CRTC2,32bpp) 45 1 34 45 1 34
不明 46 4 0 46 4 0
不明 50 1 0x3f 50 1 0x3f
不明 51 1 0xff 51 1 0xff
不明 52 1 0xff 52 1 0xff
不明 53 1 0xc2 53 1 0xc2
不明 54 1 0xff 54 1 0xff
コアクロック(GCLK)の値(VGA用)

(分周比(GCLK)を考えると基本クロック(SCLK)の1/2)
分周比(MCLK)を考えるとメモリクロックの1/2)
分周比(WCLK)を考えるとワープクロックの1/1)
55 1 82 55 1 82
GCLK 82MHz

SCLK 164
MCLK 164
WCLK 82

同左

メモリアクセスタイミング(VGA用)
と、言われているが詳細は不明。
[通常PIN55の値の1/2をセット]
56 1 41 56 1 41
各動作クロックの分周比(VGA用)
GCLK=1/2 MCLK=1/1 WCLK=1/2

コアクロック:
 1〜2bit目  クロックソース設定
        00:PCI
        01:PLL(通常はこれを選択)
        10:EXT
        11:AGP
 3bit目    予備
 4〜6bit目  分周比設定
        000:1/3 001:2/5
        010:4/9 011:1/2
        100:2/3 101:1/1
 7〜10bit目  adj設定
        0000:n/a 0001:3.0
        0010:3.5 0011:4.0
        0100:4.5 0101:5.0
        0110:5.5 0111:6.0
        1000:6.5 1001:7.0
        1010:7.5 1011:8.0
        1100:8.5 1101:9.0
        1110:9.5 1111:10.0

メモリクロック:
 11〜12bit目 クロックソース設定
        内容は1〜2bit目と同じ
 13bit目    予備
 14〜16bit目 分周比設定
        内容は4〜6bit目と同じ
 17〜20bit目 adj設定
        内容は7〜10bit目と同じ

ワープクロック:
 21〜22bit目 クロックソース設定
        内容は1〜2bit目と同じ
 23bit目    予備
 24〜26bit目 分周比設定
        内容は4〜6bit目と同じ
 27〜30bit目 adj設定
        内容は7〜10bit目と同じ
 31〜32bit目 予備

Takさんより情報をいただきました。ありがとうございます。

57 4 0x0190a419 57 4 0x0190a419
コアクロック :クロックソース設定 PLL
コアクロック :分周比設定 1/2
コアクロック :adj設定 n/a
メモリクロック:クロックソース設定 PLL
メモリクロック:分周比設定 1/1
メモリクロック:adj設定 n/a
ワープクロック:クロックソース設定 PLL
ワープクロック:分周比設定 1/2
ワープクロック:adj設定 n/a

同左


標準設定(0x0190a419
       ←32Bit                                   1Bit→
PIN 0x 0 1 9 0 A 4 1 9
PIN 0b 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1 0 0 1
X X 0000 011 X 01 0000 101 X 01 0000 011 X 01
設定値 X X n/a 1/2 X PLL n/a 1/1 X PLL n/a 1/2 X PLL
有効範囲 X X ワープクロック メモリクロック コアクロック

デフォルトの場合、コアクロックとワープクロックには同じ分周比が使われています。
これを片側だけ分周比を変更するなどして非同期にした場合、
システムが不安定になったり、場合によっては画面が表示されなくなることがあります。
コアクロックとワープクロックには同じ分周比をセットした方が安全です。

adj設定は、分周比が2/3 or 4/9 のときに必須になります。
この値が小さいと、ノイズが出やすくフリーズしにくくなり、
大きいと、ノイズが出にくくフリーズしやすくなるようです。

メモリウエイトタイミング(VGA用)

1〜3bit目  CAS latency
       (000:2〜011:5Cycle)
4       未使用
5〜6bit目  Minimum RAS-to-RAS delay
       (00:1〜11:4Cycle)
7       未使用
8〜9bit目  Minimum RAS-to-CAS delay
       (00:2〜11:5Cycle)
10      未使用
11〜13bit目 Minimum RAS active time
       (000:3〜111:10Cycle)
14      未使用
15〜16bit目 Minimum RAS-to-Precharge delay
       (00:2〜11:5Cycle)
17〜18bit目  未使用
19〜20bit目 Minimum Write Recovery delay
       (00:1〜01:2Cycle)
21      未使用
22      Minimum Read-to-Precharge delay
       (0:fast〜1:slow)
23      未使用
24〜25bit目 Minimum Special Mode Register delay
       (00:1〜01:2Cycle)
26      未使用
27〜28bit目 Minimum Block Write Cycle delay
       (00:1〜01:2Cycle)
29      未使用
30〜32bit目 Minimum Block Write-to-Precharge
       delay(000:1〜101:6Cycle)

SH,DHとMAXとの違い        SH,DH MAX
 Minimum RAS-to-CAS delay     3 <-> 4 Cycle
 Minimum RAS active time     8 <-> 9 Cycle
 Minimum RAS-to-Precharge delay  3 <-> 4 Cycle
 Minimum Block Write Cycle delay 2 <-> 1 Cycle  

Takさんより情報をいただきました。ありがとうございます。

61 4 0x24045491 61 4 0x20049911
CAS latency 3
Minimum RAS-to-RAS delay 2
Minimum RAS-to-CAS delay 3
Minimum RAS active time 8
Minimum RAS-to-Precharge delay 3
Minimum Write Recovery delay 2
Minimum Read-to-Precharge delay fast
Minimum Special Mode Register delay 1
Minimum Block Write Cycle delay 2
Minimum Block Write-to-Precharge delay 2
CAS latency 3
Minimum RAS-to-RAS delay 2
Minimum RAS-to-CAS delay 4
Minimum RAS active time 9
Minimum RAS-to-Precharge delay 4
Minimum Write Recovery delay 2
Minimum Read-to-Precharge delay fast
Minimum Special Mode Register delay 1
Minimum Block Write Cycle delay 1
Minimum Block Write-to-Precharge delay 2
SH,DHの標準設定(0x24045491
         ←32Bit                                    1Bit→
PIN 0x 2 4 0 4 5 4 9 1
PIN 0b 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 1 0 0 1 0 0 1 0 0 0 1
001 0 01 0 00 0 0 0 01 00 01 0 101 0 01 0 01 0 001
変換値
(G200CLK)
1 X 1 X 0 X 0 X 1 X 1 X 5 X 1 X 1 X 1
設定値
(MGA Tweak)
2   2   1   fast   2   3   8   3   2   3


MAXの
標準設定(0x20049911

PIN 0x 2 0 0 4 9 9 1 1
PIN 0b 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 0 1 0 0 0 1
001 0 00 0 00 0 0 0 01 00 10 0 110 0 10 0 01 0 001
変換値
(G200CLK)
1 X 0 X 0 X 0 X 1 X 2 X 6 X 2 X 1 X 1
設定値
(MGA Tweak)
2   1   1   fast   2   4   9   4   2   3


MGA Tweak
でのお勧め設定(0x00005481

PIN 0x 0 0 0 0 5 4 8 1
PIN 0b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 0 0 0 0 0 1
000 0 00 0 00 0 0 0 00 00 01 0 101 0 01 0 00 0 001
変換値
(G200CLK)
0 X 0 X 0 X 0 X 0 X 1 X 5 X 1 X 0 X 1
設定値
(MGA Tweak)
1   1   1   fast   1   3   8   3   1   3
コアクロック(GCLK)の値(3D用)

(分周比(GCLK)を考えると基本クロック(SCLK)の1/2)
分周比(MCLK)を考えるとメモリクロックの3/4)
分周比(WCLK)を考えるとワープクロックの1/1)
65 1 126 65 1 150
GCLK 126MHz

SCLK 252
MCLK 168
WCLK 126
GCLK 150MHz

SCLK 300
MCLK 200
WCLK 150
メモリアクセスタイミング(3D用)
と、言われているが詳細は不明。
[通常PIN65の値の1/2をセット]
66 1 63 66 1 75
各動作クロックの分周比(3D用)
GCLK=1/2 MCLK=2/3 WCLK=1/2
(
詳細はPIN57番と同じ)
67 4 0x019b8419 67 4 0x019b8419
コアクロック :クロックソース設定 PLL
コアクロック :分周比設定 1/2
コアクロック :adj設定 n/a
メモリクロック:クロックソース設定 PLL
メモリクロック:分周比設定 2/3
メモリクロック:adj設定 8
ワープクロック:クロックソース設定 PLL
ワープクロック:分周比設定 1/2
ワープクロック:adj設定 n/a

同左

標準設定(0x019b8419
       ←32Bit                                   1Bit→
PIN 0x 0 1 9 B 8 4 1 9
PIN 0b 0 0 0 0 0 0 0 1 1 0 0 1 1 0 1 1 1 0 0 0 0 1 0 0 0 0 0 1 1 0 0 1
X X 0000 011 X 01 1011 100 X 01 0000 011 X 01
設定値 X X n/a 1/2 X PLL 8 2/3 X PLL n/a 1/2 X PLL
有効範囲 X X ワープクロック メモリクロック コアクロック
メモリウエイトタイミング(3D用)
(
詳細はPIN61番と同じ)
[
設定値はPIN61番と同じ]
71 4 0x24045491 71 4 0x20049911
CAS latency 3
Minimum RAS-to-RAS delay 2
Minimum RAS-to-CAS delay 3
Minimum RAS active time 8
Minimum RAS-to-Precharge delay 3
Minimum Write Recovery delay 2
Minimum Read-to-Precharge delay fast
Minimum Special Mode Register delay 1
Minimum Block Write Cycle delay 2
Minimum Block Write-to-Precharge delay 2
CAS latency 3
Minimum RAS-to-RAS delay 2
Minimum RAS-to-CAS delay 4
Minimum RAS active time 9
Minimum RAS-to-Precharge delay 4
Minimum Write Recovery delay 2
Minimum Read-to-Precharge delay fast
Minimum Special Mode Register delay 1
Minimum Block Write Cycle delay 1
Minimum Block Write-to-Precharge delay 2
コアクロック(GCLK)の値(2D用)

(分周比(GCLK)を考えると基本クロック(SCLK)の1/2)
分周比(MCLK)を考えるとメモリクロックの3/4)
分周比(WCLK)を考えるとワープクロックの1/1)
75 1 126 75 1 150
GCLK 126MHz

SCLK 252
MCLK 168
WCLK 126
GCLK 150MHz

SCLK 300
MCLK 200
WCLK 150
メモリアクセスタイミング(2D用)
と、言われているが詳細は不明。
[通常PIN75の値の1/2をセット]
76 1 63 76 1 75
各動作クロックの分周比(2D用)
GCLK=1/2 MCLK=2/3 WCLK=1/2
(
詳細はPIN57番と同じ)
[
設定値はPIN67番と同じ]
77 4 0x019b8419 77 4 0x019b8419
コアクロック :クロックソース設定 PLL
コアクロック :分周比設定 1/2
コアクロック :adj設定 n/a
メモリクロック:クロックソース設定 PLL
メモリクロック:分周比設定 2/3
メモリクロック:adj設定 8
ワープクロック:クロックソース設定 PLL
ワープクロック:分周比設定 1/2
ワープクロック:adj設定 n/a

同左

メモリウエイトタイミング(2D用)
(
詳細はPIN61番と同じ)
[
設定値はPIN61番と同じ]
81 4 0x24045491 81 4 0x20049911
CAS latency 3
Minimum RAS-to-RAS delay 2
Minimum RAS-to-CAS delay 3
Minimum RAS active time 8
Minimum RAS-to-Precharge delay 3
Minimum Write Recovery delay 2
Minimum Read-to-Precharge delay fast
Minimum Special Mode Register delay 1
Minimum Block Write Cycle delay 2
Minimum Block Write-to-Precharge delay 2
CAS latency 3
Minimum RAS-to-RAS delay 2
Minimum RAS-to-CAS delay 4
Minimum RAS active time 9
Minimum RAS-to-Precharge delay 4
Minimum Write Recovery delay 2
Minimum Read-to-Precharge delay fast
Minimum Special Mode Register delay 1
Minimum Block Write Cycle delay 1
Minimum Block Write-to-Precharge delay 2
不明 85 1 0xff 85 1 0xff
不明 86 2 0x0c88 86 2 0x0c88
不明 88 2 0x0c88 88 2 0x0c88
不明 90 1 0xee 90 1 0xee
Factory options1(搭載メモリ等)

16-16Bit:Block write(0:ON,1:OFF)
15-15Bit:Write mask(0:ON,1:OFF)
14-14Bit:using chips(0:16Mbit,1:32Mbit)
13-13Bit:RAM
種別(0:SGRAM,1:SDRAM)
11-12Bit:搭載メモリ量
  (00: 4MB)
  (01: 8MB)
  (10:16MB)
  (11:32MB)
10Bit:Extras1:
  (0:Vosc present on) 
  (1:Vosc present off )
9-9Bit:Fosc (0:27MHz,1:14.83MHz)
 
 注意:このBITを1にすると、
  マシンが立ち上がらなくなります。
  復旧には別にPCI VGAカードが必要です。
1Bit:Extras2:
  (0:Maven on )
  (1:Maven off)

91 2 0x2cfe
  (0b
0010110011111110)
91 2 0x2cfe
  (0b
0010110011111110)
Block write ON
Write mask ON
using chips 32Mbit
RAM種別 SGRAM
搭載メモリ量 32MB
Extras1 Vosc present on
Fosc 27MHz
Extras2 Maven on

同左

Factory options2(VGA出力系統数など)

4-4bit:VGA出力系統数[DDC LINE]
    (0:1
,1:2)
3-3bit:(0:DualHead,1:Single out)

93 2 0xfff9
  (0b111111111111
1001)
93 2 0xfff9
  (0b111111111111
1001)
VGA出力搭載数 2
VGA出力 DualHead

同左

系統系統
現在、VGA(PIN55-61)・3D(65-71)・2D(75-81)の各モードの定義の調査が
「Crossing The Rubicon」、クロスさんHOMEPAGEで行われています。

現在の状態では

VGA(Pin55-61) VGA画面(マシン起動直後やDOS全画面モード)
3D(Pin65-71) 8 Bitカラー時すべての解像度
24Bitカラー時すべての解像度
32bitカラー1152*864以上の解像度
のときの設定
2D(Pin75-81) 16Bitカラー時すべての解像度
32Bitカラー1024*768以下の解像度
のときの設定

が該当するのではないか。という話になっています。


G400シリーズのPINファイルの相違点

G400シリーズは基本的にPINファイルによってハードウェアスペックを設定しているようで、各モデルごとにほぼ一定のPINファイルパターンがあります。
以下の表は現在発売されている各G400シリーズのPINファイルの相違点のみを抽出した一覧表です。
黄色の枠は、DH 32MB SGRAMと内容が異なる部分です。
このほか、PIN6番・PIN8番の内容も変わっていますが、この部分はBIOSの書き換えのたびに変化するので、ここでは無視してかまわないでしょう。
(PINファイルは、ようちんさんのHP(黄金時代)のPINファイル倉庫のものを参考にさせていただきました。)[閉鎖されました]

PIN
番号
PINの意味(予想) SH 16MB
SDRAM
SH 16MB
SGRAM
SH 32MB
SGRAM
DH 16MB
SGRAM
DH 32MB
SGRAM
MAX 32MB
SGRAM
mavel G400-TV
16MB SGRAM
RT2000付属
DH 32MB
SGRAM
10 カード種別 0x0300 0x0300 0x0300 0x0300 0x0300 0x0700 0x0400 0x0300
12 シリアルナンバー VGAカードの固有の値(アルファベット3文字+数字5文字)
28 カードバージョン VGAカードの製造時期などにより異なる。(104,105,105A等)
34 PCBバージョン VGAカードの製造時期などにより異なる。(0x38a1,0x37b3等)
38 Max VCO freq - SClk 75 75 75 75 75 90 75 75
39 Max VCO freq - PClk 75 75 75 75 75 90 75 75
40 RAMDACクロックの1/4
(CRTC1,8bpp)
75 75 75 75 75 90 75 75
41 RAMDACクロックの1/4
(CRTC1,16bpp)
75 75 75 75 75 90 75 75
42 RAMDACクロックの1/4
(CRTC1,24bpp)
75 75 75 75 75 90 75 75
43 RAMDACクロックの1/4
(CRTC1,32bpp)
75 75 75 75 75 90 75 75
61 メモリウエイトタイミング
(VGA用)
0x24045491 0x24045491 0x24045491 0x24045491 0x24045491 0x20049911 0x24045491 0x20049911
65 コアクロック(GCLK)の値
(3D用)
126 124 126 126 126 150 126 100
66 メモリアクセスタイミング
(3D用)
63 62 63 63 63 75 63 50
57 各動作クロックの分周比
(3D用)
0x0190a419 0x0190a419 0x0190a419 0x0190a419 0x0190a419 0x0190a419 0x0190a419 0x019ba419
71 メモリウエイトタイミング
(3D用)
0x24045491 0x24045491 0x24045491 0x24045491 0x24045491 0x20049911 0x24045491 0x20049911
75 コアクロック(GCLK)の値
(2D用)
126 124 126 126 126 150 126 100
76 メモリアクセスタイミング
(2D用)
63 62 63 63 63 75 63 50
57 各動作クロックの分周比
(2D用)
0x0190a419 0x0190a419 0x0190a419 0x0190a419 0x0190a419 0x0190a419 0x0190a419 0x019ba419
81 メモリウエイトタイミング
(2D用)
0x24045491 0x24045491 0x24045491 0x24045491 0x24045491 0x20049911 0x24045491 0x20049911
91 Factory options1 0xdaff 0x2aff 0x2eff 0x28fe 0x2cfe 0x2cfe 0x28f2 0x2cfe
93 Factory options2 0xfffc 0xfff5 0xfff5 0xfff9 0xfff9 0xfff9 0xfffd 0xfff9

この表をみると、G400カードの種類は、PIN10番とPIN91番の組み合わせで判定できることになりますね。
(注:最新PROGBIOS(v2.08.000d)では、34番の項目は出力されません。)


10進・16進・2進の変換表

10進 16進
(0x)
2進
(0b)
備考
0 0 0000 10進・16進・2進の対応表は左表のとおりです。

10進数とは、ご存知のように”0”から”9”までの10個の数字を使用して数値を表す表記です。”9”の次は一桁増えて、”10”となります。
同様に
16進数とは”0”から”9””a”から”f”までの16個の数字を使用して数値を表す表記です。”f”の次は一桁増えて、”10”となります。
2進数とは”0”から”1”までの2個の数字を使用して数値を表す表記です。”1”の次は一桁増えて、”10”となります。

なぜ、このような表現をするのかというと、コンピュータは基本的に電圧の有無=”1”or”0”ですべてを表現します。
この最小単位をBitといいます。
通常コンピューターの世界では8Bit=1Byte単位で表現しますが、これで、”00000000””11111111”までの256通りの表現ができることになります。(これが2進数です。)

しかし、1byteの値を表記するのにわざわざ8桁の数字を書くのは大変です。
これを10進で表すと”000””255”となりますが、この場合には1byte表現するのに3桁を使用してしまうし、2Byteの値で、”00000001・11111111””001・255”とかくのもスマートではありません。
(この値に1を足してみると、10進で1Byteごとに表記すると”002・000”です。)

なので、8Bitの半分の4Bitごとに表現文字を割り当てて記述を簡略化することにしました。
この場合、”0000”から”1111”までの16通りとなるので、”0000””1001”までは、通常使用している”0”から”9”を、それ以降の足りない部分をアルファベットの"a""f"で表すことにしました。(これが16進数です。)

これで、1Byteの値は2進表現では”00000000””11111111”とされるところが、”00””ff”と2桁ちょうど(”ff”は2桁の16進数で一番大きい値です)で表現できます。
これで2Byteの値で”00000001・11111111”は16進で”01・ff”となり、非常にスマートに表記できることができます。
(この値に1を足してみると、16進で1Byteごとに表記すると”02・00”です。)

ただし、一度に複数の表現(10進・16進・2進)を表現すると、どれがどの表現の値なのかが混乱してしまいます。
このため、通常は、
10進数はそのまま書く。
16進数は頭に”0x”をつけるか、最後に”H”(Hex)を付けて書く。
2進数は頭に”0b”を付けるか、最後に”B”(Bin))を付けて書く。
という風に区別をします。

つまり、10 = 0x0a = 0aH = 0b1010 = 1010B となるわけです。

ちょっと難しくなりましたが、薀蓄話として覚えておいても損はないと思います。

1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
10 a 1010
11 b 1011
12 c 1100
13 d 1101
14 e 1110
15 f 1111
16 10 10000

G400活用レポートへ戻る
PCの間へ戻る
玄関へ戻る