Digital Binary Code Processing On Stock Footage Video (100 ...

CRTPi-RCA NTSC+PAL v3.0F - America & Europe Unite!

CRTPi Project Presents:

CRTPi-RCA v3.0F

A CRTPi image for running 240p via 3.5mm Composite
Other Releases:
Changelog: v3.0F for RCA 5/11/2020
Changelog: v2.0F for RCA 4/1/2020
Changelog: v1.1FX 12/20/2019
Changelog: v1.0F Hotfix 10/31/2019
Changelog: v1.0F 10/29/2019
Changelog: v0.4 10/22/2019
Changelog: v0.3 10/2/2019
What Does That Look Like?
Here are some examples of games being played in beautiful 240p on CRT sets using the RCA Image!.
What is Different?
  • Retropie 4.6 (build 72132587 commit 05/07/20 Buster 10)
  • Retroarch 1.8.5
  • 4GB (3872256 KB Uncompressed Image) (Compressed via WinRAR to 886769NTSC/868059PAL KB)
  • SSH, Samba Share, and USB Rom Service enabled by default
  • Heavily modified Sakitoshi CRT-TVout script for switching between 480i and 240p
  • Optional overclock values in /boot/config.txt for Pi2 & Pi3B (disabled by default)
  • NTSC @ 60hz 720/640x480 480i Resolution for Emulationstation & Kodi
  • PAL @ 50hz 720/640x576 576i Resolution for Emulationstation & Kodi
  • NTSC @ 60hz 640x480 Progressive (240 lines) for Retroarch
  • PAL @ 50hz 640x576 Progressive (288 lines) for Retroarch
  • Per-system custom refresh rates for Retroarch
  • Single-frame Run Ahead enabled for many 8-bit & 16-bit consoles and handhelds for Retroarch
  • Optional 480i mode for PSX and Arcade games
  • Preloaded with free 240p test suites for multiple consoles (PAL SNES & Mega-CD)
  • Preloaded with additional stable (opt) Retroarch emulators
  • Preloaded with DOSBox and ScummVM
  • Preloaded with Kodi 18.2 w/ Convergence Theme @ 480i
  • Preloaded with various 4:3 splashscreens from the RPiF download
  • Preloaded with 4:3 Ruckage's runcommand launching screens for supported systems
  • Custom 4:3 Arcade DOJ "Winners DO Use Drugs" splash screen.
  • Preloaded with MUNT Roland MT-32 MIDI emulation for DOSBox/ScummVM
  • Retroarch FCEUmm (NES) Emulator preconfigured for 4:3 horiz/vert overscan crop enabled w/ composite-direct-fbx pallete
  • Retroarch Picodrive (SMS/32X) Emulator preconfigured for 4:3 with 2.5X Sega Mastersystem & 1X Sega 32X resolution
  • Retroarch Gambatte (GB/GBC) emulator preset to Super Game Boy (Special 1 Pallete) mode with 2x integer scale SGB Overlay
  • Retroarch mGBA (GBA) emulator preset to Game Boy Player mode with 2x integer scale GBP Overlay
  • Other Retroarch handheld emulators preset for optimized wide display with overlay
  • Emulationstation preloaded with KALEL1981's Super-Retroboy theme (default)
  • Emulationstation preloaded with Ruckage's RetroPie menu icons
  • Emulationstation preloaded with Ruckage's snes-mini and nes-mini themes configured for 4:3
  • Emulationstation preloaded with PietDAmore's 240p Honey and Bubblegum themes
  • Custom ScummVM system artwork for snes-mini theme
  • Emulationstation systems ordered chronologically instead of alphabetically
  • Emulationstation preconfigured with best settings for analog A/V including best settings for video preview screensavers
What is Run-Ahead?
The Run Ahead feature calculates the frames as fast as possible in the background to "rollback" the action as close as possible to the input command requested.
I've enabled run-ahead on most of the 8 & 16-bit consoles and handhelds. A single frame (and using the second instance) is saved here, which dramatically improves input lag without affecting performance on a Pi3B+. More frames would require more hardware power, and may be achievable via overclocking.
lr-snes9x2010 consistent 60.0-60.2 FPS @ 60.098801hz lr-fceumm consistent 60.0-60.2 FPS @ 60.098801hz lr-beetle-pce-fast consistent 60.1-60.2 @ 60.000000hz lr-genesis-gx-plus consistent 59.9-60.2 FPS @ 59.922741hz (both genesis and sega cd) lr-picodrive consistent 59.9-60.2 FPS @ 59.922741hz (master system, game gear, and 32X) lr-gambatte consistent 60.0-60.2 FPS @ 60.098801hz (SGB2 framerate) lr-mgba consistent 59.8-60.4 FPS @ 60.002220hz (Gamecube framerate) 
Runahead Tested ~60FPS Stable:
  • Game Gear
  • Game Boy
  • Game Boy Color
  • Game Boy Advance
  • Master System
  • Megadrive
  • NES
  • PC Engine
  • PCE-CD
  • Sega 32X
  • Sega CD
  • SNES
Runahead Tested < 50FPS Unstable:
  • FB Neo
  • FB Alpha
  • Mame
  • N64
  • PlayStation
  • PSP
Runahead Untested:
  • Atari 800
  • Atari 2600
  • Atari 5200
  • Atari 7800
  • Atari Lynx
  • Coleco
  • Intellivision
  • MSX
What Does This NOT Have?
This doesn't have any ROMs (other than freeware test suites), BIOS files, music, screenshots, metadata, or videos concerning copywritten games. Other than the configurations and overlays, it has nothing that can't be downloaded through the repository or freeware.
Where Can I Get It?
You can download a premade image from Drive:
NOTE: Please expand your file system via Raspi-Config after your first boot, and reboot!
CRTPi-RCA NTSC v3.0F: For Raspberry Pi3B Composite-Out @ 60hz
MD5: 438d69a38b6085d2c5be30fbd43e2b43 
CRTPi-RCA PAL v3.0F: For Raspberry Pi3B Composite-Out @ 50hz
MD5: 5f76241b4ba75e95b597642cea8eb242 
How do I install the Arcade Configuration Pack?
These are the resolution-correct preset arcade configs for MAME/FBA including vertical games. There is roughly 38K files in there, spread out across several systems (arcade, fba, mame-libretro, and neogeo). Having these pre-installed would not allow either image to fit on the SD card used, and may not be needed for everyone. It's a fairly simple process that won't take more than a few minutes of your time.
  • Drop to shell or connect via SSH, and navigate to root (cd /)
  • Download the CRTPi-RCA_ArcadePack.zip with the command:
    sudo wget https://github.com/crtpi/CRTPi-Project/raw/masteCRTPi-RCA_ArcadePack.zip
  • Unzip and overwrite files with the command:
    sudo unzip -o -q CRTPi-RCA_ArcadePack.zip
  • Remove the zip with the command
    sudo rm CRTPi-RCA_ArcadePack.zip
  • Restore read/write access to the files you have overwritten with the command:
    sudo chmod a+rw -R /opt/retropie/configs/
How can I take full advantage of the 480i/240p Switching?
To force 480i for a system or game, you can create a '480i.txt' file inside the configuration folder of the system with a list of the file names (case insensitive, extension optional but recommended) you want to force.
If you wish to force 480i for a whole system, you can write "all" inside the '480i.txt' file.
Alternatively you can create a "240p.txt" file to force 480i to all games except for the ones inside the list.
You can read more about the script functionality here.
Example:
/opt/retropie/configs/psx/480i.txt containing "Bloody Roar 2.PBP" to force 480i for the file "Bloody Roar 2.PBP" /opt/retropie/configs/psx/480i.txt containing "all" to force 480i for all the PlayStation games. /opt/retropie/configs/ports/kodi/480i.txt containing "all" to force 480i on Kodi. 
I have X Issue! Help?
I only have like 500mb of free space on my XXgb SD card!
You need to expand your file system via Raspi-Config. Follow these steps.
I want to switch back to lr-mupen64plus!
  • When launching an n64 game, mash buttons on the controller until the runcommand window comes up.
  • Select on "1 Set default emulator for n64" and choose "lr-mupen64plus"
  • Then "Q Exit (without launching)"
  • Launch the game again -- it will launch in the chosen emulator at the proper resolution
What A/V cable should I use for 3.5mm Composite?
I recommend the Zune A/V cable or XBOX 360E cable, you can find them on eBay and Amazon.
Samba Share won't work after I set up Wi-Fi!
Samba share service starts on boot, pending that a network is available. Configure your Wi-Fi then reboot first, and if that doesn't fix it then go into Retropie Setup > Configuration/Tools > Samba > Install Samba. Once it's complete, reboot and it should be golden.
USB-Romservice and/or Retropie-Mount don't work!
Follow this guide, but follow these steps before plugging in your thumb drive:
  • Go to Retropie-Setup
  • Update retropie install script
  • Go to Manage Packages -> Optional Packages
  • Scroll all the way down to usbromservice
  • Uninstall usbromservice
  • Install it again from Binary
  • Once finished, choose Configuration, then Enable USB Romservice
  • Reboot, and wait for it to fully boot in to ES
  • Plug in USB stick (has to be FAT32) and WAIT A LONG TIME (if your stick has a light, wait for it to stop flashing)
submitted by ErantyInt to u/ErantyInt [link] [comments]

AJ ALMENDINGER

glimpse into the future of Roblox

Our vision to bring the world together through play has never been more relevant than it is now. As our founder and CEO, David Baszucki (a.k.a. Builderman), mentioned in his keynote, more and more people are using Roblox to stay connected with their friends and loved ones. He hinted at a future where, with our automatic machine translation technology, Roblox will one day act as a universal translator, enabling people from different cultures and backgrounds to connect and learn from each other.
During his keynote, Builderman also elaborated upon our vision to build the Metaverse; the future of avatar creation on the platform (infinitely customizable avatars that allow any body, any clothing, and any animation to come together seamlessly); more personalized game discovery; and simulating large social gatherings (like concerts, graduations, conferences, etc.) with tens of thousands of participants all in one server. We’re still very early on in this journey, but if these past five months have shown us anything, it’s clear that there is a growing need for human co-experience platforms like Roblox that allow people to play, create, learn, work, and share experiences together in a safe, civil 3D immersive space.
Up next, our VP of Developer Relations, Matt Curtis (a.k.a. m4rrh3w), shared an update on all the things we’re doing to continue empowering developers to create innovative and exciting content through collaboration, support, and expertise. He also highlighted some of the impressive milestones our creator community has achieved since last year’s RDC. Here are a few key takeaways:
And lastly, our VP of Engineering, Technology, Adam Miller (a.k.a. rbadam), unveiled a myriad of cool and upcoming features developers will someday be able to sink their teeth into. We saw a glimpse of procedural skies, skinned meshes, more high-quality materials, new terrain types, more fonts in Studio, a new asset type for in-game videos, haptic feedback on mobile, real-time CSG operations, and many more awesome tools that will unlock the potential for even bigger, more immersive experiences on Roblox.

Vibin’

Despite the virtual setting, RDC just wouldn’t have been the same without any fun party activities and networking opportunities. So, we invited special guests DJ Hyper Potions and cyber mentalist Colin Cloud for some truly awesome, truly mind-bending entertainment. Yoga instructor Erin Gilmore also swung by to inspire attendees to get out of their chair and get their body moving. And of course, we even had virtual rooms dedicated to karaoke and head-to-head social games, like trivia and Pictionary.
Over on the networking side, Team Adopt Me, Red Manta, StyLiS Studios, and Summit Studios hosted a virtual booth for attendees to ask questions, submit resumes, and more. We also had a networking session where three participants would be randomly grouped together to get to know each other.

What does Roblox mean to you?

We all know how talented the Roblox community is from your creations. We’ve heard plenty of stories over the years about how Roblox has touched your lives, how you’ve made friendships, learned new skills, or simply found a place where you can be yourself. We wanted to hear more. So, we asked attendees: What does Roblox mean to you? How has Roblox connected you? How has Roblox changed your life? Then, over the course of RDC, we incorporated your responses into this awesome mural.
📷
Created by Alece Birnbach at Graphic Recording Studio

Knowledge is power

This year’s breakout sessions included presentations from Roblox developers and staff members on the latest game development strategies, a deep dive into the Roblox engine, learning how to animate with Blender, tools for working together in teams, building performant game worlds, and the new Creator Dashboard. Dr. Michael Rich, Associate Professor at Harvard Medical School and Physician at Boston Children’s Hospital, also led attendees through a discussion on mental health and how to best take care of you and your friends’ emotional well-being, especially now during these challenging times.
📷
Making the Dream Work with Teamwork (presented by Roblox developer Myzta)
In addition to our traditional Q&A panel with top product and engineering leaders at Roblox, we also held a special session with Builderman himself to answer the community’s biggest questions.
📷
Roblox Product and Engineering Q&A Panel

2020 Game Jam

The Game Jam is always one of our favorite events of RDC. It’s a chance for folks to come together, flex their development skills, and come up with wildly inventive game ideas that really push the boundaries of what’s possible on Roblox. We had over 60 submissions this year—a new RDC record.
Once again, teams of up to six people from around the world had less than 24 hours to conceptualize, design, and publish a game based on the theme “2020 Vision,” all while working remotely no less! To achieve such a feat is nothing short of awe-inspiring, but as always, our dev community was more than up for the challenge. I’ve got to say, these were some of the finest creations we’ve seen.
WINNERS
Best in Show: Shapescape Created By: GhettoMilkMan, dayzeedog, maplestick, theloudscream, Brick_man, ilyannna You awaken in a strange laboratory, seemingly with no way out. Using a pair of special glasses, players must solve a series of anamorphic puzzles and optical illusions to make their escape.
Excellence in Visual Art: agn●sia Created By: boatbomber, thisfall, Elttob An obby experience unlike any other, this game is all about seeing the world through a different lens. Reveal platforms by switching between different colored lenses and make your way to the end.
Most Creative Gameplay: Visions of a perspective reality Created By: Noble_Draconian and Spathi Sometimes all it takes is a change in perspective to solve challenges. By switching between 2D and 3D perspectives, players can maneuver around obstacles or find new ways to reach the end of each level.
Outstanding Use of Tech: The Eyes of Providence Created By: Quenty, Arch_Mage, AlgyLacey, xJennyBeanx, Zomebody, Crykee This action/strategy game comes with a unique VR twist. While teams fight to construct the superior monument, two VR players can support their minions by collecting resources and manipulating the map.
Best Use of Theme: Sticker Situation Created By: dragonfrosting and Yozoh Set in a mysterious art gallery, players must solve puzzles by manipulating the environment using a magic camera and stickers. Snap a photograph, place down a sticker, and see how it changes the world.
OTHER TOP PICKS
HONORABLE MENTIONS
For the rest of the 2020 Game Jam submissions, check out the list below:
20-20 Vision | 20/20 Vision | 2020 Vision, A Crazy Perspective | 2020 Vision: Nyon | A Wild Trip! | Acuity | Best Year Ever | Better Half | Bloxlabs | Climb Stairs to 2021 | Double Vision (Team hey apple) | Eyebrawl | Eyeworm Exam | FIRE 2020 | HACKED | Hyperspective | Lucid Scream | Mystery Mansion | New Years at the Museum | New Year’s Bash | Poor Vision | Predict 2020 | RBC News | Retrovertigo | Second Wave | see no evil | Sight Fight | Sight Stealers | Spectacles Struggle | Specter Spectrum | Survive 2020 | The Lost Chicken Leg | The Outbreak | The Spyglass | Time Heist | Tunnel Vision | Virtual RDC – The Story | Vision (Team Freepunk) | Vision (Team VIP People ####) | Vision Developers Conference 2020 | Vision Is Key | Vision Perspective | Vision Racer | Visions | Zepto
And last but not least, we wanted to give a special shout out to Starboard Studios. Though they didn’t quite make it on time for our judges, we just had to include Dave’s Vision for good measure. 📷
Thanks to everyone who participated in the Game Jam, and congrats to all those who took home the dub in each of our categories this year. As the winners of Best in Show, the developers of Shapescape will have their names forever engraved on the RDC Game Jam trophy back at Roblox HQ. Great work!

‘Til next year

And that about wraps up our coverage of the first-ever digital RDC. Thanks to all who attended! Before we go, we wanted to share a special “behind the scenes” video from the 2020 RDC photoshoot.
Check it out:
It was absolutely bonkers. Getting 350 of us all in one server was so much fun and really brought back the feeling of being together with everyone again. That being said, we can’t wait to see you all—for real this time—at RDC next year. It’s going to be well worth the wait. ‘Til we meet again, my friends.
© 2020 Roblox Corporation. All Rights Reserved.

Improving Simulation and Performance with an Advanced Physics Solver

August

05, 2020

by chefdeletat
PRODUCT & TECH
📷In mid-2015, Roblox unveiled a major upgrade to its physics engine: the Projected Gauss-Seidel (PGS) physics solver. For the first year, the new solver was optional and provided improved fidelity and greater performance compared to the previously used spring solver.
In 2016, we added support for a diverse set of new physics constraints, incentivizing developers to migrate to the new solver and extending the creative capabilities of the physics engine. Any new places used the PGS solver by default, with the option of reverting back to the classic solver.
We ironed out some stability issues associated with high mass differences and complex mechanisms by the introduction of the hybrid LDL-PGS solver in mid-2018. This made the old solver obsolete, and it was completely disabled in 2019, automatically migrating all places to the PGS.
In 2019, the performance was further improved using multi-threading that splits the simulation into jobs consisting of connected islands of simulating parts. We still had performance issues related to the LDL that we finally resolved in early 2020.
The physics engine is still being improved and optimized for performance, and we plan on adding new features for the foreseeable future.

Implementing the Laws of Physics

📷
The main objective of a physics engine is to simulate the motion of bodies in a virtual environment. In our physics engine, we care about bodies that are rigid, that collide and have constraints with each other.
A physics engine is organized into two phases: collision detection and solving. Collision detection finds intersections between geometries associated with the rigid bodies, generating appropriate collision information such as collision points, normals and penetration depths. Then a solver updates the motion of rigid bodies under the influence of the collisions that were detected and constraints that were provided by the user.
📷
The motion is the result of the solver interpreting the laws of physics, such as conservation of energy and momentum. But doing this 100% accurately is prohibitively expensive, and the trick to simulating it in real-time is to approximate to increase performance, as long as the result is physically realistic. As long as the basic laws of motion are maintained within a reasonable tolerance, this tradeoff is completely acceptable for a computer game simulation.

Taking Small Steps

The main idea of the physics engine is to discretize the motion using time-stepping. The equations of motion of constrained and unconstrained rigid bodies are very difficult to integrate directly and accurately. The discretization subdivides the motion into small time increments, where the equations are simplified and linearized making it possible to solve them approximately. This means that during each time step the motion of the relevant parts of rigid bodies that are involved in a constraint is linearly approximated.
📷📷
Although a linearized problem is easier to solve, it produces drift in a simulation containing non-linear behaviors, like rotational motion. Later we’ll see mitigation methods that help reduce the drift and make the simulation more plausible.

Solving

📷
Having linearized the equations of motion for a time step, we end up needing to solve a linear system or linear complementarity problem (LCP). These systems can be arbitrarily large and can still be quite expensive to solve exactly. Again the trick is to find an approximate solution using a faster method. A modern method to approximately solve an LCP with good convergence properties is the Projected Gauss-Seidel (PGS). It is an iterative method, meaning that with each iteration the approximate solution is brought closer to the true solution, and its final accuracy depends on the number of iterations.
📷
This animation shows how a PGS solver changes the positions of the bodies at each step of the iteration process, the objective being to find the positions that respect the ball and socket constraints while preserving the center of mass at each step (this is a type of positional solver used by the IK dragger). Although this example has a simple analytical solution, it’s a good demonstration of the idea behind the PGS. At each step, the solver fixes one of the constraints and lets the other be violated. After a few iterations, the bodies are very close to their correct positions. A characteristic of this method is how some rigid bodies seem to vibrate around their final position, especially when coupling interactions with heavier bodies. If we don’t do enough iterations, the yellow part might be left in a visibly invalid state where one of its two constraints is dramatically violated. This is called the high mass ratio problem, and it has been the bane of physics engines as it causes instabilities and explosions. If we do too many iterations, the solver becomes too slow, if we don’t it becomes unstable. Balancing the two sides has been a painful and long process.

Mitigation Strategies

📷A solver has two major sources of inaccuracies: time-stepping and iterative solving (there is also floating point drift but it’s minor compared to the first two). These inaccuracies introduce errors in the simulation causing it to drift from the correct path. Some of this drift is tolerable like slightly different velocities or energy loss, but some are not like instabilities, large energy gains or dislocated constraints.
Therefore a lot of the complexity in the solver comes from the implementation of methods to minimize the impact of computational inaccuracies. Our final implementation uses some traditional and some novel mitigation strategies:
  1. Warm starting: starting with the solution from a previous time-step to increase the convergence rate of the iterative solver
  2. Post-stabilization: reprojecting the system back to the constraint manifold to prevent constraint drift
  3. Regularization: adding compliance to the constraints ensuring a solution exists and is unique
  4. Pre-conditioning: using an exact solution to a linear subsystem, improving the stability of complex mechanisms
Strategies 1, 2 and 3 are pretty traditional, but 3 has been improved and perfected by us. Also, although 4 is not unheard of, we haven’t seen any practical implementation of it. We use an original factorization method for large sparse constraint matrices and a new efficient way of combining it with the PGS. The resulting implementation is only slightly slower compared to pure PGS but ensures that the linear system coming from equality constraints is solved exactly. Consequently, the equality constraints suffer only from drift coming from the time discretization. Details on our methods are contained in my GDC 2020 presentation. Currently, we are investigating direct methods applied to inequality constraints and collisions.

Getting More Details

Traditionally there are two mathematical models for articulated mechanisms: there are reduced coordinate methods spearheaded by Featherstone, that parametrize the degrees of freedom at each joint, and there are full coordinate methods that use a Lagrangian formulation.
We use the second formulation as it is less restrictive and requires much simpler mathematics and implementation.
The Roblox engine uses analytical methods to compute the dynamic response of constraints, as opposed to penalty methods that were used before. Analytics methods were initially introduced in Baraff 1989, where they are used to treat both equality and non-equality constraints in a consistent manner. Baraff observed that the contact model can be formulated using quadratic programming, and he provided a heuristic solution method (which is not the method we use in our solver).
Instead of using force-based formulation, we use an impulse-based formulation in velocity space, originally introduced by Mirtich-Canny 1995 and further improved by Stewart-Trinkle 1996, which unifies the treatment of different contact types and guarantees the existence of a solution for contacts with friction. At each timestep, the constraints and collisions are maintained by applying instantaneous changes in velocities due to constraint impulses. An excellent explanation of why impulse-based simulation is superior is contained in the GDC presentation of Catto 2014.
The frictionless contacts are modeled using a linear complementarity problem (LCP) as described in Baraff 1994. Friction is added as a non-linear projection onto the friction cone, interleaved with the iterations of the Projected Gauss-Seidel.
The numerical drift that introduces positional errors in the constraints is resolved using a post-stabilization technique using pseudo-velocities introduced by Cline-Pai 2003. It involves solving a second LCP in the position space, which projects the system back to the constraint manifold.
The LCPs are solved using a PGS / Impulse Solver popularized by Catto 2005 (also see Catto 2009). This method is iterative and considers each individual constraints in sequence and resolves it independently. Over many iterations, and in ideal conditions, the system converges to a global solution.
Additionally, high mass ratio issues in equality constraints are ironed out by preconditioning the PGS using the sparse LDL decomposition of the constraint matrix of equality constraints. Dense submatrices of the constraint matrix are sparsified using a method we call Body Splitting. This is similar to the LDL decomposition used in Baraff 1996, but allows more general mechanical systems, and solves the system in constraint space. For more information, you can see my GDC 2020 presentation.
The architecture of our solver follows the idea of Guendelman-Bridson-Fedkiw, where the velocity and position stepping are separated by the constraint resolution. Our time sequencing is:
  1. Advance velocities
  2. Constraint resolution in velocity space and position space
  3. Advance positions
This scheme has the advantage of integrating only valid velocities, and limiting latency in external force application but allowing a small amount of perceived constraint violation due to numerical drift.
An excellent reference for rigid body simulation is the book Erleben 2005 that was recently made freely available. You can find online lectures about physics-based animation, a blog by Nilson Souto on building a physics engine, a very good GDC presentation by Erin Catto on modern solver methods, and forums like the Bullet Physics Forum and GameDev which are excellent places to ask questions.

In Conclusion

The field of game physics simulation presents many interesting problems that are both exciting and challenging. There are opportunities to learn a substantial amount of cool mathematics and physics and to use modern optimizations techniques. It’s an area of game development that tightly marries mathematics, physics and software engineering.
Even if Roblox has a good rigid body physics engine, there are areas where it can be improved and optimized. Also, we are working on exciting new projects like fracturing, deformation, softbody, cloth, aerodynamics and water simulation.
Neither Roblox Corporation nor this blog endorses or supports any company or service. Also, no guarantees or promises are made regarding the accuracy, reliability or completeness of the information contained in this blog.
This blog post was originally published on the Roblox Tech Blog.
© 2020 Roblox Corporation. All Rights Reserved.

Using Clang to Minimize Global Variable Use

July

23, 2020

by RandomTruffle
PRODUCT & TECH
Every non-trivial program has at least some amount of global state, but too much can be a bad thing. In C++ (which constitutes close to 100% of Roblox’s engine code) this global state is initialized before main() and destroyed after returning from main(), and this happens in a mostly non-deterministic order. In addition to leading to confusing startup and shutdown semantics that are difficult to reason about (or change), it can also lead to severe instability.
Roblox code also creates a lot of long-running detached threads (threads which are never joined and just run until they decide to stop, which might be never). These two things together have a very serious negative interaction on shutdown, because long-running threads continue accessing the global state that is being destroyed. This can lead to elevated crash rates, test suite flakiness, and just general instability.
The first step to digging yourself out of a mess like this is to understand the extent of the problem, so in this post I’m going to talk about one technique you can use to gain visibility into your global startup flow. I’m also going to discuss how we are using this to improve stability across the entire Roblox game engine platform by decreasing our use of global variables.

Introducing -finstrument-functions

Nothing excites me more than learning about a new obscure compiler option that I’ve never had a use for before, so I was pretty happy when a colleague pointed me to this option in the Clang Command Line Reference. I’d never used it before, but it sounded very cool. The idea being that if we could get the compiler to tell us every time it entered and exited a function, we could filter this information through a symbolizer of some kind and generate a report of functions that a) occur before main(), and b) are the very first function in the call-stack (indicating it’s a global).
Unfortunately, the documentation basically just tells you that the option exists with no mention of how to use it or if it even actually does what it sounds like it does. There’s also two different options that sound similar to each other (-finstrument-functions and -finstrument-functions-after-inlining), and I still wasn’t entirely sure what the difference was. So I decided to throw up a quick sample on godbolt to see what happened, which you can see here. Note there are two assembly outputs for the same source listing. One uses the first option and the other uses the second option, and we can compare the assembly output to understand the differences. We can gather a few takeaways from this sample:
  1. The compiler is injecting calls to __cyg_profile_func_enter and __cyg_profile_func_exit inside of every function, inline or not.
  2. The only difference between the two options occurs at the call-site of an inline function.
  3. With -finstrument-functions, the instrumentation for the inlined function is inserted at the call-site, whereas with -finstrument-functions-after-inlining we only have instrumentation for the outer function. This means that when using-finstrument-functions-after-inlining you won’t be able to determine which functions are inlined and where.
Of course, this sounds exactly like what the documentation said it did, but sometimes you just need to look under the hood to convince yourself.
To put all of this another way, if we want to know about calls to inline functions in this trace we need to use -finstrument-functions because otherwise their instrumentation is silently removed by the compiler. Sadly, I was never able to get -finstrument-functions to work on a real example. I would always end up with linker errors deep in the Standard C++ Library which I was unable to figure out. My best guess is that inlining is often a heuristic, and this can somehow lead to subtle ODR (one-definition rule) violations when the optimizer makes different inlining decisions from different translation units. Luckily global constructors (which is what we care about) cannot possibly be inlined anyway, so this wasn’t a problem.
I suppose I should also mention that I still got tons of linker errors with -finstrument-functions-after-inlining as well, but I did figure those out. As best as I can tell, this option seems to imply –whole-archive linker semantics. Discussion of –whole-archive is outside the scope of this blog post, but suffice it to say that I fixed it by using linker groups (e.g. -Wl,–start-group and -Wl,–end-group) on the compiler command line. I was a bit surprised that we didn’t get these same linker errors without this option and still don’t totally understand why. If you happen to know why this option would change linker semantics, please let me know in the comments!

Implementing the Callback Hooks

If you’re astute, you may be wondering what in the world __cyg_profile_func_enter and __cyg_profile_func_exit are and why the program is even successfully linking in the first without giving undefined symbol reference errors, since the compiler is apparently trying to call some function we’ve never defined. Luckily, there are some options that allow us to see inside the linker’s algorithm so we can find out where it’s getting this symbol from to begin with. Specifically, -y should tell us how the linker is resolving . We’ll try it with a dummy program first and a symbol that we’ve defined ourselves, then we’ll try it with __cyg_profile_func_enter .
[email protected]:~/src/sandbox$ cat instr.cpp int main() {} [email protected]:~/src/sandbox$ clang++-9 -fuse-ld=lld -Wl,-y -Wl,main instr.cpp /usbin/../lib/gcc/x86_64-linux-gnu/crt1.o: reference to main /tmp/instr-5b6c60.o: definition of main
No surprises here. The C Runtime Library references main(), and our object file defines it. Now let’s see what happens with __cyg_profile_func_enter and -finstrument-functions-after-inlining.
[email protected]:~/src/sandbox$ clang++-9 -fuse-ld=lld -finstrument-functions-after-inlining -Wl,-y -Wl,__cyg_profile_func_enter instr.cpp /tmp/instr-8157b3.o: reference to __cyg_profile_func_enter /lib/x86_64-linux-gnu/libc.so.6: shared definition of __cyg_profile_func_enter
Now, we see that libc provides the definition, and our object file references it. Linking works a bit differently on Unix-y platforms than it does on Windows, but basically this means that if we define this function ourselves in our cpp file, the linker will just automatically prefer it over the shared library version. Working godbolt link without runtime output is here. So now you can kind of see where this is going, however there are still a couple of problems left to solve.
  1. We don’t want to do this for a full run of the program. We want to stop as soon as we reach main.
  2. We need a way to symbolize this trace.
The first problem is easy to solve. All we need to do is compare the address of the function being called to the address of main, and set a flag indicating we should stop tracing henceforth. (Note that taking the address of main is undefined behavior[1], but for our purposes it gets the job done, and we aren’t shipping this code, so ¯\_(ツ)_/¯). The second problem probably deserves a little more discussion though.

Symbolizing the Traces

In order to symbolize these traces, we need two things. First, we need to store the trace somewhere on persistent storage. We can’t expect to symbolize in real time with any kind of reasonable performance. You can write some C code to save the trace to some magic filename, or you can do what I did and just write it to stderr (this way you can pipe stderr to some file when you run it).
Second, and perhaps more importantly, for every address we need to write out the full path to the module the address belongs to. Your program loads many shared libraries, and in order to translate an address into a symbol, we have to know which shared library or executable the address actually belongs to. In addition, we have to be careful to write out the address of the symbol in the file on disk. When your program is running, the operating system could have loaded it anywhere in memory. And if we’re going to symbolize it after the fact we need to make sure we can still reference it after the information about where it was loaded in memory is lost. The linux function dladdr() gives us both pieces of information we need. A working godbolt sample with the exact implementation of our instrumentation hooks as they appear in our codebase can be found here.

Putting it All Together

Now that we have a file in this format saved on disk, all we need to do is symbolize the addresses. addr2line is one option, but I went with llvm-symbolizer as I find it more robust. I wrote a Python script to parse the file and symbolize each address, then print it in the same “visual” hierarchical format that the original output file is in. There are various options for filtering the resulting symbol list so that you can clean up the output to include only things that are interesting for your case. For example, I filtered out any globals that have boost:: in their name, because I can’t exactly go rewrite boost to not use global variables.
The script isn’t as simple as you would think, because simply crawling each line and symbolizing it would be unacceptably slow (when I tried this, it took over 2 hours before I finally killed the process). This is because the same address might appear thousands of times, and there’s no reason to run llvm-symbolizer against the same address multiple times. So there’s a lot of smarts in there to pre-process the address list and eliminate duplicates. I won’t discuss the implementation in more detail because it isn’t super interesting. But I’ll do even better and provide the source!
So after all of this, we can run any one of our internal targets to get the call tree, run it through the script, and then get output like this (actual output from a Roblox process, source file information removed):
excluded_symbols = [‘.\boost.*’]* excluded_modules = [‘/usr.\’]* /uslib/x86_64-linux-gnu/libLLVM-9.so.1: 140 unique addresses InterestingRobloxProcess: 38928 unique addresses /uslib/x86_64-linux-gnu/libstdc++.so.6: 1 unique addresses /uslib/x86_64-linux-gnu/libc++.so.1: 3 unique addresses Printing call tree with depth 2 for 29276 global variables. __cxx_global_var_init.5 (InterestingFile1.cpp:418:22) RBX::InterestingRobloxClass2::InterestingRobloxClass2() (InterestingFile2.cpp.:415:0) __cxx_global_var_init.19 (InterestingFile2.cpp:183:34) (anonymous namespace)::InterestingRobloxClass2::InterestingRobloxClass2() (InterestingFile2.cpp:171:0) __cxx_global_var_init.274 (InterestingFile3.cpp:2364:33) RBX::InterestingRobloxClass3::InterestingRobloxClass3()
So there you have it: the first half of the battle is over. I can run this script on every platform, compare results to understand what order our globals are actually initialized in in practice, then slowly migrate this code out of global initializers and into main where it can be deterministic and explicit.

Future Work

It occurred to me sometime after implementing this that we could make a general purpose profiling hook that exposed some public symbols (dllexport’ed if you speak Windows), and allowed a plugin module to hook into this dynamically. This plugin module could filter addresses using whatever arbitrary logic that it was interested in. One interesting use case I came up for this is that it could look up the debug information, check if the current address maps to the constructor of a function local static, and write out the address if so. This effectively allows us to gain a deeper understanding of the order in which our lazy statics are initialized. The possibilities are endless here.

Further Reading

If you’re interested in this kind of thing, I’ve collected a couple of my favorite references for this kind of topic.
  1. Various: The C++ Language Standard
  2. Matt Godbolt: The Bits Between the Bits: How We Get to main()
  3. Ryan O’Neill: Learning Linux Binary Analysis
  4. Linkers and Loaders: John R. Levine
  5. https://eel.is/c++draft/basic.exec#basic.start.main-3
Neither Roblox Corporation nor this blog endorses or supports any company or service. Also, no guarantees or promises are made regarding the accuracy, reliability or completeness of the information contained in this blog.
submitted by jaydenweez to u/jaydenweez [link] [comments]

CRTPi4-RCA v3.4FX - Composite TV-Out for your Pi4!

CRTPi Project Presents:

CRTPi4-RCA v3.4FX

A CRTPi image for running 240p via 3.5mm Composite on the Raspberry Pi4
Other Releases:
Changelog: v3.4FX for RCA (PAL Only) 5/18/2020
Changelog: v3.4FX for RCA (NTSC&&PAL) 5/17/2020
Changelog: v3.0F for RCA 5/11/2020
Changelog: v2.0F for RCA 4/1/2020
Changelog: v1.1FX 12/20/2019
Changelog: v1.0F Hotfix 10/31/2019
Changelog: v1.0F 10/29/2019
Changelog: v0.4 10/22/2019
Changelog: v0.3 10/2/2019
How does this even work!?
The amazing u/b0xspread has found a way to enforce modeswitching by watching the logs and processes, and continuing to enforce our desired mode long after the system wants to revert back. We're both expanding this scripting further to hopefully solve the same issues on the RGB and VGA forks -- but progress is slow due to the complex and varied nature of available resolution modes on those builds. But for now, let's just call this "black magic."
What Does That Look Like?
Here are some examples of games being played in beautiful 240p on CRT sets using the RCA Image!.
What is Different?
  • Retropie 4.6 (build 72132587 commit 05/07/20 Buster 10)
  • Retroarch 1.8.5
  • Full Apt-Upgrade for newest firmware and app dependancies (Recommended to repeat this function on your own Pi4)
  • 4GB (3872256 KB Uncompressed Image) (Compressed via WinRAR to 1043540KB)
  • SSH, Samba Share, and USB Rom Service enabled by default
  • Heavily modified Sakitoshi CRT-TVout script for switching between 480i and 240p
  • Further modified Sakitoshi script by u/b0xspread to allow video resolution switching on Pi4 Architecture
  • Optional overclock values in /boot/config.txt for Pi4 (disabled by default) [RECOMMENDED!]
  • NTSC @ 60hz 720/640x480 480i Resolution for Emulationstation & Kodi
  • PAL @ 50hz 720/640x576 576i Resolution for Emulationstation & Kodi
  • NTSC @ 60hz 640x480 Progressive (240 lines) for Retroarch
  • PAL @ 50hz 640x576 Progressive (288 lines) for Retroarch
  • Per-system custom refresh rates for Retroarch
  • Single-frame Run Ahead enabled for many 8-bit & 16-bit consoles and handhelds for Retroarch
  • Optional 480i mode for PSX and Arcade games
  • Preloaded with free 240p test suites for multiple consoles
  • Preloaded with additional stable (opt) Retroarch emulators
  • Preloaded with DOSBox and ScummVM
  • Preloaded with various 4:3 splashscreens from the RPiF download
  • Preloaded with 4:3 Ruckage's runcommand launching screens for supported systems
  • Custom 4:3 Arcade DOJ "Winners DO Use Drugs" splash screen.
  • Preloaded with MUNT Roland MT-32 MIDI emulation for DOSBox/ScummVM
  • Retroarch FCEUmm (NES) Emulator preconfigured for 4:3 horiz/vert overscan crop enabled w/ composite-direct-fbx pallete
  • Retroarch Picodrive (SMS/32X) Emulator preconfigured for 4:3 with 1X Sega Mastersystem & 1X Sega 32X resolution
  • Retroarch Gambatte (GB/GBC) emulator preset to Super Game Boy (Special 1 Pallete) mode with 2x integer scale SGB Overlay
  • Retroarch mGBA (GBA) emulator preset to Game Boy Player mode with 2x integer scale GBP Overlay
  • Other Retroarch handheld emulators preset for optimized wide display with overlay
  • Emulationstation preloaded with Ruckage's RetroPie menu icons
  • Emulationstation preloaded with Ruckage's snes-mini theme configured for 4:3
  • Custom ScummVM system artwork for snes-mini theme
  • Emulationstation systems ordered chronologically instead of alphabetically
  • Emulationstation preconfigured with best settings for analog A/V including best settings for video preview screensavers
What is Run-Ahead?
The Run Ahead feature calculates the frames as fast as possible in the background to "rollback" the action as close as possible to the input command requested.
I've enabled run-ahead on most of the 8 & 16-bit consoles and handhelds. A single frame (and using the second instance) is saved here, which dramatically improves input lag without affecting performance on a Pi3B+. More frames would require more hardware power, and may be achievable via overclocking.
lr-snes9x2010 consistent 60.0-60.2 FPS @ 60.098801hz lr-fceumm consistent 60.0-60.2 FPS @ 60.098801hz lr-beetle-pce-fast consistent 60.1-60.2 @ 60.000000hz lr-genesis-gx-plus consistent 59.9-60.2 FPS @ 59.922741hz (both genesis and sega cd) lr-picodrive consistent 59.9-60.2 FPS @ 59.922741hz (master system, game gear, and 32X) lr-gambatte consistent 60.0-60.2 FPS @ 60.098801hz (SGB2 framerate) lr-mgba consistent 59.8-60.4 FPS @ 60.002220hz (Gamecube framerate) 
Runahead Tested ~60FPS Stable:
  • Game Gear
  • Game Boy
  • Game Boy Color
  • Game Boy Advance
  • Master System
  • Megadrive
  • NES
  • PC Engine
  • PCE-CD
  • Sega 32X
  • Sega CD
  • SNES
Runahead Tested < 50FPS Unstable:
  • FB Neo
  • FB Alpha
  • Mame
  • N64
  • PlayStation
  • PSP
Runahead Untested:
  • Atari 800
  • Atari 2600
  • Atari 5200
  • Atari 7800
  • Atari Lynx
  • Coleco
  • Intellivision
  • MSX
What Does This NOT Have?
This doesn't have any ROMs (other than freeware test suites), BIOS files, music, screenshots, metadata, or videos concerning copywritten games. Other than the configurations and overlays, it has nothing that can't be downloaded through the repository or freeware.
Where Can I Get It?
You can download a premade image from Drive:
NOTE: Please expand your file system via Raspi-Config after your first boot, and reboot!
CRTPi4-RCA NTSC v3.4F: For Raspberry Pi4 Composite-Out @ 60hz
MD5: 7df8453c2e8029b06def7864351ec768 
CRTPi4-RCA PAL-D v3.4F: For Raspberry Pi4 Composite-Out @ 50hz
MD5: ab2bd6ab228bd6f58a22de15044fb46a 
How do I install the Arcade Configuration Pack?
These are the resolution-correct preset arcade configs for MAME/FBA including vertical games. There is roughly 38K files in there, spread out across several systems (arcade, fba, mame-libretro, and neogeo). Having these pre-installed would not allow either image to fit on the SD card used, and may not be needed for everyone. It's a fairly simple process that won't take more than a few minutes of your time.
  • Drop to shell or connect via SSH, and navigate to root (cd /)
  • Download the CRTPi-RCA_ArcadePack.zip with the command:
    sudo wget https://github.com/crtpi/CRTPi-Project/raw/masteCRTPi-RCA_ArcadePack.zip
  • Unzip and overwrite files with the command:
    sudo unzip -o -q CRTPi-RCA_ArcadePack.zip
  • Remove the zip with the command
    sudo rm CRTPi-RCA_ArcadePack.zip
  • Restore read/write access to the files you have overwritten with the command:
    sudo chmod a+rw -R /opt/retropie/configs/
How can I take full advantage of the 480i/240p Switching?
To force 480i for a system or game, you can create a '480i.txt' file inside the configuration folder of the system with a list of the file names (case insensitive, extension optional but recommended) you want to force.
If you wish to force 480i for a whole system, you can write "all" inside the '480i.txt' file.
Alternatively you can create a "240p.txt" file to force 480i to all games except for the ones inside the list.
You can read more about the script functionality here.
Example:
/opt/retropie/configs/psx/480i.txt containing "Bloody Roar 2.PBP" to force 480i for the file "Bloody Roar 2.PBP" /opt/retropie/configs/psx/480i.txt containing "all" to force 480i for all the PlayStation games. /opt/retropie/configs/ports/kodi/480i.txt containing "all" to force 480i on Kodi. 
I have X Issue! Help?
Why isn't there a Pi4 PAL version?
Try as I might, I have been unable to get a PAL signal out of the SDTV port on a Pi4. My BVM displays PAL-S and PAL-D fine, but neither will get anything but static. I don't even get a rolling B&W image, just horrible static. If you figure out a way, let me know!
I only have like 500mb of free space on my XXgb SD card!
You need to expand your file system via Raspi-Config. Follow these steps.
I want to switch back to lr-mupen64plus!
  • When launching an n64 game, mash buttons on the controller until the runcommand window comes up.
  • Select on "1 Set default emulator for n64" and choose "lr-mupen64plus"
  • Then "Q Exit (without launching)"
  • Launch the game again -- it will launch in the chosen emulator at the proper resolution
What A/V cable should I use for 3.5mm Composite?
I recommend the Zune A/V cable or XBOX 360E cable, you can find them on eBay and Amazon.
Samba Share won't work after I set up Wi-Fi!
Samba share service starts on boot, pending that a network is available. Configure your Wi-Fi then reboot first, and if that doesn't fix it then go into Retropie Setup > Configuration/Tools > Samba > Install Samba. Once it's complete, reboot and it should be golden.
USB-Romservice and/or Retropie-Mount don't work!
Follow this guide, but follow these steps before plugging in your thumb drive:
  • Go to Retropie-Setup
  • Update retropie install script
  • Go to Manage Packages -> Optional Packages
  • Scroll all the way down to usbromservice
  • Uninstall usbromservice
  • Install it again from Binary
  • Once finished, choose Configuration, then Enable USB Romservice
  • Reboot, and wait for it to fully boot in to ES
  • Plug in USB stick (has to be FAT32) and WAIT A LONG TIME (if your stick has a light, wait for it to stop flashing)
submitted by ErantyInt to u/ErantyInt [link] [comments]

CRTPi4-RCA v3.4FX - Composite TV-Out for your Pi4!

CRTPi Project Presents:

CRTPi4-RCA v3.4FX

A CRTPi image for running 240p via 3.5mm Composite on the Raspberry Pi4
Other Releases:
Changelog: v3.4FX for RCA (PAL Only) 5/18/2020
Changelog: v3.4FX for RCA (NTSC&&PAL) 5/17/2020
Changelog: v3.0F for RCA 5/11/2020
Changelog: v2.0F for RCA 4/1/2020
Changelog: v1.1FX 12/20/2019
Changelog: v1.0F Hotfix 10/31/2019
Changelog: v1.0F 10/29/2019
Changelog: v0.4 10/22/2019
Changelog: v0.3 10/2/2019
How does this even work!?
The amazing u/b0xspread has found a way to enforce modeswitching by watching the logs and processes, and continuing to enforce our desired mode long after the system wants to revert back. We're both expanding this scripting further to hopefully solve the same issues on the RGB and VGA forks -- but progress is slow due to the complex and varied nature of available resolution modes on those builds. But for now, let's just call this "black magic."
What Does That Look Like?
Here are some examples of games being played in beautiful 240p on CRT sets using the RCA Image!.
What is Different?
  • Retropie 4.6 (build 72132587 commit 05/07/20 Buster 10)
  • Retroarch 1.8.5
  • Full Apt-Upgrade for newest firmware and app dependancies (Recommended to repeat this function on your own Pi4)
  • 4GB (3872256 KB Uncompressed Image) (Compressed via WinRAR to 1043540KB)
  • SSH, Samba Share, and USB Rom Service enabled by default
  • Heavily modified Sakitoshi CRT-TVout script for switching between 480i and 240p
  • Further modified Sakitoshi script by u/b0xspread to allow video resolution switching on Pi4 Architecture
  • Optional overclock values in /boot/config.txt for Pi4 (disabled by default) [RECOMMENDED!]
  • NTSC @ 60hz 720/640x480 480i Resolution for Emulationstation & Kodi
  • PAL @ 50hz 720/640x576 576i Resolution for Emulationstation & Kodi
  • NTSC @ 60hz 640x480 Progressive (240 lines) for Retroarch
  • PAL @ 50hz 640x576 Progressive (288 lines) for Retroarch
  • Per-system custom refresh rates for Retroarch
  • Single-frame Run Ahead enabled for many 8-bit & 16-bit consoles and handhelds for Retroarch
  • Optional 480i mode for PSX and Arcade games
  • Preloaded with free 240p test suites for multiple consoles
  • Preloaded with additional stable (opt) Retroarch emulators
  • Preloaded with DOSBox and ScummVM
  • Preloaded with various 4:3 splashscreens from the RPiF download
  • Preloaded with 4:3 Ruckage's runcommand launching screens for supported systems
  • Custom 4:3 Arcade DOJ "Winners DO Use Drugs" splash screen.
  • Preloaded with MUNT Roland MT-32 MIDI emulation for DOSBox/ScummVM
  • Retroarch FCEUmm (NES) Emulator preconfigured for 4:3 horiz/vert overscan crop enabled w/ composite-direct-fbx pallete
  • Retroarch Picodrive (SMS/32X) Emulator preconfigured for 4:3 with 1X Sega Mastersystem & 1X Sega 32X resolution
  • Retroarch Gambatte (GB/GBC) emulator preset to Super Game Boy (Special 1 Pallete) mode with 2x integer scale SGB Overlay
  • Retroarch mGBA (GBA) emulator preset to Game Boy Player mode with 2x integer scale GBP Overlay
  • Other Retroarch handheld emulators preset for optimized wide display with overlay
  • Emulationstation preloaded with Ruckage's RetroPie menu icons
  • Emulationstation preloaded with Ruckage's snes-mini theme configured for 4:3
  • Custom ScummVM system artwork for snes-mini theme
  • Emulationstation systems ordered chronologically instead of alphabetically
  • Emulationstation preconfigured with best settings for analog A/V including best settings for video preview screensavers
What is Run-Ahead?
The Run Ahead feature calculates the frames as fast as possible in the background to "rollback" the action as close as possible to the input command requested.
I've enabled run-ahead on most of the 8 & 16-bit consoles and handhelds. A single frame (and using the second instance) is saved here, which dramatically improves input lag without affecting performance on a Pi3B+. More frames would require more hardware power, and may be achievable via overclocking.
lr-snes9x2010 consistent 60.0-60.2 FPS @ 60.098801hz lr-fceumm consistent 60.0-60.2 FPS @ 60.098801hz lr-beetle-pce-fast consistent 60.1-60.2 @ 60.000000hz lr-genesis-gx-plus consistent 59.9-60.2 FPS @ 59.922741hz (both genesis and sega cd) lr-picodrive consistent 59.9-60.2 FPS @ 59.922741hz (master system, game gear, and 32X) lr-gambatte consistent 60.0-60.2 FPS @ 60.098801hz (SGB2 framerate) lr-mgba consistent 59.8-60.4 FPS @ 60.002220hz (Gamecube framerate) 
Runahead Tested ~60FPS Stable:
  • Game Gear
  • Game Boy
  • Game Boy Color
  • Game Boy Advance
  • Master System
  • Megadrive
  • NES
  • PC Engine
  • PCE-CD
  • Sega 32X
  • Sega CD
  • SNES
Runahead Tested < 50FPS Unstable:
  • FB Neo
  • FB Alpha
  • Mame
  • N64
  • PlayStation
  • PSP
Runahead Untested:
  • Atari 800
  • Atari 2600
  • Atari 5200
  • Atari 7800
  • Atari Lynx
  • Coleco
  • Intellivision
  • MSX
What Does This NOT Have?
This doesn't have any ROMs (other than freeware test suites), BIOS files, music, screenshots, metadata, or videos concerning copywritten games. Other than the configurations and overlays, it has nothing that can't be downloaded through the repository or freeware.
Where Can I Get It?
You can download a premade image from Drive:
NOTE: Please expand your file system via Raspi-Config after your first boot, and reboot!
CRTPi4-RCA NTSC v3.4F: For Raspberry Pi4 Composite-Out @ 60hz
MD5: 7df8453c2e8029b06def7864351ec768 
CRTPi4-RCA PAL-D v3.4F: For Raspberry Pi4 Composite-Out @ 50hz
MD5: ab2bd6ab228bd6f58a22de15044fb46a 
How do I install the Arcade Configuration Pack?
These are the resolution-correct preset arcade configs for MAME/FBA including vertical games. There is roughly 38K files in there, spread out across several systems (arcade, fba, mame-libretro, and neogeo). Having these pre-installed would not allow either image to fit on the SD card used, and may not be needed for everyone. It's a fairly simple process that won't take more than a few minutes of your time.
  • Drop to shell or connect via SSH, and navigate to root (cd /)
  • Download the CRTPi-RCA_ArcadePack.zip with the command:
    sudo wget https://github.com/crtpi/CRTPi-Project/raw/masteCRTPi-RCA_ArcadePack.zip
  • Unzip and overwrite files with the command:
    sudo unzip -o -q CRTPi-RCA_ArcadePack.zip
  • Remove the zip with the command
    sudo rm CRTPi-RCA_ArcadePack.zip
  • Restore read/write access to the files you have overwritten with the command:
    sudo chmod a+rw -R /opt/retropie/configs/
How can I take full advantage of the 480i/240p Switching?
To force 480i for a system or game, you can create a '480i.txt' file inside the configuration folder of the system with a list of the file names (case insensitive, extension optional but recommended) you want to force.
If you wish to force 480i for a whole system, you can write "all" inside the '480i.txt' file.
Alternatively you can create a "240p.txt" file to force 480i to all games except for the ones inside the list.
You can read more about the script functionality here.
Example:
/opt/retropie/configs/psx/480i.txt containing "Bloody Roar 2.PBP" to force 480i for the file "Bloody Roar 2.PBP" /opt/retropie/configs/psx/480i.txt containing "all" to force 480i for all the PlayStation games. /opt/retropie/configs/ports/kodi/480i.txt containing "all" to force 480i on Kodi. 
I have X Issue! Help?
Why isn't there a Pi4 PAL version?
Try as I might, I have been unable to get a PAL signal out of the SDTV port on a Pi4. My BVM displays PAL-S and PAL-D fine, but neither will get anything but static. I don't even get a rolling B&W image, just horrible static. If you figure out a way, let me know!
I only have like 500mb of free space on my XXgb SD card!
You need to expand your file system via Raspi-Config. Follow these steps.
I want to switch back to lr-mupen64plus!
  • When launching an n64 game, mash buttons on the controller until the runcommand window comes up.
  • Select on "1 Set default emulator for n64" and choose "lr-mupen64plus"
  • Then "Q Exit (without launching)"
  • Launch the game again -- it will launch in the chosen emulator at the proper resolution
What A/V cable should I use for 3.5mm Composite?
I recommend the Zune A/V cable or XBOX 360E cable, you can find them on eBay and Amazon.
Samba Share won't work after I set up Wi-Fi!
Samba share service starts on boot, pending that a network is available. Configure your Wi-Fi then reboot first, and if that doesn't fix it then go into Retropie Setup > Configuration/Tools > Samba > Install Samba. Once it's complete, reboot and it should be golden.
USB-Romservice and/or Retropie-Mount don't work!
Follow this guide, but follow these steps before plugging in your thumb drive:
  • Go to Retropie-Setup
  • Update retropie install script
  • Go to Manage Packages -> Optional Packages
  • Scroll all the way down to usbromservice
  • Uninstall usbromservice
  • Install it again from Binary
  • Once finished, choose Configuration, then Enable USB Romservice
  • Reboot, and wait for it to fully boot in to ES
  • Plug in USB stick (has to be FAT32) and WAIT A LONG TIME (if your stick has a light, wait for it to stop flashing)
submitted by ErantyInt to crtgaming [link] [comments]

CRTPi-RCA v2.0F: Just Like you Remember, but Better!

CRTPi Project Presents:

CRTPi-RCA v2.0F

A CRTPi image for running 240p via 3.5mm Composite
Other Releases:
Changelog: v2.0F for RCA 4/1/2020
Changelog: v1.1FX 12/20/2019
Changelog: v1.0F Hotfix 10/31/2019
Changelog: v1.0F 10/29/2019
Changelog: v0.4 10/22/2019
Changelog: v0.3 10/2/2019
What Does That Look Like?
Here are some examples of games being played in beautiful 240p on CRT sets using the RCA Image!.
What is Different?
  • Retropie 4.5.18 (build d737e15a commit 03/24/20)
  • 8GB (7892992 KB) Uncompressed Image (Compressed via WinRAR to 4695319 KB)
  • SSH, Samba Share, and USB Rom Service enabled by default
  • Heavily modified Sakitoshi CRT-TVout script for switching between 480i and 240p
  • Optional overclock values in /boot/config.txt for Pi2 & Pi3B (disabled by default)
  • NTSC @ 60hz 720/640x480 480i Resolution for Emulationstation & Kodi
  • NTSC @ 60hz 640x480 Progressive (240 lines) for Retroarch
  • Per-system custom refresh rates for Retroarch
  • Single-frame Run Ahead enabled for many 8-bit & 16-bit consoles and handhelds for Retroarch
  • Optional 480i mode for PSX and Arcade games
  • Preloaded with free 240p test suites for multiple consoles
  • Preloaded with additional stable (opt) Retroarch emulators
  • Preloaded with DOSBox and ScummVM
  • Preloaded with Kodi 18.2 w/ Convergence Theme @ 480i
  • Preloaded with various 4:3 splashscreens from the RPiF download
  • Preloaded with 4:3 Ruckage's runcommand launching screens for supported systems
  • Custom 4:3 Arcade DOJ "Winners DO Use Drugs" splash screen.
  • Preloaded with MUNT Roland MT-32 MIDI emulation for DOSBox/ScummVM
  • Retroarch FCEUmm (NES) Emulator preconfigured for 4:3 horiz/vert overscan crop enabled w/ composite-direct-fbx pallete
  • Retroarch Picodrive (SMS/32X) Emulator preconfigured for 4:3 with 2.5X Sega Mastersystem & 1X Sega 32X resolution
  • Retroarch Gambatte (GB/GBC) emulator preset to Super Game Boy (Special 1 Pallete) mode with 2x integer scale SGB Overlay
  • Retroarch mGBA (GBA) emulator preset to Game Boy Player mode with 2x integer scale GBP Overlay
  • Other Retroarch handheld emulators preset for optimized wide display with overlay
  • Retroarch PCSX-ReARMed (PSX) emulator preconfigured with vibration disabled + frame clock lowered to 55 + enabled interlacing modes, enhanced resolution, speedhack, and bilinear filtering
  • Emulationstation preloaded with KALEL1981's Super-Retroboy theme (default)
  • Emulationstation preloaded with Ruckage's RetroPie menu icons
  • Emulationstation preloaded with Ruckage's snes-mini and nes-mini themes configured for 4:3
  • Emulationstation preloaded with PietDAmore's 240p Honey and Bubblegum themes
  • Custom ScummVM system artwork for snes-mini theme
  • Emulationstation systems ordered chronologically instead of alphabetically
  • Emulationstation preconfigured with best settings for analog A/V including best settings for video preview screensavers
What is Run-Ahead?
The Run Ahead feature calculates the frames as fast as possible in the background to "rollback" the action as close as possible to the input command requested.
I've enabled run-ahead on most of the 8 & 16-bit consoles and handhelds. A single frame (and using the second instance) is saved here, which dramatically improves input lag without affecting performance on a Pi3B+. More frames would require more hardware power, and may be achievable via overclocking.
lr-snes9x2010 consistent 60.0-60.2 FPS @ 60.098801hz lr-fceumm consistent 60.0-60.2 FPS @ 60.098801hz lr-beetle-pce-fast consistent 60.1-60.2 @ 60.000000hz lr-genesis-gx-plus consistent 59.9-60.2 FPS @ 59.922741hz (both genesis and sega cd) lr-picodrive consistent 59.9-60.2 FPS @ 59.922741hz (master system, game gear, and 32X) lr-gambatte consistent 60.0-60.2 FPS @ 60.098801hz (SGB2 framerate) lr-mgba consistent 59.8-60.4 FPS @ 60.002220hz (Gamecube framerate) 
Runahead Tested ~60FPS Stable:
  • Game Gear
  • Game Boy
  • Game Boy Color
  • Game Boy Advance
  • Master System
  • Megadrive
  • NES
  • PC Engine
  • PCE-CD
  • Sega 32X
  • Sega CD
  • SNES
Runahead Tested < 50FPS Unstable:
  • FB Neo
  • FB Alpha
  • Mame
  • N64
  • PlayStation
  • PSP
Runahead Untested:
  • Atari 800
  • Atari 2600
  • Atari 5200
  • Atari 7800
  • Atari Lynx
  • Coleco
  • Intellivision
  • MSX
What Does This NOT Have?
This doesn't have any ROMs (other than freeware test suites), BIOS files, music, screenshots, metadata, or videos concerning copywritten games. Other than the configurations and overlays, it has nothing that can't be downloaded through the repository or freeware.
Where Can I Get It?
You can download a premade image from Drive:
NOTE: Please expand your file system via Raspi-Config after your first boot, and reboot!
CRTPi-RCA v2.0F: For Raspberry Pi3B Composite-Out
MD5: 55514b0650f3fc7a5213fffe986e46ec 
How can I take full advantage of the 480i/240p Switching?
To force 480i for a system or game, you can create a '480i.txt' file inside the configuration folder of the system with a list of the file names (case insensitive, extension optional but recommended) you want to force.
If you wish to force 480i for a whole system, you can write "all" inside the '480i.txt' file.
Alternatively you can create a "240p.txt" file to force 480i to all games except for the ones inside the list.
You can read more about the script functionality here.
Example:
/opt/retropie/configs/psx/480i.txt containing "Bloody Roar 2.PBP" to force 480i for the file "Bloody Roar 2.PBP" /opt/retropie/configs/psx/480i.txt containing "all" to force 480i for all the PlayStation games. /opt/retropie/configs/ports/kodi/480i.txt containing "all" to force 480i on Kodi. 
I have X Issue! Help?
I only have like 500mb of free space on my XXgb SD card!
You need to expand your file system via Raspi-Config. Follow these steps.
I want to switch back to lr-mupen64plus!
  • When launching an n64 game, mash buttons on the controller until the runcommand window comes up.
  • Select on "1 Set default emulator for n64" and choose "lr-mupen64plus"
  • Then "Q Exit (without launching)"
  • Launch the game again -- it will launch in the chosen emulator at the proper resolution
What A/V cable should I use for 3.5mm Composite?
I recommend the Zune A/V cable or XBOX 360E cable, you can find them on eBay and Amazon.
Samba Share won't work after I set up Wi-Fi!
Samba share service starts on boot, pending that a network is available. Configure your Wi-Fi then reboot first, and if that doesn't fix it then go into Retropie Setup > Configuration/Tools > Samba > Install Samba. Once it's complete, reboot and it should be golden.
USB-Romservice and/or Retropie-Mount don't work!
Follow this guide, but follow these steps before plugging in your thumb drive:
  • Go to Retropie-Setup
  • Update retropie install script
  • Go to Manage Packages -> Optional Packages
  • Scroll all the way down to usbromservice
  • Uninstall usbromservice
  • Install it again from Binary
  • Once finished, choose Configuration, then Enable USB Romservice
  • Reboot, and wait for it to fully boot in to ES
  • Plug in USB stick (has to be FAT32) and WAIT A LONG TIME (if your stick has a light, wait for it to stop flashing)
submitted by ErantyInt to u/ErantyInt [link] [comments]

CRTPi-RGB v3.0 - Buster Busts Loose!

CRTPi Project Presents:

CRTPi-RGB v3.0

A CRTPi image for running 240p via GPIO RGB DAC Hats
Other Releases:
Changelog: v3.0 for 888 & 666 05/12/2020 - Emergency Fixes
Changelog: v3.0 for 888 & 666 05/08/2020
Changelog: v2.0 for 888 & 666 03/25/2020
Changelog: v1.1X for 666 12/20/2019
Changelog: v1.1X for 888 & 666 12/19/2019
Changelog: v1.0 for 888 & 666 11/7/2019
Changelog: v1.0 for 666 10/24/2019
Changelog: v1.0 for 888 & 666 10/22/2019
Changelog: v0.3 for 888 & 666 10/2/2019
Changelog: v0.2 for 888 09/27/2019
Changelog: v0.1 for 888 09/20/2019
Required Hardware:
What is a RetroTINK? Or a VGA666?
RetroTINK is a GPIO hat for the Raspberry Pi3/3B+ that converts digital video signal back into 24-bit analog. It provides output over RCA, S-Video, Component, and VGA -- as well as supporting CSYNC, super-resolutions, and custom resolution timings.
VGA666 is a GPIO hat for the Raspberry Pi that converts digital video signal back into an 18-bit analog out via VGA. It also allows for super-resolutions and custom resolution timings.
Pi2SCART is a GPIO hat for the Raspberry Pi that converts digital video signal back into an 18-bit analog RGB out via SCART. It also allows for super-resolutions and custom resolution timings.
What Does That Even Mean?
It makes your Pi capable of outputting a true 240p analog signal for CRT televisions and monitors, and is capable of 5x (1600x240) and higher super resolutions.
What Does That Look Like?
I don't have the greatest pics saved for comparison, but here's some examples of the 888.
What is Different? (888 & 666)
  • Retropie 4.6 (build 7c5e31bb commit 05/07/20 Buster 10)
  • Retroarch 1.8.5
  • 4GB (3872256 KB) Uncompressed Image (Compressed via WinRAR to 982256 KB)
  • SSH, Samba Share, and USB Rom Service enabled by default
  • Custom /boot/config.txt settings for DPI output and custom HDMI timings
  • Optional overclock values in /boot/config.txt for Pi2 & Pi3B (disabled by default)
  • Modified Michael Vencio's Runcommand “On Start” and “On End” scripts to automatically change the resolution system-by-system and game-by-game
  • Modified Runcommand "On Start" script to allow creation of game-specific arcade configs for arcade/fba/mame-libretro/neogeo
  • NTSC @ 60hz 320x240 resolution for Emulationstation and DOSBox/ScummVM/Kodi
  • NTSC @ 60hz 2048x240, 1920x240, and 1600x240 resolution for Retroarch
  • Per-system custom refresh rates for Retroarch
  • Single-frame Run Ahead enabled for many 8-bit & 16-bit consoles and handhelds for Retroarch
  • Preloaded with free 240p test suites for multiple consoles with art by chipsnblip
  • Preloaded with additional stable (opt) Retroarch emulators
  • Preloaded with DOSBox and ScummVM
  • Preloaded with various 4:3 splashscreens from the RPiF download
  • Custom 4:3 Arcade DOJ "Winners DO Use Drugs" splash screen.
  • Preloaded with MUNT Roland MT-32 MIDI emulation for DOSBox/ScummVM
  • Preloaded with custom runcommand launching screens for supported systems
  • Preconfigured MOST Retroarch emulators for proper Integer Scale SuperRes
  • Retroarch FCEUmm (NES) Emulator preconfigured for 8:7 vert overscan crop enabled w/ composite-direct-fbx palette
  • Retroarch Gambatte (GB/GBC) emulator preset to Super Game Boy (SGB2 auto coloration) mode with Integer Scale Overlay
  • Retroarch mGBA (GBA) emulator preset to Game Boy Player mode with Integer Scale Overlay
  • Emulationstation preloaded with Ruckage's RetroPie menu icons
  • Emulationstation preloaded with Ruckage's snes-mini (default) and nes-mini themes configured for 4:3
  • Custom ScummVM system artwork for snes-mini theme
  • Emulationstation systems ordered chronologically instead of alphabetically
  • Emulationstation preconfigured with best settings for analog A/V including best settings for video preview screensavers
  • Custom Retropie menu scripts for switching between Retrotink and VGA666-based hardware ___
What is Run-Ahead?
The Run Ahead feature calculates the frames as fast as possible in the background to "rollback" the action as close as possible to the input command requested.
I've enabled run-ahead on most of the 8 & 16-bit consoles and handhelds. A single frame (and using the second instance) is saved here, which dramatically improves input lag without affecting performance on a Pi3B. More frames would require more hardware power, and may be achievable via overclocking.
lr-snes9x2010 consistent 60.0-60.2 FPS @ 60.098801hz lr-fceumm consistent 60.0-60.2 FPS @ 60.098801hz lr-beetle-pce-fast consistent 60.1-60.2 @ 60.000000hz lr-genesis-gx-plus consistent 59.9-60.2 FPS @ 59.922741hz (both genesis and sega cd) lr-picodrive consistent 59.9-60.2 FPS @ 59.922741hz (master system, game gear, and 32X) lr-gambatte consistent 60.0-60.2 FPS @ 60.098801hz (SGB2 framerate) lr-mgba consistent 59.8-60.4 FPS @ 60.002220hz (Gamecube framerate) 
To disable runahead for a game (or emulator):
Quick Menu > Latency > Run-Ahead to Reduce Latency > OFF 
What about your new Per-Game Configs and Snap-Shader?
The RGB and VGA forks are now utilizing Snap-Shader, plus a newly-enhanced runcommand-onstart script, with provision for user-specified per-game configuration!
Here's the new script:
https://github.com/crtpi/CRTPi-Project/blob/masteRGB-to_opt/retropie/configs/all/runcommand-onstart.sh 
Here's information about Snap-Shader:
https://github.com/ektgit/snap-shader-240p 
And here's a quick rundown on how it works:
Not only does the new script carry forward the per-core scripting for 2048x / 1920x / and 1600x resolutions -- but adds per-game scripting by adding a text file to the system config and naming the rom(s) within the file. This allows you to force 2048x on a system that defaults to 1920x. This is especially useful for PSX, FDS, PCE/PCE-CD, and MAME for the few games that are 256 or 512 wide. Below are some example config files:
/opt/retropie/conifgs/psx/256.txt
Brave Prove Castlevania - Symphony of the Night Crash Bandicoot Final Fantasy Origins Final Fantasy Tactics 
/opt/retropie/conifgs/megadrive/256.txt
Bubble And Squeak Bubsy in - Claws Encounters of the Furred Kind Bugs Bunny in Double Trouble Caesars Palace Captain America and the Avengers 
/opt/retropie/conifgs/fds/320.txt
Akumajou Dracula Donkey Kong Otocky Super Mario Brothers 2 
You get the jist. It doesn't need an extension, not case sensitive, but should match the ROM name (including punctuation) exactly. This forces them to launch in 2048x240p instead of the default 1920x240p. This gives the end user full control on a game-per-game basis over the horizontal integer. You'll still need to write a retroarch game config to override the defaults there, but this at least gets you the right field. For games with odd/shifting vertical resolutions (like Chrono Cross, Battle Arena Toshinden, Castlevania SotN, etc.), a single pass of snap-shader is applied (snap-basic, nearest neighbor filtering, and "don't care" scale).
What Does This NOT Have?
This doesn't have any ROMs (other than freeware test suites), BIOS files, music, screenshots, metadata, or videos concerning copy-written games. Other than the configurations and overlays, it has nothing that can't be downloaded through the repository or freeware.
Where Can I Get It?
You can download a premade image from Google Drive:
NOTE: Please expand your file system via Raspi-Config after your first boot, and reboot!
CRTPi-RGB v3.0: For Pi3B/3B+ with Retrotink, Pi2SCART, RGB-Pi, or VGA666
MD5: d9d28f5ae8fe5cc829348be4b5a103fc 
Install Instructions:
For Retrotink Ultimate:
  • Download image and unRAR it.
  • Flash to your SD card with Win32DiskImager or Etcher.
  • Boot as normal, run Raspi-Config, and choose Expand Filesystem from Advanced Options.
  • Reboot from Raspi-Config, and enjoy your Pi!
For Pi2SCART/RGB-Pi/VGA666:
  • Download image and unRAR it.
  • Flash to your SD card with Win32DiskImager or Etcher.
  • BEFORE BOOTING Edit 'config.txt' on your SD card's BOOT partition, uncomment the section relevant to your device, and comment all other devices.
    ## Pi2SCART & VGA666 only!!
    #dtoverlay=vga666
    #hdmi_timings=320 1 16 30 34 240 1 2 3 22 0 0 0 60 0 6400000 1 #Pi2SCART/VGA666 [email protected]
    __
    ## RGB-Pi only!!
    #dtoverlay=pwm-2chan,pin=18,func=2,pin2=19,func2=2
    #dtoverlay=rgb-pi
    #dpi_output_format=6
    #hdmi_timings=320 1 16 30 34 240 1 2 3 22 0 0 0 60 0 6400000 1 #RGB-Pi [email protected]
    __
    ## RetroTINK Ultimate only!!
    #dtoverlay=dpi24
    #dpi_output_format=519
    #hdmi_timings=320 1 23 30 34 240 1 4 3 15 1 0 0 60 0 6400000 1 #RetroTINK [email protected]
__
  • Boot as normal, run Raspi-Config, and choose Expand Filesystem from Advanced Options, then reboot.
  • In Emulationstation, run "Enable VGA666" from the Retropie menu.
  • Your system will automatically reboot. Enjoy your Pi!
To Revert VGA666 to Retrotink Settings
  • In Emulationstation, run "Enable Retrotink" from the Retropie menu.
  • Your system will automatically reboot with the new settings.
Default Retroarch Keyboard Hotkeys
*SPACE: Enable Hotkey* F1 Menu F2 FF Toggle F3 Reset F4 Cheat Toggle F5 Save State F6 Load State F7 Change State - F8 Change State + F9 Screenshot F10 Mute ENTER: Exit 
I have X Issue! Help?
I only have like 500mb of free space on my XXgb SD card!
You need to expand your file system via Raspi-Config. Follow these steps.
Samba Share won't work after I set up Wi-Fi!
Samba share service starts on boot, pending that a network is available. Configure your Wi-Fi then reboot first, and if that doesn't fix it then go into Retropie Setup > Configuration/Tools > Samba > Install Samba. Once it's complete, reboot and it should be golden.
USB-Romservice and/or Retropie-Mount don't work!
Follow this guide, but follow these steps before plugging in your thumb drive:
  • Go to Retropie-Setup
  • Update retropie install script
  • Go to Manage Packages -> Optional Packages
  • Scroll all the way down to usbromservice
  • Uninstall usbromservice
  • Install it again from Binary
  • Once finished, choose Configuration, then Enable USB Romservice
  • Reboot, and wait for it to fully boot in to ES
  • Plug in USB stick (has to be FAT32) and WAIT A LONG TIME (if your stick has a light, wait for it to stop flashing)
Timings for Boot and Runcommand
320 x 240p @ 60hz Timings: Emulationstation, DOSBox, ScummVM, etc.
320 1 15 30 42 240 1 4 3 15 1 0 0 60 0 6400000 1 Retrotink 320x240p Timing 320 1 16 30 34 240 1 2 3 22 0 0 0 60 0 6400000 1 #VGA666 320x240p Timing 
Integer Scale Super-Resolution 240p @ 60hz Timings: All Retroarch Emulators
2048 1 160 202 320 240 1 3 5 14 0 0 0 60 0 42954545 1 #256x240/224p 1920 1 137 247 295 240 1 3 7 12 0 0 0 60 0 40860000 1 #320x240/224p 1600 1 73 157 204 240 1 4 3 15 0 0 0 60 0 32000000 1 #320x240/224p Alternate 
submitted by ErantyInt to u/ErantyInt [link] [comments]

CRTPi-RGB v2.0 - A Whole New World!

CRTPi Project Presents:

DEPRECIATED BUILD, SEE VERSION 3.0!

CRTPi-RGB v2.0

A CRTPi image for running 240p via GPIO RGB DAC Hats
Other Releases:
Changelog: v2.0 for 888 & 666 03/25/2020
Changelog: v1.1X for 666 12/20/2019
Changelog: v1.1X for 888 & 666 12/19/2019
Changelog: v1.0 for 888 & 666 11/7/2019
Changelog: v1.0 for 666 10/24/2019
Changelog: v1.0 for 888 & 666 10/22/2019
Changelog: v0.3 for 888 & 666 10/2/2019
Changelog: v0.2 for 888 09/27/2019
Changelog: v0.1 for 888 09/20/2019
Required Hardware:
What is a RetroTINK? Or a VGA666?
RetroTINK is a GPIO hat for the Raspberry Pi3/3B+ that converts digital video signal back into 24-bit analog. It provides output over RCA, S-Video, Component, and VGA -- as well as supporting CSYNC, super-resolutions, and custom resolution timings.
VGA666 is a GPIO hat for the Raspberry Pi that converts digital video signal back into an 18-bit analog out via VGA. It also allows for super-resolutions and custom resolution timings.
Pi2SCART is a GPIO hat for the Raspberry Pi that converts digital video signal back into an 18-bit analog RGB out via SCART. It also allows for super-resolutions and custom resolution timings.
What Does That Even Mean?
It makes your Pi capable of outputting a true 240p analog signal for CRT televisions and monitors, and is capable of 5x (1600x240) and higher super resolutions.
What Does That Look Like?
I don't have the greatest pics saved for comparison, but here's some examples of the 888.
What is Different? (888 & 666)
  • Retropie 4.5.17 (build 32617750 commit 03/21/20)
  • Retroarch 1.8.4
  • 8GB (7892992 KB) Uncompressed Image (Compressed via WinRAR to 4658943 KB)
  • SSH, Samba Share, and USB Rom Service enabled by default
  • Custom /boot/config.txt settings for DPI output and custom HDMI timings
  • Optional overclock values in /boot/config.txt for Pi2 & Pi3B (disabled by default)
  • Modified Michael Vencio's Runcommand “On Start” and “On End” scripts to automatically change the resolution system-by-system
  • Modified Runcommand "On Start" script to allow creation of game-specific arcade configs for arcade/fba/mame-libretro/neogeo
  • NTSC @ 60hz 320x240 resolution for Emulationstation and DOSBox/ScummVM/Kodi
  • NTSC @ 60hz 2048x240, 1920x240, and 1600x240 resolution for Retroarch
  • Per-system custom refresh rates for Retroarch
  • Single-frame Run Ahead enabled for many 8-bit & 16-bit consoles and handhelds for Retroarch
  • Preloaded with free 240p test suites for multiple consoles with art by chipsnblip
  • Preloaded with additional stable (opt) Retroarch emulators
  • Preloaded with DOSBox and ScummVM
  • Preloaded with Kodi 18.2 w/ Convergence Theme
  • Preloaded with various 4:3 splashscreens from the RPiF download
  • Custom 4:3 Arcade DOJ "Winners DO Use Drugs" splash screen.
  • Preloaded with MUNT Roland MT-32 MIDI emulation for DOSBox/ScummVM
  • Preloaded with Ruckage's runcommand launching screens for supported systems
  • Preconfigured MOST Retroarch emulators for proper Integer Scale SuperRes
  • Retroarch FCEUmm (NES) Emulator preconfigured for 8:7 vert overscan crop enabled w/ composite-direct-fbx palette
  • Retroarch Gambatte (GB/GBC) emulator preset to Super Game Boy (SGB2 auto coloration) mode with Integer Scale Overlay
  • Retroarch mGBA (GBA) emulator preset to Game Boy Player mode with Integer Scale Overlay
  • Emulationstation preloaded with Ruckage's RetroPie menu icons
  • Emulationstation preloaded with Ruckage's snes-mini (default) and nes-mini themes configured for 4:3
  • Emulationstation preloaded with PietDAmore's 240p Honey and Bubblegum themes
  • Emulationstation preloaded with KALEL1981's Super-Retroboy theme
  • Custom ScummVM system artwork for snes-mini theme
  • Emulationstation systems ordered chronologically instead of alphabetically
  • Emulationstation preconfigured with best settings for analog A/V including best settings for video preview screensavers
  • Custom Retropie menu scripts for switching between Retrotink and VGA666-based hardware ___
What is Run-Ahead?
The Run Ahead feature calculates the frames as fast as possible in the background to "rollback" the action as close as possible to the input command requested.
I've enabled run-ahead on most of the 8 & 16-bit consoles and handhelds. A single frame (and using the second instance) is saved here, which dramatically improves input lag without affecting performance on a Pi3B. More frames would require more hardware power, and may be achievable via overclocking.
lr-snes9x2010 consistent 60.0-60.2 FPS @ 60.098801hz lr-fceumm consistent 60.0-60.2 FPS @ 60.098801hz lr-beetle-pce-fast consistent 60.1-60.2 @ 60.000000hz lr-genesis-gx-plus consistent 59.9-60.2 FPS @ 59.922741hz (both genesis and sega cd) lr-picodrive consistent 59.9-60.2 FPS @ 59.922741hz (master system, game gear, and 32X) lr-gambatte consistent 60.0-60.2 FPS @ 60.098801hz (SGB2 framerate) lr-mgba consistent 59.8-60.4 FPS @ 60.002220hz (Gamecube framerate) 
To disable runahead for a game (or emulator):
Quick Menu > Latency > Run-Ahead to Reduce Latency > OFF 
What Does This NOT Have?
This doesn't have any ROMs (other than freeware test suites), BIOS files, music, screenshots, metadata, or videos concerning copy-written games. Other than the configurations and overlays, it has nothing that can't be downloaded through the repository or freeware.
Where Can I Get It?
You can download a premade image from Google Drive:
NOTE: Please expand your file system via Raspi-Config after your first boot, and reboot!

DEPRECIATED BUILD, PLEASE SEE VERSION 3.0!

CRTPi-RGB v2.0: For Pi3B/3B+ with Retrotink, Pi2SCART, RGB-Pi, or VGA666
MD5: f860516358f5c2941de3bc6170234b88 
Install Instructions:
For Retrotink Ultimate:
  • Download image and unRAR it.
  • Flash to your SD card with Win32DiskImager or Etcher.
  • Boot as normal, run Raspi-Config, and choose Expand Filesystem from Advanced Options.
  • Reboot from Raspi-Config, and enjoy your Pi!
For Pi2SCART/RGB-Pi/VGA666:
  • Download image and unRAR it.
  • Flash to your SD card with Win32DiskImager or Etcher.
  • BEFORE BOOTING Edit 'config.txt' on your SD card's BOOT partition, uncomment the section relevant to your device, and comment all other devices.
    ## Pi2SCART & VGA666 only!!
    #dtoverlay=vga666
    #hdmi_timings=320 1 16 30 34 240 1 2 3 22 0 0 0 60 0 6400000 1 #Pi2SCART/VGA666 [email protected]
    __
    ## RGB-Pi only!!
    #dtoverlay=pwm-2chan,pin=18,func=2,pin2=19,func2=2
    #dtoverlay=rgb-pi
    #dpi_output_format=6
    #hdmi_timings=320 1 16 30 34 240 1 2 3 22 0 0 0 60 0 6400000 1 #RGB-Pi [email protected]
    __
    ## RetroTINK Ultimate only!!
    #dtoverlay=dpi24
    #dpi_output_format=519
    #hdmi_timings=320 1 23 30 34 240 1 4 3 15 1 0 0 60 0 6400000 1 #RetroTINK [email protected]
__
  • Boot as normal, run Raspi-Config, and choose Expand Filesystem from Advanced Options, then reboot.
  • In Emulationstation, run "Enable VGA666" from the Retropie menu.
  • Your system will automatically reboot. Enjoy your Pi!
To Revert VGA666 to Retrotink Settings
  • In Emulationstation, run "Enable Retrotink" from the Retropie menu.
  • Your system will automatically reboot with the new settings.
Default Retroarch Keyboard Hotkeys
*SPACE: Enable Hotkey* F1 Menu F2 FF Toggle F3 Reset F4 Cheat Toggle F5 Save State F6 Load State F7 Change State - F8 Change State + F9 Screenshot F10 Mute ENTER: Exit 
I have X Issue! Help?
I only have like 500mb of free space on my XXgb SD card!
You need to expand your file system via Raspi-Config. Follow these steps.
Samba Share won't work after I set up Wi-Fi!
Samba share service starts on boot, pending that a network is available. Configure your Wi-Fi then reboot first, and if that doesn't fix it then go into Retropie Setup > Configuration/Tools > Samba > Install Samba. Once it's complete, reboot and it should be golden.
USB-Romservice and/or Retropie-Mount don't work!
Follow this guide, but follow these steps before plugging in your thumb drive:
  • Go to Retropie-Setup
  • Update retropie install script
  • Go to Manage Packages -> Optional Packages
  • Scroll all the way down to usbromservice
  • Uninstall usbromservice
  • Install it again from Binary
  • Once finished, choose Configuration, then Enable USB Romservice
  • Reboot, and wait for it to fully boot in to ES
  • Plug in USB stick (has to be FAT32) and WAIT A LONG TIME (if your stick has a light, wait for it to stop flashing)
Timings for Boot and Runcommand
320 x 240p @ 60hz Timings: Emulationstation, DOSBox, ScummVM, etc.
320 1 23 30 34 240 1 4 3 15 1 0 0 60 0 6400000 1 Retrotink 320x240p Timing 320 1 16 30 34 240 1 2 3 22 0 0 0 60 0 6400000 1 #VGA666 320x240p Timing 
Integer Scale Super-Resolution 240p @ 60hz Timings: All Retroarch Emulators
2048 1 180 202 300 240 1 3 5 14 0 0 0 60 0 42954545 1 #256x240/224p 1920 1 152 247 280 240 1 3 7 12 0 0 0 60 0 40860000 1 #320x240/224p 1600 1 85 157 192 240 1 4 3 15 0 0 0 60 0 32000000 1 #320x240/224p Alternate 
submitted by ErantyInt to u/ErantyInt [link] [comments]

CRTPi-RGB v2.0: A Whole New World!

CRTPi Project Presents:

CRTPi-RGB v2.0

A CRTPi image for 240p via RGB DAC Hats
Other Releases:
Changelog: v2.0 for 888 & 666 03/25/2020
Changelog: v1.1X for 666 12/20/2019
Changelog: v1.1X for 888 & 666 12/19/2019
Changelog: v1.0 for 888 & 666 11/7/2019
Changelog: v1.0 for 666 10/24/2019
Changelog: v1.0 for 888 & 666 10/22/2019
Changelog: v0.3 for 888 & 666 10/2/2019
Changelog: v0.2 for 888 09/27/2019
Changelog: v0.1 for 888 09/20/2019
Required Hardware:
What is a RetroTINK? Or a VGA666?
RetroTINK is a GPIO hat for the Raspberry Pi3/3B+ that converts digital video signal back into 24-bit analog. It provides output over RCA, S-Video, Component, and VGA -- as well as supporting CSYNC, super-resolutions, and custom resolution timings.
VGA666 is a GPIO hat for the Raspberry Pi that converts digital video signal back into an 18-bit analog out via VGA. It also allows for super-resolutions and custom resolution timings.
Pi2SCART is a GPIO hat for the Raspberry Pi that converts digital video signal back into an 18-bit analog RGB out via SCART. It also allows for super-resolutions and custom resolution timings.
What Does That Even Mean?
It makes your Pi capable of outputting a true 240p analog signal for CRT televisions and monitors, and is capable of 5x (1600x240) and higher super resolutions.
What Does That Look Like?
I don't have the greatest pics saved for comparison, but here's some examples of the 888.
What is Different? (888 & 666)
  • Retropie 4.5.17 (build 32617750 commit 03/21/20)
  • Retroarch 1.8.4
  • 8GB (7892992 KB) Uncompressed Image (Compressed via WinRAR to 4658943 KB)
  • SSH, Samba Share, and USB Rom Service enabled by default
  • Custom /boot/config.txt settings for DPI output and custom HDMI timings
  • Optional overclock values in /boot/config.txt for Pi2 & Pi3B (disabled by default)
  • Modified Michael Vencio's Runcommand “On Start” and “On End” scripts to automatically change the resolution system-by-system
  • Modified Runcommand "On Start" script to allow creation of game-specific arcade configs for arcade/fba/mame-libretro/neogeo
  • NTSC @ 60hz 320x240 resolution for Emulationstation and DOSBox/ScummVM/Kodi
  • NTSC @ 60hz 2048x240, 1920x240, and 1600x240 resolution for Retroarch
  • Per-system custom refresh rates for Retroarch
  • Single-frame Run Ahead enabled for many 8-bit & 16-bit consoles and handhelds for Retroarch
  • Preloaded with free 240p test suites for multiple consoles with art by chipsnblip
  • Preloaded with additional stable (opt) Retroarch emulators
  • Preloaded with DOSBox and ScummVM
  • Preloaded with Kodi 18.2 w/ Convergence Theme
  • Preloaded with various 4:3 splashscreens from the RPiF download
  • Custom 4:3 Arcade DOJ "Winners DO Use Drugs" splash screen.
  • Preloaded with MUNT Roland MT-32 MIDI emulation for DOSBox/ScummVM
  • Preloaded with Ruckage's runcommand launching screens for supported systems
  • Preconfigured MOST Retroarch emulators for proper Integer Scale SuperRes
  • Retroarch FCEUmm (NES) Emulator preconfigured for 8:7 vert overscan crop enabled w/ composite-direct-fbx palette
  • Retroarch Gambatte (GB/GBC) emulator preset to Super Game Boy (SGB2 auto coloration) mode with Integer Scale Overlay
  • Retroarch mGBA (GBA) emulator preset to Game Boy Player mode with Integer Scale Overlay
  • Emulationstation preloaded with Ruckage's RetroPie menu icons
  • Emulationstation preloaded with Ruckage's snes-mini (default) and nes-mini themes configured for 4:3
  • Emulationstation preloaded with PietDAmore's 240p Honey and Bubblegum themes
  • Emulationstation preloaded with KALEL1981's Super-Retroboy theme
  • Custom ScummVM system artwork for snes-mini theme
  • Emulationstation systems ordered chronologically instead of alphabetically
  • Emulationstation preconfigured with best settings for analog A/V including best settings for video preview screensavers
  • Custom Retropie menu scripts for switching between Retrotink and VGA666-based hardware ___
What is Run-Ahead?
The Run Ahead feature calculates the frames as fast as possible in the background to "rollback" the action as close as possible to the input command requested.
I've enabled run-ahead on most of the 8 & 16-bit consoles and handhelds. A single frame (and using the second instance) is saved here, which dramatically improves input lag without affecting performance on a Pi3B. More frames would require more hardware power, and may be achievable via overclocking.
lr-snes9x2010 consistent 60.0-60.2 FPS @ 60.098801hz lr-fceumm consistent 60.0-60.2 FPS @ 60.098801hz lr-beetle-pce-fast consistent 60.1-60.2 @ 60.000000hz lr-genesis-gx-plus consistent 59.9-60.2 FPS @ 59.922741hz (both genesis and sega cd) lr-picodrive consistent 59.9-60.2 FPS @ 59.922741hz (master system, game gear, and 32X) lr-gambatte consistent 60.0-60.2 FPS @ 60.098801hz (SGB2 framerate) lr-mgba consistent 59.8-60.4 FPS @ 60.002220hz (Gamecube framerate) 
To disable runahead for a game (or emulator):
Quick Menu > Latency > Run-Ahead to Reduce Latency > OFF 
What Does This NOT Have?
This doesn't have any ROMs (other than freeware test suites), BIOS files, music, screenshots, metadata, or videos concerning copy-written games. Other than the configurations and overlays, it has nothing that can't be downloaded through the repository or freeware.
Where Can I Get It?
You can download a premade image from Google Drive:
NOTE: Please expand your file system via Raspi-Config after your first boot, and reboot!
CRTPi-RGB v2.0: For Pi3B/3B+ with Retrotink, Pi2SCART, RGB-Pi, or VGA666
MD5: f860516358f5c2941de3bc6170234b88 
Install Instructions:
For Retrotink Ultimate:
  • Download image and unRAR it.
  • Flash to your SD card with Win32DiskImager or Etcher.
  • Boot as normal, run Raspi-Config, and choose Expand Filesystem from Advanced Options.
  • Reboot from Raspi-Config, and enjoy your Pi!
For Pi2SCART/RGB-Pi/VGA666:
  • Download image and unRAR it.
  • Flash to your SD card with Win32DiskImager or Etcher.
  • BEFORE BOOTING Edit 'config.txt' on your SD card's BOOT partition, uncomment the section relevant to your device, and comment all other devices.
    ## Pi2SCART & VGA666 only!!
    #dtoverlay=vga666
    #hdmi_timings=320 1 16 30 34 240 1 2 3 22 0 0 0 60 0 6400000 1 #Pi2SCART/VGA666 [email protected]
    __
    ## RGB-Pi only!!
    #dtoverlay=pwm-2chan,pin=18,func=2,pin2=19,func2=2
    #dtoverlay=rgb-pi
    #dpi_output_format=6
    #hdmi_timings=320 1 16 30 34 240 1 2 3 22 0 0 0 60 0 6400000 1 #RGB-Pi [email protected]
    __
    ## RetroTINK Ultimate only!!
    #dtoverlay=dpi24
    #dpi_output_format=519
    #hdmi_timings=320 1 23 30 34 240 1 4 3 15 1 0 0 60 0 6400000 1 #RetroTINK [email protected]
__
  • Boot as normal, run Raspi-Config, and choose Expand Filesystem from Advanced Options, then reboot.
  • In Emulationstation, run "Enable VGA666" from the Retropie menu.
  • Your system will automatically reboot. Enjoy your Pi!
To Revert VGA666 to Retrotink Settings
  • In Emulationstation, run "Enable Retrotink" from the Retropie menu.
  • Your system will automatically reboot with the new settings.
Default Retroarch Keyboard Hotkeys
*SPACE: Enable Hotkey* F1 Menu F2 FF Toggle F3 Reset F4 Cheat Toggle F5 Save State F6 Load State F7 Change State - F8 Change State + F9 Screenshot F10 Mute ENTER: Exit 
I have X Issue! Help?
I only have like 500mb of free space on my XXgb SD card!
You need to expand your file system via Raspi-Config. Follow these steps.
Samba Share won't work after I set up Wi-Fi!
Samba share service starts on boot, pending that a network is available. Configure your Wi-Fi then reboot first, and if that doesn't fix it then go into Retropie Setup > Configuration/Tools > Samba > Install Samba. Once it's complete, reboot and it should be golden.
USB-Romservice and/or Retropie-Mount don't work!
Follow this guide, but follow these steps before plugging in your thumb drive:
  • Go to Retropie-Setup
  • Update retropie install script
  • Go to Manage Packages -> Optional Packages
  • Scroll all the way down to usbromservice
  • Uninstall usbromservice
  • Install it again from Binary
  • Once finished, choose Configuration, then Enable USB Romservice
  • Reboot, and wait for it to fully boot in to ES
  • Plug in USB stick (has to be FAT32) and WAIT A LONG TIME (if your stick has a light, wait for it to stop flashing)
Timings for Boot and Runcommand
320 x 240p @ 60hz Timings: Emulationstation, DOSBox, ScummVM, etc.
320 1 23 30 34 240 1 4 3 15 1 0 0 60 0 6400000 1 Retrotink 320x240p Timing 320 1 16 30 34 240 1 2 3 22 0 0 0 60 0 6400000 1 #VGA666 320x240p Timing 
Integer Scale Super-Resolution 240p @ 60hz Timings: All Retroarch Emulators
2048 1 180 202 300 240 1 3 5 14 0 0 0 60 0 42954545 1 #256x240/224p 1920 1 152 247 280 240 1 3 7 12 0 0 0 60 0 40860000 1 #320x240/224p 1600 1 85 157 192 240 1 4 3 15 0 0 0 60 0 32000000 1 #320x240/224p Alternate 
submitted by ErantyInt to crtgaming [link] [comments]

Swift Programming Tutorial for Beginners (Full ... - YouTube Free Binary Options Trading Signals - Best Live Signal Software For Binary Traders Online Review binäre optionen trading roboter Forex4Options - YouTube News Trading Binary Option Trading Strategy Binary Option AutoTrader Erfahrung - Binäre Optionen Auto Trading Signalgeber für Anfänger Hedging Positions  Options Trading Concepts - YouTube Coursera IT Security (Defense against the digital dark arts) Solutions  Week 5  Quiz Integer Linear Programming  0-1 Binary Constraints ...

Get a 60.000 second digital binary code processing on stock footage at 30fps. 4K and HD video ready for any NLE immediately. Choose from a wide range of similar scenes. Video clip id 1052718794. Download footage now! Binary options are a very popular mode of short term speculation, but its success has remained a mystery, and traders are jumping from system to system and broker to broker in search for the Holy Grail of Trading Binary Options, I will show you it does not need to be complicated, i have tested the system in my real account and i have taken over 1000 successful setups, this course is the ... Stack Exchange network consists of 176 Q&A communities ... I am looking to replicate Bachelier's caplet formula with two digital options: (1) asset-or-nothing (forward rate in this case) and (2) cash-or-nothing. For ... options interest-rates binary-options. asked Jan 18 '19 at 15:41. qbodart. 131 3 3 bronze badges. 3. votes. 1answer 131 views Fair value of a binary cash-or-nothing option with ... Graphic Design Information Security Information Technology Management Information Systems Food & Beverage ; Bartending Cooking Culinary Arts Hospitality Nutrition Wine Fine Arts; Art Art History Dance Music Other Fine Arts Random Knowledge; Astrology Blackjack Cultural Literacy Knowledge Rehab Mythology National Capitals People You Should Know Poker Quiz Bowl Sports Trivia Tarot Cards Learn ... What is binary? Binary is a number system that only uses two digits: 1 and 0. All information that is processed by a computer is in the form of a sequence of 1s and 0s. Binary options trading is an excellent financial tool for both beginners and advanced traders alike. In this binary options course: binary options basics, binary options alternatives, binary option brokers, binary option trading strategies and more.. A binary option is a financial opportunity that offers investors a fixed price and a fixed ... Stack Exchange network consists of 176 Q ... You have one instrument that pays off linearly with the underlying and another that pays off either 0 or some fixed amount. The binary would therefore have much more sensitivity to the underlying price as it moves in the money as the payoff steps up instantaneously from 0 to the fixed amount, where as the other goes up linearly from 0 to the ending ... In the first case you are trying to divide the data to 2 distinctive categories - classification (using 0,1 labels), and in the second you are trying to estimate the relationship between the input and the output variables - regression (using the [0,1] range). For the first category you should use binary cross-entropy (keras.losses.binary ... This course will explore the fundamentals of trading with binary options. It is an introductory course designed for anyone interested in learning how to trade with binary options. Expect to see 52 lectures with over 1.5 hours worth of learning the ins and outs of binary options trading. You can expect to see topics such as a guide on "purchasing binary options" and "how to set up binary ... I am using Mosquito MQTT server to broadcast messages. How can I send a binary data (not text)? Example: mosquitto_pub -t test -m 0x452343 Should be received as: 0100 0101 0010 011 0100 0011

[index] [17957] [8528] [13209] [3436] [14749] [10010] [8171] [19901] [21639] [12349]

Swift Programming Tutorial for Beginners (Full ... - YouTube

Binary Options Autotrader für Anfänger im Test - Der Binäre Optionen Autotrader Der Binäre Optionen Autotrader ist eine vollautomatische Software die mithilfe eines Chrome Plugins die ... 1:11:43 Qwiklab: Install, Update and Remove Software for Windows Google IT Support Certified Course 2020 - Duration: 10:11. Frustrated Engineer Recommended for you This video shows how to formulate relational/logical constraints using binary or 0-1 integer variables: ~~~~~ This channel does not contain ads. Suppor... binäre optionen trading roboter http://bitlye.com/7k7yHv Treten Sie uns bei und werden Sie reich mit der Crypto Trader! KAUFEN SIE KEINE BITCOIN, HANDELN ... Learn how to code with Swift in one single tutorial! We'll go through all the core concepts of Swift including: Variables and Constants, Data Types, Properti... 7 0. Don't like this video? Sign in to make your opinion count. ... Binary option broker review - SCAM! - Duration: 5:44. Anyoption Scam 31,939 views. 5:44. How to configure a Shared Network ... Free Binary Options Trading Signals is beginners Friendly or advanced traders. without watching binary options graphic trends analysis, watching a simulator or using the hedging strategy even ... Please take our PBS Digital Studios Survey! https://www.surveymonkey.com/r/pbsds2017 Today, we’re going to take a look at how computers use a stream of 1s an... Binary Options Robot and Binary Hedge Fund lead the auto trading revolution that is sweeping the binary options world. Both enable 100% freedom with their auto trading process that runs from the ... When the market moves, so can our directional exposure through delta. In this segment, Mike breaks down how we use hedging to mitigate this directional expos...

http://binaryoptiontrade.tergpacla.gq