home *** CD-ROM | disk | FTP | other *** search
/ Commodore Disc 41 / Commodore_Disc_41_19xx_-_de.d64 / compass (.txt) < prev    next >
Commodore BASIC  |  2022-10-26  |  6KB  |  236 lines

  1. 10 rem compass==============c64/c128
  2. 14 rem by alfons mittelmeyer
  3. 18 rem (p) commodore disc
  4. 22 rem =============================
  5. 26 dim f$(300),f%(300,2),w%(3000)
  6. 30 readf$(i),f%(i,0),f%(i,1),f%(i,2)
  7. 34 if f$(i)<>".."theni=i+1:goto30
  8. 38 ed=i:wz=2:df=8763:goto370
  9. 42 data "===",1,1,0
  10. 46 data "***",1,21,0
  11. 50 data "setm",1,22,0
  12. 54 data "wam++",1,23,0
  13. 58 data "wma",1,24,0
  14. 62 data "rb",1,25,0
  15. 66 data "rw",1,26,0
  16. 70 data "(",1,2,0
  17. 74 data ")",1,3,0
  18. 78 data "by",1,4,0
  19. 82 data "wo",1,5,0
  20. 86 data "const",1,6,0
  21. 90 data "@",2,0,3
  22. 94 data "<-",1,11,0
  23. 98 data "[",1,12,0
  24. 102 data "]",1,13,0
  25. 106 data "'",1,14,0
  26. 110 data "dw",1,17,0
  27. 114 data "!",1,18,0
  28. 118 data "===n",1,19,0
  29. 122 data "byte",1,7,0
  30. 126 data "word",1,8,0
  31. 130 data "---",1,10,0
  32. 134 data "mov",2,1,4
  33. 138 data "mov",2,2,5
  34. 142 data "loop",2,1,6
  35. 146 data "loop",2,2,7
  36. 150 data "inc",2,1,8
  37. 154 data "inc",2,2,9
  38. 158 data "end",2,0,10
  39. 162 data "fill",2,0,11
  40. 166 data "dec",2,1,12
  41. 170 data "dec",2,2,13
  42. 174 data "jne",2,1,14
  43. 178 data "jne",2,2,15
  44. 182 data "je",2,1,16
  45. 186 data "je",2,2,17
  46. 190 data "jmp",2,0,18
  47. 194 data "jae",2,1,19
  48. 198 data "jae",2,2,20
  49. 202 data "jb",2,1,21
  50. 206 data "jb",2,2,22
  51. 210 data "jcc",2,0,58
  52. 214 data "jcs",2,0,59
  53. 218 data "sys",2,0,23
  54. 222 data "add",2,1,24
  55. 226 data "add",2,2,25
  56. 230 data "sub",2,1,26
  57. 234 data "sub",2,2,27
  58. 238 data "and",2,1,28
  59. 242 data "and",2,2,29
  60. 246 data "or",2,1,30
  61. 250 data "or",2,2,31
  62. 254 data "xor",2,1,32
  63. 258 data "xor",2,2,33
  64. 262 data "call",2,0,34
  65. 266 data "ret",2,0,35
  66. 270 data "&",2,0,40
  67. 274 data "&%",2,0,41
  68. 278 data "findne",2,2,42
  69. 282 data "copy",2,0,36
  70. 286 data "finde",2,2,37
  71. 290 data "cmps",2,0,38
  72. 294 data "rol",2,1,43
  73. 298 data "rol",2,2,44
  74. 302 data "ror",2,1,45
  75. 306 data "ror",2,2,46
  76. 310 data "shl",2,1,54
  77. 314 data "shl",2,2,55
  78. 318 data "shr",2,1,56
  79. 322 data "shr",2,2,57
  80. 326 data "clc",2,0,47
  81. 330 data "sec",2,0,48
  82. 334 data "++",2,1,49
  83. 338 data "++",2,2,50
  84. 342 data "--",2,1,52
  85. 346 data "--",2,2,53
  86. 350 data "ac",4,1,37
  87. 354 data "xr",4,1,38
  88. 358 data "yr",4,1,39
  89. 362 data "sr",4,1,40
  90. 366 data "..",1,9,0
  91. 370 reada$:ifa$=""then370
  92. 374 b$=left$(a$,1)
  93. 378 ifb$<"0"orb$>"9"then394
  94. 382 z=val(a$):gosub386:goto370
  95. 386 w%(wz)=0:ta=0
  96. 390 gosub798:w%(wz+1)=al:w%(wz+2)=ah:wz=wz+3:return
  97. 394 if b$<>"%"andb$<>"#"andb$<>"."then406
  98. 398 a$=right$(a$,len(a$)-1)
  99. 402 ifb$="#"thenw%(wz)=val(a$):wz=wz+1:goto370
  100. 406 x=0:fori=edto1step-1:iff$(i)=a$thenx=i:i=1
  101. 410 next
  102. 414 if a$=f$(x)then434
  103. 418 ifbm=0thenprint"fehler: "a$:end
  104. 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$
  105. 426 a$="0":goto382
  106. 430 z=f%(x,2):f%(x,2)=wz+1:goto386
  107. 434 gosub438:goto370
  108. 438 on f%(x,0)goto450,614
  109. 442 goto638
  110. 446 printf$(x)f%(x,0)f%(x,1)f%(x,2):return
  111. 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
  112. 454 goto 446
  113. 458 reada$:fori=1tolen(a$):w%(wz+i-1)=asc(mid$(a$,i)):next:wz=wz+len(a$):return
  114. 462 z=f%(x,2):gosub386:ifkfthenreturn
  115. 466 w%(wz-3)=51:return
  116. 470 ifkf=0thenz=pa:gosub386
  117. 474 goto462
  118. 478 ifbm<>0thenprint"block unabgeschlossen":end
  119. 482 reada$:print"block: "a$:ifa$="main"thenpz=0:ba=ed:return
  120. 486 ed=ed+1:ba=ed:pz=ed:f$(ed)=a$:f%(ed,0)=1:f%(ed,1)=15:return
  121. 490 gosub478:f%(ed,1)=20:return
  122. 494 f%(pz,2)=wz+df:bm=ed:return
  123. 498 z=f%(0,2):gosub798:w%(0)=al:w%(1)=ah
  124. 502 print:print:print"speichern j/n ?"
  125. 506 geta$:ifa$=""then506
  126. 510 ifa$<>"j"thenend
  127. 511 input"filename";fi$
  128. 514 open8,8,8,fi$+",p,w":z=df:gosub798:print#8,chr$(al)chr$(ah);
  129. 518 fori=0towz-1:print#8,chr$(w%(i));:next:close8:end
  130. 522 ta=1:return
  131. 526 ta=2:return
  132. 530 ifta=1thenprint"byte-adressierung verboten":end
  133. 534 return
  134. 538 ka=wz:kf=-1:return
  135. 542 pa=(wz-ka)/3:lz=wz:sz=wz:kf=0
  136. 546 if lz=kathenta=0:return
  137. 550 i=8:lz=lz-9
  138. 554 iflz<katheni=i-3:lz=lz+3:goto554
  139. 558 forj=0toi:w%(sz+j)=w%(lz+j):next
  140. 562 sz=sz+i+2:w%(sz-1)=39:iflz<>kathen550
  141. 566 i=sz-wz-1:forj=0toi:w%(ka+j)=w%(wz+j):next:wz=ka+i+1:ta=0:return
  142. 570 print"cmpanweisung "a$" behandeln":return
  143. 574 wz=f%(ed,2)-df:return
  144. 578 kf=0:sz=ka:lz=ka+1
  145. 582 w%(sz)=w%(lz):w%(sz+1)=w%(lz+1)
  146. 586 sz=sz+2:lz=lz+3:iflz<wzthen582
  147. 590 wz=sz:return
  148. 594 ed=ed+1:reada$:f$(ed)=a$:f%(ed,0)=3:reada$:f%(ed,2)=val(a$):f%(ed,1)=0:return
  149. 598 ed=ba:bm=0:ifff<>0thenprint"unbekannter befehl im block":end
  150. 602 ifpz=0thenw%(wz)=10:wz=wz+1:return
  151. 606 w%(wz)=35:wz=wz+1:return
  152. 610 rem ------- token ----
  153. 614 kf=0:iff%(x,1)=0orta=f%(x,1)then626
  154. 618 x=x-1:iff$(x)=a$andta=f%(x,1)then626
  155. 622 print"unmittelbare adressierung verboten":end
  156. 626 iff%(x,2)<49thenta=0
  157. 630 w%(wz)=f%(x,2):wz=wz+1:return
  158. 634 rem ----- parameter ---
  159. 638 ifb$="%"thenz=f%(x,2):goto386
  160. 642 ifb$<>"."then674
  161. 646 tb=ta:ta=f%(x,1):ifta=0then622
  162. 650 iftb<>1then662
  163. 654 ifta=1thenw%(wz)=60:goto670
  164. 658 w%(wz)=61:goto670
  165. 662 ifta=1thenw%(wz)=3:goto670
  166. 666 w%(wz)=62
  167. 670 wz=wz+1:w%(wz)=f%(x,0)+59:z=f%(x,2):goto390
  168. 674 ta=f%(x,1):w%(wz)=f%(x,0)-3:z=f%(x,2):goto390
  169. 678 wa=f%(ed,2)-df:w%(wa)=wz-wa-1:return
  170. 682 rem ------- byte ---
  171. 686 b$="":reada$:ifleft$(a$,1)<>"%"then698
  172. 690 readb$:if right$(b$,1)<>"."thengosub706:goto686
  173. 694 b$=left$(b$,len(b$)-1):goto706
  174. 698 if right$(a$,1)<>"."thengosub706:goto686
  175. 702 a$=left$(a$,len(a$)-1)
  176. 706 ed=ed+1:f%(ed,1)=1:ifleft$(a$,1)="@"then762
  177. 710 ifleft$(a$,1)<>"%"then718
  178. 714 goto754
  179. 718 f$(ed)=a$:f%(ed,0)=4:f%(ed,2)=wz+df:w%(wz)=0:wz=wz+1:return
  180. 722 rem ----- word ---
  181. 726 b$="":reada$:ifleft$(a$,1)<>"%"then738
  182. 730 readb$:if right$(b$,1)<>"."thengosub746:goto726
  183. 734 b$=left$(b$,len(b$)-1):goto746
  184. 738 if right$(a$,1)<>"."thengosub746:goto726
  185. 742 a$=left$(a$,len(a$)-1)
  186. 746 ed=ed+1:f%(ed,1)=2:ifleft$(a$,1)="@"then762
  187. 750 ifleft$(a$,1)<>"%"then770
  188. 754 a$=right$(a$,len(a$)-1):f%(ed,2)=val(b$)
  189. 758 f$(ed)=a$:f%(ed,0)=4:return
  190. 762 f$(ed)=a$:f%(ed,0)=5:f%(ed,2)=wz+df
  191. 766 a$=right$(a$,len(a$)-1):ed=ed+1:f%(ed,1)=2
  192. 770 f$(ed)=a$:f%(ed,0)=4:f%(ed,2)=wz+df:w%(wz)=0:w%(wz+1)=0:wz=wz+2:return
  193. 774 rem ---------
  194. 778 reada$:x=0:fori=bmtoed:iff$(i)=a$thenx=i:i=ed
  195. 782 next:ifx=0thened=ed+1:f$(ed)=a$:x=ed:goto794
  196. 786 ff=ff-1:a=f%(x,2):z=wz+df:gosub798
  197. 790 b=w%(a)+256*w%(a+1):w%(a)=al:w%(a+1)=ah:a=b:ifa<>0then790
  198. 794 f%(x,0)=3:f%(x,1)=0:f%(x,2)=wz+df:return
  199. 798 ah=int(z/256):al=z-256*ah:return
  200. 802 ma=wz:return
  201. 806 kf=0:wz=wz-3:ma=w%(wz+1)+256*w%(wz+2):return
  202. 810 z=wz+df:gosub798:w%(ma)=al:w%(ma+1)=ah:ma=ma+2:return
  203. 814 z=ma+df:gosub798:w%(wz)=al:w%(wz+1)=ah:wz=wz+2:return
  204. 818 reada:wz=wz+a:return
  205. 822 reada:wz=wz+a+a:return
  206. 996 rem ==================
  207. 997 rem  compass-programm
  208. 998 rem ==================
  209. 999 rem
  210. 1000 data byte,cr.,#13,!
  211. 1010 rem
  212. 1020 data ===,emit
  213. 1030 data (,&,ac,mov
  214. 1040 data 65490,sys,)
  215. 1050 rem
  216. 1060 data ===,strout
  217. 1070 data byte,x,@zg.
  218. 1080 data (,&%,zg,mov
  219. 1090 data @zg,++,x,mov
  220. 1100 data ---,lab
  221. 1110 data @zg,++,emit
  222. 1120 data lab,x,loop,)
  223. 1130 rem
  224. 1140 data ===n,write
  225. 1150 data byte,x.
  226. 1160 data (,&,x,by,mov
  227. 1170 data ---,lab
  228. 1180 data strout
  229. 1190 data lab,x,loop,)
  230. 1200 rem
  231. 1210 data ===,main
  232. 1220 data byte,a$.,#147,',das ist compass,!
  233. 1230 data byte,b$.,',die schnelle sprache fuer ihren rechner,!
  234. 1240 data (,[,a$,cr,cr,b$,cr,],write,)
  235. 1250 data ...
  236.