10 REM C-64 CALCULATOR 12 PRINT"[147]":GOSUB206:GOSUB152:GOSUB220 14 IFPEEK(53247)<>88THEN290 16 GOSUB228 18 Z=0 20 IFBA<>10THENS$(Z)=H$:Z=Z+3:GOTO24 22 S$(Z)=D$:Z=Z+3 24 GETA$:IFA$=""THEN24:REM SCAN KEYS 26 IFF6=0THENPOKES+1,80+4*F7*VAL(A$):POKES,177:POKES+4,33:FORT=1TO20:NEXT:POKES+4,32 28 IFBA<>10THEN258 30 FORI=1TO15:IFA$=MID$(N$,I,1)THEN36 32 NEXT 34 GOTO62:REM A$ NOT NUMERIC 36 REM ADD TO D$ 38 IF(A$="-"ORA$="+")THEN42 40 GOTO44 42 IF(F3<>0ANDRIGHT$(D$,1)<>"E")ORF5=1THEN62 44 IFD$=" 0"ORF4=1THEND$=" ":F1=0:F2=0:F3=0:F4=0:M=0 46 F3=1 48 IFA$="_"THEND$=LEFT$(D$,LEN(D$)-1):F1=0:F2=0:GOSUB228:GOTO24 50 IFA$="."ANDF1=1THEN24 52 IFA$="E"ANDF2=1THEN24 54 IFA$="."THENF1=1 56 IFA$="E"THENF2=1:F1=1 58 IFLEN(D$)<15THEND$=D$+A$ 60 GOSUB228:GOTO24 62 M=0:F1=0:IF BA<>10THENS$(Z)=H$:Z=Z+1:GOTO66 64 S$(Z)=D$:Z=Z+1 66 DD=0:FORI=1TOLEN(OP$):IFA$=MID$(OP$,I,1)THEN76 68 NEXTI:IFA$="[133]"THENZ=Z-1:GOTO270 70 IFA$="H"THENZ=Z-1:GOTO302 72 IFA$="[135]"THENF6=-(F6=0):IFF6=1THENF7=-(F7=0) 74 GOTO24 76 F4=1:F5=1:D=VAL(D$):D$=STR$(D) 78 ONIGOTO102,100,100,100,100,100,100,114,80,82,84,84,116,118,134,136,138 80 D$=" 0":F3=0:F5=0:OP=O:A=0:GOSUB228:S$(Z)="CLEAR DISPLAY":Z=Z+1:GOTO24 82 FORI=1TO8:R(I)=0:NEXT:GOSUB220:FORI=1TOZ:S$(I)="":NEXT:Z=1:GOTO24 84 IFA$="S"THENPRINT" [157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]SAVE REGISTER?":GOTO88 86 PRINT" [157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]RECALL?" 88 GETB$:IFB$=""THEN88 90 IFB$=CHR$(13)THEN80 92 J=VAL(B$):IFJ>=1ANDJ<=8THEN96 94 GOTO84 96 IFA$="R"THENS$(Z)="RECALL #"+B$:Z=Z+1:D$=STR$(R(J)):GOSUB228:GOTO24 98 R(J)=VAL(D$):S$(Z)="SAVE TO #"+B$:Z=Z+1:GOSUB228:GOSUB220:GOTO24 100 GOSUB120:OP=I:A=VAL(D$):S$(Z)=A$:Z=Z+1:GOSUB228:GOTO24 102 S$(Z)="= ":Z=Z+1:ONOPGOTO24,104,106,108,108,110,112 104 D$=STR$(A+VAL(D$)):GOSUB228:A=0:OP=0:GOTO20 106 D$=STR$(A-VAL(D$)):GOSUB228:A=0:OP=0:GOTO20 108 D$=STR$(A*VAL(D$)):GOSUB228:A=0:OP=0:GOTO20 110 D$=STR$(A/VAL(D$)):GOSUB228:A=0:OP=0:GOTO20 112 D$=STR$(A^VAL(D$)):GOSUB228:A=0:OP=0:GOTO20 114 D$=STR$(ABS(D)^.5):S$(Z)="SQUARE ROOT ":Z=Z+1:GOSUB228:GOTO20 116 D$=STR$(LOG(ABS(D))):S$(Z)="LN ":Z=Z+1:GOSUB228:GOTO20 118 D$=STR$(LOG(ABS(D))/LOG(10)):S$(Z)="LOG ":Z=Z+1:GOSUB228:GOTO20 120 ONOPGOTO24,122,124,126,126,128,130,132,132,132,132,132,132,132 122 D$=STR$(A+VAL(D$)):F3=0:F5=0:RETURN 124 D$=STR$(A-VAL(D$)):F3=0:F5=0:RETURN 126 D$=STR$(A*VAL(D$)):F3=0:F5=0:RETURN 128 D$=STR$(A/VAL(D$)):F3=0:F5=0:RETURN 130 D$=STR$(A^VAL(D$)):F3=0:F5=0:RETURN 132 D$=STR$(VAL(D$)):F3=0:F5=0:RETURN 134 BA=16:BA$=" ":GOTO146 136 BA=10:BA$=" ":GOTO146 138 PRINT" [157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]BASE"; 140 INPUTBA$:BA=VAL(MID$(BA$,49,2)):IFBA<2ORBA>73THEN138 142 BA$=" ":IFBA=10ORBA=16ORBA=8ORBA=2THEN146 144 BA$="<"+RIGHT$(STR$(BA),LEN(STR$(BA))-1)+">":IFBA<10THENBA$=BA$+" " 146 PRINT"[194] "BA$ 148 S$(Z)="BASE"+STR$(BA):Z=Z+1 150 GOSUB228:GOSUB220:A$="=":GOTO102 152 PRINT"[147]";:REM PRINT SCREEN 154 PRINT" [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]"; 156 PRINT"[213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201] [1][194] [194]"; 158 PRINT"[194] C-64 CALCULATOR [194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]"; 160 PRINT"[194] [194] [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]"; 162 PRINT"[194][213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201][194] [2][194] [194]"; 164 PRINT"[194][194] [194][194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]"; 166 PRINT"[194][202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203][194] [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]"; 168 PRINT"[194] [194] [3][194] [194]"; 170 PRINT"[194] [194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]"; 172 PRINT"[194] [213][195][201][213][195][201][213][195][201][213][195][201] [194] [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]"; 174 PRINT"[194] [194]S[194][194]R[194][194]C[194][194][206][194] [194] [4][194] [194]"; 176 PRINT"[194] [202][195][203][202][195][203][202][195][203][202][195][203] [194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]"; 178 PRINT"[194] [213][195][201][213][195][201][213][195][201][213][195][201] [194] [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]"; 180 PRINT"[194] [194]7[194][194]8[194][194]9[194][194][214][194] [194] [5][194] [194]"; 182 PRINT"[194] [202][195][203][202][195][203][202][195][203][202][195][203] [194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]"; 184 PRINT"[194] [213][195][201][213][195][201][213][195][201][213][195][201] [194] [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]"; 186 PRINT"[194] [194]4[194][194]5[194][194]6[194][194][195][194] [194] [6][194] [194]"; 188 PRINT"[194] [202][195][203][202][195][203][202][195][203][202][195][203] [194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]"; 190 PRINT"[194] [213][195][201][213][195][201][213][195][201][213][195][201] [194] [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]"; 192 PRINT"[194] [194]1[194][194]2[194][194]3[194][194][219][194] [194] [7][194] [194]"; 194 PRINT"[194] [202][195][203][202][195][203][202][195][203][202][195][203] [194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]"; 196 PRINT"[194] [213][195][195][195][201] [213][195][201][213][195][201] [194] [213][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][201]"; 198 PRINT"[194] [194] 0 [194] [194][209][194][194]=[194] [194] [8][194] [194]"; 200 PRINT"[194] [202][195][195][195][203] [202][195][203][202][195][203] [194] [202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]"; 202 PRINT"[202][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][203]"; 204 RETURN 206 REM INITIALIZE 208 E$=" [157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]":DIMS$(1000) 210 N$="0123456789.E+-_":OP$="=+-X*/^@"+CHR$(13)+"[195]SR[204]L[200][196][194]":D$=" 0":A$="":BA=10 212 NN$=".":FORI=0TO72:NN$=NN$+CHR$(48+I-(I>9)*7):NEXT 214 S=54272:FORL=STOS+24:POKEL,0:NEXT:POKES+5,9:POKES+6,0:POKES+24,15 216 POKE53280,15:POKE53281,15 218 RETURN 220 IFBA<>10THEN224:REM PRINT MEMORY REGISTERS 222 PRINT"";:FORI=1TO8:PRINT""E$;R(I);"";SPC(15-LEN(STR$(R(I)))):NEXT:RETURN 224 PRINT"";:FORI=1TO8:D=R(I):GOSUB234 226 PRINT""E$;H$;"";SPC(16-LEN(H$)):NEXT:PRINT"";:RETURN 228 REM PRINT DISPLAY 230 IFBA=10THENPRINT" [157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]"D$;:RETURN 232 D=VAL(D$):GOSUB234:PRINT" [157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]"H$;:RETURN 234 REM CONVERT D$ TO BASE BA (H$) 236 B=1:FORK=1TO13:B=B*BA:IFB>DTHEN240 238 NEXT:H$="***************":RETURN 240 H$=" ":IFK>1THENFORL=1TOK-1:D=D/BA:NEXT 242 IFBA=16THENH$="$" 244 IFBA=2THENH$="%" 246 IFBA=8THENH$="@" 248 IFD<0THENH$=H$+"-":D=ABS(D) 250 FORL=1TO13*(-(BA<11)-(BA>10)*2/LOG(BA)):D%=D:H$=H$+CHR$(48+D%-(D%>9)*(7)) 252 D=BA*(D-D%):IFD=0ANDL>K-1THENRETURN 254 IFL=KTHENH$=H$+"." 256 NEXT:RETURN 258 REM INPUT ROUTINE FOR BA<>10 260 FORI=1TOBA+1:IFA$=MID$(NN$,I,1)THEN264 262 NEXT:GOTO62 264 IFI=1THENF1=1:GOTO24 266 IFF1=0THENDD=BA*DD+I-2:D$=STR$(DD):GOSUB228:GOTO24 268 M=M+1:DD=DD+(I-2)/BA^M:D$=STR$(DD):GOSUB228:GOTO24 270 J=22:PRINT"[147]"TAB(12)"PRESS TO QUIT" 272 PRINTTAB(18)" TO SCAN" 274 PRINTTAB(18)" TO PRINT"; 276 FORI=1TO22:PRINTS$(I) 278 NEXT 280 GETA$:IFA$=""THEN280 282 IFA$=""THENJ=J+1:PRINTS$(J):FORT=1TO50:NEXT:GOTO280 284 IFA$="[136]"THENOPEN4,4:FORI=1TOZ:PRINT#4,S$(I):NEXT:PRINT#4,:CLOSE4:GOTO280 286 IFA$="H"THEN302 288 GOSUB152:GOSUB228:GOSUB220:GOTO24 290 T$="C-64 CALCULATOR BY DICK WEISIGER HIT H FOR HELP":POKE53247,88 292 D$=" " 294 FORI=1TOLEN(T$):D$=RIGHT$(D$+MID$(T$,I,1),15) 296 PRINT""D$;:FORT=1TO50:NEXTT,I 298 GETA$:IFA$=""THEN298 300 IFA$<>"H"THEND$=" 0":GOSUB228:GOTO26 302 PRINT"[147] C-64 CALCULATOR COMMANDS" 304 PRINT"+ - * / ^ = LEGAL OPERATORS" 306 PRINT" CLEARS DISPLAY" 308 PRINT" CLEARS REGISTERS" 310 PRINT" <_> CLEARS LAST CHAR" 312 PRINT" SAVES TO REGISTER" 314 PRINT" RECALLS FROM REGISTER" 316 PRINT" <@> SQUARE ROOT" 318 PRINT" LOG BASE 10" 320 PRINT" NATURAL LOG" 322 PRINT" DISPLAYS HELP SCREEN" 324 PRINT" SETS CALCULATOR TO HEX" 326 PRINT" SETS CALCULATOR TO DEC" 328 PRINT" SETS TO ANY OTHER BASE" 330 PRINT" REVIEWS CALCULATION" 332 PRINTTAB(16)"(INCLUDES PRINT OPTION)" 334 PRINT"[145] DISABLES/ENABLES SOUND" 336 PRINT"NOTE: BASES > 35 UTILIZE GRAPHIC CHARS" 338 PRINT" HIT FOR LIST OF CHARS USED" 340 PRINT" " 342 GETA$:IFA$=""THEN342 344 IFA$="[140]"THEN348 346 D$=" 0":GOSUB152:GOSUB228:GOSUB220:GOTO24 348 PRINT"[147]";:FORI=1TO24 350 PRINTI;MID$(NN$,I+2,1)TAB(15)I+24;MID$(NN$,I+26,1)TAB(30)I+48;MID$(NN$,I+50,1) 352 NEXT:GOTO342