Waze for WP7 – Java to CSharp

OK, so I have Waze and Cibyl source code and all I need to do is make Cibyl yield C# code instead of Java. Simple, right? Well, not exactly.

Cibyl dictates you to work in two layers: the Java bytecode level and Java code level. The C code that comes in Cibyl is being translated to Java bytecode while every external call from the C code (printf, DrawLine, fopen etc.) is being translated to a call from the Java bytecode to Java code for implementing the required functionality. Example:

#include <stdio.h>
#include <cibyl.h>

int main(int argc, char **argv)
{
  printf("hello");
  return 0;
}

Will be translated into 10K Java bytecode lines (I shit you not) that will call Java for printing the characters to the screen:

; 0x01001c84: 0x1001c84: cibyl_sysc_arg 0x7
	iload_3
; 0x01001c88: 0x1001c88: cibyl_sysc_arg 0x8
	iload 7
; 0x01001c8c: 0x1001c8c: cibyl_sysc 0x120
	invokestatic Syscalls/NOPH_OutputStream_write(II)V
; 0x01001c90: 0x1001c90: addu  a3, v0, zero
	iload 4
	istore_3

What’s that?

Apparently, Simon, the creator of Cibyl, did amazing work of translation all LIBC to be compliant with Cibyl. Essentially he implemented all the I/O functions (fopen, printf etc.) as C code that calls Java predefined funtcions to do the real IO (print char to the screen, open file etc.). The C code is being compiled into Java byte code and, along with your code, being printed into J files (Java assembly files).

 

Now, for making it really useful, some performance work has to be done. Read about it here

About these ads
This entry was posted in Waze, WP7 and tagged . Bookmark the permalink.

One Response to Waze for WP7 – Java to CSharp

  1. Pingback: Waze for WP7 – Deep dive into Cibyl | Meir Tsvi's blog

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s