10

I had my first programming experience in the late 80s / early 90s on a Schneider (Amstrad) CPC 464 in Basic.

I remember that when a program was running, depending on the current workload of the processor you could hear a faint buzzing sound from the integrated speakers.

Especially when an empty for loop was running (like for i = 1 to 500 : next) which was regularly used to get short waiting times (as there was no sleep command IIRC), you could hear this buzzing which gradually changed its frequency during the loop.

My question is: Was this a feature (as an audible feedback that the computer was working) or a consequence from insufficient decoupling of circuits?

  • 4
    True story, I was writing some 3D graphics code on Sinclair PC200, and could hear the loop skipping triangles or processing them. That guided my optimization efforts for a more efficient hash. – void_ptr Apr 9 at 22:15
  • 4
    @void_ptr On my (comparatively) modern laptop, I can tell the difference between scrolling up and down on a page, creating a tarball vs creating a compressed tarball, and encrypting with AES128 vs AES256, entirely by the sound it makes. From an information security perspective, this is a nightmare... – forest Apr 9 at 23:09
  • 1
    @void_ptr - the real trick is to be able to smell the triangles. :-) – Bob Jarvis Apr 10 at 2:24
11

There seems to be a slight misunderstanding: The CPU in a computer is (almost) never doing nothing (excluding power save states which was largely unknown at times the Amstrad was en vogue). So there's no such thing as "workload of a processor" going up or down - The CPU in an Amstrad is constantly running at 4 MHz, constantly under the same workload. If there's nothing do do, like executing a BASIC program), the CPU is, well, busy idling around at the same speed with the same "workload".

What you possibly can hear, however, is the CPU repeatedly doing the same thing, like operating in tight loops that can, through electrical or mechanical interference (with the monitor or audio signal, for example), create audible frequencies that you may hear. That was definitely not an intended feature.

Operators of mainframes sometimes could hear whether their machines were running properly (or had crashed) by listening to the interference noise they produced, sometimes even tried to amplify the noise. (See this book, page 161ff)

You were experiencing some similar effect.

Today, the sound of historic computers operating can even be marketed as art.

  • 7
    ...or, by placing a cheap AM radio near the CPU. I knew a guy in college who programmed his Altair 8800 to play recognizable tunes through a nearby AM radio. Computers back in the day did not exactly comply with FCC regulations. – Solomon Slow Apr 9 at 19:19
  • 1
    "Workload" certainly is meaningful, even in the days of the Amstrad. If you're just executing a sequence of nops, that means a whole lot of CPU circuits are sitting there idle, not drawing significant power. (An empty loop in BASIC is very much not a case of the CPU being idle, though.) – Mark Apr 9 at 21:01
  • Even if that is not a "normal" use case, I pretty much doubt a Z80 on NOPs draws significantly less current than when executing any other instruction. Have you got proof of that? Pretty much the only circuit not required for NOPs is the ALU - And my guess would be that is not responsible for the most significant power consumption. A Z80 in HALT state might have a measurable difference in current draw, but most probably NOPs will not lower that. – tofro Apr 9 at 21:25
  • 2
    Even a halted Z80 will run through the refresh cycle, so it's still doing something. Most likely it's only going to be certain instruction patterns that cause a resonance in an audible range, and I'd suspect that the traces on the board act as the transmitters rather than the CPU itself. – Matthew Barber Apr 9 at 22:58
5

What you possibly can hear, however, is the CPU repeatedly doing the same thing, like operating in tight loops that can, through electrical or mechanical interference (with the monitor or audio signal, for example), create audible frequencies that you may hear. That was definitely not an intended feature. - tofro

In addition to what tofro has answered, I'd like to point out that some types of interference is a result from multiple activities and/or subsystems in a computer, but others may have a direct correlation to a simple operation of the machine, such as running a special sequence of instructions or toggling the data inside in RAM.

In some cases, the nature of this interference can be completely understood by the programmer, and renders it controllable. This possibility was well-known back to the era of mainframes and minicomputers, and I'd like to give several examples.

  1. Here's the video of a 1971 DEC LAB-8/e minicomputer playing music. The music is generated by generating noise induced into an AM radio receiver near the CPU.

  2. Later, it was rediscovered by the members of the Homebrew Computer Club on the Altair 8800. Quote What the Dormouse Said: How the 60s Counterculture Shaped the Personal Computer.

    Dompier started again, and this time he succeeded. Previously he had discovered that the unshielded computer could be programmed to generate tones by interfering with a transistor radio. He spent hours figuring out how to create a musical scale. Then he used the radio as an output device for the computer. At the Homebrew meeting lightning struck when, unexpectedly, strains from the Beatles' "Fool on the Hill" emerged. When the song ended, the crowd crammed into the room jumped to their feet offering thunderous applause. After the audience calmed down, the song was repeated and then, foreshadowing a world of vastly more powerful computers, the Altair broke into a rendition of "Daisy," raising the specter of the almost conscious HAL from the movie 2001: A Space Odyssey. For the first time there was a computer that you could build yourself that actually did something! Felsenstein eventually calmed the crowd down and noted, "Okay, there is music, but we're not exactly changing the world." Nobody cared. Everyone wanted to hear it again, and so Dompier hit the button, and the music started all over again. When it ended, he received another round of applause.

  3. The same technique was again repopularized and reimplemented by various projects. For example, compile and run this program using a 2015 model MacBook Air. Then use a Sony STR-K670P radio receiver with the included antenna and tune it to 1580 kHz on AM You should hear the "Mary Had a Little Lamb" tune playing repeatedly. The actual emissions are caused by the _mm_stream_si128 instruction that writes through to a memory address.

  4. The above examples all exploited radio-frequency interference. But mechanical noise is also exploitable in some cases. For example, this program can generate a faint musical tones (Imperial March, but easily modifiable) from the coil whine of a Thinkpad T550 by rapidly changing the Intel CPU P-state, thus stressing the power supply and induces a coil whine with controllable frequency. I've personally tested it on other "classical" Thinkpads, such as Thinkpad X200 and Thinkpad X220, and it also works.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.