C 64
Tips und Tricks

Prost mit dem C 64

Dieses Programm macht Ihren C 64 zum elektronischen Steuermann. Mit dem User-Port können Sie bis zu acht Geräte ein- und ausschalten.

Der Name Pro.St steht für programmierbare Steuerung; das Programm erlaubt die Steuerung von acht Geräten, die über entsprechende Treiberschaltungen am User-Port des C 64 angeschlossen sind. Für den Steuerungsablauf stehen Ihnen etwa 30 000 Einzelschritte zur Verfügung. Jeder Schritt wird als ein Byte im verbleibenden Basic-Speicher abgelegt. Zur Bearbeitung des Programmablaufs hat Pro.St einen eigenen Editor, mit dem Abläufe erstellt, geändert, angezeigt, ausgeführt, gespeichert und geladen werden.

Nach dem Starten des Programms wird in Zeile 9 das User-Port-Display von Jan Legenhausen, 64’er Ausgabe 8/84, geladen. Sollten Sie dieses Programm (noch) nicht haben, sei gesagt, daß Pro.St auch ohne diese Anzeige läuft, dann aber an eine Autofahrt mit schwarzen Scheiben erinnert: Man weiß nie, woran man ist. Haben Sie das Programm von Jan Legenhausen nur als Basic-Lader, starten Sie den Lader und laden dieses Programm manuell. Vergessen Sie dann nicht, Zeile 9 von Pro.St zu löschen.

Pro.St meldet sich nach dem Start mit seinem Hauptmenü, das sieben Wahlmöglichkeiten hat:

Hinweis

Da das Programm in Basic geschrieben ist, kann es nicht für zeitkritische Fälle verwendet werden. Wegen der Ungenauigkeit der internen Uhr des C 64 bedarf es einer Zeitkorrektur. Sie sollten den Korrekturfaktor in Zeile 2065 mit einer Stoppuhr nachprüfen. Der Korrekturfaktor wird mit Ihrer Sekundenangabe (ZD) für einen Schaltschritt multipliziert und dann ständig mit der internen Uhr (TI) verglichen. Da TI im 1/60-Sekundentakt zählt, ist der Standard für den Korrekturfaktor 60.

(Michael Anton/hm)
T$ Tastaturabfrage
BZ$(8) Diagrammzeile
DS$ Diskstatus
NA$ Filename
AN Anfang des Steuerprogrammspeichers-1
BI(8) Binärwert
D Dezimalwert
HI(8) Umwandlungshilfe
MA Anzahl der Steuerschritte
SS Aktueller Schritt
PO Portadresse
SV Flag für Speicherbelegung
UF Unterprogramm-Flag
Liste der wichtigsten Variablen
|
0 rem **********************************      *                                *
1 rem *     p r o.s t  6 4  (3)        *      *                                *
2 rem *         1984  by               *      *       michael anton            *
3 rem *      herm.essig str 106        *      *      7141 schwieberdingen      *
4 rem *       (07150)/31576            *      *                                *
5 rem **********************************
7 rem "zeile 9 u.10 weglassen, wenn sie das userport-display aus der 64'er"
8 rem "nicht als maschinenprogramm nachladen koennen"
9 ifsv=0thensv=1:load"upd.49309",8,1
10 sys49309
11 :
12 poke56,40:clr
13 :
14 :
15 rem *init*
16 :
20 an=10240:sv=0:uf=0:bs$(0)="R":bs$(1)="E":po=56577:poke56579,255:pokepo,0
30 poke53280,15:poke53281,8:print"{clr}{cyn}"
40 forl=1to8:readhi(l):nextl
41 data8,7,6,5,4,3,2,1
50 goto10000
70 :
75 :
80 rem *loesch1*
81 input"{clr}{down}{down}{down}{down}{down}{down}{down}{rght}{rght}{rght}sicher (j/n)";a$:ifa$<>"j"thenreturn
85 ma=0:sv=0:return
87 :
90 rem *loesch2*
92 forll=an+sstoan+ma+1:pokell,peek(ll+1):nextll:ma=ma-1:return
93 :
95 rem *einf*
97 forll=an+ma+1toan+lxstep-1:pokell+1,peek(ll):nextll:ma=ma+1:return
98 :
99 :
100 rem *eingabe*
101 :
102 ifsv=0then105
103 input"{clr}{down}{down}{down}{down}{down}{rght}altes programm ueberschreiben (j/n)";a$
104 ifa$<>"j"thenreturn
105 uf=0
110 print"{clr}{down}{down}{rght}{rght}{rght}eingabe{down}{down}{down}":print"{rvon}0{rvof}  {rvon}1{rvof}  {rvon}del{rvof}   {rvon}return{rvof}   {rvon}e{rvof}nde"
120 gosub6000
130 :
160 rem *einsch*
170 lx=1
180 print"{down}schritt "lx;tab(15);"87654321":printtab(15);
190 :
200 rem *bin-in*
210 forlb=1to9
220 gett$:if(t$="0"ort$="1")andlb<9then260
225 ift$=chr$(13)andlb=9then290
230 ift$=chr$(20)thenlb=lb-1:print"{left}";:goto220
240 ift$="e"then340
250 goto220
260 bi(lb)=val(t$):printt$;:nextlb
270 :
290 rem *bin-dez*
295 d=0:h=128
300 forlb=1to8:d=d+bi(lb)*h:h=h/2:nextlb
305 ifuf=1thenreturn
310 print"{rght}{rght}";d:pokean+lx,d
315 ifuf=2thenreturn
320 lx=lx+1:iflx+an<40960then180
330 print"{down}{down}{rght}{rght}speicherplatz zuende!!"
340 print:print"eingabeende bei schritt ";lx-1:ma=lx-1:sv=1:gosub6000
350 return
400 :
450 :
500 rem *editieren*
502 :
505 ifsv=0thenprint"{clr}{down}{down}{down}{down}{down}{rght}{rght}{rght}{rght}{rght}speicher leer":goto6000
510 print"{clr}{down}{down}{down}{down}{down}1 _ schritt loeschen":print"{down}2 _ schritt einfuegen"
520 print"{down}3 _ schritt ersetzen":print"{down}4 _ verlaufsdiagramm":print"{down}5 _ menu"
530 gett$:ift$=""then530
535 wa=val(t$):ifwa<1orwa>5then530
540 onwagoto560,580,587,600,550
545 goto500
550 return
555 :
560 rem *loeschen*
565 input"{clr}{down}{down}{down}{down}{down}zu loeschender schritt: ";ss:gosub90
570 print"{down}{down}{down}{rght}{rght}{rght}{rght}{rght}ok":gosub6000:goto500
575 :
580 rem *einfuegen*
585 input"{clr}{down}{down}{down}{down}{down}{rght}{rght}{rght}{rght}{rght}einfuegen bei schritt: ";lx:gosub95:goto590
587 input"{clr}{down}{down}{down}{down}{down}{rght}{rght}{rght}{rght}{rght}zu eretzender schritt ";lx
590 print"{down}neuen schritt eingeben:{down}{down}":uf=2:gosub180
595 gosub6000:goto500
597 :
600 rem *diagramm*
602 :
605 ms$="{CBM-Q}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-E}{CBM-W}":ss=1
610 ko$="   {rvon}v{rvof}or    {rvon}z{rvof}urueck     {rvon}a{rvof}nfang     {rvon}e{rvof}nde"
615 forl=1to8:bz$(l)="":nextl:hz=1
617 poke211,15:poke214,24:sys58640:print"bitte warten!"
620 d=peek(an+ss):h=128
630 forl=1to8:bi=int(d/h)
650 bz$(hi(l))=bz$(hi(l))+bs$(bi)
670 d=d-h*bi:h=h/2:nextl
680 hz=hz+1:ss=ss+1:ifss>mathen700
690 ifhz<=35then620
700 print"{clr}{down}":forl=1to8:printl;bz$(l):print:nextl:print
710 printtab(3);"{up}";ms$:print:printtab(2);ss-hz+1:print:printko$
720 gett$:ift$=""then720
725 ift$="v"andss<mathen615
730 zf=0:ift$="z"andss>35thenss=ss-70:zf=1:ifss<1thenss=1
735 ift$="z"andzf=1then615
740 ift$="a"thenss=1:goto615
745 ift$="e"then500
750 goto720
1000 :
1500 :
2000 rem *start*
2002 :
2003 ifsv=0thenprint"{clr}{down}{down}{down}{down}{down}{rght}{rght}{rght}{rght}{rght}speicher leer":goto6000
2005 print"{clr}{down}{down}{down}{rght}{rght}{rght}{rght}{rght}{rght}lauf":print"{down}{down}{down}1 _ freilauf"
2010 print"{down}2 _ einzelschritt":print"{down}{down}{down}{rght}{rght}{rght}{rght}{rght}wahl?"
2015 wait203,63:gett$
2020 ift$="1"then2040
2025 ift$="2"then2200
2030 goto2015
2040 print"{clr}{down}{down}{down}{down}{down}{down}{rght}{rght}{rght}freilauf":print"{down}{down}{down}1 _ dauerlauf"
2045 print"{down}2 _ x*durchlaufen":print"{down}{down}{down}{rght}{rght}{rght}{rght}{rght}wahl?"
2046 wl=0
2050 wait203,63:gett$
2055 ift$="1"thenwl=1
2060 ift$="2"thenwl=2
2062 ifwl=0then2050
2064 :
2065 input "{clr}{down}{down}{down}{down}{rght}{rght}{rght}zyklusdauer in sekunden ";zd:zd=zd*55
2070 ifwl=2theninput"{down}{down}{rght}{rght}{rght}durchlaeufe ";dl
2075 input"{down}{down}{rght}{rght}{rght}start bei schritt ";ss:ll=0:print"{down}{down}{down}{rght}{rght}{rght}{rght}{rght}start = < taste >"
2078 gett$:ift$=""then2078
2080 l=an+ss
2090 pokepo,peek(l):ti$="000000"
2110 ifti<zdthen2110
2120 ifpeek(653)=1thenk$="break":ll=ll+1:ss=ss+1:goto2160
2130 ss=ss+1:ifss<=mathen2080
2135 ll=ll+1:ifll<dlthenss=1:goto2080
2140 ifwl=1thenss=1:goto2080
2150 k$="ende"
2160 print"{down}{down}{down}";k$;" bei durchlauf";ll;" schritt";ss-1:goto6000
2180 :
2200 rem *einzel*
2210 input"{clr}{down}{down}{down}{rght}{rght}{rght}durchlaeufe ";dl
2220 input"{down}{down}{rght}{rght}{rght}start bei ";ss:print"{down}{down}{down}{down}{rght}{rght}{rght}{rght}{rght}start = < taste >":ll=0
2230 gett$:ift$=""then2230
2240 l=an+ss:pokepo,peek(l)
2250 ifpeek(653)=1thenk$="break":ll=ll+1:goto2160
2260 ifpeek(653)<>4then2250
2265 ford=1to50:nextd
2270 ss=ss+1:ifss<=mathen2240
2280 ll=ll+1:ifll<dlthenss=1:goto2240
2290 k$="ende":goto2160
2400 :
2500 :
3000 rem *saven*
3010 print"{clr}{down}{down}{down}{down}{down}{down}{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}absaven"
3020 input"{down}{down}{rght}{rght}{rght}{rght}{rght}filename:";na$
3030 open1,8,2,na$+",s,w":gosub5000
3035 print"{down}{rght}{rght}{rght}{rght}{rght}";ds$:ifd1>19then3085
3040 ll=ma+1:print#1,ll
3050 forl=1toll:print#1,peek(an+l):nextl
3085 close1:close15:ifd1>19then3020
3090 print"{down}{rght}{rght}{rght}{rght}{rght}file gespeichert":gosub6000
3100 return
3200 :
3300 :
4000 rem *einlesen*
4010 print"{clr}{down}{down}{down}{down}{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}einlesen"
4012 ifsv=0then4020
4014 input"{down}{rght}{rght}altes programm loeschen??  (j/n)";a$:ifa$<>"j"thenreturn
4020 input"{down}{down}{down}{rght}{rght}{rght}{rght}{rght}filename:";na$
4030 open1,8,2,na$+",s,r":gosub5000
4035 print"{down}{rght}{rght}{rght}{rght}{rght}";ds$:ifd1>19then4100
4040 input#1,ll:ma=ll-1
4050 forl=1toll:input#1,d:pokean+l,d:nextl
4100 close1:close15:ifd1>19then4020
4110 print"{down}{rght}{rght}{rght}{rght}{rght}file eingelesen":sv=1:gosub6000
4120 return
4200 :
4300 :
5000 rem *status*
5010 open15,8,15:input#15,d1,ds$,d2,d3:return
5050 :
5100 print"{clr}":open1,8,0,"$":a=0
5110 get#1,x$,x$
5120 get#1,x$,x$
5130 get#1,x$,x$
5140 get#1,x$:ifst<>0then5220
5150 ifx$<>chr$(34)then5140
5160 get#1,x$:ifx$<>chr$(34)thenprintx$;:goto5160
5170 ifa=0thena=1:print:goto5180
5175 a=0:printtab(20);
5180 get#1,x$:ifx$=chr$(32)then5180
5190 get#1,x$:ifx$<>""then5190
5200 gett$:ift$<>""thengosub5240
5210 ifst=0then5120
5220 print
5230 close1:goto6000
5240 gett$:ift$=""then5240
5250 return
5400 :
5500 rem *disk*
5510 print"{clr}{down}{down}{down}{down}{down}1 _ saven":print"{down}2 _ einlesen":print"{down}3 _ inhalt"
5520 gett$:ift$=""then5520
5525 wa=val(t$):ifwa<1orwa>3then5520
5530 onwagoto3000,4000,5100
5600 :
5700 :
6000 rem *warten*
6005 :
6010 print "{down}{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}<< taste >>"
6020 gett$:ift$=""then6020
6030 return
7000 :
8000 :
9000 rem *test*
9005 :
9010 print"{clr}{down}{down}{down}{rght}{rght}{rght}{rght}peripherietest":print"{down}{down}{down}{rght}{rght}{rvon}m{rvof}enu{down}{down}"
9015 forl=1to8:bi(l)=0:nextl:d=0
9020 print" 1  2  3  4  5  6  7  8":print
9025 goto9055
9030 gett$:ift$=""then9030
9035 ift$="m"thenreturn
9040 lb=val(t$):iflb<1orlb>8then9030
9045 lb=hi(lb)
9050 ifbi(lb)=1thenbi(lb)=0:goto9054
9051 ifbi(lb)=0thenbi(lb)=1
9054 uf=1:gosub290
9055 print"{up}";:forl=8to1step-1:printbi(l);:nextl:print
9060 pokepo,d:goto9030
9100 :
9200 :
10000 rem *menu*
10005 :
10010 print"{clr}{down}{down}{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}p r o.s t  64.1{down}{down}"
10030 print"{down}1 _ eingabe":print"{down}2 _ editieren"
10040 print"{down}3 _ diskette":print"{down}4 _ loeschen":print"{down}5 _ starten"
10050 print"{down}6 _ peripherietest":print"{down}7 _ ende"
10120 gett$:ift$=""then10120
10130 wa=val(t$):ifwa<1orwa>7then10120
10140 onwagosub100,500,5500,80,2000,9000,11000
10150 goto10000
10200 :
10300 :
11000 rem *ende*
11005 :
11010 input"{clr}{down}{down}{down}{down}{down}{rght}{rght}{rght}{rght}{rght}alles gesichert??? (j/n)";a$:ifa$<>"j"thenreturn
11020 pokepo,0:poke56579,0
11030 :
11040 end
11050 :
11055 :
11060 :
12025 rem directory (5100-5400) frei
12030 rem nach commodore vic 1541 sdfd
12035 rem user's manual s.47
12040 rem userportdisplay von jan
12045 rem legenhausen, 64'er 8/84
12050 rem            vielen dank!!!
12055 :
12060 rem zeilen 0-5 und 12025 ff.
12065 rem weglassen!! gilt auch fuer
12070 :
12075 rem ^ solche ^
  0 REM **********************************      *                                * 
  1 REM *     P R O.S T  6 4  (3)        *      *                                * 
  2 REM *         1984  BY               *      *       MICHAEL ANTON            * 
  3 REM *      HERM.ESSIG STR 106        *      *      7141 SCHWIEBERDINGEN      * 
  4 REM *       (07150)/31576            *      *                                * 
  5 REM ********************************** 
  7 REM "ZEILE 9 U.10 WEGLASSEN, WENN SIE DAS USERPORT-DISPLAY AUS DER 64'ER" 
  8 REM "NICHT ALS MASCHINENPROGRAMM NACHLADEN KOENNEN" 
  9 IF SV=0 THENSV=1:LOAD "UPD.49309",8,1 
 10 SYS 49309 
 11 : 
 12 POKE 56,40:CLR 
 13 : 
 14 : 
 15 REM *INIT* 
 16 : 
 20 AN=10240:SV=0:UF=0:BS$(0)="R":BS$(1)="E":PO=56577:POKE 56579,255:POKE PO,0 
 30 POKE 53280,15:POKE 53281,8:PRINT"{CLR,CYAN}" 
 40 FOR L=1 TO8:READ HI(L):NEXT L 
 41 DATA 8,7,6,5,4,3,2,1 
 50 GOTO 10000 
 70 : 
 75 : 
 80 REM *LOESCH1* 
 81 INPUT"{CLR,7DOWN,3RIGHT}SICHER (J/N)";A$:IF A$<>"J" THENRETURN 
 85 MA=0:SV=0:RETURN 
 87 : 
 90 REM *LOESCH2* 
 92 FOR LL=AN+SS TOAN+MA+1:POKE LL,PEEK (LL+1):NEXT LL:MA=MA-1:RETURN 
 93 : 
 95 REM *EINF* 
 97 FOR LL=AN+MA+1 TOAN+LXSTEP -1:POKE LL+1,PEEK (LL):NEXT LL:MA=MA+1:RETURN 
 98 : 
 99 : 
 100 REM *EINGABE* 
 101 : 
 102 IF SV=0 THEN105 
 103 INPUT"{CLR,5DOWN,RIGHT}ALTES PROGRAMM UEBERSCHREIBEN (J/N)";A$ 
 104 IF A$<>"J" THENRETURN 
 105 UF=0 
 110 PRINT"{CLR,2DOWN,3RIGHT}EINGABE{3DOWN}":PRINT"{RVSON}0{RVOFF,2SPACE,RVSON}1{RVOFF,2SPACE,RVSON}DEL{RVOFF,3SPACE,RVSON}RETURN{RVOFF,3SPACE,RVSON}E{RVOFF}NDE" 
 120 GOSUB 6000 
 130 : 
 160 REM *EINSCH* 
 170 LX=1 
 180 PRINT"{DOWN}SCHRITT "LX;TAB( 15);"87654321":PRINTTAB( 15); 
 190 : 
 200 REM *BIN-IN* 
 210 FOR LB=1 TO9 
 220 GET T$:IF (T$="0"OR T$="1")AND LB<9 THEN260 
 225 IF T$=CHR$ (13)AND LB=9 THEN290 
 230 IF T$=CHR$ (20) THENLB=LB-1:PRINT"{LEFT}";:GOTO 220 
 240 IF T$="E" THEN340 
 250 GOTO 220 
 260 BI(LB)=VAL (T$):PRINTT$;:NEXT LB 
 270 : 
 290 REM *BIN-DEZ* 
 295 D=0:H=128 
 300 FOR LB=1 TO8:D=D+BI(LB)*H:H=H/2:NEXT LB 
 305 IF UF=1 THENRETURN 
 310 PRINT"{2RIGHT}";D:POKE AN+LX,D 
 315 IF UF=2 THENRETURN 
 320 LX=LX+1:IF LX+AN<40960 THEN180 
 330 PRINT"{2DOWN,2RIGHT}SPEICHERPLATZ ZUENDE!!" 
 340 PRINT:PRINT"EINGABEENDE BEI SCHRITT ";LX-1:MA=LX-1:SV=1:GOSUB 6000 
 350 RETURN 
 400 : 
 450 : 
 500 REM *EDITIEREN* 
 502 : 
 505 IF SV=0 THENPRINT"{CLR,5DOWN,5RIGHT}SPEICHER LEER":GOTO 6000 
 510 PRINT"{CLR,5DOWN}1 ← SCHRITT LOESCHEN":PRINT"{DOWN}2 ← SCHRITT EINFUEGEN" 
 520 PRINT"{DOWN}3 ← SCHRITT ERSETZEN":PRINT"{DOWN}4 ← VERLAUFSDIAGRAMM":PRINT"{DOWN}5 ← MENU" 
 530 GET T$:IF T$="" THEN530 
 535 WA=VAL (T$):IF WA<1OR WA>5 THEN530 
 540 ON WAGOTO 560,580,587,600,550 
 545 GOTO 500 
 550 RETURN 
 555 : 
 560 REM *LOESCHEN* 
 565 INPUT"{CLR,5DOWN}ZU LOESCHENDER SCHRITT: ";SS:GOSUB 90 
 570 PRINT"{3DOWN,5RIGHT}OK":GOSUB 6000:GOTO 500 
 575 : 
 580 REM *EINFUEGEN* 
 585 INPUT"{CLR,5DOWN,5RIGHT}EINFUEGEN BEI SCHRITT: ";LX:GOSUB 95:GOTO 590 
 587 INPUT"{CLR,5DOWN,5RIGHT}ZU ERETZENDER SCHRITT ";LX 
 590 PRINT"{DOWN}NEUEN SCHRITT EINGEBEN:{DOWN,DOWN}":UF=2:GOSUB 180 
 595 GOSUB 6000:GOTO 500 
 597 : 
 600 REM *DIAGRAMM* 
 602 : 
 605 MS$="QEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEW":SS=1 
 610 KO$="{3SPACE,RVSON}V{RVOFF}OR{SPACE,3SPACE,RVSON}Z{RVOFF}URUECK{SPACE,4SPACE,RVSON}A{RVOFF}NFANG{SPACE,4SPACE,RVSON}E{RVOFF}NDE" 
 615 FOR L=1 TO8:BZ$(L)="":NEXT L:HZ=1 
 617 POKE 211,15:POKE 214,24:SYS 58640:PRINT"BITTE WARTEN!" 
 620 D=PEEK (AN+SS):H=128 
 630 FOR L=1 TO8:BI=INT (D/H) 
 650 BZ$(HI(L))=BZ$(HI(L))+BS$(BI) 
 670 D=D-H*BI:H=H/2:NEXT L 
 680 HZ=HZ+1:SS=SS+1:IF SS>MA THEN700 
 690 IF HZ<=35 THEN620 
 700 PRINT"{CLR,DOWN}":FOR L=1 TO8:PRINTL;BZ$(L):PRINT:NEXT L:PRINT 
 710 PRINTTAB( 3);"{UP}";MS$:PRINT:PRINTTAB( 2);SS-HZ+1:PRINT:PRINTKO$ 
 720 GET T$:IF T$="" THEN720 
 725 IF T$="V"AND SS<MA THEN615 
 730 ZF=0:IF T$="Z"AND SS>35 THENSS=SS-70:ZF=1:IF SS<1 THENSS=1 
 735 IF T$="Z"AND ZF=1 THEN615 
 740 IF T$="A" THENSS=1:GOTO 615 
 745 IF T$="E" THEN500 
 750 GOTO 720 
 1000 : 
 1500 : 
 2000 REM *START* 
 2002 : 
 2003 IF SV=0 THENPRINT"{CLR,5DOWN,5RIGHT}SPEICHER LEER":GOTO 6000 
 2005 PRINT"{CLR,3DOWN,6RIGHT}LAUF":PRINT"{3DOWN}1 ← FREILAUF" 
 2010 PRINT"{DOWN}2 ← EINZELSCHRITT":PRINT"{DOWN,2DOWN,5RIGHT}WAHL?" 
 2015 WAIT 203,63:GET T$ 
 2020 IF T$="1" THEN2040 
 2025 IF T$="2" THEN2200 
 2030 GOTO 2015 
 2040 PRINT"{CLR,6DOWN,3RIGHT}FREILAUF":PRINT"{3DOWN}1 ← DAUERLAUF" 
 2045 PRINT"{DOWN}2 ← X*DURCHLAUFEN":PRINT"{DOWN,2DOWN,5RIGHT}WAHL?" 
 2046 WL=0 
 2050 WAIT 203,63:GET T$ 
 2055 IF T$="1" THENWL=1 
 2060 IF T$="2" THENWL=2 
 2062 IF WL=0 THEN2050 
 2064 : 
 2065 INPUT "{CLR,4DOWN,3RIGHT}ZYKLUSDAUER IN SEKUNDEN ";ZD:ZD=ZD*55 
 2070 IF WL=2 THENINPUT"{2DOWN,3RIGHT}DURCHLAEUFE ";DL 
 2075 INPUT"{2DOWN,3RIGHT}START BEI SCHRITT ";SS:LL=0:PRINT"{3DOWN,5RIGHT}START = < TASTE >" 
 2078 GET T$:IF T$="" THEN2078 
 2080 L=AN+SS 
 2090 POKE PO,PEEK (L):TI$="000000" 
 2110 IF TI<ZD THEN2110 
 2120 IF PEEK (653)=1 THENK$="BREAK":LL=LL+1:SS=SS+1:GOTO 2160 
 2130 SS=SS+1:IF SS<=MA THEN2080 
 2135 LL=LL+1:IF LL<DL THENSS=1:GOTO 2080 
 2140 IF WL=1 THENSS=1:GOTO 2080 
 2150 K$="ENDE" 
 2160 PRINT"{3DOWN}";K$;" BEI DURCHLAUF";LL;" SCHRITT";SS-1:GOTO 6000 
 2180 : 
 2200 REM *EINZEL* 
 2210 INPUT"{CLR,3DOWN,3RIGHT}DURCHLAEUFE ";DL 
 2220 INPUT"{2DOWN,3RIGHT}START BEI ";SS:PRINT"{4DOWN,5RIGHT}START = < TASTE >":LL=0 
 2230 GET T$:IF T$="" THEN2230 
 2240 L=AN+SS:POKE PO,PEEK (L) 
 2250 IF PEEK (653)=1 THENK$="BREAK":LL=LL+1:GOTO 2160 
 2260 IF PEEK (653)<>4 THEN2250 
 2265 FOR D=1 TO50:NEXT D 
 2270 SS=SS+1:IF SS<=MA THEN2240 
 2280 LL=LL+1:IF LL<DL THENSS=1:GOTO 2240 
 2290 K$="ENDE":GOTO 2160 
 2400 : 
 2500 : 
 3000 REM *SAVEN* 
 3010 PRINT"{CLR,7DOWN,12RIGHT}ABSAVEN" 
 3020 INPUT"{2DOWN,5RIGHT}FILENAME:";NA$ 
 3030 OPEN 1,8,2,NA$+",S,W":GOSUB 5000 
 3035 PRINT"{DOWN,5RIGHT}";DS$:IF D1>19 THEN3085 
 3040 LL=MA+1:PRINT#1,LL 
 3050 FOR L=1 TOLL:PRINT#1,PEEK (AN+L):NEXT L 
 3085 CLOSE 1:CLOSE 15:IF D1>19 THEN3020 
 3090 PRINT"{DOWN,5RIGHT}FILE GESPEICHERT":GOSUB 6000 
 3100 RETURN 
 3200 : 
 3300 : 
 4000 REM *EINLESEN* 
 4010 PRINT"{CLR,5DOWN,9RIGHT}EINLESEN" 
 4012 IF SV=0 THEN4020 
 4014 INPUT"{DOWN,2RIGHT}ALTES PROGRAMM LOESCHEN??{2SPACE}(J/N)";A$:IF A$<>"J" THENRETURN 
 4020 INPUT"{3DOWN,5RIGHT}FILENAME:";NA$ 
 4030 OPEN 1,8,2,NA$+",S,R":GOSUB 5000 
 4035 PRINT"{DOWN,5RIGHT}";DS$:IF D1>19 THEN4100 
 4040 INPUT#1,LL:MA=LL-1 
 4050 FOR L=1 TOLL:INPUT#1,D:POKE AN+L,D:NEXT L 
 4100 CLOSE 1:CLOSE 15:IF D1>19 THEN4020 
 4110 PRINT"{DOWN,5RIGHT}FILE EINGELESEN":SV=1:GOSUB 6000 
 4120 RETURN 
 4200 : 
 4300 : 
 5000 REM *STATUS* 
 5010 OPEN 15,8,15:INPUT#15,D1,DS$,D2,D3:RETURN 
 5050 : 
 5100 PRINT"{CLR}":OPEN 1,8,0,"$":A=0 
 5110 GET #1,X$,X$ 
 5120 GET #1,X$,X$ 
 5130 GET #1,X$,X$ 
 5140 GET #1,X$:IF ST<>0 THEN5220 
 5150 IF X$<>CHR$ (34) THEN5140 
 5160 GET #1,X$:IF X$<>CHR$ (34) THENPRINTX$;:GOTO 5160 
 5170 IF A=0 THENA=1:PRINT:GOTO 5180 
 5175 A=0:PRINTTAB( 20); 
 5180 GET #1,X$:IF X$=CHR$ (32) THEN5180 
 5190 GET #1,X$:IF X$<>"" THEN5190 
 5200 GET T$:IF T$<>"" THENGOSUB 5240 
 5210 IF ST=0 THEN5120 
 5220 PRINT 
 5230 CLOSE 1:GOTO 6000 
 5240 GET T$:IF T$="" THEN5240 
 5250 RETURN 
 5400 : 
 5500 REM *DISK* 
 5510 PRINT"{CLR,5DOWN}1 ← SAVEN":PRINT"{DOWN}2 ← EINLESEN":PRINT"{DOWN}3 ← INHALT" 
 5520 GET T$:IF T$="" THEN5520 
 5525 WA=VAL (T$):IF WA<1OR WA>3 THEN5520 
 5530 ON WAGOTO 3000,4000,5100 
 5600 : 
 5700 : 
 6000 REM *WARTEN* 
 6005 : 
 6010 PRINT "{2DOWN,13RIGHT}<< TASTE >>" 
 6020 GET T$:IF T$="" THEN6020 
 6030 RETURN 
 7000 : 
 8000 : 
 9000 REM *TEST* 
 9005 : 
 9010 PRINT"{CLR,3DOWN,4RIGHT}PERIPHERIETEST":PRINT"{3DOWN,2RIGHT,RVSON}M{RVOFF}ENU{DOWN,DOWN}" 
 9015 FOR L=1 TO8:BI(L)=0:NEXT L:D=0 
 9020 PRINT" 1{2SPACE}2{2SPACE}3{2SPACE}4{2SPACE}5{2SPACE}6{2SPACE}7{2SPACE}8":PRINT 
 9025 GOTO 9055 
 9030 GET T$:IF T$="" THEN9030 
 9035 IF T$="M" THENRETURN 
 9040 LB=VAL (T$):IF LB<1OR LB>8 THEN9030 
 9045 LB=HI(LB) 
 9050 IF BI(LB)=1 THENBI(LB)=0:GOTO 9054 
 9051 IF BI(LB)=0 THENBI(LB)=1 
 9054 UF=1:GOSUB 290 
 9055 PRINT"{UP}";:FOR L=8 TO1STEP -1:PRINTBI(L);:NEXT L:PRINT 
 9060 POKE PO,D:GOTO 9030 
 9100 : 
 9200 : 
 10000 REM *MENU* 
 10005 : 
 10010 PRINT"{CLR,3DOWN,9RIGHT}P R O.S T{2SPACE}64.1{2DOWN}" 
 10030 PRINT"{DOWN}1 ← EINGABE":PRINT"{DOWN}2 ← EDITIEREN" 
 10040 PRINT"{DOWN}3 ← DISKETTE":PRINT"{DOWN}4 ← LOESCHEN":PRINT"{DOWN}5 ← STARTEN" 
 10050 PRINT"{DOWN}6 ← PERIPHERIETEST":PRINT"{DOWN}7 ← ENDE" 
 10120 GET T$:IF T$="" THEN10120 
 10130 WA=VAL (T$):IF WA<1OR WA>7 THEN10120 
 10140 ON WAGOSUB 100,500,5500,80,2000,9000,11000 
 10150 GOTO 10000 
 10200 : 
 10300 : 
 11000 REM *ENDE* 
 11005 : 
 11010 INPUT"{CLR,5DOWN,5RIGHT}ALLES GESICHERT??? (J/N)";A$:IF A$<>"J" THENRETURN 
 11020 POKE PO,0:POKE 56579,0 
 11030 : 
 11040 END 
 11050 : 
 11055 : 
 11060 : 
 12025 REM DIRECTORY (5100-5400) FREI 
 12030 REM NACH COMMODORE VIC 1541 SDFD 
 12035 REM USER'S MANUAL S.47 
 12040 REM USERPORTDISPLAY VON JAN 
 12045 REM LEGENHAUSEN, 64'ER 8/84 
 12050 REM            VIELEN DANK!!! 
 12055 : 
 12060 REM ZEILEN 0-5 UND 12025 FF. 
 12065 REM WEGLASSEN!! GILT AUCH FUER 
 12070 : 
 12075 REM ↑ SOLCHE ↑ 
Listing zu Pro.St
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →