I’m modding the Philips AZ5737 boombox from 2006 to support Bluetooth playback, it also need some repairs; the left speaker has no sound and the tape drive doesn’t move when pressing play button.
The CD/DVD player can’t read any discs either, not sure if it needs calibration. I did find two potentiometers which can be adjusted on the head assembly but more likely the laser diode is dead. Unfortunately the flat flex cable (FFC) to the CD player had some leads damaged when removing it, so I will skip repairing CD player for now until the FFC cable on order arrives.
I analyzed the missing speaker output by following schematics in the service manual while measuring the output and eventually figured out the problem was the volume potentiometer which read really high resistance for left audio channel.
The volume potentiometer labelled “B503” has six pins with support for left and right channel audio, both variable resistance for speakers and fixed resistance for audio output jack, and a ground pin. This pot turned out to be hard to get, I ordered from two different shops which sent me the wrong one with smaller foot print, despite showing the correct one in product photo (as seen above). On the third try from yet another shop I finally got the right pot but it had slightly longer shaft which turned out to be OK. Replacing the pot fixed the problem with left channel audio missing and both speakers now sounded fine.
The tape drive has never been used until now, so it’s generally in good shape, but over time the two rubber belts had dried up and were too loose which prevented the motor from turning the tape. I replaced the belts, cleaned the head with IPA, greased up the plastic gears and moving parts with silicon grease. After this the tape drive started working.
I ordered a cheap Bluetooth receiver board called “VHM 314”, it’s the small black board (PCB) seen on the right in image above wired up to the green mainboard on the left. While browsing the schematics in the service manual I found a suitable 5V and ground point for the Bluetooth board close to the connector for the CD player and the big switch selecting between CD/FM/AM/Tape had the right and left audio points for CD needed. After connecting the Bluetooth board the power LED lit up and it worked to connect with the phone to it via Bluetooth but no sound could be heard when playing music on the phone. I tried connecting headphones directly to the jack on the Bluetooth board and the music could be heard there so the problem was something related to left and right audio connections to mainboard.
After some head scratching and spending more time reading the schematics I found a mute circuit (“L-MUTE” on image above) which turns off the amplifier when no CD is playing which explains why I couldn’t hear anything, so I desoldered R724 (circled in red) in the path to disconnect the mute circuit and with amplifier running again there was sound from the Bluetooth board!
Besides the CD/DVD player (to be continued), the rest of the boombox is working fine and it now has Bluetooth support when “CD” operation is selected.
The floppy drive, an Epson SMD-1000, finally died in my HP 1660AS logic analyzer with oscilloscope.
No discs could be read, the drive head wasn’t moving.
I tried recapping after spotting two leaky electrolytic capacitors and greasing the mechanics with silicon grease, but no luck. I suspect one of the custom ICs controlling step motor have failed somehow, but haven’t analyzed much further after realizing some of the floppies with scope data were unreadable in another working floppy drive as well. I decided it was time to replace the floppy drive with a Gotek floppy emulator, so ordered one online via AliExpress.
I installed the Gotek drive and rewired it for the custom Shugart interface using short jumper wires.
The HP 1660AS provides power 5V and ground via the 34 pin IDC connector and doesn’t have the same pinout as a standard PC floppy drive when comparing with the service manual (see image above). After testing a lot, what finally ended up working was connecting pin 2 “Disk Change” from scope to pin 34 on Gotek side, then grounding pin 34 on scope side, and the only jumper installed on the Gotek is “S1”. The rest of the pins were connected to the corresponding PC floppy pins signal wise. Note that this Gotek drive has the original stock firmware.
Finally it works, nice to have 1000 floppies on the USB stick. TIP: In order to initially format the USB stick with Gotek stock firmware to get 1000 floppies as raw sectors, hold down both buttons while powering on the drive, once the counter starts you can release the buttons. In Linux you can mount the USB stick using this bash shell script:
usbfd
#!/bin/bash
# usbfd; A utility script to manage multiple floppy images on a single USB stick
# Tested on a GOTEK 1000 floppy model
# v. 0.91 Dennis Meulensteen 2013 dennis@meulensteen.nl -
# This is unsupported software because I don't have the time to provide support
#
#This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the included
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#Some variables with default values
TASK="none"
DEVICE="/dev/sda1"
DEVICEDEFAULT=1
OFFSET=1572864
# Must be root for mounting, so check
if [[ $EUID-ne0 ]]; then
echo"You must be root to do this."1>&2
exit100
fi
#handle the options first
while getopts "fmuUld:o:" flag; do
# echo "$flag" $OPTIND $OPTARG
#in order of ascending innocence so innocent options override dangerous ones if someone decides to throw the alphabet at us
echo" -f format one or more floppy images (for a minimum of security you must also provide -d [DEVICE])"
echo" -l to list mounted images"
echo" -m to mount one or many images"
echo" up to $(ls -1 /dev/loop? | wc -l) floppy images can be mounted."
echo" -u to unmount one or many images"
echo" if -m or u are used you must provide at least one number between 0 and 999 to mount the respective image(s)."
echo" -U to unmount all mounted images at once"
echo
echo" -d DEVICE to set the device your USB stick is at ($DEVICE)"
echo" the choices are "$(ls /dev/sd?)
echo" -o NUMBER Provides an offset that corresponds to the distance between the images in bytes ($OFFSET)"
echo
echo"OPERANDS are one or many space seperated whole numers or ranges {N..M} corresponding to images on your USB stick"
echo" example of mounting: #usbfd -md $DEVICE {0..9} 12 18"
echo" {N..M} indicates a range of floppy images to operate on, -f and -u also take ranges."
;;
:)
echo"Missing argument for $OPTARG"
;;
esac
done
#gets rid of all the complicated switches and their parameters, leaving just the arguments
shift $(($OPTIND - 1))
case "$TASK"in
"Format")
FNAME=$(mktemp)
rm$FNAME
if [ $DEVICEDEFAULT==1 ]
then
echo"Formatting is dangerous! You must explicitly provide a device (-d)"
exit-1
fi
for NUM in"$@"
do
FLOP=$(printf %03d ${NUM%})
# Check the given file exists #
if [ -d"/media/usbfd$FLOP" ]
then
echo"usbfd$FLOP is already mounted, try -u first"
else
mkfs.msdos -vC$FNAME-n FDISK$FLOP1440|grep volume #using mkfs repeatedly because of the random volume ids and labels
let MYOFFSET=$OFFSET/512*$NUM
err=$(dd if=$FNAME of=$DEVICE seek=$MYOFFSET bs=512c count=36 conv=noerror &> /dev/null) || echo"Format failed on disk $FLOP"#only copy what we need
rm$FNAME
fi
done
;;
# mount
"Mount")
for NUM in"$@"
do
FLOP=$(printf %03d ${NUM%})
# Check the given file exists #
if [ -d"/media/usbfd$FLOP" ]
then
echo"usbfd$FLOP is already mounted, try -u first"
else
mkdir /media/usbfd$FLOP
let MYOFFSET=$OFFSET*$NUM
mount -o loop,offset=$MYOFFSET,sizelimit=$OFFSET,users,rw,umask=000-t msdos $DEVICE /media/usbfd$FLOP || rmdir /media/usbfd$FLOP
fi
done
;;
# unmount
"UnMount")
for NUM in"$@"
do
FLOP=$(printf %03d ${NUM%})
if [ -d"/media/usbfd$FLOP" ]
then
umount /media/usbfd$FLOP
rmdir /media/usbfd$FLOP
else
echo"usbfd$FLOP was not mounted."
fi
done
;;
# unmount all the usbfd... mounts
"UnmountAll")
for dir in /media/usbfd*/
do
dir=${dir%*/}
if [ -d$dir ]
then
umount /media/${dir##*/}
rmdir /media/${dir##*/}
fi
done
;;
"List")
for dir in /media/usbfd*/
do
dir=${dir%*/}
if [ -d$dir ]
then
echo"Mounted: $dir"
fi
done
;;
esac
Note: There are some changes I made to this script in order to make it work on modern Linux distributions which are not in the GitHub repo of the original author. Here are example commands (device might differ, depends on your system):
# mount gotek floppies
sudo usbfd -d /dev/sde1 -m222324
# unmount gotek floppies
sudo usbfd -d /dev/sde1 -u222324
The first example will mount floppy disk 22, 23 and 24 on your USB stick, and the second one will unmount the same disks.
I got this idea to start burning discs again for archiving purposes because hard drive and SSD prices are really high at the moment while the price for BD-R and BD-R DL media is pretty low. This turned out to be quite the adventure with coasters (failed discs) and deep analysis until success in the end.
First I bought an LG BU40N ultra slim Blu-ray writer in an USB 3.0 enclosure via AliExpress, although the specific drive wasn’t mentioned in product description at the time of purchase the user reviews hinted it would be an LG BU40N or similar LG drive. My purpose with the drive is to burn discs, but most of the users posting reviews happily comment that the drive works for ripping Blu-ray movies with ‘makemkv’, at the time I didn’t think much of it assuming it would be fine for burning discs as well.
What I ended up receiving was a refurbished (but sold as “new”) LG BU40N drive manufactured in 2017 which ended up with roughly 50% coasters (failed burns) when writing Ritek BD-R DL media, and later 100% coasters when writing Verbatim BD-R DL imported straight from Japan (media descriptor; “VERBAT/IMf/0 , Mitsubishi Kagaku Media Co.”). Yes, good quality media actually fails completely in this drive. What did work from the beginning was burning BD-RE DL (rewritable) media which is written in a different way compared to BD-R DL (write once).
I tried different writing speeds and different burning software under Linux like ‘cdrskin’, ‘xorriso’, ‘growisofs’ and even ImgBurn (using Wine), also tried powering the drive using external power supply via USB hub and later natively using SATA connectors directly to rule out power related problems completely, but nothing improved the situation. The drive kept giving “SCSI error condition on command 53h RESERVE TRACK: [3 72 00] Medium error” when writing lead in track on BD-R DL media, sometimes also error during lead out the few times it reached that far. After thinking the problem could be firmware related, the LG BU40N drive came shipped with firmware “FR07”, perhaps a newer firmware would work better, so I flashed the “LibreDrive” firmware v1.03 for LG BU40N recommended by the ‘makemkv’ community, but that didn’t make any difference either, still error when writing BD-R DL discs.
When doing ‘lsusb’ command in Linux I noticed the USB 3.0 enclosure for the drive reported as “JMS583 PCIe/NVMe bridge” which is intended to be used as SATA translation for SSDs but the chipset in the enclosure on the board was JMS578 according to the chip label. Aha! Perhaps the factory in china flashed the wrong JMS firmware which doesn’t support a full set of SATA commands required for an optical drive which results in the SCSI error I was seeing. I went ahead and flashed “JMS578 SATA 6Gb/s” pure bridge firmware which support optical drives, it was difficult to flash since I had to put the JMS578 in recovery mode by grounding pin #2 on the flash chip for one second during power on, and also had to modify the golang flash source code I found on GitHub to support the Zetta flash used in the enclosure. After a several failed attempts I finally managed to flash the JMS578 with proper firmware but the SCSI error when writing discs remained unfortunately.
I disassembled the LG BU40N drive to see if there was some way to calibrate the Blu-ray laser head, but couldn’t find any small potentiometers which is how optical drives could be calibrated back in the day. While checking around on the drive controller board/PCB I noticed that the MediaTek MT1959 chipset was used, so the calibration is probably done at factory through programming somehow, that’s when I spotted solder points marked ‘UTXD’ and ‘URXD’ on silkscreen. Great, so there is an UART there for the MediaTek chip, curious I soldered 30AWG wires to the points and a FT232 to USB level shifter serial board.
After verifying signal voltage levels using an oscilloscope and testing different serial settings in ‘minicom’ I settled for 115200 baud and “8N1” which seems correct, unfortunately it’s a proprietary binary log/protocol of sorts with a few ASCII strings confirming the baud rate was correct. I managed to find two recurring hex bytes which seemed to be some sort of “end of line” sequence, not sure. I wrote a short Python program to handle the input on the bash command line (one-liner with tabs and line feeds):
python3 -u-c"
import sys
buffer = ''
while True:
byte_data = sys.stdin.buffer.read(1)
if not byte_data: break
byte_val = byte_data[0]
hex_pair = f'{byte_val:02x}'
buffer += hex_pair
print(hex_pair, end=' ', flush=True)
if buffer.endswith('aa1c'):
print('', flush=True)
buffer = ''
" < /dev/ttyUSB0 | ts '[%Y-%m-%d %H:%M:%.S]' | tee mediatek.log
The output then looked like this, a few sample lines:
[2026-07-06 00:34:06.154630] e3 33 7a aa 1c
[2026-07-06 00:34:06.250159] e4 19 69 2a b0 1b e5 19 72 9a 01 cb 1a e3 2d cc aa 1c
[2026-07-06 00:34:06.282073] e4 2d ce 2a 0c 1b e3 2d d1 aa 1c
I couldn’t find much info about the binary UART protocol/log used by MediaTek, so pasted the logs from a failed burn and successful one into an GenAI prompt and it managed to identify what was going on, but can’t be completely sure if the AI hallucinated or not. The gist of the errors during the failed burn is that the Automatic Gain Control (AGC) and Focus Coil Lens Actuator Driver DAC failed to get reflection after several retries most likely due to fading laser diode. This is why I assume the drive is refurbished rather than “new old stock”. If someone ordered this for the sole purpose of ripping Blu-ray movies they would probably be happy with it, but not me who needs it mainly to burn discs.
While searching around on AliExpress I managed to find a cheap 9.5mm ultra slim Panasonic (Matshita) BD-MLT UJ272 drive which would fit in the USB 3.0 enclosure I have and is recommended for being good at writing while compatible with a lot of media. The drive was most likely cheap because you can’t rip Blu-ray movies using ‘makemkv’ with it which seems to be what a majority of the market wants these days. After a couple of weeks the Panasonic UJ272 arrived, I replaced the LG BU40N with it in the USB 3.0 enclosure and started testing, so far every disc I throw at it works perfect, not a single coaster since. Another benefit is that this Panasonic drive when used with ‘k3b’ (‘cdrskin’) doesn’t need to eject the drive before verify, it handles it without ejecting. For my archive purposes I now use Verbatim BD-R DL with media descriptor “VERBAT/IMf/0” (dual layer 50gb) and Ritek BD-R Pro with media descriptor “RITEK/BR3/0” (single layer 25gb). These disc types are currently the sweet spot regarding pricing, BD-R XL is still relatively expensive per gigabyte. For frequent temporary backups I use Verbatim BD-RE DL (dual layer 50gb).
I recently bought a Tang Nano 20k development board from Sipeed. The hardware worked out of the box but I had some software problems with the IDE initially. Programming using the built-in Gowin programmer has been working fine so far (which seems to be common problem). I’m using Xubuntu 24.04.4 LTS (which is basically a slimmed down Ubuntu 24.04.4 LTS running with Xorg and XFCE) on a PC.
After downloading ‘Gowin_V1.9.11.03_Education_Linux.tar.gz’ from gowinsemi.com (requires registering), I unpacked the files into ‘/opt/gowin’ (any directory you create is fine), and tried to run it, but got library version errors and core dumps. In order to fix the problem I created a script called ‘gowin_ide.sh’ to launch ‘gw_ide’:
#!/bin/bash
cd /opt/gowin/IDE/bin
exportLD_LIBRARY_PATH=/opt/gowin/IDE/lib
./gw_ide
This will make sure the IDE uses its own libraries first (before system) and sub processes launched from the GUI also finds them. There was still a library error where it complains about undefined symbols in “libfontconfig”, this needed a separate fix:
rm /opt/gowin/IDE/lib/libfreetype.so.6
Now finally ‘gw_ide’ launches, and also the tools from within the GUI.
This worked for the most part, just had to change the “IO Type” voltages to “LVCMOS33” in the FloorPlanner part, more info about in that comments of that article.
I modified the example LED blink design a bit, added another counter LED blink and a Verilog testbench (even though a testbench might be overkill in this case), mostly to figure out how to run a simulation with this toolchain because I didn’t feel like using DSim from Altair (requires registration) which is linked in the GUI.
Here is the modified ‘led.v’ example:
`timescale1ns/1ps
moduleled(
inputwireClock,
outputwireLED1,
outputwireLED5
);
/********** Counters **********/
//parameter Clock_frequency = 27_000_000; // Crystal oscillator frequency is 27Mhz
`ifdefSIM_COUNT_OVERRIDE
parameterLED1_value=`SIM_COUNT_OVERRIDE;
parameterLED5_value=`SIM_COUNT_OVERRIDE;
`else
parameterLED1_value=13_499_999; // The number of times needed to time 0.5s
parameterLED5_value=1_349_999; // This currently acts like a slow clock for GAO at 0.05s
`endif
reg[23:0]LED1_value_reg=24'b0; // counter value
regLED1_value_flag=1'b0; // IO change flag
always @(posedgeClock)begin
if(LED1_value_reg <=LED1_value)begin// not count to 0.5s
The trace can be found in current directory after simulation run, I load it like this to view:
gtkwave waveform.fst
After playing around with the Gowin Analyzer Oscilloscope (GAO) for a while which is a tool included in the GUI, it seems very powerful (reminds me of Xilinx ChipScope), more info in the user guide.
I hope this info helps to get started, let me know if you have any questions or want to share your own tips.
I had intermittent problems powering on the Super Nintendo, it would just black screen screen sometimes, turns out the electrolytic capacitors were bad. The yellow wires and PIC chip as seen on board is my SuperCIC install giving NTSC 60Hz and PAL 50Hz switchable using reset button, that modification is not related to this repair. There were no visible leaks from the electrolytic capacitors but several of them measured bad using the ESR meter so it was high time to recap.
I ordered a Super Nintendo PAL Capacitor Kit from Retro Upgrades via eBay, they shipped fast and also included a new voltage regulator which was nice. There are some good capacitors on the board, but I replace all of them since those are likely to go bad soon as well.
I like to use the “push down and turn” method using pliers to remove SMD type capacitors, some prefer using SMD rework station to desolder with hot air. In my experience bad capacitors sometimes explode when using hot air which can damage traces and be dangerous due to metal shrapnel flying around, so that’s the main reason I prefer using pliers. Besides, leaky caps sometimes smells like raw fish, especially when heated up (and exploding), so not recommended.
After removing all capacitors by turning in one direction while pushing down towards the board until the capacitor is removed it’s time to get rid of the broken off legs still soldered on the pads.
After removing the leg remnants with the soldering iron I add some flux and a touch of solder for each pad, and then clean up the board with IPA (Isopropyl Alcohol) to remove flux residue using cotton swabs (cotton buds) to make it clean before soldering the new capacitors in place.
The new capacitors are installed, along with the voltage regulator. I added an extra 470µF 16V capacitor hooked up to ground and output of the voltage regulator to fix the potential vertical line issue, not sure if it really was an issue on this console but cleaning up the power rail voltage is probably good anyway.
My son has been playing Forza Horizon 6 on the PC. He plays it with a PS4 controller, so I modified one to include a 10k pot (potentiometer) as steering wheel replacing the left analog stick to improve steering.
PS4 controller disassembled
I’m using a 10k pot which roughly matches the X axis of the analog stick. The wired resistors as seen on the board is an old modification to fix stick drift.
Board with left stick desoldered
The hardest part of this was desoldering the left analog stick, had to add leaded solder first to make it easier.
Pot replacing left stick
The pot is replacing the cavity where the left analog stick used to be. I cut off the plastic top case for the left stick and drilled a hole to fit the pot, then glued it into place with epoxy.
Pot wired up
The pot is soldered in where the X axis of the left analog stick used to be, also added two 4.7k resistors to emulate a centered Y axis stick.
First prototype
This is the result; first prototype. My son has been testing the it for a while now and likes the improved control, but he wants a bigger knob for the pot so I will fix that.
Another excellent tutorial by snaker, this time how to fix the GDEMU making the Dreamcast 12V regulator too hot and an RTC mod which replaces the CR2032 battery with a rechargeable 18650 lithium-ion cell.
snaker has posted a complete hardware and firmware tutorial in the forums.
This document describes, in full technical detail, the complete process required to make a Sega Master System 2 work reliably with an EverDrive, a Mega Drive controller and the Light Phaser, without manual power cycling, without unreliable soft resets and without electrical side effects. This is not a simple mod, but a tightly coupled hardware and firmware project built on top of SMS++.
Another adventure with my Amiga 1200, recently when booting I was met with a green solid color boot screen instead of loading AmigaOS 3.1 (workbench) as expected. According to boot error color codes that’s most likely bad chip RAM (the first 2MB of RAM shared with custom chips). I burned Diagrom v1.3 on EPROMs using the MiniPro TL866A programmer and installed those in the motherboard ROM sockets. Diagrom outputs diagnostics via serial port (9600 baud 8n1) on the A1200 which I connected to the COM port on my PC running Linux, the output from Diagrom confirmed that the chip RAM was bad.
The Amiga 1200 motherboard
The chip RAM consists of the four chips located close to the center (upper) part of the motherboard, the two ROM sockets are below. Here’s a close up photo of the area with the RAM chips.
Amiga 1200 chip RAM
Amazingly I managed to find the same RAM chips KM416C256BJ-7 sold on eBay, so bought five of them which arrived a week later. These chips are in a SOJ package, directly soldered onto the motherboard, so I used my SMD rework station to desolder the suspected bad chip using hot air, then cleaned up, and added solder.
One chip removed
I soldered in a new chip, but this was apparently the wrong chip, RAM test still failed, but instead of switching back I just replaced one by one until three chips were replaced and I ended up with address line errors in the Diagrom output. This was turning into a nightmare, and I started to doubt the “new” chips were working.
After going over the schematics again I figured out a way to cross check by measuring zero Ohm (connection) on the data lines and address lines between RAM chips using a multimeter, this made me discover several bad solder joints so had to apply more flux and reheat the chips as needed several times before the solder joints were solid. Admittedly I’m a rookie with the SMD rework station (hot air), much prefer the soldering iron, but things started to improve after upping the temp to 380C.
The Diagrom chip RAM test finally went through OK, so I happily assembled the A1200, put the original ROMs back and AmigaOS (workbench) booted fine, but only 1MB of chip RAM was detected. Frustrated, after looking at the schematics again I noticed that the A1200 3.1 ROM will boot (pass tests) even if only 1MB chip RAM is detected (U16 and U17 required, U18 and U19 optional).
I disassembled the A1200 once more and started measuring the data and address lines on the motherboard, all seemed OK. After some head scratching I decided to measure all pins (not just address and data lines), and found out that on U19, one of the RAM chips, the UCAS line (“Upper Column Address Strobe”, pin 28) was not connecting to the board. After soldering pin 28 on U19 manually using my iron the full 2MB chip RAM was detected, and passing all tests. The repair was finally over.
In quantum mechanics a particle without interaction is not part of the spacetime continuum; this is how I think about superposition, in my mind it’s “noposition”.
You must be logged in to post a comment.