Repairing ZX Spectrum +2A tape deck

On ZX Spectrum +2A I have a tape deck was not working. Well actually it was working, but games were not loading as it seemed like the signal was missing. I will not go into details of disassembling ZX Spectrum +2 as it is pretty obvious. You get access to PCB of tape dec right away, to turn it around You have to unscrew couple of screws and that is all.

Without any deeper investigation after disassembly I decided to do couple of things right away:

  • replace all electrolytic capacitors with new ones,
  • replace HA17324 operation amplifier with LM324

But unfortunately and to my surprise, after this hassle nothing changed, still the same issue.

Then I noticed that something wrong with the powering on the board and it seems like the ground was missing.

After some further investigation, I have found that ground on the board was delivered by two bold that was holding the board, as the board was removed, there was no ground in one part of the board. And maybe due to oxidation or something like that ground initially was an issue. I have inserted back HA17324, added a jumper between grounds just to be sure and it seems problems were solved.

So here You go, if You have ZX Spectrum +2 tape working but no signal, check ground first.


Repairing ZX Spectrum +2A, composite video mod

I have purchased ZX Spectrum +2A to my collection and as with +3 decided to add a composite video out.

First what I did I made this RGB mod to get s-video out, by:

1. Removing the 12V from pin 1 by removing resistor R44 (should be the same for +2A, +2B and +3, and very close to the RGB connector).
2. Adding this circuit

zx spectrum +3 composite video mod

Also detached audio from video by removing C24 and shorting from R46 to R56:

I got the video out and it seemed ok at first, but when doing self-tests the result was a washout picture:

ZX Spectrum +2A/+3 Schematic:


ZX Spectrum 128K video fixes and video cables:

ZX Spectrum 128K video fixes and video cables

Some useful links:

ZX Spectrum 128k +2 repairs

Removing Blue/Yellow Ghosting from the 128/+2’s Video Output





Prolink nVidia GeForce4 MX440 64MB AGP 8X VGA Card


Hardware Specification

Graphics Engine NVIDIA GeForce4 MX440-8X GPU
Model Number MVGA-NVG18AM
(w/64M,TV, DVI)
Video Memory 64MB DDR Memory 128MB DDR Memory
Effective Core Clock 250MHz 280MHz 280MHz
Memory Clock 420MHz 520MHz 520MHz
TV-Out Resolution 1024 x 768
Bus standard AGP 8X
Refresh Rate 60-240 Hz
TV-Out support
DVI Support (only for w/DVI model)
Video-In Support (only for w/VIO model)


3dfx Voodoo3 2000 AGP (`99)

3dfx Voodoo3 1999


From 3dfx Interactive, the architect of the 3D revolution, comes a new dimension of high-resolution gaming. A snap to install, the Voodoo3 2000 AGP replaces tired, old 2D cards in just a matter of minutes. Fusing the world’s fastest 2D with a dual 32-bit pipeline, the Voodoo3 2000 AGP pumps out over 100 billion operations per second to bring you resolutions as high as 2046×1536 and speeds of up to 60 frames per second. Generating 6 million triangles per second to bring to life 500 of the hottest titles, the Voodoo3

2000 AGP’s Patented Single pass, Single Cycle, Multi-Texturing delivers the brilliant color and amazing clarity that has made it the standard in PC entertainment.


 Product Features

  • 128-bit 2D, 3D and video accelerator
  • Voodoo3 graphics processor
  • 16MB high-speed SDRAM memory
  • AGP 2x
  • MPEG-1, 2 playback
  • 300MHz RAMDAC
  • 143 Megapixels/second
  • 286 Megatexels per second peak fill rate
  • 6 Million polygons per second peak processing
  • 2.29 GB per second peak bandwidth
  • Patented Single-pass multi-texturing

 Other Features

  • Supports resolutions up to 2048×1536
  • DVD Hardware Assist
  • Supports DirectX, Glide and OpenGL
  • Alpha-Blending
  • Single Pass, Single Cycle Bump Mapping
  • Single Pass, Single Cycle Trilinear MIP-Mapping
  • Programable Fog Tables
  • Sub-Pixel and Sub-Texel Correction
  • Gouraud Shading

LCR-T4 transistor tester original firmware

Bought cheap transistor tester from eBay and currently experimenting with firmware updates.

I was able to program it with this version of Markus transistor tester firmware:

To build, use a WinAVR programmers notepad, open Makefile and select Tools->Make all.

At first, was getting weir errors, but after adding msys-1.0.dll to \WinAVR-20100110\utils\bin everything built ok.

Before doing firmware experiments, I have made backup of original firmware, if somebody needs it, you can download it here:




I tried to reflash original firmware and it worked fine.

For programming I use my MiniPro programmer.

Modify Arduino 5v relay module to work from 3.3v

I am implementing a power-off function for my Ender 3 using OctoPi. For that, I need a relay and I happened to have one.

Relay module I had
Relay module I had

Unfortunately, after connection relay to Raspberry Pi GPIO pin, the relay was always on and not listening to any commands from OctoPi.

It appears this module was designed for 5v logic levels and Raspberry Pi works with 3.3v logic levels.

After investigating relay one can see that its circuit is:

Original schematics of relay module
Original schematics of relay module

For JC817C forward voltage Vf=1.2V and forward current If=20mA

For Raspberry Pi output high (when VDD is 3.3V) is VO=2.3V 17mA

So, it seems that the output of Raspberry Pi is not enough to drive JC817C.

To solve this I decided to remove optocoupler from the module and connect the input pin directly to Q1 transistors base.

Modified relay module
Modified relay module
Relay module with optocoupler replaced by resistor
Relay module with optocoupler replaced by a resistor

To connect the output pin to a transistor you should limit output to appropriate current. You can do that by choosing the appropriate resistor value.

I calculated it like that.

From S8050 (J3Y) transistors datasheet:  DC current gain hfe ~ 120

From relay datasheet: Rrelay=70Ohm Vrelay=5V so calculated Irelay=Vrelay/Rrelay=5/70=71mA

Let’s choose Ic=100mA

To turn it on, we must have ~ Ib=Ic/120=100mA/120=833uA ~800uA

Vbe usually is ~0.7V

R9 voltage would be Vr9=Vinput-Vbe=3.3V-0.7V=2.6V


So I chose 3K resistor.



Learning the Art of Electronics, Week 2


Ok, I  form a simple low pass filter using unknown RC values.

Then I measure time constant using scope and 500Hz square wave. Time constant is a time it takes for a voltage to reach ~63% of its total value.

Measured time constant using RIGOL DS1054z is 0.268ms

( measured using manual cursors: I set Percent for Vert. Units, then Set range of the wave with vertical cursors and then measure time to rise to ~63% (bx-by) )

Measured time constant using Tektronix 2221A is 0.270ms

( I position the wave from 0 to 100% and then using cursors get ▲T for ▲V to reach 63.2% )

t = RC

Now I need to find R. And task is to measure R without removing C.

We can do that by imagining that RC is just R, but we have to eliminate XC. We can do that by increasing frequency unti we get no phase shift. The higher the frequency the less XC there is. We can see that XC is not effective anymore when we see no more phase shift.

I add a known 1K resistor in front of RC filter.

Apply sine wave and increase frequency to such that there is not phase shift – it means we are now observing R and not Xc ( Xc ~ 0 ).

In scope I see input 5.12v and output 4.12v.

Using Ohms law: we loose 1V on R1 so current is 0.001A.

Knowing the current I calculate R2 and it is R2=Vout/I=4/0.001=4K

So R2 is ~4k

0.270ms = 4k x C

C = t / R = 0.270ms / 4k ~ 68nF

Actual values were 3.7K resistor and 683 capacitor (68nF).

2L1.2 Differentiator

Yellow input, blue output. Differentiator shows rate of change. We can examine it by applying sine, square and triangular waves to the input.

Especially it is seen by applying square wave. On rising edge or falling edge rate of change is very high.

On triangular wave rate of change is constant, just different directions so on the output we get square wave.

Its a high pass filter, so at f=0 impedance should be infinite, and at infinite f there should be no impedance, or impedance should be minimal.

2L1.3 Integrator

2L2 Frequency domain view

2L2.1 Low pass filter

I made such low pass filter:

By changing frequancy I found when the output voltage is attenuated by 3db i.e. is 0.7 of its original value. That frequency was 160Hz

Calculation confirms that f3db = 1 / (2×π×10k×0.1uF) = 159Hz

Result at 10 x f3db

Result at 20 x f3db:

Result at 2 x f3db:

Result at 4 x f3db:

Voltage vs f, the higher frequency the bigger attenuation.

2L2.2 High pass filter

f3db should be the same: f3db = 1 / (2×π×10k×0.1uF) = 159Hz

Rendered by