G学院を運営する株式会社GimoGimoのオウンドメディア「G-MEDIA」

ゲームのお仕事

2019.08.09 Fri.
ゲーム制作ことはじめ(アセンブリ言語について)

ゲーム制作ことはじめ(アセンブリ言語について)

将来はゲームをする側ではなく、作る側に進みたいという夢を持っている人もいると思います。
ゲームを作るときに必要なプログラミングは昔からありますが、昔のプログラミングは今のものとは異なり、ハードウェアの知識に長けていないと、難しいと言われていました。
プログラマーになるためには努力をすることが大切ですし、今も昔もそれは変わりません。
ゲーム制作のことをはじめ、アセンブリ言語などについても紹介します。

プログラミングに大切なアセンブリ言語とは

これからプログラミングの学習を始める人にとって大切なことが、プログラミングの知識ではないかと思います。
そのひとつに、アセンブリ言語というものがあります。

これはプログラミング言語の類型のひとつで、コンピュータのCPUが実行ができるようになるマシン語と、正確に対応ができる命令語で作られた言語です。

 

人間が実用的にプログラミングできる言語の中で、最もマシン側に近い言語ですので、具体的な仕様については各プロセッサの機種によって変わってきます。

 

コンピュータは、CPUに与えられたプログラムのマシン語の命令列をそれぞれ実行することで処理を行っています。
マシン語の命令はオペコードという番号によって表示されますので、これを人間がひとつずつ記述してプログラミングするのは困難と言われています。

もちろんできないことはありませんが、たとえ努力をして記述したとしても、完成した後に読んだりするのはとても難しく、書き間違いなども結構あります。
それを解消するために、それぞれのオペコードに対応できるニーモニックという、短いアルファベットの命令語を決めて、これを使用してプログラミングできる手法が生み出されてきました。

 

プロセッサのオペコード体系に対応したニーモニックが集まったものを定義したのが、そのプロセッサに対するアセンブリ言語です。

 

例えば、アメリカのインテル社を例にすると分かりやすいです。
インテル社が提供している8086プロセッサでは、指定したレジスタ値を指定したメモリ番地に書き込む命令は「10001000」というビット列で表示されます。

それを十進表記にすると「136」、16進表記にすると「0x88」になります。
これに「mov」のニーモニックを対応すると、何を行う命令なのかを知ることができるようになるでしょう。
アセンブリ言語によって表記されたソースコードは、そのままの形では実行できませんので、アセンブラというソフトウェアでマシン語のプログラムに変換された後に実行されます。

 

このときに行う変換という処理が、アセンブルになります。
アセンブラというのはマシン語への置き換えはもちろん、その他にマクロの展開やシンボルの名前をメモリアドレスや実値に置き換えるなどの処理も可能です。

 

ニーモニック体系はアセンブラで実装されることから、たとえ同じ命令セットに対応したアセンブラであっても、それぞれのアセンブリ言語は違うこともあるのです。ただ一般的には、プロセッサを開発した側が命令セットの内容を公開したり提供したりするときは、標準タイプのニーモニックを公表するため、それに合う実装が行われています。

 

アセンブリ言語の表記

これからプログラマーを目指す人は、アセンブリ語についてもしっかり理解しておく必要があります。
ただ初心者の方は、色々と戸惑うことも多いかもしれません。
マシン語というのは、全体的にコードやデータの集合体ですので、意味の解からない文字や数字がたくさん並んでいると見るのも大変ですし、初心者の方には分かりにくいと思います。

そのような人もたくさんいますので、CPUのメーカーが、仕様書の中にニーモニックという表記法を作ってくれています。

 

これはマシン語の動作を人間が理解しやすいようにしたもので、それを用いた言語がアセンブリ言語になります。
当然ですがニーモニックについては、各メーカーがCPU向けに作成したものですので、それぞれに違いが出てきます。

そのためアセンブリ語の表記について、それぞれのメーカーの仕様を最初に確認しておくことが大切です。
ニーモニックそのものはメーカーの著作物でもありますので、同じ表記にすると著作権の問題が出てきます。
そのためメーカー同士が同じになることは、まずありません。

 

ファミコンのプログラム

ゲームと言うと、昔はファミリーコンピュータいわゆるファミコンが流行しました。
十代の子には解からないかもしれませんが、みんなの両親が子供の頃には、今のスマホよりもかなりのブームになっていました。

 

ファミコンには様々なゲームがカセットとして登場しましたが、それらのゲームもプログラマーが作っていました。
ファミコンの中には、モステクノロジー社製のMOS6502と呼ばれるCPUをリコー社がカスタマイズして、RP2A03と呼ばれるCPUが搭載されていました。

 

RP2A03は、MOS6502から一部の機能を削減して、その上でAY-3-8910をベースにカスタマイズしたものです。
そこには音源モジュール「APU; Audio Porcessing Unit」を、オンチップで搭載していたのが特徴です。

これは「ファミコンに搭載されたプログラムで実行可能なもの≒6502のプログラムで実行可能なもの」と言い換えることもできます。ファミコンのプログラムが、6502のプログラムを実行できるのは、大きく次の5つになります。

 

◆メモリの特定番地よりデータをレジスタに読み込む作業「load, pull」
◆メモリの特定番地にレジスタのデータを記憶する作業「store, push」
◆レジスタ間での値の入れ替え作業「transfer」
◆足し算、引き算、各種論理演算、比較などの演算作業
◆分岐作業「branch, jump」

 

上記の作業は、ファミコンが提供しているハードウェアの機能を用いて、ゲームの開発を行います。
6502のプログラミングについては、全ての変数をグローバル変数によって管理するイメージになります。
ローカル変数の保有も可能ですが、6502はスタック領域が256バイトしか持っていませんので、ローカル変数を使用してしまうと、すぐにスタックオーバーフローしてしまいます。

 

Z80について

プログラマーになるために、プログラミングの勉強をしている人もいると思います。
そんな人は、「Z80」も理解しておきましょう。
Z80というのは、アメリカのザイログが製造した「8ビット・マイクロプロセッサー」です。
1976年に発表された後、1980年代の中頃までコンピュータのCPUとして活躍するなど、幅広い用途に用いられてきました。

 

それ以後も周辺デバイスなどに集積した製品が登場するなど、現在でも様々なところで活躍しています。

私たちの目に見えない世界で、役立っているのです。

Z80の互換CPUについては、登場したときから高速の8080互換CPUとして応用されて、S-100バス互換機などにも搭載されるなど様々なところで活躍していました。

その波は日本にも到達していて、国内においては1970年代末から80年代前半頃にかけて、ビジネス向けのオフィスコンピュータなどに搭載されていました。

 

プログラマーとしてゲームを作るためには、様々なプログラミング言語を知っておく必要があります。
ゲーム制作ことはじめとして、アセンブリ言語について紹介しましたが、これはプログラミング学習には欠かせないものです。
昔流行ったファミコンなども、プログラマーたちが当時の技術を駆使して、努力をして作り上げました。
今後もたくさんのゲーマーが喜んで、満足してくれるゲームがたくさん登場するでしょう。

この記事を友だちにシェアする

  • line
  • twitter
  • facebook

前の記事へ

一覧へ戻る

次の記事へ