home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er 1990 January
/
64er_Magazin_90-01_1990_Markt__Technik_de_Side_A.d64
/
q_hprg
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
8KB
|
362 lines
1 ; +++++++++++++++++++++++++++++
2 ; + +
3 ; + --- the char-killer --- +
4 ; + +
5 ; + (c) 9/89 by alex gevatter +
6 ; + +
7 ; +++++++++++++++++++++++++++++
8 ; + +
9 ; + teilprg.: hauptprogramm +
10 ; + speicherbel.: 40192-40930 +
11 ; + quelltext fuer: +
12 ; + kingsoft power assembler +
13 ; + +
14 ; +++++++++++++++++++++++++++++
15 ;
16 *=40192 ;startadresse
17 &=49152
18 ;
19 vic =53248 ;labels defi-
20 sid =54272 ;nieren
21 bild.l =253
22 bild.h =254
23 anfang =40950
24 int.l =anfang
25 int.h =anfang+1
26 an =anfang+2
27 zaeh.l =anfang+3
28 zaeh.h =anfang+4
29 zuf =anfang+5
30 zeile =anfang+6
31 spr.z =anfang+7
32 spalte =anfang+8
33 loe.z =anfang+9
34 ;
35 lda #0 ;programm vor
36 sta 55 ;ueberschrei-
37 lda #157 ;ben schuetzen
38 sta 56
39 ;
40 ldx #0 ;spritedaten
41 loop.1 lda sprite,x ;"sprite" in
42 sta 896,x ;sprite-blocks
43 sta 960,x ;14 u. 15
44 inx ;kopieren
45 cpx #63
46 bne loop.1
47 lda #255
48 sta 896+22
49 sta 896+25
50 sta 896+28
51 sta 896+31
52 ;
53 ldx #0 ;text aus ta-
54 loop.2 lda text,x ;belle "text"
55 jsr $ffd2 ;ausgeben
56 inx
57 cpx #19
58 bne loop.2
59 ;
60 ldx #10 ;zwischenspei-
61 lda #0 ;cher loeschen
62 loop.3 sta anfang-1,x
63 dex
64 bne loop.3
65 ;
66 lda #8 ;vic-grund-
67 sta vic+14 ;einstellungen
68 lda vic+16
69 and #127
70 sta vic+16
71 lda vic+21
72 ora #128
73 sta vic+21
74 lda vic+23
75 and #127
76 sta vic+23
77 lda vic+27
78 and #127
79 sta vic+27
80 lda vic+28
81 and #127
82 sta vic+28
83 lda vic+29
84 and #127
85 sta vic+29
86 lda #7
87 sta vic+46
88 lda #14
89 sta 2047
90 ;
91 lda #15 ;sid-grund-
92 sta sid+24 ;einstellungen
93 lda #130
94 sta sid+14
95 lda #8
96 sta sid+15
97 lda #128
98 sta sid+18
99 lda #0
100 sta sid+19
101 lda #240
102 sta sid+20
103 ;
104 ldx #9 ;cbm80 ab
105 loop.4 dex ;32768 schrei-
106 lda cbm80,x ;ben (reset-
107 sta 32768,x ;schutz
108 bne loop.4
109 ;
110 lda #<rest. ;restore auf
111 sta 792 ;eigene rou-
112 lda #>rest. ;tine einstel-
113 sta 793 ;len
114 ;
115 lda 788 ;alten irq-
116 sta int.l ;vektor in
117 lda 789 ;int.l + int.h
118 sta int.h ;speichern
119 sei ;irq auf
120 lda #<inter ;eigene rou-
121 sta 788 ;tine stellen
122 lda #>inter
123 sta 789
124 cli
125 ;
126 rts ;zurueck zum
127 ; ;basic
128 ;
129 ; *** eigene restore-routine ***
130 ;
131 rest. pha ;die normale
132 txa ;restore-rou-
133 pha ;tine wird
134 tya ;ausgefuehrt,
135 pha ;nur das zu-
136 lda #$7f ;ruecksetzen
137 sta $dd0d ;des inter-
138 ldy $dd0d ;rupts wird
139 bmi spr.1 ;ausgelassen
140 jsr $f6bc
141 jsr $ffe1
142 bne spr.1
143 jsr $fda3
144 jsr $e518
145 jmp ($a002)
146 spr.1 jmp $fe72
147 ;
148 ; *** eigene reset-routine ***
149 ;
150 reset stx $d016 ;die normale
151 jsr $fda3 ;reset-routine
152 jsr $fd50 ;wird ausge-
153 jsr $ff8a ;fuehrt, zu
154 jsr $ff5b ;saetzlich
155 cli ;wird noch
156 jsr $e453 ;der char-kil-
157 jsr $e3bf ;ler aktiviert
158 jsr $e422
159 lda #71
160 sta 792
161 lda #254
162 sta 793
163 jsr 40192
164 jmp $e386
165 ;
166 ;*** eigene interrupt-routine ***
167 ;
168 inter lda vic+21 ;wenn ein
169 bne spr.2 ;restore aus-
170 sei ;gefuehrt
171 lda int.l ;wurde, muss
172 sta 788 ;der char-kil-
173 lda int.h ;ler neu init-
174 sta 789 ;ialisiert
175 cli ;werden
176 jsr 40192
177 ;
178 spr.2 lda an ;char-killer
179 bne laeuft ;an=nach
180 ; ;laeuft sprin.
181 ;
182 inc zaeh.l ;warteschleife
183 lda zaeh.l ;(lo/hi-zaeh-
184 bne spr.3 ;ler)
185 ;
186 lda zaeh.h
187 cmp zuf
188 bcs erstan
189 inc zaeh.h
190 spr.3 jmp (int.l)
191 ;
192 erstan inc an ;die vorberei-
193 lda 204 ;tungen fuer
194 beq spr.4 ;das auftau-
195 ; ;chen des
196 jsr zufall ;char-killers
197 lda zuf ;werden ge-
198 sta zeile ;troffen,
199 jmp spr.5 ;d.h. die y-
200 ; ;position fuer
201 spr.4 lda 214 ;das sprite
202 sta zeile ;sowie die
203 ; ;anfangsadres-
204 spr.5 asl ;se der ent-
205 asl ;sprechenden
206 asl ;zeile im
207 clc ;bildschirm-
208 adc #45 ;speicher wer-
209 sta vic+15 ;den berechnet
210 ;
211 lda #<1024
212 sta bild.l
213 lda #>1024
214 sta bild.h
215 ldx #40
216 loop.5 clc
217 lda bild.l
218 adc zeile
219 sta bild.l
220 lda bild.h
221 adc #0
222 sta bild.h
223 dex
224 bne loop.5
225 ;
226 jmp (int.l)
227 ;
228 laeuft inc spr.z ;das "maul"
229 lda spr.z ;des char-kil-
230 cmp #5 ;lers wird ge-
231 bne spr.7 ;oeffnet und
232 ; ;geschlossen
233 lda #0 ;und das
234 sta spr.z ;fressge-
235 lda 2047 ;raeusch er-
236 cmp #15 ;zeugt
237 beq spr.6
238 inc 2047
239 lda #128
240 sta sid+18
241 jmp spr.7
242 ;
243 spr.6 dec 2047
244 lda #129
245 sta sid+18
246 ;
247 spr.7 lda vic+16 ;bewegung des
248 and #128 ;sprites
249 bne spr.9
250 lda vic+14
251 cmp #255
252 beq spr.8
253 jmp spr.10
254 spr.8 lda vic+16
255 ora #128
256 sta vic+16
257 spr.9 lda vic+14
258 cmp #82
259 beq ende
260 spr.10 inc vic+14
261 lda vic+16 ;ueberpruefen,
262 and #128 ;ob das loe-
263 bne spr.11 ;schen eines
264 lda vic+14 ;zeichens
265 cmp #10 ;noetig ist
266 bcc spr.12
267 ;
268 spr.11 lda spalte
269 cmp #40
270 beq spr.12
271 inc loe.z
272 lda loe.z
273 cmp #8
274 beq spr.13
275 spr.12 jmp (int.l)
276 ;
277 spr.13 lda #0 ;es wird
278 sta loe.z ;ueberprueft,
279 lda 204 ;ob die x- und
280 bne spr.15 ;y-position
281 ; ;des cursors
282 lda 214 ;und die des
283 cmp zeile ;zu loeschen-
284 bne spr.15 ;den zeichens
285 lda 211 ;uebereinstim-
286 dec ;men. ist dies
287 cmp spalte ;so, muss der
288 beq spr.14 ;cursor kurz
289 lda 213 ;ausgeschaltet
290 cmp #39 ;werden
291 beq spr.15
292 lda 211
293 cmp #40
294 bcc spr.15
295 lda 211
296 dec
297 sec
298 sbc #40
299 cmp spalte
300 bne spr.15
301 ;
302 spr.14 lda #0
303 sta 207
304 inc
305 sta 204
306 ;
307 spr.15 lda #32 ;loeschen des
308 ldy spalte ;zeichens
309 sta (bild.l),y
310 inc spalte
311 jmp (int.l)
312 ;
313 ende lda #0 ;der char-kil-
314 sta an ;ler hat den
315 sta spalte ;rechten rand
316 sta zaeh.h ;erreicht und
317 sta loe.z ;wird abge-
318 lda #8 ;schaltet
319 sta vic+14
320 lda vic+16
321 and #127
322 sta vic+16
323 lda #128
324 sta sid+18
325 jsr zufall
326 lda zuf
327 lsr
328 lsr
329 sta zuf
330 jmp (int.l)
331 ;
332 zufall lda sid+27 ;unterroutine
333 sta zuf ;zur berech-
334 cmp #250 ;nung einer
335 bcs zufall ;zufallszahl
336 ldx #0 ;zwischen 0
337 loop.6 lda zuf ;und 24
338 cmp #10
339 bcc spr.16
340 sec
341 lda zuf
342 sbc #10
343 sta zuf
344 inx
345 jmp loop.6
346 spr.16 stx zuf
347 rts
348 ;
349 sprite .0,0,0,0,0,0,0,0,0,0,0,0,0
350 .120,0,0,252,0,1,254,0,3
351 .240,0,3,224,0,3,224,0,3
352 .248,0,1,254,0,0,252,0,0
353 .120,0,0,0,0,0,0,0,0,0,0
354 .0,0,0,0,0,0,0,0,0,0,0,0
355 ;
356 text .17,"ready. (to kill!)",145
357 ;
358 cbm80 .235,157,20,158,195,194,205
359 .56,48
360 ;
361 ; --- ende ---