特許第6879501号(P6879501)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社ジャパン・アイディーの特許一覧 ▶ 株式会社ピーエーネット技術研究所の特許一覧 ▶ 株式会社ナック企画の特許一覧

特許6879501遊技機制御用マイクロコンピュータおよびプログラム言語処理系
<>
  • 特許6879501-遊技機制御用マイクロコンピュータおよびプログラム言語処理系 図000002
  • 特許6879501-遊技機制御用マイクロコンピュータおよびプログラム言語処理系 図000003
  • 特許6879501-遊技機制御用マイクロコンピュータおよびプログラム言語処理系 図000004
  • 特許6879501-遊技機制御用マイクロコンピュータおよびプログラム言語処理系 図000005
  • 特許6879501-遊技機制御用マイクロコンピュータおよびプログラム言語処理系 図000006
  • 特許6879501-遊技機制御用マイクロコンピュータおよびプログラム言語処理系 図000007
  • 特許6879501-遊技機制御用マイクロコンピュータおよびプログラム言語処理系 図000008
  • 特許6879501-遊技機制御用マイクロコンピュータおよびプログラム言語処理系 図000009
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6879501
(24)【登録日】2021年5月7日
(45)【発行日】2021年6月2日
(54)【発明の名称】遊技機制御用マイクロコンピュータおよびプログラム言語処理系
(51)【国際特許分類】
   G06F 8/40 20180101AFI20210524BHJP
   G06F 12/04 20060101ALI20210524BHJP
   A63F 7/02 20060101ALI20210524BHJP
【FI】
   G06F8/40
   G06F12/04 510D
   A63F7/02 326Z
   A63F7/02 334
【請求項の数】6
【全頁数】14
(21)【出願番号】特願2017-2560(P2017-2560)
(22)【出願日】2017年1月11日
(65)【公開番号】特開2018-112866(P2018-112866A)
(43)【公開日】2018年7月19日
【審査請求日】2019年11月1日
(73)【特許権者】
【識別番号】596048581
【氏名又は名称】株式会社ジャパン・アイディー
(73)【特許権者】
【識別番号】598044464
【氏名又は名称】株式会社ピーエーネット技術研究所
(73)【特許権者】
【識別番号】504228634
【氏名又は名称】株式会社ナック企画
(74)【代理人】
【識別番号】100095337
【弁理士】
【氏名又は名称】福田 伸一
(74)【代理人】
【識別番号】100174425
【弁理士】
【氏名又は名称】水崎 慎
(72)【発明者】
【氏名】矢島 修
(72)【発明者】
【氏名】井上 明
(72)【発明者】
【氏名】高橋 裕司
【審査官】 多賀 実
(56)【参考文献】
【文献】 特開2018−094128(JP,A)
【文献】 特開昭64−051539(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00−8/77
G06F 9/30−9/355
G06F 9/44−9/455
G06F 12/04
G06F 21/00−21/88
A63F 7/02
(57)【特許請求の範囲】
【請求項1】
少なくとも、遊技機制御用プログラムと該遊技機制御用プログラムで使用するデータが記憶されているROM部と、該ROM部の遊技機制御用プログラムおよびデータに基づいて遊技機の制御を行うCPU部と、該CPU部が前記遊技機制御用プログラムを実行する際に作業領域として利用可能なRAM部と、を備えたワンチップ構造の遊技機制御用マイクロコンピュータにおいて、
前記ROM部に記憶されているデータの少なくとも一部は、データのビット幅と該ビット幅で表す数値との組で定義されたビットデータを隙間なく敷き詰めて塊構造にした塊データとし、
前記CPU部には、ビットデータの位置と該ビットデータのビット幅を指定して、前記塊データから任意のビットデータをロードする命令を含ませておき、
前記遊技機制御用マイクロコンピュータ自体と、前記ROM部に記憶されている前記遊技機制御用プログラムおよび前記塊データを含むデータが、真正なものであることを外部から判定できるようにするセキュリティ管理部を設けたことを特徴とする遊技機制御用マイクロコンピュータ。
【請求項2】
前記塊データには、複数のビット幅が定義された各ビット幅の並び順に対応させて各ビット幅の数値を順に定義した一連のビットデータから成るビットデータ群が含まれることを特徴とする請求項1に記載の遊技機制御用マイクロコンピュータ。
【請求項3】
前記塊データには、複数のビット幅の並び順に対応させて定義したビットデータ群が連続して複数含まれることを特徴とする請求項2に記載の遊技機制御用マイクロコンピュータ。
【請求項4】
前記請求項1〜請求項3の何れか1項に記載の遊技機制御用マイクロコンピュータのROM部に書き込む遊技機制御用プログラムと塊データを含むバイナリコードを、ソースコードから変換して生成するプログラム言語処理系であって、
前記ソースコードとバイナリコードを併記して出力するリストファイルには、
前記塊データとしてROM部に書き込むビットデータのバイナリコードを、16進数で表記する16進数表示領域と、
前記塊データとしてROM部に書き込むビットデータのバイナリコードを、2進数で表記する2進数表示領域と、
を並べて設けるようにしたことを特徴とするプログラム言語処理系。
【請求項5】
前記2進数表示領域には、塊データとして含まれている各ビットデータに分けて2進数表記するようにしたことを特徴とする請求項4に記載のプログラム言語処理系。
【請求項6】
前記2進数表示領域に2進数表記する各ビットデータは、塊データ上のビット位置に準じて表示し、当該ビットデータの表示対象外となるビット箇所は、予め定めた無データ記号で埋めておくようにしたことを特徴とする請求項5に記載のプログラム言語処理系。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、少なくとも、遊技機制御用プログラムと該遊技機制御用プログラムで使用するデータが記憶されているROM部と、該ROM部の遊技機制御用プログラムに基づいて遊技機の制御を行うCPU部と、該CPU部が前記遊技機制御用プログラムを実行する際に作業領域として利用可能なRAM部と、を備えたワンチップ構造の遊技機制御用マイクロコンピュータと、この遊技機制御用マイクロコンピュータのROM部に書き込む遊技機制御用プログラムとデータを含むバイナリコードを、ソースコードから変換して生成するプログラム言語処理系に関するものである。
【背景技術】
【0002】
遊技機を制御する遊技機制御用マイクロコンピュータについては、制御のために使用することのできるメモリ容量が法律に基づいた規則によって定められており、その制限を超えた性能の遊技機を製造、販売することは違法である。
【0003】
遊技機制御用マイクロコンピュータが使用できるメモリ容量が同じである場合、メモリを効率的に使用することができれば、より多くの機能を実装することができるので、それだけ市場競争力のある遊技機を開発することができる。したがって、遊技機の製造メーカーにとっては、メモリの効率的な使い方は重要なテーマである。
【0004】
例えば、1つのコマンドに複数の命令(図柄1記憶数コマンドおよび図柄2記憶数コマンド)を含めることによって必要なプログラムやメモリの容量を削減したり、ぱちんこ遊技の始動入賞時には敢えて変動パターン乱数の取得はせず、別途設けた変動パターン抽選時に変動パターン乱数を取得することにより、始動入賞時に記憶すべき情報の数を減らして、プログラムやメモリの容量を削減したり、取得した図柄乱数の二値コードにおける上位バイトの値に基づき使用する図柄判定テーブルを決定し、図柄乱数の二値コードにおける下位バイトの値に基づき図柄判定テーブルから図柄を決定することにより、メモリやプログラムの容量を削減したりするぱちんこ遊技機が提案されている(例えば、特許文献1を参照)。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2016−034345号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、特許文献1に記載された発明では、まとまったメモリ容量の削減を一気に行えるものではなく、多岐にわたる改善を行った割に、メモリ容量の削減は僅かである。しかも、特許文献1に記載の発明のように、改善箇所を見つけてメモリ容量を削減する制御方式へ変更する場合、従前の遊技機とは微妙に異なる遊技制御が必要となるため、プログラムの変更箇所も多岐にわたり、それだけバグが発生し易く、デバッグに時間がかかるので、遊技機の開発を困難にしてしまう危険性がある。
【0007】
本発明は上記事情に鑑みてなされたものであり、遊技機制御用プログラムに複雑な変更を加えることなく、メモリ容量を効率的に削減できる遊技機制御用マイクロコンピュータの提供を目的とする。また、遊技機制御用マイクロコンピュータのROM部に書き込むバイナリデータを作成する過程でのデバッグ作業を容易にするプログラム言語処理系の提供を目的とする。
【課題を解決するための手段】
【0008】
上記の課題を解決するために、請求項1に係る発明は、少なくとも、遊技機制御用プログラムと該遊技機制御用プログラムで使用するデータが記憶されているROM部と、該ROM部の遊技機制御用プログラムおよびデータに基づいて遊技機の制御を行うCPU部と、該CPU部が前記遊技機制御用プログラムを実行する際に作業領域として利用可能なRAM部と、を備えたワンチップ構造の遊技機制御用マイクロコンピュータにおいて、前記ROM部に記憶されているデータの少なくとも一部は、データのビット幅と該ビット幅で表す数値との組で定義されたビットデータを隙間なく敷き詰めて塊構造にした塊データとし、前記CPU部には、ビットデータの位置と該ビットデータのビット幅を指定して、前記塊データから任意のビットデータをロードする命令を含ませておき、前記遊技機制御用マイクロコンピュータ自体と、前記ROM部に記憶されている前記遊技機制御用プログラムおよび前記塊データを含むデータが、真正なものであることを外部から判定できるようにするセキュリティ管理部を設けたことを特徴とする。
【0009】
また、請求項2に係る発明は、前記請求項1に記載の遊技機制御用マイクロコンピュータにおいて、前記塊データには、複数のビット幅が定義された各ビット幅の並び順に対応させて各ビット幅の数値を順に定義した一連のビットデータから成るビットデータ群が含まれることを特徴とする。
【0010】
また、請求項3に係る発明は、前記請求項2に記載の遊技機制御用マイクロコンピュータにおいて、前記塊データには、複数のビット幅の並び順に対応させて定義したビットデータ群が連続して複数含まれることを特徴とする。
【0011】
また、請求項4に係る発明は、前記請求項1〜請求項3の何れか1項に記載の遊技機制御用マイクロコンピュータのROM部に書き込む遊技機制御用プログラムと塊データを含むバイナリコードを、ソースコードから変換して生成するプログラム言語処理系であって、前記ソースコードとバイナリコードを併記して出力するリストファイルには、前記塊データとしてROM部に書き込むビットデータのバイナリコードを、16進数で表記する16進数表示領域と、前記塊データとしてROM部に書き込むビットデータのバイナリコードを、2進数で表記する2進数表示領域と、を並べて設けるようにしたことを特徴とする。
【0012】
また、請求項5に係る発明は、前記請求項4に記載のプログラム言語処理系において、前記2進数表示領域には、塊データとして含まれている各ビットデータに分けて2進数表記するようにしたことを特徴とする。
【0013】
また、請求項6に係る発明は、前記請求項5に記載のプログラム言語処理系において、前記2進数表示領域に2進数表記する各ビットデータは、塊データ上のビット位置に準じて表示し、当該ビットデータの表示対象外となるビット箇所は、予め定めた無データ記号で埋めておくようにしたことを特徴とする。
【発明の効果】
【0014】
本発明に係る遊技機制御用マイクロコンピュータによれば、データ記憶に要する容量を削減してメモリ容量を効率的に抑制できると共に、データを取り出すために遊技機制御用プログラムに複雑な変更を加える必要が無い。また、本発明に係るプログラム言語処理系によれば、遊技機制御用マイクロコンピュータのROM部に書き込むバイナリデータを作成する過程でのデバッグ作業を容易にすることができる。
【図面の簡単な説明】
【0015】
図1】本発明に係る遊技機制御用マイクロコンピュータを備える遊技機の概略構成図である。
図2】主制御基板に実装した遊技機制御用マイクロコンピュータおよびプログラム言語処理系の概略構成図である。
図3】ビット幅の異なるデータ要素を隙間なく敷き詰めた塊データの一例を示すデータ構造図である。
図4】ビット幅と数値の組合せで1つのデータ要素を定義したソースリストの一例を示す説明図である。
図5】複数のビット幅が定義された各ビット幅の並び順に対応させて各ビット幅の数値を順に定義した一連のデータ要素から成るデータ要素群を連続して定義したソースリストの一例を示す説明図である。
図6】データ要素として定義されたビットデータを取り出して転送するビットデータ転送命令の概要を示す説明図である。
図7】ビットデータ転送命令の動作概要を示す説明図である。
図8】プログラム言語処理系が出力するリストファイルの一例を示すイメージ図である。
【発明を実施するための形態】
【0016】
以下、本発明に係る遊技機制御用マイクロコンピュータの実施形態を、添付図面に基づいて詳細に説明する。
【0017】
図1に例示する遊技機100は、遊技球を用いた弾球遊技を行えるぱちんこ式遊技機である。遊技機100における主な遊技進行の制御等を担う主制御基板200には、遊技機用マイクロコンピュータ1が搭載され、各種の遊技機能装置を制御する。遊技機用マイクロコンピュータ1の内部には、遊技機制御用プログラムおよび該遊技機制御用プログラムが参照するデータ(以下、遊技機制御用プログラム等という)が固定的に記憶されており、遊技機制御用プログラム等に基づいて遊技機用マイクロコンピュータ1が行う遊技動作の一例は、次のようなものになる。
【0018】
遊技機100の遊技盤面に設けられた遊技球センサからの入力信号を監視し、遊技球の入賞を検知すると、入賞口の種別に応じて予め定められている払出数分の遊技球を払い出す。遊技球が入賞した入賞口が始動口であった場合、特別図柄装置における図柄変動などの演出をするとともに、大当たりか否かの判定を行う。大当たりの判定は、遊技球が始動口へ入賞したのを検知したタイミングで取得した乱数値が、予め定めておいた特定の値と一致するか否かで行う。すなわち、始動口入賞時に取得した乱数値が特定の値と一致した場合に、これを大当たりと判定するのである。なお、この処理をぱちんこ式遊技機の内部抽選と呼ぶ。
【0019】
内部抽選の確率は、乱数の取り得る値の範囲と、大当たりと判定する乱数値の個数で決まる。例えば、乱数の取り得る値の範囲が、0〜199であり、7という値1個だけを大当たりの乱数値と定めておいた場合には、大当たりの確率は1/200となる。
【0020】
上記のようにして大当たりと判定された場合、役物装置のソレノイドを駆動して大入賞口を開放し、大入賞口へ遊技球が入賞できる大当たり遊技動作を行う。そして、遊技球センサにより、大入賞口への遊技球の入賞を検知すると、入賞の都度、予め定められている払出数分の遊技球を払い出す。大入賞口に所定個数以上の遊技球が入賞したことを検知すると、大入賞口をいったん閉じるが、大入賞口の開放が、所定の回数に達しない場合、再び大入賞口を開放する。なお、大当たり時に大入賞口を何回開放するかは、大当たりの確率とともに、遊技機の仕様として適宜に定められている。
【0021】
一方、回胴式遊技機の場合、遊技機用マイクロコンピュータ1に書き込まれている遊技機制御用プログラム等による遊技動作の一例は、次のようなものになる。
【0022】
メダル投入口から遊技メダルが投入されると、これを遊技メダル投入センサによって検知する。1回の遊技で投入できる最大枚数よりも多くの遊技メダルが投入された場合、超過した遊技メダルは内部に貯留され、その貯留枚数を更新する。なお、遊技メダルが投入されるのではなく、投入ボタンが操作された場合、それは貯留された遊技メダルが投入されたものとみなし、貯留数を減じて、投入数を加算する。
【0023】
回胴回転装置のスタートレバーが操作されたのを検知すると、スタートレバー操作を検知したタイミングで乱数を取得し、その乱数の値によって、回胴が停止したときに、どの図柄を揃えてもよいか決定する。この処理を回胴式遊技機の内部抽選と呼ぶ。ここで、ある図柄について揃えてもよいと決定した場合、その図柄について「フラグを立てる」と表現する。次いで、ステッピングモータのパルスを出力することにより、回胴回転装置を制御する。
【0024】
そして、停止ボタンが操作されたことを検知すると、回胴回転装置によって回転していた回胴を停止させるのであるが、このとき、回転している回胴の停止位置近くの図柄が、フラグの立った図柄である場合は、その図柄が停止位置に揃って止まるように回胴回転装置を制御し、フラグの立った図柄が停止位置近くにない場合は、特定の図柄が停止位置に揃わないように回胴回転装置を制御する。つまり、回胴式遊技機で図柄が揃うのは、回胴式遊技機の内部抽選によって特定の図柄についてフラグが立ち、かつ、遊技者が停止ボタンをその図柄が停止位置に差し掛かったタイミングで操作した場合に限られる。
【0025】
停止位置に図柄が揃った場合、揃った図柄に応じた枚数の遊技メダルを、払出装置から払い出すか、又は、貯留数をその分増加させる。
【0026】
このように、ぱちんこ式遊技機および回胴式遊技機の何れにおいても、遊技機用マイクロコンピュータ1に書き込まれている遊技機制御用プログラム等によって、遊技状態の遷移の制御、及び、各遊技状態における遊技メダル等の投入と払い出しの制御を全て行っている。
【0027】
図2は、遊技機制御用マイクロコンピュータ1の概略構成を示す。遊技機制御用マイクロコンピュータ1は、内部に少なくとも、CPU部11、ROM部12、RAM部13、内部バス14、外部バスインターフェース15を備えたワンチップ構造である。CPU部11は、ROM部12のプログラム領域12aに記憶されている遊技機制御用プログラムとデータ領域12bに記憶されている参照用のデータに基づいて、ぱちんこ遊技を進行する制御を行う。
【0028】
上記ROM部12のプログラム領域12aおよびデータ領域12bに書き込む遊技機制御用プログラムおよびデータは、アセンブラやコンパイラといったプログラム言語処理系300が、高級言語で書かれたソースコード2を機械語に変換したバイナリコード3である。このバイナリコード3は、ROMライタ等を用いて遊技機制御用マイクロコンピュータ1のROM部12へ書き込まれる。なお、プログラム言語処理系300は、デバッグを行う場合等に用いるリストファイル4の出力(モニター表示あるいはペーパー出力)機能を備えている。
【0029】
また、遊技機制御用マイクロコンピュータ1にはセキュリティ管理部16を設け、遊技機制御用マイクロコンピュータ1自体と、プログラム領域12aおよびデータ領域12bに書込まれた遊技機制御用プログラムおよびデータが、真正なものであることを外部から判定できるようにする。例えば、検査端子17を介して接続された検査装置とセキュリティ管理部16が所定の認証手続き、および、データチェックを行い、検査装置がその検査結果を表示する。
【0030】
上記のように構成した遊技機制御用マイクロコンピュータ1においては、データ領域12bに多様なデータを効率良く記憶させて、データ容量を抑制できるようにすると共に、データ領域12bから任意のデータを読み出すプログラムは、CPU部11の基本機能として予め組み込んでおく。以下、データの記憶構造とデータの取り出し方法について説明する。
【0031】
図3は、記憶対象のデータのビット幅と該ビット幅で表す数値との組で定義されたビットデータを隙間なく敷き詰めて塊構造にした塊データの一例を示すデータ構造図である。なお、「隙間なく」というのは、あるデータの最上位ビットMSBと後続のデータの最下位ビットLSBとの間に余計なデータがない、ということである。
【0032】
図3の例では、3ビットのデータ(02h)における最上位ビットMSBに続けて4ビットのデータ(0Fh)における最下位ビットLSBを書き込み、この4ビットのデータにおける最上位ビットMSBに続けて10ビットのデータ(0103h)における最下位ビットLSBを書き込み、この10ビットのデータにおける最上位ビットMSBに続けて3ビットのデータ(01h)における最下位ビットLSBを書き込み、この3ビットデータにおける最上位ビットMSBに続けて4ビットのデータ(05h)における最下位ビットLSBを書き込み、この4ビットのデータにおける最上位ビットMSBに続けて10ビットのデータ(0009h)の最下位ビットLSBを書き込み、以下同様にして、隙間無くデータを敷き詰めたものである。
【0033】
本来、ROM部12からCPU部11へデータを送信する場合、内部バス14のバス幅(例えば、8bit=1Byte)を基準とするため、有意な数値が含まれるビット幅がバス幅よりも短い場合でも、データとしてはバス幅に相当するビット幅で送信される。例えば、データバスが8ビット幅である場合、3ビットのデータである02h(010)の後に5ビットのデータである00h(00000)を追加し、8ビットのデータである02h(00000010)とすることが一般的である。この追加した5ビットの00hについては、使用しているデータのビット位置を調整するだけの機能しかなく、データ容量増大の要因となるので、有意な数値を含まない桁あわせの追加ビットを除いたビットデータのみ敷き詰めた塊データとすれば、データ領域12bに要するデータ容量を抑制できるのである。
【0034】
なお、以降の説明では、データバスのビット幅と異なるビット幅の数値データを総称して「ビットデータ」と呼ぶ。すなわち、各ビットデータは、ビット幅と該ビット幅で表す数値との組で定義され、塊データの中に隙間無く敷き詰められた状態で記憶されることとなる。
【0035】
図4は、ビット幅と数値の組合せでビットデータを定義したソースリストの一部である。本図中、「BF3」は3ビット幅のデータを定義する疑似命令であり、1バイトの数値である「02h」の3ビット分(010)がビットデータとなる。なお、疑似命令とは、プログラム言語処理系300の動作を制御する記述であって、機械語への変換対象ではない。そこで、プログラムに使われる命令と区別するために疑似命令と呼んでいる。
【0036】
以下同様に、「BF4」は4ビット幅のデータを定義し、1バイトの数値である「0Fh」の4ビット分(1111)がビットデータとなり、「BF10」は10ビット幅のデータを定義し、2バイトの数値である「0103h」の10ビット分(0100000011)がビットデータとなり、「BF3」は3ビット幅のデータを定義し、1バイトの数値である「01h」の3ビット分(001)がビットデータとなり、「BF4」は4ビット幅のデータを定義し、1バイトの数値である「05h」の4ビット分(0101)がビットデータとなり、「BF10」は10ビット幅のデータを定義し、2バイトの数値である「0009h」の10ビット分(0000001001)がビットデータとなる。
【0037】
すなわち、図3図4に示す数値データ「02h」「0Fh」「0103h」「01h」「05h」「0009h」を、そのまま記憶する場合には、8bit+8bit+16bit+8bit+8bit+16bit=64bit=8Byteのデータ容量を必要とするが、本実施形態に係る遊技機用マイクロコンピュータ1のようにビットデータとして記憶してゆけば、3bit+4bit+10bit+3bit+4bit+10bit=34bit=4Byte+2bitのデータ容量で足りるので、使用するメモリ容量を半分近くまで抑制できる。
【0038】
図4に示すソースリストのように定義されたビットデータは、プログラム言語処理系300によって、ROM部12のデータ領域12bに書込むデータに変換される。具体的には、プログラム言語処理系300の内部で、図3のように隙間なくデータを敷き詰めた状態にした後、データバスのビット幅(例えば、1Byte)でそのデータを仕切り直すのである。例えば、図3図4で示したビットデータの並びの場合、「BF3,02h」+「BF4,0Fh」で7bitであるから、「BF10,0103h」における最下位ビットLSBの位置でちょうど8bitの区切りとなるので、この部分をプログラム言語処理系300が変換して得られるデータは、11111010=FAhとなる。同様に、後続の8bitの区切りをプログラム言語処理系300が変換して得られるデータは、10000001=81h、01010010=52h、00001001=09hとなる。
【0039】
上述した図4のソースリストに示すように、ビットデータ毎にビット幅と数値を定義する場合、1つのビットデータを定義するために1行分を要する。定義するビットデータの数が多ければ、それだけソースコードの行数も多くなるのである。そこで、図5に示すソースリストのように、複数のビット幅を定義した後、各ビット幅の並び順に対応させて各ビット幅の数値を順に定義すれば、効率良くビットデータを定義することができる。
【0040】
図5のソースリストにおいて、1行目の「BFA{3,4,10}」は、以降の行で定義するデータは、3ビット幅、4ビット幅、10ビット幅のデータであることを定義する疑似命令である。2行目は、このビット幅の定義に対応した順に数値データを記載したもので、2行目における「02h」が3ビット幅のビットデータ、「0Fh」が4ビット幅のビットデータ、「0103h」が10ビット幅のビットデータであることを、まとめて定義している。かくすれば、複数のビットデータをまとめて定義したビットデータ群を1行で記載できる。なお、6行目の「ENDBFA」は、データ定義ブロックの終りを示す疑似命令である。
【0041】
しかも、疑似命令で定義したビット幅の並び順に対応する数値データが更に繰り返される場合には、2行目のビットデータ群と同様に、3行目〜5行目でもビットデータ群を定義することで、一層効率良くビットデータを定義できる。すなわち、2行目のビットデータ群1と同様に、3行目における「01h」で3ビット幅のデータ、「05h」で4ビット幅のデータ、「0009h」で10ビット幅のデータをまとめて定義したビットデータ群2となり、4行目における「05h」で3ビット幅のデータ、「0Ah」で4ビット幅のデータ、「020Ch」で10ビット幅のデータをまとめて定義したビットデータ群3となり、5行目における「04h」で3ビット幅のデータ、「06h」で4ビット幅のデータ、「0197h」で10ビット幅のデータをまとめて定義したビットデータ群4となる。
【0042】
このように、複数のビット幅の並び順に対応させて定義したビットデータ群を連続して記載してゆけば、より短い行数で多くのビットデータを定義できる。図5のソースリストでは、12個のビットデータの定義を6行で記載できる。
【0043】
上述したように、ビットデータを隙間なく敷き詰めて塊構造にした塊データが、ROM部12のデータ領域12bに書き込むデータとして含まれる場合、塊データの中から目的とするビットデータをCPU部11が取り出すためには、専用の命令が必要となる。図6は、目的とするビットデータをレジスタへ転送する命令の一例を説明した図である。
【0044】
図6において転送命令として示すソースコード「LDB A,(20).4」において、「LDB」はオペレータであり、ビットデータの転送命令であることを示し、「A」は転送先のレジスタとしてAレジスタを指定していることを示し、「(20)」は転送するビットデータが基準点より20ビット目に位置することを示し、「.4」は転送するビットデータのビット幅が4ビットであることを示している。
【0045】
この命令を実行すると、基準点から20ビット目にあるデータ4ビット(0101)をAレジスタ(例えば、レジスタ長は8bit)に転送するので、Aレジスタの値は05h(00000101)となる。なお、ビットデータの位置を示す基準点は特に限定されるものではなく、メモリの先頭であっても良いし、「基準点レジスタ」というレジスタを設けて、このレジスタに設定されたアドレスのビット0の位置を基準点としても良い。
【0046】
図7は、上述したビットデータの転送命令をCPU部11がどのように処理するかの概要を説明した図である。
【0047】
前提として、CPU部11のデータバスのビット幅は8ビットであるとする。塊データとして、3ビット幅の02h、4ビット幅の0Fh、10ビット幅の0103h、…といったビットデータが隙間なくメモリに敷き詰められている場合、CPU部11はデータバスのビット幅である8ビットの区切りでデータにアクセスするので、CPU部11が見たデータは、基準点から順に、FAh、81h、52h、・・・となる。
【0048】
なお、ビットデータの位置は、基準点からのビット数で特定できることから、以下の説明ではビットデータの記録位置を「ビットアドレス」と呼ぶ。一方、8ビットの区切りでCPU部11がアクセスするデータの位置を「バイトアドレス」と呼ぶ。
【0049】
塊データにおいて、ビットアドレスで指定されたビットデータの位置は、ビットアドレスを8で割った商をバイトアドレスとするデータ内にあり、余りがそのバイト内でのビット位置となる。例えば、図7で例示したように、ビットアドレスが20ビットの場合、20を8で割ると、その商は2で、余りが4となる。すなわち、バイトアドレス2における1バイトデータの4ビット目がビットデータの位置となる。
【0050】
すなわち、CPU部11が、その位置から4ビット分のデータをAレジスタに転送することで、転送命令「LDB A,(20).4」を実行できるのである。
【0051】
ただし、データバスおよびAレジスタのビット幅が8ビットであることから、4bit幅のビットデータをそのまま読み出してAレジスタにセットすることはできない。そこで、先ず、ビットアドレスを8で割った商を基準点設定レジスタに設定された値に加算して得られたバイトアドレスから2バイト分のデータ(バイトアドレス2およびバイトアドレス3のデータ)をリードし、そのビットアドレスを8で割った余りの数だけ右(下位ビット側)へシフトする。
【0052】
これにより、ビットデータの最下位ビットを1バイトデータの最下位ビットに合わせた2バイト分のデータが得られる。なお、バイトアドレスから2バイト分のデータをリードするのは、右シフトしてビットデータの位置を調整する際に、上位ビットを2バイト目のデータからシフトするためである。本例のように、対象となるビットデータが最初のバイトアドレスの1バイトデータ内に全て含まれている場合には、2バイト目のバイトデータをリードする必要はないが、2バイト目のバイトデータにビットデータが含まれているか否かを判定する必要がないので、CPU部11に実装させるデータ転送機能が簡単になるというメリットがある。
【0053】
上記のようにして得られた2バイト分のデータに対して、転送命令で要求されているビット数(4ビット)をマスクして下位ビットから取り出し、上位ビットの空き(4ビット分)を0で埋めた8ビットデータの値を生成し、これをAレジスタにセットすることで、転送命令「LDB A,(20).4」を完遂できる。
【0054】
なお、10ビット幅のビットデータを指定した転送命令で、転送先レジスタのビット幅が16ビットである場合は、ビットアドレスを8で割った商のバイトアドレスから3バイト分のバイトデータをリードすれば良い。ここでは、データバスのビット幅は8ビットなので、ビットデータの最下位ビット位置を合わせる右シフトは7ビット以下となるので、転送先レジスタのバイト数より1バイトだけ余計にリードすれば十分だからである。
【0055】
このように塊データから任意のビットデータをリードする機能は、CPU部11の基本機能として組み込むことができるので、塊データからビットデータを読み出すための余計なプログラムを必要とせず、また仮想メモリを定義する専用レジスタを設定する必要もないので、ROM部12内のプログラム領域12aを無駄に消費することはない。
【0056】
図8は、プログラム言語処理系300が出力するリストファイル4の一例である。一般的に、プログラム言語処理系300が出力するリストファイル4は、ソースプログラムの記述と、その記述を変換した機械語との対応がわかるように表示したもので、1ステップずつ動作を確認して、デバッグをするような場合に利用されるものである。
【0057】
リストファイル4には、例えば、行番号表示領域41、バイトアドレス表示領域42、十六進数表記機械語表示領域43、二進数表記機械語表示領域44、ソースプログラム表示領域45を備え、行番号表示領域41に表示された行番号を基準として、バイトアドレス、機械語(16進および2進)、ソースプログラムが表示される。このソースプログラムは、塊データを生成する部分で、ビットデータのビット幅を3種類定義する疑似命令と、各ビット幅の並び順に対応させて3つの数値を定義したビットデータ群を4つ連続して定義した例である。
【0058】
上記十六進数表記機械語表示領域43には、バイトアドレス表示領域42に記載されたバイトアドレスに格納されている16進数表記の機械語が表記される。この16進数表記の機械語は、CPU部11が8ビット区切りでアクセスするバイトデータに相当する。なお、本例のリストファイル4においては、バイトアドレスが複数行に跨がる場合、16進数表記の機械語は最終行に表示する。
【0059】
一方、十六進数表記機械語表示領域43とソースプログラム表示領域45の間に設けた二進数表記機械語表示領域44には、2進数8ビット分が1行に表示できる。なお、下位4ビット表示領域44aと上位4ビット表示領域44bとの間には、スペース挿入領域44cを設けることで、4ビット毎のビット位置を直感的に理解し易い表示となるように配慮したが、スペース挿入領域44cを設けずに、下位4ビット表示領域44aと上位4ビット表示領域44bが連続するように表示しても構わない。
【0060】
以下に、プログラム言語処理系300が、どのようにソースプログラムからこのリストファイル4を作成するかについて説明する。
【0061】
行番号3002の行のソースプログラムに、「BFA{3,4,10}」とあるので、プログラム言語処理系300は、以下に定義されるビットデータのビット幅が、それぞれ3ビット、4ビット,10ビットであることを記憶する。
【0062】
行番号3003の行では、最初の数値が「02H」であるから、これは先のビット幅定義を参照して3ビットのビットデータと判断でき、「010」と変換できる。なお、二進数表記機械語表示領域44においては、1行に複数のビットデータを表示せず、後続のビットデータを表示するときは、行を改めるものとする。このため、二進数表記機械語表示領域44の3003行目では、3ビット幅のビットデータをビット0〜2に配置し、ビットデータが割り当てられていないビット3〜7を無データ記号(例えば、「.」)で埋めておく。かくして、二進数表記機械語表示領域44の3003行目の表示は「.... .010」となる。このように表記することで、CPU部11が読み出す基準単位となるバイトデータ内におけるビットデータ「010」の位置が直感的に理解できる。
【0063】
行番号3003の行で定義される次の数値「0FH」は、先のビット幅定義を参照して4ビット幅のビットデータと判断できるので、「1111」と変換できる。この4ビット幅のビットデータは3004行目に記載するが、ビット0〜5には配置せず、先のビットデータ(3ビット幅)の続きとしてビット3〜6に配置することで、「.111 1...」と表示する。このように表記することで、CPU部11が読み出す基準単位となるバイトデータ内におけるビットデータ「1111」の位置が直感的に理解できる。
【0064】
行番号3003の行で定義される最後の数値「0103H」は、先のビット幅定義を参照して10ビット幅のビットデータと判断でき、「0100000011」と変換できる。この10ビット幅のビットデータは3005行目から記載するから、先のビットデータの続きとしてビット7に最下位ビットを配置することで、「1... ....」と表記する。これで、バイトアドレス9000番地に書き込むバイトデータの8ビット全てが定義されるので、十六進数表記機械語表示領域43の3005行には「FA」と表示する。
【0065】
なお、3005行目から記載をはじめた10ビット幅のビットデータについて、残り9ビット分を表示するためには、3006行および3007行に跨がって記載する必要がある。そこで、二進数表記機械語表示領域44における最上位ビットの上位側に継続記号「−」を付すことで次の行に続くことを示し、二進数表記機械語表示領域44における最下位ビットの下位側に継続記号「−」を付すことで前の行から続くことを示すものとする。よって、二進数表記機械語表示領域44における3005行目の記載は、図8に示すとおり、「−1... ....」となる。
【0066】
上記のようにして、バイトアドレス9000番地には1バイトのデータ「FA」が配置されたので、次の3006行にはバイトアドレス9001番地を表示する。そして、10ビット幅のビットデータの続きである「10000001」をバイトアドレス9001番地のビット0〜7に配置すると、8ビット全てが定義されるので、二進数表記機械語表示領域44の3006行には「−1000 0001−」と表記し、十六進数表記機械語表示領域43の3006行には「81」と表示する。
【0067】
3005行目から記載をはじめた10ビット幅のビットデータについて、まだ配置していない残り1ビットの「0」は、バイトアドレス9002番地のビット0に配置することで、二進数表記機械語表示領域44の3007行には「.... ...0−」と表記する。なお、バイトアドレス9002番地では、8ビット全てが定義されていないので、十六進数表記機械語表示領域43の3007行は空欄のままである。
【0068】
このような操作を繰り返して、ソースプログラムに記述されたビットデータの定義を機械語に変換する。ビットデータの定義は、3022行の「ENDBFA」というビットデータ定義の終了を意味する疑似命令で終了するが、ここで、バイトデータのビット4〜7にはまだデータが配置されていないので、強制的に桁あわせの「0000」を配置してバイトデータを完成させ、バイトアドレス9008番地の十六進数表記機械語表示領域43には「06」を表示し、二進数表記機械語表示領域44の3022行には「0000 ....」と表記する。
【0069】
上記のようにして十六進数表記機械語表示領域43と二進数表記機械語表示領域44を併記したリストファイル4を参照すれば、一見性が高く、ソースプログラムの記述がどのような機械語に変換されるのかを理解し易い。特に、二進数表記機械語表示領域44には、各ビットデータに分けて2進数表記しておくことで、個々のビットデータが、塊データ上のどこ(どのバイトアドレスのデータ)に含まれているかを把握できる。しかも、各ビットデータをバイトデータ上の位置に対応させて表示すると共に、当該ビットデータの表示対象外となるビット箇所を無データ記号で埋めておけば、各ビットデータがどのバイトデータのどの位置に配置されているのかを一目で理解できるので、詳細なデバッグ作業に有益である。加えて、ビットデータを塊データに変換する処理は、プログラム言語処理系300で行うため、ROM部12内のプログラム領域12aがそのために消費されることはない。
【0070】
以上、本発明に係る遊技機用マイクロコンピュータおよびプログラム言語処理系の実施形態を添付図面に基づいて説明したが、本発明は、この実施形態に限定されるものではなく、特許請求の範囲に記載の構成を変更しない範囲で、公知既存の等価な技術手段を転用することにより実施しても構わない。
【符号の説明】
【0071】
1 遊技機制御用マイクロコンピュータ
11 CPU部
12 ROM部
12a プログラム領域
12b データ領域
13 RAM部
2 ソースコード
3 バイナリコード
4 リストファイル
100 遊技機
200 主制御基板
300 プログラム言語処理系
図1
図2
図3
図4
図5
図6
図7
図8