Homebrew I got a Nintendo 64 emulator running (extremely poorly) on the New 3DS!

Do you think playable N64 emulation on New 3DS is possible?

  • Yes, of course, the New 3DS has a powerful quad-core processor, so it should easily be capable!

  • No way, the New 3DS isn't powerful enough to correctly emulate a 22-year-old console...


Results are only viewable after voting.
Status
Not open for further replies.

SimonMKWii

Professional Idiot
OP
Member
Joined
Nov 18, 2017
Messages
666
Trophies
0
Location
Melbourne, Victoria
XP
2,760
Country
Australia
It took around 50 minutes to produce that bottom screen screenshot. In the OP, there are two screenshots that were captured with Luma. Luma takes both the top and bottom screen screenshots when you take a screenshot. It took OP 50 minutes to plug their 3ds SD card into their computer and copy an existing screenshot.

inb4 I deleted all of my screenshots after uploading them:
Then why is the screenshot you uploaded called bot_004.png if you're always deleting your screenshots?

Why don't you just post a video where you don't suspiciously hide the bottom screen?

Also, it's a bit weird, why does the polygon count and ROM size have a comma, but not the VI refresh rate doesn't?
u5IwgW2.png




All the code you posted appears to be just directly stolen from CTR64. You even forgot the Beerware license. Tsk, tsk.
How did you combine the official Nintendo SDK with the homebrew SDK?
You should also post the Z64Open method. Remember, it can't just be using fopen. There has to be some special code because the rom is embedded into the program.

1. I have other things in life to get on with, fuckwit. My life doesn't revolve around inserting SD cards into my computer.
2. I'm not always deleting my screenshots, where the fuck did you get that idea from?
3. I wasn't suspiciously hiding the bottom screen. Four times it gets shown.
4. The VI refresh rate is a defined/set amount, it's not dynamically changing, therefore it was human error. In other words, I fucked it up.
5. The code has been heavily modified. Read it again.
6. I didn't, each .cpp file uses the homebrew SDK, I used a little extract of GUI code from the official SDK within the full code.
7:
Code:
inline u32
SwapME32(u32 Data)
{
    u32 Value = 0;
    Value |= ((Data & 0xFF) << 8);
    Value |= ((Data & 0xFF00) >> 8);
    Value |= ((Data & 0xFF0000) << 8);
    Value |= ((Data & 0xFF000000) >> 8);
    return Value;
}

void
Z64GetHeader(z64 *Z64, z64_hdr *Hdr)
{
    Z64Seek(Z64, 0);
    u32 *StaleData = (u32 *)Hdr;
    fread(StaleData, sizeof(z64_hdr), 1, Z64->FileStream);
    if (Z64->Flags & Z64_FLAG_MIDDLE_ENDIAN)
    {
        for (u32 i = 0; i < (sizeof(z64_hdr) / 4); ++i)
        {
            StaleData[i] = SwapME32(StaleData[i]);
        }
    }

    Hdr->ClockRate = __builtin_bswap32(Hdr->ClockRate);
    Hdr->PC = __builtin_bswap32(Hdr->PC);
    Hdr->Release = __builtin_bswap32(Hdr->Release);
    Hdr->CRC1 = __builtin_bswap32(Hdr->CRC1);
    Hdr->CRC2 = __builtin_bswap32(Hdr->CRC2);
    Hdr->ManufacturerID = __builtin_bswap32(Hdr->ManufacturerID);
    Hdr->CartridgeID = __builtin_bswap16(Hdr->CartridgeID);
    Hdr->Country = __builtin_bswap16(Hdr->Country);

    for (int i = 0; i < 1008; ++i)
    {
        Hdr->BootCode[i] = __builtin_bswap32(Hdr->BootCode[i]);
    }
}

void
Z64Seek(z64 *Z64, unsigned int offset)
{
    fseek(Z64->FileStream, offset, SEEK_SET);
}

int
Z64Open(z64 *Z64, int Flags, const char *FileName)
{
    Z64->FileStream = fopen(FileName, "rb");
    Z64->Flags = Flags;
    return Z64->FileStream ? 1 : 0;
}

void
Z64Read(z64 *Z64, void *buffer, unsigned int bytes)
{
    fread(buffer, 1, bytes, Z64->FileStream);
    u32 *StaleData = (u32 *)buffer;
    if (Z64->Flags & Z64_FLAG_MIDDLE_ENDIAN)
    {
        for (u32 i = 0; i < (bytes / 4); ++i)
        {
            StaleData[i] = SwapME32(StaleData[i]);
        }
    }
}

void
Z64Close(z64 *Z64)
{
    fclose(Z64->FileStream);
}

unsigned int
Z64GetCartSize(z64 *Z64)
{
    long int CurPos = ftell(Z64->FileStream);
    fseek(Z64->FileStream, 0, SEEK_END);
    long int fsize = ftell(Z64->FileStream);
    fseek(Z64->FileStream, CurPos, SEEK_SET);
    return fsize;
}

const char *
Z64GetCountryString(u16 Country)
{
    switch (Country)
    {
        case COUNTRY_GERMANY:
            return "Germany";
        case COUNTRY_USA:
            return "USA";
        case COUNTRY_JAPAN:
            return "Japan";
        case COUNTRY_EUROPE:
            return "Europe";
        case COUNTRY_AUSTRALIA:
            return "Australia";
    }

    return "Unknown";
}

const char *
Z64GetManufacturerString(u16 ManufacturerID)
{
    switch (ManufacturerID) {
        case MANUFACTURER_NINTENDO:
            return "Nintendo";
    }

    return "Unknown";
}
 

smileyhead

I like cute stuff.
Member
Joined
Aug 31, 2015
Messages
4,803
Trophies
3
Age
23
Location
Budakeszi, Hungary
Website
sites.google.com
XP
10,584
Country
Hungary
Yeah, because videos just make themself.
Um...
Open YouTube app on your phone > Upload > Take video > Do stuff > Upload.
That's like 5 minutes or less.
 

retvoid

Member
Newcomer
Joined
Nov 11, 2017
Messages
10
Trophies
0
Age
22
XP
71
Country
Australia
Ok, I've had enough of playing nice. This is fake beyond any shred of doubt, and ironically enough, you provided us with everything we need to prove this.

You stated, verbatim, that you "used the official Nintendo 3DS API".
Because of this, there are now only 2 possible scenarios:
1. This is fake. You've pulled "le epic prank on gbatemp", you got some people to take notice of your post. Eventually this is all forgotten about, and nothing happens from here.
2. This is real. You are using the official CTR SDK to create this emulator.
Now, if the second case holds true, then this has some massive implications on you. You've violated the developer program's NDA in at least two ways:
- You've publicly disclosed that you are enrolled in the Nintendo developer program.
- You're using the SDK to create applications that are in violation of the terms of the NDA (ie. homebrew programs).
Hopefully, you aren't thick enough to realize that this would mean Nintendo sending a horde of lawyers your way, and no-one even touching your emulator because of the legal shitstorm surrounding it.

Seeing as the second case is highly, highly improbable, I've no choice but to go with the first option.
 

smileyhead

I like cute stuff.
Member
Joined
Aug 31, 2015
Messages
4,803
Trophies
3
Age
23
Location
Budakeszi, Hungary
Website
sites.google.com
XP
10,584
Country
Hungary
I have a life. If you can't even fathom the fact that I need to do things other than making shitty YouTube videos, then just fuck right off.
Yet you just keep coming back and throwing curses at people. Apparently that's something you do have time for.
 
D

Deleted User

Guest
1. I have other things in life to get on with, fuckwit. My life doesn't revolve around inserting SD cards into my computer.
Really? I'd be refreshing this page every 10 seconds if I had 50 people viewing my thread.

3. I wasn't suspiciously hiding the bottom screen. Four times it gets shown.
Conveniently, never clearly.

4. The VI refresh rate is a defined/set amount, it's not dynamically changing, therefore it was human error. In other words, I fucked it up.
Then why display it?

All the dynamic numbers use commas. That means you must be converting the numbers to strings at runtime to display them.
If your VI refresh rate was stored as a number, it would be converted to a string the same way as all of your other numbers, most likely.
Because the VI refresh rate doesn't have a comma, that must mean you stored it as a constant string. Meaning you typed it out in the source code independent from the variable for VI refresh rate, making it completely useless. The only reason you put it there was to make your program "screenshot" a little more legit.

6. I didn't, each .cpp file uses the homebrew SDK, I used a little extract of GUI code from the official SDK within the full code.
You have to compile all the code with the homebrew compiler in the end because you're using methods from the homebrew SDK. The homebrew compiler definitely wouldn't compile Nintendo SDK code you throw at it because it was written by people who have never seen the Nintendo SDK. So you can't just throw Nintendo SDK GUI code into your homebrew code.

Code:
int
Z64Open(z64 *Z64, int Flags, const char *FileName)
{
    Z64->FileStream = fopen(FileName, "rb");
    Z64->Flags = Flags;
    return Z64->FileStream ? 1 : 0;
}
How are you using the fopen command to load an embedded file?

Edit:
I only skimmed through the code you posted, but it appears that the only place where you wrote "Redacted SDK code" is the code that runs right before the application exits, near the end of the main function after the main loop. Code there won't be helpful for getting GUI displayed while the program is running.

Edit 2:
I mean "skimmed," not "skipped."

Edit 3:
I forgot to reply to your second point, so here you go.
2. I'm not always deleting my screenshots, where the fuck did you get that idea from?
Just defense in case you decided to say that you constantly delete your screenshots making it so you had to go take a new screenshot before you could post the bottom screen screenshot.
 
Last edited by ,

SimonMKWii

Professional Idiot
OP
Member
Joined
Nov 18, 2017
Messages
666
Trophies
0
Location
Melbourne, Victoria
XP
2,760
Country
Australia
Ok, I've had enough of playing nice. This is fake beyond any shred of doubt, and ironically enough, you provided us with everything we need to prove this.

You stated, verbatim, that you "used the official Nintendo 3DS API".
Because of this, there are now only 2 possible scenarios:
1. This is fake. You've pulled "le epic prank on gbatemp", you got some people to take notice of your post. Eventually this is all forgotten about, and nothing happens from here.
2. This is real. You are using the official CTR SDK to create this emulator.
Now, if the second case holds true, then this has some massive implications on you. You've violated the developer program's NDA in at least two ways:
- You've publicly disclosed that you are enrolled in the Nintendo developer program.
- You're using the SDK to create applications that are in violation of the terms of the NDA (ie. homebrew programs).
Hopefully, you aren't thick enough to realize that this would mean Nintendo sending a horde of lawyers your way, and no-one even touching your emulator because of the legal shitstorm surrounding it.

Seeing as the second case is highly, highly improbable, I've no choice but to go with the first option.

What? That's like saying that Bethesda can't show development footage of Wolfenstein II running on Switch because they're enrolled in the developer program.
Oh yeah, read my original post. I made it very clear that it was never going to be in a playable state, therefore I was never going to release it.
Also, the SDK code was used for the GUI, I could easily remove it.
Not only that, but I redacted the SDK code from the post, as you would see if you even bothered to read through the code.

--------------------- MERGED ---------------------------

I only skimmed through the code you posted, but it appears that the only place where you wrote "Redacted SDK code" is the code that runs right before the application exits, near the end of the main function after the main loop. Code there won't be helpful for getting GUI displayed while the program is running.

That's not even close to where the SDK code was, it was just a marker to see if people would bother reading the full code.
 

Ricken

Searching for the air to breathe~
Member
Joined
Jan 19, 2016
Messages
2,661
Trophies
1
Age
21
Location
Mid-Michigan
XP
2,958
Country
United States
Every instinct in me is screaming fake, but the last thing I want to do is scare a potential dev out of the scene. Plus I want this to be real.
 

smileyhead

I like cute stuff.
Member
Joined
Aug 31, 2015
Messages
4,803
Trophies
3
Age
23
Location
Budakeszi, Hungary
Website
sites.google.com
XP
10,584
Country
Hungary
Fucking hell. 4 months I spent on this. 4 FUCKING MONTHS.

All I see is "FAKE", "FAKE" and "FAKE"

There goes all my time. Wasted away.
All you need to do is prove the bloody thing. Just a top screen video won't be enough to do that.
 

Ricken

Searching for the air to breathe~
Member
Joined
Jan 19, 2016
Messages
2,661
Trophies
1
Age
21
Location
Mid-Michigan
XP
2,958
Country
United States
Fucking hell. 4 months I spent on this. 4 FUCKING MONTHS.

All I see is "FAKE", "FAKE" and "FAKE"

There goes all my time. Wasted away.
The ROM title looking absurdly like the moflex player really doesn't help your case
Nor does the fact you cover your touch screen during the one video you made
¯\_(ツ)_/¯

EDIT; And I will be very disappointed if you spent 4 months making a moflex video to show to everyone
 
Last edited by Ricken,

retvoid

Member
Newcomer
Joined
Nov 11, 2017
Messages
10
Trophies
0
Age
22
XP
71
Country
Australia
What? That's like saying that Bethesda can't show development footage of Wolfenstein II running on Switch because they're enrolled in the developer program.
That's not what I'm saying at all. I'm saying that the very nature of the program you're developing is in violation of the developer program NDA.
Oh yeah, read my original post. I made it very clear that it was never going to be in a playable state, therefore I was never going to release it.
Why come to GBATemp and brag about it then?
Also, the SDK code was used for the GUI, I could easily remove it.
Then do that, and release it. I'm sure you could use citro3d to make an appealing UI.
Not only that, but I redacted the SDK code from the post, as you would see if you even bothered to read through the code.
I did read through the code. Looks like a bunch of nothingness to me. And redacting SDK code doesn't change the fact that you used it.
 

AxlSt00pid

Well-Known Member
Member
Joined
May 31, 2016
Messages
1,926
Trophies
1
Age
24
XP
3,518
Country
Spain
Fucking hell. 4 months I spent on this. 4 FUCKING MONTHS.

All I see is "FAKE", "FAKE" and "FAKE"

There goes all my time. Wasted away.
If you want to make people stop saying fake you need to prove that it's actually real.
You can post a fucking video showing how you play SM64 on your N3DS while showing the entire 3DS (Top and Bottom screens + button input in real time) instead of whining because they don't believe it's real
 
Status
Not open for further replies.

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
    Xdqwerty @ Xdqwerty: @BakerMan, @salazarcosplay hi