[Jprogramming] How to do that in J?

Simon Ampleman sa at infodev.ca
Mon Apr 17 03:12:58 HKT 2006


Hello,

I have found an old email I wanted to send to the forum last year but 
wasn't able to send it because of the forum, so here is it:

J is fine for most operations.... But there is case where I would like 
to use it but I can't...

For example, I wanted to emulate a Ricoh 6502 RP2A03G 8-bit NMOS chip 
[used in old nintendo 8 bit system] for a good exercise to learn 
electronic, assembler, low level programming of video, sound, serial 
port, etc... This chip is running at 1.7897725 MHz. This is very slow. 
While trying to find some information to start this project, I found 
example source code in almost any language C, VB and even the old 
QuickBasic... Minimum specification of a 386 DX 25mhz.

I started with the sound channel emulation, the easiest thing.... I had 
to create 2 square wave channel, 1 triangle channel, 1 white noise 
channel... I did not find a way to do in J so I created a C++ DLL with 
DirectSound at this time which worked well.... Then, the real thing... 
The function to read the next op code and emulate each one.

Most people would code it like this :

DO
   READ NEXT OPCODE
   SELECT CASE OPCODE
      CASE 1:
            EMULATION FOR OPCODE 1...
      CASE 2:
            EMULATION FOR OPCODE 2...
      ....
WHILE (EOF)

It give a clear code easy to follow....

J in loop is extremely slow, but creating a DLL in C for this part is 
useless since it will contains the entire project.

I tryed to optimize my J code... Cut the rom file in opcode in advance 
with the length of each operation, But still, would have to call a 
function to emulate each opcode one at a time since the content of the 
registers are changed.

I started to read Henry Rich book "from c++ to j..." to see how to 
achieve a better solution...

But then I realized my J code would probably end up in a very "custom" 
solution to this problem....

My final reflexion concludes that J has speed limits to interpret every 
lines of the code until it's run on the computer... Decode, validate, 
convert the code.....  which set speed limits. If I could decode, 
validate and convert (compile the code myself) before execution, I would 
have the ideal environment for developping and when using the compiler 
software it would become very fast.

So I started to write a compiler software, A C++ class for a J variable. 
A byte buffer array that records the data (type, shape, value) the same 
way J stores them with 3!:1 var. Then replaced some operator like = with 
basic types of variables that J support (bool, char*, int, double...) to 
fill the buffer... I saw a possibility there, but thousand of hours to 
write the whole thing...

I wanted to know :

    - Is there a J solution ? What other programmer does with the same 
context? Another language? Extreme optimization?

    - If not, is there anyone working on a compiler solution? I saw some 
email on the forum in oct. 2005 about this subject but no development in 
progress...

Simon



More information about the Programming mailing list