Mit 4 Baud über den Balkon
Man stelle sich vor: Der Nachbar morst mit einer Taschenlampe und Ihr Computer empfängt die Zeichen. Auf dem Bildschirm zeigt er Ihnen an, was Ihr Nachbar will. Nicht möglich? In Sindelfingen schon. Zwei Computer senden und empfangen Lichtzeichen. Datenfernübertragung von Balkon zu Balkon.


Die Nachbarn haben sich inzwischen daran gewöhnt. Immer wenn es dunkel wird, blinken auf zwei Balkons Morsezeichen auf. Dann wissen die Anwohner, daß die beiden 19jährigen Freunde Mark Schneider und Dietmar Schwuchow wieder mit ihren Computern spielen.
Die Computer-Karriere der beiden begann vor zwei Jahren: Wie viele andere auch studierten sie Handbücher, tippten Listings ab, schrieben schließlich eigene Spiele und »Nutzprogramme«. Im Frühjahr brach bei beiden der Spieltrieb durch. »Wir waren es leid, immer getrennt mit unseren Computern zu arbeiten. So kamen wir auf die Idee, sie als Kommunikationsmittel einzusetzen. Ein Kabel oder ein Akustikkoppler war uns jedoch zu langweilig«, erklärten Dietmar und Mark, die beide gerade ihr Abitur erfolgreich hinter sich gebracht haben.
Die Freunde wohnen so nah beieinander, daß sie sich vom Balkon aus zuwinken können. Daher erschien es ihnen am einfachsten, Lichtimpulse für die Datenübertragung zu nutzen. Schnell einigten sich die Elektronik-Fans über diesen Weg. »Klar wußten wir von ersten Moment an, daß wir damit keine professionelle Datenfernübertragung machen können. Was uns reizt, ist vielmehr das Basteln und Spielen. Unter diesem Vorzeichen sehen wir auch unser selbstgebautes Lichttelefon«. Für Mark und Dietmar zählt das Außergewöhnliche ihrer Sende- und Empfangseinrichtung mehr als ein tatsächlicher Nutzen.
Vier Monate brauchten sie, um die Idee in die Tat umzusetzen. Jetzt spielen sie zusammen »Schiffchen versenken« — jeder an seinem Computer. Der übernimmt mittlerweile »artig« die Ver- und Entschlüsselung der Daten sowie das »Morsen« bei der Übertragung. Vier Bit huschen in jeder Sekunde von Balkon zu Balkon und übermitteln die Züge an den jeweils anderen Computer.
Zunächst machten sich die Computer-Freaks über die Hardware her. Die beiden Computer, ein C 64 und ein Sinclair ZX Spectrum, mußten durch entsprechende Elektronik mit je einer Lampe als Sender und einem Fotowiderstand als Empfänger verbunden werden.

Ins Innenteben des Computers wurde nicht eingegriffen
Da Mark und Dietmar nicht unbedingt in das Innenleben der Computer eingreifen wollten, nutzten sie die vorhandenen Anschlüsse. Der Tonausgang dient zum Ansteuern der Lampe: beim C 64 ist dies der Audio-Ausgang und beim ZX Spectrum der Recorderanschluß. Den Signalempfang übernimmt der jeweilige Joystick-Port.
Es war von vornherein vorgesehen, nur bei Dunkelheit zu übertragen. Trotzdem — die erste Schaltung erwies sich bei den Testläufen als zu unempfindlich. Mit einer verbesserten Elektronik war dieses Problem schnell gelöst.
Nachdem sich die beiden Freunde auf einen gemeinsamen Code geeinigt hatten, kam der große Moment: der erste richtige Übertragungsversuch. Jedem Bustaben wurde ein Fünf-Bit-Code zugeordnet. Es handelte sich um eine serielle Übermittlung, wobei die Lampe bei gesetztem Bit kurz aufblinkte. Das Senden begann mit einem Synchronisationssignal, um damit den empfangenden Computer auf den Übertragungstakt einzustellen. Da Basic für diese Zwecke nicht präzise genug arbeitet, kamen Mark und Dietmar auf die Idee, den internen Zeitzähler zu nutzen. Es funktionierte, die Daten wurden im Sekundenrhythmus übertragen — jede Sekunde ein Bit.
Ganz zufrieden waren die Elektronik-Tüfftler noch nicht. Bei mehr als 20 Zeichen gab es noch Ungenauigkeiten in der Übertragung. Außerdem war ein Baud (Bit pro Sekunde) doch ein bißchen zu langsam. Fazit: Die Software wurde umgeschrieben, so daß die Geschwindigkeit jetzt vier Baud beträgt. Auch bei größeren Datenmengen fällt nur selten ein gesendetes Bit über den Balkon — die Information kommt zuverlässig beim anderen an.

Derzeit arbeiten Mark und Dietmar an der nächsten Verbesserung ihrer Datenfernübertragung. Die Auswertung von zwischengespeicherten Daten ist momentan erst möglich, nachdem alle Bits im Computer angekommen sind. Geplant ist ein Maschinenprogramm, das die empfangenen Zeichen sofort decodiert und ausdruckt. Die Lust am Basteln hält weiter an. Das nächste Projekt — ein Plotter aus Fischer-Technik-Bauteilen — steht kurz vor der Vollendung. Aber auch den »Ernst des Lebens« will sich — zumindest Mark — mit Computern versüßen. Bereits am Gymnasium hat er Lehrer »gespielt«. Jetzt versucht er, sein Computer-Wissen in der Volkshochschule »loszuwerden«.
(M. Schneider/D. Schwuchow/kg)Ablauf der Datenübertragung
Die Datenübermittlung beginnt wie es sich gehört: Der Sender »klingelt« zunächst beim Empfänger. Dazu setzt er ein Blinksignal von ½ Hz, das bedeutet 2 Sekunden Licht an, 2 Sekunden aus und so weiter. Der Empfänger muß seine Bereitschaft signalisieren. Kennzeichen: einmal 4 Sekunden lang aufblinken. Wird dieses sogenannte Bereitschaftssignal erkannt, schaltet der vorher blinkende Computer auf Texteingabe um und beginnt zu senden. Der »angeklingelte« Computer stellt nach dem Abschicken des Bereitschaftssignals sofort auf Empfang um. Damit ist die Richtung der Informationsübermittlung festgelegt. Sie wechselt jetzt regelmäßig ohne vorheriges »Klingeln«.
Jeder Sendevorgang beginnt mit einem Synchronisationssignal — einem Aufblinken von 3 Sekunden Dauer. Eine Sekunde später folgen die Kontrollbytes: Zweimal fünf Bit im Viertelsekundenrhythmus. Damit wird dem empfangenden Computer mitgeteilt, wieviele Zeichen die Nachricht beinhaltet und wie oft demnach die Empfangsschleife durchlaufen werden muß, bevor er decodieren darf. Das Synchronisationssignal dauert drei Sekunden, dann folgt eine Sekunde lang Sendepause. Erst jetzt wird die eigentliche Nachricht geschickt, ebenfalls im Viertelsekundentakt.
Die Übertragungsrichtung wechselt am Ende der Mitteilung automatisch und der vorherige Empfänger startet seinen Sendevorgang mit dem Synchronisationssignal.
Wie kann der Empfänger dem Sender mitteilen, daß er nur »Schrott« mitbekommt, wenn die Übertragung immer nur auf eine Richtung festgelegt ist? Dafür gibt es eine Maschinen-Code-Routine.
Falls der Empfänger während der Übertragung einen Fehler feststellt, so drückt er einfach eine Error-Taste, beim C 64 ist dies die obere linke Pfeiltaste. Damit schaltet er seinen Computer auf »Texteingabe«, was bedeutet, er kann jetzt senden und dem anderen mitteilen, daß etwas falsch angekommen ist. Das Synchronisationssignal dauert dann — zur Unterscheidung von normaler, fehlerfreier Übermittlung — allerdings 10 Sekunden. Obwohl der andere Computer in dem Moment noch eifrig weitersendet (er hat ja keine Ahnung, daß etwas nicht richtig rüberkommt) erkennt er ein Dauersignal von mehr als 5 Sekunden. Nach der Warnung schaltet er auf Empfang, um die Fehlermeldung des anderen aufzunehmen.
Hardwarebeschreibung
Computer und ein Teil der Elektronik sind im Zimmer untergebracht — der Rest des sogenannten Lichttelefons steckt in einem Sende- und Empfangskästchen auf dem Balkon. Bild 3 zeigt, was drinnen und was draußen steht.

Mark und Dietmar müssen bei der Datenübertragung eine Strecke von etwa 200 m überwinden. Das erfordert ein relativ intensives Lichtsignal, damit die Information überhaupt beim anderen ankommt. Eine 12V/10W-Lampe erbringt die notwendige Leistung.
Als Spannungsquelle für die Lampe dient ein ausrangierter (Rennbahn-)Trafo. Die 12V des Trafos sind außerdem mit einem Spannungsregler des Typs 7805 verbunden, der für eine konstante 5V-Spannung der zusätzlichen Hardware sorgt (Bild 1).

Die Sende- und Empfangskästchen sind mit Schirmklemmen am Balkongeländer befestigt. Nimmt man den Regenschutz — aus Pappe und aufgeklebter Aluminiumfolie — ab, so wird ein quaderförmige Holzgehäuse von 7 x 7 x 12 cm frei. In die Vorderwand wurde ein Loch für die Linse gesägt, die wiederum fest in einem Papprohr sitzt. Das Sendeelement (Lampe) und Empfangsteil, der lichtempfindliche Widerstand (LDR), müssen im Brennpunkt der Linse sein. Da diese fest eingebaut ist, wird eine genaue Einstellung nur durch Verschieben der Platine erreicht, auf die die Bauteile gelötet sind (Bild 6).

Die Kästchen auf dem Balkon sind über ein vierpoliges abgeschirmtes Kabel mit der Elektronik im Zimmer verbunden. Das Ende des Kabels bildet ein DIN-Stecker, mit der in Bild 2 dargestellten Stiftbelegung.

2: L+ (12 V)
3: Signal von LDR
4: +5 V
5: Testsignal für LED
Das Senden funktioniert nach einem einfachen Prinzip: Beim Morsen wird für logisch »1« am Audioausgang des Computers ein Tonsignal abgegeben, das durch die Schaltung (Bild 4) verstärkt und digitalisiert wird. Als Folge davon schließt das Relais und die Lampe im Sendekästchen leuchtet auf.

Beim Empfangen (Bild 5) vergleicht der Operationsverstärker (OP3) die Signale von beiden Spannungsteilern, die durch den lichtempfindlichen Widerstand (LDR) mit dem 100 KOhm-Widerstand und dem Regler 47 KOhm gebildet werden. Dieser Verstärker ist auch für die hohe Empfindlichkeit verantwortlich. Die nachfolgende Schaltung ist für langsame Helligkeitsschwankungen unempfindlich. Lediglich bei Lichteinfall setzt sie ein Flipflop und nimmt es bei Dunkelheit zurück. Dieses Flipflop steuert das Relais für den Joystick-Eingang an. Darüber hinaus bietet es eine doppelte Kontrolle beim Empfang: sowohl auf dem Balkon beim Einstellen der Kästchen über die LED als auch im Zimmer durch den BEEP.

Code | Tafel 1 | Tafel 2 |
11111 | Space | 0 |
00001 | A | 1 |
00010 | B | 2 |
00011 | C | 3 |
00100 | D | 4 |
00101 | E | 5 |
00110 | F | 6 |
00111 | G | 7 |
01000 | H | 8 |
01001 | I | 9 |
01010 | J | ( |
01011 | K | ) |
01100 | L | . |
01101 | M | & |
01110 | N | + |
01111 | O | — |
10000 | P | * |
10001 | Q | / |
10010 | R | . |
10011 | S | , |
10100 | T | : |
10101 | U | ; |
10110 | V | > |
10111 | W | < |
11000 | X | = |
11001 | Y | ? |
11010 | Z | ! |
11011 | Tafel 2 | — |
11100 | — | — |
11101 | — | — |
11110 | — | — |
Zeilen 6-31 | Allgemeine Vorbereitungen Einlesen der MC-Daten, Setzen der Tonregister |
40-42 | Speicherstelle 828 wird auf ihren Inhalt abgefragt. Daraufhin wird entsprechend zu »Empfang« oder »Senden« verzweigt. Diese Konstruktion entstand aus dem Wunsch, alle gesetzten Variablen durch »RUN« zu löschen und nicht einzeln. |
100-115 | Hauptmenü |
300-340 | Zunächst werden hier die beiden Kontrollbyte, die dem Empfänger die Länge der Nachricht angeben, empfangen. Dies ist nötig, da das eigentliche Empfangsprogramm die empfangenen Bits nur zwischenspeichert und somit kein Endsignal erkennen kann. |
400-483 | Decodierung der beim Empfang ab Speicherstelle 38000 zwischengespeicherten Bits sowie Textausgabe |
500-650 | Empfangsschleife |
10000-10140 | Texteingabe und anschließende Codierung Zwischenspeicherung der Bits vor der Sendung |
10200-10300 | Bildung der Kontrollbyte |
12000-12330 | Senden der Kontrollbyte |
12400-12650 | Sendeschleife |
14000-14034 | Empfangsbereitschaft melden |
20000-20120 | »Klingeln« |
21000-21010 | MC-Daten |
0 rem ********************************* ** ** 1 rem ** l i c h t t e l e f o n ** ** ** 2 rem ** ** ** ** 3 rem ** ** ** by m&t ** 4 rem ** ** ********************************* 5 : 6 ix=828 7 print"{clr}":poke53280,0:poke53281,0:fori=49152to49172:reada:pokei,a:next 8 gosub14000 10 dimx$(255) 11 ix=828 13 print"{clr}":poke53280,0:poke53281,0 20 poke56,145:poke650,128 28 fori=54272to54296:pokei,0:next 30 poke54272,1:poke54273,0:poke54277,100:poke54278,100:poke54276,17 31 poke54279,1:poke54280,0:poke54284,100:poke54285,100:poke54283,33 40 ifpeek(ix)=3thenpokeix,0:goto300 42 ifpeek(ix)=7then10000 100 print"{clr}{lred}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"; 101 print"{rvon} h a u p t m e n u e " 104 print"{down}{down}{down}{rght}{rght}{rght}{rght}{lblu}'klingeln' {gry3}==> {lred}< k >" 105 print"{down}{down}{rght}{rght}{rght}{rght}{rght}{lblu}senden {gry3}==> {lred}< s >" 106 print"{down}{rght}{rght}{rght}{rght}{rght}{lblu}empfangen {gry3}==> {lred}< e >" 107 print"{down}{down}{rght}{rght}{rght}{rght}{rght}{lblu}ende {gry3}==> {lred}< f8 >" 110 geta$:ifa$=""then110 111 ifa$="k"then20000 112 ifa$="s"then10000 113 ifa$="e"then305 114 ifa$="{f8}"thenprint:end 115 goto110 300 rem---- empfang -------------------- 305 print"{clr}{lred}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"; 306 print"{rvon} e m p f a n g " 307 print"{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{rght}{rght}{rght}{rght}{rght}{rght}{cyn}* bei fehlern {rvon} _ {rvof}{up}{left}{left}{left}{CBM-@}{CBM-@}{CBM-@}{down} druecken *" 310 le=10:pp=38000:gosub500 320 l=0:forj=0to4 321 ifpeek(pp+j)=1thenl=l+2^(4-j) 322 nextj 330 h=0:forj=5to9 331 ifpeek(pp+j)=1thenh=h+2^(9-j) 332 nextj 340 print"{home}{down}{down}{down}{down}{down}{down}{lblu}die nachricht enthaelt"h*32+l"zeichen." 350 le=5*(h*32+l):gosub500 400 print"{clr}":add=0:pp=38000 402 print"{home}{lred}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"; 403 print"{rvon} t e x t a u s g a b e " 404 print"{down}{down}{down}{lblu}folgendes wurde aus dem aether gefischt:" 408 a$=" abcdefghijklmnopqrstuvwxyz 0123456789()'&+-*/.,:;><=?!#^ " 410 forj=1tolestep5 415 x$="":forjj=0to4:x$=x$+right$(str$(peek(pp+j-1+jj)),1):nextjj 420 x=0:fork=1to5:ifmid$(x$,k,1)="1"thenx=x+2^(5-k) 421 nextk 422 ifx=31thenx=0 425 ifx=27andadd=0thenadd=32:nextj 430 printmid$(a$,1+x+add,1);:add=0:nextj:goto470 470 fori=0to700:nexti:poke54296,0 471 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{lred}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"; 472 print"{rvon} zur fortsetzung bitte 'f1' druecken! {rvof}"; 473 fori=0to120:geta$:ifa$<>"{f1}"thennexti:goto480 474 run10 480 print"{up}{up} "; 481 print" zur fortsetzung bitte 'f1' druecken! "; 482 fori=0to120:geta$:ifa$<>"{f1}"thennexti:goto471 483 run10 500 rem---- empfangsschleife ----------- 510 if(peek(56320)and16)=0then518 512 ifpeek(197)=57thenpokeix,7:run10 514 goto510 518 print"{home}{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rvon}{lred}l a e u f t" 520 if(peek(56320)and16)=0then520 530 ti$="000000" 540 ifti<54then540 550 z$="" 560 forl=1tole 562 ifpeek(197)=57thenpokeix,7:run10 565 ti$="000000" 570 if(peek(56320)and16)=0thena=ti:goto600 580 ifti<14then570 590 pokepp-1+l,0:nextl:return 600 if(peek(56320)and16)=0then600 610 b=ti 620 x=(12-b+a)/2 630 pokepp-1+l,1:ti$="000000" 640 ifti<x-6thengoto640 650 nextl:return 10000 rem---- senden ------------------- 10001 print"{clr}{lred}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"; 10002 print"{rvon} s e n d e n " 10005 print"{down}{down}{down}{lblu}ihr text?" 10006 print"{down}bitte nach jeder zeile {cyn}{rvon} return {rvof}{up}{left}{left}{left}{left}{left}{left}{left}{left}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{down}{lblu} druecken" 10010 a$="":fori=1to5:inputa$:t$=t$+a$:a$="":nexti 10011 iflen(t$)=0thenpokeix,0:run10 10020 pp=38000:poke54296,15 10030 b$="11111000010001000011001000010100110001110100001001010100101101100" 10032 b$=b$+"011010111001111100001000110010100111010010101101101011111000" 10034 b$=b$+"1100111010110111110011101111101111100000" 10036 c$="0123456789()'&+-*/.{CBM-+}[;><=?!#^ " 10050 add=0:fori=1tolen(t$) 10060 m$=mid$(t$,i,1) 10070 ifm$=" "thenx$=mid$(b$,1,5):goto10100 10080 ifasc(m$)>64andasc(m$)<91thenx$=mid$(b$,(asc(m$)-64)*5+1,5):goto10100 10085 forii=1tolen(c$) 10086 ifmid$(c$,ii,1)=m$thenx$="11011"+mid$(b$,(ii-1)*5+1,5):add=add+1:goto10100 10087 nextii:x$="00000" 10100 forj=1tolen(x$) 10110 pokepp,(asc(mid$(x$,j,1))-48) 10120 pp=pp+1 10130 nextj:x$(i)=x$ 10140 nexti 10200 rem---- laenge feststellen ------- 10205 l=len(t$)+add 10206 print"{down}{down}die nachricht enthaelt"l"zeichen." 10210 h=int(l/32):l=l-h*32 10300 l$=mid$(b$,(l*5)+1-160*(l=0),5)+mid$(b$,(h*5)+1-160*(h=0),5) 12000 rem---- kontrollbytes senden ----- 12100 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{cyn}* sendung laeuft *{lblu}" 12105 poke54273,100:ti$="000000" 12106 ifti$<>"000003"then12106 12107 ifpeek(ix)=7thenifti$<>"000010"then12107 12108 poke54273,0:ifpeek(ix)=7thenpokeix,0 12110 ti$="000000" 12120 ifti<60then12120 12200 fori=1tolen(l$) 12210 ti$="000000" 12215 sys49152:ifpeek(54280)<>0thenpokeix,3:fori=0to2000:next:run10 12220 ifmid$(l$,i,1)="0"then12300 12230 ifti<3then12230 12235 poke54273,100 12240 ifti<11then12240 12245 poke54273,0 12300 ifti<15then12300 12320 nexti 12330 fori=0to3000:nexti 12400 rem---- hauptsendeschleife ------- 12405 poke54273,100:ti$="000000" 12406 ifti$<>"000003"then12406 12407 poke54273,0 12420 ti$="000000" 12430 ifti<60then12430 12510 forzr=38000to38000+5*len(t$)+5*add-1 12520 ti$="000000" 12525 sys49152:ifpeek(54280)<>0thenpokeix,3:fori=0to2000:next:run10 12530 ifpeek(zr)=0then12600 12540 ifti<3then12540 12545 poke54273,100 12550 ifti<11then12550 12555 poke54273,0 12600 ifti<15then12600 12620 nextzr 12650 pokeix,3:run10 14000 rem---- bereitschaft melden ------ 14001 print"{clr}{down}{down}{down}{down}{down}{down}{rght}{rght}{rght}{cyn}empfangsbereitschaft melden (j/n)?" 14010 geta$:ifa$="j"then14020 14011 ifa$<>"n"then14010 14012 return 14020 print"{down}{down}{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{lblu}* meldung wird gesendet *" 14030 poke54296,15:poke54273,100:ti$="000000" 14032 ifti$<>"000004"then14032 14034 poke54273,0:pokeix,3:return 20000 rem---- klingeln ----------------- 20001 print"{clr}{lred}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}{CBM-@}"; 20002 print"{rvon} ' k l i n g e l n ' {down}{down}{down}{lblu}" 20010 poke54296,15 20020 ti$="000000" 20030 poke54273,100 20040 ifti$<>"000002"then20040 20050 poke54273,0:ti$="000000" 20052 ifti$<>"000001"then20052 20054 ti$="000000" 20060 if(peek(56320)and16)=0then20100 20062 ifti$<>"000001"then20060 20070 goto20020 20100 print"{rght}{rght}{rght}{rght}{rght}mark ist jetzt empfangsbereit!" 20110 ti$="000000" 20112 ifti$<>"000004"then20112 20120 goto10000:rem senden 21000 rem---- daten fuer mc-routine ---- 21010 data173,0,220,201,111,208,13,232,138,201,20,208,7,162,0,169,152,141,8,212,96