ELCHNOS

もともとはCHNOSProjectのために構想していた(Elements Language for CHNOSProjectの略)。
その言語仕様を利用して、OSECPUのためのコンパイラならすぐに作れそうなので、作ってみた、C言語風の言語。

現在の状況

できること

  • app0023相当のコードをコンパイル、実行できる。
  • 定数式の計算
  • インライン関数展開
  • 変数のレジスタ割り付け
  • バックエンドバイナリを生成し、保存できる。

できないこと

  • 文法上のいろいろ(まだ全然完成していない)
  • レジスタに割り付けられない変数の処理(spill処理)
  • レジスタ退避を伴う関数呼び出し
  • ソースファイル分割
  • プリプロセッサ(#define等)
  • 文字列処理

どんな言語?

  • ASKAよりもうすこしC言語っぽい…と思う。
  • ちなみに一行目のUUIDは、コンパイラを起動させるためのコードなので必要だったりする
  • 2013-10-25現在、まだ演算子は以下のソースに出ている分しか実装されていない。
    #17ddde48-7d4c-498f-98d8-3e73f8845028
    
    unsigned char table[32] = {
    	196, 100, 187,  61, 164,  29, 129,   9,
    	 90,   5,  53,  17,  23,  44,   7,  81,
    	  7, 119,  23, 156,  53, 183,  90, 195,
    	129, 191, 164, 171, 187, 139, 196, 100,
    };
    
    procedure inline drawLine(int mode, x0, y0, x1, y1, col){
    	@asm OSECPU
    	REMARK 05 0100000003;
    	R30 = 0xff45;
    	R31 = mode;
    	R32 = x0;
    	R33 = y0;
    	R34 = x1;
    	R35 = y1;
    	R36 = col;
    	CALL P28;
    	REMARK 01 00;
    	@end
    }
    
    procedure main()
    {
    	int x0, y0, x1, y1, col, i, j;
    	unsigned char *p, *q;
    
    	p = table;
    	for (i = 0; i != 15; i++) {
    		x0 = *p;
    		p++;
    		y0 = *p;
    		p++;
    		
    		q = table;
    		for (j = -8; j != 8; j++) {
    			x1 = *q;
    			q++;
    			y1 = *q;
    			q++;
    			col = i - j;
    			if (col <= 0){
    				col = 1 - col;
    			}
    			if (col <= 7) {
    				drawLine(1 + 4, x0, y0, x1, y1, col);
    			}
    		}
    	}
    }

コンパイルのしかた

HTML5, FileAPI対応のブラウザを利用する必要があります。

ローカルでコンパイル

  1. リンク先からAI004のファイルを一通り落とす。
  2. index.htmlを起動
  3. 下の方のInputのボックス内に、ソースファイルをドラッグ&ドロップする。
  4. エラーなく終了した場合は、ダウンロードリンクがDownloadsに表示されるので、そのリンクを右クリックして、名前(xxx.ose)をつけて保存する。
  5. お好きな実行環境で実行する

コメント、不具合報告などがあればどうぞ…

  • hikarupspさんすごい! -- K 2013-10-25 (金) 22:06:59

コメントお名前NameLink

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-10-25 (金) 22:06:59 (1947d)