thank you for your access

デジタル降魔録のトップへ




16進数に直してみます

74HC238

7セグメント表示器

ADPCM

AND

Bit

BIOS

CP/M

CPU

CR複合アレイ

FM音源

GM音源

GUI

ICE

I/O

MIDI

mS

MS-DOS

OR

OS

PCM

PIC

PSG

PWM

RAM

ROM

ROMエミュレータ-

VRAM

アートワーク

アドレス(address)

いも半田

逆アセンブル(Dis assemble)

高速クロックのPICでの出力ポートの注意点

ゲーム機の発色方法

最終兵器

システムコール

時分割

シャンパー

ジャンプ先のラベル管理

ステータスフラグ

スプライト

セマフォ

ソース

ダイオードロジック

ダイオードAND

ダイオードOR

ダイナミックスキャン

ダイナミック点灯

タッチ

デバッガー

デバグ(デバッグ)

トランジスタアレイの2003

入力ポートの保護回路

バイナリ

バイパスコンデンサ

バグ(bug)

バラック配線

発想の転換

発色数

ハンドアセンブル

暴走

マシン語/アセンブル/BASIC

超簡単モーターのブレーキ回路と正転・逆転回路

モニター/モニタープログラム

ラッツネスト

ランド

レジスタ

ロジアナ

ワークRAM

ワンパスアセンブラ




トップページへ





【16進数に直してみます】

[TOP]

 2進数や16進数を人間になじみの深い10進に変換する方法は簡単。
 まず各進数の表を作ってみた。

10進数 2進数 16進数
   0 0000    0
   1 0001    1
   2 0010    2
   3 0011    3
   4 0100    4
   5 0101    5
   6 0110    6
   7 0111    7
   8 1000    8
   9 1001    9
  10 1001    A
  11 1011    B
  12 1100    C
  13 1101    D
  14 1110    E
  15 1111    F

・・・・となる。
2進を16進に直すのはとても簡単である。たとえば〝11010011〝という2進数なら、
まず4つのグループに下の桁から別ける。
〝1101 0011〝  のようにする。
そして、上の表から16進を当てはめればよい。
〝D3〝   となる。
16進を10進に直すのは、ちと面倒になる。
たとえば、さきほどの0xD3(0D3H)←16進を書くときは頭に0xをつける方法と0をつけて最後に16進の頭文字(Hexadecimal)のHをつける流儀がある。最近はほとんど0xから始めるようだ。
を10進に直してみる。
2桁目のDは1桁目の0~Fの数値、すなわち16個の変化がD回あったと考える。Dは10進で13なので16の変化が13回あったことになるので13×16=208。そして1桁目が3なのでさらに3を加えて211になる。
3桁になっても簡単。
0xFD3なら、3桁目は0~FFの数値、すなわち16個の変化が16回=256の変化がF回あったことになるので、256×15=3840。2桁目は16×13=208。1桁目は3。で、全部足して4051になる。ようは16進の2桁目は16、3桁目は256、4桁なら、512と覚えておきあとは上の表の数だけ掛けたものを全部足せばいいのだ。
もっと楽に早い方法がある。Windowsに付いてくる電卓ソフトを使うのだ。
スタート→すべてのプログラム→アクセサリ→電卓 で開く。
左上に16進から2進まですべて計算できるようになっているのでコレを使おう。
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :

はじめから、そう言え!!







【74HC238】

[TOP]

 C-MOSタイプのデジタルICの一種。

G1=HiでG2a、G2b=Loの時、3本のA~Bの入力端子に与えられたバイナリ(2進)信号に対応した出力端子Y0~Y7にHiを出力するIC。一般的に〝3 to 8 Demultiplexer〟と呼ばれる。74LS138の出力反転タイプ。





【 7 Segment Dislay 】7セグメント表示器

[TOP]

 7個のLED(発光ダイオード)を〝8〟の字にセグメントとして並べて、光るセグメントを組み合わせて0~9や少しのアルファベットを表示させることのできる情報表示部品。
 セグメントは〝a〟~〝g〟まで名前がつけられていて、下記のように並べられている。数字の〝2〟を表現する時はセグメント〝a〟、〝b〟、〝g〟、〝e〟、〝d〟、を点灯させればよい。
 古臭い部品だが、値段も安く簡単に回路が組めるので、結構いまでも重宝されている。







【ADPCM(Adaptive Differential Pulse Coded Modulation)】エー・ディ・ピー・シー・エム

[TOP]

 適応差分PCMと呼ばれる方式で、純粋なPCMデータを圧縮してデータサイズを小さくする方式。
 PCMのままではデータが大きすぎて、業務用ゲーム機に使用するには音声データをROM化する時にコストが掛り過ぎる。そこで、音声データをADPCM方式で圧縮して、ADPCMのデコーダIC(元の音声データに戻すIC)で再生していた。mp3なども圧縮方式だが、mp3用のデコーダではコスト高になるのでADPCMを採用するのが一般的。
 よく使われていたADPCMデコーダICは沖電気のMSM6295やYAMAHAのYM2610などがあった。特にYM2610はFM音源も内蔵されていて、各社のゲーム機に数多く採用されていた。







【AND】アンド

[TOP]

 すべての入力がHiの時だけ出力がHiになるロジックゲート回路。詳しくはダイオードANDを参照





【Bit(BInary digiT)】ビット

[TOP]

 コンピューターで扱う情報量の基本単位。
 データ量を表すときは数ビットごとにまとめて、4ビットでニブル、8ビットでバイト(Byte)16ビットでワード(Word)、32ビットでダブル(ロング)ワード(Double Word)となる。
 昔はそのコンピュータが一度に扱えるデータの1単位をバイトと呼んでいた。1単位が16ビットのコンピュータなら16ビットでバイトとなっていた。しかし、あるときIBMが1バイト=8ビットと定めると、それがいつのまにか定着したそうだ。大きいものに巻かれたという感じだ。その方がわかりやすいのでいいけど・・・。

 メモリーの単位で何Kバイトとか何Mバイト(K=1000。キロではなく〝ケー〟と呼ぶそうだ。M=1000Kで、〝メガ〟と呼ぶ)というのがあるが、ようは8ビット単位のデータが、どれくらい記憶できるかということになる。ただし、1Kバイトというメモリーがあっても1000バイトちょうどの記憶容量があるというわけではない。正確には1024バイトになる。なぜかここらはアナログ的である。
 どういうことかというと、CPUは2進数で動いている。そこで当然アドレス空間もビットで表す。CPUにはアドレスラインという出力ピンが数十本あり、この出力の1,0の組み合わせでアドレスを決定している。たとえばアドレスピンを8本使えば00000000~11111111の8ビットで256のアドレスが作れる。(ちなみに、この場合1バイトのアドレスとは言わない。バイトやワードはデータを意味するからである)同じく8本のアドレス入力があるメモリーチップがあるとすると、1アドレスに1バイトのデータが記憶できるので、このメモリーチップは256バイトの記憶容量を持つ、ということになる。9本になると2倍の512バイトになり、10本で1024になる。コレが1Kバイトであって、ぴったり1000にならない理由である。昔なら2708というROMがこれにあたる。
 では、数百Mバイトにもなるメモリーにもアドレス線が何十本もあるのかというとそうではない。アドレスを指定するときに2回に分けて指定する方法をとっていて、アドレス線を半分で済ますようになっている。そのようなメモリーを何個も寄せ集めて、数百Mバイトのメモリーユニットは構成されている。
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :

私の脳みそは、ときどきアドレス線が接触不良を起こします。



昨日の晩ご飯のおかずは・・・・・?
   :
   :
う~ん・・・?
   :
   :
ビール・・・。
   :
   :
ほらね。
   :
   :






【BIOS(Basic Input Output System)】バイオス

[TOP]

 コンピュータの入出力機器を制御するプログラムの集まりのこと。
 BIOSはそのコンピュータのハードウエアを直接制御するプログラムなので、機種によって異なるが、ここがしっかりしていると、その上で走るアプリケーションの開発は楽になる。
 たとえば、キーボードから文字を入力するとき、ワープロソフトはキーボードのキーを検知する必要は無く、BIOSから入力されたキーコードを教えてもらうだけになる。縁の下の力持ち的存在である。
 ゲーム機のシステムにもBIOSはあり、ゲームが変わるたびに操作パネルの入力処理を作り直す必要は無い。





【CP/M(Contorl Program for Micro processor)】シ-ピーエム

[TOP]

 CP/Mはデジタルリサーチ社が開発したインテルのCPU〝8080〟向けのOS(オペレーティング システム)。
 いまのWindowsようにソフトウエアを動かすためのOSというより、ソフトウエアの開発者向けのOSとして使われていた。これは、当時、高級なツーパスアセンブラであるMACRO-80やプログラマー必須のWord-MasterがCP/Mで走っていたからである。もちろん8080の上位互換であるZ80でもちゃんと動く。
 なぜこのようなものが必要かというと、同じCPUを搭載しているにもかかわらずメーカーが異なるパソコンだと、入出力の部分はハードウエアの違いから互換性が無い。しかし、その部分まで考えたアプリケーションソフトをそのつど開発するにはあまりもたいへんになる。そこで、メーカーごとに違うハードウエアの基本的な入出力の処理をひとつにまとめて、OSの中にあるBIOSという部分に隠しこんでしまい、アプリケーションソフト側で入出力が必要になると、OSの仕様に従った方法でデータを送り込むだけで、あとはOSが処理してくれるという構造である。MS-DOSでいうシステムコールと呼ばれる方法である。というか、MS-DOSはCP/Mの延長線上にある。もっと、露骨にいうと、MS-DOSはCP/Mを真似たのである。

 ソフトウエア開発者が、いちいちその機種の入出力装置のアクセスの方法を考えなくてよいということは、本当に楽だった。たとえば、フロッピーディスクの複雑な書き込み/読み込み処理をいちいち作る必要はない。システムコールをするだけで、フロッピーディスクにデータを書き込んでくれた。
 ディスクドライブが普及していなかった1980年前半までの国産パソコンではCP/Mは浸透しなかったが、ドライブが普及し出してからは、BASICオンリーではなくCP/MをOSとするパソコンが数多く出現した。しかし、すぐに時代は16ビットに移りMS-DOSが登場。8ビット用のCP/Mは忘れられていった。
 筆者はCP/Mが登場してから7年以上経った1988年、ようやくそれを入手。これを通して、初めてMACRO-80というツーパスアセンブラに出会ったが、そのときすでに8ビット機の時代は終わっていた。
あ~ぁ。





【FM(Frequency Modulation)音源】エフ・エム・おんげん

[TOP]

 FM音源を教科書的な説明をすれば〝周波数変調方式で音を作る〟ということになる。むずかしいので大雑把に簡略して説明すると、海の波のような形をしている正弦波を複数加えて別の波形を作ったり、さらに音の立ち上がり方や余韻を加えたりして音そのものを作ること。ただ、操作がたいへん難しく、思ったような音が簡単にできたためしがなかった。しかし音はとても美しかった。
 業務用ゲーム機は、古くはICや抵抗などを使って音を作っていたが、その後PSGやFM音源、ADPCMなどを利用しだし、インパクトのある効果音や高度で美しい音楽を奏でるほどになった。
 ゲーム機でよく使われていたFM音源用のICはYAMAHAのYM2203、YM2151、YM2610などがあったが、なぜかICのロット番号を削って見えなくしているのが多かった。たぶん別ルートから流れて来て、表だっては使用できないものを使っていたのではないかと思われる。

 パソコンの場合もほぼ同じで、初めはPSGやFM音源が搭載されていたが、いまはPCMやGM音源がほとんどである。PCMはファイルのフォーマットの違いでMicroSoft Waveとか、マックのFIAAなどがあるが、ばかでかいファイルになってしまうので、すこし音が悪くなるがファイルを圧縮したmp3というのもある。GM音源というのはパソコンの中にいろんな楽器の音のデータが入った部品が入っており、それを使って音符どおりに順に演奏させるのだ。その操作をする方法がMIDIである。なので、MIDIのファイル(SMF)は音符の並びが書かれているだけなのでファイルが小さくてすむ。したがって、GM音源が入っていないパソコンでは鳴らすことはできない。





【GM(General MIDI)音源】ジーエム・おんげん

[TOP]

 MIDIの登場で電子楽器メーカーごとに異なっていた演奏情報と電気的な規格が統一されたが、音色が統一されておらず、同じMIDIのデータで演奏させてもピアノのパートがギターの音に変わってしまったりして、不具合が発生して完全な統合が取れていなかった。そこで、音色と音色番号を統一させたのがGM規格であり、その音色を搭載している音源をGM音源という。
 1番から128番の音色を持つ楽器を複数のパートに別け同時に演奏ができる。現代のパソコンのほとんどがこの装置を搭載している。





【GUI(Graphical User Interface)】ジーユーアイ

[TOP]

 コンピュータを操作するとき、キーボードから指令(コマンド)を入力するのではなく、画面上の図形や文字をマウスで選択して操作させる方法。
 入力コマンドを覚える必要もなく、絵柄などを使うので直感で理解でき、操作性が向上する。
 いまではWindowsの方が有名になっているが、1983年には、すでにアップル社がパソコンに取り入れていた。これはMS-DOSが登場する頃の話である。さすが、マック!
 UNIX(ユニックス)というOSには〝OPEN LOOK〟というGUIがあるそうだ。





【CPU(Central Processing Unit)】シーピーユー

[TOP]

 通常、中央演算処理装置などと仰々しく呼ばれているが、現在は1個の部品になっている。
 パソコンの中心的位置にあって、すべての処理をこの部品でやっている。ようは、メモリーに書かれているプログラムを読み込んで判断して処理をしている部分。  筆者は仕事柄この部品を使って制御機器を作っているので、コンピュータ全般を指すときに、つい”CPU”と呼んでしまう。
 昔は出し入れするデータの大きさでxxビットCPUと呼んでいたが、68000と呼ばれるCPUが登場してきたあたりから、内部で処理できる大きさでxxビットCPUと呼んでいるようだ。当時はビット数が大きいほど処理能力が高いといわれて各社競ってビット数を上げてきたが、いまでは、ビット数が大きくなりすぎて、それ以外のところで処理能力を競うようになっている。今のペンティアム4は何ビットCPUなのか知らない。64ビットなのか128ビットなのか、もうどうでもよくなって来ている。それより基板のプリントパターンのアートワークをする者の身になってくれ!
 CPUの速さの目安に、与えるクロックを持ち出すが、これももう光の速度に迫ろうとしている。ということはそろそろ意味をなさなくなる。(クロックって?)クロックというのは、今でもこのパソコンのクロックは2GHzとかカタログに載っている。あれのこと。
 ちなみに、クロック1GHzの速さは光(電気も一応同じ)が、だいたい30cm進む距離。3GHzになると、さらに3分の1の約10cmになる。
 クロックは限界の速度になっているのに、ソフトウエアの方が追いついていない感じがする。
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :

わたしの脳みそはとっくの昔についていけてません。(あはははは・・・。)












【CR Arrey】CR複合アレイ

[TOP]

 何本かの抵抗とコンデンサを組み合わせた回路が何組か入っている部品。バラの部品で組み立てるより、スペースをとらないので重宝する。


 上記の部品1個の中に下の図の回路が入っている。1個ずつ部品を実装するよりコンパクトに収まり実装時間もものすごく短縮できる。種類はものすごくある。上記はほんの一例。





【PIC(Peripheral Interface Controller)】ピック

[TOP]

 知っている人はたくさんいると思うが、簡単にいうとマイクロチップ・テクノロジー社が作ったワンチップCPUのコト。ワンチップというだけあってコレひとつでコンピュターを構成できる。もちろんパソコンのようにすごいことはできないが、一個の部品でコンピュータ化できるので、使い方によってはパソコンよりすごいかもしれない。ただ、かなり癖があるので他のCPUに慣れた人にはとっつきにくい。筆者もZ80や68000のCPUに慣れていたので、このCPUに初めて携わったときは目が点になった。RAMは少ないし、プログラムエリアはBANK切り換えでないと使用できなし、その切り換えたBANKのことを常に頭に入れておかないと暴走しまくる。
 慣れるまでは作っているこっちが暴れていた。


 PICは暴走するわ、それにに腹を立てたプログラマも暴走するし・・・。
 こ、これはたまらん。

 PICについて詳しくはコチラ





アートワーク

[TOP]

 ここでいうアートワークとは絵や写真のデザイン作業ではない。プリント基板のパターンデザインのことを指す。
 美術的なアートワークを手助けするデザインソフトにフォトショップとかイラストレーターとかがあるようにプリント基板を作るモノにもイロイロなアプリケーションがある。いわゆるキャド(CAD)と呼ばれるやつである。
 専門的なモノなので価格がとんでもなく高い。ちゃんとしたレベルのといえば、最低でも40万円ぐらいはする。なので、基板製造の会社に外注してもらう方法もある。わが社では私がやらされている・・・。結構好きです。







【Address】アドレス

[TOP]

 直訳すると住所の番地のこと。CPUにはアドレス空間というのがあり、メモリーや入出力先の番地が決められている。ようは、あるデータをどこかに送るときに明確な送り先が必要になる。そのために振り分けられている番地である。
 1978年当時の8080Aはアドレスが16ビットだったので0~65535番地まであった。1990年代に登場した68030というCPUはアドレスが30ビット出ていたと記憶しているので0~1073741823番地まである。
 今のペンティアム4は・・・って、もう、どうでもええやん。
      今のペンティアム4のアドレス空間は・・・ぎょうさんある。(大阪弁で無限大を意味する←ウソ )





 いも半田

[TOP]

 半田が丸く固まっているだけで銅線などにしみこんでおらず、正しく半田付けがされていない状態をいう。

 半田付けに慣れないうちによくやってしまう現象。見た目はくっ付いているが、ちょっとした振動で接触不良が起きて誤動作する。そうなる原因のほとんどは熱不足。半田がよく溶け切らないうちにコテを放してしまうので、半田付けするものから半田が弾かれたようになってツブ状になる。これが芋がいくつも根っこにぶら下っている様子に似ているので〝いも半田〟と言われている。

 電子部品は熱に弱いと昔から言われているが、いままでに熱で潰れたためしが無い。400ピン以上のクアッドタイプのフラットチップ(4面から髪の毛ほどの太さの短いピンが出ている薄いIC)の脱着にバーナーを使うことがあるが壊れたことは無い。

ただし、静電気にはとても弱い。冬場になると、うちの会社の人間は皆スリッパを脱いで歩いている不思議な光景が見られる。理由は簡単。静電気を靴下から床に逃がしながら歩いているのだ。スリッパを履いていても人に部品を渡すときは〝パッ〟と脱いで足を一度床につけてから渡す。これを遠くから見ていると何やら怪しい儀式のようになる。(ぷぷぷ)
 静電気のなくなる季節になっても癖になっている行動は消えない。あちこちの部屋でスリッパを脱ぐ儀式が夏まで続く・・・あ~めん。





【Dis Assemble】逆アセンブル

[TOP]

 わけのわからない16進の羅列で構成するマシン語をアセンブリ言語表記に変換してくれるプログラム。  わけのわからなかった暗号のようなプログラムを一瞬にしてアセンブリ言語に並べ替えられるようすは圧巻である。
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :

アセンブラに変換しても、さっぱり、わかりませんから!!








高速クロックのPICでの出力ポートの注意点

[TOP]

 たとえば下記のようなプログラムをクロック20MHzのPICで記序したとしよう。


	;ポートCが全ポートとも出力ポートで、この処理の直前では  
	;ポートCがB’11111110’となっているとする。
	
	bsf	PORT_C,0	;① PC0を1にする
	bcf	PORT_C,1	;② PC1を0にする
	movf	PORT_C,W	;③  ポートCの状態をWレジスタへ
		

 普通なら、①の直前のポートCはB’11111110’で・・・。
 ①でポートCはB’11111111’になり・・・。
 ②でポートCはB’11111101’になり・・・。
 ③でW=B’11111101’となって、PC0=1、PC1=0になるはず。

 だが、このままではW=B’11111100’でPC0が1にならない。
 PICのマニュアルにも書かれているが、PICはbcfやbsfのビット操作は、そのつどポートの状態をポートレジスタに読み込んでからビット操作を行い、再びポートに書き込むという動きをやっているらしい。

 クロックが高速なPICでは、最初の①のbsfでセットしたHi状態をポートに書き込み、②のbcf命令でもう一度、ポートの状態を読み込むまでの時間が非常に短いために、ポートの状態がHiになる前にポートレジスタに読み込まれて、Loのままになっている。そしてPC1をLoにしたポートレジスタが書き込まれて、ポートCは’11111100’となって③でWに転送されるという結果になる。

 対策は、①と②のあいだに時間つぶしの〝nop〟命令をいれるか、二つのビットを同時に書き込むような記序をとればよい。

	movf	PORT_C,W		;ポートCの内容をWレジスタに
	andlw	B'11111100'	;Wレジスタのビット1を0にマスク。ビット0も念のため0に。
	iorlw	B'00000001'	;Wレシスタのビット0を1にセット
	movwf	PORT_C		;WレジスタをポートCへ書き込み
				;こうするとポートCのビット7~2はさわらないので変化しない。
		

 それ以外にも、出力ポート専用のメモリ(バッファと呼びます)を準備して、それに対してビット演算後、バッファ内のデータをまとめてポートへ書き込むという方法も効果的です。






【Bug】バグ

[TOP]

 プログラム内の間違っている部分。  ”虫”という意味らしいが、確かに虫である。寄生虫のようにプログラムに生息し、プログラマーを常に悩ませている存在。
 発生させてしまったのはプログラマーなのだが、本人はまったく悪気は無いし、気も付いていない。なのに、思いっきり責められる。相手がプログラマーなら気持ちがわかるので責めては来ないが、素人さんだとかなり嫌味を言われる。「なら、お前が作ってみろ!」と腹の中で叫んで「はい、すぐ訂正しま~す。」と明るく答える自分はすごくえらいと思う。
 ニュースで通信関係や銀行のオンラインでバグの話が取り上げられると、自分の胃が痛くなる。それを作ったプログラマーのところへ行って、酒の相手をしてやりたい気分になる。
     筆者の前で「バグ」というのは禁止! 「馬具」もだめ!!






【barrack】バラック配線

[TOP]

 急ごしらえで部品どうしを配線すること。別名〝空中配線〟とも呼ぶ。とりあえず回路が正しく動くかだけが目的なので、体裁などまったく考えていない。部品どうしが空中で、それも絶縁もせず裸で半田付けされている状態。風が吹いただけで部品が動いてショートする可能がある。とても恐ろしい配線方法。でも、とにかく動くかどうかの実験なので誰も気にしていない。






【ゲーム機の発色方法】

[TOP]

 ゲーム機の発色方法はパソコンとは異なっており、コストを下げる理由もあってかなり複雑になっていた。
 ほとんどのゲーム機はROMと、当時RAMがまだ高価だったので、小規模で安価なRAMで構成されており、ROMは、いきなり電源を抜かれるという最悪の環境下で動作させるために必要で、プログラムはすべてROMに書き込まれていた。当然、同じ部品を使う方がコストを下げることができるので、このROMと安価なRAMで発色させる方式だった。
 細かく解説すると切りが無いので一般的なゲーム機の場合として説明すると、まず、ゲーム画面や登場キャラクターの絵柄となるデータが詰まったキャラクターROMと呼ばれるものと、画面のどの位置にどのキャラクターを表示させるかを格納しておくキャラクターRAM、そしてキャラクター色やキャラクターROMのバンクを切り替えるためのデータで、カラーコードと呼ばれる属性データを格納するアトリビュートRAMなどで構成されていた。

 原理は少々複雑になるが、ゲーム画面全体を縦横8ドットおきに線を引いた将棋板のようなマス目を想像してほしい。このマス目1つ1つに対応したキャラクターRAMとアトリビュートRAMを割り当てる。つまり、画面左上から1マスごとにアドレスを割り当て、そのアドレスが各RAMのアドレスと1対1で対応させる。こうするとパソコンのように1ドットにひとつのアドレスが割り当てられるのではなく、縦横8×8=64ドットの四角いマス目にRAMのひとつのアドレスが割り当てられるので小規模なRAMで足りるようになる。
 実際に発色するまでの工程だが、まずキャラクターRAMにキャラクターコードと呼ばれる8ビットのデータとアトリビュートRAMにアトリビュート(属性)データをCPUから書き込む。ハードウエアは常に画面左上端から右下端のマス目のキャラクターRAMとアトリビュートRAMのデータを読み出しているので、たとえばある画面のマス目のキャラクターRAMのデータを読み出したとすると、ハードウエアはそのデータをキャラクターROMのアドレスに変換する。その後、そのアドレスから8ビットずつ8回に分けてROMのデータが読み出される。ROMは2個あり(ゲーム機によっては3個や4個の場合もある)各ROMのデータは同時に出力されるので、この2個分のデータをビット順に分解し、2ビットの新たなデータを作成する。この2ビットとアトリビュートRAMから出された8ビットの内、6ビットのカラーコードと合体させて、8ビットのアドレスを作成する。次にこの8ビットアドレスで、実際の色情報の詰まった発色専用ROMから光の3原色である、赤・青・緑の強さのビットデータが出力され、モニターへと送られていく。
 最終的には発色専用ROM(カラーテーブルとか、ルックアップテーブルとか呼ばれていた)のビット数と個数で発色数は決まるが、だいたい3~4ビットカラーで512色~4096色の色が出せた。当時のパソコンが8色~16色に比べるとかなりの色数である。また、発色専用ROMのデータしだいで中間色などの表現も可能だった。
 ただし、これには最大の欠点がある。4096色出せるといっても、1ドット単位でそれだけの発色が可能というのではなく、8×8ドットで区切ったマス目の中が4096色中キャラクターROMの数だけのビット数分の色しかだせないのである。すなわち、キャラクターROMが2個使用されていたら、2ビットなので4色である。マス目の中が4096色中4色しか選べないということになる。まぁ、ゲーム画面全体から見れば、8×8ドットで区切ったマス目は小さな領域なのでそんなに多くの色を必要としない、というか必要としないような画面をデザインするように心がければ、結構きれいな色が出せることになる。  あと、アトリビュートRAMの残った2ビットでキャラクターROMのバンク切り替えをおこなっていた。これはキャラクターRAMのデータが8ビットなので、256種の絵柄しか指定できないところを、この2ビットを使い256×4=1024種の絵柄を選べるように工夫されていた。
 時代が進むにつれて高速のRAMが出現すると、発色専用ROMがこのRAMに置き換えたられたゲーム機も登場する。こうなるとCPUから色の組み合わせの変更ができるので、さらに色数が増えることになる。安価にゲーム機を作るために複雑ではあるが、よくこんな回路を考えたものである。エライ!
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :

こんなに苦労して作ったのに!〝クソゲー〟の一言で片付けられるですから!








最終兵器

[TOP]

 故障基板や故障したユニットを修理していて、何をやっても直らないとき、最後にガンガンと叩いてみること。
 プロのやることでは無いように思われるが、意外と直ったりする。ただ、一時的なものなので修理完了とは怖くていえない。
 恥ずかしくてこんなとこで公表してはいけないが、秘密兵器として技術者のあいだでは受け継がれている。

 〝最後は叩け〟である。

 昔のTVは、お父さんがこうして直したものです。





【System Call】システムコール  DOSコール  IOCSコール

[TOP]

 OSにはそのコンピュータ上で走るアプリケーションのために、いろいろと便利なプログラムが入っており、これを利用することができるように公開されていた。アプリケーションはそれらのプログラムを呼び出し、利用することで開発期間が大幅に短くなる。このプログラム類を呼び出すことをシステムコールと呼んでいた。
 システムコールは利用する処理別に番号で管理されていて、処理番号とそれに必要なデータ類を指定のレジスタに書き込んでから呼び出すと、あとはOS内で処理されて終了したものが指定のレジスタに書き込まれて戻ってくるという構造である。
 X68KではOS関係の呼び出しをDOSコール、入出力関係の呼び出しをIOCSコールと呼んでいた。







【Time Sharing】時分割(タイムシェアリング)

[TOP]

 コンピュータは一度にひとつのコトしかできない。これ基本。ただしムチャクチャスピードが速い。そこで時間を区切って、たくさんの処理を順番に少しずつ進めていくと、全体的に見てたくさんの処理が同時に進行して行くようになる。このあたりのややこしいことはWindowsなどのOSがしてくれる。

 組み込み制御機器の場合、同時進行の処理がパソコンと比べてたいへん多く、どれもクリティカルな部分が多い。お金の使い放題な組み込み機器ではリアルタイムOSというのが搭載されており、このあたりの問題は楽に解決できる。
 ところが、PICなどを使用した小規模な組み込み機器の場合は、時分割処理を自前で作らなければいけない。

 時分割処理をもう少し具体的にたとえると・・・。自動販売機を思い浮かべて欲しい。
 硬貨が投入されてから、商品のボタンがお客さんのタイミングで押される。いつどれが押されるかは機械には分からない。お客さんは機械の都合など考えずに行動する。(・・・あたり前やんか)
 押されると同時に金額を確かめて商品をホッパーから吐き出すが、その間にお客さんは次のボタンを押す場合もあれば、続けて硬貨を投入してくるかもしれない。そうでない場合はお釣りを出さなくてはいけない。

 ゲームセンターのゲーム機の場合も同じだ。たくさんの敵キャラを動かしながら、自機の操縦をレバーから読み取り、それを動かしながら、連打される発射ボタンに合わせて次々ミサイルを発射させ、すでに発射されたミサイルは順に各方向に向かって進める。敵キャラに当れば爆発をさせなければいけないし、その合間に硬貨が投入されるかもしれない・・・。
 ふう。しんど。 コレらが瞬時に時分割で行われている。

 コレだけの仕事を時間を区切って順に処理していくのが時分割処理となる。従ってどこかの処理で時間オーバーになると歪みが起きだす。お金を入れてもゲームができない、なんて症状が出るということになる。







【Jumper】ジャンパー

[TOP]

 プリント基板上の部品を電線で補足的に配線すること。
 片面基板では許されるが、両面基板ではよほどの理由がない限り許されない。

 完成後の量産されたプリント基板で、回路の変更が起きた時などによく基板の裏側でジャンパーをしているのを見るが、あまりスマートではない。動作に問題は無いし目に見えない部分なので一般の人にはわからないが、基板設計者から見ると恥ずかしくて、穴があれば入りたい心境になる。ましてや、プリントパターンが通らないのでジャンパーで済ますなんて言語道断である。

わが社でこんなことをやったら、明日から自分の机が無くなる!








【Status flag】ステータスフラグ

[TOP]

 CPUの演算結果を表す数ビットのフラグ
 演算後桁上がりが起きればCarry(キャリー)フラグが〝1〟になったり、演算結果がゼロになった時などはZerro(ゼロ)フラグが〝1〟になる。
 プログラムはそのフラグを参照することで、演算結果がどうなったかを知ることが出来、次の処理の判断材料になる。
 赤上げて・・・。白上げないで赤上げない・・・

 と、いった感じ・・・(うそ)





【Sprite】スプライト

[TOP]

 ゲーム画面を表示させるハードウエア機能のひとつ。
 敵キャラやゲームのバック画像を一枚の画面構成のボードで映すと、バック画像と敵キャラの重なりが変化したとき、CPUが再描画しなければいけなく、連続すると処理の負担が大きすぎて、ゲーム全体の速度が低下してしまう。そこで、ほとんど動くことのないバック画面と動きまわるキャラクターを分離させて、キャラクターはそれ専用のハードウエアが表示を行う機能のこと。当時はまだスプライトとは呼ばず、ダイナミックキャラクターと呼んでいた。
 スプライト画面の構成はキャラクターひとつひとつの位置情報と表示させるキャラクターの形を決めるコード番号と色テーブルのコード番号を書き込むだけで、あとはハードウエアーが指定位置に指定のキャラクターを表示させてくれる。
 この機能のおかげでCPUの負担が極端に軽くなった。位置情報を変更するだけでキャラクターはその場所に移動するし、バック画面の再描画もしなくてよくなった。イメージとしてはパソコンのマウスのような感じである。
 このスプライトキャラクターがいくつ使えるかでゲームの内容が大きく変るのはいうまでもない。NAMCOのパックマンのボードでは6個、KONAMIのタイムパイロットでは24個まで使用できた。 このスプライト機能を持ったパソコンも誕生している。有名なシャープのX68000シリーズである。
Windows系のパソコンにはこんな機能はあるのだろうか?もっと高度に進んだのがあるに違いないが筆者はついていけなくなっているのでよく知らない。






【Semaphore】セマフォ

[TOP]

 セマフォとは日本語に直訳すると〝腕木信号機〟というらしい。難しそうな言葉だがそれほどかまえる必要はない。
 たとえば、コンピュータ上で動いているアプリケーションがひとつの場合なら問題無いが、複数のアプリケーションが同時に動いていて、それも同じファイルを使用しようというときを想定してみる。セマフォがなければ上書きの競合が起きて、そのファイルはもう無茶苦茶になるはず。そこで、セマフォという旗のようなものを準備しておいて、その旗が立っている時はそのファイルが使えないことを意味させる。旗が倒れたら別のアプリケーションがそのファイルを独占して、その間他のアプリケーションが使えなくなるように旗を立ててるという機能のこと。

 昔のパソコンは一度にひとつのアプリケーションしか動いていなかったのでこんなややこしいことはしなくて良かった。






【Source】ソース

[TOP]

 お好み焼きにかけるソースのことではない。ここではプログラマーが打ち込んだプログラムの大元のモノを指す。ほとんどテキストエディッタ(Windows付属のメモ帖にちょっと毛が生えたようなモノ)と呼ばれるモノで書き込んでいる。
 





【Diode Logic】ダイオードロジック

[TOP]

 ダイオードとトランジスタで構成された大昔のデジタル回路。入力部分がダイオードを利用したロジック回路で、その先出力部分にトランジスタを利用したスイッチ回路の構成になっている。引き込み電流はたくさん取れるが、吐き出し電流はほとんど取れない欠点がある。ここでは、その入力のダイオード部分だけを利用した苦しい時の神頼み的存在。





【Diode Logic】ダイオードAND

[TOP]


 ダイオードと抵抗を使用して上記の回路を組んだ状態。入力端子A、Bに下記の表のようにそれぞれ信号を入れると、出力端子Yに信号が出力される。
アンドロジックなので、入力端子A、BのどちらかのにLo信号が入ると出力はLoになる。両方がHiで初めてYも Hiになる。







【Diode Logic】ダイオードOR

[TOP]


 ダイオードと抵抗を使用して上記の回路を組んだ状態。入力端子A、Bに下記の表のようにそれぞれ信号を入れると、出力端子Yに信号が出力される。
オアロジックなので、入力端子A、BのどちらかのにHi信号が入ると出力はHiになる。両方がLoで初めてYも Loになる。







【Dynamic Scan】ダイナミックスキャン

[TOP]

 マトリックス接続されたスイッチ回路を読み取る方式。
 スイッチはふつう2本の電線で接続されるが、スイッチの数が16個とか60個もあるキーボードになってくると配線の数が膨大になってくる。
 例えばスイッチ片側の配線を1本にまとめても、16個のスイッチだと17本の数になる。
 そこで、下記のようにマトリックスに縦4本のラインと横4本のラインとに別けて接続すると8本の電線で配線ができる。

 ただし、このままではどのスイッチが押されたかは判別できない。ダイナミックスキャン方式で判別するこになる。
どうするかというと・・・。
 上記の絵のようにキーグループ1のライン(PC0)をLoにする。そうするとSW-5~SW-8のいずれかが押されていた場合、押されているスイッチの縦のライン(PB0~PB3)がLoになる。
 上記ではSW-6が押されているので赤線のように電流が流れてPB2がLoになりSW-6が押されているのが判別できる。何も押されて無いときは、PB0~PB3すべてがHi状態になる。コレをキーグループ1~4を高速に切り換えてスキャンし続けて16個のどのスイッチが押されているか読み取る。

 スイッチに取り付けられているダイオードは、スイッチが同時にいくつも押された時にキーグループのLoを出力しているポートとHiを出力しているポートがショートして破損するを防ぐために付けられている。






【Dynamic】ダイナミック点灯

[TOP]

 LED(発光ダイオード)を何個も点灯させる時の方式。
 そのまま常に電流を流して点灯させるスタティック方式と、1個ずつを順番に時間を区切って光らして行くダイナミック方式の2種類がある。
 スタティックの場合は単純にLEDの数だけの信号線と+1本の電源線が必要になる。そして点灯している数だけの電流が常に流れることになり、LEDの数が少ないときはそれほど問題にならないが、多くなると部品と消費電流の無駄になる。(コスト高になる)
 ダイナミックの場合は何個かのLEDをグループに分け、グループごとに時間を区切って順番に点灯させるので、グループ内のLEDの数とグループごとの+1本の電源線(この場合コモンと呼ぶ)だけで点灯させることができる。

 たとえば、24個のLEDをスタティックで配線すると25本の電線が必要になるが、ダイナミックで8×3のグループに分けたとしたら11本の電線でOKである。
 ただし、ダイナミックの場合は3グループすべてが常時点灯しているのではなく、瞬間的に見たらどれか一グループのLEDしか点灯していないことになる。ただし、人間の眼はかなりアバウトなので、暗くなったようには感じない。しかし、順番に点灯している時間が遅くなるとさすがに気が付かれて、チラチラ点滅しているのがバレバレになってしまう。






【Touch】タッチ

[TOP]

 基板回路上でタッチといえば、隣通しがくっ付いて導通があることを意味する。
 基板の裏側で半田がブリッジを作ってくっ付いていることもあれば、部品の足が曲がって隣の部品の足に張り付いていることもある。
 同じ電圧の信号線どうしのタッチなら、まぁ壊れることはないが、異なる電圧のものがタッチすると、最悪の場合、丸焦げである。

 男女間のタッチでもセクハラになるか、喜ばれるかがあるが、それとよく似ている・・・。
 似てないか・・・だははは。





【ICE・Debugger】アイス/デバッガ(In Circuit Emulator/Debugger)

[TOP]

 アイスやデバッガとはハードやソフトのデバグ(バグ取り)を効率よく行う装置やプログラムのこと。装置の方をインサーキットエミュレーター(ICE=アイス)と呼び(一般に開発支援機器と呼んでいる)、それに付属してくるプログラムをデバッガと呼ぶ。
 パソコン上で動くプログラムをデバグするときはハードは完成されているので、ICEは必要無く、デバッガだけが必要になる。FlashにもActioScript用のデバッガが付いている。ちょっと不満は残るが・・・。

 ICEは開発中のターゲットボードとパソコンとのあいだにつながれる。パソコンでプログラムを書き、でき上がったプログラムをICEに転送する。ターゲットボードはICEに書き込まれたプログラムで走ることになる。
 コレを使うと何がうれしいかというと、まず、ターゲットボード上のCPUそのまままの速さでプログラムを走らせながら、好きな位置(アドレス)で止めたり、走っている最中のCPU内部のレジスタやボード上のメモリーの変化を見せてくれたり、プログラムを1ステップずつ走らせることができる。おかげで誤った命令がどこで行われたかが瞬時にわかる。
 開発支援機器にはICE以外に、ターゲットボードのROMに挿し込んで、ICEと同じようにプログラムを装置に転送し、中のプログラムを読ませて走らせるタイプとがある。これはROMエミュレータと呼ばれて、ICEよりは安価で販売されている。
 どちらにしても、ハードとソフトの両方を開発するときは絶対に必需品になる。が、ROMエミュレータと違ってICEは大変高価である。
 高価ではあるが便利なICEである。さぞかしプログラム作りの効率が上がったであろう。
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :

なぜ、徹夜でデバグするんですか! なぜ、1週間も悩むんですか!







【Input/Output】I/O (アイオー)

[TOP]

Input/Outputの略で入出力のこと、おもに装置内の部品や回路など狭い部分を指して使われることが多い。パソコンなどイロイロなユニットの塊になった状態になるとI/Oと呼ばずに入出力機器と呼ばれる。
 そういえば昔読んでいたパソコン雑誌に〝I/O〟とういのがあったな・・・。今もあるのかな?こんど本屋さんで探してみよう。






【Transistor Array】トランジスタアレイの2003

[TOP]

 16ピンのICの中にトランジスタを組んだ回路が7つ入っている部品で、かなり昔から販売されている古いIC。

〝ダーリントン接続された上記の回路が7組入っている〟

 オリジナルはULN2003Aという名称だが、他にもたくさんのメーカが作っている。東芝だとTD62003Aがそう。
 トランジスタのコレクタがオープンコレクタになっているので、耐圧50VまでのON/OFFができ、内部にはリレーなどを動かした時に発生するサージからトランジスタを保護するダイオードも入っており、コンパクトな回路を組むことができるが、飽和電圧が1.1Vもあるので後続にデジタルICを接続するとLoと判断されない時があるので注意が必要。

 なぜ、7回路入っているのかというと、恐らく7セグメントの表示器を意識して作られたのでは、と思っている。












入力ポートの保護回路

[TOP]

 ICの入力端子を外部に直接つなぐことは無謀である。外の世界はいろいろな刺激が一杯。そんなとこに可愛いICちゃんをほりだしたら、たちまちいろんなヤツらにいじめ倒されてしまう。そこで、保護回路を通すのが定番である。

 フォトカプラは光で信号を伝える部品なので、静電ノイズやサージノイズなどが伝わらないためかなり効果があるが、コストがいっぺんに上がる。それと速度が落ちる。
 そこで完璧ではないが抵抗やコンデンサ、ダイオードなどで保護する。2本のダイオードは入力電圧を-0.6V~5.6Vに抑える役目をしている。





【debug】デバグ(デバッグ)

[TOP]

 不具合(バグ)が発生するプログラムを正しく動くように修整すること。早い話がプログラムのどこかに間違った部分があるからこのようなことになる。
 プログラムのデバグ作業は水の流れに浮かんだ木の葉を追うようなようなもの、あっちに流されたりこっちに飛ばされたり、そうこうしているうちに変なところに流されて見失なってしまう。
 流れが短いものなら簡単だが、大規模なもので複雑に絡み合った流れの中から見つけ出すのは並大抵のことではない。めったにそこを通ないような流れもあるし、ほんの一瞬だけ通るような部分もあり、さらには何百回に一度だけ遠くの流れで受けた影響が時間が経ってこんなとこで!というものまである。こうなったら、もつれにもつれた細い糸をほぐすような作業を永遠とやらなければならない。
 そんなバグ取りの手助けをしてくれるありがたい機械やプログラム(ソフトウエア)がある。それが デバッガである。
 バグ取りを嫌がっていてはプロのプログラマーとはいえない。バグ取りこそ本当の意味でのプログラム作業である。プログラマーの醍醐味であり至高のひと時であると断言しよう・・・。わたしだけ?(悲)
 バグ取りは狩りである。(これからは〝バグ獲り〟と書こう)プログラマーはデバッガを使って、瞬く間に通り過ぎる処理の流れを監視するために、いろいろな場所に罠を仕掛けて待ち伏せしている。何事も無く通り過ぎる場合もあるが、たまにバグの瞬間を捕まえることができる。このときの喜びは格別である。
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :

って、いっても、バグをこしらえたのは製作者の〝あんた〟ですから!










【MIDI(Musical Instrument Digital Interface】ミディ

[TOP]

 電子楽器どうし、またはパソコンとのあいだで音楽を自動演奏させたり、音楽データの信号をお互いにやり取りさせる規格。
 もともとは、パソコンと外部に接続した電子楽器と通信しあうものだったが、現代のパソコンのほとんどにはGM音源という楽器の音色データを持った装置が搭載されていて、その装置をコントロールするのが主になってきている。PCMで音楽を再生するのと異なり、演奏の順序などをデータ化しているだけなのでデータそのものは小さいサイズですむ。インターネットに接続して、音楽が鳴るのはこのおかげである。ただ、最近は高速通信網の発達とmp3(PCMの項参照)の登場で音楽をPCMで鳴らしているサイトもある。






【mS】ミリセック(ミリ秒)

[TOP]

1mSは1000分の1秒のこと、普通の生活の中で1秒を1000に区切ることはまず無いのでピンとこないと思うが、コンピュータの世界では普通のこと。というか、1mSの時間感覚は”遅い”と感じる部類に入る。
 最近の安物の1チップCPU(1つの部品でコンピューターを構成するもの)でも、1回の処理時間は1μSで動いている、1μSは100万分の1秒。10~20の命令で1つの処理を終わらせるようなプログラムなら10万分の1~5万分の1秒で処理が終わっていることになる。ところが、これでも間に合わなくなって命令を削って、さらに短くすることを要求されることがある。こうなってくると、1mSの時間間隔はもう、永遠の時の流れのような錯覚に陥る。悲しい性である。
 自動販売機で物を買った時に出てくるおつりは、販売機の中にあるホッパーという硬貨を外に打ち出す機械から出てくるが、このとき、出たおつりを正確に数えるために硬貨が飛び出でた瞬間を捕らえるセンサーが付いている。このセンサーに硬貨が通過する時間が約10mS~20mSである。ホッパーの回転速度によって変ってくるがだいたいそんなものである。10mSなら1μSの命令を1万回も繰り返せる時間である。気の遠くなりそうな長い時間に感じられてくるのが、おわかりいただけるのではないだろうか。
 また、こんな短い時間で動くものを検証するためにロジアナという装置もある。
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :

1万分の1秒を削るのに10日も掛けてるんです。そりゃ長いでしょ!








【MS-DOS(MicroSoft Disk Operating System)】エム・エス・ドス

[TOP]

 16ビットCPUの代表的なOS(オペレーティング システム)。
 この頃のパソコンの場合、フロッピーディスクを管理するのが大部分になるので、ディスクOSとなる。
 MS-DOSはWindowsなどのようなGUIではなく、操作する指令(コマンド)をキーボードから入力して操作していた。これがたいへんめんどくさく、長いものになると入力ミスがおきやすく、何度も重なり最後には腹を立てた経験がある。そんなときはバッチファイルというのを作って、自動的に入力させる方法もあったが、一度Windowsを使ってしまうと二度と戻りたくなくなる。
 このページを見ているあなたのパソコンが、WindowsならMS-DOSの環境を体験できる。下記のようにしてみよう。
 XPの場合
 〝スタート〟⇒〝すべてのプログラム〟⇒〝アクセサリー〟⇒〝コマンドプロンプト〟
 MEや98の場合
 〝スタート〟⇒〝プログラム〟⇒〝アクセサリー〟⇒〝MS-DOSプロンプト〟

 真っ黒いウィンドウが現れたら、キーボードから〝DIR C:\〟と入力してみよう。(〝DIR〟と〝C〟のあいだにはスペースが必要)
 なにやら文字がずらっと出た思うが、これはCドライブのフォルダに入っているファイル名の一覧が表示されたのである。
 たくさんのコマンドが用意されているが、あまりにもめんどくさい。Windowsに戻った方が懸命である。

 このMS-DOSは、1981年ごろWindowsでおなじみのマイクロソフト社が、IBM社の依頼で当時のインテル社のCPU、8088/8086用に開発したもの。巷ではCP/Mをマネたとか、パクったとかいわれているが、コレだけ世に広めたマイクロソフト社はやっぱりすごいかも。ただ、なぜIBM社はあまり高機能とはいえない8086をCPUに選んだのか謎である。
 8086は64Kバイトのエリアをセグメントレジスタで16個に切り替えて1Mバイトまでのメモリーを使えるようにしたが、リニアに1Mまでのメモリー管理を行わなかったたことが最大の欠点になった。理由はプログラムが64Kバイトを超えると、メモリーの切り替えが頻繁に発生して速度の低下を招くからである。その点、同じ頃作られたモトローラの68000は16Mバイトまでのエリアが直接アクセス可能で、外部的には16ビットCPUだが、内部は立派な32ビットCPUだった。もちろん性能もこちらの方がよい。
 しかし、IBMは8086を採用し、それ専用に作られたMS-DOSは世界を制覇していったのは事実である。
 う~ん。これが運命(さだめ)なのかぁ・・・。
   :
   :
   :
   :
   :

ちなみに

   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :

68000がいちばん使われたのは、もしかしたら業務用のゲーム基板かもしれない!








【OR】オアー

[TOP]

 いずれかひとつの入力がHiになると出力がHiになるロジックゲート回路。詳しくはダイオードORを参照






【OS(Operating System)】オーエス

[TOP]

 ハードウエアとユーザー、あるいはアプリケーションソフトのあいだに入って、コンピュータを有効に操作できるようにしているソフトウエア。
 たとえば、キーボードから文字を入力したり、文字を画面に出したり、あるいは、データをディスクに書き込んだり読み込んだりなどは、動いているアプリケーションソフトがやっているのではなく、OSに任せているのである。あまり目立つ存在ではではないが最も重要な仕事をしている。
 パソコン用のOSとして、古くはCP/MMS-DOSなどがあり、Windowsもその仲間である。UNIX(ユニックス)はミニコンやワークステーションなどに搭載されているOSである。
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :

わたしは、OSよりOLの方が好きです。








【PCM(Pulse Code Modulation)】ピー・シー・エム

[TOP]

 普通のオーディオ機器は音を電圧の変化に変えてスピーカーから出しているが、このときの信号は時間と共に電圧が変化するアナログ信号である。この信号を数値に変換(デジタル化)してしまう方式。
 どのようにしているかというと、アナログの電圧変化を一定時間ごとに読み取り(サンプリングするという)そのときの電圧の高さを数値にしている。たとえば音楽用のCDなどは44.1KHzでサンプリングをしている。44.1KHzというのは1秒間に44100回、数値に直していることになる。そして、読み取る電圧の最大を16ビットとして、そのときの電圧を数値に変換する。ようするに0~65535の数値になる。
 ただ、変換された数字の羅列はばかでかいものになるのは想像がつくと思う、なのでパソコンなどで扱っている音データは大きいのである。これを何とか小さく圧縮させようというのがmp3を代表とするオーディオコーディックである。なぜmp3が有名になったかというと、圧縮の方法を公開したことと圧縮率がずば抜けて高いからである。ノーマルのPCMデータをほぼ1/10にして、それほど音質が変わらないからである。
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :

我が家の布団は、あまり干さないのでmp3並に圧縮されてますから。








【PSG(Programmable Sound Generator)】ピー・エス・ジー

[TOP]

 昔のゲーム機によく使われていた、効果音や音楽を鳴らすことのできる音源ICのこと。
 8オクターブほどの範囲内で任意の周波数の音を作ることができ、音量調整や時間的に音量の変化をハードウェアによって作成するエンベロープ機能やノイズ発生機能などを持っている。
 ゼネラル・インスツルメンツ(GI)社のAY-3-8910やテキサス・インスツルメンツ(TI)社のSN76489などがよく使われていた。






【PWM(Pulse Width Modulation)】ピー・ダブリュ・エム (パルス幅変調)

[TOP]

 モーターの回転速度やLEDの明るさを変化させるためには流れる電流をコントロールさせればよいが、それを行うのに抵抗やボリュームなどを用いて、リニア(線形)的に変化させる方法と、もうひとつがこのPWMのように、時間的にONとOFFの期間を変化させて流れる電流のトータルをコントロールする方法。
PWMはデジタル機器に向いているが、時間的にはON/OFFを繰り返しているので、モーターなどは振動が多くなったり、LEDではチラ付きが目立つようになる。

 コントロールする数が少ない場合はプログラムだけで可能なので、コストは一切掛からないが処理が大変面倒になるのはしょうがない。





【RAM(Random Access Memory)】ラム

[TOP]

 読み書きのできるメモリーのこと。何個も実装されたボードを指す場合もあるが、ここでは部品のこと。
 普通は電源が切れると内容が消えてしまう。パソコンはプログラムや処理結果をRAMに入れているので、電源が切られると大騒ぎになる。
 RAMには大きく分けて、SRAM(スタティックRAM)とDRAM(ダイナミックRAM)の2種類がある。
 SRAMは構造が複雑なのであまり規模の大きなものは作れない。だが、電気さえ与えておけば消えることは無いので、バックアップ電池を備えて電源が切られても良いような回路に使われている。パソコンでも使われておりハードウエアの各種設定値が、ここに書き込んでまれている。
 DRAMは比較的構造が簡単なので、集積度を高くすることができるので記憶容量が大きいのが特徴。主にパソコンのメインメモリーとして使われている。しかしSRAMのように電源を与えるだけではだめで、リフレッシュと呼ばれる一定時間内に再書き込み動作をしなければすぐに消えてしまう。そのため外部に複雑な回路が必要になる。世話のやける面倒なメモリーである。





【ROM Emulator】ロム・エミュレータ

[TOP]

 開発中のターゲットボードのROM部分に差し込んで、そのボードで動くプログラムを開発マシン(パソコンなど)から転送して使用する開発支援機器のひとつ。
 これを使用するとターゲットボードのCPUはエミュレータに書き込まれたプログラムで走るようになるので、プログラムの変更があっても、新しいプログラムをエミュレータに転送するだけですむ。
 ICEも同じ開発支援機器だが、もっと高度な機能が備わっているのでたいへん高価である。





【ROM(Read Only Memory)】ロム

[TOP]

 読み出し専用のメモリーのことで部品化されている。電源が切れても消えないのが特徴。
 ROMにはイロイロな種類があり、紫外線を当てて記憶内容を消すUV-EPROM、内部のヒューズを飛ばして二度と書き換えられないワンタイムROM、電気的に特別な工程を経て書き換えの可能なEEPROM(フラッシュROMともいうらしい)などがある。

 紫外線を当てて記憶内容を消すUV-EPROMは古くからあり、古いところで2708、2716などが有名。
 2708が約1Kバイト、2716が2Kバイトとなり、あとは2732、2764、27128、27256、27512、271000、272000、274000、278000と倍々になる。
 これらは特別な装置、ROMライターなどでデータを書き込む必要がある。

 ROMはIC部品のように使用されてきたが、このような使われ方ではこれ以上の高容量、低価格化が不可能になり、現在は別の方式が主流にっている。ようするにメモリーカード、CD-ROM、CD-R、DVDのように形が変ってきている。
 1Kバイトの容量があった2708が1978年当時、5,000円だった。700MバイトのCD-Rを先日購入したが、記録容量は70万倍に膨れ上がって、たったの48円だった。
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :

でも、記憶している内容が、今の方がくだらないのが、悲しいですから!








【VRAM(Video RAM)】ブイ・ラム

[TOP]

 文字や画像をコンピューターに写すため専用のRAMのこと。あるいはRAMエリアのこと。
 パソコン側ではこの部分にデータ(文字や写真)を書き込んでおくと、あとはハードウエアが外部のディスプレー装置にデーターを送ってくれる。  昔は1画面分の白黒のエリアしかなかったが、その後カラーになり何画面ものエリアを持つようになった。そして、解像度が高くなればなるほどこのエリアも高容量になる。
 現代は1024×768ピクセルなんて当たり前だが、1978年当時は32文字×16文字。画素数になおすと、たったの256×128ピクセルである。ちなみに当時はピクセルと呼ばずに、ドットと呼んでいた。






【発想の転換】はっそう-の-てんかん

[TOP]

 簡単なようでむずかしい。
 プログラム作りをしていると必ず行き詰るときがある。何をやってもバグが取れない、どうしてもうまく動かない。筆者にとってはいつものことであるが、このような時は発想の転換をしてみるとよい。
 「簡単に言うなよ!」・・・そのとおり。発想の転換がいちばんむずかしい。しかし冷静に見つめなおしてほしい。行き詰っているときは、きっと同じことばかりを同じ視点から見ているはずである。
 発想の転換をする方法の正しい答えを出すのは非常にむずかしいので、筆者がいつもやっていることで参考にしてほしい。

 まず問題になっている点は常に考える。ただし異なることをしながら考えるようにしている。たとえばトイレ。食事中の人には申し訳ないが、あの中こそすべての情報から切断されたた至高の時間。(だって、考えることはそのことばかりでしょ)なので筆者の自宅のトイレには筆記用具と関係書籍が並んでいる。はやい話が書斎化しているのだ。行き詰った問題がひどいときは、何も出ないのに(←失礼)考えをまとめるためにトイレに入ることがある。妻も初めはとまどっていたが最近では平気でTVを見ている。
 次に風呂。あそこも体を洗うこと以外なにもやることが無いので考えがまとまる。ただ、筆記用具が無いのが少し気にいらない。そして寝室。眠る寸前まで考えごとをする。当然枕元には筆記用具が必需品になる。思いついたら即、メモをとる。電気を灯すと寝ている妻を起こすので、懐中電灯が枕元にころがっている。
 さらにTV。お笑い番組やドラマなど何でもいいがテーマは明るいほうがいい。暗いテーマは関係ないことを連想させるので嫌いである。で、とにかく見る。特にコマーシャルがいい。短いのにちゃんと起承転結がある。でも、見入ってはだめ。映像を見ながら、今の問題と照らし合わせるのだ。ぜんぜん異なる場面なのにパッっとひらめくときがある。そして、最大の条件はそのように常に静かに考えことをさせてくれる環境があること。
 結論を言おう・・・・・
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :

発想の転換とはなんだ?







【発色数】はっしょく-すう

[TOP]

 パソコンで出せる色数のこと。現代では24ビットカラーや32ビットカラーが当たり前。
 パソコンの内部には光の三原色である赤・青・緑に割り当てられたメモリーを持っており、このメモリには画面上の発光点(ドット)1個の各色をどれぐらいの段階で表示させるかの情報が書き込まれている。当然画面が大きくなればなるほどメモリーが必要になる。そして発色数というのは、1ドットあたり色をどれくらいの段階で変化させれることができるかをビット数で表している。24ビットカラーなら三色、各8ビット、すなわち、赤・青・緑とも256段階に変化させることができるということなので、総発色数は1677万7、216色になる。32ビットカラーは現時点では24ビットカラーと同じ1600万色である。では残りの8ビットは何に使っているかというと、プログラムで自由に使っているようだ。透明度に使用したり、何も使わずに空きになっている場合もあるそうだ。これは現在のCPUが32ビット単位で処理をしているので、そうなっているらしい。
 昔のパソコンでは総発色数が8色、16色というのが当たり前で、グラフィックパソコンと呼ぶのが恥ずかしいような画像しか作り出せなかった。ゲーム機は別の発色方法を取っていたのでパソコンとは互換性がまったくなかった。
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :

肌色なんて絶対無理ですから!







【バイナリ】

[TOP]

 2進数のこと。慣れるまでは考えない方が体に良い。詳しくはここを見て・・・。あははは。他力本願・・・。





【バイパスコンデンサ】

[TOP]

 パスコンとも呼ばれる電子部品のひとつ。(コンデンサーの一種)
 デジタルICはノイズの塊である。自分自身のノイズで誤動作するといっても過言ではない。そのノイズを取ってくれるありがたい部品である。
 なのでICのできる限り近くに取り付ける必要がある。電子回路に不慣れな頃はこの部品を知らずに回路を組んでいて、思ったとおりに動かないで散々悩んだことがある。試しにつけてみたところ何事もなかったように正常に機能し始めたのである。恐るべしバイパスコンデンサ!
パスコンをナメたらあかんぜよ。





【ハンドアセンブラ】

[TOP]

 マシン語をアセンブリ言語に変換するプログラムを逆アセンブラと呼んでいるが、反対に、アセンブリ言語をマシン語に変換するプログラムをアセンブラと呼ぶ。しかし、当時、これはたいへん高価で手に入りにくいものだったので、その作業を人間が手作業でやっていた。このことをハンドアセンブラと呼ぶ。
 この作業が並大抵の苦労ではなく、片手にマシン語一覧表をもち、片手にアセンブラ表記のプログラムを持ち、自分で一行ずつキーボードからマシン語に変換して入力していくのである。ひとつでも間違えるとプログラムは暴走して動かなかった。ひどい暴走になるとプログラム自身が自分のプログラムを書き換えて消滅することもたびたびあった。何時間も掛けて入力したプログラムが、一瞬でパァである。
 ”根性”のみのプログラム作業であった。
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :

『不正な処理をしたので終了します』っていうのは、誰が不正な処理をしたんですか!








【暴走】ぼう-そう

[TOP]

 なんど聞いてもいやな響きである。
 早い話が、自分の作ったプログラムに何らかの不具合があるために、CPUが気が狂ったような行動を起こすことである。
 プログラム上の問題で起こすときもあればハードの設計ミスで起こすことや、キャビネット内の熱が上がり過ぎたために起こる熱暴走などもある。
 油圧で動く機器を制御したことがあったが、このときの暴走は恐怖である。鉄腕アトムが酒に酔って暴れているようだった。コンクリートの床に一瞬でひびが入り、もう少しで大穴を開けるとこまでいった。寸前のとこで電源を落としたが、このときの怖さは一生忘れないであろう。原因はハードの問題だった。ハードを設計したのも筆者だったが、配線をしたのが慣れない別の人間であったため部品の逆差しをしており、それが原因で暴走を起こした。そのプロジェクトは当然中止になった。
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :

原因は、わたしではありませんから!!







【Machine Language】マシン語(マシンコード)
【Assemble】アセンブル
【BASIC(Beginner's All-purpose Symbolic Instruction Code)】ベーシック

[TOP]

 マシン語とはCPUに直接語りかけるプログラム言語。はやい話が現地語のようなもの。
 機械に直接語りかけるため人間には非常にわかりづらい。そこで、普通は通訳をしてくれる別の言語を使用する。
 マシン語に通訳する言語はいろいろある。大きい意味では(ホントに大きい意味)FlashのActionScriptもまぁその一種である。・・・と言い切っていいのかな?
 通訳言語にはアセンブル言語、C言語、BASIC、フォートラン、コボルなどある。
 短いマシン語のプログラムなら直接見て、理解できる人もいるが、少しでも長くなるとまったく解らなくなるのがマシン語である。そこで、アセンブル言語というものでプログラムを記序し、コンピュータ自身にアセンブル言語をマシン語に直させてしまうのがアセンブラである。たいへん便利なものだが、難解なルールの中でプログラムしなければいけない。そこで、アセンブル言語よりもっと人間に理解しやすい形にしたC言語が登場する。
 わかりやすく説明してみよう。(よけいに混乱するかも・・・)

 CPUの理解するマシン語を地球の果てのジャングルの中に住む原住民の言葉とすると、あなたにはまったく喋っていることがわからないはず。聞くのも初めて。それって言葉?と言いたくなる。
 そこで、原住民の言葉を簡単な絵や記号に変えて原住民と会話ができるようにしたのがアセンブラ言語。
 ただコチラがその絵や記号を熟知していればいいのだがこれがかなり難解だ。そこでコチラの文字で書いたモノを原住民の絵や記号に換えてくれる解釈人をあいだに入れたのがC言語になる。
 でも、おわかりのように、原住民と会話をするのに文字を絵記号に換え、それから現地語に変換されるので、意思が伝わるまでめんどうな手間がかかるのと、絵や記号に換える段階でどうしてもむだなモノが入ってしまう。

 このように、C言語は書いてあるプログラムを直接マシン語に変換するのではなく、いったん解釈してから、アセンブラに変換する。このような方式をコンパイラと呼んでいる。
 コンパイラは少々めんどくさいが最終的にはマシン語ができ上がるので、実行時はCPUの速度で走る。大規模なプログラムになるとアセンブラだけでは管理しきれないので、現在ではコレが主流になっている。

 BASICというのは、原住民にしてもらう仕事別に原住民の言葉で書いたマニュアル本を何十冊も作り、ソレを渡して仕事をしてもらうようなもの。もちろんマニュアルに書かれていないことはやってくれないし、原住民もそれを読みながら「ふん、ふん」と解釈して行くので時間がかかってしょうがない!
 BASICはアセンブラのようにマシン語に直してから、いっきにCPUを走らせるのではなくて、1ステップずつ解釈しながら処理をしていくので遅い。このような方式をインタープリタと呼んでいる。FlashのActionScriptもこのタイプらしい。
 このタイプの利点は、解釈と実行を同時にするので動きがわかりやすく、記序の間違いをその場でコンピューターが指摘してくれるのでたいへん便利。ただ、遅い!
 最近はこのBASICもコンパイラ方式のものになっているらしいが、とんと触ってないので詳しくは知らない。

 ところで、マシン語はホントに訳のわからない16進数の羅列である。

16進数というのは、通常我々が使っている数字(0~9)以外にA~Fの文字が入る。ようするに、0から数えて9で桁上がりして10になるのが人間の世界。CPUの世界になると9の次はAである。そしてB,C,D,E,Fと行って、やっと桁上がりをして10になる。
 それ以外に2進数というのも出てくる。これは簡単、1と0しかない。0、1と数えて次はもう桁上がりになって10になる。11の次は100である。簡単でしょ・・・。

 アホ! よけいに訳わからんワ!!

 2進、10進、16進数に慣れるのに数年は掛かる。(掛かり過ぎ?)でも慣れると両手で1024までの数を数えられるようになる。
   :
   :
   :
   :
   :
   :
   :
   :
   :

ただし!

   :
   :
   :
   :
   :
   :
   :
   :
   :
   :

何の役くにも立ちませんから!!

     
 
 
 
 
 
 

【モニター】モニタープログラム

[TOP]

 昔のパソコンではプログラムするのが当たり前で、そのためにプログラムをデバグ(バグ取り)するために色々な道具的なプログラムが付属していた。
メモリーの中を16進表示してくれるメモリーダンプや、指定アドレスからプログラムを開始させる、アドレスジャンプなどはよくお世話になった。
 現代のデバッガの基礎となっている。





【Rat nest】ラッツネスト

[TOP]

 プリント基板をデザインするアプリケーションで、部品どおしの接続情報を色の付いた線で表したもの。

 上記の写真はネットリストを読み込んだ直後のもので、中央部に部品が重なって表示されている。したがって部品どうしがぶつかっているというエラーが出て赤くなっている。そして緑の細い線がラッツネストだ。これは部品をどこへ移動しても、あるいは回転をしてもゾロゾロ付いてくる。ラッツネストが示しているところが接続先となっている。

 何のためにこんな蜘蛛の糸みたいなものがあるかというと、どのように部品を配置すれば適切な結線方向になるか、どう部品を配置すれば効率よく結線パターンを作ればいいかを、部品をあちこちに移動させたり入れ替えたりして、結線方向を確認しながら作業できるためにラッツネストがある。

 すこし高級なプリント基板のデザインソフトではあたり前の機能。よくできている。
 もちろん見ていてうっとおしい時は消すこともできる。













ランド

[TOP]

 プリント基板で使用されているパターンで表面と裏面をつなぐ時、その部分にスルーホールと呼ばれる銅箔メッキの穴が開けられるが、その入り口と出口に作られる円形のパターンのこと。

白く丸く写っているのがランド

 ランドがあると、密集したパターンが這わしにくくなるので、ランドの無いランドレス基板というのもある。





【Register】レジスタ

[TOP]

 CPU内にある一時的な記憶場所。メモリーも一時的な記憶場所になるが、それよりももっと手近で、すばやくアクセスすることができる。人間で例えると頭の中に記憶するのがレジスタに記憶させることで、メモ帳に手書きで書き留めておくのがメモリーに記憶させることになる。
 レジスタは一時的なことしか記憶できないが、メモリーへ書き込むよりはるかに速い。アセンブラのプログラマーはこのレジスタをうまく使って、できる限りメモリーにアクセスさせないように考えていた。しかし、今はCPUの速度そのものが速くなっていおり、ソフトウエア開発もC言語に代わっているので、ここまでシビアなことを考えてプログラムすることは少なくなってきている。
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :

C言語はオートマチックのクルマのようで、何かもの足りないのは私だけでしょうか・・・。







【ロジアナ】ロジックアナライザー

[TOP]

 複数のデジタル信号がどのように変化しているか見えるようにしてくれる装置。ロジックアナライザー(通称、ロジアナ)と呼ばれている。
 見えるようにといっても映像で見せるのではなく、信号の1の状態をハイ状態。0をロー状態として、パソコンの画面に上下に上がり下がりするグラフのような形で見せてくれる。


 この装置を使うと面白いものが見えてくる。パソコンや家庭電器に使用されているスイッチがある。押しボタン式やシーソー型のスイッチなど、いろいろなものがあるが、そのほとんどは鉄片を離したり着けたりして電気をコントロールしている。
 
【チャタリングについて】
 このスイッチをデジタル回路に直接使って、スイッチを押した回数を計るものを作ったとする。残念ながらこの装置は必ずデタラメな回数を表示する。1回しか押さなくても4~5回ほど押している回数が出てくる。回路が間違っているわけでないし、スイッチが壊れているわけではない。この現象をロジアナを通して見るとスイッチが押されて鉄片がくっ付いたあとに、その鉄片がバウンドして相手側から離れて、またくっ付く、という状態を繰り返しながら、鉄片どうしが張り付いていくのが見えてくる。その間、約1~5mS(0.001~0.005秒)実は、このバウンドの回数まで数えていて、1度しか押していないのに4~5回押したことになってしまう。人間の目には見えない世界である。ロジアナは時間を拡大してくれる顕微鏡のようなものだ。
 この接点のバタつきをチャタリング現象と呼んでいるが、筆者もデジタルの世界に首を突っ込んだばかりのときに、この現象の存在を知らず、自分の作った回路がおかしいとばかり思っていた。(悲)





【ジャンプ先のラベル管理】

[TOP]

 ツーパスアセンブラはリンカと呼ばれるプログラムとペアーになっており、プログラム時に発生するアドレス管理を直接書き込むのではなく、アドレスをラベルと呼ばれる自由な名前にしておき、その名前の場所にジャンプしたり、数値を記憶させるようにしてプログラムを組んでいく。プログラマーはCPUのアドレスのことは一切考えることなく、ただ、名前さえ覚えておけばよい。そして、この作られたアセンブラ言語(ソースリストと呼んでいた)をアセンブルしマシン語に変換する。(ワンパス目)そして、リンカというプログラムがそのマシン語をアドレス順に並べていくときに初めて名前の付いた場所のアドレスが決まり、おなじ名前を参照する部分を自動的にアドレスに書き換えてくれる(ツーパス目)ものだ。
 プログラムの変更が必要になり命令が追加されたとき、ワンパスの場合、追加された部分から後ろのアドレスがその分ズレることになり、直接書き込んだアドレスをすべて手作業で変更していかなければならないが、ツーパスの場合は追加があっても、最終的にあとからリンカがアドレスを割り振るので何も考える必要はない。どうころんでもツーパスの方が優れている。






【ワークRAM】ワークラム

[TOP]

 CPUがプログラムで使用する計算結果などを一時的に記憶しておくRAMエリア。電源が切れると記憶はすべて消えてなくなる。
 パソコンはプログラムそのものをRAMに転送して使用しているので、電源が抜かれると大騒ぎになるが、組み込み用のシステムや業務用のゲーム機は、いきなり電源が抜かれるのは当たり前の世界。なので、電源が途絶えてもいいようにプログラムはROMという消えない部品の中に書き込まれている。

 組み込み用のシステムや業務用のゲーム機は非常に厳しいヘビーな世界である。特に業務用のゲーム機は子供たちからのあらゆるイタズラ攻撃に耐えなければ生きていけない厳しい世界なのである。    :
   :
   :
   :
   :
   :
   :
   :
   :
   :
   :

銀行のオンラインで、スタンガンを使ったら、即、逮捕されるんだぞ!
ゲームセンターでそんなもの使うんじゃない!!









【One Pass assembler】ワンパスアセンブラ

[TOP]

 アセンブラ言語で書かれたプログラムをマシン語に変換してくれるプログラムのひとつ。
 当時、高級なツーパスアセンブラ(アセンブラとリンカと分けた高級品もある)というのものもあった。現在はツーパスアセンブラが当たりまえでワンパスなど知る人もいない。
 アセンブラ言語で書かれたプログラムをマシン語に変換するときに最初に問題になるのがアドレスの管理だ。CPUはプログラムをアドレスの順に読み込んで処理を進めるが、ひとつのアドレスにはひとつのデータしか書き込むことができないので、とうぜん命令を順に入力していくことになる。プログラムは命令の途中で別のアドレスへ飛んで、そこに書かれている命令を処理することや、計算途中の数値を一時的に別のアドレスにあるメモリーへ書き込むこともある。そしてこの飛び先のアドレスや一時記憶するメモリーのアドレスそのものを人間が管理してプログラムに直接書き込んでいく方式をワンパスアセンブラと呼んでいた。これとは別に、ツーパスアセンブラはジャンプ先のアドレスをラベルという任意な文字列で管理してくれるので効率よくソフトウエアの開発ができた。
 いまは、ツーパスアセンブラと呼ぶものはなく、アセンブラとリンカというプログラムに分かれている。アセンブラで書かれた複数のプログラムを統合して、実際のCPUのアドレスに割り振るのがリンカというプログラムである。