home *** CD-ROM | disk | FTP | other *** search
- 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 iflz<katheni=i-3:lz=lz+3:goto554
- 558 forj=0toi:w%(sz+j)=w%(lz+j):next
- 562 sz=sz+i+2:w%(sz-1)=39:iflz<>kathen550
- 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:iflz<wzthen582
- 590 wz=sz:return
- 594 ed=ed+1:reada$:f$(ed)=a$:f%(ed,0)=3:reada$:f%(ed,2)=val(a$):f%(ed,1)=0:return
- 598 ed=ba:bm=0:ifff<>0thenprint"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 ...
-