| CPC Rulez https://cpcrulez.fr/forum/ |
|
| Les fractales de mandelbrot https://cpcrulez.fr/forum/viewtopic.php?f=4&t=4627 |
Page 1 sur 1 |
| Auteur : | Demoniak [ 13 Sep 2011, 14:57 ] |
| Sujet du message : | Les fractales de mandelbrot |
Voici un source assembleur utilisant des entiers. Pas très optimisé mais quand même plus rapide que la version avec des variables en virgule flottante, il utilise le firmware pour tracer les points. Code : ORG #A000
XOR A CALL #BC0E maxy: LD HL,12000 ; borne maxy pour le tracé miny: LD DE,-12000 ; borne miny pour le tracé LD (deply+1),DE AND A SBC HL,DE LD DE,200 CALL Div LD (haut+1),HL ; haut = ( maxy - miny ) / 200 maxx: LD HL,9000 ; borne maxx pour le tracé minx: LD DE,-14000 ; borne minx pour le tracé AND A SBC HL,DE LD DE,160 CALL Div LD (larg+1),HL ; larg = ( maxx - minx ) / 160 LD HL,0 LD (y+1),HL BclY: LD A,(y+1) CP 200 ; 200 pixels en hauteur (*2) RET NC INC A LD (y+1),A LD HL,(minx+1) LD (deplx+1),HL ; deplx = minx LD HL,0 LD (x+1),HL ; x = 0 LD HL,(deply+1) haut: LD DE,0 ADD HL,DE LD (deply+1),HL ; haut = haut + deply BclX: LD A,(x+1) CP 160 ; 160 pixels en largeur (*4) JR NC,BclY INC A LD (x+1),A XOR A LD (pen+1),A LD HL,(deply+1) LD (iz+1),HL ; iz = deply LD HL,(deplx+1) LD (rz+1),HL ; rz = deplx larg: LD DE,0 ADD HL,DE LD (deplx+1),HL ; deplx = dexpl + larg BclWhile: LD HL,(iz+1) LD DE,-14000 LD A,D SUB H JP P,pen ; break si iz <= -14000 LD A,(pen+1) CP 15 JR NC,pen ; break si pen >= 15 INC A LD (pen+1),A ; pen = pen + 1 iz: LD HL,0 LD A,H RLCA ADD HL,HL SBC A,A ADD HL,HL RLA LD L,H LD H,A LD (i2+1),HL ; i = iz >> 6 rz: LD HL,0 LD A,H RLCA ADD HL,HL SBC A,A ADD HL,HL RLA LD C,H LD B,A PUSH BC ; r = rz >> 6 LD D,B LD E,C CALL Mul PUSH HL ; sauvegarde r * r i2: LD BC,0 LD D,B LD E,C CALL Mul ; hl = i * i POP DE ; récup r * r EX DE,HL SBC HL,DE SRA H RR L deplx: LD DE,0 ADD HL,DE LD (rz+1),HL ; rz = ( ( ( r * r ) - ( i * i ) ) >> 1 ) + deplx POP BC ; récup r LD DE,(i2+1) CALL Mul deply: LD DE,0 ADD HL,DE LD (iz+1),HL ; iz = ( i * r ) + deply JR BclWhile pen: LD A,0 CALL #BBDE ; Set pen x: LD HL,0 ADD HL,HL ADD HL,HL EX DE,HL y: LD HL,0 ADD HL,HL CALL #BBEA ; Plot x,y JP BclX ; ; Division 16 bits / 16 bits : HL = HL / DE ; Div: LD A,H LD C,L LD HL,0 LD B,16 Div1: RL C RLA ADC HL,HL SBC HL,DE JR NC,Div2 ADD HL,DE Div2: CCF DJNZ Div1 EX DE,HL RL C RLA LD H,A LD L,C RET ; ; Multiplication 16 bits * 16 bits : HL = BC * DE ; Mul: LD HL,0 Mul1: LD A,C RRCA JR NC,Mul2 ADD HL,DE Mul2: XOR A LD A,B RRA LD B,A LD A,C RRA LD C,A OR B RET Z XOR A LD A,E RLA LD E,A LD A,D RLA LD D,A OR E RET Z JR Mul1 |
|
| Page 1 sur 1 | Le fuseau horaire est UTC+1 heure |
| Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |
|