Hacking NTRCFW 3.4 Preview1(Support video output on New 3DS)

The Real Jdbye

*is birb*
Member
Joined
Mar 17, 2010
Messages
23,243
Trophies
4
Location
Space
XP
13,793
Country
Norway
Hmm, I seem to have trouble with this too.

I have my Windows Firewall disabled (running Windows 10) and I type in the IP/port given in FTP-3ds, using the latest NTR and bootntr.cia in aureinand with the 10.2 NTR firmware.bin from FIRMS.7z

I launch NTR Debugger and Viewer as admin and then I type the connect('3dsip',port) and remoteplay() functions after enabling NTR Debug, but it doesn't seem to work properly (the syntax is correct, but it won't let me in)

Incidentally, trying to connect() while FTP-3ds is running seems to work just moments after sending the command, but remoteplay() doesn't work. Does this mean that NTR CFW itself is failing to host the server properly, or am I doing something wrong?

Here's the debugger log:

//This is where I hosted with FTP-3DS, NTR Debug Enabled
> connect('[redacted]', 5000)
null
Server connected.
Server disconnected.

//This is where I was sitting on my home menu, NTR Debug Enabled
> connect('[redacted]', 5000)
No connection could be made because the target machine actively refused it [redacted]:5000
at System.Net.Sockets.TcpClient.Connect(String hostname, Int32 port)
at ntrclient.NtrClient.connectToServer()
at ntrclient.ScriptHelper.connect(String host, Int32 port)
at Microsoft.Scripting.Interpreter.ActionCallInstruction`3.Run(InterpretedFrame frame)
at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
at Microsoft.Scripting.Interpreter.LightLambda.Run5[T0,T1,T2,T3,T4,TRet](T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
at System.Dynamic.UpdateDelegates.UpdateAndExecute4[T0,T1,T2,T3,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2, T3 arg3)
at Microsoft.Scripting.Interpreter.DynamicInstruction`5.Run(InterpretedFrame frame)
at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
at Microsoft.Scripting.Interpreter.LightLambda.Run2[T0,T1,TRet](T0 arg0, T1 arg1)
at IronPython.Compiler.PythonScriptCode.RunWorker(CodeContext ctx)
at IronPython.Compiler.RuntimeScriptCode.InvokeTarget(Scope scope)
at ntrclient.CmdWindow.runCmd(String cmd)
> remoteplay()
Cannot access a disposed object.
Object name: 'System.Net.Sockets.NetworkStream'.
at System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)
at ntrclient.NtrClient.sendPacket(UInt32 type, UInt32 cmd, UInt32[] args, UInt32 dataLen)
at ntrclient.NtrClient.sendEmptyPacket(UInt32 cmd, UInt32 arg0, UInt32 arg1, UInt32 arg2)
at ntrclient.ScriptHelper.remoteplay()
at Microsoft.Scripting.Interpreter.ActionCallInstruction`1.Run(InterpretedFrame frame)
at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
at Microsoft.Scripting.Interpreter.LightLambda.Run3[T0,T1,T2,TRet](T0 arg0, T1 arg1, T2 arg2)
at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1)
at Microsoft.Scripting.Interpreter.DynamicInstruction`3.Run(InterpretedFrame frame)
at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
at Microsoft.Scripting.Interpreter.LightLambda.Run2[T0,T1,TRet](T0 arg0, T1 arg1)
at IronPython.Compiler.PythonScriptCode.RunWorker(CodeContext ctx)
at IronPython.Compiler.RuntimeScriptCode.InvokeTarget(Scope scope)
at ntrclient.CmdWindow.runCmd(String cmd)
Wrong port. You should be using 8000.

I seem to be having issues with this. When I run the remoteplay command it fails.

Here's the console output:

Code:
NTR debugger by cell9

import sys;sys.path.append('.\python\Lib')
null
for n in [n for n in dir(nc) if not n.startswith('')]: globals()[n] = getattr(nc,n)

null
Commands available:
repr([n for n in dir(nc) if not n.startswith('')])
['attachprocess', 'bpadd', 'bpdis', 'bpena', 'connect', 'data', 'disconnect', 'listprocess', 'listthread', 'memlayout', 'queryhandle', 'reload', 'remoteplay', 'resume', 'sayhello', 'sendfile', 'write']
connect('192.168.1.52', 8000)
null
Server connected.
remoteplay()
null
Will be disconnected in 10 seconds to enhance performance.
cpu was locked on 804MHz, L2 Enabled
starting remoteplay...
buf: 07001000, size: 00022000
remotePC: 001231d0
disconnect()
null
Unable to read data from the transport connection: A blocking operation was interrupted by a call to WSACancelBlockingCall.
Server disconnected.

No idea what it means but streaming doesn't work.
That looks normal. It's the exact same output I was getting when it was working. You ran the viewer before starting remoteplay() right?

Can somebody make a how-to for dummy? I'm stuck at putting the port and setting the fakeproxy (?).
Port is 8000, FakeProxy isn't needed unless you're connecting the 3DS to a hotspot with no internet access, from what I could gather from the readme PDF, it's needed to prevent the 3DS from automatically disconnecting from such networks when it doesn't find a valid internet connection.

Also how is everyone else getting these such good fps but I get like 5-7
Depends on the game, and the quality of your wifi signal/wifi saturation by other clients. I got around 7-12 FPS in 3D games. Boxboy was a stable-ish 60 FPS though. Look at the output in the console, quality should be 90%+ if your wifi is good (according to the PDF readme), low quality means a lot of dropped frames and you will get a lower FPS. If quality is already 90%+ then you are getting the most out of it that you can with that game.
 
Last edited by The Real Jdbye,

TeconMoon

Well-Known Member
Member
Joined
Aug 7, 2007
Messages
749
Trophies
1
XP
2,601
Country
United States
Wow very cool! The top screen is great, the bottom screen isn't but this is a great proof of concept. Could even be used for streaming without a capture board if you routed the audio through a line in and delayed the audio to compensate for the video delay. Can't wait to see where this goes :D
 

CrispyYoshi

Well-Known Member
Member
Joined
Mar 20, 2010
Messages
1,542
Trophies
1
XP
1,145
Country
United States
Wrong port. You should be using 8000.


That looks normal. It's the exact same output I was getting when it was working. You ran the viewer before starting remoteplay() right?


Port is 8000, FakeProxy isn't needed unless you're connecting the 3DS to a hotspot with no internet access, from what I could gather from the readme PDF, it's needed to prevent the 3DS from automatically disconnecting from such networks when it doesn't find a valid internet connection.


Depends on the game, and the quality of your wifi signal/wifi saturation by other clients. I got around 7-12 FPS in 3D games. Boxboy was a stable-ish 60 FPS though. Look at the output in the console, quality should be 90%+ if your wifi is good (according to the PDF readme), low quality means a lot of dropped frames and you will get a lower FPS. If quality is already 90%+ then you are getting the most out of it that you can with that game.
HOLY MOLY that fixed my problem, thank you! Working perfectly, I'll have to test this more when I'm not using a crappy dorm internet.
 

The Real Jdbye

*is birb*
Member
Joined
Mar 17, 2010
Messages
23,243
Trophies
4
Location
Space
XP
13,793
Country
Norway
I don't want to use an old firmware if it can be helped, I was planning on attempting a port.
Using an old firmware.bin won't make a difference to anything else, it's only an issue when new firmware updates have changes that make them incompatible with old FIRM. ntr.bin which is the component that needs to be updated for newer FIRM is closed source, so there's not much anyone can do about it until cell9 adds support.
 

gudenau

Largely ignored
Member
Joined
Jul 7, 2010
Messages
3,882
Trophies
2
Location
/dev/random
Website
www.gudenau.net
XP
5,350
Country
United States
Using an old firmware.bin won't make a difference to anything else, it's only an issue when new firmware updates have changes that make them incompatible with old FIRM. ntr.bin which is the component that needs to be updated for newer FIRM is closed source, so there's not much anyone can do about it until cell9 adds support.
If I recall correctly ntr.bin is just a binary blob that gets loaded into the home menu's process, marked as RWX and executed. Should be fairly easy to update, as things go at least. Maybe I'll end up knowing how it works, making my own version. We will see.
 

Apache Thunder

I have cameras in your head!
Member
Joined
Oct 7, 2007
Messages
4,425
Trophies
3
Age
36
Location
Levelland, Texas
Website
www.mariopc.co.nr
XP
6,782
Country
United States
Ok I just discovered that video streaming for the Pokemon games do work. You just have to have the game connect to the internet. Then the video stream comes back. I don't know why this is, but it resolves black screen issue with Pokemon Alpha Sapphire. I assume this fix applies to the other games to. Ocarina of Time doesn't have internet features....So I can't get that one to stream. But hey the pokemon games work now. :P
 

Apache Thunder

I have cameras in your head!
Member
Joined
Oct 7, 2007
Messages
4,425
Trophies
3
Age
36
Location
Levelland, Texas
Website
www.mariopc.co.nr
XP
6,782
Country
United States
I did try using a USB Wifi adapter in adhoc mode via an app like Connectify. The performace was notably worse despite being less then 2 feet away from my 3DS. I quickly switched back to having my 3DS connect to the router in the other room. It gets a little choppy, but looks to be good enough that once a more stable release comes out, I may still seen an improvement in performance in the next release. It looks very promising.

I hope a "proper" method of screen selection is implemented. Sure I can set scaling of bottom screen to 0 for example to only stream top screen. But I feel like NTRViewer is still streaming both screens despite one screen being sized to zero, so no performance benefit to using the -b 0 setting.

I think having video streaming togglable in the NTR menu on 3DS would be best. It's kinda of clunky trying to do it via NTR Debugger and the client exe. Why not enable "remoteplay" via a menu option on the 3DS? Seems like a better solution. Ability to display current IP would help a lot too. Though NTRViewer seems able to find the 3DS automatically so if remoteplay can be toggled from the 3DS instead, this will become much more user friendly.

Also, BootNTR cia hangs at "patching svc check" on my 9.2 emunand. I don't know why this happens. It's true 9.2 too since Aureinand is configured to use 9.0 FIRM with my 9.2 emunand. So it's practically the same as if it was 9.2 sysnand.

(I'm using Arm9LoaderHax by the way)

Has anyone gotten this release to work on 9.2 n3DS?
 
Last edited by Apache Thunder,

pdapanda

Well-Known Member
Member
Joined
Nov 19, 2014
Messages
730
Trophies
0
Age
32
XP
1,158
Country
Switzerland
It is already mentioned in the PDF, some games will disconnect wifi before booting automately,
to avoid this, imput write(0x0105AE4, (0x70, 0x47), pid=0x1a) before open your game.
(with this patch, you might have trouble with reconnecting to the router)
 
  • Like
Reactions: keyra

NekoMichi

Retro Collector
Member
Joined
Jun 4, 2015
Messages
1,441
Trophies
1
Location
Minus World
Website
www.youtube.com
XP
2,481
Country
I discovered something about the Pokémon games - The 3DS will stay connected to the router when you launch something like Pokémon X, but as soon as you hit Continue, the streaming stops working. At this point, my 3DS also disappeared from the router's "connected devices" list, however it reappears and streaming continues when I return to the Home Menu. I'm presuming that since Pokémon has a near-range console-to-console wireless feature, the 3DS automatically disconnects from any routers during gameplay and reconnects when gameplay ends. This might be a problem for streaming Pokémon games.

*reads previous posts*
Never mind, looks like it was already discovered...
 
Last edited by NekoMichi,

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
  • Xdqwerty @ Xdqwerty:
    also gonna install twilight menu in my r4 flashcard
  • Psionic Roshambo @ Psionic Roshambo:
    One thing that just occurred to me.... The sound on the 2600 sucked less back then the harsh sound we hear now is from infinitely better speakers we have now, back when the 2600 was new speakers produced a almost muffled sound, like CRTs made old graphics look slightly better.
  • Psionic Roshambo @ Psionic Roshambo:
    I wonder if I could recommend that to some emulation devs that perhaps the sound could use some smoothing out to simulate those old TVs
  • Psionic Roshambo @ Psionic Roshambo:
    I think a few of the early systems could benefit from that, at least up to the 8 bit generation, by the 16 bit generation I think TVs had gotten a lot better in almost every way
  • Xdqwerty @ Xdqwerty:
    i dont have an sd card adapter but I have an usb sd card adapter
  • K3Nv2 @ K3Nv2:
    Old people games
  • Xdqwerty @ Xdqwerty:
    its not the one that comes with the r4
  • Xdqwerty @ Xdqwerty:
    doesnt work (my flashcard is from r4isdhc.com)
  • Xdqwerty @ Xdqwerty:
    might install ysmenu first
  • Psionic Roshambo @ Psionic Roshambo:
    Try Wood firmware
  • Psionic Roshambo @ Psionic Roshambo:
    For your R4
  • Psionic Roshambo @ Psionic Roshambo:
    It's old but it's the best firmware out for DS stuff
  • Xdqwerty @ Xdqwerty:
    it says it only works for the original R4, R4i Gold (r4ids.cn), R4iDSN (r4idsn.com) and Acekard R.P.G.
  • Xdqwerty @ Xdqwerty:
    nvm it does support mine
  • Xdqwerty @ Xdqwerty:
    but why choose it over ysmenu @Psionic Roshambo?
  • Xdqwerty @ Xdqwerty:
    bc im stupid?
  • Xdqwerty @ Xdqwerty:
    yea ik im stupid
  • Xdqwerty @ Xdqwerty:
    good night
  • Psionic Roshambo @ Psionic Roshambo:
    Just give it a try, but honestly if you have a 3DS you can play DS games without a card just off the internal SD card
  • Psionic Roshambo @ Psionic Roshambo:
    Slightly slower loading but a bit more convenient
  • BakerMan @ BakerMan:
    guys, my fuckin headphones have an out of place speaker
  • K3Nv2 @ K3Nv2:
    Did you try wearing them?
    B @ btjunior: @Xdqwerty 16