Files
ioccc/2006/grothe
Landon Curt Noll 0833c3e4f0 fix how bin tools sort
We set LC_ALL=C when sorting in a bin tool.  This was done
to make the result of using `sort(1)` consistent.

Improved how the Primary files and Secondary files are
sorted by `bin/output-index-inventory.sh` to sort
with "-u -k 1n -k 3.2d".

The above will change `index.html` files for all entries.

Changed `bin/chk-entry.sh` VERSION from "1.1.2 2024-03-17"
to "1.1.3 2024-03-18".

Changed `bin/gen-authors.sh` VERSION from "1.3 2024-03-04"
to "1.3.1 2024-03-18".

Changed `bin/gen-location.sh` VERSION from "1.1 2024-03-04"
to "1.1.1 2024-03-18".

Changed `bin/gen-sitemap.sh` VERSION from "1.3 2024-03-16"
to "1.3.1 2024-03-18".

Changed `bin/output-index-inventory.sh` VERSION from "1.2 2024-02-27"
to "1.2.1 2024-03-18".

Changed `bin/pandoc-wrapper.sh` VERSION from "1.5 2024-03-18"
to "1.5.1 2024-03-18".

Changed `bin/sort.gitignore.sh` VERSION from "1.1.1 2024-02-23"
to "1.1.2 2024-03-18".

Changed `bin/tar-all.sh` VERSION from "1.1 2024-02-27"
to "1.1.1 2024-03-18".

Changed `bin/tar-year.sh` VERSION from "1.1 2024-02-27"
to "1.1.1 2024-03-18".

Performed `make www` to update all entry `index.html` files.
2024-03-18 02:43:03 -07:00
..
2024-02-27 23:21:32 -08:00
2020-12-30 16:57:03 -08:00
2020-12-30 16:57:03 -08:00
2023-07-06 21:49:38 -07:00
2024-03-18 02:43:03 -07:00
2023-11-24 13:14:54 -08:00
2024-01-22 08:42:12 -08:00
2020-12-30 16:57:03 -08:00
2020-12-30 16:57:03 -08:00

To build:

make

To use:

./grothe carrier_freq pixelclock horizontal_total < some_input.txt

Try:

Put on your "electronic ears" and then try:

./try.sh

You may find using a tunable scanning electronic ear helps.

Judges' remarks:

Most of the time, interference is annoying. This entry is the exception that proves the rule. What is a bug to some is a feature to this entry. :-)

Author's remarks:

The program draws patterns on the screen that can be picked up by a shortwave radio. It emulates the frequencies for an old fashion touch tone phone, so old songs can be played by hitting 0-9,#, and *.

To be able to run the program you need to determine the following parameters:

carrier_freq     - base frequency used to host music
pixelclock       - refresh rate of the monitor
horizontal_total - total scan along the horizontal axis

If you have xvidtune installed you can get the pixelclock and horizontal_total with the following command

xvidtune -show | head -n 1 | awk '{ print "pixelclock " $2 * 1000000 " horizontal_total = " $6 }'

Example from my laptops:

./grothe 65000000 10000000 1344 < twinkle.txt

Even if the user gets a setting off, the sound will usually be able to be heard on AM at a multiple of the original frequency.

The core idea of using a machine to play music on AM radio goes all the way back to the Altair computers and Timex Sinclair ZX-81s.

Several example songs

Olympics Fanfare - from antang@phakt.usc.edu - Tony:

4-9-91231,2222-321123123-9-91231,2222-32112321

Twinkle Twinkle Little Star - from fsufunkyb@aol.com - Ben Schmidt:

1199##9-6633221-9966332-9966332-1199#9-6633221-

Generic Arabian Tune - from rdippold@qualcomm.com - Ron "Asbestos" Dippold:

453,54,4569564459,9#95458,8987453 54

Others can be found by doing a search for "touch tone phone songs".

Obfuscations

  • Some numbers expressed in Octal, some in hex and some in decimal: "A foolish consistency is the hobgoblin of little minds" - Ralph Waldo Emerson.

  • Funky scoping, looking at the nanosleep section and XsetWindowAttributes declares local variables.

  • Algorithm is very weird, uses y dimension to draw carrier frequency and x dimension to draw audio frequency, based on Erik Thiele's Tempest for Eliza.

  • lack of #defines confuses many people :-)

  • figuring out your pixelclock and horizontal_total and which carrier_freq to use can be an exercise in obfuscation for the user.

  • use of commas in various places, confuses most C code beautifiers sometimes making the beautified code harder to read

  • use of static to ensure initialization is EVIL and done in several places

  • uses static declarations & void function returns we don't care about making the code harder to read.

  • does sound using only X11 libs, no other libs required.

  • demonstrates tempest emissions in a fun/easy way.

  • follows good programming practices of actually setting exit codes and giving usage when run with incorrect parameters.

References

Tempest for Eliza - Basis for Algorithms.

Tempest AM - Another early program in this field. See here for a bit more information on the program (search for Tempest-AM Radio Signal Transmitter).

The paper Soft Tempest: Hidden Data Transmission Using Electromagnetic Emanations by Markus G. Kuhn's and Ross J. Anderson's.

This file is Copyright (c) 2023 by Landon Curt Noll. All Rights Reserved. You are free to share and adapt this file under the terms of this license:

Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)

For more information, see: https://creativecommons.org/licenses/by-sa/4.0/