JPH08115221A - Cコンパイラ - Google Patents

Cコンパイラ

Info

Publication number
JPH08115221A
JPH08115221A JP6273102A JP27310294A JPH08115221A JP H08115221 A JPH08115221 A JP H08115221A JP 6273102 A JP6273102 A JP 6273102A JP 27310294 A JP27310294 A JP 27310294A JP H08115221 A JPH08115221 A JP H08115221A
Authority
JP
Japan
Prior art keywords
port
function
compiler
interrupt
program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP6273102A
Other languages
English (en)
Inventor
Masaki Yonekawa
正樹 米川
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hudson Soft Co Ltd
Original Assignee
Hudson Soft Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hudson Soft Co Ltd filed Critical Hudson Soft Co Ltd
Priority to JP6273102A priority Critical patent/JPH08115221A/ja
Publication of JPH08115221A publication Critical patent/JPH08115221A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【目的】 ゲーム等の高速処理が要求される場合に用い
られる、プログラム開発効率の良いCコンパイラを得
る。 【構成】 Cのソースプログラムに記述することによ
り、I/OポートへデータをアクセスするCPU命令コードを
作成するI/Oポートアクセス用予約関数および指定した
レジスタのみの保存が行える割り込み処理手段を備え
る。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、ゲーム等の高速処理が
要求される場合に用いられるCコンパイラに関する。
【0002】
【従来の技術】プログラム言語には低水準言語と高水準
言語がある。低水準言語は機械語やアセンブラなどのマ
シンに近い言語であり、高水準言語はFORTRAN、COBOL、
PL/I、BASICなどの、人間の言葉あるいは表現法に近い
言語である。
【0003】言語の歴史は、システム開発の効率アップ
をめざしたところから始まっている。機械語やアセンブ
ラは特別な訓練を受けたプログラミングのプロ向けの言
語あり、だれにでもすぐに使えるというものではなかっ
た。そこで数式に近い表現法でプログラミングが可能な
FORTRANが生まれ、英語の言葉をそのままプログラムの
表現手段として生まれたのがCOBOLである。
【0004】FORTRANとCOBOLの特徴を寄せ集めて作られ
たのがPL/Iである。BASICは、ソースプログラムをその
まま実行できるように改良したインタープリタ言語で、
人間の表現がそのままプログラムとして実行する点で画
期的なものといいえる。しかし、記述の仕方はFORTRAN
に近く、また文字列の演算などはPL/Iの特徴を取り入れ
ている。このようにさまざまな高水準言語があるが、高
水準言語の基本はFORTRANとCOBOLから発生しているとい
ってよい。
【0005】高水準言語の登場でシステム開発の効率は
飛躍的に向上した。しかし、高水準言語の弱点はハード
周りの記述に弱いということである。もともと高水準言
語はアプリケーションの開発のために開発された言語で
あるから、ハードウェアを直接ハンドリングする処理に
は向いていない。PL/Iなどではハードウェア部分に関す
る記述文も多く含まれているが、高水準言語は処理スピ
ードとメモリの節約という点で問題があり、実行速度が
要求される処理やメモリを重視する処理ではアセンブラ
が現在も使用されている。
【0006】Cは、もともとアセンブラで開発していた
システムを、アセンブラでは開発効率が低いということ
で開発された言語である。したがって、Cにはアセンブ
ラの色が随所に残っている。FORTRANやCOBOLを中心に扱
ってきたプログラマには、Cのアドレスに対する考え方
は理解しにくいところでもある。また命令が少なく、そ
の部分を多くの関数を用意してライブラリの形式でユー
ザーに提供している。とくにI/Oに関する命令はなく、
この部分も関数としてライブラリで提供されている。
【0007】Cの特徴はアセンブラに近く、アドレスハ
ンドリングが行えることである。しかもアセンブラに比
べてプログラミングがしやすいことである。処理速度も
他の高水準言語に比べて速い。現時点ではこのような利
点が評価され多くの分野で使用されている。特に速度が
求められるゲームの分野でもアセンブラにかわって主な
言語の地位を占めている。
【0008】
【発明が解決しようとする課題】Cはすべての面でアセ
ンブラの代用が務まるかといえば、そうはいかない。ゲ
ーム機では、ゲーム画面の表示やジョイパットの操作な
どを行うときは、必ずI/Oポートとよばれる領域をアク
セス(読み書き)しなければならなかった。
【0009】通常、Cコンパイラの仕様にはI/Oポート
へのアクセス機能(命令)が用意されていない。したが
って、この部分をアセンブラでプログラミングするか、
または別に用意されたライブラリを使用するかの、どち
らかの方法を選択するしかない。
【0010】図1のようにアセンブラでプログラミング
する方法は、I/Oポートへのアクセス部分とその他のプ
ログラム部分を完全に分割しなければならないために、
非常に手間がかかり、またプログラムの管理がしにくい
という欠点がある。
【0011】一方、図2に示すようにライブラリを使用
した場合は、その呼び出しのオーバーヘッドに時間がか
かり、速度を求める処理では致命的な問題となることが
ある。たとえば、CプログラムからI/Oポートをアクセ
スできるようにするために、ライブラリを用意されてい
る場合、ライブラリには関数が登録されており、includ
e文でこの関数をCのソースプログラムに取り込む。
【0012】こうして作られたプログラムでは、関数に
コントロールが渡るときにプロローグ処理がなされ、関
数から元の処理に戻るときにエピローグ処理がなされ
る。プロローグ処理ではパラメータリストの引き渡しや
レジスタの保存などが行われ、エピローグ処理ではリタ
ーンコードの設定やレジスタの戻しなどが行われる。要
するに、このエピローグ、プロローグ処理がオーバーヘ
ッドとして余分な時間を使うわけである。
【0013】I/Oポートへのアクセスで問題とされるこ
とに割り込み処理がある。割り込みは、一つのプログラ
ム実行をハードウェア的手段で中断し、あとで再開でき
るようにして他のプログラムに移れることである。割り
込みには入出力装置の開始終了割り込み(I/O割り込
み)、内部割り込み、プログラム割り込み、外部割り込
み、機械チェック割り込みなどがある。割り込み処理が
重要なのは、どの時点で割り込みが発生するかわからな
いので、論理的な一連の記述では表現できない部分を、
特別のルーチンで処理できるからである。
【0014】たとえばハードまたはプログラムの上のエ
ラーは、プログラミング時には予想のできない部分であ
る。エラーが発生すると、プログラムの実行はその時点
で停止する。しかし割り込み処理が記述してあれば、通
常の正常な処理は一時中断され、割り込みルーチンに飛
び込み、そこで何らかのエラーに対処した処理を施し、
元の正常なルーチンに戻すことができる。
【0015】I/O割り込みの場合には、ある程度データ
の入力開始、終了が予想できる部分がるために、通常処
理で記述することもできるが、割り込みルーチンで処理
した方が記述しやすいという点がある。そのため、I/O
割り込みを割り込みルーチンで記述することが多い。こ
れはI/Oポートへのアクセスの場合も同様である。
【0016】ところが、Cでは割り込み処理はサポート
されていない。したがってこの部分については、これま
ではアセンブラで記述するしか方法がなかった。これ
は、I/Oポートへのアクセスの場合と同様に、Cとアセ
ンブラを分離してプログラム作成しなければならず、手
間がかかるうえに、プログラム管理の面でも支障をきた
す。
【0017】一部のCコンパイラには割り込み関数が用
意されているものもあるが、割り込み関数ですべてのレ
ジスタを保存するために、保存しなくてもよいレジスタ
までが保存するコードが生成され、むだな時間を要し、
ゲームなどの高速な処理が要求される目的には適してい
ない。
【0018】このように従来のCコンパイラは、ハード
ウェアに関する記述ができないか、あるいは弱いという
面があり、Cで記述できない面をアセンブラでカバーし
てきた。しかしCとアセンブラの組み合わせは、プログ
ラミングする者にとっては手間のかかる作業であり、プ
ログラム開発効率を落としていた。本発明の目的は、ゲ
ーム等の高速処理が要求される場合に用いられる、プロ
グラム開発効率の良いCコンパイラを得ることである。
【0019】
【課題を解決するための手段】本発明のCコンパイラで
は、I/Oポートのアクセスに特殊な予約関数を用意し、
Cソースプログラムにこの関数を記述すると、本発明の
CコンパイラがI/OポートへデータをアクセスするCPU命
令コードを作成する。すなわち、ソースプログラムレベ
ルでは関数形式で記述がするが、オブジェクトプログラ
ムレベルでは直接I/Oポートをアクセスする命令の集合
体として表現される。
【0020】そのときのソースプログラムでの表現形式
は __func(p); とする。ここでfuncは関数名(具体的な関数名は実施例
参照)、pはI/Oポートのデータを入出力する領域のアド
レスである。図3は従来のCコンパイラによるI/Oポー
トのアクセスの説明図で、ライブラリの関数を取り込む
形になる。図4は本発明のコンパイラの説明図で、直接
CPUの命令コードを生成する。
【0021】プロローグ時のレジスタの保存およびエピ
ローグ時のレジスタの復帰(戻し)は、これまで全レジ
スタに対して行われていた。しかし割り込み処理では高
速処理が要求されることが多いために、この処理をすこ
しでも速くしたい。そこで、本発明では、必要なレジス
タ(割り込み処理内で使われるレジスタ)のみを保存す
るようにする。このようにすればむだなレジスタ保存が
ないために処理速度が速くなり、また余分な保存エリア
を使うこともない。
【0022】Cのソースプログラムでの記述の仕方は、
拡張キーワードをinterruptとし、次の書式を用いる。
【0023】
【0024】本発明のCコンパイラは拡張キーワードin
terruptを認識すると、割り込み処理関数として扱い、
通常の関数戻りとは異なるコードを生成する。このとき
【0025】
【0026】のように、拡張キーワードinterruptをコ
ンパイラが認識すると、割り込み処理を生成する。また
拡張キーワードregsaveを認識すると、オペランドで指
定したレジスタのみを保存するコードを関数の実行前に
生成し、終了時に保存したレジスタを復帰するコードを
生成する。
【0027】
【実施例】I/Oポートへのアクセス(読み書き)は、特
殊関数__func()を用いるとしたが、具体的には本発明の
CコンパイラではI/Oポートからアクセスとデータ長に
よって読み込みは
【0028】 __INPORTB(アト゛レス); /*ハ゛イト読み込み*/ __INPORTH(アト゛レス); /*ハーフワート゛読み込み*/ __INPORTW(アト゛レス); /*ワート゛読み込み*/
【0029】書き込みは
【0030】 __OUTPORTB(アト゛レス,テ゛ータ); /*ハ゛イト書き込み*/ __OUTPORTH(アト゛レス,テ゛ータ); /*ハーフワート゛書き込み*/ __OUTPORTW(アト゛レス,テ゛ータ); /*ワート゛書き込み*/
【0031】の関数を用いる。これらは、実施例のCコ
ンパイラが認めているI/Oポートアクセル用特殊関数
で、バイト、ハーフワード(2バイト)、ワード(4バ
イト)単位で読み取る、または書き込むかによって、6
種類の関数が用意されている。
【0032】ただし、関数といっても、本発明のCコン
パイラを通すと、関数ではなく、直接CPUの命令コード
が生成される。たとえばI/Oポートからバイト単位でデ
ータを読み取るには、
【0033】 とする。
【0034】この例は図5に示すように、I/Oポートか
ら1バイト単位でデータを読み、それを配列aに保存す
る処理である。ここで重要なことは、プログラムでの記
述は関数形式であるが、本発明のCコンパイラでは直接
CPUの命令コードに変換されるという点である。したが
って、関数コールではないから、関数を呼び出す際のオ
ーバーヘッドは一切ないことである。
【0035】割り込みはプログラム実行中のどの時点で
起きるかわからない。そのため、通常の論理的ルーチン
から離れたところに独立して関数として記述することに
なる。しかし、割り込みによっては、どこで起きるかわ
かるものもある。たとえばI/Oの割り込みである。ファ
イルからのデータ入力は、すべてのデータを読み取って
もなお入力命令を出すと、エンドオブファイルのI/O割
り込みがかかる。割り込みがかかると、システム(BIO
S)は割り込みコードをセットする。
【0036】しかしこれまでのCでは、直接このコード
を読み取ることができなかった。本発明のコンパイラで
は、拡張キーワードinterruptを認識すると、この割り
込み処理を生成する。割り込みルーチン(関数)が指定
されていると、実行時に割り込みが発生する。その結
果、一連の処理を中断して割り込みルーチンに分岐す
る。本発明のコンパイラでは、指定したレジスタのみを
保存する。たとえば、
【0037】
【0038】とすれば、割り込みが発生すると関数feof
にコントロールが渡り、指定したレジスタr1、r2、r3が
関数にコントロールが渡った時点で保存され、コントロ
ールが元の処理に戻るときに復帰される。
【0039】このように指定しておけば、feof内ではレ
ジスタr1、r2、r3が自由に使用できる。しかし他のレジ
スタは使用しないか、あるいは使用し内容が壊されても
問題のないレジスタということになる。その管理はプロ
グラマの責任においてなさなければならない。したがっ
て本発明は、よりアセンブラに近い考え方に基づいてい
る。それは、処理速度を重視しているからである。
【0040】
【発明の効果】本発明は、Cでは苦手とされてきた、あ
るいはサポートされていないハード上の扱いをより高速
に処理すことを目的にして開発された。その一つが、開
発効率のアップである。いままではアセンブラで組んで
いた処理が、C上ですべて記述できるようになったから
である。
【0041】もう一つが、実行速度のアップである。ゲ
ームではプレイヤ(人間)と機械(ゲーム機)とのやり
取りを高速で処理しなければならない。その点、本発明
の“I/Oポートのアクセス”は、直接CPUの命令コードに
変換されるために、関数を用いた場合に比べはるかに速
い。しかも関数と同じ形式で記述できるから、プログラ
マに何の負担も与えない。
【図面の簡単な説明】
【図1】Cとアセンブラを組み合わせたプログラム開発
の説明図である。
【図2】I/Oポートのアクセスをライブラリから関数の
形式でインクルードして使用する場合の開発手順の説明
図である。
【図3】従来のCコンパイラによるI/Oポートのアクセ
スの説明図である。
【図4】本発明のコンパイラの動作の説明図である。
【図5】I/Oポートから1バイト単位でデータを読み、
それを配列aに保存する処理の説明図である。

Claims (2)

    【特許請求の範囲】
  1. 【請求項1】 Cのソースプログラムに記述することに
    より、I/OポートへデータをアクセスするCPU命令コード
    を作成するI/Oポートアクセス用予約関数を備えたこと
    を特徴とするCコンパイラ。
  2. 【請求項2】 Cのソースプログラムに記述することに
    より、I/OポートへデータをアクセスするCPU命令コード
    を作成するI/Oポートアクセス用予約関数および指定し
    たレジスタのみの保存が行える割り込み処理手段を備え
    たCコンパイラ。
JP6273102A 1994-10-13 1994-10-13 Cコンパイラ Pending JPH08115221A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP6273102A JPH08115221A (ja) 1994-10-13 1994-10-13 Cコンパイラ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP6273102A JPH08115221A (ja) 1994-10-13 1994-10-13 Cコンパイラ

Publications (1)

Publication Number Publication Date
JPH08115221A true JPH08115221A (ja) 1996-05-07

Family

ID=17523173

Family Applications (1)

Application Number Title Priority Date Filing Date
JP6273102A Pending JPH08115221A (ja) 1994-10-13 1994-10-13 Cコンパイラ

Country Status (1)

Country Link
JP (1) JPH08115221A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20020030441A (ko) * 2000-10-17 2002-04-25 최종호 리눅스 운영체제에서의 내장형 게임제작도구 시스템 및방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20020030441A (ko) * 2000-10-17 2002-04-25 최종호 리눅스 운영체제에서의 내장형 게임제작도구 시스템 및방법

Similar Documents

Publication Publication Date Title
US5586328A (en) Module dependency based incremental compiler and method
JP2002508560A (ja) マルチプル・クラスファイルのランタイムイメージへの結合
US6260191B1 (en) User controlled relaxation of optimization constraints related to volatile memory references
US6567910B2 (en) Digital signal processing unit with emulation circuitry and debug interrupt enable register indicating serviceable time-critical interrupts during real-time emulation mode
JPH01306923A (ja) 異種言語間連絡方式
JP2008536240A (ja) レジスタファイルとしてのオペランドスタックへの、ネイティブな命令を用いた、マイクロプロセッサのアクセス
KR20040039412A (ko) 가상 머신 해석기 가속 하드웨어용 소프트웨어 지원
JPH04266125A (ja) ディジタルコンピュータの操作方法
JPS6124729B2 (ja)
JP2991242B2 (ja) マルチプロセッサコンピュータシステム使用方法
JP2856663B2 (ja) コンパイル・コードに可視境界を定義する最適化方法および装置
US5150474A (en) Method for transferring arguments between object programs by switching address modes according to mode identifying flag
JPS6212529B2 (ja)
US5826087A (en) Method and apparatus for cross calling programs of different lexical scoping methodology
JPH08115221A (ja) Cコンパイラ
JP2002182926A (ja) コンパイル方法及びコンピュータ読み取り可能な記録媒体
US5671431A (en) Method for processing user program on a parallel computer system by inserting a tag during compiling
JP2002157115A (ja) データ処理装置
US6029003A (en) Method of assigning external variables to memories when compiling source program
JPH02308330A (ja) 知識情報処理装置
JP3011943U (ja) コンパイルシステム装置
Lee Object-Oriented Programming
JPS63249206A (ja) プログラマブルコントロ−ラ
US7627859B2 (en) Method for configuring non-script language library files to be run as scripts
Syntax Inline Assembly

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040113

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040315

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20040413

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040611

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20040624

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20040723