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:JSR MEMFAC:LDA #SR:JSR MEMMULT 2026 LDX #SR2:JSR FACMEM 2028 LDA #SI:JSR MEMFAC:LDA #SI:JSR MEMMULT 2030 LDA #SR2:JSR MEMMIN:LDA #CR:JSR MEMPLUS 2032 LDX #SR2:JSR FACMEM 2034 ; SI = SR*SI*2 + CI 2036 LDA #SR:JSR MEMFAC:LDA #SI:JSR MEMMULT 2038 INC EXP:LDA #CI:JSR MEMPLUS 2040 LDX #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:JSR MEMFAC:LDA #SR:JSR MEMMULT 2048 LDX #AW:JSR FACMEM 2050 LDA #SI:JSR MEMFAC:LDA #SI:JSR MEMMULT 2052 LDA #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:JSR MEMFAC:LDA #CI:JSR MEMMIN 2078 LDA #MY:JSR MEMMULT 2080 JSR INTEGER:TYA:PHA 2090 ; X = (CR - LG) * MX 2092 LDA #LG:JSR MEMFAC:LDA #CR:JSR MEMMIN 2094 LDA #MX:JSR MEMMULT:JSR INTEGER:PLA:TAX 2096 JSR PLOT 2098 ; SCHLEIFEN BEENDEN ************** 2100 ; CI = CI + VY 2102 DIVERGENT LDA #CI:JSR MEMFAC:LDA #VY:JSR MEMPLUS 2104 LDX #CI:JSR FACMEM 2106 ; FALLS CI => UG DANN FERTIG 2108 LDA #CI:JSR MEMFAC:LDA #UG:JSR VERGLEICH 2110 CMP #2:BCC OK1:JMP AP4 2112 ; CR = CR + VX 2114 OK1 LDA #CR:JSR MEMFAC:LDA #VX:JSR MEMPLUS 2116 LDX #CR:JSR FACMEM 2118 ; FALLS CR => RG DANN FERTIG 2120 LDA #CR:JSR MEMFAC:LDA #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:JSR STROUT 5004 JSR ENTER:LDX #LG:JSR FACMEM 5006 LDA #TEXT2:JSR STROUT 5008 JSR ENTER:LDX #RG:JSR FACMEM 5010 LDA #TEXT3:JSR STROUT 5012 JSR ENTER:LDX #OG:JSR FACMEM 5014 LDA #TEXT4:JSR STROUT 5016 JSR ENTER:LDX #UG:JSR FACMEM 5017 LDA #TEXT6:JSR STROUT 5018 JSR ENTER:JSR INTEGER:STY IZ 5019 LDA #TEXT9:JSR STROUT 5020 JSR ENTER:LDX #BX:JSR FACMEM 5021 LDA #TEXT10:JSR STROUT 5022 JSR ENTER:LDX #BY:JSR FACMEM 5026 LDA #TEXT7:JSR STROUT 5027 JSR ENTER:LDX #RX:JSR FACMEM 5028 LDA #TEXT8:JSR STROUT 5029 JSR ENTER:LDX #RY:JSR FACMEM 5030 ; BERECHNUNG DER MULT.KONSTANTEN * 5032 ; MX = BX / (RG-LG) 5034 LDA #LG:JSR MEMFAC:LDA #RG:JSR MEMMIN 5036 LDA #BX:JSR MEMDIV 5038 LDX #MX:JSR FACMEM 5040 ; MY = BY / (UG-OG) 5042 LDA #OG:JSR MEMFAC:LDA #UG:JSR MEMMIN 5044 LDA #BY:JSR MEMDIV 5046 LDX #MY:JSR FACMEM 5048 ; BERECHNUNG DER SCHRITTWEITE **** 5050 ; VX = (RG-LG)/RX 5052 LDA #LG:JSR MEMFAC:LDA #RG:JSR MEMMIN 5054 LDX #VX:JSR FACMEM 5056 LDA #RX:JSR MEMFAC:LDA #VX:JSR MEMDIV 5058 LDX #VX:JSR FACMEM 5060 ; VY = (UG-OG)/RY 5062 LDA #OG:JSR MEMFAC:LDA #UG:JSR MEMMIN 5064 LDX #VY:JSR FACMEM 5066 LDA #RY:JSR MEMFAC:LDA #VY:JSR MEMDIV 5068 LDX #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 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