Retrotechtacular: How Solidarity Hacked Polish TV

In the 1980s, Poland was under the grip of martial law as the Communist government of General Wojciech Jaruzelski attempted to repress the independent Solidarity trade union. In Western Europe our TV screens featured as much coverage of the events as could be gleaned through the Iron Curtain, but Polish state TV remained oblivious and restricted itself to wholesome Communist fare.

In September 1985, TV viewers in the city of Toruń sat down to watch an action adventure film and were treated to an unexpected bonus: the screen had a brief overlay with the messages “Solidarity Toruń: Boycotting the election is our duty,” and “Solidarity Toruń: Enough price hikes, lies, repression”. Sadly for the perpetrators, they were caught by the authorities after their second transmission a few days later when they repeated the performance over the evening news bulletin, and they were jailed for four months.

The transmission had been made by a group of dissident radio astronomers and scientists who had successfully developed a video transmitter that could synchronise itself with the official broadcast to produce an overlay that would be visible on every set within its limited transmission radius. This was a significant achievement using 1980s technology in a state in which electronic components were hard to come by. Our description comes via [Maciej Cegłowski], who was able to track down one of the people involved in building the transmitter and received an in-depth description of it.

Transmission equipment seized by the Polish police.
Transmission equipment seized by the Polish police.

The synchronisation came courtesy of the international effort at the time on Very Long Baseline Interferometry, in which multiple radio telescopes across the world are combined to achieve the effect of a single much larger instrument. Before GPS made available a constant timing signal the different groups participating in the experiment had used the sync pulses of TV transmitters to stay in time, establishing a network that spanned the political divide of the Iron Curtain. This expertise allowed them to create their transmitter capable of overlaying the official broadcasts. The police file on the event shows some of their equipment, including a Sinclair ZX Spectrum home computer from the West that was presumably used to generate the graphics.

There is no surviving recording of the overlay transmission, however a reconstruction has been put on YouTube that you can see below the break, complete with very period Communist TV footage.

We’ve looked across the Iron Curtain a few times before here at Hackaday, once examining the world of 1980s Communist home computers, and again with the story of a daring escape from East Germany.

Thanks [gnif] for the tip.

52 thoughts on “Retrotechtacular: How Solidarity Hacked Polish TV

  1. > Sadly […] they were caught […] and they were jailed for four months.

    Yeah, bad, bad socialist authorities (don’t get me wrong: I never liked those authoritarian regimes one iota).

    Nowadays, in the so-called “free world”, you get ten times as much (talk inflation!) for the defacement of a website (which is, arguably, the modern equivalent of those Polish folk’s feat, albeit perhaps easier):

    http://boingboing.net/2016/04/13/former-reuters-journalist-matt.html

    Note that this is just one random hit of a search, and in no way selected to make a point. I think it’s representative.

    What my point is? Perhaps we should be more considerate in how we want “justice” done. Otherwise we’ll end up being worse than the dictatorships we (rightfully!) once critiziced.

    1. Yeah, inflation of prison sentences (at least in the US) smells a whole lot like retribution taking the place of even the pretense of rehabilitation. It certainly isn’t deterrence, since data clearly shows we’re past the point where added years change the deterring effect.

      1. Absolutely. There’s also the problem of prisons being privatised, and therefore profit-making for their owners. The inmates are employed in things like making clothes, paid pennies an hour, competing with legitimate factories who have to actually pay their employees properly. Still, one way of competing with 8-year-olds over in Thailand or wherever.

        Rich parasites, getting their feet well under the table, are one of the biggest problems the modern West has. Since positions of power are occupied by their friends and beneficiaries, there’s no incentive for it to change. The fact that American political campaigns require millions of dollars to get elected makes that much worse. I don’t think a government run entirely, or even predominantly, by millionaires is best positioned to serve the people.

        Any clever economic / political hacks welcome!

        1. Agreed.
          Making comparisons from what I heard about “gulag death camps” is that they really weren’t that way.\
          But rather that people would have opportunitys to cooperatively work, of which you actually had people
          that departed Siberia and became well socially-adjusted citizens. And those who did not want to work in
          Siberia, Did not have to. But of coarse would be denounced by the majority that did.

          All and all. I believe in putting prisoners to work. But strictly government assigned work. Absolutely disallow the presence of private corporate infrastructures, utilize post-day slave labor. One may argue “Wouldn’t the government utilize them as slaves too” In a way, yes. But consider WHO it is who they will be working for? The Government, of the people, By the people, For the people? Or a business owner to fulfill his own self greed?
          Long live Lenin!
          Thank you.

    2. Those people weren’t arrested for radio piracy or defacing a transmission, they were arrested for being part of Solidarity. There was no point in keeping them imprisoned because they weren’t important enough, and they wouldn’t betray anyone important enough.
      Martial law was declared December 13th, 1981 and ended July 22th 1983. It began because polish government was afraid that soviets and other countries in Warsaw Pact might intervene and solve the problem of social unrest, Solidarity and failing centrally-controlled economy with soviet methods: killing every “enemy of state” or sending them to gulags. So Jaruzelski declared martial law, and then imprisoned every important member of Solidarity to keep them fro doing anything stupid, like starting a civil war, which would end badly for everyone. During that time 56 people died, most of them were shot or beat up during protests. By the 1985 everyone knew that People’s Republic of Poland will end soon. Economy wasn’t working too well, people were angry and wanted change, 19 months of martial law didn’t calm things down for long. By that time these people and their harmless prank weren’t important….

      1. Your claims were already debunked with the help of revealed Soviet documents. Since the summer of 1980 Jaruzelski had been asking the Soviets for the intervention, and was refused any military help. Soviets replied that it’s his own internal problem. He could, if he wanted to, tolerate Solidarity, especially after the Solidarity leaders made it clear they were not going to endanger any Soviet military interests in Poland.
        Until ca. 1988 nobody in Poland (except of the top Party clique who prepared the theatre of so called “Round Table” negociations and half-free elections) expected the changes to be so sweeping. Even the withdrawal of Soviet troops had finished as late as 1993. Remember, that Jaruzelski was appointed as the first president.

      2. Three major political murders of the time :
        1983 – Murder of Grzegorz Przemyk.
        1984 – Abducting, torture and murder of Father Popiełuszko.
        1989 – Murder of Father Sylwester Zych.
        Add many more. Your opinion that “By the 1985 everyone knew that People’s Republic of Poland will end soon.” has no substance.

    3. It’s worse than that. In most of the “civilised” world today they would have been labeled “terrorists” and sent to a place like Guantanamo without a court and without any chance at of appeal. Progress!

    1. Lots of the credit for dissidents getting fairly low sentences goes to Workers’ Defense Committee (KOR in polish) and their philosophy of publicizing and spreading awareness of every unlawful arrest (*). At first every sign of opposition was facing grave consequences, but as their activities progressed the boundaries shifted and the government started to fear public unrest and started to restrict their responses.
      I think there is a lesson to learn from their way – their philosophy might be quite a versatile way of dealing with dictatorships all around the world.

      (*) They also provided financial, legal and health assistance to the political detainees and their families.

        1. CIA, that is State Department under the cover of various ‘democracy spreading’ non profits (National Endowment for Democracy, National Democratic Institute etc), all in the form of literal suitcases of cash money

        2. Their fund had many sources, like the voluntary membership dues (they were a flat-hierarchy organisation consisting of close friendships, so it wasn’t hard), fundraising in Paris and London, underground publications… but I didn’t hear about any western agencies supporting them (I’m not saying they weren’t)

  2. “This was a significant achievement using 1980s technology in a state in which electronic components were hard to come by.”

    This was a significant achievement by anyone, anywhere, anytime! But I do see your point, it would have been especially difficult and dangerous in that part of the world during that time period.

    1. Synchronizing a computer image with a video source is not trivial, but it is not rocket science either.

      In 1990s, one guy asked me if I can modify his ZX Spectrum clone computer. He wanted to overlay the computer video output over a VHS cassette video, in order to subtitle foreign movies. It took about two weeks to design and implement the hardware.

      Then he wrote his own software, in BASIC, to spit a new subtitle row each time the ‘Space’ key was pressed. At that moment in time, subtitling machines were available only in the broadcasting studios. There were no DVDs or subtitles available. All the movie dialogues used to be written by hand, during a movie watch with a lot of pausing, then translated. Next, the text was typed into computer, and saved on a cassette tape recorder. After that, the saved subtitles were loaded into computer’s memory. Loading from a cassette used to took up to a couple of minutes, and many times used to end up with “Loading error”. After a successful load, the VHS movie was started from the beginning, and an operator manually pressed ‘Space’ and ‘Enter’ in order to display and delete the next subtitle line. The video output with the now subtitled movie was fed into a VHS recorder. All the operations were made in real time and in one shot. There was no way to edit as mistake or pause the movie. If you made a mistake, or spotted a typo during the subtitling process, you needed to start again from the beginning of the movie.

      Subtitling was a very “funny” process those days.
      :o)

        1. It was somewhere between 1991-93, can’t recall exactly. For some reason, Amiga, Commodore and other home computer flavors were not present in Romania. All you can find was ZX 81, ZX Spectrum and a few “ZX Spectrum Compatible” designs from Eastern Europe. Never knew about the Video Toaster until today, but Google found me this:

          “The Video Toaster was released in December 1990 for an entry-level price of $2,399. It consisted of a large expansion card that plugged into an Amiga 2000 and a set of programs on eight floppy disks. The complete package, including the Amiga, could be purchased for less than $5,000.”

          That explain why Amiga was not so common here. It was right after the Berlin Wall felt, and 2000-5000 USD was a small fortune in Eastern Europe. In comparison, a ZX Spectrum clone was just a couple of hundred USD. Also, the video subtitling computer from the story above was made by modifying an already existing HC85 (a Romanian design that was software compatible with ZX Spectrum), and the total price was nothing special. It was the equivalent of 3-4 weeks of salary for an average wage employee.

          Anyway, the story from Poland is totally different. The bravery of the guys who did that was huge.
          If a similar message would have been broadcasted in Romania during Ceausescu dictator, then the guys who did that would have been shot after a few months of terrible torture.

  3. Today you have to escape to Russia (!) if you even mention your government’s dirty deeds (Saint Snowden). Or hide in Ecuadorean embassy (Saint Assange). Democracy has come a long way … in the East.

      1. Try this: “…This is, after all, the same judiciary that in March 2014 sentenced more than 500 people to death for the alleged killing of a single policeman…” This is a country whose military dictatorship is supported by USA. While the legal president rots in jail, but we are pretending not to see it.

        http://www.theatlantic.com/international/archive/2015/05/death-sentence-egypt-emad-shahin/393590/

        My point is, if you are supporting democracy, you must stand behind it. Everywhere. No “deals” with dictators.

        1. “Deals”? Half of the time it’s the CIA or US government in general that appoints these dictators! Sometimes toppling democratically elected governments, because they won’t deal “fairly” with the huge power bases that control the US government. Or the huge oil companies, among others, whose owners ARE the US government!

          Of course, doesn’t mean other countries don’t get up to shenanigans like that, but I think the USA are the worst by a fair margin. Build a few mosques in the USA and they’ll probably end up nuking themselves.

          1. I’m in the U.S. and yeah. Most people believe whatever crap the government ‘politely suggests’ the mainstream media reports on.
            It’s becoming obvious to even most morons.

            Vote? Why?!?

    1. First of all, they didn’t have a van, and probably couldn’t afford it. Cars were manufactured and distributed by state, with waiting lists 10 years long. Vans were even harder to come by, because they were only for transportation of goods and people. Not many people could own a van in those times…

    2. Didn’t have a van? Harder to conceal? More likely to be searched? For a one-off of a minute or so, Big Brother’s triangul-o-tron antennas aren’t going to be set up and tuned ready. By the time they are, mission complete. Repeating the stunt again later adds the risk that they might be waiting this time.

      I doubt it was technical things that got them caught, more likely social. Either someone talked, for whatever reason, and that could be anything. Or the state’s pervasive spy apparatus did a good job. I suppose all component purchases weren’t on a giant database then (as they are now, for EVERYONE who buys ANYTHING!), but still some rare equipment at a time where that’s hard to get hold of…

      Would be interesting to see the circuit they used, just a transistor oscillator and power amp? Getting the video synced would be a challenge, since they weren’t controlling the source transmitter. Spectrum’s video (and Viva for that!) was done completely in hardware, unlike the ZX81, pretty much solely by the ULA chip. So what’d you do? Mess about with the reset signal, and clock pulses? Maybe have the 2 video sources, state TV and Speccy, on a scope, and alter a variable capacitor connected to the Speccy’s (single) crystal, til it slowly arrived in sync.

      Impressive too that they got colour working (assuming they did, not sure about that) with 2 separate colour bursts. Perhaps the Speccy’s video was gated, and only allowed to output when it was drawing the actual picture.

      Speccy’s resolution was 256×192, not too bad. With 15 colours at once, all together. The “colour clash” caused by limiting to 2 colours per 8×8 pixel cell was a bit of a pain, but many games managed to work intelligently within the limit, producing beautiful colourful art, in only 7K or so screen RAM. There’s so many clever hacks in the Spectrum’s design, you could do one a day and run a series for months. Other software did even better than that, breaking the limit entirely, altering colour attributes after the previous scanline was drawn. For a machine with a fixed 50Hz vertical-blank interrupt, and no other timing circuits at all, they did that pretty well.

    3. Van would hardly help, because it’s so easy to detect an unlicensed transmission, and it would be quite suspicious for that matter. From what I’ve heard many police stations had the equipment and personel to detect transmissions at that time.
      It would be better to abandon the equipment in some remote place (like with the balloon), but from what I can judge from the picture the cost of this setup was at least equal to a yearly salary…

  4. An interesting history sidebar. I do have to wonder if that in reality it wasn’t much more that a taunt to those in the power seats? Doesn’t read like it was a effective communications tool to to move the Solidarity revolution along, surely there was an underground communications network. Meanwhile in the USA there are many Who will never give Poland it’s due for it’s pivotal role in the breakup of the USSR. First because it’s Poland. second because the role of labor. Third the leadership was Catholic. Lastly because it was pacifist in nature, no profit for the arms merchants.

    1. It might’ve just been a taunt, but that was it’s message. To let people know that the government doesn’t control everything. That dissent exists, and is widespread and agile, that they could manage using just the resources they produced themselves, mostly their brains. That there’s a credible alternative to the awful totalitarian situation. That there’s hope!

      The point of television is to spread messages to the people (well, that and all the bad stuff). This was a great hack, a great achievement.

      As for the rest of your post: Yup!

  5. I can see how they had some kind of modulation equipment that could output the ZX Spectrum’s video onto a larger screen, but I don’t see how they could have achieved the analogue images. And judging by the picture of the evidence, they didn’t.

    And if you go to the article it links to I think it becomes clear that they didn’t use analogue images:

    “To do this with a low power transmitter and have good range we couldn’t emit a complex video signal, but only pixels of text at appropriately calculated time intervals”

    But they could have used a ZX Spectrum to achieve something good enough. However, if you read on then it seems like they didn’t really even have a good knowledge of machine code. Even ZX Spectrums were pretty expensive for people (it cost the author all his savings to buy one).

    This raises the question of how they could get a large logo onto the screen in Basic fairly quickly. Well, the easiest way would be to make use of the redefinable character set or make use of the UDGs, but the character set would be better. The first stage would be to create the logo on the screen using a simple pixel paint program and then copy it to an area of memory in a character set format. On a ZX Spectrum this is non-trivial, owing to the strange screen format. You’d use a program like:

    3000 REM Convert to char set.
    3010 INPUT chrSet;” “;w;” “;h
    3020 FOR y=0 TO h-1
    3030 FOR x=0 TO w-1
    3040 FOR r=16384+y*32+x TO 16384+y*32+7*256+x STEP 256
    3050 POKE chrSet,PEEK r: LET chrSet=chrSet+1
    3060 NEXT r: NEXT x: NEXT y
    3070 RETURN

    It’s easy to find a 200×80 pixel solidarity logo on the net. It’s very readable. This would take up: 200/8=25*10 = 250 characters of space. That’s too big for the character set per-se, since it only stores 96 characters. Therefore what you’d do is display some characters then modify the char set pointer and display some more. Because the ZX Spectrum has a bitmapped only display, modifying the character set pointer doesn’t change what’s on the screen.

    2000 LET ocl=PEEK 23606: LET och=PEEK 23607
    2010 PRINT AT y,x;” !””#$%&'()*+,-./012345678″;AT y+1,x;”9:;?@ABCDEFGHIJKLMNOPQ”;AT y+2,x;”RSTUVWXYZ[\]^_£abcdefghij”;AT y+3,x;”klmnopqrstuvwxyz{|}~©”;
    2020 POKE 23607,PEEK 23607+3
    2030 PRINT AT y+3,x+21;” !””#”;AT y+4,x;”$%&'()*+,-./0123456789:;?@ABCDEFGHIJKLMNOPQRSTU”;AT y+6,x;”VWXYZ[\]^_£abcdefghijklmn”;AT y+7,x;”opqrstuvwxyz{|}~©”;
    2040 POKE 23606,PEEK 23606+3
    2050 PRINT AT y+7,x+17;” !””#$%&'”;AT y+8,x;”‘()*+,-./0123456789:;?@”;
    2060 POKE 23607,och:POKE 23606,ocl: RETURN

    This would display the characters fast enough (they’d ripple onto the screen in about 0.3s).

    If I was them – armed with a ZX Spectrum I would then display the rest of the text using the battenburg 2×2 chunky block graphics characters. With these, there isn’t quite enough space for a typical message of about 42 + characters using the normal ZX Spectrum character set, but you could just use the block graphics to create text on a 5×7 grid. Then you would get 64/5 = 13 characters per line and 192-80=112/4 = 28/7=4. So, then you’d get 52 characters – perhaps just enough for the messages, or perhaps you could squeeze in a bit more using ‘proportional’ widths for the characters.

    So, very doable!

    1. Ah! 23606 and 23607*256! The magical character set pointer. I produced a few character sets after I discovered that, in fact there was a program published somewhere (probably an old 16/48 magazine-on-tape) that let you edit them on-screen, though it was pretty simple.

      Anyway… Pretty sure you could just poke an LDIR instruction, or something similar, to copy the screen to various bits of RAM. Doesn’t take a lot of machine code knowledge, and you could do it from BASIC just by POKEing in the right numbers, would only be a few bytes.

      But why does it have to draw the screen fast anyway? Was the display animated? If you just need a solid display, load it up beforehand.

      Eastern Europe had lots of Spectrum geniuses, doing all sorts of insane things in hardware and software, including quite a few Spectrum clones from the USSR. Some made from standard TTL, others with some custom chips from somewhere. They added all sorts of features and were produced up until the mid-1990s. There’s still Spectrum categories in demo contests now, and Eastern Europeans still manage to amaze, with effects that shouldn’t even be possible. There’s been a Spectrum version of Doom around for 15 or 20 years. Well, technically, it’s more Wolfenstein 3D, but still pretty impressive.

        1. Yup, the early days, 1982-83, had simple games, simple arcade clones with home-made graphics. Then from 84-87 or so you had the real renaissance, the best time, games of all sorts only limited by the imagination. Games were selling well enough that all sorts of niche ideas got published, and companies took on graphic artists and composers to specialise, rather than having the programmer draw everything himself, on graph paper.

          Later on, 8-bits suffered by trying to compete with the 16-bitters. Arcade games had moved on, so when companies tried to convert arcade games to home computer, it really was asking for a miracle. Half a meg of ROM, special sound and GFX chips, and a 68K at 8MHz didn’t convert well to Z80, 48K, and nothing. The later games were over-stretching the machines, though there were still some very good ones, sometimes they unwisely pushed against the limits and failed.

      1. Hi greenaum,

        A simple Ldir wouldn’t work because the screen layout isn’t linear, the addressing is 01:y:yy:x

        And I think basic world be fast enough. Besides, although it’s certainly not beyond the wit of astronomers to write machine code, the article implies they didn’t really know it (although the author in question only handled the analog side).

        Having said that, you’re correct about pre-loading the image. I had dismissed this because tape loading takes about 30s for the whole screen, but if it’s pre-loaded, it doesn’t matter and you can use the full spectrum screen resolution of 256×192 (pooh!).

        I still find it pretty awesome that the ZX spectrum turned out to be literally a revolutionary device!

        -cheers

          1. Seems like that has happened to everyone here, lol.
            You came back with a correction. Thank you very much. :)

            WordPress drives me crazy. The longer I’m here the more I think having an edit button or some kind of preview/warning system would be a good idea.

        1. The screen isn’t linear, true. It’s apparently something to do with making it easier to construct the ULA to output the video signal in the right order. But there’s still a logic to it. You just add 8 to get the next line down, for example. Although it has the weird divided-into-thirds thing. You can see the layout on game loading screens, the data’s been loaded off tape in order, one address then the next, but it draws in that strange way. That’s the screen organisation.

          But it doesn’t matter! You don’t need to plot pixels to copy a screen. Just LDIR the whole 7K to some other 7K somewhere, you’ve got 48K to play with. Doesn’t matter what the 7K contains, just copy it. Can’t think why that wouldn’t work.

          Yep it’s only when I got on the Internet, Usenet actually, 20 years ago (slightly more, actually), I was surprised to see that the Eastern Europe, including the former Eastern Bloc, quite possibly love the Speccy more than we British!

          1. Each scan is +256 from the previous one, but each character line is +32 from the previous character line and each screen third is +2048 from the previous screen third.

            The reason why it works that way is because (I understand) it made it easier to map the attribute bytes: every attribute character row is +32 bytes on, just like the screen bitmap (except when it comes to the screen thirds, which doesn’t apply in attribute memory).

            It also makes it quite easy to display characters since you just increment the high byte, e.g. if hl^the character bitmap, de^the screen memory then:

            ld b,8
            ChrLoop:
            ld a,(hl)
            inc hl
            ld (de),a
            inc d
            djnz ChrLoop

            will display the character. You can of course use LDIR to copy an entire screen image of 6.75Kb, but in the mid-80s the average Spectrum programmer didn’t have great graphics tools to create the images in the first place: no digitisers, few painting tools (apart from character set editors), few light-pen driven programs. And probably less access in Poland. Hence I imagined (and this is all hypothetical, hence the fun of discussing it) they would need to manually digitise the solidarity logo (probably using squared paper) and then the easiest way to generate the rest would be using print statements and block graphics.

            You can then LDIR where you like, but my guess is that they might well feel that Basic was fast enough. Who knows :-) ?

            But going back to my original comment: it’s just really, really cool they used a Spectrum for such subversive activity, really knocks “Good evening professor Falken, would you like to play a game of GLOBAL THERMONUCLEAR WAR?” into a cocked hat ;-)

  6. Authorities could locate the transmitter easily (if they had known beforehand what to expect) by observing the position of the overlay on screens in different locations.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.