home *** CD-ROM | disk | FTP | other *** search
/ Commodore Disc 19 / Commodore_Disc_19_19xx_-_de.d64 / assemb.kurs3 (.txt) < prev    next >
Commodore BASIC  |  2022-10-26  |  10KB  |  316 lines

  1. 1 rem--------------------
  2. 2 rem-  assembler-kurs  -
  3. 3 rem-      teil 3      -
  4. 4 rem-                  -
  5. 5 rem-       von        -
  6. 6 rem-                  -
  7. 7 rem-  ralf trabhardt  -
  8. 8 rem--------------------
  9. 9 ifa>0then26
  10. 10 poke53280,0:poke53281,0:d=53272
  11. 11 print"[147]":c=0:printchr$(142)
  12. 12 print""
  13. 13 ifc=0orc=8thenprint"[144]"
  14. 14 ifc=1orc=7thenprint"[151]"
  15. 15 ifc=2orc=6thenprint"[152]"
  16. 16 ifc=3orc=5thenprint"[155]"
  17. 17 ifc=4thenprint""
  18. 18 printtab(10)"assembler-kurs teil 3"
  19. 19 printtab(92)"programmiert von"
  20. 20 printtab(93)"ralf trabhardt"
  21. 21 geta$:ifa$=" "then25
  22. 22 c=c+1:ifc=9thenc=0
  23. 23 fori=1to10:nexti
  24. 24 goto12
  25. 25 a=a+1:ifa=1thenload"mc-routinen 3",8,1
  26. 26 sys32841:poked,(peek(d)and240)or14
  27. 27 printchr$(14):print"[147][155][197]s gilt folgende [212]astaturbelegung:"
  28. 28 printtab(204)"[211][208][193][195][197][146]= [206][166]chste [211]eite"
  29. 29 printtab(124)" [198]1 [146] = [197]ine [211]eite zur[168]ck"
  30. 30 printtab(124)" [198]7 [146] = [197]rste [211]eite "
  31. 31 geta$:ifa$=""then31
  32. 32 se=1:goto35
  33. 34 gosub315
  34. 35 printchr$(14):print"[147][155]":poke53280,0:poke53281,0
  35. 36 onsegoto41,39,56,69,81,92,103,125,149,177,199,215,267,284,237,298
  36. 37 se=1:goto35
  37. 39 sys32768
  38. 40 se=se+1:goto35
  39. 41 printchr$(14):print"[147][158][200]eute steht die [211]chleifenprogrammierung"
  40. 42 print"auf dem [208]lan."
  41. 43 print"[215]ie [211]ie gleich sehen werden, hat auch"
  42. 44 print"[211][208][213][203][201][158] gewisse [208]robleme mit den"
  43. 45 print"[211]chleifen..."
  44. 46 goto34
  45. 47 printtab(85)"[195]arry-[198]lagge   :";:gosub308
  46. 48 printtab(45)"[218]ero -[198]lagge   :";:gosub308
  47. 49 printtab(45)"[206]egativ-[198]lagge :";:gosub308
  48. 50 return
  49. 51 print"[199]eben [211]ie bitte durch [196]r[168]cken der"
  50. 53 print"[212]asten 0[146] oder 1[146] an, ob die jeweilige"
  51. 54 print"[198]lagge gesetzt oder gel[220]scht ist :"
  52. 55 return
  53. 56 print"[218]un[166]chst ein kleines '[198]laggen-[212]raining'!"
  54. 57 gosub51
  55. 58 print"[194]eispiel 1 :   [204][196][193] #$80"
  56. 59 printtab(55)"[195][205][208] #$[198][198]"
  57. 60 a(1)=0:a(2)=0:a(3)=1:x=0
  58. 61 gosub47
  59. 62 print"[197]rkl[166]rung:"
  60. 63 print"[196]a die [196]ifferenz $7[198] betr[166]gt wird die"
  61. 64 print"[206]egativ-[198]lagge gesetzt."
  62. 65 print"[197]s fand ein [213]nterlauf statt, da die"
  63. 66 print"gr[220]\ere [218]ahl von der kleineren abgezogen";
  64. 67 print"wurde. [196]eshalb ist die [195]arry-[198]lagge an."
  65. 68 goto34
  66. 69 gosub51
  67. 70 print"[194]eispiel 2 :   [204][196][216] #$00"
  68. 71 printtab(55)"[196][197][216]"
  69. 72 a(1)=1:a(2)=0:a(3)=1:x=0
  70. 73 gosub47
  71. 74 print"[197]rkl[166]rung:"
  72. 75 print"[201]m [216]-[210]egister steht nun der [215]ert $[198][198]."
  73. 76 print"[193]us diesem [199]rund wurde die [206]egativ-"
  74. 77 print"[198]lagge gesetzt. [196]as [195]arry-[194]it ( hier"
  75. 78 print"liegt keine [211]ubtraktion vor !) zeigt"
  76. 79 print"einen [213]nterlauf an."
  77. 80 goto 34
  78. 81 gosub51
  79. 82 print"[194]eispiel 3 :   [204][196][217] #$[198][198]"
  80. 83 printtab(55)"[201][206][217]"
  81. 84 a(1)=1:a(2)=1:a(3)=0:x=0
  82. 85 gosub47
  83. 86 print"[197]rkl[166]rung:"
  84. 87 print"[201]m [217]-[210]egister steht der [215]ert $00. [196]ie"
  85. 88 print"[218]ero-[198]lagge ist deshalb gesetzt. [196]a ein"
  86. 89 print"[169]bertrag stattfand steht das [195]arry-[194]it"
  87. 90 print"auf 1."
  88. 91 goto34
  89. 92 gosub51
  90. 93 print"[194]eispiel 4 :   [204][196][216] #$20"
  91. 94 printtab(55)"[195][208][216] #$20"
  92. 95 a(1)=1:a(2)=1:a(3)=0:x=0
  93. 96 gosub47
  94. 97 print"[197]rkl[166]rung:"
  95. 98 print"[194]eide [215]erte sind gleich, d.h. die"
  96. 99 print"[196]ifferenz ist null. [196]ie [218]ero-[198]lagge wird";
  97. 100 print"gesetzt. [196]iesmal fand kein [213]nterlauf"
  98. 101 print"statt, wie [211]ie am [195]arry-[194]it sehen."
  99. 102 goto34
  100. 103 print"[215]ie programmiert man eine gestrichelte"
  101. 104 print"[204]inie ( mit dem [205]inuszeichen ) am"
  102. 105 print"oberen [194]ildschirmrand ?"
  103. 106 print"[194]isher h[166]tten wir so anfangen m[168]ssen :"
  104. 107 print".9000  [193]9 2[196]     [204][196][193] #$2[196]"
  105. 108 print".9002  8[196] 00 04  [211][212][193] $0400"
  106. 109 print".9005  8[196] 01 04  [211][212][193] $0401"
  107. 110 print".9008  8[196] 02 04  [211][212][193] $0402"
  108. 111 print".900[194]  8[196] 03 04  [211][212][193] $0403"
  109. 112 print".900[197]  8[196] 04 04  [211][212][193] $0404"
  110. 113 print".9011  8[196] 05 04  [211][212][193] $0405"
  111. 114 printtab(22)"."
  112. 115 printtab(22)"."
  113. 116 printtab(22)"."
  114. 117 print"[196]er [215]ert $2[196] entspricht dem [205]inus-"
  115. 118 print"zeichen. [197]s wird dieser [215]ert in jede "
  116. 119 print"einzelne [194]ildschirmposition geschrieben."
  117. 120 print"[201]n [194]asic s[166]he das so aus:"
  118. 121 print"[208][207][203][197]1024,45:[208][207][203][197]1025,45:[208][207][203][197]1026,45..."
  119. 122 print"[196]ank der [211]chleifenprogrammierung geht es";
  120. 123 print"aber auch weniger umst[166]ndlich."
  121. 124 goto34
  122. 125 fori=55296to55335:pokei,14:next
  123. 126 sys33071
  124. 127 print"[207]ben sehen [211]ie die gestrichelte [204]inie."
  125. 128 print"[196]iese wurde,[166]hnlich einer [198][207][210]...[206][197][216][212]...-";
  126. 129 print"[211]chleife mit der folgenden [210]outine"
  127. 130 print"erstellt :"
  128. 131 print".9000  [193]0 00     [204][196][217] #$00"
  129. 132 print".9002  [193]9 2[196]     [204][196][193] #$2[196]"
  130. 133 print".9004  99 00 04  [211][212][193] $0400,[217]"
  131. 134 print".9007  [195]8        [201][206][217]"
  132. 135 print".9008  [195]0 28     [195][208][217] #$28"
  133. 136 print".900[193]  [196]0 [198]6     [194][206][197] $9002"
  134. 137 print".900[195]  60        [210][212][211]"
  135. 138 print"[196]as [217]-[210]eg. wird gel[220]scht. [201]n den [193]kku"
  136. 139 print"wird der [195]ode f[168]r das [205]inuszeichen ge-"
  137. 140 print"laden. [196]ieser [215]ert wird in die [193]dresse"
  138. 141 print"$0400 ( dez. 1024[160]) plus dem [201]nhalt des"
  139. 142 print"[217]-[210]egisters geschrieben. [196]as [217]-[210]eg. wird";
  140. 143 print"nun solange erh[220]ht, bis es die [218]ahl"
  141. 144 print"$28 ( dez. 40 ) enth[166]lt. [196]ann verzweigt"
  142. 145 print"das [208]rogramm nicht mehr mit dem [194][206][197]-"
  143. 146 print"[194]efehl nach $9002 sondern endet durch "
  144. 147 print"[210][212][211].";
  145. 148 goto34
  146. 149 print"[196]ieses [208]rogramm kennen [211]ie bereits."
  147. 150 print"[203][220]nnen [211]ie dessen [215]irkung vorraussagen?"
  148. 151 print". 813[197]  [193]0 00     [204][196][217] #$00
  149. 152 [153]". 8140  atn9 07     (NULL)str$atn #$07
  150. 153 print". 8142  99 00 [196]8  [211][212][193] $[196]800,[217]
  151. 154 [153]". 8145  99 00 str$9  (NULL)(NULL)atn $str$900,(NULL)
  152. 155 print". 8148  99 00 [196][193]  [211][212][193] $[196][193]00,[217]
  153. 156 [153]". 814peek  99 00 str$peek  (NULL)(NULL)atn $str$peek00,(NULL)
  154. 157 print". 814[197]  [193]9 00     [204][196][193] #$00
  155. 158 [153]". 8150  99 00 04  (NULL)(NULL)atn $0400,(NULL)
  156. 159 print". 8153  99 00 05  [211][212][193] $0500,[217]
  157. 160 [153]". 8156  99 00 06  (NULL)(NULL)atn $0600,(NULL)
  158. 161 print". 8159  99 00 07  [211][212][193] $0700,[217]
  159. 162 [153]". 815len  88        str$val(NULL)
  160. 163 print". 815[196]  [196]0 [197]1     [194][206][197] $8140
  161. 164 [153]". 815asc  60        (NULL)(NULL)(NULL)"
  162. 165 [153]"str$iese (NULL)outine wspc(re ohne die (NULL)chleifen-"
  163. 166 [153]"programmierung nur unter gr(NULL)\tem atnufwand";
  164. 167 [153]"zu erstellen."
  165. 168 [153]"str$ie '(NULL)chleife' lspc(uft auch hier notber das"
  166. 169 [153]"(NULL)-(NULL)egister. str$ieses wird solange er-"
  167. 170 [153]"niedrigt, bis es den (NULL)ert $00 angenommen";
  168. 171 [153]"hat. str$ann wird nicht mehr nach $8140"
  169. 172 [153]"gesprungen. str$a die (NULL)ero-asclagge gesetzt"
  170. 173 [153]"wurde endet die (NULL)outine.";
  171. 174 [161]a$:[139]a$[178]""[167]174
  172. 175 [158]33086
  173. 176 [137]34
  174. 177 [153]"str$er ganze peekildschirm wurde mit dem"
  175. 178 [153]"(NULL)eichen '@' und der ascarbe chr$elb gefnotllt."
  176. 179 [153]"valine weiteres valinsatzgebiet der"
  177. 180 [153]"bedingten (NULL)erzeigungen findet man bei"
  178. 181 [153]" den (NULL)erz(NULL)gerungschleifen, die atnssembler-";
  179. 182 [153]"programme langsamer machen."
  180. 183 [153]"open.8120  atn2 00   (NULL)str$(NULL) #$00   verify(NULL)-(NULL)eg. l(NULL)schen";
  181. 184 [153]"open.cont8122open  lenatn      str$val(NULL)        verify(NULL)-(NULL)eg. minus 1";
  182. 185 [153]"open.8123  atn0 00   (NULL)str$(NULL) #$00   verify(NULL)-(NULL)eg. l(NULL)schen";
  183. 186 [153]"open.cont8125open  88      str$val(NULL)        verify(NULL)-(NULL)eg. minus 1";
  184. 187 [153]"open.8126  len0 00   len(NULL)(NULL) #$00   verify(NULL) gleich 0 ?"
  185. 188 [153]"open.8128  str$0 ascpeek   peek(NULL)val $cont8125  verify(NULL)enn (NULL) <> 0"
  186. 189 [153]"open.812atn  val0 00   len(NULL)(NULL) #$00   verify(NULL) gleich 0 ?"
  187. 190 [153]"open.812len  str$0 asc4   peek(NULL)val $cont8122  verify(NULL)enn (NULL) <> 0"
  188. 191 [153]"open.812val  60      (NULL)(NULL)(NULL)        verifyvalndelist"
  189. 192 [153]"vals handelt sich hier um eine (NULL)er-"
  190. 193 [153]"schachtelung zweier (NULL)chleifen. mid$edesmal"
  191. 194 [153]"wenn man das (NULL)-(NULL)egister um 1 erniedrigt"
  192. 195 [153]"wird das (NULL)-(NULL)egister 255 mal um 1 ver-"
  193. 196 [153]"mindert. str$iese '(NULL)arteschleife' dauert"
  194. 197 [153]"sogar in atnssembler fast 1 (NULL)ekunde.";
  195. 198 [137]34
  196. 199 [158]33184
  197. 200 [153]"right$n peekatn(NULL)right$len kann das valrstellen von (NULL)prites"
  198. 201 [153]"eine ganze (NULL)eile dauern."
  199. 202 [153][163]52)"sysleft$atn(NULL)(NULL)(NULL)!"
  200. 203 [153]"str$as folgende (NULL)rogramm zeigt right$hnen, wie"
  201. 204 [153]"(NULL)ie (NULL)prites in atnssembler erstellen "
  202. 205 [153]"k(NULL)nnen."
  203. 206 [153]"str$ie str$aten des (NULL)(NULL)(NULL)(NULL)right$-(NULL)prites  ( in"
  204. 207 [153]"peekasic in str$atn(NULL)atn-(NULL)eilen abgelegt ) wurden"
  205. 208 [153]"wurden hier mit left$ilfe des '(NULL)'-peekefehls"
  206. 209 [153]"des (NULL)(NULL)(NULL)val(NULL)(NULL)(NULL)(NULL)right$(NULL)(NULL)(NULL) 64 ( str$right$(NULL)len (NULL)r.9 ) ab der";
  207. 210 [153]"atndresse $8160 in den (NULL)peicher"
  208. 211 [153]"geschrieben."
  209. 212 [161]a$:[139]a$[178]""[167]212
  210. 213 [151]53269,0:se[178]se[170]1
  211. 214 [137]35
  212. 215 [153]"list(NULL)u peekeginn mnotssen die (NULL)prite-str$aten ab"
  213. 216 [153]"der (NULL)peicherstelle $8160 in einen"
  214. 217 [153]"geeigneten (NULL)priteblock geschrieben"
  215. 218 [153]"werden ( z.peek. peeklock 13 ):"
  216. 219 [153]"cont. 81atn0  atn0 40     (NULL)str$(NULL) #$40"
  217. 220 [153]"sysright$n das (NULL)-(NULL)egister wird der (NULL)ert $40"
  218. 221 [153]"( dezimal 64 ) geschrieben.cont"
  219. 222 [153]". 81atn2  88        str$val(NULL)"
  220. 223 [153]"sys(NULL)-(NULL)egister um 1 erniedrigen."
  221. 224 [153]"cont. 81atn3  peek9 60 81  (NULL)str$atn $8160,(NULL)
  222. 225 print"[158][204][166]dt [201]nhalt der [193]dresse $8160 + [217]-[210]eg."
  223. 226 print"in den [193]kku."
  224. 227 print"[154]. 81[193]6  99 40 03  [211][212][193] $0340,[217]
  225. 228 [153]"sys(NULL)chreibt atnkkuinhalt in (NULL)peicherstelle"
  226. 229 [153]"$0340 + (NULL)-(NULL)egister ( =peeklock 13 )."
  227. 230 [153]"cont. 81atn9  len0 00     len(NULL)(NULL) #$00"
  228. 231 [153]"sys(NULL)ergleicht (NULL)-(NULL)egister mit $00. peekei"
  229. 232 [153]"chr$leichheit wird die (NULL)ero-asclagge gesetzt.";
  230. 233 [153]"cont. 81atnpeek  str$0 asc5     peek(NULL)val $81atn2
  231. 234 print"[158][214]erzweigt nach $81[193]2, falls [218]ero-[198]lagge"
  232. 235 print"nicht gesetzt ist.[155]"
  233. 236 goto34
  234. 237 print"[158][193]lles auf einen [194]lick:[155]"
  235. 238 print". 81[193]0  [193]0 40     [204][196][217] #$40
  236. 239 [153]". 81atn2  88        str$val(NULL)
  237. 240 print". 81[193]3  [194]9 60 81  [204][196][193] $8160,[217]
  238. 241 [153]". 81atn6  99 40 03  (NULL)(NULL)atn $0340,(NULL)
  239. 242 print". 81[193]9  [195]0 00     [195][208][217] #$00
  240. 243 [153]". 81atnpeek  str$0 asc5     peek(NULL)val $81atn2
  241. 244 print". 81[193][196]  [193]9 00     [204][196][193] #$00
  242. 245 [153]". 81atnasc  8str$ 25 str$0  (NULL)(NULL)atn $str$025
  243. 246 print". 81[194]2  [193]9 0[197]     [204][196][193] #$0[197]
  244. 247 [153]". 81peek4  8str$ 21 str$0  (NULL)(NULL)atn $str$021
  245. 248 print". 81[194]7  8[196] 20 [196]0  [211][212][193] $[196]020
  246. 249 [153]". 81peekatn  atn9 0str$     (NULL)str$atn #$0str$
  247. 250 print". 81[194][195]  8[196] [198]8 07  [211][212][193] $07[198]8
  248. 251 [153]". 81peekasc  atn9 07     (NULL)str$atn #$07
  249. 252 print". 81[195]1  8[196] 27 [196]0  [211][212][193] $[196]027
  250. 253 [153]". 81len4  atn9 01     (NULL)str$atn #$01
  251. 254 print". 81[195]6  8[196] 1[195] [196]0  [211][212][193] $[196]01[195]
  252. 255 [153]". 81len9  8str$ 15 str$0  (NULL)(NULL)atn $str$015close
  253. 256 print". 81[195][195]  [193]9 50     [204][196][193] #$50
  254. 257 [153]". 81lenval  8str$ 00 str$0  (NULL)(NULL)atn $str$000
  255. 258 print". 81[196]1  8[196] 01 [196]0  [211][212][193] $[196]001
  256. 259 [153]". 81str$4  60        (NULL)(NULL)(NULL)
  257. 260 print"[158][214]ersuchen [211]ie das [208]rogramm nun selbst"
  258. 261 print"zu erkl[166]ren ![155]";
  259. 262 geta$:ifa$=""then262
  260. 263 sys33184
  261. 264 goto212
  262. 267 print"[154]. 81[193][196]  [193]9 00     [204][196][193] #$00
  263. 268 [153]". 81atnasc  8str$ 25 str$0  (NULL)(NULL)atn $str$025
  264. 269 print"[158][199]emeinsame [211]prite-[198]arbe auf 0 (=schwarz)";
  265. 270 print"setzen. [197]ntspricht [208][207][203][197] 53285,0"
  266. 271 print"[154]. 81[194]2  [193]9 0[197]     [204][196][193] #$0[197]
  267. 272 [153]". 81peek4  8str$ 21 str$0  (NULL)(NULL)atn $str$021
  268. 273 print". 81[194]7  8[196] 20 [196]0  [211][212][193] $[196]020
  269. 274 [153]"sysstr$er left$intergrund und der (NULL)ahmen werden"
  270. 275 [153]"hellblau ( =$0val )."
  271. 276 [153]"cont. 81peekatn  atn9 0str$     (NULL)str$atn #$0str$
  272. 277 print". 81[194][195]  8[196] [198]8 07  [211][212][193] $07[198]8
  273. 278 [153]"sys(NULL)pritezeiger auf peeklock 13 setzen, wie"
  274. 279 [153]"(NULL)(NULL)(NULL)val 2040,13."
  275. 280 [153]"cont. 81peekasc  atn9 07     (NULL)str$atn #$07
  276. 281 print". 81[195]1  8[196] 27 [196]0  [211][212][193] $[196]027
  277. 282 [153]"sysstr$ie (NULL)prite-ascarbe auf 7 ( =gelb ) setzen."
  278. 283 [137]34
  279. 284 [153]"cont. 81len4  atn9 01     (NULL)str$atn #$01
  280. 285 print". 81[195]6  8[196] 1[195] [196]0  [211][212][193] $[196]01[195]"
  281. 286 print". 81[195]9  8[196] 15 [196]0  [211][212][193] $[196]015"
  282. 287 print"[158][196]as [211]prite 1 wird auf [205]ulticolor ge-"
  283. 288 print"setzt und angeschaltet."
  284. 289 print"[197]ntspricht [208][207][203][197] 53276,1:[208][207][203][197] 53269,1."
  285. 290 print"[154]. 81[195][195]  [193]9 50     [204][196][193] #$50"
  286. 291 print". 81[195][197]  8[196] 00 [196]0  [211][212][193] $[196]000"
  287. 292 print". 81[196]1  8[196] 01 [196]0  [211][212][193] $[196]001"
  288. 293 print"[158][196]ie beiden [211]prite-[203]oordinaten werden"
  289. 294 print"auf $50 ( dezimal 80 ) gestellt."
  290. 295 print"[154]. 81[196]4  60        [210][212][211]"
  291. 296 print"[158][194]eendet das [208]rogramm.[155]"
  292. 297 goto34
  293. 298 print"[215]ie in unseren [194]eispielen wird auch in"
  294. 299 print"der [208]raxis meistens mit [194][197][209]/[194][206][197] "
  295. 300 print"verzweigt."
  296. 301 print"[211]o wie diese beiden [194]efehle auf "
  297. 302 print"[199]leichheit/[213]ngleichheit reagieren,"
  298. 303 print"verzweigt z.[194] der [194][195][195]-[194]efehl wenn der"
  299. 304 print"erste [215]ert [203][204][197][201][206][197][210] [193][204][211] der zweite ist."
  300. 305 print"[196]er [194][195][211]-[194]efehl wirkt wieder entgegen-"
  301. 306 print"gesetzt ( [199][210][221]\[197][210] [207][196][197][210] [199][204][197][201][195][200] )."
  302. 307 goto34
  303. 308 x=x+1
  304. 309 geta$:ifa$<"0"ora$>"1"then309
  305. 310 ifa$="0"anda(x)=0thenprint"0[210]ichtig":goto314
  306. 311 ifa$="1"anda(x)=1thenprint"1[210]ichtig":goto314
  307. 312 print""a$"[198]alsch !"
  308. 314 return
  309. 315 geta$
  310. 316 ifse>16thense=0:return
  311. 317 ifa$=" "thense=se+1:return
  312. 318 ifse<0thense=0:return
  313. 319 ifa$="[133]"thense=se-1:return
  314. 320 ifa$="[136]"thense=0:return
  315. 321 goto315
  316.