FRAM Mod for N64 Details

I’ve been working on this story for a while now. Both as a blog post and as a stream/YouTube video. Everything started a few months ago when I discovered my N64 Controller Pak from the late 90s had stopped working. What was the Controller Pak? It was a memory card for saving or transferring save files for Nintendo 64 games. The Controller Pak wasn’t required for all games. Some, such as Super Mario 64 using memory in the game cartridge for saves. Other games, like Turok, had no cartridge memory and entirely relied on the Controller Pak. And then others, like Perfect Dark, could use both cartridge memory or a Controller Pak.

Anyway, my Controller Pak was not working, and I knew it was time to attempt a repair. I wasn’t worried about the failure. The Controller Pak used a 3.3V coin-cell battery to keep the contents of the SRAM stored. At 20+ years old, a dead battery was a common problem for these Paks. I assumed all I needed to do was solder a new battery into the Controller Pak, and everything would be working again. A quick order to eBay, and a few days later, I had a 10x of CR2032 batteries with solder tabs. I also purchased three more official Controller Paks just in case I had issues.

The results of replacing the battery on my original Controller Pak went as well as you would expect with an article with this title. Despite installing a new battery, double-checking for shorts, and verifying the voltage at the SRAM memory chip, the Controller Pak still would not work. I tested formatting the card with the memory card manager from Top Gear Rally and Perfect Dark, but neither could resurrect the Pak. One of the three Controller Paks I had ordered also failed to work. With two dead Controller Paks and basic knowledge of electronics, it was time to get drastic.

In early 2021 I saw a post on RetroRGB.com about Gunner Turnquist from https://gmanzmods.com selling new PCBs for the Nintendo 64 Controller Pak but using FRAM instead of SRAM. The FRAM was a logical upgrade because the chosen chips were designed to work in SRAM-designed circuits with minimal redesigns and didn’t require a battery to maintain data. That made me wonder if a mod existed to replace the SRAM memory on an original Controller Pak with a FRAM chip. The answer turned out to be “yes.”

The first helpful search result I found was a blog post at https://blog.elephantfle.pw. The writer detailed their experience removing the battery and replacing the SRAM memory with an FM18W08 FRAM module. Another result I found was Vincent’s at https://www.dbqbp.com detailing a similar experience. I even found an old post at the Ben Heck forums where someone did the mod with a FRAM chip that didn’t even match the dimensions of the original chip. Overall the process looked straightforward (except for the method from the forum). A 2nd quick order to eBay, and I had a 5-pack of FRAM memory on the way to my house.

Replacing the SRAM module with the FRAM was a straightforward process. I didn’t own a hot air station, but I was still able to get the module removed by using a solder braid to remove as much solder as possible and then carefully heat each pin and lift them from the pads. The last thing to check was power, and that’s where I fell down a deep, deep rabbit hole.

At the end of the blog post at elephantfle.pw the writer mentions that the Controller Pak can be unstable with the FRAM mod, and based on information at the https://blog.qwertymodo.com blog, the solution is to connect pin 28 of the memory module to the positive pad where the battery used to connect. Controller Pak instability does exist, but I don’t believe this is the solution. Why? It comes down to how the Controller Pak is wired. The right side of the PCB has a little 8-pin IC with “74LV2416” printed on the top and a symbol that looks like a Texas Instruments logo. What does this IC do?  That is a mystery because there doesn’t appear to be a datasheet publicly available. However, there are clues, and I can make some inferences as to the purpose. First, the pins of the IC are connected to the following:

PINConnection
1VDD from battery
2VDD to memory IC (pin 28)
3Ground
4/CE to memory IC (pin 20)
5/CE from PCB edge connector
6N/A
7N/A
8VDD from PCB edge connector

Using a multimeter shows that when there is no power coming from the controller port, the SRAM’s VDD input (pin 28) and /CE (pin 20) receive 3.3V from the battery. The datasheet of the SRAM says holding /CE high puts the chip in standby mode meaning no read/write operations are allowed. So it appears the 74LV2416 IC is handling the power delivery between the backup battery and controller to the SRAM memory and holding /CE high when the PAK isn’t being used. That matches the information in a PDF I found by Cypress Semiconductor Corp. titled “Design Recommendation for Battery-Backed SRAMs Using Cypress MoBL® SRAMs.” The block diagram seen in figure 4 of the document matches the wiring of the Controller Pak.

So why do I feel the statement “connect pin 28 of the FRAM to the positive batter pad” is incorrect? Because that connects the VDD output of the 74LV2416 IC back to the VDD battery input. If 3.3V needs to be connected to the battery input of the 74LV2416 IC for it to work correctly, why get it from the IC’s output? Wouldn’t it be better to get 3.3V from the VDD input of the controller? Yes, yes, it would. Looking back at the blog post at qwertymodo.com helps explain what has happened. In the comments, the writer, Ben, responds to a reader who asks what is required for swapping a memory module. Ben says they need to connect the positive battery terminal to 3.3V, and it can be tapped from several locations. Here is where I think he misspeaks about pin 28. Ben does clarify that it has been a while since he worked on their PCB project, and I can’t fault him for misremembering something from 5 years earlier.

What do I think is the correct solution? I have two. Like Ben said, the first solution (and the easiest) is getting 3.3V from somewhere on the PCB and connecting it to the positive battery pad. The closest place is the VDD input pad (pin 8) of the 74LV2416 IC. The second solution is to remove the 74LV2416 IC altogether and connect VDD and /CE directly to the FRAM memory module. Since the IC isn’t required for controlling power for the FRAM, why should it be kept in the circuit? There are a lot of questions I have around the 74LV2416 IC. How is it designed to work when no power is supplied to the battery input? Are their delays on power on? What happens to the /CE line during power on? With so many unknowns about the 74LV2416 IC, I feel the best course of action is to remove it.

Power soluton 1: bridge VDD to the battery + terminal

With the IC is removed, there are two options for bridging the necessary connections. Option 1 is to connect pad 8 to pad 2 (VDD input to VDD output) and pad 4 to pad 5 (/CE input to /CE output) where the 74LV2416 IC used to be. Option 2 is to connect pad 8 directly to pin 28 and pad 5 to pin 20. One additional component is required to get /CE to work: a pull-up resistor to VDD. Without this resistor, the Controller Pak will not work correctly (see figure 3 of the FRAM datasheet). There is a via next to the memory chip that connects to the /CE line. An easy solution is to connect a resistor between that via and VDD.

Despite all the work around getting power to the FRAM memory module, that may not be the only source of instability. According to the datasheets for many of the FRAM modules I’ve looked at, most have a section detailing considerations that must be taken when being used in an SRAM circuit. The datasheets specifically say, “First, bytewide F-RAM memories latch each address on the falling edge of chip enable… Users who are modifying existing designs to use F-RAM should examine the memory controller for timing compatibility of address and control pins. Each memory access must be qualified with a low transition of /CE.” The picture below helps visualize the issue. All of this leads me to believe that we’re fortunate the FRAM memory works with the N64. It’s not designed to be a 100% code-free drop-in replacement for SRAM, yet it does appear to work. Is this going to cause damage to the console or controller? I doubt it. The most likely problem is save file corruption due to the FRAM not latching to the address correctly. The only way to know for sure is to connect everything up to an oscilloscope and monitor what is happening to the /CE and address lines.

There you have it. All of the information I’ve collected and tested regarding the FRAM mod for Nintendo 64 Controller Paks. I hope someone finds all of this data valuable and doesn’t go down the same rabbit hole I fell into. Overall, I’m happy with the results. This has been one of the times I’ve dove into a project and managed to create meaningful results and share.

Reference Info:

Have Fun,
Tony

Boss Rally – Top Gear Rally’s PC Brother

Have you ever had one of those moments when clicking through Wikipedia you learn something that blew your mind? I had one of those moments in 2020. I was clicking through some pages about Top Gear games when I landed on Top Gear Rally and saw the sentence, “In 1999, the game was ported to Microsoft Windows as Boss Rally.” What? I had played Top Gear Rally on my Nintendo 64 since 1997 and never knew a PC version existed. Clicking the link to Boss Rally’s Wikipedia page revealed the original developer of TGR ported the game.  I knew at that moment I had to find a copy.

Obtaining a copy of Boss Rally turned out to be a challenge. There were no copies for sale anywhere I looked online. In contrast, Top Gear Rally had over 200 copies available on eBay. Nonetheless, I created an eBay saved search and went on with my day. About six months later, my search finally got a hit. A seller had a copy for sale and was asking $9.99. I felt that was a fair price for an uncommon PC game with little to no other listings. A few days letter I had the game in my possession.

The challenges of Boss Rally weren’t over yet. The game was developed in the late ’90s when 3D games for PC used graphics APIs like 3dfx’s Glide or Microsoft’s DirectX 7. Glide was never officially supported on Windows 2000/XP+, and Windows Vista or 7 dropped support for early versions of DirectX. With Boss Rally only supporting Glide and DirectX 6, there was no native way to play the game on my PC. That was until I discovered the utility dgVoodoo 2.

dgVoodoo 2 is an excellent piece of software. It’s able to map Glide GPU logic and DirectX pipelines to DX10+ shaders. This means old 3D games from the 90s and 2000s can be played on a modern version of Windows. Plus, installing the software is easy, only copying the required DLL files into the installation directory of a given game. dgVoodoo 2 has become my go-to solution for getting old games running on Windows.

Combining Boss Rally with dgVoodoo2

  • Download the latest version of dgVoodoo from http://dege.freeweb.hu/dgVoodoo2/dgVoodoo2/#latest-stable-version
  • Unzip the dgVoodoo download.
  • Open the MS\x86 folder and copy all the files to the game’s Program Files folder.
  • Navigate back to the top of the dgVoodoo2 folder, right-click on gvVoodooCpl.exe, and choose “Run as Administrator.”
  • Click the Add button and select the game’s install folder under Program Files.
  • On the General tab, choose to run the game as Full Screen or Windowed.
  • Under the DirectX tab, set the following settings:
    • Uncheck “Application controlled fullscreen/windowed state.”
    • Check “Fast video memory access.”
    • Set the desired resolution. This setting will help override the in-game menu from rendering at 640×480. You will also want to go into the game’s options and set the desired resolution.
  • Click the Apply button and close dgVoodoo Control Panel.
  • From the Start menu or Boss Rally install folder, launch the Display Wizard, and select a Direct3d video card. The exact card does not appear to matter.
  • Launch Boss Rally and get racing.

Have fun.
-Tony

The Perfect PS2 Fan Upgrade

I want to give a big shout-out to the online retailer The Peaceful Outcome (TPO) and their PS2 Noctua upgrade kit. If you have a PS2 with a loud fan, then this kit is perfect.

Backstory: I have owned my PS2 since Christmas 2001. The entire time the fan in the system was loud. I always assumed that was normal since I had never really listed to another PS2 in a quiet setting. Fast forward to 2019, and while walking in my neighborhood, I found a PS2 in a box that was sat out on the street for junk pickup. It was a later revision fat PS2 that lacked the firewire port. I grabbed the unit, took it home, and discovered there were no significant issues. I was surprised to learn the system was virtually silent when compared to my PS2.

Recently I was playing through the original Final Fantasy XII, and the noise of the PS2 finally got to me. Other members of the RetroRGB Discord server had talked about the fan upgrade, so I went to eBay and bought one for myself. I felt $35 for the Noctua fan, fan guard, 3d printed rear panel parts, and wiring pigtail more than reasonable, and the results were impressive. The installation took less than one hour, and my PS2 is now completely silent. Check out the before and after.

For instructions on removing the original fan from a PS2, I recommend following the guide posted at iFixit.com. The process involves completely removing the PS2 mainboard from the bottom shell to get the fan unplugged from its header.

Links to the TPO’s Amazon and eBay listing are below (these are not affiliate links).
https://www.amazon.com/TPO-Playstation-Quiet-Upgrade-Modification-30000/dp/B0854FJ4RR
https://www.ebay.com/itm/203261375555

Have fun.
-Tony

Update Configuration Manager Application Content Locations

I had planned to write this excellent article about using PowerShell to update the content locations of all the applications in an SCCM environment. At work, we moved the source files to a new file server and needed to update 350+ deployment types. Of course, there were some challenges. The biggest is Configuration Manager’s PowerShell cmdlet to get deployment types doesn’t have an explicit property to list the content location. You can still get the information from the cmdlet, but it’s located in the XML data of the object. A PowerShell script to update the content location would have required parsing that XML to get the current location and using the Set-CMDemploymentType cmdlet to update the deployment with the new location.

As usual, someone already did a better job. Nickolaj Anderson from MSEndpointMgr.com wrote a great PowerShell tool with a GUI to help find and update applications. I recommend visiting his website to learn the details.

https://msendpointmgr.com/2017/02/23/configmgr-content-source-update-tool-version-1-0-2-released/

https://msendpointmgr.com/2015/08/26/configmgr-content-source-update-tool-1-0-0/

Have fun.
-Tony

Microsoft has Mixed GPOs into their Device Profiles

Microsoft is about to make Windows 10 device configurations in Endpoint Manager/Intune way more powerful. While digging through Microsoft’s documentation about Windows MDM, I noticed a new list of CSP policies prefixed with “ADMX_”. GitHub commits indicate the documentation of these policies didn’t exist until late last year. That wouldn’t be much to talk about, except these new policies match Windows’ built-in group policies.

Take a moment to let that statement sink in. One of the biggest frustrations I’ve run into with Intune device profiles has been the lack of parity with group policies. Some settings, like configuring screensavers to be secure, aren’t available in Windows’ MDM. The only way I’ve managed to work around these device policy limitations has been to use PowerShell scripts.

The ADMX backed policies’ documentation all say they are available in the “latest Windows 10 Insider Preview Build”. And finally, Microsoft released the first Windows Insider Preview Build for 2021, which included the needed functionality. As it stands right now, the process of using the new ADMX backed policies isn’t easy. It requires creating custom device profiles, knowing the correct OMA-URI, and how to format the data. Getting the correct format involves looking at the corresponding .admx file built into Windows. My hope is Microsoft will add all of these policies to the “Administrative Template” based device profiles quickly. Some already exist, but it is a fraction of the settings available in GPOs.

I hope to share more info on using ADMX backed policies as Windows 10 21H1 becomes available.

As always, have fun
-Tony

Review of the Western Digital My Passport Wireless Pro

In 2019 purchased a Western Digital My Passport Wireless Pro external hard drive to take on trips so kids in the car could watch videos but not suck down all the data from the cell networks. It’s a cool device, sporting a regular 2.5″ laptop hard drive, 6400mAh battery that could be used to power the device while on the go or charge a USB device, and stream videos and music to devices using the built-in Plex Server. As you can guess, Plex was the main reason to get the device. I already ran a Plex Server in my home for video/music streaming and felt that would be a solution for carrying large amounts of videos without having to worry about filling up all the storage space of tablets or phones. I also happened to be going on a cruise that year where access to the Internet would cost up to $10 a day to get access to video streaming services.

Overall, I felt the Passport Wireless Pro was a useful device. It was easy and fast to load content onto the device using USB3. Setting up Plex was the same as any other platform, point the libraries to their respective folders, and allow the application to sync all the metadata. It wasn’t without issues, though.

  1. You need to be proactive and set up Plex to work without authentication. How-To Geek has a good article about this. Go into the Plex Server’s network settings and add “192.168.0.1/255.255.255.0” to the setting “List of IP addresses and networks that are allowed without auth.” Doing this allows apps and the web interface to work without going through Plex’s authentication servers.
  2. It can be unreliable sometimes. Changing the Passport’s optimization mode to “Battery Life” made Plex streaming stop working, so I recommend leaving it in “Performance” mode. Still, there are times when streaming to the Android apps doesn’t work. The web interface fairs better, but Chrome on Android has a stutter every few seconds. I am using an older tablet that’s causing the issue.

From a security perspective, the Passport Wireless Pro is not a well-maintained device. The drive was released in 2016 as a follow up to the original 2014 Passport Wireless. The information of the Linux distro has a build date of 2015. The kernel, 3.10.24, was released in 2013. Ezploit.cz has an article from August 2019 that lists some of the shortcomings. I’d recommend not connecting the Passport to networks you are not familiar with and configuring passwords for the local admin and root accounts.

I looked to see if it was possible to install the Emby media server onto the Passport and use it as an alternative to Plex. Sadly, I was stopped short by a lack of necessary dependencies in Linux. A few Emby community members tried alternate methods of getting Emby to run on the device, but that appears to have stalled out.

Anyway, I thought you would find this information useful if you’re thinking of grabbing a My Passport Pro.

Have fun.
-Tony

GCHD Mk-II Operations Manual

For everyone interested, I’ve uploaded a scanned copy of the operations manual of EON’s GCHD Mk-II video adapter to the Internet Archive. I couldn’t find a copy of it anywhere online recently and needed to figure out how to change some settings on the adapter I own. I hope that uploading the manual to the Internet Archive will allow it to be preserved for as long as possible.

If you’re not aware of the GCHD Mk-II, it is a plug-n-play adapter for the Nintendo GameCube that converts the system’s digital video signal to HDMI and Component video. The GCHD is an awesome product and one of the easiest ways to get high-quality video from a GameCube. The GCHD can also convert 480i and 240p video sources to 480p which can lead to better image quality on fixed pixel displays.

GCHD and other products like the Carby from Insurrection Industries also show what can happen when people in a community share their ideas and skills. Without Ingo Korb and his GCVideo opensource project, none of these products would exist.

If you want to learn more about getting the best video quality from your GameCube, I recommend watching RGB 316 by My Life in Gaming.

If you are interested in purchasing a GCHD Mk-II for yourself then check out the links below. (these are affiliate links)

GCHD Mk-II @ Amazon: https://amzn.to/2ZPdg0H
GCHD Mk-II @ CastleMania Games: https://castlemaniagames.com/products/eon-purple-gchd-mkii-hdmi-adapter-nintendo-gamecube-dual-output-no-lag?ref=ymwsbyu8gwr
Insurrection Industries Carby @ Amazon: https://amzn.to/2WIqs5v
Insurrection Industries Carby @ CastleMania Games: https://castlemaniagames.com/products/insurrection-industries-carby-version-2-black?ref=ymwsbyu8gwr

The Better N64 Joystick Repair

Today I’m going to describe the installation and review of replacement N64 joystick parts sold by Kitsch-Bent. As described by their website, these parts are made of polyoxymethylene plastic for durability, and I’m impressed with the quality. They look like OEM parts.

https://store.kitsch-bent.com/product/n64-joystick-gears

Why do N64 joysticks wear out? The answer is twofold. The bottom of the stick rides in a bowl and grinds the surface of the bowl away over time. That is the white powder you eventually see around the base of the joystick. As the bowl wears away, the joystick sinks lower into its assembly, and this causes the movement to feel sloppy. On top of that, the joystick slides inside slots to push gears around. The slots will eventually lose their shape causing joystick to have too much play.

Disassembly of the N64 controller is very easy. There are several Philips screws around the perimeter of the controller, plus two more screws in the expansion port. Once you are inside the controller, the next step is to move the trigger button from its home on the backside of the joystick assembly. Now, unplug the joystick from the main PCB and unscrew it from the shell. Finally, carefully remove the last screw from the joystick assembly. There is a spring inside the assembly pushing the joystick down into the bowl, and when the screw is released, pieces may go flying.

The inside of the joystick assembly may look complicated, but the mechanics are simple. As the joystick moves around, it pushes the gears, which turn optical encoder wheels. The optical encoders turn the analog movement into digital numbers used by the controller to determine how far the joystick has moved from its home position. This is the same technology used in older computer mice used. The 8-Bit Guy did a video on how mice work if you want to learn more.

Installing the new parts is straightforward. Remove the joystick, spring, and gears. Remove the old bowl. Transfer the optical wheels to the new bowl. Reverse the process to install the parts.

That’s it. Overall, I’m happy with these parts sold by Kitsch-Bent. At $1.15 for the bowl, $0.95 for the gearsets, and $1.05 for the thumbsticks, you can repair several joysticks for the same cost as one aftermarket replacement. Most repairs should only need new gears and maybe bowels. The longevity of the components is still unknown. I don’t play my Nintendo 64 daily as I did in 1996-1999, so I don’t expect the joysticks to wear out.

Have fun.
-Tony

Remove SCCM Old Computer Objects Based on SIDs

There are dozens of blog posts and instructions on how to remove computer objects from Configuration if the corresponding AD object no longer exists. I thought I would put my own spin on the idea since I haven’t seen it before. Many of the guides rely on matching the object’s names to each other. The problem you can run into with this method is reusing computer names. You can delete a computer in AD and add a new one with the same computer name. When Configuration Manager runs its next AD sync it will find the new AD computer object and add it to the inventory. Now Configuration Manager has two computer objects with the same name. As an administrator this can get confusing and if you try to clean up Configuration Manager based on name matching the old object won’t get removed.

Rather than match the objects on name you can use something more unique, like the SID. Configuration Manager capture the AD objects SID during the sync so you can use that to match objects and delete those that no longer exist. You can look at the code below or in github.

Find the PowerShell script at https://github.com/agizmo/SCCM_Computer_Removal_SID

$SiteCode = "<YOUR SITE CODE>" # Site code
$ProviderMachineName = "<YOUR CM SERVER>" # SMS Provider machine name

#Customizations
$initParams = @{}

#Import the ConfigurationManager.psd1 module
if((Get-Module ConfigurationManager) -eq $null) {
Import-Module "$($ENV:SMS_ADMIN_UI_PATH)..\ConfigurationManager.psd1" @initParams
}

#Connect to the site's drive if it is not already present
if((Get-PSDrive -Name $SiteCode -PSProvider CMSite -ErrorAction SilentlyContinue) -eq $null) {
New-PSDrive -Name $SiteCode -PSProvider CMSite -Root $ProviderMachineName @initParams
}

#Set the current location to be the site code.
Set-Location "$($SiteCode):\" @initParams

#As far as I can tell, this is the only way to get the SID for a computer object in SCCM. The prebuilt cmdlets will not return SID
$devices = Get-WmiObject -ComputerName $ProviderMachineName -Namespace "ROOT\SMS\Site_$SiteCode" -Class SMS_R_System
foreach ($device in $devices) {
try {
$sid = new-object System.Security.Principal.SecurityIdentifier($device.SID)
} catch {}
$ADcomputer = Get-ADComputer -Filter {SID -eq $sid} if ($ADcomputer) { #nothing } else { Remove-CMResource -ResourceId $device.ResourceId -Force } Remove-Variable sid Remove-Variable ADcomputer
}

Simple as that. Hope you found this article helpful. And play around with PowerShell. There is near infinite capabilities of the language.

Have fun.
-Tony

Finding Capacitors for PlayStation 1 Power Supply

I recently decided to replace the electrolytic capacitors in the power supply of my original PlayStation. This is preventative maintenance because over time the fluid from the capacitors can leak out and cause corrosion to solder pads and traces on PCBs. My Life in Gaming’s “Analog Frontiers Part 2” video details of the risk and challenges around keeping older hardware from destroying itself.

Where is a good place to find capacitors? Amazon, eBay, Mouser, Digikey, and Newark are all common places to purchase electronic components. But Console5.com has made a name for itself by selling complete capacitor kits for hundreds of consoles, computers, arcade boards, and more. They have become the first place to stop when looking for capacitors for older consoles.

In my case, I needed a kit for a ETXNY209A1B power supply from an SCPH-7501 model PlayStation. This PSU had the following electrolytic capacitors:

IdentificationCapacitanceVoltage
C003120 μF200V
C102560 μF25V
C103560 μF25V
C104220 μF25V
C105220 μF25V

Console5 did not have a specific kit for my power supply, but the detailed information in their wiki allowed me to find a kit that would work. The ETXNY169A1B PSU kit had the same capacitors plus an extra 1 μF capacitor my PSU did not need. With capacitors in hand, the next step was to heat the soldering iron and remove the old caps. More on that later.

Have Fun.
-Tony