Home » Archimedes archive » Acorn User » AU 1994-09.adf » !StarInfo_Star » Morris/!Dizzy/Source

Morris/!Dizzy/Source

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 » Acorn User » AU 1994-09.adf » !StarInfo_Star
Filename: Morris/!Dizzy/Source
Read OK:
File size: 9174 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM     >Source
   20REM by  Simon -Henley- Morris
   30REM for 32-bit machines, particularly ARM3
   40REM (c) AU September 1994
   50:
   60ON ERROR MODE0:REPORT:PRINT;" at line ";ERL:END
   70:
   80MODE0:OFF
   90:
  100SYS "Hourglass_On"
  110float=16
  120save=FALSE
  130num=31
  140codelength=160*1024
  150DIM code codelength
  160:
  170FORI%=0 TO codelength-1 STEP4:I%!code=0:NEXT
  180:
  190PROCassem
  200SYS "Hourglass_Off"
  210REPEAT:MOUSE x,y,k:UNTILk<>0 OR INKEY-99
  220CALLinitialise
  230END
  240:
  250DEFPROCassem
  260FORpass=0TO2STEP2:P%=code:L%=codelength+P%:[OPTpass
  270B initialise
  280
  290\ Create our own stack
  300.stack        ]:P%+=&800:[OPTpass
  310.registerdump ]:P%+=&040:[OPTpass
  320
  330\ ######################################################################
  340
  350.initialise   STR   r0,[pc,#-80]
  360              ADR   r0,registerdump+4
  370              STMIA r0,{r1-r14}
  380              SUB   r13,r0,#8
  390\------------------------------------------------------------------------
  400              SWI   256+22
  410              SWI   256+9
  420              SWI   256+22
  430              SWI   256+137
  440              SWI   "OS_RemoveCursors"
  450
  460              BL    setcolour
  470              BL    resetcols
  480              BL    getvduvars
  490              BL    newshape
  500              BL    makenum
  510              BL    swapscreens
  520              BL    clearscr    \ Clear all screens
  530              BL    swapscreens \ & Synchronise
  540              BL    clearscr
  550              BL    resetcols
  560              MOV   r0,#16
  570.fadethemall  BL    fadeout
  580              SUBS  r0,r0,#1
  590              BNE   fadethemall
  600
  610              MOV   r0,#&400
  620              STR   r0,shapetimer
  630              MOV   r0,#16
  640              STR   r0,fadeinflag
  650.mainloop     MOV   r0,#19
  660              SWI   "OS_Byte"
  670              BL    swapscreens
  680              BL    clearscr
  690              LDR   r0,shapetimer
  700              SUBS  r0,r0,#1
  710              STR   r0,shapetimer
  720              BNE   carryon
  730              LDR   r0,timerreset
  740              STR   r0,shapetimer
  750              MOV   r0,#16
  760              STR   r0,fadeoutflag
  770              BL    resetcols
  780.carryon      LDR   r0,fadeoutflag
  790              CMP   r0,#0
  800              BEQ   nofadeout
  810              BL    fadeout
  820              MOV   r1,#16
  830              SUBS  r0,r0,#1
  840              STR   r0,fadeoutflag
  850              BNE   nofade
  860              STR   r1,fadeinflag
  870              BL    newshape
  880              BL    makenum
  890              B     nofade
  900.nofadeout    LDR   r0,fadeinflag
  910              CMP   r0,#0
  920              BEQ   nofade
  930              BL    fadein
  940              SUB   r0,r0,#1
  950              STR   r0,fadeinflag
  960
  970.nofade       BL    calcall
  980              BL    shownum
  990              BL    plotall
 1000
 1010              MOV   r0,#&81
 1020              MOV   r1,#&B6
 1030              MOV   r2,#&FF
 1040              SWI   "XOS_Byte"
 1050              CMP   r1,#&FF
 1060              BEQ   checkfades
 1070
 1080              MOV   r3,#360
 1090              FNadr(4,sintable)
 1100              FNadr(0,vars)
 1110              LDR   r1,[r0,#28]
 1120              CMP   r1,#0
 1130              BEQ   notsinep
 1140              LDR   r1,[r0,#36]
 1150              LDR   r2,[r0,#20]
 1160              ADD   r1,r1,r2
 1170              CMP   r3,r1,LSR#float
 1180              SUBLE r1,r1,#360<<float
 1190              STR   r1,[r0,#36]
 1200              MOV   r1,r1,LSR#float
 1210              LDR   r1,[r4,r1,LSL#2]
 1220              MOV   r2,#179
 1230              MUL   r1,r2,r1
 1240              ADD   r1,r1,#180<<float
 1250              STR   r1,[r0,#8]
 1260              B     dotheta
 1270
 1280.notsinep     LDR   r1,[r0,#8]
 1290              LDR   r2,[r0,#20]
 1300              ADD   r1,r1,r2
 1310              CMP   r3,r1,LSR#float
 1320              SUBLE r1,r1,#360<<float
 1330              STR   r1,[r0,#8]
 1340
 1350.dotheta      LDR   r1,[r0,#32]
 1360              CMP   r1,#0
 1370              BEQ   notsinet
 1380              LDR   r1,[r0,#40]
 1390              LDR   r2,[r0,#24]
 1400              ADD   r1,r1,r2
 1410              CMP   r3,r1,LSR#float
 1420              SUBLE r1,r1,#360<<float
 1430              STR   r1,[r0,#40]
 1440              MOV   r1,r1,LSR#float
 1450              LDR   r1,[r4,r1,LSL#2]
 1460              MOV   r2,#179
 1470              MUL   r1,r2,r1
 1480              ADD   r1,r1,#180<<float
 1490              STR   r1,[r0,#12]
 1500              B     checkfades
 1510
 1520.notsinet     LDR   r1,[r0,#12]
 1530              LDR   r2,[r0,#24]
 1540              ADD   r1,r1,r2
 1550              CMP   r3,r1,LSR#float
 1560              SUBLE r1,r1,#360<<float
 1570              STR   r1,[r0,#12]
 1580
 1590.checkfades   LDR   r0,fadeoutflag
 1600              CMP   r0,#0
 1610              BNE   checkescape
 1620              LDR   r0,fadeinflag
 1630              CMP   r0,#0
 1640              BNE   checkescape
 1650              LDR   r1,keypress
 1660              CMP   r1,#0
 1670              BEQ   newinput
 1680              MOV   r0,#129
 1690              MOV   r1,#&9D
 1700              MOV   r2,#&FF
 1710              SWI   "OS_Byte"
 1720              CMP   r1,#0
 1730              STREQ r1,keypress
 1740              B     checkescape
 1750.newinput     MOV   r0,#129
 1760              MOV   r1,#&9D
 1770              MOV   r2,#&FF
 1780              SWI   "OS_Byte"
 1790              CMP   r1,#&FF
 1800              BNE   checkescape
 1810              STR   r1,keypress
 1820              MOV   r0,#16
 1830              STR   r0,fadeoutflag
 1840              BL    resetcols
 1850              LDR   r0,timerreset
 1860              STR   r0,shapetimer
 1870
 1880.checkescape  MOV   r0,#129
 1890              MOV   r1,#&8F
 1900              MOV   r2,#&FF
 1910              SWI   "OS_Byte"
 1920              CMP   r1,#&FF
 1930              BNE   mainloop
 1940
 1950.resetforfin  MOV   r0,#19
 1960              SWI   "OS_Byte"
 1970              BL    swapscreens
 1980              BL    clearscr
 1990              MOV   r0,#19
 2000              SWI   "OS_Byte"
 2010              BL    swapscreens
 2020              BL    clearscr
 2030
 2040              MOV   r0,#&7C
 2050              SWI   "XOS_Byte"    \ Clear Escape
 2060
 2070              MOV   r0,#19
 2080              SWI   "OS_Byte"
 2090              SWI   256+22
 2100              SWI   256+0
 2110              MOV   r0,#15
 2120              MOV   r1,#0
 2130              MOV   r2,#0
 2140              SWI   "OS_Byte"    \ Clear Keyboard Buffer
 2150\------------------------------------------------------------------------
 2160.return       FNadr(0,registerdump)
 2170              LDMIA r0,{r0-r13,pc}^
 2180
 2190.keypress    EQUD  0
 2200.shapetimer  EQUD  0
 2210.timerreset  EQUD  500 \ 10 seconds
 2220
 2230.fadeoutflag EQUD  0   \ 0-nothing   1-16 fadecount
 2240.fadeinflag  EQUD  0
 2250
 2260.getvduvars  STMFD r13!,{r0-r1,r14}
 2270             MOV   r0,#112
 2280             MOV   r1,#1
 2290             SWI   "OS_Byte"
 2300             MOV   r0,#113
 2310             MOV   r1,#2
 2320             SWI   "OS_Byte"
 2330             ADR   r0,screenbases
 2340             MOV   r1,r0
 2350             SWI   "OS_ReadVduVariables"
 2360             LDMFD r13!,{r0,r1,pc}
 2370
 2380.bank        EQUD  1
 2390.screenbases EQUD  148:EQUD 149:EQUD -1
 2400
 2410.swapscreens STMFD r13!,{r0,r1,r3,r14}
 2420             ADR   r14,bank
 2430             MOV   r0,#113
 2440             LDR   r1,[r14]
 2450             EOR   r3,r1,#3
 2460             SWI   "OS_Byte"
 2470             STR   r3,[r14]
 2480             LDR   r12,[r14,r3,LSL#2]
 2490             LDMFD r13!,{r0,r1,r3,pc}
 2500
 2510\ Each ball is 20 by 16 and has eight versions for each pixel offset
 2520\ Mask data first followed by 7 different colours
 2530\ Each set of sprites is &600 in length.
 2540
 2550.balldata ]:P%+=&2A00:[OPTpass
 2560.plotall  STMFD  r13!,{r0-r11,r14}
 2570          FNadr(10,balldata)
 2580          FNadr(11,zorder)        \ Address of plot order
 2590          FNadr(14,dest-16)
 2600          LDR    r9,nocoords
 2610          ADD    r11,r11,r9,LSL#2
 2620          SUB    r11,r11,#4
 2630.mainloop LDR    r7,[r11],#-4
 2640          ADD    r7,r14,r7,LSL#4
 2650          LDMIA  r7,{r0,r1,r4,r2}
 2660          MOV    r2,r4
 2670
 2680          AND    r4,r0,#7
 2690          BIC    r0,r0,#7
 2700          ADD    r0,r12,r0,LSR#1
 2710          ADD    r0,r0,r1,LSL#7
 2720          ADD    r0,r0,r1,LSL#5    \ r0 is screen addr
 2730
 2740          ADD    r1,r10,r4,LSL#7
 2750          ADD    r1,r1,r4,LSL#6    \ r1 is mask addr
 2760          ADD    r2,r1,r2          \ r2 is ball addr
 2770          ]:FORI%=1TO16:[OPTpass
 2780          LDMIA  r0,{r3-r5}        \ Speedy mask and plot
 2790          LDMIA  r1!,{r6-r8}
 2800          AND    r3,r3,r6
 2810          AND    r4,r4,r7
 2820          AND    r5,r5,r8
 2830          LDMIA  r2!,{r6-r8}
 2840          ORR    r3,r3,r6
 2850          ORR    r4,r4,r7
 2860          ORR    r5,r5,r8
 2870          STMIA  r0,{r3-r5}
 2880          ADD    r0,r0,#160
 2890          ]:NEXT:[OPTpass
 2900          SUBS   r9,r9,#1
 2910          BNE    mainloop
 2920          LDMFD  r13!,{r0-r11,pc}
 2930
 2940.vars
 2950.nocoords EQUD   0
 2960.coordsad EQUD   0
 2970.phi      EQUD   0
 2980.theta    EQUD   0
 2990.dataadd  EQUD   (dest-vars)
 3000
 3010.phiinc   EQUD   0
 3020.thetainc EQUD   0
 3030.phisin   EQUD   0
 3040.thetasin EQUD   0
 3050.phiangle EQUD   0
 3060.theangle EQUD   0
 3070
 3080\ Display number of balls on the screen
 3090.shownum  STMFD  r13!,{r0-r6,r12,r14}
 3100          ADD    r12,12,#100
 3110          ADR    r0,bits
 3120          LDMIA  r0!,{r1-r6}:STMIA r12,{r1-r3}
 3130          ADD    r12,12,#160:STMIA r12,{r4-r6}
 3140          ADD    r12,12,#160:LDMIA r0!,{r1-r6}:STMIA r12,{r1-r3}
 3150          ADD    r12,12,#160:STMIA r12,{r4-r6}
 3160          ADD    r12,12,#160:LDMIA r0!,{r1-r6}:STMIA r12,{r1-r3}
 3170          ADD    r12,12,#160:STMIA r12,{r4-r6}
 3180          ADD    r12,12,#160:LDMIA r0!,{r1-r6}:STMIA r12,{r1-r3}
 3190          ADD    r12,12,#160:STMIA r12,{r4-r6}
 3200          LDMFD  r13!,{r0-r6,r12,pc}
 3210
 3220.bits     ]:P%+=4*8*3:[OPTpass
 3230
 3240\ Create screen data for a number, rather than use OS
 3250.makenum  STMFD  r13!,{r0-r12,r14}
 3260          FNldr(0,nocoords)
 3270          ADR    r1,buffer
 3280          MOV    r2,#16
 3290          SWI    "OS_ConvertCardinal2"
 3300          LDR    r2,[r0]
 3310          SUB    r1,r1,r0
 3320          CMP    r1,#1
 3330          MOVEQ  r2,r2,LSL#16  \ Maximum string length of 3 (0-999)
 3340          ORREQ  r2,r2,#&30
 3350          ORREQ  r2,r2,#&3000  \ Add leading zeros if required
 3360          CMP    r1,#2
 3370          MOVEQ  r2,r2,LSL#8
 3380          ORREQ  r2,r2,#&30
 3390          MOV    r1,#3
 3400          ADR    r0,bits
 3410          ADR    r3,fontdata
 3420.numbloop AND    r4,r2,#&FF
 3430          MOV    r2,r2,LSR#8
 3440          SUB    r4,r4,#48
 3450          ADD    r4,r3,r4,LSL#5 \ *32
 3460          LDMIA  r4,{r5-r12}
 3470          MOV    r4,r0
 3480          STR    r5,[r4],#12:STR r6,[r4],#12
 3490          STR    r7,[r4],#12:STR r8,[r4],#12
 3500          STR    r9,[r4],#12:STR r10,[r4],#12
 3510          STR    r11,[r4],#12:STR r12,[r4],#12
 3520          ADD    r0,r0,#4
 3530          SUBS   r1,r1,#1
 3540          BNE    numbloop
 3550          LDMFD  r13!,{r0-r12,pc}
 3560
 3570.buffer   ]:P%+=16:[OPTpass
 3580.fontdata ]:P%+=&140:[OPTpass
 3590
 3600]:count=0:coords=1:cp=2:st=3:sp=4:ct=5:nst=6:nsp=7:x=8:y=9:z=10:frac=11
 3610newx=12:newy=x:togo=14:temp=12:[OPTpass
 3620
 3630\ This routine transforms coordinates around 2 axis, and adds perspective
 3640.calcall  STMFD  r13!,{r0-r12,r14}
 3650          ADR    r4,vars
 3660          \ get nc,cordsad,phi,theta,togo
 3670          LDMIA  r4,{r0,r1,r2,r3,r14}
 3680          ADD    r14,r14,r4
 3690          ADR    r6,sintable
 3700          ADD    r7,r6,#&168      \ &168 = 90*4 (Cos derived by Sin+90 )
 3710          MOV    r2,r2,LSR#float
 3720          MOV    r3,r3,LSR#float
 3730          LDR    sp,[r6,r2,LSL#2] \ r4 = sin phi
 3740          LDR    ct,[r7,r3,LSL#2] \ r5 = cos theta
 3750          LDR    st,[r6,r3,LSL#2] \ r3 = sin theta
 3760          LDR    cp,[r7,r2,LSL#2] \ r2 = cos phi
 3770          RSB    nst,st,#0        \nst = -st
 3780          RSB    nsp,sp,#0        \nsp = -sp
 3790
 3800          ADD    frac,PC,#(fractions-8-P%+255*4)MOD256
 3810          ADD    frac,frac,#((fractions-8-P%+255*4)DIV256)*&100
 3820
 3830.calcs    LDMIA  coords !,{x,y,z}   \ x, y, z and (we'll get colour later)
 3840          MUL    newx,y,nst
 3850          MLA    newx,x,ct,newx     \ newx = ct*x-st*y
 3860
 3870          MUL    y,ct,y
 3880          MLA    y,x,st,y           \    y = st*x+ct*y
 3890          MOV    y,y,ASR#float
 3900
 3910          MUL    newy,z,nsp
 3920          MLA    newy,y,cp,newy     \ newy = cp*y-sp*z
 3930
 3940          MUL    z,cp,z
 3950          MLA    z,sp,y,z           \    z = sp*y+cp*z
 3960          \ x=newx y=newy z=z
 3970          MOV    y,newy,ASR#float
 3980          MOV    x,newx,ASR#float
 3990          MOV    z,z,ASR#float
 4000          MOV    temp,z
 4010
 4020          LDR    temp,[frac,temp,LSL#2]
 4030
 4040          MUL    x,temp,x
 4050          MUL    y,temp,y
 4060          MOV    temp,#128         \ Origin 128,128
 4070          ADD    x,temp,x,ASR#float
 4080          ADD    y,temp,y,ASR#float
 4090          LDR    temp,[coords],#4
 4100          STMIA  togo !,{x,y,z,temp}
 4110          SUBS   count,count,#1
 4120          BNE    calcs
 4130          B      sort
 4140
 4150.sintable ]:P%+=360*8:[OPTpass
 4160.fractions ]:P%+=514*4:[OPTpass
 4170
 4180.regclear EQUD0:EQUD0:EQUD0:EQUD0:EQUD0:EQUD0:EQUD0:EQUD0
 4190          EQUD0:EQUD0:EQUD0:EQUD0:EQUD0:EQUD0:EQUD0:EQUD0
 4200
 4210\ Heres a fun routine! This one is a 'bin sort', and needs to be very quick
 4220.sort     FNadr(0,regclear)
 4230          LDMIA   r0,{r3-r12}
 4240          FNadr(0,zlist)
 4250          MOV     r2,r0
 4260          MOV     r1,#16
 4270.resetlp  STMIA   r0!,{r3-r12} \ 64 lots of ten. (trim later)
 4280          STMIA   r0!,{r3-r12}
 4290          SUBS    r1,r1,#1
 4300          BNE     resetlp
 4310          FNldr(0,nocoords)        \ r0 is number of coordinates to sort
 4320          FNadr(1,dest+8)          \ r1 is address of first 'z' coordinate.
 4330          FNadr(3,spare)           \ r3 is adr of spare (r2 is zlist addr)
 4340          FNadr(12,zorder)         \r12 is address of ordered list
 4350          ADD     r0,r0,#1         \ to compensate-data doesn't begin at zero
 4360          MOV     r4,#1            \ r4 = count
 4370          MOV     r5,#1            \ r5 = index for items (0-noofcoords)
 4380          MOV     r10,#&10000
 4390          SUB     r10,r10,#1       \ R10 = &FFFF (mask for data)
 4400.sortit1  LDR     r6,[r1],#16      \ get z coord
 4410          ADD     r6,r6,#160       \ add 160 (gives us a range of +- 160)
 4420          LDR     r7,[r2,r6,LSL#2] \ get zlist(zc)
 4430          MOVS    r7,r7
 4440          STREQ   r5,[r2,r6,LSL#2] \ store index if nowt there
 4450          BEQ     next
 4460          AND     r8,r7,r10,LSL#16 \ r8 is pointer
 4470          AND     r9,r7,r10        \ r9 is data
 4480          ORR     r9,r9,r4,LSL#16  \ r9 is now |count|data|
 4490          STR     r9,[r2,r6,LSL#2] \ store r9 in zlist(zc)
 4500          ORR     r9,r5,r8         \ r9 is now |index|pointer|
 4510          STR     r9,[r3,r4,LSL#2] \ store r9 in spare(count)
 4520          ADD     r4,r4,#1         \ increment count
 4530.next     ADD     r5,r5,#1         \ increment index
 4540          CMP     r5,r0
 4550          BNE     sortit1          \ Thats the easy bit folks!
 4560                                   \ registers 4-11 are uncommitted
 4570                                   \ register 0 is noofcoords (i%)
 4580          MOV     r4,#320          \ r4 is maxelements
 4590.sortit2  LDR     r5,[r2],#4       \ Get zlist(count)
 4600          MOVS    r5,r5
 4610          BEQ     next2            \ Ignore if zero
 4620          ANDS    r6,r5,r10,LSL#16 \ r6 is pointer. Is it single?
 4630          STREQ   r5,[r12],#4      \ Yes. Store in zorder.
 4640          BEQ     next2            \ Skip, and get next
 4650          AND     r7,r5,r10        \ r7 is data (coordinate number)
 4660.afew     STR     r7,[r12],#4      \ store data in zorder
 4670          LDR     r6,[r3,r6,LSR#14]\ get new pointer|data from spare
 4680          AND     r7,r6,r10        \ r7 is new data
 4690          ANDS    r6,r6,r10,LSL#16 \ r6 is new pointer
 4700          BNE     afew             \ continue until pointer is zero
 4710          STR     r7,[r12],#4      \ store data in zorder
 4720.next2    SUBS    r4,r4,#1         \ until all done.
 4730          BNE     sortit2
 4740          LDMFD   r13!,{r0-r12,pc}
 4750
 4760.dest       ]:P%+=640*16:[OPTpass
 4770.zlist      ]:P%+=320*4:[OPTpass   \ 320 means coordinates from -160 to 159.
 4780.spare      ]:P%+=640*4:[OPTpass
 4790.zorder     ]:P%+=640*4:[OPTpass
 4800
 4810.newshape   STMFD r13!,{r0-r2,r14}
 4820            ADR   r0,shapetable
 4830            LDR   r1,[r0,#-4]
 4840            ADD   r2,r1,#1
 4850            CMP   r2,#(num+1)   \ Number of shapes
 4860            MOVEQ r2,#0
 4870            STR   r2,[r0,#-4]
 4880            LDR   r2,[r0,r1,LSL#5]! \ address
 4890            ADD   r2,r2,r0
 4900            LDR   r1,[r0,#4]        \ number of coords
 4910            FNadr(14,vars)
 4920            STR   r1,[r14]    \ nc
 4930            STR   r2,[r14,#4] \ address
 4940            LDR   r1,[r0,#8]
 4950            STR   r1,[r14,#8] \ phi
 4960            STR   r1,[r14,#36] \ angle
 4970            LDR   r1,[r0,#12]
 4980            STR   r1,[r14,#12] \ theta
 4990            STR   r1,[r14,#40] \ angle
 5000            LDR   r1,[r0,#16]
 5010            STR   r1,[r14,#20] \ phi inc
 5020            LDR   r1,[r0,#20]
 5030            STR   r1,[r14,#24] \ theta inc
 5040            LDR   r1,[r0,#24]
 5050            STR   r1,[r14,#28] \ phi flag
 5060            LDR   r1,[r0,#28]
 5070            STR   r1,[r14,#32] \ theta flag
 5080            LDMFD r13!,{r0-r2,pc}
 5090
 5100.shapenum   EQUD  0
 5110
 5120.shapetable ]:P%+=32*32:[OPTpass    \ address, number of coords
 5130.coords     ]:P%+=7000*16:[OPTpass  \ *16 = !x , !y , !z, !colour
 5140
 5150            \ IMPORTANT NOTE:
 5160            \ The 7000 above represents the total number of dots required.
 5170            \ If you alter any of the shapes, make sure that this value
 5180            \ is equal to or above to the total amount of coordinates.
 5190            \ If you increase this value, be sure to adjust the amount of
 5200            \ space reserved for the code in the beginning of the program.
 5210
 5220.zeroreg     DCD0:DCD0:DCD0:DCD0:DCD0:DCD0:DCD0:DCD0:DCD0:DCD0:DCD0:DCD0:DCD0
 5230
 5240.clearscr    STMFD r13!,{r0-r12,r14}
 5250             ADR   r0,zeroreg
 5260             LDMIA r0!,{r0-r11,r14}
 5270             ]:FORI%=1TO787:[OPTpass
 5280             STMIA r12!,{r0-r11,r14}
 5290             ]:NEXT:[OPTpass
 5300             STMIA r12!,{r0-r8}
 5310             LDMFD r13!,{r0-r12,pc}
 5320
 5330.setcolour STMFD   r13!,{r0-r2,r14}
 5340           ADR     r1,palette
 5350           MOV     r2,#96
 5360.colloop   LDRB    r0,[r1],#1
 5370           SWI     "OS_WriteC"
 5380           SUBS    r2,r2,#1
 5390           BNE     colloop
 5400           LDMFD   r13!,{r0-r2,pc}
 5410
 5420.palette   ]:P%+=120:[OPTpass
 5430.colreset  ]:P%+=16*12:[OPTpass
 5440.colfade   ]:P%+=16*12:[OPTpass
 5450
 5460.resetcols STMFD r13!,{r0-r4,r14}
 5470           ADR   r0,colreset
 5480           ADR   r14,colfade
 5490           MOV   r4,#16
 5500.resetloop LDMIA r0!,{r1-r3}
 5510           STMIA r14!,{r1-r3}
 5520           SUBS  r4,r4,#1
 5530           BNE   resetloop
 5540           LDMFD r13!,{r0-r4,pc}
 5550
 5560\ Sorry about the hardware access folks, but VDU19 was just too slow.
 5570.fadeout   STMFD r13!,{r0-r7,r14}
 5580           SWI   "OS_EnterOS"
 5590           MOV   r7,#&3400000
 5600           ADR   r5,colfade
 5610           MOV   r6,#15
 5620.fadeoloop LDMIA r5,{r1-r3}
 5630           ORR   r0,r1,r6,LSL#26
 5640           ORR   r0,r0,r2,LSL#4
 5650           ORR   r0,r0,r3,LSL#8
 5660           STR   r0,[r7]
 5670           SUBS  r1,r1,#1:MOVMI r1,#0
 5680           SUBS  r2,r2,#1:MOVMI r2,#0
 5690           SUBS  r3,r3,#1:MOVMI r3,#0
 5700           STMIA r5!,{r1-r3}
 5710           SUBS  r6,r6,#1
 5720           BPL   fadeoloop
 5730           TEQP  pc,#0
 5740           MOVNV r0,r0
 5750           LDMFD r13!,{r0-r7,pc}
 5760
 5770.fadein    STMFD r13!,{r0-r11,r14}
 5780           SWI   "OS_EnterOS"
 5790           MOV   r11,#&3400000
 5800           ADR   r5,colfade
 5810           ADR   r7,colreset
 5820           MOV   r6,#15
 5830.fadeiloop LDMIA r5,{r1-r3}
 5840           LDMIA r7!,{r8-r10}
 5850           ORR   r0,r1,r6,LSL#26
 5860           ORR   r0,r0,r2,LSL#4
 5870           ORR   r0,r0,r3,LSL#8
 5880           STR   r0,[r11]
 5890           ADD   r1,r1,#1:CMP r1,r8:MOVGE r1,r8
 5900           ADD   r2,r2,#1:CMP r1,r9:MOVGE r2,r9
 5910           ADD   r3,r3,#1:CMP r1,r10:MOVGE r3,r10
 5920           STMIA r5!,{r1-r3}
 5930           SUBS  r6,r6,#1
 5940           BPL   fadeiloop
 5950           TEQP  pc,#0
 5960           MOVNV r0,r0
 5970           LDMFD r13!,{r0-r11,pc}
 5980
 5990]:NEXT
 6000PRINT"Code from &";~code;"-&";~P%;" (";(P%-code)DIV1024;"K)."
 6010OSCLI"LOAD <Dizzy$Dir>.RawBall9 "+STR$~balldata
 6020OSCLI"LOAD <Dizzy$Dir>.Palette  "+STR$~palette
 6030OSCLI"LOAD <Dizzy$Dir>.Font     "+STR$~fontdata
 6040
 6050M%=palette:N%=colreset+15*12
 6060FORI%=1TO16:R%=M%?3:G%=M%?4:B%=M%?5
 6070!N%=R%DIV16:N%!4=G%DIV16:N%!8=B%DIV16:N%-=12:M%+=6
 6080NEXT
 6090
 6100M%=sintable:FORI%=0 TO 449:!M%=SIN(RAD(I%))*2^float:M%+=4:NEXT
 6110M%=fractions:FORI%=-255TO255:!M%=192*(1/(I%+256))*2^float:M%+=4:NEXT
 6120
 6130scale=1
 6140
 6150M%=coords:N%=shapetable
 6160totaldots=0
 6170cnt%=num
 6180FORcnt%=0 TO num
 6190tstart=0:pstart=0:tinc=1:pinc=1:tsine=0:psine=0
 6200!N%=M%-N%
 6210!nocoords=FNshape(cnt%):N%!4=!nocoords
 6220N%!8=pstart*2^float:N%!12=tstart*2^float
 6230N%!16=pinc*2^float:N%!20=tinc*2^float
 6240N%!24=psine:N%!28=tsine:N%+=32
 6250PRINT;!nocoords
 6260totaldots+=!nocoords
 6270NEXT
 6280PRINT"total coordinates ";totaldots;".  Press space bar...."
 6290IFsave THEN
 6300OSCLI"Save <Dizzy$Dir>.!RunImage "+STR$~code+" "+STR$~P%
 6310*SETTYPE <Dizzy$Dir>.!RunImage FF8
 6320ENDIF
 6330ENDPROC
 6340
 6350DEFFNadr(dest,addr)
 6360IFpass=0 THENaddr=P%
 6370IFaddr<P% THEN
 6380addr=P%-addr+8
 6390IFaddr>&FFFF THENVDU7:PRINT"ILLEGAL ADR ATTEMPT.":END
 6400[OPTpass:SUB dest,pc,#(addr AND&FF00):SUB dest,dest,#(addr AND&FF):]
 6410ELSE
 6420addr=addr-P%-8
 6430IFaddr>&FFFF THENVDU7:PRINT"ILLEGAL ADR ATTEMPT.":END
 6440[OPTpass:ADD dest,pc,#(addr AND&FF00):ADD dest,dest,#(addr AND&FF):]
 6450ENDIF
 6460=0
 6470
 6480DEFFNldr(dest,addr)
 6490IFpass=0 THENaddr=P%
 6500IFaddr<P% THEN
 6510addr=P%-addr+8
 6520IFaddr>&FFFF THENVDU7:PRINT"ILLEGAL ADR ATTEMPT.":END
 6530[OPTpass:SUB dest,pc,#(addr AND&FF00):LDR dest,[dest,#-(addr AND&FF)]:]
 6540ELSE
 6550addr=addr-P%-8
 6560IFaddr>&FFFF THENVDU7:PRINT"ILLEGAL ADR ATTEMPT.":END
 6570[OPTpass:ADD dest,pc,#(addr AND&FF00):LDR dest,[dest,#(addr AND&FF)]:]
 6580ENDIF
 6590=0
 6600
 6610DEF FNshape(shape)
 6620dots=0
 6630CASE shape OF
 6640 WHEN 0:
 6650tstart=0:pstart=0:tinc=1:pinc=2:tsine=0:psine=0
 6660scale=1:PRINT"'Hello'";TAB(15);"Scale: ";scale;TAB(30);"...";
 6670  DIM blk 100
 6680  text$="Hello"
 6690  a=6:m=-((LEN(text$)*8)/2)
 6700C%=0
 6710  FOR b=1 TO LENtext$
 6720C%+=&600:IFC%=&600*7 THENC%=&600
 6730   blk?0=ASCMID$(text$,b)
 6740   SYS "OS_Word",10,blk
 6750FOR c=0 TO 7:B%=blk?(c+1):FOR d=0 TO 7
 6760IF(B% AND 2^d)<>0 THENPROCdot(((7-d)+m)*a,(c-4)*a*2,-20)
 6770NEXT:NEXT:m+=8:NEXT
 6780 WHEN 1:
 6790tstart=0:pstart=0:tinc=1:pinc=1:tsine=1:psine=0
 6800step=17:limit=51
 6810scale=1.4:PRINT"Box";TAB(15);"Scale: ";scale;TAB(30);"...";
 6820  FOR a=-limit TO limit STEP step
 6830   FOR b=-limit TO limit STEP step
 6840C%=&600*1
 6850    PROCdot(a,b,-limit)
 6860C%=&600*2
 6870    PROCdot(a,b,limit)
 6880   NEXT
 6890  NEXT
 6900  FOR a=(-limit+step) TO (limit-step) STEP step
 6910  FOR b=(-limit+step) TO (limit-step) STEP step
 6920C%=&600*3
 6930    PROCdot(a,-limit,b)
 6940C%=&600*4
 6950    PROCdot(a,limit,b)
 6960   NEXT
 6970  NEXT
 6980  FOR a=(-limit+step) TO (limit-step) STEP step
 6990  FOR b=-limit TO limit STEP step
 7000C%=&600*5:PROCdot(-limit,b,a)
 7010C%=&600*6:PROCdot(limit,b,a)
 7020NEXT:NEXT
 7030 WHEN 2:
 7040tstart=0:pstart=0:tinc=2:pinc=2:tsine=0:psine=0
 7050scale=1:PRINT"Rings";TAB(15);"Scale: ";scale;TAB(30);"...";
 7060  FOR a=0 TO 350 STEP 10
 7070   cos=80*COSRADa
 7080   sin=80*SINRADa
 7090C%=&600
 7100    PROCdot(100,cos,sin)
 7110C%=&600*2
 7120    PROCdot(-100,cos,sin)
 7130C%=&600*3
 7140    PROCdot(cos,100,sin)
 7150C%=&600*4
 7160    PROCdot(cos,-100,sin)
 7170C%=&600*5
 7180    PROCdot(cos,sin,100)
 7190C%=&600*6
 7200    PROCdot(cos,sin,-100)
 7210   NEXT
 7220 WHEN 3:
 7230tstart=0:pstart=0:tinc=2:pinc=1:tsine=0:psine=0
 7240scale=1:C%=&600*6::PRINT"Bulbs";TAB(15);"Scale: ";scale;TAB(30);"...";
 7250  FOR r=20 TO 60 STEP 20
 7260   b=r+40
 7270step2=20:IFr<50 THENstep2=step2*2
 7280   FOR a=0 TO 350 STEP step2
 7290    cos=r*COSRADa
 7300    sin=r*SINRADa
 7310    PROCdot(b,cos,sin)
 7320    PROCdot(-b,cos,sin)
 7330    PROCdot(cos,b,sin)
 7340    PROCdot(cos,-b,sin)
 7350    PROCdot(cos,sin,b)
 7360    PROCdot(cos,sin,-b)
 7370   NEXT
 7380  NEXT
 7390 WHEN 4:
 7400tstart=0:pstart=30:tinc=1:pinc=1:tsine=1:psine=1
 7410scale=0.7:PRINT"Tube";TAB(15);"Scale: ";scale;TAB(30);"...";
 7420col=1:inc=1
 7430  FOR a=-100 TO 100 STEP 20
 7440C%=&600*col
 7450IFcol=4 THENC%=&600*5
 7460IFcol=5 THENC%=&600*4
 7470   FOR b=0 TO 345 STEP 18
 7480    PROCdot(80*COSRADb,a,80*SINRADb)
 7490   NEXT
 7500col+=inc:IFcol=6 THENinc=-1
 7510  NEXT
 7520 WHEN 5:
 7530tstart=0:pstart=90:tinc=2:pinc=1:tsine=1:psine=1
 7540scale=1::PRINT"Girders";TAB(15);"Scale: ";scale;TAB(30);"...";
 7550C%=&600*3
 7560  FOR a=-120 TO -30 STEP 10
 7570   FOR b=0 TO 300 STEP 90
 7580    cos=30*COSRADb
 7590    sin=30*SINRADb
 7600    PROCdot(a,cos,sin)
 7610    PROCdot(cos,a,sin)
 7620   PROCdot(cos,sin,a)
 7630    PROCdot(-a,cos,sin)
 7640    PROCdot(cos,-a,sin)
 7650    PROCdot(cos,sin,-a)
 7660   NEXT
 7670  NEXT
 7680 WHEN 6:
 7690tstart=0:pstart=0:tinc=1:pinc=1:tsine=0:psine=1
 7700scale=0.7::PRINT"Vase";TAB(15);"Scale: ";scale;TAB(30);"...";
 7710C%=&600*4
 7720  FOR a=-1 TO .9 STEP .1
 7730   r=100-70*SINRAD(a*90+90)
 7740   FOR b=0 TO 340 STEP 24
 7750    PROCdot(r*COSRADb,a*100,r*SINRADb)
 7760   NEXT
 7770  NEXT
 7780 WHEN 7:
 7790tstart=0:pstart=90:tinc=2:pinc=2:tsine=0:psine=0
 7800scale=1:C%=&600*4:PRINT"Tyre";TAB(15);"Scale: ";scale;TAB(30);"...";
 7810  FOR a=0 TO 340 STEP 20
 7820   FOR b=0 TO 350 STEP 24
 7830    r=70+30*COSRADb
 7840    PROCdot(r*COSRADa,30*SINRADb,r*SINRADa)
 7850   NEXT
 7860  NEXT
 7870 WHEN 8:
 7880tstart=0:pstart=0:tinc=1:pinc=4:tsine=1:psine=0
 7890scale=1
 7900PRINT"DNA";TAB(15);"Scale: ";scale;TAB(30);"...";
 7910C%=&600
 7920  FOR a=0 TO 300 STEP 60
 7930   FOR b=0 TO 320 STEP 40
 7940    r=70+25*COSRADb
 7950    PROCdot(r*COSRADa-35,25*SINRADb,r*SINRADa)
 7960    PROCdot(r*COSRADa+35,r*SINRADa,25*SINRADb)
 7970   NEXT
 7980C%+=&600
 7990IFC%=&600*8 THENC%=&600
 8000  NEXT
 8010 WHEN 9:
 8020tstart=0:pstart=120:tinc=1:pinc=0:tsine=1:psine=0
 8030scale=1:C%=&600
 8040PRINT"Music Grid";TAB(15);"Scale: ";scale;TAB(30);"...";
 8050size=10:C%=&600
 8060add=-size*11:FORn=1TO8
 8070FORa=-1TO1:FORb=-1TO1
 8080PROCdot(a*size,b*size+add,0):NEXT:NEXT
 8090add+=size*3:C%+=&600
 8100IFC%=&600*4 THENC%=&600*5
 8110IFC%=&600*6 THENC%=&600*1
 8120NEXT
 8130C%=&600*4:FORa=-2TO2:FORb=-13TO12:PROCdot(a*size,b*size,-size):NEXT:NEXT
 8140
 8150WHEN 10:
 8160tstart=0:pstart=90:tinc=1:pinc=1:tsine=0:psine=1
 8170scale=1:C%=&600
 8180PRINT"Grid Sphere";TAB(15);"Scale: ";scale;TAB(30);"...";
 8190size=100:step=10
 8200C%=&600*2
 8210PROCdot(0,0,size):PROCdot(0,0,-size)
 8220PROCdot(size,0,0):PROCdot(-size,0,0)
 8230PROCdot(0,size,0):PROCdot(0,-size,0)
 8240FORi%=step TO 180-step STEP step
 8250s=SIN(RAD(i%))*size:c=COS(RAD(i%))*size
 8260C%=&600*1:PROCdot(s,c,0):PROCdot(-s,c,0)
 8270C%=&600*3:PROCdot(0,s,c):PROCdot(0,-s,c)
 8280C%=&600*4:PROCdot(s,0,c):PROCdot(-s,0,c)
 8290NEXT
 8300WHEN 11:
 8310tstart=0:pstart=0:tinc=1:pinc=1:tsine=1:psine=0
 8320scale=1:C%=&600*4
 8330PRINT"Whole Sphere";TAB(15);"Scale: ";scale;TAB(30);"...";
 8340size=100:step=15
 8350FORa%=0 TO 359 STEP step
 8360s=SIN(RAD(a%)):c=COS(RAD(a%))
 8370FORi%=step*2 TO 180-step*2 STEP step
 8380x=SIN(RAD(i%))*size:y=COS(RAD(i%))*size
 8390PROCdot(x*c,y,x*s):C%=C% EOR &3C00
 8400NEXT:NEXT
 8410C%=&600:FORi%=-size-step TO size+step STEPstep
 8420PROCdot(0,i%,0):NEXT
 8430WHEN 12:
 8440tstart=0:pstart=0:tinc=1:pinc=1:tsine=0:psine=0
 8450scale=1.5
 8460PRINT"Random";TAB(15);"Scale: ";scale;TAB(30);"...";
 8470FOR a=1TO270
 8480C%=&600*RND(6)
 8490C%=&600
 8500PROCdot(RND(100)-50,RND(100)-50,RND(100)-50)
 8510NEXT
 8520 WHEN 13:
 8530tstart=0:pstart=0:tinc=4:pinc=1:tsine=0:psine=1
 8540scale=1.5
 8550PRINT"Circular Pegs";TAB(15);"Scale: ";scale;TAB(30);"...";
 8560C%=&600*4
 8570  FOR a=-80 TO -30 STEP 20
 8580   FOR b=0 TO 330 STEP 30
 8590    cos=30*COSRADb
 8600    sin=30*SINRADb
 8610C%=&600*1
 8620    PROCdot(a,cos,sin)
 8630C%=&600*2
 8640    PROCdot(cos,a,sin)
 8650C%=&600*3
 8660    PROCdot(cos,sin,a)
 8670C%=&600*4
 8680    PROCdot(-a,cos,sin)
 8690C%=&600*5
 8700    PROCdot(cos,-a,sin)
 8710C%=&600*6
 8720    PROCdot(cos,sin,-a)
 8730   NEXT
 8740  NEXT
 8750
 8760WHEN 14:
 8770tstart=0:pstart=315:tinc=2:pinc=1:tsine=0:psine=1
 8780scale=1.4:PRINT"'Arm'";TAB(15);"Scale: ";scale;TAB(30);"...";
 8790  DIM blk 100
 8800  text$="ARM"
 8810  a=6:m=-((LEN(text$)*8)/2)
 8820  FOR b=1 TO LENtext$
 8830   blk?0=ASCMID$(text$,b)
 8840   SYS "OS_Word",10,blk
 8850FOR c=0 TO 6:B%=blk?(c+1):K%=B% EOR -1:FOR d=0 TO 7
 8860C%=&600*2:IF(B% AND 2^d)<>0 THENPROCdot(((7-d)+m)*a,(c-4)*a*2,0)
 8870IF(K% AND 2^d)<>0 THENC%=&600*4 ELSEC%=&600*1
 8880PROCdot(((7-d)+m)*a,(c-4)*a*2,40)
 8890NEXT:NEXT:m+=8:NEXT
 8900
 8910WHEN 15:
 8920tstart=0:pstart=270:tinc=1:pinc=0:tsine=1:psine=0
 8930scale=1.3:PRINT"'Henley'";TAB(15);"Scale: ";scale;TAB(30);"...";
 8940  DIM blk 100
 8950  text$="Henley      "
 8960  a=70:m=360/(LEN(text$)*8)
 8970angle=0
 8980  FOR b=LENtext$ TO 1 STEP -1
 8990   blk?0=ASCMID$(text$,b)
 9000   SYS "OS_Word",10,blk
 9010FOR c=0 TO 7:sin=SIN(RAD(angle))*a:cos=COS(RAD(angle))*a
 9020FOR d=0 TO 7:B%=blk?(d+1)
 9030C%=&600*6
 9040IF(B% AND 2^c)<>0 THENPROCdot(sin,cos,(d-4)*11):C%=&600*4:PROCdot(SIN(RAD(angle+180))*a*0.8,COS(RAD(angle+180))*a*0.8,(d-4)*10)
 9050NEXT:angle-=m:NEXT:NEXT
 9060WHEN 16:
 9070tstart=0:pstart=270:tinc=2:pinc=0:tsine=0:psine=0
 9080scale=1:PRINT"RISC";TAB(15);"Scale: ";scale;TAB(30);"...";
 9090  DIM blk 100
 9100  text$="risc"
 9110  a=70:m=360/(LEN(text$)*8)
 9120angle=0
 9130  FOR b=LENtext$ TO 1 STEP -1
 9140   blk?0=ASCMID$(text$,b)
 9150   SYS "OS_Word",10,blk
 9160FOR c=0 TO 7:sin=SIN(RAD(angle))*a:cos=COS(RAD(angle))*a
 9170FOR d=0 TO 7:B%=blk?(d+1)
 9180C%=&600*2
 9190IF(B% AND 2^c)<>0 THEN
 9200PROCdot(sin,cos,(d-4)*11)
 9210C%=&600*1:PROCdot(sin*0.6,cos*0.6,(d-4)*10)
 9220ELSE
 9230C%=&600*4:PROCdot(sin*0.6,cos*0.6,(d-4)*10)
 9240ENDIF
 9250NEXT:angle-=m:NEXT:NEXT
 9260WHEN 17:
 9270tstart=0:pstart=90:tinc=2:pinc=0:tsine=1:psine=0
 9280scale=1.4:PRINT"Spiral";TAB(15);"Scale: ";scale;TAB(30);"...";
 9290k=1:angle=0
 9300FORzangle=-80 TO 80 STEP 1:C%=&600*k:k+=1:IFk=7 THENk=1
 9310PROCdot(SIN(RAD(angle))*40,COS(RAD(angle))*40,zangle)
 9320angle+=10:NEXT
 9330WHEN 18:
 9340tstart=10:pstart=0:tinc=1:pinc=2:tsine=0:psine=0
 9350scale=1.4:PRINT"House";TAB(15);"Scale: ";scale;TAB(30);"...";
 9360size=10
 9370RESTORE+11
 9380FORyc%=0TO8:READ f$,l$,b$,r$
 9390FORxc%=0TOLEN(f$)-1:C%=(ASC(MID$(f$,xc%+1,1))-48)*&600
 9400PROCdot((xc%-3)*size,(yc%-4)*size,size*2):NEXT
 9410FORxc%=0TOLEN(b$)-1:C%=(ASC(MID$(b$,xc%+1,1))-48)*&600
 9420PROCdot((xc%-3)*size,(yc%-4)*size,-size*2):NEXT
 9430FORxc%=0TOLEN(l$)-1:C%=(ASC(MID$(l$,xc%+1,1))-48)*&600
 9440PROCdot(-size*4,(yc%-4)*size,(xc%-2)*size):NEXT
 9450FORxc%=0TOLEN(r$)-1:C%=(ASC(MID$(r$,xc%+1,1))-48)*&600
 9460PROCdot(size*4,(yc%-4)*size,(xc%-2)*size):NEXT
 9470NEXT
 9480FORj=0TO2:READ b$:FORxc%=0TOLEN(b$)-1:C%=(ASC(MID$(b$,xc%+1,1))-48)*&600
 9490PROCdot((xc%-3)*size,size*4,(j-1)*size):NEXT:NEXT
 9500FORj=0TO2:READ b$:FORxc%=0TOLEN(b$)-1:C%=(ASC(MID$(b$,xc%+1,1))-48)*&600
 9510IFj=1 THENadd=-size*2 ELSEadd=-size
 9520PROCdot((xc%-4)*size,-size*4+add,(j-1)*size):NEXT:NEXT
 9530PROCdot(-4*size,-5*size,0*size)
 9540PROCdot(4*size,-5*size,0*size)
 9550PROCdot(-3*size,-7*size,0*size)
 9560DATA 1111111,11111,1111111,11111
 9570DATA 2222222,22222,2222222,22222
 9580DATA 4442444,22222,2222222,22222
 9590DATA 4542454,22222,2222222,22222
 9600DATA 4442444,22222,2222222,22222
 9610DATA 2222222,22222,2222222,22222
 9620DATA 2233322,22222,2222222,22222
 9630DATA 2233322,22222,2222222,22222
 9640DATA 2233322,22222,2222222,22222
 9650DATA 2222222,2222222,2222222
 9660DATA 111111111,111111111,111111111
 9670WHEN 19:
 9680tstart=0:pstart=180:tinc=5:pinc=1:tsine=0:psine=0
 9690scale=1:PRINT"Dumb bells";TAB(15);"Scale: ";scale;TAB(30);"...";
 9700size=100:step=20:C%=&600
 9710zc=-90:FORm=1TO2
 9720FORa%=0 TO 180 STEP step:size=SIN(RAD(a%))*50:step2=24
 9730IFsize<20 THENstep2=48
 9740IFsize<10 THENstep2=360
 9750FORb%=0TO359STEPstep2
 9760C%=C% EOR &A00
 9770s=SIN(RAD(b%)):c=COS(RAD(b%))
 9780PROCdot(s*size,c*size,zc)
 9790NEXT:zc+=10:NEXT:C%=&600*4:NEXT
 9800
 9810WHEN 20:
 9820tstart=0:pstart=0:tinc=2:pinc=1:tsine=1:psine=0
 9830scale=1:PRINT"Axis Balls";TAB(15);"Scale: ";scale;TAB(30);"...";
 9840C%=&600:size=30:step=36:osize=size*3
 9850ca%=1:cb%=2:cc%=3:cd%=4:ce%=5:cf%=6
 9860FORi%=0 TO 180 STEP step
 9870x=SIN(RAD(i%))*size:y=COS(RAD(i%))*size
 9880step2=step
 9890IFi%<40 OR i%>140 THENstep2=step*2
 9900IFi%<10 OR i%>170 THENstep2=360
 9910FORa%=0 TO 359 STEP step2
 9920s=SIN(RAD(a%)):c=COS(RAD(a%))
 9930C%=ca%*&600:ca%=ca%EOR3:PROCdot(x*c-osize,y,x*s)
 9940C%=cb%*&600:cb%=cb%EOR1:PROCdot(x*c+osize,y,x*s)
 9950C%=cc%*&600:cc%=cc%EOR7:PROCdot(x*c,y-osize,x*s)
 9960C%=cd%*&600:cd%=cd%EOR1:PROCdot(x*c,y+osize,x*s)
 9970C%=ce%*&600:ce%=ce%EOR3:PROCdot(x*c,y,x*s-osize)
 9980C%=cf%*&600:cf%=cf%EOR7:PROCdot(x*c,y,x*s+osize)
 9990C%=&600*4:PROCdot(x*c,y,x*s)
10000NEXT:NEXT
10010
10020WHEN 21:
10030tstart=10:pstart=0:tinc=1:pinc=2:tsine=0:psine=0
10040scale=1.4:PRINT"Warning";TAB(15);"Scale: ";scale;TAB(30);"...";
10050size=10
10060RESTORE+4
10070FORyc%=0TO14:READ f$:FORxc%=0TOLEN(f$)-1:C%=(ASC(MID$(f$,xc%+1,1))-48)*&600
10080IFC%<>0 THENPROCdot((xc%-7)*size,(yc%-7)*size,0)
10090NEXT:NEXT
10100DATA 000000010000000
10110DATA 000000010000000
10120DATA 000000111000000
10130DATA 000000121000000
10140DATA 000001121100000
10150DATA 000001242100000
10160DATA 000011444110000
10170DATA 000012444210000
10180DATA 000112444211000
10190DATA 000122242221000
10200DATA 001122222221100
10210DATA 001222242222100
10220DATA 011222444222110
10230DATA 012222242222210
10240DATA 111111111111111
10250WHEN 22:
10260tstart=10:pstart=270:tinc=2:pinc=0:tsine=0:psine=0
10270scale=1.4:PRINT"Face";TAB(15);"Scale: ";scale;TAB(30);"...";
10280size=10:bend=30
10290RESTORE+6
10300angle=0
10310FORyc%=0TO14:angle2=0:READ f$:FORxc%=0TOLEN(f$)-1:C%=(ASC(MID$(f$,xc%+1,1))-48)*&600:syc=SIN(RAD(angle2))*bend*SIN(RAD(angle))
10320IFC%=&600 THENsyc+=size
10330IFC%=&600*5 THENsyc+=size/2
10340IFC%=&600*4 THENsyc+=(size/1.5)
10350IFC%<>0 THENPROCdot((xc%-7)*size,syc,(yc%-7)*size)
10360angle2+=12
10370NEXT:angle+=12:NEXT
10380DATA 000222222222000
10390DATA 002266666662220
10400DATA 022666666666620
10410DATA 226655666556622
10420DATA 266554565455662
10430DATA 266655666556662
10440DATA 666666111666666
10450DATA 666661111166666
10460DATA 666666111666666
10470DATA 066446666664660
10480DATA 066646666644660
10490DATA 006644455446600
10500DATA 006666444466600
10510DATA 000066666660000
10520DATA 000000666000000
10530
10540WHEN 23:
10550tstart=10:pstart=270:tinc=2:pinc=1:tsine=0:psine=0
10560scale=1.4:PRINT"Flag";TAB(15);"Scale: ";scale;TAB(30);"...";
10570size=10:bend=40
10580angle=0:C%=&600
10590FORyc%=0TO14:angle2=0:FORxc%=0TOLEN(f$)-1
10600syc=SIN(RAD(angle2))*bend*SIN(RAD(angle))
10610PROCdot((xc%-7)*size,syc,(yc%-7)*size)
10620angle2+=12
10630NEXT:C%+=&600:IFC%>&600*3 THENC%=&600
10640angle+=24:NEXT
10650
10660WHEN 24:
10670tstart=10:pstart=270:tinc=1:pinc=2:tsine=1:psine=0
10680scale=1:PRINT"Circle Circle";TAB(15);"Scale: ";scale;TAB(30);"...";
10690step=36:size=110:step2=24:size2=30:C%=&600*2
10700FORi%=0TO359 STEPstep
10710ax=SIN(RAD(i%))*size:ay=COS(RAD(i%))*size
10720c=-COS(RAD(i%)):s=SIN(RAD(i%))
10730FORj%=0TO359 STEPstep2
10740v=SIN(RAD(j%))*size2:w=COS(RAD(j%))*size2
10750x=v:y=0:z=w
10760PROCdot((x*c-y*s)+ax,(x*s+y*c)+ay,z)
10770NEXT:C%+=&600:IFC%=&600*7 THENC%=&600*2
10780NEXT:C%=&600:PROCdot(0,0,0)
10790
10800WHEN 25:
10810tstart=10:pstart=270:tinc=1:pinc=2:tsine=1:psine=0
10820scale=1:PRINT"Random Circles";TAB(15);"Scale: ";scale;TAB(30);"...";
10830FORI=1TO20
10840step=36:size=110:step2=24:size2=30:C%=&600*2
10850i%=RND(360)
10860ax=RND(150)-75:ay=RND(150)-75:az=RND(150)-75
10870c=-COS(RAD(i%)):s=SIN(RAD(i%))
10880xsize=RND(30)+10:ysize=RND(30)+10:FORj%=0TO359 STEPstep2
10890v=SIN(RAD(j%))*xsize:w=COS(RAD(j%))*ysize
10900x=v:y=0:z=w
10910PROCdot((x*c-y*s)+ax,(x*s+y*c)+ay,z+az)
10920NEXT:C%+=&600:IFC%=&600*7 THENC%=&600*2
10930NEXT
10940
10950WHEN 26:
10960tstart=10:pstart=270:tinc=1:pinc=2:tsine=1:psine=0
10970scale=1:PRINT"Circle Box";TAB(15);"Scale: ";scale;TAB(30);"...";
10980step=30:r=50:size=60:C%=&600*2
10990FORi%=0TO359STEPstep:c=COS(RAD(i%))*r:s=SIN(RAD(i%))*r
11000C%=&600*4
11010PROCdot(-r+c,-r+s,r):PROCdot(r+c,-r+s,r)
11020PROCdot(-r+c,r+s,r):PROCdot(r+c,r+s,r)
11030PROCdot(-r+c,-r+s,-r):PROCdot(r+c,-r+s,-r)
11040PROCdot(-r+c,r+s,-r):PROCdot(r+c,r+s,-r)
11050C%=&600*5
11060PROCdot(r,-r+c,-r+s):PROCdot(r,r+c,-r+s)
11070PROCdot(r,-r+c,r+s):PROCdot(r,r+c,r+s)
11080PROCdot(-r,-r+c,-r+s):PROCdot(-r,r+c,-r+s)
11090PROCdot(-r,-r+c,r+s):PROCdot(-r,r+c,r+s)
11100C%=&600*2
11110PROCdot(-r+c,r,-r+s):PROCdot(r+c,r,-r+s)
11120PROCdot(-r+c,r,r+s):PROCdot(r+c,r,r+s)
11130PROCdot(-r+c,-r,-r+s):PROCdot(r+c,-r,-r+s)
11140PROCdot(-r+c,-r,r+s):PROCdot(r+c,-r,r+s)
11150NEXT
11160WHEN 27:
11170tstart=0:pstart=270:tinc=1:pinc=0:tsine=0:psine=0
11180scale=1:PRINT"Lissajous";TAB(15);"Scale: ";scale;TAB(30);"...";
11190angle=0:size=100:amp=80:step=4
11200C%=&600*5:FORi%=0TO359STEPstep
11210PROCdot(SIN(RAD(i%))*size,COS(RAD(i%))*size,SIN(RAD(angle))*amp)
11220angle+=12
11230NEXT
11240
11250WHEN 28:
11260tstart=0:pstart=270:tinc=2:pinc=2:tsine=1:psine=0
11270scale=1:PRINT"Barbers Pole";TAB(15);"Scale: ";scale;TAB(30);"...";
11280r=50:size=60:step=15:C%=&600:l=45/step:m=0
11290FORi%=-size TO size STEP step
11300FORj%=0TO359STEP step
11310m+=1:IFm=l THENC%=C% EOR&A00:m=0
11320PROCdot(SIN(RAD(j%))*r,COS(RAD(j%))*r,i%)
11330NEXT:m+=1:IFm=l THENC%=C% EOR&A00:m=0
11340NEXT:C%=&600*5
11350FORi%=0TO359STEPstep*2
11360FORr=30 TO 50 STEP 10
11370PROCdot(SIN(RAD(i%))*r,COS(RAD(i%))*r,size+step)
11380PROCdot(SIN(RAD(i%))*r,COS(RAD(i%))*r,-size-step)
11390NEXT:NEXT
11400
11410WHEN 29:
11420tstart=0:pstart=0:tinc=2:pinc=3:tsine=0:psine=0
11430scale=1:PRINT"Dice";TAB(15);"Scale: ";scale;TAB(30);"...";
11440size=15
11450RESTORE+15
11460FORyc%=0TO6:READ f$,l$,b$,r$
11470FORxc%=0TOLEN(f$)-1:C%=(ASC(MID$(f$,xc%+1,1))-48)*&600
11480PROCdot((xc%-3)*size+20,(yc%-3)*size+20,size*3):NEXT
11490FORxc%=0TOLEN(b$)-1:C%=(ASC(MID$(b$,xc%+1,1))-48)*&600
11500PROCdot((xc%-3)*size+20,(yc%-3)*size+20,-size*3):NEXT
11510FORxc%=0TOLEN(l$)-1:C%=(ASC(MID$(l$,xc%+1,1))-48)*&600
11520PROCdot(-size*3+20,(yc%-3)*size+20,(xc%-2)*size):NEXT
11530FORxc%=0TOLEN(r$)-1:C%=(ASC(MID$(r$,xc%+1,1))-48)*&600
11540PROCdot(size*3+20,(yc%-3)*size+20,(xc%-2)*size):NEXT
11550NEXT
11560FORj=0TO4:READ t$,b$:FORxc%=0TOLEN(t$)-1:C%=(ASC(MID$(t$,xc%+1,1))-48)*&600
11570PROCdot((xc%-2)*size+20,size*3+20,(j-2)*size):NEXT
11580FORxc%=0TOLEN(b$)-1:C%=(ASC(MID$(b$,xc%+1,1))-48)*&600
11590PROCdot((xc%-2)*size+20,-size*3+20,(j-2)*size):NEXT:NEXT
11600DATA 4444444,44444,4444444,44444
11610DATA 4644464,34444,4544454,44444
11620DATA 4444444,44444,4444444,44444
11630DATA 4644464,44344,4445444,44144
11640DATA 4444444,44444,4444444,44444
11650DATA 4644464,44443,4544454,44444
11660DATA 4444444,44444,4444444,44444
11670
11680DATA 42444,24442
11690DATA 44444,44444
11700DATA 44444,44444
11710DATA 44444,44444
11720DATA 44424,24442
11730
11740WHEN 30:
11750tstart=0:pstart=0:tinc=2:pinc=1:tsine=1:psine=1
11760scale=1:PRINT"Squares";TAB(15);"Scale: ";scale;TAB(30);"...";
11770size=8:zx=size*8:C%=&600:FORi%=3 TO 7 STEP 2:C%=&600*(i%-1)
11780FORa%=-i%+1 TO i%-1 STEP 2:FOR b%=-i%+1 TO i%-1 STEP 2
11790PROCdot(a%*size,b%*size,zx)
11800PROCdot(a%*size,b%*size,-zx)
11810NEXT:NEXT:zx-=size*3:NEXT:C%=&600
11820PROCdot(0,0,size*11):PROCdot(0,0,-size*11)
11830
11840WHEN 31:
11850tstart=0:pstart=0:tinc=2:pinc=1:tsine=1:psine=1
11860scale=1:PRINT"Zig Zag";TAB(15);"Scale: ";scale;TAB(30);"...";
11870zstep=10:zx=100:m=0:inc=10:FORi%=1TO40:C%=&600*RND(6):FORj%=0TO359STEP90
11880PROCdot(SIN(RAD(j%))*m*1.3,COS(RAD(j%))*m*1.3,zx)
11890NEXT:m+=inc:IFm=50 ORm=0 THENinc=-inc
11900zx-=5:NEXT
11910ENDCASE
11920=dots
11930:
11940DEF PROCdot(x,y,z)
11950M%!0=x*scale
11960M%!4=y*scale
11970M%!8=z*scale
11980M%!12=C%
11990M%+=16
12000dots+=1
12010ENDPROC

�     >Source
� by  Simon -Henley- Morris
,� for 32-bit machines, particularly ARM3
(� (c) AU September 1994
2:
<� � �0:�:�;" at line ";�:�
F:
P�0:�
Z:
dș "Hourglass_On"
nfloat=16
x
save=�
�
num=31
�codelength=160*1024
�� code codelength
�:
�'�I%=0 � codelength-1 �4:I%!code=0:�
�:
�
�assem
�ș "Hourglass_Off"
��:ȗ x,y,k:�k<>0 � �-99
��initialise
��
�:
���assem
1�pass=0�2�2:P%=code:L%=codelength+P%:[OPTpass
B initialise

"\ Create our own stack
,%.stack        ]:P%+=&800:[OPTpass
6%.registerdump ]:P%+=&040:[OPTpass
@
JL\ ######################################################################
T
^$.initialise   STR   r0,[pc,#-80]
h)              ADR   r0,registerdump+4
r#              STMIA r0,{r1-r14}
|!              SUB   r13,r0,#8
�M\------------------------------------------------------------------------
�              SWI   256+22
�              SWI   256+9
�              SWI   256+22
�              SWI   256+137
�*              SWI   "OS_RemoveCursors"
�
�!              BL    setcolour
�!              BL    resetcols
�"              BL    getvduvars
�               BL    newshape
�              BL    makenum
�#              BL    swapscreens
7              BL    clearscr    \ Clear all screens
3              BL    swapscreens \ & Synchronise
               BL    clearscr
&!              BL    resetcols
0              MOV   r0,#16
:.fadethemall  BL    fadeout
D               SUBS  r0,r0,#1
N#              BNE   fadethemall
X
b               MOV   r0,#&400
l%              STR   r0,shapetimer
v              MOV   r0,#16
�%              STR   r0,fadeinflag
�.mainloop     MOV   r0,#19
�!              SWI   "OS_Byte"
�#              BL    swapscreens
�               BL    clearscr
�%              LDR   r0,shapetimer
�               SUBS  r0,r0,#1
�%              STR   r0,shapetimer
�              BNE   carryon
�%              LDR   r0,timerreset
�%              STR   r0,shapetimer
�              MOV   r0,#16
�&              STR   r0,fadeoutflag
!              BL    resetcols
&.carryon      LDR   r0,fadeoutflag
              CMP   r0,#0
 !              BEQ   nofadeout
*              BL    fadeout
4              MOV   r1,#16
>               SUBS  r0,r0,#1
H&              STR   r0,fadeoutflag
R              BNE   nofade
\%              STR   r1,fadeinflag
f               BL    newshape
p              BL    makenum
z              B     nofade
�%.nofadeout    LDR   r0,fadeinflag
�              CMP   r0,#0
�              BEQ   nofade
�              BL    fadein
�               SUB   r0,r0,#1
�%              STR   r0,fadeinflag
�
�.nofade       BL    calcall
�              BL    shownum
�              BL    plotall
�
�              MOV   r0,#&81
�              MOV   r1,#&B6
              MOV   r2,#&FF
"              SWI   "XOS_Byte"
              CMP   r1,#&FF
$"              BEQ   checkfades
.
8              MOV   r3,#360
B"              �adr(4,sintable)
L              �adr(0,vars)
V#              LDR   r1,[r0,#28]
`              CMP   r1,#0
j               BEQ   notsinep
t#              LDR   r1,[r0,#36]
~#              LDR   r2,[r0,#20]
�               ADD   r1,r1,r2
�'              CMP   r3,r1,LSR#float
�)              SUBLE r1,r1,#360<<float
�#              STR   r1,[r0,#36]
�'              MOV   r1,r1,LSR#float
�(              LDR   r1,[r4,r1,LSL#2]
�              MOV   r2,#179
�               MUL   r1,r2,r1
�)              ADD   r1,r1,#180<<float
�"              STR   r1,[r0,#8]
�              B     dotheta
�
".notsinep     LDR   r1,[r0,#8]

#              LDR   r2,[r0,#20]
               ADD   r1,r1,r2
'              CMP   r3,r1,LSR#float
()              SUBLE r1,r1,#360<<float
2"              STR   r1,[r0,#8]
<
F#.dotheta      LDR   r1,[r0,#32]
P              CMP   r1,#0
Z               BEQ   notsinet
d#              LDR   r1,[r0,#40]
n#              LDR   r2,[r0,#24]
x               ADD   r1,r1,r2
�'              CMP   r3,r1,LSR#float
�)              SUBLE r1,r1,#360<<float
�#              STR   r1,[r0,#40]
�'              MOV   r1,r1,LSR#float
�(              LDR   r1,[r4,r1,LSL#2]
�              MOV   r2,#179
�               MUL   r1,r2,r1
�)              ADD   r1,r1,#180<<float
�#              STR   r1,[r0,#12]
�"              B     checkfades
�
�#.notsinet     LDR   r1,[r0,#12]
�#              LDR   r2,[r0,#24]
               ADD   r1,r1,r2
'              CMP   r3,r1,LSR#float
)              SUBLE r1,r1,#360<<float
"#              STR   r1,[r0,#12]
,
6&.checkfades   LDR   r0,fadeoutflag
@              CMP   r0,#0
J#              BNE   checkescape
T%              LDR   r0,fadeinflag
^              CMP   r0,#0
h#              BNE   checkescape
r#              LDR   r1,keypress
|              CMP   r1,#0
�               BEQ   newinput
�              MOV   r0,#129
�              MOV   r1,#&9D
�              MOV   r2,#&FF
�!              SWI   "OS_Byte"
�              CMP   r1,#0
�#              STREQ r1,keypress
�#              B     checkescape
�.newinput     MOV   r0,#129
�              MOV   r1,#&9D
�              MOV   r2,#&FF
�!              SWI   "OS_Byte"
�              CMP   r1,#&FF
#              BNE   checkescape
#              STR   r1,keypress
              MOV   r0,#16
&&              STR   r0,fadeoutflag
0!              BL    resetcols
:%              LDR   r0,timerreset
D%              STR   r0,shapetimer
N
X.checkescape  MOV   r0,#129
b              MOV   r1,#&8F
l              MOV   r2,#&FF
v!              SWI   "OS_Byte"
�              CMP   r1,#&FF
�               BNE   mainloop
�
�.resetforfin  MOV   r0,#19
�!              SWI   "OS_Byte"
�#              BL    swapscreens
�               BL    clearscr
�              MOV   r0,#19
�!              SWI   "OS_Byte"
�#              BL    swapscreens
�               BL    clearscr
�
�              MOV   r0,#&7C
4              SWI   "XOS_Byte"    \ Clear Escape

              MOV   r0,#19
 !              SWI   "OS_Byte"
*              SWI   256+22
4              SWI   256+0
>              MOV   r0,#15
H              MOV   r1,#0
R              MOV   r2,#0
\<              SWI   "OS_Byte"    \ Clear Keyboard Buffer
fM\------------------------------------------------------------------------
p&.return       �adr(0,registerdump)
z'              LDMIA r0,{r0-r13,pc}^
�
�.keypress    EQUD  0
�.shapetimer  EQUD  0
�'.timerreset  EQUD  500 \ 10 seconds
�
�7.fadeoutflag EQUD  0   \ 0-nothing   1-16 fadecount
�.fadeinflag  EQUD  0
�
�'.getvduvars  STMFD r13!,{r0-r1,r14}
�             MOV   r0,#112
�             MOV   r1,#1
�              SWI   "OS_Byte"
�             MOV   r0,#113
	             MOV   r1,#2
	              SWI   "OS_Byte"
	%             ADR   r0,screenbases
	$             MOV   r1,r0
	.,             SWI   "OS_ReadVduVariables"
	8&             LDMFD r13!,{r0,r1,pc}
	B
	L.bank        EQUD  1
	V+.screenbases EQUD  148:EQUD 149:EQUD -1
	`
	j*.swapscreens STMFD r13!,{r0,r1,r3,r14}
	t             ADR   r14,bank
	~             MOV   r0,#113
	�             LDR   r1,[r14]
	�             �   r3,r1,#3
	�              SWI   "OS_Byte"
	�             STR   r3,[r14]
	�)             LDR   r12,[r14,r3,LSL#2]
	�)             LDMFD r13!,{r0,r1,r3,pc}
	�
	�H\ Each ball is 20 by 16 and has eight versions for each pixel offset
	�5\ Mask data first followed by 7 different colours
	�,\ Each set of sprites is &600 in length.
	�
	�".balldata ]:P%+=&2A00:[OPTpass
&.plotall  STMFD  r13!,{r0-r11,r14}

          �adr(10,balldata)
<          �adr(11,zorder)        \ Address of plot order
          �adr(14,dest-16)
(           LDR    r9,nocoords
2%          ADD    r11,r11,r9,LSL#2
<          SUB    r11,r11,#4
F!.mainloop LDR    r7,[r11],#-4
P$          ADD    r7,r14,r7,LSL#4
Z%          LDMIA  r7,{r0,r1,r4,r2}
d          MOV    r2,r4
n
x          �    r4,r0,#7
�          BIC    r0,r0,#7
�$          ADD    r0,r12,r0,LSR#1
�#          ADD    r0,r0,r1,LSL#7
�:          ADD    r0,r0,r1,LSL#5    \ r0 is screen addr
�
�$          ADD    r1,r10,r4,LSL#7
�8          ADD    r1,r1,r4,LSL#6    \ r1 is mask addr
�8          ADD    r2,r1,r2          \ r2 is ball addr
�!          ]:�I%=1�16:[OPTpass
�=          LDMIA  r0,{r3-r5}        \ Speedy mask and plot
�           LDMIA  r1!,{r6-r8}
�          �    r3,r3,r6
�          �    r4,r4,r7
          �    r5,r5,r8
           LDMIA  r2!,{r6-r8}
          �R    r3,r3,r6
"          �R    r4,r4,r7
,          �R    r5,r5,r8
6          STMIA  r0,{r3-r5}
@          ADD    r0,r0,#160
J          ]:�:[OPTpass
T          SUBS   r9,r9,#1
^          BNE    mainloop
h%          LDMFD  r13!,{r0-r11,pc}
r
|	.vars
�.nocoords EQUD   0
�.coordsad EQUD   0
�.phi      EQUD   0
�.theta    EQUD   0
� .dataadd  EQUD   (dest-vars)
�
�.phiinc   EQUD   0
�.thetainc EQUD   0
�.phisin   EQUD   0
�.thetasin EQUD   0
�.phiangle EQUD   0
�.theangle EQUD   0
�
+\ Display number of balls on the screen
).shownum  STMFD  r13!,{r0-r6,r12,r14}
           ADD    r12,12,#100
&          ADR    r0,bits
02          LDMIA  r0!,{r1-r6}:STMIA r12,{r1-r3}
:2          ADD    r12,12,#160:STMIA r12,{r4-r6}
DD          ADD    r12,12,#160:LDMIA r0!,{r1-r6}:STMIA r12,{r1-r3}
N2          ADD    r12,12,#160:STMIA r12,{r4-r6}
XD          ADD    r12,12,#160:LDMIA r0!,{r1-r6}:STMIA r12,{r1-r3}
b2          ADD    r12,12,#160:STMIA r12,{r4-r6}
lD          ADD    r12,12,#160:LDMIA r0!,{r1-r6}:STMIA r12,{r1-r3}
v2          ADD    r12,12,#160:STMIA r12,{r4-r6}
�(          LDMFD  r13!,{r0-r6,r12,pc}
�
�".bits     ]:P%+=4*8*3:[OPTpass
�
�9\ Create screen data for a number, rather than use OS
�&.makenum  STMFD  r13!,{r0-r12,r14}
�          �ldr(0,nocoords)
�          ADR    r1,buffer
�          MOV    r2,#16
�*          SWI    "OS_ConvertCardinal2"
�          LDR    r2,[r0]
�          SUB    r1,r1,r0
�          CMP    r1,#1

D          �Q  r2,r2,LSL#16  \ Maximum string length of 3 (0-999)

          �REQ  r2,r2,#&30

A          �REQ  r2,r2,#&3000  \ Add leading zeros if required

           CMP    r1,#2

*          �Q  r2,r2,LSL#8

4          �REQ  r2,r2,#&30

>          MOV    r1,#3

H          ADR    r0,bits

R           ADR    r3,fontdata

\.numbloop �    r4,r2,#&FF

f           MOV    r2,r2,LSR#8

p          SUB    r4,r4,#48

z)          ADD    r4,r3,r4,LSL#5 \ *32

�           LDMIA  r4,{r5-r12}

�          MOV    r4,r0

�0          STR    r5,[r4],#12:STR r6,[r4],#12

�0          STR    r7,[r4],#12:STR r8,[r4],#12

�1          STR    r9,[r4],#12:STR r10,[r4],#12

�2          STR    r11,[r4],#12:STR r12,[r4],#12

�          ADD    r0,r0,#4

�          SUBS   r1,r1,#1

�          BNE    numbloop

�%          LDMFD  r13!,{r0-r12,pc}

�

�.buffer   ]:P%+=16:[OPTpass

�!.fontdata ]:P%+=&140:[OPTpass

K]:count=0:coords=1:cp=2:st=3:sp=4:ct=5:nst=6:nsp=7:x=8:y=9:z=10:frac=11
+newx=12:newy=x:togo=14:temp=12:[OPTpass
$
.M\ This routine transforms coordinates around 2 axis, and adds perspective
8&.calcall  STMFD  r13!,{r0-r12,r14}
B          ADR    r4,vars
L-          \ get nc,cordsad,phi,theta,togo
V)          LDMIA  r4,{r0,r1,r2,r3,r14}
`          ADD    r14,r14,r4
j           ADR    r6,sintable
tL          ADD    r7,r6,#&168      \ &168 = 90*4 (Cos derived by Sin+90 )
~$          MOV    r2,r2,LSR#float
�$          MOV    r3,r3,LSR#float
�4          LDR    sp,[r6,r2,LSL#2] \ r4 = sin phi
�6          LDR    ct,[r7,r3,LSL#2] \ r5 = cos theta
�6          LDR    st,[r6,r3,LSL#2] \ r3 = sin theta
�4          LDR    cp,[r7,r2,LSL#2] \ r2 = cos phi
�0          RSB    nst,st,#0        \nst = -st
�0          RSB    nsp,sp,#0        \nsp = -sp
�
�8          ADD    frac,PC,#(fractions-8-P%+255*4)�256
�A          ADD    frac,frac,#((fractions-8-P%+255*4)�256)*&100
�
�N.calcs    LDMIA  coords !,{x,y,z}   \ x, y, z and (we'll get colour later)
          MUL    newx,y,nst

:          MLA    newx,x,ct,newx     \ newx = ct*x-st*y

          MUL    y,ct,y
(:          MLA    y,x,st,y           \    y = st*x+ct*y
2"          MOV    y,y,ASR#float
<
F          MUL    newy,z,nsp
P:          MLA    newy,y,cp,newy     \ newy = cp*y-sp*z
Z
d          MUL    z,cp,z
n:          MLA    z,sp,y,z           \    z = sp*y+cp*z
x!          \ x=newx y=newy z=z
�%          MOV    y,newy,ASR#float
�%          MOV    x,newx,ASR#float
�"          MOV    z,z,ASR#float
�          MOV    temp,z
�
�+          LDR    temp,[frac,temp,LSL#2]
�
�          MUL    x,temp,x
�          MUL    y,temp,y
�7          MOV    temp,#128         \ Origin 128,128
�'          ADD    x,temp,x,ASR#float
�'          ADD    y,temp,y,ASR#float
�%          LDR    temp,[coords],#4
(          STMIA  togo !,{x,y,z,temp}
#          SUBS   count,count,#1
          BNE    calcs
"          B      sort
,
6".sintable ]:P%+=360*8:[OPTpass
@#.fractions ]:P%+=514*4:[OPTpass
J
T=.regclear EQUD0:EQUD0:EQUD0:EQUD0:EQUD0:EQUD0:EQUD0:EQUD0
^=          EQUD0:EQUD0:EQUD0:EQUD0:EQUD0:EQUD0:EQUD0:EQUD0
h
rO\ Heres a fun routine! This one is a 'bin sort', and needs to be very quick
|.sort     �adr(0,regclear)
�!          LDMIA   r0,{r3-r12}
�          �adr(0,zlist)
�          MOV     r2,r0
�          MOV     r1,#16
�A.resetlp  STMIA   r0!,{r3-r12} \ 64 lots of ten. (trim later)
�"          STMIA   r0!,{r3-r12}
�          SUBS    r1,r1,#1
�          BNE     resetlp
�K          �ldr(0,nocoords)        \ r0 is number of coordinates to sort
�N          �adr(1,dest+8)          \ r1 is address of first 'z' coordinate.
�M          �adr(3,spare)           \ r3 is adr of spare (r2 is zlist addr)
�E          �adr(12,zorder)         \r12 is address of ordered list
�Q          ADD     r0,r0,#1         \ to compensate-data doesn't begin at zero
3          MOV     r4,#1            \ r4 = count
L          MOV     r5,#1            \ r5 = index for items (0-noofcoords)
!          MOV     r10,#&10000
&D          SUB     r10,r10,#1       \ R10 = &FFFF (mask for data)
04.sortit1  LDR     r6,[r1],#16      \ get z coord
:M          ADD     r6,r6,#160       \ add 160 (gives us a range of +- 160)
D6          LDR     r7,[r2,r6,LSL#2] \ get zlist(zc)
N          MOVS    r7,r7
XB          STREQ   r5,[r2,r6,LSL#2] \ store index if nowt there
b          BEQ     next
l4          �     r8,r7,r10,LSL#16 \ r8 is pointer
v1          �     r9,r7,r10        \ r9 is data
�>          �R     r9,r9,r4,LSL#16  \ r9 is now |count|data|
�>          STR     r9,[r2,r6,LSL#2] \ store r9 in zlist(zc)
�A          �R     r9,r5,r8         \ r9 is now |index|pointer|
�A          STR     r9,[r3,r4,LSL#2] \ store r9 in spare(count)
�8          ADD     r4,r4,#1         \ increment count
�8.next     ADD     r5,r5,#1         \ increment index
�          CMP     r5,r0
�B          BNE     sortit1          \ Thats the easy bit folks!
�G                                   \ registers 4-11 are uncommitted
�F                                   \ register 0 is noofcoords (i%)
�:          MOV     r4,#320          \ r4 is maxelements
�9.sortit2  LDR     r5,[r2],#4       \ Get zlist(count)
�          MOVS    r5,r5
7          BEQ     next2            \ Ignore if zero
C          �S    r6,r5,r10,LSL#16 \ r6 is pointer. Is it single?
>          STREQ   r5,[r12],#4      \ Yes. Store in zorder.
 ;          BEQ     next2            \ Skip, and get next
*E          �     r7,r5,r10        \ r7 is data (coordinate number)
4=.afew     STR     r7,[r12],#4      \ store data in zorder
>H          LDR     r6,[r3,r6,LSR#14]\ get new pointer|data from spare
H5          �     r7,r6,r10        \ r7 is new data
R8          �S    r6,r6,r10,LSL#16 \ r6 is new pointer
\G          BNE     afew             \ continue until pointer is zero
f=          STR     r7,[r12],#4      \ store data in zorder
p8.next2    SUBS    r4,r4,#1         \ until all done.
z          BNE     sortit2
�&          LDMFD   r13!,{r0-r12,pc}
�
�%.dest       ]:P%+=640*16:[OPTpass
�P.zlist      ]:P%+=320*4:[OPTpass   \ 320 means coordinates from -160 to 159.
�$.spare      ]:P%+=640*4:[OPTpass
�$.zorder     ]:P%+=640*4:[OPTpass
�
�&.newshape   STMFD r13!,{r0-r2,r14}
�#            ADR   r0,shapetable
�!            LDR   r1,[r0,#-4]
�            ADD   r2,r1,#1
�6            CMP   r2,#(num+1)   \ Number of shapes
�            �Q r2,#0
!            STR   r2,[r0,#-4]
1            LDR   r2,[r0,r1,LSL#5]! \ address
            ADD   r2,r2,r0
$:            LDR   r1,[r0,#4]        \ number of coords
.            �adr(14,vars)
8&            STR   r1,[r14]    \ nc
B+            STR   r2,[r14,#4] \ address
L             LDR   r1,[r0,#8]
V'            STR   r1,[r14,#8] \ phi
`*            STR   r1,[r14,#36] \ angle
j!            LDR   r1,[r0,#12]
t*            STR   r1,[r14,#12] \ theta
~*            STR   r1,[r14,#40] \ angle
�!            LDR   r1,[r0,#16]
�,            STR   r1,[r14,#20] \ phi inc
�!            LDR   r1,[r0,#20]
�.            STR   r1,[r14,#24] \ theta inc
�!            LDR   r1,[r0,#24]
�-            STR   r1,[r14,#28] \ phi flag
�!            LDR   r1,[r0,#28]
�/            STR   r1,[r14,#32] \ theta flag
�%            LDMFD r13!,{r0-r2,pc}
�
�.shapenum   EQUD  0
�
C.shapetable ]:P%+=32*32:[OPTpass    \ address, number of coords

E.coords     ]:P%+=7000*16:[OPTpass  \ *16 = !x , !y , !z, !colour

            \ IMPORTANT �E:
(N            \ The 7000 above represents the total number of dots required.
2K            \ If you alter any of the shapes, make sure that this value
<J            \ is equal to or above to the total amount of coordinates.
FM            \ If you increase this value, be sure to adjust the amount of
PN            \ space reserved for the code in the beginning of the program.
Z
dQ.zeroreg     DCD0:DCD0:DCD0:DCD0:DCD0:DCD0:DCD0:DCD0:DCD0:DCD0:DCD0:DCD0:DCD0
n
x(.clearscr    STMFD r13!,{r0-r12,r14}
�!             ADR   r0,zeroreg
�'             LDMIA r0!,{r0-r11,r14}
�%             ]:�I%=1�787:[OPTpass
�(             STMIA r12!,{r0-r11,r14}
�             ]:�:[OPTpass
�#             STMIA r12!,{r0-r8}
�'             LDMFD r13!,{r0-r12,pc}
�
�'.setcolour STMFD   r13!,{r0-r2,r14}
�!           ADR     r1,palette
�           MOV     r2,#96
�!.colloop   LDRB    r0,[r1],#1
�"           SWI     "OS_WriteC"
           SUBS    r2,r2,#1
           BNE     colloop
&           LDMFD   r13!,{r0-r2,pc}
"
,!.palette   ]:P%+=120:[OPTpass
6#.colreset  ]:P%+=16*12:[OPTpass
@#.colfade   ]:P%+=16*12:[OPTpass
J
T%.resetcols STMFD r13!,{r0-r4,r14}
^            ADR   r0,colreset
h            ADR   r14,colfade
r           MOV   r4,#16
| .resetloop LDMIA r0!,{r1-r3}
�!           STMIA r14!,{r1-r3}
�           SUBS  r4,r4,#1
�           BNE   resetloop
�$           LDMFD r13!,{r0-r4,pc}
�
�G\ Sorry about the hardware access folks, but �19 was just too slow.
�%.fadeout   STMFD r13!,{r0-r7,r14}
�!           SWI   "OS_EnterOS"
�!           MOV   r7,#&3400000
�           ADR   r5,colfade
�           MOV   r6,#15
�.fadeoloop LDMIA r5,{r1-r3}
�#           �R   r0,r1,r6,LSL#26
"           �R   r0,r0,r2,LSL#4
"           �R   r0,r0,r3,LSL#8
           STR   r0,[r7]
&)           SUBS  r1,r1,#1:MOVMI r1,#0
0)           SUBS  r2,r2,#1:MOVMI r2,#0
:)           SUBS  r3,r3,#1:MOVMI r3,#0
D            STMIA r5!,{r1-r3}
N           SUBS  r6,r6,#1
X           BPL   fadeoloop
b           TEQP  pc,#0
l           MOVNV r0,r0
v$           LDMFD r13!,{r0-r7,pc}
�
�&.fadein    STMFD r13!,{r0-r11,r14}
�!           SWI   "OS_EnterOS"
�"           MOV   r11,#&3400000
�           ADR   r5,colfade
�            ADR   r7,colreset
�           MOV   r6,#15
�.fadeiloop LDMIA r5,{r1-r3}
�!           LDMIA r7!,{r8-r10}
�#           �R   r0,r1,r6,LSL#26
�"           �R   r0,r0,r2,LSL#4
�"           �R   r0,r0,r3,LSL#8
�           STR   r0,[r11]
3           ADD   r1,r1,#1:CMP r1,r8:MOVGE r1,r8
3           ADD   r2,r2,#1:CMP r1,r9:MOVGE r2,r9
5           ADD   r3,r3,#1:CMP r1,r10:MOVGE r3,r10
             STMIA r5!,{r1-r3}
*           SUBS  r6,r6,#1
4           BPL   fadeiloop
>           TEQP  pc,#0
H           MOVNV r0,r0
R%           LDMFD r13!,{r0-r11,pc}
\
f]:�
p;�"Code from &";~code;"-&";~P%;" (";(P%-code)�1024;"K)."
z,�"LOAD <Dizzy$Dir>.RawBall9 "+�~balldata
�+�"LOAD <Dizzy$Dir>.Palette  "+�~palette
�,�"LOAD <Dizzy$Dir>.Font     "+�~fontdata
�
� M%=palette:N%=colreset+15*12
�$�I%=1�16:R%=M%?3:G%=M%?4:B%=M%?5
�0!N%=R%�16:N%!4=G%�16:N%!8=B%�16:N%-=12:M%+=6
��
�
�8M%=sintable:�I%=0 � 449:!M%=�(�(I%))*2^float:M%+=4:�
�BM%=fractions:�I%=-255�255:!M%=192*(1/(I%+256))*2^float:M%+=4:�
�
�scale=1
�
M%=coords:N%=shapetable
totaldots=0
cnt%=num
$�cnt%=0 � num
.3tstart=0:pstart=0:tinc=1:pinc=1:tsine=0:psine=0
8
!N%=M%-N%
B)!nocoords=�shape(cnt%):N%!4=!nocoords
L,N%!8=pstart*2^float:N%!12=tstart*2^float
V)N%!16=pinc*2^float:N%!20=tinc*2^float
`"N%!24=psine:N%!28=tsine:N%+=32
j�;!nocoords
ttotaldots+=!nocoords
~�
�<�"total coordinates ";totaldots;".  Press space bar...."
��save �
�2�"Save <Dizzy$Dir>.!RunImage "+�~code+" "+�~P%
�&*SETTYPE <Dizzy$Dir>.!RunImage FF8
��
��
�
�ݤadr(dest,addr)
��pass=0 �addr=P%
��addr<P% �
�addr=P%-addr+8
�-�addr>&FFFF ��7:�"ILLEGAL ADR ATTEMPT.":�
D[OPTpass:SUB dest,pc,#(addr �&FF00):SUB dest,dest,#(addr �&FF):]

�
addr=addr-P%-8
-�addr>&FFFF ��7:�"ILLEGAL ADR ATTEMPT.":�
(D[OPTpass:ADD dest,pc,#(addr �&FF00):ADD dest,dest,#(addr �&FF):]
2�
<=0
F
Pݤldr(dest,addr)
Z�pass=0 �addr=P%
d�addr<P% �
naddr=P%-addr+8
x-�addr>&FFFF ��7:�"ILLEGAL ADR ATTEMPT.":�
�G[OPTpass:SUB dest,pc,#(addr �&FF00):LDR dest,[dest,#-(addr �&FF)]:]
��
�addr=addr-P%-8
�-�addr>&FFFF ��7:�"ILLEGAL ADR ATTEMPT.":�
�F[OPTpass:ADD dest,pc,#(addr �&FF00):LDR dest,[dest,#(addr �&FF)]:]
��
�=0
�
�� �shape(shape)
�
dots=0
�Ȏ shape �
�	 � 0:
�3tstart=0:pstart=0:tinc=1:pinc=2:tsine=0:psine=0
7scale=1:�"'Hello'";�15);"Scale: ";scale;�30);"...";
  � blk 100
  text$="Hello"
"  a=6:m=-((�(text$)*8)/2)
,C%=0
6  � b=1 � �text$
@ C%+=&600:�C%=&600*7 �C%=&600
J   blk?0=��text$,b)
T   ș "OS_Word",10,blk
^$� c=0 � 7:B%=blk?(c+1):� d=0 � 7
h3�(B% � 2^d)<>0 ��dot(((7-d)+m)*a,(c-4)*a*2,-20)
r�:�:m+=8:�
|	 � 1:
�3tstart=0:pstart=0:tinc=1:pinc=1:tsine=1:psine=0
�step=17:limit=51
�5scale=1.4:�"Box";�15);"Scale: ";scale;�30);"...";
�  � a=-limit � limit � step
�    � b=-limit � limit � step
�
C%=&600*1
�    �dot(a,b,-limit)
�
C%=&600*2
�    �dot(a,b,limit)
�   �
�  �
�-  � a=(-limit+step) � (limit-step) � step
�-  � b=(-limit+step) � (limit-step) � step

C%=&600*3
    �dot(a,-limit,b)

C%=&600*4
&    �dot(a,limit,b)
0   �
:  �
D-  � a=(-limit+step) � (limit-step) � step
N  � b=-limit � limit � step
XC%=&600*5:�dot(-limit,b,a)
bC%=&600*6:�dot(limit,b,a)
l�:�
v	 � 2:
�3tstart=0:pstart=0:tinc=2:pinc=2:tsine=0:psine=0
�5scale=1:�"Rings";�15);"Scale: ";scale;�30);"...";
�  � a=0 � 350 � 10
�   cos=80*��a
�   sin=80*��a
�C%=&600
�    �dot(100,cos,sin)
�
C%=&600*2
�    �dot(-100,cos,sin)
�
C%=&600*3
�    �dot(cos,100,sin)
�
C%=&600*4
�    �dot(cos,-100,sin)

C%=&600*5
    �dot(cos,sin,100)

C%=&600*6
     �dot(cos,sin,-100)
*   �
4	 � 3:
>3tstart=0:pstart=0:tinc=2:pinc=1:tsine=0:psine=0
H@scale=1:C%=&600*6::�"Bulbs";�15);"Scale: ";scale;�30);"...";
R  � r=20 � 60 � 20
\
   b=r+40
f!step2=20:�r<50 �step2=step2*2
p   � a=0 � 350 � step2
z    cos=r*��a
�    sin=r*��a
�    �dot(b,cos,sin)
�    �dot(-b,cos,sin)
�    �dot(cos,b,sin)
�    �dot(cos,-b,sin)
�    �dot(cos,sin,b)
�    �dot(cos,sin,-b)
�   �
�  �
�	 � 4:
�4tstart=0:pstart=30:tinc=1:pinc=1:tsine=1:psine=1
�6scale=0.7:�"Tube";�15);"Scale: ";scale;�30);"...";
�col=1:inc=1
  � a=-100 � 100 � 20
C%=&600*col
�col=4 �C%=&600*5
$�col=5 �C%=&600*4
.   � b=0 � 345 � 18
8    �dot(80*��b,a,80*��b)
B   �
Lcol+=inc:�col=6 �inc=-1
V  �
`	 � 5:
j4tstart=0:pstart=90:tinc=2:pinc=1:tsine=1:psine=1
t8scale=1::�"Girders";�15);"Scale: ";scale;�30);"...";
~
C%=&600*3
�  � a=-120 � -30 � 10
�   � b=0 � 300 � 90
�    cos=30*��b
�    sin=30*��b
�    �dot(a,cos,sin)
�    �dot(cos,a,sin)
�   �dot(cos,sin,a)
�    �dot(-a,cos,sin)
�    �dot(cos,-a,sin)
�    �dot(cos,sin,-a)
�   �
�  �
	 � 6:

3tstart=0:pstart=0:tinc=1:pinc=1:tsine=0:psine=1
7scale=0.7::�"Vase";�15);"Scale: ";scale;�30);"...";

C%=&600*4
(  � a=-1 � .9 � .1
2   r=100-70*��(a*90+90)
<   � b=0 � 340 � 24
F    �dot(r*��b,a*100,r*��b)
P   �
Z  �
d	 � 7:
n4tstart=0:pstart=90:tinc=2:pinc=2:tsine=0:psine=0
x>scale=1:C%=&600*4:�"Tyre";�15);"Scale: ";scale;�30);"...";
�  � a=0 � 340 � 20
�   � b=0 � 350 � 24
�    r=70+30*��b
�     �dot(r*��a,30*��b,r*��a)
�   �
�  �
�	 � 8:
�3tstart=0:pstart=0:tinc=1:pinc=4:tsine=1:psine=0
�scale=1
�+�"DNA";�15);"Scale: ";scale;�30);"...";
�C%=&600
�  � a=0 � 300 � 60
�   � b=0 � 320 � 40
    r=70+25*��b
#    �dot(r*��a-35,25*��b,r*��a)
#    �dot(r*��a+35,r*��a,25*��b)
"   �
,C%+=&600
6�C%=&600*8 �C%=&600
@  �
J	 � 9:
T5tstart=0:pstart=120:tinc=1:pinc=0:tsine=1:psine=0
^scale=1:C%=&600
h2�"Music Grid";�15);"Scale: ";scale;�30);"...";
rsize=10:C%=&600
|add=-size*11:�n=1�8
��a=-1�1:�b=-1�1
�!�dot(a*size,b*size+add,0):�:�
�add+=size*3:C%+=&600
��C%=&600*4 �C%=&600*5
��C%=&600*6 �C%=&600*1
��
�=C%=&600*4:�a=-2�2:�b=-13�12:�dot(a*size,b*size,-size):�:�
�
�	� 10:
�4tstart=0:pstart=90:tinc=1:pinc=1:tsine=0:psine=1
�scale=1:C%=&600
�3�"Grid Sphere";�15);"Scale: ";scale;�30);"...";
�size=100:step=10
 
C%=&600*2
 "�dot(0,0,size):�dot(0,0,-size)
 "�dot(size,0,0):�dot(-size,0,0)
 &"�dot(0,size,0):�dot(0,-size,0)
 0�i%=step � 180-step � step
 :#s=�(�(i%))*size:c=�(�(i%))*size
 D&C%=&600*1:�dot(s,c,0):�dot(-s,c,0)
 N&C%=&600*3:�dot(0,s,c):�dot(0,-s,c)
 X&C%=&600*4:�dot(s,0,c):�dot(-s,0,c)
 b�
 l	� 11:
 v3tstart=0:pstart=0:tinc=1:pinc=1:tsine=1:psine=0
 �scale=1:C%=&600*4
 �4�"Whole Sphere";�15);"Scale: ";scale;�30);"...";
 �size=100:step=15
 ��a%=0 � 359 � step
 �s=�(�(a%)):c=�(�(a%))
 �"�i%=step*2 � 180-step*2 � step
 �#x=�(�(i%))*size:y=�(�(i%))*size
 �!�dot(x*c,y,x*s):C%=C% � &3C00
 ��:�
 �,C%=&600:�i%=-size-step � size+step �step
 ��dot(0,i%,0):�
 �	� 12:
 �3tstart=0:pstart=0:tinc=1:pinc=1:tsine=0:psine=0
!
scale=1.5
!.�"Random";�15);"Scale: ";scale;�30);"...";
!
� a=1�270
! C%=&600*�(6)
!*C%=&600
!4'�dot(�(100)-50,�(100)-50,�(100)-50)
!>�
!H
 � 13:
!R3tstart=0:pstart=0:tinc=4:pinc=1:tsine=0:psine=1
!\
scale=1.5
!f5�"Circular Pegs";�15);"Scale: ";scale;�30);"...";
!p
C%=&600*4
!z  � a=-80 � -30 � 20
!�   � b=0 � 330 � 30
!�    cos=30*��b
!�    sin=30*��b
!�
C%=&600*1
!�    �dot(a,cos,sin)
!�
C%=&600*2
!�    �dot(cos,a,sin)
!�
C%=&600*3
!�    �dot(cos,sin,a)
!�
C%=&600*4
!�    �dot(-a,cos,sin)
!�
C%=&600*5
!�    �dot(cos,-a,sin)
"
C%=&600*6
"    �dot(cos,sin,-a)
"   �
"$  �
".
"8	� 14:
"B5tstart=0:pstart=315:tinc=2:pinc=1:tsine=0:psine=1
"L7scale=1.4:�"'Arm'";�15);"Scale: ";scale;�30);"...";
"V  � blk 100
"`  text$="ARM"
"j  a=6:m=-((�(text$)*8)/2)
"t  � b=1 � �text$
"~   blk?0=��text$,b)
"�   ș "OS_Word",10,blk
"�/� c=0 � 6:B%=blk?(c+1):K%=B% � -1:� d=0 � 7
"�;C%=&600*2:�(B% � 2^d)<>0 ��dot(((7-d)+m)*a,(c-4)*a*2,0)
"�(�(K% � 2^d)<>0 �C%=&600*4 �C%=&600*1
"�"�dot(((7-d)+m)*a,(c-4)*a*2,40)
"��:�:m+=8:�
"�
"�	� 15:
"�5tstart=0:pstart=270:tinc=1:pinc=0:tsine=1:psine=0
"�:scale=1.3:�"'Henley'";�15);"Scale: ";scale;�30);"...";
"�  � blk 100
"�  text$="Henley      "
#  a=70:m=360/(�(text$)*8)
#
angle=0
#  � b=�text$ � 1 � -1
#   blk?0=��text$,b)
#(   ș "OS_Word",10,blk
#21� c=0 � 7:sin=�(�(angle))*a:cos=�(�(angle))*a
#<� d=0 � 7:B%=blk?(d+1)
#F
C%=&600*6
#Po�(B% � 2^c)<>0 ��dot(sin,cos,(d-4)*11):C%=&600*4:�dot(�(�(angle+180))*a*0.8,�(�(angle+180))*a*0.8,(d-4)*10)
#Z�:angle-=m:�:�
#d	� 16:
#n5tstart=0:pstart=270:tinc=2:pinc=0:tsine=0:psine=0
#x4scale=1:�"RISC";�15);"Scale: ";scale;�30);"...";
#�  � blk 100
#�  text$="risc"
#�  a=70:m=360/(�(text$)*8)
#�angle=0
#�  � b=�text$ � 1 � -1
#�   blk?0=��text$,b)
#�   ș "OS_Word",10,blk
#�1� c=0 � 7:sin=�(�(angle))*a:cos=�(�(angle))*a
#�� d=0 � 7:B%=blk?(d+1)
#�
C%=&600*2
#��(B% � 2^c)<>0 �
#��dot(sin,cos,(d-4)*11)
#�,C%=&600*1:�dot(sin*0.6,cos*0.6,(d-4)*10)
$�
$,C%=&600*4:�dot(sin*0.6,cos*0.6,(d-4)*10)
$�
$"�:angle-=m:�:�
$,	� 17:
$64tstart=0:pstart=90:tinc=2:pinc=0:tsine=1:psine=0
$@8scale=1.4:�"Spiral";�15);"Scale: ";scale;�30);"...";
$Jk=1:angle=0
$T1�zangle=-80 � 80 � 1:C%=&600*k:k+=1:�k=7 �k=1
$^.�dot(�(�(angle))*40,�(�(angle))*40,zangle)
$hangle+=10:�
$r	� 18:
$|4tstart=10:pstart=0:tinc=1:pinc=2:tsine=0:psine=0
$�7scale=1.4:�"House";�15);"Scale: ";scale;�30);"...";
$�size=10
$��+11
$��yc%=0�8:� f$,l$,b$,r$
$�/�xc%=0��(f$)-1:C%=(�(�f$,xc%+1,1))-48)*&600
$�,�dot((xc%-3)*size,(yc%-4)*size,size*2):�
$�/�xc%=0��(b$)-1:C%=(�(�b$,xc%+1,1))-48)*&600
$�-�dot((xc%-3)*size,(yc%-4)*size,-size*2):�
$�/�xc%=0��(l$)-1:C%=(�(�l$,xc%+1,1))-48)*&600
$�-�dot(-size*4,(yc%-4)*size,(xc%-2)*size):�
$�/�xc%=0��(r$)-1:C%=(�(�r$,xc%+1,1))-48)*&600
$�,�dot(size*4,(yc%-4)*size,(xc%-2)*size):�
$��
%;�j=0�2:� b$:�xc%=0��(b$)-1:C%=(�(�b$,xc%+1,1))-48)*&600
%,�dot((xc%-3)*size,size*4,(j-1)*size):�:�
%;�j=0�2:� b$:�xc%=0��(b$)-1:C%=(�(�b$,xc%+1,1))-48)*&600
%& �j=1 �add=-size*2 �add=-size
%01�dot((xc%-4)*size,-size*4+add,(j-1)*size):�:�
%: �dot(-4*size,-5*size,0*size)
%D�dot(4*size,-5*size,0*size)
%N �dot(-3*size,-7*size,0*size)
%X!� 1111111,11111,1111111,11111
%b!� 2222222,22222,2222222,22222
%l!� 4442444,22222,2222222,22222
%v!� 4542454,22222,2222222,22222
%�!� 4442444,22222,2222222,22222
%�!� 2222222,22222,2222222,22222
%�!� 2233322,22222,2222222,22222
%�!� 2233322,22222,2222222,22222
%�!� 2233322,22222,2222222,22222
%�� 2222222,2222222,2222222
%�#� 111111111,111111111,111111111
%�	� 19:
%�5tstart=0:pstart=180:tinc=5:pinc=1:tsine=0:psine=0
%�:scale=1:�"Dumb bells";�15);"Scale: ";scale;�30);"...";
%�size=100:step=20:C%=&600
%�zc=-90:�m=1�2
%�0�a%=0 � 180 � step:size=�(�(a%))*50:step2=24
&�size<20 �step2=48
&�size<10 �step2=360
&�b%=0�359�step2
& C%=C% � &A00
&*s=�(�(b%)):c=�(�(b%))
&4�dot(s*size,c*size,zc)
&>�:zc+=10:�:C%=&600*4:�
&H
&R	� 20:
&\3tstart=0:pstart=0:tinc=2:pinc=1:tsine=1:psine=0
&f:scale=1:�"Axis Balls";�15);"Scale: ";scale;�30);"...";
&p(C%=&600:size=30:step=36:osize=size*3
&z'ca%=1:cb%=2:cc%=3:cd%=4:ce%=5:cf%=6
&��i%=0 � 180 � step
&�#x=�(�(i%))*size:y=�(�(i%))*size
&�step2=step
&�!�i%<40 � i%>140 �step2=step*2
&��i%<10 � i%>170 �step2=360
&��a%=0 � 359 � step2
&�s=�(�(a%)):c=�(�(a%))
&�/C%=ca%*&600:ca%=ca%�3:�dot(x*c-osize,y,x*s)
&�/C%=cb%*&600:cb%=cb%�1:�dot(x*c+osize,y,x*s)
&�/C%=cc%*&600:cc%=cc%�7:�dot(x*c,y-osize,x*s)
&�/C%=cd%*&600:cd%=cd%�1:�dot(x*c,y+osize,x*s)
&�/C%=ce%*&600:ce%=ce%�3:�dot(x*c,y,x*s-osize)
&�/C%=cf%*&600:cf%=cf%�7:�dot(x*c,y,x*s+osize)
'C%=&600*4:�dot(x*c,y,x*s)
'�:�
'
'$	� 21:
'.4tstart=10:pstart=0:tinc=1:pinc=2:tsine=0:psine=0
'89scale=1.4:�"Warning";�15);"Scale: ";scale;�30);"...";
'Bsize=10
'L�+4
'V>�yc%=0�14:� f$:�xc%=0��(f$)-1:C%=(�(�f$,xc%+1,1))-48)*&600
'`-�C%<>0 ��dot((xc%-7)*size,(yc%-7)*size,0)
'j�:�
't� 000000010000000
'~� 000000010000000
'�� 000000111000000
'�� 000000121000000
'�� 000001121100000
'�� 000001242100000
'�� 000011444110000
'�� 000012444210000
'�� 000112444211000
'�� 000122242221000
'�� 001122222221100
'�� 001222242222100
'�� 011222444222110
'�� 012222242222210
(� 111111111111111
(
	� 22:
(6tstart=10:pstart=270:tinc=2:pinc=0:tsine=0:psine=0
(6scale=1.4:�"Face";�15);"Scale: ";scale;�30);"...";
((size=10:bend=30
(2�+6
(<angle=0
(Fi�yc%=0�14:angle2=0:� f$:�xc%=0��(f$)-1:C%=(�(�f$,xc%+1,1))-48)*&600:syc=�(�(angle2))*bend*�(�(angle))
(P�C%=&600 �syc+=size
(Z�C%=&600*5 �syc+=size/2
(d�C%=&600*4 �syc+=(size/1.5)
(n/�C%<>0 ��dot((xc%-7)*size,syc,(yc%-7)*size)
(xangle2+=12
(��:angle+=12:�
(�� 000222222222000
(�� 002266666662220
(�� 022666666666620
(�� 226655666556622
(�� 266554565455662
(�� 266655666556662
(�� 666666111666666
(�� 666661111166666
(�� 666666111666666
(�� 066446666664660
(�� 066646666644660
(�� 006644455446600
)� 006666444466600
)� 000066666660000
)� 000000666000000
)"
),	� 23:
)66tstart=10:pstart=270:tinc=2:pinc=1:tsine=0:psine=0
)@6scale=1.4:�"Flag";�15);"Scale: ";scale;�30);"...";
)Jsize=10:bend=40
)Tangle=0:C%=&600
)^%�yc%=0�14:angle2=0:�xc%=0��(f$)-1
)h%syc=�(�(angle2))*bend*�(�(angle))
)r'�dot((xc%-7)*size,syc,(yc%-7)*size)
)|angle2+=12
)�"�:C%+=&600:�C%>&600*3 �C%=&600
)�angle+=24:�
)�
)�	� 24:
)�6tstart=10:pstart=270:tinc=1:pinc=2:tsine=1:psine=0
)�=scale=1:�"Circle Circle";�15);"Scale: ";scale;�30);"...";
)�0step=36:size=110:step2=24:size2=30:C%=&600*2
)��i%=0�359 �step
)�%ax=�(�(i%))*size:ay=�(�(i%))*size
)�c=-�(�(i%)):s=�(�(i%))
)��j%=0�359 �step2
)�%v=�(�(j%))*size2:w=�(�(j%))*size2
)�x=v:y=0:z=w
*%�dot((x*c-y*s)+ax,(x*s+y*c)+ay,z)
*$�:C%+=&600:�C%=&600*7 �C%=&600*2
*�:C%=&600:�dot(0,0,0)
*&
*0	� 25:
*:6tstart=10:pstart=270:tinc=1:pinc=2:tsine=1:psine=0
*D>scale=1:�"Random Circles";�15);"Scale: ";scale;�30);"...";
*N�I=1�20
*X0step=36:size=110:step2=24:size2=30:C%=&600*2
*b
i%=�(360)
*l*ax=�(150)-75:ay=�(150)-75:az=�(150)-75
*vc=-�(�(i%)):s=�(�(i%))
*�2xsize=�(30)+10:ysize=�(30)+10:�j%=0�359 �step2
*�%v=�(�(j%))*xsize:w=�(�(j%))*ysize
*�x=v:y=0:z=w
*�(�dot((x*c-y*s)+ax,(x*s+y*c)+ay,z+az)
*�$�:C%+=&600:�C%=&600*7 �C%=&600*2
*��
*�
*�	� 26:
*�6tstart=10:pstart=270:tinc=1:pinc=2:tsine=1:psine=0
*�:scale=1:�"Circle Box";�15);"Scale: ";scale;�30);"...";
*�"step=30:r=50:size=60:C%=&600*2
*�,�i%=0�359�step:c=�(�(i%))*r:s=�(�(i%))*r
*�
C%=&600*4
+&�dot(-r+c,-r+s,r):�dot(r+c,-r+s,r)
+$�dot(-r+c,r+s,r):�dot(r+c,r+s,r)
+(�dot(-r+c,-r+s,-r):�dot(r+c,-r+s,-r)
+ &�dot(-r+c,r+s,-r):�dot(r+c,r+s,-r)
+*
C%=&600*5
+4&�dot(r,-r+c,-r+s):�dot(r,r+c,-r+s)
+>$�dot(r,-r+c,r+s):�dot(r,r+c,r+s)
+H(�dot(-r,-r+c,-r+s):�dot(-r,r+c,-r+s)
+R&�dot(-r,-r+c,r+s):�dot(-r,r+c,r+s)
+\
C%=&600*2
+f&�dot(-r+c,r,-r+s):�dot(r+c,r,-r+s)
+p$�dot(-r+c,r,r+s):�dot(r+c,r,r+s)
+z(�dot(-r+c,-r,-r+s):�dot(r+c,-r,-r+s)
+�&�dot(-r+c,-r,r+s):�dot(r+c,-r,r+s)
+��
+�	� 27:
+�5tstart=0:pstart=270:tinc=1:pinc=0:tsine=0:psine=0
+�9scale=1:�"Lissajous";�15);"Scale: ";scale;�30);"...";
+�"angle=0:size=100:amp=80:step=4
+�C%=&600*5:�i%=0�359�step
+�5�dot(�(�(i%))*size,�(�(i%))*size,�(�(angle))*amp)
+�
angle+=12
+��
+�
+�	� 28:
+�5tstart=0:pstart=270:tinc=2:pinc=2:tsine=1:psine=0
,<scale=1:�"Barbers Pole";�15);"Scale: ";scale;�30);"...";
,.r=50:size=60:step=15:C%=&600:l=45/step:m=0
,�i%=-size � size � step
,$�j%=0�359� step
,.m+=1:�m=l �C%=C% �&A00:m=0
,8"�dot(�(�(j%))*r,�(�(j%))*r,i%)
,B �:m+=1:�m=l �C%=C% �&A00:m=0
,L�:C%=&600*5
,V�i%=0�359�step*2
,`�r=30 � 50 � 10
,j)�dot(�(�(i%))*r,�(�(i%))*r,size+step)
,t*�dot(�(�(i%))*r,�(�(i%))*r,-size-step)
,~�:�
,�
,�	� 29:
,�3tstart=0:pstart=0:tinc=2:pinc=3:tsine=0:psine=0
,�4scale=1:�"Dice";�15);"Scale: ";scale;�30);"...";
,�size=15
,��+15
,��yc%=0�6:� f$,l$,b$,r$
,�/�xc%=0��(f$)-1:C%=(�(�f$,xc%+1,1))-48)*&600
,�2�dot((xc%-3)*size+20,(yc%-3)*size+20,size*3):�
,�/�xc%=0��(b$)-1:C%=(�(�b$,xc%+1,1))-48)*&600
,�3�dot((xc%-3)*size+20,(yc%-3)*size+20,-size*3):�
,�/�xc%=0��(l$)-1:C%=(�(�l$,xc%+1,1))-48)*&600
-3�dot(-size*3+20,(yc%-3)*size+20,(xc%-2)*size):�
-
/�xc%=0��(r$)-1:C%=(�(�r$,xc%+1,1))-48)*&600
-2�dot(size*3+20,(yc%-3)*size+20,(xc%-2)*size):�
-�
-(>�j=0�4:� t$,b$:�xc%=0��(t$)-1:C%=(�(�t$,xc%+1,1))-48)*&600
-20�dot((xc%-2)*size+20,size*3+20,(j-2)*size):�
-</�xc%=0��(b$)-1:C%=(�(�b$,xc%+1,1))-48)*&600
-F3�dot((xc%-2)*size+20,-size*3+20,(j-2)*size):�:�
-P!� 4444444,44444,4444444,44444
-Z!� 4644464,34444,4544454,44444
-d!� 4444444,44444,4444444,44444
-n!� 4644464,44344,4445444,44144
-x!� 4444444,44444,4444444,44444
-�!� 4644464,44443,4544454,44444
-�!� 4444444,44444,4444444,44444
-�
-�� 42444,24442
-�� 44444,44444
-�� 44444,44444
-�� 44444,44444
-�� 44424,24442
-�
-�	� 30:
-�3tstart=0:pstart=0:tinc=2:pinc=1:tsine=1:psine=1
-�7scale=1:�"Squares";�15);"Scale: ";scale;�30);"...";
-�9size=8:zx=size*8:C%=&600:�i%=3 � 7 � 2:C%=&600*(i%-1)
..�a%=-i%+1 � i%-1 � 2:� b%=-i%+1 � i%-1 � 2
.�dot(a%*size,b%*size,zx)
.�dot(a%*size,b%*size,-zx)
."�:�:zx-=size*3:�:C%=&600
.,(�dot(0,0,size*11):�dot(0,0,-size*11)
.6
.@	� 31:
.J3tstart=0:pstart=0:tinc=2:pinc=1:tsine=1:psine=1
.T7scale=1:�"Zig Zag";�15);"Scale: ";scale;�30);"...";
.^Azstep=10:zx=100:m=0:inc=10:�i%=1�40:C%=&600*�(6):�j%=0�359�90
.h*�dot(�(�(j%))*m*1.3,�(�(j%))*m*1.3,zx)
.r!�:m+=inc:�m=50 �m=0 �inc=-inc
.|zx-=5:�
.��
.�	=dots
.�:
.�� �dot(x,y,z)
.�M%!0=x*scale
.�M%!4=y*scale
.�M%!8=z*scale
.�M%!12=C%
.�
M%+=16
.�dots+=1
.��
�
00000000  0d 00 0a 11 f4 20 20 20  20 20 3e 53 6f 75 72 63  |.....     >Sourc|
00000010  65 0d 00 14 1f f4 20 62  79 20 20 53 69 6d 6f 6e  |e..... by  Simon|
00000020  20 2d 48 65 6e 6c 65 79  2d 20 4d 6f 72 72 69 73  | -Henley- Morris|
00000030  0d 00 1e 2c f4 20 66 6f  72 20 33 32 2d 62 69 74  |...,. for 32-bit|
00000040  20 6d 61 63 68 69 6e 65  73 2c 20 70 61 72 74 69  | machines, parti|
00000050  63 75 6c 61 72 6c 79 20  41 52 4d 33 0d 00 28 1b  |cularly ARM3..(.|
00000060  f4 20 28 63 29 20 41 55  20 53 65 70 74 65 6d 62  |. (c) AU Septemb|
00000070  65 72 20 31 39 39 34 0d  00 32 05 3a 0d 00 3c 1e  |er 1994..2.:..<.|
00000080  ee 20 85 20 eb 30 3a f6  3a f1 3b 22 20 61 74 20  |. . .0:.:.;" at |
00000090  6c 69 6e 65 20 22 3b 9e  3a e0 0d 00 46 05 3a 0d  |line ";.:...F.:.|
000000a0  00 50 08 eb 30 3a 87 0d  00 5a 05 3a 0d 00 64 15  |.P..0:...Z.:..d.|
000000b0  c8 99 20 22 48 6f 75 72  67 6c 61 73 73 5f 4f 6e  |.. "Hourglass_On|
000000c0  22 0d 00 6e 0c 66 6c 6f  61 74 3d 31 36 0d 00 78  |"..n.float=16..x|
000000d0  0a 73 61 76 65 3d a3 0d  00 82 0a 6e 75 6d 3d 33  |.save=.....num=3|
000000e0  31 0d 00 8c 17 63 6f 64  65 6c 65 6e 67 74 68 3d  |1....codelength=|
000000f0  31 36 30 2a 31 30 32 34  0d 00 96 15 de 20 63 6f  |160*1024..... co|
00000100  64 65 20 63 6f 64 65 6c  65 6e 67 74 68 0d 00 a0  |de codelength...|
00000110  05 3a 0d 00 aa 27 e3 49  25 3d 30 20 b8 20 63 6f  |.:...'.I%=0 . co|
00000120  64 65 6c 65 6e 67 74 68  2d 31 20 88 34 3a 49 25  |delength-1 .4:I%|
00000130  21 63 6f 64 65 3d 30 3a  ed 0d 00 b4 05 3a 0d 00  |!code=0:.....:..|
00000140  be 0a f2 61 73 73 65 6d  0d 00 c8 16 c8 99 20 22  |...assem...... "|
00000150  48 6f 75 72 67 6c 61 73  73 5f 4f 66 66 22 0d 00  |Hourglass_Off"..|
00000160  d2 1b f5 3a c8 97 20 78  2c 79 2c 6b 3a fd 6b 3c  |...:.. x,y,k:.k<|
00000170  3e 30 20 84 20 a6 2d 39  39 0d 00 dc 0f d6 69 6e  |>0 . .-99.....in|
00000180  69 74 69 61 6c 69 73 65  0d 00 e6 05 e0 0d 00 f0  |itialise........|
00000190  05 3a 0d 00 fa 0b dd f2  61 73 73 65 6d 0d 01 04  |.:......assem...|
000001a0  31 e3 70 61 73 73 3d 30  b8 32 88 32 3a 50 25 3d  |1.pass=0.2.2:P%=|
000001b0  63 6f 64 65 3a 4c 25 3d  63 6f 64 65 6c 65 6e 67  |code:L%=codeleng|
000001c0  74 68 2b 50 25 3a 5b 4f  50 54 70 61 73 73 0d 01  |th+P%:[OPTpass..|
000001d0  0e 10 42 20 69 6e 69 74  69 61 6c 69 73 65 0d 01  |..B initialise..|
000001e0  18 04 0d 01 22 1a 5c 20  43 72 65 61 74 65 20 6f  |....".\ Create o|
000001f0  75 72 20 6f 77 6e 20 73  74 61 63 6b 0d 01 2c 25  |ur own stack..,%|
00000200  2e 73 74 61 63 6b 20 20  20 20 20 20 20 20 5d 3a  |.stack        ]:|
00000210  50 25 2b 3d 26 38 30 30  3a 5b 4f 50 54 70 61 73  |P%+=&800:[OPTpas|
00000220  73 0d 01 36 25 2e 72 65  67 69 73 74 65 72 64 75  |s..6%.registerdu|
00000230  6d 70 20 5d 3a 50 25 2b  3d 26 30 34 30 3a 5b 4f  |mp ]:P%+=&040:[O|
00000240  50 54 70 61 73 73 0d 01  40 04 0d 01 4a 4c 5c 20  |PTpass..@...JL\ |
00000250  23 23 23 23 23 23 23 23  23 23 23 23 23 23 23 23  |################|
*
00000290  23 23 23 23 23 23 0d 01  54 04 0d 01 5e 24 2e 69  |######..T...^$.i|
000002a0  6e 69 74 69 61 6c 69 73  65 20 20 20 53 54 52 20  |nitialise   STR |
000002b0  20 20 72 30 2c 5b 70 63  2c 23 2d 38 30 5d 0d 01  |  r0,[pc,#-80]..|
000002c0  68 29 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |h)              |
000002d0  41 44 52 20 20 20 72 30  2c 72 65 67 69 73 74 65  |ADR   r0,registe|
000002e0  72 64 75 6d 70 2b 34 0d  01 72 23 20 20 20 20 20  |rdump+4..r#     |
000002f0  20 20 20 20 20 20 20 20  20 53 54 4d 49 41 20 72  |         STMIA r|
00000300  30 2c 7b 72 31 2d 72 31  34 7d 0d 01 7c 21 20 20  |0,{r1-r14}..|!  |
00000310  20 20 20 20 20 20 20 20  20 20 20 20 53 55 42 20  |            SUB |
00000320  20 20 72 31 33 2c 72 30  2c 23 38 0d 01 86 4d 5c  |  r13,r0,#8...M\|
00000330  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000370  2d 2d 2d 2d 2d 2d 2d 2d  0d 01 90 1e 20 20 20 20  |--------....    |
00000380  20 20 20 20 20 20 20 20  20 20 53 57 49 20 20 20  |          SWI   |
00000390  32 35 36 2b 32 32 0d 01  9a 1d 20 20 20 20 20 20  |256+22....      |
000003a0  20 20 20 20 20 20 20 20  53 57 49 20 20 20 32 35  |        SWI   25|
000003b0  36 2b 39 0d 01 a4 1e 20  20 20 20 20 20 20 20 20  |6+9....         |
000003c0  20 20 20 20 20 53 57 49  20 20 20 32 35 36 2b 32  |     SWI   256+2|
000003d0  32 0d 01 ae 1f 20 20 20  20 20 20 20 20 20 20 20  |2....           |
000003e0  20 20 20 53 57 49 20 20  20 32 35 36 2b 31 33 37  |   SWI   256+137|
000003f0  0d 01 b8 2a 20 20 20 20  20 20 20 20 20 20 20 20  |...*            |
00000400  20 20 53 57 49 20 20 20  22 4f 53 5f 52 65 6d 6f  |  SWI   "OS_Remo|
00000410  76 65 43 75 72 73 6f 72  73 22 0d 01 c2 04 0d 01  |veCursors"......|
00000420  cc 21 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.!              |
00000430  42 4c 20 20 20 20 73 65  74 63 6f 6c 6f 75 72 0d  |BL    setcolour.|
00000440  01 d6 21 20 20 20 20 20  20 20 20 20 20 20 20 20  |..!             |
00000450  20 42 4c 20 20 20 20 72  65 73 65 74 63 6f 6c 73  | BL    resetcols|
00000460  0d 01 e0 22 20 20 20 20  20 20 20 20 20 20 20 20  |..."            |
00000470  20 20 42 4c 20 20 20 20  67 65 74 76 64 75 76 61  |  BL    getvduva|
00000480  72 73 0d 01 ea 20 20 20  20 20 20 20 20 20 20 20  |rs...           |
00000490  20 20 20 20 42 4c 20 20  20 20 6e 65 77 73 68 61  |    BL    newsha|
000004a0  70 65 0d 01 f4 1f 20 20  20 20 20 20 20 20 20 20  |pe....          |
000004b0  20 20 20 20 42 4c 20 20  20 20 6d 61 6b 65 6e 75  |    BL    makenu|
000004c0  6d 0d 01 fe 23 20 20 20  20 20 20 20 20 20 20 20  |m...#           |
000004d0  20 20 20 42 4c 20 20 20  20 73 77 61 70 73 63 72  |   BL    swapscr|
000004e0  65 65 6e 73 0d 02 08 37  20 20 20 20 20 20 20 20  |eens...7        |
000004f0  20 20 20 20 20 20 42 4c  20 20 20 20 63 6c 65 61  |      BL    clea|
00000500  72 73 63 72 20 20 20 20  5c 20 43 6c 65 61 72 20  |rscr    \ Clear |
00000510  61 6c 6c 20 73 63 72 65  65 6e 73 0d 02 12 33 20  |all screens...3 |
00000520  20 20 20 20 20 20 20 20  20 20 20 20 20 42 4c 20  |             BL |
00000530  20 20 20 73 77 61 70 73  63 72 65 65 6e 73 20 5c  |   swapscreens \|
00000540  20 26 20 53 79 6e 63 68  72 6f 6e 69 73 65 0d 02  | & Synchronise..|
00000550  1c 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00000560  42 4c 20 20 20 20 63 6c  65 61 72 73 63 72 0d 02  |BL    clearscr..|
00000570  26 21 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |&!              |
00000580  42 4c 20 20 20 20 72 65  73 65 74 63 6f 6c 73 0d  |BL    resetcols.|
00000590  02 30 1e 20 20 20 20 20  20 20 20 20 20 20 20 20  |.0.             |
000005a0  20 4d 4f 56 20 20 20 72  30 2c 23 31 36 0d 02 3a  | MOV   r0,#16..:|
000005b0  1f 2e 66 61 64 65 74 68  65 6d 61 6c 6c 20 20 42  |..fadethemall  B|
000005c0  4c 20 20 20 20 66 61 64  65 6f 75 74 0d 02 44 20  |L    fadeout..D |
000005d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 53 55  |              SU|
000005e0  42 53 20 20 72 30 2c 72  30 2c 23 31 0d 02 4e 23  |BS  r0,r0,#1..N#|
000005f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 42 4e  |              BN|
00000600  45 20 20 20 66 61 64 65  74 68 65 6d 61 6c 6c 0d  |E   fadethemall.|
00000610  02 58 04 0d 02 62 20 20  20 20 20 20 20 20 20 20  |.X...b          |
00000620  20 20 20 20 20 4d 4f 56  20 20 20 72 30 2c 23 26  |     MOV   r0,#&|
00000630  34 30 30 0d 02 6c 25 20  20 20 20 20 20 20 20 20  |400..l%         |
00000640  20 20 20 20 20 53 54 52  20 20 20 72 30 2c 73 68  |     STR   r0,sh|
00000650  61 70 65 74 69 6d 65 72  0d 02 76 1e 20 20 20 20  |apetimer..v.    |
00000660  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |          MOV   |
00000670  72 30 2c 23 31 36 0d 02  80 25 20 20 20 20 20 20  |r0,#16...%      |
00000680  20 20 20 20 20 20 20 20  53 54 52 20 20 20 72 30  |        STR   r0|
00000690  2c 66 61 64 65 69 6e 66  6c 61 67 0d 02 8a 1e 2e  |,fadeinflag.....|
000006a0  6d 61 69 6e 6c 6f 6f 70  20 20 20 20 20 4d 4f 56  |mainloop     MOV|
000006b0  20 20 20 72 30 2c 23 31  39 0d 02 94 21 20 20 20  |   r0,#19...!   |
000006c0  20 20 20 20 20 20 20 20  20 20 20 53 57 49 20 20  |           SWI  |
000006d0  20 22 4f 53 5f 42 79 74  65 22 0d 02 9e 23 20 20  | "OS_Byte"...#  |
000006e0  20 20 20 20 20 20 20 20  20 20 20 20 42 4c 20 20  |            BL  |
000006f0  20 20 73 77 61 70 73 63  72 65 65 6e 73 0d 02 a8  |  swapscreens...|
00000700  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 42  |               B|
00000710  4c 20 20 20 20 63 6c 65  61 72 73 63 72 0d 02 b2  |L    clearscr...|
00000720  25 20 20 20 20 20 20 20  20 20 20 20 20 20 20 4c  |%              L|
00000730  44 52 20 20 20 72 30 2c  73 68 61 70 65 74 69 6d  |DR   r0,shapetim|
00000740  65 72 0d 02 bc 20 20 20  20 20 20 20 20 20 20 20  |er...           |
00000750  20 20 20 20 53 55 42 53  20 20 72 30 2c 72 30 2c  |    SUBS  r0,r0,|
00000760  23 31 0d 02 c6 25 20 20  20 20 20 20 20 20 20 20  |#1...%          |
00000770  20 20 20 20 53 54 52 20  20 20 72 30 2c 73 68 61  |    STR   r0,sha|
00000780  70 65 74 69 6d 65 72 0d  02 d0 1f 20 20 20 20 20  |petimer....     |
00000790  20 20 20 20 20 20 20 20  20 42 4e 45 20 20 20 63  |         BNE   c|
000007a0  61 72 72 79 6f 6e 0d 02  da 25 20 20 20 20 20 20  |arryon...%      |
000007b0  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 72 30  |        LDR   r0|
000007c0  2c 74 69 6d 65 72 72 65  73 65 74 0d 02 e4 25 20  |,timerreset...% |
000007d0  20 20 20 20 20 20 20 20  20 20 20 20 20 53 54 52  |             STR|
000007e0  20 20 20 72 30 2c 73 68  61 70 65 74 69 6d 65 72  |   r0,shapetimer|
000007f0  0d 02 ee 1e 20 20 20 20  20 20 20 20 20 20 20 20  |....            |
00000800  20 20 4d 4f 56 20 20 20  72 30 2c 23 31 36 0d 02  |  MOV   r0,#16..|
00000810  f8 26 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.&              |
00000820  53 54 52 20 20 20 72 30  2c 66 61 64 65 6f 75 74  |STR   r0,fadeout|
00000830  66 6c 61 67 0d 03 02 21  20 20 20 20 20 20 20 20  |flag...!        |
00000840  20 20 20 20 20 20 42 4c  20 20 20 20 72 65 73 65  |      BL    rese|
00000850  74 63 6f 6c 73 0d 03 0c  26 2e 63 61 72 72 79 6f  |tcols...&.carryo|
00000860  6e 20 20 20 20 20 20 4c  44 52 20 20 20 72 30 2c  |n      LDR   r0,|
00000870  66 61 64 65 6f 75 74 66  6c 61 67 0d 03 16 1d 20  |fadeoutflag.... |
00000880  20 20 20 20 20 20 20 20  20 20 20 20 20 43 4d 50  |             CMP|
00000890  20 20 20 72 30 2c 23 30  0d 03 20 21 20 20 20 20  |   r0,#0.. !    |
000008a0  20 20 20 20 20 20 20 20  20 20 42 45 51 20 20 20  |          BEQ   |
000008b0  6e 6f 66 61 64 65 6f 75  74 0d 03 2a 1f 20 20 20  |nofadeout..*.   |
000008c0  20 20 20 20 20 20 20 20  20 20 20 42 4c 20 20 20  |           BL   |
000008d0  20 66 61 64 65 6f 75 74  0d 03 34 1e 20 20 20 20  | fadeout..4.    |
000008e0  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |          MOV   |
000008f0  72 31 2c 23 31 36 0d 03  3e 20 20 20 20 20 20 20  |r1,#16..>       |
00000900  20 20 20 20 20 20 20 20  53 55 42 53 20 20 72 30  |        SUBS  r0|
00000910  2c 72 30 2c 23 31 0d 03  48 26 20 20 20 20 20 20  |,r0,#1..H&      |
00000920  20 20 20 20 20 20 20 20  53 54 52 20 20 20 72 30  |        STR   r0|
00000930  2c 66 61 64 65 6f 75 74  66 6c 61 67 0d 03 52 1e  |,fadeoutflag..R.|
00000940  20 20 20 20 20 20 20 20  20 20 20 20 20 20 42 4e  |              BN|
00000950  45 20 20 20 6e 6f 66 61  64 65 0d 03 5c 25 20 20  |E   nofade..\%  |
00000960  20 20 20 20 20 20 20 20  20 20 20 20 53 54 52 20  |            STR |
00000970  20 20 72 31 2c 66 61 64  65 69 6e 66 6c 61 67 0d  |  r1,fadeinflag.|
00000980  03 66 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.f              |
00000990  20 42 4c 20 20 20 20 6e  65 77 73 68 61 70 65 0d  | BL    newshape.|
000009a0  03 70 1f 20 20 20 20 20  20 20 20 20 20 20 20 20  |.p.             |
000009b0  20 42 4c 20 20 20 20 6d  61 6b 65 6e 75 6d 0d 03  | BL    makenum..|
000009c0  7a 1e 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |z.              |
000009d0  42 20 20 20 20 20 6e 6f  66 61 64 65 0d 03 84 25  |B     nofade...%|
000009e0  2e 6e 6f 66 61 64 65 6f  75 74 20 20 20 20 4c 44  |.nofadeout    LD|
000009f0  52 20 20 20 72 30 2c 66  61 64 65 69 6e 66 6c 61  |R   r0,fadeinfla|
00000a00  67 0d 03 8e 1d 20 20 20  20 20 20 20 20 20 20 20  |g....           |
00000a10  20 20 20 43 4d 50 20 20  20 72 30 2c 23 30 0d 03  |   CMP   r0,#0..|
00000a20  98 1e 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |..              |
00000a30  42 45 51 20 20 20 6e 6f  66 61 64 65 0d 03 a2 1e  |BEQ   nofade....|
00000a40  20 20 20 20 20 20 20 20  20 20 20 20 20 20 42 4c  |              BL|
00000a50  20 20 20 20 66 61 64 65  69 6e 0d 03 ac 20 20 20  |    fadein...   |
00000a60  20 20 20 20 20 20 20 20  20 20 20 20 53 55 42 20  |            SUB |
00000a70  20 20 72 30 2c 72 30 2c  23 31 0d 03 b6 25 20 20  |  r0,r0,#1...%  |
00000a80  20 20 20 20 20 20 20 20  20 20 20 20 53 54 52 20  |            STR |
00000a90  20 20 72 30 2c 66 61 64  65 69 6e 66 6c 61 67 0d  |  r0,fadeinflag.|
00000aa0  03 c0 04 0d 03 ca 1f 2e  6e 6f 66 61 64 65 20 20  |........nofade  |
00000ab0  20 20 20 20 20 42 4c 20  20 20 20 63 61 6c 63 61  |     BL    calca|
00000ac0  6c 6c 0d 03 d4 1f 20 20  20 20 20 20 20 20 20 20  |ll....          |
00000ad0  20 20 20 20 42 4c 20 20  20 20 73 68 6f 77 6e 75  |    BL    shownu|
00000ae0  6d 0d 03 de 1f 20 20 20  20 20 20 20 20 20 20 20  |m....           |
00000af0  20 20 20 42 4c 20 20 20  20 70 6c 6f 74 61 6c 6c  |   BL    plotall|
00000b00  0d 03 e8 04 0d 03 f2 1f  20 20 20 20 20 20 20 20  |........        |
00000b10  20 20 20 20 20 20 4d 4f  56 20 20 20 72 30 2c 23  |      MOV   r0,#|
00000b20  26 38 31 0d 03 fc 1f 20  20 20 20 20 20 20 20 20  |&81....         |
00000b30  20 20 20 20 20 4d 4f 56  20 20 20 72 31 2c 23 26  |     MOV   r1,#&|
00000b40  42 36 0d 04 06 1f 20 20  20 20 20 20 20 20 20 20  |B6....          |
00000b50  20 20 20 20 4d 4f 56 20  20 20 72 32 2c 23 26 46  |    MOV   r2,#&F|
00000b60  46 0d 04 10 22 20 20 20  20 20 20 20 20 20 20 20  |F..."           |
00000b70  20 20 20 53 57 49 20 20  20 22 58 4f 53 5f 42 79  |   SWI   "XOS_By|
00000b80  74 65 22 0d 04 1a 1f 20  20 20 20 20 20 20 20 20  |te"....         |
00000b90  20 20 20 20 20 43 4d 50  20 20 20 72 31 2c 23 26  |     CMP   r1,#&|
00000ba0  46 46 0d 04 24 22 20 20  20 20 20 20 20 20 20 20  |FF..$"          |
00000bb0  20 20 20 20 42 45 51 20  20 20 63 68 65 63 6b 66  |    BEQ   checkf|
00000bc0  61 64 65 73 0d 04 2e 04  0d 04 38 1f 20 20 20 20  |ades......8.    |
00000bd0  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |          MOV   |
00000be0  72 33 2c 23 33 36 30 0d  04 42 22 20 20 20 20 20  |r3,#360..B"     |
00000bf0  20 20 20 20 20 20 20 20  20 a4 61 64 72 28 34 2c  |         .adr(4,|
00000c00  73 69 6e 74 61 62 6c 65  29 0d 04 4c 1e 20 20 20  |sintable)..L.   |
00000c10  20 20 20 20 20 20 20 20  20 20 20 a4 61 64 72 28  |           .adr(|
00000c20  30 2c 76 61 72 73 29 0d  04 56 23 20 20 20 20 20  |0,vars)..V#     |
00000c30  20 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 72  |         LDR   r|
00000c40  31 2c 5b 72 30 2c 23 32  38 5d 0d 04 60 1d 20 20  |1,[r0,#28]..`.  |
00000c50  20 20 20 20 20 20 20 20  20 20 20 20 43 4d 50 20  |            CMP |
00000c60  20 20 72 31 2c 23 30 0d  04 6a 20 20 20 20 20 20  |  r1,#0..j      |
00000c70  20 20 20 20 20 20 20 20  20 42 45 51 20 20 20 6e  |         BEQ   n|
00000c80  6f 74 73 69 6e 65 70 0d  04 74 23 20 20 20 20 20  |otsinep..t#     |
00000c90  20 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 72  |         LDR   r|
00000ca0  31 2c 5b 72 30 2c 23 33  36 5d 0d 04 7e 23 20 20  |1,[r0,#36]..~#  |
00000cb0  20 20 20 20 20 20 20 20  20 20 20 20 4c 44 52 20  |            LDR |
00000cc0  20 20 72 32 2c 5b 72 30  2c 23 32 30 5d 0d 04 88  |  r2,[r0,#20]...|
00000cd0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 41  |               A|
00000ce0  44 44 20 20 20 72 31 2c  72 31 2c 72 32 0d 04 92  |DD   r1,r1,r2...|
00000cf0  27 20 20 20 20 20 20 20  20 20 20 20 20 20 20 43  |'              C|
00000d00  4d 50 20 20 20 72 33 2c  72 31 2c 4c 53 52 23 66  |MP   r3,r1,LSR#f|
00000d10  6c 6f 61 74 0d 04 9c 29  20 20 20 20 20 20 20 20  |loat...)        |
00000d20  20 20 20 20 20 20 53 55  42 4c 45 20 72 31 2c 72  |      SUBLE r1,r|
00000d30  31 2c 23 33 36 30 3c 3c  66 6c 6f 61 74 0d 04 a6  |1,#360<<float...|
00000d40  23 20 20 20 20 20 20 20  20 20 20 20 20 20 20 53  |#              S|
00000d50  54 52 20 20 20 72 31 2c  5b 72 30 2c 23 33 36 5d  |TR   r1,[r0,#36]|
00000d60  0d 04 b0 27 20 20 20 20  20 20 20 20 20 20 20 20  |...'            |
00000d70  20 20 4d 4f 56 20 20 20  72 31 2c 72 31 2c 4c 53  |  MOV   r1,r1,LS|
00000d80  52 23 66 6c 6f 61 74 0d  04 ba 28 20 20 20 20 20  |R#float...(     |
00000d90  20 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 72  |         LDR   r|
00000da0  31 2c 5b 72 34 2c 72 31  2c 4c 53 4c 23 32 5d 0d  |1,[r4,r1,LSL#2].|
00000db0  04 c4 1f 20 20 20 20 20  20 20 20 20 20 20 20 20  |...             |
00000dc0  20 4d 4f 56 20 20 20 72  32 2c 23 31 37 39 0d 04  | MOV   r2,#179..|
00000dd0  ce 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00000de0  4d 55 4c 20 20 20 72 31  2c 72 32 2c 72 31 0d 04  |MUL   r1,r2,r1..|
00000df0  d8 29 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.)              |
00000e00  41 44 44 20 20 20 72 31  2c 72 31 2c 23 31 38 30  |ADD   r1,r1,#180|
00000e10  3c 3c 66 6c 6f 61 74 0d  04 e2 22 20 20 20 20 20  |<<float..."     |
00000e20  20 20 20 20 20 20 20 20  20 53 54 52 20 20 20 72  |         STR   r|
00000e30  31 2c 5b 72 30 2c 23 38  5d 0d 04 ec 1f 20 20 20  |1,[r0,#8]....   |
00000e40  20 20 20 20 20 20 20 20  20 20 20 42 20 20 20 20  |           B    |
00000e50  20 64 6f 74 68 65 74 61  0d 04 f6 04 0d 05 00 22  | dotheta......."|
00000e60  2e 6e 6f 74 73 69 6e 65  70 20 20 20 20 20 4c 44  |.notsinep     LD|
00000e70  52 20 20 20 72 31 2c 5b  72 30 2c 23 38 5d 0d 05  |R   r1,[r0,#8]..|
00000e80  0a 23 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.#              |
00000e90  4c 44 52 20 20 20 72 32  2c 5b 72 30 2c 23 32 30  |LDR   r2,[r0,#20|
00000ea0  5d 0d 05 14 20 20 20 20  20 20 20 20 20 20 20 20  |]...            |
00000eb0  20 20 20 41 44 44 20 20  20 72 31 2c 72 31 2c 72  |   ADD   r1,r1,r|
00000ec0  32 0d 05 1e 27 20 20 20  20 20 20 20 20 20 20 20  |2...'           |
00000ed0  20 20 20 43 4d 50 20 20  20 72 33 2c 72 31 2c 4c  |   CMP   r3,r1,L|
00000ee0  53 52 23 66 6c 6f 61 74  0d 05 28 29 20 20 20 20  |SR#float..()    |
00000ef0  20 20 20 20 20 20 20 20  20 20 53 55 42 4c 45 20  |          SUBLE |
00000f00  72 31 2c 72 31 2c 23 33  36 30 3c 3c 66 6c 6f 61  |r1,r1,#360<<floa|
00000f10  74 0d 05 32 22 20 20 20  20 20 20 20 20 20 20 20  |t..2"           |
00000f20  20 20 20 53 54 52 20 20  20 72 31 2c 5b 72 30 2c  |   STR   r1,[r0,|
00000f30  23 38 5d 0d 05 3c 04 0d  05 46 23 2e 64 6f 74 68  |#8]..<...F#.doth|
00000f40  65 74 61 20 20 20 20 20  20 4c 44 52 20 20 20 72  |eta      LDR   r|
00000f50  31 2c 5b 72 30 2c 23 33  32 5d 0d 05 50 1d 20 20  |1,[r0,#32]..P.  |
00000f60  20 20 20 20 20 20 20 20  20 20 20 20 43 4d 50 20  |            CMP |
00000f70  20 20 72 31 2c 23 30 0d  05 5a 20 20 20 20 20 20  |  r1,#0..Z      |
00000f80  20 20 20 20 20 20 20 20  20 42 45 51 20 20 20 6e  |         BEQ   n|
00000f90  6f 74 73 69 6e 65 74 0d  05 64 23 20 20 20 20 20  |otsinet..d#     |
00000fa0  20 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 72  |         LDR   r|
00000fb0  31 2c 5b 72 30 2c 23 34  30 5d 0d 05 6e 23 20 20  |1,[r0,#40]..n#  |
00000fc0  20 20 20 20 20 20 20 20  20 20 20 20 4c 44 52 20  |            LDR |
00000fd0  20 20 72 32 2c 5b 72 30  2c 23 32 34 5d 0d 05 78  |  r2,[r0,#24]..x|
00000fe0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 41  |               A|
00000ff0  44 44 20 20 20 72 31 2c  72 31 2c 72 32 0d 05 82  |DD   r1,r1,r2...|
00001000  27 20 20 20 20 20 20 20  20 20 20 20 20 20 20 43  |'              C|
00001010  4d 50 20 20 20 72 33 2c  72 31 2c 4c 53 52 23 66  |MP   r3,r1,LSR#f|
00001020  6c 6f 61 74 0d 05 8c 29  20 20 20 20 20 20 20 20  |loat...)        |
00001030  20 20 20 20 20 20 53 55  42 4c 45 20 72 31 2c 72  |      SUBLE r1,r|
00001040  31 2c 23 33 36 30 3c 3c  66 6c 6f 61 74 0d 05 96  |1,#360<<float...|
00001050  23 20 20 20 20 20 20 20  20 20 20 20 20 20 20 53  |#              S|
00001060  54 52 20 20 20 72 31 2c  5b 72 30 2c 23 34 30 5d  |TR   r1,[r0,#40]|
00001070  0d 05 a0 27 20 20 20 20  20 20 20 20 20 20 20 20  |...'            |
00001080  20 20 4d 4f 56 20 20 20  72 31 2c 72 31 2c 4c 53  |  MOV   r1,r1,LS|
00001090  52 23 66 6c 6f 61 74 0d  05 aa 28 20 20 20 20 20  |R#float...(     |
000010a0  20 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 72  |         LDR   r|
000010b0  31 2c 5b 72 34 2c 72 31  2c 4c 53 4c 23 32 5d 0d  |1,[r4,r1,LSL#2].|
000010c0  05 b4 1f 20 20 20 20 20  20 20 20 20 20 20 20 20  |...             |
000010d0  20 4d 4f 56 20 20 20 72  32 2c 23 31 37 39 0d 05  | MOV   r2,#179..|
000010e0  be 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
000010f0  4d 55 4c 20 20 20 72 31  2c 72 32 2c 72 31 0d 05  |MUL   r1,r2,r1..|
00001100  c8 29 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.)              |
00001110  41 44 44 20 20 20 72 31  2c 72 31 2c 23 31 38 30  |ADD   r1,r1,#180|
00001120  3c 3c 66 6c 6f 61 74 0d  05 d2 23 20 20 20 20 20  |<<float...#     |
00001130  20 20 20 20 20 20 20 20  20 53 54 52 20 20 20 72  |         STR   r|
00001140  31 2c 5b 72 30 2c 23 31  32 5d 0d 05 dc 22 20 20  |1,[r0,#12]..."  |
00001150  20 20 20 20 20 20 20 20  20 20 20 20 42 20 20 20  |            B   |
00001160  20 20 63 68 65 63 6b 66  61 64 65 73 0d 05 e6 04  |  checkfades....|
00001170  0d 05 f0 23 2e 6e 6f 74  73 69 6e 65 74 20 20 20  |...#.notsinet   |
00001180  20 20 4c 44 52 20 20 20  72 31 2c 5b 72 30 2c 23  |  LDR   r1,[r0,#|
00001190  31 32 5d 0d 05 fa 23 20  20 20 20 20 20 20 20 20  |12]...#         |
000011a0  20 20 20 20 20 4c 44 52  20 20 20 72 32 2c 5b 72  |     LDR   r2,[r|
000011b0  30 2c 23 32 34 5d 0d 06  04 20 20 20 20 20 20 20  |0,#24]...       |
000011c0  20 20 20 20 20 20 20 20  41 44 44 20 20 20 72 31  |        ADD   r1|
000011d0  2c 72 31 2c 72 32 0d 06  0e 27 20 20 20 20 20 20  |,r1,r2...'      |
000011e0  20 20 20 20 20 20 20 20  43 4d 50 20 20 20 72 33  |        CMP   r3|
000011f0  2c 72 31 2c 4c 53 52 23  66 6c 6f 61 74 0d 06 18  |,r1,LSR#float...|
00001200  29 20 20 20 20 20 20 20  20 20 20 20 20 20 20 53  |)              S|
00001210  55 42 4c 45 20 72 31 2c  72 31 2c 23 33 36 30 3c  |UBLE r1,r1,#360<|
00001220  3c 66 6c 6f 61 74 0d 06  22 23 20 20 20 20 20 20  |<float.."#      |
00001230  20 20 20 20 20 20 20 20  53 54 52 20 20 20 72 31  |        STR   r1|
00001240  2c 5b 72 30 2c 23 31 32  5d 0d 06 2c 04 0d 06 36  |,[r0,#12]..,...6|
00001250  26 2e 63 68 65 63 6b 66  61 64 65 73 20 20 20 4c  |&.checkfades   L|
00001260  44 52 20 20 20 72 30 2c  66 61 64 65 6f 75 74 66  |DR   r0,fadeoutf|
00001270  6c 61 67 0d 06 40 1d 20  20 20 20 20 20 20 20 20  |lag..@.         |
00001280  20 20 20 20 20 43 4d 50  20 20 20 72 30 2c 23 30  |     CMP   r0,#0|
00001290  0d 06 4a 23 20 20 20 20  20 20 20 20 20 20 20 20  |..J#            |
000012a0  20 20 42 4e 45 20 20 20  63 68 65 63 6b 65 73 63  |  BNE   checkesc|
000012b0  61 70 65 0d 06 54 25 20  20 20 20 20 20 20 20 20  |ape..T%         |
000012c0  20 20 20 20 20 4c 44 52  20 20 20 72 30 2c 66 61  |     LDR   r0,fa|
000012d0  64 65 69 6e 66 6c 61 67  0d 06 5e 1d 20 20 20 20  |deinflag..^.    |
000012e0  20 20 20 20 20 20 20 20  20 20 43 4d 50 20 20 20  |          CMP   |
000012f0  72 30 2c 23 30 0d 06 68  23 20 20 20 20 20 20 20  |r0,#0..h#       |
00001300  20 20 20 20 20 20 20 42  4e 45 20 20 20 63 68 65  |       BNE   che|
00001310  63 6b 65 73 63 61 70 65  0d 06 72 23 20 20 20 20  |ckescape..r#    |
00001320  20 20 20 20 20 20 20 20  20 20 4c 44 52 20 20 20  |          LDR   |
00001330  72 31 2c 6b 65 79 70 72  65 73 73 0d 06 7c 1d 20  |r1,keypress..|. |
00001340  20 20 20 20 20 20 20 20  20 20 20 20 20 43 4d 50  |             CMP|
00001350  20 20 20 72 31 2c 23 30  0d 06 86 20 20 20 20 20  |   r1,#0...     |
00001360  20 20 20 20 20 20 20 20  20 20 42 45 51 20 20 20  |          BEQ   |
00001370  6e 65 77 69 6e 70 75 74  0d 06 90 1f 20 20 20 20  |newinput....    |
00001380  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |          MOV   |
00001390  72 30 2c 23 31 32 39 0d  06 9a 1f 20 20 20 20 20  |r0,#129....     |
000013a0  20 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 72  |         MOV   r|
000013b0  31 2c 23 26 39 44 0d 06  a4 1f 20 20 20 20 20 20  |1,#&9D....      |
000013c0  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 72 32  |        MOV   r2|
000013d0  2c 23 26 46 46 0d 06 ae  21 20 20 20 20 20 20 20  |,#&FF...!       |
000013e0  20 20 20 20 20 20 20 53  57 49 20 20 20 22 4f 53  |       SWI   "OS|
000013f0  5f 42 79 74 65 22 0d 06  b8 1d 20 20 20 20 20 20  |_Byte"....      |
00001400  20 20 20 20 20 20 20 20  43 4d 50 20 20 20 72 31  |        CMP   r1|
00001410  2c 23 30 0d 06 c2 23 20  20 20 20 20 20 20 20 20  |,#0...#         |
00001420  20 20 20 20 20 53 54 52  45 51 20 72 31 2c 6b 65  |     STREQ r1,ke|
00001430  79 70 72 65 73 73 0d 06  cc 23 20 20 20 20 20 20  |ypress...#      |
00001440  20 20 20 20 20 20 20 20  42 20 20 20 20 20 63 68  |        B     ch|
00001450  65 63 6b 65 73 63 61 70  65 0d 06 d6 1f 2e 6e 65  |eckescape.....ne|
00001460  77 69 6e 70 75 74 20 20  20 20 20 4d 4f 56 20 20  |winput     MOV  |
00001470  20 72 30 2c 23 31 32 39  0d 06 e0 1f 20 20 20 20  | r0,#129....    |
00001480  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |          MOV   |
00001490  72 31 2c 23 26 39 44 0d  06 ea 1f 20 20 20 20 20  |r1,#&9D....     |
000014a0  20 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 72  |         MOV   r|
000014b0  32 2c 23 26 46 46 0d 06  f4 21 20 20 20 20 20 20  |2,#&FF...!      |
000014c0  20 20 20 20 20 20 20 20  53 57 49 20 20 20 22 4f  |        SWI   "O|
000014d0  53 5f 42 79 74 65 22 0d  06 fe 1f 20 20 20 20 20  |S_Byte"....     |
000014e0  20 20 20 20 20 20 20 20  20 43 4d 50 20 20 20 72  |         CMP   r|
000014f0  31 2c 23 26 46 46 0d 07  08 23 20 20 20 20 20 20  |1,#&FF...#      |
00001500  20 20 20 20 20 20 20 20  42 4e 45 20 20 20 63 68  |        BNE   ch|
00001510  65 63 6b 65 73 63 61 70  65 0d 07 12 23 20 20 20  |eckescape...#   |
00001520  20 20 20 20 20 20 20 20  20 20 20 53 54 52 20 20  |           STR  |
00001530  20 72 31 2c 6b 65 79 70  72 65 73 73 0d 07 1c 1e  | r1,keypress....|
00001540  20 20 20 20 20 20 20 20  20 20 20 20 20 20 4d 4f  |              MO|
00001550  56 20 20 20 72 30 2c 23  31 36 0d 07 26 26 20 20  |V   r0,#16..&&  |
00001560  20 20 20 20 20 20 20 20  20 20 20 20 53 54 52 20  |            STR |
00001570  20 20 72 30 2c 66 61 64  65 6f 75 74 66 6c 61 67  |  r0,fadeoutflag|
00001580  0d 07 30 21 20 20 20 20  20 20 20 20 20 20 20 20  |..0!            |
00001590  20 20 42 4c 20 20 20 20  72 65 73 65 74 63 6f 6c  |  BL    resetcol|
000015a0  73 0d 07 3a 25 20 20 20  20 20 20 20 20 20 20 20  |s..:%           |
000015b0  20 20 20 4c 44 52 20 20  20 72 30 2c 74 69 6d 65  |   LDR   r0,time|
000015c0  72 72 65 73 65 74 0d 07  44 25 20 20 20 20 20 20  |rreset..D%      |
000015d0  20 20 20 20 20 20 20 20  53 54 52 20 20 20 72 30  |        STR   r0|
000015e0  2c 73 68 61 70 65 74 69  6d 65 72 0d 07 4e 04 0d  |,shapetimer..N..|
000015f0  07 58 1f 2e 63 68 65 63  6b 65 73 63 61 70 65 20  |.X..checkescape |
00001600  20 4d 4f 56 20 20 20 72  30 2c 23 31 32 39 0d 07  | MOV   r0,#129..|
00001610  62 1f 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |b.              |
00001620  4d 4f 56 20 20 20 72 31  2c 23 26 38 46 0d 07 6c  |MOV   r1,#&8F..l|
00001630  1f 20 20 20 20 20 20 20  20 20 20 20 20 20 20 4d  |.              M|
00001640  4f 56 20 20 20 72 32 2c  23 26 46 46 0d 07 76 21  |OV   r2,#&FF..v!|
00001650  20 20 20 20 20 20 20 20  20 20 20 20 20 20 53 57  |              SW|
00001660  49 20 20 20 22 4f 53 5f  42 79 74 65 22 0d 07 80  |I   "OS_Byte"...|
00001670  1f 20 20 20 20 20 20 20  20 20 20 20 20 20 20 43  |.              C|
00001680  4d 50 20 20 20 72 31 2c  23 26 46 46 0d 07 8a 20  |MP   r1,#&FF... |
00001690  20 20 20 20 20 20 20 20  20 20 20 20 20 20 42 4e  |              BN|
000016a0  45 20 20 20 6d 61 69 6e  6c 6f 6f 70 0d 07 94 04  |E   mainloop....|
000016b0  0d 07 9e 1e 2e 72 65 73  65 74 66 6f 72 66 69 6e  |.....resetforfin|
000016c0  20 20 4d 4f 56 20 20 20  72 30 2c 23 31 39 0d 07  |  MOV   r0,#19..|
000016d0  a8 21 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.!              |
000016e0  53 57 49 20 20 20 22 4f  53 5f 42 79 74 65 22 0d  |SWI   "OS_Byte".|
000016f0  07 b2 23 20 20 20 20 20  20 20 20 20 20 20 20 20  |..#             |
00001700  20 42 4c 20 20 20 20 73  77 61 70 73 63 72 65 65  | BL    swapscree|
00001710  6e 73 0d 07 bc 20 20 20  20 20 20 20 20 20 20 20  |ns...           |
00001720  20 20 20 20 42 4c 20 20  20 20 63 6c 65 61 72 73  |    BL    clears|
00001730  63 72 0d 07 c6 1e 20 20  20 20 20 20 20 20 20 20  |cr....          |
00001740  20 20 20 20 4d 4f 56 20  20 20 72 30 2c 23 31 39  |    MOV   r0,#19|
00001750  0d 07 d0 21 20 20 20 20  20 20 20 20 20 20 20 20  |...!            |
00001760  20 20 53 57 49 20 20 20  22 4f 53 5f 42 79 74 65  |  SWI   "OS_Byte|
00001770  22 0d 07 da 23 20 20 20  20 20 20 20 20 20 20 20  |"...#           |
00001780  20 20 20 42 4c 20 20 20  20 73 77 61 70 73 63 72  |   BL    swapscr|
00001790  65 65 6e 73 0d 07 e4 20  20 20 20 20 20 20 20 20  |eens...         |
000017a0  20 20 20 20 20 20 42 4c  20 20 20 20 63 6c 65 61  |      BL    clea|
000017b0  72 73 63 72 0d 07 ee 04  0d 07 f8 1f 20 20 20 20  |rscr........    |
000017c0  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |          MOV   |
000017d0  72 30 2c 23 26 37 43 0d  08 02 34 20 20 20 20 20  |r0,#&7C...4     |
000017e0  20 20 20 20 20 20 20 20  20 53 57 49 20 20 20 22  |         SWI   "|
000017f0  58 4f 53 5f 42 79 74 65  22 20 20 20 20 5c 20 43  |XOS_Byte"    \ C|
00001800  6c 65 61 72 20 45 73 63  61 70 65 0d 08 0c 04 0d  |lear Escape.....|
00001810  08 16 1e 20 20 20 20 20  20 20 20 20 20 20 20 20  |...             |
00001820  20 4d 4f 56 20 20 20 72  30 2c 23 31 39 0d 08 20  | MOV   r0,#19.. |
00001830  21 20 20 20 20 20 20 20  20 20 20 20 20 20 20 53  |!              S|
00001840  57 49 20 20 20 22 4f 53  5f 42 79 74 65 22 0d 08  |WI   "OS_Byte"..|
00001850  2a 1e 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |*.              |
00001860  53 57 49 20 20 20 32 35  36 2b 32 32 0d 08 34 1d  |SWI   256+22..4.|
00001870  20 20 20 20 20 20 20 20  20 20 20 20 20 20 53 57  |              SW|
00001880  49 20 20 20 32 35 36 2b  30 0d 08 3e 1e 20 20 20  |I   256+0..>.   |
00001890  20 20 20 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |           MOV  |
000018a0  20 72 30 2c 23 31 35 0d  08 48 1d 20 20 20 20 20  | r0,#15..H.     |
000018b0  20 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 72  |         MOV   r|
000018c0  31 2c 23 30 0d 08 52 1d  20 20 20 20 20 20 20 20  |1,#0..R.        |
000018d0  20 20 20 20 20 20 4d 4f  56 20 20 20 72 32 2c 23  |      MOV   r2,#|
000018e0  30 0d 08 5c 3c 20 20 20  20 20 20 20 20 20 20 20  |0..\<           |
000018f0  20 20 20 53 57 49 20 20  20 22 4f 53 5f 42 79 74  |   SWI   "OS_Byt|
00001900  65 22 20 20 20 20 5c 20  43 6c 65 61 72 20 4b 65  |e"    \ Clear Ke|
00001910  79 62 6f 61 72 64 20 42  75 66 66 65 72 0d 08 66  |yboard Buffer..f|
00001920  4d 5c 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |M\--------------|
00001930  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001960  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 0d 08 70 26 2e 72  |----------..p&.r|
00001970  65 74 75 72 6e 20 20 20  20 20 20 20 a4 61 64 72  |eturn       .adr|
00001980  28 30 2c 72 65 67 69 73  74 65 72 64 75 6d 70 29  |(0,registerdump)|
00001990  0d 08 7a 27 20 20 20 20  20 20 20 20 20 20 20 20  |..z'            |
000019a0  20 20 4c 44 4d 49 41 20  72 30 2c 7b 72 30 2d 72  |  LDMIA r0,{r0-r|
000019b0  31 33 2c 70 63 7d 5e 0d  08 84 04 0d 08 8e 18 2e  |13,pc}^.........|
000019c0  6b 65 79 70 72 65 73 73  20 20 20 20 45 51 55 44  |keypress    EQUD|
000019d0  20 20 30 0d 08 98 18 2e  73 68 61 70 65 74 69 6d  |  0.....shapetim|
000019e0  65 72 20 20 45 51 55 44  20 20 30 0d 08 a2 27 2e  |er  EQUD  0...'.|
000019f0  74 69 6d 65 72 72 65 73  65 74 20 20 45 51 55 44  |timerreset  EQUD|
00001a00  20 20 35 30 30 20 5c 20  31 30 20 73 65 63 6f 6e  |  500 \ 10 secon|
00001a10  64 73 0d 08 ac 04 0d 08  b6 37 2e 66 61 64 65 6f  |ds.......7.fadeo|
00001a20  75 74 66 6c 61 67 20 45  51 55 44 20 20 30 20 20  |utflag EQUD  0  |
00001a30  20 5c 20 30 2d 6e 6f 74  68 69 6e 67 20 20 20 31  | \ 0-nothing   1|
00001a40  2d 31 36 20 66 61 64 65  63 6f 75 6e 74 0d 08 c0  |-16 fadecount...|
00001a50  18 2e 66 61 64 65 69 6e  66 6c 61 67 20 20 45 51  |..fadeinflag  EQ|
00001a60  55 44 20 20 30 0d 08 ca  04 0d 08 d4 27 2e 67 65  |UD  0.......'.ge|
00001a70  74 76 64 75 76 61 72 73  20 20 53 54 4d 46 44 20  |tvduvars  STMFD |
00001a80  72 31 33 21 2c 7b 72 30  2d 72 31 2c 72 31 34 7d  |r13!,{r0-r1,r14}|
00001a90  0d 08 de 1e 20 20 20 20  20 20 20 20 20 20 20 20  |....            |
00001aa0  20 4d 4f 56 20 20 20 72  30 2c 23 31 31 32 0d 08  | MOV   r0,#112..|
00001ab0  e8 1c 20 20 20 20 20 20  20 20 20 20 20 20 20 4d  |..             M|
00001ac0  4f 56 20 20 20 72 31 2c  23 31 0d 08 f2 20 20 20  |OV   r1,#1...   |
00001ad0  20 20 20 20 20 20 20 20  20 20 20 53 57 49 20 20  |           SWI  |
00001ae0  20 22 4f 53 5f 42 79 74  65 22 0d 08 fc 1e 20 20  | "OS_Byte"....  |
00001af0  20 20 20 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |           MOV  |
00001b00  20 72 30 2c 23 31 31 33  0d 09 06 1c 20 20 20 20  | r0,#113....    |
00001b10  20 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 72  |         MOV   r|
00001b20  31 2c 23 32 0d 09 10 20  20 20 20 20 20 20 20 20  |1,#2...         |
00001b30  20 20 20 20 20 53 57 49  20 20 20 22 4f 53 5f 42  |     SWI   "OS_B|
00001b40  79 74 65 22 0d 09 1a 25  20 20 20 20 20 20 20 20  |yte"...%        |
00001b50  20 20 20 20 20 41 44 52  20 20 20 72 30 2c 73 63  |     ADR   r0,sc|
00001b60  72 65 65 6e 62 61 73 65  73 0d 09 24 1c 20 20 20  |reenbases..$.   |
00001b70  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |          MOV   |
00001b80  72 31 2c 72 30 0d 09 2e  2c 20 20 20 20 20 20 20  |r1,r0...,       |
00001b90  20 20 20 20 20 20 53 57  49 20 20 20 22 4f 53 5f  |      SWI   "OS_|
00001ba0  52 65 61 64 56 64 75 56  61 72 69 61 62 6c 65 73  |ReadVduVariables|
00001bb0  22 0d 09 38 26 20 20 20  20 20 20 20 20 20 20 20  |"..8&           |
00001bc0  20 20 4c 44 4d 46 44 20  72 31 33 21 2c 7b 72 30  |  LDMFD r13!,{r0|
00001bd0  2c 72 31 2c 70 63 7d 0d  09 42 04 0d 09 4c 18 2e  |,r1,pc}..B...L..|
00001be0  62 61 6e 6b 20 20 20 20  20 20 20 20 45 51 55 44  |bank        EQUD|
00001bf0  20 20 31 0d 09 56 2b 2e  73 63 72 65 65 6e 62 61  |  1..V+.screenba|
00001c00  73 65 73 20 45 51 55 44  20 20 31 34 38 3a 45 51  |ses EQUD  148:EQ|
00001c10  55 44 20 31 34 39 3a 45  51 55 44 20 2d 31 0d 09  |UD 149:EQUD -1..|
00001c20  60 04 0d 09 6a 2a 2e 73  77 61 70 73 63 72 65 65  |`...j*.swapscree|
00001c30  6e 73 20 53 54 4d 46 44  20 72 31 33 21 2c 7b 72  |ns STMFD r13!,{r|
00001c40  30 2c 72 31 2c 72 33 2c  72 31 34 7d 0d 09 74 1f  |0,r1,r3,r14}..t.|
00001c50  20 20 20 20 20 20 20 20  20 20 20 20 20 41 44 52  |             ADR|
00001c60  20 20 20 72 31 34 2c 62  61 6e 6b 0d 09 7e 1e 20  |   r14,bank..~. |
00001c70  20 20 20 20 20 20 20 20  20 20 20 20 4d 4f 56 20  |            MOV |
00001c80  20 20 72 30 2c 23 31 31  33 0d 09 88 1f 20 20 20  |  r0,#113....   |
00001c90  20 20 20 20 20 20 20 20  20 20 4c 44 52 20 20 20  |          LDR   |
00001ca0  72 31 2c 5b 72 31 34 5d  0d 09 92 1d 20 20 20 20  |r1,[r14]....    |
00001cb0  20 20 20 20 20 20 20 20  20 82 20 20 20 72 33 2c  |         .   r3,|
00001cc0  72 31 2c 23 33 0d 09 9c  20 20 20 20 20 20 20 20  |r1,#3...        |
00001cd0  20 20 20 20 20 20 53 57  49 20 20 20 22 4f 53 5f  |      SWI   "OS_|
00001ce0  42 79 74 65 22 0d 09 a6  1f 20 20 20 20 20 20 20  |Byte"....       |
00001cf0  20 20 20 20 20 20 53 54  52 20 20 20 72 33 2c 5b  |      STR   r3,[|
00001d00  72 31 34 5d 0d 09 b0 29  20 20 20 20 20 20 20 20  |r14]...)        |
00001d10  20 20 20 20 20 4c 44 52  20 20 20 72 31 32 2c 5b  |     LDR   r12,[|
00001d20  72 31 34 2c 72 33 2c 4c  53 4c 23 32 5d 0d 09 ba  |r14,r3,LSL#2]...|
00001d30  29 20 20 20 20 20 20 20  20 20 20 20 20 20 4c 44  |)             LD|
00001d40  4d 46 44 20 72 31 33 21  2c 7b 72 30 2c 72 31 2c  |MFD r13!,{r0,r1,|
00001d50  72 33 2c 70 63 7d 0d 09  c4 04 0d 09 ce 48 5c 20  |r3,pc}.......H\ |
00001d60  45 61 63 68 20 62 61 6c  6c 20 69 73 20 32 30 20  |Each ball is 20 |
00001d70  62 79 20 31 36 20 61 6e  64 20 68 61 73 20 65 69  |by 16 and has ei|
00001d80  67 68 74 20 76 65 72 73  69 6f 6e 73 20 66 6f 72  |ght versions for|
00001d90  20 65 61 63 68 20 70 69  78 65 6c 20 6f 66 66 73  | each pixel offs|
00001da0  65 74 0d 09 d8 35 5c 20  4d 61 73 6b 20 64 61 74  |et...5\ Mask dat|
00001db0  61 20 66 69 72 73 74 20  66 6f 6c 6c 6f 77 65 64  |a first followed|
00001dc0  20 62 79 20 37 20 64 69  66 66 65 72 65 6e 74 20  | by 7 different |
00001dd0  63 6f 6c 6f 75 72 73 0d  09 e2 2c 5c 20 45 61 63  |colours...,\ Eac|
00001de0  68 20 73 65 74 20 6f 66  20 73 70 72 69 74 65 73  |h set of sprites|
00001df0  20 69 73 20 26 36 30 30  20 69 6e 20 6c 65 6e 67  | is &600 in leng|
00001e00  74 68 2e 0d 09 ec 04 0d  09 f6 22 2e 62 61 6c 6c  |th........".ball|
00001e10  64 61 74 61 20 5d 3a 50  25 2b 3d 26 32 41 30 30  |data ]:P%+=&2A00|
00001e20  3a 5b 4f 50 54 70 61 73  73 0d 0a 00 26 2e 70 6c  |:[OPTpass...&.pl|
00001e30  6f 74 61 6c 6c 20 20 53  54 4d 46 44 20 20 72 31  |otall  STMFD  r1|
00001e40  33 21 2c 7b 72 30 2d 72  31 31 2c 72 31 34 7d 0d  |3!,{r0-r11,r14}.|
00001e50  0a 0a 1f 20 20 20 20 20  20 20 20 20 20 a4 61 64  |...          .ad|
00001e60  72 28 31 30 2c 62 61 6c  6c 64 61 74 61 29 0d 0a  |r(10,balldata)..|
00001e70  14 3c 20 20 20 20 20 20  20 20 20 20 a4 61 64 72  |.<          .adr|
00001e80  28 31 31 2c 7a 6f 72 64  65 72 29 20 20 20 20 20  |(11,zorder)     |
00001e90  20 20 20 5c 20 41 64 64  72 65 73 73 20 6f 66 20  |   \ Address of |
00001ea0  70 6c 6f 74 20 6f 72 64  65 72 0d 0a 1e 1e 20 20  |plot order....  |
00001eb0  20 20 20 20 20 20 20 20  a4 61 64 72 28 31 34 2c  |        .adr(14,|
00001ec0  64 65 73 74 2d 31 36 29  0d 0a 28 20 20 20 20 20  |dest-16)..(     |
00001ed0  20 20 20 20 20 20 4c 44  52 20 20 20 20 72 39 2c  |      LDR    r9,|
00001ee0  6e 6f 63 6f 6f 72 64 73  0d 0a 32 25 20 20 20 20  |nocoords..2%    |
00001ef0  20 20 20 20 20 20 41 44  44 20 20 20 20 72 31 31  |      ADD    r11|
00001f00  2c 72 31 31 2c 72 39 2c  4c 53 4c 23 32 0d 0a 3c  |,r11,r9,LSL#2..<|
00001f10  1f 20 20 20 20 20 20 20  20 20 20 53 55 42 20 20  |.          SUB  |
00001f20  20 20 72 31 31 2c 72 31  31 2c 23 34 0d 0a 46 21  |  r11,r11,#4..F!|
00001f30  2e 6d 61 69 6e 6c 6f 6f  70 20 4c 44 52 20 20 20  |.mainloop LDR   |
00001f40  20 72 37 2c 5b 72 31 31  5d 2c 23 2d 34 0d 0a 50  | r7,[r11],#-4..P|
00001f50  24 20 20 20 20 20 20 20  20 20 20 41 44 44 20 20  |$          ADD  |
00001f60  20 20 72 37 2c 72 31 34  2c 72 37 2c 4c 53 4c 23  |  r7,r14,r7,LSL#|
00001f70  34 0d 0a 5a 25 20 20 20  20 20 20 20 20 20 20 4c  |4..Z%          L|
00001f80  44 4d 49 41 20 20 72 37  2c 7b 72 30 2c 72 31 2c  |DMIA  r7,{r0,r1,|
00001f90  72 34 2c 72 32 7d 0d 0a  64 1a 20 20 20 20 20 20  |r4,r2}..d.      |
00001fa0  20 20 20 20 4d 4f 56 20  20 20 20 72 32 2c 72 34  |    MOV    r2,r4|
00001fb0  0d 0a 6e 04 0d 0a 78 1b  20 20 20 20 20 20 20 20  |..n...x.        |
00001fc0  20 20 80 20 20 20 20 72  34 2c 72 30 2c 23 37 0d  |  .    r4,r0,#7.|
00001fd0  0a 82 1d 20 20 20 20 20  20 20 20 20 20 42 49 43  |...          BIC|
00001fe0  20 20 20 20 72 30 2c 72  30 2c 23 37 0d 0a 8c 24  |    r0,r0,#7...$|
00001ff0  20 20 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |          ADD   |
00002000  20 72 30 2c 72 31 32 2c  72 30 2c 4c 53 52 23 31  | r0,r12,r0,LSR#1|
00002010  0d 0a 96 23 20 20 20 20  20 20 20 20 20 20 41 44  |...#          AD|
00002020  44 20 20 20 20 72 30 2c  72 30 2c 72 31 2c 4c 53  |D    r0,r0,r1,LS|
00002030  4c 23 37 0d 0a a0 3a 20  20 20 20 20 20 20 20 20  |L#7...:         |
00002040  20 41 44 44 20 20 20 20  72 30 2c 72 30 2c 72 31  | ADD    r0,r0,r1|
00002050  2c 4c 53 4c 23 35 20 20  20 20 5c 20 72 30 20 69  |,LSL#5    \ r0 i|
00002060  73 20 73 63 72 65 65 6e  20 61 64 64 72 0d 0a aa  |s screen addr...|
00002070  04 0d 0a b4 24 20 20 20  20 20 20 20 20 20 20 41  |....$          A|
00002080  44 44 20 20 20 20 72 31  2c 72 31 30 2c 72 34 2c  |DD    r1,r10,r4,|
00002090  4c 53 4c 23 37 0d 0a be  38 20 20 20 20 20 20 20  |LSL#7...8       |
000020a0  20 20 20 41 44 44 20 20  20 20 72 31 2c 72 31 2c  |   ADD    r1,r1,|
000020b0  72 34 2c 4c 53 4c 23 36  20 20 20 20 5c 20 72 31  |r4,LSL#6    \ r1|
000020c0  20 69 73 20 6d 61 73 6b  20 61 64 64 72 0d 0a c8  | is mask addr...|
000020d0  38 20 20 20 20 20 20 20  20 20 20 41 44 44 20 20  |8          ADD  |
000020e0  20 20 72 32 2c 72 31 2c  72 32 20 20 20 20 20 20  |  r2,r1,r2      |
000020f0  20 20 20 20 5c 20 72 32  20 69 73 20 62 61 6c 6c  |    \ r2 is ball|
00002100  20 61 64 64 72 0d 0a d2  21 20 20 20 20 20 20 20  | addr...!       |
00002110  20 20 20 5d 3a e3 49 25  3d 31 b8 31 36 3a 5b 4f  |   ]:.I%=1.16:[O|
00002120  50 54 70 61 73 73 0d 0a  dc 3d 20 20 20 20 20 20  |PTpass...=      |
00002130  20 20 20 20 4c 44 4d 49  41 20 20 72 30 2c 7b 72  |    LDMIA  r0,{r|
00002140  33 2d 72 35 7d 20 20 20  20 20 20 20 20 5c 20 53  |3-r5}        \ S|
00002150  70 65 65 64 79 20 6d 61  73 6b 20 61 6e 64 20 70  |peedy mask and p|
00002160  6c 6f 74 0d 0a e6 20 20  20 20 20 20 20 20 20 20  |lot...          |
00002170  20 4c 44 4d 49 41 20 20  72 31 21 2c 7b 72 36 2d  | LDMIA  r1!,{r6-|
00002180  72 38 7d 0d 0a f0 1b 20  20 20 20 20 20 20 20 20  |r8}....         |
00002190  20 80 20 20 20 20 72 33  2c 72 33 2c 72 36 0d 0a  | .    r3,r3,r6..|
000021a0  fa 1b 20 20 20 20 20 20  20 20 20 20 80 20 20 20  |..          .   |
000021b0  20 72 34 2c 72 34 2c 72  37 0d 0b 04 1b 20 20 20  | r4,r4,r7....   |
000021c0  20 20 20 20 20 20 20 80  20 20 20 20 72 35 2c 72  |       .    r5,r|
000021d0  35 2c 72 38 0d 0b 0e 20  20 20 20 20 20 20 20 20  |5,r8...         |
000021e0  20 20 4c 44 4d 49 41 20  20 72 32 21 2c 7b 72 36  |  LDMIA  r2!,{r6|
000021f0  2d 72 38 7d 0d 0b 18 1c  20 20 20 20 20 20 20 20  |-r8}....        |
00002200  20 20 84 52 20 20 20 20  72 33 2c 72 33 2c 72 36  |  .R    r3,r3,r6|
00002210  0d 0b 22 1c 20 20 20 20  20 20 20 20 20 20 84 52  |..".          .R|
00002220  20 20 20 20 72 34 2c 72  34 2c 72 37 0d 0b 2c 1c  |    r4,r4,r7..,.|
00002230  20 20 20 20 20 20 20 20  20 20 84 52 20 20 20 20  |          .R    |
00002240  72 35 2c 72 35 2c 72 38  0d 0b 36 1f 20 20 20 20  |r5,r5,r8..6.    |
00002250  20 20 20 20 20 20 53 54  4d 49 41 20 20 72 30 2c  |      STMIA  r0,|
00002260  7b 72 33 2d 72 35 7d 0d  0b 40 1f 20 20 20 20 20  |{r3-r5}..@.     |
00002270  20 20 20 20 20 41 44 44  20 20 20 20 72 30 2c 72  |     ADD    r0,r|
00002280  30 2c 23 31 36 30 0d 0b  4a 1a 20 20 20 20 20 20  |0,#160..J.      |
00002290  20 20 20 20 5d 3a ed 3a  5b 4f 50 54 70 61 73 73  |    ]:.:[OPTpass|
000022a0  0d 0b 54 1d 20 20 20 20  20 20 20 20 20 20 53 55  |..T.          SU|
000022b0  42 53 20 20 20 72 39 2c  72 39 2c 23 31 0d 0b 5e  |BS   r9,r9,#1..^|
000022c0  1d 20 20 20 20 20 20 20  20 20 20 42 4e 45 20 20  |.          BNE  |
000022d0  20 20 6d 61 69 6e 6c 6f  6f 70 0d 0b 68 25 20 20  |  mainloop..h%  |
000022e0  20 20 20 20 20 20 20 20  4c 44 4d 46 44 20 20 72  |        LDMFD  r|
000022f0  31 33 21 2c 7b 72 30 2d  72 31 31 2c 70 63 7d 0d  |13!,{r0-r11,pc}.|
00002300  0b 72 04 0d 0b 7c 09 2e  76 61 72 73 0d 0b 86 16  |.r...|..vars....|
00002310  2e 6e 6f 63 6f 6f 72 64  73 20 45 51 55 44 20 20  |.nocoords EQUD  |
00002320  20 30 0d 0b 90 16 2e 63  6f 6f 72 64 73 61 64 20  | 0.....coordsad |
00002330  45 51 55 44 20 20 20 30  0d 0b 9a 16 2e 70 68 69  |EQUD   0.....phi|
00002340  20 20 20 20 20 20 45 51  55 44 20 20 20 30 0d 0b  |      EQUD   0..|
00002350  a4 16 2e 74 68 65 74 61  20 20 20 20 45 51 55 44  |...theta    EQUD|
00002360  20 20 20 30 0d 0b ae 20  2e 64 61 74 61 61 64 64  |   0... .dataadd|
00002370  20 20 45 51 55 44 20 20  20 28 64 65 73 74 2d 76  |  EQUD   (dest-v|
00002380  61 72 73 29 0d 0b b8 04  0d 0b c2 16 2e 70 68 69  |ars).........phi|
00002390  69 6e 63 20 20 20 45 51  55 44 20 20 20 30 0d 0b  |inc   EQUD   0..|
000023a0  cc 16 2e 74 68 65 74 61  69 6e 63 20 45 51 55 44  |...thetainc EQUD|
000023b0  20 20 20 30 0d 0b d6 16  2e 70 68 69 73 69 6e 20  |   0.....phisin |
000023c0  20 20 45 51 55 44 20 20  20 30 0d 0b e0 16 2e 74  |  EQUD   0.....t|
000023d0  68 65 74 61 73 69 6e 20  45 51 55 44 20 20 20 30  |hetasin EQUD   0|
000023e0  0d 0b ea 16 2e 70 68 69  61 6e 67 6c 65 20 45 51  |.....phiangle EQ|
000023f0  55 44 20 20 20 30 0d 0b  f4 16 2e 74 68 65 61 6e  |UD   0.....thean|
00002400  67 6c 65 20 45 51 55 44  20 20 20 30 0d 0b fe 04  |gle EQUD   0....|
00002410  0d 0c 08 2b 5c 20 44 69  73 70 6c 61 79 20 6e 75  |...+\ Display nu|
00002420  6d 62 65 72 20 6f 66 20  62 61 6c 6c 73 20 6f 6e  |mber of balls on|
00002430  20 74 68 65 20 73 63 72  65 65 6e 0d 0c 12 29 2e  | the screen...).|
00002440  73 68 6f 77 6e 75 6d 20  20 53 54 4d 46 44 20 20  |shownum  STMFD  |
00002450  72 31 33 21 2c 7b 72 30  2d 72 36 2c 72 31 32 2c  |r13!,{r0-r6,r12,|
00002460  72 31 34 7d 0d 0c 1c 20  20 20 20 20 20 20 20 20  |r14}...         |
00002470  20 20 41 44 44 20 20 20  20 72 31 32 2c 31 32 2c  |  ADD    r12,12,|
00002480  23 31 30 30 0d 0c 26 1c  20 20 20 20 20 20 20 20  |#100..&.        |
00002490  20 20 41 44 52 20 20 20  20 72 30 2c 62 69 74 73  |  ADR    r0,bits|
000024a0  0d 0c 30 32 20 20 20 20  20 20 20 20 20 20 4c 44  |..02          LD|
000024b0  4d 49 41 20 20 72 30 21  2c 7b 72 31 2d 72 36 7d  |MIA  r0!,{r1-r6}|
000024c0  3a 53 54 4d 49 41 20 72  31 32 2c 7b 72 31 2d 72  |:STMIA r12,{r1-r|
000024d0  33 7d 0d 0c 3a 32 20 20  20 20 20 20 20 20 20 20  |3}..:2          |
000024e0  41 44 44 20 20 20 20 72  31 32 2c 31 32 2c 23 31  |ADD    r12,12,#1|
000024f0  36 30 3a 53 54 4d 49 41  20 72 31 32 2c 7b 72 34  |60:STMIA r12,{r4|
00002500  2d 72 36 7d 0d 0c 44 44  20 20 20 20 20 20 20 20  |-r6}..DD        |
00002510  20 20 41 44 44 20 20 20  20 72 31 32 2c 31 32 2c  |  ADD    r12,12,|
00002520  23 31 36 30 3a 4c 44 4d  49 41 20 72 30 21 2c 7b  |#160:LDMIA r0!,{|
00002530  72 31 2d 72 36 7d 3a 53  54 4d 49 41 20 72 31 32  |r1-r6}:STMIA r12|
00002540  2c 7b 72 31 2d 72 33 7d  0d 0c 4e 32 20 20 20 20  |,{r1-r3}..N2    |
00002550  20 20 20 20 20 20 41 44  44 20 20 20 20 72 31 32  |      ADD    r12|
00002560  2c 31 32 2c 23 31 36 30  3a 53 54 4d 49 41 20 72  |,12,#160:STMIA r|
00002570  31 32 2c 7b 72 34 2d 72  36 7d 0d 0c 58 44 20 20  |12,{r4-r6}..XD  |
00002580  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 72  |        ADD    r|
00002590  31 32 2c 31 32 2c 23 31  36 30 3a 4c 44 4d 49 41  |12,12,#160:LDMIA|
000025a0  20 72 30 21 2c 7b 72 31  2d 72 36 7d 3a 53 54 4d  | r0!,{r1-r6}:STM|
000025b0  49 41 20 72 31 32 2c 7b  72 31 2d 72 33 7d 0d 0c  |IA r12,{r1-r3}..|
000025c0  62 32 20 20 20 20 20 20  20 20 20 20 41 44 44 20  |b2          ADD |
000025d0  20 20 20 72 31 32 2c 31  32 2c 23 31 36 30 3a 53  |   r12,12,#160:S|
000025e0  54 4d 49 41 20 72 31 32  2c 7b 72 34 2d 72 36 7d  |TMIA r12,{r4-r6}|
000025f0  0d 0c 6c 44 20 20 20 20  20 20 20 20 20 20 41 44  |..lD          AD|
00002600  44 20 20 20 20 72 31 32  2c 31 32 2c 23 31 36 30  |D    r12,12,#160|
00002610  3a 4c 44 4d 49 41 20 72  30 21 2c 7b 72 31 2d 72  |:LDMIA r0!,{r1-r|
00002620  36 7d 3a 53 54 4d 49 41  20 72 31 32 2c 7b 72 31  |6}:STMIA r12,{r1|
00002630  2d 72 33 7d 0d 0c 76 32  20 20 20 20 20 20 20 20  |-r3}..v2        |
00002640  20 20 41 44 44 20 20 20  20 72 31 32 2c 31 32 2c  |  ADD    r12,12,|
00002650  23 31 36 30 3a 53 54 4d  49 41 20 72 31 32 2c 7b  |#160:STMIA r12,{|
00002660  72 34 2d 72 36 7d 0d 0c  80 28 20 20 20 20 20 20  |r4-r6}...(      |
00002670  20 20 20 20 4c 44 4d 46  44 20 20 72 31 33 21 2c  |    LDMFD  r13!,|
00002680  7b 72 30 2d 72 36 2c 72  31 32 2c 70 63 7d 0d 0c  |{r0-r6,r12,pc}..|
00002690  8a 04 0d 0c 94 22 2e 62  69 74 73 20 20 20 20 20  |.....".bits     |
000026a0  5d 3a 50 25 2b 3d 34 2a  38 2a 33 3a 5b 4f 50 54  |]:P%+=4*8*3:[OPT|
000026b0  70 61 73 73 0d 0c 9e 04  0d 0c a8 39 5c 20 43 72  |pass.......9\ Cr|
000026c0  65 61 74 65 20 73 63 72  65 65 6e 20 64 61 74 61  |eate screen data|
000026d0  20 66 6f 72 20 61 20 6e  75 6d 62 65 72 2c 20 72  | for a number, r|
000026e0  61 74 68 65 72 20 74 68  61 6e 20 75 73 65 20 4f  |ather than use O|
000026f0  53 0d 0c b2 26 2e 6d 61  6b 65 6e 75 6d 20 20 53  |S...&.makenum  S|
00002700  54 4d 46 44 20 20 72 31  33 21 2c 7b 72 30 2d 72  |TMFD  r13!,{r0-r|
00002710  31 32 2c 72 31 34 7d 0d  0c bc 1e 20 20 20 20 20  |12,r14}....     |
00002720  20 20 20 20 20 a4 6c 64  72 28 30 2c 6e 6f 63 6f  |     .ldr(0,noco|
00002730  6f 72 64 73 29 0d 0c c6  1e 20 20 20 20 20 20 20  |ords)....       |
00002740  20 20 20 41 44 52 20 20  20 20 72 31 2c 62 75 66  |   ADR    r1,buf|
00002750  66 65 72 0d 0c d0 1b 20  20 20 20 20 20 20 20 20  |fer....         |
00002760  20 4d 4f 56 20 20 20 20  72 32 2c 23 31 36 0d 0c  | MOV    r2,#16..|
00002770  da 2a 20 20 20 20 20 20  20 20 20 20 53 57 49 20  |.*          SWI |
00002780  20 20 20 22 4f 53 5f 43  6f 6e 76 65 72 74 43 61  |   "OS_ConvertCa|
00002790  72 64 69 6e 61 6c 32 22  0d 0c e4 1c 20 20 20 20  |rdinal2"....    |
000027a0  20 20 20 20 20 20 4c 44  52 20 20 20 20 72 32 2c  |      LDR    r2,|
000027b0  5b 72 30 5d 0d 0c ee 1d  20 20 20 20 20 20 20 20  |[r0]....        |
000027c0  20 20 53 55 42 20 20 20  20 72 31 2c 72 31 2c 72  |  SUB    r1,r1,r|
000027d0  30 0d 0c f8 1a 20 20 20  20 20 20 20 20 20 20 43  |0....          C|
000027e0  4d 50 20 20 20 20 72 31  2c 23 31 0d 0d 02 44 20  |MP    r1,#1...D |
000027f0  20 20 20 20 20 20 20 20  20 ec 51 20 20 72 32 2c  |         .Q  r2,|
00002800  72 32 2c 4c 53 4c 23 31  36 20 20 5c 20 4d 61 78  |r2,LSL#16  \ Max|
00002810  69 6d 75 6d 20 73 74 72  69 6e 67 20 6c 65 6e 67  |imum string leng|
00002820  74 68 20 6f 66 20 33 20  28 30 2d 39 39 39 29 0d  |th of 3 (0-999).|
00002830  0d 0c 1e 20 20 20 20 20  20 20 20 20 20 84 52 45  |...          .RE|
00002840  51 20 20 72 32 2c 72 32  2c 23 26 33 30 0d 0d 16  |Q  r2,r2,#&30...|
00002850  41 20 20 20 20 20 20 20  20 20 20 84 52 45 51 20  |A          .REQ |
00002860  20 72 32 2c 72 32 2c 23  26 33 30 30 30 20 20 5c  | r2,r2,#&3000  \|
00002870  20 41 64 64 20 6c 65 61  64 69 6e 67 20 7a 65 72  | Add leading zer|
00002880  6f 73 20 69 66 20 72 65  71 75 69 72 65 64 0d 0d  |os if required..|
00002890  20 1a 20 20 20 20 20 20  20 20 20 20 43 4d 50 20  | .          CMP |
000028a0  20 20 20 72 31 2c 23 32  0d 0d 2a 1d 20 20 20 20  |   r1,#2..*.    |
000028b0  20 20 20 20 20 20 ec 51  20 20 72 32 2c 72 32 2c  |      .Q  r2,r2,|
000028c0  4c 53 4c 23 38 0d 0d 34  1e 20 20 20 20 20 20 20  |LSL#8..4.       |
000028d0  20 20 20 84 52 45 51 20  20 72 32 2c 72 32 2c 23  |   .REQ  r2,r2,#|
000028e0  26 33 30 0d 0d 3e 1a 20  20 20 20 20 20 20 20 20  |&30..>.         |
000028f0  20 4d 4f 56 20 20 20 20  72 31 2c 23 33 0d 0d 48  | MOV    r1,#3..H|
00002900  1c 20 20 20 20 20 20 20  20 20 20 41 44 52 20 20  |.          ADR  |
00002910  20 20 72 30 2c 62 69 74  73 0d 0d 52 20 20 20 20  |  r0,bits..R    |
00002920  20 20 20 20 20 20 20 41  44 52 20 20 20 20 72 33  |       ADR    r3|
00002930  2c 66 6f 6e 74 64 61 74  61 0d 0d 5c 1d 2e 6e 75  |,fontdata..\..nu|
00002940  6d 62 6c 6f 6f 70 20 80  20 20 20 20 72 34 2c 72  |mbloop .    r4,r|
00002950  32 2c 23 26 46 46 0d 0d  66 20 20 20 20 20 20 20  |2,#&FF..f       |
00002960  20 20 20 20 4d 4f 56 20  20 20 20 72 32 2c 72 32  |    MOV    r2,r2|
00002970  2c 4c 53 52 23 38 0d 0d  70 1e 20 20 20 20 20 20  |,LSR#8..p.      |
00002980  20 20 20 20 53 55 42 20  20 20 20 72 34 2c 72 34  |    SUB    r4,r4|
00002990  2c 23 34 38 0d 0d 7a 29  20 20 20 20 20 20 20 20  |,#48..z)        |
000029a0  20 20 41 44 44 20 20 20  20 72 34 2c 72 33 2c 72  |  ADD    r4,r3,r|
000029b0  34 2c 4c 53 4c 23 35 20  5c 20 2a 33 32 0d 0d 84  |4,LSL#5 \ *32...|
000029c0  20 20 20 20 20 20 20 20  20 20 20 4c 44 4d 49 41  |           LDMIA|
000029d0  20 20 72 34 2c 7b 72 35  2d 72 31 32 7d 0d 0d 8e  |  r4,{r5-r12}...|
000029e0  1a 20 20 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |.          MOV  |
000029f0  20 20 72 34 2c 72 30 0d  0d 98 30 20 20 20 20 20  |  r4,r0...0     |
00002a00  20 20 20 20 20 53 54 52  20 20 20 20 72 35 2c 5b  |     STR    r5,[|
00002a10  72 34 5d 2c 23 31 32 3a  53 54 52 20 72 36 2c 5b  |r4],#12:STR r6,[|
00002a20  72 34 5d 2c 23 31 32 0d  0d a2 30 20 20 20 20 20  |r4],#12...0     |
00002a30  20 20 20 20 20 53 54 52  20 20 20 20 72 37 2c 5b  |     STR    r7,[|
00002a40  72 34 5d 2c 23 31 32 3a  53 54 52 20 72 38 2c 5b  |r4],#12:STR r8,[|
00002a50  72 34 5d 2c 23 31 32 0d  0d ac 31 20 20 20 20 20  |r4],#12...1     |
00002a60  20 20 20 20 20 53 54 52  20 20 20 20 72 39 2c 5b  |     STR    r9,[|
00002a70  72 34 5d 2c 23 31 32 3a  53 54 52 20 72 31 30 2c  |r4],#12:STR r10,|
00002a80  5b 72 34 5d 2c 23 31 32  0d 0d b6 32 20 20 20 20  |[r4],#12...2    |
00002a90  20 20 20 20 20 20 53 54  52 20 20 20 20 72 31 31  |      STR    r11|
00002aa0  2c 5b 72 34 5d 2c 23 31  32 3a 53 54 52 20 72 31  |,[r4],#12:STR r1|
00002ab0  32 2c 5b 72 34 5d 2c 23  31 32 0d 0d c0 1d 20 20  |2,[r4],#12....  |
00002ac0  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 72  |        ADD    r|
00002ad0  30 2c 72 30 2c 23 34 0d  0d ca 1d 20 20 20 20 20  |0,r0,#4....     |
00002ae0  20 20 20 20 20 53 55 42  53 20 20 20 72 31 2c 72  |     SUBS   r1,r|
00002af0  31 2c 23 31 0d 0d d4 1d  20 20 20 20 20 20 20 20  |1,#1....        |
00002b00  20 20 42 4e 45 20 20 20  20 6e 75 6d 62 6c 6f 6f  |  BNE    numbloo|
00002b10  70 0d 0d de 25 20 20 20  20 20 20 20 20 20 20 4c  |p...%          L|
00002b20  44 4d 46 44 20 20 72 31  33 21 2c 7b 72 30 2d 72  |DMFD  r13!,{r0-r|
00002b30  31 32 2c 70 63 7d 0d 0d  e8 04 0d 0d f2 1f 2e 62  |12,pc}.........b|
00002b40  75 66 66 65 72 20 20 20  5d 3a 50 25 2b 3d 31 36  |uffer   ]:P%+=16|
00002b50  3a 5b 4f 50 54 70 61 73  73 0d 0d fc 21 2e 66 6f  |:[OPTpass...!.fo|
00002b60  6e 74 64 61 74 61 20 5d  3a 50 25 2b 3d 26 31 34  |ntdata ]:P%+=&14|
00002b70  30 3a 5b 4f 50 54 70 61  73 73 0d 0e 06 04 0d 0e  |0:[OPTpass......|
00002b80  10 4b 5d 3a 63 6f 75 6e  74 3d 30 3a 63 6f 6f 72  |.K]:count=0:coor|
00002b90  64 73 3d 31 3a 63 70 3d  32 3a 73 74 3d 33 3a 73  |ds=1:cp=2:st=3:s|
00002ba0  70 3d 34 3a 63 74 3d 35  3a 6e 73 74 3d 36 3a 6e  |p=4:ct=5:nst=6:n|
00002bb0  73 70 3d 37 3a 78 3d 38  3a 79 3d 39 3a 7a 3d 31  |sp=7:x=8:y=9:z=1|
00002bc0  30 3a 66 72 61 63 3d 31  31 0d 0e 1a 2b 6e 65 77  |0:frac=11...+new|
00002bd0  78 3d 31 32 3a 6e 65 77  79 3d 78 3a 74 6f 67 6f  |x=12:newy=x:togo|
00002be0  3d 31 34 3a 74 65 6d 70  3d 31 32 3a 5b 4f 50 54  |=14:temp=12:[OPT|
00002bf0  70 61 73 73 0d 0e 24 04  0d 0e 2e 4d 5c 20 54 68  |pass..$....M\ Th|
00002c00  69 73 20 72 6f 75 74 69  6e 65 20 74 72 61 6e 73  |is routine trans|
00002c10  66 6f 72 6d 73 20 63 6f  6f 72 64 69 6e 61 74 65  |forms coordinate|
00002c20  73 20 61 72 6f 75 6e 64  20 32 20 61 78 69 73 2c  |s around 2 axis,|
00002c30  20 61 6e 64 20 61 64 64  73 20 70 65 72 73 70 65  | and adds perspe|
00002c40  63 74 69 76 65 0d 0e 38  26 2e 63 61 6c 63 61 6c  |ctive..8&.calcal|
00002c50  6c 20 20 53 54 4d 46 44  20 20 72 31 33 21 2c 7b  |l  STMFD  r13!,{|
00002c60  72 30 2d 72 31 32 2c 72  31 34 7d 0d 0e 42 1c 20  |r0-r12,r14}..B. |
00002c70  20 20 20 20 20 20 20 20  20 41 44 52 20 20 20 20  |         ADR    |
00002c80  72 34 2c 76 61 72 73 0d  0e 4c 2d 20 20 20 20 20  |r4,vars..L-     |
00002c90  20 20 20 20 20 5c 20 67  65 74 20 6e 63 2c 63 6f  |     \ get nc,co|
00002ca0  72 64 73 61 64 2c 70 68  69 2c 74 68 65 74 61 2c  |rdsad,phi,theta,|
00002cb0  74 6f 67 6f 0d 0e 56 29  20 20 20 20 20 20 20 20  |togo..V)        |
00002cc0  20 20 4c 44 4d 49 41 20  20 72 34 2c 7b 72 30 2c  |  LDMIA  r4,{r0,|
00002cd0  72 31 2c 72 32 2c 72 33  2c 72 31 34 7d 0d 0e 60  |r1,r2,r3,r14}..`|
00002ce0  1f 20 20 20 20 20 20 20  20 20 20 41 44 44 20 20  |.          ADD  |
00002cf0  20 20 72 31 34 2c 72 31  34 2c 72 34 0d 0e 6a 20  |  r14,r14,r4..j |
00002d00  20 20 20 20 20 20 20 20  20 20 41 44 52 20 20 20  |          ADR   |
00002d10  20 72 36 2c 73 69 6e 74  61 62 6c 65 0d 0e 74 4c  | r6,sintable..tL|
00002d20  20 20 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |          ADD   |
00002d30  20 72 37 2c 72 36 2c 23  26 31 36 38 20 20 20 20  | r7,r6,#&168    |
00002d40  20 20 5c 20 26 31 36 38  20 3d 20 39 30 2a 34 20  |  \ &168 = 90*4 |
00002d50  28 43 6f 73 20 64 65 72  69 76 65 64 20 62 79 20  |(Cos derived by |
00002d60  53 69 6e 2b 39 30 20 29  0d 0e 7e 24 20 20 20 20  |Sin+90 )..~$    |
00002d70  20 20 20 20 20 20 4d 4f  56 20 20 20 20 72 32 2c  |      MOV    r2,|
00002d80  72 32 2c 4c 53 52 23 66  6c 6f 61 74 0d 0e 88 24  |r2,LSR#float...$|
00002d90  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |          MOV   |
00002da0  20 72 33 2c 72 33 2c 4c  53 52 23 66 6c 6f 61 74  | r3,r3,LSR#float|
00002db0  0d 0e 92 34 20 20 20 20  20 20 20 20 20 20 4c 44  |...4          LD|
00002dc0  52 20 20 20 20 73 70 2c  5b 72 36 2c 72 32 2c 4c  |R    sp,[r6,r2,L|
00002dd0  53 4c 23 32 5d 20 5c 20  72 34 20 3d 20 73 69 6e  |SL#2] \ r4 = sin|
00002de0  20 70 68 69 0d 0e 9c 36  20 20 20 20 20 20 20 20  | phi...6        |
00002df0  20 20 4c 44 52 20 20 20  20 63 74 2c 5b 72 37 2c  |  LDR    ct,[r7,|
00002e00  72 33 2c 4c 53 4c 23 32  5d 20 5c 20 72 35 20 3d  |r3,LSL#2] \ r5 =|
00002e10  20 63 6f 73 20 74 68 65  74 61 0d 0e a6 36 20 20  | cos theta...6  |
00002e20  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 73  |        LDR    s|
00002e30  74 2c 5b 72 36 2c 72 33  2c 4c 53 4c 23 32 5d 20  |t,[r6,r3,LSL#2] |
00002e40  5c 20 72 33 20 3d 20 73  69 6e 20 74 68 65 74 61  |\ r3 = sin theta|
00002e50  0d 0e b0 34 20 20 20 20  20 20 20 20 20 20 4c 44  |...4          LD|
00002e60  52 20 20 20 20 63 70 2c  5b 72 37 2c 72 32 2c 4c  |R    cp,[r7,r2,L|
00002e70  53 4c 23 32 5d 20 5c 20  72 32 20 3d 20 63 6f 73  |SL#2] \ r2 = cos|
00002e80  20 70 68 69 0d 0e ba 30  20 20 20 20 20 20 20 20  | phi...0        |
00002e90  20 20 52 53 42 20 20 20  20 6e 73 74 2c 73 74 2c  |  RSB    nst,st,|
00002ea0  23 30 20 20 20 20 20 20  20 20 5c 6e 73 74 20 3d  |#0        \nst =|
00002eb0  20 2d 73 74 0d 0e c4 30  20 20 20 20 20 20 20 20  | -st...0        |
00002ec0  20 20 52 53 42 20 20 20  20 6e 73 70 2c 73 70 2c  |  RSB    nsp,sp,|
00002ed0  23 30 20 20 20 20 20 20  20 20 5c 6e 73 70 20 3d  |#0        \nsp =|
00002ee0  20 2d 73 70 0d 0e ce 04  0d 0e d8 38 20 20 20 20  | -sp.......8    |
00002ef0  20 20 20 20 20 20 41 44  44 20 20 20 20 66 72 61  |      ADD    fra|
00002f00  63 2c 50 43 2c 23 28 66  72 61 63 74 69 6f 6e 73  |c,PC,#(fractions|
00002f10  2d 38 2d 50 25 2b 32 35  35 2a 34 29 83 32 35 36  |-8-P%+255*4).256|
00002f20  0d 0e e2 41 20 20 20 20  20 20 20 20 20 20 41 44  |...A          AD|
00002f30  44 20 20 20 20 66 72 61  63 2c 66 72 61 63 2c 23  |D    frac,frac,#|
00002f40  28 28 66 72 61 63 74 69  6f 6e 73 2d 38 2d 50 25  |((fractions-8-P%|
00002f50  2b 32 35 35 2a 34 29 81  32 35 36 29 2a 26 31 30  |+255*4).256)*&10|
00002f60  30 0d 0e ec 04 0d 0e f6  4e 2e 63 61 6c 63 73 20  |0.......N.calcs |
00002f70  20 20 20 4c 44 4d 49 41  20 20 63 6f 6f 72 64 73  |   LDMIA  coords|
00002f80  20 21 2c 7b 78 2c 79 2c  7a 7d 20 20 20 5c 20 78  | !,{x,y,z}   \ x|
00002f90  2c 20 79 2c 20 7a 20 61  6e 64 20 28 77 65 27 6c  |, y, z and (we'l|
00002fa0  6c 20 67 65 74 20 63 6f  6c 6f 75 72 20 6c 61 74  |l get colour lat|
00002fb0  65 72 29 0d 0f 00 1f 20  20 20 20 20 20 20 20 20  |er)....         |
00002fc0  20 4d 55 4c 20 20 20 20  6e 65 77 78 2c 79 2c 6e  | MUL    newx,y,n|
00002fd0  73 74 0d 0f 0a 3a 20 20  20 20 20 20 20 20 20 20  |st...:          |
00002fe0  4d 4c 41 20 20 20 20 6e  65 77 78 2c 78 2c 63 74  |MLA    newx,x,ct|
00002ff0  2c 6e 65 77 78 20 20 20  20 20 5c 20 6e 65 77 78  |,newx     \ newx|
00003000  20 3d 20 63 74 2a 78 2d  73 74 2a 79 0d 0f 14 04  | = ct*x-st*y....|
00003010  0d 0f 1e 1b 20 20 20 20  20 20 20 20 20 20 4d 55  |....          MU|
00003020  4c 20 20 20 20 79 2c 63  74 2c 79 0d 0f 28 3a 20  |L    y,ct,y..(: |
00003030  20 20 20 20 20 20 20 20  20 4d 4c 41 20 20 20 20  |         MLA    |
00003040  79 2c 78 2c 73 74 2c 79  20 20 20 20 20 20 20 20  |y,x,st,y        |
00003050  20 20 20 5c 20 20 20 20  79 20 3d 20 73 74 2a 78  |   \    y = st*x|
00003060  2b 63 74 2a 79 0d 0f 32  22 20 20 20 20 20 20 20  |+ct*y..2"       |
00003070  20 20 20 4d 4f 56 20 20  20 20 79 2c 79 2c 41 53  |   MOV    y,y,AS|
00003080  52 23 66 6c 6f 61 74 0d  0f 3c 04 0d 0f 46 1f 20  |R#float..<...F. |
00003090  20 20 20 20 20 20 20 20  20 4d 55 4c 20 20 20 20  |         MUL    |
000030a0  6e 65 77 79 2c 7a 2c 6e  73 70 0d 0f 50 3a 20 20  |newy,z,nsp..P:  |
000030b0  20 20 20 20 20 20 20 20  4d 4c 41 20 20 20 20 6e  |        MLA    n|
000030c0  65 77 79 2c 79 2c 63 70  2c 6e 65 77 79 20 20 20  |ewy,y,cp,newy   |
000030d0  20 20 5c 20 6e 65 77 79  20 3d 20 63 70 2a 79 2d  |  \ newy = cp*y-|
000030e0  73 70 2a 7a 0d 0f 5a 04  0d 0f 64 1b 20 20 20 20  |sp*z..Z...d.    |
000030f0  20 20 20 20 20 20 4d 55  4c 20 20 20 20 7a 2c 63  |      MUL    z,c|
00003100  70 2c 7a 0d 0f 6e 3a 20  20 20 20 20 20 20 20 20  |p,z..n:         |
00003110  20 4d 4c 41 20 20 20 20  7a 2c 73 70 2c 79 2c 7a  | MLA    z,sp,y,z|
00003120  20 20 20 20 20 20 20 20  20 20 20 5c 20 20 20 20  |           \    |
00003130  7a 20 3d 20 73 70 2a 79  2b 63 70 2a 7a 0d 0f 78  |z = sp*y+cp*z..x|
00003140  21 20 20 20 20 20 20 20  20 20 20 5c 20 78 3d 6e  |!          \ x=n|
00003150  65 77 78 20 79 3d 6e 65  77 79 20 7a 3d 7a 0d 0f  |ewx y=newy z=z..|
00003160  82 25 20 20 20 20 20 20  20 20 20 20 4d 4f 56 20  |.%          MOV |
00003170  20 20 20 79 2c 6e 65 77  79 2c 41 53 52 23 66 6c  |   y,newy,ASR#fl|
00003180  6f 61 74 0d 0f 8c 25 20  20 20 20 20 20 20 20 20  |oat...%         |
00003190  20 4d 4f 56 20 20 20 20  78 2c 6e 65 77 78 2c 41  | MOV    x,newx,A|
000031a0  53 52 23 66 6c 6f 61 74  0d 0f 96 22 20 20 20 20  |SR#float..."    |
000031b0  20 20 20 20 20 20 4d 4f  56 20 20 20 20 7a 2c 7a  |      MOV    z,z|
000031c0  2c 41 53 52 23 66 6c 6f  61 74 0d 0f a0 1b 20 20  |,ASR#float....  |
000031d0  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 74  |        MOV    t|
000031e0  65 6d 70 2c 7a 0d 0f aa  04 0d 0f b4 2b 20 20 20  |emp,z.......+   |
000031f0  20 20 20 20 20 20 20 4c  44 52 20 20 20 20 74 65  |       LDR    te|
00003200  6d 70 2c 5b 66 72 61 63  2c 74 65 6d 70 2c 4c 53  |mp,[frac,temp,LS|
00003210  4c 23 32 5d 0d 0f be 04  0d 0f c8 1d 20 20 20 20  |L#2]........    |
00003220  20 20 20 20 20 20 4d 55  4c 20 20 20 20 78 2c 74  |      MUL    x,t|
00003230  65 6d 70 2c 78 0d 0f d2  1d 20 20 20 20 20 20 20  |emp,x....       |
00003240  20 20 20 4d 55 4c 20 20  20 20 79 2c 74 65 6d 70  |   MUL    y,temp|
00003250  2c 79 0d 0f dc 37 20 20  20 20 20 20 20 20 20 20  |,y...7          |
00003260  4d 4f 56 20 20 20 20 74  65 6d 70 2c 23 31 32 38  |MOV    temp,#128|
00003270  20 20 20 20 20 20 20 20  20 5c 20 4f 72 69 67 69  |         \ Origi|
00003280  6e 20 31 32 38 2c 31 32  38 0d 0f e6 27 20 20 20  |n 128,128...'   |
00003290  20 20 20 20 20 20 20 41  44 44 20 20 20 20 78 2c  |       ADD    x,|
000032a0  74 65 6d 70 2c 78 2c 41  53 52 23 66 6c 6f 61 74  |temp,x,ASR#float|
000032b0  0d 0f f0 27 20 20 20 20  20 20 20 20 20 20 41 44  |...'          AD|
000032c0  44 20 20 20 20 79 2c 74  65 6d 70 2c 79 2c 41 53  |D    y,temp,y,AS|
000032d0  52 23 66 6c 6f 61 74 0d  0f fa 25 20 20 20 20 20  |R#float...%     |
000032e0  20 20 20 20 20 4c 44 52  20 20 20 20 74 65 6d 70  |     LDR    temp|
000032f0  2c 5b 63 6f 6f 72 64 73  5d 2c 23 34 0d 10 04 28  |,[coords],#4...(|
00003300  20 20 20 20 20 20 20 20  20 20 53 54 4d 49 41 20  |          STMIA |
00003310  20 74 6f 67 6f 20 21 2c  7b 78 2c 79 2c 7a 2c 74  | togo !,{x,y,z,t|
00003320  65 6d 70 7d 0d 10 0e 23  20 20 20 20 20 20 20 20  |emp}...#        |
00003330  20 20 53 55 42 53 20 20  20 63 6f 75 6e 74 2c 63  |  SUBS   count,c|
00003340  6f 75 6e 74 2c 23 31 0d  10 18 1a 20 20 20 20 20  |ount,#1....     |
00003350  20 20 20 20 20 42 4e 45  20 20 20 20 63 61 6c 63  |     BNE    calc|
00003360  73 0d 10 22 19 20 20 20  20 20 20 20 20 20 20 42  |s..".          B|
00003370  20 20 20 20 20 20 73 6f  72 74 0d 10 2c 04 0d 10  |      sort..,...|
00003380  36 22 2e 73 69 6e 74 61  62 6c 65 20 5d 3a 50 25  |6".sintable ]:P%|
00003390  2b 3d 33 36 30 2a 38 3a  5b 4f 50 54 70 61 73 73  |+=360*8:[OPTpass|
000033a0  0d 10 40 23 2e 66 72 61  63 74 69 6f 6e 73 20 5d  |..@#.fractions ]|
000033b0  3a 50 25 2b 3d 35 31 34  2a 34 3a 5b 4f 50 54 70  |:P%+=514*4:[OPTp|
000033c0  61 73 73 0d 10 4a 04 0d  10 54 3d 2e 72 65 67 63  |ass..J...T=.regc|
000033d0  6c 65 61 72 20 45 51 55  44 30 3a 45 51 55 44 30  |lear EQUD0:EQUD0|
000033e0  3a 45 51 55 44 30 3a 45  51 55 44 30 3a 45 51 55  |:EQUD0:EQUD0:EQU|
000033f0  44 30 3a 45 51 55 44 30  3a 45 51 55 44 30 3a 45  |D0:EQUD0:EQUD0:E|
00003400  51 55 44 30 0d 10 5e 3d  20 20 20 20 20 20 20 20  |QUD0..^=        |
00003410  20 20 45 51 55 44 30 3a  45 51 55 44 30 3a 45 51  |  EQUD0:EQUD0:EQ|
00003420  55 44 30 3a 45 51 55 44  30 3a 45 51 55 44 30 3a  |UD0:EQUD0:EQUD0:|
00003430  45 51 55 44 30 3a 45 51  55 44 30 3a 45 51 55 44  |EQUD0:EQUD0:EQUD|
00003440  30 0d 10 68 04 0d 10 72  4f 5c 20 48 65 72 65 73  |0..h...rO\ Heres|
00003450  20 61 20 66 75 6e 20 72  6f 75 74 69 6e 65 21 20  | a fun routine! |
00003460  54 68 69 73 20 6f 6e 65  20 69 73 20 61 20 27 62  |This one is a 'b|
00003470  69 6e 20 73 6f 72 74 27  2c 20 61 6e 64 20 6e 65  |in sort', and ne|
00003480  65 64 73 20 74 6f 20 62  65 20 76 65 72 79 20 71  |eds to be very q|
00003490  75 69 63 6b 0d 10 7c 1e  2e 73 6f 72 74 20 20 20  |uick..|..sort   |
000034a0  20 20 a4 61 64 72 28 30  2c 72 65 67 63 6c 65 61  |  .adr(0,regclea|
000034b0  72 29 0d 10 86 21 20 20  20 20 20 20 20 20 20 20  |r)...!          |
000034c0  4c 44 4d 49 41 20 20 20  72 30 2c 7b 72 33 2d 72  |LDMIA   r0,{r3-r|
000034d0  31 32 7d 0d 10 90 1b 20  20 20 20 20 20 20 20 20  |12}....         |
000034e0  20 a4 61 64 72 28 30 2c  7a 6c 69 73 74 29 0d 10  | .adr(0,zlist)..|
000034f0  9a 1b 20 20 20 20 20 20  20 20 20 20 4d 4f 56 20  |..          MOV |
00003500  20 20 20 20 72 32 2c 72  30 0d 10 a4 1c 20 20 20  |    r2,r0....   |
00003510  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 72  |       MOV     r|
00003520  31 2c 23 31 36 0d 10 ae  41 2e 72 65 73 65 74 6c  |1,#16...A.resetl|
00003530  70 20 20 53 54 4d 49 41  20 20 20 72 30 21 2c 7b  |p  STMIA   r0!,{|
00003540  72 33 2d 72 31 32 7d 20  5c 20 36 34 20 6c 6f 74  |r3-r12} \ 64 lot|
00003550  73 20 6f 66 20 74 65 6e  2e 20 28 74 72 69 6d 20  |s of ten. (trim |
00003560  6c 61 74 65 72 29 0d 10  b8 22 20 20 20 20 20 20  |later)..."      |
00003570  20 20 20 20 53 54 4d 49  41 20 20 20 72 30 21 2c  |    STMIA   r0!,|
00003580  7b 72 33 2d 72 31 32 7d  0d 10 c2 1e 20 20 20 20  |{r3-r12}....    |
00003590  20 20 20 20 20 20 53 55  42 53 20 20 20 20 72 31  |      SUBS    r1|
000035a0  2c 72 31 2c 23 31 0d 10  cc 1d 20 20 20 20 20 20  |,r1,#1....      |
000035b0  20 20 20 20 42 4e 45 20  20 20 20 20 72 65 73 65  |    BNE     rese|
000035c0  74 6c 70 0d 10 d6 4b 20  20 20 20 20 20 20 20 20  |tlp...K         |
000035d0  20 a4 6c 64 72 28 30 2c  6e 6f 63 6f 6f 72 64 73  | .ldr(0,nocoords|
000035e0  29 20 20 20 20 20 20 20  20 5c 20 72 30 20 69 73  |)        \ r0 is|
000035f0  20 6e 75 6d 62 65 72 20  6f 66 20 63 6f 6f 72 64  | number of coord|
00003600  69 6e 61 74 65 73 20 74  6f 20 73 6f 72 74 0d 10  |inates to sort..|
00003610  e0 4e 20 20 20 20 20 20  20 20 20 20 a4 61 64 72  |.N          .adr|
00003620  28 31 2c 64 65 73 74 2b  38 29 20 20 20 20 20 20  |(1,dest+8)      |
00003630  20 20 20 20 5c 20 72 31  20 69 73 20 61 64 64 72  |    \ r1 is addr|
00003640  65 73 73 20 6f 66 20 66  69 72 73 74 20 27 7a 27  |ess of first 'z'|
00003650  20 63 6f 6f 72 64 69 6e  61 74 65 2e 0d 10 ea 4d  | coordinate....M|
00003660  20 20 20 20 20 20 20 20  20 20 a4 61 64 72 28 33  |          .adr(3|
00003670  2c 73 70 61 72 65 29 20  20 20 20 20 20 20 20 20  |,spare)         |
00003680  20 20 5c 20 72 33 20 69  73 20 61 64 72 20 6f 66  |  \ r3 is adr of|
00003690  20 73 70 61 72 65 20 28  72 32 20 69 73 20 7a 6c  | spare (r2 is zl|
000036a0  69 73 74 20 61 64 64 72  29 0d 10 f4 45 20 20 20  |ist addr)...E   |
000036b0  20 20 20 20 20 20 20 a4  61 64 72 28 31 32 2c 7a  |       .adr(12,z|
000036c0  6f 72 64 65 72 29 20 20  20 20 20 20 20 20 20 5c  |order)         \|
000036d0  72 31 32 20 69 73 20 61  64 64 72 65 73 73 20 6f  |r12 is address o|
000036e0  66 20 6f 72 64 65 72 65  64 20 6c 69 73 74 0d 10  |f ordered list..|
000036f0  fe 51 20 20 20 20 20 20  20 20 20 20 41 44 44 20  |.Q          ADD |
00003700  20 20 20 20 72 30 2c 72  30 2c 23 31 20 20 20 20  |    r0,r0,#1    |
00003710  20 20 20 20 20 5c 20 74  6f 20 63 6f 6d 70 65 6e  |     \ to compen|
00003720  73 61 74 65 2d 64 61 74  61 20 64 6f 65 73 6e 27  |sate-data doesn'|
00003730  74 20 62 65 67 69 6e 20  61 74 20 7a 65 72 6f 0d  |t begin at zero.|
00003740  11 08 33 20 20 20 20 20  20 20 20 20 20 4d 4f 56  |..3          MOV|
00003750  20 20 20 20 20 72 34 2c  23 31 20 20 20 20 20 20  |     r4,#1      |
00003760  20 20 20 20 20 20 5c 20  72 34 20 3d 20 63 6f 75  |      \ r4 = cou|
00003770  6e 74 0d 11 12 4c 20 20  20 20 20 20 20 20 20 20  |nt...L          |
00003780  4d 4f 56 20 20 20 20 20  72 35 2c 23 31 20 20 20  |MOV     r5,#1   |
00003790  20 20 20 20 20 20 20 20  20 5c 20 72 35 20 3d 20  |         \ r5 = |
000037a0  69 6e 64 65 78 20 66 6f  72 20 69 74 65 6d 73 20  |index for items |
000037b0  28 30 2d 6e 6f 6f 66 63  6f 6f 72 64 73 29 0d 11  |(0-noofcoords)..|
000037c0  1c 21 20 20 20 20 20 20  20 20 20 20 4d 4f 56 20  |.!          MOV |
000037d0  20 20 20 20 72 31 30 2c  23 26 31 30 30 30 30 0d  |    r10,#&10000.|
000037e0  11 26 44 20 20 20 20 20  20 20 20 20 20 53 55 42  |.&D          SUB|
000037f0  20 20 20 20 20 72 31 30  2c 72 31 30 2c 23 31 20  |     r10,r10,#1 |
00003800  20 20 20 20 20 20 5c 20  52 31 30 20 3d 20 26 46  |      \ R10 = &F|
00003810  46 46 46 20 28 6d 61 73  6b 20 66 6f 72 20 64 61  |FFF (mask for da|
00003820  74 61 29 0d 11 30 34 2e  73 6f 72 74 69 74 31 20  |ta)..04.sortit1 |
00003830  20 4c 44 52 20 20 20 20  20 72 36 2c 5b 72 31 5d  | LDR     r6,[r1]|
00003840  2c 23 31 36 20 20 20 20  20 20 5c 20 67 65 74 20  |,#16      \ get |
00003850  7a 20 63 6f 6f 72 64 0d  11 3a 4d 20 20 20 20 20  |z coord..:M     |
00003860  20 20 20 20 20 41 44 44  20 20 20 20 20 72 36 2c  |     ADD     r6,|
00003870  72 36 2c 23 31 36 30 20  20 20 20 20 20 20 5c 20  |r6,#160       \ |
00003880  61 64 64 20 31 36 30 20  28 67 69 76 65 73 20 75  |add 160 (gives u|
00003890  73 20 61 20 72 61 6e 67  65 20 6f 66 20 2b 2d 20  |s a range of +- |
000038a0  31 36 30 29 0d 11 44 36  20 20 20 20 20 20 20 20  |160)..D6        |
000038b0  20 20 4c 44 52 20 20 20  20 20 72 37 2c 5b 72 32  |  LDR     r7,[r2|
000038c0  2c 72 36 2c 4c 53 4c 23  32 5d 20 5c 20 67 65 74  |,r6,LSL#2] \ get|
000038d0  20 7a 6c 69 73 74 28 7a  63 29 0d 11 4e 1b 20 20  | zlist(zc)..N.  |
000038e0  20 20 20 20 20 20 20 20  4d 4f 56 53 20 20 20 20  |        MOVS    |
000038f0  72 37 2c 72 37 0d 11 58  42 20 20 20 20 20 20 20  |r7,r7..XB       |
00003900  20 20 20 53 54 52 45 51  20 20 20 72 35 2c 5b 72  |   STREQ   r5,[r|
00003910  32 2c 72 36 2c 4c 53 4c  23 32 5d 20 5c 20 73 74  |2,r6,LSL#2] \ st|
00003920  6f 72 65 20 69 6e 64 65  78 20 69 66 20 6e 6f 77  |ore index if now|
00003930  74 20 74 68 65 72 65 0d  11 62 1a 20 20 20 20 20  |t there..b.     |
00003940  20 20 20 20 20 42 45 51  20 20 20 20 20 6e 65 78  |     BEQ     nex|
00003950  74 0d 11 6c 34 20 20 20  20 20 20 20 20 20 20 80  |t..l4          .|
00003960  20 20 20 20 20 72 38 2c  72 37 2c 72 31 30 2c 4c  |     r8,r7,r10,L|
00003970  53 4c 23 31 36 20 5c 20  72 38 20 69 73 20 70 6f  |SL#16 \ r8 is po|
00003980  69 6e 74 65 72 0d 11 76  31 20 20 20 20 20 20 20  |inter..v1       |
00003990  20 20 20 80 20 20 20 20  20 72 39 2c 72 37 2c 72  |   .     r9,r7,r|
000039a0  31 30 20 20 20 20 20 20  20 20 5c 20 72 39 20 69  |10        \ r9 i|
000039b0  73 20 64 61 74 61 0d 11  80 3e 20 20 20 20 20 20  |s data...>      |
000039c0  20 20 20 20 84 52 20 20  20 20 20 72 39 2c 72 39  |    .R     r9,r9|
000039d0  2c 72 34 2c 4c 53 4c 23  31 36 20 20 5c 20 72 39  |,r4,LSL#16  \ r9|
000039e0  20 69 73 20 6e 6f 77 20  7c 63 6f 75 6e 74 7c 64  | is now |count|d|
000039f0  61 74 61 7c 0d 11 8a 3e  20 20 20 20 20 20 20 20  |ata|...>        |
00003a00  20 20 53 54 52 20 20 20  20 20 72 39 2c 5b 72 32  |  STR     r9,[r2|
00003a10  2c 72 36 2c 4c 53 4c 23  32 5d 20 5c 20 73 74 6f  |,r6,LSL#2] \ sto|
00003a20  72 65 20 72 39 20 69 6e  20 7a 6c 69 73 74 28 7a  |re r9 in zlist(z|
00003a30  63 29 0d 11 94 41 20 20  20 20 20 20 20 20 20 20  |c)...A          |
00003a40  84 52 20 20 20 20 20 72  39 2c 72 35 2c 72 38 20  |.R     r9,r5,r8 |
00003a50  20 20 20 20 20 20 20 20  5c 20 72 39 20 69 73 20  |        \ r9 is |
00003a60  6e 6f 77 20 7c 69 6e 64  65 78 7c 70 6f 69 6e 74  |now |index|point|
00003a70  65 72 7c 0d 11 9e 41 20  20 20 20 20 20 20 20 20  |er|...A         |
00003a80  20 53 54 52 20 20 20 20  20 72 39 2c 5b 72 33 2c  | STR     r9,[r3,|
00003a90  72 34 2c 4c 53 4c 23 32  5d 20 5c 20 73 74 6f 72  |r4,LSL#2] \ stor|
00003aa0  65 20 72 39 20 69 6e 20  73 70 61 72 65 28 63 6f  |e r9 in spare(co|
00003ab0  75 6e 74 29 0d 11 a8 38  20 20 20 20 20 20 20 20  |unt)...8        |
00003ac0  20 20 41 44 44 20 20 20  20 20 72 34 2c 72 34 2c  |  ADD     r4,r4,|
00003ad0  23 31 20 20 20 20 20 20  20 20 20 5c 20 69 6e 63  |#1         \ inc|
00003ae0  72 65 6d 65 6e 74 20 63  6f 75 6e 74 0d 11 b2 38  |rement count...8|
00003af0  2e 6e 65 78 74 20 20 20  20 20 41 44 44 20 20 20  |.next     ADD   |
00003b00  20 20 72 35 2c 72 35 2c  23 31 20 20 20 20 20 20  |  r5,r5,#1      |
00003b10  20 20 20 5c 20 69 6e 63  72 65 6d 65 6e 74 20 69  |   \ increment i|
00003b20  6e 64 65 78 0d 11 bc 1b  20 20 20 20 20 20 20 20  |ndex....        |
00003b30  20 20 43 4d 50 20 20 20  20 20 72 35 2c 72 30 0d  |  CMP     r5,r0.|
00003b40  11 c6 42 20 20 20 20 20  20 20 20 20 20 42 4e 45  |..B          BNE|
00003b50  20 20 20 20 20 73 6f 72  74 69 74 31 20 20 20 20  |     sortit1    |
00003b60  20 20 20 20 20 20 5c 20  54 68 61 74 73 20 74 68  |      \ Thats th|
00003b70  65 20 65 61 73 79 20 62  69 74 20 66 6f 6c 6b 73  |e easy bit folks|
00003b80  21 0d 11 d0 47 20 20 20  20 20 20 20 20 20 20 20  |!...G           |
00003b90  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003ba0  20 20 20 20 20 20 20 20  5c 20 72 65 67 69 73 74  |        \ regist|
00003bb0  65 72 73 20 34 2d 31 31  20 61 72 65 20 75 6e 63  |ers 4-11 are unc|
00003bc0  6f 6d 6d 69 74 74 65 64  0d 11 da 46 20 20 20 20  |ommitted...F    |
00003bd0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003be0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 5c  |               \|
00003bf0  20 72 65 67 69 73 74 65  72 20 30 20 69 73 20 6e  | register 0 is n|
00003c00  6f 6f 66 63 6f 6f 72 64  73 20 28 69 25 29 0d 11  |oofcoords (i%)..|
00003c10  e4 3a 20 20 20 20 20 20  20 20 20 20 4d 4f 56 20  |.:          MOV |
00003c20  20 20 20 20 72 34 2c 23  33 32 30 20 20 20 20 20  |    r4,#320     |
00003c30  20 20 20 20 20 5c 20 72  34 20 69 73 20 6d 61 78  |     \ r4 is max|
00003c40  65 6c 65 6d 65 6e 74 73  0d 11 ee 39 2e 73 6f 72  |elements...9.sor|
00003c50  74 69 74 32 20 20 4c 44  52 20 20 20 20 20 72 35  |tit2  LDR     r5|
00003c60  2c 5b 72 32 5d 2c 23 34  20 20 20 20 20 20 20 5c  |,[r2],#4       \|
00003c70  20 47 65 74 20 7a 6c 69  73 74 28 63 6f 75 6e 74  | Get zlist(count|
00003c80  29 0d 11 f8 1b 20 20 20  20 20 20 20 20 20 20 4d  |)....          M|
00003c90  4f 56 53 20 20 20 20 72  35 2c 72 35 0d 12 02 37  |OVS    r5,r5...7|
00003ca0  20 20 20 20 20 20 20 20  20 20 42 45 51 20 20 20  |          BEQ   |
00003cb0  20 20 6e 65 78 74 32 20  20 20 20 20 20 20 20 20  |  next2         |
00003cc0  20 20 20 5c 20 49 67 6e  6f 72 65 20 69 66 20 7a  |   \ Ignore if z|
00003cd0  65 72 6f 0d 12 0c 43 20  20 20 20 20 20 20 20 20  |ero...C         |
00003ce0  20 80 53 20 20 20 20 72  36 2c 72 35 2c 72 31 30  | .S    r6,r5,r10|
00003cf0  2c 4c 53 4c 23 31 36 20  5c 20 72 36 20 69 73 20  |,LSL#16 \ r6 is |
00003d00  70 6f 69 6e 74 65 72 2e  20 49 73 20 69 74 20 73  |pointer. Is it s|
00003d10  69 6e 67 6c 65 3f 0d 12  16 3e 20 20 20 20 20 20  |ingle?...>      |
00003d20  20 20 20 20 53 54 52 45  51 20 20 20 72 35 2c 5b  |    STREQ   r5,[|
00003d30  72 31 32 5d 2c 23 34 20  20 20 20 20 20 5c 20 59  |r12],#4      \ Y|
00003d40  65 73 2e 20 53 74 6f 72  65 20 69 6e 20 7a 6f 72  |es. Store in zor|
00003d50  64 65 72 2e 0d 12 20 3b  20 20 20 20 20 20 20 20  |der... ;        |
00003d60  20 20 42 45 51 20 20 20  20 20 6e 65 78 74 32 20  |  BEQ     next2 |
00003d70  20 20 20 20 20 20 20 20  20 20 20 5c 20 53 6b 69  |           \ Ski|
00003d80  70 2c 20 61 6e 64 20 67  65 74 20 6e 65 78 74 0d  |p, and get next.|
00003d90  12 2a 45 20 20 20 20 20  20 20 20 20 20 80 20 20  |.*E          .  |
00003da0  20 20 20 72 37 2c 72 35  2c 72 31 30 20 20 20 20  |   r7,r5,r10    |
00003db0  20 20 20 20 5c 20 72 37  20 69 73 20 64 61 74 61  |    \ r7 is data|
00003dc0  20 28 63 6f 6f 72 64 69  6e 61 74 65 20 6e 75 6d  | (coordinate num|
00003dd0  62 65 72 29 0d 12 34 3d  2e 61 66 65 77 20 20 20  |ber)..4=.afew   |
00003de0  20 20 53 54 52 20 20 20  20 20 72 37 2c 5b 72 31  |  STR     r7,[r1|
00003df0  32 5d 2c 23 34 20 20 20  20 20 20 5c 20 73 74 6f  |2],#4      \ sto|
00003e00  72 65 20 64 61 74 61 20  69 6e 20 7a 6f 72 64 65  |re data in zorde|
00003e10  72 0d 12 3e 48 20 20 20  20 20 20 20 20 20 20 4c  |r..>H          L|
00003e20  44 52 20 20 20 20 20 72  36 2c 5b 72 33 2c 72 36  |DR     r6,[r3,r6|
00003e30  2c 4c 53 52 23 31 34 5d  5c 20 67 65 74 20 6e 65  |,LSR#14]\ get ne|
00003e40  77 20 70 6f 69 6e 74 65  72 7c 64 61 74 61 20 66  |w pointer|data f|
00003e50  72 6f 6d 20 73 70 61 72  65 0d 12 48 35 20 20 20  |rom spare..H5   |
00003e60  20 20 20 20 20 20 20 80  20 20 20 20 20 72 37 2c  |       .     r7,|
00003e70  72 36 2c 72 31 30 20 20  20 20 20 20 20 20 5c 20  |r6,r10        \ |
00003e80  72 37 20 69 73 20 6e 65  77 20 64 61 74 61 0d 12  |r7 is new data..|
00003e90  52 38 20 20 20 20 20 20  20 20 20 20 80 53 20 20  |R8          .S  |
00003ea0  20 20 72 36 2c 72 36 2c  72 31 30 2c 4c 53 4c 23  |  r6,r6,r10,LSL#|
00003eb0  31 36 20 5c 20 72 36 20  69 73 20 6e 65 77 20 70  |16 \ r6 is new p|
00003ec0  6f 69 6e 74 65 72 0d 12  5c 47 20 20 20 20 20 20  |ointer..\G      |
00003ed0  20 20 20 20 42 4e 45 20  20 20 20 20 61 66 65 77  |    BNE     afew|
00003ee0  20 20 20 20 20 20 20 20  20 20 20 20 20 5c 20 63  |             \ c|
00003ef0  6f 6e 74 69 6e 75 65 20  75 6e 74 69 6c 20 70 6f  |ontinue until po|
00003f00  69 6e 74 65 72 20 69 73  20 7a 65 72 6f 0d 12 66  |inter is zero..f|
00003f10  3d 20 20 20 20 20 20 20  20 20 20 53 54 52 20 20  |=          STR  |
00003f20  20 20 20 72 37 2c 5b 72  31 32 5d 2c 23 34 20 20  |   r7,[r12],#4  |
00003f30  20 20 20 20 5c 20 73 74  6f 72 65 20 64 61 74 61  |    \ store data|
00003f40  20 69 6e 20 7a 6f 72 64  65 72 0d 12 70 38 2e 6e  | in zorder..p8.n|
00003f50  65 78 74 32 20 20 20 20  53 55 42 53 20 20 20 20  |ext2    SUBS    |
00003f60  72 34 2c 72 34 2c 23 31  20 20 20 20 20 20 20 20  |r4,r4,#1        |
00003f70  20 5c 20 75 6e 74 69 6c  20 61 6c 6c 20 64 6f 6e  | \ until all don|
00003f80  65 2e 0d 12 7a 1d 20 20  20 20 20 20 20 20 20 20  |e...z.          |
00003f90  42 4e 45 20 20 20 20 20  73 6f 72 74 69 74 32 0d  |BNE     sortit2.|
00003fa0  12 84 26 20 20 20 20 20  20 20 20 20 20 4c 44 4d  |..&          LDM|
00003fb0  46 44 20 20 20 72 31 33  21 2c 7b 72 30 2d 72 31  |FD   r13!,{r0-r1|
00003fc0  32 2c 70 63 7d 0d 12 8e  04 0d 12 98 25 2e 64 65  |2,pc}.......%.de|
00003fd0  73 74 20 20 20 20 20 20  20 5d 3a 50 25 2b 3d 36  |st       ]:P%+=6|
00003fe0  34 30 2a 31 36 3a 5b 4f  50 54 70 61 73 73 0d 12  |40*16:[OPTpass..|
00003ff0  a2 50 2e 7a 6c 69 73 74  20 20 20 20 20 20 5d 3a  |.P.zlist      ]:|
00004000  50 25 2b 3d 33 32 30 2a  34 3a 5b 4f 50 54 70 61  |P%+=320*4:[OPTpa|
00004010  73 73 20 20 20 5c 20 33  32 30 20 6d 65 61 6e 73  |ss   \ 320 means|
00004020  20 63 6f 6f 72 64 69 6e  61 74 65 73 20 66 72 6f  | coordinates fro|
00004030  6d 20 2d 31 36 30 20 74  6f 20 31 35 39 2e 0d 12  |m -160 to 159...|
00004040  ac 24 2e 73 70 61 72 65  20 20 20 20 20 20 5d 3a  |.$.spare      ]:|
00004050  50 25 2b 3d 36 34 30 2a  34 3a 5b 4f 50 54 70 61  |P%+=640*4:[OPTpa|
00004060  73 73 0d 12 b6 24 2e 7a  6f 72 64 65 72 20 20 20  |ss...$.zorder   |
00004070  20 20 5d 3a 50 25 2b 3d  36 34 30 2a 34 3a 5b 4f  |  ]:P%+=640*4:[O|
00004080  50 54 70 61 73 73 0d 12  c0 04 0d 12 ca 26 2e 6e  |PTpass.......&.n|
00004090  65 77 73 68 61 70 65 20  20 20 53 54 4d 46 44 20  |ewshape   STMFD |
000040a0  72 31 33 21 2c 7b 72 30  2d 72 32 2c 72 31 34 7d  |r13!,{r0-r2,r14}|
000040b0  0d 12 d4 23 20 20 20 20  20 20 20 20 20 20 20 20  |...#            |
000040c0  41 44 52 20 20 20 72 30  2c 73 68 61 70 65 74 61  |ADR   r0,shapeta|
000040d0  62 6c 65 0d 12 de 21 20  20 20 20 20 20 20 20 20  |ble...!         |
000040e0  20 20 20 4c 44 52 20 20  20 72 31 2c 5b 72 30 2c  |   LDR   r1,[r0,|
000040f0  23 2d 34 5d 0d 12 e8 1e  20 20 20 20 20 20 20 20  |#-4]....        |
00004100  20 20 20 20 41 44 44 20  20 20 72 32 2c 72 31 2c  |    ADD   r2,r1,|
00004110  23 31 0d 12 f2 36 20 20  20 20 20 20 20 20 20 20  |#1...6          |
00004120  20 20 43 4d 50 20 20 20  72 32 2c 23 28 6e 75 6d  |  CMP   r2,#(num|
00004130  2b 31 29 20 20 20 5c 20  4e 75 6d 62 65 72 20 6f  |+1)   \ Number o|
00004140  66 20 73 68 61 70 65 73  0d 12 fc 18 20 20 20 20  |f shapes....    |
00004150  20 20 20 20 20 20 20 20  ec 51 20 72 32 2c 23 30  |        .Q r2,#0|
00004160  0d 13 06 21 20 20 20 20  20 20 20 20 20 20 20 20  |...!            |
00004170  53 54 52 20 20 20 72 32  2c 5b 72 30 2c 23 2d 34  |STR   r2,[r0,#-4|
00004180  5d 0d 13 10 31 20 20 20  20 20 20 20 20 20 20 20  |]...1           |
00004190  20 4c 44 52 20 20 20 72  32 2c 5b 72 30 2c 72 31  | LDR   r2,[r0,r1|
000041a0  2c 4c 53 4c 23 35 5d 21  20 5c 20 61 64 64 72 65  |,LSL#5]! \ addre|
000041b0  73 73 0d 13 1a 1e 20 20  20 20 20 20 20 20 20 20  |ss....          |
000041c0  20 20 41 44 44 20 20 20  72 32 2c 72 32 2c 72 30  |  ADD   r2,r2,r0|
000041d0  0d 13 24 3a 20 20 20 20  20 20 20 20 20 20 20 20  |..$:            |
000041e0  4c 44 52 20 20 20 72 31  2c 5b 72 30 2c 23 34 5d  |LDR   r1,[r0,#4]|
000041f0  20 20 20 20 20 20 20 20  5c 20 6e 75 6d 62 65 72  |        \ number|
00004200  20 6f 66 20 63 6f 6f 72  64 73 0d 13 2e 1d 20 20  | of coords....  |
00004210  20 20 20 20 20 20 20 20  20 20 a4 61 64 72 28 31  |          .adr(1|
00004220  34 2c 76 61 72 73 29 0d  13 38 26 20 20 20 20 20  |4,vars)..8&     |
00004230  20 20 20 20 20 20 20 53  54 52 20 20 20 72 31 2c  |       STR   r1,|
00004240  5b 72 31 34 5d 20 20 20  20 5c 20 6e 63 0d 13 42  |[r14]    \ nc..B|
00004250  2b 20 20 20 20 20 20 20  20 20 20 20 20 53 54 52  |+            STR|
00004260  20 20 20 72 32 2c 5b 72  31 34 2c 23 34 5d 20 5c  |   r2,[r14,#4] \|
00004270  20 61 64 64 72 65 73 73  0d 13 4c 20 20 20 20 20  | address..L     |
00004280  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 72 31  |        LDR   r1|
00004290  2c 5b 72 30 2c 23 38 5d  0d 13 56 27 20 20 20 20  |,[r0,#8]..V'    |
000042a0  20 20 20 20 20 20 20 20  53 54 52 20 20 20 72 31  |        STR   r1|
000042b0  2c 5b 72 31 34 2c 23 38  5d 20 5c 20 70 68 69 0d  |,[r14,#8] \ phi.|
000042c0  13 60 2a 20 20 20 20 20  20 20 20 20 20 20 20 53  |.`*            S|
000042d0  54 52 20 20 20 72 31 2c  5b 72 31 34 2c 23 33 36  |TR   r1,[r14,#36|
000042e0  5d 20 5c 20 61 6e 67 6c  65 0d 13 6a 21 20 20 20  |] \ angle..j!   |
000042f0  20 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 72  |         LDR   r|
00004300  31 2c 5b 72 30 2c 23 31  32 5d 0d 13 74 2a 20 20  |1,[r0,#12]..t*  |
00004310  20 20 20 20 20 20 20 20  20 20 53 54 52 20 20 20  |          STR   |
00004320  72 31 2c 5b 72 31 34 2c  23 31 32 5d 20 5c 20 74  |r1,[r14,#12] \ t|
00004330  68 65 74 61 0d 13 7e 2a  20 20 20 20 20 20 20 20  |heta..~*        |
00004340  20 20 20 20 53 54 52 20  20 20 72 31 2c 5b 72 31  |    STR   r1,[r1|
00004350  34 2c 23 34 30 5d 20 5c  20 61 6e 67 6c 65 0d 13  |4,#40] \ angle..|
00004360  88 21 20 20 20 20 20 20  20 20 20 20 20 20 4c 44  |.!            LD|
00004370  52 20 20 20 72 31 2c 5b  72 30 2c 23 31 36 5d 0d  |R   r1,[r0,#16].|
00004380  13 92 2c 20 20 20 20 20  20 20 20 20 20 20 20 53  |..,            S|
00004390  54 52 20 20 20 72 31 2c  5b 72 31 34 2c 23 32 30  |TR   r1,[r14,#20|
000043a0  5d 20 5c 20 70 68 69 20  69 6e 63 0d 13 9c 21 20  |] \ phi inc...! |
000043b0  20 20 20 20 20 20 20 20  20 20 20 4c 44 52 20 20  |           LDR  |
000043c0  20 72 31 2c 5b 72 30 2c  23 32 30 5d 0d 13 a6 2e  | r1,[r0,#20]....|
000043d0  20 20 20 20 20 20 20 20  20 20 20 20 53 54 52 20  |            STR |
000043e0  20 20 72 31 2c 5b 72 31  34 2c 23 32 34 5d 20 5c  |  r1,[r14,#24] \|
000043f0  20 74 68 65 74 61 20 69  6e 63 0d 13 b0 21 20 20  | theta inc...!  |
00004400  20 20 20 20 20 20 20 20  20 20 4c 44 52 20 20 20  |          LDR   |
00004410  72 31 2c 5b 72 30 2c 23  32 34 5d 0d 13 ba 2d 20  |r1,[r0,#24]...- |
00004420  20 20 20 20 20 20 20 20  20 20 20 53 54 52 20 20  |           STR  |
00004430  20 72 31 2c 5b 72 31 34  2c 23 32 38 5d 20 5c 20  | r1,[r14,#28] \ |
00004440  70 68 69 20 66 6c 61 67  0d 13 c4 21 20 20 20 20  |phi flag...!    |
00004450  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 72 31  |        LDR   r1|
00004460  2c 5b 72 30 2c 23 32 38  5d 0d 13 ce 2f 20 20 20  |,[r0,#28].../   |
00004470  20 20 20 20 20 20 20 20  20 53 54 52 20 20 20 72  |         STR   r|
00004480  31 2c 5b 72 31 34 2c 23  33 32 5d 20 5c 20 74 68  |1,[r14,#32] \ th|
00004490  65 74 61 20 66 6c 61 67  0d 13 d8 25 20 20 20 20  |eta flag...%    |
000044a0  20 20 20 20 20 20 20 20  4c 44 4d 46 44 20 72 31  |        LDMFD r1|
000044b0  33 21 2c 7b 72 30 2d 72  32 2c 70 63 7d 0d 13 e2  |3!,{r0-r2,pc}...|
000044c0  04 0d 13 ec 17 2e 73 68  61 70 65 6e 75 6d 20 20  |......shapenum  |
000044d0  20 45 51 55 44 20 20 30  0d 13 f6 04 0d 14 00 43  | EQUD  0.......C|
000044e0  2e 73 68 61 70 65 74 61  62 6c 65 20 5d 3a 50 25  |.shapetable ]:P%|
000044f0  2b 3d 33 32 2a 33 32 3a  5b 4f 50 54 70 61 73 73  |+=32*32:[OPTpass|
00004500  20 20 20 20 5c 20 61 64  64 72 65 73 73 2c 20 6e  |    \ address, n|
00004510  75 6d 62 65 72 20 6f 66  20 63 6f 6f 72 64 73 0d  |umber of coords.|
00004520  14 0a 45 2e 63 6f 6f 72  64 73 20 20 20 20 20 5d  |..E.coords     ]|
00004530  3a 50 25 2b 3d 37 30 30  30 2a 31 36 3a 5b 4f 50  |:P%+=7000*16:[OP|
00004540  54 70 61 73 73 20 20 5c  20 2a 31 36 20 3d 20 21  |Tpass  \ *16 = !|
00004550  78 20 2c 20 21 79 20 2c  20 21 7a 2c 20 21 63 6f  |x , !y , !z, !co|
00004560  6c 6f 75 72 0d 14 14 04  0d 14 1e 1f 20 20 20 20  |lour........    |
00004570  20 20 20 20 20 20 20 20  5c 20 49 4d 50 4f 52 54  |        \ IMPORT|
00004580  41 4e 54 20 ac 45 3a 0d  14 28 4e 20 20 20 20 20  |ANT .E:..(N     |
00004590  20 20 20 20 20 20 20 5c  20 54 68 65 20 37 30 30  |       \ The 700|
000045a0  30 20 61 62 6f 76 65 20  72 65 70 72 65 73 65 6e  |0 above represen|
000045b0  74 73 20 74 68 65 20 74  6f 74 61 6c 20 6e 75 6d  |ts the total num|
000045c0  62 65 72 20 6f 66 20 64  6f 74 73 20 72 65 71 75  |ber of dots requ|
000045d0  69 72 65 64 2e 0d 14 32  4b 20 20 20 20 20 20 20  |ired...2K       |
000045e0  20 20 20 20 20 5c 20 49  66 20 79 6f 75 20 61 6c  |     \ If you al|
000045f0  74 65 72 20 61 6e 79 20  6f 66 20 74 68 65 20 73  |ter any of the s|
00004600  68 61 70 65 73 2c 20 6d  61 6b 65 20 73 75 72 65  |hapes, make sure|
00004610  20 74 68 61 74 20 74 68  69 73 20 76 61 6c 75 65  | that this value|
00004620  0d 14 3c 4a 20 20 20 20  20 20 20 20 20 20 20 20  |..<J            |
00004630  5c 20 69 73 20 65 71 75  61 6c 20 74 6f 20 6f 72  |\ is equal to or|
00004640  20 61 62 6f 76 65 20 74  6f 20 74 68 65 20 74 6f  | above to the to|
00004650  74 61 6c 20 61 6d 6f 75  6e 74 20 6f 66 20 63 6f  |tal amount of co|
00004660  6f 72 64 69 6e 61 74 65  73 2e 0d 14 46 4d 20 20  |ordinates...FM  |
00004670  20 20 20 20 20 20 20 20  20 20 5c 20 49 66 20 79  |          \ If y|
00004680  6f 75 20 69 6e 63 72 65  61 73 65 20 74 68 69 73  |ou increase this|
00004690  20 76 61 6c 75 65 2c 20  62 65 20 73 75 72 65 20  | value, be sure |
000046a0  74 6f 20 61 64 6a 75 73  74 20 74 68 65 20 61 6d  |to adjust the am|
000046b0  6f 75 6e 74 20 6f 66 0d  14 50 4e 20 20 20 20 20  |ount of..PN     |
000046c0  20 20 20 20 20 20 20 5c  20 73 70 61 63 65 20 72  |       \ space r|
000046d0  65 73 65 72 76 65 64 20  66 6f 72 20 74 68 65 20  |eserved for the |
000046e0  63 6f 64 65 20 69 6e 20  74 68 65 20 62 65 67 69  |code in the begi|
000046f0  6e 6e 69 6e 67 20 6f 66  20 74 68 65 20 70 72 6f  |nning of the pro|
00004700  67 72 61 6d 2e 0d 14 5a  04 0d 14 64 51 2e 7a 65  |gram...Z...dQ.ze|
00004710  72 6f 72 65 67 20 20 20  20 20 44 43 44 30 3a 44  |roreg     DCD0:D|
00004720  43 44 30 3a 44 43 44 30  3a 44 43 44 30 3a 44 43  |CD0:DCD0:DCD0:DC|
00004730  44 30 3a 44 43 44 30 3a  44 43 44 30 3a 44 43 44  |D0:DCD0:DCD0:DCD|
00004740  30 3a 44 43 44 30 3a 44  43 44 30 3a 44 43 44 30  |0:DCD0:DCD0:DCD0|
00004750  3a 44 43 44 30 3a 44 43  44 30 0d 14 6e 04 0d 14  |:DCD0:DCD0..n...|
00004760  78 28 2e 63 6c 65 61 72  73 63 72 20 20 20 20 53  |x(.clearscr    S|
00004770  54 4d 46 44 20 72 31 33  21 2c 7b 72 30 2d 72 31  |TMFD r13!,{r0-r1|
00004780  32 2c 72 31 34 7d 0d 14  82 21 20 20 20 20 20 20  |2,r14}...!      |
00004790  20 20 20 20 20 20 20 41  44 52 20 20 20 72 30 2c  |       ADR   r0,|
000047a0  7a 65 72 6f 72 65 67 0d  14 8c 27 20 20 20 20 20  |zeroreg...'     |
000047b0  20 20 20 20 20 20 20 20  4c 44 4d 49 41 20 72 30  |        LDMIA r0|
000047c0  21 2c 7b 72 30 2d 72 31  31 2c 72 31 34 7d 0d 14  |!,{r0-r11,r14}..|
000047d0  96 25 20 20 20 20 20 20  20 20 20 20 20 20 20 5d  |.%             ]|
000047e0  3a e3 49 25 3d 31 b8 37  38 37 3a 5b 4f 50 54 70  |:.I%=1.787:[OPTp|
000047f0  61 73 73 0d 14 a0 28 20  20 20 20 20 20 20 20 20  |ass...(         |
00004800  20 20 20 20 53 54 4d 49  41 20 72 31 32 21 2c 7b  |    STMIA r12!,{|
00004810  72 30 2d 72 31 31 2c 72  31 34 7d 0d 14 aa 1d 20  |r0-r11,r14}.... |
00004820  20 20 20 20 20 20 20 20  20 20 20 20 5d 3a ed 3a  |            ]:.:|
00004830  5b 4f 50 54 70 61 73 73  0d 14 b4 23 20 20 20 20  |[OPTpass...#    |
00004840  20 20 20 20 20 20 20 20  20 53 54 4d 49 41 20 72  |         STMIA r|
00004850  31 32 21 2c 7b 72 30 2d  72 38 7d 0d 14 be 27 20  |12!,{r0-r8}...' |
00004860  20 20 20 20 20 20 20 20  20 20 20 20 4c 44 4d 46  |            LDMF|
00004870  44 20 72 31 33 21 2c 7b  72 30 2d 72 31 32 2c 70  |D r13!,{r0-r12,p|
00004880  63 7d 0d 14 c8 04 0d 14  d2 27 2e 73 65 74 63 6f  |c}.......'.setco|
00004890  6c 6f 75 72 20 53 54 4d  46 44 20 20 20 72 31 33  |lour STMFD   r13|
000048a0  21 2c 7b 72 30 2d 72 32  2c 72 31 34 7d 0d 14 dc  |!,{r0-r2,r14}...|
000048b0  21 20 20 20 20 20 20 20  20 20 20 20 41 44 52 20  |!           ADR |
000048c0  20 20 20 20 72 31 2c 70  61 6c 65 74 74 65 0d 14  |    r1,palette..|
000048d0  e6 1d 20 20 20 20 20 20  20 20 20 20 20 4d 4f 56  |..           MOV|
000048e0  20 20 20 20 20 72 32 2c  23 39 36 0d 14 f0 21 2e  |     r2,#96...!.|
000048f0  63 6f 6c 6c 6f 6f 70 20  20 20 4c 44 52 42 20 20  |colloop   LDRB  |
00004900  20 20 72 30 2c 5b 72 31  5d 2c 23 31 0d 14 fa 22  |  r0,[r1],#1..."|
00004910  20 20 20 20 20 20 20 20  20 20 20 53 57 49 20 20  |           SWI  |
00004920  20 20 20 22 4f 53 5f 57  72 69 74 65 43 22 0d 15  |   "OS_WriteC"..|
00004930  04 1f 20 20 20 20 20 20  20 20 20 20 20 53 55 42  |..           SUB|
00004940  53 20 20 20 20 72 32 2c  72 32 2c 23 31 0d 15 0e  |S    r2,r2,#1...|
00004950  1e 20 20 20 20 20 20 20  20 20 20 20 42 4e 45 20  |.           BNE |
00004960  20 20 20 20 63 6f 6c 6c  6f 6f 70 0d 15 18 26 20  |    colloop...& |
00004970  20 20 20 20 20 20 20 20  20 20 4c 44 4d 46 44 20  |          LDMFD |
00004980  20 20 72 31 33 21 2c 7b  72 30 2d 72 32 2c 70 63  |  r13!,{r0-r2,pc|
00004990  7d 0d 15 22 04 0d 15 2c  21 2e 70 61 6c 65 74 74  |}.."...,!.palett|
000049a0  65 20 20 20 5d 3a 50 25  2b 3d 31 32 30 3a 5b 4f  |e   ]:P%+=120:[O|
000049b0  50 54 70 61 73 73 0d 15  36 23 2e 63 6f 6c 72 65  |PTpass..6#.colre|
000049c0  73 65 74 20 20 5d 3a 50  25 2b 3d 31 36 2a 31 32  |set  ]:P%+=16*12|
000049d0  3a 5b 4f 50 54 70 61 73  73 0d 15 40 23 2e 63 6f  |:[OPTpass..@#.co|
000049e0  6c 66 61 64 65 20 20 20  5d 3a 50 25 2b 3d 31 36  |lfade   ]:P%+=16|
000049f0  2a 31 32 3a 5b 4f 50 54  70 61 73 73 0d 15 4a 04  |*12:[OPTpass..J.|
00004a00  0d 15 54 25 2e 72 65 73  65 74 63 6f 6c 73 20 53  |..T%.resetcols S|
00004a10  54 4d 46 44 20 72 31 33  21 2c 7b 72 30 2d 72 34  |TMFD r13!,{r0-r4|
00004a20  2c 72 31 34 7d 0d 15 5e  20 20 20 20 20 20 20 20  |,r14}..^        |
00004a30  20 20 20 20 41 44 52 20  20 20 72 30 2c 63 6f 6c  |    ADR   r0,col|
00004a40  72 65 73 65 74 0d 15 68  20 20 20 20 20 20 20 20  |reset..h        |
00004a50  20 20 20 20 41 44 52 20  20 20 72 31 34 2c 63 6f  |    ADR   r14,co|
00004a60  6c 66 61 64 65 0d 15 72  1b 20 20 20 20 20 20 20  |lfade..r.       |
00004a70  20 20 20 20 4d 4f 56 20  20 20 72 34 2c 23 31 36  |    MOV   r4,#16|
00004a80  0d 15 7c 20 2e 72 65 73  65 74 6c 6f 6f 70 20 4c  |..| .resetloop L|
00004a90  44 4d 49 41 20 72 30 21  2c 7b 72 31 2d 72 33 7d  |DMIA r0!,{r1-r3}|
00004aa0  0d 15 86 21 20 20 20 20  20 20 20 20 20 20 20 53  |...!           S|
00004ab0  54 4d 49 41 20 72 31 34  21 2c 7b 72 31 2d 72 33  |TMIA r14!,{r1-r3|
00004ac0  7d 0d 15 90 1d 20 20 20  20 20 20 20 20 20 20 20  |}....           |
00004ad0  53 55 42 53 20 20 72 34  2c 72 34 2c 23 31 0d 15  |SUBS  r4,r4,#1..|
00004ae0  9a 1e 20 20 20 20 20 20  20 20 20 20 20 42 4e 45  |..           BNE|
00004af0  20 20 20 72 65 73 65 74  6c 6f 6f 70 0d 15 a4 24  |   resetloop...$|
00004b00  20 20 20 20 20 20 20 20  20 20 20 4c 44 4d 46 44  |           LDMFD|
00004b10  20 72 31 33 21 2c 7b 72  30 2d 72 34 2c 70 63 7d  | r13!,{r0-r4,pc}|
00004b20  0d 15 ae 04 0d 15 b8 47  5c 20 53 6f 72 72 79 20  |.......G\ Sorry |
00004b30  61 62 6f 75 74 20 74 68  65 20 68 61 72 64 77 61  |about the hardwa|
00004b40  72 65 20 61 63 63 65 73  73 20 66 6f 6c 6b 73 2c  |re access folks,|
00004b50  20 62 75 74 20 ef 31 39  20 77 61 73 20 6a 75 73  | but .19 was jus|
00004b60  74 20 74 6f 6f 20 73 6c  6f 77 2e 0d 15 c2 25 2e  |t too slow....%.|
00004b70  66 61 64 65 6f 75 74 20  20 20 53 54 4d 46 44 20  |fadeout   STMFD |
00004b80  72 31 33 21 2c 7b 72 30  2d 72 37 2c 72 31 34 7d  |r13!,{r0-r7,r14}|
00004b90  0d 15 cc 21 20 20 20 20  20 20 20 20 20 20 20 53  |...!           S|
00004ba0  57 49 20 20 20 22 4f 53  5f 45 6e 74 65 72 4f 53  |WI   "OS_EnterOS|
00004bb0  22 0d 15 d6 21 20 20 20  20 20 20 20 20 20 20 20  |"...!           |
00004bc0  4d 4f 56 20 20 20 72 37  2c 23 26 33 34 30 30 30  |MOV   r7,#&34000|
00004bd0  30 30 0d 15 e0 1f 20 20  20 20 20 20 20 20 20 20  |00....          |
00004be0  20 41 44 52 20 20 20 72  35 2c 63 6f 6c 66 61 64  | ADR   r5,colfad|
00004bf0  65 0d 15 ea 1b 20 20 20  20 20 20 20 20 20 20 20  |e....           |
00004c00  4d 4f 56 20 20 20 72 36  2c 23 31 35 0d 15 f4 1f  |MOV   r6,#15....|
00004c10  2e 66 61 64 65 6f 6c 6f  6f 70 20 4c 44 4d 49 41  |.fadeoloop LDMIA|
00004c20  20 72 35 2c 7b 72 31 2d  72 33 7d 0d 15 fe 23 20  | r5,{r1-r3}...# |
00004c30  20 20 20 20 20 20 20 20  20 20 84 52 20 20 20 72  |          .R   r|
00004c40  30 2c 72 31 2c 72 36 2c  4c 53 4c 23 32 36 0d 16  |0,r1,r6,LSL#26..|
00004c50  08 22 20 20 20 20 20 20  20 20 20 20 20 84 52 20  |."           .R |
00004c60  20 20 72 30 2c 72 30 2c  72 32 2c 4c 53 4c 23 34  |  r0,r0,r2,LSL#4|
00004c70  0d 16 12 22 20 20 20 20  20 20 20 20 20 20 20 84  |..."           .|
00004c80  52 20 20 20 72 30 2c 72  30 2c 72 33 2c 4c 53 4c  |R   r0,r0,r3,LSL|
00004c90  23 38 0d 16 1c 1c 20 20  20 20 20 20 20 20 20 20  |#8....          |
00004ca0  20 53 54 52 20 20 20 72  30 2c 5b 72 37 5d 0d 16  | STR   r0,[r7]..|
00004cb0  26 29 20 20 20 20 20 20  20 20 20 20 20 53 55 42  |&)           SUB|
00004cc0  53 20 20 72 31 2c 72 31  2c 23 31 3a 4d 4f 56 4d  |S  r1,r1,#1:MOVM|
00004cd0  49 20 72 31 2c 23 30 0d  16 30 29 20 20 20 20 20  |I r1,#0..0)     |
00004ce0  20 20 20 20 20 20 53 55  42 53 20 20 72 32 2c 72  |      SUBS  r2,r|
00004cf0  32 2c 23 31 3a 4d 4f 56  4d 49 20 72 32 2c 23 30  |2,#1:MOVMI r2,#0|
00004d00  0d 16 3a 29 20 20 20 20  20 20 20 20 20 20 20 53  |..:)           S|
00004d10  55 42 53 20 20 72 33 2c  72 33 2c 23 31 3a 4d 4f  |UBS  r3,r3,#1:MO|
00004d20  56 4d 49 20 72 33 2c 23  30 0d 16 44 20 20 20 20  |VMI r3,#0..D    |
00004d30  20 20 20 20 20 20 20 20  53 54 4d 49 41 20 72 35  |        STMIA r5|
00004d40  21 2c 7b 72 31 2d 72 33  7d 0d 16 4e 1d 20 20 20  |!,{r1-r3}..N.   |
00004d50  20 20 20 20 20 20 20 20  53 55 42 53 20 20 72 36  |        SUBS  r6|
00004d60  2c 72 36 2c 23 31 0d 16  58 1e 20 20 20 20 20 20  |,r6,#1..X.      |
00004d70  20 20 20 20 20 42 50 4c  20 20 20 66 61 64 65 6f  |     BPL   fadeo|
00004d80  6c 6f 6f 70 0d 16 62 1a  20 20 20 20 20 20 20 20  |loop..b.        |
00004d90  20 20 20 54 45 51 50 20  20 70 63 2c 23 30 0d 16  |   TEQP  pc,#0..|
00004da0  6c 1a 20 20 20 20 20 20  20 20 20 20 20 4d 4f 56  |l.           MOV|
00004db0  4e 56 20 72 30 2c 72 30  0d 16 76 24 20 20 20 20  |NV r0,r0..v$    |
00004dc0  20 20 20 20 20 20 20 4c  44 4d 46 44 20 72 31 33  |       LDMFD r13|
00004dd0  21 2c 7b 72 30 2d 72 37  2c 70 63 7d 0d 16 80 04  |!,{r0-r7,pc}....|
00004de0  0d 16 8a 26 2e 66 61 64  65 69 6e 20 20 20 20 53  |...&.fadein    S|
00004df0  54 4d 46 44 20 72 31 33  21 2c 7b 72 30 2d 72 31  |TMFD r13!,{r0-r1|
00004e00  31 2c 72 31 34 7d 0d 16  94 21 20 20 20 20 20 20  |1,r14}...!      |
00004e10  20 20 20 20 20 53 57 49  20 20 20 22 4f 53 5f 45  |     SWI   "OS_E|
00004e20  6e 74 65 72 4f 53 22 0d  16 9e 22 20 20 20 20 20  |nterOS"..."     |
00004e30  20 20 20 20 20 20 4d 4f  56 20 20 20 72 31 31 2c  |      MOV   r11,|
00004e40  23 26 33 34 30 30 30 30  30 0d 16 a8 1f 20 20 20  |#&3400000....   |
00004e50  20 20 20 20 20 20 20 20  41 44 52 20 20 20 72 35  |        ADR   r5|
00004e60  2c 63 6f 6c 66 61 64 65  0d 16 b2 20 20 20 20 20  |,colfade...     |
00004e70  20 20 20 20 20 20 20 41  44 52 20 20 20 72 37 2c  |       ADR   r7,|
00004e80  63 6f 6c 72 65 73 65 74  0d 16 bc 1b 20 20 20 20  |colreset....    |
00004e90  20 20 20 20 20 20 20 4d  4f 56 20 20 20 72 36 2c  |       MOV   r6,|
00004ea0  23 31 35 0d 16 c6 1f 2e  66 61 64 65 69 6c 6f 6f  |#15.....fadeiloo|
00004eb0  70 20 4c 44 4d 49 41 20  72 35 2c 7b 72 31 2d 72  |p LDMIA r5,{r1-r|
00004ec0  33 7d 0d 16 d0 21 20 20  20 20 20 20 20 20 20 20  |3}...!          |
00004ed0  20 4c 44 4d 49 41 20 72  37 21 2c 7b 72 38 2d 72  | LDMIA r7!,{r8-r|
00004ee0  31 30 7d 0d 16 da 23 20  20 20 20 20 20 20 20 20  |10}...#         |
00004ef0  20 20 84 52 20 20 20 72  30 2c 72 31 2c 72 36 2c  |  .R   r0,r1,r6,|
00004f00  4c 53 4c 23 32 36 0d 16  e4 22 20 20 20 20 20 20  |LSL#26..."      |
00004f10  20 20 20 20 20 84 52 20  20 20 72 30 2c 72 30 2c  |     .R   r0,r0,|
00004f20  72 32 2c 4c 53 4c 23 34  0d 16 ee 22 20 20 20 20  |r2,LSL#4..."    |
00004f30  20 20 20 20 20 20 20 84  52 20 20 20 72 30 2c 72  |       .R   r0,r|
00004f40  30 2c 72 33 2c 4c 53 4c  23 38 0d 16 f8 1d 20 20  |0,r3,LSL#8....  |
00004f50  20 20 20 20 20 20 20 20  20 53 54 52 20 20 20 72  |         STR   r|
00004f60  30 2c 5b 72 31 31 5d 0d  17 02 33 20 20 20 20 20  |0,[r11]...3     |
00004f70  20 20 20 20 20 20 41 44  44 20 20 20 72 31 2c 72  |      ADD   r1,r|
00004f80  31 2c 23 31 3a 43 4d 50  20 72 31 2c 72 38 3a 4d  |1,#1:CMP r1,r8:M|
00004f90  4f 56 47 45 20 72 31 2c  72 38 0d 17 0c 33 20 20  |OVGE r1,r8...3  |
00004fa0  20 20 20 20 20 20 20 20  20 41 44 44 20 20 20 72  |         ADD   r|
00004fb0  32 2c 72 32 2c 23 31 3a  43 4d 50 20 72 31 2c 72  |2,r2,#1:CMP r1,r|
00004fc0  39 3a 4d 4f 56 47 45 20  72 32 2c 72 39 0d 17 16  |9:MOVGE r2,r9...|
00004fd0  35 20 20 20 20 20 20 20  20 20 20 20 41 44 44 20  |5           ADD |
00004fe0  20 20 72 33 2c 72 33 2c  23 31 3a 43 4d 50 20 72  |  r3,r3,#1:CMP r|
00004ff0  31 2c 72 31 30 3a 4d 4f  56 47 45 20 72 33 2c 72  |1,r10:MOVGE r3,r|
00005000  31 30 0d 17 20 20 20 20  20 20 20 20 20 20 20 20  |10..            |
00005010  20 53 54 4d 49 41 20 72  35 21 2c 7b 72 31 2d 72  | STMIA r5!,{r1-r|
00005020  33 7d 0d 17 2a 1d 20 20  20 20 20 20 20 20 20 20  |3}..*.          |
00005030  20 53 55 42 53 20 20 72  36 2c 72 36 2c 23 31 0d  | SUBS  r6,r6,#1.|
00005040  17 34 1e 20 20 20 20 20  20 20 20 20 20 20 42 50  |.4.           BP|
00005050  4c 20 20 20 66 61 64 65  69 6c 6f 6f 70 0d 17 3e  |L   fadeiloop..>|
00005060  1a 20 20 20 20 20 20 20  20 20 20 20 54 45 51 50  |.           TEQP|
00005070  20 20 70 63 2c 23 30 0d  17 48 1a 20 20 20 20 20  |  pc,#0..H.     |
00005080  20 20 20 20 20 20 4d 4f  56 4e 56 20 72 30 2c 72  |      MOVNV r0,r|
00005090  30 0d 17 52 25 20 20 20  20 20 20 20 20 20 20 20  |0..R%           |
000050a0  4c 44 4d 46 44 20 72 31  33 21 2c 7b 72 30 2d 72  |LDMFD r13!,{r0-r|
000050b0  31 31 2c 70 63 7d 0d 17  5c 04 0d 17 66 07 5d 3a  |11,pc}..\...f.]:|
000050c0  ed 0d 17 70 3b f1 22 43  6f 64 65 20 66 72 6f 6d  |...p;."Code from|
000050d0  20 26 22 3b 7e 63 6f 64  65 3b 22 2d 26 22 3b 7e  | &";~code;"-&";~|
000050e0  50 25 3b 22 20 28 22 3b  28 50 25 2d 63 6f 64 65  |P%;" (";(P%-code|
000050f0  29 81 31 30 32 34 3b 22  4b 29 2e 22 0d 17 7a 2c  |).1024;"K)."..z,|
00005100  ff 22 4c 4f 41 44 20 3c  44 69 7a 7a 79 24 44 69  |."LOAD <Dizzy$Di|
00005110  72 3e 2e 52 61 77 42 61  6c 6c 39 20 22 2b c3 7e  |r>.RawBall9 "+.~|
00005120  62 61 6c 6c 64 61 74 61  0d 17 84 2b ff 22 4c 4f  |balldata...+."LO|
00005130  41 44 20 3c 44 69 7a 7a  79 24 44 69 72 3e 2e 50  |AD <Dizzy$Dir>.P|
00005140  61 6c 65 74 74 65 20 20  22 2b c3 7e 70 61 6c 65  |alette  "+.~pale|
00005150  74 74 65 0d 17 8e 2c ff  22 4c 4f 41 44 20 3c 44  |tte...,."LOAD <D|
00005160  69 7a 7a 79 24 44 69 72  3e 2e 46 6f 6e 74 20 20  |izzy$Dir>.Font  |
00005170  20 20 20 22 2b c3 7e 66  6f 6e 74 64 61 74 61 0d  |   "+.~fontdata.|
00005180  17 98 04 0d 17 a2 20 4d  25 3d 70 61 6c 65 74 74  |...... M%=palett|
00005190  65 3a 4e 25 3d 63 6f 6c  72 65 73 65 74 2b 31 35  |e:N%=colreset+15|
000051a0  2a 31 32 0d 17 ac 24 e3  49 25 3d 31 b8 31 36 3a  |*12...$.I%=1.16:|
000051b0  52 25 3d 4d 25 3f 33 3a  47 25 3d 4d 25 3f 34 3a  |R%=M%?3:G%=M%?4:|
000051c0  42 25 3d 4d 25 3f 35 0d  17 b6 30 21 4e 25 3d 52  |B%=M%?5...0!N%=R|
000051d0  25 81 31 36 3a 4e 25 21  34 3d 47 25 81 31 36 3a  |%.16:N%!4=G%.16:|
000051e0  4e 25 21 38 3d 42 25 81  31 36 3a 4e 25 2d 3d 31  |N%!8=B%.16:N%-=1|
000051f0  32 3a 4d 25 2b 3d 36 0d  17 c0 05 ed 0d 17 ca 04  |2:M%+=6.........|
00005200  0d 17 d4 38 4d 25 3d 73  69 6e 74 61 62 6c 65 3a  |...8M%=sintable:|
00005210  e3 49 25 3d 30 20 b8 20  34 34 39 3a 21 4d 25 3d  |.I%=0 . 449:!M%=|
00005220  b5 28 b2 28 49 25 29 29  2a 32 5e 66 6c 6f 61 74  |.(.(I%))*2^float|
00005230  3a 4d 25 2b 3d 34 3a ed  0d 17 de 42 4d 25 3d 66  |:M%+=4:....BM%=f|
00005240  72 61 63 74 69 6f 6e 73  3a e3 49 25 3d 2d 32 35  |ractions:.I%=-25|
00005250  35 b8 32 35 35 3a 21 4d  25 3d 31 39 32 2a 28 31  |5.255:!M%=192*(1|
00005260  2f 28 49 25 2b 32 35 36  29 29 2a 32 5e 66 6c 6f  |/(I%+256))*2^flo|
00005270  61 74 3a 4d 25 2b 3d 34  3a ed 0d 17 e8 04 0d 17  |at:M%+=4:.......|
00005280  f2 0b 73 63 61 6c 65 3d  31 0d 17 fc 04 0d 18 06  |..scale=1.......|
00005290  1b 4d 25 3d 63 6f 6f 72  64 73 3a 4e 25 3d 73 68  |.M%=coords:N%=sh|
000052a0  61 70 65 74 61 62 6c 65  0d 18 10 0f 74 6f 74 61  |apetable....tota|
000052b0  6c 64 6f 74 73 3d 30 0d  18 1a 0c 63 6e 74 25 3d  |ldots=0....cnt%=|
000052c0  6e 75 6d 0d 18 24 11 e3  63 6e 74 25 3d 30 20 b8  |num..$..cnt%=0 .|
000052d0  20 6e 75 6d 0d 18 2e 33  74 73 74 61 72 74 3d 30  | num...3tstart=0|
000052e0  3a 70 73 74 61 72 74 3d  30 3a 74 69 6e 63 3d 31  |:pstart=0:tinc=1|
000052f0  3a 70 69 6e 63 3d 31 3a  74 73 69 6e 65 3d 30 3a  |:pinc=1:tsine=0:|
00005300  70 73 69 6e 65 3d 30 0d  18 38 0d 21 4e 25 3d 4d  |psine=0..8.!N%=M|
00005310  25 2d 4e 25 0d 18 42 29  21 6e 6f 63 6f 6f 72 64  |%-N%..B)!nocoord|
00005320  73 3d a4 73 68 61 70 65  28 63 6e 74 25 29 3a 4e  |s=.shape(cnt%):N|
00005330  25 21 34 3d 21 6e 6f 63  6f 6f 72 64 73 0d 18 4c  |%!4=!nocoords..L|
00005340  2c 4e 25 21 38 3d 70 73  74 61 72 74 2a 32 5e 66  |,N%!8=pstart*2^f|
00005350  6c 6f 61 74 3a 4e 25 21  31 32 3d 74 73 74 61 72  |loat:N%!12=tstar|
00005360  74 2a 32 5e 66 6c 6f 61  74 0d 18 56 29 4e 25 21  |t*2^float..V)N%!|
00005370  31 36 3d 70 69 6e 63 2a  32 5e 66 6c 6f 61 74 3a  |16=pinc*2^float:|
00005380  4e 25 21 32 30 3d 74 69  6e 63 2a 32 5e 66 6c 6f  |N%!20=tinc*2^flo|
00005390  61 74 0d 18 60 22 4e 25  21 32 34 3d 70 73 69 6e  |at..`"N%!24=psin|
000053a0  65 3a 4e 25 21 32 38 3d  74 73 69 6e 65 3a 4e 25  |e:N%!28=tsine:N%|
000053b0  2b 3d 33 32 0d 18 6a 0f  f1 3b 21 6e 6f 63 6f 6f  |+=32..j..;!nocoo|
000053c0  72 64 73 0d 18 74 18 74  6f 74 61 6c 64 6f 74 73  |rds..t.totaldots|
000053d0  2b 3d 21 6e 6f 63 6f 6f  72 64 73 0d 18 7e 05 ed  |+=!nocoords..~..|
000053e0  0d 18 88 3c f1 22 74 6f  74 61 6c 20 63 6f 6f 72  |...<."total coor|
000053f0  64 69 6e 61 74 65 73 20  22 3b 74 6f 74 61 6c 64  |dinates ";totald|
00005400  6f 74 73 3b 22 2e 20 20  50 72 65 73 73 20 73 70  |ots;".  Press sp|
00005410  61 63 65 20 62 61 72 2e  2e 2e 2e 22 0d 18 92 0b  |ace bar...."....|
00005420  e7 73 61 76 65 20 8c 0d  18 9c 32 ff 22 53 61 76  |.save ....2."Sav|
00005430  65 20 3c 44 69 7a 7a 79  24 44 69 72 3e 2e 21 52  |e <Dizzy$Dir>.!R|
00005440  75 6e 49 6d 61 67 65 20  22 2b c3 7e 63 6f 64 65  |unImage "+.~code|
00005450  2b 22 20 22 2b c3 7e 50  25 0d 18 a6 26 2a 53 45  |+" "+.~P%...&*SE|
00005460  54 54 59 50 45 20 3c 44  69 7a 7a 79 24 44 69 72  |TTYPE <Dizzy$Dir|
00005470  3e 2e 21 52 75 6e 49 6d  61 67 65 20 46 46 38 0d  |>.!RunImage FF8.|
00005480  18 b0 05 cd 0d 18 ba 05  e1 0d 18 c4 04 0d 18 ce  |................|
00005490  14 dd a4 61 64 72 28 64  65 73 74 2c 61 64 64 72  |...adr(dest,addr|
000054a0  29 0d 18 d8 14 e7 70 61  73 73 3d 30 20 8c 61 64  |).....pass=0 .ad|
000054b0  64 72 3d 50 25 0d 18 e2  0e e7 61 64 64 72 3c 50  |dr=P%.....addr<P|
000054c0  25 20 8c 0d 18 ec 12 61  64 64 72 3d 50 25 2d 61  |% .....addr=P%-a|
000054d0  64 64 72 2b 38 0d 18 f6  2d e7 61 64 64 72 3e 26  |ddr+8...-.addr>&|
000054e0  46 46 46 46 20 8c ef 37  3a f1 22 49 4c 4c 45 47  |FFFF ..7:."ILLEG|
000054f0  41 4c 20 41 44 52 20 41  54 54 45 4d 50 54 2e 22  |AL ADR ATTEMPT."|
00005500  3a e0 0d 19 00 44 5b 4f  50 54 70 61 73 73 3a 53  |:....D[OPTpass:S|
00005510  55 42 20 64 65 73 74 2c  70 63 2c 23 28 61 64 64  |UB dest,pc,#(add|
00005520  72 20 80 26 46 46 30 30  29 3a 53 55 42 20 64 65  |r .&FF00):SUB de|
00005530  73 74 2c 64 65 73 74 2c  23 28 61 64 64 72 20 80  |st,dest,#(addr .|
00005540  26 46 46 29 3a 5d 0d 19  0a 05 cc 0d 19 14 12 61  |&FF):].........a|
00005550  64 64 72 3d 61 64 64 72  2d 50 25 2d 38 0d 19 1e  |ddr=addr-P%-8...|
00005560  2d e7 61 64 64 72 3e 26  46 46 46 46 20 8c ef 37  |-.addr>&FFFF ..7|
00005570  3a f1 22 49 4c 4c 45 47  41 4c 20 41 44 52 20 41  |:."ILLEGAL ADR A|
00005580  54 54 45 4d 50 54 2e 22  3a e0 0d 19 28 44 5b 4f  |TTEMPT.":...(D[O|
00005590  50 54 70 61 73 73 3a 41  44 44 20 64 65 73 74 2c  |PTpass:ADD dest,|
000055a0  70 63 2c 23 28 61 64 64  72 20 80 26 46 46 30 30  |pc,#(addr .&FF00|
000055b0  29 3a 41 44 44 20 64 65  73 74 2c 64 65 73 74 2c  |):ADD dest,dest,|
000055c0  23 28 61 64 64 72 20 80  26 46 46 29 3a 5d 0d 19  |#(addr .&FF):]..|
000055d0  32 05 cd 0d 19 3c 06 3d  30 0d 19 46 04 0d 19 50  |2....<.=0..F...P|
000055e0  14 dd a4 6c 64 72 28 64  65 73 74 2c 61 64 64 72  |...ldr(dest,addr|
000055f0  29 0d 19 5a 14 e7 70 61  73 73 3d 30 20 8c 61 64  |)..Z..pass=0 .ad|
00005600  64 72 3d 50 25 0d 19 64  0e e7 61 64 64 72 3c 50  |dr=P%..d..addr<P|
00005610  25 20 8c 0d 19 6e 12 61  64 64 72 3d 50 25 2d 61  |% ...n.addr=P%-a|
00005620  64 64 72 2b 38 0d 19 78  2d e7 61 64 64 72 3e 26  |ddr+8..x-.addr>&|
00005630  46 46 46 46 20 8c ef 37  3a f1 22 49 4c 4c 45 47  |FFFF ..7:."ILLEG|
00005640  41 4c 20 41 44 52 20 41  54 54 45 4d 50 54 2e 22  |AL ADR ATTEMPT."|
00005650  3a e0 0d 19 82 47 5b 4f  50 54 70 61 73 73 3a 53  |:....G[OPTpass:S|
00005660  55 42 20 64 65 73 74 2c  70 63 2c 23 28 61 64 64  |UB dest,pc,#(add|
00005670  72 20 80 26 46 46 30 30  29 3a 4c 44 52 20 64 65  |r .&FF00):LDR de|
00005680  73 74 2c 5b 64 65 73 74  2c 23 2d 28 61 64 64 72  |st,[dest,#-(addr|
00005690  20 80 26 46 46 29 5d 3a  5d 0d 19 8c 05 cc 0d 19  | .&FF)]:].......|
000056a0  96 12 61 64 64 72 3d 61  64 64 72 2d 50 25 2d 38  |..addr=addr-P%-8|
000056b0  0d 19 a0 2d e7 61 64 64  72 3e 26 46 46 46 46 20  |...-.addr>&FFFF |
000056c0  8c ef 37 3a f1 22 49 4c  4c 45 47 41 4c 20 41 44  |..7:."ILLEGAL AD|
000056d0  52 20 41 54 54 45 4d 50  54 2e 22 3a e0 0d 19 aa  |R ATTEMPT.":....|
000056e0  46 5b 4f 50 54 70 61 73  73 3a 41 44 44 20 64 65  |F[OPTpass:ADD de|
000056f0  73 74 2c 70 63 2c 23 28  61 64 64 72 20 80 26 46  |st,pc,#(addr .&F|
00005700  46 30 30 29 3a 4c 44 52  20 64 65 73 74 2c 5b 64  |F00):LDR dest,[d|
00005710  65 73 74 2c 23 28 61 64  64 72 20 80 26 46 46 29  |est,#(addr .&FF)|
00005720  5d 3a 5d 0d 19 b4 05 cd  0d 19 be 06 3d 30 0d 19  |]:].........=0..|
00005730  c8 04 0d 19 d2 13 dd 20  a4 73 68 61 70 65 28 73  |....... .shape(s|
00005740  68 61 70 65 29 0d 19 dc  0a 64 6f 74 73 3d 30 0d  |hape)....dots=0.|
00005750  19 e6 0e c8 8e 20 73 68  61 70 65 20 ca 0d 19 f0  |..... shape ....|
00005760  09 20 c9 20 30 3a 0d 19  fa 33 74 73 74 61 72 74  |. . 0:...3tstart|
00005770  3d 30 3a 70 73 74 61 72  74 3d 30 3a 74 69 6e 63  |=0:pstart=0:tinc|
00005780  3d 31 3a 70 69 6e 63 3d  32 3a 74 73 69 6e 65 3d  |=1:pinc=2:tsine=|
00005790  30 3a 70 73 69 6e 65 3d  30 0d 1a 04 37 73 63 61  |0:psine=0...7sca|
000057a0  6c 65 3d 31 3a f1 22 27  48 65 6c 6c 6f 27 22 3b  |le=1:."'Hello'";|
000057b0  8a 31 35 29 3b 22 53 63  61 6c 65 3a 20 22 3b 73  |.15);"Scale: ";s|
000057c0  63 61 6c 65 3b 8a 33 30  29 3b 22 2e 2e 2e 22 3b  |cale;.30);"...";|
000057d0  0d 1a 0e 0f 20 20 de 20  62 6c 6b 20 31 30 30 0d  |....  . blk 100.|
000057e0  1a 18 13 20 20 74 65 78  74 24 3d 22 48 65 6c 6c  |...  text$="Hell|
000057f0  6f 22 0d 1a 22 1d 20 20  61 3d 36 3a 6d 3d 2d 28  |o"..".  a=6:m=-(|
00005800  28 a9 28 74 65 78 74 24  29 2a 38 29 2f 32 29 0d  |(.(text$)*8)/2).|
00005810  1a 2c 08 43 25 3d 30 0d  1a 36 14 20 20 e3 20 62  |.,.C%=0..6.  . b|
00005820  3d 31 20 b8 20 a9 74 65  78 74 24 0d 1a 40 20 43  |=1 . .text$..@ C|
00005830  25 2b 3d 26 36 30 30 3a  e7 43 25 3d 26 36 30 30  |%+=&600:.C%=&600|
00005840  2a 37 20 8c 43 25 3d 26  36 30 30 0d 1a 4a 17 20  |*7 .C%=&600..J. |
00005850  20 20 62 6c 6b 3f 30 3d  97 c1 74 65 78 74 24 2c  |  blk?0=..text$,|
00005860  62 29 0d 1a 54 1a 20 20  20 c8 99 20 22 4f 53 5f  |b)..T.   .. "OS_|
00005870  57 6f 72 64 22 2c 31 30  2c 62 6c 6b 0d 1a 5e 24  |Word",10,blk..^$|
00005880  e3 20 63 3d 30 20 b8 20  37 3a 42 25 3d 62 6c 6b  |. c=0 . 7:B%=blk|
00005890  3f 28 63 2b 31 29 3a e3  20 64 3d 30 20 b8 20 37  |?(c+1):. d=0 . 7|
000058a0  0d 1a 68 33 e7 28 42 25  20 80 20 32 5e 64 29 3c  |..h3.(B% . 2^d)<|
000058b0  3e 30 20 8c f2 64 6f 74  28 28 28 37 2d 64 29 2b  |>0 ..dot(((7-d)+|
000058c0  6d 29 2a 61 2c 28 63 2d  34 29 2a 61 2a 32 2c 2d  |m)*a,(c-4)*a*2,-|
000058d0  32 30 29 0d 1a 72 0e ed  3a ed 3a 6d 2b 3d 38 3a  |20)..r..:.:m+=8:|
000058e0  ed 0d 1a 7c 09 20 c9 20  31 3a 0d 1a 86 33 74 73  |...|. . 1:...3ts|
000058f0  74 61 72 74 3d 30 3a 70  73 74 61 72 74 3d 30 3a  |tart=0:pstart=0:|
00005900  74 69 6e 63 3d 31 3a 70  69 6e 63 3d 31 3a 74 73  |tinc=1:pinc=1:ts|
00005910  69 6e 65 3d 31 3a 70 73  69 6e 65 3d 30 0d 1a 90  |ine=1:psine=0...|
00005920  14 73 74 65 70 3d 31 37  3a 6c 69 6d 69 74 3d 35  |.step=17:limit=5|
00005930  31 0d 1a 9a 35 73 63 61  6c 65 3d 31 2e 34 3a f1  |1...5scale=1.4:.|
00005940  22 42 6f 78 22 3b 8a 31  35 29 3b 22 53 63 61 6c  |"Box";.15);"Scal|
00005950  65 3a 20 22 3b 73 63 61  6c 65 3b 8a 33 30 29 3b  |e: ";scale;.30);|
00005960  22 2e 2e 2e 22 3b 0d 1a  a4 1f 20 20 e3 20 61 3d  |"...";....  . a=|
00005970  2d 6c 69 6d 69 74 20 b8  20 6c 69 6d 69 74 20 88  |-limit . limit .|
00005980  20 73 74 65 70 0d 1a ae  20 20 20 20 e3 20 62 3d  | step...    . b=|
00005990  2d 6c 69 6d 69 74 20 b8  20 6c 69 6d 69 74 20 88  |-limit . limit .|
000059a0  20 73 74 65 70 0d 1a b8  0d 43 25 3d 26 36 30 30  | step....C%=&600|
000059b0  2a 31 0d 1a c2 18 20 20  20 20 f2 64 6f 74 28 61  |*1....    .dot(a|
000059c0  2c 62 2c 2d 6c 69 6d 69  74 29 0d 1a cc 0d 43 25  |,b,-limit)....C%|
000059d0  3d 26 36 30 30 2a 32 0d  1a d6 17 20 20 20 20 f2  |=&600*2....    .|
000059e0  64 6f 74 28 61 2c 62 2c  6c 69 6d 69 74 29 0d 1a  |dot(a,b,limit)..|
000059f0  e0 08 20 20 20 ed 0d 1a  ea 07 20 20 ed 0d 1a f4  |..   .....  ....|
00005a00  2d 20 20 e3 20 61 3d 28  2d 6c 69 6d 69 74 2b 73  |-  . a=(-limit+s|
00005a10  74 65 70 29 20 b8 20 28  6c 69 6d 69 74 2d 73 74  |tep) . (limit-st|
00005a20  65 70 29 20 88 20 73 74  65 70 0d 1a fe 2d 20 20  |ep) . step...-  |
00005a30  e3 20 62 3d 28 2d 6c 69  6d 69 74 2b 73 74 65 70  |. b=(-limit+step|
00005a40  29 20 b8 20 28 6c 69 6d  69 74 2d 73 74 65 70 29  |) . (limit-step)|
00005a50  20 88 20 73 74 65 70 0d  1b 08 0d 43 25 3d 26 36  | . step....C%=&6|
00005a60  30 30 2a 33 0d 1b 12 18  20 20 20 20 f2 64 6f 74  |00*3....    .dot|
00005a70  28 61 2c 2d 6c 69 6d 69  74 2c 62 29 0d 1b 1c 0d  |(a,-limit,b)....|
00005a80  43 25 3d 26 36 30 30 2a  34 0d 1b 26 17 20 20 20  |C%=&600*4..&.   |
00005a90  20 f2 64 6f 74 28 61 2c  6c 69 6d 69 74 2c 62 29  | .dot(a,limit,b)|
00005aa0  0d 1b 30 08 20 20 20 ed  0d 1b 3a 07 20 20 ed 0d  |..0.   ...:.  ..|
00005ab0  1b 44 2d 20 20 e3 20 61  3d 28 2d 6c 69 6d 69 74  |.D-  . a=(-limit|
00005ac0  2b 73 74 65 70 29 20 b8  20 28 6c 69 6d 69 74 2d  |+step) . (limit-|
00005ad0  73 74 65 70 29 20 88 20  73 74 65 70 0d 1b 4e 1f  |step) . step..N.|
00005ae0  20 20 e3 20 62 3d 2d 6c  69 6d 69 74 20 b8 20 6c  |  . b=-limit . l|
00005af0  69 6d 69 74 20 88 20 73  74 65 70 0d 1b 58 1e 43  |imit . step..X.C|
00005b00  25 3d 26 36 30 30 2a 35  3a f2 64 6f 74 28 2d 6c  |%=&600*5:.dot(-l|
00005b10  69 6d 69 74 2c 62 2c 61  29 0d 1b 62 1d 43 25 3d  |imit,b,a)..b.C%=|
00005b20  26 36 30 30 2a 36 3a f2  64 6f 74 28 6c 69 6d 69  |&600*6:.dot(limi|
00005b30  74 2c 62 2c 61 29 0d 1b  6c 07 ed 3a ed 0d 1b 76  |t,b,a)..l..:...v|
00005b40  09 20 c9 20 32 3a 0d 1b  80 33 74 73 74 61 72 74  |. . 2:...3tstart|
00005b50  3d 30 3a 70 73 74 61 72  74 3d 30 3a 74 69 6e 63  |=0:pstart=0:tinc|
00005b60  3d 32 3a 70 69 6e 63 3d  32 3a 74 73 69 6e 65 3d  |=2:pinc=2:tsine=|
00005b70  30 3a 70 73 69 6e 65 3d  30 0d 1b 8a 35 73 63 61  |0:psine=0...5sca|
00005b80  6c 65 3d 31 3a f1 22 52  69 6e 67 73 22 3b 8a 31  |le=1:."Rings";.1|
00005b90  35 29 3b 22 53 63 61 6c  65 3a 20 22 3b 73 63 61  |5);"Scale: ";sca|
00005ba0  6c 65 3b 8a 33 30 29 3b  22 2e 2e 2e 22 3b 0d 1b  |le;.30);"...";..|
00005bb0  94 16 20 20 e3 20 61 3d  30 20 b8 20 33 35 30 20  |..  . a=0 . 350 |
00005bc0  88 20 31 30 0d 1b 9e 11  20 20 20 63 6f 73 3d 38  |. 10....   cos=8|
00005bd0  30 2a 9b b2 61 0d 1b a8  11 20 20 20 73 69 6e 3d  |0*..a....   sin=|
00005be0  38 30 2a b5 b2 61 0d 1b  b2 0b 43 25 3d 26 36 30  |80*..a....C%=&60|
00005bf0  30 0d 1b bc 19 20 20 20  20 f2 64 6f 74 28 31 30  |0....    .dot(10|
00005c00  30 2c 63 6f 73 2c 73 69  6e 29 0d 1b c6 0d 43 25  |0,cos,sin)....C%|
00005c10  3d 26 36 30 30 2a 32 0d  1b d0 1a 20 20 20 20 f2  |=&600*2....    .|
00005c20  64 6f 74 28 2d 31 30 30  2c 63 6f 73 2c 73 69 6e  |dot(-100,cos,sin|
00005c30  29 0d 1b da 0d 43 25 3d  26 36 30 30 2a 33 0d 1b  |)....C%=&600*3..|
00005c40  e4 19 20 20 20 20 f2 64  6f 74 28 63 6f 73 2c 31  |..    .dot(cos,1|
00005c50  30 30 2c 73 69 6e 29 0d  1b ee 0d 43 25 3d 26 36  |00,sin)....C%=&6|
00005c60  30 30 2a 34 0d 1b f8 1a  20 20 20 20 f2 64 6f 74  |00*4....    .dot|
00005c70  28 63 6f 73 2c 2d 31 30  30 2c 73 69 6e 29 0d 1c  |(cos,-100,sin)..|
00005c80  02 0d 43 25 3d 26 36 30  30 2a 35 0d 1c 0c 19 20  |..C%=&600*5.... |
00005c90  20 20 20 f2 64 6f 74 28  63 6f 73 2c 73 69 6e 2c  |   .dot(cos,sin,|
00005ca0  31 30 30 29 0d 1c 16 0d  43 25 3d 26 36 30 30 2a  |100)....C%=&600*|
00005cb0  36 0d 1c 20 1a 20 20 20  20 f2 64 6f 74 28 63 6f  |6.. .    .dot(co|
00005cc0  73 2c 73 69 6e 2c 2d 31  30 30 29 0d 1c 2a 08 20  |s,sin,-100)..*. |
00005cd0  20 20 ed 0d 1c 34 09 20  c9 20 33 3a 0d 1c 3e 33  |  ...4. . 3:..>3|
00005ce0  74 73 74 61 72 74 3d 30  3a 70 73 74 61 72 74 3d  |tstart=0:pstart=|
00005cf0  30 3a 74 69 6e 63 3d 32  3a 70 69 6e 63 3d 31 3a  |0:tinc=2:pinc=1:|
00005d00  74 73 69 6e 65 3d 30 3a  70 73 69 6e 65 3d 30 0d  |tsine=0:psine=0.|
00005d10  1c 48 40 73 63 61 6c 65  3d 31 3a 43 25 3d 26 36  |.H@scale=1:C%=&6|
00005d20  30 30 2a 36 3a 3a f1 22  42 75 6c 62 73 22 3b 8a  |00*6::."Bulbs";.|
00005d30  31 35 29 3b 22 53 63 61  6c 65 3a 20 22 3b 73 63  |15);"Scale: ";sc|
00005d40  61 6c 65 3b 8a 33 30 29  3b 22 2e 2e 2e 22 3b 0d  |ale;.30);"...";.|
00005d50  1c 52 16 20 20 e3 20 72  3d 32 30 20 b8 20 36 30  |.R.  . r=20 . 60|
00005d60  20 88 20 32 30 0d 1c 5c  0d 20 20 20 62 3d 72 2b  | . 20..\.   b=r+|
00005d70  34 30 0d 1c 66 21 73 74  65 70 32 3d 32 30 3a e7  |40..f!step2=20:.|
00005d80  72 3c 35 30 20 8c 73 74  65 70 32 3d 73 74 65 70  |r<50 .step2=step|
00005d90  32 2a 32 0d 1c 70 1a 20  20 20 e3 20 61 3d 30 20  |2*2..p.   . a=0 |
00005da0  b8 20 33 35 30 20 88 20  73 74 65 70 32 0d 1c 7a  |. 350 . step2..z|
00005db0  11 20 20 20 20 63 6f 73  3d 72 2a 9b b2 61 0d 1c  |.    cos=r*..a..|
00005dc0  84 11 20 20 20 20 73 69  6e 3d 72 2a b5 b2 61 0d  |..    sin=r*..a.|
00005dd0  1c 8e 17 20 20 20 20 f2  64 6f 74 28 62 2c 63 6f  |...    .dot(b,co|
00005de0  73 2c 73 69 6e 29 0d 1c  98 18 20 20 20 20 f2 64  |s,sin)....    .d|
00005df0  6f 74 28 2d 62 2c 63 6f  73 2c 73 69 6e 29 0d 1c  |ot(-b,cos,sin)..|
00005e00  a2 17 20 20 20 20 f2 64  6f 74 28 63 6f 73 2c 62  |..    .dot(cos,b|
00005e10  2c 73 69 6e 29 0d 1c ac  18 20 20 20 20 f2 64 6f  |,sin)....    .do|
00005e20  74 28 63 6f 73 2c 2d 62  2c 73 69 6e 29 0d 1c b6  |t(cos,-b,sin)...|
00005e30  17 20 20 20 20 f2 64 6f  74 28 63 6f 73 2c 73 69  |.    .dot(cos,si|
00005e40  6e 2c 62 29 0d 1c c0 18  20 20 20 20 f2 64 6f 74  |n,b)....    .dot|
00005e50  28 63 6f 73 2c 73 69 6e  2c 2d 62 29 0d 1c ca 08  |(cos,sin,-b)....|
00005e60  20 20 20 ed 0d 1c d4 07  20 20 ed 0d 1c de 09 20  |   .....  ..... |
00005e70  c9 20 34 3a 0d 1c e8 34  74 73 74 61 72 74 3d 30  |. 4:...4tstart=0|
00005e80  3a 70 73 74 61 72 74 3d  33 30 3a 74 69 6e 63 3d  |:pstart=30:tinc=|
00005e90  31 3a 70 69 6e 63 3d 31  3a 74 73 69 6e 65 3d 31  |1:pinc=1:tsine=1|
00005ea0  3a 70 73 69 6e 65 3d 31  0d 1c f2 36 73 63 61 6c  |:psine=1...6scal|
00005eb0  65 3d 30 2e 37 3a f1 22  54 75 62 65 22 3b 8a 31  |e=0.7:."Tube";.1|
00005ec0  35 29 3b 22 53 63 61 6c  65 3a 20 22 3b 73 63 61  |5);"Scale: ";sca|
00005ed0  6c 65 3b 8a 33 30 29 3b  22 2e 2e 2e 22 3b 0d 1c  |le;.30);"...";..|
00005ee0  fc 0f 63 6f 6c 3d 31 3a  69 6e 63 3d 31 0d 1d 06  |..col=1:inc=1...|
00005ef0  19 20 20 e3 20 61 3d 2d  31 30 30 20 b8 20 31 30  |.  . a=-100 . 10|
00005f00  30 20 88 20 32 30 0d 1d  10 0f 43 25 3d 26 36 30  |0 . 20....C%=&60|
00005f10  30 2a 63 6f 6c 0d 1d 1a  15 e7 63 6f 6c 3d 34 20  |0*col.....col=4 |
00005f20  8c 43 25 3d 26 36 30 30  2a 35 0d 1d 24 15 e7 63  |.C%=&600*5..$..c|
00005f30  6f 6c 3d 35 20 8c 43 25  3d 26 36 30 30 2a 34 0d  |ol=5 .C%=&600*4.|
00005f40  1d 2e 17 20 20 20 e3 20  62 3d 30 20 b8 20 33 34  |...   . b=0 . 34|
00005f50  35 20 88 20 31 38 0d 1d  38 1d 20 20 20 20 f2 64  |5 . 18..8.    .d|
00005f60  6f 74 28 38 30 2a 9b b2  62 2c 61 2c 38 30 2a b5  |ot(80*..b,a,80*.|
00005f70  b2 62 29 0d 1d 42 08 20  20 20 ed 0d 1d 4c 1b 63  |.b)..B.   ...L.c|
00005f80  6f 6c 2b 3d 69 6e 63 3a  e7 63 6f 6c 3d 36 20 8c  |ol+=inc:.col=6 .|
00005f90  69 6e 63 3d 2d 31 0d 1d  56 07 20 20 ed 0d 1d 60  |inc=-1..V.  ...`|
00005fa0  09 20 c9 20 35 3a 0d 1d  6a 34 74 73 74 61 72 74  |. . 5:..j4tstart|
00005fb0  3d 30 3a 70 73 74 61 72  74 3d 39 30 3a 74 69 6e  |=0:pstart=90:tin|
00005fc0  63 3d 32 3a 70 69 6e 63  3d 31 3a 74 73 69 6e 65  |c=2:pinc=1:tsine|
00005fd0  3d 31 3a 70 73 69 6e 65  3d 31 0d 1d 74 38 73 63  |=1:psine=1..t8sc|
00005fe0  61 6c 65 3d 31 3a 3a f1  22 47 69 72 64 65 72 73  |ale=1::."Girders|
00005ff0  22 3b 8a 31 35 29 3b 22  53 63 61 6c 65 3a 20 22  |";.15);"Scale: "|
00006000  3b 73 63 61 6c 65 3b 8a  33 30 29 3b 22 2e 2e 2e  |;scale;.30);"...|
00006010  22 3b 0d 1d 7e 0d 43 25  3d 26 36 30 30 2a 33 0d  |";..~.C%=&600*3.|
00006020  1d 88 19 20 20 e3 20 61  3d 2d 31 32 30 20 b8 20  |...  . a=-120 . |
00006030  2d 33 30 20 88 20 31 30  0d 1d 92 17 20 20 20 e3  |-30 . 10....   .|
00006040  20 62 3d 30 20 b8 20 33  30 30 20 88 20 39 30 0d  | b=0 . 300 . 90.|
00006050  1d 9c 12 20 20 20 20 63  6f 73 3d 33 30 2a 9b b2  |...    cos=30*..|
00006060  62 0d 1d a6 12 20 20 20  20 73 69 6e 3d 33 30 2a  |b....    sin=30*|
00006070  b5 b2 62 0d 1d b0 17 20  20 20 20 f2 64 6f 74 28  |..b....    .dot(|
00006080  61 2c 63 6f 73 2c 73 69  6e 29 0d 1d ba 17 20 20  |a,cos,sin)....  |
00006090  20 20 f2 64 6f 74 28 63  6f 73 2c 61 2c 73 69 6e  |  .dot(cos,a,sin|
000060a0  29 0d 1d c4 16 20 20 20  f2 64 6f 74 28 63 6f 73  |)....   .dot(cos|
000060b0  2c 73 69 6e 2c 61 29 0d  1d ce 18 20 20 20 20 f2  |,sin,a)....    .|
000060c0  64 6f 74 28 2d 61 2c 63  6f 73 2c 73 69 6e 29 0d  |dot(-a,cos,sin).|
000060d0  1d d8 18 20 20 20 20 f2  64 6f 74 28 63 6f 73 2c  |...    .dot(cos,|
000060e0  2d 61 2c 73 69 6e 29 0d  1d e2 18 20 20 20 20 f2  |-a,sin)....    .|
000060f0  64 6f 74 28 63 6f 73 2c  73 69 6e 2c 2d 61 29 0d  |dot(cos,sin,-a).|
00006100  1d ec 08 20 20 20 ed 0d  1d f6 07 20 20 ed 0d 1e  |...   .....  ...|
00006110  00 09 20 c9 20 36 3a 0d  1e 0a 33 74 73 74 61 72  |.. . 6:...3tstar|
00006120  74 3d 30 3a 70 73 74 61  72 74 3d 30 3a 74 69 6e  |t=0:pstart=0:tin|
00006130  63 3d 31 3a 70 69 6e 63  3d 31 3a 74 73 69 6e 65  |c=1:pinc=1:tsine|
00006140  3d 30 3a 70 73 69 6e 65  3d 31 0d 1e 14 37 73 63  |=0:psine=1...7sc|
00006150  61 6c 65 3d 30 2e 37 3a  3a f1 22 56 61 73 65 22  |ale=0.7::."Vase"|
00006160  3b 8a 31 35 29 3b 22 53  63 61 6c 65 3a 20 22 3b  |;.15);"Scale: ";|
00006170  73 63 61 6c 65 3b 8a 33  30 29 3b 22 2e 2e 2e 22  |scale;.30);"..."|
00006180  3b 0d 1e 1e 0d 43 25 3d  26 36 30 30 2a 34 0d 1e  |;....C%=&600*4..|
00006190  28 16 20 20 e3 20 61 3d  2d 31 20 b8 20 2e 39 20  |(.  . a=-1 . .9 |
000061a0  88 20 2e 31 0d 1e 32 1b  20 20 20 72 3d 31 30 30  |. .1..2.   r=100|
000061b0  2d 37 30 2a b5 b2 28 61  2a 39 30 2b 39 30 29 0d  |-70*..(a*90+90).|
000061c0  1e 3c 17 20 20 20 e3 20  62 3d 30 20 b8 20 33 34  |.<.   . b=0 . 34|
000061d0  30 20 88 20 32 34 0d 1e  46 1f 20 20 20 20 f2 64  |0 . 24..F.    .d|
000061e0  6f 74 28 72 2a 9b b2 62  2c 61 2a 31 30 30 2c 72  |ot(r*..b,a*100,r|
000061f0  2a b5 b2 62 29 0d 1e 50  08 20 20 20 ed 0d 1e 5a  |*..b)..P.   ...Z|
00006200  07 20 20 ed 0d 1e 64 09  20 c9 20 37 3a 0d 1e 6e  |.  ...d. . 7:..n|
00006210  34 74 73 74 61 72 74 3d  30 3a 70 73 74 61 72 74  |4tstart=0:pstart|
00006220  3d 39 30 3a 74 69 6e 63  3d 32 3a 70 69 6e 63 3d  |=90:tinc=2:pinc=|
00006230  32 3a 74 73 69 6e 65 3d  30 3a 70 73 69 6e 65 3d  |2:tsine=0:psine=|
00006240  30 0d 1e 78 3e 73 63 61  6c 65 3d 31 3a 43 25 3d  |0..x>scale=1:C%=|
00006250  26 36 30 30 2a 34 3a f1  22 54 79 72 65 22 3b 8a  |&600*4:."Tyre";.|
00006260  31 35 29 3b 22 53 63 61  6c 65 3a 20 22 3b 73 63  |15);"Scale: ";sc|
00006270  61 6c 65 3b 8a 33 30 29  3b 22 2e 2e 2e 22 3b 0d  |ale;.30);"...";.|
00006280  1e 82 16 20 20 e3 20 61  3d 30 20 b8 20 33 34 30  |...  . a=0 . 340|
00006290  20 88 20 32 30 0d 1e 8c  17 20 20 20 e3 20 62 3d  | . 20....   . b=|
000062a0  30 20 b8 20 33 35 30 20  88 20 32 34 0d 1e 96 13  |0 . 350 . 24....|
000062b0  20 20 20 20 72 3d 37 30  2b 33 30 2a 9b b2 62 0d  |    r=70+30*..b.|
000062c0  1e a0 20 20 20 20 20 f2  64 6f 74 28 72 2a 9b b2  |..     .dot(r*..|
000062d0  61 2c 33 30 2a b5 b2 62  2c 72 2a b5 b2 61 29 0d  |a,30*..b,r*..a).|
000062e0  1e aa 08 20 20 20 ed 0d  1e b4 07 20 20 ed 0d 1e  |...   .....  ...|
000062f0  be 09 20 c9 20 38 3a 0d  1e c8 33 74 73 74 61 72  |.. . 8:...3tstar|
00006300  74 3d 30 3a 70 73 74 61  72 74 3d 30 3a 74 69 6e  |t=0:pstart=0:tin|
00006310  63 3d 31 3a 70 69 6e 63  3d 34 3a 74 73 69 6e 65  |c=1:pinc=4:tsine|
00006320  3d 31 3a 70 73 69 6e 65  3d 30 0d 1e d2 0b 73 63  |=1:psine=0....sc|
00006330  61 6c 65 3d 31 0d 1e dc  2b f1 22 44 4e 41 22 3b  |ale=1...+."DNA";|
00006340  8a 31 35 29 3b 22 53 63  61 6c 65 3a 20 22 3b 73  |.15);"Scale: ";s|
00006350  63 61 6c 65 3b 8a 33 30  29 3b 22 2e 2e 2e 22 3b  |cale;.30);"...";|
00006360  0d 1e e6 0b 43 25 3d 26  36 30 30 0d 1e f0 16 20  |....C%=&600.... |
00006370  20 e3 20 61 3d 30 20 b8  20 33 30 30 20 88 20 36  | . a=0 . 300 . 6|
00006380  30 0d 1e fa 17 20 20 20  e3 20 62 3d 30 20 b8 20  |0....   . b=0 . |
00006390  33 32 30 20 88 20 34 30  0d 1f 04 13 20 20 20 20  |320 . 40....    |
000063a0  72 3d 37 30 2b 32 35 2a  9b b2 62 0d 1f 0e 23 20  |r=70+25*..b...# |
000063b0  20 20 20 f2 64 6f 74 28  72 2a 9b b2 61 2d 33 35  |   .dot(r*..a-35|
000063c0  2c 32 35 2a b5 b2 62 2c  72 2a b5 b2 61 29 0d 1f  |,25*..b,r*..a)..|
000063d0  18 23 20 20 20 20 f2 64  6f 74 28 72 2a 9b b2 61  |.#    .dot(r*..a|
000063e0  2b 33 35 2c 72 2a b5 b2  61 2c 32 35 2a b5 b2 62  |+35,r*..a,25*..b|
000063f0  29 0d 1f 22 08 20 20 20  ed 0d 1f 2c 0c 43 25 2b  |)..".   ...,.C%+|
00006400  3d 26 36 30 30 0d 1f 36  17 e7 43 25 3d 26 36 30  |=&600..6..C%=&60|
00006410  30 2a 38 20 8c 43 25 3d  26 36 30 30 0d 1f 40 07  |0*8 .C%=&600..@.|
00006420  20 20 ed 0d 1f 4a 09 20  c9 20 39 3a 0d 1f 54 35  |  ...J. . 9:..T5|
00006430  74 73 74 61 72 74 3d 30  3a 70 73 74 61 72 74 3d  |tstart=0:pstart=|
00006440  31 32 30 3a 74 69 6e 63  3d 31 3a 70 69 6e 63 3d  |120:tinc=1:pinc=|
00006450  30 3a 74 73 69 6e 65 3d  31 3a 70 73 69 6e 65 3d  |0:tsine=1:psine=|
00006460  30 0d 1f 5e 13 73 63 61  6c 65 3d 31 3a 43 25 3d  |0..^.scale=1:C%=|
00006470  26 36 30 30 0d 1f 68 32  f1 22 4d 75 73 69 63 20  |&600..h2."Music |
00006480  47 72 69 64 22 3b 8a 31  35 29 3b 22 53 63 61 6c  |Grid";.15);"Scal|
00006490  65 3a 20 22 3b 73 63 61  6c 65 3b 8a 33 30 29 3b  |e: ";scale;.30);|
000064a0  22 2e 2e 2e 22 3b 0d 1f  72 13 73 69 7a 65 3d 31  |"...";..r.size=1|
000064b0  30 3a 43 25 3d 26 36 30  30 0d 1f 7c 17 61 64 64  |0:C%=&600..|.add|
000064c0  3d 2d 73 69 7a 65 2a 31  31 3a e3 6e 3d 31 b8 38  |=-size*11:.n=1.8|
000064d0  0d 1f 86 13 e3 61 3d 2d  31 b8 31 3a e3 62 3d 2d  |.....a=-1.1:.b=-|
000064e0  31 b8 31 0d 1f 90 21 f2  64 6f 74 28 61 2a 73 69  |1.1...!.dot(a*si|
000064f0  7a 65 2c 62 2a 73 69 7a  65 2b 61 64 64 2c 30 29  |ze,b*size+add,0)|
00006500  3a ed 3a ed 0d 1f 9a 18  61 64 64 2b 3d 73 69 7a  |:.:.....add+=siz|
00006510  65 2a 33 3a 43 25 2b 3d  26 36 30 30 0d 1f a4 19  |e*3:C%+=&600....|
00006520  e7 43 25 3d 26 36 30 30  2a 34 20 8c 43 25 3d 26  |.C%=&600*4 .C%=&|
00006530  36 30 30 2a 35 0d 1f ae  19 e7 43 25 3d 26 36 30  |600*5.....C%=&60|
00006540  30 2a 36 20 8c 43 25 3d  26 36 30 30 2a 31 0d 1f  |0*6 .C%=&600*1..|
00006550  b8 05 ed 0d 1f c2 3d 43  25 3d 26 36 30 30 2a 34  |......=C%=&600*4|
00006560  3a e3 61 3d 2d 32 b8 32  3a e3 62 3d 2d 31 33 b8  |:.a=-2.2:.b=-13.|
00006570  31 32 3a f2 64 6f 74 28  61 2a 73 69 7a 65 2c 62  |12:.dot(a*size,b|
00006580  2a 73 69 7a 65 2c 2d 73  69 7a 65 29 3a ed 3a ed  |*size,-size):.:.|
00006590  0d 1f cc 04 0d 1f d6 09  c9 20 31 30 3a 0d 1f e0  |......... 10:...|
000065a0  34 74 73 74 61 72 74 3d  30 3a 70 73 74 61 72 74  |4tstart=0:pstart|
000065b0  3d 39 30 3a 74 69 6e 63  3d 31 3a 70 69 6e 63 3d  |=90:tinc=1:pinc=|
000065c0  31 3a 74 73 69 6e 65 3d  30 3a 70 73 69 6e 65 3d  |1:tsine=0:psine=|
000065d0  31 0d 1f ea 13 73 63 61  6c 65 3d 31 3a 43 25 3d  |1....scale=1:C%=|
000065e0  26 36 30 30 0d 1f f4 33  f1 22 47 72 69 64 20 53  |&600...3."Grid S|
000065f0  70 68 65 72 65 22 3b 8a  31 35 29 3b 22 53 63 61  |phere";.15);"Sca|
00006600  6c 65 3a 20 22 3b 73 63  61 6c 65 3b 8a 33 30 29  |le: ";scale;.30)|
00006610  3b 22 2e 2e 2e 22 3b 0d  1f fe 14 73 69 7a 65 3d  |;"...";....size=|
00006620  31 30 30 3a 73 74 65 70  3d 31 30 0d 20 08 0d 43  |100:step=10. ..C|
00006630  25 3d 26 36 30 30 2a 32  0d 20 12 22 f2 64 6f 74  |%=&600*2. .".dot|
00006640  28 30 2c 30 2c 73 69 7a  65 29 3a f2 64 6f 74 28  |(0,0,size):.dot(|
00006650  30 2c 30 2c 2d 73 69 7a  65 29 0d 20 1c 22 f2 64  |0,0,-size). .".d|
00006660  6f 74 28 73 69 7a 65 2c  30 2c 30 29 3a f2 64 6f  |ot(size,0,0):.do|
00006670  74 28 2d 73 69 7a 65 2c  30 2c 30 29 0d 20 26 22  |t(-size,0,0). &"|
00006680  f2 64 6f 74 28 30 2c 73  69 7a 65 2c 30 29 3a f2  |.dot(0,size,0):.|
00006690  64 6f 74 28 30 2c 2d 73  69 7a 65 2c 30 29 0d 20  |dot(0,-size,0). |
000066a0  30 1e e3 69 25 3d 73 74  65 70 20 b8 20 31 38 30  |0..i%=step . 180|
000066b0  2d 73 74 65 70 20 88 20  73 74 65 70 0d 20 3a 23  |-step . step. :#|
000066c0  73 3d b5 28 b2 28 69 25  29 29 2a 73 69 7a 65 3a  |s=.(.(i%))*size:|
000066d0  63 3d 9b 28 b2 28 69 25  29 29 2a 73 69 7a 65 0d  |c=.(.(i%))*size.|
000066e0  20 44 26 43 25 3d 26 36  30 30 2a 31 3a f2 64 6f  | D&C%=&600*1:.do|
000066f0  74 28 73 2c 63 2c 30 29  3a f2 64 6f 74 28 2d 73  |t(s,c,0):.dot(-s|
00006700  2c 63 2c 30 29 0d 20 4e  26 43 25 3d 26 36 30 30  |,c,0). N&C%=&600|
00006710  2a 33 3a f2 64 6f 74 28  30 2c 73 2c 63 29 3a f2  |*3:.dot(0,s,c):.|
00006720  64 6f 74 28 30 2c 2d 73  2c 63 29 0d 20 58 26 43  |dot(0,-s,c). X&C|
00006730  25 3d 26 36 30 30 2a 34  3a f2 64 6f 74 28 73 2c  |%=&600*4:.dot(s,|
00006740  30 2c 63 29 3a f2 64 6f  74 28 2d 73 2c 30 2c 63  |0,c):.dot(-s,0,c|
00006750  29 0d 20 62 05 ed 0d 20  6c 09 c9 20 31 31 3a 0d  |). b... l.. 11:.|
00006760  20 76 33 74 73 74 61 72  74 3d 30 3a 70 73 74 61  | v3tstart=0:psta|
00006770  72 74 3d 30 3a 74 69 6e  63 3d 31 3a 70 69 6e 63  |rt=0:tinc=1:pinc|
00006780  3d 31 3a 74 73 69 6e 65  3d 31 3a 70 73 69 6e 65  |=1:tsine=1:psine|
00006790  3d 30 0d 20 80 15 73 63  61 6c 65 3d 31 3a 43 25  |=0. ..scale=1:C%|
000067a0  3d 26 36 30 30 2a 34 0d  20 8a 34 f1 22 57 68 6f  |=&600*4. .4."Who|
000067b0  6c 65 20 53 70 68 65 72  65 22 3b 8a 31 35 29 3b  |le Sphere";.15);|
000067c0  22 53 63 61 6c 65 3a 20  22 3b 73 63 61 6c 65 3b  |"Scale: ";scale;|
000067d0  8a 33 30 29 3b 22 2e 2e  2e 22 3b 0d 20 94 14 73  |.30);"...";. ..s|
000067e0  69 7a 65 3d 31 30 30 3a  73 74 65 70 3d 31 35 0d  |ize=100:step=15.|
000067f0  20 9e 16 e3 61 25 3d 30  20 b8 20 33 35 39 20 88  | ...a%=0 . 359 .|
00006800  20 73 74 65 70 0d 20 a8  19 73 3d b5 28 b2 28 61  | step. ..s=.(.(a|
00006810  25 29 29 3a 63 3d 9b 28  b2 28 61 25 29 29 0d 20  |%)):c=.(.(a%)). |
00006820  b2 22 e3 69 25 3d 73 74  65 70 2a 32 20 b8 20 31  |.".i%=step*2 . 1|
00006830  38 30 2d 73 74 65 70 2a  32 20 88 20 73 74 65 70  |80-step*2 . step|
00006840  0d 20 bc 23 78 3d b5 28  b2 28 69 25 29 29 2a 73  |. .#x=.(.(i%))*s|
00006850  69 7a 65 3a 79 3d 9b 28  b2 28 69 25 29 29 2a 73  |ize:y=.(.(i%))*s|
00006860  69 7a 65 0d 20 c6 21 f2  64 6f 74 28 78 2a 63 2c  |ize. .!.dot(x*c,|
00006870  79 2c 78 2a 73 29 3a 43  25 3d 43 25 20 82 20 26  |y,x*s):C%=C% . &|
00006880  33 43 30 30 0d 20 d0 07  ed 3a ed 0d 20 da 2c 43  |3C00. ...:.. .,C|
00006890  25 3d 26 36 30 30 3a e3  69 25 3d 2d 73 69 7a 65  |%=&600:.i%=-size|
000068a0  2d 73 74 65 70 20 b8 20  73 69 7a 65 2b 73 74 65  |-step . size+ste|
000068b0  70 20 88 73 74 65 70 0d  20 e4 12 f2 64 6f 74 28  |p .step. ...dot(|
000068c0  30 2c 69 25 2c 30 29 3a  ed 0d 20 ee 09 c9 20 31  |0,i%,0):.. ... 1|
000068d0  32 3a 0d 20 f8 33 74 73  74 61 72 74 3d 30 3a 70  |2:. .3tstart=0:p|
000068e0  73 74 61 72 74 3d 30 3a  74 69 6e 63 3d 31 3a 70  |start=0:tinc=1:p|
000068f0  69 6e 63 3d 31 3a 74 73  69 6e 65 3d 30 3a 70 73  |inc=1:tsine=0:ps|
00006900  69 6e 65 3d 30 0d 21 02  0d 73 63 61 6c 65 3d 31  |ine=0.!..scale=1|
00006910  2e 35 0d 21 0c 2e f1 22  52 61 6e 64 6f 6d 22 3b  |.5.!..."Random";|
00006920  8a 31 35 29 3b 22 53 63  61 6c 65 3a 20 22 3b 73  |.15);"Scale: ";s|
00006930  63 61 6c 65 3b 8a 33 30  29 3b 22 2e 2e 2e 22 3b  |cale;.30);"...";|
00006940  0d 21 16 0d e3 20 61 3d  31 b8 32 37 30 0d 21 20  |.!... a=1.270.! |
00006950  10 43 25 3d 26 36 30 30  2a b3 28 36 29 0d 21 2a  |.C%=&600*.(6).!*|
00006960  0b 43 25 3d 26 36 30 30  0d 21 34 27 f2 64 6f 74  |.C%=&600.!4'.dot|
00006970  28 b3 28 31 30 30 29 2d  35 30 2c b3 28 31 30 30  |(.(100)-50,.(100|
00006980  29 2d 35 30 2c b3 28 31  30 30 29 2d 35 30 29 0d  |)-50,.(100)-50).|
00006990  21 3e 05 ed 0d 21 48 0a  20 c9 20 31 33 3a 0d 21  |!>...!H. . 13:.!|
000069a0  52 33 74 73 74 61 72 74  3d 30 3a 70 73 74 61 72  |R3tstart=0:pstar|
000069b0  74 3d 30 3a 74 69 6e 63  3d 34 3a 70 69 6e 63 3d  |t=0:tinc=4:pinc=|
000069c0  31 3a 74 73 69 6e 65 3d  30 3a 70 73 69 6e 65 3d  |1:tsine=0:psine=|
000069d0  31 0d 21 5c 0d 73 63 61  6c 65 3d 31 2e 35 0d 21  |1.!\.scale=1.5.!|
000069e0  66 35 f1 22 43 69 72 63  75 6c 61 72 20 50 65 67  |f5."Circular Peg|
000069f0  73 22 3b 8a 31 35 29 3b  22 53 63 61 6c 65 3a 20  |s";.15);"Scale: |
00006a00  22 3b 73 63 61 6c 65 3b  8a 33 30 29 3b 22 2e 2e  |";scale;.30);"..|
00006a10  2e 22 3b 0d 21 70 0d 43  25 3d 26 36 30 30 2a 34  |.";.!p.C%=&600*4|
00006a20  0d 21 7a 18 20 20 e3 20  61 3d 2d 38 30 20 b8 20  |.!z.  . a=-80 . |
00006a30  2d 33 30 20 88 20 32 30  0d 21 84 17 20 20 20 e3  |-30 . 20.!..   .|
00006a40  20 62 3d 30 20 b8 20 33  33 30 20 88 20 33 30 0d  | b=0 . 330 . 30.|
00006a50  21 8e 12 20 20 20 20 63  6f 73 3d 33 30 2a 9b b2  |!..    cos=30*..|
00006a60  62 0d 21 98 12 20 20 20  20 73 69 6e 3d 33 30 2a  |b.!..    sin=30*|
00006a70  b5 b2 62 0d 21 a2 0d 43  25 3d 26 36 30 30 2a 31  |..b.!..C%=&600*1|
00006a80  0d 21 ac 17 20 20 20 20  f2 64 6f 74 28 61 2c 63  |.!..    .dot(a,c|
00006a90  6f 73 2c 73 69 6e 29 0d  21 b6 0d 43 25 3d 26 36  |os,sin).!..C%=&6|
00006aa0  30 30 2a 32 0d 21 c0 17  20 20 20 20 f2 64 6f 74  |00*2.!..    .dot|
00006ab0  28 63 6f 73 2c 61 2c 73  69 6e 29 0d 21 ca 0d 43  |(cos,a,sin).!..C|
00006ac0  25 3d 26 36 30 30 2a 33  0d 21 d4 17 20 20 20 20  |%=&600*3.!..    |
00006ad0  f2 64 6f 74 28 63 6f 73  2c 73 69 6e 2c 61 29 0d  |.dot(cos,sin,a).|
00006ae0  21 de 0d 43 25 3d 26 36  30 30 2a 34 0d 21 e8 18  |!..C%=&600*4.!..|
00006af0  20 20 20 20 f2 64 6f 74  28 2d 61 2c 63 6f 73 2c  |    .dot(-a,cos,|
00006b00  73 69 6e 29 0d 21 f2 0d  43 25 3d 26 36 30 30 2a  |sin).!..C%=&600*|
00006b10  35 0d 21 fc 18 20 20 20  20 f2 64 6f 74 28 63 6f  |5.!..    .dot(co|
00006b20  73 2c 2d 61 2c 73 69 6e  29 0d 22 06 0d 43 25 3d  |s,-a,sin)."..C%=|
00006b30  26 36 30 30 2a 36 0d 22  10 18 20 20 20 20 f2 64  |&600*6."..    .d|
00006b40  6f 74 28 63 6f 73 2c 73  69 6e 2c 2d 61 29 0d 22  |ot(cos,sin,-a)."|
00006b50  1a 08 20 20 20 ed 0d 22  24 07 20 20 ed 0d 22 2e  |..   .."$.  ..".|
00006b60  04 0d 22 38 09 c9 20 31  34 3a 0d 22 42 35 74 73  |.."8.. 14:."B5ts|
00006b70  74 61 72 74 3d 30 3a 70  73 74 61 72 74 3d 33 31  |tart=0:pstart=31|
00006b80  35 3a 74 69 6e 63 3d 32  3a 70 69 6e 63 3d 31 3a  |5:tinc=2:pinc=1:|
00006b90  74 73 69 6e 65 3d 30 3a  70 73 69 6e 65 3d 31 0d  |tsine=0:psine=1.|
00006ba0  22 4c 37 73 63 61 6c 65  3d 31 2e 34 3a f1 22 27  |"L7scale=1.4:."'|
00006bb0  41 72 6d 27 22 3b 8a 31  35 29 3b 22 53 63 61 6c  |Arm'";.15);"Scal|
00006bc0  65 3a 20 22 3b 73 63 61  6c 65 3b 8a 33 30 29 3b  |e: ";scale;.30);|
00006bd0  22 2e 2e 2e 22 3b 0d 22  56 0f 20 20 de 20 62 6c  |"...";."V.  . bl|
00006be0  6b 20 31 30 30 0d 22 60  11 20 20 74 65 78 74 24  |k 100."`.  text$|
00006bf0  3d 22 41 52 4d 22 0d 22  6a 1d 20 20 61 3d 36 3a  |="ARM"."j.  a=6:|
00006c00  6d 3d 2d 28 28 a9 28 74  65 78 74 24 29 2a 38 29  |m=-((.(text$)*8)|
00006c10  2f 32 29 0d 22 74 14 20  20 e3 20 62 3d 31 20 b8  |/2)."t.  . b=1 .|
00006c20  20 a9 74 65 78 74 24 0d  22 7e 17 20 20 20 62 6c  | .text$."~.   bl|
00006c30  6b 3f 30 3d 97 c1 74 65  78 74 24 2c 62 29 0d 22  |k?0=..text$,b)."|
00006c40  88 1a 20 20 20 c8 99 20  22 4f 53 5f 57 6f 72 64  |..   .. "OS_Word|
00006c50  22 2c 31 30 2c 62 6c 6b  0d 22 92 2f e3 20 63 3d  |",10,blk."./. c=|
00006c60  30 20 b8 20 36 3a 42 25  3d 62 6c 6b 3f 28 63 2b  |0 . 6:B%=blk?(c+|
00006c70  31 29 3a 4b 25 3d 42 25  20 82 20 2d 31 3a e3 20  |1):K%=B% . -1:. |
00006c80  64 3d 30 20 b8 20 37 0d  22 9c 3b 43 25 3d 26 36  |d=0 . 7.".;C%=&6|
00006c90  30 30 2a 32 3a e7 28 42  25 20 80 20 32 5e 64 29  |00*2:.(B% . 2^d)|
00006ca0  3c 3e 30 20 8c f2 64 6f  74 28 28 28 37 2d 64 29  |<>0 ..dot(((7-d)|
00006cb0  2b 6d 29 2a 61 2c 28 63  2d 34 29 2a 61 2a 32 2c  |+m)*a,(c-4)*a*2,|
00006cc0  30 29 0d 22 a6 28 e7 28  4b 25 20 80 20 32 5e 64  |0).".(.(K% . 2^d|
00006cd0  29 3c 3e 30 20 8c 43 25  3d 26 36 30 30 2a 34 20  |)<>0 .C%=&600*4 |
00006ce0  8b 43 25 3d 26 36 30 30  2a 31 0d 22 b0 22 f2 64  |.C%=&600*1.".".d|
00006cf0  6f 74 28 28 28 37 2d 64  29 2b 6d 29 2a 61 2c 28  |ot(((7-d)+m)*a,(|
00006d00  63 2d 34 29 2a 61 2a 32  2c 34 30 29 0d 22 ba 0e  |c-4)*a*2,40)."..|
00006d10  ed 3a ed 3a 6d 2b 3d 38  3a ed 0d 22 c4 04 0d 22  |.:.:m+=8:.."..."|
00006d20  ce 09 c9 20 31 35 3a 0d  22 d8 35 74 73 74 61 72  |... 15:.".5tstar|
00006d30  74 3d 30 3a 70 73 74 61  72 74 3d 32 37 30 3a 74  |t=0:pstart=270:t|
00006d40  69 6e 63 3d 31 3a 70 69  6e 63 3d 30 3a 74 73 69  |inc=1:pinc=0:tsi|
00006d50  6e 65 3d 31 3a 70 73 69  6e 65 3d 30 0d 22 e2 3a  |ne=1:psine=0.".:|
00006d60  73 63 61 6c 65 3d 31 2e  33 3a f1 22 27 48 65 6e  |scale=1.3:."'Hen|
00006d70  6c 65 79 27 22 3b 8a 31  35 29 3b 22 53 63 61 6c  |ley'";.15);"Scal|
00006d80  65 3a 20 22 3b 73 63 61  6c 65 3b 8a 33 30 29 3b  |e: ";scale;.30);|
00006d90  22 2e 2e 2e 22 3b 0d 22  ec 0f 20 20 de 20 62 6c  |"...";."..  . bl|
00006da0  6b 20 31 30 30 0d 22 f6  1a 20 20 74 65 78 74 24  |k 100."..  text$|
00006db0  3d 22 48 65 6e 6c 65 79  20 20 20 20 20 20 22 0d  |="Henley      ".|
00006dc0  23 00 1d 20 20 61 3d 37  30 3a 6d 3d 33 36 30 2f  |#..  a=70:m=360/|
00006dd0  28 a9 28 74 65 78 74 24  29 2a 38 29 0d 23 0a 0b  |(.(text$)*8).#..|
00006de0  61 6e 67 6c 65 3d 30 0d  23 14 19 20 20 e3 20 62  |angle=0.#..  . b|
00006df0  3d a9 74 65 78 74 24 20  b8 20 31 20 88 20 2d 31  |=.text$ . 1 . -1|
00006e00  0d 23 1e 17 20 20 20 62  6c 6b 3f 30 3d 97 c1 74  |.#..   blk?0=..t|
00006e10  65 78 74 24 2c 62 29 0d  23 28 1a 20 20 20 c8 99  |ext$,b).#(.   ..|
00006e20  20 22 4f 53 5f 57 6f 72  64 22 2c 31 30 2c 62 6c  | "OS_Word",10,bl|
00006e30  6b 0d 23 32 31 e3 20 63  3d 30 20 b8 20 37 3a 73  |k.#21. c=0 . 7:s|
00006e40  69 6e 3d b5 28 b2 28 61  6e 67 6c 65 29 29 2a 61  |in=.(.(angle))*a|
00006e50  3a 63 6f 73 3d 9b 28 b2  28 61 6e 67 6c 65 29 29  |:cos=.(.(angle))|
00006e60  2a 61 0d 23 3c 1a e3 20  64 3d 30 20 b8 20 37 3a  |*a.#<.. d=0 . 7:|
00006e70  42 25 3d 62 6c 6b 3f 28  64 2b 31 29 0d 23 46 0d  |B%=blk?(d+1).#F.|
00006e80  43 25 3d 26 36 30 30 2a  36 0d 23 50 6f e7 28 42  |C%=&600*6.#Po.(B|
00006e90  25 20 80 20 32 5e 63 29  3c 3e 30 20 8c f2 64 6f  |% . 2^c)<>0 ..do|
00006ea0  74 28 73 69 6e 2c 63 6f  73 2c 28 64 2d 34 29 2a  |t(sin,cos,(d-4)*|
00006eb0  31 31 29 3a 43 25 3d 26  36 30 30 2a 34 3a f2 64  |11):C%=&600*4:.d|
00006ec0  6f 74 28 b5 28 b2 28 61  6e 67 6c 65 2b 31 38 30  |ot(.(.(angle+180|
00006ed0  29 29 2a 61 2a 30 2e 38  2c 9b 28 b2 28 61 6e 67  |))*a*0.8,.(.(ang|
00006ee0  6c 65 2b 31 38 30 29 29  2a 61 2a 30 2e 38 2c 28  |le+180))*a*0.8,(|
00006ef0  64 2d 34 29 2a 31 30 29  0d 23 5a 12 ed 3a 61 6e  |d-4)*10).#Z..:an|
00006f00  67 6c 65 2d 3d 6d 3a ed  3a ed 0d 23 64 09 c9 20  |gle-=m:.:..#d.. |
00006f10  31 36 3a 0d 23 6e 35 74  73 74 61 72 74 3d 30 3a  |16:.#n5tstart=0:|
00006f20  70 73 74 61 72 74 3d 32  37 30 3a 74 69 6e 63 3d  |pstart=270:tinc=|
00006f30  32 3a 70 69 6e 63 3d 30  3a 74 73 69 6e 65 3d 30  |2:pinc=0:tsine=0|
00006f40  3a 70 73 69 6e 65 3d 30  0d 23 78 34 73 63 61 6c  |:psine=0.#x4scal|
00006f50  65 3d 31 3a f1 22 52 49  53 43 22 3b 8a 31 35 29  |e=1:."RISC";.15)|
00006f60  3b 22 53 63 61 6c 65 3a  20 22 3b 73 63 61 6c 65  |;"Scale: ";scale|
00006f70  3b 8a 33 30 29 3b 22 2e  2e 2e 22 3b 0d 23 82 0f  |;.30);"...";.#..|
00006f80  20 20 de 20 62 6c 6b 20  31 30 30 0d 23 8c 12 20  |  . blk 100.#.. |
00006f90  20 74 65 78 74 24 3d 22  72 69 73 63 22 0d 23 96  | text$="risc".#.|
00006fa0  1d 20 20 61 3d 37 30 3a  6d 3d 33 36 30 2f 28 a9  |.  a=70:m=360/(.|
00006fb0  28 74 65 78 74 24 29 2a  38 29 0d 23 a0 0b 61 6e  |(text$)*8).#..an|
00006fc0  67 6c 65 3d 30 0d 23 aa  19 20 20 e3 20 62 3d a9  |gle=0.#..  . b=.|
00006fd0  74 65 78 74 24 20 b8 20  31 20 88 20 2d 31 0d 23  |text$ . 1 . -1.#|
00006fe0  b4 17 20 20 20 62 6c 6b  3f 30 3d 97 c1 74 65 78  |..   blk?0=..tex|
00006ff0  74 24 2c 62 29 0d 23 be  1a 20 20 20 c8 99 20 22  |t$,b).#..   .. "|
00007000  4f 53 5f 57 6f 72 64 22  2c 31 30 2c 62 6c 6b 0d  |OS_Word",10,blk.|
00007010  23 c8 31 e3 20 63 3d 30  20 b8 20 37 3a 73 69 6e  |#.1. c=0 . 7:sin|
00007020  3d b5 28 b2 28 61 6e 67  6c 65 29 29 2a 61 3a 63  |=.(.(angle))*a:c|
00007030  6f 73 3d 9b 28 b2 28 61  6e 67 6c 65 29 29 2a 61  |os=.(.(angle))*a|
00007040  0d 23 d2 1a e3 20 64 3d  30 20 b8 20 37 3a 42 25  |.#... d=0 . 7:B%|
00007050  3d 62 6c 6b 3f 28 64 2b  31 29 0d 23 dc 0d 43 25  |=blk?(d+1).#..C%|
00007060  3d 26 36 30 30 2a 32 0d  23 e6 14 e7 28 42 25 20  |=&600*2.#...(B% |
00007070  80 20 32 5e 63 29 3c 3e  30 20 8c 0d 23 f0 1a f2  |. 2^c)<>0 ..#...|
00007080  64 6f 74 28 73 69 6e 2c  63 6f 73 2c 28 64 2d 34  |dot(sin,cos,(d-4|
00007090  29 2a 31 31 29 0d 23 fa  2c 43 25 3d 26 36 30 30  |)*11).#.,C%=&600|
000070a0  2a 31 3a f2 64 6f 74 28  73 69 6e 2a 30 2e 36 2c  |*1:.dot(sin*0.6,|
000070b0  63 6f 73 2a 30 2e 36 2c  28 64 2d 34 29 2a 31 30  |cos*0.6,(d-4)*10|
000070c0  29 0d 24 04 05 cc 0d 24  0e 2c 43 25 3d 26 36 30  |).$....$.,C%=&60|
000070d0  30 2a 34 3a f2 64 6f 74  28 73 69 6e 2a 30 2e 36  |0*4:.dot(sin*0.6|
000070e0  2c 63 6f 73 2a 30 2e 36  2c 28 64 2d 34 29 2a 31  |,cos*0.6,(d-4)*1|
000070f0  30 29 0d 24 18 05 cd 0d  24 22 12 ed 3a 61 6e 67  |0).$....$"..:ang|
00007100  6c 65 2d 3d 6d 3a ed 3a  ed 0d 24 2c 09 c9 20 31  |le-=m:.:..$,.. 1|
00007110  37 3a 0d 24 36 34 74 73  74 61 72 74 3d 30 3a 70  |7:.$64tstart=0:p|
00007120  73 74 61 72 74 3d 39 30  3a 74 69 6e 63 3d 32 3a  |start=90:tinc=2:|
00007130  70 69 6e 63 3d 30 3a 74  73 69 6e 65 3d 31 3a 70  |pinc=0:tsine=1:p|
00007140  73 69 6e 65 3d 30 0d 24  40 38 73 63 61 6c 65 3d  |sine=0.$@8scale=|
00007150  31 2e 34 3a f1 22 53 70  69 72 61 6c 22 3b 8a 31  |1.4:."Spiral";.1|
00007160  35 29 3b 22 53 63 61 6c  65 3a 20 22 3b 73 63 61  |5);"Scale: ";sca|
00007170  6c 65 3b 8a 33 30 29 3b  22 2e 2e 2e 22 3b 0d 24  |le;.30);"...";.$|
00007180  4a 0f 6b 3d 31 3a 61 6e  67 6c 65 3d 30 0d 24 54  |J.k=1:angle=0.$T|
00007190  31 e3 7a 61 6e 67 6c 65  3d 2d 38 30 20 b8 20 38  |1.zangle=-80 . 8|
000071a0  30 20 88 20 31 3a 43 25  3d 26 36 30 30 2a 6b 3a  |0 . 1:C%=&600*k:|
000071b0  6b 2b 3d 31 3a e7 6b 3d  37 20 8c 6b 3d 31 0d 24  |k+=1:.k=7 .k=1.$|
000071c0  5e 2e f2 64 6f 74 28 b5  28 b2 28 61 6e 67 6c 65  |^..dot(.(.(angle|
000071d0  29 29 2a 34 30 2c 9b 28  b2 28 61 6e 67 6c 65 29  |))*40,.(.(angle)|
000071e0  29 2a 34 30 2c 7a 61 6e  67 6c 65 29 0d 24 68 0f  |)*40,zangle).$h.|
000071f0  61 6e 67 6c 65 2b 3d 31  30 3a ed 0d 24 72 09 c9  |angle+=10:..$r..|
00007200  20 31 38 3a 0d 24 7c 34  74 73 74 61 72 74 3d 31  | 18:.$|4tstart=1|
00007210  30 3a 70 73 74 61 72 74  3d 30 3a 74 69 6e 63 3d  |0:pstart=0:tinc=|
00007220  31 3a 70 69 6e 63 3d 32  3a 74 73 69 6e 65 3d 30  |1:pinc=2:tsine=0|
00007230  3a 70 73 69 6e 65 3d 30  0d 24 86 37 73 63 61 6c  |:psine=0.$.7scal|
00007240  65 3d 31 2e 34 3a f1 22  48 6f 75 73 65 22 3b 8a  |e=1.4:."House";.|
00007250  31 35 29 3b 22 53 63 61  6c 65 3a 20 22 3b 73 63  |15);"Scale: ";sc|
00007260  61 6c 65 3b 8a 33 30 29  3b 22 2e 2e 2e 22 3b 0d  |ale;.30);"...";.|
00007270  24 90 0b 73 69 7a 65 3d  31 30 0d 24 9a 08 f7 2b  |$..size=10.$...+|
00007280  31 31 0d 24 a4 1a e3 79  63 25 3d 30 b8 38 3a f3  |11.$...yc%=0.8:.|
00007290  20 66 24 2c 6c 24 2c 62  24 2c 72 24 0d 24 ae 2f  | f$,l$,b$,r$.$./|
000072a0  e3 78 63 25 3d 30 b8 a9  28 66 24 29 2d 31 3a 43  |.xc%=0..(f$)-1:C|
000072b0  25 3d 28 97 28 c1 66 24  2c 78 63 25 2b 31 2c 31  |%=(.(.f$,xc%+1,1|
000072c0  29 29 2d 34 38 29 2a 26  36 30 30 0d 24 b8 2c f2  |))-48)*&600.$.,.|
000072d0  64 6f 74 28 28 78 63 25  2d 33 29 2a 73 69 7a 65  |dot((xc%-3)*size|
000072e0  2c 28 79 63 25 2d 34 29  2a 73 69 7a 65 2c 73 69  |,(yc%-4)*size,si|
000072f0  7a 65 2a 32 29 3a ed 0d  24 c2 2f e3 78 63 25 3d  |ze*2):..$./.xc%=|
00007300  30 b8 a9 28 62 24 29 2d  31 3a 43 25 3d 28 97 28  |0..(b$)-1:C%=(.(|
00007310  c1 62 24 2c 78 63 25 2b  31 2c 31 29 29 2d 34 38  |.b$,xc%+1,1))-48|
00007320  29 2a 26 36 30 30 0d 24  cc 2d f2 64 6f 74 28 28  |)*&600.$.-.dot((|
00007330  78 63 25 2d 33 29 2a 73  69 7a 65 2c 28 79 63 25  |xc%-3)*size,(yc%|
00007340  2d 34 29 2a 73 69 7a 65  2c 2d 73 69 7a 65 2a 32  |-4)*size,-size*2|
00007350  29 3a ed 0d 24 d6 2f e3  78 63 25 3d 30 b8 a9 28  |):..$./.xc%=0..(|
00007360  6c 24 29 2d 31 3a 43 25  3d 28 97 28 c1 6c 24 2c  |l$)-1:C%=(.(.l$,|
00007370  78 63 25 2b 31 2c 31 29  29 2d 34 38 29 2a 26 36  |xc%+1,1))-48)*&6|
00007380  30 30 0d 24 e0 2d f2 64  6f 74 28 2d 73 69 7a 65  |00.$.-.dot(-size|
00007390  2a 34 2c 28 79 63 25 2d  34 29 2a 73 69 7a 65 2c  |*4,(yc%-4)*size,|
000073a0  28 78 63 25 2d 32 29 2a  73 69 7a 65 29 3a ed 0d  |(xc%-2)*size):..|
000073b0  24 ea 2f e3 78 63 25 3d  30 b8 a9 28 72 24 29 2d  |$./.xc%=0..(r$)-|
000073c0  31 3a 43 25 3d 28 97 28  c1 72 24 2c 78 63 25 2b  |1:C%=(.(.r$,xc%+|
000073d0  31 2c 31 29 29 2d 34 38  29 2a 26 36 30 30 0d 24  |1,1))-48)*&600.$|
000073e0  f4 2c f2 64 6f 74 28 73  69 7a 65 2a 34 2c 28 79  |.,.dot(size*4,(y|
000073f0  63 25 2d 34 29 2a 73 69  7a 65 2c 28 78 63 25 2d  |c%-4)*size,(xc%-|
00007400  32 29 2a 73 69 7a 65 29  3a ed 0d 24 fe 05 ed 0d  |2)*size):..$....|
00007410  25 08 3b e3 6a 3d 30 b8  32 3a f3 20 62 24 3a e3  |%.;.j=0.2:. b$:.|
00007420  78 63 25 3d 30 b8 a9 28  62 24 29 2d 31 3a 43 25  |xc%=0..(b$)-1:C%|
00007430  3d 28 97 28 c1 62 24 2c  78 63 25 2b 31 2c 31 29  |=(.(.b$,xc%+1,1)|
00007440  29 2d 34 38 29 2a 26 36  30 30 0d 25 12 2c f2 64  |)-48)*&600.%.,.d|
00007450  6f 74 28 28 78 63 25 2d  33 29 2a 73 69 7a 65 2c  |ot((xc%-3)*size,|
00007460  73 69 7a 65 2a 34 2c 28  6a 2d 31 29 2a 73 69 7a  |size*4,(j-1)*siz|
00007470  65 29 3a ed 3a ed 0d 25  1c 3b e3 6a 3d 30 b8 32  |e):.:..%.;.j=0.2|
00007480  3a f3 20 62 24 3a e3 78  63 25 3d 30 b8 a9 28 62  |:. b$:.xc%=0..(b|
00007490  24 29 2d 31 3a 43 25 3d  28 97 28 c1 62 24 2c 78  |$)-1:C%=(.(.b$,x|
000074a0  63 25 2b 31 2c 31 29 29  2d 34 38 29 2a 26 36 30  |c%+1,1))-48)*&60|
000074b0  30 0d 25 26 20 e7 6a 3d  31 20 8c 61 64 64 3d 2d  |0.%& .j=1 .add=-|
000074c0  73 69 7a 65 2a 32 20 8b  61 64 64 3d 2d 73 69 7a  |size*2 .add=-siz|
000074d0  65 0d 25 30 31 f2 64 6f  74 28 28 78 63 25 2d 34  |e.%01.dot((xc%-4|
000074e0  29 2a 73 69 7a 65 2c 2d  73 69 7a 65 2a 34 2b 61  |)*size,-size*4+a|
000074f0  64 64 2c 28 6a 2d 31 29  2a 73 69 7a 65 29 3a ed  |dd,(j-1)*size):.|
00007500  3a ed 0d 25 3a 20 f2 64  6f 74 28 2d 34 2a 73 69  |:..%: .dot(-4*si|
00007510  7a 65 2c 2d 35 2a 73 69  7a 65 2c 30 2a 73 69 7a  |ze,-5*size,0*siz|
00007520  65 29 0d 25 44 1f f2 64  6f 74 28 34 2a 73 69 7a  |e).%D..dot(4*siz|
00007530  65 2c 2d 35 2a 73 69 7a  65 2c 30 2a 73 69 7a 65  |e,-5*size,0*size|
00007540  29 0d 25 4e 20 f2 64 6f  74 28 2d 33 2a 73 69 7a  |).%N .dot(-3*siz|
00007550  65 2c 2d 37 2a 73 69 7a  65 2c 30 2a 73 69 7a 65  |e,-7*size,0*size|
00007560  29 0d 25 58 21 dc 20 31  31 31 31 31 31 31 2c 31  |).%X!. 1111111,1|
00007570  31 31 31 31 2c 31 31 31  31 31 31 31 2c 31 31 31  |1111,1111111,111|
00007580  31 31 0d 25 62 21 dc 20  32 32 32 32 32 32 32 2c  |11.%b!. 2222222,|
00007590  32 32 32 32 32 2c 32 32  32 32 32 32 32 2c 32 32  |22222,2222222,22|
000075a0  32 32 32 0d 25 6c 21 dc  20 34 34 34 32 34 34 34  |222.%l!. 4442444|
000075b0  2c 32 32 32 32 32 2c 32  32 32 32 32 32 32 2c 32  |,22222,2222222,2|
000075c0  32 32 32 32 0d 25 76 21  dc 20 34 35 34 32 34 35  |2222.%v!. 454245|
000075d0  34 2c 32 32 32 32 32 2c  32 32 32 32 32 32 32 2c  |4,22222,2222222,|
000075e0  32 32 32 32 32 0d 25 80  21 dc 20 34 34 34 32 34  |22222.%.!. 44424|
000075f0  34 34 2c 32 32 32 32 32  2c 32 32 32 32 32 32 32  |44,22222,2222222|
00007600  2c 32 32 32 32 32 0d 25  8a 21 dc 20 32 32 32 32  |,22222.%.!. 2222|
00007610  32 32 32 2c 32 32 32 32  32 2c 32 32 32 32 32 32  |222,22222,222222|
00007620  32 2c 32 32 32 32 32 0d  25 94 21 dc 20 32 32 33  |2,22222.%.!. 223|
00007630  33 33 32 32 2c 32 32 32  32 32 2c 32 32 32 32 32  |3322,22222,22222|
00007640  32 32 2c 32 32 32 32 32  0d 25 9e 21 dc 20 32 32  |22,22222.%.!. 22|
00007650  33 33 33 32 32 2c 32 32  32 32 32 2c 32 32 32 32  |33322,22222,2222|
00007660  32 32 32 2c 32 32 32 32  32 0d 25 a8 21 dc 20 32  |222,22222.%.!. 2|
00007670  32 33 33 33 32 32 2c 32  32 32 32 32 2c 32 32 32  |233322,22222,222|
00007680  32 32 32 32 2c 32 32 32  32 32 0d 25 b2 1d dc 20  |2222,22222.%... |
00007690  32 32 32 32 32 32 32 2c  32 32 32 32 32 32 32 2c  |2222222,2222222,|
000076a0  32 32 32 32 32 32 32 0d  25 bc 23 dc 20 31 31 31  |2222222.%.#. 111|
000076b0  31 31 31 31 31 31 2c 31  31 31 31 31 31 31 31 31  |111111,111111111|
000076c0  2c 31 31 31 31 31 31 31  31 31 0d 25 c6 09 c9 20  |,111111111.%... |
000076d0  31 39 3a 0d 25 d0 35 74  73 74 61 72 74 3d 30 3a  |19:.%.5tstart=0:|
000076e0  70 73 74 61 72 74 3d 31  38 30 3a 74 69 6e 63 3d  |pstart=180:tinc=|
000076f0  35 3a 70 69 6e 63 3d 31  3a 74 73 69 6e 65 3d 30  |5:pinc=1:tsine=0|
00007700  3a 70 73 69 6e 65 3d 30  0d 25 da 3a 73 63 61 6c  |:psine=0.%.:scal|
00007710  65 3d 31 3a f1 22 44 75  6d 62 20 62 65 6c 6c 73  |e=1:."Dumb bells|
00007720  22 3b 8a 31 35 29 3b 22  53 63 61 6c 65 3a 20 22  |";.15);"Scale: "|
00007730  3b 73 63 61 6c 65 3b 8a  33 30 29 3b 22 2e 2e 2e  |;scale;.30);"...|
00007740  22 3b 0d 25 e4 1c 73 69  7a 65 3d 31 30 30 3a 73  |";.%..size=100:s|
00007750  74 65 70 3d 32 30 3a 43  25 3d 26 36 30 30 0d 25  |tep=20:C%=&600.%|
00007760  ee 11 7a 63 3d 2d 39 30  3a e3 6d 3d 31 b8 32 0d  |..zc=-90:.m=1.2.|
00007770  25 f8 30 e3 61 25 3d 30  20 b8 20 31 38 30 20 88  |%.0.a%=0 . 180 .|
00007780  20 73 74 65 70 3a 73 69  7a 65 3d b5 28 b2 28 61  | step:size=.(.(a|
00007790  25 29 29 2a 35 30 3a 73  74 65 70 32 3d 32 34 0d  |%))*50:step2=24.|
000077a0  26 02 16 e7 73 69 7a 65  3c 32 30 20 8c 73 74 65  |&...size<20 .ste|
000077b0  70 32 3d 34 38 0d 26 0c  17 e7 73 69 7a 65 3c 31  |p2=48.&...size<1|
000077c0  30 20 8c 73 74 65 70 32  3d 33 36 30 0d 26 16 13  |0 .step2=360.&..|
000077d0  e3 62 25 3d 30 b8 33 35  39 88 73 74 65 70 32 0d  |.b%=0.359.step2.|
000077e0  26 20 10 43 25 3d 43 25  20 82 20 26 41 30 30 0d  |& .C%=C% . &A00.|
000077f0  26 2a 19 73 3d b5 28 b2  28 62 25 29 29 3a 63 3d  |&*.s=.(.(b%)):c=|
00007800  9b 28 b2 28 62 25 29 29  0d 26 34 1a f2 64 6f 74  |.(.(b%)).&4..dot|
00007810  28 73 2a 73 69 7a 65 2c  63 2a 73 69 7a 65 2c 7a  |(s*size,c*size,z|
00007820  63 29 0d 26 3e 1a ed 3a  7a 63 2b 3d 31 30 3a ed  |c).&>..:zc+=10:.|
00007830  3a 43 25 3d 26 36 30 30  2a 34 3a ed 0d 26 48 04  |:C%=&600*4:..&H.|
00007840  0d 26 52 09 c9 20 32 30  3a 0d 26 5c 33 74 73 74  |.&R.. 20:.&\3tst|
00007850  61 72 74 3d 30 3a 70 73  74 61 72 74 3d 30 3a 74  |art=0:pstart=0:t|
00007860  69 6e 63 3d 32 3a 70 69  6e 63 3d 31 3a 74 73 69  |inc=2:pinc=1:tsi|
00007870  6e 65 3d 31 3a 70 73 69  6e 65 3d 30 0d 26 66 3a  |ne=1:psine=0.&f:|
00007880  73 63 61 6c 65 3d 31 3a  f1 22 41 78 69 73 20 42  |scale=1:."Axis B|
00007890  61 6c 6c 73 22 3b 8a 31  35 29 3b 22 53 63 61 6c  |alls";.15);"Scal|
000078a0  65 3a 20 22 3b 73 63 61  6c 65 3b 8a 33 30 29 3b  |e: ";scale;.30);|
000078b0  22 2e 2e 2e 22 3b 0d 26  70 28 43 25 3d 26 36 30  |"...";.&p(C%=&60|
000078c0  30 3a 73 69 7a 65 3d 33  30 3a 73 74 65 70 3d 33  |0:size=30:step=3|
000078d0  36 3a 6f 73 69 7a 65 3d  73 69 7a 65 2a 33 0d 26  |6:osize=size*3.&|
000078e0  7a 27 63 61 25 3d 31 3a  63 62 25 3d 32 3a 63 63  |z'ca%=1:cb%=2:cc|
000078f0  25 3d 33 3a 63 64 25 3d  34 3a 63 65 25 3d 35 3a  |%=3:cd%=4:ce%=5:|
00007900  63 66 25 3d 36 0d 26 84  16 e3 69 25 3d 30 20 b8  |cf%=6.&...i%=0 .|
00007910  20 31 38 30 20 88 20 73  74 65 70 0d 26 8e 23 78  | 180 . step.&.#x|
00007920  3d b5 28 b2 28 69 25 29  29 2a 73 69 7a 65 3a 79  |=.(.(i%))*size:y|
00007930  3d 9b 28 b2 28 69 25 29  29 2a 73 69 7a 65 0d 26  |=.(.(i%))*size.&|
00007940  98 0e 73 74 65 70 32 3d  73 74 65 70 0d 26 a2 21  |..step2=step.&.!|
00007950  e7 69 25 3c 34 30 20 84  20 69 25 3e 31 34 30 20  |.i%<40 . i%>140 |
00007960  8c 73 74 65 70 32 3d 73  74 65 70 2a 32 0d 26 ac  |.step2=step*2.&.|
00007970  1e e7 69 25 3c 31 30 20  84 20 69 25 3e 31 37 30  |..i%<10 . i%>170|
00007980  20 8c 73 74 65 70 32 3d  33 36 30 0d 26 b6 17 e3  | .step2=360.&...|
00007990  61 25 3d 30 20 b8 20 33  35 39 20 88 20 73 74 65  |a%=0 . 359 . ste|
000079a0  70 32 0d 26 c0 19 73 3d  b5 28 b2 28 61 25 29 29  |p2.&..s=.(.(a%))|
000079b0  3a 63 3d 9b 28 b2 28 61  25 29 29 0d 26 ca 2f 43  |:c=.(.(a%)).&./C|
000079c0  25 3d 63 61 25 2a 26 36  30 30 3a 63 61 25 3d 63  |%=ca%*&600:ca%=c|
000079d0  61 25 82 33 3a f2 64 6f  74 28 78 2a 63 2d 6f 73  |a%.3:.dot(x*c-os|
000079e0  69 7a 65 2c 79 2c 78 2a  73 29 0d 26 d4 2f 43 25  |ize,y,x*s).&./C%|
000079f0  3d 63 62 25 2a 26 36 30  30 3a 63 62 25 3d 63 62  |=cb%*&600:cb%=cb|
00007a00  25 82 31 3a f2 64 6f 74  28 78 2a 63 2b 6f 73 69  |%.1:.dot(x*c+osi|
00007a10  7a 65 2c 79 2c 78 2a 73  29 0d 26 de 2f 43 25 3d  |ze,y,x*s).&./C%=|
00007a20  63 63 25 2a 26 36 30 30  3a 63 63 25 3d 63 63 25  |cc%*&600:cc%=cc%|
00007a30  82 37 3a f2 64 6f 74 28  78 2a 63 2c 79 2d 6f 73  |.7:.dot(x*c,y-os|
00007a40  69 7a 65 2c 78 2a 73 29  0d 26 e8 2f 43 25 3d 63  |ize,x*s).&./C%=c|
00007a50  64 25 2a 26 36 30 30 3a  63 64 25 3d 63 64 25 82  |d%*&600:cd%=cd%.|
00007a60  31 3a f2 64 6f 74 28 78  2a 63 2c 79 2b 6f 73 69  |1:.dot(x*c,y+osi|
00007a70  7a 65 2c 78 2a 73 29 0d  26 f2 2f 43 25 3d 63 65  |ze,x*s).&./C%=ce|
00007a80  25 2a 26 36 30 30 3a 63  65 25 3d 63 65 25 82 33  |%*&600:ce%=ce%.3|
00007a90  3a f2 64 6f 74 28 78 2a  63 2c 79 2c 78 2a 73 2d  |:.dot(x*c,y,x*s-|
00007aa0  6f 73 69 7a 65 29 0d 26  fc 2f 43 25 3d 63 66 25  |osize).&./C%=cf%|
00007ab0  2a 26 36 30 30 3a 63 66  25 3d 63 66 25 82 37 3a  |*&600:cf%=cf%.7:|
00007ac0  f2 64 6f 74 28 78 2a 63  2c 79 2c 78 2a 73 2b 6f  |.dot(x*c,y,x*s+o|
00007ad0  73 69 7a 65 29 0d 27 06  1d 43 25 3d 26 36 30 30  |size).'..C%=&600|
00007ae0  2a 34 3a f2 64 6f 74 28  78 2a 63 2c 79 2c 78 2a  |*4:.dot(x*c,y,x*|
00007af0  73 29 0d 27 10 07 ed 3a  ed 0d 27 1a 04 0d 27 24  |s).'...:..'...'$|
00007b00  09 c9 20 32 31 3a 0d 27  2e 34 74 73 74 61 72 74  |.. 21:.'.4tstart|
00007b10  3d 31 30 3a 70 73 74 61  72 74 3d 30 3a 74 69 6e  |=10:pstart=0:tin|
00007b20  63 3d 31 3a 70 69 6e 63  3d 32 3a 74 73 69 6e 65  |c=1:pinc=2:tsine|
00007b30  3d 30 3a 70 73 69 6e 65  3d 30 0d 27 38 39 73 63  |=0:psine=0.'89sc|
00007b40  61 6c 65 3d 31 2e 34 3a  f1 22 57 61 72 6e 69 6e  |ale=1.4:."Warnin|
00007b50  67 22 3b 8a 31 35 29 3b  22 53 63 61 6c 65 3a 20  |g";.15);"Scale: |
00007b60  22 3b 73 63 61 6c 65 3b  8a 33 30 29 3b 22 2e 2e  |";scale;.30);"..|
00007b70  2e 22 3b 0d 27 42 0b 73  69 7a 65 3d 31 30 0d 27  |.";.'B.size=10.'|
00007b80  4c 07 f7 2b 34 0d 27 56  3e e3 79 63 25 3d 30 b8  |L..+4.'V>.yc%=0.|
00007b90  31 34 3a f3 20 66 24 3a  e3 78 63 25 3d 30 b8 a9  |14:. f$:.xc%=0..|
00007ba0  28 66 24 29 2d 31 3a 43  25 3d 28 97 28 c1 66 24  |(f$)-1:C%=(.(.f$|
00007bb0  2c 78 63 25 2b 31 2c 31  29 29 2d 34 38 29 2a 26  |,xc%+1,1))-48)*&|
00007bc0  36 30 30 0d 27 60 2d e7  43 25 3c 3e 30 20 8c f2  |600.'`-.C%<>0 ..|
00007bd0  64 6f 74 28 28 78 63 25  2d 37 29 2a 73 69 7a 65  |dot((xc%-7)*size|
00007be0  2c 28 79 63 25 2d 37 29  2a 73 69 7a 65 2c 30 29  |,(yc%-7)*size,0)|
00007bf0  0d 27 6a 07 ed 3a ed 0d  27 74 15 dc 20 30 30 30  |.'j..:..'t.. 000|
00007c00  30 30 30 30 31 30 30 30  30 30 30 30 0d 27 7e 15  |000010000000.'~.|
00007c10  dc 20 30 30 30 30 30 30  30 31 30 30 30 30 30 30  |. 00000001000000|
00007c20  30 0d 27 88 15 dc 20 30  30 30 30 30 30 31 31 31  |0.'... 000000111|
00007c30  30 30 30 30 30 30 0d 27  92 15 dc 20 30 30 30 30  |000000.'... 0000|
00007c40  30 30 31 32 31 30 30 30  30 30 30 0d 27 9c 15 dc  |00121000000.'...|
00007c50  20 30 30 30 30 30 31 31  32 31 31 30 30 30 30 30  | 000001121100000|
00007c60  0d 27 a6 15 dc 20 30 30  30 30 30 31 32 34 32 31  |.'... 0000012421|
00007c70  30 30 30 30 30 0d 27 b0  15 dc 20 30 30 30 30 31  |00000.'... 00001|
00007c80  31 34 34 34 31 31 30 30  30 30 0d 27 ba 15 dc 20  |1444110000.'... |
00007c90  30 30 30 30 31 32 34 34  34 32 31 30 30 30 30 0d  |000012444210000.|
00007ca0  27 c4 15 dc 20 30 30 30  31 31 32 34 34 34 32 31  |'... 00011244421|
00007cb0  31 30 30 30 0d 27 ce 15  dc 20 30 30 30 31 32 32  |1000.'... 000122|
00007cc0  32 34 32 32 32 31 30 30  30 0d 27 d8 15 dc 20 30  |242221000.'... 0|
00007cd0  30 31 31 32 32 32 32 32  32 32 31 31 30 30 0d 27  |01122222221100.'|
00007ce0  e2 15 dc 20 30 30 31 32  32 32 32 34 32 32 32 32  |... 001222242222|
00007cf0  31 30 30 0d 27 ec 15 dc  20 30 31 31 32 32 32 34  |100.'... 0112224|
00007d00  34 34 32 32 32 31 31 30  0d 27 f6 15 dc 20 30 31  |44222110.'... 01|
00007d10  32 32 32 32 32 34 32 32  32 32 32 31 30 0d 28 00  |2222242222210.(.|
00007d20  15 dc 20 31 31 31 31 31  31 31 31 31 31 31 31 31  |.. 1111111111111|
00007d30  31 31 0d 28 0a 09 c9 20  32 32 3a 0d 28 14 36 74  |11.(... 22:.(.6t|
00007d40  73 74 61 72 74 3d 31 30  3a 70 73 74 61 72 74 3d  |start=10:pstart=|
00007d50  32 37 30 3a 74 69 6e 63  3d 32 3a 70 69 6e 63 3d  |270:tinc=2:pinc=|
00007d60  30 3a 74 73 69 6e 65 3d  30 3a 70 73 69 6e 65 3d  |0:tsine=0:psine=|
00007d70  30 0d 28 1e 36 73 63 61  6c 65 3d 31 2e 34 3a f1  |0.(.6scale=1.4:.|
00007d80  22 46 61 63 65 22 3b 8a  31 35 29 3b 22 53 63 61  |"Face";.15);"Sca|
00007d90  6c 65 3a 20 22 3b 73 63  61 6c 65 3b 8a 33 30 29  |le: ";scale;.30)|
00007da0  3b 22 2e 2e 2e 22 3b 0d  28 28 13 73 69 7a 65 3d  |;"...";.((.size=|
00007db0  31 30 3a 62 65 6e 64 3d  33 30 0d 28 32 07 f7 2b  |10:bend=30.(2..+|
00007dc0  36 0d 28 3c 0b 61 6e 67  6c 65 3d 30 0d 28 46 69  |6.(<.angle=0.(Fi|
00007dd0  e3 79 63 25 3d 30 b8 31  34 3a 61 6e 67 6c 65 32  |.yc%=0.14:angle2|
00007de0  3d 30 3a f3 20 66 24 3a  e3 78 63 25 3d 30 b8 a9  |=0:. f$:.xc%=0..|
00007df0  28 66 24 29 2d 31 3a 43  25 3d 28 97 28 c1 66 24  |(f$)-1:C%=(.(.f$|
00007e00  2c 78 63 25 2b 31 2c 31  29 29 2d 34 38 29 2a 26  |,xc%+1,1))-48)*&|
00007e10  36 30 30 3a 73 79 63 3d  b5 28 b2 28 61 6e 67 6c  |600:syc=.(.(angl|
00007e20  65 32 29 29 2a 62 65 6e  64 2a b5 28 b2 28 61 6e  |e2))*bend*.(.(an|
00007e30  67 6c 65 29 29 0d 28 50  17 e7 43 25 3d 26 36 30  |gle)).(P..C%=&60|
00007e40  30 20 8c 73 79 63 2b 3d  73 69 7a 65 0d 28 5a 1b  |0 .syc+=size.(Z.|
00007e50  e7 43 25 3d 26 36 30 30  2a 35 20 8c 73 79 63 2b  |.C%=&600*5 .syc+|
00007e60  3d 73 69 7a 65 2f 32 0d  28 64 1f e7 43 25 3d 26  |=size/2.(d..C%=&|
00007e70  36 30 30 2a 34 20 8c 73  79 63 2b 3d 28 73 69 7a  |600*4 .syc+=(siz|
00007e80  65 2f 31 2e 35 29 0d 28  6e 2f e7 43 25 3c 3e 30  |e/1.5).(n/.C%<>0|
00007e90  20 8c f2 64 6f 74 28 28  78 63 25 2d 37 29 2a 73  | ..dot((xc%-7)*s|
00007ea0  69 7a 65 2c 73 79 63 2c  28 79 63 25 2d 37 29 2a  |ize,syc,(yc%-7)*|
00007eb0  73 69 7a 65 29 0d 28 78  0e 61 6e 67 6c 65 32 2b  |size).(x.angle2+|
00007ec0  3d 31 32 0d 28 82 11 ed  3a 61 6e 67 6c 65 2b 3d  |=12.(...:angle+=|
00007ed0  31 32 3a ed 0d 28 8c 15  dc 20 30 30 30 32 32 32  |12:..(... 000222|
00007ee0  32 32 32 32 32 32 30 30  30 0d 28 96 15 dc 20 30  |222222000.(... 0|
00007ef0  30 32 32 36 36 36 36 36  36 36 32 32 32 30 0d 28  |02266666662220.(|
00007f00  a0 15 dc 20 30 32 32 36  36 36 36 36 36 36 36 36  |... 022666666666|
00007f10  36 32 30 0d 28 aa 15 dc  20 32 32 36 36 35 35 36  |620.(... 2266556|
00007f20  36 36 35 35 36 36 32 32  0d 28 b4 15 dc 20 32 36  |66556622.(... 26|
00007f30  36 35 35 34 35 36 35 34  35 35 36 36 32 0d 28 be  |6554565455662.(.|
00007f40  15 dc 20 32 36 36 36 35  35 36 36 36 35 35 36 36  |.. 2666556665566|
00007f50  36 32 0d 28 c8 15 dc 20  36 36 36 36 36 36 31 31  |62.(... 66666611|
00007f60  31 36 36 36 36 36 36 0d  28 d2 15 dc 20 36 36 36  |1666666.(... 666|
00007f70  36 36 31 31 31 31 31 36  36 36 36 36 0d 28 dc 15  |661111166666.(..|
00007f80  dc 20 36 36 36 36 36 36  31 31 31 36 36 36 36 36  |. 66666611166666|
00007f90  36 0d 28 e6 15 dc 20 30  36 36 34 34 36 36 36 36  |6.(... 066446666|
00007fa0  36 36 34 36 36 30 0d 28  f0 15 dc 20 30 36 36 36  |664660.(... 0666|
00007fb0  34 36 36 36 36 36 34 34  36 36 30 0d 28 fa 15 dc  |46666644660.(...|
00007fc0  20 30 30 36 36 34 34 34  35 35 34 34 36 36 30 30  | 006644455446600|
00007fd0  0d 29 04 15 dc 20 30 30  36 36 36 36 34 34 34 34  |.)... 0066664444|
00007fe0  36 36 36 30 30 0d 29 0e  15 dc 20 30 30 30 30 36  |66600.)... 00006|
00007ff0  36 36 36 36 36 36 30 30  30 30 0d 29 18 15 dc 20  |6666660000.)... |
00008000  30 30 30 30 30 30 36 36  36 30 30 30 30 30 30 0d  |000000666000000.|
00008010  29 22 04 0d 29 2c 09 c9  20 32 33 3a 0d 29 36 36  |)"..),.. 23:.)66|
00008020  74 73 74 61 72 74 3d 31  30 3a 70 73 74 61 72 74  |tstart=10:pstart|
00008030  3d 32 37 30 3a 74 69 6e  63 3d 32 3a 70 69 6e 63  |=270:tinc=2:pinc|
00008040  3d 31 3a 74 73 69 6e 65  3d 30 3a 70 73 69 6e 65  |=1:tsine=0:psine|
00008050  3d 30 0d 29 40 36 73 63  61 6c 65 3d 31 2e 34 3a  |=0.)@6scale=1.4:|
00008060  f1 22 46 6c 61 67 22 3b  8a 31 35 29 3b 22 53 63  |."Flag";.15);"Sc|
00008070  61 6c 65 3a 20 22 3b 73  63 61 6c 65 3b 8a 33 30  |ale: ";scale;.30|
00008080  29 3b 22 2e 2e 2e 22 3b  0d 29 4a 13 73 69 7a 65  |);"...";.)J.size|
00008090  3d 31 30 3a 62 65 6e 64  3d 34 30 0d 29 54 13 61  |=10:bend=40.)T.a|
000080a0  6e 67 6c 65 3d 30 3a 43  25 3d 26 36 30 30 0d 29  |ngle=0:C%=&600.)|
000080b0  5e 25 e3 79 63 25 3d 30  b8 31 34 3a 61 6e 67 6c  |^%.yc%=0.14:angl|
000080c0  65 32 3d 30 3a e3 78 63  25 3d 30 b8 a9 28 66 24  |e2=0:.xc%=0..(f$|
000080d0  29 2d 31 0d 29 68 25 73  79 63 3d b5 28 b2 28 61  |)-1.)h%syc=.(.(a|
000080e0  6e 67 6c 65 32 29 29 2a  62 65 6e 64 2a b5 28 b2  |ngle2))*bend*.(.|
000080f0  28 61 6e 67 6c 65 29 29  0d 29 72 27 f2 64 6f 74  |(angle)).)r'.dot|
00008100  28 28 78 63 25 2d 37 29  2a 73 69 7a 65 2c 73 79  |((xc%-7)*size,sy|
00008110  63 2c 28 79 63 25 2d 37  29 2a 73 69 7a 65 29 0d  |c,(yc%-7)*size).|
00008120  29 7c 0e 61 6e 67 6c 65  32 2b 3d 31 32 0d 29 86  |)|.angle2+=12.).|
00008130  22 ed 3a 43 25 2b 3d 26  36 30 30 3a e7 43 25 3e  |".:C%+=&600:.C%>|
00008140  26 36 30 30 2a 33 20 8c  43 25 3d 26 36 30 30 0d  |&600*3 .C%=&600.|
00008150  29 90 0f 61 6e 67 6c 65  2b 3d 32 34 3a ed 0d 29  |)..angle+=24:..)|
00008160  9a 04 0d 29 a4 09 c9 20  32 34 3a 0d 29 ae 36 74  |...)... 24:.).6t|
00008170  73 74 61 72 74 3d 31 30  3a 70 73 74 61 72 74 3d  |start=10:pstart=|
00008180  32 37 30 3a 74 69 6e 63  3d 31 3a 70 69 6e 63 3d  |270:tinc=1:pinc=|
00008190  32 3a 74 73 69 6e 65 3d  31 3a 70 73 69 6e 65 3d  |2:tsine=1:psine=|
000081a0  30 0d 29 b8 3d 73 63 61  6c 65 3d 31 3a f1 22 43  |0.).=scale=1:."C|
000081b0  69 72 63 6c 65 20 43 69  72 63 6c 65 22 3b 8a 31  |ircle Circle";.1|
000081c0  35 29 3b 22 53 63 61 6c  65 3a 20 22 3b 73 63 61  |5);"Scale: ";sca|
000081d0  6c 65 3b 8a 33 30 29 3b  22 2e 2e 2e 22 3b 0d 29  |le;.30);"...";.)|
000081e0  c2 30 73 74 65 70 3d 33  36 3a 73 69 7a 65 3d 31  |.0step=36:size=1|
000081f0  31 30 3a 73 74 65 70 32  3d 32 34 3a 73 69 7a 65  |10:step2=24:size|
00008200  32 3d 33 30 3a 43 25 3d  26 36 30 30 2a 32 0d 29  |2=30:C%=&600*2.)|
00008210  cc 13 e3 69 25 3d 30 b8  33 35 39 20 88 73 74 65  |...i%=0.359 .ste|
00008220  70 0d 29 d6 25 61 78 3d  b5 28 b2 28 69 25 29 29  |p.).%ax=.(.(i%))|
00008230  2a 73 69 7a 65 3a 61 79  3d 9b 28 b2 28 69 25 29  |*size:ay=.(.(i%)|
00008240  29 2a 73 69 7a 65 0d 29  e0 1a 63 3d 2d 9b 28 b2  |)*size.)..c=-.(.|
00008250  28 69 25 29 29 3a 73 3d  b5 28 b2 28 69 25 29 29  |(i%)):s=.(.(i%))|
00008260  0d 29 ea 14 e3 6a 25 3d  30 b8 33 35 39 20 88 73  |.)...j%=0.359 .s|
00008270  74 65 70 32 0d 29 f4 25  76 3d b5 28 b2 28 6a 25  |tep2.).%v=.(.(j%|
00008280  29 29 2a 73 69 7a 65 32  3a 77 3d 9b 28 b2 28 6a  |))*size2:w=.(.(j|
00008290  25 29 29 2a 73 69 7a 65  32 0d 29 fe 0f 78 3d 76  |%))*size2.)..x=v|
000082a0  3a 79 3d 30 3a 7a 3d 77  0d 2a 08 25 f2 64 6f 74  |:y=0:z=w.*.%.dot|
000082b0  28 28 78 2a 63 2d 79 2a  73 29 2b 61 78 2c 28 78  |((x*c-y*s)+ax,(x|
000082c0  2a 73 2b 79 2a 63 29 2b  61 79 2c 7a 29 0d 2a 12  |*s+y*c)+ay,z).*.|
000082d0  24 ed 3a 43 25 2b 3d 26  36 30 30 3a e7 43 25 3d  |$.:C%+=&600:.C%=|
000082e0  26 36 30 30 2a 37 20 8c  43 25 3d 26 36 30 30 2a  |&600*7 .C%=&600*|
000082f0  32 0d 2a 1c 19 ed 3a 43  25 3d 26 36 30 30 3a f2  |2.*...:C%=&600:.|
00008300  64 6f 74 28 30 2c 30 2c  30 29 0d 2a 26 04 0d 2a  |dot(0,0,0).*&..*|
00008310  30 09 c9 20 32 35 3a 0d  2a 3a 36 74 73 74 61 72  |0.. 25:.*:6tstar|
00008320  74 3d 31 30 3a 70 73 74  61 72 74 3d 32 37 30 3a  |t=10:pstart=270:|
00008330  74 69 6e 63 3d 31 3a 70  69 6e 63 3d 32 3a 74 73  |tinc=1:pinc=2:ts|
00008340  69 6e 65 3d 31 3a 70 73  69 6e 65 3d 30 0d 2a 44  |ine=1:psine=0.*D|
00008350  3e 73 63 61 6c 65 3d 31  3a f1 22 52 61 6e 64 6f  |>scale=1:."Rando|
00008360  6d 20 43 69 72 63 6c 65  73 22 3b 8a 31 35 29 3b  |m Circles";.15);|
00008370  22 53 63 61 6c 65 3a 20  22 3b 73 63 61 6c 65 3b  |"Scale: ";scale;|
00008380  8a 33 30 29 3b 22 2e 2e  2e 22 3b 0d 2a 4e 0b e3  |.30);"...";.*N..|
00008390  49 3d 31 b8 32 30 0d 2a  58 30 73 74 65 70 3d 33  |I=1.20.*X0step=3|
000083a0  36 3a 73 69 7a 65 3d 31  31 30 3a 73 74 65 70 32  |6:size=110:step2|
000083b0  3d 32 34 3a 73 69 7a 65  32 3d 33 30 3a 43 25 3d  |=24:size2=30:C%=|
000083c0  26 36 30 30 2a 32 0d 2a  62 0d 69 25 3d b3 28 33  |&600*2.*b.i%=.(3|
000083d0  36 30 29 0d 2a 6c 2a 61  78 3d b3 28 31 35 30 29  |60).*l*ax=.(150)|
000083e0  2d 37 35 3a 61 79 3d b3  28 31 35 30 29 2d 37 35  |-75:ay=.(150)-75|
000083f0  3a 61 7a 3d b3 28 31 35  30 29 2d 37 35 0d 2a 76  |:az=.(150)-75.*v|
00008400  1a 63 3d 2d 9b 28 b2 28  69 25 29 29 3a 73 3d b5  |.c=-.(.(i%)):s=.|
00008410  28 b2 28 69 25 29 29 0d  2a 80 32 78 73 69 7a 65  |(.(i%)).*.2xsize|
00008420  3d b3 28 33 30 29 2b 31  30 3a 79 73 69 7a 65 3d  |=.(30)+10:ysize=|
00008430  b3 28 33 30 29 2b 31 30  3a e3 6a 25 3d 30 b8 33  |.(30)+10:.j%=0.3|
00008440  35 39 20 88 73 74 65 70  32 0d 2a 8a 25 76 3d b5  |59 .step2.*.%v=.|
00008450  28 b2 28 6a 25 29 29 2a  78 73 69 7a 65 3a 77 3d  |(.(j%))*xsize:w=|
00008460  9b 28 b2 28 6a 25 29 29  2a 79 73 69 7a 65 0d 2a  |.(.(j%))*ysize.*|
00008470  94 0f 78 3d 76 3a 79 3d  30 3a 7a 3d 77 0d 2a 9e  |..x=v:y=0:z=w.*.|
00008480  28 f2 64 6f 74 28 28 78  2a 63 2d 79 2a 73 29 2b  |(.dot((x*c-y*s)+|
00008490  61 78 2c 28 78 2a 73 2b  79 2a 63 29 2b 61 79 2c  |ax,(x*s+y*c)+ay,|
000084a0  7a 2b 61 7a 29 0d 2a a8  24 ed 3a 43 25 2b 3d 26  |z+az).*.$.:C%+=&|
000084b0  36 30 30 3a e7 43 25 3d  26 36 30 30 2a 37 20 8c  |600:.C%=&600*7 .|
000084c0  43 25 3d 26 36 30 30 2a  32 0d 2a b2 05 ed 0d 2a  |C%=&600*2.*....*|
000084d0  bc 04 0d 2a c6 09 c9 20  32 36 3a 0d 2a d0 36 74  |...*... 26:.*.6t|
000084e0  73 74 61 72 74 3d 31 30  3a 70 73 74 61 72 74 3d  |start=10:pstart=|
000084f0  32 37 30 3a 74 69 6e 63  3d 31 3a 70 69 6e 63 3d  |270:tinc=1:pinc=|
00008500  32 3a 74 73 69 6e 65 3d  31 3a 70 73 69 6e 65 3d  |2:tsine=1:psine=|
00008510  30 0d 2a da 3a 73 63 61  6c 65 3d 31 3a f1 22 43  |0.*.:scale=1:."C|
00008520  69 72 63 6c 65 20 42 6f  78 22 3b 8a 31 35 29 3b  |ircle Box";.15);|
00008530  22 53 63 61 6c 65 3a 20  22 3b 73 63 61 6c 65 3b  |"Scale: ";scale;|
00008540  8a 33 30 29 3b 22 2e 2e  2e 22 3b 0d 2a e4 22 73  |.30);"...";.*."s|
00008550  74 65 70 3d 33 30 3a 72  3d 35 30 3a 73 69 7a 65  |tep=30:r=50:size|
00008560  3d 36 30 3a 43 25 3d 26  36 30 30 2a 32 0d 2a ee  |=60:C%=&600*2.*.|
00008570  2c e3 69 25 3d 30 b8 33  35 39 88 73 74 65 70 3a  |,.i%=0.359.step:|
00008580  63 3d 9b 28 b2 28 69 25  29 29 2a 72 3a 73 3d b5  |c=.(.(i%))*r:s=.|
00008590  28 b2 28 69 25 29 29 2a  72 0d 2a f8 0d 43 25 3d  |(.(i%))*r.*..C%=|
000085a0  26 36 30 30 2a 34 0d 2b  02 26 f2 64 6f 74 28 2d  |&600*4.+.&.dot(-|
000085b0  72 2b 63 2c 2d 72 2b 73  2c 72 29 3a f2 64 6f 74  |r+c,-r+s,r):.dot|
000085c0  28 72 2b 63 2c 2d 72 2b  73 2c 72 29 0d 2b 0c 24  |(r+c,-r+s,r).+.$|
000085d0  f2 64 6f 74 28 2d 72 2b  63 2c 72 2b 73 2c 72 29  |.dot(-r+c,r+s,r)|
000085e0  3a f2 64 6f 74 28 72 2b  63 2c 72 2b 73 2c 72 29  |:.dot(r+c,r+s,r)|
000085f0  0d 2b 16 28 f2 64 6f 74  28 2d 72 2b 63 2c 2d 72  |.+.(.dot(-r+c,-r|
00008600  2b 73 2c 2d 72 29 3a f2  64 6f 74 28 72 2b 63 2c  |+s,-r):.dot(r+c,|
00008610  2d 72 2b 73 2c 2d 72 29  0d 2b 20 26 f2 64 6f 74  |-r+s,-r).+ &.dot|
00008620  28 2d 72 2b 63 2c 72 2b  73 2c 2d 72 29 3a f2 64  |(-r+c,r+s,-r):.d|
00008630  6f 74 28 72 2b 63 2c 72  2b 73 2c 2d 72 29 0d 2b  |ot(r+c,r+s,-r).+|
00008640  2a 0d 43 25 3d 26 36 30  30 2a 35 0d 2b 34 26 f2  |*.C%=&600*5.+4&.|
00008650  64 6f 74 28 72 2c 2d 72  2b 63 2c 2d 72 2b 73 29  |dot(r,-r+c,-r+s)|
00008660  3a f2 64 6f 74 28 72 2c  72 2b 63 2c 2d 72 2b 73  |:.dot(r,r+c,-r+s|
00008670  29 0d 2b 3e 24 f2 64 6f  74 28 72 2c 2d 72 2b 63  |).+>$.dot(r,-r+c|
00008680  2c 72 2b 73 29 3a f2 64  6f 74 28 72 2c 72 2b 63  |,r+s):.dot(r,r+c|
00008690  2c 72 2b 73 29 0d 2b 48  28 f2 64 6f 74 28 2d 72  |,r+s).+H(.dot(-r|
000086a0  2c 2d 72 2b 63 2c 2d 72  2b 73 29 3a f2 64 6f 74  |,-r+c,-r+s):.dot|
000086b0  28 2d 72 2c 72 2b 63 2c  2d 72 2b 73 29 0d 2b 52  |(-r,r+c,-r+s).+R|
000086c0  26 f2 64 6f 74 28 2d 72  2c 2d 72 2b 63 2c 72 2b  |&.dot(-r,-r+c,r+|
000086d0  73 29 3a f2 64 6f 74 28  2d 72 2c 72 2b 63 2c 72  |s):.dot(-r,r+c,r|
000086e0  2b 73 29 0d 2b 5c 0d 43  25 3d 26 36 30 30 2a 32  |+s).+\.C%=&600*2|
000086f0  0d 2b 66 26 f2 64 6f 74  28 2d 72 2b 63 2c 72 2c  |.+f&.dot(-r+c,r,|
00008700  2d 72 2b 73 29 3a f2 64  6f 74 28 72 2b 63 2c 72  |-r+s):.dot(r+c,r|
00008710  2c 2d 72 2b 73 29 0d 2b  70 24 f2 64 6f 74 28 2d  |,-r+s).+p$.dot(-|
00008720  72 2b 63 2c 72 2c 72 2b  73 29 3a f2 64 6f 74 28  |r+c,r,r+s):.dot(|
00008730  72 2b 63 2c 72 2c 72 2b  73 29 0d 2b 7a 28 f2 64  |r+c,r,r+s).+z(.d|
00008740  6f 74 28 2d 72 2b 63 2c  2d 72 2c 2d 72 2b 73 29  |ot(-r+c,-r,-r+s)|
00008750  3a f2 64 6f 74 28 72 2b  63 2c 2d 72 2c 2d 72 2b  |:.dot(r+c,-r,-r+|
00008760  73 29 0d 2b 84 26 f2 64  6f 74 28 2d 72 2b 63 2c  |s).+.&.dot(-r+c,|
00008770  2d 72 2c 72 2b 73 29 3a  f2 64 6f 74 28 72 2b 63  |-r,r+s):.dot(r+c|
00008780  2c 2d 72 2c 72 2b 73 29  0d 2b 8e 05 ed 0d 2b 98  |,-r,r+s).+....+.|
00008790  09 c9 20 32 37 3a 0d 2b  a2 35 74 73 74 61 72 74  |.. 27:.+.5tstart|
000087a0  3d 30 3a 70 73 74 61 72  74 3d 32 37 30 3a 74 69  |=0:pstart=270:ti|
000087b0  6e 63 3d 31 3a 70 69 6e  63 3d 30 3a 74 73 69 6e  |nc=1:pinc=0:tsin|
000087c0  65 3d 30 3a 70 73 69 6e  65 3d 30 0d 2b ac 39 73  |e=0:psine=0.+.9s|
000087d0  63 61 6c 65 3d 31 3a f1  22 4c 69 73 73 61 6a 6f  |cale=1:."Lissajo|
000087e0  75 73 22 3b 8a 31 35 29  3b 22 53 63 61 6c 65 3a  |us";.15);"Scale:|
000087f0  20 22 3b 73 63 61 6c 65  3b 8a 33 30 29 3b 22 2e  | ";scale;.30);".|
00008800  2e 2e 22 3b 0d 2b b6 22  61 6e 67 6c 65 3d 30 3a  |..";.+."angle=0:|
00008810  73 69 7a 65 3d 31 30 30  3a 61 6d 70 3d 38 30 3a  |size=100:amp=80:|
00008820  73 74 65 70 3d 34 0d 2b  c0 1c 43 25 3d 26 36 30  |step=4.+..C%=&60|
00008830  30 2a 35 3a e3 69 25 3d  30 b8 33 35 39 88 73 74  |0*5:.i%=0.359.st|
00008840  65 70 0d 2b ca 35 f2 64  6f 74 28 b5 28 b2 28 69  |ep.+.5.dot(.(.(i|
00008850  25 29 29 2a 73 69 7a 65  2c 9b 28 b2 28 69 25 29  |%))*size,.(.(i%)|
00008860  29 2a 73 69 7a 65 2c b5  28 b2 28 61 6e 67 6c 65  |)*size,.(.(angle|
00008870  29 29 2a 61 6d 70 29 0d  2b d4 0d 61 6e 67 6c 65  |))*amp).+..angle|
00008880  2b 3d 31 32 0d 2b de 05  ed 0d 2b e8 04 0d 2b f2  |+=12.+....+...+.|
00008890  09 c9 20 32 38 3a 0d 2b  fc 35 74 73 74 61 72 74  |.. 28:.+.5tstart|
000088a0  3d 30 3a 70 73 74 61 72  74 3d 32 37 30 3a 74 69  |=0:pstart=270:ti|
000088b0  6e 63 3d 32 3a 70 69 6e  63 3d 32 3a 74 73 69 6e  |nc=2:pinc=2:tsin|
000088c0  65 3d 31 3a 70 73 69 6e  65 3d 30 0d 2c 06 3c 73  |e=1:psine=0.,.<s|
000088d0  63 61 6c 65 3d 31 3a f1  22 42 61 72 62 65 72 73  |cale=1:."Barbers|
000088e0  20 50 6f 6c 65 22 3b 8a  31 35 29 3b 22 53 63 61  | Pole";.15);"Sca|
000088f0  6c 65 3a 20 22 3b 73 63  61 6c 65 3b 8a 33 30 29  |le: ";scale;.30)|
00008900  3b 22 2e 2e 2e 22 3b 0d  2c 10 2e 72 3d 35 30 3a  |;"...";.,..r=50:|
00008910  73 69 7a 65 3d 36 30 3a  73 74 65 70 3d 31 35 3a  |size=60:step=15:|
00008920  43 25 3d 26 36 30 30 3a  6c 3d 34 35 2f 73 74 65  |C%=&600:l=45/ste|
00008930  70 3a 6d 3d 30 0d 2c 1a  1b e3 69 25 3d 2d 73 69  |p:m=0.,...i%=-si|
00008940  7a 65 20 b8 20 73 69 7a  65 20 88 20 73 74 65 70  |ze . size . step|
00008950  0d 2c 24 13 e3 6a 25 3d  30 b8 33 35 39 88 20 73  |.,$..j%=0.359. s|
00008960  74 65 70 0d 2c 2e 1e 6d  2b 3d 31 3a e7 6d 3d 6c  |tep.,..m+=1:.m=l|
00008970  20 8c 43 25 3d 43 25 20  82 26 41 30 30 3a 6d 3d  | .C%=C% .&A00:m=|
00008980  30 0d 2c 38 22 f2 64 6f  74 28 b5 28 b2 28 6a 25  |0.,8".dot(.(.(j%|
00008990  29 29 2a 72 2c 9b 28 b2  28 6a 25 29 29 2a 72 2c  |))*r,.(.(j%))*r,|
000089a0  69 25 29 0d 2c 42 20 ed  3a 6d 2b 3d 31 3a e7 6d  |i%).,B .:m+=1:.m|
000089b0  3d 6c 20 8c 43 25 3d 43  25 20 82 26 41 30 30 3a  |=l .C%=C% .&A00:|
000089c0  6d 3d 30 0d 2c 4c 0f ed  3a 43 25 3d 26 36 30 30  |m=0.,L..:C%=&600|
000089d0  2a 35 0d 2c 56 14 e3 69  25 3d 30 b8 33 35 39 88  |*5.,V..i%=0.359.|
000089e0  73 74 65 70 2a 32 0d 2c  60 13 e3 72 3d 33 30 20  |step*2.,`..r=30 |
000089f0  b8 20 35 30 20 88 20 31  30 0d 2c 6a 29 f2 64 6f  |. 50 . 10.,j).do|
00008a00  74 28 b5 28 b2 28 69 25  29 29 2a 72 2c 9b 28 b2  |t(.(.(i%))*r,.(.|
00008a10  28 69 25 29 29 2a 72 2c  73 69 7a 65 2b 73 74 65  |(i%))*r,size+ste|
00008a20  70 29 0d 2c 74 2a f2 64  6f 74 28 b5 28 b2 28 69  |p).,t*.dot(.(.(i|
00008a30  25 29 29 2a 72 2c 9b 28  b2 28 69 25 29 29 2a 72  |%))*r,.(.(i%))*r|
00008a40  2c 2d 73 69 7a 65 2d 73  74 65 70 29 0d 2c 7e 07  |,-size-step).,~.|
00008a50  ed 3a ed 0d 2c 88 04 0d  2c 92 09 c9 20 32 39 3a  |.:..,...,... 29:|
00008a60  0d 2c 9c 33 74 73 74 61  72 74 3d 30 3a 70 73 74  |.,.3tstart=0:pst|
00008a70  61 72 74 3d 30 3a 74 69  6e 63 3d 32 3a 70 69 6e  |art=0:tinc=2:pin|
00008a80  63 3d 33 3a 74 73 69 6e  65 3d 30 3a 70 73 69 6e  |c=3:tsine=0:psin|
00008a90  65 3d 30 0d 2c a6 34 73  63 61 6c 65 3d 31 3a f1  |e=0.,.4scale=1:.|
00008aa0  22 44 69 63 65 22 3b 8a  31 35 29 3b 22 53 63 61  |"Dice";.15);"Sca|
00008ab0  6c 65 3a 20 22 3b 73 63  61 6c 65 3b 8a 33 30 29  |le: ";scale;.30)|
00008ac0  3b 22 2e 2e 2e 22 3b 0d  2c b0 0b 73 69 7a 65 3d  |;"...";.,..size=|
00008ad0  31 35 0d 2c ba 08 f7 2b  31 35 0d 2c c4 1a e3 79  |15.,...+15.,...y|
00008ae0  63 25 3d 30 b8 36 3a f3  20 66 24 2c 6c 24 2c 62  |c%=0.6:. f$,l$,b|
00008af0  24 2c 72 24 0d 2c ce 2f  e3 78 63 25 3d 30 b8 a9  |$,r$.,./.xc%=0..|
00008b00  28 66 24 29 2d 31 3a 43  25 3d 28 97 28 c1 66 24  |(f$)-1:C%=(.(.f$|
00008b10  2c 78 63 25 2b 31 2c 31  29 29 2d 34 38 29 2a 26  |,xc%+1,1))-48)*&|
00008b20  36 30 30 0d 2c d8 32 f2  64 6f 74 28 28 78 63 25  |600.,.2.dot((xc%|
00008b30  2d 33 29 2a 73 69 7a 65  2b 32 30 2c 28 79 63 25  |-3)*size+20,(yc%|
00008b40  2d 33 29 2a 73 69 7a 65  2b 32 30 2c 73 69 7a 65  |-3)*size+20,size|
00008b50  2a 33 29 3a ed 0d 2c e2  2f e3 78 63 25 3d 30 b8  |*3):..,./.xc%=0.|
00008b60  a9 28 62 24 29 2d 31 3a  43 25 3d 28 97 28 c1 62  |.(b$)-1:C%=(.(.b|
00008b70  24 2c 78 63 25 2b 31 2c  31 29 29 2d 34 38 29 2a  |$,xc%+1,1))-48)*|
00008b80  26 36 30 30 0d 2c ec 33  f2 64 6f 74 28 28 78 63  |&600.,.3.dot((xc|
00008b90  25 2d 33 29 2a 73 69 7a  65 2b 32 30 2c 28 79 63  |%-3)*size+20,(yc|
00008ba0  25 2d 33 29 2a 73 69 7a  65 2b 32 30 2c 2d 73 69  |%-3)*size+20,-si|
00008bb0  7a 65 2a 33 29 3a ed 0d  2c f6 2f e3 78 63 25 3d  |ze*3):..,./.xc%=|
00008bc0  30 b8 a9 28 6c 24 29 2d  31 3a 43 25 3d 28 97 28  |0..(l$)-1:C%=(.(|
00008bd0  c1 6c 24 2c 78 63 25 2b  31 2c 31 29 29 2d 34 38  |.l$,xc%+1,1))-48|
00008be0  29 2a 26 36 30 30 0d 2d  00 33 f2 64 6f 74 28 2d  |)*&600.-.3.dot(-|
00008bf0  73 69 7a 65 2a 33 2b 32  30 2c 28 79 63 25 2d 33  |size*3+20,(yc%-3|
00008c00  29 2a 73 69 7a 65 2b 32  30 2c 28 78 63 25 2d 32  |)*size+20,(xc%-2|
00008c10  29 2a 73 69 7a 65 29 3a  ed 0d 2d 0a 2f e3 78 63  |)*size):..-./.xc|
00008c20  25 3d 30 b8 a9 28 72 24  29 2d 31 3a 43 25 3d 28  |%=0..(r$)-1:C%=(|
00008c30  97 28 c1 72 24 2c 78 63  25 2b 31 2c 31 29 29 2d  |.(.r$,xc%+1,1))-|
00008c40  34 38 29 2a 26 36 30 30  0d 2d 14 32 f2 64 6f 74  |48)*&600.-.2.dot|
00008c50  28 73 69 7a 65 2a 33 2b  32 30 2c 28 79 63 25 2d  |(size*3+20,(yc%-|
00008c60  33 29 2a 73 69 7a 65 2b  32 30 2c 28 78 63 25 2d  |3)*size+20,(xc%-|
00008c70  32 29 2a 73 69 7a 65 29  3a ed 0d 2d 1e 05 ed 0d  |2)*size):..-....|
00008c80  2d 28 3e e3 6a 3d 30 b8  34 3a f3 20 74 24 2c 62  |-(>.j=0.4:. t$,b|
00008c90  24 3a e3 78 63 25 3d 30  b8 a9 28 74 24 29 2d 31  |$:.xc%=0..(t$)-1|
00008ca0  3a 43 25 3d 28 97 28 c1  74 24 2c 78 63 25 2b 31  |:C%=(.(.t$,xc%+1|
00008cb0  2c 31 29 29 2d 34 38 29  2a 26 36 30 30 0d 2d 32  |,1))-48)*&600.-2|
00008cc0  30 f2 64 6f 74 28 28 78  63 25 2d 32 29 2a 73 69  |0.dot((xc%-2)*si|
00008cd0  7a 65 2b 32 30 2c 73 69  7a 65 2a 33 2b 32 30 2c  |ze+20,size*3+20,|
00008ce0  28 6a 2d 32 29 2a 73 69  7a 65 29 3a ed 0d 2d 3c  |(j-2)*size):..-<|
00008cf0  2f e3 78 63 25 3d 30 b8  a9 28 62 24 29 2d 31 3a  |/.xc%=0..(b$)-1:|
00008d00  43 25 3d 28 97 28 c1 62  24 2c 78 63 25 2b 31 2c  |C%=(.(.b$,xc%+1,|
00008d10  31 29 29 2d 34 38 29 2a  26 36 30 30 0d 2d 46 33  |1))-48)*&600.-F3|
00008d20  f2 64 6f 74 28 28 78 63  25 2d 32 29 2a 73 69 7a  |.dot((xc%-2)*siz|
00008d30  65 2b 32 30 2c 2d 73 69  7a 65 2a 33 2b 32 30 2c  |e+20,-size*3+20,|
00008d40  28 6a 2d 32 29 2a 73 69  7a 65 29 3a ed 3a ed 0d  |(j-2)*size):.:..|
00008d50  2d 50 21 dc 20 34 34 34  34 34 34 34 2c 34 34 34  |-P!. 4444444,444|
00008d60  34 34 2c 34 34 34 34 34  34 34 2c 34 34 34 34 34  |44,4444444,44444|
00008d70  0d 2d 5a 21 dc 20 34 36  34 34 34 36 34 2c 33 34  |.-Z!. 4644464,34|
00008d80  34 34 34 2c 34 35 34 34  34 35 34 2c 34 34 34 34  |444,4544454,4444|
00008d90  34 0d 2d 64 21 dc 20 34  34 34 34 34 34 34 2c 34  |4.-d!. 4444444,4|
00008da0  34 34 34 34 2c 34 34 34  34 34 34 34 2c 34 34 34  |4444,4444444,444|
00008db0  34 34 0d 2d 6e 21 dc 20  34 36 34 34 34 36 34 2c  |44.-n!. 4644464,|
00008dc0  34 34 33 34 34 2c 34 34  34 35 34 34 34 2c 34 34  |44344,4445444,44|
00008dd0  31 34 34 0d 2d 78 21 dc  20 34 34 34 34 34 34 34  |144.-x!. 4444444|
00008de0  2c 34 34 34 34 34 2c 34  34 34 34 34 34 34 2c 34  |,44444,4444444,4|
00008df0  34 34 34 34 0d 2d 82 21  dc 20 34 36 34 34 34 36  |4444.-.!. 464446|
00008e00  34 2c 34 34 34 34 33 2c  34 35 34 34 34 35 34 2c  |4,44443,4544454,|
00008e10  34 34 34 34 34 0d 2d 8c  21 dc 20 34 34 34 34 34  |44444.-.!. 44444|
00008e20  34 34 2c 34 34 34 34 34  2c 34 34 34 34 34 34 34  |44,44444,4444444|
00008e30  2c 34 34 34 34 34 0d 2d  96 04 0d 2d a0 11 dc 20  |,44444.-...-... |
00008e40  34 32 34 34 34 2c 32 34  34 34 32 0d 2d aa 11 dc  |42444,24442.-...|
00008e50  20 34 34 34 34 34 2c 34  34 34 34 34 0d 2d b4 11  | 44444,44444.-..|
00008e60  dc 20 34 34 34 34 34 2c  34 34 34 34 34 0d 2d be  |. 44444,44444.-.|
00008e70  11 dc 20 34 34 34 34 34  2c 34 34 34 34 34 0d 2d  |.. 44444,44444.-|
00008e80  c8 11 dc 20 34 34 34 32  34 2c 32 34 34 34 32 0d  |... 44424,24442.|
00008e90  2d d2 04 0d 2d dc 09 c9  20 33 30 3a 0d 2d e6 33  |-...-... 30:.-.3|
00008ea0  74 73 74 61 72 74 3d 30  3a 70 73 74 61 72 74 3d  |tstart=0:pstart=|
00008eb0  30 3a 74 69 6e 63 3d 32  3a 70 69 6e 63 3d 31 3a  |0:tinc=2:pinc=1:|
00008ec0  74 73 69 6e 65 3d 31 3a  70 73 69 6e 65 3d 31 0d  |tsine=1:psine=1.|
00008ed0  2d f0 37 73 63 61 6c 65  3d 31 3a f1 22 53 71 75  |-.7scale=1:."Squ|
00008ee0  61 72 65 73 22 3b 8a 31  35 29 3b 22 53 63 61 6c  |ares";.15);"Scal|
00008ef0  65 3a 20 22 3b 73 63 61  6c 65 3b 8a 33 30 29 3b  |e: ";scale;.30);|
00008f00  22 2e 2e 2e 22 3b 0d 2d  fa 39 73 69 7a 65 3d 38  |"...";.-.9size=8|
00008f10  3a 7a 78 3d 73 69 7a 65  2a 38 3a 43 25 3d 26 36  |:zx=size*8:C%=&6|
00008f20  30 30 3a e3 69 25 3d 33  20 b8 20 37 20 88 20 32  |00:.i%=3 . 7 . 2|
00008f30  3a 43 25 3d 26 36 30 30  2a 28 69 25 2d 31 29 0d  |:C%=&600*(i%-1).|
00008f40  2e 04 2e e3 61 25 3d 2d  69 25 2b 31 20 b8 20 69  |....a%=-i%+1 . i|
00008f50  25 2d 31 20 88 20 32 3a  e3 20 62 25 3d 2d 69 25  |%-1 . 2:. b%=-i%|
00008f60  2b 31 20 b8 20 69 25 2d  31 20 88 20 32 0d 2e 0e  |+1 . i%-1 . 2...|
00008f70  1c f2 64 6f 74 28 61 25  2a 73 69 7a 65 2c 62 25  |..dot(a%*size,b%|
00008f80  2a 73 69 7a 65 2c 7a 78  29 0d 2e 18 1d f2 64 6f  |*size,zx).....do|
00008f90  74 28 61 25 2a 73 69 7a  65 2c 62 25 2a 73 69 7a  |t(a%*size,b%*siz|
00008fa0  65 2c 2d 7a 78 29 0d 2e  22 1c ed 3a ed 3a 7a 78  |e,-zx).."..:.:zx|
00008fb0  2d 3d 73 69 7a 65 2a 33  3a ed 3a 43 25 3d 26 36  |-=size*3:.:C%=&6|
00008fc0  30 30 0d 2e 2c 28 f2 64  6f 74 28 30 2c 30 2c 73  |00..,(.dot(0,0,s|
00008fd0  69 7a 65 2a 31 31 29 3a  f2 64 6f 74 28 30 2c 30  |ize*11):.dot(0,0|
00008fe0  2c 2d 73 69 7a 65 2a 31  31 29 0d 2e 36 04 0d 2e  |,-size*11)..6...|
00008ff0  40 09 c9 20 33 31 3a 0d  2e 4a 33 74 73 74 61 72  |@.. 31:..J3tstar|
00009000  74 3d 30 3a 70 73 74 61  72 74 3d 30 3a 74 69 6e  |t=0:pstart=0:tin|
00009010  63 3d 32 3a 70 69 6e 63  3d 31 3a 74 73 69 6e 65  |c=2:pinc=1:tsine|
00009020  3d 31 3a 70 73 69 6e 65  3d 31 0d 2e 54 37 73 63  |=1:psine=1..T7sc|
00009030  61 6c 65 3d 31 3a f1 22  5a 69 67 20 5a 61 67 22  |ale=1:."Zig Zag"|
00009040  3b 8a 31 35 29 3b 22 53  63 61 6c 65 3a 20 22 3b  |;.15);"Scale: ";|
00009050  73 63 61 6c 65 3b 8a 33  30 29 3b 22 2e 2e 2e 22  |scale;.30);"..."|
00009060  3b 0d 2e 5e 41 7a 73 74  65 70 3d 31 30 3a 7a 78  |;..^Azstep=10:zx|
00009070  3d 31 30 30 3a 6d 3d 30  3a 69 6e 63 3d 31 30 3a  |=100:m=0:inc=10:|
00009080  e3 69 25 3d 31 b8 34 30  3a 43 25 3d 26 36 30 30  |.i%=1.40:C%=&600|
00009090  2a b3 28 36 29 3a e3 6a  25 3d 30 b8 33 35 39 88  |*.(6):.j%=0.359.|
000090a0  39 30 0d 2e 68 2a f2 64  6f 74 28 b5 28 b2 28 6a  |90..h*.dot(.(.(j|
000090b0  25 29 29 2a 6d 2a 31 2e  33 2c 9b 28 b2 28 6a 25  |%))*m*1.3,.(.(j%|
000090c0  29 29 2a 6d 2a 31 2e 33  2c 7a 78 29 0d 2e 72 21  |))*m*1.3,zx)..r!|
000090d0  ed 3a 6d 2b 3d 69 6e 63  3a e7 6d 3d 35 30 20 84  |.:m+=inc:.m=50 .|
000090e0  6d 3d 30 20 8c 69 6e 63  3d 2d 69 6e 63 0d 2e 7c  |m=0 .inc=-inc..||
000090f0  0b 7a 78 2d 3d 35 3a ed  0d 2e 86 05 cb 0d 2e 90  |.zx-=5:.........|
00009100  09 3d 64 6f 74 73 0d 2e  9a 05 3a 0d 2e a4 11 dd  |.=dots....:.....|
00009110  20 f2 64 6f 74 28 78 2c  79 2c 7a 29 0d 2e ae 10  | .dot(x,y,z)....|
00009120  4d 25 21 30 3d 78 2a 73  63 61 6c 65 0d 2e b8 10  |M%!0=x*scale....|
00009130  4d 25 21 34 3d 79 2a 73  63 61 6c 65 0d 2e c2 10  |M%!4=y*scale....|
00009140  4d 25 21 38 3d 7a 2a 73  63 61 6c 65 0d 2e cc 0c  |M%!8=z*scale....|
00009150  4d 25 21 31 32 3d 43 25  0d 2e d6 0a 4d 25 2b 3d  |M%!12=C%....M%+=|
00009160  31 36 0d 2e e0 0b 64 6f  74 73 2b 3d 31 0d 2e ea  |16....dots+=1...|
00009170  05 e1 0d ff                                       |....|
00009174