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