Home » Archimedes archive » Acorn User » AU 1995-03.adf » !StarInfo_StarInfo » Turnbull/FracLand

Turnbull/FracLand

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 1995-03.adf » !StarInfo_StarInfo
Filename: Turnbull/FracLand
Read OK:
File size: 89ED bytes
Load address: 0000
Exec address: 0000
File contents
   10MODE13
   20PROCconstants
   30DIMspace%spacelen%:P%=space%
   40code%=P%:P%+=codelen%
   50pos%=P%:P%+=32*levels%
   60base%=P%:P%+=32*bsize%*bsize%
   70dist%=P%:P%+=depth%*16
   80col%=P%:P%+=8*32*64
   90shape%=P%:P%+=shapelen%
  100points%=P%:P%+=8*nopoints%
  110map%=P%:P%+=32*msize%*msize%*levels%
  120land%=P%:P%+=8*lsize%*lsize%*vis%
  130hor%=P%:P%+=winc%*width%
  140IFP%>space%+spacelen%THENERROR255,"Space isn't big enough"
  150PRINTP%-space%;" bytes used"
  160PROCassemble
  170PROCsetupshape
  180PROCsetupcol
  190PROCsetupdist
  200FORT%=0TOwidth%-1:hor%!(T%*winc%)=height%:NEXT
  210PROCsetupbase:!refresh%=TRUE
  220REPEAT
  230PROCmap
  240PROCfly
  250UNTIL0
  260END
  270:
  280:
  290DEFPROCconstants
  300spacelen%=&200000
  310codelen%=&8000
  320AC%=12:VC%=9:SC%=8:DC%=12
  330ML%=2:loff%=1<<ML%-1
  340MS%=5:msize%=1<<MS%
  350LS%=MS%+ML%:lsize%=1<<LS%
  360BS%=5:bsize%=1<<BS%
  370BC%=AC%+9:LC%=AC%-2:MC%=LC%+ML%:EC%=32-LS%
  380levels%=BC%-MC%+1:vis%=(AC%+14)-LS%-LC%+1
  390WW%=6:width%=20<<WW%-4
  400HH%=7:height%=16<<HH%-4
  410dsteps%=10:winc%=256*8
  420depth%=2*dsteps%+vis%*dsteps%
  430IFdepth%*8+4>winc%THENERROR255,"winc% is not big enough"
  440shapelen%=&4000
  450nopoints%=64
  460SCW%=8:scwidth%=20<<SCW%-4:sclinc%=scwidth%
  470SCH%=8:scheight%=16<<SCH%-4
  480SKW%=SCW%-2:skwidth%=20<<SKW%-4
  490SKH%=SCH%-2:skheight%=16<<SKH%-4
  500ENDPROC
  510:
  520DEFPROCsetupcol
  530RESTORE+0
  540U%=col%
  550READA$:WHILEA$<>"*":L%=LEN(A$)/2-1
  560FORT%=0TO31:B%=8*L%*T%/32
  570!U%=EVAL("&"+MID$(A$,1+2*(B%+5>>3),2)+MID$(A$,1+2*(B%+1>>3),2)+MID$(A$,1+2*(B%+4>>3),2)+MID$(A$,1+2*(B%+0>>3),2))
  580U%!4=EVAL("&"+MID$(A$,1+2*(B%+3>>3),2)+MID$(A$,1+2*(B%+7>>3),2)+MID$(A$,1+2*(B%+2>>3),2)+MID$(A$,1+2*(B%+6>>3),2))
  590U%+=8:NEXT
  600READA$:ENDWHILE
  610ENDPROC
  620:
  630DATA"2BA2A3CCCD"
  640DATA"FBFAF9F8CF","CFCECDCCA3","A3A2A1A00B","0B0A090800"
  650DATA"2122234C4D","4D4E4FF0F1"
  660DATA"2020212223","234C4D4E4F"
  670DATA"2425262758","58595A5BF4"
  680DATA"2223444546","464778797A"
  690DATA"032C2D2E2F","2FD0D1D2D3"
  700DATA"2FD0D1D2D3","D3FCFDFEFF"
  710DATA"02032C2D2E","2E2FD0D1D2"
  720DATA"060738393A","3A3BD4D5D6"
  730DATA"*"
  740:
  750DEFPROCsetupdist
  760maxdist%=(lsize%/2-8)/SQR(1^2+(5/8)^2)
  770V%=dist%:FORT%=1TOdsteps%*2
  780!V%=0:V%!4=T%/dsteps%/2*maxdist%/2*(1<<SC%)
  790V%!8=(1<<20)/V%!4:V%!12=V%!4<<LC%-SC%
  800V%+=16:NEXT
  810FORU%=0TOvis%-1:FORT%=1TOdsteps%
  820!V%=U%:V%!4=maxdist%*2^(T%/dsteps%-1)*(1<<SC%)
  830V%!8=(1<<20)/V%!4:V%!12=V%!4<<(LC%+U%)-SC%
  840V%+=16:NEXT,
  850ENDPROC
  860:
  870DEFPROCsetupbase
  880U%=base%:FORY%=0TObsize%-1:FORX%=0TObsize%-1
  890!U%=0
  900U%!4=0
  910U%!8=(112/((X%-15)*(X%-16)+(Y%-15)*(Y%-16)+64)-0.5)*(1<<SC%)+RND(1<<SC%-1)-(1<<SC%-2)
  920U%!12=RND(1<<SC%-2)
  930U%!16=0:U%!20=0:U%!24=0:U%!28=0
  940U%+=32:NEXT,
  950ENDPROC
  960:
  970DEFPROCsetupshape
  980DIMP$(nopoints%)
  990P%=shape%
 1000PROCnewshape:REM Brick
 1010PROCpoint("SWD",-15,-20,-10)
 1020PROCpoint("SED",15,-20,-10)
 1030PROCpoint("NWD",-15,20,-10)
 1040PROCpoint("NED",15,20,-10)
 1050PROCpoint("SWU",-15,-20,10)
 1060PROCpoint("SEU",15,-20,10)
 1070PROCpoint("NWU",-15,20,10)
 1080PROCpoint("NEU",15,20,10)
 1090PROCface("SWD","SWU","SED",19):PROCface("SED","SWU","SEU",19)
 1100PROCface("SED","SEU","NED",19):PROCface("NED","SEU","NEU",19)
 1110PROCface("NED","NEU","NWD",19):PROCface("NWD","NEU","NWU",19)
 1120PROCface("NWD","NWU","SWD",19):PROCface("SWD","NWU","SWU",19)
 1130PROCface("SWU","NWU","SEU",19):PROCface("SEU","NWU","NEU",19)
 1140PROCface("NWD","SWD","NED",19):PROCface("NED","SWD","SED",19)
 1150PROCendshape
 1160IFP%>shape%+shapelen%THENERROR255,"Shape isn't big enough"
 1170ENDPROC
 1180:
 1190DEFPROCnewshape
 1200pflag%=FALSE
 1210nopoints%=0:nofaces%=0
 1220pstart%=P%:P%+=4
 1230ENDPROC
 1240:
 1250DEFPROCpoint(N$,X,Y,Z)
 1260IFpflag%THENERROR255,"Points must come before faces"
 1270!P%=X*(1<<AC%):P%!4=Y*(1<<AC%):P%!8=Z*(1<<AC%):P%+=12
 1280P$(nopoints%)=N$:nopoints%+=1
 1290ENDPROC
 1300:
 1310DEFPROCface(P1$,P2$,P3$,C%)
 1320IFNOTpflag%THENpflag%=TRUE:fstart%=P%:P%+=4
 1330P1%=FNpointno(P1$):P2%=FNpointno(P2$):P3%=FNpointno(P3$)
 1340A1%=pstart%+4+P1%*12:A2%=pstart%+4+P2%*12:A3%=pstart%+4+P3%*12
 1350NX=(A3%!4-A1%!4)*(A2%!8-A1%!8)-(A3%!8-A1%!8)*(A2%!4-A1%!4)
 1360NY=(A3%!8-A1%!8)*(!A2%-!A1%)-(!A3%-!A1%)*(A2%!8-A1%!8)
 1370NZ=(!A3%-!A1%)*(A2%!4-A1%!4)-(A3%!4-A1%!4)*(!A2%-!A1%)
 1380F=(1<<VC%)/SQR(NX*NX+NY*NY+NZ*NZ)/SQR(3)
 1390!P%=P1%:P%!4=P2%:P%!8=P3%
 1400P%!12=NX*F:P%!16=NY*F:P%!20=NZ*F
 1410P%!24=C%:P%+=28
 1420nofaces%+=1
 1430ENDPROC
 1440:
 1450DEFFNpointno(N$)
 1460IFnopoints%=0THEN=-1
 1470H%=-1:FORT%=0TOnopoints%-1
 1480IFP$(T%)=N$THENH%=T%:T%=nopoints%-1
 1490NEXT:=H%
 1500:
 1510DEFPROCendshape
 1520!pstart%=nopoints%:!fstart%=nofaces%
 1530ENDPROC
 1540:
 1550DEFPROCmap
 1560CLS
 1570view%!12=0:view%!16=0:view%!20=0:view%!24=0
 1580!display%=vis%-1:MOUSETO640,512
 1590REPEAT:MOUSEX%,Y%,Z%:MOUSETO640,512
 1600PP%=pos%+32*!display%
 1610!view%+=(X%-640)*(1<<PP%!24-4):view%!4+=(Y%-512)*(1<<PP%!24-4)
 1620IFINKEY(-104)AND!display%<vis%-1THEN!display%+=1:REPEAT:UNTILNOTINKEY(-104)
 1630IFINKEY(-103)AND!display%>0THEN!display%-=1:REPEAT:UNTILNOTINKEY(-103)
 1640IFINKEY(-74)THEN!refresh%=TRUE
 1650CALLlandgen%
 1660CALLtestland%
 1670UNTILINKEY(-99)
 1680REPEAT:UNTILNOTINKEY(-99)
 1690LX%=(!view%>>LC%)ANDlsize%-1:LY%=(view%!4>>LC%)ANDlsize%-1
 1700view%!8=(land%!(8*(LX%+lsize%*LY%))<<LC%-SC%)+(1<<AC%+4)
 1710ENDPROC
 1720:
 1730DEFPROCfly
 1740B%=0
 1750A%=0:V%=0:NT%=TIME
 1760REPEAT:MOUSEX%,Y%,Z%
 1770FT%=TIME-NT%:NT%+=FT%:IFFT%>100THENFT%=100
 1780B%=B%+FT%*10AND&FFFF:A=2*PI*B%/&10000
 1790testpos%!0=COS(A)*(1<<VC%):testpos%!4=SIN(A)*(1<<VC%)
 1800testpos%!12=-testpos%!4:testpos%!16=testpos%!0
 1810IFZ%=4THEN
 1820view%!0+=view%!12<<AC%+5-VC%
 1830view%!4+=view%!16<<AC%+5-VC%
 1840view%!8+=view%!20<<AC%+5-VC%
 1850ENDIF
 1860A%=A%+(FT%*(640-X%)>>9-7)AND&FFFF:A=2*PI*A%/&10000
 1870view%!12=COS(A)*(1<<VC%):view%!16=SIN(A)*(1<<VC%)
 1880view%!20=(512-Y%)>>9-(VC%-1):view%!24=(640-X%)>>9-(VC%-1)
 1890IFZ%=4THEN
 1891V%=0
 1900view%!0-=view%!12<<AC%+5-VC%
 1910view%!4-=view%!16<<AC%+5-VC%
 1920view%!8-=view%!20<<AC%+5-VC%
 1930ENDIF
 1940IFZ%=2THENV%-=(1<<AC%-10)*FT%:IFV%<0THENV%=0
 1950IFZ%=1THENV%+=(1<<AC%-10)*FT%:IFV%>(1<<AC%)THENV%=(1<<AC%)
 1960view%!0+=V%*FT%*view%!12>>VC%
 1970view%!4+=V%*FT%*view%!16>>VC%
 1980view%!8+=V%*FT%*view%!20>>VC%
 1990CALLlandgen%
 2000CALLdrawframe%
 2010UNTILINKEY(-99)
 2020REPEAT:UNTILNOTINKEY(-99)
 2030ENDPROC
 2040:
 2050DEFPROCtestcol
 2060SYS"OS_ReadVduVariables",vduvars%,scraddr%
 2070V%=col%:FORT%=0TO31:S%=!scraddr%+(T%<<3):FORU%=0TO63
 2080!S%=!V%:S%!4=!V%
 2090S%!sclinc%=V%!4:S%!(sclinc%+4)=V%!4
 2100S%!(sclinc%*2)=!V%:S%!(sclinc%*2+4)=!V%
 2110S%!(sclinc%*3)=V%!4:S%!(sclinc%*3+4)=V%!4
 2120S%+=sclinc%*4:V%+=8:NEXT,
 2130ENDPROC
 2140:
 2150DEFPROCtesthor
 2160FORT%=0TOwidth%-1:X%=T%*16:V%=hor%+T%*winc%
 2170FORU%=0TOdepth%
 2180Y%=959-2*!V%:LINEX%,Y%,X%+15,Y%
 2190V%+=8:NEXT,
 2200ENDPROC
 2210:
 2220DEFPROCtestpoints
 2230U%=points%:FORT%=1TO8
 2240POINT!U%>>(SCW%+DC%)-10,U%!4>>(SCH%+DC%)-10
 2250U%+=8:NEXT
 2260ENDPROC
 2270:
 2280DEFPROCtestmatrix
 2290CALLdrawshape%
 2300PROCplotblob(0,0,0,1<<AC%)
 2310PROCplotblob(4<<AC%,0,0,1<<AC%-1)
 2320PROCplotblob(0,4<<AC%,0,1<<AC%-1)
 2330PROCplotblob(0,0,4<<AC%,1<<AC%-1)
 2340ENDPROC
 2350:
 2360DEFPROCplotblob(X%,Y%,Z%,R%)
 2370PY%=(X%*matrix%!4+Y%*matrix%!16+Z%*matrix%!28>>VC%)+matrix%!40
 2380IFPY%<=0THENENDPROC
 2390PX%=(X%*matrix%!0+Y%*matrix%!12+Z%*matrix%!24>>VC%)+matrix%!36
 2400PZ%=(X%*matrix%!8+Y%*matrix%!20+Z%*matrix%!32>>VC%)+matrix%!44
 2410F=1024/PY%:CIRCLEFILL640+F*PX%,512+F*PZ%,F*R%
 2420ENDPROC
 2430:
 2440DEFFNadr(R%,A%,I%)
 2450IF(P%AND3)<>0THENPRINT"Code isn't word aligned!":END
 2460IF(T%AND2)=0THENP%+=I%<<2:=T%
 2470LOCALN%,O%,H%,U%:H%=A%-(P%+8):N%=0:O%=15
 2480FORU%=1TOI%:IFH%=0THEN
 2490[OPT T%:MOV R%,O%:]
 2500ELSEWHILE(H%AND3)=0:H%=H%>>2:N%+=2:ENDWHILE
 2510IF(H%AND256)=0THEN
 2520[OPT T%:ADD R%,O%,#(H%AND255)<<N%:]:H%-=H%AND255
 2530ELSE[OPT T%:SUB R%,O%,#(256-H%AND255)<<N%:]:H%+=256-H%AND255
 2540ENDIF
 2550ENDIF:O%=R%:NEXT
 2560IFH%<>0THENPRINT"Could not ADR to ";A%;" in ";I%;" instructions (R%=";R%;")":END
 2570=T%
 2580:
 2590DEFFNregisterj(J%,N%)
 2600J%!(N%<<2)=P%-J%
 2610=T%
 2620:
 2630DEFPROCassemble
 2640FORT%=0TO2STEP2:P%=code%
 2650[OPT T%
 2660:
 2670.test%
 2680EQUD -1:EQUD -1:EQUD -1:EQUD -1
 2690EQUD -1:EQUD -1:EQUD -1:EQUD -1
 2700EQUD -1:EQUD -1:EQUD -1:EQUD -1
 2710EQUD -1:EQUD -1:EQUD -1:EQUD -1
 2720:
 2730.bank%:EQUD 1
 2740:
 2750.view%
 2760EQUD 1<<BC%-1:EQUD 1<<BC%+BS%-1:EQUD 1<<AC%:; Position
 2770EQUD 0:EQUD 1<<VC%:; Heading
 2780EQUD 0:EQUD 0:; Pitch, Roll
 2790:
 2800.refresh%:EQUD -1
 2810:
 2820.landgen%
 2830STMFD R13!,{R14}
 2840BL calcpos%
 2850BL copybase%
 2860BL splitmap%
 2870BL makeland%
 2880LDMFD R13!,{PC}
 2890:
 2900.drawframe%
 2910STMFD R13!,{R14}
 2920BL calchor%
 2930LDR R1,bank%
 2940CMP R1,#1
 2950MOVEQ R1,#2
 2960MOVNE R1,#1
 2970STR R1,bank%
 2980MOV R0,#112
 2990SWI "OS_Byte"
 3000MOV R0,#19
 3010SWI "OS_Byte"
 3020OPT FNadr(0,vduvars%,2)
 3030OPT FNadr(1,scraddr%,2)
 3040SWI "OS_ReadVduVariables"
 3050BL drawsky%
 3060MOV R12,#depth%
 3070SUB R12,R12,#1
 3080.dloop%
 3090OPT FNadr(1,dist%+12,2)
 3100LDR R1,[R1,R12,ASL#4]:; Distance of strip in AC%
 3110; Draw everything further away than R1
 3120; *** Not done yet ***
 3130BL drawstrip%
 3140SUBS R12,R12,#1
 3150BGE dloop%
 3160BL drawshape%
 3170MOV R0,#113
 3180LDR R1,bank%
 3190SWI "OS_Byte"
 3200LDMFD R13!,{PC}
 3210:
 3220.calcpos%
 3230STMFD R13!,{R14}
 3240ADR R0,view%
 3250LDMIA R0,{R6-R7,R8,R10-R11}:; Position,,Heading
 3260OPT FNadr(12,pos%,2)
 3270LDR R9,refresh%
 3280MOV R8,#0
 3290STR R8,refresh%
 3300MOV R8,#MC%
 3310.levloop%
 3320LDMIA R12,{R2-R3}
 3330MOV R0,R6,ASR R8
 3340MOV R1,R7,ASR R8
 3350SUB R0,R0,#msize%/2-1:; SW corner
 3360SUB R1,R1,#msize%/2-1
 3370BIC R0,R0,#1:; Make sure its even
 3380BIC R1,R1,#1
 3390MOV R4,R0,ASL R8
 3400MOV R5,R1,ASL R8
 3410CMP R9,#0
 3420ADDNE R2,R0,#1<<30
 3430STMIA R12,{R0-R1,R2-R3,R4-R5,R8}
 3440ADD R12,R12,#32
 3450ADD R8,R8,#1
 3460CMP R8,#MC%+levels%
 3470BLT levloop%
 3480LDMFD R13!,{PC}
 3490:
 3500.copybase%
 3510STMFD R13!,{R14}
 3520OPT FNadr(12,base%,2)
 3530OPT FNadr(11,map%+32*msize%*msize%*(levels%-1),3)
 3540OPT FNadr(0,pos%+32*(levels%-1),2)
 3550LDMIA R0,{R0-R1}
 3560MOV R2,#32*bsize%
 3570MLA R12,R1,R2,R12
 3580MOV R10,#msize%
 3590.nloop%
 3600SUB R10,R10,#msize%<<16
 3610.eloop%
 3620CMP R0,#0
 3630CMPGE R1,#0
 3640BLT cbmakesea%
 3650CMP R0,#bsize%
 3660CMPLT R1,#bsize%
 3670BGE cbmakesea%
 3680ADD R2,R12,R0,ASL#5
 3690LDMIA R2,{R2-R9}
 3700STMIA R11!,{R2-R9}
 3710B cbreturn%
 3720:
 3730.cbmakesea%
 3740MOV R2,#0
 3750MOV R3,#0
 3760MVN R4,#1<<SC%-2:; Sea bed is -1/4 base square deep
 3770MOV R5,#0
 3780STMIA R11,{R2-R5}
 3790ADD R11,R11,#32
 3800.cbreturn%
 3810ADD R0,R0,#1
 3820ADDS R10,R10,#1<<16
 3830BLE eloop%
 3840SUB R0,R0,#msize%
 3850ADD R1,R1,#1
 3860ADD R12,R12,#32*bsize%
 3870SUBS R10,R10,#1
 3880BGT nloop%
 3890LDMFD R13!,{PC}
 3900:
 3910.display%:EQUD levels%-1
 3920:
 3930.testmap%
 3940STMFD R13!,{R14}
 3950OPT FNadr(0,vduvars%,2)
 3960ADD R1,R0,#scraddr%-vduvars%
 3970SWI "OS_ReadVduVariables"
 3980LDR R14,scraddr%
 3990ADD R14,R14,#scheight%*sclinc%
 4000ADD R14,R14,#sclinc%-4*msize%
 4010OPT FNadr(12,map%,2)
 4020LDR R0,display%
 4030ADD R12,R12,R0,ASL#5+MS%+MS%
 4040MOV R11,#msize%
 4050.nloop%
 4060SUB R14,R14,#sclinc%*4
 4070SUB R11,R11,#msize%<<16
 4080.eloop%
 4090LDR R0,[R12,#8]
 4100ADD R12,R12,#32
 4110MOV R0,R0,LSR#SC%-2
 4120AND R0,R0,#255
 4130ORR R0,R0,R0,LSL#8
 4140ORR R0,R0,R0,LSL#16
 4150STR R0,[R14,#sclinc%*3]
 4160STR R0,[R14,#sclinc%*2]
 4170STR R0,[R14,#sclinc%]
 4180STR R0,[R14],#4
 4190ADDS R11,R11,#1<<16
 4200BLE eloop%
 4210SUB R14,R14,#4*msize%
 4220SUBS R11,R11,#1
 4230BGT nloop%
 4240LDMFD R13!,{PC}
 4250:
 4260.splitmap%
 4270STMFD R13!,{R14}
 4280MOV R9,#levels%-1
 4290.levloop%
 4300; R9 is parent level
 4310OPT FNadr(0,pos%,2)
 4320ADD R0,R0,R9,ASL#5
 4330LDMIA R0,{R4-R5}:; Parents origin
 4340SUB R0,R0,#32
 4350LDMIA R0,{R0-R1,R2-R3}:; New origin, Old origin
 4360MOV R6,R0:; Current position
 4370MOV R7,R1
 4380MOV R8,#1:; Bottom to top
 4390CMP R1,R3
 4400CMPEQ R0,R2
 4410BEQ smskiplev%
 4420ADDLT R6,R6,#msize%-2
 4430ADDLT R7,R7,#msize%-2
 4440RSBLT R8,R8,#0:; Top to bottom
 4450OPT FNadr(12,map%,3)
 4460ADD R12,R12,R9,ASL#5+MS%+MS%:; Parent map
 4470SUB R11,R12,#32*msize%*msize%:; New map
 4480RSB R4,R4,R6,ASR#1:; Pos seen on parent
 4490RSB R5,R5,R7,ASR#1
 4500ADD R5,R4,R5,ASL#MS%
 4510ADD R12,R12,R5,ASL#5
 4520SUB R4,R6,R0:; Pos seen on new
 4530SUB R5,R7,R1
 4540ADD R5,R4,R5,ASL#MS%
 4550ADD R11,R11,R5,ASL#5
 4560SUB R6,R6,R2:; Pos seen on old
 4570SUB R7,R7,R3
 4580SUB R4,R0,R2:; New origin seen on old
 4590SUB R5,R1,R3
 4600ADD R5,R4,R5,ASL#MS%
 4610MOV R10,#msize%
 4620; At this point, the registers are used as:
 4630; R12 is addr of pos on parent
 4640; R11 is addr of pos on new
 4650; R10 is msize%
 4660; R9 is loop counter (less than 8 bits)
 4670; R8 is direction
 4680; R6-R7 are pos on old
 4690; R5<<5 is offset from R11 to addr of pos on old
 4700SUB R9,R9,#msize%<<8
 4710.nsloop%
 4720ADD R9,R9,#msize%<<20
 4730.ewloop%
 4740; If the square is not on old, then calculate it
 4750ADR R14,smreturn%
 4760CMP R6,#0
 4770CMPGE R7,#0
 4780BLT calcsq%
 4790CMP R6,#msize%
 4800CMPLT R7,#msize%
 4810BGE calcsq%
 4820; Copy it from its old position to its new position
 4830STMFD R13!,{R5-R8}
 4840ADD R8,R11,R5,ASL#5
 4850LDMIA R8!,{R0-R7}
 4860STMIA R11!,{R0-R7}
 4870LDMIA R8!,{R0-R7}
 4880STMIA R11!,{R0-R7}
 4890ADD R8,R8,#32*msize%
 4900ADD R11,R11,#32*msize%
 4910LDMDB R8!,{R0-R7}
 4920STMDB R11!,{R0-R7}
 4930LDMDB R8!,{R0-R7}
 4940STMDB R11!,{R0-R7}
 4950SUB R11,R11,#32*msize%
 4960LDMFD R13!,{R5-R8}
 4970.smreturn%
 4980ADD R6,R6,R8,ASL#1
 4990ADD R11,R11,R8,ASL#5+1
 5000ADD R12,R12,R8,ASL#5
 5010SUBS R9,R9,#2<<20
 5020BGT ewloop%
 5030SUB R6,R6,R8,ASL#MS%
 5040SUB R11,R11,R8,ASL#MS%+5
 5050SUB R12,R12,R8,ASL#(MS%-1)+5
 5060ADD R7,R7,R8,ASL#1
 5070ADD R11,R11,R8,ASL#MS%+5+1
 5080ADD R12,R12,R8,ASL#MS%+5
 5090ADDS R9,R9,#2<<8
 5100BLE nsloop%
 5110.smskiplev%
 5120SUBS R9,R9,#1
 5130BGT levloop%
 5140LDMFD R13!,{PC}
 5150:
 5160; Subdivides a map square to make 2x2 map squares
 5170; R12 is old square
 5180; R11 is new square
 5190; R10 is msize
 5200:
 5210.calcsq%
 5220STMFD R13!,{R0-R12,R14}
 5230LDMIA R12,{R0,R1,R2,R5}:; Old Type, Water level, Height, Random
 5240; Concoct a random seed
 5250ADD R8,R2,R2,ROR#17
 5260ADD R8,R8,R8,ROR#10
 5270ADD R8,R8,R8,ROR#6
 5280ADD R12,R12,#8
 5290SUB R3,R12,#32
 5300LDMIA R3,{R3,R6}:; W Height, Random
 5310SUB R4,R12,R10,ASL#5
 5320LDMIA R4,{R4,R7}:; S Height, Random
 5330ADD R4,R4,R2,ASL#1
 5340ADD R7,R7,R5,ASL#1
 5350ADD R3,R3,R4
 5360ADD R6,R6,R7
 5370MOV R3,R3,ASR#2-1
 5380MOV R6,R6,ASR#2
 5390ADD R8,R8,R8,ROR#4
 5400MOV R9,R8,LSR#32-6
 5410MUL R9,R5,R9
 5420SUB R9,R9,R5,ASL#5
 5430ADD R3,R3,R9,ASR#5-1
 5440ADD R8,R8,R8,ROR#4
 5450ADDS R6,R6,R8,ASR#31-(SC%-5)
 5460MOVLT R6,#0
 5470STMIA R11,{R0,R1,R3,R6}:; New SW Type etc..
 5480ADD R11,R11,#32
 5490ADD R3,R12,#32
 5500LDMIA R3,{R3,R6}:; E Height, Random
 5510ADD R4,R3,R4
 5520ADD R7,R6,R7
 5530MOV R4,R4,ASR#2-1
 5540MOV R7,R7,ASR#2
 5550ADD R8,R8,R8,ROR#4
 5560MOV R9,R8,LSR#32-6
 5570MUL R9,R5,R9
 5580SUB R9,R9,R5,ASL#5
 5590ADD R4,R4,R9,ASR#5-1
 5600ADD R8,R8,R8,ROR#4
 5610ADDS R7,R7,R8,ASR#31-(SC%-5)
 5620MOVLT R7,#0
 5630STMIA R11,{R0,R1,R4,R7}:; New SE Type etc..
 5640ADD R11,R11,R10,ASL#5
 5650ADD R4,R12,R10,ASL#5
 5660LDMIA R4,{R4,R7}:; N Height, Random
 5670ADD R4,R4,R2,ASL#1
 5680ADD R7,R7,R5,ASL#1
 5690ADD R3,R3,R4
 5700ADD R6,R6,R7
 5710MOV R3,R3,ASR#2-1
 5720MOV R6,R6,ASR#2
 5730ADD R8,R8,R8,ROR#4
 5740MOV R9,R8,LSR#32-6
 5750MUL R9,R5,R9
 5760SUB R9,R9,R5,ASL#5
 5770ADD R3,R3,R9,ASR#5-1
 5780ADD R8,R8,R8,ROR#4
 5790ADDS R6,R6,R8,ASR#31-(SC%-5)
 5800MOVLT R6,#0
 5810STMIA R11,{R0,R1,R3,R6}:; New NE Type etc..
 5820SUB R11,R11,#32
 5830SUB R3,R12,#32
 5840LDMIA R3,{R3,R6}:; W Height, Random again
 5850ADD R4,R3,R4
 5860ADD R7,R6,R7
 5870MOV R4,R4,ASR#2-1
 5880MOV R7,R7,ASR#2
 5890ADD R8,R8,R8,ROR#4
 5900MOV R9,R8,LSR#32-6
 5910MUL R9,R5,R9
 5920SUB R9,R9,R5,ASL#5
 5930ADD R4,R4,R9,ASR#5-1
 5940ADD R8,R8,R8,ROR#4
 5950ADDS R7,R7,R8,ASR#31-(SC%-5)
 5960MOVLT R7,#0
 5970STMIA R11,{R0,R1,R4,R7}:; New NW Type etc..
 5980SUB R11,R11,R10,ASL#5
 5990LDMFD R13!,{R0-R12,PC}
 6000:
 6010.testland%
 6020STMFD R13!,{R14}
 6030OPT FNadr(0,vduvars%,2)
 6040ADD R1,R0,#scraddr%-vduvars%
 6050SWI "OS_ReadVduVariables"
 6060LDR R14,scraddr%
 6070ADD R14,R14,#scheight%*sclinc%
 6080OPT FNadr(12,land%+4,3)
 6090LDR R0,display%
 6100ADD R12,R12,R0,ASL#3+LS%+LS%
 6110OPT FNadr(1,pos%+24,2)
 6120LDR R1,[R1,R0,ASL#5]
 6130OPT FNadr(2,view%,2)
 6140LDMIA R2,{R2-R3}
 6150MOV R2,R2,ASR R1
 6160MOV R3,R3,ASR R1
 6170SUB R2,R2,#msize%/2-1:; SW corner of visible area
 6180SUB R3,R3,#msize%/2-1
 6190MOV R2,R2,ASL#ML%
 6200MOV R3,R3,ASL#ML%
 6210OPT FNadr(10,col%,2)
 6220MOV R11,#lsize%-8
 6230.nloop%
 6240SUB R14,R14,#sclinc%*2
 6250SUB R11,R11,#lsize%-8<<16
 6260.eloop%
 6270AND R0,R2,#lsize%-1
 6280AND R1,R3,#lsize%-1
 6290ADD R0,R0,R1,ASL#LS%
 6300LDR R0,[R12,R0,ASL#3]
 6310ADD R0,R10,R0,ASL#3
 6320LDMIA R0,{R0-R1}:; Dither pattern
 6330MOV R4,R0,LSL#16
 6340MOV R5,R1,LSL#16
 6350ADD R2,R2,#1
 6360AND R0,R2,#lsize%-1
 6370AND R1,R3,#lsize%-1
 6380ADD R0,R0,R1,ASL#LS%
 6390LDR R0,[R12,R0,ASL#3]
 6400ADD R0,R10,R0,ASL#3
 6410LDMIA R0,{R0-R1}:; Dither pattern
 6420ORR R4,R4,R0,LSR#16
 6430ORR R5,R5,R1,LSR#16
 6440MOV R4,R4,ROR#16
 6450MOV R5,R5,ROR#16
 6460STR R4,[R14,#sclinc%]
 6470STR R5,[R14],#4
 6480ADD R2,R2,#1
 6490ADDS R11,R11,#2<<16
 6500BLE eloop%
 6510SUB R2,R2,#lsize%-8
 6520SUB R14,R14,#2*(lsize%-8)
 6530ADD R3,R3,#1
 6540SUB R14,R14,#sclinc%*2
 6550SUB R11,R11,#lsize%-8<<16
 6560.eloop%
 6570AND R0,R2,#lsize%-1
 6580AND R1,R3,#lsize%-1
 6590ADD R0,R0,R1,ASL#LS%
 6600LDR R0,[R12,R0,ASL#3]
 6610ADD R0,R10,R0,ASL#3
 6620LDMIA R0,{R0-R1}:; Dither pattern
 6630MOV R4,R0,LSR#16
 6640MOV R5,R1,LSR#16
 6650ADD R2,R2,#1
 6660AND R0,R2,#lsize%-1
 6670AND R1,R3,#lsize%-1
 6680ADD R0,R0,R1,ASL#LS%
 6690LDR R0,[R12,R0,ASL#3]
 6700ADD R0,R10,R0,ASL#3
 6710LDMIA R0,{R0-R1}:; Dither pattern
 6720ORR R4,R4,R0,LSL#16
 6730ORR R5,R5,R1,LSL#16
 6740STR R4,[R14,#sclinc%]
 6750STR R5,[R14],#4
 6760ADD R2,R2,#1
 6770ADDS R11,R11,#2<<16
 6780BLE eloop%
 6790SUB R2,R2,#lsize%-8
 6800SUB R14,R14,#2*(lsize%-8)
 6810ADD R3,R3,#1
 6820SUBS R11,R11,#2
 6830BGT nloop%
 6840LDMFD R13!,{PC}
 6850:
 6860.makeland%
 6870STMFD R13!,{R14}
 6880MOV R7,#vis%-1
 6890.levloop%
 6900OPT FNadr(0,pos%,2)
 6910ADD R0,R0,R7,ASL#5
 6920LDMIA R0,{R0-R1,R2-R3,R4-R5,R9}:; New origin, Old origin,, Scale
 6930CMP R0,R2
 6940CMPEQ R1,R3
 6950BEQ mlendlev%
 6960OPT FNadr(12,map%,3)
 6970ADD R12,R12,R7,ASL#5+MS%+MS%
 6980OPT FNadr(8,land%,3)
 6990ADD R8,R8,R7,ASL#3+LS%+LS%
 7000MOV R10,#msize%
 7010SUB R7,R7,#msize%-1<<8
 7020.nloop%
 7030ADD R7,R7,#msize%-1<<20
 7040.eloop%
 7050AND R4,R0,#(1<<MS%)-1
 7060AND R5,R1,#(1<<MS%)-1
 7070ADD R11,R8,R4,ASL#ML%+3
 7080ADD R11,R11,R5,ASL#ML%+3+LS%
 7090ADR R14,mlreturn%
 7100SUBS R4,R0,R2
 7110SUBGES R5,R1,R3
 7120BLT calclsq%
 7130CMP R4,#msize%-1
 7140CMPLT R5,#msize%-1
 7150BGE calclsq%
 7160.mlreturn%
 7170ADD R0,R0,#1
 7180ADD R12,R12,#32
 7190SUBS R7,R7,#1<<20
 7200BGE eloop%
 7210SUB R0,R0,#msize%-1
 7220SUB R12,R12,#32*(msize%-1)
 7230ADD R1,R1,#1
 7240ADD R12,R12,#32*msize%
 7250ADDS R7,R7,#1<<8
 7260BLT nloop%
 7270.mlendlev%
 7280SUBS R7,R7,#1
 7290BGE levloop%
 7300LDMFD R13!,{PC}
 7310:
 7320; Subdivides a map square to make 4x4 land squares (ML%=2)
 7330; R12 is old square
 7340; R11 is new square
 7350; R10 is msize
 7360; R9 is scale (log2 size of map square in world coords)
 7370:
 7380.calclsq%
 7390STMFD R13!,{R0-R12,R14}
 7400SUB R9,R9,#SC%:; Log2 square coord in world coords
 7410; Get the heights
 7420LDMIB R12,{R0,R2,R8}:; Water level, SW height (in square coords), rnd
 7430ADD R12,R12,#8
 7440ADD R3,R12,#32
 7450LDMIA R3,{R3,R7}:; SE height, rnd
 7460ADD R8,R8,R7
 7470ADD R12,R12,R10,ASL#5
 7480LDMIA R12,{R4,R7}:; NW height, rnd
 7490ADD R8,R8,R7
 7500ADD R5,R12,#32
 7510LDMIA R5,{R5,R7}:; NE height, rnd
 7520ADD R8,R8,R7
 7530; Calculate average height
 7540ADD R1,R2,R3
 7550ADD R1,R1,R4
 7560ADD R1,R1,R5
 7570MOV R1,R1,ASR#2
 7580; Calculate land base colour
 7590MOV R7,R1,ASL R9:; Height in AC%
 7600ADD R7,R7,R8,ASL#(AC%+9)-(SC%+1):; Bumpy ground seems high
 7610MOV R8,#5<<5:; Grass
 7620CMP R7,#128<<AC%
 7630MOVGE R8,#7<<5:; Bracken
 7640CMP R7,#256<<AC%
 7650MOVGE R8,#9<<5:; Heather
 7660CMP R7,#384<<AC%
 7670MOVGE R8,#11<<5:; Rough grass
 7680CMP R7,#512<<AC%
 7690MOVGE R8,#13<<5:; Rocks
 7700CMP R7,#640<<AC%
 7710MOVGE R8,#15<<5:; Snow
 7720SUB R7,R5,R2:; SW facing slope<<3
 7730MOV R7,R7,ASR#SC%-4:; Approx range +-32
 7740ADDS R7,R7,#24
 7750MOVLT R7,#0
 7760CMP R7,#60
 7770MOVGT R7,#60
 7780ADD R8,R8,R7
 7790; Calculate water colour
 7800SUBS R7,R0,R1
 7810MOVLT R7,#0
 7820MOV R7,R7,ASL R9
 7830MOV R7,R7,ASR#AC%-1:; Depth in half metres
 7840MOV R1,#0<<6:; Sea blue
 7850CMP R7,#64
 7860MOVGE R7,R7,ASR#4
 7870ADDGE R1,R1,#16
 7880CMP R7,#16
 7890MOVGE R7,R7,ASR#2
 7900ADDGE R1,R1,#8
 7910CMP R7,#8
 7920MOVGE R7,R7,ASR#1
 7930ADDGE R1,R1,#4
 7940ADD R1,R1,R7
 7950CMP R1,#31
 7960MOVGT R1,#31
 7970; Generate a random seed
 7980EOR R14,R2,R5,ROR#17
 7990EOR R14,R14,R3,ROR#13
 8000EOR R14,R14,R4,ROR#10
 8010ADD R14,R14,R14,ROR#6
 8020; Calculate gradients
 8030SUB R4,R4,R2
 8040SUB R5,R5,R3
 8050ADD R2,R4,R2,ASL#3
 8060ADD R3,R5,R3,ASL#3
 8070SUB R3,R3,R2:; dH/dE<<3
 8080SUB R5,R5,R4:; d2H/dNdE
 8090ADD R2,R3,R2,ASL#3:; Height<<6
 8100ADD R4,R5,R4,ASL#3:; dH/dN<<3
 8110; At this point, registers are used as
 8120; R0,R1 are water level, water colour
 8130; R2-R5 are gradients
 8140; R8 is land colour
 8150; R9-R12 as on entry
 8160; R14 is rnd seed
 8170MOV R9,#4
 8180.nloop%
 8190]:FORU%=0TO3:[OPT T%
 8200MOV R6,R2,ASR#6-2
 8210ADD R14,R14,R14,ROR#2
 8220ADD R7,R8,R14,LSR#32-2
 8230CMP R6,R0,ASL#2
 8240MOVLT R6,R0,ASL#2
 8250MOVLT R7,R1
 8260STMIA R11!,{R6,R7}
 8270ADD R2,R2,R3,ASL#1
 8280]:NEXT:[OPT T%
 8290SUB R11,R11,#8*4
 8300SUB R2,R2,R3,ASL#1+2
 8310ADD R11,R11,R10,ASL#3+ML%
 8320ADD R2,R2,R4,ASL#1
 8330ADD R3,R3,R5,ASL#1
 8340SUBS R9,R9,#1
 8350BGT nloop%
 8360LDMFD R13!,{R0-R12,PC}
 8370:
 8380.calchor%
 8390STMFD R13!,{R14}
 8400MOV R12,#0
 8410.dloop%
 8420OPT FNadr(0,dist%,2)
 8430ADD R0,R0,R12,ASL#4
 8440LDMIA R0,{R0,R8,R9}:; Level, distance in SC%, (1<<21)/R1
 8450OPT FNadr(10,land%,3)
 8460ADD R10,R10,R0,ASL#3+LS%+LS%
 8470OPT FNadr(7,pos%+24,2)
 8480LDR R7,[R7,R0,ASL#5]
 8490SUB R7,R7,#ML%:; Log2 size of a square in AC%
 8500OPT FNadr(0,view%,2)
 8510LDMIA R0,{R0-R1,R2,R3-R4,R5,R6}:; Position, height, heading, pitch, roll
 8520MUL R3,R8,R3:; Heading in SC%+VC%
 8530MUL R4,R8,R4
 8540MUL R5,R8,R5:; Pitch, Roll in SC%+VC%
 8550MUL R6,R8,R6
 8560RSB R11,R7,#EC%
 8570MOV R0,R0,ASL R11:; Position in EC%
 8580MOV R1,R1,ASL R11
 8590SUB R11,R7,#SC%
 8600MOV R2,R2,ASR R11:; Height in SC%
 8610ADD R0,R0,R3,ASL#EC%-(SC%+VC%):; Move forwards
 8620ADD R1,R1,R4,ASL#EC%-(SC%+VC%)
 8630ADD R2,R2,R5,ASR#VC%
 8640MOV R3,R3,ASR#WW%
 8650MOV R4,R4,ASR#WW%
 8660MOV R5,R3,ASL#EC%-(SC%+VC%):; Right vector (in EC%, SC%)
 8670RSB R5,R5,#0
 8680MOV R4,R4,ASL#EC%-(SC%+VC%)
 8690MOV R6,R6,ASR#WW%+VC%
 8700SUB R0,R0,R4,ASL#WW%-1:; Move left 1/2 screen except 1/2 pixel
 8710SUB R1,R1,R5,ASL#WW%-1
 8720SUB R2,R2,R6,ASL#WW%-1
 8730SUB R0,R0,R4,ASL#WW%-3
 8740SUB R1,R1,R5,ASL#WW%-3
 8750SUB R2,R2,R6,ASL#WW%-3
 8760ADD R0,R0,R4,ASR#1
 8770ADD R1,R1,R5,ASR#1
 8780ADD R2,R2,R6,ASR#1
 8790ADD R2,R2,R8,ASR#1:; Up 1/2 screen
 8810ADD R2,R2,R8,ASR#HH%+1:; Rounding
 8820OPT FNadr(11,hor%,3)
 8830ADD R11,R11,R12,ASL#3
 8840; At this point, the registers are used as follows:
 8850; R0-R1,R2 are top left of screen, with position in EC% and height in SC%
 8860; R4-R5,R6 is right vector, also in EC% and SC%
 8870; R9 is (1<<21) / (distance in SC%)
 8880; R10 is base address of land for this level
 8890; R11 is hor for this distance
 8900; R12 is depth
 8910SUB R0,R0,#loff%<<EC%:; Land is offset
 8920SUB R1,R1,#loff%<<EC%
 8930SUB R12,R12,#width%<<16
 8940.wloop%
 8950MOV R7,R0,LSR#EC%
 8960MOV R8,R1,LSR#EC%
 8970ADD R7,R7,R8,ASL#LS%
 8980ADD R7,R10,R7,ASL#3
 8990LDMIA R7,{R3,R7}:; Land height (SC%), colour number
 9000RSBS R3,R3,R2:; Height below top of screen
 9010MOVLT R3,#0
 9020MUL R3,R9,R3
 9030MOV R8,R3,LSR#20-HH%
 9040LDR R3,[R11]
 9050CMP R8,R3
 9060MOVGT R8,R3
 9070STMIA R11,{R3,R7,R8}:; Bottom, colour number, top in pixels
 9080ADD R11,R11,#winc%
 9090ADD R0,R0,R4
 9100ADD R1,R1,R5
 9110ADD R2,R2,R6
 9120ADDS R12,R12,#1<<16
 9130BLT wloop%
 9140ADD R12,R12,#1
 9150CMP R12,#depth%
 9160BLT dloop%
 9170LDMFD R13!,{PC}
 9180:
 9190.vduvars%:EQUD 148:EQUD -1
 9200.scraddr%:EQUD -1
 9210:
 9220; R12 is depth of strip to draw
 9230; R0-R11 corrupted
 9240:
 9250.drawstrip%
 9260STMFD R13!,{R12,R14}
 9270LDR R14,scraddr%
 9280OPT FNadr(11,hor%,3)
 9290ADD R11,R11,R12,ASL#3
 9300OPT FNadr(10,col%,2)
 9310SUB R12,R12,#width%<<16
 9320.wloop%
 9330LDMIA R11,{R0,R1,R2}:; Bottom, colour, top
 9340SUBS R0,R0,R2:; Number of pixels to draw
 9350BLE dsendw%
 9360ADD R9,R14,R2,ASL#SCW%+1
 9370ADD R9,R9,R2,ASL#SCW%-2+1
 9380ADD R1,R10,R1,ASL#3
 9390LDMIA R1,{R6,R7}
 9400TST R2,#1
 9410MOVNE R6,R6,ROR#16
 9420MOVNE R7,R7,ROR#16
 9430.yloop%
 9440]:CASESCW%-WW%OF
 9450WHEN3:
 9460[OPT T%
 9470MOV R8,R6
 9480STMIA R9,{R6,R8}
 9490ADD R9,R9,#sclinc%
 9500MOV R8,R7
 9510STMIA R9,{R7,R8}
 9520ADD R9,R9,#sclinc%
 9530MOV R6,R6,ROR#16
 9540MOV R7,R7,ROR#16
 9550]
 9560WHEN2:
 9570[OPT T%
 9580STR R6,[R9],#sclinc%
 9590STR R7,[R9],#sclinc%
 9600MOV R6,R6,ROR#16
 9610MOV R7,R7,ROR#16
 9620]
 9630OTHERWISE:ERROR255,"Only WW%=6 is supported"
 9640ENDCASE:[OPT T%
 9650SUBS R0,R0,#1
 9660BGT yloop%
 9670.dsendodd%
 9680.dsendw%
 9690ADD R11,R11,#winc%
 9700ADD R14,R14,#1<<SCW%-WW%
 9710ADDS R12,R12,#1<<16
 9720BLT wloop%
 9730LDMFD R13!,{R12,PC}
 9740:
 9750.drawsky%
 9760STMFD R13!,{R14}
 9770LDR R14,scraddr%
 9780OPT FNadr(12,col%+8*(1<<5),2)
 9790OPT FNadr(0,view%+20,2)
 9800LDMIA R0,{R0,R1}:; Pitch, Roll
 9810MOV R0,R0,ASL#24-VC%
 9820MOV R1,R1,ASL#24-SKW%-VC%
 9830SUB R0,R0,R1,ASL#SKW%-1:; Left 1/2 screen except 1/2 pixel
 9840SUB R0,R0,R1,ASL#SKW%-3
 9850ADD R0,R0,R1,ASR#1
 9860ADD R0,R0,#1<<24-1:; Up 1/2 screen except 1/2 pixel
 9870SUB R0,R0,#1<<24-SKH%-1
 9880ADD R0,R0,R0,ASL#1
 9890ADD R1,R1,R1,ASL#1
 9900MOV R11,#skwidth%
 9910.wloop%
 9920SUB R11,R11,#skheight%<<16
 9930.hloop%
 9940ADD R4,R0,R1
 9950ADD R6,R4,R1
 9960ADD R8,R6,R1
 9970MOV R2,R0,ASR#26-7
 9980MOV R4,R4,ASR#26-7
 9990MOV R6,R6,ASR#26-7
10000MOV R8,R8,ASR#26-7
10010]:FORU%=2TO8STEP2:[OPT T%
10020ADDS U%,U%,#32
10030MOVLT U%,#0
10040CMP U%,#127
10050MOVGT U%,#127
10060ADD U%,R12,U%,ASL#3
10070LDMIA U%,{U%-(U%+1)}
10080]:NEXT:[OPT T%
10090STMIA R14,{R2,R4,R6,R8}
10100ADD R14,R14,#sclinc%
10110STMIA R14,{R3,R5,R7,R9}
10120ADD R14,R14,#sclinc%
10130]:FORU%=2TO9:[OPT T%
10140MOV U%,U%,ROR#16
10150]:NEXT:[OPT T%
10160STMIA R14,{R2,R4,R6,R8}
10170ADD R14,R14,#sclinc%
10180STMIA R14,{R3,R5,R7,R9}
10190ADD R14,R14,#sclinc%
10200SUB R0,R0,#3<<24-SKH%:; Down 1 pixel
10210ADDS R11,R11,#1<<16
10220BLE hloop%
10230ADD R0,R0,#3<<24:; Up 1 screen
10240SUB R14,R14,#scheight%*sclinc%
10250ADD R0,R0,R1,ASL#2:; Right 2 pixels
10260ADD R14,R14,#4<<SCW%-SKW%
10270SUBS R11,R11,#4
10280BGT wloop%
10290LDMFD R13!,{PC}
10300:
10310; Draws any triangle
10320; R0-R1, R2-R3, R4-R5 are corners
10330; Everything preserved
10340:
10350.plottri%
10360STMFD R13!,{R0-R12,R14}
10370; Sort them into ascending order
10380CMP R3,R1
10390BGT pt13%
10400.pt31%
10410CMP R5,R1
10420BGT pt315%
10430CMP R5,R3
10440BGT pt351%
10450.pt531%
10460MOV R6,R0
10470MOV R0,R4
10480MOV R4,R6
10490MOV R6,R1
10500MOV R1,R5
10510MOV R5,R6
10520B pt135%
10530:
10540.pt351%
10550MOV R6,R0
10560MOV R0,R2
10570MOV R2,R4
10580MOV R4,R6
10590MOV R6,R1
10600MOV R1,R3
10610MOV R3,R5
10620MOV R5,R6
10630B pt135%
10640:
10650.pt315%
10660MOV R6,R0
10670MOV R0,R2
10680MOV R2,R6
10690MOV R6,R1
10700MOV R1,R3
10710MOV R3,R6
10720B pt135%
10730:
10740.pt13%
10750CMP R5,R3
10760BGT pt135%
10770CMP R5,R1
10780BGT pt153%
10790.pt513%
10800MOV R6,R0
10810MOV R0,R4
10820MOV R4,R2
10830MOV R2,R6
10840MOV R6,R1
10850MOV R1,R5
10860MOV R5,R3
10870MOV R3,R6
10880B pt135%
10890:
10900.pt153%
10910MOV R6,R2
10920MOV R2,R4
10930MOV R4,R6
10940MOV R6,R3
10950MOV R3,R5
10960MOV R5,R6
10970.pt135%
10980; Calculate long gradient
10990MOV R8,#1
11000SUB R7,R5,R1
11010SUBS R6,R4,R0
11020RSBLT R8,R8,#0
11030RSBLT R6,R6,#0
11040MOV R9,#0
11050]:FORU%=9TO1STEP-1:[OPT T%
11060CMP R7,R6,ASR#U%
11070SUBLE R6,R6,R7,ASL#U%
11080ADDLE R9,R9,R8,ASL#U%+DC%
11090]:NEXT:[OPT T%
11100CMP R6,R7
11110SUBGE R6,R6,R7
11120ADDGE R9,R9,R8,ASL#DC%
11130]:FORU%=DC%-1TO1STEP-1:[OPT T%
11140RSBS R6,R7,R6,ASL#1
11150ADDLT R6,R6,R7
11160ADDGE R9,R9,R8,ASL#U%
11170]:NEXT:[OPT T%
11180RSBS R6,R7,R6,ASL#1
11190ADDGE R9,R9,R8
11200; Calculate bottom short gradient
11210MOV R8,#1
11220SUB R7,R3,R1
11230SUBS R6,R2,R0
11240RSBLT R8,R8,#0
11250RSBLT R6,R6,#0
11260MOV R10,#0
11270]:FORU%=9TO1STEP-1:[OPT T%
11280CMP R7,R6,ASR#U%
11290SUBLE R6,R6,R7,ASL#U%
11300ADDLE R10,R10,R8,ASL#U%+DC%
11310]:NEXT:[OPT T%
11320CMP R6,R7
11330SUBGE R6,R6,R7
11340ADDGE R10,R10,R8,ASL#DC%
11350]:FORU%=DC%-1TO1STEP-1:[OPT T%
11360RSBS R6,R7,R6,ASL#1
11370ADDLT R6,R6,R7
11380ADDGE R10,R10,R8,ASL#U%
11390]:NEXT:[OPT T%
11400RSBS R6,R7,R6,ASL#1
11410ADDGE R10,R10,R8
11420; Calculate top short gradient
11430MOV R8,#1
11440SUB R7,R5,R3
11450SUBS R6,R4,R2
11460RSBLT R8,R8,#0
11470RSBLT R6,R6,#0
11480MOV R4,#0
11490]:FORU%=9TO1STEP-1:[OPT T%
11500CMP R7,R6,ASR#U%
11510SUBLE R6,R6,R7,ASL#U%
11520ADDLE R4,R4,R8,ASL#U%+DC%
11530]:NEXT:[OPT T%
11540CMP R6,R7
11550SUBGE R6,R6,R7
11560ADDGE R4,R4,R8,ASL#DC%
11570]:FORU%=DC%-1TO1STEP-1:[OPT T%
11580RSBS R6,R7,R6,ASL#1
11590ADDLT R6,R6,R7
11600ADDGE R4,R4,R8,ASL#U%
11610]:NEXT:[OPT T%
11620RSBS R6,R7,R6,ASL#1
11630ADDGE R4,R4,R8
11640; Calculate bottom, middle, top in pixels
11650; Also corrects x to nearest vertical pixel
11660ADD R6,R5,#1<<DC%-1
11670MOV R6,R6,ASR#DC%
11680ADD R5,R3,#1<<DC%-1
11690MOV R5,R5,ASR#DC%
11700RSB R3,R3,R5,ASL#DC%
11710ADD R3,R3,#1<<DC%-1
11720MOV R3,R3,ASR#DC%-6
11730MUL R7,R3,R4
11740ADD R2,R2,R7,ASR#6
11750STMFD R13!,{R2,R4,R6}:; top short x,dx, top in pixels
11760ADD R4,R1,#1<<DC%-1
11770MOV R4,R4,ASR#DC%
11780RSB R2,R1,R4,ASL#DC%
11790ADD R2,R2,#1<<DC%-1
11800MOV R2,R2,ASR#DC%-6
11810MUL R3,R2,R10
11820ADD R1,R0,R3,ASR#6
11830MUL R3,R2,R9
11840ADD R0,R0,R3,ASR#6
11850MOV R2,R9
11860MOV R3,R10
11870; At this point registers are used as...
11880; R0,R2 are long x,dx
11890; R1,R3 are bottom short x,dx
11900; R4,R5 are bottom, middle in pixels
11910; top short x,dx and top in pixels are on stack
11920RSBS R8,R4,#0
11930MLAGT R0,R8,R2,R0
11940MLAGT R1,R8,R3,R1
11950ADDGT R4,R4,R8
11960OPT FNadr(7,col%,2)
11970ADD R7,R7,R11,ASL#3
11980LDMIA R7,{R7,R11}
11990TST R4,#2
12000MOVNE R7,R7,ROR#16
12010MOVNE R11,R11,ROR#16
12020TST R4,#1
12030MOVNE R8,R11
12040MOVNE R11,R7
12050MOVNE R7,R8,ROR#16
12060LDR R12,scraddr%
12070RSB R8,R4,#scheight%
12080ADD R12,R12,R8,ASL#SCW%
12090ADD R12,R12,R8,ASL#SCW%-2
12100MOV R6,R5
12110CMP R6,#scheight%
12120MOVGT R6,#scheight%
12130SUBS R4,R6,R4
12140SUBLE R6,R6,R4:; R6 = old R4
12150BLE ptnobottom%
12160.yloop%
12170SUB R12,R12,#sclinc%
12180BL drawline%
12190ADD R0,R0,R2
12200ADD R1,R1,R3
12210MOV R8,R11
12220MOV R11,R7
12230MOV R7,R8,ROR#16
12240SUBS R4,R4,#1
12250BGT yloop%
12260.ptnobottom%
12270LDMFD R13!,{R1,R3,R4}:; short top x,dx, top in pixels
12280CMP R6,#0
12290SWILT &141
12300SUBS R8,R6,R5
12310MLAGT R1,R8,R3,R1
12320CMP R4,#scheight%
12330MOVGT R4,#scheight%
12340SUBS R4,R4,R6
12350BLE ptnotop%
12360.yloop%
12370SUB R12,R12,#sclinc%
12380BL drawline%
12390ADD R0,R0,R2
12400ADD R1,R1,R3
12410MOV R8,R11
12420MOV R11,R7
12430MOV R7,R8,ROR#16
12440SUBS R4,R4,#1
12450BGT yloop%
12460.ptnotop%
12470LDMFD R13!,{R0-R12,PC}
12480:
12490; Draws a horizontal line
12500; R0 is left end, R1 is right end, both in DC%
12510; R12 is screen line address
12520; R11 is colour
12530; Corrupts R0-R2,R8-R12
12540:
12550.drawline%
12560STMFD R13!,{R0-R2,R8-R12,R14}
12570CMP R0,R1
12580MOVGT R2,R0
12590MOVGT R0,R1
12600MOVGT R1,R2
12610CMP R0,#0<<DC%
12620MOVLT R0,#0<<DC%
12630CMP R1,#scwidth%<<DC%
12640MOVGT R1,#scwidth%<<DC%
12650MOV R0,R0,ASR#DC%
12660MOV R1,R1,ASR#DC%
12670CMP R0,R1
12680LDMGEFD R13!,{R0-R2,R8-R12,PC}
12690MOV R2,R0,ASR#2
12700ADD R12,R12,R2,ASL#2
12710CMP R2,R1,ASR#2
12720BEQ dhsmall%
12730MOV R8,R11
12740MOV R9,R11
12750MOV R10,R11
12760SUB R1,R1,R0
12770AND R0,R0,#3
12780ADR R2,dhleftj%
12790LDR R0,[R2,R0,ASL#2]
12800ADD PC,R2,R0
12810:
12820.dhleftj%
12830]:FORU%=0TO3:[OPT T%
12840EQUD dhend%-dhleftj%
12850]:NEXT:[OPT T%
12860:
12870OPT FNregisterj(dhleftj%,0)
12880.dhmiddle%
12890MOV R2,R1,ASR#4
12900AND R1,R1,#15
12910ADR R0,dhrightj%
12920LDR R1,[R0,R1,ASL#2]
12930CMP R2,#0
12940ADDLE PC,R0,R1
12950.xloop%
12960STMIA R12!,{R8-R11}
12970SUBS R2,R2,#1
12980BGT xloop%
12990ADD PC,R0,R1
13000:
13010]:FORU%=1TO3:[OPT T%
13020OPT FNregisterj(dhleftj%,U%)
13030LDR R2,[R12]
13040MOV R2,R2,LSL#4-U%<<3
13050ORR R2,R2,R11,LSR#U%<<3
13060MOV R2,R2,ROR#4-U%<<3
13070STR R2,[R12],#4
13080SUB R1,R1,#4-U%
13090B dhmiddle%
13100]:NEXT:[OPT T%
13110:
13120.dhrightj%
13130]:FORU%=0TO15:[OPT T%
13140EQUD dhend%-dhrightj%
13150]:NEXT:[OPT T%
13160:
13170]:FORU%=4TO15STEP4:W%=8+(U%>>2):[OPT T%
13180OPT FNregisterj(dhrightj%,U%)
13190STMIA R12,{R8-(W%-1)}
13200LDMFD R13!,{R0-R2,R8-R12,PC}
13210]:NEXT:[OPT T%
13220:
13230]:FORU%=0TO15STEP4:FORV%=1TO3:S%=U%+V%:W%=8+(U%>>2):[OPT T%
13240OPT FNregisterj(dhrightj%,S%)
13250LDR R0,[R12,#U%]
13260MOV R0,R0,LSR#V%<<3
13270ORR R0,R0,W%,LSL#4-V%<<3
13280MOV W%,R0,ROR#4-V%<<3
13290STMIA R12,{R8-W%}
13300LDMFD R13!,{R0-R2,R8-R12,PC}
13310]:NEXT,:[OPT T%
13320:
13330.dhsmall%
13340AND R0,R0,#3
13350AND R1,R1,#3
13360ADD R1,R0,R1,ASL#2
13370ADR R0,dhsmallj%
13380LDR R1,[R0,R1,ASL#2]
13390ADD PC,R0,R1
13400:
13410.dhsmallj%
13420]:FORV%=0TO3:FORU%=0TO3:[OPT T%
13430EQUD dhend%-dhsmallj%
13440]:NEXT,:[OPT T%
13450:
13460]:FORU%=0TO2:FORV%=U%+1TO3:[OPT T%
13470OPT FNregisterj(dhsmallj%,U%+(V%<<2))
13480LDR R0,[R12]
13490]:IFU%>0THEN
13500[OPT T%
13510MOV R0,R0,ROR#U%<<3
13520MOV R11,R11,ROR#U%<<3
13530]
13540ENDIF:[OPT T%
13550MOV R0,R0,LSR#V%-U%<<3
13560ORR R0,R0,R11,LSL#4-(V%-U%)<<3
13570MOV R0,R0,ROR#4-V%<<3
13580STR R0,[R12]
13590LDMFD R13!,{R0-R2,R8-R12,PC}
13600]:NEXT,:[OPT T%
13610:
13620.dhend%
13630LDMFD R13!,{R0-R2,R8-R12,PC}
13640:
13650.testpos%
13660EQUD 1<<VC%:EQUD 0:EQUD 0:; E-vector
13670EQUD 0:EQUD 1<<VC%:EQUD 0:; N-vector
13680EQUD 0:EQUD 0:EQUD 1<<VC%:; U-vector
13690EQUD 0:EQUD 0:EQUD 10<<AC%:; Position
13700:
13710.matrix%
13720EQUD 1<<VC%:EQUD 0:EQUD 0:; E-vector
13730EQUD 0:EQUD 1<<VC%:EQUD 0:; N-vector
13740EQUD 0:EQUD 0:EQUD 1<<VC%:; U-vector
13750EQUD 0:EQUD 0:EQUD 10<<AC%:; Relative position
13760EQUD 0:EQUD 0:EQUD 1<<VC%:; Light vector
13770:
13780; Draws a vector graphics shape
13790; Uses testpos at the moment
13800; Uses shape data from shape% at the moment
13810; Eventually, it will expect matrix% to be set up
13820;            and R12 to be shape data
13830:
13840.drawshape%
13850STMFD R13!,{R14}
13860ADR R12,testpos%
13870BL makematrix%
13880; Fill points%
13890OPT FNadr(12,shape%,2)
13900OPT FNadr(11,points%,2)
13910LDR R10,[R12],#4
13920.ploop%
13930LDMIA R12!,{R0-R2}
13940ADR R9,matrix%
13950LDMIA R9!,{R3-R5}
13960MUL R6,R0,R3
13970MUL R7,R0,R4
13980MUL R8,R0,R5
13990LDMIA R9!,{R3-R5}
14000MLA R6,R1,R3,R6
14010MLA R7,R1,R4,R7
14020MLA R8,R1,R5,R8
14030LDMIA R9!,{R3-R5}
14040MLA R6,R2,R3,R6
14050MLA R7,R2,R4,R7
14060MLA R8,R2,R5,R8
14070LDMIA R9!,{R3-R5}
14080ADD R6,R3,R6,ASR#VC%:; Apparent E
14090ADD R7,R4,R7,ASR#VC%:; Apparent N
14100ADD R8,R5,R8,ASR#VC%:; Apparent U
14110CMP R7,#1<<10
14120MOVLT R0,#1<<31
14130BLT dsbehind%
14140CMP R7,#1<<18
14150MOVGE R6,R6,ASR#8
14160MOVGE R7,R7,ASR#8
14170MOVGE R8,R8,ASR#8
14180CMP R7,#1<<14
14190MOVGE R6,R6,ASR#4
14200MOVGE R7,R7,ASR#4
14210MOVGE R8,R8,ASR#4
14220CMP R7,#1<<12
14230MOVGE R6,R6,ASR#2
14240MOVGE R7,R7,ASR#2
14250MOVGE R8,R8,ASR#2
14260MOV R0,#1<<22
14270MOV R9,#0
14280]:FORU%=22TO1STEP-1:[OPT T%
14290CMP R7,R0,ASR#U%
14300SUBLE R0,R0,R7,ASL#U%
14310ADDLE R9,R9,#1<<U%
14320]:NEXT:[OPT T%
14330CMP R7,R0
14340ADDLE R9,R9,#1
14350MUL R0,R6,R9
14360MUL R1,R8,R9
14370MOV R0,R0,ASR#22-(SCW%+DC%)
14380MOV R1,R1,ASR#22-(SCH%+DC%)
14390ADD R0,R0,#scwidth%<<DC%-1
14400ADD R1,R1,#scheight%<<DC%-1
14410.dsbehind%
14420STMIA R11!,{R0-R1}
14430SUBS R10,R10,#1
14440BGT ploop%
14450; Plot the triangles
14460LDR R10,[R12],#4
14470.tloop%
14480LDMIA R12!,{R0,R2,R4,R6-R8,R11}
14490ADR R1,matrix%+48
14500LDMIA R1,{R1,R3,R5}
14510MUL R1,R6,R1
14520MLA R1,R7,R3,R1
14530MLA R1,R8,R5,R1
14540MOV R1,R1,ASR#VC%+VC%-6
14550CMP R1,#0
14560MOVLT R1,#0
14570CMP R1,#63
14580MOVGT R1,#63
14590ADD R11,R1,R11,ASL#5
14600OPT FNadr(5,points%,2)
14610ADD R0,R5,R0,ASL#3
14620LDMIA R0,{R0-R1}
14630ADD R2,R5,R2,ASL#3
14640LDMIA R2,{R2-R3}
14650ADD R4,R5,R4,ASL#3
14660LDMIA R4,{R4-R5}
14670CMP R0,#1<<31
14680CMPNE R2,#1<<31
14690CMPNE R4,#1<<31
14700BEQ dsdontplot%
14710SUB R6,R2,R0
14720SUB R7,R5,R1
14730MOV R6,R6,ASR#DC%-4
14740MOV R7,R7,ASR#DC%-4
14750MUL R8,R6,R7
14760SUB R6,R4,R0
14770RSB R7,R3,R1
14780MOV R6,R6,ASR#DC%-4
14790MOV R7,R7,ASR#DC%-4
14800MLA R8,R6,R7,R8
14810CMP R8,#0
14820BLLT plottri%
14830.dsdontplot%
14840SUBS R10,R10,#1
14850BGT tloop%
14860LDMFD R13!,{PC}
14870:
14880; Calculates apparent pos of an object
14890; World pos is in R12
14900:
14910.makematrix%
14920STMFD R13!,{R14}
14930OPT FNadr(10,matrix%,2)
14940OPT FNadr(11,view%+12,2)
14950LDMIA R11,{R0-R1,R2,R3}:; Viewer's heading, pitch, roll
14960LDMIA R12!,{R7-R9}:; E vector
14970SUB R6,R9,R8
14980SUB R6,R6,R7
14990STR R6,matrix%+48:; Light E
15000MUL R4,R1,R7
15010MUL R6,R0,R8
15020SUB R4,R4,R6
15030MUL R5,R0,R7
15040MLA R5,R1,R8,R5
15050MOV R4,R4,ASR#VC%
15060MOV R5,R5,ASR#VC%
15070MUL R6,R5,R2
15080MLA R6,R4,R3,R6
15090SUB R6,R9,R6,ASR#VC%
15100STMIA R10!,{R4-R6}
15110LDMIA R12!,{R7-R9}:; N vector
15120SUB R6,R9,R8
15130SUB R6,R6,R7
15140STR R6,matrix%+52:; Light N
15150MUL R4,R1,R7
15160MUL R6,R0,R8
15170SUB R4,R4,R6
15180MUL R5,R0,R7
15190MLA R5,R1,R8,R5
15200MOV R4,R4,ASR#VC%
15210MOV R5,R5,ASR#VC%
15220MUL R6,R5,R2
15230MLA R6,R4,R3,R6
15240SUB R6,R9,R6,ASR#VC%
15250STMIA R10!,{R4-R6}
15260LDMIA R12!,{R7-R9}:; U vector
15270SUB R6,R9,R8
15280SUB R6,R6,R7
15290STR R6,matrix%+56:; Light U
15300MUL R4,R1,R7
15310MUL R6,R0,R8
15320SUB R4,R4,R6
15330MUL R5,R0,R7
15340MLA R5,R1,R8,R5
15350MOV R4,R4,ASR#VC%
15360MOV R5,R5,ASR#VC%
15370MUL R6,R5,R2
15380MLA R6,R4,R3,R6
15390SUB R6,R9,R6,ASR#VC%
15400STMIA R10!,{R4-R6}
15410LDMIA R12!,{R7-R9}:; Position
15420LDMDB R11,{R4-R6}:; Viewer's position
15430SUB R7,R7,R4
15440SUB R8,R8,R5
15450SUB R9,R9,R6
15460MOV R7,R7,ASR#AC%-9
15470MOV R8,R8,ASR#AC%-9
15480MUL R4,R1,R7
15490MUL R6,R0,R8
15500SUB R4,R4,R6
15510MUL R5,R0,R7
15520MLA R5,R1,R8,R5
15530MOV R7,R4,ASR#VC%
15540MOV R8,R5,ASR#VC%
15550MOV R4,R4,ASR#(VC%+9)-AC%
15560MOV R5,R5,ASR#(VC%+9)-AC%
15570MUL R6,R8,R2
15580MLA R6,R7,R3,R6
15590SUB R6,R9,R6,ASR#(VC%+9)-AC%
15600STMIA R10!,{R4-R6}
15610LDMFD R13!,{PC}
15620:
15630]:IFP%>code%+codelen%THENERROR255,"Code isn't big enough"
15640NEXT
15650SYS"OS_ReadVduVariables",vduvars%,scraddr%
15660ENDPROC

�13
�constants
�space%spacelen%:P%=space%
(code%=P%:P%+=codelen%
2pos%=P%:P%+=32*levels%
<!base%=P%:P%+=32*bsize%*bsize%
Fdist%=P%:P%+=depth%*16
Pcol%=P%:P%+=8*32*64
Zshape%=P%:P%+=shapelen%
dpoints%=P%:P%+=8*nopoints%
n(map%=P%:P%+=32*msize%*msize%*levels%
x%land%=P%:P%+=8*lsize%*lsize%*vis%
�hor%=P%:P%+=winc%*width%
�6�P%>space%+spacelen%��255,"Space isn't big enough"
��P%-space%;" bytes used"
�
�assemble
��setupshape
�
�setupcol
��setupdist
�,�T%=0�width%-1:hor%!(T%*winc%)=height%:�
��setupbase:!refresh%=�
��
��map
��fly
��0
�
:
:
"��constants
,spacelen%=&200000
6codelen%=&8000
@AC%=12:VC%=9:SC%=8:DC%=12
JML%=2:loff%=1<<ML%-1
TMS%=5:msize%=1<<MS%
^LS%=MS%+ML%:lsize%=1<<LS%
hBS%=5:bsize%=1<<BS%
r.BC%=AC%+9:LC%=AC%-2:MC%=LC%+ML%:EC%=32-LS%
|-levels%=BC%-MC%+1:vis%=(AC%+14)-LS%-LC%+1
�WW%=6:width%=20<<WW%-4
�HH%=7:height%=16<<HH%-4
�dsteps%=10:winc%=256*8
�!depth%=2*dsteps%+vis%*dsteps%
�4�depth%*8+4>winc%��255,"winc% is not big enough"
�shapelen%=&4000
�nopoints%=64
�/SCW%=8:scwidth%=20<<SCW%-4:sclinc%=scwidth%
�SCH%=8:scheight%=16<<SCH%-4
�#SKW%=SCW%-2:skwidth%=20<<SKW%-4
�$SKH%=SCH%-2:skheight%=16<<SKH%-4
��
�:
��setupcol
�+0
U%=col%
&�A$:ȕA$<>"*":L%=�(A$)/2-1
0�T%=0�31:B%=8*L%*T%/32
:b!U%=�("&"+�A$,1+2*(B%+5>>3),2)+�A$,1+2*(B%+1>>3),2)+�A$,1+2*(B%+4>>3),2)+�A$,1+2*(B%+0>>3),2))
DcU%!4=�("&"+�A$,1+2*(B%+3>>3),2)+�A$,1+2*(B%+7>>3),2)+�A$,1+2*(B%+2>>3),2)+�A$,1+2*(B%+6>>3),2))
NU%+=8:�
X	�A$:�
b�
l:
v�"2BA2A3CCCD"
�8�"FBFAF9F8CF","CFCECDCCA3","A3A2A1A00B","0B0A090800"
��"2122234C4D","4D4E4FF0F1"
��"2020212223","234C4D4E4F"
��"2425262758","58595A5BF4"
��"2223444546","464778797A"
��"032C2D2E2F","2FD0D1D2D3"
��"2FD0D1D2D3","D3FCFDFEFF"
��"02032C2D2E","2E2FD0D1D2"
��"060738393A","3A3BD4D5D6"
��"*"
�:
���setupdist
�(maxdist%=(lsize%/2-8)/�(1^2+(5/8)^2)
V%=dist%:�T%=1�dsteps%*2
/!V%=0:V%!4=T%/dsteps%/2*maxdist%/2*(1<<SC%)
)V%!8=(1<<20)/V%!4:V%!12=V%!4<<LC%-SC%
 V%+=16:�
*�U%=0�vis%-1:�T%=1�dsteps%
42!V%=U%:V%!4=maxdist%*2^(T%/dsteps%-1)*(1<<SC%)
>.V%!8=(1<<20)/V%!4:V%!12=V%!4<<(LC%+U%)-SC%
H
V%+=16:�,
R�
\:
f��setupbase
p*U%=base%:�Y%=0�bsize%-1:�X%=0�bsize%-1
z	!U%=0
�
U%!4=0
�WU%!8=(112/((X%-15)*(X%-16)+(Y%-15)*(Y%-16)+64)-0.5)*(1<<SC%)+�(1<<SC%-1)-(1<<SC%-2)
�U%!12=�(1<<SC%-2)
�#U%!16=0:U%!20=0:U%!24=0:U%!28=0
�
U%+=32:�,
��
�:
���setupshape
��P$(nopoints%)
�
P%=shape%
��newshape:� Brick
��point("SWD",-15,-20,-10)
��point("SED",15,-20,-10)
�point("NWD",-15,20,-10)
�point("NED",15,20,-10)
�point("SWU",-15,-20,10)
$�point("SEU",15,-20,10)
.�point("NWU",-15,20,10)
8�point("NEU",15,20,10)
B;�face("SWD","SWU","SED",19):�face("SED","SWU","SEU",19)
L;�face("SED","SEU","NED",19):�face("NED","SEU","NEU",19)
V;�face("NED","NEU","NWD",19):�face("NWD","NEU","NWU",19)
`;�face("NWD","NWU","SWD",19):�face("SWD","NWU","SWU",19)
j;�face("SWU","NWU","SEU",19):�face("SEU","NWU","NEU",19)
t;�face("NWD","SWD","NED",19):�face("NED","SWD","SED",19)
~
�endshape
�6�P%>shape%+shapelen%��255,"Shape isn't big enough"
��
�:
���newshape
�pflag%=�
�nopoints%=0:nofaces%=0
�pstart%=P%:P%+=4
��
�:
���point(N$,X,Y,Z)
�0�pflag%��255,"Points must come before faces"
�9!P%=X*(1<<AC%):P%!4=Y*(1<<AC%):P%!8=Z*(1<<AC%):P%+=12
!P$(nopoints%)=N$:nopoints%+=1

�
:
��face(P1$,P2$,P3$,C%)
(&�pflag%�pflag%=�:fstart%=P%:P%+=4
29P1%=�pointno(P1$):P2%=�pointno(P2$):P3%=�pointno(P3$)
<BA1%=pstart%+4+P1%*12:A2%=pstart%+4+P2%*12:A3%=pstart%+4+P3%*12
F>NX=(A3%!4-A1%!4)*(A2%!8-A1%!8)-(A3%!8-A1%!8)*(A2%!4-A1%!4)
P:NY=(A3%!8-A1%!8)*(!A2%-!A1%)-(!A3%-!A1%)*(A2%!8-A1%!8)
Z:NZ=(!A3%-!A1%)*(A2%!4-A1%!4)-(A3%!4-A1%!4)*(!A2%-!A1%)
d(F=(1<<VC%)/�(NX*NX+NY*NY+NZ*NZ)/�(3)
n!P%=P1%:P%!4=P2%:P%!8=P3%
x$P%!12=NX*F:P%!16=NY*F:P%!20=NZ*F
�P%!24=C%:P%+=28
�nofaces%+=1
��
�:
�ݤpointno(N$)
��nopoints%=0�=-1
�H%=-1:�T%=0�nopoints%-1
�#�P$(T%)=N$�H%=T%:T%=nopoints%-1
�	�:=H%
�:
���endshape
�(!pstart%=nopoints%:!fstart%=nofaces%
��
:
	��map
�
"/view%!12=0:view%!16=0:view%!20=0:view%!24=0
,!display%=vis%-1:ȗ�640,512
6�:ȗX%,Y%,Z%:ȗ�640,512
@PP%=pos%+32*!display%
JB!view%+=(X%-640)*(1<<PP%!24-4):view%!4+=(Y%-512)*(1<<PP%!24-4)
T6�(-104)�!display%<vis%-1�!display%+=1:�:���(-104)
^1�(-103)�!display%>0�!display%-=1:�:���(-103)
h�(-74)�!refresh%=�
r
�landgen%
|�testland%
���(-99)
��:���(-99)
�:LX%=(!view%>>LC%)�lsize%-1:LY%=(view%!4>>LC%)�lsize%-1
�<view%!8=(land%!(8*(LX%+lsize%*LY%))<<LC%-SC%)+(1<<AC%+4)
��
�:
�	��fly
�B%=0
�A%=0:V%=0:NT%=�
��:ȗX%,Y%,Z%
�'FT%=�-NT%:NT%+=FT%:�FT%>100�FT%=100
�&B%=B%+FT%*10�&FFFF:A=2*�*B%/&10000
�5testpos%!0=�(A)*(1<<VC%):testpos%!4=�(A)*(1<<VC%)
2testpos%!12=-testpos%!4:testpos%!16=testpos%!0

�Z%=4�
 view%!0+=view%!12<<AC%+5-VC%
& view%!4+=view%!16<<AC%+5-VC%
0 view%!8+=view%!20<<AC%+5-VC%
:�
D3A%=A%+(FT%*(640-X%)>>9-7)�&FFFF:A=2*�*A%/&10000
N1view%!12=�(A)*(1<<VC%):view%!16=�(A)*(1<<VC%)
X=view%!20=(512-Y%)>>9-(VC%-1):view%!24=(640-X%)>>9-(VC%-1)
b
�Z%=4�
cV%=0
l view%!0-=view%!12<<AC%+5-VC%
v view%!4-=view%!16<<AC%+5-VC%
� view%!8-=view%!20<<AC%+5-VC%
��
�(�Z%=2�V%-=(1<<AC%-10)*FT%:�V%<0�V%=0
�6�Z%=1�V%+=(1<<AC%-10)*FT%:�V%>(1<<AC%)�V%=(1<<AC%)
�!view%!0+=V%*FT%*view%!12>>VC%
�!view%!4+=V%*FT%*view%!16>>VC%
�!view%!8+=V%*FT%*view%!20>>VC%
�
�landgen%
��drawframe%
���(-99)
��:���(-99)
��
�:

��testcol
-ș"OS_ReadVduVariables",vduvars%,scraddr%
2V%=col%:�T%=0�31:S%=!scraddr%+(T%<<3):�U%=0�63
 !S%=!V%:S%!4=!V%
*'S%!sclinc%=V%!4:S%!(sclinc%+4)=V%!4
4+S%!(sclinc%*2)=!V%:S%!(sclinc%*2+4)=!V%
>-S%!(sclinc%*3)=V%!4:S%!(sclinc%*3+4)=V%!4
HS%+=sclinc%*4:V%+=8:�,
R�
\:
f
��testhor
p,�T%=0�width%-1:X%=T%*16:V%=hor%+T%*winc%
z�U%=0�depth%
� Y%=959-2*!V%:�X%,Y%,X%+15,Y%
�V%+=8:�,
��
�:
���testpoints
�U%=points%:�T%=1�8
�,Ȓ!U%>>(SCW%+DC%)-10,U%!4>>(SCH%+DC%)-10
�U%+=8:�
��
�:
���testmatrix
��drawshape%
��plotblob(0,0,0,1<<AC%)
	"�plotblob(4<<AC%,0,0,1<<AC%-1)
	"�plotblob(0,4<<AC%,0,1<<AC%-1)
	"�plotblob(0,0,4<<AC%,1<<AC%-1)
	$�
	.:
	8��plotblob(X%,Y%,Z%,R%)
	BBPY%=(X%*matrix%!4+Y%*matrix%!16+Z%*matrix%!28>>VC%)+matrix%!40
	L
�PY%<=0��
	VBPX%=(X%*matrix%!0+Y%*matrix%!12+Z%*matrix%!24>>VC%)+matrix%!36
	`BPZ%=(X%*matrix%!8+Y%*matrix%!20+Z%*matrix%!32>>VC%)+matrix%!44
	j+F=1024/PY%:ȏȐ640+F*PX%,512+F*PZ%,F*R%
	t�
	~:
	�ݤadr(R%,A%,I%)
	�,�(P%�3)<>0��"Code isn't word aligned!":�
	��(T%�2)=0�P%+=I%<<2:=T%
	�(�N%,O%,H%,U%:H%=A%-(P%+8):N%=0:O%=15
	��U%=1�I%:�H%=0�
	�[OPT T%:MOV R%,O%:]
	� �ȕ(H%�3)=0:H%=H%>>2:N%+=2:�
	��(H%�256)=0�
	�0[OPT T%:ADD R%,O%,#(H%�255)<<N%:]:H%-=H%�255
	�9�[OPT T%:SUB R%,O%,#(256-H%�255)<<N%:]:H%+=256-H%�255
	��
	�
�:O%=R%:�
J�H%<>0��"Could not ADR to ";A%;" in ";I%;" instructions (R%=";R%;")":�

=T%
:
ݤregisterj(J%,N%)
(J%!(N%<<2)=P%-J%
2=T%
<:
F��assemble
P�T%=0�2�2:P%=code%
Z[OPT T%
d:
n
.test%
x#EQUD -1:EQUD -1:EQUD -1:EQUD -1
�#EQUD -1:EQUD -1:EQUD -1:EQUD -1
�#EQUD -1:EQUD -1:EQUD -1:EQUD -1
�#EQUD -1:EQUD -1:EQUD -1:EQUD -1
�:
�.bank%:EQUD 1
�:
�
.view%
�:EQUD 1<<BC%-1:EQUD 1<<BC%+BS%-1:EQUD 1<<AC%:; Position
� EQUD 0:EQUD 1<<VC%:; Heading
�EQUD 0:EQUD 0:; Pitch, Roll
�:
�.refresh%:EQUD -1
�:

.landgen%
STMFD R13!,{R14}
BL calcpos%
"BL copybase%
,BL splitmap%
6BL makeland%
@LDMFD R13!,{PC}
J:
T.drawframe%
^STMFD R13!,{R14}
hBL calchor%
rLDR R1,bank%
|
CMP R1,#1
��Q R1,#2
�MOVNE R1,#1
�STR R1,bank%
�MOV R0,#112
�SWI "OS_Byte"
�MOV R0,#19
�SWI "OS_Byte"
�OPT �adr(0,vduvars%,2)
�OPT �adr(1,scraddr%,2)
�SWI "OS_ReadVduVariables"
�BL drawsky%
�MOV R12,#depth%
�SUB R12,R12,#1
.dloop%
OPT �adr(1,dist%+12,2)
4LDR R1,[R1,R12,ASL#4]:; Distance of strip in AC%
&*; Draw everything further away than R1
0; *** Not done yet ***
:BL drawstrip%
DSUBS R12,R12,#1
NBGE dloop%
XBL drawshape%
bMOV R0,#113
lLDR R1,bank%
vSWI "OS_Byte"
�LDMFD R13!,{PC}
�:
�
.calcpos%
�STMFD R13!,{R14}
�ADR R0,view%
�3LDMIA R0,{R6-R7,R8,R10-R11}:; Position,,Heading
�OPT �adr(12,pos%,2)
�LDR R9,refresh%
�
MOV R8,#0
�STR R8,refresh%
�MOV R8,#MC%
�
.levloop%
�LDMIA R12,{R2-R3}

MOV R0,R6,ASR R8

MOV R1,R7,ASR R8

%SUB R0,R0,#msize%/2-1:; SW corner

 SUB R1,R1,#msize%/2-1

*%BIC R0,R0,#1:; Make sure its even

4BIC R1,R1,#1

>MOV R4,R0,ASL R8

HMOV R5,R1,ASL R8

R
CMP R9,#0

\ADDNE R2,R0,#1<<30

f$STMIA R12,{R0-R1,R2-R3,R4-R5,R8}

pADD R12,R12,#32

zADD R8,R8,#1

�CMP R8,#MC%+levels%

�BLT levloop%

�LDMFD R13!,{PC}

�:

�.copybase%

�STMFD R13!,{R14}

�OPT �adr(12,base%,2)

�4OPT �adr(11,map%+32*msize%*msize%*(levels%-1),3)

�%OPT �adr(0,pos%+32*(levels%-1),2)

�LDMIA R0,{R0-R1}

�MOV R2,#32*bsize%

�MLA R12,R1,R2,R12

�MOV R10,#msize%
.nloop%
SUB R10,R10,#msize%<<16
.eloop%
$
CMP R0,#0
.CMPGE R1,#0
8BLT cbmakesea%
BCMP R0,#bsize%
LCMPLT R1,#bsize%
VBGE cbmakesea%
`ADD R2,R12,R0,ASL#5
jLDMIA R2,{R2-R9}
tSTMIA R11!,{R2-R9}
~B cbreturn%
�:
�.cbmakesea%
�
MOV R2,#0
�
MOV R3,#0
�7MVN R4,#1<<SC%-2:; Sea bed is -1/4 base square deep
�
MOV R5,#0
�STMIA R11,{R2-R5}
�ADD R11,R11,#32
�.cbreturn%
�ADD R0,R0,#1
�ADDS R10,R10,#1<<16
�BLE eloop%
SUB R0,R0,#msize%

ADD R1,R1,#1
ADD R12,R12,#32*bsize%
SUBS R10,R10,#1
(BGT nloop%
2LDMFD R13!,{PC}
<:
F.display%:EQUD levels%-1
P:
Z
.testmap%
dSTMFD R13!,{R14}
nOPT �adr(0,vduvars%,2)
x ADD R1,R0,#scraddr%-vduvars%
�SWI "OS_ReadVduVariables"
�LDR R14,scraddr%
�"ADD R14,R14,#scheight%*sclinc%
�!ADD R14,R14,#sclinc%-4*msize%
�OPT �adr(12,map%,2)
�LDR R0,display%
� ADD R12,R12,R0,ASL#5+MS%+MS%
�MOV R11,#msize%
�.nloop%
�SUB R14,R14,#sclinc%*4
�SUB R11,R11,#msize%<<16
�.eloop%
�LDR R0,[R12,#8]
ADD R12,R12,#32
MOV R0,R0,LSR#SC%-2
� R0,R0,#255
"�R R0,R0,R0,LSL#8
,�R R0,R0,R0,LSL#16
6STR R0,[R14,#sclinc%*3]
@STR R0,[R14,#sclinc%*2]
JSTR R0,[R14,#sclinc%]
TSTR R0,[R14],#4
^ADDS R11,R11,#1<<16
hBLE eloop%
rSUB R14,R14,#4*msize%
|SUBS R11,R11,#1
�BGT nloop%
�LDMFD R13!,{PC}
�:
�.splitmap%
�STMFD R13!,{R14}
�MOV R9,#levels%-1
�
.levloop%
�; R9 is parent level
�OPT �adr(0,pos%,2)
�ADD R0,R0,R9,ASL#5
�%LDMIA R0,{R4-R5}:; Parents origin
�SUB R0,R0,#32
�3LDMIA R0,{R0-R1,R2-R3}:; New origin, Old origin
 MOV R6,R0:; Current position

MOV R7,R1
MOV R8,#1:; Bottom to top
&
CMP R1,R3
0CMPEQ R0,R2
:BEQ smskiplev%
DADDLT R6,R6,#msize%-2
NADDLT R7,R7,#msize%-2
X"RSBLT R8,R8,#0:; Top to bottom
bOPT �adr(12,map%,3)
l-ADD R12,R12,R9,ASL#5+MS%+MS%:; Parent map
v+SUB R11,R12,#32*msize%*msize%:; New map
�+RSB R4,R4,R6,ASR#1:; Pos seen on parent
�RSB R5,R5,R7,ASR#1
�ADD R5,R4,R5,ASL#MS%
�ADD R12,R12,R5,ASL#5
�"SUB R4,R6,R0:; Pos seen on new
�SUB R5,R7,R1
�ADD R5,R4,R5,ASL#MS%
�ADD R11,R11,R5,ASL#5
�"SUB R6,R6,R2:; Pos seen on old
�SUB R7,R7,R3
�)SUB R4,R0,R2:; New origin seen on old
�SUB R5,R1,R3
�ADD R5,R4,R5,ASL#MS%
MOV R10,#msize%
/; At this point, the registers are used as:
"; R12 is addr of pos on parent
 ; R11 is addr of pos on new
*; R10 is msize%
4+; R9 is loop counter (less than 8 bits)
>; R8 is direction
H; R6-R7 are pos on old
R4; R5<<5 is offset from R11 to addr of pos on old
\SUB R9,R9,#msize%<<8
f.nsloop%
pADD R9,R9,#msize%<<20
z.ewloop%
�4; If the square is not on old, then calculate it
�ADR R14,smreturn%
�
CMP R6,#0
�CMPGE R7,#0
�BLT calcsq%
�CMP R6,#msize%
�CMPLT R7,#msize%
�BGE calcsq%
�7; Copy it from its old position to its new position
�STMFD R13!,{R5-R8}
�ADD R8,R11,R5,ASL#5
�LDMIA R8!,{R0-R7}
�STMIA R11!,{R0-R7}
LDMIA R8!,{R0-R7}
STMIA R11!,{R0-R7}
ADD R8,R8,#32*msize%
$ADD R11,R11,#32*msize%
.LDMDB R8!,{R0-R7}
8STMDB R11!,{R0-R7}
BLDMDB R8!,{R0-R7}
LSTMDB R11!,{R0-R7}
VSUB R11,R11,#32*msize%
`LDMFD R13!,{R5-R8}
j.smreturn%
tADD R6,R6,R8,ASL#1
~ADD R11,R11,R8,ASL#5+1
�ADD R12,R12,R8,ASL#5
�SUBS R9,R9,#2<<20
�BGT ewloop%
�SUB R6,R6,R8,ASL#MS%
�SUB R11,R11,R8,ASL#MS%+5
� SUB R12,R12,R8,ASL#(MS%-1)+5
�ADD R7,R7,R8,ASL#1
�ADD R11,R11,R8,ASL#MS%+5+1
�ADD R12,R12,R8,ASL#MS%+5
�ADDS R9,R9,#2<<8
�BLE nsloop%
�.smskiplev%
SUBS R9,R9,#1

BGT levloop%
LDMFD R13!,{PC}
:
(5; Subdivides a map square to make 2x2 map squares
2; R12 is old square
<; R11 is new square
F; R10 is msize
P:
Z.calcsq%
dSTMFD R13!,{R0-R12,R14}
nCLDMIA R12,{R0,R1,R2,R5}:; Old Type, Water level, Height, Random
x; Concoct a random seed
�ADD R8,R2,R2,ROR#17
�ADD R8,R8,R8,ROR#10
�ADD R8,R8,R8,ROR#6
�ADD R12,R12,#8
�SUB R3,R12,#32
�'LDMIA R3,{R3,R6}:; W Height, Random
�SUB R4,R12,R10,ASL#5
�'LDMIA R4,{R4,R7}:; S Height, Random
�ADD R4,R4,R2,ASL#1
�ADD R7,R7,R5,ASL#1
�ADD R3,R3,R4
�ADD R6,R6,R7
�MOV R3,R3,ASR#2-1
MOV R6,R6,ASR#2
ADD R8,R8,R8,ROR#4
MOV R9,R8,LSR#32-6
"MUL R9,R5,R9
,SUB R9,R9,R5,ASL#5
6ADD R3,R3,R9,ASR#5-1
@ADD R8,R8,R8,ROR#4
J ADDS R6,R6,R8,ASR#31-(SC%-5)
TMOVLT R6,#0
^/STMIA R11,{R0,R1,R3,R6}:; New SW Type etc..
hADD R11,R11,#32
rADD R3,R12,#32
|'LDMIA R3,{R3,R6}:; E Height, Random
�ADD R4,R3,R4
�ADD R7,R6,R7
�MOV R4,R4,ASR#2-1
�MOV R7,R7,ASR#2
�ADD R8,R8,R8,ROR#4
�MOV R9,R8,LSR#32-6
�MUL R9,R5,R9
�SUB R9,R9,R5,ASL#5
�ADD R4,R4,R9,ASR#5-1
�ADD R8,R8,R8,ROR#4
� ADDS R7,R7,R8,ASR#31-(SC%-5)
�MOVLT R7,#0
�/STMIA R11,{R0,R1,R4,R7}:; New SE Type etc..
ADD R11,R11,R10,ASL#5
ADD R4,R12,R10,ASL#5
'LDMIA R4,{R4,R7}:; N Height, Random
&ADD R4,R4,R2,ASL#1
0ADD R7,R7,R5,ASL#1
:ADD R3,R3,R4
DADD R6,R6,R7
NMOV R3,R3,ASR#2-1
XMOV R6,R6,ASR#2
bADD R8,R8,R8,ROR#4
lMOV R9,R8,LSR#32-6
vMUL R9,R5,R9
�SUB R9,R9,R5,ASL#5
�ADD R3,R3,R9,ASR#5-1
�ADD R8,R8,R8,ROR#4
� ADDS R6,R6,R8,ASR#31-(SC%-5)
�MOVLT R6,#0
�/STMIA R11,{R0,R1,R3,R6}:; New NE Type etc..
�SUB R11,R11,#32
�SUB R3,R12,#32
�-LDMIA R3,{R3,R6}:; W Height, Random again
�ADD R4,R3,R4
�ADD R7,R6,R7
�MOV R4,R4,ASR#2-1
�MOV R7,R7,ASR#2
ADD R8,R8,R8,ROR#4
MOV R9,R8,LSR#32-6
MUL R9,R5,R9
 SUB R9,R9,R5,ASL#5
*ADD R4,R4,R9,ASR#5-1
4ADD R8,R8,R8,ROR#4
> ADDS R7,R7,R8,ASR#31-(SC%-5)
HMOVLT R7,#0
R/STMIA R11,{R0,R1,R4,R7}:; New NW Type etc..
\SUB R11,R11,R10,ASL#5
fLDMFD R13!,{R0-R12,PC}
p:
z.testland%
�STMFD R13!,{R14}
�OPT �adr(0,vduvars%,2)
� ADD R1,R0,#scraddr%-vduvars%
�SWI "OS_ReadVduVariables"
�LDR R14,scraddr%
�"ADD R14,R14,#scheight%*sclinc%
�OPT �adr(12,land%+4,3)
�LDR R0,display%
� ADD R12,R12,R0,ASL#3+LS%+LS%
�OPT �adr(1,pos%+24,2)
�LDR R1,[R1,R0,ASL#5]
�OPT �adr(2,view%,2)
�LDMIA R2,{R2-R3}
MOV R2,R2,ASR R1
MOV R3,R3,ASR R1
5SUB R2,R2,#msize%/2-1:; SW corner of visible area
$SUB R3,R3,#msize%/2-1
.MOV R2,R2,ASL#ML%
8MOV R3,R3,ASL#ML%
BOPT �adr(10,col%,2)
LMOV R11,#lsize%-8
V.nloop%
`SUB R14,R14,#sclinc%*2
jSUB R11,R11,#lsize%-8<<16
t.eloop%
~� R0,R2,#lsize%-1
�� R1,R3,#lsize%-1
�ADD R0,R0,R1,ASL#LS%
�LDR R0,[R12,R0,ASL#3]
�ADD R0,R10,R0,ASL#3
�%LDMIA R0,{R0-R1}:; Dither pattern
�MOV R4,R0,LSL#16
�MOV R5,R1,LSL#16
�ADD R2,R2,#1
�� R0,R2,#lsize%-1
�� R1,R3,#lsize%-1
�ADD R0,R0,R1,ASL#LS%
�LDR R0,[R12,R0,ASL#3]
ADD R0,R10,R0,ASL#3

%LDMIA R0,{R0-R1}:; Dither pattern
�R R4,R4,R0,LSR#16
�R R5,R5,R1,LSR#16
(MOV R4,R4,ROR#16
2MOV R5,R5,ROR#16
<STR R4,[R14,#sclinc%]
FSTR R5,[R14],#4
PADD R2,R2,#1
ZADDS R11,R11,#2<<16
dBLE eloop%
nSUB R2,R2,#lsize%-8
xSUB R14,R14,#2*(lsize%-8)
�ADD R3,R3,#1
�SUB R14,R14,#sclinc%*2
�SUB R11,R11,#lsize%-8<<16
�.eloop%
�� R0,R2,#lsize%-1
�� R1,R3,#lsize%-1
�ADD R0,R0,R1,ASL#LS%
�LDR R0,[R12,R0,ASL#3]
�ADD R0,R10,R0,ASL#3
�%LDMIA R0,{R0-R1}:; Dither pattern
�MOV R4,R0,LSR#16
�MOV R5,R1,LSR#16
�ADD R2,R2,#1
� R0,R2,#lsize%-1
� R1,R3,#lsize%-1
ADD R0,R0,R1,ASL#LS%
"LDR R0,[R12,R0,ASL#3]
,ADD R0,R10,R0,ASL#3
6%LDMIA R0,{R0-R1}:; Dither pattern
@�R R4,R4,R0,LSL#16
J�R R5,R5,R1,LSL#16
TSTR R4,[R14,#sclinc%]
^STR R5,[R14],#4
hADD R2,R2,#1
rADDS R11,R11,#2<<16
|BLE eloop%
�SUB R2,R2,#lsize%-8
�SUB R14,R14,#2*(lsize%-8)
�ADD R3,R3,#1
�SUBS R11,R11,#2
�BGT nloop%
�LDMFD R13!,{PC}
�:
�.makeland%
�STMFD R13!,{R14}
�MOV R7,#vis%-1
�
.levloop%
�OPT �adr(0,pos%,2)
�ADD R0,R0,R7,ASL#5
DLDMIA R0,{R0-R1,R2-R3,R4-R5,R9}:; New origin, Old origin,, Scale

CMP R0,R2
CMPEQ R1,R3
&BEQ mlendlev%
0OPT �adr(12,map%,3)
: ADD R12,R12,R7,ASL#5+MS%+MS%
DOPT �adr(8,land%,3)
NADD R8,R8,R7,ASL#3+LS%+LS%
XMOV R10,#msize%
bSUB R7,R7,#msize%-1<<8
l.nloop%
vADD R7,R7,#msize%-1<<20
�.eloop%
�� R4,R0,#(1<<MS%)-1
�� R5,R1,#(1<<MS%)-1
�ADD R11,R8,R4,ASL#ML%+3
� ADD R11,R11,R5,ASL#ML%+3+LS%
�ADR R14,mlreturn%
�SUBS R4,R0,R2
�SUBGES R5,R1,R3
�BLT calclsq%
�CMP R4,#msize%-1
�CMPLT R5,#msize%-1
�BGE calclsq%
�.mlreturn%
ADD R0,R0,#1
ADD R12,R12,#32
SUBS R7,R7,#1<<20
 BGE eloop%
*SUB R0,R0,#msize%-1
4SUB R12,R12,#32*(msize%-1)
>ADD R1,R1,#1
HADD R12,R12,#32*msize%
RADDS R7,R7,#1<<8
\BLT nloop%
f.mlendlev%
pSUBS R7,R7,#1
zBGE levloop%
�LDMFD R13!,{PC}
�:
�>; Subdivides a map square to make 4x4 land squares (ML%=2)
�; R12 is old square
�; R11 is new square
�; R10 is msize
�;; R9 is scale (log2 size of map square in world coords)
�:
�
.calclsq%
�STMFD R13!,{R0-R12,R14}
�6SUB R9,R9,#SC%:; Log2 square coord in world coords
�; Get the heights
�ILDMIB R12,{R0,R2,R8}:; Water level, SW height (in square coords), rnd
ADD R12,R12,#8
ADD R3,R12,#32
%LDMIA R3,{R3,R7}:; SE height, rnd
$ADD R8,R8,R7
.ADD R12,R12,R10,ASL#5
8&LDMIA R12,{R4,R7}:; NW height, rnd
BADD R8,R8,R7
LADD R5,R12,#32
V%LDMIA R5,{R5,R7}:; NE height, rnd
`ADD R8,R8,R7
j; Calculate average height
tADD R1,R2,R3
~ADD R1,R1,R4
�ADD R1,R1,R5
�MOV R1,R1,ASR#2
� ; Calculate land base colour
�$MOV R7,R1,ASL R9:; Height in AC%
�>ADD R7,R7,R8,ASL#(AC%+9)-(SC%+1):; Bumpy ground seems high
�MOV R8,#5<<5:; Grass
�CMP R7,#128<<AC%
�MOVGE R8,#7<<5:; Bracken
�CMP R7,#256<<AC%
�MOVGE R8,#9<<5:; Heather
�CMP R7,#384<<AC%
�!MOVGE R8,#11<<5:; Rough grass
CMP R7,#512<<AC%

MOVGE R8,#13<<5:; Rocks
CMP R7,#640<<AC%
MOVGE R8,#15<<5:; Snow
(%SUB R7,R5,R2:; SW facing slope<<3
2+MOV R7,R7,ASR#SC%-4:; Approx range +-32
<ADDS R7,R7,#24
FMOVLT R7,#0
PCMP R7,#60
ZMOVGT R7,#60
dADD R8,R8,R7
n; Calculate water colour
xSUBS R7,R0,R1
�MOVLT R7,#0
�MOV R7,R7,ASL R9
�.MOV R7,R7,ASR#AC%-1:; Depth in half metres
�MOV R1,#0<<6:; Sea blue
�CMP R7,#64
�MOVGE R7,R7,ASR#4
�ADDGE R1,R1,#16
�CMP R7,#16
�MOVGE R7,R7,ASR#2
�ADDGE R1,R1,#8
�
CMP R7,#8
�MOVGE R7,R7,ASR#1
�ADDGE R1,R1,#4
ADD R1,R1,R7
CMP R1,#31
MOVGT R1,#31
"; Generate a random seed
,� R14,R2,R5,ROR#17
6� R14,R14,R3,ROR#13
@� R14,R14,R4,ROR#10
JADD R14,R14,R14,ROR#6
T; Calculate gradients
^SUB R4,R4,R2
hSUB R5,R5,R3
rADD R2,R4,R2,ASL#3
|ADD R3,R5,R3,ASL#3
�SUB R3,R3,R2:; dH/dE<<3
�SUB R5,R5,R4:; d2H/dNdE
�"ADD R2,R3,R2,ASL#3:; Height<<6
�!ADD R4,R5,R4,ASL#3:; dH/dN<<3
�*; At this point, registers are used as
�); R0,R1 are water level, water colour
�; R2-R5 are gradients
�; R8 is land colour
�; R9-R12 as on entry
�; R14 is rnd seed
�
MOV R9,#4
�.nloop%
�]:�U%=0�3:[OPT T%
 MOV R6,R2,ASR#6-2
 ADD R14,R14,R14,ROR#2
 ADD R7,R8,R14,LSR#32-2
 &CMP R6,R0,ASL#2
 0MOVLT R6,R0,ASL#2
 :MOVLT R7,R1
 DSTMIA R11!,{R6,R7}
 NADD R2,R2,R3,ASL#1
 X]:�:[OPT T%
 bSUB R11,R11,#8*4
 lSUB R2,R2,R3,ASL#1+2
 vADD R11,R11,R10,ASL#3+ML%
 �ADD R2,R2,R4,ASL#1
 �ADD R3,R3,R5,ASL#1
 �SUBS R9,R9,#1
 �BGT nloop%
 �LDMFD R13!,{R0-R12,PC}
 �:
 �
.calchor%
 �STMFD R13!,{R14}
 �MOV R12,#0
 �.dloop%
 �OPT �adr(0,dist%,2)
 �ADD R0,R0,R12,ASL#4
 �<LDMIA R0,{R0,R8,R9}:; Level, distance in SC%, (1<<21)/R1
!OPT �adr(10,land%,3)
! ADD R10,R10,R0,ASL#3+LS%+LS%
!OPT �adr(7,pos%+24,2)
! LDR R7,[R7,R0,ASL#5]
!*1SUB R7,R7,#ML%:; Log2 size of a square in AC%
!4OPT �adr(0,view%,2)
!>LLDMIA R0,{R0-R1,R2,R3-R4,R5,R6}:; Position, height, heading, pitch, roll
!H%MUL R3,R8,R3:; Heading in SC%+VC%
!RMUL R4,R8,R4
!\)MUL R5,R8,R5:; Pitch, Roll in SC%+VC%
!fMUL R6,R8,R6
!pRSB R11,R7,#EC%
!z'MOV R0,R0,ASL R11:; Position in EC%
!�MOV R1,R1,ASL R11
!�SUB R11,R7,#SC%
!�%MOV R2,R2,ASR R11:; Height in SC%
!�2ADD R0,R0,R3,ASL#EC%-(SC%+VC%):; Move forwards
!�"ADD R1,R1,R4,ASL#EC%-(SC%+VC%)
!�ADD R2,R2,R5,ASR#VC%
!�MOV R3,R3,ASR#WW%
!�MOV R4,R4,ASR#WW%
!�<MOV R5,R3,ASL#EC%-(SC%+VC%):; Right vector (in EC%, SC%)
!�RSB R5,R5,#0
!�MOV R4,R4,ASL#EC%-(SC%+VC%)
!�MOV R6,R6,ASR#WW%+VC%
!�BSUB R0,R0,R4,ASL#WW%-1:; Move left 1/2 screen except 1/2 pixel
"SUB R1,R1,R5,ASL#WW%-1
"SUB R2,R2,R6,ASL#WW%-1
"SUB R0,R0,R4,ASL#WW%-3
"$SUB R1,R1,R5,ASL#WW%-3
".SUB R2,R2,R6,ASL#WW%-3
"8ADD R0,R0,R4,ASR#1
"BADD R1,R1,R5,ASR#1
"LADD R2,R2,R6,ASR#1
"V&ADD R2,R2,R8,ASR#1:; Up 1/2 screen
"j%ADD R2,R2,R8,ASR#HH%+1:; Rounding
"tOPT �adr(11,hor%,3)
"~ADD R11,R11,R12,ASL#3
"�7; At this point, the registers are used as follows:
"�M; R0-R1,R2 are top left of screen, with position in EC% and height in SC%
"�3; R4-R5,R6 is right vector, also in EC% and SC%
"�'; R9 is (1<<21) / (distance in SC%)
"�0; R10 is base address of land for this level
"�"; R11 is hor for this distance
"�; R12 is depth
"�*SUB R0,R0,#loff%<<EC%:; Land is offset
"�SUB R1,R1,#loff%<<EC%
"�SUB R12,R12,#width%<<16
"�.wloop%
"�MOV R7,R0,LSR#EC%
#MOV R8,R1,LSR#EC%
#
ADD R7,R7,R8,ASL#LS%
#ADD R7,R10,R7,ASL#3
#7LDMIA R7,{R3,R7}:; Land height (SC%), colour number
#(.RSBS R3,R3,R2:; Height below top of screen
#2MOVLT R3,#0
#<MUL R3,R9,R3
#FMOV R8,R3,LSR#20-HH%
#PLDR R3,[R11]
#Z
CMP R8,R3
#dMOVGT R8,R3
#n?STMIA R11,{R3,R7,R8}:; Bottom, colour number, top in pixels
#xADD R11,R11,#winc%
#�ADD R0,R0,R4
#�ADD R1,R1,R5
#�ADD R2,R2,R6
#�ADDS R12,R12,#1<<16
#�BLT wloop%
#�ADD R12,R12,#1
#�CMP R12,#depth%
#�BLT dloop%
#�LDMFD R13!,{PC}
#�:
#�.vduvars%:EQUD 148:EQUD -1
#�.scraddr%:EQUD -1
#�:
$#; R12 is depth of strip to draw
$; R0-R11 corrupted
$:
$".drawstrip%
$,STMFD R13!,{R12,R14}
$6LDR R14,scraddr%
$@OPT �adr(11,hor%,3)
$JADD R11,R11,R12,ASL#3
$TOPT �adr(10,col%,2)
$^SUB R12,R12,#width%<<16
$h.wloop%
$r.LDMIA R11,{R0,R1,R2}:; Bottom, colour, top
$|,SUBS R0,R0,R2:; Number of pixels to draw
$�BLE dsendw%
$�ADD R9,R14,R2,ASL#SCW%+1
$�ADD R9,R9,R2,ASL#SCW%-2+1
$�ADD R1,R10,R1,ASL#3
$�LDMIA R1,{R6,R7}
$�
TST R2,#1
$�MOVNE R6,R6,ROR#16
$�MOVNE R7,R7,ROR#16
$�.yloop%
$�]:ȎSCW%-WW%�
$��3:
$�[OPT T%
$�
MOV R8,R6
%STMIA R9,{R6,R8}
%ADD R9,R9,#sclinc%
%
MOV R8,R7
%&STMIA R9,{R7,R8}
%0ADD R9,R9,#sclinc%
%:MOV R6,R6,ROR#16
%DMOV R7,R7,ROR#16
%N]
%X�2:
%b[OPT T%
%lSTR R6,[R9],#sclinc%
%vSTR R7,[R9],#sclinc%
%�MOV R6,R6,ROR#16
%�MOV R7,R7,ROR#16
%�]
%�$:�255,"Only WW%=6 is supported"
%�
�:[OPT T%
%�SUBS R0,R0,#1
%�BGT yloop%
%�.dsendodd%
%�.dsendw%
%�ADD R11,R11,#winc%
%�ADD R14,R14,#1<<SCW%-WW%
%�ADDS R12,R12,#1<<16
%�BLT wloop%
&LDMFD R13!,{R12,PC}
&:
&
.drawsky%
& STMFD R13!,{R14}
&*LDR R14,scraddr%
&4 OPT �adr(12,col%+8*(1<<5),2)
&>OPT �adr(0,view%+20,2)
&H"LDMIA R0,{R0,R1}:; Pitch, Roll
&RMOV R0,R0,ASL#24-VC%
&\MOV R1,R1,ASL#24-SKW%-VC%
&f>SUB R0,R0,R1,ASL#SKW%-1:; Left 1/2 screen except 1/2 pixel
&pSUB R0,R0,R1,ASL#SKW%-3
&zADD R0,R0,R1,ASR#1
&�7ADD R0,R0,#1<<24-1:; Up 1/2 screen except 1/2 pixel
&�SUB R0,R0,#1<<24-SKH%-1
&�ADD R0,R0,R0,ASL#1
&�ADD R1,R1,R1,ASL#1
&�MOV R11,#skwidth%
&�.wloop%
&�SUB R11,R11,#skheight%<<16
&�.hloop%
&�ADD R4,R0,R1
&�ADD R6,R4,R1
&�ADD R8,R6,R1
&�MOV R2,R0,ASR#26-7
&�MOV R4,R4,ASR#26-7
'MOV R6,R6,ASR#26-7
'MOV R8,R8,ASR#26-7
']:�U%=2�8�2:[OPT T%
'$ADDS U%,U%,#32
'.MOVLT U%,#0
'8CMP U%,#127
'BMOVGT U%,#127
'LADD U%,R12,U%,ASL#3
'VLDMIA U%,{U%-(U%+1)}
'`]:�:[OPT T%
'jSTMIA R14,{R2,R4,R6,R8}
'tADD R14,R14,#sclinc%
'~STMIA R14,{R3,R5,R7,R9}
'�ADD R14,R14,#sclinc%
'�]:�U%=2�9:[OPT T%
'�MOV U%,U%,ROR#16
'�]:�:[OPT T%
'�STMIA R14,{R2,R4,R6,R8}
'�ADD R14,R14,#sclinc%
'�STMIA R14,{R3,R5,R7,R9}
'�ADD R14,R14,#sclinc%
'�(SUB R0,R0,#3<<24-SKH%:; Down 1 pixel
'�ADDS R11,R11,#1<<16
'�BLE hloop%
'�"ADD R0,R0,#3<<24:; Up 1 screen
("SUB R14,R14,#scheight%*sclinc%
(
'ADD R0,R0,R1,ASL#2:; Right 2 pixels
(ADD R14,R14,#4<<SCW%-SKW%
(SUBS R11,R11,#4
((BGT wloop%
(2LDMFD R13!,{PC}
(<:
(F; Draws any triangle
(P%; R0-R1, R2-R3, R4-R5 are corners
(Z; Everything preserved
(d:
(n
.plottri%
(xSTMFD R13!,{R0-R12,R14}
(�$; Sort them into ascending order
(�
CMP R3,R1
(�
BGT pt13%
(�
.pt31%
(�
CMP R5,R1
(�BGT pt315%
(�
CMP R5,R3
(�BGT pt351%
(�.pt531%
(�
MOV R6,R0
(�
MOV R0,R4
(�
MOV R4,R6
(�
MOV R6,R1
)
MOV R1,R5
)
MOV R5,R6
)B pt135%
)":
),.pt351%
)6
MOV R6,R0
)@
MOV R0,R2
)J
MOV R2,R4
)T
MOV R4,R6
)^
MOV R6,R1
)h
MOV R1,R3
)r
MOV R3,R5
)|
MOV R5,R6
)�B pt135%
)�:
)�.pt315%
)�
MOV R6,R0
)�
MOV R0,R2
)�
MOV R2,R6
)�
MOV R6,R1
)�
MOV R1,R3
)�
MOV R3,R6
)�B pt135%
)�:
)�
.pt13%
)�
CMP R5,R3
*BGT pt135%
*
CMP R5,R1
*BGT pt153%
*&.pt513%
*0
MOV R6,R0
*:
MOV R0,R4
*D
MOV R4,R2
*N
MOV R2,R6
*X
MOV R6,R1
*b
MOV R1,R5
*l
MOV R5,R3
*v
MOV R3,R6
*�B pt135%
*�:
*�.pt153%
*�
MOV R6,R2
*�
MOV R2,R4
*�
MOV R4,R6
*�
MOV R6,R3
*�
MOV R3,R5
*�
MOV R5,R6
*�.pt135%
*�; Calculate long gradient
*�
MOV R8,#1
*�SUB R7,R5,R1
+SUBS R6,R4,R0
+RSBLT R8,R8,#0
+RSBLT R6,R6,#0
+ 
MOV R9,#0
+*]:�U%=9�1�-1:[OPT T%
+4CMP R7,R6,ASR#U%
+>SUBLE R6,R6,R7,ASL#U%
+HADDLE R9,R9,R8,ASL#U%+DC%
+R]:�:[OPT T%
+\
CMP R6,R7
+fSUBGE R6,R6,R7
+pADDGE R9,R9,R8,ASL#DC%
+z]:�U%=DC%-1�1�-1:[OPT T%
+�RSBS R6,R7,R6,ASL#1
+�ADDLT R6,R6,R7
+�ADDGE R9,R9,R8,ASL#U%
+�]:�:[OPT T%
+�RSBS R6,R7,R6,ASL#1
+�ADDGE R9,R9,R8
+�%; Calculate bottom short gradient
+�
MOV R8,#1
+�SUB R7,R3,R1
+�SUBS R6,R2,R0
+�RSBLT R8,R8,#0
+�RSBLT R6,R6,#0
+�MOV R10,#0
,]:�U%=9�1�-1:[OPT T%
,CMP R7,R6,ASR#U%
,SUBLE R6,R6,R7,ASL#U%
,$ADDLE R10,R10,R8,ASL#U%+DC%
,.]:�:[OPT T%
,8
CMP R6,R7
,BSUBGE R6,R6,R7
,LADDGE R10,R10,R8,ASL#DC%
,V]:�U%=DC%-1�1�-1:[OPT T%
,`RSBS R6,R7,R6,ASL#1
,jADDLT R6,R6,R7
,tADDGE R10,R10,R8,ASL#U%
,~]:�:[OPT T%
,�RSBS R6,R7,R6,ASL#1
,�ADDGE R10,R10,R8
,�"; Calculate top short gradient
,�
MOV R8,#1
,�SUB R7,R5,R3
,�SUBS R6,R4,R2
,�RSBLT R8,R8,#0
,�RSBLT R6,R6,#0
,�
MOV R4,#0
,�]:�U%=9�1�-1:[OPT T%
,�CMP R7,R6,ASR#U%
,�SUBLE R6,R6,R7,ASL#U%
-ADDLE R4,R4,R8,ASL#U%+DC%
-
]:�:[OPT T%
-
CMP R6,R7
-SUBGE R6,R6,R7
-(ADDGE R4,R4,R8,ASL#DC%
-2]:�U%=DC%-1�1�-1:[OPT T%
-<RSBS R6,R7,R6,ASL#1
-FADDLT R6,R6,R7
-PADDGE R4,R4,R8,ASL#U%
-Z]:�:[OPT T%
-dRSBS R6,R7,R6,ASL#1
-nADDGE R4,R4,R8
-x-; Calculate bottom, middle, top in pixels
-�/; Also corrects x to nearest vertical pixel
-�ADD R6,R5,#1<<DC%-1
-�MOV R6,R6,ASR#DC%
-�ADD R5,R3,#1<<DC%-1
-�MOV R5,R5,ASR#DC%
-�RSB R3,R3,R5,ASL#DC%
-�ADD R3,R3,#1<<DC%-1
-�MOV R3,R3,ASR#DC%-6
-�MUL R7,R3,R4
-�ADD R2,R2,R7,ASR#6
-�9STMFD R13!,{R2,R4,R6}:; top short x,dx, top in pixels
-�ADD R4,R1,#1<<DC%-1
-�MOV R4,R4,ASR#DC%
.RSB R2,R1,R4,ASL#DC%
.ADD R2,R2,#1<<DC%-1
.MOV R2,R2,ASR#DC%-6
."MUL R3,R2,R10
.,ADD R1,R0,R3,ASR#6
.6MUL R3,R2,R9
.@ADD R0,R0,R3,ASR#6
.J
MOV R2,R9
.TMOV R3,R10
.^,; At this point registers are used as...
.h; R0,R2 are long x,dx
.r!; R1,R3 are bottom short x,dx
.|(; R4,R5 are bottom, middle in pixels
.�3; top short x,dx and top in pixels are on stack
.�RSBS R8,R4,#0
.�MLAGT R0,R8,R2,R0
.�MLAGT R1,R8,R3,R1
.�ADDGT R4,R4,R8
.�OPT �adr(7,col%,2)
.�ADD R7,R7,R11,ASL#3
.�LDMIA R7,{R7,R11}
.�
TST R4,#2
.�MOVNE R7,R7,ROR#16
.�MOVNE R11,R11,ROR#16
.�
TST R4,#1
.�MOVNE R8,R11
/MOVNE R11,R7
/MOVNE R7,R8,ROR#16
/LDR R12,scraddr%
/&RSB R8,R4,#scheight%
/0ADD R12,R12,R8,ASL#SCW%
/:ADD R12,R12,R8,ASL#SCW%-2
/D
MOV R6,R5
/NCMP R6,#scheight%
/XMOVGT R6,#scheight%
/bSUBS R4,R6,R4
/l SUBLE R6,R6,R4:; R6 = old R4
/vBLE ptnobottom%
/�.yloop%
/�SUB R12,R12,#sclinc%
/�BL drawline%
/�ADD R0,R0,R2
/�ADD R1,R1,R3
/�MOV R8,R11
/�MOV R11,R7
/�MOV R7,R8,ROR#16
/�SUBS R4,R4,#1
/�BGT yloop%
/�.ptnobottom%
/�9LDMFD R13!,{R1,R3,R4}:; short top x,dx, top in pixels
/�
CMP R6,#0
0SWILT &141
0SUBS R8,R6,R5
0MLAGT R1,R8,R3,R1
0 CMP R4,#scheight%
0*MOVGT R4,#scheight%
04SUBS R4,R4,R6
0>BLE ptnotop%
0H.yloop%
0RSUB R12,R12,#sclinc%
0\BL drawline%
0fADD R0,R0,R2
0pADD R1,R1,R3
0zMOV R8,R11
0�MOV R11,R7
0�MOV R7,R8,ROR#16
0�SUBS R4,R4,#1
0�BGT yloop%
0�
.ptnotop%
0�LDMFD R13!,{R0-R12,PC}
0�:
0�; Draws a horizontal line
0�2; R0 is left end, R1 is right end, both in DC%
0� ; R12 is screen line address
0�; R11 is colour
0�; Corrupts R0-R2,R8-R12
0�:
1.drawline%
1!STMFD R13!,{R0-R2,R8-R12,R14}
1
CMP R0,R1
1$MOVGT R2,R0
1.MOVGT R0,R1
18MOVGT R1,R2
1BCMP R0,#0<<DC%
1LMOVLT R0,#0<<DC%
1VCMP R1,#scwidth%<<DC%
1`MOVGT R1,#scwidth%<<DC%
1jMOV R0,R0,ASR#DC%
1tMOV R1,R1,ASR#DC%
1~
CMP R0,R1
1�"LDMGEFD R13!,{R0-R2,R8-R12,PC}
1�MOV R2,R0,ASR#2
1�ADD R12,R12,R2,ASL#2
1�CMP R2,R1,ASR#2
1�BEQ dhsmall%
1�MOV R8,R11
1�MOV R9,R11
1�MOV R10,R11
1�SUB R1,R1,R0
1�� R0,R0,#3
1�ADR R2,dhleftj%
1�LDR R0,[R2,R0,ASL#2]
2ADD PC,R2,R0
2
:
2
.dhleftj%
2]:�U%=0�3:[OPT T%
2(EQUD dhend%-dhleftj%
22]:�:[OPT T%
2<:
2FOPT �registerj(dhleftj%,0)
2P.dhmiddle%
2ZMOV R2,R1,ASR#4
2d� R1,R1,#15
2nADR R0,dhrightj%
2xLDR R1,[R0,R1,ASL#2]
2�
CMP R2,#0
2�ADDLE PC,R0,R1
2�.xloop%
2�STMIA R12!,{R8-R11}
2�SUBS R2,R2,#1
2�BGT xloop%
2�ADD PC,R0,R1
2�:
2�]:�U%=1�3:[OPT T%
2�OPT �registerj(dhleftj%,U%)
2�LDR R2,[R12]
2�MOV R2,R2,LSL#4-U%<<3
2��R R2,R2,R11,LSR#U%<<3
3MOV R2,R2,ROR#4-U%<<3
3STR R2,[R12],#4
3SUB R1,R1,#4-U%
3"B dhmiddle%
3,]:�:[OPT T%
36:
3@.dhrightj%
3J]:�U%=0�15:[OPT T%
3TEQUD dhend%-dhrightj%
3^]:�:[OPT T%
3h:
3r%]:�U%=4�15�4:W%=8+(U%>>2):[OPT T%
3| OPT �registerj(dhrightj%,U%)
3�STMIA R12,{R8-(W%-1)}
3� LDMFD R13!,{R0-R2,R8-R12,PC}
3�]:�:[OPT T%
3�:
3�6]:�U%=0�15�4:�V%=1�3:S%=U%+V%:W%=8+(U%>>2):[OPT T%
3� OPT �registerj(dhrightj%,S%)
3�LDR R0,[R12,#U%]
3�MOV R0,R0,LSR#V%<<3
3��R R0,R0,W%,LSL#4-V%<<3
3�MOV W%,R0,ROR#4-V%<<3
3�STMIA R12,{R8-W%}
3� LDMFD R13!,{R0-R2,R8-R12,PC}
3�]:�,:[OPT T%
4:
4
.dhsmall%
4� R0,R0,#3
4&� R1,R1,#3
40ADD R1,R0,R1,ASL#2
4:ADR R0,dhsmallj%
4DLDR R1,[R0,R1,ASL#2]
4NADD PC,R0,R1
4X:
4b.dhsmallj%
4l]:�V%=0�3:�U%=0�3:[OPT T%
4vEQUD dhend%-dhsmallj%
4�]:�,:[OPT T%
4�:
4� ]:�U%=0�2:�V%=U%+1�3:[OPT T%
4�(OPT �registerj(dhsmallj%,U%+(V%<<2))
4�LDR R0,[R12]
4�]:�U%>0�
4�[OPT T%
4�MOV R0,R0,ROR#U%<<3
4�MOV R11,R11,ROR#U%<<3
4�]
4�
�:[OPT T%
4�MOV R0,R0,LSR#V%-U%<<3
4�!�R R0,R0,R11,LSL#4-(V%-U%)<<3
5MOV R0,R0,ROR#4-V%<<3
5STR R0,[R12]
5 LDMFD R13!,{R0-R2,R8-R12,PC}
5 ]:�,:[OPT T%
5*:
54.dhend%
5> LDMFD R13!,{R0-R2,R8-R12,PC}
5H:
5R
.testpos%
5\(EQUD 1<<VC%:EQUD 0:EQUD 0:; E-vector
5f(EQUD 0:EQUD 1<<VC%:EQUD 0:; N-vector
5p(EQUD 0:EQUD 0:EQUD 1<<VC%:; U-vector
5z)EQUD 0:EQUD 0:EQUD 10<<AC%:; Position
5�:
5�.matrix%
5�(EQUD 1<<VC%:EQUD 0:EQUD 0:; E-vector
5�(EQUD 0:EQUD 1<<VC%:EQUD 0:; N-vector
5�(EQUD 0:EQUD 0:EQUD 1<<VC%:; U-vector
5�2EQUD 0:EQUD 0:EQUD 10<<AC%:; Relative position
5�,EQUD 0:EQUD 0:EQUD 1<<VC%:; Light vector
5�:
5�#; Draws a vector graphics shape
5� ; Uses testpos at the moment
5�/; Uses shape data from shape% at the moment
5�5; Eventually, it will expect matrix% to be set up
5�);            and R12 to be shape data
6:
6.drawshape%
6STMFD R13!,{R14}
6$ADR R12,testpos%
6.BL makematrix%
68; Fill points%
6BOPT �adr(12,shape%,2)
6LOPT �adr(11,points%,2)
6VLDR R10,[R12],#4
6`.ploop%
6jLDMIA R12!,{R0-R2}
6tADR R9,matrix%
6~LDMIA R9!,{R3-R5}
6�MUL R6,R0,R3
6�MUL R7,R0,R4
6�MUL R8,R0,R5
6�LDMIA R9!,{R3-R5}
6�MLA R6,R1,R3,R6
6�MLA R7,R1,R4,R7
6�MLA R8,R1,R5,R8
6�LDMIA R9!,{R3-R5}
6�MLA R6,R2,R3,R6
6�MLA R7,R2,R4,R7
6�MLA R8,R2,R5,R8
6�LDMIA R9!,{R3-R5}
7%ADD R6,R3,R6,ASR#VC%:; Apparent E
7
%ADD R7,R4,R7,ASR#VC%:; Apparent N
7%ADD R8,R5,R8,ASR#VC%:; Apparent U
7CMP R7,#1<<10
7(MOVLT R0,#1<<31
72BLT dsbehind%
7<CMP R7,#1<<18
7FMOVGE R6,R6,ASR#8
7PMOVGE R7,R7,ASR#8
7ZMOVGE R8,R8,ASR#8
7dCMP R7,#1<<14
7nMOVGE R6,R6,ASR#4
7xMOVGE R7,R7,ASR#4
7�MOVGE R8,R8,ASR#4
7�CMP R7,#1<<12
7�MOVGE R6,R6,ASR#2
7�MOVGE R7,R7,ASR#2
7�MOVGE R8,R8,ASR#2
7�MOV R0,#1<<22
7�
MOV R9,#0
7�]:�U%=22�1�-1:[OPT T%
7�CMP R7,R0,ASR#U%
7�SUBLE R0,R0,R7,ASL#U%
7�ADDLE R9,R9,#1<<U%
7�]:�:[OPT T%
7�
CMP R7,R0
8ADDLE R9,R9,#1
8MUL R0,R6,R9
8MUL R1,R8,R9
8"MOV R0,R0,ASR#22-(SCW%+DC%)
8,MOV R1,R1,ASR#22-(SCH%+DC%)
86ADD R0,R0,#scwidth%<<DC%-1
8@ADD R1,R1,#scheight%<<DC%-1
8J.dsbehind%
8TSTMIA R11!,{R0-R1}
8^SUBS R10,R10,#1
8hBGT ploop%
8r; Plot the triangles
8|LDR R10,[R12],#4
8�.tloop%
8�#LDMIA R12!,{R0,R2,R4,R6-R8,R11}
8�ADR R1,matrix%+48
8�LDMIA R1,{R1,R3,R5}
8�MUL R1,R6,R1
8�MLA R1,R7,R3,R1
8�MLA R1,R8,R5,R1
8�MOV R1,R1,ASR#VC%+VC%-6
8�
CMP R1,#0
8�MOVLT R1,#0
8�CMP R1,#63
8�MOVGT R1,#63
8�ADD R11,R1,R11,ASL#5
9OPT �adr(5,points%,2)
9ADD R0,R5,R0,ASL#3
9LDMIA R0,{R0-R1}
9&ADD R2,R5,R2,ASL#3
90LDMIA R2,{R2-R3}
9:ADD R4,R5,R4,ASL#3
9DLDMIA R4,{R4-R5}
9NCMP R0,#1<<31
9XCMPNE R2,#1<<31
9bCMPNE R4,#1<<31
9lBEQ dsdontplot%
9vSUB R6,R2,R0
9�SUB R7,R5,R1
9�MOV R6,R6,ASR#DC%-4
9�MOV R7,R7,ASR#DC%-4
9�MUL R8,R6,R7
9�SUB R6,R4,R0
9�RSB R7,R3,R1
9�MOV R6,R6,ASR#DC%-4
9�MOV R7,R7,ASR#DC%-4
9�MLA R8,R6,R7,R8
9�
CMP R8,#0
9�BLLT plottri%
9�.dsdontplot%
9�SUBS R10,R10,#1
:BGT tloop%
:LDMFD R13!,{PC}
::
: *; Calculates apparent pos of an object
:*; World pos is in R12
:4:
:>.makematrix%
:HSTMFD R13!,{R14}
:ROPT �adr(10,matrix%,2)
:\OPT �adr(11,view%+12,2)
:f;LDMIA R11,{R0-R1,R2,R3}:; Viewer's heading, pitch, roll
:p!LDMIA R12!,{R7-R9}:; E vector
:zSUB R6,R9,R8
:�SUB R6,R6,R7
:�STR R6,matrix%+48:; Light E
:�MUL R4,R1,R7
:�MUL R6,R0,R8
:�SUB R4,R4,R6
:�MUL R5,R0,R7
:�MLA R5,R1,R8,R5
:�MOV R4,R4,ASR#VC%
:�MOV R5,R5,ASR#VC%
:�MUL R6,R5,R2
:�MLA R6,R4,R3,R6
:�SUB R6,R9,R6,ASR#VC%
:�STMIA R10!,{R4-R6}
;!LDMIA R12!,{R7-R9}:; N vector
;SUB R6,R9,R8
;SUB R6,R6,R7
;$STR R6,matrix%+52:; Light N
;.MUL R4,R1,R7
;8MUL R6,R0,R8
;BSUB R4,R4,R6
;LMUL R5,R0,R7
;VMLA R5,R1,R8,R5
;`MOV R4,R4,ASR#VC%
;jMOV R5,R5,ASR#VC%
;tMUL R6,R5,R2
;~MLA R6,R4,R3,R6
;�SUB R6,R9,R6,ASR#VC%
;�STMIA R10!,{R4-R6}
;�!LDMIA R12!,{R7-R9}:; U vector
;�SUB R6,R9,R8
;�SUB R6,R6,R7
;�STR R6,matrix%+56:; Light U
;�MUL R4,R1,R7
;�MUL R6,R0,R8
;�SUB R4,R4,R6
;�MUL R5,R0,R7
;�MLA R5,R1,R8,R5
;�MOV R4,R4,ASR#VC%
<MOV R5,R5,ASR#VC%
<
MUL R6,R5,R2
<MLA R6,R4,R3,R6
<SUB R6,R9,R6,ASR#VC%
<(STMIA R10!,{R4-R6}
<2!LDMIA R12!,{R7-R9}:; Position
<<)LDMDB R11,{R4-R6}:; Viewer's position
<FSUB R7,R7,R4
<PSUB R8,R8,R5
<ZSUB R9,R9,R6
<dMOV R7,R7,ASR#AC%-9
<nMOV R8,R8,ASR#AC%-9
<xMUL R4,R1,R7
<�MUL R6,R0,R8
<�SUB R4,R4,R6
<�MUL R5,R0,R7
<�MLA R5,R1,R8,R5
<�MOV R7,R4,ASR#VC%
<�MOV R8,R5,ASR#VC%
<�MOV R4,R4,ASR#(VC%+9)-AC%
<�MOV R5,R5,ASR#(VC%+9)-AC%
<�MUL R6,R8,R2
<�MLA R6,R7,R3,R6
<� SUB R6,R9,R6,ASR#(VC%+9)-AC%
<�STMIA R10!,{R4-R6}
<�LDMFD R13!,{PC}
=:
=5]:�P%>code%+codelen%��255,"Code isn't big enough"
=�
="-ș"OS_ReadVduVariables",vduvars%,scraddr%
=,�
�
00000000  0d 00 0a 07 eb 31 33 0d  00 14 0e f2 63 6f 6e 73  |.....13.....cons|
00000010  74 61 6e 74 73 0d 00 1e  1e de 73 70 61 63 65 25  |tants.....space%|
00000020  73 70 61 63 65 6c 65 6e  25 3a 50 25 3d 73 70 61  |spacelen%:P%=spa|
00000030  63 65 25 0d 00 28 19 63  6f 64 65 25 3d 50 25 3a  |ce%..(.code%=P%:|
00000040  50 25 2b 3d 63 6f 64 65  6c 65 6e 25 0d 00 32 1a  |P%+=codelen%..2.|
00000050  70 6f 73 25 3d 50 25 3a  50 25 2b 3d 33 32 2a 6c  |pos%=P%:P%+=32*l|
00000060  65 76 65 6c 73 25 0d 00  3c 21 62 61 73 65 25 3d  |evels%..<!base%=|
00000070  50 25 3a 50 25 2b 3d 33  32 2a 62 73 69 7a 65 25  |P%:P%+=32*bsize%|
00000080  2a 62 73 69 7a 65 25 0d  00 46 1a 64 69 73 74 25  |*bsize%..F.dist%|
00000090  3d 50 25 3a 50 25 2b 3d  64 65 70 74 68 25 2a 31  |=P%:P%+=depth%*1|
000000a0  36 0d 00 50 17 63 6f 6c  25 3d 50 25 3a 50 25 2b  |6..P.col%=P%:P%+|
000000b0  3d 38 2a 33 32 2a 36 34  0d 00 5a 1b 73 68 61 70  |=8*32*64..Z.shap|
000000c0  65 25 3d 50 25 3a 50 25  2b 3d 73 68 61 70 65 6c  |e%=P%:P%+=shapel|
000000d0  65 6e 25 0d 00 64 1e 70  6f 69 6e 74 73 25 3d 50  |en%..d.points%=P|
000000e0  25 3a 50 25 2b 3d 38 2a  6e 6f 70 6f 69 6e 74 73  |%:P%+=8*nopoints|
000000f0  25 0d 00 6e 28 6d 61 70  25 3d 50 25 3a 50 25 2b  |%..n(map%=P%:P%+|
00000100  3d 33 32 2a 6d 73 69 7a  65 25 2a 6d 73 69 7a 65  |=32*msize%*msize|
00000110  25 2a 6c 65 76 65 6c 73  25 0d 00 78 25 6c 61 6e  |%*levels%..x%lan|
00000120  64 25 3d 50 25 3a 50 25  2b 3d 38 2a 6c 73 69 7a  |d%=P%:P%+=8*lsiz|
00000130  65 25 2a 6c 73 69 7a 65  25 2a 76 69 73 25 0d 00  |e%*lsize%*vis%..|
00000140  82 1c 68 6f 72 25 3d 50  25 3a 50 25 2b 3d 77 69  |..hor%=P%:P%+=wi|
00000150  6e 63 25 2a 77 69 64 74  68 25 0d 00 8c 36 e7 50  |nc%*width%...6.P|
00000160  25 3e 73 70 61 63 65 25  2b 73 70 61 63 65 6c 65  |%>space%+spacele|
00000170  6e 25 8c 85 32 35 35 2c  22 53 70 61 63 65 20 69  |n%..255,"Space i|
00000180  73 6e 27 74 20 62 69 67  20 65 6e 6f 75 67 68 22  |sn't big enough"|
00000190  0d 00 96 1c f1 50 25 2d  73 70 61 63 65 25 3b 22  |.....P%-space%;"|
000001a0  20 62 79 74 65 73 20 75  73 65 64 22 0d 00 a0 0d  | bytes used"....|
000001b0  f2 61 73 73 65 6d 62 6c  65 0d 00 aa 0f f2 73 65  |.assemble.....se|
000001c0  74 75 70 73 68 61 70 65  0d 00 b4 0d f2 73 65 74  |tupshape.....set|
000001d0  75 70 63 6f 6c 0d 00 be  0e f2 73 65 74 75 70 64  |upcol.....setupd|
000001e0  69 73 74 0d 00 c8 2c e3  54 25 3d 30 b8 77 69 64  |ist...,.T%=0.wid|
000001f0  74 68 25 2d 31 3a 68 6f  72 25 21 28 54 25 2a 77  |th%-1:hor%!(T%*w|
00000200  69 6e 63 25 29 3d 68 65  69 67 68 74 25 3a ed 0d  |inc%)=height%:..|
00000210  00 d2 1a f2 73 65 74 75  70 62 61 73 65 3a 21 72  |....setupbase:!r|
00000220  65 66 72 65 73 68 25 3d  b9 0d 00 dc 05 f5 0d 00  |efresh%=........|
00000230  e6 08 f2 6d 61 70 0d 00  f0 08 f2 66 6c 79 0d 00  |...map.....fly..|
00000240  fa 06 fd 30 0d 01 04 05  e0 0d 01 0e 05 3a 0d 01  |...0.........:..|
00000250  18 05 3a 0d 01 22 0f dd  f2 63 6f 6e 73 74 61 6e  |..:.."...constan|
00000260  74 73 0d 01 2c 15 73 70  61 63 65 6c 65 6e 25 3d  |ts..,.spacelen%=|
00000270  26 32 30 30 30 30 30 0d  01 36 12 63 6f 64 65 6c  |&200000..6.codel|
00000280  65 6e 25 3d 26 38 30 30  30 0d 01 40 1d 41 43 25  |en%=&8000..@.AC%|
00000290  3d 31 32 3a 56 43 25 3d  39 3a 53 43 25 3d 38 3a  |=12:VC%=9:SC%=8:|
000002a0  44 43 25 3d 31 32 0d 01  4a 18 4d 4c 25 3d 32 3a  |DC%=12..J.ML%=2:|
000002b0  6c 6f 66 66 25 3d 31 3c  3c 4d 4c 25 2d 31 0d 01  |loff%=1<<ML%-1..|
000002c0  54 17 4d 53 25 3d 35 3a  6d 73 69 7a 65 25 3d 31  |T.MS%=5:msize%=1|
000002d0  3c 3c 4d 53 25 0d 01 5e  1d 4c 53 25 3d 4d 53 25  |<<MS%..^.LS%=MS%|
000002e0  2b 4d 4c 25 3a 6c 73 69  7a 65 25 3d 31 3c 3c 4c  |+ML%:lsize%=1<<L|
000002f0  53 25 0d 01 68 17 42 53  25 3d 35 3a 62 73 69 7a  |S%..h.BS%=5:bsiz|
00000300  65 25 3d 31 3c 3c 42 53  25 0d 01 72 2e 42 43 25  |e%=1<<BS%..r.BC%|
00000310  3d 41 43 25 2b 39 3a 4c  43 25 3d 41 43 25 2d 32  |=AC%+9:LC%=AC%-2|
00000320  3a 4d 43 25 3d 4c 43 25  2b 4d 4c 25 3a 45 43 25  |:MC%=LC%+ML%:EC%|
00000330  3d 33 32 2d 4c 53 25 0d  01 7c 2d 6c 65 76 65 6c  |=32-LS%..|-level|
00000340  73 25 3d 42 43 25 2d 4d  43 25 2b 31 3a 76 69 73  |s%=BC%-MC%+1:vis|
00000350  25 3d 28 41 43 25 2b 31  34 29 2d 4c 53 25 2d 4c  |%=(AC%+14)-LS%-L|
00000360  43 25 2b 31 0d 01 86 1a  57 57 25 3d 36 3a 77 69  |C%+1....WW%=6:wi|
00000370  64 74 68 25 3d 32 30 3c  3c 57 57 25 2d 34 0d 01  |dth%=20<<WW%-4..|
00000380  90 1b 48 48 25 3d 37 3a  68 65 69 67 68 74 25 3d  |..HH%=7:height%=|
00000390  31 36 3c 3c 48 48 25 2d  34 0d 01 9a 1a 64 73 74  |16<<HH%-4....dst|
000003a0  65 70 73 25 3d 31 30 3a  77 69 6e 63 25 3d 32 35  |eps%=10:winc%=25|
000003b0  36 2a 38 0d 01 a4 21 64  65 70 74 68 25 3d 32 2a  |6*8...!depth%=2*|
000003c0  64 73 74 65 70 73 25 2b  76 69 73 25 2a 64 73 74  |dsteps%+vis%*dst|
000003d0  65 70 73 25 0d 01 ae 34  e7 64 65 70 74 68 25 2a  |eps%...4.depth%*|
000003e0  38 2b 34 3e 77 69 6e 63  25 8c 85 32 35 35 2c 22  |8+4>winc%..255,"|
000003f0  77 69 6e 63 25 20 69 73  20 6e 6f 74 20 62 69 67  |winc% is not big|
00000400  20 65 6e 6f 75 67 68 22  0d 01 b8 13 73 68 61 70  | enough"....shap|
00000410  65 6c 65 6e 25 3d 26 34  30 30 30 0d 01 c2 10 6e  |elen%=&4000....n|
00000420  6f 70 6f 69 6e 74 73 25  3d 36 34 0d 01 cc 2f 53  |opoints%=64.../S|
00000430  43 57 25 3d 38 3a 73 63  77 69 64 74 68 25 3d 32  |CW%=8:scwidth%=2|
00000440  30 3c 3c 53 43 57 25 2d  34 3a 73 63 6c 69 6e 63  |0<<SCW%-4:sclinc|
00000450  25 3d 73 63 77 69 64 74  68 25 0d 01 d6 1f 53 43  |%=scwidth%....SC|
00000460  48 25 3d 38 3a 73 63 68  65 69 67 68 74 25 3d 31  |H%=8:scheight%=1|
00000470  36 3c 3c 53 43 48 25 2d  34 0d 01 e0 23 53 4b 57  |6<<SCH%-4...#SKW|
00000480  25 3d 53 43 57 25 2d 32  3a 73 6b 77 69 64 74 68  |%=SCW%-2:skwidth|
00000490  25 3d 32 30 3c 3c 53 4b  57 25 2d 34 0d 01 ea 24  |%=20<<SKW%-4...$|
000004a0  53 4b 48 25 3d 53 43 48  25 2d 32 3a 73 6b 68 65  |SKH%=SCH%-2:skhe|
000004b0  69 67 68 74 25 3d 31 36  3c 3c 53 4b 48 25 2d 34  |ight%=16<<SKH%-4|
000004c0  0d 01 f4 05 e1 0d 01 fe  05 3a 0d 02 08 0e dd f2  |.........:......|
000004d0  73 65 74 75 70 63 6f 6c  0d 02 12 07 f7 2b 30 0d  |setupcol.....+0.|
000004e0  02 1c 0b 55 25 3d 63 6f  6c 25 0d 02 26 1e f3 41  |...U%=col%..&..A|
000004f0  24 3a c8 95 41 24 3c 3e  22 2a 22 3a 4c 25 3d a9  |$:..A$<>"*":L%=.|
00000500  28 41 24 29 2f 32 2d 31  0d 02 30 1a e3 54 25 3d  |(A$)/2-1..0..T%=|
00000510  30 b8 33 31 3a 42 25 3d  38 2a 4c 25 2a 54 25 2f  |0.31:B%=8*L%*T%/|
00000520  33 32 0d 02 3a 62 21 55  25 3d a0 28 22 26 22 2b  |32..:b!U%=.("&"+|
00000530  c1 41 24 2c 31 2b 32 2a  28 42 25 2b 35 3e 3e 33  |.A$,1+2*(B%+5>>3|
00000540  29 2c 32 29 2b c1 41 24  2c 31 2b 32 2a 28 42 25  |),2)+.A$,1+2*(B%|
00000550  2b 31 3e 3e 33 29 2c 32  29 2b c1 41 24 2c 31 2b  |+1>>3),2)+.A$,1+|
00000560  32 2a 28 42 25 2b 34 3e  3e 33 29 2c 32 29 2b c1  |2*(B%+4>>3),2)+.|
00000570  41 24 2c 31 2b 32 2a 28  42 25 2b 30 3e 3e 33 29  |A$,1+2*(B%+0>>3)|
00000580  2c 32 29 29 0d 02 44 63  55 25 21 34 3d a0 28 22  |,2))..DcU%!4=.("|
00000590  26 22 2b c1 41 24 2c 31  2b 32 2a 28 42 25 2b 33  |&"+.A$,1+2*(B%+3|
000005a0  3e 3e 33 29 2c 32 29 2b  c1 41 24 2c 31 2b 32 2a  |>>3),2)+.A$,1+2*|
000005b0  28 42 25 2b 37 3e 3e 33  29 2c 32 29 2b c1 41 24  |(B%+7>>3),2)+.A$|
000005c0  2c 31 2b 32 2a 28 42 25  2b 32 3e 3e 33 29 2c 32  |,1+2*(B%+2>>3),2|
000005d0  29 2b c1 41 24 2c 31 2b  32 2a 28 42 25 2b 36 3e  |)+.A$,1+2*(B%+6>|
000005e0  3e 33 29 2c 32 29 29 0d  02 4e 0b 55 25 2b 3d 38  |>3),2))..N.U%+=8|
000005f0  3a ed 0d 02 58 09 f3 41  24 3a ce 0d 02 62 05 e1  |:...X..A$:...b..|
00000600  0d 02 6c 05 3a 0d 02 76  11 dc 22 32 42 41 32 41  |..l.:..v.."2BA2A|
00000610  33 43 43 43 44 22 0d 02  80 38 dc 22 46 42 46 41  |3CCCD"...8."FBFA|
00000620  46 39 46 38 43 46 22 2c  22 43 46 43 45 43 44 43  |F9F8CF","CFCECDC|
00000630  43 41 33 22 2c 22 41 33  41 32 41 31 41 30 30 42  |CA3","A3A2A1A00B|
00000640  22 2c 22 30 42 30 41 30  39 30 38 30 30 22 0d 02  |","0B0A090800"..|
00000650  8a 1e dc 22 32 31 32 32  32 33 34 43 34 44 22 2c  |..."2122234C4D",|
00000660  22 34 44 34 45 34 46 46  30 46 31 22 0d 02 94 1e  |"4D4E4FF0F1"....|
00000670  dc 22 32 30 32 30 32 31  32 32 32 33 22 2c 22 32  |."2020212223","2|
00000680  33 34 43 34 44 34 45 34  46 22 0d 02 9e 1e dc 22  |34C4D4E4F"....."|
00000690  32 34 32 35 32 36 32 37  35 38 22 2c 22 35 38 35  |2425262758","585|
000006a0  39 35 41 35 42 46 34 22  0d 02 a8 1e dc 22 32 32  |95A5BF4"....."22|
000006b0  32 33 34 34 34 35 34 36  22 2c 22 34 36 34 37 37  |23444546","46477|
000006c0  38 37 39 37 41 22 0d 02  b2 1e dc 22 30 33 32 43  |8797A"....."032C|
000006d0  32 44 32 45 32 46 22 2c  22 32 46 44 30 44 31 44  |2D2E2F","2FD0D1D|
000006e0  32 44 33 22 0d 02 bc 1e  dc 22 32 46 44 30 44 31  |2D3"....."2FD0D1|
000006f0  44 32 44 33 22 2c 22 44  33 46 43 46 44 46 45 46  |D2D3","D3FCFDFEF|
00000700  46 22 0d 02 c6 1e dc 22  30 32 30 33 32 43 32 44  |F"....."02032C2D|
00000710  32 45 22 2c 22 32 45 32  46 44 30 44 31 44 32 22  |2E","2E2FD0D1D2"|
00000720  0d 02 d0 1e dc 22 30 36  30 37 33 38 33 39 33 41  |....."060738393A|
00000730  22 2c 22 33 41 33 42 44  34 44 35 44 36 22 0d 02  |","3A3BD4D5D6"..|
00000740  da 08 dc 22 2a 22 0d 02  e4 05 3a 0d 02 ee 0f dd  |..."*"....:.....|
00000750  f2 73 65 74 75 70 64 69  73 74 0d 02 f8 28 6d 61  |.setupdist...(ma|
00000760  78 64 69 73 74 25 3d 28  6c 73 69 7a 65 25 2f 32  |xdist%=(lsize%/2|
00000770  2d 38 29 2f b6 28 31 5e  32 2b 28 35 2f 38 29 5e  |-8)/.(1^2+(5/8)^|
00000780  32 29 0d 03 02 1c 56 25  3d 64 69 73 74 25 3a e3  |2)....V%=dist%:.|
00000790  54 25 3d 31 b8 64 73 74  65 70 73 25 2a 32 0d 03  |T%=1.dsteps%*2..|
000007a0  0c 2f 21 56 25 3d 30 3a  56 25 21 34 3d 54 25 2f  |./!V%=0:V%!4=T%/|
000007b0  64 73 74 65 70 73 25 2f  32 2a 6d 61 78 64 69 73  |dsteps%/2*maxdis|
000007c0  74 25 2f 32 2a 28 31 3c  3c 53 43 25 29 0d 03 16  |t%/2*(1<<SC%)...|
000007d0  29 56 25 21 38 3d 28 31  3c 3c 32 30 29 2f 56 25  |)V%!8=(1<<20)/V%|
000007e0  21 34 3a 56 25 21 31 32  3d 56 25 21 34 3c 3c 4c  |!4:V%!12=V%!4<<L|
000007f0  43 25 2d 53 43 25 0d 03  20 0c 56 25 2b 3d 31 36  |C%-SC%.. .V%+=16|
00000800  3a ed 0d 03 2a 1e e3 55  25 3d 30 b8 76 69 73 25  |:...*..U%=0.vis%|
00000810  2d 31 3a e3 54 25 3d 31  b8 64 73 74 65 70 73 25  |-1:.T%=1.dsteps%|
00000820  0d 03 34 32 21 56 25 3d  55 25 3a 56 25 21 34 3d  |..42!V%=U%:V%!4=|
00000830  6d 61 78 64 69 73 74 25  2a 32 5e 28 54 25 2f 64  |maxdist%*2^(T%/d|
00000840  73 74 65 70 73 25 2d 31  29 2a 28 31 3c 3c 53 43  |steps%-1)*(1<<SC|
00000850  25 29 0d 03 3e 2e 56 25  21 38 3d 28 31 3c 3c 32  |%)..>.V%!8=(1<<2|
00000860  30 29 2f 56 25 21 34 3a  56 25 21 31 32 3d 56 25  |0)/V%!4:V%!12=V%|
00000870  21 34 3c 3c 28 4c 43 25  2b 55 25 29 2d 53 43 25  |!4<<(LC%+U%)-SC%|
00000880  0d 03 48 0d 56 25 2b 3d  31 36 3a ed 2c 0d 03 52  |..H.V%+=16:.,..R|
00000890  05 e1 0d 03 5c 05 3a 0d  03 66 0f dd f2 73 65 74  |....\.:..f...set|
000008a0  75 70 62 61 73 65 0d 03  70 2a 55 25 3d 62 61 73  |upbase..p*U%=bas|
000008b0  65 25 3a e3 59 25 3d 30  b8 62 73 69 7a 65 25 2d  |e%:.Y%=0.bsize%-|
000008c0  31 3a e3 58 25 3d 30 b8  62 73 69 7a 65 25 2d 31  |1:.X%=0.bsize%-1|
000008d0  0d 03 7a 09 21 55 25 3d  30 0d 03 84 0a 55 25 21  |..z.!U%=0....U%!|
000008e0  34 3d 30 0d 03 8e 57 55  25 21 38 3d 28 31 31 32  |4=0...WU%!8=(112|
000008f0  2f 28 28 58 25 2d 31 35  29 2a 28 58 25 2d 31 36  |/((X%-15)*(X%-16|
00000900  29 2b 28 59 25 2d 31 35  29 2a 28 59 25 2d 31 36  |)+(Y%-15)*(Y%-16|
00000910  29 2b 36 34 29 2d 30 2e  35 29 2a 28 31 3c 3c 53  |)+64)-0.5)*(1<<S|
00000920  43 25 29 2b b3 28 31 3c  3c 53 43 25 2d 31 29 2d  |C%)+.(1<<SC%-1)-|
00000930  28 31 3c 3c 53 43 25 2d  32 29 0d 03 98 15 55 25  |(1<<SC%-2)....U%|
00000940  21 31 32 3d b3 28 31 3c  3c 53 43 25 2d 32 29 0d  |!12=.(1<<SC%-2).|
00000950  03 a2 23 55 25 21 31 36  3d 30 3a 55 25 21 32 30  |..#U%!16=0:U%!20|
00000960  3d 30 3a 55 25 21 32 34  3d 30 3a 55 25 21 32 38  |=0:U%!24=0:U%!28|
00000970  3d 30 0d 03 ac 0d 55 25  2b 3d 33 32 3a ed 2c 0d  |=0....U%+=32:.,.|
00000980  03 b6 05 e1 0d 03 c0 05  3a 0d 03 ca 10 dd f2 73  |........:......s|
00000990  65 74 75 70 73 68 61 70  65 0d 03 d4 12 de 50 24  |etupshape.....P$|
000009a0  28 6e 6f 70 6f 69 6e 74  73 25 29 0d 03 de 0d 50  |(nopoints%)....P|
000009b0  25 3d 73 68 61 70 65 25  0d 03 e8 15 f2 6e 65 77  |%=shape%.....new|
000009c0  73 68 61 70 65 3a f4 20  42 72 69 63 6b 0d 03 f2  |shape:. Brick...|
000009d0  1d f2 70 6f 69 6e 74 28  22 53 57 44 22 2c 2d 31  |..point("SWD",-1|
000009e0  35 2c 2d 32 30 2c 2d 31  30 29 0d 03 fc 1c f2 70  |5,-20,-10).....p|
000009f0  6f 69 6e 74 28 22 53 45  44 22 2c 31 35 2c 2d 32  |oint("SED",15,-2|
00000a00  30 2c 2d 31 30 29 0d 04  06 1c f2 70 6f 69 6e 74  |0,-10).....point|
00000a10  28 22 4e 57 44 22 2c 2d  31 35 2c 32 30 2c 2d 31  |("NWD",-15,20,-1|
00000a20  30 29 0d 04 10 1b f2 70  6f 69 6e 74 28 22 4e 45  |0).....point("NE|
00000a30  44 22 2c 31 35 2c 32 30  2c 2d 31 30 29 0d 04 1a  |D",15,20,-10)...|
00000a40  1c f2 70 6f 69 6e 74 28  22 53 57 55 22 2c 2d 31  |..point("SWU",-1|
00000a50  35 2c 2d 32 30 2c 31 30  29 0d 04 24 1b f2 70 6f  |5,-20,10)..$..po|
00000a60  69 6e 74 28 22 53 45 55  22 2c 31 35 2c 2d 32 30  |int("SEU",15,-20|
00000a70  2c 31 30 29 0d 04 2e 1b  f2 70 6f 69 6e 74 28 22  |,10).....point("|
00000a80  4e 57 55 22 2c 2d 31 35  2c 32 30 2c 31 30 29 0d  |NWU",-15,20,10).|
00000a90  04 38 1a f2 70 6f 69 6e  74 28 22 4e 45 55 22 2c  |.8..point("NEU",|
00000aa0  31 35 2c 32 30 2c 31 30  29 0d 04 42 3b f2 66 61  |15,20,10)..B;.fa|
00000ab0  63 65 28 22 53 57 44 22  2c 22 53 57 55 22 2c 22  |ce("SWD","SWU","|
00000ac0  53 45 44 22 2c 31 39 29  3a f2 66 61 63 65 28 22  |SED",19):.face("|
00000ad0  53 45 44 22 2c 22 53 57  55 22 2c 22 53 45 55 22  |SED","SWU","SEU"|
00000ae0  2c 31 39 29 0d 04 4c 3b  f2 66 61 63 65 28 22 53  |,19)..L;.face("S|
00000af0  45 44 22 2c 22 53 45 55  22 2c 22 4e 45 44 22 2c  |ED","SEU","NED",|
00000b00  31 39 29 3a f2 66 61 63  65 28 22 4e 45 44 22 2c  |19):.face("NED",|
00000b10  22 53 45 55 22 2c 22 4e  45 55 22 2c 31 39 29 0d  |"SEU","NEU",19).|
00000b20  04 56 3b f2 66 61 63 65  28 22 4e 45 44 22 2c 22  |.V;.face("NED","|
00000b30  4e 45 55 22 2c 22 4e 57  44 22 2c 31 39 29 3a f2  |NEU","NWD",19):.|
00000b40  66 61 63 65 28 22 4e 57  44 22 2c 22 4e 45 55 22  |face("NWD","NEU"|
00000b50  2c 22 4e 57 55 22 2c 31  39 29 0d 04 60 3b f2 66  |,"NWU",19)..`;.f|
00000b60  61 63 65 28 22 4e 57 44  22 2c 22 4e 57 55 22 2c  |ace("NWD","NWU",|
00000b70  22 53 57 44 22 2c 31 39  29 3a f2 66 61 63 65 28  |"SWD",19):.face(|
00000b80  22 53 57 44 22 2c 22 4e  57 55 22 2c 22 53 57 55  |"SWD","NWU","SWU|
00000b90  22 2c 31 39 29 0d 04 6a  3b f2 66 61 63 65 28 22  |",19)..j;.face("|
00000ba0  53 57 55 22 2c 22 4e 57  55 22 2c 22 53 45 55 22  |SWU","NWU","SEU"|
00000bb0  2c 31 39 29 3a f2 66 61  63 65 28 22 53 45 55 22  |,19):.face("SEU"|
00000bc0  2c 22 4e 57 55 22 2c 22  4e 45 55 22 2c 31 39 29  |,"NWU","NEU",19)|
00000bd0  0d 04 74 3b f2 66 61 63  65 28 22 4e 57 44 22 2c  |..t;.face("NWD",|
00000be0  22 53 57 44 22 2c 22 4e  45 44 22 2c 31 39 29 3a  |"SWD","NED",19):|
00000bf0  f2 66 61 63 65 28 22 4e  45 44 22 2c 22 53 57 44  |.face("NED","SWD|
00000c00  22 2c 22 53 45 44 22 2c  31 39 29 0d 04 7e 0d f2  |","SED",19)..~..|
00000c10  65 6e 64 73 68 61 70 65  0d 04 88 36 e7 50 25 3e  |endshape...6.P%>|
00000c20  73 68 61 70 65 25 2b 73  68 61 70 65 6c 65 6e 25  |shape%+shapelen%|
00000c30  8c 85 32 35 35 2c 22 53  68 61 70 65 20 69 73 6e  |..255,"Shape isn|
00000c40  27 74 20 62 69 67 20 65  6e 6f 75 67 68 22 0d 04  |'t big enough"..|
00000c50  92 05 e1 0d 04 9c 05 3a  0d 04 a6 0e dd f2 6e 65  |.......:......ne|
00000c60  77 73 68 61 70 65 0d 04  b0 0c 70 66 6c 61 67 25  |wshape....pflag%|
00000c70  3d a3 0d 04 ba 1a 6e 6f  70 6f 69 6e 74 73 25 3d  |=.....nopoints%=|
00000c80  30 3a 6e 6f 66 61 63 65  73 25 3d 30 0d 04 c4 14  |0:nofaces%=0....|
00000c90  70 73 74 61 72 74 25 3d  50 25 3a 50 25 2b 3d 34  |pstart%=P%:P%+=4|
00000ca0  0d 04 ce 05 e1 0d 04 d8  05 3a 0d 04 e2 15 dd f2  |.........:......|
00000cb0  70 6f 69 6e 74 28 4e 24  2c 58 2c 59 2c 5a 29 0d  |point(N$,X,Y,Z).|
00000cc0  04 ec 30 e7 70 66 6c 61  67 25 8c 85 32 35 35 2c  |..0.pflag%..255,|
00000cd0  22 50 6f 69 6e 74 73 20  6d 75 73 74 20 63 6f 6d  |"Points must com|
00000ce0  65 20 62 65 66 6f 72 65  20 66 61 63 65 73 22 0d  |e before faces".|
00000cf0  04 f6 39 21 50 25 3d 58  2a 28 31 3c 3c 41 43 25  |..9!P%=X*(1<<AC%|
00000d00  29 3a 50 25 21 34 3d 59  2a 28 31 3c 3c 41 43 25  |):P%!4=Y*(1<<AC%|
00000d10  29 3a 50 25 21 38 3d 5a  2a 28 31 3c 3c 41 43 25  |):P%!8=Z*(1<<AC%|
00000d20  29 3a 50 25 2b 3d 31 32  0d 05 00 21 50 24 28 6e  |):P%+=12...!P$(n|
00000d30  6f 70 6f 69 6e 74 73 25  29 3d 4e 24 3a 6e 6f 70  |opoints%)=N$:nop|
00000d40  6f 69 6e 74 73 25 2b 3d  31 0d 05 0a 05 e1 0d 05  |oints%+=1.......|
00000d50  14 05 3a 0d 05 1e 1a dd  f2 66 61 63 65 28 50 31  |..:......face(P1|
00000d60  24 2c 50 32 24 2c 50 33  24 2c 43 25 29 0d 05 28  |$,P2$,P3$,C%)..(|
00000d70  26 e7 ac 70 66 6c 61 67  25 8c 70 66 6c 61 67 25  |&..pflag%.pflag%|
00000d80  3d b9 3a 66 73 74 61 72  74 25 3d 50 25 3a 50 25  |=.:fstart%=P%:P%|
00000d90  2b 3d 34 0d 05 32 39 50  31 25 3d a4 70 6f 69 6e  |+=4..29P1%=.poin|
00000da0  74 6e 6f 28 50 31 24 29  3a 50 32 25 3d a4 70 6f  |tno(P1$):P2%=.po|
00000db0  69 6e 74 6e 6f 28 50 32  24 29 3a 50 33 25 3d a4  |intno(P2$):P3%=.|
00000dc0  70 6f 69 6e 74 6e 6f 28  50 33 24 29 0d 05 3c 42  |pointno(P3$)..<B|
00000dd0  41 31 25 3d 70 73 74 61  72 74 25 2b 34 2b 50 31  |A1%=pstart%+4+P1|
00000de0  25 2a 31 32 3a 41 32 25  3d 70 73 74 61 72 74 25  |%*12:A2%=pstart%|
00000df0  2b 34 2b 50 32 25 2a 31  32 3a 41 33 25 3d 70 73  |+4+P2%*12:A3%=ps|
00000e00  74 61 72 74 25 2b 34 2b  50 33 25 2a 31 32 0d 05  |tart%+4+P3%*12..|
00000e10  46 3e 4e 58 3d 28 41 33  25 21 34 2d 41 31 25 21  |F>NX=(A3%!4-A1%!|
00000e20  34 29 2a 28 41 32 25 21  38 2d 41 31 25 21 38 29  |4)*(A2%!8-A1%!8)|
00000e30  2d 28 41 33 25 21 38 2d  41 31 25 21 38 29 2a 28  |-(A3%!8-A1%!8)*(|
00000e40  41 32 25 21 34 2d 41 31  25 21 34 29 0d 05 50 3a  |A2%!4-A1%!4)..P:|
00000e50  4e 59 3d 28 41 33 25 21  38 2d 41 31 25 21 38 29  |NY=(A3%!8-A1%!8)|
00000e60  2a 28 21 41 32 25 2d 21  41 31 25 29 2d 28 21 41  |*(!A2%-!A1%)-(!A|
00000e70  33 25 2d 21 41 31 25 29  2a 28 41 32 25 21 38 2d  |3%-!A1%)*(A2%!8-|
00000e80  41 31 25 21 38 29 0d 05  5a 3a 4e 5a 3d 28 21 41  |A1%!8)..Z:NZ=(!A|
00000e90  33 25 2d 21 41 31 25 29  2a 28 41 32 25 21 34 2d  |3%-!A1%)*(A2%!4-|
00000ea0  41 31 25 21 34 29 2d 28  41 33 25 21 34 2d 41 31  |A1%!4)-(A3%!4-A1|
00000eb0  25 21 34 29 2a 28 21 41  32 25 2d 21 41 31 25 29  |%!4)*(!A2%-!A1%)|
00000ec0  0d 05 64 28 46 3d 28 31  3c 3c 56 43 25 29 2f b6  |..d(F=(1<<VC%)/.|
00000ed0  28 4e 58 2a 4e 58 2b 4e  59 2a 4e 59 2b 4e 5a 2a  |(NX*NX+NY*NY+NZ*|
00000ee0  4e 5a 29 2f b6 28 33 29  0d 05 6e 1d 21 50 25 3d  |NZ)/.(3)..n.!P%=|
00000ef0  50 31 25 3a 50 25 21 34  3d 50 32 25 3a 50 25 21  |P1%:P%!4=P2%:P%!|
00000f00  38 3d 50 33 25 0d 05 78  24 50 25 21 31 32 3d 4e  |8=P3%..x$P%!12=N|
00000f10  58 2a 46 3a 50 25 21 31  36 3d 4e 59 2a 46 3a 50  |X*F:P%!16=NY*F:P|
00000f20  25 21 32 30 3d 4e 5a 2a  46 0d 05 82 13 50 25 21  |%!20=NZ*F....P%!|
00000f30  32 34 3d 43 25 3a 50 25  2b 3d 32 38 0d 05 8c 0f  |24=C%:P%+=28....|
00000f40  6e 6f 66 61 63 65 73 25  2b 3d 31 0d 05 96 05 e1  |nofaces%+=1.....|
00000f50  0d 05 a0 05 3a 0d 05 aa  11 dd a4 70 6f 69 6e 74  |....:......point|
00000f60  6e 6f 28 4e 24 29 0d 05  b4 14 e7 6e 6f 70 6f 69  |no(N$).....nopoi|
00000f70  6e 74 73 25 3d 30 8c 3d  2d 31 0d 05 be 1b 48 25  |nts%=0.=-1....H%|
00000f80  3d 2d 31 3a e3 54 25 3d  30 b8 6e 6f 70 6f 69 6e  |=-1:.T%=0.nopoin|
00000f90  74 73 25 2d 31 0d 05 c8  23 e7 50 24 28 54 25 29  |ts%-1...#.P$(T%)|
00000fa0  3d 4e 24 8c 48 25 3d 54  25 3a 54 25 3d 6e 6f 70  |=N$.H%=T%:T%=nop|
00000fb0  6f 69 6e 74 73 25 2d 31  0d 05 d2 09 ed 3a 3d 48  |oints%-1.....:=H|
00000fc0  25 0d 05 dc 05 3a 0d 05  e6 0e dd f2 65 6e 64 73  |%....:......ends|
00000fd0  68 61 70 65 0d 05 f0 28  21 70 73 74 61 72 74 25  |hape...(!pstart%|
00000fe0  3d 6e 6f 70 6f 69 6e 74  73 25 3a 21 66 73 74 61  |=nopoints%:!fsta|
00000ff0  72 74 25 3d 6e 6f 66 61  63 65 73 25 0d 05 fa 05  |rt%=nofaces%....|
00001000  e1 0d 06 04 05 3a 0d 06  0e 09 dd f2 6d 61 70 0d  |.....:......map.|
00001010  06 18 05 db 0d 06 22 2f  76 69 65 77 25 21 31 32  |......"/view%!12|
00001020  3d 30 3a 76 69 65 77 25  21 31 36 3d 30 3a 76 69  |=0:view%!16=0:vi|
00001030  65 77 25 21 32 30 3d 30  3a 76 69 65 77 25 21 32  |ew%!20=0:view%!2|
00001040  34 3d 30 0d 06 2c 1f 21  64 69 73 70 6c 61 79 25  |4=0..,.!display%|
00001050  3d 76 69 73 25 2d 31 3a  c8 97 b8 36 34 30 2c 35  |=vis%-1:...640,5|
00001060  31 32 0d 06 36 1b f5 3a  c8 97 58 25 2c 59 25 2c  |12..6..:..X%,Y%,|
00001070  5a 25 3a c8 97 b8 36 34  30 2c 35 31 32 0d 06 40  |Z%:...640,512..@|
00001080  19 50 50 25 3d 70 6f 73  25 2b 33 32 2a 21 64 69  |.PP%=pos%+32*!di|
00001090  73 70 6c 61 79 25 0d 06  4a 42 21 76 69 65 77 25  |splay%..JB!view%|
000010a0  2b 3d 28 58 25 2d 36 34  30 29 2a 28 31 3c 3c 50  |+=(X%-640)*(1<<P|
000010b0  50 25 21 32 34 2d 34 29  3a 76 69 65 77 25 21 34  |P%!24-4):view%!4|
000010c0  2b 3d 28 59 25 2d 35 31  32 29 2a 28 31 3c 3c 50  |+=(Y%-512)*(1<<P|
000010d0  50 25 21 32 34 2d 34 29  0d 06 54 36 e7 a6 28 2d  |P%!24-4)..T6..(-|
000010e0  31 30 34 29 80 21 64 69  73 70 6c 61 79 25 3c 76  |104).!display%<v|
000010f0  69 73 25 2d 31 8c 21 64  69 73 70 6c 61 79 25 2b  |is%-1.!display%+|
00001100  3d 31 3a f5 3a fd ac a6  28 2d 31 30 34 29 0d 06  |=1:.:...(-104)..|
00001110  5e 31 e7 a6 28 2d 31 30  33 29 80 21 64 69 73 70  |^1..(-103).!disp|
00001120  6c 61 79 25 3e 30 8c 21  64 69 73 70 6c 61 79 25  |lay%>0.!display%|
00001130  2d 3d 31 3a f5 3a fd ac  a6 28 2d 31 30 33 29 0d  |-=1:.:...(-103).|
00001140  06 68 17 e7 a6 28 2d 37  34 29 8c 21 72 65 66 72  |.h...(-74).!refr|
00001150  65 73 68 25 3d b9 0d 06  72 0d d6 6c 61 6e 64 67  |esh%=...r..landg|
00001160  65 6e 25 0d 06 7c 0e d6  74 65 73 74 6c 61 6e 64  |en%..|..testland|
00001170  25 0d 06 86 0b fd a6 28  2d 39 39 29 0d 06 90 0e  |%......(-99)....|
00001180  f5 3a fd ac a6 28 2d 39  39 29 0d 06 9a 3a 4c 58  |.:...(-99)...:LX|
00001190  25 3d 28 21 76 69 65 77  25 3e 3e 4c 43 25 29 80  |%=(!view%>>LC%).|
000011a0  6c 73 69 7a 65 25 2d 31  3a 4c 59 25 3d 28 76 69  |lsize%-1:LY%=(vi|
000011b0  65 77 25 21 34 3e 3e 4c  43 25 29 80 6c 73 69 7a  |ew%!4>>LC%).lsiz|
000011c0  65 25 2d 31 0d 06 a4 3c  76 69 65 77 25 21 38 3d  |e%-1...<view%!8=|
000011d0  28 6c 61 6e 64 25 21 28  38 2a 28 4c 58 25 2b 6c  |(land%!(8*(LX%+l|
000011e0  73 69 7a 65 25 2a 4c 59  25 29 29 3c 3c 4c 43 25  |size%*LY%))<<LC%|
000011f0  2d 53 43 25 29 2b 28 31  3c 3c 41 43 25 2b 34 29  |-SC%)+(1<<AC%+4)|
00001200  0d 06 ae 05 e1 0d 06 b8  05 3a 0d 06 c2 09 dd f2  |.........:......|
00001210  66 6c 79 0d 06 cc 08 42  25 3d 30 0d 06 d6 13 41  |fly....B%=0....A|
00001220  25 3d 30 3a 56 25 3d 30  3a 4e 54 25 3d 91 0d 06  |%=0:V%=0:NT%=...|
00001230  e0 10 f5 3a c8 97 58 25  2c 59 25 2c 5a 25 0d 06  |...:..X%,Y%,Z%..|
00001240  ea 27 46 54 25 3d 91 2d  4e 54 25 3a 4e 54 25 2b  |.'FT%=.-NT%:NT%+|
00001250  3d 46 54 25 3a e7 46 54  25 3e 31 30 30 8c 46 54  |=FT%:.FT%>100.FT|
00001260  25 3d 31 30 30 0d 06 f4  26 42 25 3d 42 25 2b 46  |%=100...&B%=B%+F|
00001270  54 25 2a 31 30 80 26 46  46 46 46 3a 41 3d 32 2a  |T%*10.&FFFF:A=2*|
00001280  af 2a 42 25 2f 26 31 30  30 30 30 0d 06 fe 35 74  |.*B%/&10000...5t|
00001290  65 73 74 70 6f 73 25 21  30 3d 9b 28 41 29 2a 28  |estpos%!0=.(A)*(|
000012a0  31 3c 3c 56 43 25 29 3a  74 65 73 74 70 6f 73 25  |1<<VC%):testpos%|
000012b0  21 34 3d b5 28 41 29 2a  28 31 3c 3c 56 43 25 29  |!4=.(A)*(1<<VC%)|
000012c0  0d 07 08 32 74 65 73 74  70 6f 73 25 21 31 32 3d  |...2testpos%!12=|
000012d0  2d 74 65 73 74 70 6f 73  25 21 34 3a 74 65 73 74  |-testpos%!4:test|
000012e0  70 6f 73 25 21 31 36 3d  74 65 73 74 70 6f 73 25  |pos%!16=testpos%|
000012f0  21 30 0d 07 12 0a e7 5a  25 3d 34 8c 0d 07 1c 20  |!0.....Z%=4.... |
00001300  76 69 65 77 25 21 30 2b  3d 76 69 65 77 25 21 31  |view%!0+=view%!1|
00001310  32 3c 3c 41 43 25 2b 35  2d 56 43 25 0d 07 26 20  |2<<AC%+5-VC%..& |
00001320  76 69 65 77 25 21 34 2b  3d 76 69 65 77 25 21 31  |view%!4+=view%!1|
00001330  36 3c 3c 41 43 25 2b 35  2d 56 43 25 0d 07 30 20  |6<<AC%+5-VC%..0 |
00001340  76 69 65 77 25 21 38 2b  3d 76 69 65 77 25 21 32  |view%!8+=view%!2|
00001350  30 3c 3c 41 43 25 2b 35  2d 56 43 25 0d 07 3a 05  |0<<AC%+5-VC%..:.|
00001360  cd 0d 07 44 33 41 25 3d  41 25 2b 28 46 54 25 2a  |...D3A%=A%+(FT%*|
00001370  28 36 34 30 2d 58 25 29  3e 3e 39 2d 37 29 80 26  |(640-X%)>>9-7).&|
00001380  46 46 46 46 3a 41 3d 32  2a af 2a 41 25 2f 26 31  |FFFF:A=2*.*A%/&1|
00001390  30 30 30 30 0d 07 4e 31  76 69 65 77 25 21 31 32  |0000..N1view%!12|
000013a0  3d 9b 28 41 29 2a 28 31  3c 3c 56 43 25 29 3a 76  |=.(A)*(1<<VC%):v|
000013b0  69 65 77 25 21 31 36 3d  b5 28 41 29 2a 28 31 3c  |iew%!16=.(A)*(1<|
000013c0  3c 56 43 25 29 0d 07 58  3d 76 69 65 77 25 21 32  |<VC%)..X=view%!2|
000013d0  30 3d 28 35 31 32 2d 59  25 29 3e 3e 39 2d 28 56  |0=(512-Y%)>>9-(V|
000013e0  43 25 2d 31 29 3a 76 69  65 77 25 21 32 34 3d 28  |C%-1):view%!24=(|
000013f0  36 34 30 2d 58 25 29 3e  3e 39 2d 28 56 43 25 2d  |640-X%)>>9-(VC%-|
00001400  31 29 0d 07 62 0a e7 5a  25 3d 34 8c 0d 07 63 08  |1)..b..Z%=4...c.|
00001410  56 25 3d 30 0d 07 6c 20  76 69 65 77 25 21 30 2d  |V%=0..l view%!0-|
00001420  3d 76 69 65 77 25 21 31  32 3c 3c 41 43 25 2b 35  |=view%!12<<AC%+5|
00001430  2d 56 43 25 0d 07 76 20  76 69 65 77 25 21 34 2d  |-VC%..v view%!4-|
00001440  3d 76 69 65 77 25 21 31  36 3c 3c 41 43 25 2b 35  |=view%!16<<AC%+5|
00001450  2d 56 43 25 0d 07 80 20  76 69 65 77 25 21 38 2d  |-VC%... view%!8-|
00001460  3d 76 69 65 77 25 21 32  30 3c 3c 41 43 25 2b 35  |=view%!20<<AC%+5|
00001470  2d 56 43 25 0d 07 8a 05  cd 0d 07 94 28 e7 5a 25  |-VC%........(.Z%|
00001480  3d 32 8c 56 25 2d 3d 28  31 3c 3c 41 43 25 2d 31  |=2.V%-=(1<<AC%-1|
00001490  30 29 2a 46 54 25 3a e7  56 25 3c 30 8c 56 25 3d  |0)*FT%:.V%<0.V%=|
000014a0  30 0d 07 9e 36 e7 5a 25  3d 31 8c 56 25 2b 3d 28  |0...6.Z%=1.V%+=(|
000014b0  31 3c 3c 41 43 25 2d 31  30 29 2a 46 54 25 3a e7  |1<<AC%-10)*FT%:.|
000014c0  56 25 3e 28 31 3c 3c 41  43 25 29 8c 56 25 3d 28  |V%>(1<<AC%).V%=(|
000014d0  31 3c 3c 41 43 25 29 0d  07 a8 21 76 69 65 77 25  |1<<AC%)...!view%|
000014e0  21 30 2b 3d 56 25 2a 46  54 25 2a 76 69 65 77 25  |!0+=V%*FT%*view%|
000014f0  21 31 32 3e 3e 56 43 25  0d 07 b2 21 76 69 65 77  |!12>>VC%...!view|
00001500  25 21 34 2b 3d 56 25 2a  46 54 25 2a 76 69 65 77  |%!4+=V%*FT%*view|
00001510  25 21 31 36 3e 3e 56 43  25 0d 07 bc 21 76 69 65  |%!16>>VC%...!vie|
00001520  77 25 21 38 2b 3d 56 25  2a 46 54 25 2a 76 69 65  |w%!8+=V%*FT%*vie|
00001530  77 25 21 32 30 3e 3e 56  43 25 0d 07 c6 0d d6 6c  |w%!20>>VC%.....l|
00001540  61 6e 64 67 65 6e 25 0d  07 d0 0f d6 64 72 61 77  |andgen%.....draw|
00001550  66 72 61 6d 65 25 0d 07  da 0b fd a6 28 2d 39 39  |frame%......(-99|
00001560  29 0d 07 e4 0e f5 3a fd  ac a6 28 2d 39 39 29 0d  |).....:...(-99).|
00001570  07 ee 05 e1 0d 07 f8 05  3a 0d 08 02 0d dd f2 74  |........:......t|
00001580  65 73 74 63 6f 6c 0d 08  0c 2d c8 99 22 4f 53 5f  |estcol...-.."OS_|
00001590  52 65 61 64 56 64 75 56  61 72 69 61 62 6c 65 73  |ReadVduVariables|
000015a0  22 2c 76 64 75 76 61 72  73 25 2c 73 63 72 61 64  |",vduvars%,scrad|
000015b0  64 72 25 0d 08 16 32 56  25 3d 63 6f 6c 25 3a e3  |dr%...2V%=col%:.|
000015c0  54 25 3d 30 b8 33 31 3a  53 25 3d 21 73 63 72 61  |T%=0.31:S%=!scra|
000015d0  64 64 72 25 2b 28 54 25  3c 3c 33 29 3a e3 55 25  |ddr%+(T%<<3):.U%|
000015e0  3d 30 b8 36 33 0d 08 20  14 21 53 25 3d 21 56 25  |=0.63.. .!S%=!V%|
000015f0  3a 53 25 21 34 3d 21 56  25 0d 08 2a 27 53 25 21  |:S%!4=!V%..*'S%!|
00001600  73 63 6c 69 6e 63 25 3d  56 25 21 34 3a 53 25 21  |sclinc%=V%!4:S%!|
00001610  28 73 63 6c 69 6e 63 25  2b 34 29 3d 56 25 21 34  |(sclinc%+4)=V%!4|
00001620  0d 08 34 2b 53 25 21 28  73 63 6c 69 6e 63 25 2a  |..4+S%!(sclinc%*|
00001630  32 29 3d 21 56 25 3a 53  25 21 28 73 63 6c 69 6e  |2)=!V%:S%!(sclin|
00001640  63 25 2a 32 2b 34 29 3d  21 56 25 0d 08 3e 2d 53  |c%*2+4)=!V%..>-S|
00001650  25 21 28 73 63 6c 69 6e  63 25 2a 33 29 3d 56 25  |%!(sclinc%*3)=V%|
00001660  21 34 3a 53 25 21 28 73  63 6c 69 6e 63 25 2a 33  |!4:S%!(sclinc%*3|
00001670  2b 34 29 3d 56 25 21 34  0d 08 48 1a 53 25 2b 3d  |+4)=V%!4..H.S%+=|
00001680  73 63 6c 69 6e 63 25 2a  34 3a 56 25 2b 3d 38 3a  |sclinc%*4:V%+=8:|
00001690  ed 2c 0d 08 52 05 e1 0d  08 5c 05 3a 0d 08 66 0d  |.,..R....\.:..f.|
000016a0  dd f2 74 65 73 74 68 6f  72 0d 08 70 2c e3 54 25  |..testhor..p,.T%|
000016b0  3d 30 b8 77 69 64 74 68  25 2d 31 3a 58 25 3d 54  |=0.width%-1:X%=T|
000016c0  25 2a 31 36 3a 56 25 3d  68 6f 72 25 2b 54 25 2a  |%*16:V%=hor%+T%*|
000016d0  77 69 6e 63 25 0d 08 7a  10 e3 55 25 3d 30 b8 64  |winc%..z..U%=0.d|
000016e0  65 70 74 68 25 0d 08 84  20 59 25 3d 39 35 39 2d  |epth%... Y%=959-|
000016f0  32 2a 21 56 25 3a 86 58  25 2c 59 25 2c 58 25 2b  |2*!V%:.X%,Y%,X%+|
00001700  31 35 2c 59 25 0d 08 8e  0c 56 25 2b 3d 38 3a ed  |15,Y%....V%+=8:.|
00001710  2c 0d 08 98 05 e1 0d 08  a2 05 3a 0d 08 ac 10 dd  |,.........:.....|
00001720  f2 74 65 73 74 70 6f 69  6e 74 73 0d 08 b6 16 55  |.testpoints....U|
00001730  25 3d 70 6f 69 6e 74 73  25 3a e3 54 25 3d 31 b8  |%=points%:.T%=1.|
00001740  38 0d 08 c0 2c c8 92 21  55 25 3e 3e 28 53 43 57  |8...,..!U%>>(SCW|
00001750  25 2b 44 43 25 29 2d 31  30 2c 55 25 21 34 3e 3e  |%+DC%)-10,U%!4>>|
00001760  28 53 43 48 25 2b 44 43  25 29 2d 31 30 0d 08 ca  |(SCH%+DC%)-10...|
00001770  0b 55 25 2b 3d 38 3a ed  0d 08 d4 05 e1 0d 08 de  |.U%+=8:.........|
00001780  05 3a 0d 08 e8 10 dd f2  74 65 73 74 6d 61 74 72  |.:......testmatr|
00001790  69 78 0d 08 f2 0f d6 64  72 61 77 73 68 61 70 65  |ix.....drawshape|
000017a0  25 0d 08 fc 1b f2 70 6c  6f 74 62 6c 6f 62 28 30  |%.....plotblob(0|
000017b0  2c 30 2c 30 2c 31 3c 3c  41 43 25 29 0d 09 06 22  |,0,0,1<<AC%)..."|
000017c0  f2 70 6c 6f 74 62 6c 6f  62 28 34 3c 3c 41 43 25  |.plotblob(4<<AC%|
000017d0  2c 30 2c 30 2c 31 3c 3c  41 43 25 2d 31 29 0d 09  |,0,0,1<<AC%-1)..|
000017e0  10 22 f2 70 6c 6f 74 62  6c 6f 62 28 30 2c 34 3c  |.".plotblob(0,4<|
000017f0  3c 41 43 25 2c 30 2c 31  3c 3c 41 43 25 2d 31 29  |<AC%,0,1<<AC%-1)|
00001800  0d 09 1a 22 f2 70 6c 6f  74 62 6c 6f 62 28 30 2c  |...".plotblob(0,|
00001810  30 2c 34 3c 3c 41 43 25  2c 31 3c 3c 41 43 25 2d  |0,4<<AC%,1<<AC%-|
00001820  31 29 0d 09 24 05 e1 0d  09 2e 05 3a 0d 09 38 1b  |1)..$......:..8.|
00001830  dd f2 70 6c 6f 74 62 6c  6f 62 28 58 25 2c 59 25  |..plotblob(X%,Y%|
00001840  2c 5a 25 2c 52 25 29 0d  09 42 42 50 59 25 3d 28  |,Z%,R%)..BBPY%=(|
00001850  58 25 2a 6d 61 74 72 69  78 25 21 34 2b 59 25 2a  |X%*matrix%!4+Y%*|
00001860  6d 61 74 72 69 78 25 21  31 36 2b 5a 25 2a 6d 61  |matrix%!16+Z%*ma|
00001870  74 72 69 78 25 21 32 38  3e 3e 56 43 25 29 2b 6d  |trix%!28>>VC%)+m|
00001880  61 74 72 69 78 25 21 34  30 0d 09 4c 0d e7 50 59  |atrix%!40..L..PY|
00001890  25 3c 3d 30 8c e1 0d 09  56 42 50 58 25 3d 28 58  |%<=0....VBPX%=(X|
000018a0  25 2a 6d 61 74 72 69 78  25 21 30 2b 59 25 2a 6d  |%*matrix%!0+Y%*m|
000018b0  61 74 72 69 78 25 21 31  32 2b 5a 25 2a 6d 61 74  |atrix%!12+Z%*mat|
000018c0  72 69 78 25 21 32 34 3e  3e 56 43 25 29 2b 6d 61  |rix%!24>>VC%)+ma|
000018d0  74 72 69 78 25 21 33 36  0d 09 60 42 50 5a 25 3d  |trix%!36..`BPZ%=|
000018e0  28 58 25 2a 6d 61 74 72  69 78 25 21 38 2b 59 25  |(X%*matrix%!8+Y%|
000018f0  2a 6d 61 74 72 69 78 25  21 32 30 2b 5a 25 2a 6d  |*matrix%!20+Z%*m|
00001900  61 74 72 69 78 25 21 33  32 3e 3e 56 43 25 29 2b  |atrix%!32>>VC%)+|
00001910  6d 61 74 72 69 78 25 21  34 34 0d 09 6a 2b 46 3d  |matrix%!44..j+F=|
00001920  31 30 32 34 2f 50 59 25  3a c8 8f c8 90 36 34 30  |1024/PY%:....640|
00001930  2b 46 2a 50 58 25 2c 35  31 32 2b 46 2a 50 5a 25  |+F*PX%,512+F*PZ%|
00001940  2c 46 2a 52 25 0d 09 74  05 e1 0d 09 7e 05 3a 0d  |,F*R%..t....~.:.|
00001950  09 88 13 dd a4 61 64 72  28 52 25 2c 41 25 2c 49  |.....adr(R%,A%,I|
00001960  25 29 0d 09 92 2c e7 28  50 25 80 33 29 3c 3e 30  |%)...,.(P%.3)<>0|
00001970  8c f1 22 43 6f 64 65 20  69 73 6e 27 74 20 77 6f  |.."Code isn't wo|
00001980  72 64 20 61 6c 69 67 6e  65 64 21 22 3a e0 0d 09  |rd aligned!":...|
00001990  9c 1b e7 28 54 25 80 32  29 3d 30 8c 50 25 2b 3d  |...(T%.2)=0.P%+=|
000019a0  49 25 3c 3c 32 3a 3d 54  25 0d 09 a6 28 ea 4e 25  |I%<<2:=T%...(.N%|
000019b0  2c 4f 25 2c 48 25 2c 55  25 3a 48 25 3d 41 25 2d  |,O%,H%,U%:H%=A%-|
000019c0  28 50 25 2b 38 29 3a 4e  25 3d 30 3a 4f 25 3d 31  |(P%+8):N%=0:O%=1|
000019d0  35 0d 09 b0 13 e3 55 25  3d 31 b8 49 25 3a e7 48  |5.....U%=1.I%:.H|
000019e0  25 3d 30 8c 0d 09 ba 17  5b 4f 50 54 20 54 25 3a  |%=0.....[OPT T%:|
000019f0  4d 4f 56 20 52 25 2c 4f  25 3a 5d 0d 09 c4 20 cc  |MOV R%,O%:]... .|
00001a00  c8 95 28 48 25 80 33 29  3d 30 3a 48 25 3d 48 25  |..(H%.3)=0:H%=H%|
00001a10  3e 3e 32 3a 4e 25 2b 3d  32 3a ce 0d 09 ce 10 e7  |>>2:N%+=2:......|
00001a20  28 48 25 80 32 35 36 29  3d 30 8c 0d 09 d8 30 5b  |(H%.256)=0....0[|
00001a30  4f 50 54 20 54 25 3a 41  44 44 20 52 25 2c 4f 25  |OPT T%:ADD R%,O%|
00001a40  2c 23 28 48 25 80 32 35  35 29 3c 3c 4e 25 3a 5d  |,#(H%.255)<<N%:]|
00001a50  3a 48 25 2d 3d 48 25 80  32 35 35 0d 09 e2 39 cc  |:H%-=H%.255...9.|
00001a60  5b 4f 50 54 20 54 25 3a  53 55 42 20 52 25 2c 4f  |[OPT T%:SUB R%,O|
00001a70  25 2c 23 28 32 35 36 2d  48 25 80 32 35 35 29 3c  |%,#(256-H%.255)<|
00001a80  3c 4e 25 3a 5d 3a 48 25  2b 3d 32 35 36 2d 48 25  |<N%:]:H%+=256-H%|
00001a90  80 32 35 35 0d 09 ec 05  cd 0d 09 f6 0d cd 3a 4f  |.255..........:O|
00001aa0  25 3d 52 25 3a ed 0d 0a  00 4a e7 48 25 3c 3e 30  |%=R%:....J.H%<>0|
00001ab0  8c f1 22 43 6f 75 6c 64  20 6e 6f 74 20 41 44 52  |.."Could not ADR|
00001ac0  20 74 6f 20 22 3b 41 25  3b 22 20 69 6e 20 22 3b  | to ";A%;" in ";|
00001ad0  49 25 3b 22 20 69 6e 73  74 72 75 63 74 69 6f 6e  |I%;" instruction|
00001ae0  73 20 28 52 25 3d 22 3b  52 25 3b 22 29 22 3a e0  |s (R%=";R%;")":.|
00001af0  0d 0a 0a 07 3d 54 25 0d  0a 14 05 3a 0d 0a 1e 16  |....=T%....:....|
00001b00  dd a4 72 65 67 69 73 74  65 72 6a 28 4a 25 2c 4e  |..registerj(J%,N|
00001b10  25 29 0d 0a 28 14 4a 25  21 28 4e 25 3c 3c 32 29  |%)..(.J%!(N%<<2)|
00001b20  3d 50 25 2d 4a 25 0d 0a  32 07 3d 54 25 0d 0a 3c  |=P%-J%..2.=T%..<|
00001b30  05 3a 0d 0a 46 0e dd f2  61 73 73 65 6d 62 6c 65  |.:..F...assemble|
00001b40  0d 0a 50 16 e3 54 25 3d  30 b8 32 88 32 3a 50 25  |..P..T%=0.2.2:P%|
00001b50  3d 63 6f 64 65 25 0d 0a  5a 0b 5b 4f 50 54 20 54  |=code%..Z.[OPT T|
00001b60  25 0d 0a 64 05 3a 0d 0a  6e 0a 2e 74 65 73 74 25  |%..d.:..n..test%|
00001b70  0d 0a 78 23 45 51 55 44  20 2d 31 3a 45 51 55 44  |..x#EQUD -1:EQUD|
00001b80  20 2d 31 3a 45 51 55 44  20 2d 31 3a 45 51 55 44  | -1:EQUD -1:EQUD|
00001b90  20 2d 31 0d 0a 82 23 45  51 55 44 20 2d 31 3a 45  | -1...#EQUD -1:E|
00001ba0  51 55 44 20 2d 31 3a 45  51 55 44 20 2d 31 3a 45  |QUD -1:EQUD -1:E|
00001bb0  51 55 44 20 2d 31 0d 0a  8c 23 45 51 55 44 20 2d  |QUD -1...#EQUD -|
00001bc0  31 3a 45 51 55 44 20 2d  31 3a 45 51 55 44 20 2d  |1:EQUD -1:EQUD -|
00001bd0  31 3a 45 51 55 44 20 2d  31 0d 0a 96 23 45 51 55  |1:EQUD -1...#EQU|
00001be0  44 20 2d 31 3a 45 51 55  44 20 2d 31 3a 45 51 55  |D -1:EQUD -1:EQU|
00001bf0  44 20 2d 31 3a 45 51 55  44 20 2d 31 0d 0a a0 05  |D -1:EQUD -1....|
00001c00  3a 0d 0a aa 11 2e 62 61  6e 6b 25 3a 45 51 55 44  |:.....bank%:EQUD|
00001c10  20 31 0d 0a b4 05 3a 0d  0a be 0a 2e 76 69 65 77  | 1....:.....view|
00001c20  25 0d 0a c8 3a 45 51 55  44 20 31 3c 3c 42 43 25  |%...:EQUD 1<<BC%|
00001c30  2d 31 3a 45 51 55 44 20  31 3c 3c 42 43 25 2b 42  |-1:EQUD 1<<BC%+B|
00001c40  53 25 2d 31 3a 45 51 55  44 20 31 3c 3c 41 43 25  |S%-1:EQUD 1<<AC%|
00001c50  3a 3b 20 50 6f 73 69 74  69 6f 6e 0d 0a d2 20 45  |:; Position... E|
00001c60  51 55 44 20 30 3a 45 51  55 44 20 31 3c 3c 56 43  |QUD 0:EQUD 1<<VC|
00001c70  25 3a 3b 20 48 65 61 64  69 6e 67 0d 0a dc 1f 45  |%:; Heading....E|
00001c80  51 55 44 20 30 3a 45 51  55 44 20 30 3a 3b 20 50  |QUD 0:EQUD 0:; P|
00001c90  69 74 63 68 2c 20 52 6f  6c 6c 0d 0a e6 05 3a 0d  |itch, Roll....:.|
00001ca0  0a f0 15 2e 72 65 66 72  65 73 68 25 3a 45 51 55  |....refresh%:EQU|
00001cb0  44 20 2d 31 0d 0a fa 05  3a 0d 0b 04 0d 2e 6c 61  |D -1....:.....la|
00001cc0  6e 64 67 65 6e 25 0d 0b  0e 14 53 54 4d 46 44 20  |ndgen%....STMFD |
00001cd0  52 31 33 21 2c 7b 52 31  34 7d 0d 0b 18 0f 42 4c  |R13!,{R14}....BL|
00001ce0  20 63 61 6c 63 70 6f 73  25 0d 0b 22 10 42 4c 20  | calcpos%..".BL |
00001cf0  63 6f 70 79 62 61 73 65  25 0d 0b 2c 10 42 4c 20  |copybase%..,.BL |
00001d00  73 70 6c 69 74 6d 61 70  25 0d 0b 36 10 42 4c 20  |splitmap%..6.BL |
00001d10  6d 61 6b 65 6c 61 6e 64  25 0d 0b 40 13 4c 44 4d  |makeland%..@.LDM|
00001d20  46 44 20 52 31 33 21 2c  7b 50 43 7d 0d 0b 4a 05  |FD R13!,{PC}..J.|
00001d30  3a 0d 0b 54 0f 2e 64 72  61 77 66 72 61 6d 65 25  |:..T..drawframe%|
00001d40  0d 0b 5e 14 53 54 4d 46  44 20 52 31 33 21 2c 7b  |..^.STMFD R13!,{|
00001d50  52 31 34 7d 0d 0b 68 0f  42 4c 20 63 61 6c 63 68  |R14}..h.BL calch|
00001d60  6f 72 25 0d 0b 72 10 4c  44 52 20 52 31 2c 62 61  |or%..r.LDR R1,ba|
00001d70  6e 6b 25 0d 0b 7c 0d 43  4d 50 20 52 31 2c 23 31  |nk%..|.CMP R1,#1|
00001d80  0d 0b 86 0c ec 51 20 52  31 2c 23 32 0d 0b 90 0f  |.....Q R1,#2....|
00001d90  4d 4f 56 4e 45 20 52 31  2c 23 31 0d 0b 9a 10 53  |MOVNE R1,#1....S|
00001da0  54 52 20 52 31 2c 62 61  6e 6b 25 0d 0b a4 0f 4d  |TR R1,bank%....M|
00001db0  4f 56 20 52 30 2c 23 31  31 32 0d 0b ae 11 53 57  |OV R0,#112....SW|
00001dc0  49 20 22 4f 53 5f 42 79  74 65 22 0d 0b b8 0e 4d  |I "OS_Byte"....M|
00001dd0  4f 56 20 52 30 2c 23 31  39 0d 0b c2 11 53 57 49  |OV R0,#19....SWI|
00001de0  20 22 4f 53 5f 42 79 74  65 22 0d 0b cc 1a 4f 50  | "OS_Byte"....OP|
00001df0  54 20 a4 61 64 72 28 30  2c 76 64 75 76 61 72 73  |T .adr(0,vduvars|
00001e00  25 2c 32 29 0d 0b d6 1a  4f 50 54 20 a4 61 64 72  |%,2)....OPT .adr|
00001e10  28 31 2c 73 63 72 61 64  64 72 25 2c 32 29 0d 0b  |(1,scraddr%,2)..|
00001e20  e0 1d 53 57 49 20 22 4f  53 5f 52 65 61 64 56 64  |..SWI "OS_ReadVd|
00001e30  75 56 61 72 69 61 62 6c  65 73 22 0d 0b ea 0f 42  |uVariables"....B|
00001e40  4c 20 64 72 61 77 73 6b  79 25 0d 0b f4 13 4d 4f  |L drawsky%....MO|
00001e50  56 20 52 31 32 2c 23 64  65 70 74 68 25 0d 0b fe  |V R12,#depth%...|
00001e60  12 53 55 42 20 52 31 32  2c 52 31 32 2c 23 31 0d  |.SUB R12,R12,#1.|
00001e70  0c 08 0b 2e 64 6c 6f 6f  70 25 0d 0c 12 1a 4f 50  |....dloop%....OP|
00001e80  54 20 a4 61 64 72 28 31  2c 64 69 73 74 25 2b 31  |T .adr(1,dist%+1|
00001e90  32 2c 32 29 0d 0c 1c 34  4c 44 52 20 52 31 2c 5b  |2,2)...4LDR R1,[|
00001ea0  52 31 2c 52 31 32 2c 41  53 4c 23 34 5d 3a 3b 20  |R1,R12,ASL#4]:; |
00001eb0  44 69 73 74 61 6e 63 65  20 6f 66 20 73 74 72 69  |Distance of stri|
00001ec0  70 20 69 6e 20 41 43 25  0d 0c 26 2a 3b 20 44 72  |p in AC%..&*; Dr|
00001ed0  61 77 20 65 76 65 72 79  74 68 69 6e 67 20 66 75  |aw everything fu|
00001ee0  72 74 68 65 72 20 61 77  61 79 20 74 68 61 6e 20  |rther away than |
00001ef0  52 31 0d 0c 30 1a 3b 20  2a 2a 2a 20 4e 6f 74 20  |R1..0.; *** Not |
00001f00  64 6f 6e 65 20 79 65 74  20 2a 2a 2a 0d 0c 3a 11  |done yet ***..:.|
00001f10  42 4c 20 64 72 61 77 73  74 72 69 70 25 0d 0c 44  |BL drawstrip%..D|
00001f20  13 53 55 42 53 20 52 31  32 2c 52 31 32 2c 23 31  |.SUBS R12,R12,#1|
00001f30  0d 0c 4e 0e 42 47 45 20  64 6c 6f 6f 70 25 0d 0c  |..N.BGE dloop%..|
00001f40  58 11 42 4c 20 64 72 61  77 73 68 61 70 65 25 0d  |X.BL drawshape%.|
00001f50  0c 62 0f 4d 4f 56 20 52  30 2c 23 31 31 33 0d 0c  |.b.MOV R0,#113..|
00001f60  6c 10 4c 44 52 20 52 31  2c 62 61 6e 6b 25 0d 0c  |l.LDR R1,bank%..|
00001f70  76 11 53 57 49 20 22 4f  53 5f 42 79 74 65 22 0d  |v.SWI "OS_Byte".|
00001f80  0c 80 13 4c 44 4d 46 44  20 52 31 33 21 2c 7b 50  |...LDMFD R13!,{P|
00001f90  43 7d 0d 0c 8a 05 3a 0d  0c 94 0d 2e 63 61 6c 63  |C}....:.....calc|
00001fa0  70 6f 73 25 0d 0c 9e 14  53 54 4d 46 44 20 52 31  |pos%....STMFD R1|
00001fb0  33 21 2c 7b 52 31 34 7d  0d 0c a8 10 41 44 52 20  |3!,{R14}....ADR |
00001fc0  52 30 2c 76 69 65 77 25  0d 0c b2 33 4c 44 4d 49  |R0,view%...3LDMI|
00001fd0  41 20 52 30 2c 7b 52 36  2d 52 37 2c 52 38 2c 52  |A R0,{R6-R7,R8,R|
00001fe0  31 30 2d 52 31 31 7d 3a  3b 20 50 6f 73 69 74 69  |10-R11}:; Positi|
00001ff0  6f 6e 2c 2c 48 65 61 64  69 6e 67 0d 0c bc 17 4f  |on,,Heading....O|
00002000  50 54 20 a4 61 64 72 28  31 32 2c 70 6f 73 25 2c  |PT .adr(12,pos%,|
00002010  32 29 0d 0c c6 13 4c 44  52 20 52 39 2c 72 65 66  |2)....LDR R9,ref|
00002020  72 65 73 68 25 0d 0c d0  0d 4d 4f 56 20 52 38 2c  |resh%....MOV R8,|
00002030  23 30 0d 0c da 13 53 54  52 20 52 38 2c 72 65 66  |#0....STR R8,ref|
00002040  72 65 73 68 25 0d 0c e4  0f 4d 4f 56 20 52 38 2c  |resh%....MOV R8,|
00002050  23 4d 43 25 0d 0c ee 0d  2e 6c 65 76 6c 6f 6f 70  |#MC%.....levloop|
00002060  25 0d 0c f8 15 4c 44 4d  49 41 20 52 31 32 2c 7b  |%....LDMIA R12,{|
00002070  52 32 2d 52 33 7d 0d 0d  02 14 4d 4f 56 20 52 30  |R2-R3}....MOV R0|
00002080  2c 52 36 2c 41 53 52 20  52 38 0d 0d 0c 14 4d 4f  |,R6,ASR R8....MO|
00002090  56 20 52 31 2c 52 37 2c  41 53 52 20 52 38 0d 0d  |V R1,R7,ASR R8..|
000020a0  16 25 53 55 42 20 52 30  2c 52 30 2c 23 6d 73 69  |.%SUB R0,R0,#msi|
000020b0  7a 65 25 2f 32 2d 31 3a  3b 20 53 57 20 63 6f 72  |ze%/2-1:; SW cor|
000020c0  6e 65 72 0d 0d 20 19 53  55 42 20 52 31 2c 52 31  |ner.. .SUB R1,R1|
000020d0  2c 23 6d 73 69 7a 65 25  2f 32 2d 31 0d 0d 2a 25  |,#msize%/2-1..*%|
000020e0  42 49 43 20 52 30 2c 52  30 2c 23 31 3a 3b 20 4d  |BIC R0,R0,#1:; M|
000020f0  61 6b 65 20 73 75 72 65  20 69 74 73 20 65 76 65  |ake sure its eve|
00002100  6e 0d 0d 34 10 42 49 43  20 52 31 2c 52 31 2c 23  |n..4.BIC R1,R1,#|
00002110  31 0d 0d 3e 14 4d 4f 56  20 52 34 2c 52 30 2c 41  |1..>.MOV R4,R0,A|
00002120  53 4c 20 52 38 0d 0d 48  14 4d 4f 56 20 52 35 2c  |SL R8..H.MOV R5,|
00002130  52 31 2c 41 53 4c 20 52  38 0d 0d 52 0d 43 4d 50  |R1,ASL R8..R.CMP|
00002140  20 52 39 2c 23 30 0d 0d  5c 16 41 44 44 4e 45 20  | R9,#0..\.ADDNE |
00002150  52 32 2c 52 30 2c 23 31  3c 3c 33 30 0d 0d 66 24  |R2,R0,#1<<30..f$|
00002160  53 54 4d 49 41 20 52 31  32 2c 7b 52 30 2d 52 31  |STMIA R12,{R0-R1|
00002170  2c 52 32 2d 52 33 2c 52  34 2d 52 35 2c 52 38 7d  |,R2-R3,R4-R5,R8}|
00002180  0d 0d 70 13 41 44 44 20  52 31 32 2c 52 31 32 2c  |..p.ADD R12,R12,|
00002190  23 33 32 0d 0d 7a 10 41  44 44 20 52 38 2c 52 38  |#32..z.ADD R8,R8|
000021a0  2c 23 31 0d 0d 84 17 43  4d 50 20 52 38 2c 23 4d  |,#1....CMP R8,#M|
000021b0  43 25 2b 6c 65 76 65 6c  73 25 0d 0d 8e 10 42 4c  |C%+levels%....BL|
000021c0  54 20 6c 65 76 6c 6f 6f  70 25 0d 0d 98 13 4c 44  |T levloop%....LD|
000021d0  4d 46 44 20 52 31 33 21  2c 7b 50 43 7d 0d 0d a2  |MFD R13!,{PC}...|
000021e0  05 3a 0d 0d ac 0e 2e 63  6f 70 79 62 61 73 65 25  |.:.....copybase%|
000021f0  0d 0d b6 14 53 54 4d 46  44 20 52 31 33 21 2c 7b  |....STMFD R13!,{|
00002200  52 31 34 7d 0d 0d c0 18  4f 50 54 20 a4 61 64 72  |R14}....OPT .adr|
00002210  28 31 32 2c 62 61 73 65  25 2c 32 29 0d 0d ca 34  |(12,base%,2)...4|
00002220  4f 50 54 20 a4 61 64 72  28 31 31 2c 6d 61 70 25  |OPT .adr(11,map%|
00002230  2b 33 32 2a 6d 73 69 7a  65 25 2a 6d 73 69 7a 65  |+32*msize%*msize|
00002240  25 2a 28 6c 65 76 65 6c  73 25 2d 31 29 2c 33 29  |%*(levels%-1),3)|
00002250  0d 0d d4 25 4f 50 54 20  a4 61 64 72 28 30 2c 70  |...%OPT .adr(0,p|
00002260  6f 73 25 2b 33 32 2a 28  6c 65 76 65 6c 73 25 2d  |os%+32*(levels%-|
00002270  31 29 2c 32 29 0d 0d de  14 4c 44 4d 49 41 20 52  |1),2)....LDMIA R|
00002280  30 2c 7b 52 30 2d 52 31  7d 0d 0d e8 15 4d 4f 56  |0,{R0-R1}....MOV|
00002290  20 52 32 2c 23 33 32 2a  62 73 69 7a 65 25 0d 0d  | R2,#32*bsize%..|
000022a0  f2 15 4d 4c 41 20 52 31  32 2c 52 31 2c 52 32 2c  |..MLA R12,R1,R2,|
000022b0  52 31 32 0d 0d fc 13 4d  4f 56 20 52 31 30 2c 23  |R12....MOV R10,#|
000022c0  6d 73 69 7a 65 25 0d 0e  06 0b 2e 6e 6c 6f 6f 70  |msize%.....nloop|
000022d0  25 0d 0e 10 1b 53 55 42  20 52 31 30 2c 52 31 30  |%....SUB R10,R10|
000022e0  2c 23 6d 73 69 7a 65 25  3c 3c 31 36 0d 0e 1a 0b  |,#msize%<<16....|
000022f0  2e 65 6c 6f 6f 70 25 0d  0e 24 0d 43 4d 50 20 52  |.eloop%..$.CMP R|
00002300  30 2c 23 30 0d 0e 2e 0f  43 4d 50 47 45 20 52 31  |0,#0....CMPGE R1|
00002310  2c 23 30 0d 0e 38 12 42  4c 54 20 63 62 6d 61 6b  |,#0..8.BLT cbmak|
00002320  65 73 65 61 25 0d 0e 42  12 43 4d 50 20 52 30 2c  |esea%..B.CMP R0,|
00002330  23 62 73 69 7a 65 25 0d  0e 4c 14 43 4d 50 4c 54  |#bsize%..L.CMPLT|
00002340  20 52 31 2c 23 62 73 69  7a 65 25 0d 0e 56 12 42  | R1,#bsize%..V.B|
00002350  47 45 20 63 62 6d 61 6b  65 73 65 61 25 0d 0e 60  |GE cbmakesea%..`|
00002360  17 41 44 44 20 52 32 2c  52 31 32 2c 52 30 2c 41  |.ADD R2,R12,R0,A|
00002370  53 4c 23 35 0d 0e 6a 14  4c 44 4d 49 41 20 52 32  |SL#5..j.LDMIA R2|
00002380  2c 7b 52 32 2d 52 39 7d  0d 0e 74 16 53 54 4d 49  |,{R2-R9}..t.STMI|
00002390  41 20 52 31 31 21 2c 7b  52 32 2d 52 39 7d 0d 0e  |A R11!,{R2-R9}..|
000023a0  7e 0f 42 20 63 62 72 65  74 75 72 6e 25 0d 0e 88  |~.B cbreturn%...|
000023b0  05 3a 0d 0e 92 0f 2e 63  62 6d 61 6b 65 73 65 61  |.:.....cbmakesea|
000023c0  25 0d 0e 9c 0d 4d 4f 56  20 52 32 2c 23 30 0d 0e  |%....MOV R2,#0..|
000023d0  a6 0d 4d 4f 56 20 52 33  2c 23 30 0d 0e b0 37 4d  |..MOV R3,#0...7M|
000023e0  56 4e 20 52 34 2c 23 31  3c 3c 53 43 25 2d 32 3a  |VN R4,#1<<SC%-2:|
000023f0  3b 20 53 65 61 20 62 65  64 20 69 73 20 2d 31 2f  |; Sea bed is -1/|
00002400  34 20 62 61 73 65 20 73  71 75 61 72 65 20 64 65  |4 base square de|
00002410  65 70 0d 0e ba 0d 4d 4f  56 20 52 35 2c 23 30 0d  |ep....MOV R5,#0.|
00002420  0e c4 15 53 54 4d 49 41  20 52 31 31 2c 7b 52 32  |...STMIA R11,{R2|
00002430  2d 52 35 7d 0d 0e ce 13  41 44 44 20 52 31 31 2c  |-R5}....ADD R11,|
00002440  52 31 31 2c 23 33 32 0d  0e d8 0e 2e 63 62 72 65  |R11,#32.....cbre|
00002450  74 75 72 6e 25 0d 0e e2  10 41 44 44 20 52 30 2c  |turn%....ADD R0,|
00002460  52 30 2c 23 31 0d 0e ec  17 41 44 44 53 20 52 31  |R0,#1....ADDS R1|
00002470  30 2c 52 31 30 2c 23 31  3c 3c 31 36 0d 0e f6 0e  |0,R10,#1<<16....|
00002480  42 4c 45 20 65 6c 6f 6f  70 25 0d 0f 00 15 53 55  |BLE eloop%....SU|
00002490  42 20 52 30 2c 52 30 2c  23 6d 73 69 7a 65 25 0d  |B R0,R0,#msize%.|
000024a0  0f 0a 10 41 44 44 20 52  31 2c 52 31 2c 23 31 0d  |...ADD R1,R1,#1.|
000024b0  0f 14 1a 41 44 44 20 52  31 32 2c 52 31 32 2c 23  |...ADD R12,R12,#|
000024c0  33 32 2a 62 73 69 7a 65  25 0d 0f 1e 13 53 55 42  |32*bsize%....SUB|
000024d0  53 20 52 31 30 2c 52 31  30 2c 23 31 0d 0f 28 0e  |S R10,R10,#1..(.|
000024e0  42 47 54 20 6e 6c 6f 6f  70 25 0d 0f 32 13 4c 44  |BGT nloop%..2.LD|
000024f0  4d 46 44 20 52 31 33 21  2c 7b 50 43 7d 0d 0f 3c  |MFD R13!,{PC}..<|
00002500  05 3a 0d 0f 46 1c 2e 64  69 73 70 6c 61 79 25 3a  |.:..F..display%:|
00002510  45 51 55 44 20 6c 65 76  65 6c 73 25 2d 31 0d 0f  |EQUD levels%-1..|
00002520  50 05 3a 0d 0f 5a 0d 2e  74 65 73 74 6d 61 70 25  |P.:..Z..testmap%|
00002530  0d 0f 64 14 53 54 4d 46  44 20 52 31 33 21 2c 7b  |..d.STMFD R13!,{|
00002540  52 31 34 7d 0d 0f 6e 1a  4f 50 54 20 a4 61 64 72  |R14}..n.OPT .adr|
00002550  28 30 2c 76 64 75 76 61  72 73 25 2c 32 29 0d 0f  |(0,vduvars%,2)..|
00002560  78 20 41 44 44 20 52 31  2c 52 30 2c 23 73 63 72  |x ADD R1,R0,#scr|
00002570  61 64 64 72 25 2d 76 64  75 76 61 72 73 25 0d 0f  |addr%-vduvars%..|
00002580  82 1d 53 57 49 20 22 4f  53 5f 52 65 61 64 56 64  |..SWI "OS_ReadVd|
00002590  75 56 61 72 69 61 62 6c  65 73 22 0d 0f 8c 14 4c  |uVariables"....L|
000025a0  44 52 20 52 31 34 2c 73  63 72 61 64 64 72 25 0d  |DR R14,scraddr%.|
000025b0  0f 96 22 41 44 44 20 52  31 34 2c 52 31 34 2c 23  |.."ADD R14,R14,#|
000025c0  73 63 68 65 69 67 68 74  25 2a 73 63 6c 69 6e 63  |scheight%*sclinc|
000025d0  25 0d 0f a0 21 41 44 44  20 52 31 34 2c 52 31 34  |%...!ADD R14,R14|
000025e0  2c 23 73 63 6c 69 6e 63  25 2d 34 2a 6d 73 69 7a  |,#sclinc%-4*msiz|
000025f0  65 25 0d 0f aa 17 4f 50  54 20 a4 61 64 72 28 31  |e%....OPT .adr(1|
00002600  32 2c 6d 61 70 25 2c 32  29 0d 0f b4 13 4c 44 52  |2,map%,2)....LDR|
00002610  20 52 30 2c 64 69 73 70  6c 61 79 25 0d 0f be 20  | R0,display%... |
00002620  41 44 44 20 52 31 32 2c  52 31 32 2c 52 30 2c 41  |ADD R12,R12,R0,A|
00002630  53 4c 23 35 2b 4d 53 25  2b 4d 53 25 0d 0f c8 13  |SL#5+MS%+MS%....|
00002640  4d 4f 56 20 52 31 31 2c  23 6d 73 69 7a 65 25 0d  |MOV R11,#msize%.|
00002650  0f d2 0b 2e 6e 6c 6f 6f  70 25 0d 0f dc 1a 53 55  |....nloop%....SU|
00002660  42 20 52 31 34 2c 52 31  34 2c 23 73 63 6c 69 6e  |B R14,R14,#sclin|
00002670  63 25 2a 34 0d 0f e6 1b  53 55 42 20 52 31 31 2c  |c%*4....SUB R11,|
00002680  52 31 31 2c 23 6d 73 69  7a 65 25 3c 3c 31 36 0d  |R11,#msize%<<16.|
00002690  0f f0 0b 2e 65 6c 6f 6f  70 25 0d 0f fa 13 4c 44  |....eloop%....LD|
000026a0  52 20 52 30 2c 5b 52 31  32 2c 23 38 5d 0d 10 04  |R R0,[R12,#8]...|
000026b0  13 41 44 44 20 52 31 32  2c 52 31 32 2c 23 33 32  |.ADD R12,R12,#32|
000026c0  0d 10 0e 17 4d 4f 56 20  52 30 2c 52 30 2c 4c 53  |....MOV R0,R0,LS|
000026d0  52 23 53 43 25 2d 32 0d  10 18 10 80 20 52 30 2c  |R#SC%-2..... R0,|
000026e0  52 30 2c 23 32 35 35 0d  10 22 15 84 52 20 52 30  |R0,#255.."..R R0|
000026f0  2c 52 30 2c 52 30 2c 4c  53 4c 23 38 0d 10 2c 16  |,R0,R0,LSL#8..,.|
00002700  84 52 20 52 30 2c 52 30  2c 52 30 2c 4c 53 4c 23  |.R R0,R0,R0,LSL#|
00002710  31 36 0d 10 36 1b 53 54  52 20 52 30 2c 5b 52 31  |16..6.STR R0,[R1|
00002720  34 2c 23 73 63 6c 69 6e  63 25 2a 33 5d 0d 10 40  |4,#sclinc%*3]..@|
00002730  1b 53 54 52 20 52 30 2c  5b 52 31 34 2c 23 73 63  |.STR R0,[R14,#sc|
00002740  6c 69 6e 63 25 2a 32 5d  0d 10 4a 19 53 54 52 20  |linc%*2]..J.STR |
00002750  52 30 2c 5b 52 31 34 2c  23 73 63 6c 69 6e 63 25  |R0,[R14,#sclinc%|
00002760  5d 0d 10 54 13 53 54 52  20 52 30 2c 5b 52 31 34  |]..T.STR R0,[R14|
00002770  5d 2c 23 34 0d 10 5e 17  41 44 44 53 20 52 31 31  |],#4..^.ADDS R11|
00002780  2c 52 31 31 2c 23 31 3c  3c 31 36 0d 10 68 0e 42  |,R11,#1<<16..h.B|
00002790  4c 45 20 65 6c 6f 6f 70  25 0d 10 72 19 53 55 42  |LE eloop%..r.SUB|
000027a0  20 52 31 34 2c 52 31 34  2c 23 34 2a 6d 73 69 7a  | R14,R14,#4*msiz|
000027b0  65 25 0d 10 7c 13 53 55  42 53 20 52 31 31 2c 52  |e%..|.SUBS R11,R|
000027c0  31 31 2c 23 31 0d 10 86  0e 42 47 54 20 6e 6c 6f  |11,#1....BGT nlo|
000027d0  6f 70 25 0d 10 90 13 4c  44 4d 46 44 20 52 31 33  |op%....LDMFD R13|
000027e0  21 2c 7b 50 43 7d 0d 10  9a 05 3a 0d 10 a4 0e 2e  |!,{PC}....:.....|
000027f0  73 70 6c 69 74 6d 61 70  25 0d 10 ae 14 53 54 4d  |splitmap%....STM|
00002800  46 44 20 52 31 33 21 2c  7b 52 31 34 7d 0d 10 b8  |FD R13!,{R14}...|
00002810  15 4d 4f 56 20 52 39 2c  23 6c 65 76 65 6c 73 25  |.MOV R9,#levels%|
00002820  2d 31 0d 10 c2 0d 2e 6c  65 76 6c 6f 6f 70 25 0d  |-1.....levloop%.|
00002830  10 cc 18 3b 20 52 39 20  69 73 20 70 61 72 65 6e  |...; R9 is paren|
00002840  74 20 6c 65 76 65 6c 0d  10 d6 16 4f 50 54 20 a4  |t level....OPT .|
00002850  61 64 72 28 30 2c 70 6f  73 25 2c 32 29 0d 10 e0  |adr(0,pos%,2)...|
00002860  16 41 44 44 20 52 30 2c  52 30 2c 52 39 2c 41 53  |.ADD R0,R0,R9,AS|
00002870  4c 23 35 0d 10 ea 25 4c  44 4d 49 41 20 52 30 2c  |L#5...%LDMIA R0,|
00002880  7b 52 34 2d 52 35 7d 3a  3b 20 50 61 72 65 6e 74  |{R4-R5}:; Parent|
00002890  73 20 6f 72 69 67 69 6e  0d 10 f4 11 53 55 42 20  |s origin....SUB |
000028a0  52 30 2c 52 30 2c 23 33  32 0d 10 fe 33 4c 44 4d  |R0,R0,#32...3LDM|
000028b0  49 41 20 52 30 2c 7b 52  30 2d 52 31 2c 52 32 2d  |IA R0,{R0-R1,R2-|
000028c0  52 33 7d 3a 3b 20 4e 65  77 20 6f 72 69 67 69 6e  |R3}:; New origin|
000028d0  2c 20 4f 6c 64 20 6f 72  69 67 69 6e 0d 11 08 20  |, Old origin... |
000028e0  4d 4f 56 20 52 36 2c 52  30 3a 3b 20 43 75 72 72  |MOV R6,R0:; Curr|
000028f0  65 6e 74 20 70 6f 73 69  74 69 6f 6e 0d 11 12 0d  |ent position....|
00002900  4d 4f 56 20 52 37 2c 52  31 0d 11 1c 1d 4d 4f 56  |MOV R7,R1....MOV|
00002910  20 52 38 2c 23 31 3a 3b  20 42 6f 74 74 6f 6d 20  | R8,#1:; Bottom |
00002920  74 6f 20 74 6f 70 0d 11  26 0d 43 4d 50 20 52 31  |to top..&.CMP R1|
00002930  2c 52 33 0d 11 30 0f 43  4d 50 45 51 20 52 30 2c  |,R3..0.CMPEQ R0,|
00002940  52 32 0d 11 3a 12 42 45  51 20 73 6d 73 6b 69 70  |R2..:.BEQ smskip|
00002950  6c 65 76 25 0d 11 44 19  41 44 44 4c 54 20 52 36  |lev%..D.ADDLT R6|
00002960  2c 52 36 2c 23 6d 73 69  7a 65 25 2d 32 0d 11 4e  |,R6,#msize%-2..N|
00002970  19 41 44 44 4c 54 20 52  37 2c 52 37 2c 23 6d 73  |.ADDLT R7,R7,#ms|
00002980  69 7a 65 25 2d 32 0d 11  58 22 52 53 42 4c 54 20  |ize%-2..X"RSBLT |
00002990  52 38 2c 52 38 2c 23 30  3a 3b 20 54 6f 70 20 74  |R8,R8,#0:; Top t|
000029a0  6f 20 62 6f 74 74 6f 6d  0d 11 62 17 4f 50 54 20  |o bottom..b.OPT |
000029b0  a4 61 64 72 28 31 32 2c  6d 61 70 25 2c 33 29 0d  |.adr(12,map%,3).|
000029c0  11 6c 2d 41 44 44 20 52  31 32 2c 52 31 32 2c 52  |.l-ADD R12,R12,R|
000029d0  39 2c 41 53 4c 23 35 2b  4d 53 25 2b 4d 53 25 3a  |9,ASL#5+MS%+MS%:|
000029e0  3b 20 50 61 72 65 6e 74  20 6d 61 70 0d 11 76 2b  |; Parent map..v+|
000029f0  53 55 42 20 52 31 31 2c  52 31 32 2c 23 33 32 2a  |SUB R11,R12,#32*|
00002a00  6d 73 69 7a 65 25 2a 6d  73 69 7a 65 25 3a 3b 20  |msize%*msize%:; |
00002a10  4e 65 77 20 6d 61 70 0d  11 80 2b 52 53 42 20 52  |New map...+RSB R|
00002a20  34 2c 52 34 2c 52 36 2c  41 53 52 23 31 3a 3b 20  |4,R4,R6,ASR#1:; |
00002a30  50 6f 73 20 73 65 65 6e  20 6f 6e 20 70 61 72 65  |Pos seen on pare|
00002a40  6e 74 0d 11 8a 16 52 53  42 20 52 35 2c 52 35 2c  |nt....RSB R5,R5,|
00002a50  52 37 2c 41 53 52 23 31  0d 11 94 18 41 44 44 20  |R7,ASR#1....ADD |
00002a60  52 35 2c 52 34 2c 52 35  2c 41 53 4c 23 4d 53 25  |R5,R4,R5,ASL#MS%|
00002a70  0d 11 9e 18 41 44 44 20  52 31 32 2c 52 31 32 2c  |....ADD R12,R12,|
00002a80  52 35 2c 41 53 4c 23 35  0d 11 a8 22 53 55 42 20  |R5,ASL#5..."SUB |
00002a90  52 34 2c 52 36 2c 52 30  3a 3b 20 50 6f 73 20 73  |R4,R6,R0:; Pos s|
00002aa0  65 65 6e 20 6f 6e 20 6e  65 77 0d 11 b2 10 53 55  |een on new....SU|
00002ab0  42 20 52 35 2c 52 37 2c  52 31 0d 11 bc 18 41 44  |B R5,R7,R1....AD|
00002ac0  44 20 52 35 2c 52 34 2c  52 35 2c 41 53 4c 23 4d  |D R5,R4,R5,ASL#M|
00002ad0  53 25 0d 11 c6 18 41 44  44 20 52 31 31 2c 52 31  |S%....ADD R11,R1|
00002ae0  31 2c 52 35 2c 41 53 4c  23 35 0d 11 d0 22 53 55  |1,R5,ASL#5..."SU|
00002af0  42 20 52 36 2c 52 36 2c  52 32 3a 3b 20 50 6f 73  |B R6,R6,R2:; Pos|
00002b00  20 73 65 65 6e 20 6f 6e  20 6f 6c 64 0d 11 da 10  | seen on old....|
00002b10  53 55 42 20 52 37 2c 52  37 2c 52 33 0d 11 e4 29  |SUB R7,R7,R3...)|
00002b20  53 55 42 20 52 34 2c 52  30 2c 52 32 3a 3b 20 4e  |SUB R4,R0,R2:; N|
00002b30  65 77 20 6f 72 69 67 69  6e 20 73 65 65 6e 20 6f  |ew origin seen o|
00002b40  6e 20 6f 6c 64 0d 11 ee  10 53 55 42 20 52 35 2c  |n old....SUB R5,|
00002b50  52 31 2c 52 33 0d 11 f8  18 41 44 44 20 52 35 2c  |R1,R3....ADD R5,|
00002b60  52 34 2c 52 35 2c 41 53  4c 23 4d 53 25 0d 12 02  |R4,R5,ASL#MS%...|
00002b70  13 4d 4f 56 20 52 31 30  2c 23 6d 73 69 7a 65 25  |.MOV R10,#msize%|
00002b80  0d 12 0c 2f 3b 20 41 74  20 74 68 69 73 20 70 6f  |.../; At this po|
00002b90  69 6e 74 2c 20 74 68 65  20 72 65 67 69 73 74 65  |int, the registe|
00002ba0  72 73 20 61 72 65 20 75  73 65 64 20 61 73 3a 0d  |rs are used as:.|
00002bb0  12 16 22 3b 20 52 31 32  20 69 73 20 61 64 64 72  |.."; R12 is addr|
00002bc0  20 6f 66 20 70 6f 73 20  6f 6e 20 70 61 72 65 6e  | of pos on paren|
00002bd0  74 0d 12 20 1f 3b 20 52  31 31 20 69 73 20 61 64  |t.. .; R11 is ad|
00002be0  64 72 20 6f 66 20 70 6f  73 20 6f 6e 20 6e 65 77  |dr of pos on new|
00002bf0  0d 12 2a 13 3b 20 52 31  30 20 69 73 20 6d 73 69  |..*.; R10 is msi|
00002c00  7a 65 25 0d 12 34 2b 3b  20 52 39 20 69 73 20 6c  |ze%..4+; R9 is l|
00002c10  6f 6f 70 20 63 6f 75 6e  74 65 72 20 28 6c 65 73  |oop counter (les|
00002c20  73 20 74 68 61 6e 20 38  20 62 69 74 73 29 0d 12  |s than 8 bits)..|
00002c30  3e 15 3b 20 52 38 20 69  73 20 64 69 72 65 63 74  |>.; R8 is direct|
00002c40  69 6f 6e 0d 12 48 1a 3b  20 52 36 2d 52 37 20 61  |ion..H.; R6-R7 a|
00002c50  72 65 20 70 6f 73 20 6f  6e 20 6f 6c 64 0d 12 52  |re pos on old..R|
00002c60  34 3b 20 52 35 3c 3c 35  20 69 73 20 6f 66 66 73  |4; R5<<5 is offs|
00002c70  65 74 20 66 72 6f 6d 20  52 31 31 20 74 6f 20 61  |et from R11 to a|
00002c80  64 64 72 20 6f 66 20 70  6f 73 20 6f 6e 20 6f 6c  |ddr of pos on ol|
00002c90  64 0d 12 5c 18 53 55 42  20 52 39 2c 52 39 2c 23  |d..\.SUB R9,R9,#|
00002ca0  6d 73 69 7a 65 25 3c 3c  38 0d 12 66 0c 2e 6e 73  |msize%<<8..f..ns|
00002cb0  6c 6f 6f 70 25 0d 12 70  19 41 44 44 20 52 39 2c  |loop%..p.ADD R9,|
00002cc0  52 39 2c 23 6d 73 69 7a  65 25 3c 3c 32 30 0d 12  |R9,#msize%<<20..|
00002cd0  7a 0c 2e 65 77 6c 6f 6f  70 25 0d 12 84 34 3b 20  |z..ewloop%...4; |
00002ce0  49 66 20 74 68 65 20 73  71 75 61 72 65 20 69 73  |If the square is|
00002cf0  20 6e 6f 74 20 6f 6e 20  6f 6c 64 2c 20 74 68 65  | not on old, the|
00002d00  6e 20 63 61 6c 63 75 6c  61 74 65 20 69 74 0d 12  |n calculate it..|
00002d10  8e 15 41 44 52 20 52 31  34 2c 73 6d 72 65 74 75  |..ADR R14,smretu|
00002d20  72 6e 25 0d 12 98 0d 43  4d 50 20 52 36 2c 23 30  |rn%....CMP R6,#0|
00002d30  0d 12 a2 0f 43 4d 50 47  45 20 52 37 2c 23 30 0d  |....CMPGE R7,#0.|
00002d40  12 ac 0f 42 4c 54 20 63  61 6c 63 73 71 25 0d 12  |...BLT calcsq%..|
00002d50  b6 12 43 4d 50 20 52 36  2c 23 6d 73 69 7a 65 25  |..CMP R6,#msize%|
00002d60  0d 12 c0 14 43 4d 50 4c  54 20 52 37 2c 23 6d 73  |....CMPLT R7,#ms|
00002d70  69 7a 65 25 0d 12 ca 0f  42 47 45 20 63 61 6c 63  |ize%....BGE calc|
00002d80  73 71 25 0d 12 d4 37 3b  20 43 6f 70 79 20 69 74  |sq%...7; Copy it|
00002d90  20 66 72 6f 6d 20 69 74  73 20 6f 6c 64 20 70 6f  | from its old po|
00002da0  73 69 74 69 6f 6e 20 74  6f 20 69 74 73 20 6e 65  |sition to its ne|
00002db0  77 20 70 6f 73 69 74 69  6f 6e 0d 12 de 16 53 54  |w position....ST|
00002dc0  4d 46 44 20 52 31 33 21  2c 7b 52 35 2d 52 38 7d  |MFD R13!,{R5-R8}|
00002dd0  0d 12 e8 17 41 44 44 20  52 38 2c 52 31 31 2c 52  |....ADD R8,R11,R|
00002de0  35 2c 41 53 4c 23 35 0d  12 f2 15 4c 44 4d 49 41  |5,ASL#5....LDMIA|
00002df0  20 52 38 21 2c 7b 52 30  2d 52 37 7d 0d 12 fc 16  | R8!,{R0-R7}....|
00002e00  53 54 4d 49 41 20 52 31  31 21 2c 7b 52 30 2d 52  |STMIA R11!,{R0-R|
00002e10  37 7d 0d 13 06 15 4c 44  4d 49 41 20 52 38 21 2c  |7}....LDMIA R8!,|
00002e20  7b 52 30 2d 52 37 7d 0d  13 10 16 53 54 4d 49 41  |{R0-R7}....STMIA|
00002e30  20 52 31 31 21 2c 7b 52  30 2d 52 37 7d 0d 13 1a  | R11!,{R0-R7}...|
00002e40  18 41 44 44 20 52 38 2c  52 38 2c 23 33 32 2a 6d  |.ADD R8,R8,#32*m|
00002e50  73 69 7a 65 25 0d 13 24  1a 41 44 44 20 52 31 31  |size%..$.ADD R11|
00002e60  2c 52 31 31 2c 23 33 32  2a 6d 73 69 7a 65 25 0d  |,R11,#32*msize%.|
00002e70  13 2e 15 4c 44 4d 44 42  20 52 38 21 2c 7b 52 30  |...LDMDB R8!,{R0|
00002e80  2d 52 37 7d 0d 13 38 16  53 54 4d 44 42 20 52 31  |-R7}..8.STMDB R1|
00002e90  31 21 2c 7b 52 30 2d 52  37 7d 0d 13 42 15 4c 44  |1!,{R0-R7}..B.LD|
00002ea0  4d 44 42 20 52 38 21 2c  7b 52 30 2d 52 37 7d 0d  |MDB R8!,{R0-R7}.|
00002eb0  13 4c 16 53 54 4d 44 42  20 52 31 31 21 2c 7b 52  |.L.STMDB R11!,{R|
00002ec0  30 2d 52 37 7d 0d 13 56  1a 53 55 42 20 52 31 31  |0-R7}..V.SUB R11|
00002ed0  2c 52 31 31 2c 23 33 32  2a 6d 73 69 7a 65 25 0d  |,R11,#32*msize%.|
00002ee0  13 60 16 4c 44 4d 46 44  20 52 31 33 21 2c 7b 52  |.`.LDMFD R13!,{R|
00002ef0  35 2d 52 38 7d 0d 13 6a  0e 2e 73 6d 72 65 74 75  |5-R8}..j..smretu|
00002f00  72 6e 25 0d 13 74 16 41  44 44 20 52 36 2c 52 36  |rn%..t.ADD R6,R6|
00002f10  2c 52 38 2c 41 53 4c 23  31 0d 13 7e 1a 41 44 44  |,R8,ASL#1..~.ADD|
00002f20  20 52 31 31 2c 52 31 31  2c 52 38 2c 41 53 4c 23  | R11,R11,R8,ASL#|
00002f30  35 2b 31 0d 13 88 18 41  44 44 20 52 31 32 2c 52  |5+1....ADD R12,R|
00002f40  31 32 2c 52 38 2c 41 53  4c 23 35 0d 13 92 15 53  |12,R8,ASL#5....S|
00002f50  55 42 53 20 52 39 2c 52  39 2c 23 32 3c 3c 32 30  |UBS R9,R9,#2<<20|
00002f60  0d 13 9c 0f 42 47 54 20  65 77 6c 6f 6f 70 25 0d  |....BGT ewloop%.|
00002f70  13 a6 18 53 55 42 20 52  36 2c 52 36 2c 52 38 2c  |...SUB R6,R6,R8,|
00002f80  41 53 4c 23 4d 53 25 0d  13 b0 1c 53 55 42 20 52  |ASL#MS%....SUB R|
00002f90  31 31 2c 52 31 31 2c 52  38 2c 41 53 4c 23 4d 53  |11,R11,R8,ASL#MS|
00002fa0  25 2b 35 0d 13 ba 20 53  55 42 20 52 31 32 2c 52  |%+5... SUB R12,R|
00002fb0  31 32 2c 52 38 2c 41 53  4c 23 28 4d 53 25 2d 31  |12,R8,ASL#(MS%-1|
00002fc0  29 2b 35 0d 13 c4 16 41  44 44 20 52 37 2c 52 37  |)+5....ADD R7,R7|
00002fd0  2c 52 38 2c 41 53 4c 23  31 0d 13 ce 1e 41 44 44  |,R8,ASL#1....ADD|
00002fe0  20 52 31 31 2c 52 31 31  2c 52 38 2c 41 53 4c 23  | R11,R11,R8,ASL#|
00002ff0  4d 53 25 2b 35 2b 31 0d  13 d8 1c 41 44 44 20 52  |MS%+5+1....ADD R|
00003000  31 32 2c 52 31 32 2c 52  38 2c 41 53 4c 23 4d 53  |12,R12,R8,ASL#MS|
00003010  25 2b 35 0d 13 e2 14 41  44 44 53 20 52 39 2c 52  |%+5....ADDS R9,R|
00003020  39 2c 23 32 3c 3c 38 0d  13 ec 0f 42 4c 45 20 6e  |9,#2<<8....BLE n|
00003030  73 6c 6f 6f 70 25 0d 13  f6 0f 2e 73 6d 73 6b 69  |sloop%.....smski|
00003040  70 6c 65 76 25 0d 14 00  11 53 55 42 53 20 52 39  |plev%....SUBS R9|
00003050  2c 52 39 2c 23 31 0d 14  0a 10 42 47 54 20 6c 65  |,R9,#1....BGT le|
00003060  76 6c 6f 6f 70 25 0d 14  14 13 4c 44 4d 46 44 20  |vloop%....LDMFD |
00003070  52 31 33 21 2c 7b 50 43  7d 0d 14 1e 05 3a 0d 14  |R13!,{PC}....:..|
00003080  28 35 3b 20 53 75 62 64  69 76 69 64 65 73 20 61  |(5; Subdivides a|
00003090  20 6d 61 70 20 73 71 75  61 72 65 20 74 6f 20 6d  | map square to m|
000030a0  61 6b 65 20 32 78 32 20  6d 61 70 20 73 71 75 61  |ake 2x2 map squa|
000030b0  72 65 73 0d 14 32 17 3b  20 52 31 32 20 69 73 20  |res..2.; R12 is |
000030c0  6f 6c 64 20 73 71 75 61  72 65 0d 14 3c 17 3b 20  |old square..<.; |
000030d0  52 31 31 20 69 73 20 6e  65 77 20 73 71 75 61 72  |R11 is new squar|
000030e0  65 0d 14 46 12 3b 20 52  31 30 20 69 73 20 6d 73  |e..F.; R10 is ms|
000030f0  69 7a 65 0d 14 50 05 3a  0d 14 5a 0c 2e 63 61 6c  |ize..P.:..Z..cal|
00003100  63 73 71 25 0d 14 64 1b  53 54 4d 46 44 20 52 31  |csq%..d.STMFD R1|
00003110  33 21 2c 7b 52 30 2d 52  31 32 2c 52 31 34 7d 0d  |3!,{R0-R12,R14}.|
00003120  14 6e 43 4c 44 4d 49 41  20 52 31 32 2c 7b 52 30  |.nCLDMIA R12,{R0|
00003130  2c 52 31 2c 52 32 2c 52  35 7d 3a 3b 20 4f 6c 64  |,R1,R2,R5}:; Old|
00003140  20 54 79 70 65 2c 20 57  61 74 65 72 20 6c 65 76  | Type, Water lev|
00003150  65 6c 2c 20 48 65 69 67  68 74 2c 20 52 61 6e 64  |el, Height, Rand|
00003160  6f 6d 0d 14 78 1b 3b 20  43 6f 6e 63 6f 63 74 20  |om..x.; Concoct |
00003170  61 20 72 61 6e 64 6f 6d  20 73 65 65 64 0d 14 82  |a random seed...|
00003180  17 41 44 44 20 52 38 2c  52 32 2c 52 32 2c 52 4f  |.ADD R8,R2,R2,RO|
00003190  52 23 31 37 0d 14 8c 17  41 44 44 20 52 38 2c 52  |R#17....ADD R8,R|
000031a0  38 2c 52 38 2c 52 4f 52  23 31 30 0d 14 96 16 41  |8,R8,ROR#10....A|
000031b0  44 44 20 52 38 2c 52 38  2c 52 38 2c 52 4f 52 23  |DD R8,R8,R8,ROR#|
000031c0  36 0d 14 a0 12 41 44 44  20 52 31 32 2c 52 31 32  |6....ADD R12,R12|
000031d0  2c 23 38 0d 14 aa 12 53  55 42 20 52 33 2c 52 31  |,#8....SUB R3,R1|
000031e0  32 2c 23 33 32 0d 14 b4  27 4c 44 4d 49 41 20 52  |2,#32...'LDMIA R|
000031f0  33 2c 7b 52 33 2c 52 36  7d 3a 3b 20 57 20 48 65  |3,{R3,R6}:; W He|
00003200  69 67 68 74 2c 20 52 61  6e 64 6f 6d 0d 14 be 18  |ight, Random....|
00003210  53 55 42 20 52 34 2c 52  31 32 2c 52 31 30 2c 41  |SUB R4,R12,R10,A|
00003220  53 4c 23 35 0d 14 c8 27  4c 44 4d 49 41 20 52 34  |SL#5...'LDMIA R4|
00003230  2c 7b 52 34 2c 52 37 7d  3a 3b 20 53 20 48 65 69  |,{R4,R7}:; S Hei|
00003240  67 68 74 2c 20 52 61 6e  64 6f 6d 0d 14 d2 16 41  |ght, Random....A|
00003250  44 44 20 52 34 2c 52 34  2c 52 32 2c 41 53 4c 23  |DD R4,R4,R2,ASL#|
00003260  31 0d 14 dc 16 41 44 44  20 52 37 2c 52 37 2c 52  |1....ADD R7,R7,R|
00003270  35 2c 41 53 4c 23 31 0d  14 e6 10 41 44 44 20 52  |5,ASL#1....ADD R|
00003280  33 2c 52 33 2c 52 34 0d  14 f0 10 41 44 44 20 52  |3,R3,R4....ADD R|
00003290  36 2c 52 36 2c 52 37 0d  14 fa 15 4d 4f 56 20 52  |6,R6,R7....MOV R|
000032a0  33 2c 52 33 2c 41 53 52  23 32 2d 31 0d 15 04 13  |3,R3,ASR#2-1....|
000032b0  4d 4f 56 20 52 36 2c 52  36 2c 41 53 52 23 32 0d  |MOV R6,R6,ASR#2.|
000032c0  15 0e 16 41 44 44 20 52  38 2c 52 38 2c 52 38 2c  |...ADD R8,R8,R8,|
000032d0  52 4f 52 23 34 0d 15 18  16 4d 4f 56 20 52 39 2c  |ROR#4....MOV R9,|
000032e0  52 38 2c 4c 53 52 23 33  32 2d 36 0d 15 22 10 4d  |R8,LSR#32-6..".M|
000032f0  55 4c 20 52 39 2c 52 35  2c 52 39 0d 15 2c 16 53  |UL R9,R5,R9..,.S|
00003300  55 42 20 52 39 2c 52 39  2c 52 35 2c 41 53 4c 23  |UB R9,R9,R5,ASL#|
00003310  35 0d 15 36 18 41 44 44  20 52 33 2c 52 33 2c 52  |5..6.ADD R3,R3,R|
00003320  39 2c 41 53 52 23 35 2d  31 0d 15 40 16 41 44 44  |9,ASR#5-1..@.ADD|
00003330  20 52 38 2c 52 38 2c 52  38 2c 52 4f 52 23 34 0d  | R8,R8,R8,ROR#4.|
00003340  15 4a 20 41 44 44 53 20  52 36 2c 52 36 2c 52 38  |.J ADDS R6,R6,R8|
00003350  2c 41 53 52 23 33 31 2d  28 53 43 25 2d 35 29 0d  |,ASR#31-(SC%-5).|
00003360  15 54 0f 4d 4f 56 4c 54  20 52 36 2c 23 30 0d 15  |.T.MOVLT R6,#0..|
00003370  5e 2f 53 54 4d 49 41 20  52 31 31 2c 7b 52 30 2c  |^/STMIA R11,{R0,|
00003380  52 31 2c 52 33 2c 52 36  7d 3a 3b 20 4e 65 77 20  |R1,R3,R6}:; New |
00003390  53 57 20 54 79 70 65 20  65 74 63 2e 2e 0d 15 68  |SW Type etc....h|
000033a0  13 41 44 44 20 52 31 31  2c 52 31 31 2c 23 33 32  |.ADD R11,R11,#32|
000033b0  0d 15 72 12 41 44 44 20  52 33 2c 52 31 32 2c 23  |..r.ADD R3,R12,#|
000033c0  33 32 0d 15 7c 27 4c 44  4d 49 41 20 52 33 2c 7b  |32..|'LDMIA R3,{|
000033d0  52 33 2c 52 36 7d 3a 3b  20 45 20 48 65 69 67 68  |R3,R6}:; E Heigh|
000033e0  74 2c 20 52 61 6e 64 6f  6d 0d 15 86 10 41 44 44  |t, Random....ADD|
000033f0  20 52 34 2c 52 33 2c 52  34 0d 15 90 10 41 44 44  | R4,R3,R4....ADD|
00003400  20 52 37 2c 52 36 2c 52  37 0d 15 9a 15 4d 4f 56  | R7,R6,R7....MOV|
00003410  20 52 34 2c 52 34 2c 41  53 52 23 32 2d 31 0d 15  | R4,R4,ASR#2-1..|
00003420  a4 13 4d 4f 56 20 52 37  2c 52 37 2c 41 53 52 23  |..MOV R7,R7,ASR#|
00003430  32 0d 15 ae 16 41 44 44  20 52 38 2c 52 38 2c 52  |2....ADD R8,R8,R|
00003440  38 2c 52 4f 52 23 34 0d  15 b8 16 4d 4f 56 20 52  |8,ROR#4....MOV R|
00003450  39 2c 52 38 2c 4c 53 52  23 33 32 2d 36 0d 15 c2  |9,R8,LSR#32-6...|
00003460  10 4d 55 4c 20 52 39 2c  52 35 2c 52 39 0d 15 cc  |.MUL R9,R5,R9...|
00003470  16 53 55 42 20 52 39 2c  52 39 2c 52 35 2c 41 53  |.SUB R9,R9,R5,AS|
00003480  4c 23 35 0d 15 d6 18 41  44 44 20 52 34 2c 52 34  |L#5....ADD R4,R4|
00003490  2c 52 39 2c 41 53 52 23  35 2d 31 0d 15 e0 16 41  |,R9,ASR#5-1....A|
000034a0  44 44 20 52 38 2c 52 38  2c 52 38 2c 52 4f 52 23  |DD R8,R8,R8,ROR#|
000034b0  34 0d 15 ea 20 41 44 44  53 20 52 37 2c 52 37 2c  |4... ADDS R7,R7,|
000034c0  52 38 2c 41 53 52 23 33  31 2d 28 53 43 25 2d 35  |R8,ASR#31-(SC%-5|
000034d0  29 0d 15 f4 0f 4d 4f 56  4c 54 20 52 37 2c 23 30  |)....MOVLT R7,#0|
000034e0  0d 15 fe 2f 53 54 4d 49  41 20 52 31 31 2c 7b 52  |.../STMIA R11,{R|
000034f0  30 2c 52 31 2c 52 34 2c  52 37 7d 3a 3b 20 4e 65  |0,R1,R4,R7}:; Ne|
00003500  77 20 53 45 20 54 79 70  65 20 65 74 63 2e 2e 0d  |w SE Type etc...|
00003510  16 08 19 41 44 44 20 52  31 31 2c 52 31 31 2c 52  |...ADD R11,R11,R|
00003520  31 30 2c 41 53 4c 23 35  0d 16 12 18 41 44 44 20  |10,ASL#5....ADD |
00003530  52 34 2c 52 31 32 2c 52  31 30 2c 41 53 4c 23 35  |R4,R12,R10,ASL#5|
00003540  0d 16 1c 27 4c 44 4d 49  41 20 52 34 2c 7b 52 34  |...'LDMIA R4,{R4|
00003550  2c 52 37 7d 3a 3b 20 4e  20 48 65 69 67 68 74 2c  |,R7}:; N Height,|
00003560  20 52 61 6e 64 6f 6d 0d  16 26 16 41 44 44 20 52  | Random..&.ADD R|
00003570  34 2c 52 34 2c 52 32 2c  41 53 4c 23 31 0d 16 30  |4,R4,R2,ASL#1..0|
00003580  16 41 44 44 20 52 37 2c  52 37 2c 52 35 2c 41 53  |.ADD R7,R7,R5,AS|
00003590  4c 23 31 0d 16 3a 10 41  44 44 20 52 33 2c 52 33  |L#1..:.ADD R3,R3|
000035a0  2c 52 34 0d 16 44 10 41  44 44 20 52 36 2c 52 36  |,R4..D.ADD R6,R6|
000035b0  2c 52 37 0d 16 4e 15 4d  4f 56 20 52 33 2c 52 33  |,R7..N.MOV R3,R3|
000035c0  2c 41 53 52 23 32 2d 31  0d 16 58 13 4d 4f 56 20  |,ASR#2-1..X.MOV |
000035d0  52 36 2c 52 36 2c 41 53  52 23 32 0d 16 62 16 41  |R6,R6,ASR#2..b.A|
000035e0  44 44 20 52 38 2c 52 38  2c 52 38 2c 52 4f 52 23  |DD R8,R8,R8,ROR#|
000035f0  34 0d 16 6c 16 4d 4f 56  20 52 39 2c 52 38 2c 4c  |4..l.MOV R9,R8,L|
00003600  53 52 23 33 32 2d 36 0d  16 76 10 4d 55 4c 20 52  |SR#32-6..v.MUL R|
00003610  39 2c 52 35 2c 52 39 0d  16 80 16 53 55 42 20 52  |9,R5,R9....SUB R|
00003620  39 2c 52 39 2c 52 35 2c  41 53 4c 23 35 0d 16 8a  |9,R9,R5,ASL#5...|
00003630  18 41 44 44 20 52 33 2c  52 33 2c 52 39 2c 41 53  |.ADD R3,R3,R9,AS|
00003640  52 23 35 2d 31 0d 16 94  16 41 44 44 20 52 38 2c  |R#5-1....ADD R8,|
00003650  52 38 2c 52 38 2c 52 4f  52 23 34 0d 16 9e 20 41  |R8,R8,ROR#4... A|
00003660  44 44 53 20 52 36 2c 52  36 2c 52 38 2c 41 53 52  |DDS R6,R6,R8,ASR|
00003670  23 33 31 2d 28 53 43 25  2d 35 29 0d 16 a8 0f 4d  |#31-(SC%-5)....M|
00003680  4f 56 4c 54 20 52 36 2c  23 30 0d 16 b2 2f 53 54  |OVLT R6,#0.../ST|
00003690  4d 49 41 20 52 31 31 2c  7b 52 30 2c 52 31 2c 52  |MIA R11,{R0,R1,R|
000036a0  33 2c 52 36 7d 3a 3b 20  4e 65 77 20 4e 45 20 54  |3,R6}:; New NE T|
000036b0  79 70 65 20 65 74 63 2e  2e 0d 16 bc 13 53 55 42  |ype etc......SUB|
000036c0  20 52 31 31 2c 52 31 31  2c 23 33 32 0d 16 c6 12  | R11,R11,#32....|
000036d0  53 55 42 20 52 33 2c 52  31 32 2c 23 33 32 0d 16  |SUB R3,R12,#32..|
000036e0  d0 2d 4c 44 4d 49 41 20  52 33 2c 7b 52 33 2c 52  |.-LDMIA R3,{R3,R|
000036f0  36 7d 3a 3b 20 57 20 48  65 69 67 68 74 2c 20 52  |6}:; W Height, R|
00003700  61 6e 64 6f 6d 20 61 67  61 69 6e 0d 16 da 10 41  |andom again....A|
00003710  44 44 20 52 34 2c 52 33  2c 52 34 0d 16 e4 10 41  |DD R4,R3,R4....A|
00003720  44 44 20 52 37 2c 52 36  2c 52 37 0d 16 ee 15 4d  |DD R7,R6,R7....M|
00003730  4f 56 20 52 34 2c 52 34  2c 41 53 52 23 32 2d 31  |OV R4,R4,ASR#2-1|
00003740  0d 16 f8 13 4d 4f 56 20  52 37 2c 52 37 2c 41 53  |....MOV R7,R7,AS|
00003750  52 23 32 0d 17 02 16 41  44 44 20 52 38 2c 52 38  |R#2....ADD R8,R8|
00003760  2c 52 38 2c 52 4f 52 23  34 0d 17 0c 16 4d 4f 56  |,R8,ROR#4....MOV|
00003770  20 52 39 2c 52 38 2c 4c  53 52 23 33 32 2d 36 0d  | R9,R8,LSR#32-6.|
00003780  17 16 10 4d 55 4c 20 52  39 2c 52 35 2c 52 39 0d  |...MUL R9,R5,R9.|
00003790  17 20 16 53 55 42 20 52  39 2c 52 39 2c 52 35 2c  |. .SUB R9,R9,R5,|
000037a0  41 53 4c 23 35 0d 17 2a  18 41 44 44 20 52 34 2c  |ASL#5..*.ADD R4,|
000037b0  52 34 2c 52 39 2c 41 53  52 23 35 2d 31 0d 17 34  |R4,R9,ASR#5-1..4|
000037c0  16 41 44 44 20 52 38 2c  52 38 2c 52 38 2c 52 4f  |.ADD R8,R8,R8,RO|
000037d0  52 23 34 0d 17 3e 20 41  44 44 53 20 52 37 2c 52  |R#4..> ADDS R7,R|
000037e0  37 2c 52 38 2c 41 53 52  23 33 31 2d 28 53 43 25  |7,R8,ASR#31-(SC%|
000037f0  2d 35 29 0d 17 48 0f 4d  4f 56 4c 54 20 52 37 2c  |-5)..H.MOVLT R7,|
00003800  23 30 0d 17 52 2f 53 54  4d 49 41 20 52 31 31 2c  |#0..R/STMIA R11,|
00003810  7b 52 30 2c 52 31 2c 52  34 2c 52 37 7d 3a 3b 20  |{R0,R1,R4,R7}:; |
00003820  4e 65 77 20 4e 57 20 54  79 70 65 20 65 74 63 2e  |New NW Type etc.|
00003830  2e 0d 17 5c 19 53 55 42  20 52 31 31 2c 52 31 31  |...\.SUB R11,R11|
00003840  2c 52 31 30 2c 41 53 4c  23 35 0d 17 66 1a 4c 44  |,R10,ASL#5..f.LD|
00003850  4d 46 44 20 52 31 33 21  2c 7b 52 30 2d 52 31 32  |MFD R13!,{R0-R12|
00003860  2c 50 43 7d 0d 17 70 05  3a 0d 17 7a 0e 2e 74 65  |,PC}..p.:..z..te|
00003870  73 74 6c 61 6e 64 25 0d  17 84 14 53 54 4d 46 44  |stland%....STMFD|
00003880  20 52 31 33 21 2c 7b 52  31 34 7d 0d 17 8e 1a 4f  | R13!,{R14}....O|
00003890  50 54 20 a4 61 64 72 28  30 2c 76 64 75 76 61 72  |PT .adr(0,vduvar|
000038a0  73 25 2c 32 29 0d 17 98  20 41 44 44 20 52 31 2c  |s%,2)... ADD R1,|
000038b0  52 30 2c 23 73 63 72 61  64 64 72 25 2d 76 64 75  |R0,#scraddr%-vdu|
000038c0  76 61 72 73 25 0d 17 a2  1d 53 57 49 20 22 4f 53  |vars%....SWI "OS|
000038d0  5f 52 65 61 64 56 64 75  56 61 72 69 61 62 6c 65  |_ReadVduVariable|
000038e0  73 22 0d 17 ac 14 4c 44  52 20 52 31 34 2c 73 63  |s"....LDR R14,sc|
000038f0  72 61 64 64 72 25 0d 17  b6 22 41 44 44 20 52 31  |raddr%..."ADD R1|
00003900  34 2c 52 31 34 2c 23 73  63 68 65 69 67 68 74 25  |4,R14,#scheight%|
00003910  2a 73 63 6c 69 6e 63 25  0d 17 c0 1a 4f 50 54 20  |*sclinc%....OPT |
00003920  a4 61 64 72 28 31 32 2c  6c 61 6e 64 25 2b 34 2c  |.adr(12,land%+4,|
00003930  33 29 0d 17 ca 13 4c 44  52 20 52 30 2c 64 69 73  |3)....LDR R0,dis|
00003940  70 6c 61 79 25 0d 17 d4  20 41 44 44 20 52 31 32  |play%... ADD R12|
00003950  2c 52 31 32 2c 52 30 2c  41 53 4c 23 33 2b 4c 53  |,R12,R0,ASL#3+LS|
00003960  25 2b 4c 53 25 0d 17 de  19 4f 50 54 20 a4 61 64  |%+LS%....OPT .ad|
00003970  72 28 31 2c 70 6f 73 25  2b 32 34 2c 32 29 0d 17  |r(1,pos%+24,2)..|
00003980  e8 18 4c 44 52 20 52 31  2c 5b 52 31 2c 52 30 2c  |..LDR R1,[R1,R0,|
00003990  41 53 4c 23 35 5d 0d 17  f2 17 4f 50 54 20 a4 61  |ASL#5]....OPT .a|
000039a0  64 72 28 32 2c 76 69 65  77 25 2c 32 29 0d 17 fc  |dr(2,view%,2)...|
000039b0  14 4c 44 4d 49 41 20 52  32 2c 7b 52 32 2d 52 33  |.LDMIA R2,{R2-R3|
000039c0  7d 0d 18 06 14 4d 4f 56  20 52 32 2c 52 32 2c 41  |}....MOV R2,R2,A|
000039d0  53 52 20 52 31 0d 18 10  14 4d 4f 56 20 52 33 2c  |SR R1....MOV R3,|
000039e0  52 33 2c 41 53 52 20 52  31 0d 18 1a 35 53 55 42  |R3,ASR R1...5SUB|
000039f0  20 52 32 2c 52 32 2c 23  6d 73 69 7a 65 25 2f 32  | R2,R2,#msize%/2|
00003a00  2d 31 3a 3b 20 53 57 20  63 6f 72 6e 65 72 20 6f  |-1:; SW corner o|
00003a10  66 20 76 69 73 69 62 6c  65 20 61 72 65 61 0d 18  |f visible area..|
00003a20  24 19 53 55 42 20 52 33  2c 52 33 2c 23 6d 73 69  |$.SUB R3,R3,#msi|
00003a30  7a 65 25 2f 32 2d 31 0d  18 2e 15 4d 4f 56 20 52  |ze%/2-1....MOV R|
00003a40  32 2c 52 32 2c 41 53 4c  23 4d 4c 25 0d 18 38 15  |2,R2,ASL#ML%..8.|
00003a50  4d 4f 56 20 52 33 2c 52  33 2c 41 53 4c 23 4d 4c  |MOV R3,R3,ASL#ML|
00003a60  25 0d 18 42 17 4f 50 54  20 a4 61 64 72 28 31 30  |%..B.OPT .adr(10|
00003a70  2c 63 6f 6c 25 2c 32 29  0d 18 4c 15 4d 4f 56 20  |,col%,2)..L.MOV |
00003a80  52 31 31 2c 23 6c 73 69  7a 65 25 2d 38 0d 18 56  |R11,#lsize%-8..V|
00003a90  0b 2e 6e 6c 6f 6f 70 25  0d 18 60 1a 53 55 42 20  |..nloop%..`.SUB |
00003aa0  52 31 34 2c 52 31 34 2c  23 73 63 6c 69 6e 63 25  |R14,R14,#sclinc%|
00003ab0  2a 32 0d 18 6a 1d 53 55  42 20 52 31 31 2c 52 31  |*2..j.SUB R11,R1|
00003ac0  31 2c 23 6c 73 69 7a 65  25 2d 38 3c 3c 31 36 0d  |1,#lsize%-8<<16.|
00003ad0  18 74 0b 2e 65 6c 6f 6f  70 25 0d 18 7e 15 80 20  |.t..eloop%..~.. |
00003ae0  52 30 2c 52 32 2c 23 6c  73 69 7a 65 25 2d 31 0d  |R0,R2,#lsize%-1.|
00003af0  18 88 15 80 20 52 31 2c  52 33 2c 23 6c 73 69 7a  |.... R1,R3,#lsiz|
00003b00  65 25 2d 31 0d 18 92 18  41 44 44 20 52 30 2c 52  |e%-1....ADD R0,R|
00003b10  30 2c 52 31 2c 41 53 4c  23 4c 53 25 0d 18 9c 19  |0,R1,ASL#LS%....|
00003b20  4c 44 52 20 52 30 2c 5b  52 31 32 2c 52 30 2c 41  |LDR R0,[R12,R0,A|
00003b30  53 4c 23 33 5d 0d 18 a6  17 41 44 44 20 52 30 2c  |SL#3]....ADD R0,|
00003b40  52 31 30 2c 52 30 2c 41  53 4c 23 33 0d 18 b0 25  |R10,R0,ASL#3...%|
00003b50  4c 44 4d 49 41 20 52 30  2c 7b 52 30 2d 52 31 7d  |LDMIA R0,{R0-R1}|
00003b60  3a 3b 20 44 69 74 68 65  72 20 70 61 74 74 65 72  |:; Dither patter|
00003b70  6e 0d 18 ba 14 4d 4f 56  20 52 34 2c 52 30 2c 4c  |n....MOV R4,R0,L|
00003b80  53 4c 23 31 36 0d 18 c4  14 4d 4f 56 20 52 35 2c  |SL#16....MOV R5,|
00003b90  52 31 2c 4c 53 4c 23 31  36 0d 18 ce 10 41 44 44  |R1,LSL#16....ADD|
00003ba0  20 52 32 2c 52 32 2c 23  31 0d 18 d8 15 80 20 52  | R2,R2,#1..... R|
00003bb0  30 2c 52 32 2c 23 6c 73  69 7a 65 25 2d 31 0d 18  |0,R2,#lsize%-1..|
00003bc0  e2 15 80 20 52 31 2c 52  33 2c 23 6c 73 69 7a 65  |... R1,R3,#lsize|
00003bd0  25 2d 31 0d 18 ec 18 41  44 44 20 52 30 2c 52 30  |%-1....ADD R0,R0|
00003be0  2c 52 31 2c 41 53 4c 23  4c 53 25 0d 18 f6 19 4c  |,R1,ASL#LS%....L|
00003bf0  44 52 20 52 30 2c 5b 52  31 32 2c 52 30 2c 41 53  |DR R0,[R12,R0,AS|
00003c00  4c 23 33 5d 0d 19 00 17  41 44 44 20 52 30 2c 52  |L#3]....ADD R0,R|
00003c10  31 30 2c 52 30 2c 41 53  4c 23 33 0d 19 0a 25 4c  |10,R0,ASL#3...%L|
00003c20  44 4d 49 41 20 52 30 2c  7b 52 30 2d 52 31 7d 3a  |DMIA R0,{R0-R1}:|
00003c30  3b 20 44 69 74 68 65 72  20 70 61 74 74 65 72 6e  |; Dither pattern|
00003c40  0d 19 14 16 84 52 20 52  34 2c 52 34 2c 52 30 2c  |.....R R4,R4,R0,|
00003c50  4c 53 52 23 31 36 0d 19  1e 16 84 52 20 52 35 2c  |LSR#16.....R R5,|
00003c60  52 35 2c 52 31 2c 4c 53  52 23 31 36 0d 19 28 14  |R5,R1,LSR#16..(.|
00003c70  4d 4f 56 20 52 34 2c 52  34 2c 52 4f 52 23 31 36  |MOV R4,R4,ROR#16|
00003c80  0d 19 32 14 4d 4f 56 20  52 35 2c 52 35 2c 52 4f  |..2.MOV R5,R5,RO|
00003c90  52 23 31 36 0d 19 3c 19  53 54 52 20 52 34 2c 5b  |R#16..<.STR R4,[|
00003ca0  52 31 34 2c 23 73 63 6c  69 6e 63 25 5d 0d 19 46  |R14,#sclinc%]..F|
00003cb0  13 53 54 52 20 52 35 2c  5b 52 31 34 5d 2c 23 34  |.STR R5,[R14],#4|
00003cc0  0d 19 50 10 41 44 44 20  52 32 2c 52 32 2c 23 31  |..P.ADD R2,R2,#1|
00003cd0  0d 19 5a 17 41 44 44 53  20 52 31 31 2c 52 31 31  |..Z.ADDS R11,R11|
00003ce0  2c 23 32 3c 3c 31 36 0d  19 64 0e 42 4c 45 20 65  |,#2<<16..d.BLE e|
00003cf0  6c 6f 6f 70 25 0d 19 6e  17 53 55 42 20 52 32 2c  |loop%..n.SUB R2,|
00003d00  52 32 2c 23 6c 73 69 7a  65 25 2d 38 0d 19 78 1d  |R2,#lsize%-8..x.|
00003d10  53 55 42 20 52 31 34 2c  52 31 34 2c 23 32 2a 28  |SUB R14,R14,#2*(|
00003d20  6c 73 69 7a 65 25 2d 38  29 0d 19 82 10 41 44 44  |lsize%-8)....ADD|
00003d30  20 52 33 2c 52 33 2c 23  31 0d 19 8c 1a 53 55 42  | R3,R3,#1....SUB|
00003d40  20 52 31 34 2c 52 31 34  2c 23 73 63 6c 69 6e 63  | R14,R14,#sclinc|
00003d50  25 2a 32 0d 19 96 1d 53  55 42 20 52 31 31 2c 52  |%*2....SUB R11,R|
00003d60  31 31 2c 23 6c 73 69 7a  65 25 2d 38 3c 3c 31 36  |11,#lsize%-8<<16|
00003d70  0d 19 a0 0b 2e 65 6c 6f  6f 70 25 0d 19 aa 15 80  |.....eloop%.....|
00003d80  20 52 30 2c 52 32 2c 23  6c 73 69 7a 65 25 2d 31  | R0,R2,#lsize%-1|
00003d90  0d 19 b4 15 80 20 52 31  2c 52 33 2c 23 6c 73 69  |..... R1,R3,#lsi|
00003da0  7a 65 25 2d 31 0d 19 be  18 41 44 44 20 52 30 2c  |ze%-1....ADD R0,|
00003db0  52 30 2c 52 31 2c 41 53  4c 23 4c 53 25 0d 19 c8  |R0,R1,ASL#LS%...|
00003dc0  19 4c 44 52 20 52 30 2c  5b 52 31 32 2c 52 30 2c  |.LDR R0,[R12,R0,|
00003dd0  41 53 4c 23 33 5d 0d 19  d2 17 41 44 44 20 52 30  |ASL#3]....ADD R0|
00003de0  2c 52 31 30 2c 52 30 2c  41 53 4c 23 33 0d 19 dc  |,R10,R0,ASL#3...|
00003df0  25 4c 44 4d 49 41 20 52  30 2c 7b 52 30 2d 52 31  |%LDMIA R0,{R0-R1|
00003e00  7d 3a 3b 20 44 69 74 68  65 72 20 70 61 74 74 65  |}:; Dither patte|
00003e10  72 6e 0d 19 e6 14 4d 4f  56 20 52 34 2c 52 30 2c  |rn....MOV R4,R0,|
00003e20  4c 53 52 23 31 36 0d 19  f0 14 4d 4f 56 20 52 35  |LSR#16....MOV R5|
00003e30  2c 52 31 2c 4c 53 52 23  31 36 0d 19 fa 10 41 44  |,R1,LSR#16....AD|
00003e40  44 20 52 32 2c 52 32 2c  23 31 0d 1a 04 15 80 20  |D R2,R2,#1..... |
00003e50  52 30 2c 52 32 2c 23 6c  73 69 7a 65 25 2d 31 0d  |R0,R2,#lsize%-1.|
00003e60  1a 0e 15 80 20 52 31 2c  52 33 2c 23 6c 73 69 7a  |.... R1,R3,#lsiz|
00003e70  65 25 2d 31 0d 1a 18 18  41 44 44 20 52 30 2c 52  |e%-1....ADD R0,R|
00003e80  30 2c 52 31 2c 41 53 4c  23 4c 53 25 0d 1a 22 19  |0,R1,ASL#LS%..".|
00003e90  4c 44 52 20 52 30 2c 5b  52 31 32 2c 52 30 2c 41  |LDR R0,[R12,R0,A|
00003ea0  53 4c 23 33 5d 0d 1a 2c  17 41 44 44 20 52 30 2c  |SL#3]..,.ADD R0,|
00003eb0  52 31 30 2c 52 30 2c 41  53 4c 23 33 0d 1a 36 25  |R10,R0,ASL#3..6%|
00003ec0  4c 44 4d 49 41 20 52 30  2c 7b 52 30 2d 52 31 7d  |LDMIA R0,{R0-R1}|
00003ed0  3a 3b 20 44 69 74 68 65  72 20 70 61 74 74 65 72  |:; Dither patter|
00003ee0  6e 0d 1a 40 16 84 52 20  52 34 2c 52 34 2c 52 30  |n..@..R R4,R4,R0|
00003ef0  2c 4c 53 4c 23 31 36 0d  1a 4a 16 84 52 20 52 35  |,LSL#16..J..R R5|
00003f00  2c 52 35 2c 52 31 2c 4c  53 4c 23 31 36 0d 1a 54  |,R5,R1,LSL#16..T|
00003f10  19 53 54 52 20 52 34 2c  5b 52 31 34 2c 23 73 63  |.STR R4,[R14,#sc|
00003f20  6c 69 6e 63 25 5d 0d 1a  5e 13 53 54 52 20 52 35  |linc%]..^.STR R5|
00003f30  2c 5b 52 31 34 5d 2c 23  34 0d 1a 68 10 41 44 44  |,[R14],#4..h.ADD|
00003f40  20 52 32 2c 52 32 2c 23  31 0d 1a 72 17 41 44 44  | R2,R2,#1..r.ADD|
00003f50  53 20 52 31 31 2c 52 31  31 2c 23 32 3c 3c 31 36  |S R11,R11,#2<<16|
00003f60  0d 1a 7c 0e 42 4c 45 20  65 6c 6f 6f 70 25 0d 1a  |..|.BLE eloop%..|
00003f70  86 17 53 55 42 20 52 32  2c 52 32 2c 23 6c 73 69  |..SUB R2,R2,#lsi|
00003f80  7a 65 25 2d 38 0d 1a 90  1d 53 55 42 20 52 31 34  |ze%-8....SUB R14|
00003f90  2c 52 31 34 2c 23 32 2a  28 6c 73 69 7a 65 25 2d  |,R14,#2*(lsize%-|
00003fa0  38 29 0d 1a 9a 10 41 44  44 20 52 33 2c 52 33 2c  |8)....ADD R3,R3,|
00003fb0  23 31 0d 1a a4 13 53 55  42 53 20 52 31 31 2c 52  |#1....SUBS R11,R|
00003fc0  31 31 2c 23 32 0d 1a ae  0e 42 47 54 20 6e 6c 6f  |11,#2....BGT nlo|
00003fd0  6f 70 25 0d 1a b8 13 4c  44 4d 46 44 20 52 31 33  |op%....LDMFD R13|
00003fe0  21 2c 7b 50 43 7d 0d 1a  c2 05 3a 0d 1a cc 0e 2e  |!,{PC}....:.....|
00003ff0  6d 61 6b 65 6c 61 6e 64  25 0d 1a d6 14 53 54 4d  |makeland%....STM|
00004000  46 44 20 52 31 33 21 2c  7b 52 31 34 7d 0d 1a e0  |FD R13!,{R14}...|
00004010  12 4d 4f 56 20 52 37 2c  23 76 69 73 25 2d 31 0d  |.MOV R7,#vis%-1.|
00004020  1a ea 0d 2e 6c 65 76 6c  6f 6f 70 25 0d 1a f4 16  |....levloop%....|
00004030  4f 50 54 20 a4 61 64 72  28 30 2c 70 6f 73 25 2c  |OPT .adr(0,pos%,|
00004040  32 29 0d 1a fe 16 41 44  44 20 52 30 2c 52 30 2c  |2)....ADD R0,R0,|
00004050  52 37 2c 41 53 4c 23 35  0d 1b 08 44 4c 44 4d 49  |R7,ASL#5...DLDMI|
00004060  41 20 52 30 2c 7b 52 30  2d 52 31 2c 52 32 2d 52  |A R0,{R0-R1,R2-R|
00004070  33 2c 52 34 2d 52 35 2c  52 39 7d 3a 3b 20 4e 65  |3,R4-R5,R9}:; Ne|
00004080  77 20 6f 72 69 67 69 6e  2c 20 4f 6c 64 20 6f 72  |w origin, Old or|
00004090  69 67 69 6e 2c 2c 20 53  63 61 6c 65 0d 1b 12 0d  |igin,, Scale....|
000040a0  43 4d 50 20 52 30 2c 52  32 0d 1b 1c 0f 43 4d 50  |CMP R0,R2....CMP|
000040b0  45 51 20 52 31 2c 52 33  0d 1b 26 11 42 45 51 20  |EQ R1,R3..&.BEQ |
000040c0  6d 6c 65 6e 64 6c 65 76  25 0d 1b 30 17 4f 50 54  |mlendlev%..0.OPT|
000040d0  20 a4 61 64 72 28 31 32  2c 6d 61 70 25 2c 33 29  | .adr(12,map%,3)|
000040e0  0d 1b 3a 20 41 44 44 20  52 31 32 2c 52 31 32 2c  |..: ADD R12,R12,|
000040f0  52 37 2c 41 53 4c 23 35  2b 4d 53 25 2b 4d 53 25  |R7,ASL#5+MS%+MS%|
00004100  0d 1b 44 17 4f 50 54 20  a4 61 64 72 28 38 2c 6c  |..D.OPT .adr(8,l|
00004110  61 6e 64 25 2c 33 29 0d  1b 4e 1e 41 44 44 20 52  |and%,3)..N.ADD R|
00004120  38 2c 52 38 2c 52 37 2c  41 53 4c 23 33 2b 4c 53  |8,R8,R7,ASL#3+LS|
00004130  25 2b 4c 53 25 0d 1b 58  13 4d 4f 56 20 52 31 30  |%+LS%..X.MOV R10|
00004140  2c 23 6d 73 69 7a 65 25  0d 1b 62 1a 53 55 42 20  |,#msize%..b.SUB |
00004150  52 37 2c 52 37 2c 23 6d  73 69 7a 65 25 2d 31 3c  |R7,R7,#msize%-1<|
00004160  3c 38 0d 1b 6c 0b 2e 6e  6c 6f 6f 70 25 0d 1b 76  |<8..l..nloop%..v|
00004170  1b 41 44 44 20 52 37 2c  52 37 2c 23 6d 73 69 7a  |.ADD R7,R7,#msiz|
00004180  65 25 2d 31 3c 3c 32 30  0d 1b 80 0b 2e 65 6c 6f  |e%-1<<20.....elo|
00004190  6f 70 25 0d 1b 8a 17 80  20 52 34 2c 52 30 2c 23  |op%..... R4,R0,#|
000041a0  28 31 3c 3c 4d 53 25 29  2d 31 0d 1b 94 17 80 20  |(1<<MS%)-1..... |
000041b0  52 35 2c 52 31 2c 23 28  31 3c 3c 4d 53 25 29 2d  |R5,R1,#(1<<MS%)-|
000041c0  31 0d 1b 9e 1b 41 44 44  20 52 31 31 2c 52 38 2c  |1....ADD R11,R8,|
000041d0  52 34 2c 41 53 4c 23 4d  4c 25 2b 33 0d 1b a8 20  |R4,ASL#ML%+3... |
000041e0  41 44 44 20 52 31 31 2c  52 31 31 2c 52 35 2c 41  |ADD R11,R11,R5,A|
000041f0  53 4c 23 4d 4c 25 2b 33  2b 4c 53 25 0d 1b b2 15  |SL#ML%+3+LS%....|
00004200  41 44 52 20 52 31 34 2c  6d 6c 72 65 74 75 72 6e  |ADR R14,mlreturn|
00004210  25 0d 1b bc 11 53 55 42  53 20 52 34 2c 52 30 2c  |%....SUBS R4,R0,|
00004220  52 32 0d 1b c6 13 53 55  42 47 45 53 20 52 35 2c  |R2....SUBGES R5,|
00004230  52 31 2c 52 33 0d 1b d0  10 42 4c 54 20 63 61 6c  |R1,R3....BLT cal|
00004240  63 6c 73 71 25 0d 1b da  14 43 4d 50 20 52 34 2c  |clsq%....CMP R4,|
00004250  23 6d 73 69 7a 65 25 2d  31 0d 1b e4 16 43 4d 50  |#msize%-1....CMP|
00004260  4c 54 20 52 35 2c 23 6d  73 69 7a 65 25 2d 31 0d  |LT R5,#msize%-1.|
00004270  1b ee 10 42 47 45 20 63  61 6c 63 6c 73 71 25 0d  |...BGE calclsq%.|
00004280  1b f8 0e 2e 6d 6c 72 65  74 75 72 6e 25 0d 1c 02  |....mlreturn%...|
00004290  10 41 44 44 20 52 30 2c  52 30 2c 23 31 0d 1c 0c  |.ADD R0,R0,#1...|
000042a0  13 41 44 44 20 52 31 32  2c 52 31 32 2c 23 33 32  |.ADD R12,R12,#32|
000042b0  0d 1c 16 15 53 55 42 53  20 52 37 2c 52 37 2c 23  |....SUBS R7,R7,#|
000042c0  31 3c 3c 32 30 0d 1c 20  0e 42 47 45 20 65 6c 6f  |1<<20.. .BGE elo|
000042d0  6f 70 25 0d 1c 2a 17 53  55 42 20 52 30 2c 52 30  |op%..*.SUB R0,R0|
000042e0  2c 23 6d 73 69 7a 65 25  2d 31 0d 1c 34 1e 53 55  |,#msize%-1..4.SU|
000042f0  42 20 52 31 32 2c 52 31  32 2c 23 33 32 2a 28 6d  |B R12,R12,#32*(m|
00004300  73 69 7a 65 25 2d 31 29  0d 1c 3e 10 41 44 44 20  |size%-1)..>.ADD |
00004310  52 31 2c 52 31 2c 23 31  0d 1c 48 1a 41 44 44 20  |R1,R1,#1..H.ADD |
00004320  52 31 32 2c 52 31 32 2c  23 33 32 2a 6d 73 69 7a  |R12,R12,#32*msiz|
00004330  65 25 0d 1c 52 14 41 44  44 53 20 52 37 2c 52 37  |e%..R.ADDS R7,R7|
00004340  2c 23 31 3c 3c 38 0d 1c  5c 0e 42 4c 54 20 6e 6c  |,#1<<8..\.BLT nl|
00004350  6f 6f 70 25 0d 1c 66 0e  2e 6d 6c 65 6e 64 6c 65  |oop%..f..mlendle|
00004360  76 25 0d 1c 70 11 53 55  42 53 20 52 37 2c 52 37  |v%..p.SUBS R7,R7|
00004370  2c 23 31 0d 1c 7a 10 42  47 45 20 6c 65 76 6c 6f  |,#1..z.BGE levlo|
00004380  6f 70 25 0d 1c 84 13 4c  44 4d 46 44 20 52 31 33  |op%....LDMFD R13|
00004390  21 2c 7b 50 43 7d 0d 1c  8e 05 3a 0d 1c 98 3e 3b  |!,{PC}....:...>;|
000043a0  20 53 75 62 64 69 76 69  64 65 73 20 61 20 6d 61  | Subdivides a ma|
000043b0  70 20 73 71 75 61 72 65  20 74 6f 20 6d 61 6b 65  |p square to make|
000043c0  20 34 78 34 20 6c 61 6e  64 20 73 71 75 61 72 65  | 4x4 land square|
000043d0  73 20 28 4d 4c 25 3d 32  29 0d 1c a2 17 3b 20 52  |s (ML%=2)....; R|
000043e0  31 32 20 69 73 20 6f 6c  64 20 73 71 75 61 72 65  |12 is old square|
000043f0  0d 1c ac 17 3b 20 52 31  31 20 69 73 20 6e 65 77  |....; R11 is new|
00004400  20 73 71 75 61 72 65 0d  1c b6 12 3b 20 52 31 30  | square....; R10|
00004410  20 69 73 20 6d 73 69 7a  65 0d 1c c0 3b 3b 20 52  | is msize...;; R|
00004420  39 20 69 73 20 73 63 61  6c 65 20 28 6c 6f 67 32  |9 is scale (log2|
00004430  20 73 69 7a 65 20 6f 66  20 6d 61 70 20 73 71 75  | size of map squ|
00004440  61 72 65 20 69 6e 20 77  6f 72 6c 64 20 63 6f 6f  |are in world coo|
00004450  72 64 73 29 0d 1c ca 05  3a 0d 1c d4 0d 2e 63 61  |rds)....:.....ca|
00004460  6c 63 6c 73 71 25 0d 1c  de 1b 53 54 4d 46 44 20  |lclsq%....STMFD |
00004470  52 31 33 21 2c 7b 52 30  2d 52 31 32 2c 52 31 34  |R13!,{R0-R12,R14|
00004480  7d 0d 1c e8 36 53 55 42  20 52 39 2c 52 39 2c 23  |}...6SUB R9,R9,#|
00004490  53 43 25 3a 3b 20 4c 6f  67 32 20 73 71 75 61 72  |SC%:; Log2 squar|
000044a0  65 20 63 6f 6f 72 64 20  69 6e 20 77 6f 72 6c 64  |e coord in world|
000044b0  20 63 6f 6f 72 64 73 0d  1c f2 15 3b 20 47 65 74  | coords....; Get|
000044c0  20 74 68 65 20 68 65 69  67 68 74 73 0d 1c fc 49  | the heights...I|
000044d0  4c 44 4d 49 42 20 52 31  32 2c 7b 52 30 2c 52 32  |LDMIB R12,{R0,R2|
000044e0  2c 52 38 7d 3a 3b 20 57  61 74 65 72 20 6c 65 76  |,R8}:; Water lev|
000044f0  65 6c 2c 20 53 57 20 68  65 69 67 68 74 20 28 69  |el, SW height (i|
00004500  6e 20 73 71 75 61 72 65  20 63 6f 6f 72 64 73 29  |n square coords)|
00004510  2c 20 72 6e 64 0d 1d 06  12 41 44 44 20 52 31 32  |, rnd....ADD R12|
00004520  2c 52 31 32 2c 23 38 0d  1d 10 12 41 44 44 20 52  |,R12,#8....ADD R|
00004530  33 2c 52 31 32 2c 23 33  32 0d 1d 1a 25 4c 44 4d  |3,R12,#32...%LDM|
00004540  49 41 20 52 33 2c 7b 52  33 2c 52 37 7d 3a 3b 20  |IA R3,{R3,R7}:; |
00004550  53 45 20 68 65 69 67 68  74 2c 20 72 6e 64 0d 1d  |SE height, rnd..|
00004560  24 10 41 44 44 20 52 38  2c 52 38 2c 52 37 0d 1d  |$.ADD R8,R8,R7..|
00004570  2e 19 41 44 44 20 52 31  32 2c 52 31 32 2c 52 31  |..ADD R12,R12,R1|
00004580  30 2c 41 53 4c 23 35 0d  1d 38 26 4c 44 4d 49 41  |0,ASL#5..8&LDMIA|
00004590  20 52 31 32 2c 7b 52 34  2c 52 37 7d 3a 3b 20 4e  | R12,{R4,R7}:; N|
000045a0  57 20 68 65 69 67 68 74  2c 20 72 6e 64 0d 1d 42  |W height, rnd..B|
000045b0  10 41 44 44 20 52 38 2c  52 38 2c 52 37 0d 1d 4c  |.ADD R8,R8,R7..L|
000045c0  12 41 44 44 20 52 35 2c  52 31 32 2c 23 33 32 0d  |.ADD R5,R12,#32.|
000045d0  1d 56 25 4c 44 4d 49 41  20 52 35 2c 7b 52 35 2c  |.V%LDMIA R5,{R5,|
000045e0  52 37 7d 3a 3b 20 4e 45  20 68 65 69 67 68 74 2c  |R7}:; NE height,|
000045f0  20 72 6e 64 0d 1d 60 10  41 44 44 20 52 38 2c 52  | rnd..`.ADD R8,R|
00004600  38 2c 52 37 0d 1d 6a 1e  3b 20 43 61 6c 63 75 6c  |8,R7..j.; Calcul|
00004610  61 74 65 20 61 76 65 72  61 67 65 20 68 65 69 67  |ate average heig|
00004620  68 74 0d 1d 74 10 41 44  44 20 52 31 2c 52 32 2c  |ht..t.ADD R1,R2,|
00004630  52 33 0d 1d 7e 10 41 44  44 20 52 31 2c 52 31 2c  |R3..~.ADD R1,R1,|
00004640  52 34 0d 1d 88 10 41 44  44 20 52 31 2c 52 31 2c  |R4....ADD R1,R1,|
00004650  52 35 0d 1d 92 13 4d 4f  56 20 52 31 2c 52 31 2c  |R5....MOV R1,R1,|
00004660  41 53 52 23 32 0d 1d 9c  20 3b 20 43 61 6c 63 75  |ASR#2... ; Calcu|
00004670  6c 61 74 65 20 6c 61 6e  64 20 62 61 73 65 20 63  |late land base c|
00004680  6f 6c 6f 75 72 0d 1d a6  24 4d 4f 56 20 52 37 2c  |olour...$MOV R7,|
00004690  52 31 2c 41 53 4c 20 52  39 3a 3b 20 48 65 69 67  |R1,ASL R9:; Heig|
000046a0  68 74 20 69 6e 20 41 43  25 0d 1d b0 3e 41 44 44  |ht in AC%...>ADD|
000046b0  20 52 37 2c 52 37 2c 52  38 2c 41 53 4c 23 28 41  | R7,R7,R8,ASL#(A|
000046c0  43 25 2b 39 29 2d 28 53  43 25 2b 31 29 3a 3b 20  |C%+9)-(SC%+1):; |
000046d0  42 75 6d 70 79 20 67 72  6f 75 6e 64 20 73 65 65  |Bumpy ground see|
000046e0  6d 73 20 68 69 67 68 0d  1d ba 18 4d 4f 56 20 52  |ms high....MOV R|
000046f0  38 2c 23 35 3c 3c 35 3a  3b 20 47 72 61 73 73 0d  |8,#5<<5:; Grass.|
00004700  1d c4 14 43 4d 50 20 52  37 2c 23 31 32 38 3c 3c  |...CMP R7,#128<<|
00004710  41 43 25 0d 1d ce 1c 4d  4f 56 47 45 20 52 38 2c  |AC%....MOVGE R8,|
00004720  23 37 3c 3c 35 3a 3b 20  42 72 61 63 6b 65 6e 0d  |#7<<5:; Bracken.|
00004730  1d d8 14 43 4d 50 20 52  37 2c 23 32 35 36 3c 3c  |...CMP R7,#256<<|
00004740  41 43 25 0d 1d e2 1c 4d  4f 56 47 45 20 52 38 2c  |AC%....MOVGE R8,|
00004750  23 39 3c 3c 35 3a 3b 20  48 65 61 74 68 65 72 0d  |#9<<5:; Heather.|
00004760  1d ec 14 43 4d 50 20 52  37 2c 23 33 38 34 3c 3c  |...CMP R7,#384<<|
00004770  41 43 25 0d 1d f6 21 4d  4f 56 47 45 20 52 38 2c  |AC%...!MOVGE R8,|
00004780  23 31 31 3c 3c 35 3a 3b  20 52 6f 75 67 68 20 67  |#11<<5:; Rough g|
00004790  72 61 73 73 0d 1e 00 14  43 4d 50 20 52 37 2c 23  |rass....CMP R7,#|
000047a0  35 31 32 3c 3c 41 43 25  0d 1e 0a 1b 4d 4f 56 47  |512<<AC%....MOVG|
000047b0  45 20 52 38 2c 23 31 33  3c 3c 35 3a 3b 20 52 6f  |E R8,#13<<5:; Ro|
000047c0  63 6b 73 0d 1e 14 14 43  4d 50 20 52 37 2c 23 36  |cks....CMP R7,#6|
000047d0  34 30 3c 3c 41 43 25 0d  1e 1e 1a 4d 4f 56 47 45  |40<<AC%....MOVGE|
000047e0  20 52 38 2c 23 31 35 3c  3c 35 3a 3b 20 53 6e 6f  | R8,#15<<5:; Sno|
000047f0  77 0d 1e 28 25 53 55 42  20 52 37 2c 52 35 2c 52  |w..(%SUB R7,R5,R|
00004800  32 3a 3b 20 53 57 20 66  61 63 69 6e 67 20 73 6c  |2:; SW facing sl|
00004810  6f 70 65 3c 3c 33 0d 1e  32 2b 4d 4f 56 20 52 37  |ope<<3..2+MOV R7|
00004820  2c 52 37 2c 41 53 52 23  53 43 25 2d 34 3a 3b 20  |,R7,ASR#SC%-4:; |
00004830  41 70 70 72 6f 78 20 72  61 6e 67 65 20 2b 2d 33  |Approx range +-3|
00004840  32 0d 1e 3c 12 41 44 44  53 20 52 37 2c 52 37 2c  |2..<.ADDS R7,R7,|
00004850  23 32 34 0d 1e 46 0f 4d  4f 56 4c 54 20 52 37 2c  |#24..F.MOVLT R7,|
00004860  23 30 0d 1e 50 0e 43 4d  50 20 52 37 2c 23 36 30  |#0..P.CMP R7,#60|
00004870  0d 1e 5a 10 4d 4f 56 47  54 20 52 37 2c 23 36 30  |..Z.MOVGT R7,#60|
00004880  0d 1e 64 10 41 44 44 20  52 38 2c 52 38 2c 52 37  |..d.ADD R8,R8,R7|
00004890  0d 1e 6e 1c 3b 20 43 61  6c 63 75 6c 61 74 65 20  |..n.; Calculate |
000048a0  77 61 74 65 72 20 63 6f  6c 6f 75 72 0d 1e 78 11  |water colour..x.|
000048b0  53 55 42 53 20 52 37 2c  52 30 2c 52 31 0d 1e 82  |SUBS R7,R0,R1...|
000048c0  0f 4d 4f 56 4c 54 20 52  37 2c 23 30 0d 1e 8c 14  |.MOVLT R7,#0....|
000048d0  4d 4f 56 20 52 37 2c 52  37 2c 41 53 4c 20 52 39  |MOV R7,R7,ASL R9|
000048e0  0d 1e 96 2e 4d 4f 56 20  52 37 2c 52 37 2c 41 53  |....MOV R7,R7,AS|
000048f0  52 23 41 43 25 2d 31 3a  3b 20 44 65 70 74 68 20  |R#AC%-1:; Depth |
00004900  69 6e 20 68 61 6c 66 20  6d 65 74 72 65 73 0d 1e  |in half metres..|
00004910  a0 1b 4d 4f 56 20 52 31  2c 23 30 3c 3c 36 3a 3b  |..MOV R1,#0<<6:;|
00004920  20 53 65 61 20 62 6c 75  65 0d 1e aa 0e 43 4d 50  | Sea blue....CMP|
00004930  20 52 37 2c 23 36 34 0d  1e b4 15 4d 4f 56 47 45  | R7,#64....MOVGE|
00004940  20 52 37 2c 52 37 2c 41  53 52 23 34 0d 1e be 13  | R7,R7,ASR#4....|
00004950  41 44 44 47 45 20 52 31  2c 52 31 2c 23 31 36 0d  |ADDGE R1,R1,#16.|
00004960  1e c8 0e 43 4d 50 20 52  37 2c 23 31 36 0d 1e d2  |...CMP R7,#16...|
00004970  15 4d 4f 56 47 45 20 52  37 2c 52 37 2c 41 53 52  |.MOVGE R7,R7,ASR|
00004980  23 32 0d 1e dc 12 41 44  44 47 45 20 52 31 2c 52  |#2....ADDGE R1,R|
00004990  31 2c 23 38 0d 1e e6 0d  43 4d 50 20 52 37 2c 23  |1,#8....CMP R7,#|
000049a0  38 0d 1e f0 15 4d 4f 56  47 45 20 52 37 2c 52 37  |8....MOVGE R7,R7|
000049b0  2c 41 53 52 23 31 0d 1e  fa 12 41 44 44 47 45 20  |,ASR#1....ADDGE |
000049c0  52 31 2c 52 31 2c 23 34  0d 1f 04 10 41 44 44 20  |R1,R1,#4....ADD |
000049d0  52 31 2c 52 31 2c 52 37  0d 1f 0e 0e 43 4d 50 20  |R1,R1,R7....CMP |
000049e0  52 31 2c 23 33 31 0d 1f  18 10 4d 4f 56 47 54 20  |R1,#31....MOVGT |
000049f0  52 31 2c 23 33 31 0d 1f  22 1c 3b 20 47 65 6e 65  |R1,#31..".; Gene|
00004a00  72 61 74 65 20 61 20 72  61 6e 64 6f 6d 20 73 65  |rate a random se|
00004a10  65 64 0d 1f 2c 16 82 20  52 31 34 2c 52 32 2c 52  |ed..,.. R14,R2,R|
00004a20  35 2c 52 4f 52 23 31 37  0d 1f 36 17 82 20 52 31  |5,ROR#17..6.. R1|
00004a30  34 2c 52 31 34 2c 52 33  2c 52 4f 52 23 31 33 0d  |4,R14,R3,ROR#13.|
00004a40  1f 40 17 82 20 52 31 34  2c 52 31 34 2c 52 34 2c  |.@.. R14,R14,R4,|
00004a50  52 4f 52 23 31 30 0d 1f  4a 19 41 44 44 20 52 31  |ROR#10..J.ADD R1|
00004a60  34 2c 52 31 34 2c 52 31  34 2c 52 4f 52 23 36 0d  |4,R14,R14,ROR#6.|
00004a70  1f 54 19 3b 20 43 61 6c  63 75 6c 61 74 65 20 67  |.T.; Calculate g|
00004a80  72 61 64 69 65 6e 74 73  0d 1f 5e 10 53 55 42 20  |radients..^.SUB |
00004a90  52 34 2c 52 34 2c 52 32  0d 1f 68 10 53 55 42 20  |R4,R4,R2..h.SUB |
00004aa0  52 35 2c 52 35 2c 52 33  0d 1f 72 16 41 44 44 20  |R5,R5,R3..r.ADD |
00004ab0  52 32 2c 52 34 2c 52 32  2c 41 53 4c 23 33 0d 1f  |R2,R4,R2,ASL#3..|
00004ac0  7c 16 41 44 44 20 52 33  2c 52 35 2c 52 33 2c 41  ||.ADD R3,R5,R3,A|
00004ad0  53 4c 23 33 0d 1f 86 1b  53 55 42 20 52 33 2c 52  |SL#3....SUB R3,R|
00004ae0  33 2c 52 32 3a 3b 20 64  48 2f 64 45 3c 3c 33 0d  |3,R2:; dH/dE<<3.|
00004af0  1f 90 1b 53 55 42 20 52  35 2c 52 35 2c 52 34 3a  |...SUB R5,R5,R4:|
00004b00  3b 20 64 32 48 2f 64 4e  64 45 0d 1f 9a 22 41 44  |; d2H/dNdE..."AD|
00004b10  44 20 52 32 2c 52 33 2c  52 32 2c 41 53 4c 23 33  |D R2,R3,R2,ASL#3|
00004b20  3a 3b 20 48 65 69 67 68  74 3c 3c 36 0d 1f a4 21  |:; Height<<6...!|
00004b30  41 44 44 20 52 34 2c 52  35 2c 52 34 2c 41 53 4c  |ADD R4,R5,R4,ASL|
00004b40  23 33 3a 3b 20 64 48 2f  64 4e 3c 3c 33 0d 1f ae  |#3:; dH/dN<<3...|
00004b50  2a 3b 20 41 74 20 74 68  69 73 20 70 6f 69 6e 74  |*; At this point|
00004b60  2c 20 72 65 67 69 73 74  65 72 73 20 61 72 65 20  |, registers are |
00004b70  75 73 65 64 20 61 73 0d  1f b8 29 3b 20 52 30 2c  |used as...); R0,|
00004b80  52 31 20 61 72 65 20 77  61 74 65 72 20 6c 65 76  |R1 are water lev|
00004b90  65 6c 2c 20 77 61 74 65  72 20 63 6f 6c 6f 75 72  |el, water colour|
00004ba0  0d 1f c2 19 3b 20 52 32  2d 52 35 20 61 72 65 20  |....; R2-R5 are |
00004bb0  67 72 61 64 69 65 6e 74  73 0d 1f cc 17 3b 20 52  |gradients....; R|
00004bc0  38 20 69 73 20 6c 61 6e  64 20 63 6f 6c 6f 75 72  |8 is land colour|
00004bd0  0d 1f d6 18 3b 20 52 39  2d 52 31 32 20 61 73 20  |....; R9-R12 as |
00004be0  6f 6e 20 65 6e 74 72 79  0d 1f e0 15 3b 20 52 31  |on entry....; R1|
00004bf0  34 20 69 73 20 72 6e 64  20 73 65 65 64 0d 1f ea  |4 is rnd seed...|
00004c00  0d 4d 4f 56 20 52 39 2c  23 34 0d 1f f4 0b 2e 6e  |.MOV R9,#4.....n|
00004c10  6c 6f 6f 70 25 0d 1f fe  15 5d 3a e3 55 25 3d 30  |loop%....]:.U%=0|
00004c20  b8 33 3a 5b 4f 50 54 20  54 25 0d 20 08 15 4d 4f  |.3:[OPT T%. ..MO|
00004c30  56 20 52 36 2c 52 32 2c  41 53 52 23 36 2d 32 0d  |V R6,R2,ASR#6-2.|
00004c40  20 12 19 41 44 44 20 52  31 34 2c 52 31 34 2c 52  | ..ADD R14,R14,R|
00004c50  31 34 2c 52 4f 52 23 32  0d 20 1c 1a 41 44 44 20  |14,ROR#2. ..ADD |
00004c60  52 37 2c 52 38 2c 52 31  34 2c 4c 53 52 23 33 32  |R7,R8,R14,LSR#32|
00004c70  2d 32 0d 20 26 13 43 4d  50 20 52 36 2c 52 30 2c  |-2. &.CMP R6,R0,|
00004c80  41 53 4c 23 32 0d 20 30  15 4d 4f 56 4c 54 20 52  |ASL#2. 0.MOVLT R|
00004c90  36 2c 52 30 2c 41 53 4c  23 32 0d 20 3a 0f 4d 4f  |6,R0,ASL#2. :.MO|
00004ca0  56 4c 54 20 52 37 2c 52  31 0d 20 44 16 53 54 4d  |VLT R7,R1. D.STM|
00004cb0  49 41 20 52 31 31 21 2c  7b 52 36 2c 52 37 7d 0d  |IA R11!,{R6,R7}.|
00004cc0  20 4e 16 41 44 44 20 52  32 2c 52 32 2c 52 33 2c  | N.ADD R2,R2,R3,|
00004cd0  41 53 4c 23 31 0d 20 58  0f 5d 3a ed 3a 5b 4f 50  |ASL#1. X.]:.:[OP|
00004ce0  54 20 54 25 0d 20 62 14  53 55 42 20 52 31 31 2c  |T T%. b.SUB R11,|
00004cf0  52 31 31 2c 23 38 2a 34  0d 20 6c 18 53 55 42 20  |R11,#8*4. l.SUB |
00004d00  52 32 2c 52 32 2c 52 33  2c 41 53 4c 23 31 2b 32  |R2,R2,R3,ASL#1+2|
00004d10  0d 20 76 1d 41 44 44 20  52 31 31 2c 52 31 31 2c  |. v.ADD R11,R11,|
00004d20  52 31 30 2c 41 53 4c 23  33 2b 4d 4c 25 0d 20 80  |R10,ASL#3+ML%. .|
00004d30  16 41 44 44 20 52 32 2c  52 32 2c 52 34 2c 41 53  |.ADD R2,R2,R4,AS|
00004d40  4c 23 31 0d 20 8a 16 41  44 44 20 52 33 2c 52 33  |L#1. ..ADD R3,R3|
00004d50  2c 52 35 2c 41 53 4c 23  31 0d 20 94 11 53 55 42  |,R5,ASL#1. ..SUB|
00004d60  53 20 52 39 2c 52 39 2c  23 31 0d 20 9e 0e 42 47  |S R9,R9,#1. ..BG|
00004d70  54 20 6e 6c 6f 6f 70 25  0d 20 a8 1a 4c 44 4d 46  |T nloop%. ..LDMF|
00004d80  44 20 52 31 33 21 2c 7b  52 30 2d 52 31 32 2c 50  |D R13!,{R0-R12,P|
00004d90  43 7d 0d 20 b2 05 3a 0d  20 bc 0d 2e 63 61 6c 63  |C}. ..:. ...calc|
00004da0  68 6f 72 25 0d 20 c6 14  53 54 4d 46 44 20 52 31  |hor%. ..STMFD R1|
00004db0  33 21 2c 7b 52 31 34 7d  0d 20 d0 0e 4d 4f 56 20  |3!,{R14}. ..MOV |
00004dc0  52 31 32 2c 23 30 0d 20  da 0b 2e 64 6c 6f 6f 70  |R12,#0. ...dloop|
00004dd0  25 0d 20 e4 17 4f 50 54  20 a4 61 64 72 28 30 2c  |%. ..OPT .adr(0,|
00004de0  64 69 73 74 25 2c 32 29  0d 20 ee 17 41 44 44 20  |dist%,2). ..ADD |
00004df0  52 30 2c 52 30 2c 52 31  32 2c 41 53 4c 23 34 0d  |R0,R0,R12,ASL#4.|
00004e00  20 f8 3c 4c 44 4d 49 41  20 52 30 2c 7b 52 30 2c  | .<LDMIA R0,{R0,|
00004e10  52 38 2c 52 39 7d 3a 3b  20 4c 65 76 65 6c 2c 20  |R8,R9}:; Level, |
00004e20  64 69 73 74 61 6e 63 65  20 69 6e 20 53 43 25 2c  |distance in SC%,|
00004e30  20 28 31 3c 3c 32 31 29  2f 52 31 0d 21 02 18 4f  | (1<<21)/R1.!..O|
00004e40  50 54 20 a4 61 64 72 28  31 30 2c 6c 61 6e 64 25  |PT .adr(10,land%|
00004e50  2c 33 29 0d 21 0c 20 41  44 44 20 52 31 30 2c 52  |,3).!. ADD R10,R|
00004e60  31 30 2c 52 30 2c 41 53  4c 23 33 2b 4c 53 25 2b  |10,R0,ASL#3+LS%+|
00004e70  4c 53 25 0d 21 16 19 4f  50 54 20 a4 61 64 72 28  |LS%.!..OPT .adr(|
00004e80  37 2c 70 6f 73 25 2b 32  34 2c 32 29 0d 21 20 18  |7,pos%+24,2).! .|
00004e90  4c 44 52 20 52 37 2c 5b  52 37 2c 52 30 2c 41 53  |LDR R7,[R7,R0,AS|
00004ea0  4c 23 35 5d 0d 21 2a 31  53 55 42 20 52 37 2c 52  |L#5].!*1SUB R7,R|
00004eb0  37 2c 23 4d 4c 25 3a 3b  20 4c 6f 67 32 20 73 69  |7,#ML%:; Log2 si|
00004ec0  7a 65 20 6f 66 20 61 20  73 71 75 61 72 65 20 69  |ze of a square i|
00004ed0  6e 20 41 43 25 0d 21 34  17 4f 50 54 20 a4 61 64  |n AC%.!4.OPT .ad|
00004ee0  72 28 30 2c 76 69 65 77  25 2c 32 29 0d 21 3e 4c  |r(0,view%,2).!>L|
00004ef0  4c 44 4d 49 41 20 52 30  2c 7b 52 30 2d 52 31 2c  |LDMIA R0,{R0-R1,|
00004f00  52 32 2c 52 33 2d 52 34  2c 52 35 2c 52 36 7d 3a  |R2,R3-R4,R5,R6}:|
00004f10  3b 20 50 6f 73 69 74 69  6f 6e 2c 20 68 65 69 67  |; Position, heig|
00004f20  68 74 2c 20 68 65 61 64  69 6e 67 2c 20 70 69 74  |ht, heading, pit|
00004f30  63 68 2c 20 72 6f 6c 6c  0d 21 48 25 4d 55 4c 20  |ch, roll.!H%MUL |
00004f40  52 33 2c 52 38 2c 52 33  3a 3b 20 48 65 61 64 69  |R3,R8,R3:; Headi|
00004f50  6e 67 20 69 6e 20 53 43  25 2b 56 43 25 0d 21 52  |ng in SC%+VC%.!R|
00004f60  10 4d 55 4c 20 52 34 2c  52 38 2c 52 34 0d 21 5c  |.MUL R4,R8,R4.!\|
00004f70  29 4d 55 4c 20 52 35 2c  52 38 2c 52 35 3a 3b 20  |)MUL R5,R8,R5:; |
00004f80  50 69 74 63 68 2c 20 52  6f 6c 6c 20 69 6e 20 53  |Pitch, Roll in S|
00004f90  43 25 2b 56 43 25 0d 21  66 10 4d 55 4c 20 52 36  |C%+VC%.!f.MUL R6|
00004fa0  2c 52 38 2c 52 36 0d 21  70 13 52 53 42 20 52 31  |,R8,R6.!p.RSB R1|
00004fb0  31 2c 52 37 2c 23 45 43  25 0d 21 7a 27 4d 4f 56  |1,R7,#EC%.!z'MOV|
00004fc0  20 52 30 2c 52 30 2c 41  53 4c 20 52 31 31 3a 3b  | R0,R0,ASL R11:;|
00004fd0  20 50 6f 73 69 74 69 6f  6e 20 69 6e 20 45 43 25  | Position in EC%|
00004fe0  0d 21 84 15 4d 4f 56 20  52 31 2c 52 31 2c 41 53  |.!..MOV R1,R1,AS|
00004ff0  4c 20 52 31 31 0d 21 8e  13 53 55 42 20 52 31 31  |L R11.!..SUB R11|
00005000  2c 52 37 2c 23 53 43 25  0d 21 98 25 4d 4f 56 20  |,R7,#SC%.!.%MOV |
00005010  52 32 2c 52 32 2c 41 53  52 20 52 31 31 3a 3b 20  |R2,R2,ASR R11:; |
00005020  48 65 69 67 68 74 20 69  6e 20 53 43 25 0d 21 a2  |Height in SC%.!.|
00005030  32 41 44 44 20 52 30 2c  52 30 2c 52 33 2c 41 53  |2ADD R0,R0,R3,AS|
00005040  4c 23 45 43 25 2d 28 53  43 25 2b 56 43 25 29 3a  |L#EC%-(SC%+VC%):|
00005050  3b 20 4d 6f 76 65 20 66  6f 72 77 61 72 64 73 0d  |; Move forwards.|
00005060  21 ac 22 41 44 44 20 52  31 2c 52 31 2c 52 34 2c  |!."ADD R1,R1,R4,|
00005070  41 53 4c 23 45 43 25 2d  28 53 43 25 2b 56 43 25  |ASL#EC%-(SC%+VC%|
00005080  29 0d 21 b6 18 41 44 44  20 52 32 2c 52 32 2c 52  |).!..ADD R2,R2,R|
00005090  35 2c 41 53 52 23 56 43  25 0d 21 c0 15 4d 4f 56  |5,ASR#VC%.!..MOV|
000050a0  20 52 33 2c 52 33 2c 41  53 52 23 57 57 25 0d 21  | R3,R3,ASR#WW%.!|
000050b0  ca 15 4d 4f 56 20 52 34  2c 52 34 2c 41 53 52 23  |..MOV R4,R4,ASR#|
000050c0  57 57 25 0d 21 d4 3c 4d  4f 56 20 52 35 2c 52 33  |WW%.!.<MOV R5,R3|
000050d0  2c 41 53 4c 23 45 43 25  2d 28 53 43 25 2b 56 43  |,ASL#EC%-(SC%+VC|
000050e0  25 29 3a 3b 20 52 69 67  68 74 20 76 65 63 74 6f  |%):; Right vecto|
000050f0  72 20 28 69 6e 20 45 43  25 2c 20 53 43 25 29 0d  |r (in EC%, SC%).|
00005100  21 de 10 52 53 42 20 52  35 2c 52 35 2c 23 30 0d  |!..RSB R5,R5,#0.|
00005110  21 e8 1f 4d 4f 56 20 52  34 2c 52 34 2c 41 53 4c  |!..MOV R4,R4,ASL|
00005120  23 45 43 25 2d 28 53 43  25 2b 56 43 25 29 0d 21  |#EC%-(SC%+VC%).!|
00005130  f2 19 4d 4f 56 20 52 36  2c 52 36 2c 41 53 52 23  |..MOV R6,R6,ASR#|
00005140  57 57 25 2b 56 43 25 0d  21 fc 42 53 55 42 20 52  |WW%+VC%.!.BSUB R|
00005150  30 2c 52 30 2c 52 34 2c  41 53 4c 23 57 57 25 2d  |0,R0,R4,ASL#WW%-|
00005160  31 3a 3b 20 4d 6f 76 65  20 6c 65 66 74 20 31 2f  |1:; Move left 1/|
00005170  32 20 73 63 72 65 65 6e  20 65 78 63 65 70 74 20  |2 screen except |
00005180  31 2f 32 20 70 69 78 65  6c 0d 22 06 1a 53 55 42  |1/2 pixel."..SUB|
00005190  20 52 31 2c 52 31 2c 52  35 2c 41 53 4c 23 57 57  | R1,R1,R5,ASL#WW|
000051a0  25 2d 31 0d 22 10 1a 53  55 42 20 52 32 2c 52 32  |%-1."..SUB R2,R2|
000051b0  2c 52 36 2c 41 53 4c 23  57 57 25 2d 31 0d 22 1a  |,R6,ASL#WW%-1.".|
000051c0  1a 53 55 42 20 52 30 2c  52 30 2c 52 34 2c 41 53  |.SUB R0,R0,R4,AS|
000051d0  4c 23 57 57 25 2d 33 0d  22 24 1a 53 55 42 20 52  |L#WW%-3."$.SUB R|
000051e0  31 2c 52 31 2c 52 35 2c  41 53 4c 23 57 57 25 2d  |1,R1,R5,ASL#WW%-|
000051f0  33 0d 22 2e 1a 53 55 42  20 52 32 2c 52 32 2c 52  |3."..SUB R2,R2,R|
00005200  36 2c 41 53 4c 23 57 57  25 2d 33 0d 22 38 16 41  |6,ASL#WW%-3."8.A|
00005210  44 44 20 52 30 2c 52 30  2c 52 34 2c 41 53 52 23  |DD R0,R0,R4,ASR#|
00005220  31 0d 22 42 16 41 44 44  20 52 31 2c 52 31 2c 52  |1."B.ADD R1,R1,R|
00005230  35 2c 41 53 52 23 31 0d  22 4c 16 41 44 44 20 52  |5,ASR#1."L.ADD R|
00005240  32 2c 52 32 2c 52 36 2c  41 53 52 23 31 0d 22 56  |2,R2,R6,ASR#1."V|
00005250  26 41 44 44 20 52 32 2c  52 32 2c 52 38 2c 41 53  |&ADD R2,R2,R8,AS|
00005260  52 23 31 3a 3b 20 55 70  20 31 2f 32 20 73 63 72  |R#1:; Up 1/2 scr|
00005270  65 65 6e 0d 22 6a 25 41  44 44 20 52 32 2c 52 32  |een."j%ADD R2,R2|
00005280  2c 52 38 2c 41 53 52 23  48 48 25 2b 31 3a 3b 20  |,R8,ASR#HH%+1:; |
00005290  52 6f 75 6e 64 69 6e 67  0d 22 74 17 4f 50 54 20  |Rounding."t.OPT |
000052a0  a4 61 64 72 28 31 31 2c  68 6f 72 25 2c 33 29 0d  |.adr(11,hor%,3).|
000052b0  22 7e 19 41 44 44 20 52  31 31 2c 52 31 31 2c 52  |"~.ADD R11,R11,R|
000052c0  31 32 2c 41 53 4c 23 33  0d 22 88 37 3b 20 41 74  |12,ASL#3.".7; At|
000052d0  20 74 68 69 73 20 70 6f  69 6e 74 2c 20 74 68 65  | this point, the|
000052e0  20 72 65 67 69 73 74 65  72 73 20 61 72 65 20 75  | registers are u|
000052f0  73 65 64 20 61 73 20 66  6f 6c 6c 6f 77 73 3a 0d  |sed as follows:.|
00005300  22 92 4d 3b 20 52 30 2d  52 31 2c 52 32 20 61 72  |".M; R0-R1,R2 ar|
00005310  65 20 74 6f 70 20 6c 65  66 74 20 6f 66 20 73 63  |e top left of sc|
00005320  72 65 65 6e 2c 20 77 69  74 68 20 70 6f 73 69 74  |reen, with posit|
00005330  69 6f 6e 20 69 6e 20 45  43 25 20 61 6e 64 20 68  |ion in EC% and h|
00005340  65 69 67 68 74 20 69 6e  20 53 43 25 0d 22 9c 33  |eight in SC%.".3|
00005350  3b 20 52 34 2d 52 35 2c  52 36 20 69 73 20 72 69  |; R4-R5,R6 is ri|
00005360  67 68 74 20 76 65 63 74  6f 72 2c 20 61 6c 73 6f  |ght vector, also|
00005370  20 69 6e 20 45 43 25 20  61 6e 64 20 53 43 25 0d  | in EC% and SC%.|
00005380  22 a6 27 3b 20 52 39 20  69 73 20 28 31 3c 3c 32  |".'; R9 is (1<<2|
00005390  31 29 20 2f 20 28 64 69  73 74 61 6e 63 65 20 69  |1) / (distance i|
000053a0  6e 20 53 43 25 29 0d 22  b0 30 3b 20 52 31 30 20  |n SC%).".0; R10 |
000053b0  69 73 20 62 61 73 65 20  61 64 64 72 65 73 73 20  |is base address |
000053c0  6f 66 20 6c 61 6e 64 20  66 6f 72 20 74 68 69 73  |of land for this|
000053d0  20 6c 65 76 65 6c 0d 22  ba 22 3b 20 52 31 31 20  | level."."; R11 |
000053e0  69 73 20 68 6f 72 20 66  6f 72 20 74 68 69 73 20  |is hor for this |
000053f0  64 69 73 74 61 6e 63 65  0d 22 c4 12 3b 20 52 31  |distance."..; R1|
00005400  32 20 69 73 20 64 65 70  74 68 0d 22 ce 2a 53 55  |2 is depth.".*SU|
00005410  42 20 52 30 2c 52 30 2c  23 6c 6f 66 66 25 3c 3c  |B R0,R0,#loff%<<|
00005420  45 43 25 3a 3b 20 4c 61  6e 64 20 69 73 20 6f 66  |EC%:; Land is of|
00005430  66 73 65 74 0d 22 d8 19  53 55 42 20 52 31 2c 52  |fset."..SUB R1,R|
00005440  31 2c 23 6c 6f 66 66 25  3c 3c 45 43 25 0d 22 e2  |1,#loff%<<EC%.".|
00005450  1b 53 55 42 20 52 31 32  2c 52 31 32 2c 23 77 69  |.SUB R12,R12,#wi|
00005460  64 74 68 25 3c 3c 31 36  0d 22 ec 0b 2e 77 6c 6f  |dth%<<16."...wlo|
00005470  6f 70 25 0d 22 f6 15 4d  4f 56 20 52 37 2c 52 30  |op%."..MOV R7,R0|
00005480  2c 4c 53 52 23 45 43 25  0d 23 00 15 4d 4f 56 20  |,LSR#EC%.#..MOV |
00005490  52 38 2c 52 31 2c 4c 53  52 23 45 43 25 0d 23 0a  |R8,R1,LSR#EC%.#.|
000054a0  18 41 44 44 20 52 37 2c  52 37 2c 52 38 2c 41 53  |.ADD R7,R7,R8,AS|
000054b0  4c 23 4c 53 25 0d 23 14  17 41 44 44 20 52 37 2c  |L#LS%.#..ADD R7,|
000054c0  52 31 30 2c 52 37 2c 41  53 4c 23 33 0d 23 1e 37  |R10,R7,ASL#3.#.7|
000054d0  4c 44 4d 49 41 20 52 37  2c 7b 52 33 2c 52 37 7d  |LDMIA R7,{R3,R7}|
000054e0  3a 3b 20 4c 61 6e 64 20  68 65 69 67 68 74 20 28  |:; Land height (|
000054f0  53 43 25 29 2c 20 63 6f  6c 6f 75 72 20 6e 75 6d  |SC%), colour num|
00005500  62 65 72 0d 23 28 2e 52  53 42 53 20 52 33 2c 52  |ber.#(.RSBS R3,R|
00005510  33 2c 52 32 3a 3b 20 48  65 69 67 68 74 20 62 65  |3,R2:; Height be|
00005520  6c 6f 77 20 74 6f 70 20  6f 66 20 73 63 72 65 65  |low top of scree|
00005530  6e 0d 23 32 0f 4d 4f 56  4c 54 20 52 33 2c 23 30  |n.#2.MOVLT R3,#0|
00005540  0d 23 3c 10 4d 55 4c 20  52 33 2c 52 39 2c 52 33  |.#<.MUL R3,R9,R3|
00005550  0d 23 46 18 4d 4f 56 20  52 38 2c 52 33 2c 4c 53  |.#F.MOV R8,R3,LS|
00005560  52 23 32 30 2d 48 48 25  0d 23 50 10 4c 44 52 20  |R#20-HH%.#P.LDR |
00005570  52 33 2c 5b 52 31 31 5d  0d 23 5a 0d 43 4d 50 20  |R3,[R11].#Z.CMP |
00005580  52 38 2c 52 33 0d 23 64  0f 4d 4f 56 47 54 20 52  |R8,R3.#d.MOVGT R|
00005590  38 2c 52 33 0d 23 6e 3f  53 54 4d 49 41 20 52 31  |8,R3.#n?STMIA R1|
000055a0  31 2c 7b 52 33 2c 52 37  2c 52 38 7d 3a 3b 20 42  |1,{R3,R7,R8}:; B|
000055b0  6f 74 74 6f 6d 2c 20 63  6f 6c 6f 75 72 20 6e 75  |ottom, colour nu|
000055c0  6d 62 65 72 2c 20 74 6f  70 20 69 6e 20 70 69 78  |mber, top in pix|
000055d0  65 6c 73 0d 23 78 16 41  44 44 20 52 31 31 2c 52  |els.#x.ADD R11,R|
000055e0  31 31 2c 23 77 69 6e 63  25 0d 23 82 10 41 44 44  |11,#winc%.#..ADD|
000055f0  20 52 30 2c 52 30 2c 52  34 0d 23 8c 10 41 44 44  | R0,R0,R4.#..ADD|
00005600  20 52 31 2c 52 31 2c 52  35 0d 23 96 10 41 44 44  | R1,R1,R5.#..ADD|
00005610  20 52 32 2c 52 32 2c 52  36 0d 23 a0 17 41 44 44  | R2,R2,R6.#..ADD|
00005620  53 20 52 31 32 2c 52 31  32 2c 23 31 3c 3c 31 36  |S R12,R12,#1<<16|
00005630  0d 23 aa 0e 42 4c 54 20  77 6c 6f 6f 70 25 0d 23  |.#..BLT wloop%.#|
00005640  b4 12 41 44 44 20 52 31  32 2c 52 31 32 2c 23 31  |..ADD R12,R12,#1|
00005650  0d 23 be 13 43 4d 50 20  52 31 32 2c 23 64 65 70  |.#..CMP R12,#dep|
00005660  74 68 25 0d 23 c8 0e 42  4c 54 20 64 6c 6f 6f 70  |th%.#..BLT dloop|
00005670  25 0d 23 d2 13 4c 44 4d  46 44 20 52 31 33 21 2c  |%.#..LDMFD R13!,|
00005680  7b 50 43 7d 0d 23 dc 05  3a 0d 23 e6 1e 2e 76 64  |{PC}.#..:.#...vd|
00005690  75 76 61 72 73 25 3a 45  51 55 44 20 31 34 38 3a  |uvars%:EQUD 148:|
000056a0  45 51 55 44 20 2d 31 0d  23 f0 15 2e 73 63 72 61  |EQUD -1.#...scra|
000056b0  64 64 72 25 3a 45 51 55  44 20 2d 31 0d 23 fa 05  |ddr%:EQUD -1.#..|
000056c0  3a 0d 24 04 23 3b 20 52  31 32 20 69 73 20 64 65  |:.$.#; R12 is de|
000056d0  70 74 68 20 6f 66 20 73  74 72 69 70 20 74 6f 20  |pth of strip to |
000056e0  64 72 61 77 0d 24 0e 16  3b 20 52 30 2d 52 31 31  |draw.$..; R0-R11|
000056f0  20 63 6f 72 72 75 70 74  65 64 0d 24 18 05 3a 0d  | corrupted.$..:.|
00005700  24 22 0f 2e 64 72 61 77  73 74 72 69 70 25 0d 24  |$"..drawstrip%.$|
00005710  2c 18 53 54 4d 46 44 20  52 31 33 21 2c 7b 52 31  |,.STMFD R13!,{R1|
00005720  32 2c 52 31 34 7d 0d 24  36 14 4c 44 52 20 52 31  |2,R14}.$6.LDR R1|
00005730  34 2c 73 63 72 61 64 64  72 25 0d 24 40 17 4f 50  |4,scraddr%.$@.OP|
00005740  54 20 a4 61 64 72 28 31  31 2c 68 6f 72 25 2c 33  |T .adr(11,hor%,3|
00005750  29 0d 24 4a 19 41 44 44  20 52 31 31 2c 52 31 31  |).$J.ADD R11,R11|
00005760  2c 52 31 32 2c 41 53 4c  23 33 0d 24 54 17 4f 50  |,R12,ASL#3.$T.OP|
00005770  54 20 a4 61 64 72 28 31  30 2c 63 6f 6c 25 2c 32  |T .adr(10,col%,2|
00005780  29 0d 24 5e 1b 53 55 42  20 52 31 32 2c 52 31 32  |).$^.SUB R12,R12|
00005790  2c 23 77 69 64 74 68 25  3c 3c 31 36 0d 24 68 0b  |,#width%<<16.$h.|
000057a0  2e 77 6c 6f 6f 70 25 0d  24 72 2e 4c 44 4d 49 41  |.wloop%.$r.LDMIA|
000057b0  20 52 31 31 2c 7b 52 30  2c 52 31 2c 52 32 7d 3a  | R11,{R0,R1,R2}:|
000057c0  3b 20 42 6f 74 74 6f 6d  2c 20 63 6f 6c 6f 75 72  |; Bottom, colour|
000057d0  2c 20 74 6f 70 0d 24 7c  2c 53 55 42 53 20 52 30  |, top.$|,SUBS R0|
000057e0  2c 52 30 2c 52 32 3a 3b  20 4e 75 6d 62 65 72 20  |,R0,R2:; Number |
000057f0  6f 66 20 70 69 78 65 6c  73 20 74 6f 20 64 72 61  |of pixels to dra|
00005800  77 0d 24 86 0f 42 4c 45  20 64 73 65 6e 64 77 25  |w.$..BLE dsendw%|
00005810  0d 24 90 1c 41 44 44 20  52 39 2c 52 31 34 2c 52  |.$..ADD R9,R14,R|
00005820  32 2c 41 53 4c 23 53 43  57 25 2b 31 0d 24 9a 1d  |2,ASL#SCW%+1.$..|
00005830  41 44 44 20 52 39 2c 52  39 2c 52 32 2c 41 53 4c  |ADD R9,R9,R2,ASL|
00005840  23 53 43 57 25 2d 32 2b  31 0d 24 a4 17 41 44 44  |#SCW%-2+1.$..ADD|
00005850  20 52 31 2c 52 31 30 2c  52 31 2c 41 53 4c 23 33  | R1,R10,R1,ASL#3|
00005860  0d 24 ae 14 4c 44 4d 49  41 20 52 31 2c 7b 52 36  |.$..LDMIA R1,{R6|
00005870  2c 52 37 7d 0d 24 b8 0d  54 53 54 20 52 32 2c 23  |,R7}.$..TST R2,#|
00005880  31 0d 24 c2 16 4d 4f 56  4e 45 20 52 36 2c 52 36  |1.$..MOVNE R6,R6|
00005890  2c 52 4f 52 23 31 36 0d  24 cc 16 4d 4f 56 4e 45  |,ROR#16.$..MOVNE|
000058a0  20 52 37 2c 52 37 2c 52  4f 52 23 31 36 0d 24 d6  | R7,R7,ROR#16.$.|
000058b0  0b 2e 79 6c 6f 6f 70 25  0d 24 e0 11 5d 3a c8 8e  |..yloop%.$..]:..|
000058c0  53 43 57 25 2d 57 57 25  ca 0d 24 ea 07 c9 33 3a  |SCW%-WW%..$...3:|
000058d0  0d 24 f4 0b 5b 4f 50 54  20 54 25 0d 24 fe 0d 4d  |.$..[OPT T%.$..M|
000058e0  4f 56 20 52 38 2c 52 36  0d 25 08 14 53 54 4d 49  |OV R8,R6.%..STMI|
000058f0  41 20 52 39 2c 7b 52 36  2c 52 38 7d 0d 25 12 16  |A R9,{R6,R8}.%..|
00005900  41 44 44 20 52 39 2c 52  39 2c 23 73 63 6c 69 6e  |ADD R9,R9,#sclin|
00005910  63 25 0d 25 1c 0d 4d 4f  56 20 52 38 2c 52 37 0d  |c%.%..MOV R8,R7.|
00005920  25 26 14 53 54 4d 49 41  20 52 39 2c 7b 52 37 2c  |%&.STMIA R9,{R7,|
00005930  52 38 7d 0d 25 30 16 41  44 44 20 52 39 2c 52 39  |R8}.%0.ADD R9,R9|
00005940  2c 23 73 63 6c 69 6e 63  25 0d 25 3a 14 4d 4f 56  |,#sclinc%.%:.MOV|
00005950  20 52 36 2c 52 36 2c 52  4f 52 23 31 36 0d 25 44  | R6,R6,ROR#16.%D|
00005960  14 4d 4f 56 20 52 37 2c  52 37 2c 52 4f 52 23 31  |.MOV R7,R7,ROR#1|
00005970  36 0d 25 4e 05 5d 0d 25  58 07 c9 32 3a 0d 25 62  |6.%N.].%X..2:.%b|
00005980  0b 5b 4f 50 54 20 54 25  0d 25 6c 18 53 54 52 20  |.[OPT T%.%l.STR |
00005990  52 36 2c 5b 52 39 5d 2c  23 73 63 6c 69 6e 63 25  |R6,[R9],#sclinc%|
000059a0  0d 25 76 18 53 54 52 20  52 37 2c 5b 52 39 5d 2c  |.%v.STR R7,[R9],|
000059b0  23 73 63 6c 69 6e 63 25  0d 25 80 14 4d 4f 56 20  |#sclinc%.%..MOV |
000059c0  52 36 2c 52 36 2c 52 4f  52 23 31 36 0d 25 8a 14  |R6,R6,ROR#16.%..|
000059d0  4d 4f 56 20 52 37 2c 52  37 2c 52 4f 52 23 31 36  |MOV R7,R7,ROR#16|
000059e0  0d 25 94 05 5d 0d 25 9e  24 7f 3a 85 32 35 35 2c  |.%..].%.$.:.255,|
000059f0  22 4f 6e 6c 79 20 57 57  25 3d 36 20 69 73 20 73  |"Only WW%=6 is s|
00005a00  75 70 70 6f 72 74 65 64  22 0d 25 a8 0d cb 3a 5b  |upported".%...:[|
00005a10  4f 50 54 20 54 25 0d 25  b2 11 53 55 42 53 20 52  |OPT T%.%..SUBS R|
00005a20  30 2c 52 30 2c 23 31 0d  25 bc 0e 42 47 54 20 79  |0,R0,#1.%..BGT y|
00005a30  6c 6f 6f 70 25 0d 25 c6  0e 2e 64 73 65 6e 64 6f  |loop%.%...dsendo|
00005a40  64 64 25 0d 25 d0 0c 2e  64 73 65 6e 64 77 25 0d  |dd%.%...dsendw%.|
00005a50  25 da 16 41 44 44 20 52  31 31 2c 52 31 31 2c 23  |%..ADD R11,R11,#|
00005a60  77 69 6e 63 25 0d 25 e4  1c 41 44 44 20 52 31 34  |winc%.%..ADD R14|
00005a70  2c 52 31 34 2c 23 31 3c  3c 53 43 57 25 2d 57 57  |,R14,#1<<SCW%-WW|
00005a80  25 0d 25 ee 17 41 44 44  53 20 52 31 32 2c 52 31  |%.%..ADDS R12,R1|
00005a90  32 2c 23 31 3c 3c 31 36  0d 25 f8 0e 42 4c 54 20  |2,#1<<16.%..BLT |
00005aa0  77 6c 6f 6f 70 25 0d 26  02 17 4c 44 4d 46 44 20  |wloop%.&..LDMFD |
00005ab0  52 31 33 21 2c 7b 52 31  32 2c 50 43 7d 0d 26 0c  |R13!,{R12,PC}.&.|
00005ac0  05 3a 0d 26 16 0d 2e 64  72 61 77 73 6b 79 25 0d  |.:.&...drawsky%.|
00005ad0  26 20 14 53 54 4d 46 44  20 52 31 33 21 2c 7b 52  |& .STMFD R13!,{R|
00005ae0  31 34 7d 0d 26 2a 14 4c  44 52 20 52 31 34 2c 73  |14}.&*.LDR R14,s|
00005af0  63 72 61 64 64 72 25 0d  26 34 20 4f 50 54 20 a4  |craddr%.&4 OPT .|
00005b00  61 64 72 28 31 32 2c 63  6f 6c 25 2b 38 2a 28 31  |adr(12,col%+8*(1|
00005b10  3c 3c 35 29 2c 32 29 0d  26 3e 1a 4f 50 54 20 a4  |<<5),2).&>.OPT .|
00005b20  61 64 72 28 30 2c 76 69  65 77 25 2b 32 30 2c 32  |adr(0,view%+20,2|
00005b30  29 0d 26 48 22 4c 44 4d  49 41 20 52 30 2c 7b 52  |).&H"LDMIA R0,{R|
00005b40  30 2c 52 31 7d 3a 3b 20  50 69 74 63 68 2c 20 52  |0,R1}:; Pitch, R|
00005b50  6f 6c 6c 0d 26 52 18 4d  4f 56 20 52 30 2c 52 30  |oll.&R.MOV R0,R0|
00005b60  2c 41 53 4c 23 32 34 2d  56 43 25 0d 26 5c 1d 4d  |,ASL#24-VC%.&\.M|
00005b70  4f 56 20 52 31 2c 52 31  2c 41 53 4c 23 32 34 2d  |OV R1,R1,ASL#24-|
00005b80  53 4b 57 25 2d 56 43 25  0d 26 66 3e 53 55 42 20  |SKW%-VC%.&f>SUB |
00005b90  52 30 2c 52 30 2c 52 31  2c 41 53 4c 23 53 4b 57  |R0,R0,R1,ASL#SKW|
00005ba0  25 2d 31 3a 3b 20 4c 65  66 74 20 31 2f 32 20 73  |%-1:; Left 1/2 s|
00005bb0  63 72 65 65 6e 20 65 78  63 65 70 74 20 31 2f 32  |creen except 1/2|
00005bc0  20 70 69 78 65 6c 0d 26  70 1b 53 55 42 20 52 30  | pixel.&p.SUB R0|
00005bd0  2c 52 30 2c 52 31 2c 41  53 4c 23 53 4b 57 25 2d  |,R0,R1,ASL#SKW%-|
00005be0  33 0d 26 7a 16 41 44 44  20 52 30 2c 52 30 2c 52  |3.&z.ADD R0,R0,R|
00005bf0  31 2c 41 53 52 23 31 0d  26 84 37 41 44 44 20 52  |1,ASR#1.&.7ADD R|
00005c00  30 2c 52 30 2c 23 31 3c  3c 32 34 2d 31 3a 3b 20  |0,R0,#1<<24-1:; |
00005c10  55 70 20 31 2f 32 20 73  63 72 65 65 6e 20 65 78  |Up 1/2 screen ex|
00005c20  63 65 70 74 20 31 2f 32  20 70 69 78 65 6c 0d 26  |cept 1/2 pixel.&|
00005c30  8e 1b 53 55 42 20 52 30  2c 52 30 2c 23 31 3c 3c  |..SUB R0,R0,#1<<|
00005c40  32 34 2d 53 4b 48 25 2d  31 0d 26 98 16 41 44 44  |24-SKH%-1.&..ADD|
00005c50  20 52 30 2c 52 30 2c 52  30 2c 41 53 4c 23 31 0d  | R0,R0,R0,ASL#1.|
00005c60  26 a2 16 41 44 44 20 52  31 2c 52 31 2c 52 31 2c  |&..ADD R1,R1,R1,|
00005c70  41 53 4c 23 31 0d 26 ac  15 4d 4f 56 20 52 31 31  |ASL#1.&..MOV R11|
00005c80  2c 23 73 6b 77 69 64 74  68 25 0d 26 b6 0b 2e 77  |,#skwidth%.&...w|
00005c90  6c 6f 6f 70 25 0d 26 c0  1e 53 55 42 20 52 31 31  |loop%.&..SUB R11|
00005ca0  2c 52 31 31 2c 23 73 6b  68 65 69 67 68 74 25 3c  |,R11,#skheight%<|
00005cb0  3c 31 36 0d 26 ca 0b 2e  68 6c 6f 6f 70 25 0d 26  |<16.&...hloop%.&|
00005cc0  d4 10 41 44 44 20 52 34  2c 52 30 2c 52 31 0d 26  |..ADD R4,R0,R1.&|
00005cd0  de 10 41 44 44 20 52 36  2c 52 34 2c 52 31 0d 26  |..ADD R6,R4,R1.&|
00005ce0  e8 10 41 44 44 20 52 38  2c 52 36 2c 52 31 0d 26  |..ADD R8,R6,R1.&|
00005cf0  f2 16 4d 4f 56 20 52 32  2c 52 30 2c 41 53 52 23  |..MOV R2,R0,ASR#|
00005d00  32 36 2d 37 0d 26 fc 16  4d 4f 56 20 52 34 2c 52  |26-7.&..MOV R4,R|
00005d10  34 2c 41 53 52 23 32 36  2d 37 0d 27 06 16 4d 4f  |4,ASR#26-7.'..MO|
00005d20  56 20 52 36 2c 52 36 2c  41 53 52 23 32 36 2d 37  |V R6,R6,ASR#26-7|
00005d30  0d 27 10 16 4d 4f 56 20  52 38 2c 52 38 2c 41 53  |.'..MOV R8,R8,AS|
00005d40  52 23 32 36 2d 37 0d 27  1a 17 5d 3a e3 55 25 3d  |R#26-7.'..]:.U%=|
00005d50  32 b8 38 88 32 3a 5b 4f  50 54 20 54 25 0d 27 24  |2.8.2:[OPT T%.'$|
00005d60  12 41 44 44 53 20 55 25  2c 55 25 2c 23 33 32 0d  |.ADDS U%,U%,#32.|
00005d70  27 2e 0f 4d 4f 56 4c 54  20 55 25 2c 23 30 0d 27  |'..MOVLT U%,#0.'|
00005d80  38 0f 43 4d 50 20 55 25  2c 23 31 32 37 0d 27 42  |8.CMP U%,#127.'B|
00005d90  11 4d 4f 56 47 54 20 55  25 2c 23 31 32 37 0d 27  |.MOVGT U%,#127.'|
00005da0  4c 17 41 44 44 20 55 25  2c 52 31 32 2c 55 25 2c  |L.ADD U%,R12,U%,|
00005db0  41 53 4c 23 33 0d 27 56  18 4c 44 4d 49 41 20 55  |ASL#3.'V.LDMIA U|
00005dc0  25 2c 7b 55 25 2d 28 55  25 2b 31 29 7d 0d 27 60  |%,{U%-(U%+1)}.'`|
00005dd0  0f 5d 3a ed 3a 5b 4f 50  54 20 54 25 0d 27 6a 1b  |.]:.:[OPT T%.'j.|
00005de0  53 54 4d 49 41 20 52 31  34 2c 7b 52 32 2c 52 34  |STMIA R14,{R2,R4|
00005df0  2c 52 36 2c 52 38 7d 0d  27 74 18 41 44 44 20 52  |,R6,R8}.'t.ADD R|
00005e00  31 34 2c 52 31 34 2c 23  73 63 6c 69 6e 63 25 0d  |14,R14,#sclinc%.|
00005e10  27 7e 1b 53 54 4d 49 41  20 52 31 34 2c 7b 52 33  |'~.STMIA R14,{R3|
00005e20  2c 52 35 2c 52 37 2c 52  39 7d 0d 27 88 18 41 44  |,R5,R7,R9}.'..AD|
00005e30  44 20 52 31 34 2c 52 31  34 2c 23 73 63 6c 69 6e  |D R14,R14,#sclin|
00005e40  63 25 0d 27 92 15 5d 3a  e3 55 25 3d 32 b8 39 3a  |c%.'..]:.U%=2.9:|
00005e50  5b 4f 50 54 20 54 25 0d  27 9c 14 4d 4f 56 20 55  |[OPT T%.'..MOV U|
00005e60  25 2c 55 25 2c 52 4f 52  23 31 36 0d 27 a6 0f 5d  |%,U%,ROR#16.'..]|
00005e70  3a ed 3a 5b 4f 50 54 20  54 25 0d 27 b0 1b 53 54  |:.:[OPT T%.'..ST|
00005e80  4d 49 41 20 52 31 34 2c  7b 52 32 2c 52 34 2c 52  |MIA R14,{R2,R4,R|
00005e90  36 2c 52 38 7d 0d 27 ba  18 41 44 44 20 52 31 34  |6,R8}.'..ADD R14|
00005ea0  2c 52 31 34 2c 23 73 63  6c 69 6e 63 25 0d 27 c4  |,R14,#sclinc%.'.|
00005eb0  1b 53 54 4d 49 41 20 52  31 34 2c 7b 52 33 2c 52  |.STMIA R14,{R3,R|
00005ec0  35 2c 52 37 2c 52 39 7d  0d 27 ce 18 41 44 44 20  |5,R7,R9}.'..ADD |
00005ed0  52 31 34 2c 52 31 34 2c  23 73 63 6c 69 6e 63 25  |R14,R14,#sclinc%|
00005ee0  0d 27 d8 28 53 55 42 20  52 30 2c 52 30 2c 23 33  |.'.(SUB R0,R0,#3|
00005ef0  3c 3c 32 34 2d 53 4b 48  25 3a 3b 20 44 6f 77 6e  |<<24-SKH%:; Down|
00005f00  20 31 20 70 69 78 65 6c  0d 27 e2 17 41 44 44 53  | 1 pixel.'..ADDS|
00005f10  20 52 31 31 2c 52 31 31  2c 23 31 3c 3c 31 36 0d  | R11,R11,#1<<16.|
00005f20  27 ec 0e 42 4c 45 20 68  6c 6f 6f 70 25 0d 27 f6  |'..BLE hloop%.'.|
00005f30  22 41 44 44 20 52 30 2c  52 30 2c 23 33 3c 3c 32  |"ADD R0,R0,#3<<2|
00005f40  34 3a 3b 20 55 70 20 31  20 73 63 72 65 65 6e 0d  |4:; Up 1 screen.|
00005f50  28 00 22 53 55 42 20 52  31 34 2c 52 31 34 2c 23  |(."SUB R14,R14,#|
00005f60  73 63 68 65 69 67 68 74  25 2a 73 63 6c 69 6e 63  |scheight%*sclinc|
00005f70  25 0d 28 0a 27 41 44 44  20 52 30 2c 52 30 2c 52  |%.(.'ADD R0,R0,R|
00005f80  31 2c 41 53 4c 23 32 3a  3b 20 52 69 67 68 74 20  |1,ASL#2:; Right |
00005f90  32 20 70 69 78 65 6c 73  0d 28 14 1d 41 44 44 20  |2 pixels.(..ADD |
00005fa0  52 31 34 2c 52 31 34 2c  23 34 3c 3c 53 43 57 25  |R14,R14,#4<<SCW%|
00005fb0  2d 53 4b 57 25 0d 28 1e  13 53 55 42 53 20 52 31  |-SKW%.(..SUBS R1|
00005fc0  31 2c 52 31 31 2c 23 34  0d 28 28 0e 42 47 54 20  |1,R11,#4.((.BGT |
00005fd0  77 6c 6f 6f 70 25 0d 28  32 13 4c 44 4d 46 44 20  |wloop%.(2.LDMFD |
00005fe0  52 31 33 21 2c 7b 50 43  7d 0d 28 3c 05 3a 0d 28  |R13!,{PC}.(<.:.(|
00005ff0  46 18 3b 20 44 72 61 77  73 20 61 6e 79 20 74 72  |F.; Draws any tr|
00006000  69 61 6e 67 6c 65 0d 28  50 25 3b 20 52 30 2d 52  |iangle.(P%; R0-R|
00006010  31 2c 20 52 32 2d 52 33  2c 20 52 34 2d 52 35 20  |1, R2-R3, R4-R5 |
00006020  61 72 65 20 63 6f 72 6e  65 72 73 0d 28 5a 1a 3b  |are corners.(Z.;|
00006030  20 45 76 65 72 79 74 68  69 6e 67 20 70 72 65 73  | Everything pres|
00006040  65 72 76 65 64 0d 28 64  05 3a 0d 28 6e 0d 2e 70  |erved.(d.:.(n..p|
00006050  6c 6f 74 74 72 69 25 0d  28 78 1b 53 54 4d 46 44  |lottri%.(x.STMFD|
00006060  20 52 31 33 21 2c 7b 52  30 2d 52 31 32 2c 52 31  | R13!,{R0-R12,R1|
00006070  34 7d 0d 28 82 24 3b 20  53 6f 72 74 20 74 68 65  |4}.(.$; Sort the|
00006080  6d 20 69 6e 74 6f 20 61  73 63 65 6e 64 69 6e 67  |m into ascending|
00006090  20 6f 72 64 65 72 0d 28  8c 0d 43 4d 50 20 52 33  | order.(..CMP R3|
000060a0  2c 52 31 0d 28 96 0d 42  47 54 20 70 74 31 33 25  |,R1.(..BGT pt13%|
000060b0  0d 28 a0 0a 2e 70 74 33  31 25 0d 28 aa 0d 43 4d  |.(...pt31%.(..CM|
000060c0  50 20 52 35 2c 52 31 0d  28 b4 0e 42 47 54 20 70  |P R5,R1.(..BGT p|
000060d0  74 33 31 35 25 0d 28 be  0d 43 4d 50 20 52 35 2c  |t315%.(..CMP R5,|
000060e0  52 33 0d 28 c8 0e 42 47  54 20 70 74 33 35 31 25  |R3.(..BGT pt351%|
000060f0  0d 28 d2 0b 2e 70 74 35  33 31 25 0d 28 dc 0d 4d  |.(...pt531%.(..M|
00006100  4f 56 20 52 36 2c 52 30  0d 28 e6 0d 4d 4f 56 20  |OV R6,R0.(..MOV |
00006110  52 30 2c 52 34 0d 28 f0  0d 4d 4f 56 20 52 34 2c  |R0,R4.(..MOV R4,|
00006120  52 36 0d 28 fa 0d 4d 4f  56 20 52 36 2c 52 31 0d  |R6.(..MOV R6,R1.|
00006130  29 04 0d 4d 4f 56 20 52  31 2c 52 35 0d 29 0e 0d  |)..MOV R1,R5.)..|
00006140  4d 4f 56 20 52 35 2c 52  36 0d 29 18 0c 42 20 70  |MOV R5,R6.)..B p|
00006150  74 31 33 35 25 0d 29 22  05 3a 0d 29 2c 0b 2e 70  |t135%.)".:.),..p|
00006160  74 33 35 31 25 0d 29 36  0d 4d 4f 56 20 52 36 2c  |t351%.)6.MOV R6,|
00006170  52 30 0d 29 40 0d 4d 4f  56 20 52 30 2c 52 32 0d  |R0.)@.MOV R0,R2.|
00006180  29 4a 0d 4d 4f 56 20 52  32 2c 52 34 0d 29 54 0d  |)J.MOV R2,R4.)T.|
00006190  4d 4f 56 20 52 34 2c 52  36 0d 29 5e 0d 4d 4f 56  |MOV R4,R6.)^.MOV|
000061a0  20 52 36 2c 52 31 0d 29  68 0d 4d 4f 56 20 52 31  | R6,R1.)h.MOV R1|
000061b0  2c 52 33 0d 29 72 0d 4d  4f 56 20 52 33 2c 52 35  |,R3.)r.MOV R3,R5|
000061c0  0d 29 7c 0d 4d 4f 56 20  52 35 2c 52 36 0d 29 86  |.)|.MOV R5,R6.).|
000061d0  0c 42 20 70 74 31 33 35  25 0d 29 90 05 3a 0d 29  |.B pt135%.)..:.)|
000061e0  9a 0b 2e 70 74 33 31 35  25 0d 29 a4 0d 4d 4f 56  |...pt315%.)..MOV|
000061f0  20 52 36 2c 52 30 0d 29  ae 0d 4d 4f 56 20 52 30  | R6,R0.)..MOV R0|
00006200  2c 52 32 0d 29 b8 0d 4d  4f 56 20 52 32 2c 52 36  |,R2.)..MOV R2,R6|
00006210  0d 29 c2 0d 4d 4f 56 20  52 36 2c 52 31 0d 29 cc  |.)..MOV R6,R1.).|
00006220  0d 4d 4f 56 20 52 31 2c  52 33 0d 29 d6 0d 4d 4f  |.MOV R1,R3.)..MO|
00006230  56 20 52 33 2c 52 36 0d  29 e0 0c 42 20 70 74 31  |V R3,R6.)..B pt1|
00006240  33 35 25 0d 29 ea 05 3a  0d 29 f4 0a 2e 70 74 31  |35%.)..:.)...pt1|
00006250  33 25 0d 29 fe 0d 43 4d  50 20 52 35 2c 52 33 0d  |3%.)..CMP R5,R3.|
00006260  2a 08 0e 42 47 54 20 70  74 31 33 35 25 0d 2a 12  |*..BGT pt135%.*.|
00006270  0d 43 4d 50 20 52 35 2c  52 31 0d 2a 1c 0e 42 47  |.CMP R5,R1.*..BG|
00006280  54 20 70 74 31 35 33 25  0d 2a 26 0b 2e 70 74 35  |T pt153%.*&..pt5|
00006290  31 33 25 0d 2a 30 0d 4d  4f 56 20 52 36 2c 52 30  |13%.*0.MOV R6,R0|
000062a0  0d 2a 3a 0d 4d 4f 56 20  52 30 2c 52 34 0d 2a 44  |.*:.MOV R0,R4.*D|
000062b0  0d 4d 4f 56 20 52 34 2c  52 32 0d 2a 4e 0d 4d 4f  |.MOV R4,R2.*N.MO|
000062c0  56 20 52 32 2c 52 36 0d  2a 58 0d 4d 4f 56 20 52  |V R2,R6.*X.MOV R|
000062d0  36 2c 52 31 0d 2a 62 0d  4d 4f 56 20 52 31 2c 52  |6,R1.*b.MOV R1,R|
000062e0  35 0d 2a 6c 0d 4d 4f 56  20 52 35 2c 52 33 0d 2a  |5.*l.MOV R5,R3.*|
000062f0  76 0d 4d 4f 56 20 52 33  2c 52 36 0d 2a 80 0c 42  |v.MOV R3,R6.*..B|
00006300  20 70 74 31 33 35 25 0d  2a 8a 05 3a 0d 2a 94 0b  | pt135%.*..:.*..|
00006310  2e 70 74 31 35 33 25 0d  2a 9e 0d 4d 4f 56 20 52  |.pt153%.*..MOV R|
00006320  36 2c 52 32 0d 2a a8 0d  4d 4f 56 20 52 32 2c 52  |6,R2.*..MOV R2,R|
00006330  34 0d 2a b2 0d 4d 4f 56  20 52 34 2c 52 36 0d 2a  |4.*..MOV R4,R6.*|
00006340  bc 0d 4d 4f 56 20 52 36  2c 52 33 0d 2a c6 0d 4d  |..MOV R6,R3.*..M|
00006350  4f 56 20 52 33 2c 52 35  0d 2a d0 0d 4d 4f 56 20  |OV R3,R5.*..MOV |
00006360  52 35 2c 52 36 0d 2a da  0b 2e 70 74 31 33 35 25  |R5,R6.*...pt135%|
00006370  0d 2a e4 1d 3b 20 43 61  6c 63 75 6c 61 74 65 20  |.*..; Calculate |
00006380  6c 6f 6e 67 20 67 72 61  64 69 65 6e 74 0d 2a ee  |long gradient.*.|
00006390  0d 4d 4f 56 20 52 38 2c  23 31 0d 2a f8 10 53 55  |.MOV R8,#1.*..SU|
000063a0  42 20 52 37 2c 52 35 2c  52 31 0d 2b 02 11 53 55  |B R7,R5,R1.+..SU|
000063b0  42 53 20 52 36 2c 52 34  2c 52 30 0d 2b 0c 12 52  |BS R6,R4,R0.+..R|
000063c0  53 42 4c 54 20 52 38 2c  52 38 2c 23 30 0d 2b 16  |SBLT R8,R8,#0.+.|
000063d0  12 52 53 42 4c 54 20 52  36 2c 52 36 2c 23 30 0d  |.RSBLT R6,R6,#0.|
000063e0  2b 20 0d 4d 4f 56 20 52  39 2c 23 30 0d 2b 2a 18  |+ .MOV R9,#0.+*.|
000063f0  5d 3a e3 55 25 3d 39 b8  31 88 2d 31 3a 5b 4f 50  |]:.U%=9.1.-1:[OP|
00006400  54 20 54 25 0d 2b 34 14  43 4d 50 20 52 37 2c 52  |T T%.+4.CMP R7,R|
00006410  36 2c 41 53 52 23 55 25  0d 2b 3e 19 53 55 42 4c  |6,ASR#U%.+>.SUBL|
00006420  45 20 52 36 2c 52 36 2c  52 37 2c 41 53 4c 23 55  |E R6,R6,R7,ASL#U|
00006430  25 0d 2b 48 1d 41 44 44  4c 45 20 52 39 2c 52 39  |%.+H.ADDLE R9,R9|
00006440  2c 52 38 2c 41 53 4c 23  55 25 2b 44 43 25 0d 2b  |,R8,ASL#U%+DC%.+|
00006450  52 0f 5d 3a ed 3a 5b 4f  50 54 20 54 25 0d 2b 5c  |R.]:.:[OPT T%.+\|
00006460  0d 43 4d 50 20 52 36 2c  52 37 0d 2b 66 12 53 55  |.CMP R6,R7.+f.SU|
00006470  42 47 45 20 52 36 2c 52  36 2c 52 37 0d 2b 70 1a  |BGE R6,R6,R7.+p.|
00006480  41 44 44 47 45 20 52 39  2c 52 39 2c 52 38 2c 41  |ADDGE R9,R9,R8,A|
00006490  53 4c 23 44 43 25 0d 2b  7a 1c 5d 3a e3 55 25 3d  |SL#DC%.+z.]:.U%=|
000064a0  44 43 25 2d 31 b8 31 88  2d 31 3a 5b 4f 50 54 20  |DC%-1.1.-1:[OPT |
000064b0  54 25 0d 2b 84 17 52 53  42 53 20 52 36 2c 52 37  |T%.+..RSBS R6,R7|
000064c0  2c 52 36 2c 41 53 4c 23  31 0d 2b 8e 12 41 44 44  |,R6,ASL#1.+..ADD|
000064d0  4c 54 20 52 36 2c 52 36  2c 52 37 0d 2b 98 19 41  |LT R6,R6,R7.+..A|
000064e0  44 44 47 45 20 52 39 2c  52 39 2c 52 38 2c 41 53  |DDGE R9,R9,R8,AS|
000064f0  4c 23 55 25 0d 2b a2 0f  5d 3a ed 3a 5b 4f 50 54  |L#U%.+..]:.:[OPT|
00006500  20 54 25 0d 2b ac 17 52  53 42 53 20 52 36 2c 52  | T%.+..RSBS R6,R|
00006510  37 2c 52 36 2c 41 53 4c  23 31 0d 2b b6 12 41 44  |7,R6,ASL#1.+..AD|
00006520  44 47 45 20 52 39 2c 52  39 2c 52 38 0d 2b c0 25  |DGE R9,R9,R8.+.%|
00006530  3b 20 43 61 6c 63 75 6c  61 74 65 20 62 6f 74 74  |; Calculate bott|
00006540  6f 6d 20 73 68 6f 72 74  20 67 72 61 64 69 65 6e  |om short gradien|
00006550  74 0d 2b ca 0d 4d 4f 56  20 52 38 2c 23 31 0d 2b  |t.+..MOV R8,#1.+|
00006560  d4 10 53 55 42 20 52 37  2c 52 33 2c 52 31 0d 2b  |..SUB R7,R3,R1.+|
00006570  de 11 53 55 42 53 20 52  36 2c 52 32 2c 52 30 0d  |..SUBS R6,R2,R0.|
00006580  2b e8 12 52 53 42 4c 54  20 52 38 2c 52 38 2c 23  |+..RSBLT R8,R8,#|
00006590  30 0d 2b f2 12 52 53 42  4c 54 20 52 36 2c 52 36  |0.+..RSBLT R6,R6|
000065a0  2c 23 30 0d 2b fc 0e 4d  4f 56 20 52 31 30 2c 23  |,#0.+..MOV R10,#|
000065b0  30 0d 2c 06 18 5d 3a e3  55 25 3d 39 b8 31 88 2d  |0.,..]:.U%=9.1.-|
000065c0  31 3a 5b 4f 50 54 20 54  25 0d 2c 10 14 43 4d 50  |1:[OPT T%.,..CMP|
000065d0  20 52 37 2c 52 36 2c 41  53 52 23 55 25 0d 2c 1a  | R7,R6,ASR#U%.,.|
000065e0  19 53 55 42 4c 45 20 52  36 2c 52 36 2c 52 37 2c  |.SUBLE R6,R6,R7,|
000065f0  41 53 4c 23 55 25 0d 2c  24 1f 41 44 44 4c 45 20  |ASL#U%.,$.ADDLE |
00006600  52 31 30 2c 52 31 30 2c  52 38 2c 41 53 4c 23 55  |R10,R10,R8,ASL#U|
00006610  25 2b 44 43 25 0d 2c 2e  0f 5d 3a ed 3a 5b 4f 50  |%+DC%.,..]:.:[OP|
00006620  54 20 54 25 0d 2c 38 0d  43 4d 50 20 52 36 2c 52  |T T%.,8.CMP R6,R|
00006630  37 0d 2c 42 12 53 55 42  47 45 20 52 36 2c 52 36  |7.,B.SUBGE R6,R6|
00006640  2c 52 37 0d 2c 4c 1c 41  44 44 47 45 20 52 31 30  |,R7.,L.ADDGE R10|
00006650  2c 52 31 30 2c 52 38 2c  41 53 4c 23 44 43 25 0d  |,R10,R8,ASL#DC%.|
00006660  2c 56 1c 5d 3a e3 55 25  3d 44 43 25 2d 31 b8 31  |,V.]:.U%=DC%-1.1|
00006670  88 2d 31 3a 5b 4f 50 54  20 54 25 0d 2c 60 17 52  |.-1:[OPT T%.,`.R|
00006680  53 42 53 20 52 36 2c 52  37 2c 52 36 2c 41 53 4c  |SBS R6,R7,R6,ASL|
00006690  23 31 0d 2c 6a 12 41 44  44 4c 54 20 52 36 2c 52  |#1.,j.ADDLT R6,R|
000066a0  36 2c 52 37 0d 2c 74 1b  41 44 44 47 45 20 52 31  |6,R7.,t.ADDGE R1|
000066b0  30 2c 52 31 30 2c 52 38  2c 41 53 4c 23 55 25 0d  |0,R10,R8,ASL#U%.|
000066c0  2c 7e 0f 5d 3a ed 3a 5b  4f 50 54 20 54 25 0d 2c  |,~.]:.:[OPT T%.,|
000066d0  88 17 52 53 42 53 20 52  36 2c 52 37 2c 52 36 2c  |..RSBS R6,R7,R6,|
000066e0  41 53 4c 23 31 0d 2c 92  14 41 44 44 47 45 20 52  |ASL#1.,..ADDGE R|
000066f0  31 30 2c 52 31 30 2c 52  38 0d 2c 9c 22 3b 20 43  |10,R10,R8.,."; C|
00006700  61 6c 63 75 6c 61 74 65  20 74 6f 70 20 73 68 6f  |alculate top sho|
00006710  72 74 20 67 72 61 64 69  65 6e 74 0d 2c a6 0d 4d  |rt gradient.,..M|
00006720  4f 56 20 52 38 2c 23 31  0d 2c b0 10 53 55 42 20  |OV R8,#1.,..SUB |
00006730  52 37 2c 52 35 2c 52 33  0d 2c ba 11 53 55 42 53  |R7,R5,R3.,..SUBS|
00006740  20 52 36 2c 52 34 2c 52  32 0d 2c c4 12 52 53 42  | R6,R4,R2.,..RSB|
00006750  4c 54 20 52 38 2c 52 38  2c 23 30 0d 2c ce 12 52  |LT R8,R8,#0.,..R|
00006760  53 42 4c 54 20 52 36 2c  52 36 2c 23 30 0d 2c d8  |SBLT R6,R6,#0.,.|
00006770  0d 4d 4f 56 20 52 34 2c  23 30 0d 2c e2 18 5d 3a  |.MOV R4,#0.,..]:|
00006780  e3 55 25 3d 39 b8 31 88  2d 31 3a 5b 4f 50 54 20  |.U%=9.1.-1:[OPT |
00006790  54 25 0d 2c ec 14 43 4d  50 20 52 37 2c 52 36 2c  |T%.,..CMP R7,R6,|
000067a0  41 53 52 23 55 25 0d 2c  f6 19 53 55 42 4c 45 20  |ASR#U%.,..SUBLE |
000067b0  52 36 2c 52 36 2c 52 37  2c 41 53 4c 23 55 25 0d  |R6,R6,R7,ASL#U%.|
000067c0  2d 00 1d 41 44 44 4c 45  20 52 34 2c 52 34 2c 52  |-..ADDLE R4,R4,R|
000067d0  38 2c 41 53 4c 23 55 25  2b 44 43 25 0d 2d 0a 0f  |8,ASL#U%+DC%.-..|
000067e0  5d 3a ed 3a 5b 4f 50 54  20 54 25 0d 2d 14 0d 43  |]:.:[OPT T%.-..C|
000067f0  4d 50 20 52 36 2c 52 37  0d 2d 1e 12 53 55 42 47  |MP R6,R7.-..SUBG|
00006800  45 20 52 36 2c 52 36 2c  52 37 0d 2d 28 1a 41 44  |E R6,R6,R7.-(.AD|
00006810  44 47 45 20 52 34 2c 52  34 2c 52 38 2c 41 53 4c  |DGE R4,R4,R8,ASL|
00006820  23 44 43 25 0d 2d 32 1c  5d 3a e3 55 25 3d 44 43  |#DC%.-2.]:.U%=DC|
00006830  25 2d 31 b8 31 88 2d 31  3a 5b 4f 50 54 20 54 25  |%-1.1.-1:[OPT T%|
00006840  0d 2d 3c 17 52 53 42 53  20 52 36 2c 52 37 2c 52  |.-<.RSBS R6,R7,R|
00006850  36 2c 41 53 4c 23 31 0d  2d 46 12 41 44 44 4c 54  |6,ASL#1.-F.ADDLT|
00006860  20 52 36 2c 52 36 2c 52  37 0d 2d 50 19 41 44 44  | R6,R6,R7.-P.ADD|
00006870  47 45 20 52 34 2c 52 34  2c 52 38 2c 41 53 4c 23  |GE R4,R4,R8,ASL#|
00006880  55 25 0d 2d 5a 0f 5d 3a  ed 3a 5b 4f 50 54 20 54  |U%.-Z.]:.:[OPT T|
00006890  25 0d 2d 64 17 52 53 42  53 20 52 36 2c 52 37 2c  |%.-d.RSBS R6,R7,|
000068a0  52 36 2c 41 53 4c 23 31  0d 2d 6e 12 41 44 44 47  |R6,ASL#1.-n.ADDG|
000068b0  45 20 52 34 2c 52 34 2c  52 38 0d 2d 78 2d 3b 20  |E R4,R4,R8.-x-; |
000068c0  43 61 6c 63 75 6c 61 74  65 20 62 6f 74 74 6f 6d  |Calculate bottom|
000068d0  2c 20 6d 69 64 64 6c 65  2c 20 74 6f 70 20 69 6e  |, middle, top in|
000068e0  20 70 69 78 65 6c 73 0d  2d 82 2f 3b 20 41 6c 73  | pixels.-./; Als|
000068f0  6f 20 63 6f 72 72 65 63  74 73 20 78 20 74 6f 20  |o corrects x to |
00006900  6e 65 61 72 65 73 74 20  76 65 72 74 69 63 61 6c  |nearest vertical|
00006910  20 70 69 78 65 6c 0d 2d  8c 17 41 44 44 20 52 36  | pixel.-..ADD R6|
00006920  2c 52 35 2c 23 31 3c 3c  44 43 25 2d 31 0d 2d 96  |,R5,#1<<DC%-1.-.|
00006930  15 4d 4f 56 20 52 36 2c  52 36 2c 41 53 52 23 44  |.MOV R6,R6,ASR#D|
00006940  43 25 0d 2d a0 17 41 44  44 20 52 35 2c 52 33 2c  |C%.-..ADD R5,R3,|
00006950  23 31 3c 3c 44 43 25 2d  31 0d 2d aa 15 4d 4f 56  |#1<<DC%-1.-..MOV|
00006960  20 52 35 2c 52 35 2c 41  53 52 23 44 43 25 0d 2d  | R5,R5,ASR#DC%.-|
00006970  b4 18 52 53 42 20 52 33  2c 52 33 2c 52 35 2c 41  |..RSB R3,R3,R5,A|
00006980  53 4c 23 44 43 25 0d 2d  be 17 41 44 44 20 52 33  |SL#DC%.-..ADD R3|
00006990  2c 52 33 2c 23 31 3c 3c  44 43 25 2d 31 0d 2d c8  |,R3,#1<<DC%-1.-.|
000069a0  17 4d 4f 56 20 52 33 2c  52 33 2c 41 53 52 23 44  |.MOV R3,R3,ASR#D|
000069b0  43 25 2d 36 0d 2d d2 10  4d 55 4c 20 52 37 2c 52  |C%-6.-..MUL R7,R|
000069c0  33 2c 52 34 0d 2d dc 16  41 44 44 20 52 32 2c 52  |3,R4.-..ADD R2,R|
000069d0  32 2c 52 37 2c 41 53 52  23 36 0d 2d e6 39 53 54  |2,R7,ASR#6.-.9ST|
000069e0  4d 46 44 20 52 31 33 21  2c 7b 52 32 2c 52 34 2c  |MFD R13!,{R2,R4,|
000069f0  52 36 7d 3a 3b 20 74 6f  70 20 73 68 6f 72 74 20  |R6}:; top short |
00006a00  78 2c 64 78 2c 20 74 6f  70 20 69 6e 20 70 69 78  |x,dx, top in pix|
00006a10  65 6c 73 0d 2d f0 17 41  44 44 20 52 34 2c 52 31  |els.-..ADD R4,R1|
00006a20  2c 23 31 3c 3c 44 43 25  2d 31 0d 2d fa 15 4d 4f  |,#1<<DC%-1.-..MO|
00006a30  56 20 52 34 2c 52 34 2c  41 53 52 23 44 43 25 0d  |V R4,R4,ASR#DC%.|
00006a40  2e 04 18 52 53 42 20 52  32 2c 52 31 2c 52 34 2c  |...RSB R2,R1,R4,|
00006a50  41 53 4c 23 44 43 25 0d  2e 0e 17 41 44 44 20 52  |ASL#DC%....ADD R|
00006a60  32 2c 52 32 2c 23 31 3c  3c 44 43 25 2d 31 0d 2e  |2,R2,#1<<DC%-1..|
00006a70  18 17 4d 4f 56 20 52 32  2c 52 32 2c 41 53 52 23  |..MOV R2,R2,ASR#|
00006a80  44 43 25 2d 36 0d 2e 22  11 4d 55 4c 20 52 33 2c  |DC%-6..".MUL R3,|
00006a90  52 32 2c 52 31 30 0d 2e  2c 16 41 44 44 20 52 31  |R2,R10..,.ADD R1|
00006aa0  2c 52 30 2c 52 33 2c 41  53 52 23 36 0d 2e 36 10  |,R0,R3,ASR#6..6.|
00006ab0  4d 55 4c 20 52 33 2c 52  32 2c 52 39 0d 2e 40 16  |MUL R3,R2,R9..@.|
00006ac0  41 44 44 20 52 30 2c 52  30 2c 52 33 2c 41 53 52  |ADD R0,R0,R3,ASR|
00006ad0  23 36 0d 2e 4a 0d 4d 4f  56 20 52 32 2c 52 39 0d  |#6..J.MOV R2,R9.|
00006ae0  2e 54 0e 4d 4f 56 20 52  33 2c 52 31 30 0d 2e 5e  |.T.MOV R3,R10..^|
00006af0  2c 3b 20 41 74 20 74 68  69 73 20 70 6f 69 6e 74  |,; At this point|
00006b00  20 72 65 67 69 73 74 65  72 73 20 61 72 65 20 75  | registers are u|
00006b10  73 65 64 20 61 73 2e 2e  2e 0d 2e 68 19 3b 20 52  |sed as.....h.; R|
00006b20  30 2c 52 32 20 61 72 65  20 6c 6f 6e 67 20 78 2c  |0,R2 are long x,|
00006b30  64 78 0d 2e 72 21 3b 20  52 31 2c 52 33 20 61 72  |dx..r!; R1,R3 ar|
00006b40  65 20 62 6f 74 74 6f 6d  20 73 68 6f 72 74 20 78  |e bottom short x|
00006b50  2c 64 78 0d 2e 7c 28 3b  20 52 34 2c 52 35 20 61  |,dx..|(; R4,R5 a|
00006b60  72 65 20 62 6f 74 74 6f  6d 2c 20 6d 69 64 64 6c  |re bottom, middl|
00006b70  65 20 69 6e 20 70 69 78  65 6c 73 0d 2e 86 33 3b  |e in pixels...3;|
00006b80  20 74 6f 70 20 73 68 6f  72 74 20 78 2c 64 78 20  | top short x,dx |
00006b90  61 6e 64 20 74 6f 70 20  69 6e 20 70 69 78 65 6c  |and top in pixel|
00006ba0  73 20 61 72 65 20 6f 6e  20 73 74 61 63 6b 0d 2e  |s are on stack..|
00006bb0  90 11 52 53 42 53 20 52  38 2c 52 34 2c 23 30 0d  |..RSBS R8,R4,#0.|
00006bc0  2e 9a 15 4d 4c 41 47 54  20 52 30 2c 52 38 2c 52  |...MLAGT R0,R8,R|
00006bd0  32 2c 52 30 0d 2e a4 15  4d 4c 41 47 54 20 52 31  |2,R0....MLAGT R1|
00006be0  2c 52 38 2c 52 33 2c 52  31 0d 2e ae 12 41 44 44  |,R8,R3,R1....ADD|
00006bf0  47 54 20 52 34 2c 52 34  2c 52 38 0d 2e b8 16 4f  |GT R4,R4,R8....O|
00006c00  50 54 20 a4 61 64 72 28  37 2c 63 6f 6c 25 2c 32  |PT .adr(7,col%,2|
00006c10  29 0d 2e c2 17 41 44 44  20 52 37 2c 52 37 2c 52  |)....ADD R7,R7,R|
00006c20  31 31 2c 41 53 4c 23 33  0d 2e cc 15 4c 44 4d 49  |11,ASL#3....LDMI|
00006c30  41 20 52 37 2c 7b 52 37  2c 52 31 31 7d 0d 2e d6  |A R7,{R7,R11}...|
00006c40  0d 54 53 54 20 52 34 2c  23 32 0d 2e e0 16 4d 4f  |.TST R4,#2....MO|
00006c50  56 4e 45 20 52 37 2c 52  37 2c 52 4f 52 23 31 36  |VNE R7,R7,ROR#16|
00006c60  0d 2e ea 18 4d 4f 56 4e  45 20 52 31 31 2c 52 31  |....MOVNE R11,R1|
00006c70  31 2c 52 4f 52 23 31 36  0d 2e f4 0d 54 53 54 20  |1,ROR#16....TST |
00006c80  52 34 2c 23 31 0d 2e fe  10 4d 4f 56 4e 45 20 52  |R4,#1....MOVNE R|
00006c90  38 2c 52 31 31 0d 2f 08  10 4d 4f 56 4e 45 20 52  |8,R11./..MOVNE R|
00006ca0  31 31 2c 52 37 0d 2f 12  16 4d 4f 56 4e 45 20 52  |11,R7./..MOVNE R|
00006cb0  37 2c 52 38 2c 52 4f 52  23 31 36 0d 2f 1c 14 4c  |7,R8,ROR#16./..L|
00006cc0  44 52 20 52 31 32 2c 73  63 72 61 64 64 72 25 0d  |DR R12,scraddr%.|
00006cd0  2f 26 18 52 53 42 20 52  38 2c 52 34 2c 23 73 63  |/&.RSB R8,R4,#sc|
00006ce0  68 65 69 67 68 74 25 0d  2f 30 1b 41 44 44 20 52  |height%./0.ADD R|
00006cf0  31 32 2c 52 31 32 2c 52  38 2c 41 53 4c 23 53 43  |12,R12,R8,ASL#SC|
00006d00  57 25 0d 2f 3a 1d 41 44  44 20 52 31 32 2c 52 31  |W%./:.ADD R12,R1|
00006d10  32 2c 52 38 2c 41 53 4c  23 53 43 57 25 2d 32 0d  |2,R8,ASL#SCW%-2.|
00006d20  2f 44 0d 4d 4f 56 20 52  36 2c 52 35 0d 2f 4e 15  |/D.MOV R6,R5./N.|
00006d30  43 4d 50 20 52 36 2c 23  73 63 68 65 69 67 68 74  |CMP R6,#scheight|
00006d40  25 0d 2f 58 17 4d 4f 56  47 54 20 52 36 2c 23 73  |%./X.MOVGT R6,#s|
00006d50  63 68 65 69 67 68 74 25  0d 2f 62 11 53 55 42 53  |cheight%./b.SUBS|
00006d60  20 52 34 2c 52 36 2c 52  34 0d 2f 6c 20 53 55 42  | R4,R6,R4./l SUB|
00006d70  4c 45 20 52 36 2c 52 36  2c 52 34 3a 3b 20 52 36  |LE R6,R6,R4:; R6|
00006d80  20 3d 20 6f 6c 64 20 52  34 0d 2f 76 13 42 4c 45  | = old R4./v.BLE|
00006d90  20 70 74 6e 6f 62 6f 74  74 6f 6d 25 0d 2f 80 0b  | ptnobottom%./..|
00006da0  2e 79 6c 6f 6f 70 25 0d  2f 8a 18 53 55 42 20 52  |.yloop%./..SUB R|
00006db0  31 32 2c 52 31 32 2c 23  73 63 6c 69 6e 63 25 0d  |12,R12,#sclinc%.|
00006dc0  2f 94 10 42 4c 20 64 72  61 77 6c 69 6e 65 25 0d  |/..BL drawline%.|
00006dd0  2f 9e 10 41 44 44 20 52  30 2c 52 30 2c 52 32 0d  |/..ADD R0,R0,R2.|
00006de0  2f a8 10 41 44 44 20 52  31 2c 52 31 2c 52 33 0d  |/..ADD R1,R1,R3.|
00006df0  2f b2 0e 4d 4f 56 20 52  38 2c 52 31 31 0d 2f bc  |/..MOV R8,R11./.|
00006e00  0e 4d 4f 56 20 52 31 31  2c 52 37 0d 2f c6 14 4d  |.MOV R11,R7./..M|
00006e10  4f 56 20 52 37 2c 52 38  2c 52 4f 52 23 31 36 0d  |OV R7,R8,ROR#16.|
00006e20  2f d0 11 53 55 42 53 20  52 34 2c 52 34 2c 23 31  |/..SUBS R4,R4,#1|
00006e30  0d 2f da 0e 42 47 54 20  79 6c 6f 6f 70 25 0d 2f  |./..BGT yloop%./|
00006e40  e4 10 2e 70 74 6e 6f 62  6f 74 74 6f 6d 25 0d 2f  |...ptnobottom%./|
00006e50  ee 39 4c 44 4d 46 44 20  52 31 33 21 2c 7b 52 31  |.9LDMFD R13!,{R1|
00006e60  2c 52 33 2c 52 34 7d 3a  3b 20 73 68 6f 72 74 20  |,R3,R4}:; short |
00006e70  74 6f 70 20 78 2c 64 78  2c 20 74 6f 70 20 69 6e  |top x,dx, top in|
00006e80  20 70 69 78 65 6c 73 0d  2f f8 0d 43 4d 50 20 52  | pixels./..CMP R|
00006e90  36 2c 23 30 0d 30 02 0e  53 57 49 4c 54 20 26 31  |6,#0.0..SWILT &1|
00006ea0  34 31 0d 30 0c 11 53 55  42 53 20 52 38 2c 52 36  |41.0..SUBS R8,R6|
00006eb0  2c 52 35 0d 30 16 15 4d  4c 41 47 54 20 52 31 2c  |,R5.0..MLAGT R1,|
00006ec0  52 38 2c 52 33 2c 52 31  0d 30 20 15 43 4d 50 20  |R8,R3,R1.0 .CMP |
00006ed0  52 34 2c 23 73 63 68 65  69 67 68 74 25 0d 30 2a  |R4,#scheight%.0*|
00006ee0  17 4d 4f 56 47 54 20 52  34 2c 23 73 63 68 65 69  |.MOVGT R4,#schei|
00006ef0  67 68 74 25 0d 30 34 11  53 55 42 53 20 52 34 2c  |ght%.04.SUBS R4,|
00006f00  52 34 2c 52 36 0d 30 3e  10 42 4c 45 20 70 74 6e  |R4,R6.0>.BLE ptn|
00006f10  6f 74 6f 70 25 0d 30 48  0b 2e 79 6c 6f 6f 70 25  |otop%.0H..yloop%|
00006f20  0d 30 52 18 53 55 42 20  52 31 32 2c 52 31 32 2c  |.0R.SUB R12,R12,|
00006f30  23 73 63 6c 69 6e 63 25  0d 30 5c 10 42 4c 20 64  |#sclinc%.0\.BL d|
00006f40  72 61 77 6c 69 6e 65 25  0d 30 66 10 41 44 44 20  |rawline%.0f.ADD |
00006f50  52 30 2c 52 30 2c 52 32  0d 30 70 10 41 44 44 20  |R0,R0,R2.0p.ADD |
00006f60  52 31 2c 52 31 2c 52 33  0d 30 7a 0e 4d 4f 56 20  |R1,R1,R3.0z.MOV |
00006f70  52 38 2c 52 31 31 0d 30  84 0e 4d 4f 56 20 52 31  |R8,R11.0..MOV R1|
00006f80  31 2c 52 37 0d 30 8e 14  4d 4f 56 20 52 37 2c 52  |1,R7.0..MOV R7,R|
00006f90  38 2c 52 4f 52 23 31 36  0d 30 98 11 53 55 42 53  |8,ROR#16.0..SUBS|
00006fa0  20 52 34 2c 52 34 2c 23  31 0d 30 a2 0e 42 47 54  | R4,R4,#1.0..BGT|
00006fb0  20 79 6c 6f 6f 70 25 0d  30 ac 0d 2e 70 74 6e 6f  | yloop%.0...ptno|
00006fc0  74 6f 70 25 0d 30 b6 1a  4c 44 4d 46 44 20 52 31  |top%.0..LDMFD R1|
00006fd0  33 21 2c 7b 52 30 2d 52  31 32 2c 50 43 7d 0d 30  |3!,{R0-R12,PC}.0|
00006fe0  c0 05 3a 0d 30 ca 1d 3b  20 44 72 61 77 73 20 61  |..:.0..; Draws a|
00006ff0  20 68 6f 72 69 7a 6f 6e  74 61 6c 20 6c 69 6e 65  | horizontal line|
00007000  0d 30 d4 32 3b 20 52 30  20 69 73 20 6c 65 66 74  |.0.2; R0 is left|
00007010  20 65 6e 64 2c 20 52 31  20 69 73 20 72 69 67 68  | end, R1 is righ|
00007020  74 20 65 6e 64 2c 20 62  6f 74 68 20 69 6e 20 44  |t end, both in D|
00007030  43 25 0d 30 de 20 3b 20  52 31 32 20 69 73 20 73  |C%.0. ; R12 is s|
00007040  63 72 65 65 6e 20 6c 69  6e 65 20 61 64 64 72 65  |creen line addre|
00007050  73 73 0d 30 e8 13 3b 20  52 31 31 20 69 73 20 63  |ss.0..; R11 is c|
00007060  6f 6c 6f 75 72 0d 30 f2  1b 3b 20 43 6f 72 72 75  |olour.0..; Corru|
00007070  70 74 73 20 52 30 2d 52  32 2c 52 38 2d 52 31 32  |pts R0-R2,R8-R12|
00007080  0d 30 fc 05 3a 0d 31 06  0e 2e 64 72 61 77 6c 69  |.0..:.1...drawli|
00007090  6e 65 25 0d 31 10 21 53  54 4d 46 44 20 52 31 33  |ne%.1.!STMFD R13|
000070a0  21 2c 7b 52 30 2d 52 32  2c 52 38 2d 52 31 32 2c  |!,{R0-R2,R8-R12,|
000070b0  52 31 34 7d 0d 31 1a 0d  43 4d 50 20 52 30 2c 52  |R14}.1..CMP R0,R|
000070c0  31 0d 31 24 0f 4d 4f 56  47 54 20 52 32 2c 52 30  |1.1$.MOVGT R2,R0|
000070d0  0d 31 2e 0f 4d 4f 56 47  54 20 52 30 2c 52 31 0d  |.1..MOVGT R0,R1.|
000070e0  31 38 0f 4d 4f 56 47 54  20 52 31 2c 52 32 0d 31  |18.MOVGT R1,R2.1|
000070f0  42 12 43 4d 50 20 52 30  2c 23 30 3c 3c 44 43 25  |B.CMP R0,#0<<DC%|
00007100  0d 31 4c 14 4d 4f 56 4c  54 20 52 30 2c 23 30 3c  |.1L.MOVLT R0,#0<|
00007110  3c 44 43 25 0d 31 56 19  43 4d 50 20 52 31 2c 23  |<DC%.1V.CMP R1,#|
00007120  73 63 77 69 64 74 68 25  3c 3c 44 43 25 0d 31 60  |scwidth%<<DC%.1`|
00007130  1b 4d 4f 56 47 54 20 52  31 2c 23 73 63 77 69 64  |.MOVGT R1,#scwid|
00007140  74 68 25 3c 3c 44 43 25  0d 31 6a 15 4d 4f 56 20  |th%<<DC%.1j.MOV |
00007150  52 30 2c 52 30 2c 41 53  52 23 44 43 25 0d 31 74  |R0,R0,ASR#DC%.1t|
00007160  15 4d 4f 56 20 52 31 2c  52 31 2c 41 53 52 23 44  |.MOV R1,R1,ASR#D|
00007170  43 25 0d 31 7e 0d 43 4d  50 20 52 30 2c 52 31 0d  |C%.1~.CMP R0,R1.|
00007180  31 88 22 4c 44 4d 47 45  46 44 20 52 31 33 21 2c  |1."LDMGEFD R13!,|
00007190  7b 52 30 2d 52 32 2c 52  38 2d 52 31 32 2c 50 43  |{R0-R2,R8-R12,PC|
000071a0  7d 0d 31 92 13 4d 4f 56  20 52 32 2c 52 30 2c 41  |}.1..MOV R2,R0,A|
000071b0  53 52 23 32 0d 31 9c 18  41 44 44 20 52 31 32 2c  |SR#2.1..ADD R12,|
000071c0  52 31 32 2c 52 32 2c 41  53 4c 23 32 0d 31 a6 13  |R12,R2,ASL#2.1..|
000071d0  43 4d 50 20 52 32 2c 52  31 2c 41 53 52 23 32 0d  |CMP R2,R1,ASR#2.|
000071e0  31 b0 10 42 45 51 20 64  68 73 6d 61 6c 6c 25 0d  |1..BEQ dhsmall%.|
000071f0  31 ba 0e 4d 4f 56 20 52  38 2c 52 31 31 0d 31 c4  |1..MOV R8,R11.1.|
00007200  0e 4d 4f 56 20 52 39 2c  52 31 31 0d 31 ce 0f 4d  |.MOV R9,R11.1..M|
00007210  4f 56 20 52 31 30 2c 52  31 31 0d 31 d8 10 53 55  |OV R10,R11.1..SU|
00007220  42 20 52 31 2c 52 31 2c  52 30 0d 31 e2 0e 80 20  |B R1,R1,R0.1... |
00007230  52 30 2c 52 30 2c 23 33  0d 31 ec 13 41 44 52 20  |R0,R0,#3.1..ADR |
00007240  52 32 2c 64 68 6c 65 66  74 6a 25 0d 31 f6 18 4c  |R2,dhleftj%.1..L|
00007250  44 52 20 52 30 2c 5b 52  32 2c 52 30 2c 41 53 4c  |DR R0,[R2,R0,ASL|
00007260  23 32 5d 0d 32 00 10 41  44 44 20 50 43 2c 52 32  |#2].2..ADD PC,R2|
00007270  2c 52 30 0d 32 0a 05 3a  0d 32 14 0d 2e 64 68 6c  |,R0.2..:.2...dhl|
00007280  65 66 74 6a 25 0d 32 1e  15 5d 3a e3 55 25 3d 30  |eftj%.2..]:.U%=0|
00007290  b8 33 3a 5b 4f 50 54 20  54 25 0d 32 28 18 45 51  |.3:[OPT T%.2(.EQ|
000072a0  55 44 20 64 68 65 6e 64  25 2d 64 68 6c 65 66 74  |UD dhend%-dhleft|
000072b0  6a 25 0d 32 32 0f 5d 3a  ed 3a 5b 4f 50 54 20 54  |j%.22.]:.:[OPT T|
000072c0  25 0d 32 3c 05 3a 0d 32  46 1e 4f 50 54 20 a4 72  |%.2<.:.2F.OPT .r|
000072d0  65 67 69 73 74 65 72 6a  28 64 68 6c 65 66 74 6a  |egisterj(dhleftj|
000072e0  25 2c 30 29 0d 32 50 0e  2e 64 68 6d 69 64 64 6c  |%,0).2P..dhmiddl|
000072f0  65 25 0d 32 5a 13 4d 4f  56 20 52 32 2c 52 31 2c  |e%.2Z.MOV R2,R1,|
00007300  41 53 52 23 34 0d 32 64  0f 80 20 52 31 2c 52 31  |ASR#4.2d.. R1,R1|
00007310  2c 23 31 35 0d 32 6e 14  41 44 52 20 52 30 2c 64  |,#15.2n.ADR R0,d|
00007320  68 72 69 67 68 74 6a 25  0d 32 78 18 4c 44 52 20  |hrightj%.2x.LDR |
00007330  52 31 2c 5b 52 30 2c 52  31 2c 41 53 4c 23 32 5d  |R1,[R0,R1,ASL#2]|
00007340  0d 32 82 0d 43 4d 50 20  52 32 2c 23 30 0d 32 8c  |.2..CMP R2,#0.2.|
00007350  12 41 44 44 4c 45 20 50  43 2c 52 30 2c 52 31 0d  |.ADDLE PC,R0,R1.|
00007360  32 96 0b 2e 78 6c 6f 6f  70 25 0d 32 a0 17 53 54  |2...xloop%.2..ST|
00007370  4d 49 41 20 52 31 32 21  2c 7b 52 38 2d 52 31 31  |MIA R12!,{R8-R11|
00007380  7d 0d 32 aa 11 53 55 42  53 20 52 32 2c 52 32 2c  |}.2..SUBS R2,R2,|
00007390  23 31 0d 32 b4 0e 42 47  54 20 78 6c 6f 6f 70 25  |#1.2..BGT xloop%|
000073a0  0d 32 be 10 41 44 44 20  50 43 2c 52 30 2c 52 31  |.2..ADD PC,R0,R1|
000073b0  0d 32 c8 05 3a 0d 32 d2  15 5d 3a e3 55 25 3d 31  |.2..:.2..]:.U%=1|
000073c0  b8 33 3a 5b 4f 50 54 20  54 25 0d 32 dc 1f 4f 50  |.3:[OPT T%.2..OP|
000073d0  54 20 a4 72 65 67 69 73  74 65 72 6a 28 64 68 6c  |T .registerj(dhl|
000073e0  65 66 74 6a 25 2c 55 25  29 0d 32 e6 10 4c 44 52  |eftj%,U%).2..LDR|
000073f0  20 52 32 2c 5b 52 31 32  5d 0d 32 f0 19 4d 4f 56  | R2,[R12].2..MOV|
00007400  20 52 32 2c 52 32 2c 4c  53 4c 23 34 2d 55 25 3c  | R2,R2,LSL#4-U%<|
00007410  3c 33 0d 32 fa 1a 84 52  20 52 32 2c 52 32 2c 52  |<3.2...R R2,R2,R|
00007420  31 31 2c 4c 53 52 23 55  25 3c 3c 33 0d 33 04 19  |11,LSR#U%<<3.3..|
00007430  4d 4f 56 20 52 32 2c 52  32 2c 52 4f 52 23 34 2d  |MOV R2,R2,ROR#4-|
00007440  55 25 3c 3c 33 0d 33 0e  13 53 54 52 20 52 32 2c  |U%<<3.3..STR R2,|
00007450  5b 52 31 32 5d 2c 23 34  0d 33 18 13 53 55 42 20  |[R12],#4.3..SUB |
00007460  52 31 2c 52 31 2c 23 34  2d 55 25 0d 33 22 0f 42  |R1,R1,#4-U%.3".B|
00007470  20 64 68 6d 69 64 64 6c  65 25 0d 33 2c 0f 5d 3a  | dhmiddle%.3,.]:|
00007480  ed 3a 5b 4f 50 54 20 54  25 0d 33 36 05 3a 0d 33  |.:[OPT T%.36.:.3|
00007490  40 0e 2e 64 68 72 69 67  68 74 6a 25 0d 33 4a 16  |@..dhrightj%.3J.|
000074a0  5d 3a e3 55 25 3d 30 b8  31 35 3a 5b 4f 50 54 20  |]:.U%=0.15:[OPT |
000074b0  54 25 0d 33 54 19 45 51  55 44 20 64 68 65 6e 64  |T%.3T.EQUD dhend|
000074c0  25 2d 64 68 72 69 67 68  74 6a 25 0d 33 5e 0f 5d  |%-dhrightj%.3^.]|
000074d0  3a ed 3a 5b 4f 50 54 20  54 25 0d 33 68 05 3a 0d  |:.:[OPT T%.3h.:.|
000074e0  33 72 25 5d 3a e3 55 25  3d 34 b8 31 35 88 34 3a  |3r%]:.U%=4.15.4:|
000074f0  57 25 3d 38 2b 28 55 25  3e 3e 32 29 3a 5b 4f 50  |W%=8+(U%>>2):[OP|
00007500  54 20 54 25 0d 33 7c 20  4f 50 54 20 a4 72 65 67  |T T%.3| OPT .reg|
00007510  69 73 74 65 72 6a 28 64  68 72 69 67 68 74 6a 25  |isterj(dhrightj%|
00007520  2c 55 25 29 0d 33 86 19  53 54 4d 49 41 20 52 31  |,U%).3..STMIA R1|
00007530  32 2c 7b 52 38 2d 28 57  25 2d 31 29 7d 0d 33 90  |2,{R8-(W%-1)}.3.|
00007540  20 4c 44 4d 46 44 20 52  31 33 21 2c 7b 52 30 2d  | LDMFD R13!,{R0-|
00007550  52 32 2c 52 38 2d 52 31  32 2c 50 43 7d 0d 33 9a  |R2,R8-R12,PC}.3.|
00007560  0f 5d 3a ed 3a 5b 4f 50  54 20 54 25 0d 33 a4 05  |.]:.:[OPT T%.3..|
00007570  3a 0d 33 ae 36 5d 3a e3  55 25 3d 30 b8 31 35 88  |:.3.6]:.U%=0.15.|
00007580  34 3a e3 56 25 3d 31 b8  33 3a 53 25 3d 55 25 2b  |4:.V%=1.3:S%=U%+|
00007590  56 25 3a 57 25 3d 38 2b  28 55 25 3e 3e 32 29 3a  |V%:W%=8+(U%>>2):|
000075a0  5b 4f 50 54 20 54 25 0d  33 b8 20 4f 50 54 20 a4  |[OPT T%.3. OPT .|
000075b0  72 65 67 69 73 74 65 72  6a 28 64 68 72 69 67 68  |registerj(dhrigh|
000075c0  74 6a 25 2c 53 25 29 0d  33 c2 14 4c 44 52 20 52  |tj%,S%).3..LDR R|
000075d0  30 2c 5b 52 31 32 2c 23  55 25 5d 0d 33 cc 17 4d  |0,[R12,#U%].3..M|
000075e0  4f 56 20 52 30 2c 52 30  2c 4c 53 52 23 56 25 3c  |OV R0,R0,LSR#V%<|
000075f0  3c 33 0d 33 d6 1b 84 52  20 52 30 2c 52 30 2c 57  |<3.3...R R0,R0,W|
00007600  25 2c 4c 53 4c 23 34 2d  56 25 3c 3c 33 0d 33 e0  |%,LSL#4-V%<<3.3.|
00007610  19 4d 4f 56 20 57 25 2c  52 30 2c 52 4f 52 23 34  |.MOV W%,R0,ROR#4|
00007620  2d 56 25 3c 3c 33 0d 33  ea 15 53 54 4d 49 41 20  |-V%<<3.3..STMIA |
00007630  52 31 32 2c 7b 52 38 2d  57 25 7d 0d 33 f4 20 4c  |R12,{R8-W%}.3. L|
00007640  44 4d 46 44 20 52 31 33  21 2c 7b 52 30 2d 52 32  |DMFD R13!,{R0-R2|
00007650  2c 52 38 2d 52 31 32 2c  50 43 7d 0d 33 fe 10 5d  |,R8-R12,PC}.3..]|
00007660  3a ed 2c 3a 5b 4f 50 54  20 54 25 0d 34 08 05 3a  |:.,:[OPT T%.4..:|
00007670  0d 34 12 0d 2e 64 68 73  6d 61 6c 6c 25 0d 34 1c  |.4...dhsmall%.4.|
00007680  0e 80 20 52 30 2c 52 30  2c 23 33 0d 34 26 0e 80  |.. R0,R0,#3.4&..|
00007690  20 52 31 2c 52 31 2c 23  33 0d 34 30 16 41 44 44  | R1,R1,#3.40.ADD|
000076a0  20 52 31 2c 52 30 2c 52  31 2c 41 53 4c 23 32 0d  | R1,R0,R1,ASL#2.|
000076b0  34 3a 14 41 44 52 20 52  30 2c 64 68 73 6d 61 6c  |4:.ADR R0,dhsmal|
000076c0  6c 6a 25 0d 34 44 18 4c  44 52 20 52 31 2c 5b 52  |lj%.4D.LDR R1,[R|
000076d0  30 2c 52 31 2c 41 53 4c  23 32 5d 0d 34 4e 10 41  |0,R1,ASL#2].4N.A|
000076e0  44 44 20 50 43 2c 52 30  2c 52 31 0d 34 58 05 3a  |DD PC,R0,R1.4X.:|
000076f0  0d 34 62 0e 2e 64 68 73  6d 61 6c 6c 6a 25 0d 34  |.4b..dhsmallj%.4|
00007700  6c 1d 5d 3a e3 56 25 3d  30 b8 33 3a e3 55 25 3d  |l.]:.V%=0.3:.U%=|
00007710  30 b8 33 3a 5b 4f 50 54  20 54 25 0d 34 76 19 45  |0.3:[OPT T%.4v.E|
00007720  51 55 44 20 64 68 65 6e  64 25 2d 64 68 73 6d 61  |QUD dhend%-dhsma|
00007730  6c 6c 6a 25 0d 34 80 10  5d 3a ed 2c 3a 5b 4f 50  |llj%.4..]:.,:[OP|
00007740  54 20 54 25 0d 34 8a 05  3a 0d 34 94 20 5d 3a e3  |T T%.4..:.4. ]:.|
00007750  55 25 3d 30 b8 32 3a e3  56 25 3d 55 25 2b 31 b8  |U%=0.2:.V%=U%+1.|
00007760  33 3a 5b 4f 50 54 20 54  25 0d 34 9e 28 4f 50 54  |3:[OPT T%.4.(OPT|
00007770  20 a4 72 65 67 69 73 74  65 72 6a 28 64 68 73 6d  | .registerj(dhsm|
00007780  61 6c 6c 6a 25 2c 55 25  2b 28 56 25 3c 3c 32 29  |allj%,U%+(V%<<2)|
00007790  29 0d 34 a8 10 4c 44 52  20 52 30 2c 5b 52 31 32  |).4..LDR R0,[R12|
000077a0  5d 0d 34 b2 0c 5d 3a e7  55 25 3e 30 8c 0d 34 bc  |].4..]:.U%>0..4.|
000077b0  0b 5b 4f 50 54 20 54 25  0d 34 c6 17 4d 4f 56 20  |.[OPT T%.4..MOV |
000077c0  52 30 2c 52 30 2c 52 4f  52 23 55 25 3c 3c 33 0d  |R0,R0,ROR#U%<<3.|
000077d0  34 d0 19 4d 4f 56 20 52  31 31 2c 52 31 31 2c 52  |4..MOV R11,R11,R|
000077e0  4f 52 23 55 25 3c 3c 33  0d 34 da 05 5d 0d 34 e4  |OR#U%<<3.4..].4.|
000077f0  0d cd 3a 5b 4f 50 54 20  54 25 0d 34 ee 1a 4d 4f  |..:[OPT T%.4..MO|
00007800  56 20 52 30 2c 52 30 2c  4c 53 52 23 56 25 2d 55  |V R0,R0,LSR#V%-U|
00007810  25 3c 3c 33 0d 34 f8 21  84 52 20 52 30 2c 52 30  |%<<3.4.!.R R0,R0|
00007820  2c 52 31 31 2c 4c 53 4c  23 34 2d 28 56 25 2d 55  |,R11,LSL#4-(V%-U|
00007830  25 29 3c 3c 33 0d 35 02  19 4d 4f 56 20 52 30 2c  |%)<<3.5..MOV R0,|
00007840  52 30 2c 52 4f 52 23 34  2d 56 25 3c 3c 33 0d 35  |R0,ROR#4-V%<<3.5|
00007850  0c 10 53 54 52 20 52 30  2c 5b 52 31 32 5d 0d 35  |..STR R0,[R12].5|
00007860  16 20 4c 44 4d 46 44 20  52 31 33 21 2c 7b 52 30  |. LDMFD R13!,{R0|
00007870  2d 52 32 2c 52 38 2d 52  31 32 2c 50 43 7d 0d 35  |-R2,R8-R12,PC}.5|
00007880  20 10 5d 3a ed 2c 3a 5b  4f 50 54 20 54 25 0d 35  | .]:.,:[OPT T%.5|
00007890  2a 05 3a 0d 35 34 0b 2e  64 68 65 6e 64 25 0d 35  |*.:.54..dhend%.5|
000078a0  3e 20 4c 44 4d 46 44 20  52 31 33 21 2c 7b 52 30  |> LDMFD R13!,{R0|
000078b0  2d 52 32 2c 52 38 2d 52  31 32 2c 50 43 7d 0d 35  |-R2,R8-R12,PC}.5|
000078c0  48 05 3a 0d 35 52 0d 2e  74 65 73 74 70 6f 73 25  |H.:.5R..testpos%|
000078d0  0d 35 5c 28 45 51 55 44  20 31 3c 3c 56 43 25 3a  |.5\(EQUD 1<<VC%:|
000078e0  45 51 55 44 20 30 3a 45  51 55 44 20 30 3a 3b 20  |EQUD 0:EQUD 0:; |
000078f0  45 2d 76 65 63 74 6f 72  0d 35 66 28 45 51 55 44  |E-vector.5f(EQUD|
00007900  20 30 3a 45 51 55 44 20  31 3c 3c 56 43 25 3a 45  | 0:EQUD 1<<VC%:E|
00007910  51 55 44 20 30 3a 3b 20  4e 2d 76 65 63 74 6f 72  |QUD 0:; N-vector|
00007920  0d 35 70 28 45 51 55 44  20 30 3a 45 51 55 44 20  |.5p(EQUD 0:EQUD |
00007930  30 3a 45 51 55 44 20 31  3c 3c 56 43 25 3a 3b 20  |0:EQUD 1<<VC%:; |
00007940  55 2d 76 65 63 74 6f 72  0d 35 7a 29 45 51 55 44  |U-vector.5z)EQUD|
00007950  20 30 3a 45 51 55 44 20  30 3a 45 51 55 44 20 31  | 0:EQUD 0:EQUD 1|
00007960  30 3c 3c 41 43 25 3a 3b  20 50 6f 73 69 74 69 6f  |0<<AC%:; Positio|
00007970  6e 0d 35 84 05 3a 0d 35  8e 0c 2e 6d 61 74 72 69  |n.5..:.5...matri|
00007980  78 25 0d 35 98 28 45 51  55 44 20 31 3c 3c 56 43  |x%.5.(EQUD 1<<VC|
00007990  25 3a 45 51 55 44 20 30  3a 45 51 55 44 20 30 3a  |%:EQUD 0:EQUD 0:|
000079a0  3b 20 45 2d 76 65 63 74  6f 72 0d 35 a2 28 45 51  |; E-vector.5.(EQ|
000079b0  55 44 20 30 3a 45 51 55  44 20 31 3c 3c 56 43 25  |UD 0:EQUD 1<<VC%|
000079c0  3a 45 51 55 44 20 30 3a  3b 20 4e 2d 76 65 63 74  |:EQUD 0:; N-vect|
000079d0  6f 72 0d 35 ac 28 45 51  55 44 20 30 3a 45 51 55  |or.5.(EQUD 0:EQU|
000079e0  44 20 30 3a 45 51 55 44  20 31 3c 3c 56 43 25 3a  |D 0:EQUD 1<<VC%:|
000079f0  3b 20 55 2d 76 65 63 74  6f 72 0d 35 b6 32 45 51  |; U-vector.5.2EQ|
00007a00  55 44 20 30 3a 45 51 55  44 20 30 3a 45 51 55 44  |UD 0:EQUD 0:EQUD|
00007a10  20 31 30 3c 3c 41 43 25  3a 3b 20 52 65 6c 61 74  | 10<<AC%:; Relat|
00007a20  69 76 65 20 70 6f 73 69  74 69 6f 6e 0d 35 c0 2c  |ive position.5.,|
00007a30  45 51 55 44 20 30 3a 45  51 55 44 20 30 3a 45 51  |EQUD 0:EQUD 0:EQ|
00007a40  55 44 20 31 3c 3c 56 43  25 3a 3b 20 4c 69 67 68  |UD 1<<VC%:; Ligh|
00007a50  74 20 76 65 63 74 6f 72  0d 35 ca 05 3a 0d 35 d4  |t vector.5..:.5.|
00007a60  23 3b 20 44 72 61 77 73  20 61 20 76 65 63 74 6f  |#; Draws a vecto|
00007a70  72 20 67 72 61 70 68 69  63 73 20 73 68 61 70 65  |r graphics shape|
00007a80  0d 35 de 20 3b 20 55 73  65 73 20 74 65 73 74 70  |.5. ; Uses testp|
00007a90  6f 73 20 61 74 20 74 68  65 20 6d 6f 6d 65 6e 74  |os at the moment|
00007aa0  0d 35 e8 2f 3b 20 55 73  65 73 20 73 68 61 70 65  |.5./; Uses shape|
00007ab0  20 64 61 74 61 20 66 72  6f 6d 20 73 68 61 70 65  | data from shape|
00007ac0  25 20 61 74 20 74 68 65  20 6d 6f 6d 65 6e 74 0d  |% at the moment.|
00007ad0  35 f2 35 3b 20 45 76 65  6e 74 75 61 6c 6c 79 2c  |5.5; Eventually,|
00007ae0  20 69 74 20 77 69 6c 6c  20 65 78 70 65 63 74 20  | it will expect |
00007af0  6d 61 74 72 69 78 25 20  74 6f 20 62 65 20 73 65  |matrix% to be se|
00007b00  74 20 75 70 0d 35 fc 29  3b 20 20 20 20 20 20 20  |t up.5.);       |
00007b10  20 20 20 20 20 61 6e 64  20 52 31 32 20 74 6f 20  |     and R12 to |
00007b20  62 65 20 73 68 61 70 65  20 64 61 74 61 0d 36 06  |be shape data.6.|
00007b30  05 3a 0d 36 10 0f 2e 64  72 61 77 73 68 61 70 65  |.:.6...drawshape|
00007b40  25 0d 36 1a 14 53 54 4d  46 44 20 52 31 33 21 2c  |%.6..STMFD R13!,|
00007b50  7b 52 31 34 7d 0d 36 24  14 41 44 52 20 52 31 32  |{R14}.6$.ADR R12|
00007b60  2c 74 65 73 74 70 6f 73  25 0d 36 2e 12 42 4c 20  |,testpos%.6..BL |
00007b70  6d 61 6b 65 6d 61 74 72  69 78 25 0d 36 38 12 3b  |makematrix%.68.;|
00007b80  20 46 69 6c 6c 20 70 6f  69 6e 74 73 25 0d 36 42  | Fill points%.6B|
00007b90  19 4f 50 54 20 a4 61 64  72 28 31 32 2c 73 68 61  |.OPT .adr(12,sha|
00007ba0  70 65 25 2c 32 29 0d 36  4c 1a 4f 50 54 20 a4 61  |pe%,2).6L.OPT .a|
00007bb0  64 72 28 31 31 2c 70 6f  69 6e 74 73 25 2c 32 29  |dr(11,points%,2)|
00007bc0  0d 36 56 14 4c 44 52 20  52 31 30 2c 5b 52 31 32  |.6V.LDR R10,[R12|
00007bd0  5d 2c 23 34 0d 36 60 0b  2e 70 6c 6f 6f 70 25 0d  |],#4.6`..ploop%.|
00007be0  36 6a 16 4c 44 4d 49 41  20 52 31 32 21 2c 7b 52  |6j.LDMIA R12!,{R|
00007bf0  30 2d 52 32 7d 0d 36 74  12 41 44 52 20 52 39 2c  |0-R2}.6t.ADR R9,|
00007c00  6d 61 74 72 69 78 25 0d  36 7e 15 4c 44 4d 49 41  |matrix%.6~.LDMIA|
00007c10  20 52 39 21 2c 7b 52 33  2d 52 35 7d 0d 36 88 10  | R9!,{R3-R5}.6..|
00007c20  4d 55 4c 20 52 36 2c 52  30 2c 52 33 0d 36 92 10  |MUL R6,R0,R3.6..|
00007c30  4d 55 4c 20 52 37 2c 52  30 2c 52 34 0d 36 9c 10  |MUL R7,R0,R4.6..|
00007c40  4d 55 4c 20 52 38 2c 52  30 2c 52 35 0d 36 a6 15  |MUL R8,R0,R5.6..|
00007c50  4c 44 4d 49 41 20 52 39  21 2c 7b 52 33 2d 52 35  |LDMIA R9!,{R3-R5|
00007c60  7d 0d 36 b0 13 4d 4c 41  20 52 36 2c 52 31 2c 52  |}.6..MLA R6,R1,R|
00007c70  33 2c 52 36 0d 36 ba 13  4d 4c 41 20 52 37 2c 52  |3,R6.6..MLA R7,R|
00007c80  31 2c 52 34 2c 52 37 0d  36 c4 13 4d 4c 41 20 52  |1,R4,R7.6..MLA R|
00007c90  38 2c 52 31 2c 52 35 2c  52 38 0d 36 ce 15 4c 44  |8,R1,R5,R8.6..LD|
00007ca0  4d 49 41 20 52 39 21 2c  7b 52 33 2d 52 35 7d 0d  |MIA R9!,{R3-R5}.|
00007cb0  36 d8 13 4d 4c 41 20 52  36 2c 52 32 2c 52 33 2c  |6..MLA R6,R2,R3,|
00007cc0  52 36 0d 36 e2 13 4d 4c  41 20 52 37 2c 52 32 2c  |R6.6..MLA R7,R2,|
00007cd0  52 34 2c 52 37 0d 36 ec  13 4d 4c 41 20 52 38 2c  |R4,R7.6..MLA R8,|
00007ce0  52 32 2c 52 35 2c 52 38  0d 36 f6 15 4c 44 4d 49  |R2,R5,R8.6..LDMI|
00007cf0  41 20 52 39 21 2c 7b 52  33 2d 52 35 7d 0d 37 00  |A R9!,{R3-R5}.7.|
00007d00  25 41 44 44 20 52 36 2c  52 33 2c 52 36 2c 41 53  |%ADD R6,R3,R6,AS|
00007d10  52 23 56 43 25 3a 3b 20  41 70 70 61 72 65 6e 74  |R#VC%:; Apparent|
00007d20  20 45 0d 37 0a 25 41 44  44 20 52 37 2c 52 34 2c  | E.7.%ADD R7,R4,|
00007d30  52 37 2c 41 53 52 23 56  43 25 3a 3b 20 41 70 70  |R7,ASR#VC%:; App|
00007d40  61 72 65 6e 74 20 4e 0d  37 14 25 41 44 44 20 52  |arent N.7.%ADD R|
00007d50  38 2c 52 35 2c 52 38 2c  41 53 52 23 56 43 25 3a  |8,R5,R8,ASR#VC%:|
00007d60  3b 20 41 70 70 61 72 65  6e 74 20 55 0d 37 1e 11  |; Apparent U.7..|
00007d70  43 4d 50 20 52 37 2c 23  31 3c 3c 31 30 0d 37 28  |CMP R7,#1<<10.7(|
00007d80  13 4d 4f 56 4c 54 20 52  30 2c 23 31 3c 3c 33 31  |.MOVLT R0,#1<<31|
00007d90  0d 37 32 11 42 4c 54 20  64 73 62 65 68 69 6e 64  |.72.BLT dsbehind|
00007da0  25 0d 37 3c 11 43 4d 50  20 52 37 2c 23 31 3c 3c  |%.7<.CMP R7,#1<<|
00007db0  31 38 0d 37 46 15 4d 4f  56 47 45 20 52 36 2c 52  |18.7F.MOVGE R6,R|
00007dc0  36 2c 41 53 52 23 38 0d  37 50 15 4d 4f 56 47 45  |6,ASR#8.7P.MOVGE|
00007dd0  20 52 37 2c 52 37 2c 41  53 52 23 38 0d 37 5a 15  | R7,R7,ASR#8.7Z.|
00007de0  4d 4f 56 47 45 20 52 38  2c 52 38 2c 41 53 52 23  |MOVGE R8,R8,ASR#|
00007df0  38 0d 37 64 11 43 4d 50  20 52 37 2c 23 31 3c 3c  |8.7d.CMP R7,#1<<|
00007e00  31 34 0d 37 6e 15 4d 4f  56 47 45 20 52 36 2c 52  |14.7n.MOVGE R6,R|
00007e10  36 2c 41 53 52 23 34 0d  37 78 15 4d 4f 56 47 45  |6,ASR#4.7x.MOVGE|
00007e20  20 52 37 2c 52 37 2c 41  53 52 23 34 0d 37 82 15  | R7,R7,ASR#4.7..|
00007e30  4d 4f 56 47 45 20 52 38  2c 52 38 2c 41 53 52 23  |MOVGE R8,R8,ASR#|
00007e40  34 0d 37 8c 11 43 4d 50  20 52 37 2c 23 31 3c 3c  |4.7..CMP R7,#1<<|
00007e50  31 32 0d 37 96 15 4d 4f  56 47 45 20 52 36 2c 52  |12.7..MOVGE R6,R|
00007e60  36 2c 41 53 52 23 32 0d  37 a0 15 4d 4f 56 47 45  |6,ASR#2.7..MOVGE|
00007e70  20 52 37 2c 52 37 2c 41  53 52 23 32 0d 37 aa 15  | R7,R7,ASR#2.7..|
00007e80  4d 4f 56 47 45 20 52 38  2c 52 38 2c 41 53 52 23  |MOVGE R8,R8,ASR#|
00007e90  32 0d 37 b4 11 4d 4f 56  20 52 30 2c 23 31 3c 3c  |2.7..MOV R0,#1<<|
00007ea0  32 32 0d 37 be 0d 4d 4f  56 20 52 39 2c 23 30 0d  |22.7..MOV R9,#0.|
00007eb0  37 c8 19 5d 3a e3 55 25  3d 32 32 b8 31 88 2d 31  |7..]:.U%=22.1.-1|
00007ec0  3a 5b 4f 50 54 20 54 25  0d 37 d2 14 43 4d 50 20  |:[OPT T%.7..CMP |
00007ed0  52 37 2c 52 30 2c 41 53  52 23 55 25 0d 37 dc 19  |R7,R0,ASR#U%.7..|
00007ee0  53 55 42 4c 45 20 52 30  2c 52 30 2c 52 37 2c 41  |SUBLE R0,R0,R7,A|
00007ef0  53 4c 23 55 25 0d 37 e6  16 41 44 44 4c 45 20 52  |SL#U%.7..ADDLE R|
00007f00  39 2c 52 39 2c 23 31 3c  3c 55 25 0d 37 f0 0f 5d  |9,R9,#1<<U%.7..]|
00007f10  3a ed 3a 5b 4f 50 54 20  54 25 0d 37 fa 0d 43 4d  |:.:[OPT T%.7..CM|
00007f20  50 20 52 37 2c 52 30 0d  38 04 12 41 44 44 4c 45  |P R7,R0.8..ADDLE|
00007f30  20 52 39 2c 52 39 2c 23  31 0d 38 0e 10 4d 55 4c  | R9,R9,#1.8..MUL|
00007f40  20 52 30 2c 52 36 2c 52  39 0d 38 18 10 4d 55 4c  | R0,R6,R9.8..MUL|
00007f50  20 52 31 2c 52 38 2c 52  39 0d 38 22 1f 4d 4f 56  | R1,R8,R9.8".MOV|
00007f60  20 52 30 2c 52 30 2c 41  53 52 23 32 32 2d 28 53  | R0,R0,ASR#22-(S|
00007f70  43 57 25 2b 44 43 25 29  0d 38 2c 1f 4d 4f 56 20  |CW%+DC%).8,.MOV |
00007f80  52 31 2c 52 31 2c 41 53  52 23 32 32 2d 28 53 43  |R1,R1,ASR#22-(SC|
00007f90  48 25 2b 44 43 25 29 0d  38 36 1e 41 44 44 20 52  |H%+DC%).86.ADD R|
00007fa0  30 2c 52 30 2c 23 73 63  77 69 64 74 68 25 3c 3c  |0,R0,#scwidth%<<|
00007fb0  44 43 25 2d 31 0d 38 40  1f 41 44 44 20 52 31 2c  |DC%-1.8@.ADD R1,|
00007fc0  52 31 2c 23 73 63 68 65  69 67 68 74 25 3c 3c 44  |R1,#scheight%<<D|
00007fd0  43 25 2d 31 0d 38 4a 0e  2e 64 73 62 65 68 69 6e  |C%-1.8J..dsbehin|
00007fe0  64 25 0d 38 54 16 53 54  4d 49 41 20 52 31 31 21  |d%.8T.STMIA R11!|
00007ff0  2c 7b 52 30 2d 52 31 7d  0d 38 5e 13 53 55 42 53  |,{R0-R1}.8^.SUBS|
00008000  20 52 31 30 2c 52 31 30  2c 23 31 0d 38 68 0e 42  | R10,R10,#1.8h.B|
00008010  47 54 20 70 6c 6f 6f 70  25 0d 38 72 18 3b 20 50  |GT ploop%.8r.; P|
00008020  6c 6f 74 20 74 68 65 20  74 72 69 61 6e 67 6c 65  |lot the triangle|
00008030  73 0d 38 7c 14 4c 44 52  20 52 31 30 2c 5b 52 31  |s.8|.LDR R10,[R1|
00008040  32 5d 2c 23 34 0d 38 86  0b 2e 74 6c 6f 6f 70 25  |2],#4.8...tloop%|
00008050  0d 38 90 23 4c 44 4d 49  41 20 52 31 32 21 2c 7b  |.8.#LDMIA R12!,{|
00008060  52 30 2c 52 32 2c 52 34  2c 52 36 2d 52 38 2c 52  |R0,R2,R4,R6-R8,R|
00008070  31 31 7d 0d 38 9a 15 41  44 52 20 52 31 2c 6d 61  |11}.8..ADR R1,ma|
00008080  74 72 69 78 25 2b 34 38  0d 38 a4 17 4c 44 4d 49  |trix%+48.8..LDMI|
00008090  41 20 52 31 2c 7b 52 31  2c 52 33 2c 52 35 7d 0d  |A R1,{R1,R3,R5}.|
000080a0  38 ae 10 4d 55 4c 20 52  31 2c 52 36 2c 52 31 0d  |8..MUL R1,R6,R1.|
000080b0  38 b8 13 4d 4c 41 20 52  31 2c 52 37 2c 52 33 2c  |8..MLA R1,R7,R3,|
000080c0  52 31 0d 38 c2 13 4d 4c  41 20 52 31 2c 52 38 2c  |R1.8..MLA R1,R8,|
000080d0  52 35 2c 52 31 0d 38 cc  1b 4d 4f 56 20 52 31 2c  |R5,R1.8..MOV R1,|
000080e0  52 31 2c 41 53 52 23 56  43 25 2b 56 43 25 2d 36  |R1,ASR#VC%+VC%-6|
000080f0  0d 38 d6 0d 43 4d 50 20  52 31 2c 23 30 0d 38 e0  |.8..CMP R1,#0.8.|
00008100  0f 4d 4f 56 4c 54 20 52  31 2c 23 30 0d 38 ea 0e  |.MOVLT R1,#0.8..|
00008110  43 4d 50 20 52 31 2c 23  36 33 0d 38 f4 10 4d 4f  |CMP R1,#63.8..MO|
00008120  56 47 54 20 52 31 2c 23  36 33 0d 38 fe 18 41 44  |VGT R1,#63.8..AD|
00008130  44 20 52 31 31 2c 52 31  2c 52 31 31 2c 41 53 4c  |D R11,R1,R11,ASL|
00008140  23 35 0d 39 08 19 4f 50  54 20 a4 61 64 72 28 35  |#5.9..OPT .adr(5|
00008150  2c 70 6f 69 6e 74 73 25  2c 32 29 0d 39 12 16 41  |,points%,2).9..A|
00008160  44 44 20 52 30 2c 52 35  2c 52 30 2c 41 53 4c 23  |DD R0,R5,R0,ASL#|
00008170  33 0d 39 1c 14 4c 44 4d  49 41 20 52 30 2c 7b 52  |3.9..LDMIA R0,{R|
00008180  30 2d 52 31 7d 0d 39 26  16 41 44 44 20 52 32 2c  |0-R1}.9&.ADD R2,|
00008190  52 35 2c 52 32 2c 41 53  4c 23 33 0d 39 30 14 4c  |R5,R2,ASL#3.90.L|
000081a0  44 4d 49 41 20 52 32 2c  7b 52 32 2d 52 33 7d 0d  |DMIA R2,{R2-R3}.|
000081b0  39 3a 16 41 44 44 20 52  34 2c 52 35 2c 52 34 2c  |9:.ADD R4,R5,R4,|
000081c0  41 53 4c 23 33 0d 39 44  14 4c 44 4d 49 41 20 52  |ASL#3.9D.LDMIA R|
000081d0  34 2c 7b 52 34 2d 52 35  7d 0d 39 4e 11 43 4d 50  |4,{R4-R5}.9N.CMP|
000081e0  20 52 30 2c 23 31 3c 3c  33 31 0d 39 58 13 43 4d  | R0,#1<<31.9X.CM|
000081f0  50 4e 45 20 52 32 2c 23  31 3c 3c 33 31 0d 39 62  |PNE R2,#1<<31.9b|
00008200  13 43 4d 50 4e 45 20 52  34 2c 23 31 3c 3c 33 31  |.CMPNE R4,#1<<31|
00008210  0d 39 6c 13 42 45 51 20  64 73 64 6f 6e 74 70 6c  |.9l.BEQ dsdontpl|
00008220  6f 74 25 0d 39 76 10 53  55 42 20 52 36 2c 52 32  |ot%.9v.SUB R6,R2|
00008230  2c 52 30 0d 39 80 10 53  55 42 20 52 37 2c 52 35  |,R0.9..SUB R7,R5|
00008240  2c 52 31 0d 39 8a 17 4d  4f 56 20 52 36 2c 52 36  |,R1.9..MOV R6,R6|
00008250  2c 41 53 52 23 44 43 25  2d 34 0d 39 94 17 4d 4f  |,ASR#DC%-4.9..MO|
00008260  56 20 52 37 2c 52 37 2c  41 53 52 23 44 43 25 2d  |V R7,R7,ASR#DC%-|
00008270  34 0d 39 9e 10 4d 55 4c  20 52 38 2c 52 36 2c 52  |4.9..MUL R8,R6,R|
00008280  37 0d 39 a8 10 53 55 42  20 52 36 2c 52 34 2c 52  |7.9..SUB R6,R4,R|
00008290  30 0d 39 b2 10 52 53 42  20 52 37 2c 52 33 2c 52  |0.9..RSB R7,R3,R|
000082a0  31 0d 39 bc 17 4d 4f 56  20 52 36 2c 52 36 2c 41  |1.9..MOV R6,R6,A|
000082b0  53 52 23 44 43 25 2d 34  0d 39 c6 17 4d 4f 56 20  |SR#DC%-4.9..MOV |
000082c0  52 37 2c 52 37 2c 41 53  52 23 44 43 25 2d 34 0d  |R7,R7,ASR#DC%-4.|
000082d0  39 d0 13 4d 4c 41 20 52  38 2c 52 36 2c 52 37 2c  |9..MLA R8,R6,R7,|
000082e0  52 38 0d 39 da 0d 43 4d  50 20 52 38 2c 23 30 0d  |R8.9..CMP R8,#0.|
000082f0  39 e4 11 42 4c 4c 54 20  70 6c 6f 74 74 72 69 25  |9..BLLT plottri%|
00008300  0d 39 ee 10 2e 64 73 64  6f 6e 74 70 6c 6f 74 25  |.9...dsdontplot%|
00008310  0d 39 f8 13 53 55 42 53  20 52 31 30 2c 52 31 30  |.9..SUBS R10,R10|
00008320  2c 23 31 0d 3a 02 0e 42  47 54 20 74 6c 6f 6f 70  |,#1.:..BGT tloop|
00008330  25 0d 3a 0c 13 4c 44 4d  46 44 20 52 31 33 21 2c  |%.:..LDMFD R13!,|
00008340  7b 50 43 7d 0d 3a 16 05  3a 0d 3a 20 2a 3b 20 43  |{PC}.:..:.: *; C|
00008350  61 6c 63 75 6c 61 74 65  73 20 61 70 70 61 72 65  |alculates appare|
00008360  6e 74 20 70 6f 73 20 6f  66 20 61 6e 20 6f 62 6a  |nt pos of an obj|
00008370  65 63 74 0d 3a 2a 19 3b  20 57 6f 72 6c 64 20 70  |ect.:*.; World p|
00008380  6f 73 20 69 73 20 69 6e  20 52 31 32 0d 3a 34 05  |os is in R12.:4.|
00008390  3a 0d 3a 3e 10 2e 6d 61  6b 65 6d 61 74 72 69 78  |:.:>..makematrix|
000083a0  25 0d 3a 48 14 53 54 4d  46 44 20 52 31 33 21 2c  |%.:H.STMFD R13!,|
000083b0  7b 52 31 34 7d 0d 3a 52  1a 4f 50 54 20 a4 61 64  |{R14}.:R.OPT .ad|
000083c0  72 28 31 30 2c 6d 61 74  72 69 78 25 2c 32 29 0d  |r(10,matrix%,2).|
000083d0  3a 5c 1b 4f 50 54 20 a4  61 64 72 28 31 31 2c 76  |:\.OPT .adr(11,v|
000083e0  69 65 77 25 2b 31 32 2c  32 29 0d 3a 66 3b 4c 44  |iew%+12,2).:f;LD|
000083f0  4d 49 41 20 52 31 31 2c  7b 52 30 2d 52 31 2c 52  |MIA R11,{R0-R1,R|
00008400  32 2c 52 33 7d 3a 3b 20  56 69 65 77 65 72 27 73  |2,R3}:; Viewer's|
00008410  20 68 65 61 64 69 6e 67  2c 20 70 69 74 63 68 2c  | heading, pitch,|
00008420  20 72 6f 6c 6c 0d 3a 70  21 4c 44 4d 49 41 20 52  | roll.:p!LDMIA R|
00008430  31 32 21 2c 7b 52 37 2d  52 39 7d 3a 3b 20 45 20  |12!,{R7-R9}:; E |
00008440  76 65 63 74 6f 72 0d 3a  7a 10 53 55 42 20 52 36  |vector.:z.SUB R6|
00008450  2c 52 39 2c 52 38 0d 3a  84 10 53 55 42 20 52 36  |,R9,R8.:..SUB R6|
00008460  2c 52 36 2c 52 37 0d 3a  8e 1f 53 54 52 20 52 36  |,R6,R7.:..STR R6|
00008470  2c 6d 61 74 72 69 78 25  2b 34 38 3a 3b 20 4c 69  |,matrix%+48:; Li|
00008480  67 68 74 20 45 0d 3a 98  10 4d 55 4c 20 52 34 2c  |ght E.:..MUL R4,|
00008490  52 31 2c 52 37 0d 3a a2  10 4d 55 4c 20 52 36 2c  |R1,R7.:..MUL R6,|
000084a0  52 30 2c 52 38 0d 3a ac  10 53 55 42 20 52 34 2c  |R0,R8.:..SUB R4,|
000084b0  52 34 2c 52 36 0d 3a b6  10 4d 55 4c 20 52 35 2c  |R4,R6.:..MUL R5,|
000084c0  52 30 2c 52 37 0d 3a c0  13 4d 4c 41 20 52 35 2c  |R0,R7.:..MLA R5,|
000084d0  52 31 2c 52 38 2c 52 35  0d 3a ca 15 4d 4f 56 20  |R1,R8,R5.:..MOV |
000084e0  52 34 2c 52 34 2c 41 53  52 23 56 43 25 0d 3a d4  |R4,R4,ASR#VC%.:.|
000084f0  15 4d 4f 56 20 52 35 2c  52 35 2c 41 53 52 23 56  |.MOV R5,R5,ASR#V|
00008500  43 25 0d 3a de 10 4d 55  4c 20 52 36 2c 52 35 2c  |C%.:..MUL R6,R5,|
00008510  52 32 0d 3a e8 13 4d 4c  41 20 52 36 2c 52 34 2c  |R2.:..MLA R6,R4,|
00008520  52 33 2c 52 36 0d 3a f2  18 53 55 42 20 52 36 2c  |R3,R6.:..SUB R6,|
00008530  52 39 2c 52 36 2c 41 53  52 23 56 43 25 0d 3a fc  |R9,R6,ASR#VC%.:.|
00008540  16 53 54 4d 49 41 20 52  31 30 21 2c 7b 52 34 2d  |.STMIA R10!,{R4-|
00008550  52 36 7d 0d 3b 06 21 4c  44 4d 49 41 20 52 31 32  |R6}.;.!LDMIA R12|
00008560  21 2c 7b 52 37 2d 52 39  7d 3a 3b 20 4e 20 76 65  |!,{R7-R9}:; N ve|
00008570  63 74 6f 72 0d 3b 10 10  53 55 42 20 52 36 2c 52  |ctor.;..SUB R6,R|
00008580  39 2c 52 38 0d 3b 1a 10  53 55 42 20 52 36 2c 52  |9,R8.;..SUB R6,R|
00008590  36 2c 52 37 0d 3b 24 1f  53 54 52 20 52 36 2c 6d  |6,R7.;$.STR R6,m|
000085a0  61 74 72 69 78 25 2b 35  32 3a 3b 20 4c 69 67 68  |atrix%+52:; Ligh|
000085b0  74 20 4e 0d 3b 2e 10 4d  55 4c 20 52 34 2c 52 31  |t N.;..MUL R4,R1|
000085c0  2c 52 37 0d 3b 38 10 4d  55 4c 20 52 36 2c 52 30  |,R7.;8.MUL R6,R0|
000085d0  2c 52 38 0d 3b 42 10 53  55 42 20 52 34 2c 52 34  |,R8.;B.SUB R4,R4|
000085e0  2c 52 36 0d 3b 4c 10 4d  55 4c 20 52 35 2c 52 30  |,R6.;L.MUL R5,R0|
000085f0  2c 52 37 0d 3b 56 13 4d  4c 41 20 52 35 2c 52 31  |,R7.;V.MLA R5,R1|
00008600  2c 52 38 2c 52 35 0d 3b  60 15 4d 4f 56 20 52 34  |,R8,R5.;`.MOV R4|
00008610  2c 52 34 2c 41 53 52 23  56 43 25 0d 3b 6a 15 4d  |,R4,ASR#VC%.;j.M|
00008620  4f 56 20 52 35 2c 52 35  2c 41 53 52 23 56 43 25  |OV R5,R5,ASR#VC%|
00008630  0d 3b 74 10 4d 55 4c 20  52 36 2c 52 35 2c 52 32  |.;t.MUL R6,R5,R2|
00008640  0d 3b 7e 13 4d 4c 41 20  52 36 2c 52 34 2c 52 33  |.;~.MLA R6,R4,R3|
00008650  2c 52 36 0d 3b 88 18 53  55 42 20 52 36 2c 52 39  |,R6.;..SUB R6,R9|
00008660  2c 52 36 2c 41 53 52 23  56 43 25 0d 3b 92 16 53  |,R6,ASR#VC%.;..S|
00008670  54 4d 49 41 20 52 31 30  21 2c 7b 52 34 2d 52 36  |TMIA R10!,{R4-R6|
00008680  7d 0d 3b 9c 21 4c 44 4d  49 41 20 52 31 32 21 2c  |}.;.!LDMIA R12!,|
00008690  7b 52 37 2d 52 39 7d 3a  3b 20 55 20 76 65 63 74  |{R7-R9}:; U vect|
000086a0  6f 72 0d 3b a6 10 53 55  42 20 52 36 2c 52 39 2c  |or.;..SUB R6,R9,|
000086b0  52 38 0d 3b b0 10 53 55  42 20 52 36 2c 52 36 2c  |R8.;..SUB R6,R6,|
000086c0  52 37 0d 3b ba 1f 53 54  52 20 52 36 2c 6d 61 74  |R7.;..STR R6,mat|
000086d0  72 69 78 25 2b 35 36 3a  3b 20 4c 69 67 68 74 20  |rix%+56:; Light |
000086e0  55 0d 3b c4 10 4d 55 4c  20 52 34 2c 52 31 2c 52  |U.;..MUL R4,R1,R|
000086f0  37 0d 3b ce 10 4d 55 4c  20 52 36 2c 52 30 2c 52  |7.;..MUL R6,R0,R|
00008700  38 0d 3b d8 10 53 55 42  20 52 34 2c 52 34 2c 52  |8.;..SUB R4,R4,R|
00008710  36 0d 3b e2 10 4d 55 4c  20 52 35 2c 52 30 2c 52  |6.;..MUL R5,R0,R|
00008720  37 0d 3b ec 13 4d 4c 41  20 52 35 2c 52 31 2c 52  |7.;..MLA R5,R1,R|
00008730  38 2c 52 35 0d 3b f6 15  4d 4f 56 20 52 34 2c 52  |8,R5.;..MOV R4,R|
00008740  34 2c 41 53 52 23 56 43  25 0d 3c 00 15 4d 4f 56  |4,ASR#VC%.<..MOV|
00008750  20 52 35 2c 52 35 2c 41  53 52 23 56 43 25 0d 3c  | R5,R5,ASR#VC%.<|
00008760  0a 10 4d 55 4c 20 52 36  2c 52 35 2c 52 32 0d 3c  |..MUL R6,R5,R2.<|
00008770  14 13 4d 4c 41 20 52 36  2c 52 34 2c 52 33 2c 52  |..MLA R6,R4,R3,R|
00008780  36 0d 3c 1e 18 53 55 42  20 52 36 2c 52 39 2c 52  |6.<..SUB R6,R9,R|
00008790  36 2c 41 53 52 23 56 43  25 0d 3c 28 16 53 54 4d  |6,ASR#VC%.<(.STM|
000087a0  49 41 20 52 31 30 21 2c  7b 52 34 2d 52 36 7d 0d  |IA R10!,{R4-R6}.|
000087b0  3c 32 21 4c 44 4d 49 41  20 52 31 32 21 2c 7b 52  |<2!LDMIA R12!,{R|
000087c0  37 2d 52 39 7d 3a 3b 20  50 6f 73 69 74 69 6f 6e  |7-R9}:; Position|
000087d0  0d 3c 3c 29 4c 44 4d 44  42 20 52 31 31 2c 7b 52  |.<<)LDMDB R11,{R|
000087e0  34 2d 52 36 7d 3a 3b 20  56 69 65 77 65 72 27 73  |4-R6}:; Viewer's|
000087f0  20 70 6f 73 69 74 69 6f  6e 0d 3c 46 10 53 55 42  | position.<F.SUB|
00008800  20 52 37 2c 52 37 2c 52  34 0d 3c 50 10 53 55 42  | R7,R7,R4.<P.SUB|
00008810  20 52 38 2c 52 38 2c 52  35 0d 3c 5a 10 53 55 42  | R8,R8,R5.<Z.SUB|
00008820  20 52 39 2c 52 39 2c 52  36 0d 3c 64 17 4d 4f 56  | R9,R9,R6.<d.MOV|
00008830  20 52 37 2c 52 37 2c 41  53 52 23 41 43 25 2d 39  | R7,R7,ASR#AC%-9|
00008840  0d 3c 6e 17 4d 4f 56 20  52 38 2c 52 38 2c 41 53  |.<n.MOV R8,R8,AS|
00008850  52 23 41 43 25 2d 39 0d  3c 78 10 4d 55 4c 20 52  |R#AC%-9.<x.MUL R|
00008860  34 2c 52 31 2c 52 37 0d  3c 82 10 4d 55 4c 20 52  |4,R1,R7.<..MUL R|
00008870  36 2c 52 30 2c 52 38 0d  3c 8c 10 53 55 42 20 52  |6,R0,R8.<..SUB R|
00008880  34 2c 52 34 2c 52 36 0d  3c 96 10 4d 55 4c 20 52  |4,R4,R6.<..MUL R|
00008890  35 2c 52 30 2c 52 37 0d  3c a0 13 4d 4c 41 20 52  |5,R0,R7.<..MLA R|
000088a0  35 2c 52 31 2c 52 38 2c  52 35 0d 3c aa 15 4d 4f  |5,R1,R8,R5.<..MO|
000088b0  56 20 52 37 2c 52 34 2c  41 53 52 23 56 43 25 0d  |V R7,R4,ASR#VC%.|
000088c0  3c b4 15 4d 4f 56 20 52  38 2c 52 35 2c 41 53 52  |<..MOV R8,R5,ASR|
000088d0  23 56 43 25 0d 3c be 1d  4d 4f 56 20 52 34 2c 52  |#VC%.<..MOV R4,R|
000088e0  34 2c 41 53 52 23 28 56  43 25 2b 39 29 2d 41 43  |4,ASR#(VC%+9)-AC|
000088f0  25 0d 3c c8 1d 4d 4f 56  20 52 35 2c 52 35 2c 41  |%.<..MOV R5,R5,A|
00008900  53 52 23 28 56 43 25 2b  39 29 2d 41 43 25 0d 3c  |SR#(VC%+9)-AC%.<|
00008910  d2 10 4d 55 4c 20 52 36  2c 52 38 2c 52 32 0d 3c  |..MUL R6,R8,R2.<|
00008920  dc 13 4d 4c 41 20 52 36  2c 52 37 2c 52 33 2c 52  |..MLA R6,R7,R3,R|
00008930  36 0d 3c e6 20 53 55 42  20 52 36 2c 52 39 2c 52  |6.<. SUB R6,R9,R|
00008940  36 2c 41 53 52 23 28 56  43 25 2b 39 29 2d 41 43  |6,ASR#(VC%+9)-AC|
00008950  25 0d 3c f0 16 53 54 4d  49 41 20 52 31 30 21 2c  |%.<..STMIA R10!,|
00008960  7b 52 34 2d 52 36 7d 0d  3c fa 13 4c 44 4d 46 44  |{R4-R6}.<..LDMFD|
00008970  20 52 31 33 21 2c 7b 50  43 7d 0d 3d 04 05 3a 0d  | R13!,{PC}.=..:.|
00008980  3d 0e 35 5d 3a e7 50 25  3e 63 6f 64 65 25 2b 63  |=.5]:.P%>code%+c|
00008990  6f 64 65 6c 65 6e 25 8c  85 32 35 35 2c 22 43 6f  |odelen%..255,"Co|
000089a0  64 65 20 69 73 6e 27 74  20 62 69 67 20 65 6e 6f  |de isn't big eno|
000089b0  75 67 68 22 0d 3d 18 05  ed 0d 3d 22 2d c8 99 22  |ugh".=....="-.."|
000089c0  4f 53 5f 52 65 61 64 56  64 75 56 61 72 69 61 62  |OS_ReadVduVariab|
000089d0  6c 65 73 22 2c 76 64 75  76 61 72 73 25 2c 73 63  |les",vduvars%,sc|
000089e0  72 61 64 64 72 25 0d 3d  2c 05 e1 0d ff           |raddr%.=,....|
000089ed