ドキュメントがまったく無いというのも考えものなので。

  1. 概要
  2. 動かす
  3. 使えるクラスライブラリ
  4. サンプル
  5. 注意

1. 概要

mvmはP/ECEでJavaのバイトコードのようなものを実行する仮想マシンです。 「Javaはなんか嫌。」という人が作ってるので色々やばいです。

2. 動かす

mvm.pexをp/eceに転送しておいてください。 それから、適当にプログラムをこしらえて。ライブラリとか サンプルとかを参考に。

それからコンパイル。コンパイルする際は、一緒に付いてる mvm.jarにクラスパスを通しておいてください。

ex) $ javac -classpath mvm.jar nanika.java

コンパイルできたら必要そうなファイルを main.jar に入れておいてください。 mvm.jarは入れなくていいです。

ex) $ jar -cvf main.jar *.class

それをp/eceに送って、mvmを実行。動かなかったら多分僕が悪いです、気が向いたらバグ報告ください。

3. 使えるライブラリ

標準ライブラリみたいなものは以下のものが使えるはずです。 コンパイル時にギリギリ困らない程度実装されてます。

Object equals だけ実装
String コンストラクタ String(String) だけ実装
StringBuffer appendとtoString()は実装

それと以下ふたつが package vaca に含まれます。

「Java仮想マシンって名乗っちゃだめ(商標なので)」っていうんだったら、 Java仮想マシン。略して"Vaか"だよ馬鹿。だからパッケージ名vacaでいいんだよ。

っていうふうな感じで名付けたパッケージ名だったように思います。

Piece

P/ECEへのインターフェースです。基本的にP/ECEのAPIを基にしてるので そっちの方も参照してください。 全部 static メソッドなんで、そのまま使ってください。

public static void lcdTrans pceLCDTrans VRAMの転送。
public static byte[] lcdSetBuffer(byte[]buf) pceLCDSetBuffer VRAMの設定、取得
public static int padGet() pcePadGet パッドの状態の取得。ちなみに、Piece.PAD_RI とかが使えます
public static void cls() VRAMの消去。 自分でVRAM取得して配列の値いじってもいいんだけど、こっちのほうが速い
public static void appReqExit(int code) pceAppReqExit
public static void drawBmp( PieceBmp bmp, int x, int y ) x, y の位置に bmp の描画。
PieceBmp

drawBmpできるビットマップを pgd ファイルから作ります。 ちなみに、main.jar に含まれているファイルはそのまま使えます。 今はコンストラクタしか無いです。

public PieceBmp( String filename ) filename からビットマップをロードします。 失敗したら例外とかじゃなくて、そのまま異常終了してしまうのが辛い (例外処理がまだきちんと実装されてないので…)

大体こんな感じです。あと文字描画さえできれば基本的なところは大丈夫だと思うのですが。

4. サンプル

mvm.zipに含まれるサンプルです

import vaca.*;

class Main // Mainっていうクラスを用意
{
	int x=0,y=0;
	byte [] lcdbuff;

	PieceBmp bmp;

	public Main(){ // 最初にコンストラクタが呼ばれます
		lcdbuff = Piece.lcdSetBuffer( null );
		
		bmp = new PieceBmp("test.pgd");
	}

	public void appProc( int cnt ) {  // appProcはP/ECEのそれと一緒
		int pad = Piece.padGet();

		if ( ((pad&Piece.PAD_DN)!=0) && y<88 )
			y++;
		else if ( ((pad&Piece.PAD_UP)!=0) && y>0 )
			y--;

		if ( ((pad&Piece.PAD_RI)!=0) && x<128 )
			x++;
		else if ( ((pad&Piece.PAD_LF)!=0) && x>0 )
			x--;

		if ( (pad&Piece.TRG_C) == Piece.PAD_C ) {
			Piece.appReqExit( 0 ); // 終了
		}

		Piece.drawBmp( bmp, x, y );

		Piece.lcdTrans();
		Piece.cls();
	}
}

5. 注意

色々気を付けないといけない点があります

他にもあるかも。

ソース