ドキュメントがまったく無いというのも考えものなので。
10/26 クラス Piece に追加。フォント周りとか。
ダウンロードした後、p/eceに転送しておいてください。 それから、適当にプログラムをこしらえて。ライブラリとか サンプルとかを参考に。
それからコンパイル。コンパイルする際は、さっきダウンロードしたファイルの中に一緒に付いてる mvm.jarにクラスパスを通しておいてください。
ex) $ javac -classpath mvm.jar nanika.java
コンパイルできたら必要そうなファイルを main.jar に入れておいてください。 mvm.jarは入れなくていいです。
ex) $ jar -cvf main.jar *.class
それをp/eceに送って、mvmを実行。動かなかったら多分僕が悪いです、気が向いたらバグ報告ください。
標準ライブラリみたいなものは以下のものが使えるはずです。 コンパイル時にギリギリ困らない程度実装されてます。
Object | equals だけ実装 |
String | コンストラクタ String(String) だけ実装 |
StringBuffer | appendとtoString()は実装 |
それと以下ふたつが package vaca に含まれます。
「Java仮想マシンって名乗っちゃだめ(商標なので)」っていうんだったら、 Java仮想マシン。略して"Vaか"だよ馬鹿。だからパッケージ名vacaでいいんだよ。
っていうふうな感じで名付けたパッケージ名だったように思います。
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 appSetProcPeriod(int period) | pceAppSetProcPeriod |
public static void drawBmp( PieceBmp bmp, int x, int y ) | x, y の位置に bmp の描画。 |
void fontPutStr( String str ) | 略 |
書くのが面倒になってきたので…
package vaca; public class Piece { public static final int PAD_RI = 0x01; public static final int PAD_LF = 0x02; public static final int PAD_DN = 0x04; public static final int PAD_UP = 0x08; public static final int PAD_B = 0x10; public static final int PAD_A = 0x20; public static final int PAD_D = 0x40; public static final int PAD_C = 0x80; public static final int TRG_RI = 0x0100; public static final int TRG_LF = 0x0200; public static final int TRG_DN = 0x0400; public static final int TRG_UP = 0x0800; public static final int TRG_B = 0x1000; public static final int TRG_A = 0x2000; public static final int TRG_D = 0x4000; public static final int TRG_C = 0x8000; public static final int FONT_5x10 = 0; public static final int FONT_8x16 = 1; public static final int FONT_4x6 = 2; public static final int FONT_RETURN = 0; public static final int FONT_NORETURN = 128; public static native void lcdTrans(); public static native byte[] lcdSetBuffer(byte[]buf); public static native int padGet(); public static native void cls(); public static native void appReqExit(int code); public static native void drawBmp( PieceBmp bmp, int x, int y ); public static native void appSetProcPeriod(int period); public static native void fontPutStr(String str); public static native void fontSetPos( int x, int y ); public static native void fontSetTxColor( int color ); public static native void fontSetBkColor( int color ); public static native void fontSetType( int type ); }
こんな感じになってます
drawBmpできるビットマップを pgd ファイルから作ります。 ちなみに、main.jar に含まれているファイルはそのまま使えます。 今はコンストラクタしか無いです。
public PieceBmp( String filename ) | filename からビットマップをロードします。 失敗したら例外とかじゃなくて、そのまま異常終了してしまうのが辛い (例外処理がまだきちんと実装されてないので…) |
大体こんな感じです。あと文字描画さえできれば基本的なところは大丈夫だと思うのですが。
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"); Piece.appSetProcPeriod( 25 ); } 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.fontSetPos( x+18, y+2 ); Piece.fontPutStr( "< help!" ); Piece.lcdTrans(); Piece.cls(); } }
色々気を付けないといけない点があります
他にもあるかも。
wo