Listing of file='INTERP.BAS;01' on disk='vmedia/tiny_pascal-sector.ccvf'
10 DIM S(500),TR(15),MN(26),BR(5) 20 DIM M$(9) 30 M$(0)= "LIT":M$(1)= "OPR":M$(2)= "LOD" 40 M$(3)= "STO":M$(4)= "CAL":M$(5)= "INT" 50 M$(6)= "JMP":M$(7)= "JPC":M$(8)= "CSP" 60 PRINT "STARTING ADDRESS?" 70 INPUT Z 80 GOSUB 250 90 PC= P:GOSUB 320 100 BP= 0 110 PRINT ">" 120 INPUT CMD$ 130 GOSUB 470 140 IF P> = 0THEN 110 150 PRINT 160 PRINT K;" INSTRUCTIONS EXECUTED" 170 END 180 B1= B 190 IF LE< = 0THEN 230 200 B1= S(B1) 210 LE= LE- 1 220 GOTO 190 230 BA= B1 240 RETURN 250 T= 0:B= 1:P= 0:ST= 0 260 S(1)= 0:S(2)= 0:S(3)= - 1 270 P0= 0:TP= 15:K= 0 280 FOR I= 0TO 15 290 TR(I)= - 1 300 NEXT I 310 RETURN 320 X= PC* 4+ Z 330 N= PEEK (X) 340 IF N< = 8THEN E$= " ":GOTO 360 350 N= N- 16:E$= "X" 360 X3= PEEK (X+ 3)* 256+ PEEK (X+ 2) 370 PRINT " ",PC," ",M$(N)+ E$," ",PEEK (X+ 1)," ",X3 380 RETURN 390 IF P< 0THEN ST= 1:RETURN 400 FOR I= 1TO BP 410 IF BR(I)< > PTHEN 450 420 PRINT "BREAK: " 430 PC= P:GOSUB 320 440 ST= 1 450 NEXT I 460 RETURN 470 IF CMD$< > "R"THEN 520 480 ST= 0 490 GOSUB 1010:GOSUB 390 500 IF ST= 0THEN 490 510 RETURN 520 IF CMD$< > "S"THEN 550 530 GOSUB 1010:PC= P:GOSUB 320 540 RETURN 550 IF CMD$< > "X"THEN 590 560 PRINT "P=",P,"B=",B,"T=",T 570 PRINT "S(T)=",S(T),"S(T-1)=",S(T- 1) 580 RETURN 590 IF CMD$< > "G"THEN 640 600 GOSUB 250 610 GOSUB 1010:GOSUB 390 620 IF ST= 0THEN 610 630 RETURN 640 IF CMD$< > "T"THEN 700 650 PRINT "*TRACE*" 660 FOR I= 0TO 15 670 TP= TP+ 1:IF TP> 15THEN TP= 0 680 IF TR(TP)> = 0THEN PC= TR(TP):GOSUB 320 690 NEXT I 700 IF CMD$< > "K"THEN 760 710 INPUT I 720 FOR J= ITO I+ 6 730 PRINT S(J) 740 NEXT J 750 RETURN 760 IF CMD$< > "B"THEN 800 770 IF BP= 5THEN RETURN 780 BP= BP+ 1:PRINT BP,":" 790 INPUT BR(BP):RETURN 800 IF CMD$< > "C"THEN 820 810 BP= 0:RETURN 820 IF CMD$< > "Y"THEN 870 830 FOR I= 0TO BP 840 PRINT " ",BR(I) 850 NEXT I 860 RETURN 870 IF CMD$< > "E"THEN 910 880 INPUT P0 890 PC= P0:GOSUB 320 900 RETURN 910 IF CMD$< > "V"THEN 950 920 IF P0= 0THEN RETURN 930 P0= P0- 1:PC= P0:GOSUB 320 940 RETURN 950 IF CMD$< > "N"THEN 980 960 P0= P0+ 1:PC= P0:GOSUB 320 970 RETURN 980 IF CMD$< > "Q"THEN RETURN 990 P= - 1 1000 RETURN 1010 X= P* 4+ Z 1020 A= PEEK (X+ 3)* 256+ PEEK (X+ 2) 1030 TP= TP+ 1 1040 IF TP> 15THEN TP= 0 1050 TR(TP)= P 1060 P= P+ 1:P0= P:K= K+ 1 1070 F= PEEK (X) 1080 IF F< = 8THEN IX= 0:GOTO 1100 1090 IX= 1:F= F- 16 1100 IF F> 0THEN 1120 1110 T= T+ 1:S(T)= A:RETURN 1120 IF F> 1THEN 1570 1130 ON INT (A/ 5)+ 1GOTO 1140,1150,1160,1170,1180 1140 ON A+ 1GOTO 1190,1200,1210,1220,1230 1150 ON A- 4GOTO 1240,1250,1260,1270,1290 1160 ON A- 9GOTO 1310,1330,1350,1370,1390 1170 ON A- 14GOTO 1400,1410,1420,1480,1540 1180 ON A- 19GOTO 1550,1560 1190 T= B- 1:B= S(T+ 2):P= S(T+ 3):RETURN 1200 S(T)= - S(T):RETURN 1210 T= T- 1:S(T)= S(T)+ S(T+ 1):RETURN 1220 T= T- 1:S(T)= S(T)- S(T+ 1):RETURN 1230 T= T- 1:S(T)= S(T)* S(T+ 1):RETURN 1240 T= T- 1:S(T)= INT (S(T)/ S(T+ 1)+ .5):RETURN 1250 S(T)= S(T)AND 1:RETURN 1260 T= T- 1:S(T)= S(T)- S(T+ 1)* INT (S(T)/ S(T+ 1)):RETURN 1270 T= T- 1:IF S(T)= S(T+ 1)THEN S(T)= 1:RETURN 1280 S(T)= 0:RETURN 1290 T= T- 1:IF S(T)= S(T+ 1)THEN S(T)= 0:RETURN 1300 S(T)= 1:RETURN 1310 T= T- 1:IF S(T)< S(T+ 1)THEN S(T)= 1:RETURN 1320 S(T)= 0:RETURN 1330 T= T- 1:IF S(T)< S(T+ 1)THEN S(T)= 0:RETURN 1340 S(T)= 1:RETURN 1350 T= T- 1:IF S(T)> S(T+ 1)THEN S(T)= 1:RETURN 1360 S(T)= 0:RETURN 1370 T= T- 1:IF S(T)> S(T+ 1)THEN S(T)= 0:RETURN 1380 S(T)= 1:RETURN 1390 T= T- 1:S(T)= S(T)OR S(T+ 1):RETURN 1400 T= T- 1:S(T)= S(T)AND S(T+ 1):RETURN 1410 S(T)= NOT S(T):RETURN 1420 T= T- 1 1430 IF S(T+ 1)= 0THEN RETURN 1440 FOR IX= 1TO S(T+ 1) 1450 S(T)= S(T)* 2 1460 NEXT IX 1470 RETURN 1480 T= T- 1 1490 IF S(T)= 0THEN RETURN 1500 FOR IX= 1TO S(T+ 1) 1510 S(T)= INT (S(T)/ 2) 1520 NEXT IX 1530 RETURN 1540 S(T)= S(T)+ 1:RETURN 1550 S(T)= S(T)- 1:RETURN 1560 T= T+ 1:S(T)= S(T- 1):RETURN 1570 IF F> 2THEN 1640 1580 L= PEEK (X+ 1) 1590 IF L= 255THEN S(T)= PEEK (S(T)):RETURN 1600 IF IX= 1THEN A= A+ S(T) 1610 T= T+ 1- IX 1620 LE= L:GOSUB 180 1630 S(T)= S(BA+ A):RETURN 1640 IF F> 3THEN 1720 1650 L= PEEK (X+ 1) 1660 IF L= 255THEN 1700 1670 IF IX= 1THEN A= S(T- 1)+ A 1680 LE= L:GOSUB 180 1690 S(BA+ A)= S(T):T= T- 1- IX:RETURN 1700 POKE S(T- 1),S(T) 1710 T= T- 2:RETURN 1720 IF F> 4THEN 1780 1730 L= PEEK (X+ 1) 1740 IF L= 255THEN POKE 33283,S(T)/ 256:POKE 33284,S(T)- INT (S(T)/ 256)* 256:QQ= CALL (S(T)):T= T- 1:RETURN 1750 LE= L:GOSUB 180 1760 S(T+ 1)= BA:S(T+ 2)= B:S(T+ 3)= P 1770 B= T+ 1:P= A:RETURN 1780 IF F> 5THEN 1810 1785 PRINT "A="A""; 1790 IF T< = (480- A)THEN T= T+ A:RETURN 1800 PRINT "STACK OVFL":ST= 1:RETURN 1810 IF F> 6THEN 1830 1820 P= A:RETURN 1830 IF F> 7THEN 1860 1840 IF S(T)= PEEK (X+ 1)THEN P= A 1850 T= T- 1:RETURN 1860 IF A> 0THEN 1890 1870 T= T+ 1:INPUT C$ 1880 S(T)= ASC (C$):RETURN 1890 IF A> 1THEN 1920 1900 C$= CHR$ (S(T)) 1910 PRINT C$;:T= T- 1:RETURN 1920 IF A> 2THEN 1950 1930 T= T+ 1:INPUT N 1940 S(T)= N:RETURN 1950 IF A> 3THEN 1970 1960 PRINT S(T);:T= T- 1:RETURN 1970 IF A> 4THEN 1990 1980 PRINT :PRINT "*** REQUIRES 'INHEX' ***":GOTO 150 1990 IF A= 8THEN 2010 2000 PRINT :PRINT "*** REQUIRES 'OUTHEX' ***":GOTO 150 2010 C$= "":FOR IX= T- S(T)TO T- 1 2020 C$= C$+ CHR$ (S(IX)):NEXT IX 2030 PRINT C$;:T= T- S(T)- 1:RETURN