File INTC46.3

Directory of image this file is from
This file as a plain text file

110 PRINT "SOURCE FILE:";\INPUT F1$
130 PRINT "OPTION:";\INPUT A$
140 F2$=F1$&".INT"
160 F4$=F1$&".LST"
165 F5$=F1$&".OBJ"
170 OPEN F2$ AS FILE #2
180 OPEN "TEM.TMP" FOR OUTPUT AS FILE #3
190 OPEN F4$ FOR OUTPUT AS FILE #4
193 OPEN F5$ FOR OUTPUT AS FILE #5
195 GO TO 20000 
210 IF END #2 THEN 24990 
220 INPUT #2:L$
222 GOSUB 700 \REM LOOKING FOR CONTROL FEED **********************
225 PRINT ".";
230 C1=0\L2=T1(0)\L3=0\L4$=" "
240 L$=TRM$(L$)\L$=L$&" "\X$=SEG$(L$,1,1)
250 IF X$=";" THEN 370 
260 IF X$<>" " THEN 265 \C2=1\GO TO 550 
265 IF X$<>"	" THEN 270 \C2=1\GO TO 550 
270 C2=POS(L$,":",1)
280 IF C2>0 THEN 500 
285 C2=1
290 GOSUB 10400 \S2$=SEG$(L$,1,C2)\GOSUB 10200 
350 IF T3=M1 THEN 390 
355 IF T3=0 THEN 0 \REM I.E.A "." *********
360 PRINT \PRINT "MULTIPLY DEFINED SYMBOL:",S2$
361 PRINT 
370 L4$="C"\GO TO 1000 
390 IF SEG$(L$,C2+2,C2+4)="EQU" THEN 420 
400 PRINT \PRINT "NO:?",L$\L4$="IC"\GO TO 1000 \REM ILLG. CHARACTER*****
420 GOSUB 10400 \S3$=SEG$(L$,C1,C2)\C2=C2+6
450 GOSUB 12150 \REM EVALUATE SYMBOL ******************
455 IF S3$<>"." THEN 460 \T1(0)=V1\GO TO 370 
460 IF P3>M1 THEN 463 \T1$(P3)=S3$\T1(P3)=V1\P3=P3+1\GO TO 370 
463 PRINT "SYMBOL TABLE OVERFLOW:",S3$\STOP
500 T1$(P3)=SEG$(L$,1,C2-1)\T1(P3)=T1(0)\P3=P3+1\C2=C2+1
540 REM START HERE LOOKING FOR OPCODE ***********
550 GOSUB 10500 \IF S2$=";" THEN 370 
620 C1=C2\GOSUB 10400 \S2$=SEG$(L$,C1,C2)\GOSUB 10300 
625 IF C1=81 THEN 370 
655 T1(0)=T1(0)+1
657 IF T1(0)<65536 THEN 660 \T1(0)=0
660 IF I1<>M2 THEN 667 \PRINT \PRINT "UNDIFINED OPCODE",S2$
665 L3=42\L4$="UO"\GO TO 1000 
667 IF I1=81 THEN 60100\REM  DS  ***********************
668 IF I1=78 THEN 680 
670 IF I1<44 THEN 690 \IF I1>78 THEN 690 
672 IF I1>54 THEN 674 \T1(0)=T1(0)+1\GO TO 690 
674 T1(0)=T1(0)+2\GO TO 691 
680 T1(0)=T1(0)+1
690 IF I1<>79 THEN 691 \GOSUB 60200 
691 L3=I1
695 GO TO 1000 
700 REM START HERE LOOKING FOR CONTROL FEED ***********
705 C2=0
710 IF C2=81 THEN 750 
715 X$=SEG$(L$,C2,C2)
720 IF CHR$(12)=X$ THEN 725 \C2=C2+1\GO TO 710 
725 X$=""
730 IF C2<>1 THEN 735 \L$=X$&SEG$(L$,C2+1,80)\RETURN
735 IF C2<>80 THEN 740 \L$=SEG$(L$,1,C2=1)\RETURN
740 L$=SEG$(L$,1,C2-1)&X$&SEG$(L$,C2+1,80)
750 RETURN
1000 B1=L2\GOSUB 10000 \L2$=H1$
1030 B1=L3\GOSUB 10000 \L3$=H1$
1060 P$=SEG$(L2$&" "&L3$&" "&L4$&" "&L$,1,72)
1080 PRINT #3:P$\IF I1=80 THEN 25000 \GO TO 210 
10000 REM *** BINARY TO HEX CONVERSION, B1 IS BINARY,H1$ IS HEX
10010 IF B1>65535 THEN 10080 
10020 H1$=" "\X3=B1
10025 IF X3>=0 THEN 10030 \X3=65535+X3+1
10030 FOR I=3 TO 0 STEP -1
10040 X1=16^I\X2=INT(X3/X1)\X3=X3-X2*X1
10050 H1$=H1$&H$(X2)
10060 NEXT I
10070 RETURN
10080 PRINT \PRINT "OVF IN BINHEX"\L4$="C"\H1$=" "
10090 RETURN
10100 REM ******* HEXADECIMAL TO BINARY CONVERSION **************
10110 X1=LEN(H1$)\B1=0
10120 IF X1>5 THEN 10180 
10130 FOR I=0 TO (X1-1)\S1$=SEG$(H1$,X1-I,X1-I)
10140 FOR I1=0 TO 15
10150 IF H$(I1)=S1$ THEN 10170 
10160 NEXT I1\PRINT "ILLEGAL CHAR IN HEX NUMBER"\GO TO 10190 
10170 B1=B1+I1*(16^I)\NEXT I\RETURN
10180 PRINT \PRINT ">4 HEX DIGITS"
10190 L4$="C"\B1=0\RETURN
10200 REM*** SEARCH SYMBOL TABLE FOR ELEMENT S2$, RETURN VALUE V1****
10201 T3=0\S4$=SEG$(S2$,1,1)
10202 IF S4$>"9" THEN 10210 
10203 G=LEN(S2$)
10204 IF SEG$(S2$,G,G)<>"H" THEN 10207 
10205 H1$=SEG$(S2$,1,G-1)\GOSUB 10100 \V1=B1\RETURN
10207 V1=VAL(S2$)\RETURN
10210 FOR T3=0 TO M1
10220 IF S2$=T1$(T3) THEN 10250 
10230 NEXT T3
10250 V1=T1(T3)
10260 RETURN
10300 REM**** SEARCH OPCODE TABLE FOR OPCODE S2$,RETURN NUMBER I1****
10310 FOR I1=0 TO M2
10320 IF S2$=O1$(I1) THEN 10360 
10330 NEXT I1
10360 RETURN
10400 REM ****** FIND CHAR BEFORE NEXT BLANK OR TAB ************
10410 GOSUB 10600 \C2=C2-1
10460 RETURN
10500 REM ****** LOOK FOR NEXT CHAR EXCEPT TAB OR SPACE ********
10510 X$=SEG$(L$,C2,C2)
10515 IF C2>80 THEN 10590 
10520 IF X$<>" " THEN 10530 \C2=C2+1\GO TO 10510 
10530 IF X$<>"	" THEN 10590 \C2=C2+1\GO TO 10510 
10590 RETURN
10600 REM ****** LOOK FOR 1ST TAB OR SPACE *************
10610 X$=SEG$(L$,C2,C2)
10620 IF X$=" " THEN 10690 
10630 IF X$="	" THEN 10690 \C2=C2+1\GO TO 10610 
10690 RETURN
10700 REM*** GET NEXT SYMBOL AND VALUE C2 IS POINTER, IF LAST E1=1***
10710 E1=0\C1=C2\F=2
10720 GOSUB 10600 \C3=C2\REM FIND LAST PLACE *********
10730 C2=C1
10740 IF SEG$(L$,C2,C2)="," THEN 10760 \IF C2>=C3 THEN 10750 
10741 IF SEG$(L$,C2,C2)="+" THEN 10855 \IF C2>=C3 THEN 10750 
10742 IF SEG$(L$,C2,C2)="-" THEN 10860 \IF C2>=C3 THEN 10740 
10745 C2=C2+1\GO TO 10740 
10750 E1=1\C2=C3
10760 C2=C2+1\S2$=SEG$(L$,C1,C2-2)\GOSUB 10200 
10770 IF T3<>M1 THEN 10850 
10771 PRINT 

10780 PRINT "UNDEFINDED SYMBOL:",S2$,L$
10790 V1=0 10792 L4$="US" 10850 RETURN 10855 F=1\GO TO 10760 10860 F=0\GO TO 10760 10900 GOSUB 10700 10910 IF V1<0 THEN 10920 10915 RETURN 10920 PRINT \PRINT "NEG VALUE IN FIELD:",L$ 10930 L4$="VL" 10940 V1=0\RETURN 11000 GOSUB 10700 11010 IF V1<-128 THEN 11050 \IF V1>127 THEN 11050 11020 IF V1<0 THEN 11030 \RETURN 11030 V1=256+V1\RETURN 11050 GO TO 10920 11100 GOSUB 11000 11110 IF V1<0 THEN 11120 \RETURN 11111 PRINT 11120 PRINT "NEG VALUE IN FILED:",L$ 11130 GO TO 10930 11200 GOSUB 11100 11210 IF V1=0 THEN 11220 \RETURN 11220 PRINT "ZERO FIELD VALUE:",L$ 11230 GO TO 10930 11300 PRINT \PRINT "NOT ENOUGH ARGUMENTS:",L$ 11310 L4$="NA"\V1=0\RETURN 11350 PRINT \PRINT "NO CORRECT ARGUMENTS:",L$ 11360 L4$="NA"\V1=0\RETURN 11400 REM GRUPPE 10,11 ************************************** 11410 I1>255 THEN 11420 \RETURN 11420 PRINT \PRINT "ARGUMENT TOO LARGE:",L$ 11430 L4$="NA"\V1=0\RETURN 11450 W1=V1 11451 W2=V1 11460 RETURN 12040 REM GRUPPE 2,3,4,5,6,9,13 *********************************** 12045 IF B2<10 THEN 12140 12050 IF B2=43 THEN 12120 12060 IF V1=1 THEN 12135 12070 IF V1=3 THEN 12135 12080 IF V1=5 THEN 12135 12082 IF B2<>77 THEN 12085 \RETURN 12085 IF B2>9 THEN 12090 \RETURN 12090 IF B2<>16 THEN 12100 \IF V1=6 THEN 12135 \RETURN 12100 IF B2<>15 THEN 12110 \IF V1=6 THEN 12135 \V1=V1+1\RETURN 12110 IF B2>11 THEN 12120 \V1=V1+1\RETURN 12120 IF V1>7 THEN 12135 \RETURN 12135 GOSUB 11350 \RETURN 12140 RETURN 12150 REM EVALUATE SYMBOL *********************** 12155 GOSUB 10700 \REM GET FIRST SYMBOL**************** 12160 IF F<>2 THEN 12200 \RETURN\REM KEINE ADDITION ODER SUBTRACTION****** 12200 REM ADDITION AND SUBTRACTION ******************* 12205 W1=V1 12210 F1=F 12215 GOSUB 10700 \REM GET NEXT SYMBOL ************** 12220 IF F1=1 THEN 12225 \V1=W1-V1\GO TO 12160 12225 V1=W1+V1\GO TO 12160 20000 DIM H$(15)\FOR I=0 TO 15\READ H$(I)\NEXT I 20010 DATA "0","1","2","3","4","5","6","7","8","9" 20011 DATA "A","B","C","D","E","F" 20030 M2=82 20040 DIM O1$(83),O2(83) 20050 FOR I=0 TO 82\READ O1$(I),O2(I)\NEXT I 20060 DATA "ADD",128,"ADC",136,"SUB",144,"SBB",152,"ANA",160 20062 DATA "XRA",168,"ORA",176,"CMP",184 20063 REM 0-7 **** GRUPPE 1****CC CCC XXX****************** 20064 DATA "INR",4,"DCR",5 20066 REM 8-9****GRUPPE 2****CC XXX CCC************ 20068 DATA "DAD",1,"DCX",3 20070 REM 10-11 **** GRUPPE 3****CC XXX CCC******** 20072 DATA "INX",3,"PUSH",197,"POP",193 20074 REM 12-14 **** GRUPPE 4***** CC XXX CCC ****** 20076 DAA "LDAX",2 20078 REM 15 **** GRUPPE5 **** CC XXX CCC ************* 20080 DATA "STAX",2 20082 REM 16 **** GRUPPE 6 **** CC XXX CCC *********** 20084 DATA "MOV",64 20086 REM 17 **** GRUPPE 7 **** CC XXX XXX *************** 20088 DATA "CMA",47,"DAA",39,"CMC",63,"STC",55,"EI",251 20090 DATA "DI",243,"RAL",23,"RAR",31,"RLC",7,"RRC",15 20092 DATA "PCHL",233,"XTHL",227,"SPHL",249,"XCHG",235 20094 DATA "RET",201,"RNZ",192,"RZ",200,"RNC",208,"RC",216 20096 DATA "RPO",224,"RPE",232,"RP",240,"RM",248,"HLT",118 20098 DATA "NOP",0 20100 REM 18-42 **** GRUPPE 8 **** CC CCC CCC *********** 20102 DATA "RST",199 20104 REM 43 **** GRUPPE 9 **** CC XXX CCC ************ 20106 DATA "ADI",198,"ACI",206,"SUI",214,"SBI",222,"ANI",230 20108 DATA "XRI",238,"ORI",246,"CPI",254,"IN",219,"OUT",211 20120 REM 44-53 **** GRUPPE 10 **** CC CCC CCC ********** 20122 REM XX XXX XXX *********** 20124 DATA "MVI",6 20126 REM 54 **** GRUPPE 11 **** CC XXX CCC ************** 20128 REM XX XXX XXX ************** 20130 DATA "LDA",58,"STA",50,"LHLD",42,"SHLD",34,"JMP",195 20132 DATA "JNZ",194,"JZ",202,"JNC",210,"JC",218,"JPO",226 20134 DATA "JPE",234,"JP",242,"JM",250,"CALL",205,"CNZ",196 20136 DATA "CZ",204,"CNC",212,"CC",220,"CPO",228,"CPE",236 20138 DATA "CP",244,"CM",252 20140 REM 55-76 **** GRUPPE 12 **** CC CCC CCC ********** 20142 REM XX XXX XXX *********** 20144 REM XX XXX XXX *********** 20146 DATA "LXI",1 20148 REM 77 **** GRUPPE 13 **** CC XXX CCC ************ 20150 REM XX XXX XXX ********* 20152 REM XX XXX XXX ********** 20154 DATA "DW",78,"DB",79,".END",80,"DS",81,".TABEND",82 20156 REM *********************************************************** 20300 M1=300\DIM T1$(301),T1(301) 20320 T1$(0)="."\T1(0)=0\P3=1\T1(M1)=0 20322 N$=" " 20330 GO TO 210 24990 PRINT \PRINT "NO .END" 25000 REM SYMBOLTAFEL DER INTERNEN REGISTER *********************** 25005 M1=P3 25010 T1$(M1)="B"\T1(M1)=0\M1=M1+1 25020 T1$(M1)="C"\T1(M1)=1\M1=M1+1 25030 T1$(M1)="D"\T1(M1)=2\M1=M1+1 25040 T1$(M1)="E"\T1(M1)=3\M1=M1+1
25050 T1$(M1)="H"\T1(M1)=4\M1=M1+1 25060 T1$(M1)="L"\T1(M1)=5\M1=M1+1 25070 T1$(M1)="M"\T1(M1)=6\M1=M1+1 25080 T1$(M1)="SP"\T1(M1)=6\M1=M1+1 25090 T1$(M1)="PSW"\T1(M1)=6\M1=M1+1 25100 T1$(M1)="A"\T1(M1)=7\M1=M1+1 30000 REM *********** 30045 PRINT \PRINT \PRINT \PRINT 30060 CLOSE #3\CLOSE #2 30080 OPEN "TEM.TMP" FOR INPUT AS FILE #2 30100 IF END #2 THEN 50000 30110 INPUT #2:L$ 30114 L4$=" "\X$=SEG$(L$,13,13) 30130 IF X$<>"C" THEN 30200 30140 X$=SEG$(L$,15,255) 30150 P$=" "&X$ 30160 PRINT #4:P$ 30170 GO TO 30100 30200 H1$=SEG$(L$,8,11) 30210 GOSUB 10100 30211 C1=POS(L$,O1$(B1)&" ",15) 30212 IF C1<=0 THEN 30213 \C1=C1+LEN(O1$(B1))\GO TO 30215 30213 C1=POS(L$,O1$(B1)&" ",15)+LEN(O1$(B1)) 30215 C2=C1 30217 GOSUB 10500 30218 B2=B1 30219 IF B2=80 THEN 30710 30220 IF B2>43 THEN 30480 30230 IF B2>42 THEN 30430 30240 IF B2>17 THEN 30410 30250 IF B2>16 THEN 30360 30260 IF B2>7 THEN 30310 30270 REM GRUPPE 1 (0 BIS 7) *********************** 30280 GOSUB 10900 \REM GET REGISTER ****************** 30290 IF E1=1 THEN 30300 \GOSUB 11350 30300 L3=O2(B2)+V1\GO TO 45000 30310 REM GRUPPE 2,3,4,5,6 (8 BIS 16) ************************* 30320 GOSUB 10900 \REM GET REGISTER ***************************** 30330 IF E1=1 THEN 30340 \GOSUB 11350 30340 GOSUB 12040 30350 L3=O2(B2)+V1*8\GO TO 45000 30360 REM GRUPPE 7 (17) *************************** 30370 GOSUB 10700 \REM GET DESTINATION ********************* 30380 R1=V1\IF E1<>1 THEN 30390 \GOSUB 11300 \GO TO 30400 30390 GOSUB 10700 \REM GET SOURCE************************** 30395 IF R1<>V1 THEN 30400 \GOSUB 11350 \GO TO 30400 30400 L3=R1*8+V1+O2(B2)\GO TO 45000 30410 REM GRUPPE 8 (18-42) ************************* 30420 L3=O2(B2)\GO TO 45000 30430 REM GRUPPE 9 (43) 30440 GOSUB 10700 \REM GET RESTART ADDRESS ********************* 30450 IF E1=1 THEN 30460 \GOSUB 11350 \GO TO 30470 30460 GOSUB 12040 30470 L3=V1*8+O2(B2)\GO TO 45000 30480 REM GRUPPE 10 (44 BIS 53) ****************************** 30485 GOSUB 12150 \REM GET .+1 ********************** 30486 IF B2<54 THEN 30488 \GO TO 30520 30488 GOSUB 11400 30490 L3=O2(B2)\GOSUB 45005 30500 H1$=SEG$(L2$,2,5)\GOSUB 10100 30510 B1=B1+1\GOSUB 10000 \L2$=H1$&" " 30515 L3=V1\L$=" "\L4$=" "\GOSUB 45010 \GO TO 30100 30520 REM GRUPPE 11 (54) ******************************** 30530 IF B2=54 THEN 30540 \GO TO 30600 30540 R1=V1\IF E1<>1 THEN 30550 \GOSUB 11300 30545 IF L4$<>"NA" THEN 30550 \GO TO 30560 30550 GOSUB 12150 \REM GET DESTINATION *********************** 30560 L3=R1*8+O2(B2)\GOSUB 45005 30570 H1$=SEG$(L2$,2,5)\GOSUB 10100 30580 B1=B1+1\GOSUB 10000 \L2$=H1$&" " 30590 L3=V1\L$=" "\L4$=" "\GOSUB 45010 \GO TO 30100 30600 REM GRUPPE 12,13 (55 BIS 77) **************************** 30610 IF B2<79 THEN 30615 \GO TO 30710 30615 IF B2<77 THEN 30623 30617 IF B2=78 THEN 30623 30618 GOSUB 12040 30619 R1=V1 30620 GOSUB 12150 \REM GET DATA ****************************** 30621 L3=R1*8+O2(B2)\GOSUB 45005 30622 REM 30623 GOSUB 11450 30624 IF B2<77 THEN 30630 \GO TO 30625 30625 IF B2<>78 THEN 30640 30626 L5$=SEG$(L$,14,255) 30627 B1=B1-1\GO TO 30640 30630 L3=O2(B2)\GOSUB 45005 30640 H1$=SEG$(L2$,2,5)\GOSUB 10100 30650 B1=B1+1\GOSUB 10000 \L2$=H1$&" " 30660 L3=W1\L$=" " 30662 B1=L3\GOSUB 10000 \L3$=H1$ 30664 L3$=SEG$(H1$,4,5) 30666 L3$=N$&L3$ 30668 GOSUB 45015 30670 H1$=SEG$(L2$,2,5)\GOSUB 10100 30680 B1=B1+1\GOSUB 10000 \L2$=H1$&" " 30690 L3=W2\L$=" "\L4$=" " 30692 B1=L3\GOSUB 10000 \L3$=H1$ 30694 L3$=SEG$(H1$,2,3) 30696 L3$=N$&L3$ 30698 GOSUB 45020 \GO TO 30100 30710 REM GRUPPE 14 (.BYTE,.END) ******************************* 30715 IF B2<>80 THEN 30717 \GO TO 30730 30717 IF B2=82 THEN 60300\GOTO 60000 30720 GOSUB 10200 30722 GOSUB 11400 30725 L3=V1\GO TO 45000 30730 L$=SEG$(L$,14,255) 30735 P$=" "&" "&L$ 30740 GOSUB 45033 \GO TO 50000 45000 GOSUB 45005 \GO TO 30100 45005 L2$=SEG$(L$,1,6) 45010 B1=L3\GOSUB 10000 \L3$=N$&SEG$(H1$,4,6) 45015 IF B2<>78 THEN 45020 \L$=L5$\GO TO 45030 45020 L$=SEG$(L$,14,255) 45030 P$=L2$&L3$&" "&L4$&" "&L$ 45031 K$=SEG$(L3$,4,5) 45033 PRINT #4:P$ 45035 PRINT #5:L2$\PRINT #5:K$ 45035 IF P9=0 THEN 45040 \PRINT P$\RETURN 45040 PRINT ".";\RETURN 50000 CLOSE #4 50010 IF A$="SYM" THEN 50020 \STOP 50020 PRINT \PRINT 50030 FOR J=0 TO P3-1 50035 X$="ZZZZZZZZ" 50040 FOR K=0 TO P3-1 50050 IF T1$(K)<X$ THEN 50060 \GO TO 50080 50060 IF T1$(K)>"." THEN 50070 \GO TO 50080 50070 X4=K\X$=T1$(K) 50080 NEXT K 50090 B1=T1(X4)\GOSUB 10000 \PRINT T1$(X4),H1$ 50095 T1$(X4)=" " 50100 NEXT J 50110 STOP
60000 T3=0\O=1\S4$=SEG$(S2$,O,O)\REM "'"****************** 60005 IF S4$<>"'" THEN 30720 60010 O=O+1 60015 S4$=SEG$(S2$,O,O) 60020 IF S4$<>"'" THEN 60030\GOTO 30100 60030 S2$=S4$\GOSUB 10200 60035 L3=V1\IF O>2 THEN 60040\GOSUB 45005\GOTO 60010 60040 H1$=L2$\GOSUB 10100 60045 B1=B1+1\GOSUB 10000\L2$=H1$\GOSUB 45010 60050 GOTO 60010 60100 REM DS ********************** 60105 GOSUB 10500\GOSUB 10200 60110 T1(0)=T1(0)+V1\GOTO 691 60200 O=0\C2=0\REM LOOKING FOR "'" ************ 60204 IF C2>82 THEN 691 60205 S4$=SEG$(L$,C2,C2) 60210 IF S4$<>"'" THEN 60213 \GO TO 60215 60213 C2=C2+1\GO TO 60204 60215 C2=C2+1 60217 S4$=SEG$(L$,C2,C2)\O=O+1 60220 IF S4$="'" THEN 60227 \GO TO 60225 60225 IF C2=82 THEN 60230\GOTO 60215 60227 T1(0)=T1(0)+O-2\GOTO 691 60230 PRINT "NO '",L$\GOTO 691



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search