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