home *** CD-ROM | disk | FTP | other *** search
- 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 ---
-