home *** CD-ROM | disk | FTP | other *** search
- 100 (NULL):opt oo:*= $c000
- 110 ;
- 120 ;
- 130 ; 3d-(NULL)-routine
- 140 ;
- 150 ;
- 160 vektram = $a4 ;6 bytes
- 170 freezero = $fb ;4 bytes
- 180 farbram = $8c00
- 190 picture = $a000
- 200 ;
- 210 ;
- 220 ; sprungtabelle
- 230 ;
- 240 jmp graphicson
- 250 jmp graphics(NULL)
- 260 jmp (NULL)
- 270 ;
- 280 nop:nop:nop
- 290 nop:nop:nop
- 300 nop:nop:nop
- 310 nop:nop:nop
- 320 ;
- 330 ;
- 340 ; subroutinen
- 350 ;
- 360 rom(NULL) sei
- 370 lda #$36
- 380 sta $01
- 390 rts
- 400 ;
- 410 romon lda #$37
- 420 sta $01
- 430 cli
- 440 rts
- 450 ;
- 460 (NULL)mem ldy #0
- 470 l000 sta (freezero+0),y
- 480 iny
- 490 bne l000
- 500 inc freezero+1
- 510 dex
- 520 bne l000
- 530 rts
- 540 ;
- 550 ;
- 560 ; mainroutinen
- 570 ;
- 580 graphicson jsr $e200
- 590 txa ;hintergrfarbe
- 600 and #%00001111
- 610 sta freezero+0
- 620 jsr $e200
- 630 txa ;zeichenfarbe
- 640 asl:asl
- 650 asl:asl
- 660 eor freezero+0
- 670 ldx #<farbram
- 680 ldy #>farbram
- 690 stx freezero+0
- 700 sty freezero+1
- 710 ldx #4 ;farbram
- 720 jsr (NULL)mem ;initialisieren
- 730 ldx #<picture
- 740 ldy #>picture
- 750 stx freezero+0
- 760 sty freezero+1
- 770 ldx #32
- 780 lda #0 ;(NULL)(NULL)
- 790 jsr (NULL)mem ;initialisieren
- 800 ;
- 810 lda 56576 ;grafik
- 820 and #252 ;einschalten
- 830 ora #1
- 840 sta 56576
- 850 lda 53272
- 860 and #15
- 870 ora #(16*3+8)
- 880 sta 53272
- 890 lda 53265
- 900 ora #32
- 910 sta 53265
- 920 rts
- 930 ;
- 940 graphics(NULL) lda 53265
- 950 and #223
- 960 sta 53265
- 970 lda #23
- 980 sta 53272
- 990 lda #151
- 1000 sta 56576
- 1010 rts
- 1020 ;
- 1030 ;
- 1040 ; 3d-(NULL)-routine
- 1050 ;
- 1060 ; $a4-$a9 -> 2 3d-vektoren
- 1070 ; $aa-$b5 -> versch. genutzt
- 1080 ; u.a. bresenham-al(NULL)rithmus
- 1090 ; $aa-$ab -> vektor in picture
- 1100 ; $ac -> bit d. punktes
- 1110 ; $ad-$b0 -> punktrichtungen
- 1120 ; $b1 -> vergleichszahl
- 1130 ; $b2 -> summand
- 1140 ; $b3 -> laufende summe
- 1150 ; $b4 -> abwaertszaehler
- 1160 ; $b5 -> zweite richtung
- 1170 ;
- 1180 error jmp $b248
- 1190 ;
- 1200 (NULL) jsr $e200
- 1210 cpx #2
- 1220 bcs error
- 1230 txa
- 1240 lsr
- 1250 php ;zeichnen/loeschen
- 1260 l001 sta $aa ;schleife zum
- 1270 jsr $aefd ;einlesen der
- 1280 jsr $ad8a ;6 koeffizienten
- 1290 jsr $b849
- 1300 jsr $b1aa
- 1310 ldx $aa
- 1320 sty vektram,x
- 1330 tax
- 1340 tya
- 1350 cpx #0
- 1360 beq l002
- 1370 inx
- 1380 bne error
- 1390 sbc #1
- 1400 eor #$ff
- 1410 l002 cmp #61
- 1420 bcs error
- 1430 lda $aa
- 1440 adc #1
- 1450 cmp #6
- 1460 bcc l001
- 1470 lda #>picture
- 1480 plp
- 1490 ;
- 1500 (NULL)2 php ;einsprung fuer
- 1510 pha ;3d-(NULL), wenn
- 1520 jsr rom(NULL) ;koeffizienten
- 1530 ldx #0 ;schon in zero-
- 1540 l003 lda vektram,x;(NULL) stehen
- 1550 cmp #$80
- 1560 ror
- 1570 bpl l004 ;3d -> 2d
- 1580 adc #0 ;berechne dx und
- 1590 l004 tay ;dy fuer anfangs
- 1600 eor #$ff ;und endpunkt
- 1610 clc ;aus den vor-
- 1620 adc #161 ;handenen 6 vor-
- 1630 clc ;zeichenbehaf-
- 1640 adc vektram+1,x ;teten koeffi-
- 1650 sta $aa,x ;zienten der
- 1660 tya ;beiden vektoren
- 1670 clc
- 1680 adc #100 ;ergebnis nach
- 1690 sec ;$aa/$ab und
- 1700 sbc vektram+2,x ;$ad/$ae
- 1710 sta $ab,x
- 1720 inx:inx
- 1730 inx
- 1740 cpx #6
- 1750 bcc l003
- 1760 ;
- 1770 ldx #1 ;berechne dx, dy
- 1780 l005 sec ;und deren vor-
- 1790 lda $ad,x ;zeichen
- 1800 sbc $aa,x ;zwischen an-
- 1810 tay ;fangs- und end-
- 1820 txa ;punkt der linie
- 1830 ror
- 1840 eor #$81 ;abs(dx),abs(dy)
- 1850 sta $b3,x ;-> $b1/$b2
- 1860 asl ;vor(dx),vor(dy)
- 1870 tya ;-> $b3/$b4
- 1880 bcc l006
- 1890 eor #$ff
- 1900 adc #0
- 1910 l006 sta $b1,x
- 1920 dex
- 1930 bpl l005
- 1940 ;
- 1950 lda $aa ;berechne bit-
- 1960 and #%00000111 ;maske fuer 1.
- 1970 tax ;zu setzenden/
- 1980 lda bits,x ;zu loeschenden
- 1990 sta $ac ;grafikpunkt
- 2000 ;
- 2010 lda $ab ;berechne zeiger
- 2020 and #%11111000 ;auf byte der
- 2030 lsr ;(NULL)(NULL), in
- 2040 lsr ;dem der erste
- 2050 tax ;zu setzende/
- 2060 lda $aa ;zu loeschende
- 2070 and #%11111000 ;grafikpunkt
- 2080 sta $aa ;steht
- 2090 lda $ab
- 2100 and #%00000111 ;zeiger in
- 2110 ora $aa ;$aa/$ab
- 2120 adc multab+0,x
- 2130 sta $aa
- 2140 pla ;hi-b graf.(NULL)
- 2150 adc multab+1,x
- 2160 sta $ab
- 2170 ;
- 2180 ldx #0 ;hole die ver-
- 2190 ldy #0 ;gleichszahl,
- 2200 lda $b1 ;den abwaerts-
- 2210 cmp $b2 ;zaehler, den
- 2220 bcc l007 ;summanden und
- 2230 pha ;das vorzeichen
- 2240 lda $b2 ;fuer die zweite
- 2250 pha ;richtung in ab-
- 2260 lda $b4 ;haengigkeit von
- 2270 ldx $b3 ;max(dx,dy) fuer
- 2280 ; ;bresh.-al(NULL)rit.
- 2290 ;
- 2300 bcs l008 ;unbedingt
- 2310 l007 lda $b2
- 2320 pha
- 2330 lda $b1
- 2340 pha
- 2350 lda $b3
- 2360 ldy $b4
- 2370 ;
- 2380 l008 stx $ad ;setze d. konst.
- 2390 sty $ae ;1. richtung,
- 2400 sta $b5 ;vorz. 2.richt.,
- 2410 pla
- 2420 sta $b2 ;den summanden,
- 2430 inc $b2
- 2440 pla
- 2450 sta $b1 ;die vergl.zahl,
- 2460 inc $b1
- 2470 sta $b4 ;den abw.zaehl.,
- 2480 lda #0
- 2490 sta $b3 ;die lauf. summe
- 2500 sta $af ;und die variab.
- 2510 sta $b0 ;2. richtung
- 2520 jmp l020
- 2530 ;
- 2540 l009 lda #0 ;bresenham-al-
- 2550 sta $af ;(NULL)rithmus
- 2560 sta $b0
- 2570 clc
- 2580 lda $b3
- 2590 adc $b2
- 2600 bcs l010
- 2610 sta $b3
- 2620 cmp $b1
- 2630 bcc l012
- 2640 l010 sbc $b1
- 2650 sta $b3
- 2660 lda $b5
- 2670 ldx $ad
- 2680 bne l011
- 2690 sta $af
- 2700 beq l012 ;unbedingt
- 2710 l011 sta $b0
- 2720 ;
- 2730 l012 ldx #2
- 2740 l013 lda $ad,x
- 2750 beq l015
- 2760 bmi l014
- 2770 lsr $ac ;veraendere
- 2780 bcc l015 ;zeiger und bit-
- 2790 ror $ac ;maske fuer
- 2800 lda $aa ;x=x+1
- 2810 adc #8
- 2820 sta $aa
- 2830 bcc l015
- 2840 inc $ab
- 2850 bcs l015 ;unbedingt
- 2860 ;
- 2870 l014 asl $ac ;veraendere
- 2880 bcc l015 ;zeiger und bit-
- 2890 rol $ac ;maske fuer
- 2900 sec ;x=x-1
- 2910 lda $aa
- 2920 sbc #8
- 2930 sta $aa
- 2940 bcs l015
- 2950 dec $ab
- 2960 ;
- 2970 l015 lda $ae,x
- 2980 beq l019
- 2990 bmi l017
- 3000 inc $aa ;veraendere
- 3010 bne l016 ;zeiger und bit-
- 3020 inc $ab ;maske fuer
- 3030 l016 lda $aa ;y=y+1
- 3040 and #%00000111
- 3050 bne l019
- 3060 clc
- 3070 lda $aa
- 3080 adc #<312
- 3090 sta $aa
- 3100 lda $ab
- 3110 adc #>312
- 3120 sta $ab
- 3130 bcc l019 ;unbedingt
- 3140 ;
- 3150 l017 lda $aa ;veraendere
- 3160 bne l018 ;zeiger und bit-
- 3170 dec $ab ;maske fuer
- 3180 l018 dec $aa ;y=y-1
- 3190 lda $aa
- 3200 and #%00000111
- 3210 eor #%00000111
- 3220 bne l019
- 3230 sec
- 3240 lda $aa
- 3250 sbc #<312
- 3260 sta $aa
- 3270 lda $ab
- 3280 sbc #>312
- 3290 sta $ab
- 3300 ;
- 3310 l019 dex ;2 mal schleife
- 3320 dex ;durchlaufen
- 3330 bpl l013 ;fuer x und y
- 3340 ;
- 3350 l020 plp
- 3360 lda $ac
- 3370 ldy #0
- 3380 bcs l021
- 3390 eor #$ff
- 3400 and ($aa),y ;punkt loeschen
- 3410 byt $2c ;oder
- 3420 l021 ora ($aa),y ;setzen
- 3430 sta ($aa),y
- 3440 lda $b4
- 3450 beq l022
- 3460 dec $b4
- 3470 php
- 3480 jmp l009
- 3490 ;
- 3500 l022 jmp romon
- 3510 ;
- 3520 bits byt $80,$40,$20,$10
- 3530 byt $08,$04,$02,$01
- 3540 ;
- 3550 multab byt 0,0,<320,>320
- 3560 byt <0640,>0640,<0960,>0960
- 3570 byt <1280,>1280,<1600,>1600
- 3580 byt <1920,>1920,<2240,>2240
- 3590 byt <2560,>2560,<2880,>2880
- 3600 byt <3200,>3200,<3520,>3520
- 3610 byt <3840,>3840,<4160,>4160
- 3620 byt <4480,>4480,<4800,>4800
- 3630 byt <5120,>5120,<5440,>5440
- 3640 byt <5760,>5760,<6080,>6080
- 3650 byt <6400,>6400,<6720,>6720
- 3660 byt <7040,>7040,<7360,>7360
- 3670 byt <7680,>7680
- 3680 ;
-