C 64
So machen's andere

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.

Von Balkon zu Balkon. Die Gegenstelle (Pfeil) ist immerhin 200 m entfernt.
In Großaufnahme das Empfangsgerät

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.

Die beiden Elektronikbastler

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.

So sieht die Hardware aus

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.

Bild 3. Die Verbindung zwischen drinnen und draußen

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).

Bild 1. Spannungsversorgung 5 V DC (Gleichstrom)

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).

Bild 6. Aufbau des Sende- und Empfangskästchens

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.

1: GND (Ground-Masse)
2: L+ (12 V)
3: Signal von LDR
4: +5 V
5: Testsignal für LED
Bild 2. Pinbelegung des DIN-Steckers

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.

Bild 4. C 64 Sende-Block

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.

Bild 5. C 64 Empfangs-Block
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
Die Zeichen aus Tafel 2 werden als Zwei-Byte-Code verschlüsselt. Das Byte »11011« dient als »Schaltbyte« zu dieser Tafel. Die Zeichen »Komma« und »Doppelpunkt« werden aus eingabetechnischen Gründen als »■« beziehungsweise als »[« eingegeben.
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
Erläuterungen zum Lichttelefon-Listing:
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
Listing »Lichttelefon«
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →