home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er Special 30
/
64er_Magazin_Sonderheft_30_19xx_Markt__Technik_de_Side_B.d64
/
src.main
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
8KB
|
272 lines
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