home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er 1993 October
/
64er_Magazin_93-10_1993_Markt__Technik_de_Side_A.d64
/
apfel.src
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
8KB
|
212 lines
5 poke56,96:clr
10 sys36864
20 .opt oo
30 *= $c000
100 av =249 ; grafikzeiger
102 xc =20 ; x-koordinate
104 vic =$d000 ; videochip
106 strout =$ab1e ; text ausgeben
108 bsin =$ffcf
110 buffer =820 ; puffer fuer zahleneingabe
112 txtptr =$7a ; pufferzeiger
114 chr(NULL)t =121 ; zeichen holen
116 ascfloat =$bcf3 ; ascii -> fac
118 round =$bc1b ; fac ggf. runden
120 facmem =$bbd4 ; fac speichern
122 memfac =$bba2 ; fac laden
124 integer =$b7f7 ; fac -> integer
126 memplus =$b867 ; fac = fac + konst
128 plus =$b86a ; fac = fac + arg
130 memmult =$ba28 ; fac = fac * konst
132 memmin =$b850 ; fac = konst - fac
134 facarg =$bc0c ; arg = fac
136 exp =$61 ; fac-exponent
138 vergleich =$bc5b ; vgl. fac - speicher
140 memdiv =$bb0f ; fac = konst/fac
142 return =$aad7 ; crlf
144 delay =$eeb3 ; wartet ca. 1 ms
900 ; apfelmaennchen ******************
902 ; von nikolaus heusler
904 ; zwengauerweg 18
906 ; 81479 muenchen
908 ; (c) 6.93
950 ; hauptprogramm *******************
952 jsr para
954 jsr on
956 jsr apple
958 ldx #0:stx 198
960 fl1 lda color,x:sta vic+32:ldy #40
962 fl2 lda 198:bne end:jsr delay:dey:bne fl2
964 fl3 lda vic+17:bmi fl3:lda vic+18:cmp #3:bcs fl3
966 dex:bpl fl1:ldx #15:bne fl1
968 end jsr off:lda #0:sta 198:rts
990 color .byt 0,0,0,11,11,12,15,15,1,1,1,15,15,12,11,11
1000 ; variablenbereich ***************
1002 og brk:brk:brk:brk:brk ; obere grenze
1004 ug brk:brk:brk:brk:brk ; untere grenze
1006 lg brk:brk:brk:brk:brk ; linke grenze
1008 rg brk:brk:brk:brk:brk ; rechte grenze
1012 iz brk ; iterationszahl
1014 sr brk:brk:brk:brk:brk ; s - realteil
1016 si brk:brk:brk:brk:brk ; s - imaginaerteil
1018 cr brk:brk:brk:brk:brk ; c - realteil
1020 ci brk:brk:brk:brk:brk ; c - imaginaerteil
1022 i brk ; interationsschritt
1024 sr2 brk:brk:brk:brk:brk ; s - realteil (neu)
1026 aw brk:brk:brk:brk:brk ; betrag von s
1028 mx brk:brk:brk:brk:brk ; x - multiplikator
1030 my brk:brk:brk:brk:brk ; y - multiplikator
1032 vx brk:brk:brk:brk:brk ; x - schrittweite
1034 vy brk:brk:brk:brk:brk ; y - schrittweite
1036 rx brk:brk:brk:brk:brk ; x - aufloesung
1038 ry brk:brk:brk:brk:brk ; y - aufloesung
1040 bx brk:brk:brk:brk:brk ; x - groesse
1042 by brk:brk:brk:brk:brk ; y - groesse
2000 ; apfelmaennchen zeichnen ********
2002 apple ldx #4
2003 ; cr = lg
2004 ap1 lda lg,x:sta cr,x:dex:bpl ap1
2006 ; haupt-zeilen-schleife **********
2008 ap2 ldx #4
2009 ; ci = og
2010 ap3 lda og,x:sta ci,x:dex:bpl ap3
2012 ; haupt-spaltenschleife **********
2014 ap4 ldx #9:lda #0
2015 ; sr = 0, si = 0
2016 ap5 sta sr,x:dex:bpl ap5:sta i
2020 ; iterations-schleife ************
2022 ; sr2 = sr*sr - si*si + cr
2024 ap7 lda #<sr:ldy #>sr:jsr memfac:lda #<sr:ldy #>sr:jsr memmult
2026 ldx #<sr2:ldy #>sr2:jsr facmem
2028 lda #<si:ldy #>si:jsr memfac:lda #<si:ldy #>si:jsr memmult
2030 lda #<sr2:ldy #>sr2:jsr memmin:lda #<cr:ldy #>cr:jsr memplus
2032 ldx #<sr2:ldy #>sr2:jsr facmem
2034 ; si = sr*si*2 + ci
2036 lda #<sr:ldy #>sr:jsr memfac:lda #<si:ldy #>si:jsr memmult
2038 inc exp:lda #<ci:ldy #>ci:jsr memplus
2040 ldx #<si:ldy #>si:jsr facmem:ldx #4
2041 ; sr = sr2
2042 ap6 lda sr2,x:sta sr,x:dex:bpl ap6
2044 ; fac = sr*sr + si*si
2046 lda #<sr:ldy #>sr:jsr memfac:lda #<sr:ldy #>sr:jsr memmult
2048 ldx #<aw:ldy #>aw:jsr facmem
2050 lda #<si:ldy #>si:jsr memfac:lda #<si:ldy #>si:jsr memmult
2052 lda #<aw:ldy #>aw:jsr memplus
2054 ; falls fac => 8, dann divergenz
2056 lda exp:cmp #$84:bcs divergent
2060 inc i:lda i:cmp iz:bcs konvergent:jmp ap7
2070 ; bei konvergenz punkt setzen ****
2072 ; berechnung der screen-koordinaten
2074 ; y = (ci - og) * my
2076 konvergent lda #<og:ldy #>og:jsr memfac:lda #<ci:ldy #>ci:jsr memmin
2078 lda #<my:ldy #>my:jsr memmult
2080 jsr integer:tya:pha
2090 ; x = (cr - lg) * mx
2092 lda #<lg:ldy #>lg:jsr memfac:lda #<cr:ldy #>cr:jsr memmin
2094 lda #<mx:ldy #>mx:jsr memmult:jsr integer:pla:tax
2096 jsr plot
2098 ; schleifen beenden **************
2100 ; ci = ci + vy
2102 divergent lda #<ci:ldy #>ci:jsr memfac:lda #<vy:ldy #>vy:jsr memplus
2104 ldx #<ci:ldy #>ci:jsr facmem
2106 ; falls ci => ug dann fertig
2108 lda #<ci:ldy #>ci:jsr memfac:lda #<ug:ldy #>ug:jsr vergleich
2110 cmp #2:bcc ok1:jmp ap4
2112 ; cr = cr + vx
2114 ok1 lda #<cr:ldy #>cr:jsr memfac:lda #<vx:ldy #>vx:jsr memplus
2116 ldx #<cr:ldy #>cr:jsr facmem
2118 ; falls cr => rg dann fertig
2120 lda #<cr:ldy #>cr:jsr memfac:lda #<rg:ldy #>rg:jsr vergleich
2122 cmp #2:bcc ok2:jmp ap2
2124 ok2 rts
4000 ; turbo-plot-routine *************
4002 ; zeichnet einen punkt
4004 ; x-koordinate in xc
4006 ; y-koordinate im x-reg.
4010 plot txa:lsr:lsr:lsr:asl:tay:lda mult+1,y:sta av+1
4012 txa:and #7:clc:adc mult,y:sta av:lda xc:and #$f8:adc av:sta av
4014 lda av+1:adc xc+1:sta av+1:lda xc:and #7:tax:lda grbit,x
4016 ldy #0:ora (av),y:sta (av),y:rts
4020 ; zweiterpotenzen
4022 grbit .byt $80,$40,$20,$10,8,4,2,1
4024 ; multiplikationstabelle
4026 mult =*
4028 .wor $6000,$6140,$6280,$63c0
4030 .wor $6500,$6640,$6780,$68c0
4032 .wor $6a00,$6b40,$6c80,$6dc0
4034 .wor $6f00,$7040,$7180,$72c0
4036 .wor $7400,$7540,$7680,$77c0
4038 .wor $7900,$7a40,$7b80,$7cc0,$7e00
4040 ; grafik einschalten *************
4042 on ldy #0:sty av:ldx #32:lda #$60:sta av+1:tya
4044 loe sta (av),y:iny:bne loe:inc av+1:dex:bne loe
4046 ldx #4:lda #$44:sta av+1:lda #1
4048 faerb sta (av),y:iny:bne faerb:inc av+1:dex:bne faerb
4050 lda #59:sta vic+17:lda #29:sta vic+24:lda #2:sta 56576:rts
4060 ; grafik abschalten **************
4062 off lda #3:sta 56576:lda #27:sta vic+17:lda #21:sta vic+24:jmp return
5000 ; eingabe der parameter **********
5002 para lda #<text1:ldy #>text1:jsr strout
5004 jsr enter:ldx #<lg:ldy #>lg:jsr facmem
5006 lda #<text2:ldy #>text2:jsr strout
5008 jsr enter:ldx #<rg:ldy #>rg:jsr facmem
5010 lda #<text3:ldy #>text3:jsr strout
5012 jsr enter:ldx #<og:ldy #>og:jsr facmem
5014 lda #<text4:ldy #>text4:jsr strout
5016 jsr enter:ldx #<ug:ldy #>ug:jsr facmem
5017 lda #<text6:ldy #>text6:jsr strout
5018 jsr enter:jsr integer:sty iz
5019 lda #<text9:ldy #>text9:jsr strout
5020 jsr enter:ldx #<bx:ldy #>bx:jsr facmem
5021 lda #<text10:ldy #>text10:jsr strout
5022 jsr enter:ldx #<by:ldy #>by:jsr facmem
5026 lda #<text7:ldy #>text7:jsr strout
5027 jsr enter:ldx #<rx:ldy #>rx:jsr facmem
5028 lda #<text8:ldy #>text8:jsr strout
5029 jsr enter:ldx #<ry:ldy #>ry:jsr facmem
5030 ; berechnung der mult.konstanten *
5032 ; mx = bx / (rg-lg)
5034 lda #<lg:ldy #>lg:jsr memfac:lda #<rg:ldy #>rg:jsr memmin
5036 lda #<bx:ldy #>bx:jsr memdiv
5038 ldx #<mx:ldy #>mx:jsr facmem
5040 ; my = by / (ug-og)
5042 lda #<og:ldy #>og:jsr memfac:lda #<ug:ldy #>ug:jsr memmin
5044 lda #<by:ldy #>by:jsr memdiv
5046 ldx #<my:ldy #>my:jsr facmem
5048 ; berechnung der schrittweite ****
5050 ; vx = (rg-lg)/rx
5052 lda #<lg:ldy #>lg:jsr memfac:lda #<rg:ldy #>rg:jsr memmin
5054 ldx #<vx:ldy #>vx:jsr facmem
5056 lda #<rx:ldy #>rx:jsr memfac:lda #<vx:ldy #>vx:jsr memdiv
5058 ldx #<vx:ldy #>vx:jsr facmem
5060 ; vy = (ug-og)/ry
5062 lda #<og:ldy #>og:jsr memfac:lda #<ug:ldy #>ug:jsr memmin
5064 ldx #<vy:ldy #>vy:jsr facmem
5066 lda #<ry:ldy #>ry:jsr memfac:lda #<vy:ldy #>vy:jsr memdiv
5068 ldx #<vy:ldy #>vy:jmp facmem
5150 ; zahl eingeben -> fac ***********
5152 enter ldx #0
5154 input jsr bsin:cmp #13:beq drin:sta buffer,x:inx:bne input
5156 drin lda #0:sta buffer,x:lda #<buffer:ldy #>buffer
5158 sta txtptr:sty txtptr+1:jsr chr(NULL)t:jsr ascfloat:jmp round
5200 text1 .byt 13,13:.asc "apfelmaennchen-demo
5202 .byt 13,13:.[198] "(c) n. heusler 6.93
5204 .byt 13,13
5206 .asc "linker rand: -2.1[157][157][157][157]":brk
5208 text2 .byt 13
5210 .asc "rechter rand: 0.7[157][157][157]":brk
5212 text3 .byt 13
5214 .asc "oberer rand: -1[157][157]":brk
5216 text4 .byt 13
5218 .asc "unterer rand: 1[157]":brk
5224 text6 .byt 13
5226 .asc "iterationszahl: 240[157][157][157]":brk
5228 text7 .byt 13,13
5230 .asc "aufloesung waager.: 320[157][157][157]":brk
5232 text8 .byt 13
5234 .asc "aufloesung senkr.: 200[157][157][157]":brk
5240 text9 .byt 13,13
5242 .asc "bildgroesse waager.: 320[157][157][157]":brk
5244 text10 .byt 13
5246 .asc "bildgroesse senkr.: 200[157][157][157]":brk