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

  1. 10 rem cpu=====================cbm
  2. 20 rem (p) 10/87 commodore welt
  3. 30 rem ===========================
  4. 40 rem     by alfons mittelmeyer
  5. 50 rem
  6. 60 rem
  7. 70 rem basic v2.0
  8. 80 rem vc20,c64,c16/116/plus4,c128
  9. 90 rem ===========================
  10. 100 rem --------------------------
  11. 110 rem       wortschatz
  12. 120 rem --------------------------
  13. 130 data ld,and,or,xor,add,adc,sub,sbb,shl,shr,rol,ror,dez,hex,bin,quit
  14. 140 data clc,sec,clb,seb,clr,bits
  15. 150 n=22:fi=2:fo=2:printchr$(147);
  16. 160 xx$=chr$(18)+" "+chr$(146)+chr$(157)
  17. 170 cb$="c":b1$(1)="1":b0$(1)="0":b1$(2)=".[146]":b0$(2)=".":bi=2
  18. 180 rem --------------------------
  19. 190 rem     fehlermeldungen
  20. 200 rem --------------------------
  21. 210 goto310
  22. 220 printtab(20)"syntax error":goto310
  23. 230 printtab(20)"type mismatch":goto310
  24. 240 f=-1:printtab(20)"undefined flag":return
  25. 250 f=-1:printtab(20)"parameter error":return
  26. 260 f=-1:printtab(20)"undefined statement":return
  27. 270 printtab(20)"unknown command"
  28. 280 rem --------------------------
  29. 290 rem        eingabe
  30. 300 rem --------------------------
  31. 310 print">"xx$;:cu=0:x$=" "
  32. 320 geta$:ifa$=""then320
  33. 330 a=asc(a$):ifa=13then410
  34. 340 ifa=20andcu<>0thenx$=left$(x$,cu):cu=cu-1:goto370
  35. 350 ifa<32ora>95then320
  36. 360 cu=cu+1:x$=x$+a$
  37. 370 printa$xx$;:goto320
  38. 380 rem --------------------------
  39. 390 rem    schluesselwort
  40. 400 rem --------------------------
  41. 410 print" ";:x$=x$+" ":l=len(x$)
  42. 420 ifl=2then700
  43. 430 k=2:d$=" ":gosub1050
  44. 435 a$=left$(mn$,1)
  45. 436 ifa$="$"ora$="%"ora$="."or(a$>="0"anda$<="9")thenum=2:ii=1:k=0:goto580
  46. 440 restore:fori=1ton:reada$:ifa$=mn$thenj=i:i=n
  47. 450 next:ifa$<>mn$then270
  48. 460 ii=j:ifj<13then540
  49. 470 onj-12gosub 1650,1660,1670,1630,1620,1610,1600,1590,1640,1680
  50. 480 iffthen310
  51. 490 goto700
  52. 500 rem --------------------------
  53. 510 rem   arithmetik + logik
  54. 520 rem --------------------------
  55. 530 d$=" ":gosub1050:iffthen220
  56. 540 mn$=mn$+" ":lm=len(mn$)
  57. 550 fori=lmto1step-1:ifmid$(mn$,i,1)<>" "thenj=i:i=1
  58. 560 next:mn$=left$(mn$,j):goto580
  59. 570 ifmn$<>"a"thengosub260:goto310
  60. 580 d$=" ":k=k+1:gosub1050
  61. 590 fi=1:a$=left$(mn$,1)
  62. 600 ifa$="$"thenfi=2
  63. 610 ifa$="%"thenfi=3
  64. 620 ifa$="."ora$="*"thenfi=4
  65. 622 aa$=a$
  66. 630 onfigosub1340,1400,1490,1550
  67. 635 ifmn<256then640
  68. 636 ifmn>65535then230
  69. 637 printtab(20)"wert: [";:
  70. 638 ifaa$<>"$"thenum=4:fa=65536:gosub1251:goto720
  71. 639 printright$(str$(mn),len(str$(mn))-1);:goto720
  72. 640 iffthen230
  73. 650 oniigosub770,780,790,800,810,840,860,880,900,950,930,980
  74. 660 iffthen310
  75. 670 rem --------------------------
  76. 680 rem         ausgabe
  77. 690 rem --------------------------
  78. 700 printtab(20)"akku: [";
  79. 710 onfogosub1130,1250,1170,1170
  80. 720 print"]";:f$="":ifca=1thenf$=chr$(18)
  81. 730 print" "f$cb$chr$(146):goto310
  82. 740 rem --------------------------
  83. 750 rem    alu-routinen
  84. 760 rem --------------------------
  85. 770 ak=mn:return
  86. 780 ak=akandmn:return
  87. 790 ak=akormn:return
  88. 800 ak=(akandnotmn)or(mnandnotak):return
  89. 810 ak=ak+mn:cb$="c"
  90. 820 ca=0:ifak>255thenak=ak-256:ca=1
  91. 830 return
  92. 840 ifcb$="b"then240
  93. 850 mn=mn+ca:goto810
  94. 860 ca=0:cb$="b":ak=ak-mn:ifak<0thenak=ak+256:ca=1
  95. 870 return
  96. 880 ifcb$="c"then240
  97. 890 mn=mn+ca:goto860
  98. 900 ca=0:i=512:cb$="c"
  99. 910 ifmn>8ormn=0then250
  100. 920 ak=(ak+ak+ca)*2^(mn-1):ak=ak-i*(int(ak/512)):goto820
  101. 930 ifcb$="b"then240
  102. 940 i=511:goto910
  103. 950 ca=0:cb$="c"
  104. 960 ifmn>8ormn=0then250
  105. 970 ak=256*ca+ak:al=int(ak/2^(mn-1)):ak=int(al/2):ca=al-ak-ak:return
  106. 980 ifmn>8ormn=0then250
  107. 990 ifcb$="b"then240
  108. 1000 an=2^(mn-1):ak=ak+(ak-an*int(ak/an))*512:goto970
  109. 1010 f=-1:return
  110. 1020 rem -------------------------
  111. 1030 rem     leseroutinen
  112. 1040 rem -------------------------
  113. 1050 f=0:fori=ktol:a$=mid$(x$,i,1):ifa$<>" "thenj=i:i=l
  114. 1060 next
  115. 1070 fori=jtol:a$=mid$(x$,i,1):ifa$=d$thenk=i:i=l
  116. 1080 next:ifa$<>d$thenf=-1:return
  117. 1090 mn$=mid$(x$,j,k-j):j=n:return
  118. 1100 rem -------------------------
  119. 1110 rem    dezimalausgabe
  120. 1120 rem -------------------------
  121. 1130 a$=str$(ak):printright$(a$,len(a$)-1);:return
  122. 1140 rem -------------------------
  123. 1150 rem     binaerausgabe
  124. 1160 rem -------------------------
  125. 1170 iffo=3thenprint"%";
  126. 1172 mn=ak
  127. 1180 fori=1to8:mn=mn+mn
  128. 1190 ifmn>255thenmn=mn-256:printb1$(bi);:goto1210
  129. 1200 printb0$(bi);
  130. 1210 next:return
  131. 1220 rem -------------------------
  132. 1230 rem     hex-ausgabe
  133. 1240 rem -------------------------
  134. 1250 mn=ak:um=2:fa=256
  135. 1251 print"$";:fori=1toum:mn=mn*16
  136. 1260 ifmn<fathenprint"0";:goto1300
  137. 1270 an=int(mn/fa):mn=mn-fa*an
  138. 1280 ifan<10thenprintchr$(an+48);:goto1300
  139. 1290 printchr$(an+55);
  140. 1300 next:return
  141. 1310 rem -------------------------
  142. 1320 rem    dezimal-eingabe
  143. 1330 rem -------------------------
  144. 1340 mn=val(mn$):ifmn>65535then1010
  145. 1350 ifstr$(mn)<>" "+mn$then1010
  146. 1360 return
  147. 1370 rem -------------------------
  148. 1380 rem     hex-eingabe
  149. 1390 rem -------------------------
  150. 1400 lm=len(mn$):iflm>3+umthen1010
  151. 1410 mn=0:fori=2tolm:a$=mid$(mn$,i,1):gosub1420:mn=16*mn+a:next:return
  152. 1420 a=asc(a$):ifa<48ora>70then1010
  153. 1430 ifa>57anda<65then1010
  154. 1440 ifa>64thena=a-7
  155. 1450 a=a-48:return
  156. 1460 rem -------------------------
  157. 1470 rem     binaere eingabe
  158. 1480 rem -------------------------
  159. 1490 a=1:b1$="1":b0$="0"
  160. 1500 lm=len(mn$):iflm>8+athen1010
  161. 1510 mn=0:fori=1+atolm:a$=mid$(mn$,i,1)
  162. 1520 ifa$<>b1$anda$<>b0$then1010
  163. 1530 mn=mn+mn:ifa$=b1$thenmn=mn+1
  164. 1540 next:return
  165. 1550 a=0:b1$="*":b0$=".":goto1500
  166. 1560 rem -------------------------
  167. 1570 rem    weitere routinen
  168. 1580 rem -------------------------
  169. 1590 ca=1:cb$="b":return
  170. 1600 ca=0:cb$="b":return
  171. 1610 ca=1:cb$="c":return
  172. 1620 ca=0:cb$="c":return
  173. 1630 end
  174. 1640 printchr$(147);:goto1010
  175. 1650 fo=1:return
  176. 1660 fo=2:return
  177. 1670 fo=3:bi=1:return
  178. 1680 fo=4:bi=2:return
  179. 1690 rem =========================
  180. 1700 rem         e n d e
  181. 1710 rem =========================
  182.