From: brian Date: Fri, 30 Jan 2004 07:43:25 +0000 (+0000) Subject: 2003/12/28 09:45:29 X-Git-Tag: RC3~234 X-Git-Url: http://git.megacz.com/?p=org.ibex.core.git;a=commitdiff_plain;h=271c57ed3428a10856d4d2ef3b4d507609be353e 2003/12/28 09:45:29 darcs-hash:20040130074325-aa32f-ecbc729503b38c03a935535730d06f6449f5bccc.gz --- diff --git a/Makefile b/Makefile index 8cd4135..b1ddc2c 100644 --- a/Makefile +++ b/Makefile @@ -50,16 +50,16 @@ include Makefile.upstream # figure out what stuff in org.xwt.plat.* this platform requires (its superclasses) java_sources := $(patsubst src/%.java, build/java/%.java, $(shell find src -name '*.java' \! -path 'src/org/xwt/mips/*')) -java_sources += build/java/org/xwt/translators/FreetypeVM.java +java_sources += build/java/org/xwt/translators/MIPSApps.java all_java_sources := $(java_sources) nonplat_java_sources := $(filter-out build/java/org/xwt/plat/%, $(java_sources)) plat_java_sources := $(filter build/java/org/xwt/plat/%, $(java_sources)) -build/java/org/xwt/translators/FreetypeVM.java: build/res/freetype.mips build/class/org/xwt/mips/Compiler.class +build/java/org/xwt/translators/MIPSApps.java: build/mips/mipsapps.mips build/class/org/xwt/mips/Compiler.class mkdir -p build/java/org/xwt/translators (echo -e 'package org.xwt.translators;\nimport org.xwt.mips.*;\n'; \ - java -Xint -cp build/class org.xwt.mips.Compiler FreetypeVM build/res/freetype.mips)\ + java -Xint -cp build/class org.xwt.mips.Compiler MIPSApps build/mips/mipsapps.mips)\ > $@ build/java/org/xwt/%.java: src/org/xwt/%.java @@ -159,7 +159,7 @@ build/res/fonts/vera: .download_vera-1.10 cd build/res/fonts/vera; ln -s ../../../../upstream/vera-1.10/ttf-bitstream-vera-1.10/Vera.ttf cd build/res/fonts/vera; ln -s ../../../../upstream/vera-1.10/ttf-bitstream-vera-1.10/VeraMono.ttf cd build/res/fonts/vera; ln -s ../../../../upstream/vera-1.10/ttf-bitstream-vera-1.10/VeraSe.ttf -build/res/builtin.jar: $(builtin_src:src/%=build/res/%) build/res/freetype.mips build/res/libmspack.mips build/res/fonts/vera +build/res/builtin.jar: $(builtin_src:src/%=build/res/%) build/res/fonts/vera @echo -e "\n\033[1mzipping res/* -> .jar: builtin.jar\033[0m" cd build/res; $(jar) cf builtin.jar $(^:build/res/%=%) @@ -199,8 +199,9 @@ build/mips/%.c.o: src/%.c -Iupstream/libmspack-20030726/src/mspack \ -c -o $@ $< -build/res/freetype.mips: build/mips/org/xwt/translators/Freetype.c.o build/mips/org/xwt/mips/crt0.c.o build/mips/org/xwt/mips/syscalls.c.o +build/mips/mipsapps.mips: build/mips/org/xwt/translators/Freetype.c.o build/mips/org/xwt/translators/MSPack.c.o build/mips/org/xwt/translators/main.c.o build/mips/org/xwt/mips/crt0.c.o build/mips/org/xwt/mips/syscalls.c.o make .install_freetype-2.1.4_mips-unknown-elf target=mips-unknown-elf + make .install_libmspack-20030726_mips-unknown-elf target=mips-unknown-elf @echo -e "\n\033[1mlinking .o -> .mips: $@\033[0m" mkdir -p build/mips build/res upstream/install/bin/mips-unknown-elf-gcc \ @@ -210,26 +211,10 @@ build/res/freetype.mips: build/mips/org/xwt/translators/Freetype.c.o build/mips/ -T src/org/xwt/mips/linker.ld \ -Lbuild/mips \ -Lupstream/freetype-2.1.4/src/objs \ + -Lupstream//libmspack-20030726/build-mips-unknown-elf/ \ -o $@ \ $^ \ - -lfreetype - -.install_libmspack-20030726: - make .install_libmspack-20030726_mips-unknown-elf target=mips-unknown-elf && touch .install_libmspack-20030726 -build/mips/org/xwt/translators/MSPack.c.o: .install_libmspack-20030726 -build/res/libmspack.mips: build/mips/org/xwt/translators/MSPack.c.o build/mips/org/xwt/mips/crt0.c.o build/mips/org/xwt/mips/syscalls.c.o - @echo -e "\n\033[1mlinking .o -> .mips: $@\033[0m" - mkdir -p build/mips build/res - upstream/install/bin/mips-unknown-elf-gcc \ - -nostdlib \ - --static \ - -march=mips1 \ - -T src/org/xwt/mips/linker.ld \ - -Lbuild/mips \ - -Lupstream/libmspack-20030726/src/mspack \ - -Lupstream/libmspack-20030726/build-mips-unknown-elf \ - -o $@ \ - $^ \ + -lfreetype \ -lmspack diff --git a/src/org/xwt/translators/Freetype.c b/src/org/xwt/translators/Freetype.c index f1b4f50..50fe6fd 100644 --- a/src/org/xwt/translators/Freetype.c +++ b/src/org/xwt/translators/Freetype.c @@ -33,10 +33,14 @@ */ +#if 0 +/* Use this when org.xwt.mips is updated to the latest org.xwt.mips cvs */ +extern char *user_info[1024]; +#else extern char **_user_info; - -FT_Library library; /* handle to library */ -FT_Face face; /* handle to face object */ +#define user_info _user_info +#define _pause emu_pause +#endif #define FT_Check(expr) do { \ if((expr) != 0) { \ @@ -48,33 +52,35 @@ FT_Face face; /* handle to face object */ #define max(a, b) ((a) > (b) ? (a) : (b)) #define min(a, b) ((a) < (b) ? (a) : (b)) -extern void emu_pause(); +extern void _pause(); -int main(int argc, char** argv) { +int freetype_main() { char *fontdata; int glyph_index; short charcode; - + FT_Library library; /* handle to library */ + FT_Face face; /* handle to face object */ + FT_Check(FT_Init_FreeType(&library)); - FT_Check(FT_New_Memory_Face(library, _user_info[0], (int)_user_info[1], 0, &face)); + FT_Check(FT_New_Memory_Face(library, user_info[0], (int)user_info[1], 0, &face)); for(;;) { - emu_pause(); - FT_Check(FT_Set_Char_Size(face, 0, ((int)_user_info[4]) * 64, 72, 72)); - for(charcode = (int)_user_info[2]; charcode <= (int)_user_info[3]; charcode++) { + _pause(); + FT_Check(FT_Set_Char_Size(face, 0, ((int)user_info[4]) * 64, 72, 72)); + for(charcode = (int)user_info[2]; charcode <= (int)user_info[3]; charcode++) { glyph_index = FT_Get_Char_Index(face, charcode); FT_Check(FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT | FT_LOAD_FORCE_AUTOHINT)); FT_Check(FT_Render_Glyph(face->glyph, FT_RENDER_MODE_NORMAL)); - _user_info[5] = (char*)face->glyph->bitmap.buffer; - _user_info[6] = (char*)face->glyph->bitmap.width; - _user_info[7] = (char*)face->glyph->bitmap.rows; - _user_info[8] = (char*)(face->size->metrics.ascender >> 6); - _user_info[9] = (char*)((-1 * face->size->metrics.descender) >> 6); - _user_info[10] = (char*)(face->glyph->metrics.horiBearingY >> 6); - _user_info[11] = (char*)(face->glyph->advance.x >> 6); + user_info[5] = (char*)face->glyph->bitmap.buffer; + user_info[6] = (char*)face->glyph->bitmap.width; + user_info[7] = (char*)face->glyph->bitmap.rows; + user_info[8] = (char*)(face->size->metrics.ascender >> 6); + user_info[9] = (char*)((-1 * face->size->metrics.descender) >> 6); + user_info[10] = (char*)(face->glyph->metrics.horiBearingY >> 6); + user_info[11] = (char*)(face->glyph->advance.x >> 6); } } diff --git a/src/org/xwt/translators/Freetype.java b/src/org/xwt/translators/Freetype.java index 55dbf68..d9c6904 100644 --- a/src/org/xwt/translators/Freetype.java +++ b/src/org/xwt/translators/Freetype.java @@ -6,16 +6,16 @@ import java.util.zip.*; import java.util.*; import org.bouncycastle.util.encoders.Base64; +import org.xwt.mips.Runtime; + // FEATURE: use streams, not memoryfont's // FEATURE: kerning pairs public class Freetype { public Freetype() { } - private static byte[] image = null; - private int mem_allocated = 0; - private org.xwt.mips.Runtime vm = null; + private Runtime vm = null; private Res loadedStream = null; @@ -25,15 +25,14 @@ public class Freetype { loadedStream = res; InputStream is = res.getInputStream(); byte[] fontstream = InputStreamToByteArray.convert(is); - if (image == null) image = InputStreamToByteArray.convert(Main.builtin.getInputStream("freetype.mips")); - //vm = new org.xwt.mips.Interpreter(image); - vm = new FreetypeVM(); + vm = new MIPSApps(); int baseAddr = vm.sbrk(fontstream.length); vm.copyout(fontstream, baseAddr, fontstream.length); vm.setUserInfo(0, baseAddr); vm.setUserInfo(1, fontstream.length); - vm.start(new String[]{ "freetype.mips" }); + vm.start(new String[]{ "freetype" }); vm.execute(); + if(vm.getState() == Runtime.DONE) throw new Error("Freetype VM exited: " + vm.exitStatus()); } catch (Exception e) { Log.log(this, e); } diff --git a/src/org/xwt/translators/MSPack.c b/src/org/xwt/translators/MSPack.c index 2937dcc..fd5ebe5 100644 --- a/src/org/xwt/translators/MSPack.c +++ b/src/org/xwt/translators/MSPack.c @@ -161,22 +161,29 @@ static struct mspack_system my_system = { NULL }; +#if 0 +/* Use this when org.xwt.mips is updated to the latest org.xwt.mips cvs */ +extern char *user_info[1024]; +#else extern char **_user_info; +#define user_info _user_info +#define _pause emu_pause +#endif -int main(int argc, char **argv) { +int mspack_main() { struct mscab_decompressor *decomp; struct mscabd_cabinet *cab; struct mscabd_file *file; - mem_buf_t mem_buf; - size_t size = (size_t)_user_info[1]; - int i; - - mem_buf.addr = _user_info[0]; - mem_buf.pos = mem_buf.writable = 0; - mem_buf.length = -1; - mem_buf.size = size; - - cab_mem_buf = &mem_buf; + mem_buf_t mem_buf; + size_t size = (size_t)user_info[1]; + int i; + + mem_buf.addr = user_info[0]; + mem_buf.pos = mem_buf.writable = 0; + mem_buf.length = -1; + mem_buf.size = size; + + cab_mem_buf = &mem_buf; decomp = mspack_create_cab_decompressor(&my_system); if(!decomp) exit(1); @@ -196,7 +203,7 @@ int main(int argc, char **argv) { output_table[i].length = write_buf_table[i].buf.size; } - _user_info[2] = (char*) output_table; + user_info[2] = (char*) output_table; return 0; } diff --git a/src/org/xwt/translators/MSPack.java b/src/org/xwt/translators/MSPack.java index 3275bb9..c15aff4 100644 --- a/src/org/xwt/translators/MSPack.java +++ b/src/org/xwt/translators/MSPack.java @@ -5,6 +5,8 @@ import org.xwt.util.*; import org.xwt.mips.*; import java.io.*; +import org.xwt.mips.Runtime; + public class MSPack { private static byte[] image; @@ -13,27 +15,20 @@ public class MSPack { private byte[][] data; public static class MSPackException extends IOException { public MSPackException(String s) { super(s); } } - - private static synchronized byte[] getImage() throws IOException { - if (image == null) - image = InputStreamToByteArray.convert(Main.builtin.getInputStream("libmspack.mips")); - return image; - } - - public MSPack(InputStream cabIS) throws IOException { - byte[] cab = InputStreamToByteArray.convert(cabIS); - Interpreter vm = new Interpreter(getImage()); - - int cabAddr = vm.sbrk(cab.length); - if(cabAddr < 0) throw new MSPackException("sbrk failed"); + public MSPack(InputStream cabIS) throws IOException { try { + Runtime vm = new MIPSApps(); + byte[] cab = InputStreamToByteArray.convert(cabIS); + int cabAddr = vm.sbrk(cab.length); + if(cabAddr < 0) throw new MSPackException("sbrk failed"); + vm.copyout(cab,cabAddr,cab.length); vm.setUserInfo(0,cabAddr); vm.setUserInfo(1,cab.length); - int status = vm.run(new String[]{ "mspack.mips"} ); + int status = vm.run(new String[]{ "mspack"} ); if(status != 0) throw new MSPackException("mspack.mips failed (" + status + ")"); /*static struct { @@ -58,7 +53,7 @@ public class MSPack { System.out.println("" + fileNames[i]); vm.copyin(vm.memRead(addr+4),data[i],length); } - } catch(Exception e) { + } catch(Runtime.ExecutionException e) { e.printStackTrace(); throw new MSPackException("mspack.mips crashed"); } diff --git a/src/org/xwt/translators/main.c b/src/org/xwt/translators/main.c new file mode 100644 index 0000000..4eca1e2 --- /dev/null +++ b/src/org/xwt/translators/main.c @@ -0,0 +1,12 @@ + +char *user_info[1024]; + +extern int mspack_main(); +extern int freetype_main(); + +int main(int argc, char **argv) { + if(argc < 1) return 1; + if(strcmp(argv[0],"mspack")==0) return mspack_main(); + if(strcmp(argv[0],"freetype")==0) return freetype_main(); + return 1; +}