1 REM Ins{nd av David Andersson <5201> 1986-12-12 21.07.01 (DUMP) 10 REM . SAVE WTERM 20 REM -------------------------------- 30 REM 1986-09-18 40 REM DAVID ANDERSSON <5201> 50 REM 60 REM TERMINALRUTIN I BASIC 70 REM V24 RUTINER I ASSEMBLY (SOFTSIO) 80 REM SK[RMEN INDELAD I TV] F\NSTER 90 REM -------------------------------- 100 REM 110 REM ANV[NDA VARIABLER; 120 REM A1% A2% A3% A4% A5% A% B1% C1% C2% C% C$() F1% F1$ F2% F% F$ G% G$ 130 REM K1% K1%() K2% K% K%() S1% S2% V1% V1%() V2% V% V%() W% X1% X% Z% 140 REM 200 REM -- INIT DATA 201 DIM C$(23%)=0% : REM MAPPAS P] SK[RMEN! 202 X1%=PEEK(65065%)+SWAP%(PEEK(65066%)) 203 X1%=PEEK(X1%+4%)+SWAP%(PEEK(X1%+5%)) 205 FOR X%=0% TO 23% 206 POKE X1%+X%*6%,PEEK(590%),0%,PEEK(884%+X%*2%),PEEK(885%+X%*2%),PEEK(590%),0% 207 NEXT X% 210 DIM F1$=122% : REM S[ND FIL BUFFERT 220 F1%=0% : REM FILNUMMER, S[ND FIL 230 F2%=0% : REM FILNUMMER, SPELA IN FIL 240 F%=1% : REM STATUS; 1=NORMAL, 2=SPELA IN FIL 250 GOSUB 1000 : REM INIT TABELLER 260 REM -- ADRESS TILL V24 RUTINER 265 REM [NDRA TILL A%=49152% F\R 16K MINNE 270 A%=32768% : IF PEEK(A%)<>195% STOP 280 REM A1%..A5% F\R SNABBARE CALL-SATSER 290 A1%=A%+15% : REM TEST IF INDATA 300 A2%=A%+30% : REM CHAR TO SCREEN AND UPDATE CURSOR 310 A3%=A%+18% : REM GET INDATA 320 A4%=A%+27% : REM GET FROM KEYBOARD 330 A5%=A%+24% : REM SEND DATA 340 REM -- DEFAULT V24 INST[LLNINGAR 350 X1%=1% : REM XON/XOFF=YES 360 S1%=300% : REM S[ND I 75 BAUD 370 S2%=300% : REM TAEMOT I 1200 BAUD 380 B1%=0% : REM PARITET KOD (7 BIT = DATA OCH 1 BIT = 0) 385 W%=16% : REM GR[NS 386 ; CUR(W%+1%,0%)STRING$(40%,ASC('-')); 390 GOSUB 4100 : REM INST[LLNINGAR 400 ; CUR(23%,0%); 500 REM 510 REM -- MAIN PROGRAM 520 REM KOMMENTAR-RADER MED "!!" TAS BORT F\R ATT SNABBA UPP PROGRAMMET 530 C%=1% : REM LOOP STYRNING 540 GOSUB 5000 : REM STARTA V24 INTERUPT 550 Z%=CALL(A2%) : REM T[ND CURSOR 560 REM MAIN LOOP 570 REM !! TESTA OM DATA MOTTAGET 580 IF CALL(A1%)<256% GOTO 650 590 REM !! H[MTA OCH BEHANDLA MOTTAGET DATA, 3 GGR F\R ATT SPARA TID 600 REM !! CALL(A2%,..) SKRIVER P] SK[RMEN OCH UPDATERAR CURSORN 605 POKE 65011%,W%,C1% 610 V%=CALL(A3%,128%) : Z%=CALL(A2%,V%(V%)) : IF V1%(V%) AND F% GOSUB 2000 620 V%=CALL(A3%,128%) : Z%=CALL(A2%,V%(V%)) : IF V1%(V%) AND F% GOSUB 2000 630 V%=CALL(A3%,128%) : Z%=CALL(A2%,V%(V%)) : IF V1%(V%) AND F% GOSUB 2000 635 C1%=PEEK(65012%) : POKE 65011%,22%,C2% 640 REM !! TESTA OM TANGENT NEDTRYCKT 650 K%=CALL(A4%,128%) : IF K%=128% GOTO 730 660 REM !! KLICK I H\GTALAREN 670 OUT 6%,0%,6%,121% 680 REM !! S[ND DATA ENLIGT K%() OCH EKA LOKALT 690 IF K%(K%) Z%=CALL(A5%,K%(K%)) : IF K%>=32% Z%=CALL(A2%,K%(K%)) 700 REM !! EVENTUELL SPECIALBEHANDLING 710 IF K1%(K%) GOSUB 3000 720 REM !! S[NDA TECKEN FR]N FIL 730 IF F1% GOSUB 6000 740 REM !! LOOP UNTIL C%=0 745 C2%=PEEK(65012%) 750 IF C% GOTO 560 760 REM END LOOP 770 REM 780 Z%=CALL(A%) : REM ST[NG V24 INTERUPT 790 END 1000 REM ------ INIT TABELLER 1010 REM INDEX I F\LJANDE TABELLER [R ASCII V[RDEN (0..127). 1020 REM INDEX 128 BETYDER ATT INGET TECKEN FINNS TILLG[NGLIGT 1021 REM FR]N V24 ELLER TANGENTBORDET. 1022 REM TABELLER BLIR SNABBARE [N ATT TESTA MED EN MASSA IF-SATSER 1023 REM P] VARJE TECKEN. 1030 DIM V%(128%) : REM OMVANDLA MOTTAGNA ASCII (0=STRUNA I TKN) 1040 DIM V1%(128%) : REM SPECIALBEHANDLA MOTTAGET TKN (1=NORMAL,2=FILE,3=1+2) 1050 DIM K%(128%) : REM OMVANDLA S[NDA TANGENTKODER (0=STRUNTA I TANGENT) 1060 DIM K1%(128%) : REM SPECIALBEHANDLA TANGENTER 1070 FOR V%=0% TO 128% : V%(V%)=V% : V1%(V%)=2% : NEXT V% 1080 FOR K%=0% TO 127% : K%(K%)=K% : K1%(K%)=0% : NEXT K% 1090 REM DATA MOTTAGET ASCII , VISA P] SK[RMEN , SPECIAL BEHANDLA 1100 DATA 0,0,2 1110 DATA 1,0,0 1120 DATA 2,0,0 1130 DATA 3,0,0 1140 DATA 4,0,0 1150 DATA 5,0,0 1160 DATA 6,0,0 1170 DATA 9,32,0 1180 DATA 10,0,3 1190 DATA 11,0,0 1200 DATA 13,13,3 1210 DATA 14,0,0 1220 DATA 15,0,0 1230 DATA 16,0,0 1240 DATA 17,0,0 1250 DATA 18,0,0 1260 DATA 19,0,0 1270 DATA 20,0,0 1280 DATA 21,0,0 1290 DATA 22,0,0 1300 DATA 23,0,0 1310 DATA 24,0,0 1320 DATA 25,0,0 1330 DATA 26,0,0 1340 DATA 27,0,0 1350 DATA 28,0,0 1360 DATA 29,0,0 1370 DATA 30,0,0 1380 DATA 31,0,0 1390 DATA 128,0,0 1400 DATA -1,0,0 1410 REM DATA TANGENT KOD , S[ND ASCII , SPECIAL BEHANDLA 1420 DATA 0,0,1 1430 DATA 1,0,1 1435 DATA 8,0,8 1440 DATA 10,0,10 1450 DATA 13,0,13 1460 DATA -1,0,0 1470 READ V%,V1%,V2% 1480 IF V%>=0% V%(V%)=V1% : V1%(V%)=V2% : GOTO 1470 1490 READ K%,K1%,K2% 1500 IF K%>=0% K%(K%)=K1% : K1%(K%)=K2% : GOTO 1490 1510 RETURN 2000 REM ------ SPECIALBEHANDLA MOTTAGET DATA 2010 REM SPECIALBEHANDLA TECKEN 2020 IF V%=0% IF F2% GOSUB 4800 : REM STOPPA INSPELNING TILL FIL 2030 IF V%=10% GOSUB 2100 : REM LINEFEED 2040 REM SKRIV TECKEN TILL FIL (INGEN KOLL P] ERR 20) 2050 IF F2% THEN IF V%(V%) ONERRORGOTO 4950 : PRINT #F2%CHR$(V%(V%)); : ONERRORGOTO 0 2060 RETURN 2100 REM ------ SCROLLA \VRE F\NSTRET 2101 POKE 65011%,0% : Z%=CALL(A2%) 2110 FOR X%=0% TO W%-1% : C$(X%)=C$(X%+1%) : NEXT X% 2120 C$(W%)=SPACE$(PEEK(590%)) 2121 POKE 65011%,W% : Z%=CALL(A2%) 2140 RETURN 3000 REM ------ SPECIALBEHANDLA TANGENT 3020 IF K%=1% THEN GOSUB 4000 : REM INST[LLNINGAR 3030 IF K%=0% THEN Z%=CALL(A5%,0%) : REM S[ND NULL 3033 IF K%=8% THEN Z%=CALL(A5%,8%)+CALL(A2%,8%) 3034 IF K%=13% THEN Z%=CALL(A5%,13%)+CALL(A2%,13%) : K%=10% 3035 IF K%=10% THEN Z%=CALL(A5%,10%) : GOSUB 3500 3040 RETURN 3500 REM ------ SCROLLA UNDRE F\NSTER 3501 POKE 65011%,0% : Z%=CALL(A2%) 3510 FOR X%=W%+2% TO 21% : C$(X%)=C$(X%+1%) : NEXT X% 3520 C$(22%)=SPACE$(PEEK(590%)) 3521 POKE 65011%,22% : Z%=CALL(A2%) 3530 RETURN 4000 REM ------ INST[LLNINGAR 4020 C2%=PEEK(65012%) 4030 Z%=CALL(A%) : REM ST[NG V24 INTERUPT 4040 GOSUB 4100 : REM MENY 4050 IF C% GOSUB 5000 : REM STARTA V24 INTERUPT 4070 POKE 65012%,C2% 4080 RETURN 4100 REM ------ INST[LLNINGAR (MENY) 4101 GOSUB 4600 : GOSUB 4800 : REM ST[NG FILER 4105 REM 4110 FOR X%=0% TO 10% : ; CUR(X%,0%)TAB(39%); : NEXT X% 4120 ; CUR(0%,0%)'============== BASTERM ================' 4130 ; '1 MOTTAGNINGS HASTIGHET...'S2% 4140 ; '2 S[ND HASTIGHET..........'S1% 4150 ; '3 XON/XOFF (JA=1).........'X1% 4160 ; '4 PARITET KOD (SPACE=0)...'B1% 4170 ; '5 S[ND FIL................'; : IF F1% ; F$ ELSE ; 4180 ; '6 SPELA IN FIL............'; : IF F2% ; F$ ELSE ; 4190 ; '7 TERMINAL ON LINE (TILLBAKA M. CTRL-A)' 4200 ; '9 AVSLUTA' 4210 ; 4220 ; '======================================='; 4230 ; CUR(9%,1%)'V[LJ SIFFRA'; : GET G$ : G%=ASC(G$)-48% 4240 ; CUR(9%,0%)TAB(39%)CUR(9%,0%); 4250 IF G%=1% ; 'MOTTAGNINGS HASTIGET'; : INPUT S2% 4260 IF G%=2% ; 'S[ND HASTIGHET'; : INPUT S1% 4270 IF G%=3% IF X1% X1%=0% ELSE X1%=1% 4280 IF G%=4% ; 'PARITET KOD (SPACE=0,NONE=4,MM.)'; : INPUT B1% 4290 IF G%=5% GOSUB 4500 4300 IF G%=6% GOSUB 4700 4310 IF G%=7% GOTO 4400 : REM ON LINE 4320 IF G%=9% C%=0% : RETURN 4330 GOTO 4105 4340 RETURN 4400 REM ON LINE 4410 GOSUB 5100 : REM INIT V24 RUTINER 4420 ; CUR(10%,0%)TAB(39%); 4430 Z%=CALL(A%+27%) : REM DUMMY L[S FR]N TANGENTBORDET 4440 RETURN 4500 REM ------ STARTA S[ND FIL F$ 4501 IF F1% OR F2% GOSUB 4600 : GOSUB 4800 4502 ; 'S[ND FIL FR]N VILKEN FIL'; : INPUT F$ : IF F$='' RETURN 4510 ONERRORGOTO 4900 : F1%=1% : F1$='' 4520 OPEN F$ ASFILE F1% 4530 ONERRORGOTO 0 4540 RETURN 4600 REM ------ STOPPA S[ND FIL 4610 IF F1% CLOSE F1% : F1%=0% 4620 RETURN 4700 REM ------ STARTA INSPELNING TILL FIL F$ 4701 IF F1% OR F2% GOSUB 4600 : GOSUB 4800 4702 ; 'SPARA P] FIL, SKAPA NY FIL'; : INPUT F$ : IF F$='' RETURN 4710 ONERRORGOTO 4950 : F2%=1% 4720 PREPARE F$ ASFILE F2% 4730 ONERRORGOTO 0 4740 F%=2% 4750 RETURN 4800 REM ------ STOPPA INSPELNING TILL FIL 4810 IF F2% ONERRORGOTO 4900 : CLOSE F2% : F2%=0% : F%=1% : ONERRORGOTO 0 4820 RETURN 4900 REM ERROR F1% 4910 CLOSE F1% : F1%=0% 4920 IF ERRCODE=34% RETURN 4930 ; : ; '- ERROR'ERRCODE' FILE 'F$;CHR$(7%) 4940 RETURN 4950 REM ERROR F2% 4960 CLOSE F2% : F2%=0% : F%=1% 4970 ; : ; '- ERROR'ERRCODE' FILE 'F$;CHR$(7%) 4980 RETURN 5000 REM ------ STARTA V24 INTERUPT 5010 REM OVERFLOW TECKEN = 127 5020 Z%=CALL(A%+3%,127%+SWAP%(0%)) 5030 RETURN 5100 REM ------ INIT V24 RUTINER 5110 Z%=CALL(A%+12%,X1%) : REM INIT XON/XOFF 5120 Z%=CALL(A%+6%,S1%+B1%*4096%) : REM S[TT MOTTAGN.HASTIGHET OCH PARITET 5130 Z%=CALL(A%+9%,S2%+B1%*4096%) : REM S[TT S[NDHASTIGHET OCH PARITET 5140 RETURN 6000 REM ------ S[ND ETT TECKEN FR]N FIL 6001 REM KOLLA F\RST UTBUFFERTEN 6005 IF CALL(A%+21%)>10% RETURN 6010 IF F1$<>'' GOTO 6100 6020 ONERRORGOTO 4900 6030 INPUTLINE #F1%,F1$ 6040 F1$=LEFT$(F1$,LEN(F1$)-1%) : REM TA BORT LF 6050 ONERRORGOTO 0 6100 K%=ASC(F1$) : F1$=RIGHT$(F1$,2%) 6110 Z%=CALL(A5%,K%) : REM S[ND DATA 6120 RETURN