5 10 REM ******************************************************************** 20 REM * Programma S2DEB6 Rel 1.0 utilizzando MCS BASIC 52 * 15 REM * per le schede GPCF2 e DEB01 * 30 REM * GRIFO(R) via Dant 1 40016 S.Giorgio di Piano (BO) * 40 REM * Tel.(051)89.20.52 FAX.(051)89.86.61 * 50 REM * * 60 REM * Visualizza sul terminale una calcolatrice comandata dalla * 70 REM * tastiera esadecimale a bordo della DEB01 . * 80 REM * * 90 REM * by Pedrielli Adriano. 19 AGOSTO 1991 * 95 REM ******************************************************************** 100 REM 102 REM Per il collegamento fra le due schede occorre un flat inserito nel 103 REM connettore CN2 da 20 vie della GPCF2 e nel connettore CN4 della 104 REM DEB01 105 REM 107 REM ************************* Main program ************************* 110 REM 112 REM ************** Tballa tasti calcolatrice ****************** 113 REM 114 ? " TASTO -A- EQUIVALE AL (.) " 116 ? " TASTO -B- EQUIVALE AL (=) " 118 ? " TASTO -C- EQUIVALE AL (+) " 120 ? " TASTO -D- EQUIVALE AL (-) " 121 ? " TASTO -E- EQUIVALE AL (*) " 122 ? " TASTO -F- EQUIVALE AL (/) " 123 ? " TASTO -B+9- EQUIVALE AL (CA) " 124 ? 125 ? 126 REM 152 REM ********** Inizializzo port A in out ,port C meta input e output 153 REM 154 SETTAGGIO=64003 : PORTA=64000 : PORTC=64002 : TAST=0 156 XBY(SETTAGGIO)=129 : XBY(PORTA)=255 158 REM ********** Rilevamento tasto 170 B=4 175 XBY(PORTC)=2**B 180 TAST=XBY(PORTC) 190 NTASTI=TAST-(INT(TAST/16)*16) : REM ***** Calcolo numero tasti premuti 193 REM ********** Controllo se il tasto viene tenuto premuto (P) 196 IF TAST=P THEN GOTO 175 198 P=TAST : REM mem. (tasto) 200 REM ********** Controllo numero tasti premuti nella colonna scelta 210 IF NTASTI<15 THEN GOTO 270 : REM *** Se vera e' premuto un tasto 220 B=B+1 : REM ******* Incremento colonna tasti 230 IF B>7 THEN GOTO 170 240 GOTO 175 245 REM 250 REM *********** Selezine tabella ************** 260 REM 270 IF OPER=0.AND.NTASTP=0 THEN ? CHR(13)," ",CHR(13), 275 IF OPER<>0.AND.NTASTP=0 THEN ? CHR(13)," ",CHR(13), 300 IF NTASTP>7 THEN IF TAST<>67.AND.TAST<>71.AND.TAST<134THENGOTO 175 305 IF TAST<31 THEN GOTO 400 : REM ***** da 1 a A 310 IF TAST>134 THEN GOTO 700 : REM ***** da C a F 320 IF TAST>66 THEN GOTO 600 : REM ***** da 3 a B 330 IF TAST>38 THEN GOTO 500 : REM ***** da 2 a 0 340 REM 380 REM ********** Tabelle conversioni ************ 390 REM 400 IF TAST=30 THEN PRINT "1",:TAS=1 :GOTO 735 : REM ******* TASTO 1 410 IF TAST=29 THEN PRINT "4",:TAS=4 :GOTO 735 : REM ******* TASTO 4 420 IF TAST=27 THEN PRINT "7",:TAS=7 :GOTO 735 : REM ******* TASTO 7 430 IF TAST=23.AND.V=0 THEN ? ".", :V=1:GOTO 175 : REM ****(.) TASTO A 435 IF TAST=23.AND.V=1 THEN PWM 10,10,10 :REM **** ERRORE di battitura 437 ? CHR(7), 440 GOTO 175 500 IF TAST=46 THEN PRINT "2",:TAS=2 :GOTO 735 : REM ******* TASTO 2 510 IF TAST=45 THEN PRINT "5",:TAS=5 :GOTO 735 : REM ******* TASTO 5 520 IF TAST=43 THEN PRINT "8",:TAS=8 :GOTO 735 : REM ******* TASTO 8 530 IF TAST=39 THEN PRINT "0",:TAS=0 :GOTO 735 : REM ******* TASTO 0 535 GOTO 175 600 IF TAST=67 THEN OPER=0 :GOSUB 4323 : REM *(CA) Tasto (B+9) 605 IF TAST=78 THEN PRINT "3",:TAS=3 :GOTO 735 : REM ******* TASTO 3 610 IF TAST=77 THEN PRINT "6",:TAS=6 :GOTO 735 : REM ******* TASTO 6 620 IF TAST=75 THEN PRINT "9",:TAS=9 :GOTO 735 : REM ******* TASTO 9 630 IF TAST=71 THEN ?CHR(13),ELSE GOTO 635 633 ?" ",CHR(13),:GOSUB 2000:OPER=0 : REM ****(=) TASTO B 635 GOTO 170 700 IF OPER=0.AND.NTASTP=0 THEN NUMERO1=NUMERO3 703 ? CHR(7), 705 IF TAST=142 THEN GOSUB 2000:OPER=1:GOTO 175: REM ***(+) TASTO C 710 IF TAST=141 THEN GOSUB 2000:OPER=2:GOTO 175: REM ***(-) TASTO D 720 IF TAST=139 THEN GOSUB 2000:OPER=3:GOTO 175: REM ***(*) TASTO E 730 IF TAST=135 THEN GOSUB 2000:OPER=4:GOTO 175: REM ***(/) TASTO F 735 IF V=1 THEN GOSUB 5000 ELSE GOSUB 1000 745 NTASTP=NTASTP+1 760 GOTO 175 770 REM 780 REM **************** Assegnazione valori ****************** 790 REM 1000 ON NTASTP GOTO 1010,1020,1030,1040,1050,1060,1070,1080 1010 VALORE1=TAS :RETURN 1020 VALORE2=TAS :RETURN 1030 VALORE3=TAS :RETURN 1040 VALORE4=TAS :RETURN 1050 VALORE5=TAS :RETURN 1060 VALORE6=TAS :RETURN 1070 VALORE7=TAS :RETURN 1080 VALORE8=TAS :RETURN 1300 REM 1400 REM *************** Calcolo primo numero ***************** 1500 REM 2000 IF NTASTP=0 THEN RETURN 2003 NTASTP=NTASTP-K 2005 IF NTASTP=0 THEN GOTO 4000 : REM ****** Controllo di fine calcolo 2010 NTASTP=NTASTP-1 2020 ON N GOTO 3010,3020,3030,3040,3050,3060,3070,3080 3010 VALORE1=VALORE1*10**NTASTP :GOTO 3075 3020 VALORE2=VALORE2*10**NTASTP :GOTO 3075 3030 VALORE3=VALORE3*10**NTASTP :GOTO 3075 3040 VALORE4=VALORE4*10**NTASTP :GOTO 3075 3050 VALORE5=VALORE5*10**NTASTP :GOTO 3075 3060 VALORE6=VALORE6*10**NTASTP :GOTO 3075 3070 VALORE7=VALORE7*10**NTASTP 3075 N=N+1 3080 GOTO 2005 4000 IF OPER=0 THEN GOTO 4105 4002NUMERO2=VALORE1+VALORE2+VALORE3+VALORE4+VALORE5+VALORE6+VALORE7+VALORE8 4003 IF V=1.AND.OPER<>0 THEN NUMERO2=NUMERO2+PU1+PU2+PU3+PU4+PU5+PU6+PU7+PU8 4010 ON OPER GOTO 4005,4020,4030,4040,4050 4020 NUMERO3=NUMERO1+NUMERO2 :? NUMERO3,: GOTO 4320 4030 NUMERO3=NUMERO1-NUMERO2 :? NUMERO3,: GOTO 4320 4040 NUMERO3=NUMERO1*NUMERO2 :? NUMERO3,: GOTO 4320 4050 NUMERO3=NUMERO1/NUMERO2 :? NUMERO3,: GOTO 4320 4105 NUMERO1=VALORE1+VALORE2+VALORE3+VALORE4+VALORE5+VALORE6+VALORE7+VALORE8 4207 REM ******** Se esiste aggiungo il valore dopo la virgola 4209 IF V=1.AND.OPER=0 THEN NUMERO1=NUMERO1+PU1+PU2+PU3+PU4+PU5+PU6+PU7+PU8 4213 REM 4218 REM ********************* Reset Variabili ********************* 4219 REM 4320 NTASTP=0 4323 VALORE1=0 :VALORE2=0 :VALORE3=0 :VALORE4=0 :VALORE5=0 :VALORE6=0 4330 VALORE7=0 :VALORE8=0 :V=0 :K=0 :N=0 4340 PU1=0 :PU2=0 :PU3=0 :PU4=0 :PU5=0 :PU6=0 :PU7=0 :PU8=0 4412 RETURN 4514 REM 4520 REM ************** Calcolo valore dopo la virgola *************** 4530 REM 5000 K=K+1:ON K GOTO 5005,5010,5020,5030,5040,5050,5060,5070,5080 5010 PU1=TAS/10: RETURN 5020 PU2=TAS/100: RETURN 5030 PU3=TAS/1000: RETURN 5040 PU4=TAS/10000: RETURN 5050 PU5=TAS/100000: RETURN 5060 PU6=TAS/1000000: RETURN 5070 PU7=TAS/10000000: RETURN 5080 PU8=TAS/100000000: RETURN