Git Product home page Git Product logo

mgsc's Introduction

mgsc - MGSC.COM emulator

mgsc はコンソール上で動作する MGSコンパイラ です。MML を記述したテキストファイルから、MGSDRV形式の音楽データ(.mgs)を生成します。

mgsc は C++ で実装されていますが、スクラッチで作られたコンパイラではなく、CP/M エミュレータ上で MSX 用のMGSC.COMバイナリを直接動作させています。 このため、MSX 版MGSC.COMの振る舞いがほぼ完全に再現されています。

MML の文法についてはMSX 版MGSC.COMMMLドキュメントを参照してください。

ビルド方法

OSX や Linux の場合

gitcmakeが必要です。

以下の手順を実行すると mgsc バイナリをビルドできます。

$ git clone --recursive https://github.com/digital-sound-antiques/mgsc.git
$ cd mgsc
$ cmake .
$ make

Windows の場合

Visual Studio 2015とgitcmakeがインストールされている環境が必要です。

Visual Studio は、一度も C++ プロジェクトを作ったことがない場合、C++ がインストールされていません。 その場合は C++ プロジェクトを新規作成して C++ をインストールしておいてください。

gitのbashコンソールから以下の手順を実行します。

$ git clone --recursive https://github.com/digital-sound-antiques/mgsc.git
$ cd mgsc
$ cmake .

以上で Project.sln が生成されるので、Visual Studio で開いてビルドします。

mgsc の実行方法

$ mgsc MMLファイル名 [出力ファイル名] [オプション]

出力ファイル名、オプションは省略可能です。出力ファイル名が省略された場合、出力ファイル名は MML ファイルの拡張子をmgsに変更したものになります。 出力ファイル名、入力ファイル名共にパスを含む事が可能です。パス指定が無い場合は、カレントフォルダに対して入出力が行われます。

mgsc の起動後、入力ファイルにエラーが無ければ、MMLファイルと同じディレクトリにMGSファイルが生成されます。エラーがあった場合は,エラー情報を表示して終了します。

オプションは -Tのみ有効です。このオプションがセットされると、コンパイル後に詳細情報が表示されます。ただし、MML ファイル内に#track_status命令 が記述されている場合は、-Tオプション指定の有無にかかわらず、詳細情報が表示されます。

コードの利用

main.cppがMGSCクラスの利用サンプルを兼ねているので参照してください。 mgsc.hをインクルードすると,クラスMGSCが利用可能になるので、mml入力用と,ファイル出力用のストリームを用意して、

int MGSC::Compile(std::iostream *mml, std::iostream *mgs);

メソッドを呼び出すだけコンパイルができます。

  • mmlは入力用にオープンしておく必要があります。
  • mmlから読み込めるデータは、改行コードがCR+LFのテキストの必要があります。
  • mgsは入出力用にオープンしておく必要があります。
  • mgsstd::ios::binaryフラグ付きでオープンしてください。

Compile関数はCP/Mエミュレータが異常終了した場合falseを返し、正常終了時はtrueを返します。 この値がコンパイル成功失敗の判定では無いことに注意してください。コンパイル成功失敗の判定が必要な場合、mgs ストリームに書き込まれたサイズを確認します。コンパイルに失敗した場合、mgsストリームには一切書き込みが行われません。

MGSCクラスはコンパイル状況を標準出力に表示しますが、これをユーザーが用意した出力ストリームに置き換える場合には、

void MGSC::SetConsole(std::istream *cin, std::ostream *cout);

を利用してください。

著作権等

  • mgsc-com.h は MSX版 MGSC.COM のダンプデータです。著作権はAin、GIGAMIXの両氏が保有しています。
  • Z80エミュレーションにMamiya氏作のKMZ80を利用しています。KMZ80はMamiya 氏によりPublic Domain宣言されています。

その他 

cppファイルのフォーマットはclang-format -style=LLVMを利用しています。

mgsc's People

Contributors

fixato avatar okaxaki avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.