Home » Archimedes archive » Micro User » MU 1992-05.adf » PD » Fractal/!Fractal/Asm/SampManJul
Fractal/!Fractal/Asm/SampManJul
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
Tape/disk: | Home » Archimedes archive » Micro User » MU 1992-05.adf » PD |
Filename: | Fractal/!Fractal/Asm/SampManJul |
Read OK: | ✔ |
File size: | 3396 bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10REM > <Frac$Dir>.Asm.SampManJul 20REM Sample Mandelbrot & Julia Set plotter 30LIBRARY "<Frac$Dir>.Asm.Fraclib":PROCfracvars 40LIBRARY "<Frac$Dir>.Asm.FPlib":PROCfpinit 50REM === Function specific code follows 60RES=27:SCALE=1<<RES 70mandel=0:mvarstart=0:mvarend=0:REM initialise to a dummy value 80julia=0:jvarstart=0:jvarend=0:REM initialise to a dummy value 90REM === End of function specific code 100DIM code% 10000 110FOR asm=4 TO 7 STEP 3 120P%=0:O%=code% 130[OPT asm 140; Following is the list of fractal functions in this module 150FNfrachdr ; Identify ourselves as a fractal module 160; 170; One or more function definition pointers follow 180DCD mandel_func 190DCD julia_func 200; 210DCD -1 ; End of functions 220;-------------------------------------------------------------- 230; Now we define MANDEL'S characteristics 240; 250.mandel_func FNfracfunc("Samp Mandel",mandel,fZoom+fheight+fxy+femenu,0,5,mvarend-mvarstart) 260; 270; Mandel's Variables after here 280.mvarstart 290FNafg2var(AFG_dbl,0,8):.mx0 FNfp("DFD -2.28") 300FNafg2var(AFG_dbl,0,8):.my0 FNfp("DFD -1.35") 310FNafg2var(AFG_dbl,0,8):.mw FNfp("DFD 3.6") 320FNafg2var(AFG_dbl,0,8):.mh FNfp("DFD 2.88") 330FNafg2var(AFG_int,0,4):.miter DCD 128 340.mvarend ; End of variables 350; 360; Variable names after here; 1 for each variable above 370FNvarname(" x0") 380FNvarname(" y0") 390FNvarname(" width") 400FNvarname(" height") 410FNvarname(" Max. Iter") 420;------------------------------------- 430; The entry point to Mandel 440.mandel 450FNfenter ; Initialise 460; R0=Fractal Event, R1=Address of Data 470MOV R9,#0 480STR R9,[R1,#fevent_rc] ; clear return code 490CMP R0,#fplotinit 500BEQ mplotinit 510CMP R0,#fdatainit 520BEQ mdatainit 530CMP R0,#fmenuinit 540BEQ mmenuinit 550CMP R0,#fmenuclick 560BEQ mmenuclick 570CMP R0,#fxypos 580BEQ mxypos 590CMP R0,#fdatachk 600BEQ mdatachk 610; Unsupported event - just return 620FNfexit 630; 640; Init Mandel data 650.mdatainit 660FNfp("LDFD F0,imx") 670FNfp("STFD F0,mx0") 680FNfp("LDFD F0,imy") 690FNfp("STFD F0,my0") 700FNfp("LDFD F0,imw") 710FNfp("STFD F0,mw ") 720FNfp("LDFD F0,imh") 730FNfp("STFD F0,mh ") 740LDR R0,imiter 750STR R0,miter 760FNfexit 770.imx FNfp("DFD -2.28") ; Initial values 780.imy FNfp("DFD -1.35") 790.imw FNfp("DFD 3.6") 800.imh FNfp("DFD 2.88") 810.imiter DCD 128 820; 830; Verify data input or zoom range 840.mdatachk 850FNfp("LDFD F0,mx0") 860FNfp("CNFD F0,#10") ; <-10? 870BLT baddata ; x0 too small 880; 890FNfp("LDFD F2,mw ") ; width 900FNfp("ADFD F0,F0,F2") ; x+w 910FNfp("CMFD F0,#10") ; >10? 920BGT baddata ; x too large 930; 940FNfp("LDFD F0,my0") 950FNfp("CNFD F0,#10") ; <-10? 960BLT baddata ; y0 too small 970; 980FNfp("LDFD F3,mh ") ; height 990FNfp("ADFD F0,F0,F2") ; y+w 1000FNfp("CMFD F0,#10") ; >10? 1010BGT baddata ; y too large 1020; 1030; For width & height, check not smaller than integer fp range. 1040; For Mandelbrots, the smallest delta is approx 2e-8 which is 1050; around 1e-5 as a width value (we don't know image width here) 1060FNfp("LDFD F1,minint") ; smallest value for fp integer 1070FNfp("CMFD F2,F1") ; within accuracy range? 1080BLT baddata ; w too small 1090FNfp("CMFD F3,F1") ; within accuracy range? 1100BLT baddata ; h too small 1110; 1120; Verify maxiter not too small 1130LDR R0,miter 1140CMP R0,#10 ; too small? 1150MOVLT R0,#10 1160STRLT R0,miter ; yes - set to 10 1170; 1180FNfexit 1190; 1200; Bad data - set return code & point to error text 1210.baddata 1220ADR R0,badmsg 1230STR R0,[R1,#errmsg] ; set error msg 1240MOV R0,#1 ; Bad data 1250STR R0,[R1,#fevent_rc] 1260FNfexit 1270; 1280.minint FNfp("DFD 1e-5") 1290.badmsg EQUS "x,y must be within +/- 10 including width/height"+CHR$0 1300;------------------------------------- 1310; Initialise ready for a plot 1320.mplotinit 1330LDR R0,[R1,#plot_flags] 1340ORR R0,R0,#plot_int27 ; int27 maths 1350STR R0,[R1,#plot_flags] ; tell Fractal 1360; if deltay > 2.5e-4 use quick routine 1370LDR R2,[R1,#plot_im_h] ; Height in pixels 1380FNfp("FLTD F2,R2") 1390FNfp("LDFD F0,mh") ; Mandel height 1400FNfp("DVFD F1,F0,F2") ; delta y 1410FNfp("LDFD F3,mquick") 1420FNfp("CMFD F1,F3") ; large delta y? 1430ADRGE R0,mandel16 ; yes - use quick routine 1440ADRLT R0,mandel32 ; no - normal speed 1450STR R0,mandel_func+fdefn_xyrtn ; Our plot routine 1460FNfexit 1470.mquick FNfp("DFD 2.5e-4") 1480;---------------------------------- 1490] 1500REM mandel registers + 11-14 for work 1510REM x & y set on entry 1520REM m & n are free for use in calculations 1530x=0:y=1:uu=2:vv=3:u=4:v=5:r=6:depth=7:max=8:m=9:n=10 1540[OPT asm 1550; 32 bit routine 1560.mandel32 1570LDR max,miter ; Max.iter 1580MOV u,#0 1590MOV v,#0 1600.m32start ; Julia entry point 1610STMFD R13!,{R14} ; Return address 1620STR R13,saver13 ; allow use of all regs 1630MOV depth,#0 1640.mloop ; do for each iteration 1650FNsqr32_27(uu,u,11,12) 1660FNsqr32_27(vv,v,11,12) 1670TST uu,#&E0000000 ; >= 4.0? 1680TSTEQ vv,#&E0000000 1690BNE mexit 1700ADD r,uu,vv 1710TST r,#&E0000000 1720BNE mexit 1730; Perform mandelbrot calculation 1740FNm32_27(r,u,v,11) 1750RSB v,y,r,LSL#1 1760SUB u,uu,vv 1770ADD u,u,x 1780ADD depth,depth,#1 1790CMP depth,max 1800BNE mloop 1810MOV depth,#0 ; No colour if at max 1820.mexit 1830MOV R0,depth ; Return colour 1840LDR R13,saver13 ; restore stack 1850LDMFD R13!,{PC}^ ; exit 1860.saver13 DCD 0 1870; 1880; 16 bit precision version 1890; Nb. R13 & R14 NOT available as coded 1900.mandel16 1910LDR max,miter 1920MOV u,#0 1930MOV v,#0 1940.m16start ; Julia entry point 1950MOV depth,#0 1960.fmloop 1970FNsqr16_27(uu,u,11) 1980BCS fmexit 1990FNsqr16_27(vv,v,11) 2000BCS fmexit 2010TST uu,#&E0000000 ; >= +/-4.0 ? 2020TSTEQ vv,#&E0000000 2030BNE fmexit 2040ADD r,uu,vv 2050TST r,#&E0000000 2060BNE fmexit 2070FNm16_27(r,u,v,11) 2080RSB v,y,r,LSL#1 2090SUB u,uu,vv 2100ADD u,u,x 2110ADD depth,depth,#1 2120CMP depth,max 2130BNE fmloop 2140MOV depth,#0 2150.fmexit 2160MOV R0,depth ; Return colour 2170MOVS PC,R14 2180;----------------------------------- 2190; Mandel Menu routines 2200.mmenuinit 2210ADR R0,mmenu ; Pass back address of our menu 2220STR R0,[R1,#menuinit_fmenu] 2230FNfexit 2240.mmenu 2250FNfmenu_hdr("Samp Mandel",12) 2260FNfmenu_item("Samp Julia",-1,LAST) ; For switching to Julia set 2270; 2280; Note - in the following it is not necessary to check the menu item 2290; number since there is only one choice. The code is here to show the 2300; type of code to use. 2310; User has clicked on our menu 2320.mmenuclick 2330LDR R2,[R1,#menuclick_menu] ; Get pointer to menu array 2340LDR R0,[R2,#4] ; Get item number from sub_menu 2350CMP R0,#0 ; Julia select? (1st item) 2360BNE mmenuexit ; no get out 2370BL fxystart ; Yes - start x/y event 2380.mmenuexit FNfexit 2390; 2400; x/y click event - we use the x & y value returned as the Julia 2410; real and imaginary numbers 2420.mxypos 2430FNfp("LDFD F0,[R1,#xy_x]") ; Mandel x value 2440FNfp("STFD F0,jr") ; becomes Julia real 2450FNfp("LDFD F0,[R1,#xy_y]") ; Mandel y value 2460FNfp("STFD F0,jc") ; becomes Julia Imaginary 2470ADR R0,julia_func ; Point to Julia's menu name 2480BL fnewfunc ; and register as the current function 2490MOV R0,#1 2500STR R0,[R1,#xypos_rc] ; Force a replot - ie of Julia 2510FNfexit 2520;-------------------------------------------------------------- 2530; Now we define Julia'S characteristics 2540; 2550.julia_func FNfracfunc("Samp Julia",julia,fZoom+fheight+fxy+femenu,0,7,jvarend-jvarstart) 2560; 2570; Julia's Variables after here 2580.jvarstart 2590FNafg2var(AFG_dbl,0,8):.jx0 FNfp("DFD -1.5") 2600FNafg2var(AFG_dbl,0,8):.jy0 FNfp("DFD -1.2") 2610FNafg2var(AFG_dbl,0,8):.jw FNfp("DFD 3.0") 2620FNafg2var(AFG_dbl,0,8):.jh FNfp("DFD 2.4") 2630FNafg2var(AFG_int,0,4):.jiter DCD 128 2640FNafg2var(AFG_dbl,0,8):.jr FNfp("DFD -0.745428") 2650FNafg2var(AFG_dbl,0,8):.jc FNfp("DFD 0.113009") 2660.jvarend ; End of variables 2670; 2680; Variable names after here; 1 for each variable above 2690FNvarname(" x0") 2700FNvarname(" y0") 2710FNvarname(" width") 2720FNvarname(" height") 2730FNvarname(" Max. Iter") 2740FNvarname(" c Real") 2750FNvarname("c Imaginary") 2760;------------------------------------- 2770; The entry point to Julia 2780.julia 2790FNfenter ; Initialise 2800; R0=Fractal Event, R1=Address of Data 2810MOV R9,#0 2820STR R9,[R1,#fevent_rc] ; clear return code 2830CMP R0,#fplotinit 2840BEQ jplotinit 2850CMP R0,#fdatainit 2860BEQ jdatainit 2870CMP R0,#fmenuinit 2880BEQ jmenuinit 2890CMP R0,#fmenuclick 2900BEQ jmenuclick 2910CMP R0,#fdatachk 2920BEQ jdatachk 2930; Unsupported event - just return 2940FNfexit 2950; 2960; Init Julia data 2970.jdatainit 2980FNfp("LDFD F0,ijx") 2990FNfp("STFD F0,jx0") 3000FNfp("LDFD F0,ijy") 3010FNfp("STFD F0,jy0") 3020FNfp("LDFD F0,ijw") 3030FNfp("STFD F0,jw ") 3040FNfp("LDFD F0,ijh") 3050FNfp("STFD F0,jh ") 3060LDR R0,ijiter 3070STR R0,jiter 3080FNfp("LDFD F0,ijr") 3090FNfp("STFD F0,jr ") 3100FNfp("LDFD F0,ijc") 3110FNfp("STFD F0,jc ") 3120FNfexit 3130 3140.ijx FNfp("DFD -1.5") ; Initial values 3150.ijy FNfp("DFD -1.2") 3160.ijw FNfp("DFD 3.0") 3170.ijh FNfp("DFD 2.4") 3180.ijiter DCD 128 3190.ijr FNfp("DFD -0.745428") 3200.ijc FNfp("DFD 0.113009") 3210; 3220; Verify data input or zoom range 3230.jdatachk 3240FNfp("LDFD F0,jx0") 3250FNfp("CNFD F0,#10") ; <-10? 3260BLT baddata ; x0 too small 3270; 3280FNfp("LDFD F2,jw ") ; width 3290FNfp("ADFD F0,F0,F2") ; x+w 3300FNfp("CMFD F0,#10") ; >10? 3310BGT baddata ; x too large 3320; 3330FNfp("LDFD F0,jy0") 3340FNfp("CNFD F0,#10") ; <-10? 3350BLT baddata ; y0 too small 3360; 3370FNfp("LDFD F3,jh ") ; height 3380FNfp("ADFD F0,F0,F2") ; y+w 3390FNfp("CMFD F0,#10") ; >10? 3400BGT baddata ; y too large 3410; 3420; For width & height, check not smaller than integer fp range. 3430; For Julia's, the smallest delta is approx 2e-8 which is 3440; around 1e-5 as a width value (we don't know image width here) 3450FNfp("LDFD F1,jminint") ; smallest value for fp integer 3460FNfp("CMFD F2,F1") ; within accuracy range? 3470BLT baddata ; w too small 3480FNfp("CMFD F3,F1") ; within accuracy range? 3490BLT baddata ; h too small 3500; 3510; Verify maxiter not too small 3520LDR R0,jiter 3530CMP R0,#10 ; too small? 3540MOVLT R0,#10 3550STRLT R0,jiter ; yes - set to 10 3560; 3570FNfexit 3580; 3590.jminint FNfp("DFD 1e-5") 3600;-------------------------- 3610; Julia Menu routines 3620.jmenuinit 3630ADR R0,jmenu ; Pass back address of our menu 3640STR R0,[R1,#menuinit_fmenu] 3650FNfexit 3660.jmenu FNfmenu_hdr("Samp Julia",12) 3670FNfmenu_item("Samp Mandel",-1,LAST) ; For switching to mandelbrot 3680; 3690; User has clicked on our menu 3700.jmenuclick 3710LDR R2,[R1,#menuclick_menu] ; Get pointer to menu array 3720LDR R0,[R2,#4] ; Get item number from sub_menu 3730CMP R0,#0 ; Mandel select? (1st item) 3740BNE jmenuexit ; no - get out 3750ADR R0,jmfptr ; calc ptr to Mandel's menu name 3760LDR R3,jmfptr ; 3770SUB R0,R0,R3 ; Address of jmfptr-offset to mandel_func 3780BL fnewfunc ; and register as the current function 3790MOV R0,#1 3800STR R0,[R1,#menuclick_rc] ; Yes - force a replot of mandelbrot 3810.jmenuexit FNfexit 3820.jmfptr DCD P%-mandel_func ; Offset to mandel_func name 3830;------------------------------------- 3840; Initialise ready for a plot 3850.jplotinit 3860LDR R0,[R1,#plot_flags] 3870ORR R0,R0,#plot_int27 ; int27 maths 3880STR R0,[R1,#plot_flags] ; tell Fractal 3890; if deltay > 4e-3 use quick routine 3900LDR R2,[R1,#plot_im_h] ; Height in pixels 3910FNfp("FLTD F2,R2") 3920FNfp("LDFD F0,jh") ; julia height 3930FNfp("DVFD F1,F0,F2") ; delta y 3940FNfp("LDFD F3,jquick") 3950FNfp("CMFD F1,F3") ; large delta y? 3960ADRGE R0,julia16 ; yes - use quick routine 3970ADRLT R0,julia32 ; no - normal speed 3980STR R0,julia_func+fdefn_xyrtn ; Our plot routine 3990; 4000; Get cReal and cImaginary to integer 4010MOV R11,#SCALE ; Integer fp multiplier 4020FNfp ("FLTD F3,R11") ; To fp 4030FNfp("LDFD F0,jr") ; c Real 4040FNfp("MUFD F2,F0,F3") ; convert to integer fp value 4050FNfp("FIXD R2,F2") 4060STR R2,jintr 4070FNfp("LDFD F0,jc") ; c Imaginary 4080FNfp("MUFD F2,F0,F3") ; convert to integer fp value 4090FNfp("FIXD R2,F2") 4100STR R2,jintc 4110FNfexit 4120; 4130.jquick FNfp("DFD 4e-3") 4140.jintr DCD 0 ; cReal in integer 4150.jintc DCD 0 ; cImaginary in integer 4160; 4170; Julia plot routine 4180] 4190REM Julia's registers - same as Mandelbrot's 4200x=0:y=1:uu=2:vv=3:u=4:v=5:r=6:depth=7:max=8:m=9:n=10 4210[OPT asm 4220; 32 bit version 4230.julia32 4240; Resident constants 4250MOV u,x 4260MOV v,y 4270LDR x,jintr ; cReal 4280LDR y,jintc ; cImaginary 4290LDR max,jiter ; max. iter 4300B m32start ; enter main mandelbrot plot routine 4310; 4320; 16 bit version 4330.julia16 4340; Resident constants 4350MOV u,x 4360MOV v,y 4370LDR x,jintr ; cReal 4380LDR y,jintc ; cImaginary 4390LDR max,jiter ; max. iter 4400B m16start ; enter main mandelbrot plot routine 4410;-------------------------- 4420FNfinterface ; Necessary C Interface code 4430]:NEXT 4440SYS "OS_File",10,"<Frac$Dir>.SampManJul",&FFA,,code%,O% 4450END
!� > <Frac$Dir>.Asm.SampManJul +� Sample Mandelbrot & Julia Set plotter )ț "<Frac$Dir>.Asm.Fraclib":�fracvars (%ț "<Frac$Dir>.Asm.FPlib":�fpinit 2(� === Function specific code follows <RES=27:SCALE=1<<RES F@mandel=0:mvarstart=0:mvarend=0:� initialise to a dummy value P?julia=0:jvarstart=0:jvarend=0:� initialise to a dummy value Z'� === End of function specific code d� code% 10000 n� asm=4 � 7 � 3 xP%=0:O%=code% �[OPT asm �?; Following is the list of fractal functions in this module �5�frachdr ; Identify ourselves as a fractal module �; �5; One or more function definition pointers follow �DCD mandel_func �DCD julia_func �; �DCD -1 ; End of functions �C;-------------------------------------------------------------- �,; Now we define MANDEL'S characteristics �; �_.mandel_func �fracfunc("Samp Mandel",mandel,fZoom+fheight+fxy+femenu,0,5,mvarend-mvarstart) ; #; Mandel's Variables after here .mvarstart "/�afg2var(AFG_dbl,0,8):.mx0 �fp("DFD -2.28") ,/�afg2var(AFG_dbl,0,8):.my0 �fp("DFD -1.35") 6,�afg2var(AFG_dbl,0,8):.mw �fp("DFD 3.6") @-�afg2var(AFG_dbl,0,8):.mh �fp("DFD 2.88") J(�afg2var(AFG_int,0,4):.miter DCD 128 T.mvarend ; End of variables ^; h:; Variable names after here; 1 for each variable above r�varname(" x0") |�varname(" y0") ��varname(" width") ��varname(" height") ��varname(" Max. Iter") �*;------------------------------------- �; The entry point to Mandel �.mandel ��fenter ; Initialise �*; R0=Fractal Event, R1=Address of Data � MOV R9,#0 �.STR R9,[R1,#fevent_rc] ; clear return code �CMP R0,#fplotinit �BEQ mplotinit �CMP R0,#fdatainit BEQ mdatainit CMP R0,#fmenuinit BEQ mmenuinit &CMP R0,#fmenuclick 0BEQ mmenuclick :CMP R0,#fxypos DBEQ mxypos NCMP R0,#fdatachk XBEQ mdatachk b%; Unsupported event - just return l �fexit v; �; Init Mandel data �.mdatainit ��fp("LDFD F0,imx") ��fp("STFD F0,mx0") ��fp("LDFD F0,imy") ��fp("STFD F0,my0") ��fp("LDFD F0,imw") ��fp("STFD F0,mw ") ��fp("LDFD F0,imh") ��fp("STFD F0,mh ") �LDR R0,imiter �STR R0,miter � �fexit *.imx �fp("DFD -2.28") ; Initial values .imy �fp("DFD -1.35") .imw �fp("DFD 3.6") .imh �fp("DFD 2.88") *.imiter DCD 128 4; >%; Verify data input or zoom range H .mdatachk R�fp("LDFD F0,mx0") \"�fp("CNFD F0,#10") ; <-10? f*BLT baddata ; x0 too small p; z"�fp("LDFD F2,mw ") ; width � �fp("ADFD F0,F0,F2") ; x+w �!�fp("CMFD F0,#10") ; >10? �)BGT baddata ; x too large �; ��fp("LDFD F0,my0") �"�fp("CNFD F0,#10") ; <-10? �*BLT baddata ; y0 too small �; �#�fp("LDFD F3,mh ") ; height � �fp("ADFD F0,F0,F2") ; y+w �!�fp("CMFD F0,#10") ; >10? �)BGT baddata ; y too large �; B; For width & height, check not smaller than integer fp range. A; For Mandelbrots, the smallest delta is approx 2e-8 which is C; around 1e-5 as a width value (we don't know image width here) $9�fp("LDFD F1,minint") ; smallest value for fp integer .2�fp("CMFD F2,F1") ; within accuracy range? 8(BLT baddata ; w too small B2�fp("CMFD F3,F1") ; within accuracy range? L(BLT baddata ; h too small V; `"; Verify maxiter not too small jLDR R0,miter t'CMP R0,#10 ; too small? ~MOVLT R0,#10 �,STRLT R0,miter ; yes - set to 10 �; � �fexit �; �6; Bad data - set return code & point to error text �.baddata �ADR R0,badmsg �+STR R0,[R1,#errmsg] ; set error msg �&MOV R0,#1 ; Bad data �STR R0,[R1,#fevent_rc] � �fexit �; .minint �fp("DFD 1e-5") F.badmsg EQUS "x,y must be within +/- 10 including width/height"+�0 *;------------------------------------- !; Initialise ready for a plot (.mplotinit 2LDR R0,[R1,#plot_flags] <(�R R0,R0,#plot_int27 ; int27 maths F*STR R0,[R1,#plot_flags] ; tell Fractal P*; if deltay > 2.5e-4 use quick routine Z-LDR R2,[R1,#plot_im_h] ; Height in pixels d�fp("FLTD F2,R2") n%�fp("LDFD F0,mh") ; Mandel height x"�fp("DVFD F1,F0,F2") ; delta y ��fp("LDFD F3,mquick") �+�fp("CMFD F1,F3") ; large delta y? �5ADRGE R0,mandel16 ; yes - use quick routine �/ADRLT R0,mandel32 ; no - normal speed �6STR R0,mandel_func+fdefn_xyrtn ; Our plot routine � �fexit �.mquick �fp("DFD 2.5e-4") �';---------------------------------- �] �'� mandel registers + 11-14 for work �� x & y set on entry �,� m & n are free for use in calculations �8x=0:y=1:uu=2:vv=3:u=4:v=5:r=6:depth=7:max=8:m=9:n=10 [OPT asm ; 32 bit routine .mandel32 "LDR max,miter ; Max.iter ,MOV u,#0 6MOV v,#0 @/.m32start ; Julia entry point J,STMFD R13!,{R14} ; Return address T3STR R13,saver13 ; allow use of all regs ^MOV depth,#0 h).mloop ; do for each iteration r�sqr32_27(uu,u,11,12) |�sqr32_27(vv,v,11,12) �&TST uu,#&E0000000 ; >= 4.0? �TSTEQ vv,#&E0000000 � BNE mexit �ADD r,uu,vv �TST r,#&E0000000 � BNE mexit �$; Perform mandelbrot calculation ��m32_27(r,u,v,11) �RSB v,y,r,LSL#1 �SUB u,uu,vv � ADD u,u,x �ADD depth,depth,#1 �CMP depth,max BNE mloop &MOV depth,#0 ; No colour if at max .mexit & MOV R0,depth ; Return colour 0+LDR R13,saver13 ; restore stack :"LDMFD R13!,{PC}^ ; exit D.saver13 DCD 0 N; X; 16 bit precision version b(; Nb. R13 & R14 � available as coded l .mandel16 vLDR max,miter �MOV u,#0 �MOV v,#0 �/.m16start ; Julia entry point �MOV depth,#0 �.fmloop ��sqr16_27(uu,u,11) �BCS fmexit ��sqr16_27(vv,v,11) �BCS fmexit �)TST uu,#&E0000000 ; >= +/-4.0 ? �TSTEQ vv,#&E0000000 �BNE fmexit �ADD r,uu,vv TST r,#&E0000000 BNE fmexit �m16_27(r,u,v,11) RSB v,y,r,LSL#1 *SUB u,uu,vv 4 ADD u,u,x >ADD depth,depth,#1 HCMP depth,max RBNE fmloop \MOV depth,#0 f.fmexit p MOV R0,depth ; Return colour zMOVS PC,R14 �(;----------------------------------- �; Mandel Menu routines �.mmenuinit �3ADR R0,mmenu ; Pass back address of our menu �STR R0,[R1,#menuinit_fmenu] � �fexit � .mmenu � �fmenu_hdr("Samp Mandel",12) �D�fmenu_item("Samp Julia",-1,LAST) ; For switching to Julia set �; �H; Note - in the following it is not necessary to check the menu item �I; number since there is only one choice. The code is here to show the �; type of code to use. "; User has clicked on our menu .mmenuclick ;LDR R2,[R1,#menuclick_menu] ; Get pointer to menu array $?LDR R0,[R2,#4] ; Get item number from sub_menu .:CMP R0,#0 ; Julia select? (1st item) 8,BNE mmenuexit ; no get out B7BL fxystart ; Yes - start x/y event L.mmenuexit �fexit V; `D; x/y click event - we use the x & y value returned as the Julia j ; real and imaginary numbers t.mxypos ~.�fp("LDFD F0,[R1,#xy_x]") ; Mandel x value �2�fp("STFD F0,jr") ; becomes Julia real �.�fp("LDFD F0,[R1,#xy_y]") ; Mandel y value �7�fp("STFD F0,jc") ; becomes Julia Imaginary �;ADR R0,julia_func ; Point to Julia's menu name �EBL fnewfunc ; and register as the current function � MOV R0,#1 �=STR R0,[R1,#xypos_rc] ; Force a replot - ie of Julia � �fexit �C;-------------------------------------------------------------- �+; Now we define Julia'S characteristics �; �\.julia_func �fracfunc("Samp Julia",julia,fZoom+fheight+fxy+femenu,0,7,jvarend-jvarstart) ; "; Julia's Variables after here .jvarstart .�afg2var(AFG_dbl,0,8):.jx0 �fp("DFD -1.5") (.�afg2var(AFG_dbl,0,8):.jy0 �fp("DFD -1.2") 2,�afg2var(AFG_dbl,0,8):.jw �fp("DFD 3.0") <,�afg2var(AFG_dbl,0,8):.jh �fp("DFD 2.4") F(�afg2var(AFG_int,0,4):.jiter DCD 128 P2�afg2var(AFG_dbl,0,8):.jr �fp("DFD -0.745428") Z1�afg2var(AFG_dbl,0,8):.jc �fp("DFD 0.113009") d.jvarend ; End of variables n; x:; Variable names after here; 1 for each variable above ��varname(" x0") ��varname(" y0") ��varname(" width") ��varname(" height") ��varname(" Max. Iter") ��varname(" c Real") ��varname("c Imaginary") �*;------------------------------------- �; The entry point to Julia � .julia ��fenter ; Initialise �*; R0=Fractal Event, R1=Address of Data � MOV R9,#0 .STR R9,[R1,#fevent_rc] ; clear return code CMP R0,#fplotinit BEQ jplotinit "CMP R0,#fdatainit ,BEQ jdatainit 6CMP R0,#fmenuinit @BEQ jmenuinit JCMP R0,#fmenuclick TBEQ jmenuclick ^CMP R0,#fdatachk hBEQ jdatachk r%; Unsupported event - just return | �fexit �; �; Init Julia data �.jdatainit ��fp("LDFD F0,ijx") ��fp("STFD F0,jx0") ��fp("LDFD F0,ijy") ��fp("STFD F0,jy0") ��fp("LDFD F0,ijw") ��fp("STFD F0,jw ") ��fp("LDFD F0,ijh") ��fp("STFD F0,jh ") �LDR R0,ijiter �STR R0,jiter �fp("LDFD F0,ijr") �fp("STFD F0,jr ") �fp("LDFD F0,ijc") &�fp("STFD F0,jc ") 0 �fexit : D).ijx �fp("DFD -1.5") ; Initial values N.ijy �fp("DFD -1.2") X.ijw �fp("DFD 3.0") b.ijh �fp("DFD 2.4") l.ijiter DCD 128 v.ijr �fp("DFD -0.745428") �.ijc �fp("DFD 0.113009") �; �%; Verify data input or zoom range � .jdatachk ��fp("LDFD F0,jx0") �"�fp("CNFD F0,#10") ; <-10? �*BLT baddata ; x0 too small �; �"�fp("LDFD F2,jw ") ; width � �fp("ADFD F0,F0,F2") ; x+w �!�fp("CMFD F0,#10") ; >10? �)BGT baddata ; x too large �; �fp("LDFD F0,jy0") "�fp("CNFD F0,#10") ; <-10? *BLT baddata ; y0 too small ; *#�fp("LDFD F3,jh ") ; height 4 �fp("ADFD F0,F0,F2") ; y+w >!�fp("CMFD F0,#10") ; >10? H)BGT baddata ; y too large R; \B; For width & height, check not smaller than integer fp range. f=; For Julia's, the smallest delta is approx 2e-8 which is pC; around 1e-5 as a width value (we don't know image width here) z:�fp("LDFD F1,jminint") ; smallest value for fp integer �2�fp("CMFD F2,F1") ; within accuracy range? �(BLT baddata ; w too small �2�fp("CMFD F3,F1") ; within accuracy range? �(BLT baddata ; h too small �; �"; Verify maxiter not too small �LDR R0,jiter �'CMP R0,#10 ; too small? �MOVLT R0,#10 �,STRLT R0,jiter ; yes - set to 10 �; � �fexit �; .jminint �fp("DFD 1e-5") ;-------------------------- ; Julia Menu routines $.jmenuinit .3ADR R0,jmenu ; Pass back address of our menu 8STR R0,[R1,#menuinit_fmenu] B �fexit L&.jmenu �fmenu_hdr("Samp Julia",12) VF�fmenu_item("Samp Mandel",-1,LAST) ; For switching to mandelbrot `; j"; User has clicked on our menu t.jmenuclick ~;LDR R2,[R1,#menuclick_menu] ; Get pointer to menu array �?LDR R0,[R2,#4] ; Get item number from sub_menu �;CMP R0,#0 ; Mandel select? (1st item) �.BNE jmenuexit ; no - get out �@ADR R0,jmfptr ; calc ptr to Mandel's menu name �!LDR R3,jmfptr ; �ISUB R0,R0,R3 ; Address of jmfptr-offset to mandel_func �FBL fnewfunc ; and register as the current function � MOV R0,#1 �DSTR R0,[R1,#menuclick_rc] ; Yes - force a replot of mandelbrot �.jmenuexit �fexit �<.jmfptr DCD P%-mandel_func ; Offset to mandel_func name �*;------------------------------------- !; Initialise ready for a plot .jplotinit LDR R0,[R1,#plot_flags] (�R R0,R0,#plot_int27 ; int27 maths (*STR R0,[R1,#plot_flags] ; tell Fractal 2(; if deltay > 4e-3 use quick routine <-LDR R2,[R1,#plot_im_h] ; Height in pixels F�fp("FLTD F2,R2") P$�fp("LDFD F0,jh") ; julia height Z"�fp("DVFD F1,F0,F2") ; delta y d�fp("LDFD F3,jquick") n+�fp("CMFD F1,F3") ; large delta y? x5ADRGE R0,julia16 ; yes - use quick routine �/ADRLT R0,julia32 ; no - normal speed �5STR R0,julia_func+fdefn_xyrtn ; Our plot routine �; �); Get cReal and cImaginary to integer �*MOV R11,#SCALE ; Integer fp multiplier �!�fp ("FLTD F3,R11") ; To fp �"�fp("LDFD F0,jr") ; c Real �7�fp("MUFD F2,F0,F3") ; convert to integer fp value ��fp("FIXD R2,F2") �STR R2,jintr �'�fp("LDFD F0,jc") ; c Imaginary �7�fp("MUFD F2,F0,F3") ; convert to integer fp value ��fp("FIXD R2,F2") STR R2,jintc �fexit ; ".jquick �fp("DFD 4e-3") ,%.jintr DCD 0 ; cReal in integer 6*.jintc DCD 0 ; cImaginary in integer @; J; Julia plot routine T] ^.� Julia's registers - same as Mandelbrot's h8x=0:y=1:uu=2:vv=3:u=4:v=5:r=6:depth=7:max=8:m=9:n=10 r[OPT asm |; 32 bit version �.julia32 �; Resident constants �MOV u,x �MOV v,y �#LDR x,jintr ; cReal �(LDR y,jintc ; cImaginary �'LDR max,jiter ; max. iter �@B m32start ; enter main mandelbrot plot routine �; �; 16 bit version �.julia16 �; Resident constants �MOV u,x MOV v,y #LDR x,jintr ; cReal (LDR y,jintc ; cImaginary &'LDR max,jiter ; max. iter 0@B m16start ; enter main mandelbrot plot routine :;-------------------------- D,�finterface ; Necessary C Interface code N]:� X:ș "OS_File",10,"<Frac$Dir>.SampManJul",&FFA,,code%,O% b� �
00000000 0d 00 0a 21 f4 20 3e 20 3c 46 72 61 63 24 44 69 |...!. > <Frac$Di| 00000010 72 3e 2e 41 73 6d 2e 53 61 6d 70 4d 61 6e 4a 75 |r>.Asm.SampManJu| 00000020 6c 0d 00 14 2b f4 20 53 61 6d 70 6c 65 20 4d 61 |l...+. Sample Ma| 00000030 6e 64 65 6c 62 72 6f 74 20 26 20 4a 75 6c 69 61 |ndelbrot & Julia| 00000040 20 53 65 74 20 70 6c 6f 74 74 65 72 0d 00 1e 29 | Set plotter...)| 00000050 c8 9b 20 22 3c 46 72 61 63 24 44 69 72 3e 2e 41 |.. "<Frac$Dir>.A| 00000060 73 6d 2e 46 72 61 63 6c 69 62 22 3a f2 66 72 61 |sm.Fraclib":.fra| 00000070 63 76 61 72 73 0d 00 28 25 c8 9b 20 22 3c 46 72 |cvars..(%.. "<Fr| 00000080 61 63 24 44 69 72 3e 2e 41 73 6d 2e 46 50 6c 69 |ac$Dir>.Asm.FPli| 00000090 62 22 3a f2 66 70 69 6e 69 74 0d 00 32 28 f4 20 |b":.fpinit..2(. | 000000a0 3d 3d 3d 20 46 75 6e 63 74 69 6f 6e 20 73 70 65 |=== Function spe| 000000b0 63 69 66 69 63 20 63 6f 64 65 20 66 6f 6c 6c 6f |cific code follo| 000000c0 77 73 0d 00 3c 17 52 45 53 3d 32 37 3a 53 43 41 |ws..<.RES=27:SCA| 000000d0 4c 45 3d 31 3c 3c 52 45 53 0d 00 46 40 6d 61 6e |LE=1<<RES..F@man| 000000e0 64 65 6c 3d 30 3a 6d 76 61 72 73 74 61 72 74 3d |del=0:mvarstart=| 000000f0 30 3a 6d 76 61 72 65 6e 64 3d 30 3a f4 20 69 6e |0:mvarend=0:. in| 00000100 69 74 69 61 6c 69 73 65 20 74 6f 20 61 20 64 75 |itialise to a du| 00000110 6d 6d 79 20 76 61 6c 75 65 0d 00 50 3f 6a 75 6c |mmy value..P?jul| 00000120 69 61 3d 30 3a 6a 76 61 72 73 74 61 72 74 3d 30 |ia=0:jvarstart=0| 00000130 3a 6a 76 61 72 65 6e 64 3d 30 3a f4 20 69 6e 69 |:jvarend=0:. ini| 00000140 74 69 61 6c 69 73 65 20 74 6f 20 61 20 64 75 6d |tialise to a dum| 00000150 6d 79 20 76 61 6c 75 65 0d 00 5a 27 f4 20 3d 3d |my value..Z'. ==| 00000160 3d 20 45 6e 64 20 6f 66 20 66 75 6e 63 74 69 6f |= End of functio| 00000170 6e 20 73 70 65 63 69 66 69 63 20 63 6f 64 65 0d |n specific code.| 00000180 00 64 11 de 20 63 6f 64 65 25 20 31 30 30 30 30 |.d.. code% 10000| 00000190 0d 00 6e 13 e3 20 61 73 6d 3d 34 20 b8 20 37 20 |..n.. asm=4 . 7 | 000001a0 88 20 33 0d 00 78 11 50 25 3d 30 3a 4f 25 3d 63 |. 3..x.P%=0:O%=c| 000001b0 6f 64 65 25 0d 00 82 0c 5b 4f 50 54 20 61 73 6d |ode%....[OPT asm| 000001c0 0d 00 8c 3f 3b 20 46 6f 6c 6c 6f 77 69 6e 67 20 |...?; Following | 000001d0 69 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 |is the list of f| 000001e0 72 61 63 74 61 6c 20 66 75 6e 63 74 69 6f 6e 73 |ractal functions| 000001f0 20 69 6e 20 74 68 69 73 20 6d 6f 64 75 6c 65 0d | in this module.| 00000200 00 96 35 a4 66 72 61 63 68 64 72 20 3b 20 49 64 |..5.frachdr ; Id| 00000210 65 6e 74 69 66 79 20 6f 75 72 73 65 6c 76 65 73 |entify ourselves| 00000220 20 61 73 20 61 20 66 72 61 63 74 61 6c 20 6d 6f | as a fractal mo| 00000230 64 75 6c 65 0d 00 a0 05 3b 0d 00 aa 35 3b 20 4f |dule....;...5; O| 00000240 6e 65 20 6f 72 20 6d 6f 72 65 20 66 75 6e 63 74 |ne or more funct| 00000250 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 70 |ion definition p| 00000260 6f 69 6e 74 65 72 73 20 66 6f 6c 6c 6f 77 0d 00 |ointers follow..| 00000270 b4 13 44 43 44 20 6d 61 6e 64 65 6c 5f 66 75 6e |..DCD mandel_fun| 00000280 63 0d 00 be 12 44 43 44 20 6a 75 6c 69 61 5f 66 |c....DCD julia_f| 00000290 75 6e 63 0d 00 c8 05 3b 0d 00 d2 1d 44 43 44 20 |unc....;....DCD | 000002a0 2d 31 20 3b 20 45 6e 64 20 6f 66 20 66 75 6e 63 |-1 ; End of func| 000002b0 74 69 6f 6e 73 0d 00 dc 43 3b 2d 2d 2d 2d 2d 2d |tions...C;------| 000002c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 000002f0 2d 2d 2d 2d 2d 2d 2d 2d 0d 00 e6 2c 3b 20 4e 6f |--------...,; No| 00000300 77 20 77 65 20 64 65 66 69 6e 65 20 4d 41 4e 44 |w we define MAND| 00000310 45 4c 27 53 20 63 68 61 72 61 63 74 65 72 69 73 |EL'S characteris| 00000320 74 69 63 73 0d 00 f0 05 3b 0d 00 fa 5f 2e 6d 61 |tics....;..._.ma| 00000330 6e 64 65 6c 5f 66 75 6e 63 20 a4 66 72 61 63 66 |ndel_func .fracf| 00000340 75 6e 63 28 22 53 61 6d 70 20 4d 61 6e 64 65 6c |unc("Samp Mandel| 00000350 22 2c 6d 61 6e 64 65 6c 2c 66 5a 6f 6f 6d 2b 66 |",mandel,fZoom+f| 00000360 68 65 69 67 68 74 2b 66 78 79 2b 66 65 6d 65 6e |height+fxy+femen| 00000370 75 2c 30 2c 35 2c 6d 76 61 72 65 6e 64 2d 6d 76 |u,0,5,mvarend-mv| 00000380 61 72 73 74 61 72 74 29 0d 01 04 05 3b 0d 01 0e |arstart)....;...| 00000390 23 3b 20 4d 61 6e 64 65 6c 27 73 20 56 61 72 69 |#; Mandel's Vari| 000003a0 61 62 6c 65 73 20 61 66 74 65 72 20 68 65 72 65 |ables after here| 000003b0 0d 01 18 0e 2e 6d 76 61 72 73 74 61 72 74 0d 01 |.....mvarstart..| 000003c0 22 2f a4 61 66 67 32 76 61 72 28 41 46 47 5f 64 |"/.afg2var(AFG_d| 000003d0 62 6c 2c 30 2c 38 29 3a 2e 6d 78 30 20 a4 66 70 |bl,0,8):.mx0 .fp| 000003e0 28 22 44 46 44 20 2d 32 2e 32 38 22 29 0d 01 2c |("DFD -2.28")..,| 000003f0 2f a4 61 66 67 32 76 61 72 28 41 46 47 5f 64 62 |/.afg2var(AFG_db| 00000400 6c 2c 30 2c 38 29 3a 2e 6d 79 30 20 a4 66 70 28 |l,0,8):.my0 .fp(| 00000410 22 44 46 44 20 2d 31 2e 33 35 22 29 0d 01 36 2c |"DFD -1.35")..6,| 00000420 a4 61 66 67 32 76 61 72 28 41 46 47 5f 64 62 6c |.afg2var(AFG_dbl| 00000430 2c 30 2c 38 29 3a 2e 6d 77 20 a4 66 70 28 22 44 |,0,8):.mw .fp("D| 00000440 46 44 20 33 2e 36 22 29 0d 01 40 2d a4 61 66 67 |FD 3.6")..@-.afg| 00000450 32 76 61 72 28 41 46 47 5f 64 62 6c 2c 30 2c 38 |2var(AFG_dbl,0,8| 00000460 29 3a 2e 6d 68 20 a4 66 70 28 22 44 46 44 20 32 |):.mh .fp("DFD 2| 00000470 2e 38 38 22 29 0d 01 4a 28 a4 61 66 67 32 76 61 |.88")..J(.afg2va| 00000480 72 28 41 46 47 5f 69 6e 74 2c 30 2c 34 29 3a 2e |r(AFG_int,0,4):.| 00000490 6d 69 74 65 72 20 44 43 44 20 31 32 38 0d 01 54 |miter DCD 128..T| 000004a0 1f 2e 6d 76 61 72 65 6e 64 20 3b 20 45 6e 64 20 |..mvarend ; End | 000004b0 6f 66 20 76 61 72 69 61 62 6c 65 73 0d 01 5e 05 |of variables..^.| 000004c0 3b 0d 01 68 3a 3b 20 56 61 72 69 61 62 6c 65 20 |;..h:; Variable | 000004d0 6e 61 6d 65 73 20 61 66 74 65 72 20 68 65 72 65 |names after here| 000004e0 3b 20 31 20 66 6f 72 20 65 61 63 68 20 76 61 72 |; 1 for each var| 000004f0 69 61 62 6c 65 20 61 62 6f 76 65 0d 01 72 1b a4 |iable above..r..| 00000500 76 61 72 6e 61 6d 65 28 22 20 20 20 20 20 20 20 |varname(" | 00000510 20 20 78 30 22 29 0d 01 7c 1b a4 76 61 72 6e 61 | x0")..|..varna| 00000520 6d 65 28 22 20 20 20 20 20 20 20 20 20 79 30 22 |me(" y0"| 00000530 29 0d 01 86 1b a4 76 61 72 6e 61 6d 65 28 22 20 |).....varname(" | 00000540 20 20 20 20 20 77 69 64 74 68 22 29 0d 01 90 1b | width")....| 00000550 a4 76 61 72 6e 61 6d 65 28 22 20 20 20 20 20 68 |.varname(" h| 00000560 65 69 67 68 74 22 29 0d 01 9a 1b a4 76 61 72 6e |eight").....varn| 00000570 61 6d 65 28 22 20 20 4d 61 78 2e 20 49 74 65 72 |ame(" Max. Iter| 00000580 22 29 0d 01 a4 2a 3b 2d 2d 2d 2d 2d 2d 2d 2d 2d |")...*;---------| 00000590 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 000005a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 01 ae 1f |------------....| 000005b0 3b 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e |; The entry poin| 000005c0 74 20 74 6f 20 4d 61 6e 64 65 6c 0d 01 b8 0b 2e |t to Mandel.....| 000005d0 6d 61 6e 64 65 6c 0d 01 c2 18 a4 66 65 6e 74 65 |mandel.....fente| 000005e0 72 20 3b 20 49 6e 69 74 69 61 6c 69 73 65 0d 01 |r ; Initialise..| 000005f0 cc 2a 3b 20 52 30 3d 46 72 61 63 74 61 6c 20 45 |.*; R0=Fractal E| 00000600 76 65 6e 74 2c 20 52 31 3d 41 64 64 72 65 73 73 |vent, R1=Address| 00000610 20 6f 66 20 44 61 74 61 0d 01 d6 0d 4d 4f 56 20 | of Data....MOV | 00000620 52 39 2c 23 30 0d 01 e0 2e 53 54 52 20 52 39 2c |R9,#0....STR R9,| 00000630 5b 52 31 2c 23 66 65 76 65 6e 74 5f 72 63 5d 20 |[R1,#fevent_rc] | 00000640 3b 20 63 6c 65 61 72 20 72 65 74 75 72 6e 20 63 |; clear return c| 00000650 6f 64 65 0d 01 ea 15 43 4d 50 20 52 30 2c 23 66 |ode....CMP R0,#f| 00000660 70 6c 6f 74 69 6e 69 74 0d 01 f4 11 42 45 51 20 |plotinit....BEQ | 00000670 6d 70 6c 6f 74 69 6e 69 74 0d 01 fe 15 43 4d 50 |mplotinit....CMP| 00000680 20 52 30 2c 23 66 64 61 74 61 69 6e 69 74 0d 02 | R0,#fdatainit..| 00000690 08 11 42 45 51 20 6d 64 61 74 61 69 6e 69 74 0d |..BEQ mdatainit.| 000006a0 02 12 15 43 4d 50 20 52 30 2c 23 66 6d 65 6e 75 |...CMP R0,#fmenu| 000006b0 69 6e 69 74 0d 02 1c 11 42 45 51 20 6d 6d 65 6e |init....BEQ mmen| 000006c0 75 69 6e 69 74 0d 02 26 16 43 4d 50 20 52 30 2c |uinit..&.CMP R0,| 000006d0 23 66 6d 65 6e 75 63 6c 69 63 6b 0d 02 30 12 42 |#fmenuclick..0.B| 000006e0 45 51 20 6d 6d 65 6e 75 63 6c 69 63 6b 0d 02 3a |EQ mmenuclick..:| 000006f0 12 43 4d 50 20 52 30 2c 23 66 78 79 70 6f 73 0d |.CMP R0,#fxypos.| 00000700 02 44 0e 42 45 51 20 6d 78 79 70 6f 73 0d 02 4e |.D.BEQ mxypos..N| 00000710 14 43 4d 50 20 52 30 2c 23 66 64 61 74 61 63 68 |.CMP R0,#fdatach| 00000720 6b 0d 02 58 10 42 45 51 20 6d 64 61 74 61 63 68 |k..X.BEQ mdatach| 00000730 6b 0d 02 62 25 3b 20 55 6e 73 75 70 70 6f 72 74 |k..b%; Unsupport| 00000740 65 64 20 65 76 65 6e 74 20 2d 20 6a 75 73 74 20 |ed event - just | 00000750 72 65 74 75 72 6e 0d 02 6c 0a a4 66 65 78 69 74 |return..l..fexit| 00000760 0d 02 76 05 3b 0d 02 80 16 3b 20 49 6e 69 74 20 |..v.;....; Init | 00000770 4d 61 6e 64 65 6c 20 64 61 74 61 0d 02 8a 0e 2e |Mandel data.....| 00000780 6d 64 61 74 61 69 6e 69 74 0d 02 94 16 a4 66 70 |mdatainit.....fp| 00000790 28 22 4c 44 46 44 20 46 30 2c 69 6d 78 22 29 0d |("LDFD F0,imx").| 000007a0 02 9e 16 a4 66 70 28 22 53 54 46 44 20 46 30 2c |....fp("STFD F0,| 000007b0 6d 78 30 22 29 0d 02 a8 16 a4 66 70 28 22 4c 44 |mx0").....fp("LD| 000007c0 46 44 20 46 30 2c 69 6d 79 22 29 0d 02 b2 16 a4 |FD F0,imy").....| 000007d0 66 70 28 22 53 54 46 44 20 46 30 2c 6d 79 30 22 |fp("STFD F0,my0"| 000007e0 29 0d 02 bc 16 a4 66 70 28 22 4c 44 46 44 20 46 |).....fp("LDFD F| 000007f0 30 2c 69 6d 77 22 29 0d 02 c6 16 a4 66 70 28 22 |0,imw").....fp("| 00000800 53 54 46 44 20 46 30 2c 6d 77 20 22 29 0d 02 d0 |STFD F0,mw ")...| 00000810 16 a4 66 70 28 22 4c 44 46 44 20 46 30 2c 69 6d |..fp("LDFD F0,im| 00000820 68 22 29 0d 02 da 16 a4 66 70 28 22 53 54 46 44 |h").....fp("STFD| 00000830 20 46 30 2c 6d 68 20 22 29 0d 02 e4 11 4c 44 52 | F0,mh ")....LDR| 00000840 20 52 30 2c 69 6d 69 74 65 72 0d 02 ee 10 53 54 | R0,imiter....ST| 00000850 52 20 52 30 2c 6d 69 74 65 72 0d 02 f8 0a a4 66 |R R0,miter.....f| 00000860 65 78 69 74 0d 03 02 2a 2e 69 6d 78 20 a4 66 70 |exit...*.imx .fp| 00000870 28 22 44 46 44 20 2d 32 2e 32 38 22 29 20 3b 20 |("DFD -2.28") ; | 00000880 49 6e 69 74 69 61 6c 20 76 61 6c 75 65 73 0d 03 |Initial values..| 00000890 0c 19 2e 69 6d 79 20 a4 66 70 28 22 44 46 44 20 |...imy .fp("DFD | 000008a0 2d 31 2e 33 35 22 29 0d 03 16 17 2e 69 6d 77 20 |-1.35").....imw | 000008b0 a4 66 70 28 22 44 46 44 20 33 2e 36 22 29 0d 03 |.fp("DFD 3.6")..| 000008c0 20 18 2e 69 6d 68 20 a4 66 70 28 22 44 46 44 20 | ..imh .fp("DFD | 000008d0 32 2e 38 38 22 29 0d 03 2a 13 2e 69 6d 69 74 65 |2.88")..*..imite| 000008e0 72 20 44 43 44 20 31 32 38 0d 03 34 05 3b 0d 03 |r DCD 128..4.;..| 000008f0 3e 25 3b 20 56 65 72 69 66 79 20 64 61 74 61 20 |>%; Verify data | 00000900 69 6e 70 75 74 20 6f 72 20 7a 6f 6f 6d 20 72 61 |input or zoom ra| 00000910 6e 67 65 0d 03 48 0d 2e 6d 64 61 74 61 63 68 6b |nge..H..mdatachk| 00000920 0d 03 52 16 a4 66 70 28 22 4c 44 46 44 20 46 30 |..R..fp("LDFD F0| 00000930 2c 6d 78 30 22 29 0d 03 5c 22 a4 66 70 28 22 43 |,mx0")..\".fp("C| 00000940 4e 46 44 20 46 30 2c 23 31 30 22 29 20 20 20 20 |NFD F0,#10") | 00000950 20 3b 20 3c 2d 31 30 3f 0d 03 66 2a 42 4c 54 20 | ; <-10?..f*BLT | 00000960 20 62 61 64 64 61 74 61 20 20 20 20 20 20 20 20 | baddata | 00000970 20 20 20 20 3b 20 78 30 20 74 6f 6f 20 73 6d 61 | ; x0 too sma| 00000980 6c 6c 0d 03 70 05 3b 0d 03 7a 22 a4 66 70 28 22 |ll..p.;..z".fp("| 00000990 4c 44 46 44 20 46 32 2c 6d 77 20 22 29 20 20 20 |LDFD F2,mw ") | 000009a0 20 20 3b 20 77 69 64 74 68 0d 03 84 20 a4 66 70 | ; width... .fp| 000009b0 28 22 41 44 46 44 20 46 30 2c 46 30 2c 46 32 22 |("ADFD F0,F0,F2"| 000009c0 29 20 20 20 3b 20 78 2b 77 0d 03 8e 21 a4 66 70 |) ; x+w...!.fp| 000009d0 28 22 43 4d 46 44 20 46 30 2c 23 31 30 22 29 20 |("CMFD F0,#10") | 000009e0 20 20 20 20 3b 20 3e 31 30 3f 0d 03 98 29 42 47 | ; >10?...)BG| 000009f0 54 20 20 62 61 64 64 61 74 61 20 20 20 20 20 20 |T baddata | 00000a00 20 20 20 20 20 20 3b 20 78 20 74 6f 6f 20 6c 61 | ; x too la| 00000a10 72 67 65 0d 03 a2 05 3b 0d 03 ac 16 a4 66 70 28 |rge....;.....fp(| 00000a20 22 4c 44 46 44 20 46 30 2c 6d 79 30 22 29 0d 03 |"LDFD F0,my0")..| 00000a30 b6 22 a4 66 70 28 22 43 4e 46 44 20 46 30 2c 23 |.".fp("CNFD F0,#| 00000a40 31 30 22 29 20 20 20 20 20 3b 20 3c 2d 31 30 3f |10") ; <-10?| 00000a50 0d 03 c0 2a 42 4c 54 20 20 62 61 64 64 61 74 61 |...*BLT baddata| 00000a60 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 79 30 | ; y0| 00000a70 20 74 6f 6f 20 73 6d 61 6c 6c 0d 03 ca 05 3b 0d | too small....;.| 00000a80 03 d4 23 a4 66 70 28 22 4c 44 46 44 20 46 33 2c |..#.fp("LDFD F3,| 00000a90 6d 68 20 22 29 20 20 20 20 20 3b 20 68 65 69 67 |mh ") ; heig| 00000aa0 68 74 0d 03 de 20 a4 66 70 28 22 41 44 46 44 20 |ht... .fp("ADFD | 00000ab0 46 30 2c 46 30 2c 46 32 22 29 20 20 20 3b 20 79 |F0,F0,F2") ; y| 00000ac0 2b 77 0d 03 e8 21 a4 66 70 28 22 43 4d 46 44 20 |+w...!.fp("CMFD | 00000ad0 46 30 2c 23 31 30 22 29 20 20 20 20 20 3b 20 3e |F0,#10") ; >| 00000ae0 31 30 3f 0d 03 f2 29 42 47 54 20 20 62 61 64 64 |10?...)BGT badd| 00000af0 61 74 61 20 20 20 20 20 20 20 20 20 20 20 20 3b |ata ;| 00000b00 20 79 20 74 6f 6f 20 6c 61 72 67 65 0d 03 fc 05 | y too large....| 00000b10 3b 0d 04 06 42 3b 20 46 6f 72 20 77 69 64 74 68 |;...B; For width| 00000b20 20 26 20 68 65 69 67 68 74 2c 20 63 68 65 63 6b | & height, check| 00000b30 20 6e 6f 74 20 73 6d 61 6c 6c 65 72 20 74 68 61 | not smaller tha| 00000b40 6e 20 69 6e 74 65 67 65 72 20 66 70 20 72 61 6e |n integer fp ran| 00000b50 67 65 2e 0d 04 10 41 3b 20 46 6f 72 20 4d 61 6e |ge....A; For Man| 00000b60 64 65 6c 62 72 6f 74 73 2c 20 74 68 65 20 73 6d |delbrots, the sm| 00000b70 61 6c 6c 65 73 74 20 64 65 6c 74 61 20 69 73 20 |allest delta is | 00000b80 61 70 70 72 6f 78 20 32 65 2d 38 20 77 68 69 63 |approx 2e-8 whic| 00000b90 68 20 69 73 0d 04 1a 43 3b 20 61 72 6f 75 6e 64 |h is...C; around| 00000ba0 20 31 65 2d 35 20 61 73 20 61 20 77 69 64 74 68 | 1e-5 as a width| 00000bb0 20 76 61 6c 75 65 20 28 77 65 20 64 6f 6e 27 74 | value (we don't| 00000bc0 20 6b 6e 6f 77 20 69 6d 61 67 65 20 77 69 64 74 | know image widt| 00000bd0 68 20 68 65 72 65 29 0d 04 24 39 a4 66 70 28 22 |h here)..$9.fp("| 00000be0 4c 44 46 44 20 46 31 2c 6d 69 6e 69 6e 74 22 29 |LDFD F1,minint")| 00000bf0 20 3b 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 | ; smallest valu| 00000c00 65 20 66 6f 72 20 66 70 20 69 6e 74 65 67 65 72 |e for fp integer| 00000c10 0d 04 2e 32 a4 66 70 28 22 43 4d 46 44 20 46 32 |...2.fp("CMFD F2| 00000c20 2c 46 31 22 29 20 20 20 20 20 3b 20 77 69 74 68 |,F1") ; with| 00000c30 69 6e 20 61 63 63 75 72 61 63 79 20 72 61 6e 67 |in accuracy rang| 00000c40 65 3f 0d 04 38 28 42 4c 54 20 20 62 61 64 64 61 |e?..8(BLT badda| 00000c50 74 61 20 20 20 20 20 20 20 20 20 20 20 3b 20 77 |ta ; w| 00000c60 20 74 6f 6f 20 73 6d 61 6c 6c 0d 04 42 32 a4 66 | too small..B2.f| 00000c70 70 28 22 43 4d 46 44 20 46 33 2c 46 31 22 29 20 |p("CMFD F3,F1") | 00000c80 20 20 20 20 3b 20 77 69 74 68 69 6e 20 61 63 63 | ; within acc| 00000c90 75 72 61 63 79 20 72 61 6e 67 65 3f 0d 04 4c 28 |uracy range?..L(| 00000ca0 42 4c 54 20 20 62 61 64 64 61 74 61 20 20 20 20 |BLT baddata | 00000cb0 20 20 20 20 20 20 20 3b 20 68 20 74 6f 6f 20 73 | ; h too s| 00000cc0 6d 61 6c 6c 0d 04 56 05 3b 0d 04 60 22 3b 20 56 |mall..V.;..`"; V| 00000cd0 65 72 69 66 79 20 6d 61 78 69 74 65 72 20 6e 6f |erify maxiter no| 00000ce0 74 20 74 6f 6f 20 73 6d 61 6c 6c 0d 04 6a 10 4c |t too small..j.L| 00000cf0 44 52 20 52 30 2c 6d 69 74 65 72 0d 04 74 27 43 |DR R0,miter..t'C| 00000d00 4d 50 20 52 30 2c 23 31 30 20 20 20 20 20 20 20 |MP R0,#10 | 00000d10 20 20 20 20 20 20 3b 20 74 6f 6f 20 73 6d 61 6c | ; too smal| 00000d20 6c 3f 0d 04 7e 10 4d 4f 56 4c 54 20 52 30 2c 23 |l?..~.MOVLT R0,#| 00000d30 31 30 0d 04 88 2c 53 54 52 4c 54 20 52 30 2c 6d |10...,STRLT R0,m| 00000d40 69 74 65 72 20 20 20 20 20 20 20 20 20 3b 20 79 |iter ; y| 00000d50 65 73 20 2d 20 73 65 74 20 74 6f 20 31 30 0d 04 |es - set to 10..| 00000d60 92 05 3b 0d 04 9c 0a a4 66 65 78 69 74 0d 04 a6 |..;.....fexit...| 00000d70 05 3b 0d 04 b0 36 3b 20 42 61 64 20 64 61 74 61 |.;...6; Bad data| 00000d80 20 2d 20 73 65 74 20 72 65 74 75 72 6e 20 63 6f | - set return co| 00000d90 64 65 20 26 20 70 6f 69 6e 74 20 74 6f 20 65 72 |de & point to er| 00000da0 72 6f 72 20 74 65 78 74 0d 04 ba 0c 2e 62 61 64 |ror text.....bad| 00000db0 64 61 74 61 0d 04 c4 11 41 44 52 20 52 30 2c 62 |data....ADR R0,b| 00000dc0 61 64 6d 73 67 0d 04 ce 2b 53 54 52 20 52 30 2c |admsg...+STR R0,| 00000dd0 5b 52 31 2c 23 65 72 72 6d 73 67 5d 20 20 20 20 |[R1,#errmsg] | 00000de0 20 3b 20 73 65 74 20 65 72 72 6f 72 20 6d 73 67 | ; set error msg| 00000df0 0d 04 d8 26 4d 4f 56 20 52 30 2c 23 31 20 20 20 |...&MOV R0,#1 | 00000e00 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 42 61 | ; Ba| 00000e10 64 20 64 61 74 61 0d 04 e2 1a 53 54 52 20 52 30 |d data....STR R0| 00000e20 2c 5b 52 31 2c 23 66 65 76 65 6e 74 5f 72 63 5d |,[R1,#fevent_rc]| 00000e30 0d 04 ec 0a a4 66 65 78 69 74 0d 04 f6 05 3b 0d |.....fexit....;.| 00000e40 05 00 1b 2e 6d 69 6e 69 6e 74 20 a4 66 70 28 22 |....minint .fp("| 00000e50 44 46 44 20 31 65 2d 35 22 29 0d 05 0a 46 2e 62 |DFD 1e-5")...F.b| 00000e60 61 64 6d 73 67 20 45 51 55 53 20 22 78 2c 79 20 |admsg EQUS "x,y | 00000e70 6d 75 73 74 20 62 65 20 77 69 74 68 69 6e 20 2b |must be within +| 00000e80 2f 2d 20 31 30 20 69 6e 63 6c 75 64 69 6e 67 20 |/- 10 including | 00000e90 77 69 64 74 68 2f 68 65 69 67 68 74 22 2b bd 30 |width/height"+.0| 00000ea0 0d 05 14 2a 3b 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |...*;-----------| 00000eb0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00000ec0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 05 1e 21 3b 20 |----------...!; | 00000ed0 49 6e 69 74 69 61 6c 69 73 65 20 72 65 61 64 79 |Initialise ready| 00000ee0 20 66 6f 72 20 61 20 70 6c 6f 74 0d 05 28 0e 2e | for a plot..(..| 00000ef0 6d 70 6c 6f 74 69 6e 69 74 0d 05 32 1b 4c 44 52 |mplotinit..2.LDR| 00000f00 20 52 30 2c 5b 52 31 2c 23 70 6c 6f 74 5f 66 6c | R0,[R1,#plot_fl| 00000f10 61 67 73 5d 0d 05 3c 28 84 52 20 52 30 2c 52 30 |ags]..<(.R R0,R0| 00000f20 2c 23 70 6c 6f 74 5f 69 6e 74 32 37 20 20 20 3b |,#plot_int27 ;| 00000f30 20 69 6e 74 32 37 20 6d 61 74 68 73 0d 05 46 2a | int27 maths..F*| 00000f40 53 54 52 20 52 30 2c 5b 52 31 2c 23 70 6c 6f 74 |STR R0,[R1,#plot| 00000f50 5f 66 6c 61 67 73 5d 20 3b 20 74 65 6c 6c 20 46 |_flags] ; tell F| 00000f60 72 61 63 74 61 6c 0d 05 50 2a 3b 20 69 66 20 64 |ractal..P*; if d| 00000f70 65 6c 74 61 79 20 3e 20 32 2e 35 65 2d 34 20 75 |eltay > 2.5e-4 u| 00000f80 73 65 20 71 75 69 63 6b 20 72 6f 75 74 69 6e 65 |se quick routine| 00000f90 0d 05 5a 2d 4c 44 52 20 52 32 2c 5b 52 31 2c 23 |..Z-LDR R2,[R1,#| 00000fa0 70 6c 6f 74 5f 69 6d 5f 68 5d 20 3b 20 48 65 69 |plot_im_h] ; Hei| 00000fb0 67 68 74 20 69 6e 20 70 69 78 65 6c 73 0d 05 64 |ght in pixels..d| 00000fc0 15 a4 66 70 28 22 46 4c 54 44 20 46 32 2c 52 32 |..fp("FLTD F2,R2| 00000fd0 22 29 0d 05 6e 25 a4 66 70 28 22 4c 44 46 44 20 |")..n%.fp("LDFD | 00000fe0 46 30 2c 6d 68 22 29 20 3b 20 4d 61 6e 64 65 6c |F0,mh") ; Mandel| 00000ff0 20 68 65 69 67 68 74 0d 05 78 22 a4 66 70 28 22 | height..x".fp("| 00001000 44 56 46 44 20 46 31 2c 46 30 2c 46 32 22 29 20 |DVFD F1,F0,F2") | 00001010 3b 20 64 65 6c 74 61 20 79 0d 05 82 19 a4 66 70 |; delta y.....fp| 00001020 28 22 4c 44 46 44 20 46 33 2c 6d 71 75 69 63 6b |("LDFD F3,mquick| 00001030 22 29 0d 05 8c 2b a4 66 70 28 22 43 4d 46 44 20 |")...+.fp("CMFD | 00001040 46 31 2c 46 33 22 29 20 20 20 20 20 20 3b 20 6c |F1,F3") ; l| 00001050 61 72 67 65 20 64 65 6c 74 61 20 79 3f 0d 05 96 |arge delta y?...| 00001060 35 41 44 52 47 45 20 52 30 2c 6d 61 6e 64 65 6c |5ADRGE R0,mandel| 00001070 31 36 20 20 20 20 20 20 20 3b 20 79 65 73 20 2d |16 ; yes -| 00001080 20 75 73 65 20 71 75 69 63 6b 20 72 6f 75 74 69 | use quick routi| 00001090 6e 65 0d 05 a0 2f 41 44 52 4c 54 20 52 30 2c 6d |ne.../ADRLT R0,m| 000010a0 61 6e 64 65 6c 33 32 20 20 20 20 20 20 20 3b 20 |andel32 ; | 000010b0 6e 6f 20 2d 20 6e 6f 72 6d 61 6c 20 73 70 65 65 |no - normal spee| 000010c0 64 0d 05 aa 36 53 54 52 20 52 30 2c 6d 61 6e 64 |d...6STR R0,mand| 000010d0 65 6c 5f 66 75 6e 63 2b 66 64 65 66 6e 5f 78 79 |el_func+fdefn_xy| 000010e0 72 74 6e 20 20 3b 20 4f 75 72 20 70 6c 6f 74 20 |rtn ; Our plot | 000010f0 72 6f 75 74 69 6e 65 0d 05 b4 0a a4 66 65 78 69 |routine.....fexi| 00001100 74 0d 05 be 1d 2e 6d 71 75 69 63 6b 20 a4 66 70 |t.....mquick .fp| 00001110 28 22 44 46 44 20 32 2e 35 65 2d 34 22 29 0d 05 |("DFD 2.5e-4")..| 00001120 c8 27 3b 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |.';-------------| 00001130 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00001140 2d 2d 2d 2d 2d 0d 05 d2 05 5d 0d 05 dc 27 f4 20 |-----....]...'. | 00001150 6d 61 6e 64 65 6c 20 72 65 67 69 73 74 65 72 73 |mandel registers| 00001160 20 2b 20 31 31 2d 31 34 20 66 6f 72 20 77 6f 72 | + 11-14 for wor| 00001170 6b 0d 05 e6 18 f4 20 78 20 26 20 79 20 73 65 74 |k..... x & y set| 00001180 20 6f 6e 20 65 6e 74 72 79 0d 05 f0 2c f4 20 6d | on entry...,. m| 00001190 20 26 20 6e 20 61 72 65 20 66 72 65 65 20 66 6f | & n are free fo| 000011a0 72 20 75 73 65 20 69 6e 20 63 61 6c 63 75 6c 61 |r use in calcula| 000011b0 74 69 6f 6e 73 0d 05 fa 38 78 3d 30 3a 79 3d 31 |tions...8x=0:y=1| 000011c0 3a 75 75 3d 32 3a 76 76 3d 33 3a 75 3d 34 3a 76 |:uu=2:vv=3:u=4:v| 000011d0 3d 35 3a 72 3d 36 3a 64 65 70 74 68 3d 37 3a 6d |=5:r=6:depth=7:m| 000011e0 61 78 3d 38 3a 6d 3d 39 3a 6e 3d 31 30 0d 06 04 |ax=8:m=9:n=10...| 000011f0 0c 5b 4f 50 54 20 61 73 6d 0d 06 0e 14 3b 20 33 |.[OPT asm....; 3| 00001200 32 20 62 69 74 20 72 6f 75 74 69 6e 65 0d 06 18 |2 bit routine...| 00001210 0d 2e 6d 61 6e 64 65 6c 33 32 0d 06 22 1c 4c 44 |..mandel32..".LD| 00001220 52 20 6d 61 78 2c 6d 69 74 65 72 20 3b 20 4d 61 |R max,miter ; Ma| 00001230 78 2e 69 74 65 72 0d 06 2c 0c 4d 4f 56 20 75 2c |x.iter..,.MOV u,| 00001240 23 30 0d 06 36 0c 4d 4f 56 20 76 2c 23 30 0d 06 |#0..6.MOV v,#0..| 00001250 40 2f 2e 6d 33 32 73 74 61 72 74 20 20 20 20 20 |@/.m32start | 00001260 20 20 20 20 20 20 20 20 20 20 3b 20 4a 75 6c 69 | ; Juli| 00001270 61 20 65 6e 74 72 79 20 70 6f 69 6e 74 0d 06 4a |a entry point..J| 00001280 2c 53 54 4d 46 44 20 52 31 33 21 2c 7b 52 31 34 |,STMFD R13!,{R14| 00001290 7d 20 20 20 20 20 20 20 20 3b 20 52 65 74 75 72 |} ; Retur| 000012a0 6e 20 61 64 64 72 65 73 73 0d 06 54 33 53 54 52 |n address..T3STR| 000012b0 20 52 31 33 2c 73 61 76 65 72 31 33 20 20 20 20 | R13,saver13 | 000012c0 20 20 20 20 20 3b 20 61 6c 6c 6f 77 20 75 73 65 | ; allow use| 000012d0 20 6f 66 20 61 6c 6c 20 72 65 67 73 0d 06 5e 10 | of all regs..^.| 000012e0 4d 4f 56 20 64 65 70 74 68 2c 23 30 0d 06 68 29 |MOV depth,#0..h)| 000012f0 2e 6d 6c 6f 6f 70 20 20 20 20 20 20 20 20 3b 20 |.mloop ; | 00001300 64 6f 20 66 6f 72 20 65 61 63 68 20 69 74 65 72 |do for each iter| 00001310 61 74 69 6f 6e 0d 06 72 19 a4 73 71 72 33 32 5f |ation..r..sqr32_| 00001320 32 37 28 75 75 2c 75 2c 31 31 2c 31 32 29 0d 06 |27(uu,u,11,12)..| 00001330 7c 19 a4 73 71 72 33 32 5f 32 37 28 76 76 2c 76 ||..sqr32_27(vv,v| 00001340 2c 31 31 2c 31 32 29 0d 06 86 26 54 53 54 20 75 |,11,12)...&TST u| 00001350 75 2c 23 26 45 30 30 30 30 30 30 30 20 20 20 20 |u,#&E0000000 | 00001360 20 20 20 3b 20 3e 3d 20 20 34 2e 30 3f 0d 06 90 | ; >= 4.0?...| 00001370 17 54 53 54 45 51 20 76 76 2c 23 26 45 30 30 30 |.TSTEQ vv,#&E000| 00001380 30 30 30 30 0d 06 9a 0d 42 4e 45 20 6d 65 78 69 |0000....BNE mexi| 00001390 74 0d 06 a4 0f 41 44 44 20 72 2c 75 75 2c 76 76 |t....ADD r,uu,vv| 000013a0 0d 06 ae 14 54 53 54 20 72 2c 23 26 45 30 30 30 |....TST r,#&E000| 000013b0 30 30 30 30 0d 06 b8 0d 42 4e 45 20 6d 65 78 69 |0000....BNE mexi| 000013c0 74 0d 06 c2 24 3b 20 50 65 72 66 6f 72 6d 20 6d |t...$; Perform m| 000013d0 61 6e 64 65 6c 62 72 6f 74 20 63 61 6c 63 75 6c |andelbrot calcul| 000013e0 61 74 69 6f 6e 0d 06 cc 15 a4 6d 33 32 5f 32 37 |ation.....m32_27| 000013f0 28 72 2c 75 2c 76 2c 31 31 29 0d 06 d6 13 52 53 |(r,u,v,11)....RS| 00001400 42 20 76 2c 79 2c 72 2c 4c 53 4c 23 31 0d 06 e0 |B v,y,r,LSL#1...| 00001410 0f 53 55 42 20 75 2c 75 75 2c 76 76 0d 06 ea 0d |.SUB u,uu,vv....| 00001420 41 44 44 20 75 2c 75 2c 78 0d 06 f4 16 41 44 44 |ADD u,u,x....ADD| 00001430 20 64 65 70 74 68 2c 64 65 70 74 68 2c 23 31 0d | depth,depth,#1.| 00001440 06 fe 11 43 4d 50 20 64 65 70 74 68 2c 6d 61 78 |...CMP depth,max| 00001450 0d 07 08 0d 42 4e 45 20 6d 6c 6f 6f 70 0d 07 12 |....BNE mloop...| 00001460 26 4d 4f 56 20 64 65 70 74 68 2c 23 30 20 3b 20 |&MOV depth,#0 ; | 00001470 4e 6f 20 63 6f 6c 6f 75 72 20 69 66 20 61 74 20 |No colour if at | 00001480 6d 61 78 0d 07 1c 0a 2e 6d 65 78 69 74 0d 07 26 |max.....mexit..&| 00001490 20 4d 4f 56 20 52 30 2c 64 65 70 74 68 20 3b 20 | MOV R0,depth ; | 000014a0 52 65 74 75 72 6e 20 63 6f 6c 6f 75 72 0d 07 30 |Return colour..0| 000014b0 2b 4c 44 52 20 52 31 33 2c 73 61 76 65 72 31 33 |+LDR R13,saver13| 000014c0 20 20 20 20 20 20 20 20 20 3b 20 72 65 73 74 6f | ; resto| 000014d0 72 65 20 73 74 61 63 6b 0d 07 3a 22 4c 44 4d 46 |re stack..:"LDMF| 000014e0 44 20 52 31 33 21 2c 7b 50 43 7d 5e 20 20 20 20 |D R13!,{PC}^ | 000014f0 20 20 20 20 3b 20 65 78 69 74 0d 07 44 12 2e 73 | ; exit..D..s| 00001500 61 76 65 72 31 33 20 44 43 44 20 30 0d 07 4e 05 |aver13 DCD 0..N.| 00001510 3b 0d 07 58 1e 3b 20 31 36 20 62 69 74 20 70 72 |;..X.; 16 bit pr| 00001520 65 63 69 73 69 6f 6e 20 76 65 72 73 69 6f 6e 0d |ecision version.| 00001530 07 62 28 3b 20 4e 62 2e 20 52 31 33 20 26 20 52 |.b(; Nb. R13 & R| 00001540 31 34 20 ac 20 61 76 61 69 6c 61 62 6c 65 20 61 |14 . available a| 00001550 73 20 63 6f 64 65 64 0d 07 6c 0d 2e 6d 61 6e 64 |s coded..l..mand| 00001560 65 6c 31 36 0d 07 76 11 4c 44 52 20 6d 61 78 2c |el16..v.LDR max,| 00001570 6d 69 74 65 72 0d 07 80 0c 4d 4f 56 20 75 2c 23 |miter....MOV u,#| 00001580 30 0d 07 8a 0c 4d 4f 56 20 76 2c 23 30 0d 07 94 |0....MOV v,#0...| 00001590 2f 2e 6d 31 36 73 74 61 72 74 20 20 20 20 20 20 |/.m16start | 000015a0 20 20 20 20 20 20 20 20 20 3b 20 4a 75 6c 69 61 | ; Julia| 000015b0 20 65 6e 74 72 79 20 70 6f 69 6e 74 0d 07 9e 10 | entry point....| 000015c0 4d 4f 56 20 64 65 70 74 68 2c 23 30 0d 07 a8 0b |MOV depth,#0....| 000015d0 2e 66 6d 6c 6f 6f 70 0d 07 b2 16 a4 73 71 72 31 |.fmloop.....sqr1| 000015e0 36 5f 32 37 28 75 75 2c 75 2c 31 31 29 0d 07 bc |6_27(uu,u,11)...| 000015f0 0e 42 43 53 20 66 6d 65 78 69 74 0d 07 c6 16 a4 |.BCS fmexit.....| 00001600 73 71 72 31 36 5f 32 37 28 76 76 2c 76 2c 31 31 |sqr16_27(vv,v,11| 00001610 29 0d 07 d0 0e 42 43 53 20 66 6d 65 78 69 74 0d |)....BCS fmexit.| 00001620 07 da 29 54 53 54 20 75 75 2c 23 26 45 30 30 30 |..)TST uu,#&E000| 00001630 30 30 30 30 20 20 20 20 20 20 20 3b 20 3e 3d 20 |0000 ; >= | 00001640 2b 2f 2d 34 2e 30 20 3f 0d 07 e4 17 54 53 54 45 |+/-4.0 ?....TSTE| 00001650 51 20 76 76 2c 23 26 45 30 30 30 30 30 30 30 0d |Q vv,#&E0000000.| 00001660 07 ee 0e 42 4e 45 20 66 6d 65 78 69 74 0d 07 f8 |...BNE fmexit...| 00001670 0f 41 44 44 20 72 2c 75 75 2c 76 76 0d 08 02 14 |.ADD r,uu,vv....| 00001680 54 53 54 20 72 2c 23 26 45 30 30 30 30 30 30 30 |TST r,#&E0000000| 00001690 0d 08 0c 0e 42 4e 45 20 66 6d 65 78 69 74 0d 08 |....BNE fmexit..| 000016a0 16 15 a4 6d 31 36 5f 32 37 28 72 2c 75 2c 76 2c |...m16_27(r,u,v,| 000016b0 31 31 29 0d 08 20 13 52 53 42 20 76 2c 79 2c 72 |11).. .RSB v,y,r| 000016c0 2c 4c 53 4c 23 31 0d 08 2a 0f 53 55 42 20 75 2c |,LSL#1..*.SUB u,| 000016d0 75 75 2c 76 76 0d 08 34 0d 41 44 44 20 75 2c 75 |uu,vv..4.ADD u,u| 000016e0 2c 78 0d 08 3e 16 41 44 44 20 64 65 70 74 68 2c |,x..>.ADD depth,| 000016f0 64 65 70 74 68 2c 23 31 0d 08 48 11 43 4d 50 20 |depth,#1..H.CMP | 00001700 64 65 70 74 68 2c 6d 61 78 0d 08 52 0e 42 4e 45 |depth,max..R.BNE| 00001710 20 66 6d 6c 6f 6f 70 0d 08 5c 10 4d 4f 56 20 64 | fmloop..\.MOV d| 00001720 65 70 74 68 2c 23 30 0d 08 66 0b 2e 66 6d 65 78 |epth,#0..f..fmex| 00001730 69 74 0d 08 70 20 4d 4f 56 20 52 30 2c 64 65 70 |it..p MOV R0,dep| 00001740 74 68 20 3b 20 52 65 74 75 72 6e 20 63 6f 6c 6f |th ; Return colo| 00001750 75 72 0d 08 7a 0f 4d 4f 56 53 20 50 43 2c 52 31 |ur..z.MOVS PC,R1| 00001760 34 0d 08 84 28 3b 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |4...(;----------| 00001770 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00001780 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 08 8e 1a 3b 20 4d |---------....; M| 00001790 61 6e 64 65 6c 20 4d 65 6e 75 20 72 6f 75 74 69 |andel Menu routi| 000017a0 6e 65 73 0d 08 98 0e 2e 6d 6d 65 6e 75 69 6e 69 |nes.....mmenuini| 000017b0 74 0d 08 a2 33 41 44 52 20 52 30 2c 6d 6d 65 6e |t...3ADR R0,mmen| 000017c0 75 20 20 20 20 3b 20 50 61 73 73 20 62 61 63 6b |u ; Pass back| 000017d0 20 61 64 64 72 65 73 73 20 6f 66 20 6f 75 72 20 | address of our | 000017e0 6d 65 6e 75 0d 08 ac 1f 53 54 52 20 52 30 2c 5b |menu....STR R0,[| 000017f0 52 31 2c 23 6d 65 6e 75 69 6e 69 74 5f 66 6d 65 |R1,#menuinit_fme| 00001800 6e 75 5d 0d 08 b6 0a a4 66 65 78 69 74 0d 08 c0 |nu].....fexit...| 00001810 0a 2e 6d 6d 65 6e 75 0d 08 ca 20 a4 66 6d 65 6e |..mmenu... .fmen| 00001820 75 5f 68 64 72 28 22 53 61 6d 70 20 4d 61 6e 64 |u_hdr("Samp Mand| 00001830 65 6c 22 2c 31 32 29 0d 08 d4 44 a4 66 6d 65 6e |el",12)...D.fmen| 00001840 75 5f 69 74 65 6d 28 22 53 61 6d 70 20 4a 75 6c |u_item("Samp Jul| 00001850 69 61 22 2c 2d 31 2c 4c 41 53 54 29 20 20 20 3b |ia",-1,LAST) ;| 00001860 20 46 6f 72 20 73 77 69 74 63 68 69 6e 67 20 74 | For switching t| 00001870 6f 20 4a 75 6c 69 61 20 73 65 74 0d 08 de 05 3b |o Julia set....;| 00001880 0d 08 e8 48 3b 20 4e 6f 74 65 20 2d 20 69 6e 20 |...H; Note - in | 00001890 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 74 |the following it| 000018a0 20 69 73 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 | is not necessar| 000018b0 79 20 74 6f 20 63 68 65 63 6b 20 74 68 65 20 6d |y to check the m| 000018c0 65 6e 75 20 69 74 65 6d 0d 08 f2 49 3b 20 6e 75 |enu item...I; nu| 000018d0 6d 62 65 72 20 73 69 6e 63 65 20 74 68 65 72 65 |mber since there| 000018e0 20 69 73 20 6f 6e 6c 79 20 6f 6e 65 20 63 68 6f | is only one cho| 000018f0 69 63 65 2e 20 54 68 65 20 63 6f 64 65 20 69 73 |ice. The code is| 00001900 20 68 65 72 65 20 74 6f 20 73 68 6f 77 20 74 68 | here to show th| 00001910 65 0d 08 fc 1a 3b 20 74 79 70 65 20 6f 66 20 63 |e....; type of c| 00001920 6f 64 65 20 74 6f 20 75 73 65 2e 0d 09 06 22 3b |ode to use....";| 00001930 20 55 73 65 72 20 68 61 73 20 63 6c 69 63 6b 65 | User has clicke| 00001940 64 20 6f 6e 20 6f 75 72 20 6d 65 6e 75 0d 09 10 |d on our menu...| 00001950 0f 2e 6d 6d 65 6e 75 63 6c 69 63 6b 0d 09 1a 3b |..mmenuclick...;| 00001960 4c 44 52 20 52 32 2c 5b 52 31 2c 23 6d 65 6e 75 |LDR R2,[R1,#menu| 00001970 63 6c 69 63 6b 5f 6d 65 6e 75 5d 20 3b 20 47 65 |click_menu] ; Ge| 00001980 74 20 70 6f 69 6e 74 65 72 20 74 6f 20 6d 65 6e |t pointer to men| 00001990 75 20 61 72 72 61 79 0d 09 24 3f 4c 44 52 20 52 |u array..$?LDR R| 000019a0 30 2c 5b 52 32 2c 23 34 5d 20 20 20 20 20 20 20 |0,[R2,#4] | 000019b0 20 20 20 20 20 20 20 3b 20 47 65 74 20 69 74 65 | ; Get ite| 000019c0 6d 20 6e 75 6d 62 65 72 20 66 72 6f 6d 20 73 75 |m number from su| 000019d0 62 5f 6d 65 6e 75 0d 09 2e 3a 43 4d 50 20 52 30 |b_menu...:CMP R0| 000019e0 2c 23 30 20 20 20 20 20 20 20 20 20 20 20 20 20 |,#0 | 000019f0 20 20 20 20 20 20 3b 20 4a 75 6c 69 61 20 73 65 | ; Julia se| 00001a00 6c 65 63 74 3f 20 28 31 73 74 20 69 74 65 6d 29 |lect? (1st item)| 00001a10 0d 09 38 2c 42 4e 45 20 6d 6d 65 6e 75 65 78 69 |..8,BNE mmenuexi| 00001a20 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |t | 00001a30 3b 20 6e 6f 20 67 65 74 20 6f 75 74 0d 09 42 37 |; no get out..B7| 00001a40 42 4c 20 20 66 78 79 73 74 61 72 74 20 20 20 20 |BL fxystart | 00001a50 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 59 65 | ; Ye| 00001a60 73 20 2d 20 73 74 61 72 74 20 78 2f 79 20 65 76 |s - start x/y ev| 00001a70 65 6e 74 0d 09 4c 15 2e 6d 6d 65 6e 75 65 78 69 |ent..L..mmenuexi| 00001a80 74 20 a4 66 65 78 69 74 0d 09 56 05 3b 0d 09 60 |t .fexit..V.;..`| 00001a90 44 3b 20 78 2f 79 20 63 6c 69 63 6b 20 65 76 65 |D; x/y click eve| 00001aa0 6e 74 20 2d 20 77 65 20 75 73 65 20 74 68 65 20 |nt - we use the | 00001ab0 78 20 26 20 79 20 76 61 6c 75 65 20 72 65 74 75 |x & y value retu| 00001ac0 72 6e 65 64 20 61 73 20 74 68 65 20 4a 75 6c 69 |rned as the Juli| 00001ad0 61 0d 09 6a 20 3b 20 72 65 61 6c 20 61 6e 64 20 |a..j ; real and | 00001ae0 69 6d 61 67 69 6e 61 72 79 20 6e 75 6d 62 65 72 |imaginary number| 00001af0 73 0d 09 74 0b 2e 6d 78 79 70 6f 73 0d 09 7e 2e |s..t..mxypos..~.| 00001b00 a4 66 70 28 22 4c 44 46 44 20 46 30 2c 5b 52 31 |.fp("LDFD F0,[R1| 00001b10 2c 23 78 79 5f 78 5d 22 29 20 3b 20 4d 61 6e 64 |,#xy_x]") ; Mand| 00001b20 65 6c 20 78 20 76 61 6c 75 65 0d 09 88 32 a4 66 |el x value...2.f| 00001b30 70 28 22 53 54 46 44 20 46 30 2c 6a 72 22 29 20 |p("STFD F0,jr") | 00001b40 20 20 20 20 20 20 20 20 3b 20 62 65 63 6f 6d 65 | ; become| 00001b50 73 20 4a 75 6c 69 61 20 72 65 61 6c 0d 09 92 2e |s Julia real....| 00001b60 a4 66 70 28 22 4c 44 46 44 20 46 30 2c 5b 52 31 |.fp("LDFD F0,[R1| 00001b70 2c 23 78 79 5f 79 5d 22 29 20 3b 20 4d 61 6e 64 |,#xy_y]") ; Mand| 00001b80 65 6c 20 79 20 76 61 6c 75 65 0d 09 9c 37 a4 66 |el y value...7.f| 00001b90 70 28 22 53 54 46 44 20 46 30 2c 6a 63 22 29 20 |p("STFD F0,jc") | 00001ba0 20 20 20 20 20 20 20 20 3b 20 62 65 63 6f 6d 65 | ; become| 00001bb0 73 20 4a 75 6c 69 61 20 49 6d 61 67 69 6e 61 72 |s Julia Imaginar| 00001bc0 79 0d 09 a6 3b 41 44 52 20 52 30 2c 6a 75 6c 69 |y...;ADR R0,juli| 00001bd0 61 5f 66 75 6e 63 20 20 20 20 20 20 20 20 20 20 |a_func | 00001be0 3b 20 50 6f 69 6e 74 20 74 6f 20 4a 75 6c 69 61 |; Point to Julia| 00001bf0 27 73 20 6d 65 6e 75 20 6e 61 6d 65 0d 09 b0 45 |'s menu name...E| 00001c00 42 4c 20 66 6e 65 77 66 75 6e 63 20 20 20 20 20 |BL fnewfunc | 00001c10 20 20 20 20 20 20 20 20 20 20 20 3b 20 61 6e 64 | ; and| 00001c20 20 72 65 67 69 73 74 65 72 20 61 73 20 74 68 65 | register as the| 00001c30 20 63 75 72 72 65 6e 74 20 66 75 6e 63 74 69 6f | current functio| 00001c40 6e 0d 09 ba 0d 4d 4f 56 20 52 30 2c 23 31 0d 09 |n....MOV R0,#1..| 00001c50 c4 3d 53 54 52 20 52 30 2c 5b 52 31 2c 23 78 79 |.=STR R0,[R1,#xy| 00001c60 70 6f 73 5f 72 63 5d 20 20 20 20 20 20 3b 20 46 |pos_rc] ; F| 00001c70 6f 72 63 65 20 61 20 72 65 70 6c 6f 74 20 2d 20 |orce a replot - | 00001c80 69 65 20 6f 66 20 4a 75 6c 69 61 0d 09 ce 0a a4 |ie of Julia.....| 00001c90 66 65 78 69 74 0d 09 d8 43 3b 2d 2d 2d 2d 2d 2d |fexit...C;------| 00001ca0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| * 00001cd0 2d 2d 2d 2d 2d 2d 2d 2d 0d 09 e2 2b 3b 20 4e 6f |--------...+; No| 00001ce0 77 20 77 65 20 64 65 66 69 6e 65 20 4a 75 6c 69 |w we define Juli| 00001cf0 61 27 53 20 63 68 61 72 61 63 74 65 72 69 73 74 |a'S characterist| 00001d00 69 63 73 0d 09 ec 05 3b 0d 09 f6 5c 2e 6a 75 6c |ics....;...\.jul| 00001d10 69 61 5f 66 75 6e 63 20 a4 66 72 61 63 66 75 6e |ia_func .fracfun| 00001d20 63 28 22 53 61 6d 70 20 4a 75 6c 69 61 22 2c 6a |c("Samp Julia",j| 00001d30 75 6c 69 61 2c 66 5a 6f 6f 6d 2b 66 68 65 69 67 |ulia,fZoom+fheig| 00001d40 68 74 2b 66 78 79 2b 66 65 6d 65 6e 75 2c 30 2c |ht+fxy+femenu,0,| 00001d50 37 2c 6a 76 61 72 65 6e 64 2d 6a 76 61 72 73 74 |7,jvarend-jvarst| 00001d60 61 72 74 29 0d 0a 00 05 3b 0d 0a 0a 22 3b 20 4a |art)....;..."; J| 00001d70 75 6c 69 61 27 73 20 56 61 72 69 61 62 6c 65 73 |ulia's Variables| 00001d80 20 61 66 74 65 72 20 68 65 72 65 0d 0a 14 0e 2e | after here.....| 00001d90 6a 76 61 72 73 74 61 72 74 0d 0a 1e 2e a4 61 66 |jvarstart.....af| 00001da0 67 32 76 61 72 28 41 46 47 5f 64 62 6c 2c 30 2c |g2var(AFG_dbl,0,| 00001db0 38 29 3a 2e 6a 78 30 20 a4 66 70 28 22 44 46 44 |8):.jx0 .fp("DFD| 00001dc0 20 2d 31 2e 35 22 29 0d 0a 28 2e a4 61 66 67 32 | -1.5")..(..afg2| 00001dd0 76 61 72 28 41 46 47 5f 64 62 6c 2c 30 2c 38 29 |var(AFG_dbl,0,8)| 00001de0 3a 2e 6a 79 30 20 a4 66 70 28 22 44 46 44 20 2d |:.jy0 .fp("DFD -| 00001df0 31 2e 32 22 29 0d 0a 32 2c a4 61 66 67 32 76 61 |1.2")..2,.afg2va| 00001e00 72 28 41 46 47 5f 64 62 6c 2c 30 2c 38 29 3a 2e |r(AFG_dbl,0,8):.| 00001e10 6a 77 20 a4 66 70 28 22 44 46 44 20 33 2e 30 22 |jw .fp("DFD 3.0"| 00001e20 29 0d 0a 3c 2c a4 61 66 67 32 76 61 72 28 41 46 |)..<,.afg2var(AF| 00001e30 47 5f 64 62 6c 2c 30 2c 38 29 3a 2e 6a 68 20 a4 |G_dbl,0,8):.jh .| 00001e40 66 70 28 22 44 46 44 20 32 2e 34 22 29 0d 0a 46 |fp("DFD 2.4")..F| 00001e50 28 a4 61 66 67 32 76 61 72 28 41 46 47 5f 69 6e |(.afg2var(AFG_in| 00001e60 74 2c 30 2c 34 29 3a 2e 6a 69 74 65 72 20 44 43 |t,0,4):.jiter DC| 00001e70 44 20 31 32 38 0d 0a 50 32 a4 61 66 67 32 76 61 |D 128..P2.afg2va| 00001e80 72 28 41 46 47 5f 64 62 6c 2c 30 2c 38 29 3a 2e |r(AFG_dbl,0,8):.| 00001e90 6a 72 20 a4 66 70 28 22 44 46 44 20 2d 30 2e 37 |jr .fp("DFD -0.7| 00001ea0 34 35 34 32 38 22 29 0d 0a 5a 31 a4 61 66 67 32 |45428")..Z1.afg2| 00001eb0 76 61 72 28 41 46 47 5f 64 62 6c 2c 30 2c 38 29 |var(AFG_dbl,0,8)| 00001ec0 3a 2e 6a 63 20 a4 66 70 28 22 44 46 44 20 30 2e |:.jc .fp("DFD 0.| 00001ed0 31 31 33 30 30 39 22 29 0d 0a 64 1f 2e 6a 76 61 |113009")..d..jva| 00001ee0 72 65 6e 64 20 3b 20 45 6e 64 20 6f 66 20 76 61 |rend ; End of va| 00001ef0 72 69 61 62 6c 65 73 0d 0a 6e 05 3b 0d 0a 78 3a |riables..n.;..x:| 00001f00 3b 20 56 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 |; Variable names| 00001f10 20 61 66 74 65 72 20 68 65 72 65 3b 20 31 20 66 | after here; 1 f| 00001f20 6f 72 20 65 61 63 68 20 76 61 72 69 61 62 6c 65 |or each variable| 00001f30 20 61 62 6f 76 65 0d 0a 82 1b a4 76 61 72 6e 61 | above.....varna| 00001f40 6d 65 28 22 20 20 20 20 20 20 20 20 20 78 30 22 |me(" x0"| 00001f50 29 0d 0a 8c 1b a4 76 61 72 6e 61 6d 65 28 22 20 |).....varname(" | 00001f60 20 20 20 20 20 20 20 20 79 30 22 29 0d 0a 96 1b | y0")....| 00001f70 a4 76 61 72 6e 61 6d 65 28 22 20 20 20 20 20 20 |.varname(" | 00001f80 77 69 64 74 68 22 29 0d 0a a0 1b a4 76 61 72 6e |width").....varn| 00001f90 61 6d 65 28 22 20 20 20 20 20 68 65 69 67 68 74 |ame(" height| 00001fa0 22 29 0d 0a aa 1b a4 76 61 72 6e 61 6d 65 28 22 |").....varname("| 00001fb0 20 20 4d 61 78 2e 20 49 74 65 72 22 29 0d 0a b4 | Max. Iter")...| 00001fc0 1b a4 76 61 72 6e 61 6d 65 28 22 20 20 20 20 20 |..varname(" | 00001fd0 63 20 52 65 61 6c 22 29 0d 0a be 1b a4 76 61 72 |c Real").....var| 00001fe0 6e 61 6d 65 28 22 63 20 49 6d 61 67 69 6e 61 72 |name("c Imaginar| 00001ff0 79 22 29 0d 0a c8 2a 3b 2d 2d 2d 2d 2d 2d 2d 2d |y")...*;--------| 00002000 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00002010 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a d2 |-------------...| 00002020 1e 3b 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 |.; The entry poi| 00002030 6e 74 20 74 6f 20 4a 75 6c 69 61 0d 0a dc 0a 2e |nt to Julia.....| 00002040 6a 75 6c 69 61 0d 0a e6 18 a4 66 65 6e 74 65 72 |julia.....fenter| 00002050 20 3b 20 49 6e 69 74 69 61 6c 69 73 65 0d 0a f0 | ; Initialise...| 00002060 2a 3b 20 52 30 3d 46 72 61 63 74 61 6c 20 45 76 |*; R0=Fractal Ev| 00002070 65 6e 74 2c 20 52 31 3d 41 64 64 72 65 73 73 20 |ent, R1=Address | 00002080 6f 66 20 44 61 74 61 0d 0a fa 0d 4d 4f 56 20 52 |of Data....MOV R| 00002090 39 2c 23 30 0d 0b 04 2e 53 54 52 20 52 39 2c 5b |9,#0....STR R9,[| 000020a0 52 31 2c 23 66 65 76 65 6e 74 5f 72 63 5d 20 3b |R1,#fevent_rc] ;| 000020b0 20 63 6c 65 61 72 20 72 65 74 75 72 6e 20 63 6f | clear return co| 000020c0 64 65 0d 0b 0e 15 43 4d 50 20 52 30 2c 23 66 70 |de....CMP R0,#fp| 000020d0 6c 6f 74 69 6e 69 74 0d 0b 18 11 42 45 51 20 6a |lotinit....BEQ j| 000020e0 70 6c 6f 74 69 6e 69 74 0d 0b 22 15 43 4d 50 20 |plotinit..".CMP | 000020f0 52 30 2c 23 66 64 61 74 61 69 6e 69 74 0d 0b 2c |R0,#fdatainit..,| 00002100 11 42 45 51 20 6a 64 61 74 61 69 6e 69 74 0d 0b |.BEQ jdatainit..| 00002110 36 15 43 4d 50 20 52 30 2c 23 66 6d 65 6e 75 69 |6.CMP R0,#fmenui| 00002120 6e 69 74 0d 0b 40 11 42 45 51 20 6a 6d 65 6e 75 |nit..@.BEQ jmenu| 00002130 69 6e 69 74 0d 0b 4a 16 43 4d 50 20 52 30 2c 23 |init..J.CMP R0,#| 00002140 66 6d 65 6e 75 63 6c 69 63 6b 0d 0b 54 12 42 45 |fmenuclick..T.BE| 00002150 51 20 6a 6d 65 6e 75 63 6c 69 63 6b 0d 0b 5e 14 |Q jmenuclick..^.| 00002160 43 4d 50 20 52 30 2c 23 66 64 61 74 61 63 68 6b |CMP R0,#fdatachk| 00002170 0d 0b 68 10 42 45 51 20 6a 64 61 74 61 63 68 6b |..h.BEQ jdatachk| 00002180 0d 0b 72 25 3b 20 55 6e 73 75 70 70 6f 72 74 65 |..r%; Unsupporte| 00002190 64 20 65 76 65 6e 74 20 2d 20 6a 75 73 74 20 72 |d event - just r| 000021a0 65 74 75 72 6e 0d 0b 7c 0a a4 66 65 78 69 74 0d |eturn..|..fexit.| 000021b0 0b 86 05 3b 0d 0b 90 15 3b 20 49 6e 69 74 20 4a |...;....; Init J| 000021c0 75 6c 69 61 20 64 61 74 61 0d 0b 9a 0e 2e 6a 64 |ulia data.....jd| 000021d0 61 74 61 69 6e 69 74 0d 0b a4 16 a4 66 70 28 22 |atainit.....fp("| 000021e0 4c 44 46 44 20 46 30 2c 69 6a 78 22 29 0d 0b ae |LDFD F0,ijx")...| 000021f0 16 a4 66 70 28 22 53 54 46 44 20 46 30 2c 6a 78 |..fp("STFD F0,jx| 00002200 30 22 29 0d 0b b8 16 a4 66 70 28 22 4c 44 46 44 |0").....fp("LDFD| 00002210 20 46 30 2c 69 6a 79 22 29 0d 0b c2 16 a4 66 70 | F0,ijy").....fp| 00002220 28 22 53 54 46 44 20 46 30 2c 6a 79 30 22 29 0d |("STFD F0,jy0").| 00002230 0b cc 16 a4 66 70 28 22 4c 44 46 44 20 46 30 2c |....fp("LDFD F0,| 00002240 69 6a 77 22 29 0d 0b d6 16 a4 66 70 28 22 53 54 |ijw").....fp("ST| 00002250 46 44 20 46 30 2c 6a 77 20 22 29 0d 0b e0 16 a4 |FD F0,jw ").....| 00002260 66 70 28 22 4c 44 46 44 20 46 30 2c 69 6a 68 22 |fp("LDFD F0,ijh"| 00002270 29 0d 0b ea 16 a4 66 70 28 22 53 54 46 44 20 46 |).....fp("STFD F| 00002280 30 2c 6a 68 20 22 29 0d 0b f4 11 4c 44 52 20 52 |0,jh ")....LDR R| 00002290 30 2c 69 6a 69 74 65 72 0d 0b fe 10 53 54 52 20 |0,ijiter....STR | 000022a0 52 30 2c 6a 69 74 65 72 0d 0c 08 16 a4 66 70 28 |R0,jiter.....fp(| 000022b0 22 4c 44 46 44 20 46 30 2c 69 6a 72 22 29 0d 0c |"LDFD F0,ijr")..| 000022c0 12 16 a4 66 70 28 22 53 54 46 44 20 46 30 2c 6a |...fp("STFD F0,j| 000022d0 72 20 22 29 0d 0c 1c 16 a4 66 70 28 22 4c 44 46 |r ").....fp("LDF| 000022e0 44 20 46 30 2c 69 6a 63 22 29 0d 0c 26 16 a4 66 |D F0,ijc")..&..f| 000022f0 70 28 22 53 54 46 44 20 46 30 2c 6a 63 20 22 29 |p("STFD F0,jc ")| 00002300 0d 0c 30 0a a4 66 65 78 69 74 0d 0c 3a 04 0d 0c |..0..fexit..:...| 00002310 44 29 2e 69 6a 78 20 a4 66 70 28 22 44 46 44 20 |D).ijx .fp("DFD | 00002320 2d 31 2e 35 22 29 20 3b 20 49 6e 69 74 69 61 6c |-1.5") ; Initial| 00002330 20 76 61 6c 75 65 73 0d 0c 4e 18 2e 69 6a 79 20 | values..N..ijy | 00002340 a4 66 70 28 22 44 46 44 20 2d 31 2e 32 22 29 0d |.fp("DFD -1.2").| 00002350 0c 58 17 2e 69 6a 77 20 a4 66 70 28 22 44 46 44 |.X..ijw .fp("DFD| 00002360 20 33 2e 30 22 29 0d 0c 62 17 2e 69 6a 68 20 a4 | 3.0")..b..ijh .| 00002370 66 70 28 22 44 46 44 20 32 2e 34 22 29 0d 0c 6c |fp("DFD 2.4")..l| 00002380 13 2e 69 6a 69 74 65 72 20 44 43 44 20 31 32 38 |..ijiter DCD 128| 00002390 0d 0c 76 1d 2e 69 6a 72 20 a4 66 70 28 22 44 46 |..v..ijr .fp("DF| 000023a0 44 20 2d 30 2e 37 34 35 34 32 38 22 29 0d 0c 80 |D -0.745428")...| 000023b0 1c 2e 69 6a 63 20 a4 66 70 28 22 44 46 44 20 30 |..ijc .fp("DFD 0| 000023c0 2e 31 31 33 30 30 39 22 29 0d 0c 8a 05 3b 0d 0c |.113009")....;..| 000023d0 94 25 3b 20 56 65 72 69 66 79 20 64 61 74 61 20 |.%; Verify data | 000023e0 69 6e 70 75 74 20 6f 72 20 7a 6f 6f 6d 20 72 61 |input or zoom ra| 000023f0 6e 67 65 0d 0c 9e 0d 2e 6a 64 61 74 61 63 68 6b |nge.....jdatachk| 00002400 0d 0c a8 16 a4 66 70 28 22 4c 44 46 44 20 46 30 |.....fp("LDFD F0| 00002410 2c 6a 78 30 22 29 0d 0c b2 22 a4 66 70 28 22 43 |,jx0")...".fp("C| 00002420 4e 46 44 20 46 30 2c 23 31 30 22 29 20 20 20 20 |NFD F0,#10") | 00002430 20 3b 20 3c 2d 31 30 3f 0d 0c bc 2a 42 4c 54 20 | ; <-10?...*BLT | 00002440 20 62 61 64 64 61 74 61 20 20 20 20 20 20 20 20 | baddata | 00002450 20 20 20 20 3b 20 78 30 20 74 6f 6f 20 73 6d 61 | ; x0 too sma| 00002460 6c 6c 0d 0c c6 05 3b 0d 0c d0 22 a4 66 70 28 22 |ll....;...".fp("| 00002470 4c 44 46 44 20 46 32 2c 6a 77 20 22 29 20 20 20 |LDFD F2,jw ") | 00002480 20 20 3b 20 77 69 64 74 68 0d 0c da 20 a4 66 70 | ; width... .fp| 00002490 28 22 41 44 46 44 20 46 30 2c 46 30 2c 46 32 22 |("ADFD F0,F0,F2"| 000024a0 29 20 20 20 3b 20 78 2b 77 0d 0c e4 21 a4 66 70 |) ; x+w...!.fp| 000024b0 28 22 43 4d 46 44 20 46 30 2c 23 31 30 22 29 20 |("CMFD F0,#10") | 000024c0 20 20 20 20 3b 20 3e 31 30 3f 0d 0c ee 29 42 47 | ; >10?...)BG| 000024d0 54 20 20 62 61 64 64 61 74 61 20 20 20 20 20 20 |T baddata | 000024e0 20 20 20 20 20 20 3b 20 78 20 74 6f 6f 20 6c 61 | ; x too la| 000024f0 72 67 65 0d 0c f8 05 3b 0d 0d 02 16 a4 66 70 28 |rge....;.....fp(| 00002500 22 4c 44 46 44 20 46 30 2c 6a 79 30 22 29 0d 0d |"LDFD F0,jy0")..| 00002510 0c 22 a4 66 70 28 22 43 4e 46 44 20 46 30 2c 23 |.".fp("CNFD F0,#| 00002520 31 30 22 29 20 20 20 20 20 3b 20 3c 2d 31 30 3f |10") ; <-10?| 00002530 0d 0d 16 2a 42 4c 54 20 20 62 61 64 64 61 74 61 |...*BLT baddata| 00002540 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 79 30 | ; y0| 00002550 20 74 6f 6f 20 73 6d 61 6c 6c 0d 0d 20 05 3b 0d | too small.. .;.| 00002560 0d 2a 23 a4 66 70 28 22 4c 44 46 44 20 46 33 2c |.*#.fp("LDFD F3,| 00002570 6a 68 20 22 29 20 20 20 20 20 3b 20 68 65 69 67 |jh ") ; heig| 00002580 68 74 0d 0d 34 20 a4 66 70 28 22 41 44 46 44 20 |ht..4 .fp("ADFD | 00002590 46 30 2c 46 30 2c 46 32 22 29 20 20 20 3b 20 79 |F0,F0,F2") ; y| 000025a0 2b 77 0d 0d 3e 21 a4 66 70 28 22 43 4d 46 44 20 |+w..>!.fp("CMFD | 000025b0 46 30 2c 23 31 30 22 29 20 20 20 20 20 3b 20 3e |F0,#10") ; >| 000025c0 31 30 3f 0d 0d 48 29 42 47 54 20 20 62 61 64 64 |10?..H)BGT badd| 000025d0 61 74 61 20 20 20 20 20 20 20 20 20 20 20 20 3b |ata ;| 000025e0 20 79 20 74 6f 6f 20 6c 61 72 67 65 0d 0d 52 05 | y too large..R.| 000025f0 3b 0d 0d 5c 42 3b 20 46 6f 72 20 77 69 64 74 68 |;..\B; For width| 00002600 20 26 20 68 65 69 67 68 74 2c 20 63 68 65 63 6b | & height, check| 00002610 20 6e 6f 74 20 73 6d 61 6c 6c 65 72 20 74 68 61 | not smaller tha| 00002620 6e 20 69 6e 74 65 67 65 72 20 66 70 20 72 61 6e |n integer fp ran| 00002630 67 65 2e 0d 0d 66 3d 3b 20 46 6f 72 20 4a 75 6c |ge...f=; For Jul| 00002640 69 61 27 73 2c 20 74 68 65 20 73 6d 61 6c 6c 65 |ia's, the smalle| 00002650 73 74 20 64 65 6c 74 61 20 69 73 20 61 70 70 72 |st delta is appr| 00002660 6f 78 20 32 65 2d 38 20 77 68 69 63 68 20 69 73 |ox 2e-8 which is| 00002670 0d 0d 70 43 3b 20 61 72 6f 75 6e 64 20 31 65 2d |..pC; around 1e-| 00002680 35 20 61 73 20 61 20 77 69 64 74 68 20 76 61 6c |5 as a width val| 00002690 75 65 20 28 77 65 20 64 6f 6e 27 74 20 6b 6e 6f |ue (we don't kno| 000026a0 77 20 69 6d 61 67 65 20 77 69 64 74 68 20 68 65 |w image width he| 000026b0 72 65 29 0d 0d 7a 3a a4 66 70 28 22 4c 44 46 44 |re)..z:.fp("LDFD| 000026c0 20 46 31 2c 6a 6d 69 6e 69 6e 74 22 29 20 3b 20 | F1,jminint") ; | 000026d0 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 |smallest value f| 000026e0 6f 72 20 66 70 20 69 6e 74 65 67 65 72 0d 0d 84 |or fp integer...| 000026f0 32 a4 66 70 28 22 43 4d 46 44 20 46 32 2c 46 31 |2.fp("CMFD F2,F1| 00002700 22 29 20 20 20 20 20 3b 20 77 69 74 68 69 6e 20 |") ; within | 00002710 61 63 63 75 72 61 63 79 20 72 61 6e 67 65 3f 0d |accuracy range?.| 00002720 0d 8e 28 42 4c 54 20 20 62 61 64 64 61 74 61 20 |..(BLT baddata | 00002730 20 20 20 20 20 20 20 20 20 20 3b 20 77 20 74 6f | ; w to| 00002740 6f 20 73 6d 61 6c 6c 0d 0d 98 32 a4 66 70 28 22 |o small...2.fp("| 00002750 43 4d 46 44 20 46 33 2c 46 31 22 29 20 20 20 20 |CMFD F3,F1") | 00002760 20 3b 20 77 69 74 68 69 6e 20 61 63 63 75 72 61 | ; within accura| 00002770 63 79 20 72 61 6e 67 65 3f 0d 0d a2 28 42 4c 54 |cy range?...(BLT| 00002780 20 20 62 61 64 64 61 74 61 20 20 20 20 20 20 20 | baddata | 00002790 20 20 20 20 3b 20 68 20 74 6f 6f 20 73 6d 61 6c | ; h too smal| 000027a0 6c 0d 0d ac 05 3b 0d 0d b6 22 3b 20 56 65 72 69 |l....;..."; Veri| 000027b0 66 79 20 6d 61 78 69 74 65 72 20 6e 6f 74 20 74 |fy maxiter not t| 000027c0 6f 6f 20 73 6d 61 6c 6c 0d 0d c0 10 4c 44 52 20 |oo small....LDR | 000027d0 52 30 2c 6a 69 74 65 72 0d 0d ca 27 43 4d 50 20 |R0,jiter...'CMP | 000027e0 52 30 2c 23 31 30 20 20 20 20 20 20 20 20 20 20 |R0,#10 | 000027f0 20 20 20 3b 20 74 6f 6f 20 73 6d 61 6c 6c 3f 0d | ; too small?.| 00002800 0d d4 10 4d 4f 56 4c 54 20 52 30 2c 23 31 30 0d |...MOVLT R0,#10.| 00002810 0d de 2c 53 54 52 4c 54 20 52 30 2c 6a 69 74 65 |..,STRLT R0,jite| 00002820 72 20 20 20 20 20 20 20 20 20 3b 20 79 65 73 20 |r ; yes | 00002830 2d 20 73 65 74 20 74 6f 20 31 30 0d 0d e8 05 3b |- set to 10....;| 00002840 0d 0d f2 0a a4 66 65 78 69 74 0d 0d fc 05 3b 0d |.....fexit....;.| 00002850 0e 06 1c 2e 6a 6d 69 6e 69 6e 74 20 a4 66 70 28 |....jminint .fp(| 00002860 22 44 46 44 20 31 65 2d 35 22 29 0d 0e 10 1f 3b |"DFD 1e-5")....;| 00002870 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00002880 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0e 1a 19 3b 20 |----------....; | 00002890 4a 75 6c 69 61 20 4d 65 6e 75 20 72 6f 75 74 69 |Julia Menu routi| 000028a0 6e 65 73 0d 0e 24 0e 2e 6a 6d 65 6e 75 69 6e 69 |nes..$..jmenuini| 000028b0 74 0d 0e 2e 33 41 44 52 20 52 30 2c 6a 6d 65 6e |t...3ADR R0,jmen| 000028c0 75 20 20 20 20 3b 20 50 61 73 73 20 62 61 63 6b |u ; Pass back| 000028d0 20 61 64 64 72 65 73 73 20 6f 66 20 6f 75 72 20 | address of our | 000028e0 6d 65 6e 75 0d 0e 38 1f 53 54 52 20 52 30 2c 5b |menu..8.STR R0,[| 000028f0 52 31 2c 23 6d 65 6e 75 69 6e 69 74 5f 66 6d 65 |R1,#menuinit_fme| 00002900 6e 75 5d 0d 0e 42 0a a4 66 65 78 69 74 0d 0e 4c |nu]..B..fexit..L| 00002910 26 2e 6a 6d 65 6e 75 20 a4 66 6d 65 6e 75 5f 68 |&.jmenu .fmenu_h| 00002920 64 72 28 22 53 61 6d 70 20 4a 75 6c 69 61 22 2c |dr("Samp Julia",| 00002930 31 32 29 0d 0e 56 46 a4 66 6d 65 6e 75 5f 69 74 |12)..VF.fmenu_it| 00002940 65 6d 28 22 53 61 6d 70 20 4d 61 6e 64 65 6c 22 |em("Samp Mandel"| 00002950 2c 2d 31 2c 4c 41 53 54 29 20 20 20 3b 20 46 6f |,-1,LAST) ; Fo| 00002960 72 20 73 77 69 74 63 68 69 6e 67 20 74 6f 20 6d |r switching to m| 00002970 61 6e 64 65 6c 62 72 6f 74 0d 0e 60 05 3b 0d 0e |andelbrot..`.;..| 00002980 6a 22 3b 20 55 73 65 72 20 68 61 73 20 63 6c 69 |j"; User has cli| 00002990 63 6b 65 64 20 6f 6e 20 6f 75 72 20 6d 65 6e 75 |cked on our menu| 000029a0 0d 0e 74 0f 2e 6a 6d 65 6e 75 63 6c 69 63 6b 0d |..t..jmenuclick.| 000029b0 0e 7e 3b 4c 44 52 20 52 32 2c 5b 52 31 2c 23 6d |.~;LDR R2,[R1,#m| 000029c0 65 6e 75 63 6c 69 63 6b 5f 6d 65 6e 75 5d 20 3b |enuclick_menu] ;| 000029d0 20 47 65 74 20 70 6f 69 6e 74 65 72 20 74 6f 20 | Get pointer to | 000029e0 6d 65 6e 75 20 61 72 72 61 79 0d 0e 88 3f 4c 44 |menu array...?LD| 000029f0 52 20 52 30 2c 5b 52 32 2c 23 34 5d 20 20 20 20 |R R0,[R2,#4] | 00002a00 20 20 20 20 20 20 20 20 20 20 3b 20 47 65 74 20 | ; Get | 00002a10 69 74 65 6d 20 6e 75 6d 62 65 72 20 66 72 6f 6d |item number from| 00002a20 20 73 75 62 5f 6d 65 6e 75 0d 0e 92 3b 43 4d 50 | sub_menu...;CMP| 00002a30 20 52 30 2c 23 30 20 20 20 20 20 20 20 20 20 20 | R0,#0 | 00002a40 20 20 20 20 20 20 20 20 20 3b 20 4d 61 6e 64 65 | ; Mande| 00002a50 6c 20 73 65 6c 65 63 74 3f 20 28 31 73 74 20 69 |l select? (1st i| 00002a60 74 65 6d 29 0d 0e 9c 2e 42 4e 45 20 6a 6d 65 6e |tem)....BNE jmen| 00002a70 75 65 78 69 74 20 20 20 20 20 20 20 20 20 20 20 |uexit | 00002a80 20 20 20 20 3b 20 6e 6f 20 2d 20 67 65 74 20 6f | ; no - get o| 00002a90 75 74 0d 0e a6 40 41 44 52 20 52 30 2c 6a 6d 66 |ut...@ADR R0,jmf| 00002aa0 70 74 72 20 20 20 20 20 20 20 20 20 20 20 20 20 |ptr | 00002ab0 20 20 3b 20 63 61 6c 63 20 70 74 72 20 74 6f 20 | ; calc ptr to | 00002ac0 4d 61 6e 64 65 6c 27 73 20 6d 65 6e 75 20 6e 61 |Mandel's menu na| 00002ad0 6d 65 0d 0e b0 21 4c 44 52 20 52 33 2c 6a 6d 66 |me...!LDR R3,jmf| 00002ae0 70 74 72 20 20 20 20 20 20 20 20 20 20 20 20 20 |ptr | 00002af0 20 20 3b 0d 0e ba 49 53 55 42 20 52 30 2c 52 30 | ;...ISUB R0,R0| 00002b00 2c 52 33 20 20 20 20 20 20 20 20 20 20 20 20 20 |,R3 | 00002b10 20 20 20 3b 20 41 64 64 72 65 73 73 20 6f 66 20 | ; Address of | 00002b20 6a 6d 66 70 74 72 2d 6f 66 66 73 65 74 20 74 6f |jmfptr-offset to| 00002b30 20 6d 61 6e 64 65 6c 5f 66 75 6e 63 0d 0e c4 46 | mandel_func...F| 00002b40 42 4c 20 66 6e 65 77 66 75 6e 63 20 20 20 20 20 |BL fnewfunc | 00002b50 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 61 6e | ; an| 00002b60 64 20 72 65 67 69 73 74 65 72 20 61 73 20 74 68 |d register as th| 00002b70 65 20 63 75 72 72 65 6e 74 20 66 75 6e 63 74 69 |e current functi| 00002b80 6f 6e 0d 0e ce 0d 4d 4f 56 20 52 30 2c 23 31 0d |on....MOV R0,#1.| 00002b90 0e d8 44 53 54 52 20 52 30 2c 5b 52 31 2c 23 6d |..DSTR R0,[R1,#m| 00002ba0 65 6e 75 63 6c 69 63 6b 5f 72 63 5d 20 20 20 3b |enuclick_rc] ;| 00002bb0 20 59 65 73 20 2d 20 66 6f 72 63 65 20 61 20 72 | Yes - force a r| 00002bc0 65 70 6c 6f 74 20 6f 66 20 6d 61 6e 64 65 6c 62 |eplot of mandelb| 00002bd0 72 6f 74 0d 0e e2 15 2e 6a 6d 65 6e 75 65 78 69 |rot.....jmenuexi| 00002be0 74 20 a4 66 65 78 69 74 0d 0e ec 3c 2e 6a 6d 66 |t .fexit...<.jmf| 00002bf0 70 74 72 20 44 43 44 20 50 25 2d 6d 61 6e 64 65 |ptr DCD P%-mande| 00002c00 6c 5f 66 75 6e 63 20 20 3b 20 4f 66 66 73 65 74 |l_func ; Offset| 00002c10 20 74 6f 20 6d 61 6e 64 65 6c 5f 66 75 6e 63 20 | to mandel_func | 00002c20 6e 61 6d 65 0d 0e f6 2a 3b 2d 2d 2d 2d 2d 2d 2d |name...*;-------| 00002c30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00002c40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0f |--------------..| 00002c50 00 21 3b 20 49 6e 69 74 69 61 6c 69 73 65 20 72 |.!; Initialise r| 00002c60 65 61 64 79 20 66 6f 72 20 61 20 70 6c 6f 74 0d |eady for a plot.| 00002c70 0f 0a 0e 2e 6a 70 6c 6f 74 69 6e 69 74 0d 0f 14 |....jplotinit...| 00002c80 1b 4c 44 52 20 52 30 2c 5b 52 31 2c 23 70 6c 6f |.LDR R0,[R1,#plo| 00002c90 74 5f 66 6c 61 67 73 5d 0d 0f 1e 28 84 52 20 52 |t_flags]...(.R R| 00002ca0 30 2c 52 30 2c 23 70 6c 6f 74 5f 69 6e 74 32 37 |0,R0,#plot_int27| 00002cb0 20 20 20 3b 20 69 6e 74 32 37 20 6d 61 74 68 73 | ; int27 maths| 00002cc0 0d 0f 28 2a 53 54 52 20 52 30 2c 5b 52 31 2c 23 |..(*STR R0,[R1,#| 00002cd0 70 6c 6f 74 5f 66 6c 61 67 73 5d 20 3b 20 74 65 |plot_flags] ; te| 00002ce0 6c 6c 20 46 72 61 63 74 61 6c 0d 0f 32 28 3b 20 |ll Fractal..2(; | 00002cf0 69 66 20 64 65 6c 74 61 79 20 3e 20 34 65 2d 33 |if deltay > 4e-3| 00002d00 20 75 73 65 20 71 75 69 63 6b 20 72 6f 75 74 69 | use quick routi| 00002d10 6e 65 0d 0f 3c 2d 4c 44 52 20 52 32 2c 5b 52 31 |ne..<-LDR R2,[R1| 00002d20 2c 23 70 6c 6f 74 5f 69 6d 5f 68 5d 20 3b 20 48 |,#plot_im_h] ; H| 00002d30 65 69 67 68 74 20 69 6e 20 70 69 78 65 6c 73 0d |eight in pixels.| 00002d40 0f 46 15 a4 66 70 28 22 46 4c 54 44 20 46 32 2c |.F..fp("FLTD F2,| 00002d50 52 32 22 29 0d 0f 50 24 a4 66 70 28 22 4c 44 46 |R2")..P$.fp("LDF| 00002d60 44 20 46 30 2c 6a 68 22 29 20 3b 20 6a 75 6c 69 |D F0,jh") ; juli| 00002d70 61 20 68 65 69 67 68 74 0d 0f 5a 22 a4 66 70 28 |a height..Z".fp(| 00002d80 22 44 56 46 44 20 46 31 2c 46 30 2c 46 32 22 29 |"DVFD F1,F0,F2")| 00002d90 20 3b 20 64 65 6c 74 61 20 79 0d 0f 64 19 a4 66 | ; delta y..d..f| 00002da0 70 28 22 4c 44 46 44 20 46 33 2c 6a 71 75 69 63 |p("LDFD F3,jquic| 00002db0 6b 22 29 0d 0f 6e 2b a4 66 70 28 22 43 4d 46 44 |k")..n+.fp("CMFD| 00002dc0 20 46 31 2c 46 33 22 29 20 20 20 20 20 20 3b 20 | F1,F3") ; | 00002dd0 6c 61 72 67 65 20 64 65 6c 74 61 20 79 3f 0d 0f |large delta y?..| 00002de0 78 35 41 44 52 47 45 20 52 30 2c 6a 75 6c 69 61 |x5ADRGE R0,julia| 00002df0 31 36 20 20 20 20 20 20 20 20 3b 20 79 65 73 20 |16 ; yes | 00002e00 2d 20 75 73 65 20 71 75 69 63 6b 20 72 6f 75 74 |- use quick rout| 00002e10 69 6e 65 0d 0f 82 2f 41 44 52 4c 54 20 52 30 2c |ine.../ADRLT R0,| 00002e20 6a 75 6c 69 61 33 32 20 20 20 20 20 20 20 20 3b |julia32 ;| 00002e30 20 6e 6f 20 2d 20 6e 6f 72 6d 61 6c 20 73 70 65 | no - normal spe| 00002e40 65 64 0d 0f 8c 35 53 54 52 20 52 30 2c 6a 75 6c |ed...5STR R0,jul| 00002e50 69 61 5f 66 75 6e 63 2b 66 64 65 66 6e 5f 78 79 |ia_func+fdefn_xy| 00002e60 72 74 6e 20 20 3b 20 4f 75 72 20 70 6c 6f 74 20 |rtn ; Our plot | 00002e70 72 6f 75 74 69 6e 65 0d 0f 96 05 3b 0d 0f a0 29 |routine....;...)| 00002e80 3b 20 47 65 74 20 63 52 65 61 6c 20 61 6e 64 20 |; Get cReal and | 00002e90 63 49 6d 61 67 69 6e 61 72 79 20 74 6f 20 69 6e |cImaginary to in| 00002ea0 74 65 67 65 72 0d 0f aa 2a 4d 4f 56 20 52 31 31 |teger...*MOV R11| 00002eb0 2c 23 53 43 41 4c 45 20 3b 20 49 6e 74 65 67 65 |,#SCALE ; Intege| 00002ec0 72 20 66 70 20 6d 75 6c 74 69 70 6c 69 65 72 0d |r fp multiplier.| 00002ed0 0f b4 21 a4 66 70 20 28 22 46 4c 54 44 20 46 33 |..!.fp ("FLTD F3| 00002ee0 2c 52 31 31 22 29 20 20 20 3b 20 54 6f 20 66 70 |,R11") ; To fp| 00002ef0 0d 0f be 22 a4 66 70 28 22 4c 44 46 44 20 46 30 |...".fp("LDFD F0| 00002f00 2c 6a 72 22 29 20 20 20 20 20 3b 20 63 20 52 65 |,jr") ; c Re| 00002f10 61 6c 0d 0f c8 37 a4 66 70 28 22 4d 55 46 44 20 |al...7.fp("MUFD | 00002f20 46 32 2c 46 30 2c 46 33 22 29 20 20 3b 20 63 6f |F2,F0,F3") ; co| 00002f30 6e 76 65 72 74 20 74 6f 20 69 6e 74 65 67 65 72 |nvert to integer| 00002f40 20 66 70 20 76 61 6c 75 65 0d 0f d2 15 a4 66 70 | fp value.....fp| 00002f50 28 22 46 49 58 44 20 52 32 2c 46 32 22 29 0d 0f |("FIXD R2,F2")..| 00002f60 dc 10 53 54 52 20 52 32 2c 6a 69 6e 74 72 0d 0f |..STR R2,jintr..| 00002f70 e6 27 a4 66 70 28 22 4c 44 46 44 20 46 30 2c 6a |.'.fp("LDFD F0,j| 00002f80 63 22 29 20 20 20 20 20 3b 20 63 20 49 6d 61 67 |c") ; c Imag| 00002f90 69 6e 61 72 79 0d 0f f0 37 a4 66 70 28 22 4d 55 |inary...7.fp("MU| 00002fa0 46 44 20 46 32 2c 46 30 2c 46 33 22 29 20 20 3b |FD F2,F0,F3") ;| 00002fb0 20 63 6f 6e 76 65 72 74 20 74 6f 20 69 6e 74 65 | convert to inte| 00002fc0 67 65 72 20 66 70 20 76 61 6c 75 65 0d 0f fa 15 |ger fp value....| 00002fd0 a4 66 70 28 22 46 49 58 44 20 52 32 2c 46 32 22 |.fp("FIXD R2,F2"| 00002fe0 29 0d 10 04 10 53 54 52 20 52 32 2c 6a 69 6e 74 |)....STR R2,jint| 00002ff0 63 0d 10 0e 0a a4 66 65 78 69 74 0d 10 18 05 3b |c.....fexit....;| 00003000 0d 10 22 1b 2e 6a 71 75 69 63 6b 20 a4 66 70 28 |.."..jquick .fp(| 00003010 22 44 46 44 20 34 65 2d 33 22 29 0d 10 2c 25 2e |"DFD 4e-3")..,%.| 00003020 6a 69 6e 74 72 20 20 20 44 43 44 20 30 20 3b 20 |jintr DCD 0 ; | 00003030 63 52 65 61 6c 20 69 6e 20 69 6e 74 65 67 65 72 |cReal in integer| 00003040 0d 10 36 2a 2e 6a 69 6e 74 63 20 20 20 44 43 44 |..6*.jintc DCD| 00003050 20 30 20 3b 20 63 49 6d 61 67 69 6e 61 72 79 20 | 0 ; cImaginary | 00003060 69 6e 20 69 6e 74 65 67 65 72 0d 10 40 05 3b 0d |in integer..@.;.| 00003070 10 4a 18 3b 20 4a 75 6c 69 61 20 70 6c 6f 74 20 |.J.; Julia plot | 00003080 72 6f 75 74 69 6e 65 0d 10 54 05 5d 0d 10 5e 2e |routine..T.]..^.| 00003090 f4 20 4a 75 6c 69 61 27 73 20 72 65 67 69 73 74 |. Julia's regist| 000030a0 65 72 73 20 2d 20 73 61 6d 65 20 61 73 20 4d 61 |ers - same as Ma| 000030b0 6e 64 65 6c 62 72 6f 74 27 73 0d 10 68 38 78 3d |ndelbrot's..h8x=| 000030c0 30 3a 79 3d 31 3a 75 75 3d 32 3a 76 76 3d 33 3a |0:y=1:uu=2:vv=3:| 000030d0 75 3d 34 3a 76 3d 35 3a 72 3d 36 3a 64 65 70 74 |u=4:v=5:r=6:dept| 000030e0 68 3d 37 3a 6d 61 78 3d 38 3a 6d 3d 39 3a 6e 3d |h=7:max=8:m=9:n=| 000030f0 31 30 0d 10 72 0c 5b 4f 50 54 20 61 73 6d 0d 10 |10..r.[OPT asm..| 00003100 7c 14 3b 20 33 32 20 62 69 74 20 76 65 72 73 69 ||.; 32 bit versi| 00003110 6f 6e 0d 10 86 0c 2e 6a 75 6c 69 61 33 32 0d 10 |on.....julia32..| 00003120 90 18 3b 20 52 65 73 69 64 65 6e 74 20 63 6f 6e |..; Resident con| 00003130 73 74 61 6e 74 73 0d 10 9a 0b 4d 4f 56 20 75 2c |stants....MOV u,| 00003140 78 0d 10 a4 0b 4d 4f 56 20 76 2c 79 0d 10 ae 23 |x....MOV v,y...#| 00003150 4c 44 52 20 78 2c 6a 69 6e 74 72 20 20 20 20 20 |LDR x,jintr | 00003160 20 20 20 20 20 20 20 20 3b 20 63 52 65 61 6c 0d | ; cReal.| 00003170 10 b8 28 4c 44 52 20 79 2c 6a 69 6e 74 63 20 20 |..(LDR y,jintc | 00003180 20 20 20 20 20 20 20 20 20 20 20 3b 20 63 49 6d | ; cIm| 00003190 61 67 69 6e 61 72 79 0d 10 c2 27 4c 44 52 20 6d |aginary...'LDR m| 000031a0 61 78 2c 6a 69 74 65 72 20 20 20 20 20 20 20 20 |ax,jiter | 000031b0 20 20 20 3b 20 6d 61 78 2e 20 69 74 65 72 0d 10 | ; max. iter..| 000031c0 cc 40 42 20 6d 33 32 73 74 61 72 74 20 20 20 20 |.@B m32start | 000031d0 20 20 20 20 20 20 20 20 20 20 3b 20 65 6e 74 65 | ; ente| 000031e0 72 20 6d 61 69 6e 20 6d 61 6e 64 65 6c 62 72 6f |r main mandelbro| 000031f0 74 20 70 6c 6f 74 20 72 6f 75 74 69 6e 65 0d 10 |t plot routine..| 00003200 d6 05 3b 0d 10 e0 14 3b 20 31 36 20 62 69 74 20 |..;....; 16 bit | 00003210 76 65 72 73 69 6f 6e 0d 10 ea 0c 2e 6a 75 6c 69 |version.....juli| 00003220 61 31 36 0d 10 f4 18 3b 20 52 65 73 69 64 65 6e |a16....; Residen| 00003230 74 20 63 6f 6e 73 74 61 6e 74 73 0d 10 fe 0b 4d |t constants....M| 00003240 4f 56 20 75 2c 78 0d 11 08 0b 4d 4f 56 20 76 2c |OV u,x....MOV v,| 00003250 79 0d 11 12 23 4c 44 52 20 78 2c 6a 69 6e 74 72 |y...#LDR x,jintr| 00003260 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 63 | ; c| 00003270 52 65 61 6c 0d 11 1c 28 4c 44 52 20 79 2c 6a 69 |Real...(LDR y,ji| 00003280 6e 74 63 20 20 20 20 20 20 20 20 20 20 20 20 20 |ntc | 00003290 3b 20 63 49 6d 61 67 69 6e 61 72 79 0d 11 26 27 |; cImaginary..&'| 000032a0 4c 44 52 20 6d 61 78 2c 6a 69 74 65 72 20 20 20 |LDR max,jiter | 000032b0 20 20 20 20 20 20 20 20 3b 20 6d 61 78 2e 20 69 | ; max. i| 000032c0 74 65 72 0d 11 30 40 42 20 6d 31 36 73 74 61 72 |ter..0@B m16star| 000032d0 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b |t ;| 000032e0 20 65 6e 74 65 72 20 6d 61 69 6e 20 6d 61 6e 64 | enter main mand| 000032f0 65 6c 62 72 6f 74 20 70 6c 6f 74 20 72 6f 75 74 |elbrot plot rout| 00003300 69 6e 65 0d 11 3a 1f 3b 2d 2d 2d 2d 2d 2d 2d 2d |ine..:.;--------| 00003310 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------| 00003320 2d 2d 0d 11 44 2c a4 66 69 6e 74 65 72 66 61 63 |--..D,.finterfac| 00003330 65 20 3b 20 4e 65 63 65 73 73 61 72 79 20 43 20 |e ; Necessary C | 00003340 49 6e 74 65 72 66 61 63 65 20 63 6f 64 65 0d 11 |Interface code..| 00003350 4e 07 5d 3a ed 0d 11 58 3a c8 99 20 22 4f 53 5f |N.]:...X:.. "OS_| 00003360 46 69 6c 65 22 2c 31 30 2c 22 3c 46 72 61 63 24 |File",10,"<Frac$| 00003370 44 69 72 3e 2e 53 61 6d 70 4d 61 6e 4a 75 6c 22 |Dir>.SampManJul"| 00003380 2c 26 46 46 41 2c 2c 63 6f 64 65 25 2c 4f 25 0d |,&FFA,,code%,O%.| 00003390 11 62 05 e0 0d ff |.b....| 00003396