10 REM COMPASS==============C64/C128 14 REM BY ALFONS MITTELMEYER 18 REM (P) COMMODORE DISC 22 REM ============================= 26 DIM F$(300),F%(300,2),W%(3000) 30 READF$(I),F%(I,0),F%(I,1),F%(I,2) 34 IF F$(I)<>".."THENI=I+1:GOTO30 38 ED=I:WZ=2:DF=8763:GOTO370 42 DATA "===",1,1,0 46 DATA "***",1,21,0 50 DATA "SETM",1,22,0 54 DATA "WAM++",1,23,0 58 DATA "WMA",1,24,0 62 DATA "RB",1,25,0 66 DATA "RW",1,26,0 70 DATA "(",1,2,0 74 DATA ")",1,3,0 78 DATA "BY",1,4,0 82 DATA "WO",1,5,0 86 DATA "CONST",1,6,0 90 DATA "@",2,0,3 94 DATA "<-",1,11,0 98 DATA "[",1,12,0 102 DATA "]",1,13,0 106 DATA "'",1,14,0 110 DATA "DW",1,17,0 114 DATA "!",1,18,0 118 DATA "===N",1,19,0 122 DATA "BYTE",1,7,0 126 DATA "WORD",1,8,0 130 DATA "---",1,10,0 134 DATA "MOV",2,1,4 138 DATA "MOV",2,2,5 142 DATA "LOOP",2,1,6 146 DATA "LOOP",2,2,7 150 DATA "INC",2,1,8 154 DATA "INC",2,2,9 158 DATA "END",2,0,10 162 DATA "FILL",2,0,11 166 DATA "DEC",2,1,12 170 DATA "DEC",2,2,13 174 DATA "JNE",2,1,14 178 DATA "JNE",2,2,15 182 DATA "JE",2,1,16 186 DATA "JE",2,2,17 190 DATA "JMP",2,0,18 194 DATA "JAE",2,1,19 198 DATA "JAE",2,2,20 202 DATA "JB",2,1,21 206 DATA "JB",2,2,22 210 DATA "JCC",2,0,58 214 DATA "JCS",2,0,59 218 DATA "SYS",2,0,23 222 DATA "ADD",2,1,24 226 DATA "ADD",2,2,25 230 DATA "SUB",2,1,26 234 DATA "SUB",2,2,27 238 DATA "AND",2,1,28 242 DATA "AND",2,2,29 246 DATA "OR",2,1,30 250 DATA "OR",2,2,31 254 DATA "XOR",2,1,32 258 DATA "XOR",2,2,33 262 DATA "CALL",2,0,34 266 DATA "RET",2,0,35 270 DATA "&",2,0,40 274 DATA "&%",2,0,41 278 DATA "FINDNE",2,2,42 282 DATA "COPY",2,0,36 286 DATA "FINDE",2,2,37 290 DATA "CMPS",2,0,38 294 DATA "ROL",2,1,43 298 DATA "ROL",2,2,44 302 DATA "ROR",2,1,45 306 DATA "ROR",2,2,46 310 DATA "SHL",2,1,54 314 DATA "SHL",2,2,55 318 DATA "SHR",2,1,56 322 DATA "SHR",2,2,57 326 DATA "CLC",2,0,47 330 DATA "SEC",2,0,48 334 DATA "++",2,1,49 338 DATA "++",2,2,50 342 DATA "--",2,1,52 346 DATA "--",2,2,53 350 DATA "AC",4,1,37 354 DATA "XR",4,1,38 358 DATA "YR",4,1,39 362 DATA "SR",4,1,40 366 DATA "..",1,9,0 370 READA$:IFA$=""THEN370 374 B$=LEFT$(A$,1) 378 IFB$<"0"ORB$>"9"THEN394 382 Z=VAL(A$):GOSUB386:GOTO370 386 W%(WZ)=0:TA=0 390 GOSUB798:W%(WZ+1)=AL:W%(WZ+2)=AH:WZ=WZ+3:RETURN 394 IF B$<>"%"ANDB$<>"#"ANDB$<>"."THEN406 398 A$=RIGHT$(A$,LEN(A$)-1) 402 IFB$="#"THENW%(WZ)=VAL(A$):WZ=WZ+1:GOTO370 406 X=0:FORI=EDTO1STEP-1:IFF$(I)=A$THENX=I:I=1 410 NEXT 414 IF A$=F$(X)THEN434 418 IFBM=0THENPRINT"FEHLER: "A$:END 422 FF=FF+1:ED=ED+1:F$(ED)=A$:F%(ED,0)=1:F%(ED,2)=WZ+1:F%(ED,1)=16:PRINT"? "A$ 426 A$="0":GOTO382 430 Z=F%(X,2):F%(X,2)=WZ+1:GOTO386 434 GOSUB438:GOTO370 438 ON F%(X,0)GOTO450,614 442 GOTO638 446 PRINTF$(X)F%(X,0)F%(X,1)F%(X,2):RETURN 450 ONF%(X,1)GOTO478,494,598,522,526,594,686,726,498,778,574,538,542,458,462,430,578,678,490,470,802,806,810,814,818,822 454 GOTO 446 458 READA$:FORI=1TOLEN(A$):W%(WZ+I-1)=ASC(MID$(A$,I)):NEXT:WZ=WZ+LEN(A$):RETURN 462 Z=F%(X,2):GOSUB386:IFKFTHENRETURN 466 W%(WZ-3)=51:RETURN 470 IFKF=0THENZ=PA:GOSUB386 474 GOTO462 478 IFBM<>0THENPRINT"BLOCK UNABGESCHLOSSEN":END 482 READA$:PRINT"BLOCK: "A$:IFA$="MAIN"THENPZ=0:BA=ED:RETURN 486 ED=ED+1:BA=ED:PZ=ED:F$(ED)=A$:F%(ED,0)=1:F%(ED,1)=15:RETURN 490 GOSUB478:F%(ED,1)=20:RETURN 494 F%(PZ,2)=WZ+DF:BM=ED:RETURN 498 Z=F%(0,2):GOSUB798:W%(0)=AL:W%(1)=AH 502 PRINT:PRINT:PRINT"SPEICHERN J/N ?" 506 GETA$:IFA$=""THEN506 510 IFA$<>"J"THENEND 511 INPUT"FILENAME";FI$ 514 OPEN8,8,8,FI$+",P,W":Z=DF:GOSUB798:PRINT#8,CHR$(AL)CHR$(AH); 518 FORI=0TOWZ-1:PRINT#8,CHR$(W%(I));:NEXT:CLOSE8:END 522 TA=1:RETURN 526 TA=2:RETURN 530 IFTA=1THENPRINT"BYTE-ADRESSIERUNG VERBOTEN":END 534 RETURN 538 KA=WZ:KF=-1:RETURN 542 PA=(WZ-KA)/3:LZ=WZ:SZ=WZ:KF=0 546 IF LZ=KATHENTA=0:RETURN 550 I=8:LZ=LZ-9 554 IFLZKATHEN550 566 I=SZ-WZ-1:FORJ=0TOI:W%(KA+J)=W%(WZ+J):NEXT:WZ=KA+I+1:TA=0:RETURN 570 PRINT"CMPANWEISUNG "A$" BEHANDELN":RETURN 574 WZ=F%(ED,2)-DF:RETURN 578 KF=0:SZ=KA:LZ=KA+1 582 W%(SZ)=W%(LZ):W%(SZ+1)=W%(LZ+1) 586 SZ=SZ+2:LZ=LZ+3:IFLZ0THENPRINT"UNBEKANNTER BEFEHL IM BLOCK":END 602 IFPZ=0THENW%(WZ)=10:WZ=WZ+1:RETURN 606 W%(WZ)=35:WZ=WZ+1:RETURN 610 REM ------- TOKEN ---- 614 KF=0:IFF%(X,1)=0ORTA=F%(X,1)THEN626 618 X=X-1:IFF$(X)=A$ANDTA=F%(X,1)THEN626 622 PRINT"UNMITTELBARE ADRESSIERUNG VERBOTEN":END 626 IFF%(X,2)<49THENTA=0 630 W%(WZ)=F%(X,2):WZ=WZ+1:RETURN 634 REM ----- PARAMETER --- 638 IFB$="%"THENZ=F%(X,2):GOTO386 642 IFB$<>"."THEN674 646 TB=TA:TA=F%(X,1):IFTA=0THEN622 650 IFTB<>1THEN662 654 IFTA=1THENW%(WZ)=60:GOTO670 658 W%(WZ)=61:GOTO670 662 IFTA=1THENW%(WZ)=3:GOTO670 666 W%(WZ)=62 670 WZ=WZ+1:W%(WZ)=F%(X,0)+59:Z=F%(X,2):GOTO390 674 TA=F%(X,1):W%(WZ)=F%(X,0)-3:Z=F%(X,2):GOTO390 678 WA=F%(ED,2)-DF:W%(WA)=WZ-WA-1:RETURN 682 REM ------- BYTE --- 686 B$="":READA$:IFLEFT$(A$,1)<>"%"THEN698 690 READB$:IF RIGHT$(B$,1)<>"."THENGOSUB706:GOTO686 694 B$=LEFT$(B$,LEN(B$)-1):GOTO706 698 IF RIGHT$(A$,1)<>"."THENGOSUB706:GOTO686 702 A$=LEFT$(A$,LEN(A$)-1) 706 ED=ED+1:F%(ED,1)=1:IFLEFT$(A$,1)="@"THEN762 710 IFLEFT$(A$,1)<>"%"THEN718 714 GOTO754 718 F$(ED)=A$:F%(ED,0)=4:F%(ED,2)=WZ+DF:W%(WZ)=0:WZ=WZ+1:RETURN 722 REM ----- WORD --- 726 B$="":READA$:IFLEFT$(A$,1)<>"%"THEN738 730 READB$:IF RIGHT$(B$,1)<>"."THENGOSUB746:GOTO726 734 B$=LEFT$(B$,LEN(B$)-1):GOTO746 738 IF RIGHT$(A$,1)<>"."THENGOSUB746:GOTO726 742 A$=LEFT$(A$,LEN(A$)-1) 746 ED=ED+1:F%(ED,1)=2:IFLEFT$(A$,1)="@"THEN762 750 IFLEFT$(A$,1)<>"%"THEN770 754 A$=RIGHT$(A$,LEN(A$)-1):F%(ED,2)=VAL(B$) 758 F$(ED)=A$:F%(ED,0)=4:RETURN 762 F$(ED)=A$:F%(ED,0)=5:F%(ED,2)=WZ+DF 766 A$=RIGHT$(A$,LEN(A$)-1):ED=ED+1:F%(ED,1)=2 770 F$(ED)=A$:F%(ED,0)=4:F%(ED,2)=WZ+DF:W%(WZ)=0:W%(WZ+1)=0:WZ=WZ+2:RETURN 774 REM --------- 778 READA$:X=0:FORI=BMTOED:IFF$(I)=A$THENX=I:I=ED 782 NEXT:IFX=0THENED=ED+1:F$(ED)=A$:X=ED:GOTO794 786 FF=FF-1:A=F%(X,2):Z=WZ+DF:GOSUB798 790 B=W%(A)+256*W%(A+1):W%(A)=AL:W%(A+1)=AH:A=B:IFA<>0THEN790 794 F%(X,0)=3:F%(X,1)=0:F%(X,2)=WZ+DF:RETURN 798 AH=INT(Z/256):AL=Z-256*AH:RETURN 802 MA=WZ:RETURN 806 KF=0:WZ=WZ-3:MA=W%(WZ+1)+256*W%(WZ+2):RETURN 810 Z=WZ+DF:GOSUB798:W%(MA)=AL:W%(MA+1)=AH:MA=MA+2:RETURN 814 Z=MA+DF:GOSUB798:W%(WZ)=AL:W%(WZ+1)=AH:WZ=WZ+2:RETURN 818 READA:WZ=WZ+A:RETURN 822 READA:WZ=WZ+A+A:RETURN 996 REM ================== 997 REM COMPASS-PROGRAMM 998 REM ================== 999 REM 1000 DATA BYTE,CR.,#13,! 1010 REM 1020 DATA ===,EMIT 1030 DATA (,&,AC,MOV 1040 DATA 65490,SYS,) 1050 REM 1060 DATA ===,STROUT 1070 DATA BYTE,X,@ZG. 1080 DATA (,&%,ZG,MOV 1090 DATA @ZG,++,X,MOV 1100 DATA ---,LAB 1110 DATA @ZG,++,EMIT 1120 DATA LAB,X,LOOP,) 1130 REM 1140 DATA ===N,WRITE 1150 DATA BYTE,X. 1160 DATA (,&,X,BY,MOV 1170 DATA ---,LAB 1180 DATA STROUT 1190 DATA LAB,X,LOOP,) 1200 REM 1210 DATA ===,MAIN 1220 DATA BYTE,A$.,#147,',DAS IST COMPASS,! 1230 DATA BYTE,B$.,',DIE SCHNELLE SPRACHE FUER IHREN RECHNER,! 1240 DATA (,[,A$,CR,CR,B$,CR,],WRITE,) 1250 DATA ...