# 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
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/%=%)
-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 \
-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
*/
+#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) { \
#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);
}
}
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;
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);
}
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);
output_table[i].length = write_buf_table[i].buf.size;
}
- _user_info[2] = (char*) output_table;
+ user_info[2] = (char*) output_table;
return 0;
}
import org.xwt.mips.*;
import java.io.*;
+import org.xwt.mips.Runtime;
+
public class MSPack {
private static byte[] image;
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 {
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");
}
--- /dev/null
+
+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;
+}