アイデアリズム idealism daydream

[長文] [メモリの仕組み] [その2] 就労継続支援B型事業所(いわゆる作業場/作業所)でメモリの端子の数が違うのはなぜと聞かれたのです 2024年06月08日から08月15日まで

前回から / 次へ

★1bit 1Byte 1kB 1MB 1GB 1TB…と容量(データの入る大きさ)の話の続き★

 MSXの64kBというメインメモリ(主記憶装置 / RAM)の容量は、

1バイト文字なら65536文字、2バイト文字なら32768文字扱える
文字だけだったらたくさん入る

 のですが「絵(画像)とかも表示したいよねー」ということになると、


MSX2版「イース」のオープニング画面
・SCREEN 8というモードで描かれている
ビデオキャプチャFHD16:9のアスペクト比にしか対応していないのですが、元々の 4:3のアスペクト比Photoshop Elementsで直して近づけてみたッ!!

 SCREEN 8は横256ドット(ピクセル)×縦212ドット(ピクセル)で256色表示なので「今のパソコン」で表示するなら、


・これくらいの大きさ…かな?
・この頃、スキャナとかタブレットは無かったので「マウスで絵を描く感じ」
・とりわけSCREEN 8は1画面で64kBのメモリを使うので「当然この画像1枚だけで64kBのメモリをほぼまるまる使っちゃうッ!!」

 細かい話、SCREEN 8のビットマップ画像だけなら、

・256色なので1ドット(ピクセル)あたり8bit=1Byteのデータ
・それが縦256ドット(ピクセル)×横212ドット(ピクセル)の点(ドット、ピクセル)を並べている(描いている)
・そんなわけで256×211×1Byte=54272Byte=53kBのデータ、という計算になる

 画像をメインメモリで使っちゃうとプログラムとかゲームの中身(アプリ)が全然入らなくなってしまうので、

・MSXでは画面の表示についてはCPUとかメインメモリを使うのではなく画面専用のVDPという、今のパソコンでいうところのGPUにまかせている
・VDPの画面専用のメモリのことをVRAMといってMSX2以降では機種によるが大体128kB
・SCREEN 8だと1画面64kBなので128kBだと2画面分入る感じ(表示で1画面使うので余りは1画面)

 とどのつまり何が言いたいのかというと、

画像(絵)のデータは文字と比べると「ものすごく巨大」
・たった1枚の絵(画像)が64kBなので65536文字分(1バイト文字の場合)!!
・MSXの頃ってメインメモリやVRAMに使われているDRAMの値段がすごく高かった
・参考までに当時「増設RAMカートリッジ 768kB」が30000円と鬼の価格で下手をすると「もう1台MSXが買えてしまう」感じ
・そんなわけで今のパソコンと違ってメモリ(RAM)の増設(メモリを増やすこと)は気軽にできなかった
・そのため、メモリ(RAM)を増設する人があまりいなかったので、ほとんどのMSX2以降のソフト(アプリ)はMSX2準拠の規格「RAM64kB+VRAM128kB」前提で作られている

今のパソコンはOSがメモリの管理をしているが、当時はゲームなどのプログラム(アプリ)そのものがメモリの管理をしていたので「メモリを増やしたからって速くなったりしない」→そもそも「RAM64kB+VRAM128kB」前提で作られているからメモリを増設しても「増設分を全く使わない」感じ
・一部のソフト、例えばMSX-DOS2(OS)を使っている場合とかMSXturboR専用ソフトなら「ちゃんと増設されたRAMを使う」と思う…たぶん…

 ただゲームのデータのボリュームが年々増えることにより、

・「8ビットCPUが扱える最大64kBのメモリ(RAM)」じゃ全然足りなくなってきたッ!!
・基本的に「CPUはメインメモリ(RAM)にプログラムとかデータを入れておかないと扱えない
・こういうのを「ノイマン型アーキテクチャ」と言って昔も今もほとんどのパソコンはこの仕組み

 なので、例えばMSX2の64kBだと足りないという事であれば、

・何か工夫する必要がある

 ここでは「ドラゴンクエスト I(ドラクエ I)」と「イース」の違いを比較してみます。


・ドラゴンクエスト I(MSX2版)はメガROM(カートリッジ、カセット)で1Mb=128kB(ファミコン版はギリギリ64kBくらいだそうです)のデータ(プログラムも入ってる)
・イースはフロッピーディスクで720kBのデータ(プログラムも入ってる)

 まずドラゴンクエスト Iは、


メインメモリ(RAM)とほぼ同等の速度で動作するカートリッジ(カセット)の容量を増やしてみた、というやり方
単純に容量を増やしてしまうZ80(MSXのCPU)が8ビットCPUなので64kB以上は認識できない(分からない)
・このため、メモリのコントローラ(ここでは「メガロムコントローラ」、一般的にはMMUという)を使って64kB以上にならないようデータを分割したり(たぶん16kB×8=128kB)してCPUやメインメモリにデータをロードする(データを渡す)感じ…ザックリというと
・上記の通りメインメモリ(RAM)くらいのすごく速い転送速度なので「ロード時間は一瞬で終わる」「ゲーム中にロードしていても分からないくらいの速さ」

 そういうわけで、


・カセットをさして電源を入れると「ほぼ一瞬でロードされて」ドラクエが遊べる、という感じ

 ちなみにメインメモリ(RAM)とカセット(ROM)の違いをザックリ説明すると、

・電気を消すと内容(データやプログラム)が消えてしまう(こういうのを"揮発性メモリ"という)→RAM
・電気を消しても内容が消えない("不揮発性メモリ"という)→ROM
内容を書き換えることができる→RAM
内容を書き換えることができない→ROM

 なので、例えば「ドラクエのプログラムにバグ(誤りや欠陥など)があった!!」なンて発見されてしまうと…、

カセット(ROM)だから内容を書き換えることができないため「捨てるしか方法が無い
・カセットのROMは「それなりの値段がする」ので「捨てることが無いように、ROMにする前にかなり入念にデバッグ(バグを取り除く作業)をされてる」
・今のコンピュータのようにアップデートで後から修正します」みたいなことはできないからッ!!

 ちなみにMSX2のVRAMは「揮発性メモリ」なのに、

・電気を消しても何分間かデータが残っている

 ので少しのぞいてみると…、


・こんな感じ
・エンディングを見たのでエンディングのグラフィックがVRAMへ転送されてる
ローラさん(お姫様)はスプライトじゃなくてグラフィックなんだ…

 次にイースの場合はフロッピーディスク(MSXのフロッピーディスクの場合は2DD=720kB)なので、

補助記憶装置のためロード時間(読み込み時間)が結構ある
・補助記憶装置は「RAMやROMと比べると安くてたくさん容量がある(当時フロッピーディスクは1枚300円くらいだったと思う)」
・フロッピーディスクを何枚も使えばそれだけ容量を増やすことができる
フロッピーディスクは不揮発性メモリなので電気を消しても内容が消えない


・ROMとは違ってフロッピーディスクは「穴が開いていたら書き込み禁止で読み込みのみ(ROMっぽくなる)」で「穴をふさげば読み書き可能(RAMっぽくなる)」なので「バグがあったら直して書き直せばいい」


・ただ今のようにネットがあるわけじゃないので「バグがあった」り、「フロッピーディスクを壊しちゃった」りすると「直接メーカーへフロッピーディスクを送らなくてはいけない」とかなり面倒くさいので「やっぱりちゃんとデバッグされてる」感じ

 MSX2のメインメモリは64kBでVRAMは128kBとほぼ決まっていて上述したように「簡単に増やせるわけじゃない」ので、



・MSXの電源を切った状態でフロッピーディスクを入れて電源ON
・イースはゲームなので「まずはタイトル画面」をフロッピーディスクからロードして表示させる


・タイトル画面の最中に「何かのキー」が押されたら「タイトル画面の画像はクリアする(VRAMから削除する)」
・ゲームのプログラム(本体)を(フロッピーディスクから)ロードしてメインメモリ(RAM)へ入れる
・ゲームの画面(グラフィック)も(フロッピーディスクから)ロードしてVRAMへ入れる(ゲームの画面はSCREEN 5なので1画面32kB)
・ゲームをスタートさせる(上の図)


・主人公(アドル)が店に入ったら「店のグラフィック」をロードして表示させる
・文字(実はグラフィックのデータ)をVRAMから呼び出して表示させる
・主人公が店から出ると「店のグラフィック」は使わない・いらないのでクリアする

 VRAMを後から見てみると、


・SCREEN 5のページ1にゲーム中の「メインのグラフィック」のパーツが置かれていることが分かる


・SCREEN 5のページ2はどうやら表示用の予備として使っているようだ
・というのもグラフィックをロードしている時は上から下へ少しずつ本当は表示されるのだが「いっぺんにパッと表示されるため
・「うらないのみせ "サラ"」のグラフィックはクリアされて残っていない

 要は、

必要なデータを必要な時だけ随時フロッピーディスクからロードするやり方(これが重要)
・必要の無いデータは随時メインメモリ(RAM)やVRAMからクリア(削除)してRAM64kB+VRAM128kBを超えないよう有効活用する

 少し余談っぽくなりますが「MSXのディスクロードを楽しむ動画」を作ってみました。長いゾッ!!
 実はイースはMSXのゲームの中では「ロード時間があまり長くない」「ロードは普通くらい」です。それよりも、

・「ガンダーラ 仏陀の聖戦」や「セイレーン」が鬼すぎる
・「スナッチャー」もかなりロード時間や解凍時間が長いけれど「ゲーム自体が面白い」ので「あまり苦痛は感じない」
・イースも「ゲーム自体が面白い

 今さらですが「画面がきれいとかきれいじゃないとか」よりも「ゲームが面白いとか面白くないとか」の方が大事だと思うのですが…。



 ただ「ガンダーラ」に関しては、

・普通にデータを入れるとどう考えても入らないと思う(どう考えてもVRAM128kBに収まらない)
MSXはFDDにアクセスしている最中は「仕事が埋まってしまってほぼ何もできない」

 ので、

・データにすさまじい圧縮や解凍をかけていると思う…

★MSXのシリアル通信の話★

 さてさて「いつになったらシリアル通信の事を言うのか」なのですが、

・シリアル通信とかパラレル通信を説明しようとすると「どうしてもコンピュータの基本的な仕組み(アーキテクチャ)を説明しておかない理解が難しい」のでグダグダ話をしていたッ!!
・私はプログラムが組めるわけじゃないンだがコンピュータの基本的な動作は何となく分かるので…
・現在の「64ビットのパソコン(コンピュータ)」をいきなり説明するよりも、昔のMSXくらい(1983年だからおよそ40年前!!)の「8ビットのパソコン(コンピュータ)」を説明した方が単純明快で分かりやすい
・MSXと今のパソコンのアーキテクチャがすごく違うのかと言うと「あまり変わっていない感じ」(もちろんMSXと比べて処理速度や容量が1,000倍くらいはなったが…)
MSXなら仕様が公開されているのでインターネットで調べやすい

 うーん…、


・MSXのメモリやI/Oポート(入出力ポート)の説明書き(湯浅 敬著の「MSX マシン語入門講座」からP34を引用)
・この図を見る限りではMSXは「パラレル通信"ほとばしる"設計になってるッ!!」
・この頃は「パラレル通信の方が速かった」し、8ビットパソコンだったら「8組(16本)のデータバス(データの配線)で良かった」ので「配線が多くて困るという事もなかった」し…


・私のSONY HB-F1XD(MSX2)君 修理のためケースは取り外している


・FDD(フロッピーディスクドライブ)もカートリッジ端子もパラレル通信

 話に聞く限りでは、


ジョイスティック端子がシリアル通信だそう
・38400bps(ビット毎秒)らしいので「この頃にしては結構スピードがある」
・38400bpsということはジョイスティックの全部のボタンを押しても6つなので「1bit(ビット)×6=6bit」で1秒間に換算すると38400÷6=6400、つまり1秒間に6400回全部押しても大丈夫?! (ジョイスティックのボタンを押す、押さないをデータに見立てると)

・38400"b"psなのでByteに直すと38400÷8=4800Byte、kBに直すと4800÷1024=約4.7kB(4.685kB)/秒
・イースのオープニングの絵は約64kBなので64÷4.7=13.617kB/秒くらい。なので、このジョイスティックのシリアル通信を使ってイースのオープニングの絵をMSXへ送るなら約13秒くらいかかる(理論値)

 ちなみにFDDはだいたい250kbpsなので(理論値だが)、

・250×1024=256000bit、256000÷8=32000Byte、32000÷1024=31.25kB/秒

 なので、

・64kBをMSXへ送るなら約3秒くらいかかる

★パラレル通信とシリアル通信のおさらい★

 ここで新しい言葉の「bps(bits per second、ビット毎秒)」。
 よく携帯電話の会社の人が、

5Gだから速いですよー」
Wi-Fiは快適ですよー」

 とか言ってて「何のことだか分からない」と思われるかもしれませんが、今まで書いてきたことを、もう一度bit(ビット)をおさらいすると…、

・コンピュータは何かイロイロお仕事をするところと記憶するところが分かれていて、何か計算したりイロイロな仕事をするところはCPUという装置を使っている
・CPUに何か計算したりイロイロ仕事をさせるためには、仕事(の内容や順番など)をいったん記憶しなくちゃいけなくて、それにはメモリという記憶装置を使っている(CPUが直接使えるのはメインメモリ)
・コンピュータ(CPU)は基本的に数字しか分からないので「数」に何か仕事を割り当てたり計算したりする


・メモリはスイッチのON、OFFで記憶するようになっていて(2進数)、スイッチ、つまり最小単位は1bit(ビット)
・メモリから数字を読み込む時や書き込むときに「全部の桁をいっぺんにドバっと送る」ようにする配線、通信のやり方を「パラレル通信」という


・メモリから数字を読み込む時や書き込むときに「1bitずつ(1桁ずつ)送る」ようにする配線、通信のやり方を「シリアル通信」という

 この図は少し誤解をまねく感じなのですが、シリアル通信の場合は「基本的には1組(2本、入力と出力)の配線しか使わない」ので、

・アドレスの0番(&H0000)に各1組、アドレスの1番(&H0001)に各1組ずつ配線があるわけじゃなくて「アドレスの0番からアドレスの65535番(&HFFFF)までをひとまとめにして」1組の線がある感じ

 そういう事で「もしMSXのメインメモリがシリアル通信だったら(上の図)」の場合は、

・最初に「アドレス番号」を送ってアドレスを指定する
・次に「メモリの中身」を送受信する

 ことになるので送られる数字としては、

・アドレス番号「0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0」、メインメモリの中身「0,0,1,0,0,0,1,0」(アドレス番号が0でビッグエンディアンだった場合)

 となります。

★bpsの話★

 上記の事をふまえて、bps(bits per second、ビット毎秒)は「どれくらいのbit(Byteではない)のデータ(プログラムでも構わないが)を1秒間に送ることができるのか」という単位です。
 そしてほとんどの場合「シリアル通信」のことを指します(パラレル通信でも使うことがある)。

 さっきチョット計算しちゃったのでbpsの事は何となくお分かりかもしれませんが、

・MSXのジョイスティックの端子(シリアル通信)は38400bps(1秒間に38400bit送ることができる)だから、コレを使ってイースのオープニングの絵のデータ、64kB(524288bit)をMSXへ送るなら約13秒くらいかかる(理論値)
・FDD(パラレル通信)は約250kbps(1秒間に250kbit=256000bit送ることができる)だからMSXへ64kBを送るなら約3秒くらいかかる(理論値)

 約40年前のMSXの頃はパラレル通信の方が速かったのですが、

・今、現在(2024年)ではさすがに技術が進歩して「シリアル通信でもかなり速くなった
・今、現在のパソコンで「パラレル通信」が使われているところは「ほぼメインメモリ(RAM)のみ」となった
USBSATAPCIe、Wi-Fi、インターネット全部シリアル通信だもンねーッ!!


・私のiPhone SE2 (第2世代)
・iPhoneの写真をパソコンへバックアップするときはLightningケーブルを使ってUSB2.0へ接続
・USB2.0だからもちろんシリアル通信で最高で480Mbps(=60MB/秒はあくまで理論値で実際は半分の20MB/秒くらい)

 こーゆーふうにシレっと書いていますが「もしiPhoneのLightningケーブルがパラレル通信だったら」…、


・たぶんこんな感じになっちゃうッ!!
・iPhone SE2はA13という「64ビットCPUを普通に使っている」わけだから図のような9本では全然足りなくてLightningケーブルが64本必要だしパソコンのUSBコネクタも64個必要だねーッ!!
・いやー、iPhoneやUSBがシリアル通信で良かった

★容量と速度の話★

 そうそう、bpsの話に戻って…、

「5Gだから速いですよー」

 と言っても、この場合の5Gって「5Gbps」という具体的な速さではなくて、

第5世代移動通信システムの略
・第5世代ってことで、その前は第4世代(4G)があったし、その前は第3世代(3G)があったし…

 MSXで例えるなら、

第3世代(3G)が144kbps(18kB/秒)とか384kbps(48kB/秒)くらいの速さなのでナントカ「MSXの1画面分/秒」くらいかなー、とか

・今のところミンナが使っている第4世代(4G)は50Mbps(6.25MB/秒=6400kB/秒)から1Gbps(1024Mbps=128MB/秒)くらい
・目下、じわじわとサービスが拡大中の第5世代(5G)はdocomoだと3.5Gbps(3584Mbps=448MB/秒)くらいの桁違いのスピードなのでMSXで例えるのはもう適切ではないかなー

「Wi-Fi(無線LAN)は快適ですよー」

 と言っても正式には「IEEE 802.11」といって、

・2Mbps(256kB/秒)から9.6Gbps(1228.8MB/秒)まで幅があるので一概には言えないけど…
・MSXのフロッピーディスクは720kBなので2Mbpsというスピードは「わずか3秒で1枚のフロッピーディスクの全容量を送信できちゃうッ!!」

 もっと言えば、

・1Gbps=128MB/秒なので「CDだったら640MB(フロッピーディスク910.2枚分)だからわずか5秒」「DVDだったら4.7GB=4812.8MB(フロッピーディスク6844.87枚分)くらいだから37.6秒」
イロイロと恐ろしい世の中だし桁が多すぎるので計算間違いをしていなければ良いが…

「なんだかピンと来ない話だねー」

 ということであれば、例えば私のブログのトップページは、


・全部で2.82MB(2887.6kB)くらい

 なので、4G回線だと最低でも50Mbps(6.25MB/秒)くらいの速度がある(もちろん理論値だが)ため、

・1秒以内、たぶん0.5秒くらいでダウンロードされて表示される
・ほぼ一瞬だねーッ!!

 ちなみに私のiPhone SE2でスピードテストを行うと、


・4G回線(docomo)でだいたい54Mbpsくらい


・Wi-Fi(docomo光+ビッグローブ)で305Mbps(38.125MB/秒)くらい

 スピードテストに書いてある「HD動画ストリーミングサービス」というのは、

・HD動画→HDTV、つまり日本の地上デジタル放送くらい(1920×1080i、または1440×1080i)
・日本の地上デジタル放送は最高でも約24Mbps(約3MB/秒)くらいなので「50Mbpsだったら複数(24Mbps×2画面)くらい同時に再生表示できますよ」という意味

 ただTVを複数同時に見ると「わけが分からなくなる」のですが、例えば、

ビデオ会議(テレビ会議)で「HDTV品質でする」なら50Mbpsだったら2人、300Mbpsだったら12人くらい同時に参加できますよー的な何か

 まぁ、4G回線を使ってしまうと不安定だったり金銭面でアレなので、

・普通ビデオ会議やテレワークをするならdocomo光みたいなFTTHFTTBを使う、とか
・どうしても4G回線を使いたいなら「HDTV品質じゃなくてSDTV品質へ画質を落としても良いよね」、とか

 少し唐突な話をすると、

日本の地上デジタル放送は「MPEG-2という「DVD-Video」と同じ技術が使われていて「今となってはちょっと古い…」
・今、主流の「H.264/MPEG-4 AVC」なら「MPEG-2の2倍くらい圧縮できる」=「MPEG-2の1/2くらいのデータで済む」ので、H.264を使えばHDTV品質を落とさずデータを1/2にできる

 今のミンナの関心事はおそらく、


スマホでどれだけ「データ通信量(4Gや5G回線)」を使ったのか?

 だと思います。前にもお話したように、

・1GB=1024MB、1MB=1024kB、1kB=1024Byte、1Byte=8bit

 なので例えば、


前回のページ「[長文] [メモリの仕組み] [その1]」は8.63MB
・1GB=1024MBなので1024÷8.63=118.65、つまり「前回のページ」を119回くらい見ると1GBくらいのデータ通信量を使う計算になる
・まぁ、1記事を119回も読まねーよッて感じもするが…

 スマホのデータ通信量(docomoの4G、5G回線)を確かめたい時はiPhoneの場合、


・「設定」→「モバイル通信」で確かめることができる
・私の「前回の支払い請求期間(先月の2024年07月のこと)」は…圧倒的に「ポケモンGO」ッ!!

 まぁ、ポケモンGOは基本的に外でプレイするモノなので、

・無料のWi-Fiスポット(公衆無線LAN)が届かないところも結構行ってたから「仕方ないなぁ…」

 私は月に1.5GBくらいスマホのデータ通信量を使うので、

ギガライトというプランが一番合っている1.5GBだと1GBを超えるから+1000円ッて「ナカナカ上手い事できとるのぅ…」

 このブログは1ページにつき30000字までなので次へ続く
名前:
コメント:

※文字化け等の原因になりますので顔文字の投稿はお控えください。

コメント利用規約に同意の上コメント投稿を行ってください。

 

  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最新の画像もっと見る

最近の「コンピュータイロイロ」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事