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
6MOV 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