N64 For Android


It's an early beta but things are looking extraordinary (for Android).

Have a look at WindowsMobile (FPse) which can emulate psx fullspeed on the TG01 (a device slightly weaker than Nexus One).
Have a look at psx4all on the Nexus One, you get ave20fps on the Nexus One. The Dalvik/VM really takes its toll.

But hopefully a device with a tilt-landscape and quad-shoulder pads arrives, which boasts a full gamepad and dual joysticks (a la PSP2/NGP) and has equivalent grunt, battery life and HDMIout as the Motorola Atrix!!!

edit: the same team that polished the psx emulator on WindowsMobile, have ported it (early beta) to the Android OS and already things run as smoothly/better than the latest incarnation of psx4droid (yongz and zodtt)
 
Psx4all is not written in java and therefor not running on dalvik vm (beyond the bootloader) so I'd assume dalvik is not the cause ... (there could be a stack of multitasking, crappy access to framebuffer, radio stealing cycles, etc etc though). Or .. Good code on one and not the other :)

Jeffphone
 
marovada said:
Is this based on Ari64's work? If so, I hope he's getting a cut of the $5.99.
N64oid
I'm almost sure it is, it came out just a bit after Ari64 did the required changed for it to run on Android.
 
Last edited by a moderator:
Seems to work well too. Plays Mario 64 fairly smoothly on my Desire. Touch screen controls make it tricky to play, that's why I have a Pandora!


Android is becoming a viable gaming OS tbh. I do hope the cash gained from this also helps development on the Pandora port...
 
notaz said:
marovada said:
Is this based on Ari64's work? If so, I hope he's getting a cut of the $5.99.
N64oid
I'm almost sure it is, it came out just a bit after Ari64 did the required changed for it to run on Android.
There is evidence that it is, but yongzh reportedly stripped out the credits and is trying to pretend he wrote it himself. He is not sharing the $5.99 with any of the developers.
 
Last edited by a moderator:
Ari64 said:
notaz said:
marovada said:
Is this based on Ari64's work? If so, I hope he's getting a cut of the $5.99.
N64oid
I'm almost sure it is, it came out just a bit after Ari64 did the required changed for it to run on Android.
There is evidence that it is, but yongzh reportedly stripped out the credits and is trying to pretend he wrote it himself. He is not sharing the $5.99 with any of the developers.
Since this seems to clearly be a GPL violation you, as copyright holder for (at least part of) the work should maybe consider talking the the FSF who might know how to best enforce the GPL.

Note on the side:
Selling the software is perfectly fine, as long as you make the sources available and give credit to those that you base your work upon. Enforcing the GPL though can only be done by (one of) the original copyright holders, since the person violating the rules does violate the license between the original author and himself.
 
Last edited by a moderator:
Ivanovic said:
Ari64 said:
notaz said:
marovada said:
Is this based on Ari64's work? If so, I hope he's getting a cut of the $5.99.
N64oid
I'm almost sure it is, it came out just a bit after Ari64 did the required changed for it to run on Android.
There is evidence that it is, but yongzh reportedly stripped out the credits and is trying to pretend he wrote it himself. He is not sharing the $5.99 with any of the developers.
Since this seems to clearly be a GPL violation you, as copyright holder for (at least part of) the work should maybe consider talking the the FSF who might know how to best enforce the GPL.

Please do so. This is nothing that should be ignored, otherwise it could becom even more coomon pratice!

You(Ari) put so much work in this, it is simply not fair that he earns a few 1000$ of it, pretending he did the work. It's stealing.
 
Last edited by a moderator:
Ari: why are you not doing your own releases for Android? If you have an official build out there, can you point it to us?
 
You can find the source to yongzh's other releases (except gpSP ;p) here:

http://sourceforge.n...droidemu/files/

Would like to think N64oid will show up there too. I don't know if any documentation yet links there though..

If we're going to talk about credit please don't treat Mupen64plus as solely Ari64's work either - of course I respect the amazing work that he's done on the dynarec but many other people worked on core components, not to mention the plugins including glN64es (which has both a lot of prior work and Adventus's porting effort)

Probably Ari64 doesn't release for Android precisely for the same reason he only provides source updates for Pandora.
 
Exophase said:
Probably Ari64 doesn't release for Android precisely for the same reason he only provides source updates for Pandora.
Precisely.

Paulscode and Cpasjuste told me why it wasn't building on Android, so I included a fix in the latest version. I never tried to run it on Android since I don't have any Android devices.
 
Last edited by a moderator:
For anyone in doubt I did some disassembly and it is indeed Mupen64plus + Adventus' gles2n64 + Ari64's recompiler, in other words the same as Mupen64plus on pandora.

Code:
                MOV     R5, 0xE51FF004
                MOV     R4, R12
                LDR     R1, [R6,R7]
                ADD     R3, R1, R3
loc_41A6C
                LDR     R1, [R2,R12]
                SUB     R1, R1, #8
                RSB     R1, R3, R1
                UBFX    R0, R1, #2, #0x18
                ADD     R1, R1, #unk_2000000
                CMN     R1, #0xFC000001
                ORR     R0, R0, #0xEA000000
                STRHI   R5, [R3]
                STRLS   R0, [R3]
                LDR     R1, [R2,R4]
                ADD     R2, R2, #4
                CMP     R2, #0x1EC
                STR     R1, [R3,#4]
                ADD     R3, R3, #8
                BNE     loc_41A6C
..is this trampoline code in arch_init() in assem_arm.c (Ari64's recompiler):
Code:
  while((void *)ptr<(void *)jump_table_symbols+sizeof(jump_table_symbols))
  {
    int offset=*ptr-(int)ptr2-8;
    if(offset>=-33554432&&offset<33554432) {
      *ptr2=0xea000000|((offset>>2)&0xffffff); // direct branch
    }else{
      *ptr2=0xe51ff004; // ldr pc,[pc,#-4]
    }
    ptr2++;
    *ptr2=*ptr;
    ptr++;
    ptr2++;
  }

function at 1FC88 is MTC0 from r4300/cop0.c, Mupen64plus:
Code:
sub_1FC88
...
                LDRB    R2, [R3,#0x11]
                CMP     R2, #0x1D
                ADDLS   PC, PC, R2,LSL#2
                B       loc_1FD80    @ above 0x1d
                B       loc_1FD5C    @ case 0
                B       loc_1FD48    @ case 1
                B       loc_1FD94    @ case 2
                B       loc_1FDB0    @ case 3
                B       loc_1FDCC    @ case 4
...
loc_1FD5C @ case 0
                LDR     R2, [R3,#8]
                LDR     R1, =(off_B0A00 - 0xB04F8)
                LDR     R2, [R2]
                LDR     R1, [R4,R1]
                AND     R0, R2, #0x3F
                AND     R2, R2, #0x8000003F
                CMP     R0, #0x1F
                STR     R2, [R1]
                BLS     loc_1FD48
..
loc_1FD94 @ case 2
                LDR     R2, =(off_B0A00 - 0xB04F8)
                LDR     R1, [R3,#8]
                LDR     R2, [R4,R2]
                LDR     R1, [R1]
                BIC     R1, R1, #0xC0000000
                STR     R1, [R2,#8]
...
loc_1FDCC @ case 4
                LDR     R2, =(off_B0A00 - 0xB04F8)
                LDR     R1, [R3,#8]
                LDR     R2, [R4,R2]
                LDR     R0, [R1]
                LDR     R1, [R2,#0x10]
                MOV     R0, R0,LSR#23
                BIC     R1, R1, #0xF000000F
                BIC     R1, R1, #0xF800000
                ORR     R1, R1, R0,LSL#23
                STR     R1, [R2,#0x10]
...
Code:
void MTC0(void)
{
   switch(PC->f.r.nrd)
     {
      case 0:    // Index
    Index = rrt & 0x8000003F;
    if ((Index & 0x3F) > 31) 
      {
         printf ("il y a plus de 32 TLB\n");
         stop=1;
      }
    break;
      case 1:    // Random
    break;
      case 2:    // EntryLo0
    EntryLo0 = rrt & 0x3FFFFFFF;
    break;
      case 3:    // EntryLo1
    EntryLo1 = rrt & 0x3FFFFFFF;
    break;
      case 4:    // Context
    Context = (rrt & 0xFF800000) | (Context & 0x007FFFF0);
    break;
...

As for gles2n64, he left the plugin name at 0xB3AB0 B)

I guess Mupen64plus authors should be notified of this too.
 
Ivanovic said:
Ari64 said:
notaz said:
marovada said:
Is this based on Ari64's work? If so, I hope he's getting a cut of the $5.99.
N64oid
I'm almost sure it is, it came out just a bit after Ari64 did the required changed for it to run on Android.
There is evidence that it is, but yongzh reportedly stripped out the credits and is trying to pretend he wrote it himself. He is not sharing the $5.99 with any of the developers.
Since this seems to clearly be a GPL violation you, as copyright holder for (at least part of) the work should maybe consider talking the the FSF who might know how to best enforce the GPL.

Note on the side:
Selling the software is perfectly fine, as long as you make the sources available and give credit to those that you base your work upon. Enforcing the GPL though can only be done by (one of) the original copyright holders, since the person violating the rules does violate the license between the original author and himself.
Another possible approach for this problem (in case the author does not react on those points brought up) would be contacting google via their market place (as author of the original software) asking for the removal of this software since it is a license violation (unless the credits for the work are preserved and the source is made available on reasonable terms).
 
Last edited by a moderator:
Schnatterplatsch said:
Very intressting, notaz. And he didn't name the original authors at all?
Nothing in the .apk except:
N64oid is NOT affiliated with, nor authorized, endorsed or licensed in any way by Nintendo Corporation, its affiliates or subsidiaries. "Nintendo 64" is a registered trademark of Nintendo Corporation. "Nintendo" is a registered trademark for the Nintendo Corporation. All trademarks are property of their respective holders.

N64oid does not include any Nintendo 64 games. We do not warrant compatibility with all Nintendo 64 games. As a matter of fact, there may be defects in certain games, including, but not limited to, audio and video flaws, which may affect how the games play.
 
Last edited by a moderator:
I would contact yonghz ... he will willingly put the credits down (somewhere hard to see :p) but he won't be so interested in sharing the profits.
He is (literally) stealing, by using GPL licensed code. It will be a shame to many people that look forward to some emulator action on the Xperia Play (or other devices with GameGripper, Keypad, BT module) but you got to think about yourself first.

If yonghz is unwilling to give credit and share at least half the profit, Google should be notified.
I am a Galaxy S user but I just really can't stand this, I thought he was better than this.



And zodtt isn't any better, in fact he's evil. He has done the same thing BUT he also sold his psx emulator various times as "Cydia Apps" and promised for speedy updates (ever since the 3GS) but kept abandoning them that people got fed up. He made a significant sum from half-baked work and is still praised as a saint by some iSheep.
 
It's not violating anything to sell a GPL emulator if you otherwise follow the license. That includes making the source readily available and distributing the copying terms. I dunno about the second part, but he's made the source to all the other GPL emulators available. Like I said, I'm sure the source will show up.. I'm not excusing this, but the fact is lots of people do this (program first, source a little later) so he's not exactly a world class villain.

And as for the money. People who complain about those who make money off of someone else's work are at a disconnect with how capitalism and the world at large works. Instead of focusing on that person's prosperity weighted against the choice others made to NOT sell their work, look at what the cost of $6 means to each individual who decides to buy or not. If you don't want to fork that money over to someone vote with your dollars.
 
I guess you're right Exo ... still frustrates me though.
But I have to disagree, voting with your wallet doesn't work. There's too many idiots that make the tactic useless, unless you're an extremist troll, it aint gonna work for Puny Humans!
 
One of the screenshots in the market shows Zelda OOT. Is he just using an outdated plugin, in which the bug didn't occur yet or did he maybe fix it? So if the source shows up, we may profite from it as well.

But still, he should name the credits. If not even let the original authors have part of his profit.
 
Kangal said:
I guess you're right Exo ... still frustrates me though.
But I have to disagree, voting with your wallet doesn't work. There's too many idiots that make the tactic useless, unless you're an extremist troll, it aint gonna work for Puny Humans!

Democracy is a system of letting the majority dictate even if you think they're idiots. Capitalism is sort of a democratized market (ideally).

Personally I don't know why people are idiots for paying a small sum for software that does something they want.

Schnatterplatsch said:
But still, he should name the credits. If not even let the original authors have part of his profit.

Unfortunately, in this case it's really hard to share profit when all sorts of people have contributed. Even sharing profit from Google marketplace with one other person is pretty hard :/
 
Last edited by a moderator:
Back
Top