100CLEAR 110NS=4:DIM SS(NS) 120MI=10^10-1 130SP$=" " 140*INIT 150IM=0:BA=10:FP=0 160FOR I=0 TO NS:SS(I)=0:NEXT 170GOSUB *REFRESH 180KP$="" 190*LOOP 200K$= INKEY$ :IF K$=KP$ GOTO 200 210KP$=K$:IF K$="" GOTO 200 220IF K$>="0" AND K$<="9" THEN V= VAL (K$):GOSUB *ADDV:GOTO *LOOP 230IF BA=10 AND K$="." AND FM=0 THEN FM=1:FP=0:GOTO *LOOP 240IF BA=16 AND K$>="A" AND K$<="F" THEN V= VAL ("&H"+K$):GOSUB *ADDV:GOTO *LOOP 250IF K$="," THEN GOSUB *HELP:GOSUB *REFRESH:GOTO *LOOP 260IF K$= CHR$ (23) THEN GOSUB *BS:GOTO *LOOP 270IF K$=")" THEN GOSUB *MODE:GOSUB *PUTA:GOTO *LOOP 280FM=0 290IF K$= CHR$ (2) THEN SS(0)=0:GOSUB *PUT0:IM=1:GOTO *LOOP 300IM=0:EN=0 310IF K$= CHR$ (24) THEN FOR I=0 TO NS:SS(I)=0:GOSUB *PUTX:NEXT :EN=0:IM=0:GOTO *LOOP 320IF K$= CHR$ (13) THEN GOSUB *PUSH:EN=1:GOTO *LOOP 330IF K$="+" THEN GOSUB *POP:SS(0)=SS(0)+V:GOSUB *PUT0:GOTO *LOOP 340IF K$="-" THEN GOSUB *POP:SS(0)=SS(0)-V:GOSUB *PUT0:GOTO *LOOP 350IF K$="*" THEN GOSUB *POP:SS(0)=SS(0)*V:GOSUB *PUT0:GOTO *LOOP 360IF K$="/" AND SS(0)<>0 THEN GOSUB *POP:SS(0)=SS(0)/V:GOSUB *PUT0:GOTO *LOOP 370IF K$="T" THEN GOSUB *POP:SS(0)=SS(0) MOD V:GOSUB *PUT0:GOTO *LOOP 380IF K$="Y" THEN GOSUB *POP:SS(0)=SS(0) AND V:GOSUB *PUT0:GOTO *LOOP 390IF K$="^" THEN GOSUB *POP:SS(0)=SS(0) XOR V:GOSUB *PUT0:GOTO *LOOP 400IF K$="H" THEN GOSUB *POP:SS(0)=SS(0) OR V:GOSUB *PUT0:GOTO *LOOP 410IF K$="^" THEN GOSUB *POP:SS(0)=SS(0) XOR V:GOSUB *PUT0:GOTO *LOOP 420IF K$="=" THEN SS(0)=-SS(0):GOSUB *PUT0:GOTO *LOOP 430IF K$="J" THEN SS(0)= NOT SS(0):GOSUB *PUT0:GOTO *LOOP 440IF K$="(" THEN V=SS(0):SS(0)=SS(1):SS(1)=V:GOSUB *PUT0:I=1:GOSUB *PUTX:GOTO *LOOP 450IF K$= CHR$ (4) THEN V=SS(NS):FOR I=NS TO 1 STEP -1:SS(I)=SS(I-1):GOSUB *PUTX:NEXT :I=0:SS(I)=V:GOSUB *PUTX:GOTO *LOOP 460IF K$= CHR$ (5) THEN V=SS(0):FOR I=0 TO NS-1:SS(I)=SS(I+1):GOSUB *PUTX:NEXT :I=NS:SS(I)=V:GOSUB *PUTX:GOTO *LOOP 470GOTO *LOOP 480*PUTX 490Y=4-I:B=BA:GOSUB *PUTC 500IF I<>0 THEN RETURN 510IF BA=10 THEN B=16 ELSE B=10 520Y=5:GOSUB *PUTC 530RETURN 540*PUTC 550LOCATE 7,Y 560IF B=10 GOTO 590 570IF SS(I)>MI OR SS(I)<-MI THEN PRINT "????????????????";:GOTO 600 580PRINT RIGHT$ (SP$+ HEX$ (SS(I)),16);:GOTO 600 590PRINT RIGHT$ (SP$+ STR$ (SS(I)),16); 600IF I<>0 GOTO 620 610LOCATE 23,Y:IF B=10 THEN PRINT " "; ELSE PRINT "h"; 620RETURN 630*PUT0 640I=0:GOSUB *PUTX:RETURN 650*PUTA 660FOR I=0 TO NS:GOSUB *PUTX:NEXT 670RETURN 680*ADDV 690IF EN=1 THEN SS(0)=0:EN=0:IM=1:GOTO 710 700IF IM=0 THEN GOSUB *PUSH:SS(0)=0:IM=1 710IF FM=0 THEN SS(0)=SS(0)*BA+V:GOTO 730 720FP=FP+1:V=V/(10^FP):SS(0)=SS(0)+V 730GOSUB *PUT0 740RETURN 750*PUSH 760FOR I=NS TO 1 STEP -1:SS(I)=SS(I-1):GOSUB *PUTX:NEXT 770RETURN 780*BS 790IF IM=0 THEN SS(0)=0:IM=1:GOTO 830 800IF FM=0 THEN SS(0)=SS(0)\BA:GOTO 830 810IF FP>0 THEN FP=FP-1:SS(0)= FIX (SS(0)*10^FP)/10^FP 820IF FP=0 THEN FM=0 830GOSUB *PUT0 840RETURN 850*POP 860V=SS(0) 870FOR I=0 TO NS-1 880SS(I)=SS(I+1):IF I<>0 GOSUB *PUTX 890NEXT 900I=NS:SS(I)=0:GOSUB *PUTX 910RETURN 920*MODE 930IF BA=10 THEN BA=16 ELSE BA=10 940GOSUB *PUTM:RETURN 950*PUTM 960LOCATE 0,1:PRINT "BASE"; STR$ (BA); 970RETURN 980*REFRESH 990CLS 1000LOCATE 0,0:PRINT ",:Help"; 1010GOSUB *PUTM:GOSUB *PUTA 1020RETURN 1030*HELP 1040CLS 1050LOCATE 0,0:PRINT "):Base"; 1060LOCATE 0,1:PRINT "(:X<>Y"; 1070LOCATE 0,2:PRINT "=:+/-"; 1080LOCATE 0,3:PRINT "RCM:CA"; 1090LOCATE 0,4:PRINT "Y:AND"; 1100LOCATE 0,5:PRINT "H:OR"; 1110LOCATE 8,0:PRINT "^:XOR"; 1120LOCATE 8,1:PRINT "J:NOT"; 1130LOCATE 8,2:PRINT "T:MOD"; 1140LOCATE 8,3:PRINT CHR$ (&HE4);":UP"; 1150LOCATE 8,4:PRINT CHR$ (&HE6);":DOWN"; 1160K$= INKEY$ :IF K$=KP$ GOTO 1160 1170KP$=K$:IF K$="" GOTO 1160 1180RETURN