1 REM !-------------------------------! 2 REM ! GAPHALS1 ! 3 REM ! Simulering av kokarreaktor ! 4 REM ! Fr}n Creative Computing 1980 ! 5 REM ! ABC-80 version (C) 1981 ! 6 REM ! Torbj|rn Alm ! 7 REM ! ! 8 REM !-------------------------------! 10 DIM A$=1%,B$=5% : ; CHR$(12%);' Gaphals1' 20 ; ' ========' 30 ; : ; 'Programmet simulerar k|rning av ett' : ; 'k{rnkraftverk. M}let {r att k|ra kraft-' 40 ; 'verket med h|gsta m|jliga effektuttag' : ; 'utan att riskera ett haveri.' : ; 50 ; 'Kontrollstavarna justerar m{ngden v{rme' : ; 'som genereras i reaktorn. Prim{rkyl-' 60 ; 'kylsystemet transporterar denna v{rme' : ; 'till v{rmev{xlaren. Det sekund{ra kyl-' 70 ; 'systemet transporterar v{rmen fr}n ' : ; 'v{rmev{xlaren till turbinen, d{r kraft' 80 ; 'genereras och slutligen till kyltornen.' : ; 'N|dkylsystemet anv{nds f|r att ta ned' 90 ; 'reaktorn n{r de andra systemen ej g}r.' : ; 'Till skillnad fr}n andra kylmedel, s}' 100 ; 'recirkulerar ej n|dkylsystemet.' 110 ; 'Ange D f|r display, I f|r instruktioner och S f|r att starta' 120 ; 'V{lj:'; : GET A$ : ON INSTR(1%,'DIS',A$)+1% GOTO 10,150,180,400 150 GOSUB 6000 : GOTO 10 180 ; CHR$(12%);'Systemet kontrolleras genom att ange' : ; '|nskat v{rde p} kontrollstavarna samt' 190 ; 'fl|de i kylsystemet (ange v{rde mellan' : ; '0 och 100). Om inget v{rde anges,' 200 ; 'bibeh}lls det gamla v{rdet. Anv{nd' : ; '-> f|r att stega runt och RETURN f|r' 210 ; 'att g} till n{sta dag. Reaktorn kan' : ; 'k|ras till dess att en h{rdsm{lta sker' 220 ; 'eller br{nslet tar slut. Br{nslet r{cker'; : ; 'i 100-150 dagar. N{r br{nslet {r slut,' 230 ; 'utv{rderas ditt resultat.' 240 ; 'Om du vill reparera en trasig del eller' : ; 'eller ers{tta kylv{tskan, s{nk reaktor-' 250 ; 'temperaturen till under 100 grader och' : ; 'st{ng av kylsystemet. Detta medf|r en' 260 ; 'automatiskt avst{ngning f|r underh}ll' : ; 'och all kylv{tska vill bli ersatt och' 270 ; 'reparationer utf|rs. Ju st|rre skada,' : ; 'ju l{ngre tid f|r reparation.' 280 ; ' Varning reaktorn har inget' : ; ' automatiskt s{kerhetssystem' 290 GOTO 110 300 DEFFNA%=1%-(R0%>850%)-(R0%>900%)-2%*(R0%>950%) 310 DEFFNJ%=INSTR(1%,'0123456789'+CHR$(9%,13%),A$) 370 FOR I=1 TO 5000 : NEXT I 390 REM intiate 400 GOSUB 2000 : R1=0% : R2=0% : D%=0% : T1=0% : D2%=0% : A%=0% : A1%=0% : A2%=0% 460 REM write report 470 D%=D%+1% : ; CHR$(12%);' K{rnkraftverket GAPHALS1' : ; ' Statusrapport f|r dag'D% : ; : ; 'Varningar:' 520 IF R0%>800% ; 'Reaktorn |verhettad' : R1%=R1%+FNA% : P1%=P1%+1% : E1%=E1%+1%-(R0%>850%) 530 IF X0%>500% ; 'V{rmev{xlaren |verhettad' : X1%=X1%+1%-(X0%>600%) : P1%=P1%+1% : S1%=S1%+1% 540 IF G0%>2000% ; 'Turbinen |verlastad' : S1%=S1%+1% : T1%=T1%+1%-(G0%>2500%) 550 IF C1%>300% ; 'Kyltornet |verhettat' : S1%=S1%+1% 560 IF G0%<1000% ; 'F|r l}gt effektuttag' 570 IF E2%<200% ; 'F|r l}g niv} i n|dkylsystemet' 580 IF P2%<100% ; 'F|r l}g niv} i prim{rkylsystemet' : P1%=P1%+1% 590 IF S2%<100% ; 'F|r l}g niv} i sekund{rkylsystemet' : S1%=S1%+1% 600 ; : ; 'Skador:' 620 IF R1%>3% ; 'Keaktork{rnan skadad' 630 IF P1%>4% ; 'L{ckage i prim{rkylsystemet - ';P1%;'/dag' : P2%=(P1%-P2%)*(P2%-P1%>0%) 640 IF S1%>4% ; 'L{ckage i sekund{rkylsystemet - ';S1%;'/dag' : S2%=(S1%-S2%)*(S2%-S1%>0%) 650 IF E1%>2% ; 'L{ckage i n|dkylsystemet';2%*E1%;'/dag' : E2%=(2%*E1%-E2%)*(E2%-2%*E1%>0%) 660 IF P3% THEN ; 'Haveri p} prim{rsystemets pump - ';-10%*P1%*(P1%<10%)-100%*(P1%>=10%)'%' 670 IF S3% THEN ; 'Haveri p} sekund{rsystemets pump - ';-10%*S1%*(S1%<10%)-100%*(S1%>=10%);'%' 680 IF X3% ; 'Haveri p} v{rmev{xlaren' 690 IF G3% ; 'Turbinhaveri' 700 ; : IF R1%>5% ; ' H{rdsm{lta! H{rdsm{lta! H{rdsm{lta!' : ; ' =========== =========== ===========' : GOTO 3000 720 ; 'Indikeringar:' 730 ; ' Temp. reaktor (max 800)='R0% 740 ; ' Temp. V{rmev{xlare (max 500)=';X0% 750 ; ' Temp. kyltorn (max 300)=';C1% 760 ; ' Uteffekt (max 2000kW)='G0%'kW' 770 ; ' Medeluteffekt ='; : K3%=T1/D% : ; K3%'kW' 780 A2%=A1% : A1%=A% 800 ; 'Kontrollstavarnas l{ge:'A% 810 ; 'Kylsystemet' 820 ; 'Niv} n|dkylsystemet -'E2%' fl|de'E4% 830 ; 'Niv} prim{rkylsystemet -'P2%' fl|de'P4% 840 ; 'Niv} sek. kylsystemet -'S2%' fl|de'S4% 850 IF (100-R2)<5 ; : ; : ; 'Reaktorbr{nslet slut' : GOTO 4000 900 REM nya kontrollv{rden 910 P%=PEEK(65011%)-2% : IF P%>19% 3000 : REM cursor row 920 ; CUR(P%-3%,24%); : B$='' : FOR I%=1% TO 4% 960 GET A$ : J%=FNJ% : IF J%=0% THEN 960 970 B$=B$+A$ : IF J%=12% THEN 1170 ELSE IF J%=11% GOTO 990 980 A%=VAL(B$) : A%=A%-(100%-A%)*(A%>100%) : ; A$; : NEXT I% 990 ; CUR(P%-1%,36%); : B$='' : FOR I%=1% TO 4% 1010 GET A$ : J%=FNJ% : IF J%=0% THEN 1010 1020 B$=B$+A$ : IF J%=12% THEN 1170 ELSE IF J%=11% GOTO 1050 1030 E4%=VAL(B$) : E4%=E4%-(100%-E4%)*(E4%>100%) : IF E4%>E2% THEN E4%=E2% 1040 ; A$; : NEXT I% 1050 ; CUR(P%,36%); : B$='' : FOR I%=1% TO 4% 1070 GET A$ : J%=FNJ% : IF J%=0% THEN 1070 1080 B$=B$+A$ : IF J%=12% THEN 1170 ELSE IF J%=11% GOTO 1110 1090 P4%=VAL(B$) : P4%=P4%-(100%-P4%)*(P4%>100%) : ; A$; : NEXT I% 1110 ; CUR(P%+1%,36%); : B$='' : FOR I%=1% TO 4% 1130 GET A$ : J%=FNJ% : IF J%=0% THEN 1130 1140 B$=B$+A$ : IF J%=12% THEN 1170 ELSE IF J%=11% GOTO 1160 1150 S4%=VAL(B$) : S4%=S4%-(100%-S4%)*(S4%>100%) : ; A$; : NEXT I% 1160 ; CUR(P%-3%,0%); : GOTO 800 1170 IF P4%+S4%=0% AND R1<1 AND R0%<100% AND A%=0% GOSUB 2000 : ; 'Reaktorn repareras i 'M1%' dagar' : GOTO 370 1180 IF E4%>E2% THEN E4%=E2% 1200 REM ber{kna skador och operation 1205 E2%=E2%-E4%+2%*E1%*(E1%>3%) 1210 P1%=P1%+(P4%>90%)*(RND>.95) : P3%=P1%>5% 1220 S1%=S1%+(S4%>90%)*(RND>.92) : S3%=S1%>5% 1250 IF P4%>(100%-P1%*10%) AND P3% THEN P4%=-(100%-P1%*10%)*(100%-P1%*10%>0%) 1260 IF S4%>(100%-S1%*10%) AND S3% THEN S4%=-(100%-S1%*10%)*(100%-S1%*10%>0%) 1270 R2=R2+R1/50 : R1=(A%*30%+A1%*60%+A2%*10%)*.0004*(100-R2) 1300 P=P4%*(-100%*(P2%>100%)-P2%*(P2%<=100%))/350 1310 E=E4%*.005*(R0%-25%) 1320 R0%=R0%+R1-E-P+5%*(R0%>25%) : R0%=25%-(R0%-25%)*(R0%>25%) 1330 X0%=((R0%-25)*P4%+(C1%-25)*S4%)/(P4%+S4%+1)+25 1340 IF X3% THEN X0%=R0%*.8+5 1350 S=S4%*(-100%*(P2%>100%)-P2%*(P2%<=100%))/350*(X0%-C1%) 1360 IF X3% S=S*.2 1370 G0%=S/X0%*(X0%-C1%)*2/3 1375 IF G0%>2600% THEN G0%=2600% 1380 G0%=G0%*(G0%>0%)*(G3%=0%) 1390 C1%=25%+((X0%-25%)*(S-G0%)/(S+1)*.75) : C1%=-25%*(C1%<=25%)-C1%*(C1%>25%) 1400 IF X3%<1% THEN X3%=(X1%>2%)*(RND>.9) 1410 IF G3%<1% THEN G3%=(G1%>4%)*(RND>.9) 1420 T1=T1+G0% : GOTO 470 2000 REM maintenance repair 2010 E2%=300% : P2%=120% : S2%=120% : R0%=25% : X0%=25% : C1%=25% 2070 D2%=D2%+2%*R1%+E1%+P1%+X1%+S1%+G1% 2080 M1%=5%+3%*(-10%*(R1%>3%)-(E1%>3%)-(P1%>3%)-(S1%>3%)+2*P3%+2%*S3%+3%*X3%+3%*G3%) : D%=D%+M1% 2090 R1%=0% : E1%=0% : P1%=0% : X1%=1% : S1%=1% : G1%=0% : P3%=0% : S3%=0% : X3%=0% : G3%=0% : E4%=0% : P4%=0% 2100 S4%=0% : G0%=0% : RETURN 3000 REM h{rdsm{lta!!! 3005 IF R1%>6% THEN 3100 3010 ; : ; 'Reaktork{rnan har f|rst|rts genom en' : ; 'okontrollerad v{rmeutveckling.' 3020 ; 'Emellertid {r {nnu reaktorbyggnaden hel.' 3030 ; 'Starta evakueringen.' 3090 GOTO 5000 3100 ; 'Reaktorh{rden har sm{lt ned och orsakat' : ; 'en }ngexplosition. Reaktorbyggnaden har' 3110 ; 'skadats. Radioaktiva gaser har l{ckt ut.' : ; 'Initiera planerna f|r evakuering och' 3120 ; 'f|r dekontaminering av radioaktiva ut-' : ; 'sl{pp samt medicinsk hj{lp.' 3130 GOTO 5000 4000 REM Utv{rdera resultatet 4010 ; : ; 'Under en period av'D%' dagar har du' : ; 'producerat en genomsnittlig uteffekt' 4020 ; 'av'K3%' kW' 4030 W%=1%-(K3%>1000%)-(K3%>1200%)-(K3%>1500%)-(K3%>1800%) 4040 ; 'Din genomsnittliga kraftproduktion var' 4050 ON W% GOTO 4090,4100,4110,4120,4140 4090 ; 'Urusel!! S|k ett mindre kr{vande jobb!' : GOTO 4200 4100 ; 'L}ngt under kraftbehovet i ditt omr}de' : GOTO 4200 4110 ; 'Hyggligt. Du borde kunna g|ra det b{ttre' : GOTO 4200 4120 ; 'Utm{rkt! Kraftpriset i ditt omr}de' : ; 'kommer ej att beh|va h|jas.' : GOTO 4200 4140 ; 'N{ra maximum! Kraftpriset i ditt omr}de' : ; 'kommer att kunna s{nkas betydligt.' 4200 REM analys av skador 4220 S%=1%-(D2%>10%)-(D2%>20%)-(D2%>30%) 4230 ; 'Skadorna p} utrustningen var'; : ON S% GOTO 4260,4270,4280,4290 4260 ; ' ringa' : GOTO 5000 4270 ; ' m}ttliga' : GOTO 5000 4280 ; ' stora' : GOTO 5000 4290 ; ' allvarliga' 5000 ; 'slut' : GET A$ : GET A$ 5010 GOTO 10 6000 REM 6001 ONERRORGOTO 8000 6005 ; CHR$(12%); : FOR I%=0% TO 22% : ; CUR(I%,0%);CHR$(151%); : NEXT I% 6010 FOR I9%=1% TO 9% : GOSUB 7100 : READ N9% 6020 FOR N8%=1% TO N9% : READ Y9%,X9%,X$ : ; CUR(Y9%,X9%);X$; : NEXT N8% 6030 FOR I=1 TO 2000 : NEXT I : NEXT I9% 6060 GET A$ : GET A$ : RETURN 6100 DATA 32,12,15,12,30,33,12,10,35,14,8,37,16,8,13,18,32,37,18,8,11,20,34,37,20 6110 DATA 8,11,22,34,37,22,8,11,24,34,37,24,8,11,26,34,37,26,8,11,28,34,37,28,8,11,30,34,37,30 6120 DATA 8,11,32,34,37,32,8,11,34,34,37,34,8,11,36,34,37,36,9,13,38,32,36,38,11,33,40,13,31,42 6130 DATA 26,28,12,27,29,11,27,31,10,29,31,9,2,3,17,REAKTOR,4,19,K[RL 6140 DATA 6,19,35,-18,19,35,-20,19,35,-22,19,35,-24,19,35,-26,19,35,-28,1,12,9,K[RNA 6155 GET A$ 6160 DATA 2,4,32,-21,4,32,-25,1,0,8,STYRSTAVAR 6170 DATA 9,3,8,-2,3,8,-6,3,5,8,-9,23,-4,-4,16,24,-24,32,-16,-4,16,32,-32,48,-4,3,5,5 6180 DATA 1,0,1,N\DKYL 6190 DATA 9,4,10,-50,4,10,-54,50,54,7,50,54,10,-11,25,-52,-22,60,25,-25,33,-60,-23,59,33 6200 DATA -25,33,-23,1,0,22,'PRIM KYL' 6210 DATA 4,56,66,21,56,66,37,21,37,-56,21,37,-66,2,5,28,V[RME,6,27,V[XLARE 6220 DATA 5,10,31,51,10,31,63,51,63,-10,51,63,-31,4,33,57,1,22,6,GENERATOR 6230 DATA 9,45,47,-48,47,48,-49,48,51,-50,51,68,-51,45,47,-63,47,48,-62,48,51,-61,51,68,-60 6240 DATA 48,63,68,1,14,25,KYLTORN 6250 DATA 18,4,10,-67,4,10,-73,67,73,6,67,73,10,-11,25,-70,-63,73,25,-25,62,-73,-47,50,-12 6260 DATA -12,39,47,-40,47,-39,-25,33,-63,-63,69,33,-33,39,-68,-32,52,61,52,55,62,-39,68,39 6270 DATA 55,58,61,-58,73,62,2,0,31,'SEK KYL',23,16,GAPHALS1 7000 REM RITA 7010 FOR J%=B1% TO B2% : SETDOT C%,J% : NEXT J% : RETURN 7030 FOR J%=B1% TO B2% : SETDOT J%,-C% : NEXT J% : RETURN 7050 FOR J%=-B1% TO B2% STEP 2% : SETDOT C%,J% : NEXT J% : RETURN 7070 FOR J%=-B1% TO B2% STEP 2% : SETDOT J%,-C% : NEXT J% : RETURN 7100 REM DRAW 7110 READ N% : FOR I%=1% TO N% 7120 READ B1%,B2%,C% : ON 1%-(C%<0%)-2%*(B1%<0%) GOSUB 7010,7030,7050,7070 7130 NEXT I% : RETURN 8000 ; B1%,B2%,C%,J%,I%,N8% 8900 END