home *** CD-ROM | disk | FTP | other *** search
- 105 ; abgetippt/ueberarbeitet/kommentiert von n.heusler, 19.4.88
- 106 ; ****************** !! **********
- 107 ; bitte zeile 105 unbedingt im listing lasssen und zeilen 106-108 loeschen !
- 108 ; ****************** !! **********
- 110 .eqv =53248
- 120 jsrinitial ; adressen init
- 130 jsrirq ; irq umlenken
- 140 rts ; fertig
- 150 setsprite lda#130 ; sprite 0 auf
- 160 stav ; position (130/114)
- 170 lda#114
- 180 stav+1
- 190 lda#0
- 200 stav+16
- 210 stav+29
- 220 stav+23
- 225 lda#2 ; rot
- 230 stav+39 ; setzen
- 240 lda#5 ; gruen
- 250 stav+37 ; multicolor1
- 260 lda#32 ; spritepointer
- 270 sta2040
- 280 lda#1 ; multicolor an
- 290 stav+28
- 300 stav+21 ; sprite an
- 310 rts
- 320 animation rts
- 330 ; in diesen zeilen
- 340 ; steht spaeter
- 350 ; das unterprogramm
- 360 ; fuer die sprite-
- 370 ; animation
- 600 initial lda#39 ; daten fuer spr.0
- 610 sta2040 ; aus block 39
- 620 lda#0 ; null
- 650 sta65 ; lb von grafikpointer auf 0
- 660 stagame ; spielstand
- 670 lda#7 ; softscrollzeiger
- 680 sta2 ; auf sieben
- 690 lda#200 ; verz. nach spielende
- 700 stadelay ; 200/25 sek.
- 710 lda#$70 ; high von grafikpointer
- 720 sta66 ; auf $70
- 730 lda#<(1144) ; pointer fuer
- 740 sta67 ; bildsch. grafik
- 750 lda#>(1144) ; in 67/68 auf 1144
- 760 sta68
- 770 lda#5 ; fuenf
- 772 sta53281 ; damit's auf alten 64'ern laeuft ! (nh)
- 780 sta646 ; und auf neuen (cursorfarbe)
- 790 jsr$e544 ; denn diese scnslr routine gibt's
- 792 ; in 2 ausfuehrungen
- 800 lda53270
- 810 and#247 ; 38 zeichen pro zeile
- 820 sta53270
- 830 jsrramscreen ; grafik -> schirm
- 840 jsrsetsprite ; an
- 842 lda#0 ; tiefschwarz
- 844 sta53280 ; rahmen
- 846 sta53281 ; grund
- 850 lda53279 ; loeschen kollision sprite-grund
- 860 rts ; fertig
- 870 delay brk ; verzoegerungszaehler
- 880 irq sei ; irq aus
- 890 ; hier
- 900 ; steht
- 910 ; routine
- 920 ; fuer die
- 930 ; interrupt-
- 940 ; gesteuerte
- 950 ; musik (spaeter mal)
- 960 lda#<(irqneu) ; low
- 970 sta$314 ; irqpointer auf eigene routine
- 980 lda#>(irqneu) ; high
- 990 sta$315 ; setzen
- 1000 lda#74 ; rasterzeile 74
- 1010 stav+$12 ; ins rasterreg.
- 1020 ldav+$11 ; highbyte der ra.zeile
- 1030 and#$7f ; aus
- 1040 stav+$11
- 1050 lda#$81 ; rasterzeilenirq vom vic
- 1060 stav+$1a ; zulassen
- 1070 cli ; sonst geht's nicht (irq wieder an)
- 1080 rts ; fertig
- 1090 game brk ; spielstandvariable (anfangs null)
- 1100 joyab lda#224 ; tastatur
- 1110 sta56322 ; abschalten
- 1120 lda56320 ; joyport 2
- 1130 and#1 ; bit 1 gesetzt testen
- 1140 bnejoy2 ; ja, dann weiter abfragen
- 1150 decv+1 ; sprite y-pos erniedrigen
- 1160 joy2 lda56320
- 1170 and#2 ; bit 2 testen
- 1180 bnejoy3 ; ja, dann weiter
- 1190 incv+1 ; sonst sprite senken
- 1200 joy3 lda56320
- 1210 and#4 ; bit 3 testen
- 1220 bnejoy4 ; ja, weiter
- 1230 ldav ; wenn die x-pos des sprite
- 1240 cmp#32 ; groesser 32 ist
- 1250 beqjoy4
- 1260 decv ; erniedrigen
- 1270 joy4 lda56320
- 1280 and#8 ; bit 4
- 1290 bnejoy5 ; weiter
- 1300 ldav ; wenn x-pos von sprite 0
- 1310 cmp#255 ; kleiner 255 ist
- 1320 beqjoy5 ; dann weiter
- 1330 incv ; x-pos erhoehen
- 1340 joy5 lda#255 ; tastatur
- 1350 sta56322 ; ein
- 1360 rts ; geschafft
- 1370 ramscreen ldx#0 ; 13 mal (anz. zeilen)
- 1380 ramscrl1 ldy#0 ; 40 zeichen
- 1390 ramscrl2 lda(65),y ; aus
- 1400 sta(67),y ; dem grafikbereich
- 1410 iny ; zum
- 1420 cpy#40 ; bildschirm
- 1430 bneramscrl2 ; tranferieren
- 1440 inc66
- 1450 inc66 ; grafikvektor ist
- 1460 lda67
- 1470 clc ; in der zeropage
- 1480 adc#40
- 1490 sta67 ; 65/66
- 1500 lda68 ; bildschirmvektor ist
- 1510 adc#0
- 1520 sta68 ; 67/68
- 1530 inx
- 1540 cpx#13 ; schon 13 zeilen
- 1550 bneramscrl1 ; nein
- 1560 lda66 ; grafikvektor
- 1570 sec
- 1580 sbc#26
- 1590 sta66
- 1600 lda#<(1144) ; bildschirmvektor
- 1610 sta67
- 1620 lda#>(1144)
- 1630 sta68 ; beide restaurieren
- 1640 rts ; fertig
- 1650 warten ldy#0 ; text 1 in den schirm
- 1660 warten1 ldatext1,y
- 1670 sta1754,y
- 1680 iny ; ab speicherzelle 1754
- 1690 cpy#20 ; 20 zeichen
- 1700 bnewarten1
- 1710 lda#224 ; tastatur
- 1720 sta56322 ; aus
- 1730 lda56320 ; joystick lesen
- 1740 cmp#111 ; knopf testen
- 1750 bnewartenend ; nein, ende
- 1760 lda#255 ; tastatur
- 1770 sta56322 ; ein
- 1780 ldy#0 ; text1 im schirm loeschen
- 1790 lda#32 ; == mit spaces uebermalen
- 1800 warten2 sta1754,y
- 1810 iny
- 1820 cpy#20
- 1830 bnewarten2
- 1840 incgame ; spielstand auf 'spiel gestartet' setzen
- 1850 wartenend rts
- 1860 text1 .by8,9,20,32,20,18,9,7,7,5,18,32,20
- 1865 .by15,32,19,20,1,18,20
- 1870 boing ldy#0 ; text2 ausgeben
- 1880 bo1 ldatext2,y
- 1890 sta1754,y
- 1900 iny
- 1910 cpy#20 ; 20 zeichen
- 1920 bnebo1
- 1930 decdelay ; warten bis
- 1940 ldadelay ; verzoegerung
- 1950 bneboend ; bei null
- 1960 ldy#0
- 1970 lda#32 ; text2 loeschen
- 1980 bo2 sta1754,y
- 1990 iny
- 2000 cpy#20
- 2010 bnebo2
- 2020 jsrinitial ; alles neu einstellen
- 2030 boend rts
- 2040 text2 .by25,15,21,18,32,13,9,19,19,9,15,14,32
- 2042 .by6,1,9,12,5,4,32
- 2050 over ldy#0 ; text 3 in den
- 2060 overl1 ldatext3,y ; bildschirm
- 2070 sta1754,y
- 2080 iny
- 2090 cpy#20 ; 20 zeichen
- 2100 bneoverl1 ; transferieren
- 2110 decdelay ; warten bis
- 2120 ldadelay ; verzoegerung
- 2130 bneoverend ; null ist
- 2140 ldy#0 ; text3
- 2150 lda#32 ; mit spaces
- 2160 overl2 sta1754,y ; uebermalen
- 2170 iny
- 2180 cpy#20
- 2190 bneoverl2
- 2200 jsrinitial ; alles initialisieren (neustart)
- 2210 overend rts
- 2220 text3 .by25,15,21,32,13,1,4,5,32,9,20,44,15,12
- 2222 .by4,32,2,15,25,44 ; text im bildschirmcode
- 2230 scroll lda2 ; 7 punkte nach links
- 2240 beqblkscroll ; hardscrolling
- 2250 dec2 ; einen punkt nach links
- 2260 lda65 ; abfragen
- 2270 cmp#$d8 ; ob die grafik am ende
- 2280 bneblkend
- 2290 lda66 ; angelangt ist
- 2300 cmp#$71 ; (bei $71d8)
- 2310 bneblkend ; nein, weiter
- 2320 incgame ; game = game +2
- 2330 incgame
- 2340 blkend rts
- 2350 blkscroll lda#7; speicherstelle fuer softscroll
- 2360 sta2 ; auf sieben
- 2370 lda65 ; grafikpointer
- 2380 clc ; um 1
- 2390 adc#1 ; (einfacher waere inc)
- 2400 sta65 ; erhoehen
- 2410 lda66 ; highbyte
- 2420 adc#0 ; sehr umstaendlich programmiert
- 2430 sta66
- 2440 jsrramscreen ; transferroutine aufrufen
- 2450 rts
- 2460 irqneu ldav+$19 ; irq-register
- 2470 stav+$19 ; loeschen
- 2480 bmiraster ; war raster-irq
- 2490 lda$dc0d ; normalen
- 2500 cli ; irq zulassen
- 2510 jmp$ea31 ; zur systemroutine
- 2520 raster ldav+$12 ; rasterirq
- 2530 cmp#178 ; bei zeile 178
- 2540 bcszweiter ; ja, weiter
- 2550 lda53270 ; ab zeile 74
- 2560 and#248 ; um den wert in
- 2570 ora2 ; speicherzelle 2
- 2580 sta53270 ; nach links scrollen (smooth)
- 2590 lda#5 ; rahmenfarbe
- 2600 sta53280 ; gruen
- 2610 lda#178 ; naechsten irq bei zeile 178
- 2620 sta$d012
- 2630 jmp$febc ; irq fertig
- 2640 zweiter lda53270 ; bildschirm ab
- 2650 and#248 ; zeile 178
- 2660 ora#7 ; normal schalten
- 2670 sta53270
- 2680 lda#0 ; schwarz
- 2690 sta53280 ; rahmenfarbe
- 2700 ldagame ; spielstand
- 2710 bnegame1 ; null - nein, dann weiter
- 2720 jsrwarten
- 2730 jmpexit
- 2740 game1 cmp#1
- 2750 bnegame2 ; ungleich 1
- 2760 jsrscroll ; scrollen
- 2770 jsranimation ; sprite
- 2780 jsrjoyab ; joyst. abfragen
- 2790 lda53279 ; sprite-hintergrund kollision
- 2800 beqnoboing ; kein zusammenstoss
- 2810 incgame ; sonst vermerken
- 2820 noboing jmpexit ; fertig
- 2830 game2 cmp#2 ; gleich 2
- 2840 bnegame3 ; immer noch nicht richtig
- 2850 jsrboing ; zusammenstoss ausgeben
- 2860 jmpexit
- 2870 game3 cmp#3
- 2880 bneexit ; auch nicht 3, dann ende
- 2890 jsrover ; spielende
- 2900 exit lda#74 ; naechster rasterirq
- 2910 stav+$12 ; bei zeile 74
- 2920 jmp$febc ; irq beenden
-