Home » Archimedes archive » Acorn User » AU 1995-02.adf » !Dark_DarkHorse » !DarkHorse/WorkHorses/Puzzle

!DarkHorse/WorkHorses/Puzzle

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-02.adf » !Dark_DarkHorse
Filename: !DarkHorse/WorkHorses/Puzzle
Read OK:
File size: 3354 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM > <Dark$Dir>.WorkHorses.Puzzle
   20
   30ON ERROR PRINT ERL,REPORT$:END
   40
   50DIM code% 4096
   60
   70PROCAssemble
   80PROCSetV
   90PROCDo
  100END
  110
  120DEFPROCSetV
  130!(code%+0)=3+255   : REM saver takes 2 args.
  140!(code%+4)=128 : REM arg1 - size of slide square
  150!(code%+8)=4   : REM arg2 - speed of square slide
  160!(code%+12)=1  : REM arg3 - plinth on.
  170
  180$(code%+36)="<square size (minimum=16)>"
  190$(code%+68)="<speed factor> <plinth (0=off)>"
  200
  210ENDPROC
  220
  230DEFPROCDo
  240A%=1280:B%=1024:C%=256
  250REMPRINT USR (code%+100)
  260CALL code%+100
  270A%=RND(1280):B%=RND(1024)
  280CALL code%+108
  290GOTO 270
  300ENDPROC
  310
  320DEFPROCAssemble
  330
  340CX = 11
  350CY = 12
  360ST = 7
  370BW = 8
  380X = 6
  390Y = 6
  400
  410FOR pass=0 TO 3 STEP 3
  420P%=code%
  430[OPT pass
  440
  450.argtype
  460EQUD 0 ;
  470
  480.args
  490EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0
  500
  510.help
  520EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0
  530EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0
  540
  550
  560B init     ; Jumps to the initialisation routine.
  570           ; this is location code+100
  580
  590B shutdown ; Jumps to the shutdown routine.
  600           ; this is location code+104
  610
  620
  630
  640.poll_ret
  650
  660FNadr(0,regs)
  670STMIA r0!,{r1-r14}
  680
  690AND r0,r1,#(%11) ; make r0 a value (0-3)
  700
  710FNadr(10,vars)
  720
  730CMPS r0,#0
  740BNE cmp2
  750LDR r11,[r10,#8]  ; load current Y pos
  760LDR r12,[r10,#16] ; load number of blocks in Y
  770CMPS r11,r12
  780MOVEQ r0,#2
  790BEQ cmpexit
  800
  810.cmp2
  820CMPS r0,#2
  830BNE cmp1
  840LDR r11,[r10,#8]  ; load current Y pos
  850CMPS r11,#0
  860MOVEQ r0,#0
  870BEQ cmpexit
  880
  890.cmp1
  900CMPS r0,#1
  910BNE cmp3
  920LDR r11,[r10,#4]  ; load current X pos
  930LDR r12,[r10,#12] ; load number of blocks in X
  940CMPS r11,r12
  950MOVEQ r0,#3
  960BEQ cmpexit
  970
  980.cmp3
  990CMPS r0,#3
 1000BNE cmpexit
 1010LDR r11,[r10,#4]  ; load current X pos
 1020CMPS r11,#0
 1030MOVEQ r0,#1
 1040
 1050.cmpexit
 1060
 1070MOV r9,r0          ; r9 = value of random direction
 1080LDR r8,[r10]       ; r8 = block width   bw
 1090LDR r7,[r10,#24]   ; r7 = step
 1100LDR r11,[r10,#4]   ; r11 = current Xpos CX
 1110LDR r12,[r10,#8]   ; r12 = current Ypos CY
 1120
 1130; set gcol to black
 1140
 1150SWI 256+18
 1160MOV r0,#0
 1170SWI "OS_WriteC"
 1180LDR r0,[r10,#20] ; get number of colours.
 1190CMP r0,#254
 1200MOVLT r0,#7
 1210MOVGE r0,#0
 1220SWI "OS_WriteC"
 1230
 1240CMP r9,#0
 1250BNE do2
 1260
 1270; r=0 --------------
 1280
 1290MOV Y,#0
 1300
 1310.loop_0
 1320
 1330FNadr(0,scanregs):STMIA r0!,{r1-r14}:BL Scan
 1340CMPS r10,#1:BEQ out:FNadr(0,scanregs):LDMIA r0!,{r1-r14}
 1350
 1360MOV r0,#188:MUL r1,CX,BW
 1370MUL r2,CY,BW:ADD r2,r2,BW:SUB r2,r2,Y
 1380SWI "OS_Plot"
 1390
 1400MOV r0,#188:MUL r1,CX,BW:ADD r1,r1,BW
 1410MUL r2,CY,BW:ADD r2,r2,BW,LSL#1:SUB r2,r2,Y
 1420SWI "OS_Plot"
 1430
 1440MOV r0,#190:MUL r1,CX,BW:MUL r2,CY,BW:ADD r2,r2,BW
 1450SUB r2,r2,Y:SUB r2,r2,ST
 1460SWI "OS_Plot"
 1470
 1480MOV r0,#4:MUL r1,CX,BW
 1490MUL r2,CY,BW:ADD r2,r2,BW,LSL#1:SUB r2,r2,ST
 1500SUB r2,r2,Y:SWI "OS_Plot"
 1510MOV r0,#97:MOV r1,BW:MOV r2,ST:SWI "OS_Plot"
 1520
 1530ADD Y,Y,ST
 1540SUB r0,BW,#1
 1550CMP Y,r0
 1560BLE loop_0
 1570
 1580ADD CY,CY,#1
 1590STR CY,[r10,#8]
 1600
 1610; r=2 --------------
 1620
 1630.do2
 1640
 1650CMP r9,#2
 1660BNE do1
 1670
 1680MOV Y,#0
 1690
 1700.loop_2
 1710
 1720FNadr(0,scanregs):STMIA r0!,{r1-r14}:BL Scan
 1730CMPS r10,#1:BEQ out:FNadr(0,scanregs):LDMIA r0!,{r1-r14}
 1740
 1750MOV r0,#188:MUL r1,CX,BW
 1760MUL r2,CY,BW:SUB r2,r2,BW:ADD r2,r2,Y
 1770SWI "OS_Plot"
 1780
 1790MOV r0,#188:MUL r1,CX,BW:ADD r1,r1,BW
 1800MUL r2,CY,BW:ADD r2,r2,Y
 1810SWI "OS_Plot"
 1820
 1830MOV r0,#190:MUL r1,CX,BW:MUL r2,CY,BW:SUB r2,r2,BW
 1840ADD r2,r2,Y:ADD r2,r2,ST
 1850SWI "OS_Plot"
 1860
 1870MOV r0,#4:MUL r1,CX,BW
 1880MUL r2,CY,BW:SUB r2,r2,BW
 1890ADD r2,r2,Y:SWI "OS_Plot"
 1900MOV r0,#97:MOV r1,BW:MOV r2,ST:SWI "OS_Plot"
 1910
 1920ADD Y,Y,ST
 1930SUB r0,BW,#1
 1940CMP Y,r0
 1950BLE loop_2
 1960
 1970SUB CY,CY,#1
 1980STR CY,[r10,#8]
 1990
 2000; r=1 ------------
 2010
 2020.do1
 2030CMP r9,#1
 2040BNE do3
 2050
 2060MOV X,#0
 2070
 2080.loop_1
 2090
 2100FNadr(0,scanregs):STMIA r0!,{r1-r14}:BL Scan
 2110CMPS r10,#1:BEQ out:FNadr(0,scanregs):LDMIA r0!,{r1-r14}
 2120
 2130MOV r0,#188:MUL r1,CX,BW:ADD r1,r1,BW:SUB r1,r1,X
 2140MUL r2,CY,BW:SWI "OS_Plot"
 2150
 2160MOV r0,#188:MUL r1,CX,BW:ADD r1,r1,BW,LSL#1:SUB r1,r1,X
 2170MUL r2,CY,BW:ADD r2,r2,BW:SWI "OS_Plot"
 2180
 2190MOV r0,#190:MUL r1,CX,BW:ADD r1,r1,BW:SUB r1,r1,X
 2200SUB r1,r1,ST:MUL r2,CY,BW:SWI "OS_Plot"
 2210
 2220MOV r0,#4:MUL r1,CX,BW:ADD r1,r1,BW,LSL#1
 2230SUB r1,r1,X:SUB r1,r1,ST
 2240MUL r2,CY,BW:SWI "OS_Plot"
 2250MOV r0,#97:MOV r1,ST:MOV r2,BW:SWI "OS_Plot"
 2260
 2270ADD X,X,ST
 2280SUB r0,BW,#1
 2290CMP X,r0
 2300BLE loop_1
 2310
 2320ADD CX,CX,#1
 2330STR CX,[r10,#4]
 2340
 2350; r=3 ----------------
 2360
 2370.do3
 2380CMP r9,#3
 2390BNE out
 2400
 2410MOV X,#0
 2420
 2430.loop_3
 2440
 2450ADR r0,scanregs:STMIA r0!,{r1-r14}:BL Scan
 2460CMPS r10,#1:BEQ out:ADR r0,scanregs:LDMIA r0!,{r1-r14}
 2470
 2480MOV r0,#188:MUL r1,CX,BW:SUB r1,r1,BW:ADD r1,r1,X
 2490MUL r2,CY,BW:SWI "OS_Plot"
 2500
 2510MOV r0,#188:MUL r1,CX,BW:ADD r1,r1,X
 2520MUL r2,CY,BW:ADD r2,r2,BW:SWI "OS_Plot"
 2530
 2540MOV r0,#190:MUL r1,CX,BW:SUB r1,r1,BW:ADD r1,r1,X
 2550ADD r1,r1,ST:MUL r2,CY,BW:SWI "OS_Plot"
 2560
 2570MOV r0,#4:MUL r1,CX,BW:SUB r1,r1,BW
 2580ADD r1,r1,X:MUL r2,CY,BW:SWI "OS_Plot"
 2590MOV r0,#97:MOV r1,ST:MOV r2,BW:SWI "OS_Plot"
 2600
 2610ADD X,X,ST
 2620SUB r0,BW,#1
 2630CMP X,r0
 2640BLE loop_3
 2650
 2660SUB CX,CX,#1
 2670STR CX,[r10,#4]
 2680
 2690.out
 2700
 2710ADR r0,regs
 2720LDMIA r0!,{r1-r14}
 2730
 2740MOV PC,r14
 2750
 2760.init ; -------------------------------------------------
 2770;--------------------------------------------------------
 2780
 2790
 2800MOV r11,r0 ; r11 = screen width
 2810MOV r12,r1 ; r12 = screen height
 2820
 2830FNadr(10,args)
 2840LDR r5,[r10,#8] ; get plinth option into r5.
 2850LDR r3,[r10]    ; get block size into r3
 2860MOV r4,r12,LSR#2
 2870CMPS r3,r4
 2880MOVGT r3,r4
 2890CMPS r3,#12
 2900MOVLE r3,#128
 2910STR r3,[r10]    ; store auto value of width if too big.
 2920LDR r4,[r10,#4] ; get STEP
 2930CMP r4,#0
 2940MOVEQ r4,#1
 2950STREQ r4,[r10,#4] ; store step back.
 2960
 2970ADR r10,vars
 2980STR r3,[r10]     ; store block size in my store.
 2990STR r2,[r10,#20] ; store number of colours in my store.
 3000STR r4,[r10,#24] ; store step into my store.
 3010STR r5,[r10,#28] ; store plinth value.
 3020
 3030; on entry r1=op1 ; r2=op2 ; r0 = result of r1/r2
 3040
 3050MOV r1,r11 ; copy screen width for op1.
 3060MOV r2,r3  ; copy block width for op2.
 3070MOV r0,#0
 3080.divloop1
 3090CMP r1,#0
 3100SUBGT r1,r1,r2
 3110ADDGT r0,r0,#1
 3120BGT divloop1
 3130
 3140ADDEQ r0,r0,#1 ; if an exact fit across screen.
 3150
 3160SUB r0,r0,#2     ; r0 now equals no. of blocks in X
 3170STR r0,[r10,#12] ; store this value to my store.
 3180
 3190; on entry r1=op1 ; r2=op2 ; r0 = result of r1/r2
 3200
 3210MOV r1,r12 ; copy screen height for op1.
 3220           ; r2 is already width for op2.
 3230MOV r0,#0
 3240.divloop2
 3250CMP r1,#0
 3260SUBGT r1,r1,r2
 3270ADDGT r0,r0,#1
 3280BGT divloop2
 3290
 3300ADDEQ r0,r0,#1 ; if an exact fit across screen.
 3310
 3320SUB r0,r0,#2     ; r0 now equals no. of blocks in Y
 3330STR r0,[r10,#16] ; store this value to my store.
 3340
 3350MOV r5,r2        ; r5 equals width of block
 3360
 3370; check and set step value.
 3380
 3390MOV r1,r5        ; get block width
 3400LDR r2,[r10,#24] ; load step value
 3410
 3420CMP r2,#0
 3430MOVLE r2,#1
 3440STRLE r2,[r10,#24] ; store back.
 3450
 3460MOV r0,#0
 3470.divloop3
 3480CMP r1,#0
 3490SUBGT r1,r1,r2
 3500ADDGT r0,r0,#1
 3510BGT divloop3
 3520
 3530CMPS r1,#0
 3540STRNE r5,[r10,#24] ; if step not a factor, step = width
 3550
 3560LDR r7,[r10,#20] ; get number of colours.
 3570
 3580CMP r7,#16
 3590BLT doblack
 3600LDR r6,[r10,#28]
 3610CMP r6,#0
 3620BEQ doblack
 3630
 3640
 3650; draw the grid
 3660
 3670ADD r8,r12,r5
 3680
 3690MOV r4,#0
 3700.yagain
 3710
 3720SWI 256+18
 3730CMP r7,#16
 3740MOVEQ r0,#2
 3750MOVGT r0,#1
 3760SWI "OS_WriteC"
 3770CMP r7,#16
 3780MOVEQ r0,#2
 3790MOVGT r0,#42
 3800SWI "OS_WriteC"
 3810
 3820MOV r0,#4: MOV r1,#0:SUB r2,r4,#4:SWI "OS_Plot"
 3830MOV r0,#97: MOV r1,r11:MOV r2,#4:SWI "OS_Plot"
 3840
 3850SWI 256+18
 3860CMP r7,#16
 3870MOVEQ r0,#1
 3880MOVGT r0,#2
 3890SWI "OS_WriteC"
 3900CMP r7,#16
 3910MOVEQ r0,#2
 3920MOVGT r0,#42
 3930SWI "OS_WriteC"
 3940
 3950MOV r0,#4: MOV r1,#0:MOV r2,r4:SWI "OS_Plot"
 3960MOV r0,#97: MOV r1,r11:MOV r2,#4:SWI "OS_Plot"
 3970
 3980ADD r4,r4,r5
 3990CMP r4,r8
 4000BLT yagain
 4010
 4020MOV r4,#0
 4030ADD r8,r11,r5
 4040.xagain
 4050
 4060SWI 256+18
 4070CMP r7,#16
 4080MOVEQ r0,#1
 4090MOVGT r0,#2
 4100SWI "OS_WriteC"
 4110CMP r7,#16
 4120MOVEQ r0,#2
 4130MOVGT r0,#42
 4140SWI "OS_WriteC"
 4150
 4160MOV r0,#4: MOV r2,#0:SUB r1,r4,#4:SWI "OS_Plot"
 4170MOV r0,#97: MOV r2,r12:MOV r1,#4:SWI "OS_Plot"
 4180
 4190SWI 256+18
 4200CMP r7,#16
 4210MOVEQ r0,#2
 4220MOVGT r0,#1
 4230SWI "OS_WriteC"
 4240CMP r7,#16
 4250MOVEQ r0,#2
 4260MOVGT r0,#42
 4270SWI "OS_WriteC"
 4280
 4290MOV r0,#4: MOV r2,#0:MOV r1,r4:SWI "OS_Plot"
 4300MOV r0,#97: MOV r2,r12:MOV r1,#4:SWI "OS_Plot"
 4310
 4320ADD r4,r4,r5
 4330CMP r4,r8
 4340BLT xagain
 4350
 4360; draw black lines.
 4370
 4380.doblack
 4390
 4400SWI 256+18
 4410MOV r0,#0
 4420SWI "OS_WriteC"
 4430CMP r7,#254
 4440MOVLT r0,#7
 4450MOVGE r0,#0
 4460SWI "OS_WriteC"
 4470
 4480MOV r4,#0
 4490.y2again
 4500
 4510MOV r0,#4: MOV r1,#0: MOV r2,r4: SWI "OS_Plot"
 4520MOV r0,#5: MOV r1,r11: MOV r2,r4: SWI "OS_Plot"
 4530ADD r4,r4,r5
 4540CMP r4,r12
 4550BLT y2again
 4560
 4570MOV r4,#0
 4580.x2again
 4590
 4600MOV r0,#4: MOV r1,r4: MOV r2,#0: SWI "OS_Plot"
 4610MOV r0,#5: MOV r1,r4: MOV r2,r12: SWI "OS_Plot"
 4620ADD r4,r4,r5
 4630CMP r4,r11
 4640BLT x2again
 4650
 4660
 4670
 4680; calculate and store hole position
 4690
 4700LDR r0,[r10,#12]
 4710MOV r0,r0,LSR#1
 4720STR r0,[r10,#4]
 4730
 4740LDR r0,[r10,#16]
 4750MOV r0,r0,LSR#1
 4760STR r0,[r10,#8]
 4770
 4780; draw hole - black rectangle
 4790
 4800MOV r0,#4
 4810LDR r4,[r10,#4]
 4820MUL r1,r4,r5
 4830LDR r4,[r10,#8]
 4840MUL r2,r4,r5
 4850SWI "OS_Plot"
 4860MOV r0,#97
 4870MOV r1,r5
 4880MOV r2,r5
 4890SWI "OS_Plot"
 4900
 4910MOV PC,r14
 4920
 4930.vars
 4940EQUD 0 ; block size
 4950EQUD 0 ; Current X-pos of hole
 4960EQUD 0 ; Current Y-pos of hole
 4970EQUD 0 ; Number of full squares (X)
 4980EQUD 0 ; Number of full squares (Y)
 4990EQUD 0 ; number of colours
 5000EQUD 0 ; REAL step value
 5010EQUD 0 ; plinth ?
 5020
 5030.scanregs
 5040EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0
 5050EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0
 5060
 5070.regs
 5080EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0
 5090EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0
 5100
 5110;--------------------------------------------------------------------
 5120
 5130.Scan
 5140; on return r10 will contain 1 = exit prog. 0 = don't exit.
 5150
 5160SWI "OS_Mouse":MOV r8,r0:MOV r9,r1:MOV r11,r2
 5170MOV r10,#0:MOV r0,#121:MOV r1,#0:SWI "OS_Byte":CMPS r1,#255:MOVNE r10,#1
 5180SWI "OS_Mouse":CMPS r0,r8:MOVNE r10,#1:CMPS r1,r9:MOVNE r10,#1
 5190CMPS r2,r11::MOVNE r10,#1
 5200MOV PC,r14
 5210
 5220;--------------------------------------------------------------------
 5230
 5240;-----------------------------------------------------------------
 5250
 5260.shutdown ; the shutdown code
 5270
 5280;--------------------------------------------------------------------
 5290;           ********************************************
 5300;           ***    YOUR SHUTDOWN CODE STARTS HERE    ***
 5310;           ********************************************
 5320
 5330;            blah! blah! blah! blah! blah! blah! blah!
 5340
 5350;           ********************************************
 5360;           ***     YOUR SHUTDOWN CODE ENDS HERE     ***
 5370;           ********************************************
 5380;--------------------------------------------------------------------
 5390MOV PC,r14 ; exit shutdown code.
 5400
 5410
 5420
 5430]
 5440NEXT pass
 5450PRINT P%-code%
 5460A$=GET$
 5470ENDPROC
 5480
 5490DEF FNadr(r,l)
 5500p%=P%
 5510IF l>p% THEN
 5520[
 5530ADD r,PC,#(l-p%-8)MOD &100
 5540ADD r,r,#(l-p%-8) DIV &100<<8:]
 5550ELSE
 5560[
 5570SUB r,PC,#(p%+8-l)MOD &100
 5580SUB r,r,#(p%+8-l)DIV &100<<8:]
 5590ENDIF
 5600=""
 5610
 5620REM - BASIC VERSION WHICH WAS TRANSLATED INTO THE
 5630REM - ABOVE ASSEMBLY CODE. :-
 5640
 5650bw%=64
 5660step%=4
 5670
 5680W%=1280
 5690H%=1024
 5700
 5710NBX%=(W%/bw%)-1
 5720NBY%=(H%/bw%)-1
 5730
 5740FOR Y%=1 TO H% STEP bw%
 5750MOVE 0,Y%
 5760DRAW W%,Y%
 5770NEXT Y%
 5780FOR X%=1 TO W% STEP bw%
 5790MOVE X%,0
 5800DRAW X%,H%
 5810NEXT X%
 5820
 5830
 5840CX%=NBX%/2
 5850CY%=NBY%/2
 5860
 5870RECTANGLE FILL CX%*bw%,CY%*bw%,bw%,bw%
 5880
 5890REM -----------------------------------------------
 5900
 5910R%=RND(W%)
 5920
 5930R%=R% AND %11
 5940
 5950REM R%=0 > top.
 5960REM R%=1 > right.
 5970REM R%=2 > bottom.
 5980REM R%=3 > left.
 5990
 6000IF R%=0 AND CY%=NBY% THEN R%=2
 6010IF R%=2 AND CY%=0 THEN R%=0
 6020
 6030IF R%=1 AND CX%=NBX% THEN R%=3
 6040IF R%=3 AND CX%=0 THEN R%=1
 6050
 6060IF R%=0 THEN
 6070FOR y%=0 TO bw%-1 STEP step%
 6080SYS "OS_Plot",188,CX%*bw%,(CY%*bw%)+bw%-y%
 6090SYS "OS_Plot",188,(CX%*bw%)+bw%,(CY%*bw%)+bw%+bw%-y%
 6100SYS "OS_Plot",190,CX%*bw%,(CY%*bw%)+bw%-y%-step%
 6110RECTANGLE FILL CX%*bw%,(CY%*bw%)+bw%-y%+bw%-step%,bw%,step%
 6120NEXT y%
 6130CY%+=1
 6140ENDIF
 6150
 6160IF R%=2 THEN
 6170FOR y%=0 TO bw%-1 STEP step%
 6180SYS "OS_Plot",188,CX%*bw%,(CY%*bw%)-bw%+y%
 6190SYS "OS_Plot",188,(CX%*bw%)+bw%,(CY%*bw%)+y%
 6200SYS "OS_Plot",190,CX%*bw%,(CY%*bw%)-bw%+y%+step%
 6210RECTANGLE FILL CX%*bw%,(CY%*bw%)-bw%+y%,bw%,step%
 6220NEXT y%
 6230CY%-=1
 6240ENDIF
 6250
 6260IF R%=1 THEN
 6270FOR x%=0 TO bw%-1 STEP step%
 6280SYS "OS_Plot",188,(CX%*bw%)+bw%-x%,CY%*bw%
 6290SYS "OS_Plot",188,(CX%*bw%)+bw%+bw%-x%,(CY%*bw%)+bw%
 6300SYS "OS_Plot",190,(CX%*bw%)+bw%-x%-step%,CY%*bw%
 6310RECTANGLE FILL (CX%*bw%)+bw%+bw%-x%-step%,CY%*bw%,step%,bw%
 6320NEXT x%
 6330CX%+=1
 6340ENDIF
 6350
 6360IF R%=3 THEN
 6370FOR x%=0 TO bw%-1 STEP step%
 6380SYS "OS_Plot",188,(CX%*bw%)-bw%+x%,CY%*bw%
 6390SYS "OS_Plot",188,CX%*bw%+x%,(CY%*bw%)+bw%
 6400SYS "OS_Plot",190,(CX%*bw%)-bw%+x%+step%,CY%*bw%
 6410RECTANGLE FILL (CX%*bw%)-bw%+x%,CY%*bw%,step%,bw%
 6420NEXT x%
 6430CX%-=1
 6440ENDIF
 6450
 6460GOTO 5910
 6470END
 6480

$� > <Dark$Dir>.WorkHorses.Puzzle

� � � �,�$:�
(
2� code% 4096
<
F
�Assemble
P	�SetV
Z�Do
d�
n
x
��SetV
�.!(code%+0)=3+255   : � saver takes 2 args.
�2!(code%+4)=128 : � arg1 - size of slide square
�3!(code%+8)=4   : � arg2 - speed of square slide
�(!(code%+12)=1  : � arg3 - plinth on.
�
�,$(code%+36)="<square size (minimum=16)>"
�1$(code%+68)="<speed factor> <plinth (0=off)>"
�
��
�
���Do
�A%=1280:B%=1024:C%=256
��PRINT USR (code%+100)
� code%+100
A%=�(1280):B%=�(1024)
� code%+108
"
� �TNA
,�
6
@��Assemble
J
TCX = 11
^CY = 12
h
ST = 7
r
BW = 8
|	X = 6
�	Y = 6
�
�� pass=0 � 3 � 3
�P%=code%
�
[OPT pass
�
�.argtype
�EQUD 0 ;
�
�	.args
�;EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0
�
�	.help
;EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0
;EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0

&
05B init     ; Jumps to the initialisation routine.
:*           ; this is location code+100
D
N/B shutdown ; Jumps to the shutdown routine.
X*           ; this is location code+104
b
l
v
�
.poll_ret
�
��adr(0,regs)
�STMIA r0!,{r1-r14}
�
�*� r0,r1,#(%11) ; make r0 a value (0-3)
�
��adr(10,vars)
�
�CMPS r0,#0
�BNE cmp2
�*LDR r11,[r10,#8]  ; load current Y pos
�2LDR r12,[r10,#16] ; load number of blocks in Y
CMPS r11,r12
�Q r0,#2
BEQ cmpexit
 
*	.cmp2
4CMPS r0,#2
>BNE cmp1
H*LDR r11,[r10,#8]  ; load current Y pos
RCMPS r11,#0
\�Q r0,#0
fBEQ cmpexit
p
z	.cmp1
�CMPS r0,#1
�BNE cmp3
�*LDR r11,[r10,#4]  ; load current X pos
�2LDR r12,[r10,#12] ; load number of blocks in X
�CMPS r11,r12
��Q r0,#3
�BEQ cmpexit
�
�	.cmp3
�CMPS r0,#3
�BNE cmpexit
�*LDR r11,[r10,#4]  ; load current X pos
�CMPS r11,#0
�Q r0,#1

.cmpexit
$
.7MOV r9,r0          ; r9 = value of random direction
8.LDR r8,[r10]       ; r8 = block width   bw
B"LDR r7,[r10,#24]   ; r7 = step
L.LDR r11,[r10,#4]   ; r11 = current Xpos CX
V.LDR r12,[r10,#8]   ; r12 = current Ypos CY
`
j; set gcol to black
t
~SWI 256+18
�
MOV r0,#0
�SWI "OS_WriteC"
�-LDR r0,[r10,#20] ; get number of colours.
�CMP r0,#254
�MOVLT r0,#7
�MOVGE r0,#0
�SWI "OS_WriteC"
�
�
CMP r9,#0
�BNE do2
�
�; r=0 --------------


MOV Y,#0

.loop_0
(
2/�adr(0,scanregs):STMIA r0!,{r1-r14}:BL Scan
<;CMPS r10,#1:BEQ out:�adr(0,scanregs):LDMIA r0!,{r1-r14}
F
PMOV r0,#188:MUL r1,CX,BW
Z)MUL r2,CY,BW:ADD r2,r2,BW:SUB r2,r2,Y
dSWI "OS_Plot"
n
x)MOV r0,#188:MUL r1,CX,BW:ADD r1,r1,BW
�/MUL r2,CY,BW:ADD r2,r2,BW,LSL#1:SUB r2,r2,Y
�SWI "OS_Plot"
�
�6MOV r0,#190:MUL r1,CX,BW:MUL r2,CY,BW:ADD r2,r2,BW
�SUB r2,r2,Y:SUB r2,r2,ST
�SWI "OS_Plot"
�
�MOV r0,#4:MUL r1,CX,BW
�0MUL r2,CY,BW:ADD r2,r2,BW,LSL#1:SUB r2,r2,ST
�SUB r2,r2,Y:SWI "OS_Plot"
�0MOV r0,#97:MOV r1,BW:MOV r2,ST:SWI "OS_Plot"
�
�ADD Y,Y,ST
SUB r0,BW,#1
CMP Y,r0
BLE loop_0
"
,ADD CY,CY,#1
6STR CY,[r10,#8]
@
J; r=2 --------------
T
^.do2
h
r
CMP r9,#2
|BNE do1
�
�MOV Y,#0
�
�.loop_2
�
�/�adr(0,scanregs):STMIA r0!,{r1-r14}:BL Scan
�;CMPS r10,#1:BEQ out:�adr(0,scanregs):LDMIA r0!,{r1-r14}
�
�MOV r0,#188:MUL r1,CX,BW
�)MUL r2,CY,BW:SUB r2,r2,BW:ADD r2,r2,Y
�SWI "OS_Plot"
�
�)MOV r0,#188:MUL r1,CX,BW:ADD r1,r1,BW
MUL r2,CY,BW:ADD r2,r2,Y
SWI "OS_Plot"

&6MOV r0,#190:MUL r1,CX,BW:MUL r2,CY,BW:SUB r2,r2,BW
0ADD r2,r2,Y:ADD r2,r2,ST
:SWI "OS_Plot"
D
NMOV r0,#4:MUL r1,CX,BW
XMUL r2,CY,BW:SUB r2,r2,BW
bADD r2,r2,Y:SWI "OS_Plot"
l0MOV r0,#97:MOV r1,BW:MOV r2,ST:SWI "OS_Plot"
v
�ADD Y,Y,ST
�SUB r0,BW,#1
�CMP Y,r0
�BLE loop_2
�
�SUB CY,CY,#1
�STR CY,[r10,#8]
�
�; r=1 ------------
�
�.do1
�
CMP r9,#1
�BNE do3

MOV X,#0

 .loop_1
*
4/�adr(0,scanregs):STMIA r0!,{r1-r14}:BL Scan
>;CMPS r10,#1:BEQ out:�adr(0,scanregs):LDMIA r0!,{r1-r14}
H
R5MOV r0,#188:MUL r1,CX,BW:ADD r1,r1,BW:SUB r1,r1,X
\MUL r2,CY,BW:SWI "OS_Plot"
f
p;MOV r0,#188:MUL r1,CX,BW:ADD r1,r1,BW,LSL#1:SUB r1,r1,X
z+MUL r2,CY,BW:ADD r2,r2,BW:SWI "OS_Plot"
�
�5MOV r0,#190:MUL r1,CX,BW:ADD r1,r1,BW:SUB r1,r1,X
�+SUB r1,r1,ST:MUL r2,CY,BW:SWI "OS_Plot"
�
�-MOV r0,#4:MUL r1,CX,BW:ADD r1,r1,BW,LSL#1
�SUB r1,r1,X:SUB r1,r1,ST
�MUL r2,CY,BW:SWI "OS_Plot"
�0MOV r0,#97:MOV r1,ST:MOV r2,BW:SWI "OS_Plot"
�
�ADD X,X,ST
�SUB r0,BW,#1
�CMP X,r0
�BLE loop_1
	
	ADD CX,CX,#1
	STR CX,[r10,#4]
	$
	.; r=3 ----------------
	8
	B.do3
	L
CMP r9,#3
	VBNE out
	`
	jMOV X,#0
	t
	~.loop_3
	�
	�.ADR r0,scanregs:STMIA r0!,{r1-r14}:BL Scan
	�:CMPS r10,#1:BEQ out:ADR r0,scanregs:LDMIA r0!,{r1-r14}
	�
	�5MOV r0,#188:MUL r1,CX,BW:SUB r1,r1,BW:ADD r1,r1,X
	�MUL r2,CY,BW:SWI "OS_Plot"
	�
	�(MOV r0,#188:MUL r1,CX,BW:ADD r1,r1,X
	�+MUL r2,CY,BW:ADD r2,r2,BW:SWI "OS_Plot"
	�
	�5MOV r0,#190:MUL r1,CX,BW:SUB r1,r1,BW:ADD r1,r1,X
	�+ADD r1,r1,ST:MUL r2,CY,BW:SWI "OS_Plot"


'MOV r0,#4:MUL r1,CX,BW:SUB r1,r1,BW
*ADD r1,r1,X:MUL r2,CY,BW:SWI "OS_Plot"
0MOV r0,#97:MOV r1,ST:MOV r2,BW:SWI "OS_Plot"
(
2ADD X,X,ST
<SUB r0,BW,#1
FCMP X,r0
PBLE loop_3
Z
dSUB CX,CX,#1
nSTR CX,[r10,#4]
x
�.out
�
�ADR r0,regs
�LDMIA r0!,{r1-r14}
�
�MOV PC,r14
�
�=.init ; -------------------------------------------------
�=;--------------------------------------------------------
�
�
�#MOV r11,r0 ; r11 = screen width
�$MOV r12,r1 ; r12 = screen height

�adr(10,args)
0LDR r5,[r10,#8] ; get plinth option into r5.
",LDR r3,[r10]    ; get block size into r3
,MOV r4,r12,LSR#2
6CMPS r3,r4
@MOVGT r3,r4
JCMPS r3,#12
TMOVLE r3,#128
^;STR r3,[r10]    ; store auto value of width if too big.
hLDR r4,[r10,#4] ; get �
r
CMP r4,#0
|�Q r4,#1
�(STREQ r4,[r10,#4] ; store step back.
�
�ADR r10,vars
�4STR r3,[r10]     ; store block size in my store.
�;STR r2,[r10,#20] ; store number of colours in my store.
�0STR r4,[r10,#24] ; store step into my store.
�*STR r5,[r10,#28] ; store plinth value.
�
�5; on entry r1=op1 ; r2=op2 ; r0 = result of r1/r2
�
�+MOV r1,r11 ; copy screen width for op1.
�*MOV r2,r3  ; copy block width for op2.
�
MOV r0,#0

.divloop1

CMP r1,#0
SUBGT r1,r1,r2
&ADDGT r0,r0,#1
0BGT divloop1
:
D3ADDEQ r0,r0,#1 ; if an exact fit across screen.
N
X7SUB r0,r0,#2     ; r0 now equals no. of blocks in X
b4STR r0,[r10,#12] ; store this value to my store.
l
v5; on entry r1=op1 ; r2=op2 ; r0 = result of r1/r2
�
�,MOV r1,r12 ; copy screen height for op1.
�-           ; r2 is already width for op2.
�
MOV r0,#0
�
.divloop2
�
CMP r1,#0
�SUBGT r1,r1,r2
�ADDGT r0,r0,#1
�BGT divloop2
�
�3ADDEQ r0,r0,#1 ; if an exact fit across screen.
�
�7SUB r0,r0,#2     ; r0 now equals no. of blocks in Y

4STR r0,[r10,#16] ; store this value to my store.



/MOV r5,r2        ; r5 equals width of block

 

*; check and set step value.

4

>&MOV r1,r5        ; get block width

H&LDR r2,[r10,#24] ; load step value

R

\
CMP r2,#0

fMOVLE r2,#1

p$STRLE r2,[r10,#24] ; store back.

z

�
MOV r0,#0

�
.divloop3

�
CMP r1,#0

�SUBGT r1,r1,r2

�ADDGT r0,r0,#1

�BGT divloop3

�

�CMPS r1,#0

�;STRNE r5,[r10,#24] ; if step not a factor, step = width

�

�-LDR r7,[r10,#20] ; get number of colours.

�

�CMP r7,#16
BLT doblack
LDR r6,[r10,#28]

CMP r6,#0
$BEQ doblack
.
8
B; draw the grid
L
VADD r8,r12,r5
`
j
MOV r4,#0
t.yagain
~
�SWI 256+18
�CMP r7,#16
��Q r0,#2
�MOVGT r0,#1
�SWI "OS_WriteC"
�CMP r7,#16
��Q r0,#2
�MOVGT r0,#42
�SWI "OS_WriteC"
�
�3MOV r0,#4: MOV r1,#0:SUB r2,r4,#4:SWI "OS_Plot"
�2MOV r0,#97: MOV r1,r11:MOV r2,#4:SWI "OS_Plot"


SWI 256+18
CMP r7,#16
�Q r0,#1
(MOVGT r0,#2
2SWI "OS_WriteC"
<CMP r7,#16
F�Q r0,#2
PMOVGT r0,#42
ZSWI "OS_WriteC"
d
n0MOV r0,#4: MOV r1,#0:MOV r2,r4:SWI "OS_Plot"
x2MOV r0,#97: MOV r1,r11:MOV r2,#4:SWI "OS_Plot"
�
�ADD r4,r4,r5
�
CMP r4,r8
�BLT yagain
�
�
MOV r4,#0
�ADD r8,r11,r5
�.xagain
�
�SWI 256+18
�CMP r7,#16
��Q r0,#1
�MOVGT r0,#2
SWI "OS_WriteC"
CMP r7,#16
�Q r0,#2
"MOVGT r0,#42
,SWI "OS_WriteC"
6
@3MOV r0,#4: MOV r2,#0:SUB r1,r4,#4:SWI "OS_Plot"
J2MOV r0,#97: MOV r2,r12:MOV r1,#4:SWI "OS_Plot"
T
^SWI 256+18
hCMP r7,#16
r�Q r0,#2
|MOVGT r0,#1
�SWI "OS_WriteC"
�CMP r7,#16
��Q r0,#2
�MOVGT r0,#42
�SWI "OS_WriteC"
�
�0MOV r0,#4: MOV r2,#0:MOV r1,r4:SWI "OS_Plot"
�2MOV r0,#97: MOV r2,r12:MOV r1,#4:SWI "OS_Plot"
�
�ADD r4,r4,r5
�
CMP r4,r8
�BLT xagain
�
; draw black lines.

.doblack
&
0SWI 256+18
:
MOV r0,#0
DSWI "OS_WriteC"
NCMP r7,#254
XMOVLT r0,#7
bMOVGE r0,#0
lSWI "OS_WriteC"
v
�
MOV r4,#0
�.y2again
�
�2MOV r0,#4: MOV r1,#0: MOV r2,r4: SWI "OS_Plot"
�3MOV r0,#5: MOV r1,r11: MOV r2,r4: SWI "OS_Plot"
�ADD r4,r4,r5
�CMP r4,r12
�BLT y2again
�
�
MOV r4,#0
�.x2again
�
�2MOV r0,#4: MOV r1,r4: MOV r2,#0: SWI "OS_Plot"
3MOV r0,#5: MOV r1,r4: MOV r2,r12: SWI "OS_Plot"
ADD r4,r4,r5
CMP r4,r11
 BLT x2again
*
4
>
H'; calculate and store hole position
R
\LDR r0,[r10,#12]
fMOV r0,r0,LSR#1
pSTR r0,[r10,#4]
z
�LDR r0,[r10,#16]
�MOV r0,r0,LSR#1
�STR r0,[r10,#8]
�
�!; draw hole - black rectangle
�
�
MOV r0,#4
�LDR r4,[r10,#4]
�MUL r1,r4,r5
�LDR r4,[r10,#8]
�MUL r2,r4,r5
�SWI "OS_Plot"
�MOV r0,#97

MOV r1,r5

MOV r2,r5
SWI "OS_Plot"
$
.MOV PC,r14
8
B	.vars
LEQUD 0 ; block size
V"EQUD 0 ; Current X-pos of hole
`"EQUD 0 ; Current Y-pos of hole
j'EQUD 0 ; Number of full squares (X)
t'EQUD 0 ; Number of full squares (Y)
~EQUD 0 ; number of colours
�EQUD 0 ; REAL step value
�EQUD 0 ; plinth ?
�
�
.scanregs
�;EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0
�;EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0
�
�	.regs
�;EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0
�;EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0:EQUD 0
�
�I;--------------------------------------------------------------------


	.Scan
?; on return r10 will contain 1 = exit prog. 0 = don't exit.

(1SWI "OS_Mouse":MOV r8,r0:MOV r9,r1:MOV r11,r2
2LMOV r10,#0:MOV r0,#121:MOV r1,#0:SWI "OS_Byte":CMPS r1,#255:MOVNE r10,#1
<BSWI "OS_Mouse":CMPS r0,r8:MOVNE r10,#1:CMPS r1,r9:MOVNE r10,#1
FCMPS r2,r11::MOVNE r10,#1
PMOV PC,r14
Z
dI;--------------------------------------------------------------------
n
xF;-----------------------------------------------------------------
�
�!.shutdown ; the shutdown code
�
�I;--------------------------------------------------------------------
�<;           ********************************************
�<;           ***    YOUR SHUTDOWN CODE STARTS HERE    ***
�<;           ********************************************
�
�:;            blah! blah! blah! blah! blah! blah! blah!
�
�<;           ********************************************
�<;           ***     YOUR SHUTDOWN CODE ENDS HERE     ***
�<;           ********************************************
I;--------------------------------------------------------------------
$MOV PC,r14 ; exit shutdown code.

"
,
6]
@
� pass
J� P%-code%
TA$=�
^�
h
r� �adr(r,l)
|	p%=P%
�� l>p% �
�[
�ADD r,PC,#(l-p%-8)� &100
�!ADD r,r,#(l-p%-8) � &100<<8:]
��
�[
�SUB r,PC,#(p%+8-l)� &100
� SUB r,r,#(p%+8-l)� &100<<8:]
��
�=""
�
�3� - BASIC VERSION WHICH WAS TRANSLATED INTO THE
�� - ABOVE ASSEMBLY CODE. :-


bw%=64
step%=4
&
0W%=1280
:H%=1024
D
NNBX%=(W%/bw%)-1
XNBY%=(H%/bw%)-1
b
l� Y%=1 � H% � bw%
v
� 0,Y%
�� W%,Y%
�� Y%
�� X%=1 � W% � bw%
�
� X%,0
�� X%,H%
�� X%
�
�
�CX%=NBX%/2
�CY%=NBY%/2
�
�!ȓ Ȑ CX%*bw%,CY%*bw%,bw%,bw%
�
5� -----------------------------------------------

R%=�(W%)
 
*R%=R% � %11
4
>� R%=0 > top.
H� R%=1 > right.
R� R%=2 > bottom.
\� R%=3 > left.
f
p� R%=0 � CY%=NBY% � R%=2
z� R%=2 � CY%=0 � R%=0
�
�� R%=1 � CX%=NBX% � R%=3
�� R%=3 � CX%=0 � R%=1
�
�� R%=0 �
�� y%=0 � bw%-1 � step%
�-ș "OS_Plot",188,CX%*bw%,(CY%*bw%)+bw%-y%
�7ș "OS_Plot",188,(CX%*bw%)+bw%,(CY%*bw%)+bw%+bw%-y%
�3ș "OS_Plot",190,CX%*bw%,(CY%*bw%)+bw%-y%-step%
�6ȓ Ȑ CX%*bw%,(CY%*bw%)+bw%-y%+bw%-step%,bw%,step%
�� y%
�
CY%+=1
��

� R%=2 �
� y%=0 � bw%-1 � step%
$-ș "OS_Plot",188,CX%*bw%,(CY%*bw%)-bw%+y%
./ș "OS_Plot",188,(CX%*bw%)+bw%,(CY%*bw%)+y%
83ș "OS_Plot",190,CX%*bw%,(CY%*bw%)-bw%+y%+step%
B,ȓ Ȑ CX%*bw%,(CY%*bw%)-bw%+y%,bw%,step%
L� y%
V
CY%-=1
`�
j
t� R%=1 �
~� x%=0 � bw%-1 � step%
�-ș "OS_Plot",188,(CX%*bw%)+bw%-x%,CY%*bw%
�7ș "OS_Plot",188,(CX%*bw%)+bw%+bw%-x%,(CY%*bw%)+bw%
�3ș "OS_Plot",190,(CX%*bw%)+bw%-x%-step%,CY%*bw%
�6ȓ Ȑ (CX%*bw%)+bw%+bw%-x%-step%,CY%*bw%,step%,bw%
�� x%
�
CX%+=1
��
�
�� R%=3 �
�� x%=0 � bw%-1 � step%
�-ș "OS_Plot",188,(CX%*bw%)-bw%+x%,CY%*bw%
�-ș "OS_Plot",188,CX%*bw%+x%,(CY%*bw%)+bw%
3ș "OS_Plot",190,(CX%*bw%)-bw%+x%+step%,CY%*bw%

,ȓ Ȑ (CX%*bw%)-bw%+x%,CY%*bw%,step%,bw%
� x%

CX%-=1
(�
2
<
� �TVW
F�
P
�
00000000  0d 00 0a 24 f4 20 3e 20  3c 44 61 72 6b 24 44 69  |...$. > <Dark$Di|
00000010  72 3e 2e 57 6f 72 6b 48  6f 72 73 65 73 2e 50 75  |r>.WorkHorses.Pu|
00000020  7a 7a 6c 65 0d 00 14 04  0d 00 1e 10 ee 20 85 20  |zzle......... . |
00000030  f1 20 9e 2c f6 24 3a e0  0d 00 28 04 0d 00 32 10  |. .,.$:...(...2.|
00000040  de 20 63 6f 64 65 25 20  34 30 39 36 0d 00 3c 04  |. code% 4096..<.|
00000050  0d 00 46 0d f2 41 73 73  65 6d 62 6c 65 0d 00 50  |..F..Assemble..P|
00000060  09 f2 53 65 74 56 0d 00  5a 07 f2 44 6f 0d 00 64  |..SetV..Z..Do..d|
00000070  05 e0 0d 00 6e 04 0d 00  78 0a dd f2 53 65 74 56  |....n...x...SetV|
00000080  0d 00 82 2e 21 28 63 6f  64 65 25 2b 30 29 3d 33  |....!(code%+0)=3|
00000090  2b 32 35 35 20 20 20 3a  20 f4 20 73 61 76 65 72  |+255   : . saver|
000000a0  20 74 61 6b 65 73 20 32  20 61 72 67 73 2e 0d 00  | takes 2 args...|
000000b0  8c 32 21 28 63 6f 64 65  25 2b 34 29 3d 31 32 38  |.2!(code%+4)=128|
000000c0  20 3a 20 f4 20 61 72 67  31 20 2d 20 73 69 7a 65  | : . arg1 - size|
000000d0  20 6f 66 20 73 6c 69 64  65 20 73 71 75 61 72 65  | of slide square|
000000e0  0d 00 96 33 21 28 63 6f  64 65 25 2b 38 29 3d 34  |...3!(code%+8)=4|
000000f0  20 20 20 3a 20 f4 20 61  72 67 32 20 2d 20 73 70  |   : . arg2 - sp|
00000100  65 65 64 20 6f 66 20 73  71 75 61 72 65 20 73 6c  |eed of square sl|
00000110  69 64 65 0d 00 a0 28 21  28 63 6f 64 65 25 2b 31  |ide...(!(code%+1|
00000120  32 29 3d 31 20 20 3a 20  f4 20 61 72 67 33 20 2d  |2)=1  : . arg3 -|
00000130  20 70 6c 69 6e 74 68 20  6f 6e 2e 0d 00 aa 04 0d  | plinth on......|
00000140  00 b4 2c 24 28 63 6f 64  65 25 2b 33 36 29 3d 22  |..,$(code%+36)="|
00000150  3c 73 71 75 61 72 65 20  73 69 7a 65 20 28 6d 69  |<square size (mi|
00000160  6e 69 6d 75 6d 3d 31 36  29 3e 22 0d 00 be 31 24  |nimum=16)>"...1$|
00000170  28 63 6f 64 65 25 2b 36  38 29 3d 22 3c 73 70 65  |(code%+68)="<spe|
00000180  65 64 20 66 61 63 74 6f  72 3e 20 3c 70 6c 69 6e  |ed factor> <plin|
00000190  74 68 20 28 30 3d 6f 66  66 29 3e 22 0d 00 c8 04  |th (0=off)>"....|
000001a0  0d 00 d2 05 e1 0d 00 dc  04 0d 00 e6 08 dd f2 44  |...............D|
000001b0  6f 0d 00 f0 1a 41 25 3d  31 32 38 30 3a 42 25 3d  |o....A%=1280:B%=|
000001c0  31 30 32 34 3a 43 25 3d  32 35 36 0d 00 fa 1a f4  |1024:C%=256.....|
000001d0  50 52 49 4e 54 20 55 53  52 20 28 63 6f 64 65 25  |PRINT USR (code%|
000001e0  2b 31 30 30 29 0d 01 04  0f d6 20 63 6f 64 65 25  |+100)..... code%|
000001f0  2b 31 30 30 0d 01 0e 19  41 25 3d b3 28 31 32 38  |+100....A%=.(128|
00000200  30 29 3a 42 25 3d b3 28  31 30 32 34 29 0d 01 18  |0):B%=.(1024)...|
00000210  0f d6 20 63 6f 64 65 25  2b 31 30 38 0d 01 22 0a  |.. code%+108..".|
00000220  e5 20 8d 54 4e 41 0d 01  2c 05 e1 0d 01 36 04 0d  |. .TNA..,....6..|
00000230  01 40 0e dd f2 41 73 73  65 6d 62 6c 65 0d 01 4a  |.@...Assemble..J|
00000240  04 0d 01 54 0b 43 58 20  3d 20 31 31 0d 01 5e 0b  |...T.CX = 11..^.|
00000250  43 59 20 3d 20 31 32 0d  01 68 0a 53 54 20 3d 20  |CY = 12..h.ST = |
00000260  37 0d 01 72 0a 42 57 20  3d 20 38 0d 01 7c 09 58  |7..r.BW = 8..|.X|
00000270  20 3d 20 36 0d 01 86 09  59 20 3d 20 36 0d 01 90  | = 6....Y = 6...|
00000280  04 0d 01 9a 14 e3 20 70  61 73 73 3d 30 20 b8 20  |...... pass=0 . |
00000290  33 20 88 20 33 0d 01 a4  0c 50 25 3d 63 6f 64 65  |3 . 3....P%=code|
000002a0  25 0d 01 ae 0d 5b 4f 50  54 20 70 61 73 73 0d 01  |%....[OPT pass..|
000002b0  b8 04 0d 01 c2 0c 2e 61  72 67 74 79 70 65 0d 01  |.......argtype..|
000002c0  cc 0c 45 51 55 44 20 30  20 3b 0d 01 d6 04 0d 01  |..EQUD 0 ;......|
000002d0  e0 09 2e 61 72 67 73 0d  01 ea 3b 45 51 55 44 20  |...args...;EQUD |
000002e0  30 3a 45 51 55 44 20 30  3a 45 51 55 44 20 30 3a  |0:EQUD 0:EQUD 0:|
000002f0  45 51 55 44 20 30 3a 45  51 55 44 20 30 3a 45 51  |EQUD 0:EQUD 0:EQ|
00000300  55 44 20 30 3a 45 51 55  44 20 30 3a 45 51 55 44  |UD 0:EQUD 0:EQUD|
00000310  20 30 0d 01 f4 04 0d 01  fe 09 2e 68 65 6c 70 0d  | 0.........help.|
00000320  02 08 3b 45 51 55 44 20  30 3a 45 51 55 44 20 30  |..;EQUD 0:EQUD 0|
00000330  3a 45 51 55 44 20 30 3a  45 51 55 44 20 30 3a 45  |:EQUD 0:EQUD 0:E|
00000340  51 55 44 20 30 3a 45 51  55 44 20 30 3a 45 51 55  |QUD 0:EQUD 0:EQU|
00000350  44 20 30 3a 45 51 55 44  20 30 0d 02 12 3b 45 51  |D 0:EQUD 0...;EQ|
00000360  55 44 20 30 3a 45 51 55  44 20 30 3a 45 51 55 44  |UD 0:EQUD 0:EQUD|
00000370  20 30 3a 45 51 55 44 20  30 3a 45 51 55 44 20 30  | 0:EQUD 0:EQUD 0|
00000380  3a 45 51 55 44 20 30 3a  45 51 55 44 20 30 3a 45  |:EQUD 0:EQUD 0:E|
00000390  51 55 44 20 30 0d 02 1c  04 0d 02 26 04 0d 02 30  |QUD 0......&...0|
000003a0  35 42 20 69 6e 69 74 20  20 20 20 20 3b 20 4a 75  |5B init     ; Ju|
000003b0  6d 70 73 20 74 6f 20 74  68 65 20 69 6e 69 74 69  |mps to the initi|
000003c0  61 6c 69 73 61 74 69 6f  6e 20 72 6f 75 74 69 6e  |alisation routin|
000003d0  65 2e 0d 02 3a 2a 20 20  20 20 20 20 20 20 20 20  |e...:*          |
000003e0  20 3b 20 74 68 69 73 20  69 73 20 6c 6f 63 61 74  | ; this is locat|
000003f0  69 6f 6e 20 63 6f 64 65  2b 31 30 30 0d 02 44 04  |ion code+100..D.|
00000400  0d 02 4e 2f 42 20 73 68  75 74 64 6f 77 6e 20 3b  |..N/B shutdown ;|
00000410  20 4a 75 6d 70 73 20 74  6f 20 74 68 65 20 73 68  | Jumps to the sh|
00000420  75 74 64 6f 77 6e 20 72  6f 75 74 69 6e 65 2e 0d  |utdown routine..|
00000430  02 58 2a 20 20 20 20 20  20 20 20 20 20 20 3b 20  |.X*           ; |
00000440  74 68 69 73 20 69 73 20  6c 6f 63 61 74 69 6f 6e  |this is location|
00000450  20 63 6f 64 65 2b 31 30  34 0d 02 62 04 0d 02 6c  | code+104..b...l|
00000460  04 0d 02 76 04 0d 02 80  0d 2e 70 6f 6c 6c 5f 72  |...v......poll_r|
00000470  65 74 0d 02 8a 04 0d 02  94 10 a4 61 64 72 28 30  |et.........adr(0|
00000480  2c 72 65 67 73 29 0d 02  9e 16 53 54 4d 49 41 20  |,regs)....STMIA |
00000490  72 30 21 2c 7b 72 31 2d  72 31 34 7d 0d 02 a8 04  |r0!,{r1-r14}....|
000004a0  0d 02 b2 2a 80 20 72 30  2c 72 31 2c 23 28 25 31  |...*. r0,r1,#(%1|
000004b0  31 29 20 3b 20 6d 61 6b  65 20 72 30 20 61 20 76  |1) ; make r0 a v|
000004c0  61 6c 75 65 20 28 30 2d  33 29 0d 02 bc 04 0d 02  |alue (0-3)......|
000004d0  c6 11 a4 61 64 72 28 31  30 2c 76 61 72 73 29 0d  |...adr(10,vars).|
000004e0  02 d0 04 0d 02 da 0e 43  4d 50 53 20 72 30 2c 23  |.......CMPS r0,#|
000004f0  30 0d 02 e4 0c 42 4e 45  20 63 6d 70 32 0d 02 ee  |0....BNE cmp2...|
00000500  2a 4c 44 52 20 72 31 31  2c 5b 72 31 30 2c 23 38  |*LDR r11,[r10,#8|
00000510  5d 20 20 3b 20 6c 6f 61  64 20 63 75 72 72 65 6e  |]  ; load curren|
00000520  74 20 59 20 70 6f 73 0d  02 f8 32 4c 44 52 20 72  |t Y pos...2LDR r|
00000530  31 32 2c 5b 72 31 30 2c  23 31 36 5d 20 3b 20 6c  |12,[r10,#16] ; l|
00000540  6f 61 64 20 6e 75 6d 62  65 72 20 6f 66 20 62 6c  |oad number of bl|
00000550  6f 63 6b 73 20 69 6e 20  59 0d 03 02 10 43 4d 50  |ocks in Y....CMP|
00000560  53 20 72 31 31 2c 72 31  32 0d 03 0c 0c ec 51 20  |S r11,r12.....Q |
00000570  72 30 2c 23 32 0d 03 16  0f 42 45 51 20 63 6d 70  |r0,#2....BEQ cmp|
00000580  65 78 69 74 0d 03 20 04  0d 03 2a 09 2e 63 6d 70  |exit.. ...*..cmp|
00000590  32 0d 03 34 0e 43 4d 50  53 20 72 30 2c 23 32 0d  |2..4.CMPS r0,#2.|
000005a0  03 3e 0c 42 4e 45 20 63  6d 70 31 0d 03 48 2a 4c  |.>.BNE cmp1..H*L|
000005b0  44 52 20 72 31 31 2c 5b  72 31 30 2c 23 38 5d 20  |DR r11,[r10,#8] |
000005c0  20 3b 20 6c 6f 61 64 20  63 75 72 72 65 6e 74 20  | ; load current |
000005d0  59 20 70 6f 73 0d 03 52  0f 43 4d 50 53 20 72 31  |Y pos..R.CMPS r1|
000005e0  31 2c 23 30 0d 03 5c 0c  ec 51 20 72 30 2c 23 30  |1,#0..\..Q r0,#0|
000005f0  0d 03 66 0f 42 45 51 20  63 6d 70 65 78 69 74 0d  |..f.BEQ cmpexit.|
00000600  03 70 04 0d 03 7a 09 2e  63 6d 70 31 0d 03 84 0e  |.p...z..cmp1....|
00000610  43 4d 50 53 20 72 30 2c  23 31 0d 03 8e 0c 42 4e  |CMPS r0,#1....BN|
00000620  45 20 63 6d 70 33 0d 03  98 2a 4c 44 52 20 72 31  |E cmp3...*LDR r1|
00000630  31 2c 5b 72 31 30 2c 23  34 5d 20 20 3b 20 6c 6f  |1,[r10,#4]  ; lo|
00000640  61 64 20 63 75 72 72 65  6e 74 20 58 20 70 6f 73  |ad current X pos|
00000650  0d 03 a2 32 4c 44 52 20  72 31 32 2c 5b 72 31 30  |...2LDR r12,[r10|
00000660  2c 23 31 32 5d 20 3b 20  6c 6f 61 64 20 6e 75 6d  |,#12] ; load num|
00000670  62 65 72 20 6f 66 20 62  6c 6f 63 6b 73 20 69 6e  |ber of blocks in|
00000680  20 58 0d 03 ac 10 43 4d  50 53 20 72 31 31 2c 72  | X....CMPS r11,r|
00000690  31 32 0d 03 b6 0c ec 51  20 72 30 2c 23 33 0d 03  |12.....Q r0,#3..|
000006a0  c0 0f 42 45 51 20 63 6d  70 65 78 69 74 0d 03 ca  |..BEQ cmpexit...|
000006b0  04 0d 03 d4 09 2e 63 6d  70 33 0d 03 de 0e 43 4d  |......cmp3....CM|
000006c0  50 53 20 72 30 2c 23 33  0d 03 e8 0f 42 4e 45 20  |PS r0,#3....BNE |
000006d0  63 6d 70 65 78 69 74 0d  03 f2 2a 4c 44 52 20 72  |cmpexit...*LDR r|
000006e0  31 31 2c 5b 72 31 30 2c  23 34 5d 20 20 3b 20 6c  |11,[r10,#4]  ; l|
000006f0  6f 61 64 20 63 75 72 72  65 6e 74 20 58 20 70 6f  |oad current X po|
00000700  73 0d 03 fc 0f 43 4d 50  53 20 72 31 31 2c 23 30  |s....CMPS r11,#0|
00000710  0d 04 06 0c ec 51 20 72  30 2c 23 31 0d 04 10 04  |.....Q r0,#1....|
00000720  0d 04 1a 0c 2e 63 6d 70  65 78 69 74 0d 04 24 04  |.....cmpexit..$.|
00000730  0d 04 2e 37 4d 4f 56 20  72 39 2c 72 30 20 20 20  |...7MOV r9,r0   |
00000740  20 20 20 20 20 20 20 3b  20 72 39 20 3d 20 76 61  |       ; r9 = va|
00000750  6c 75 65 20 6f 66 20 72  61 6e 64 6f 6d 20 64 69  |lue of random di|
00000760  72 65 63 74 69 6f 6e 0d  04 38 2e 4c 44 52 20 72  |rection..8.LDR r|
00000770  38 2c 5b 72 31 30 5d 20  20 20 20 20 20 20 3b 20  |8,[r10]       ; |
00000780  72 38 20 3d 20 62 6c 6f  63 6b 20 77 69 64 74 68  |r8 = block width|
00000790  20 20 20 62 77 0d 04 42  22 4c 44 52 20 72 37 2c  |   bw..B"LDR r7,|
000007a0  5b 72 31 30 2c 23 32 34  5d 20 20 20 3b 20 72 37  |[r10,#24]   ; r7|
000007b0  20 3d 20 73 74 65 70 0d  04 4c 2e 4c 44 52 20 72  | = step..L.LDR r|
000007c0  31 31 2c 5b 72 31 30 2c  23 34 5d 20 20 20 3b 20  |11,[r10,#4]   ; |
000007d0  72 31 31 20 3d 20 63 75  72 72 65 6e 74 20 58 70  |r11 = current Xp|
000007e0  6f 73 20 43 58 0d 04 56  2e 4c 44 52 20 72 31 32  |os CX..V.LDR r12|
000007f0  2c 5b 72 31 30 2c 23 38  5d 20 20 20 3b 20 72 31  |,[r10,#8]   ; r1|
00000800  32 20 3d 20 63 75 72 72  65 6e 74 20 59 70 6f 73  |2 = current Ypos|
00000810  20 43 59 0d 04 60 04 0d  04 6a 17 3b 20 73 65 74  | CY..`...j.; set|
00000820  20 67 63 6f 6c 20 74 6f  20 62 6c 61 63 6b 0d 04  | gcol to black..|
00000830  74 04 0d 04 7e 0e 53 57  49 20 32 35 36 2b 31 38  |t...~.SWI 256+18|
00000840  0d 04 88 0d 4d 4f 56 20  72 30 2c 23 30 0d 04 92  |....MOV r0,#0...|
00000850  13 53 57 49 20 22 4f 53  5f 57 72 69 74 65 43 22  |.SWI "OS_WriteC"|
00000860  0d 04 9c 2d 4c 44 52 20  72 30 2c 5b 72 31 30 2c  |...-LDR r0,[r10,|
00000870  23 32 30 5d 20 3b 20 67  65 74 20 6e 75 6d 62 65  |#20] ; get numbe|
00000880  72 20 6f 66 20 63 6f 6c  6f 75 72 73 2e 0d 04 a6  |r of colours....|
00000890  0f 43 4d 50 20 72 30 2c  23 32 35 34 0d 04 b0 0f  |.CMP r0,#254....|
000008a0  4d 4f 56 4c 54 20 72 30  2c 23 37 0d 04 ba 0f 4d  |MOVLT r0,#7....M|
000008b0  4f 56 47 45 20 72 30 2c  23 30 0d 04 c4 13 53 57  |OVGE r0,#0....SW|
000008c0  49 20 22 4f 53 5f 57 72  69 74 65 43 22 0d 04 ce  |I "OS_WriteC"...|
000008d0  04 0d 04 d8 0d 43 4d 50  20 72 39 2c 23 30 0d 04  |.....CMP r9,#0..|
000008e0  e2 0b 42 4e 45 20 64 6f  32 0d 04 ec 04 0d 04 f6  |..BNE do2.......|
000008f0  18 3b 20 72 3d 30 20 2d  2d 2d 2d 2d 2d 2d 2d 2d  |.; r=0 ---------|
00000900  2d 2d 2d 2d 2d 0d 05 00  04 0d 05 0a 0c 4d 4f 56  |-----........MOV|
00000910  20 59 2c 23 30 0d 05 14  04 0d 05 1e 0b 2e 6c 6f  | Y,#0.........lo|
00000920  6f 70 5f 30 0d 05 28 04  0d 05 32 2f a4 61 64 72  |op_0..(...2/.adr|
00000930  28 30 2c 73 63 61 6e 72  65 67 73 29 3a 53 54 4d  |(0,scanregs):STM|
00000940  49 41 20 72 30 21 2c 7b  72 31 2d 72 31 34 7d 3a  |IA r0!,{r1-r14}:|
00000950  42 4c 20 53 63 61 6e 0d  05 3c 3b 43 4d 50 53 20  |BL Scan..<;CMPS |
00000960  72 31 30 2c 23 31 3a 42  45 51 20 6f 75 74 3a a4  |r10,#1:BEQ out:.|
00000970  61 64 72 28 30 2c 73 63  61 6e 72 65 67 73 29 3a  |adr(0,scanregs):|
00000980  4c 44 4d 49 41 20 72 30  21 2c 7b 72 31 2d 72 31  |LDMIA r0!,{r1-r1|
00000990  34 7d 0d 05 46 04 0d 05  50 1c 4d 4f 56 20 72 30  |4}..F...P.MOV r0|
000009a0  2c 23 31 38 38 3a 4d 55  4c 20 72 31 2c 43 58 2c  |,#188:MUL r1,CX,|
000009b0  42 57 0d 05 5a 29 4d 55  4c 20 72 32 2c 43 59 2c  |BW..Z)MUL r2,CY,|
000009c0  42 57 3a 41 44 44 20 72  32 2c 72 32 2c 42 57 3a  |BW:ADD r2,r2,BW:|
000009d0  53 55 42 20 72 32 2c 72  32 2c 59 0d 05 64 11 53  |SUB r2,r2,Y..d.S|
000009e0  57 49 20 22 4f 53 5f 50  6c 6f 74 22 0d 05 6e 04  |WI "OS_Plot"..n.|
000009f0  0d 05 78 29 4d 4f 56 20  72 30 2c 23 31 38 38 3a  |..x)MOV r0,#188:|
00000a00  4d 55 4c 20 72 31 2c 43  58 2c 42 57 3a 41 44 44  |MUL r1,CX,BW:ADD|
00000a10  20 72 31 2c 72 31 2c 42  57 0d 05 82 2f 4d 55 4c  | r1,r1,BW.../MUL|
00000a20  20 72 32 2c 43 59 2c 42  57 3a 41 44 44 20 72 32  | r2,CY,BW:ADD r2|
00000a30  2c 72 32 2c 42 57 2c 4c  53 4c 23 31 3a 53 55 42  |,r2,BW,LSL#1:SUB|
00000a40  20 72 32 2c 72 32 2c 59  0d 05 8c 11 53 57 49 20  | r2,r2,Y....SWI |
00000a50  22 4f 53 5f 50 6c 6f 74  22 0d 05 96 04 0d 05 a0  |"OS_Plot".......|
00000a60  36 4d 4f 56 20 72 30 2c  23 31 39 30 3a 4d 55 4c  |6MOV r0,#190:MUL|
00000a70  20 72 31 2c 43 58 2c 42  57 3a 4d 55 4c 20 72 32  | r1,CX,BW:MUL r2|
00000a80  2c 43 59 2c 42 57 3a 41  44 44 20 72 32 2c 72 32  |,CY,BW:ADD r2,r2|
00000a90  2c 42 57 0d 05 aa 1c 53  55 42 20 72 32 2c 72 32  |,BW....SUB r2,r2|
00000aa0  2c 59 3a 53 55 42 20 72  32 2c 72 32 2c 53 54 0d  |,Y:SUB r2,r2,ST.|
00000ab0  05 b4 11 53 57 49 20 22  4f 53 5f 50 6c 6f 74 22  |...SWI "OS_Plot"|
00000ac0  0d 05 be 04 0d 05 c8 1a  4d 4f 56 20 72 30 2c 23  |........MOV r0,#|
00000ad0  34 3a 4d 55 4c 20 72 31  2c 43 58 2c 42 57 0d 05  |4:MUL r1,CX,BW..|
00000ae0  d2 30 4d 55 4c 20 72 32  2c 43 59 2c 42 57 3a 41  |.0MUL r2,CY,BW:A|
00000af0  44 44 20 72 32 2c 72 32  2c 42 57 2c 4c 53 4c 23  |DD r2,r2,BW,LSL#|
00000b00  31 3a 53 55 42 20 72 32  2c 72 32 2c 53 54 0d 05  |1:SUB r2,r2,ST..|
00000b10  dc 1d 53 55 42 20 72 32  2c 72 32 2c 59 3a 53 57  |..SUB r2,r2,Y:SW|
00000b20  49 20 22 4f 53 5f 50 6c  6f 74 22 0d 05 e6 30 4d  |I "OS_Plot"...0M|
00000b30  4f 56 20 72 30 2c 23 39  37 3a 4d 4f 56 20 72 31  |OV r0,#97:MOV r1|
00000b40  2c 42 57 3a 4d 4f 56 20  72 32 2c 53 54 3a 53 57  |,BW:MOV r2,ST:SW|
00000b50  49 20 22 4f 53 5f 50 6c  6f 74 22 0d 05 f0 04 0d  |I "OS_Plot".....|
00000b60  05 fa 0e 41 44 44 20 59  2c 59 2c 53 54 0d 06 04  |...ADD Y,Y,ST...|
00000b70  10 53 55 42 20 72 30 2c  42 57 2c 23 31 0d 06 0e  |.SUB r0,BW,#1...|
00000b80  0c 43 4d 50 20 59 2c 72  30 0d 06 18 0e 42 4c 45  |.CMP Y,r0....BLE|
00000b90  20 6c 6f 6f 70 5f 30 0d  06 22 04 0d 06 2c 10 41  | loop_0.."...,.A|
00000ba0  44 44 20 43 59 2c 43 59  2c 23 31 0d 06 36 13 53  |DD CY,CY,#1..6.S|
00000bb0  54 52 20 43 59 2c 5b 72  31 30 2c 23 38 5d 0d 06  |TR CY,[r10,#8]..|
00000bc0  40 04 0d 06 4a 18 3b 20  72 3d 32 20 2d 2d 2d 2d  |@...J.; r=2 ----|
00000bd0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 0d 06 54 04 0d 06  |----------..T...|
00000be0  5e 08 2e 64 6f 32 0d 06  68 04 0d 06 72 0d 43 4d  |^..do2..h...r.CM|
00000bf0  50 20 72 39 2c 23 32 0d  06 7c 0b 42 4e 45 20 64  |P r9,#2..|.BNE d|
00000c00  6f 31 0d 06 86 04 0d 06  90 0c 4d 4f 56 20 59 2c  |o1........MOV Y,|
00000c10  23 30 0d 06 9a 04 0d 06  a4 0b 2e 6c 6f 6f 70 5f  |#0.........loop_|
00000c20  32 0d 06 ae 04 0d 06 b8  2f a4 61 64 72 28 30 2c  |2......./.adr(0,|
00000c30  73 63 61 6e 72 65 67 73  29 3a 53 54 4d 49 41 20  |scanregs):STMIA |
00000c40  72 30 21 2c 7b 72 31 2d  72 31 34 7d 3a 42 4c 20  |r0!,{r1-r14}:BL |
00000c50  53 63 61 6e 0d 06 c2 3b  43 4d 50 53 20 72 31 30  |Scan...;CMPS r10|
00000c60  2c 23 31 3a 42 45 51 20  6f 75 74 3a a4 61 64 72  |,#1:BEQ out:.adr|
00000c70  28 30 2c 73 63 61 6e 72  65 67 73 29 3a 4c 44 4d  |(0,scanregs):LDM|
00000c80  49 41 20 72 30 21 2c 7b  72 31 2d 72 31 34 7d 0d  |IA r0!,{r1-r14}.|
00000c90  06 cc 04 0d 06 d6 1c 4d  4f 56 20 72 30 2c 23 31  |.......MOV r0,#1|
00000ca0  38 38 3a 4d 55 4c 20 72  31 2c 43 58 2c 42 57 0d  |88:MUL r1,CX,BW.|
00000cb0  06 e0 29 4d 55 4c 20 72  32 2c 43 59 2c 42 57 3a  |..)MUL r2,CY,BW:|
00000cc0  53 55 42 20 72 32 2c 72  32 2c 42 57 3a 41 44 44  |SUB r2,r2,BW:ADD|
00000cd0  20 72 32 2c 72 32 2c 59  0d 06 ea 11 53 57 49 20  | r2,r2,Y....SWI |
00000ce0  22 4f 53 5f 50 6c 6f 74  22 0d 06 f4 04 0d 06 fe  |"OS_Plot".......|
00000cf0  29 4d 4f 56 20 72 30 2c  23 31 38 38 3a 4d 55 4c  |)MOV r0,#188:MUL|
00000d00  20 72 31 2c 43 58 2c 42  57 3a 41 44 44 20 72 31  | r1,CX,BW:ADD r1|
00000d10  2c 72 31 2c 42 57 0d 07  08 1c 4d 55 4c 20 72 32  |,r1,BW....MUL r2|
00000d20  2c 43 59 2c 42 57 3a 41  44 44 20 72 32 2c 72 32  |,CY,BW:ADD r2,r2|
00000d30  2c 59 0d 07 12 11 53 57  49 20 22 4f 53 5f 50 6c  |,Y....SWI "OS_Pl|
00000d40  6f 74 22 0d 07 1c 04 0d  07 26 36 4d 4f 56 20 72  |ot"......&6MOV r|
00000d50  30 2c 23 31 39 30 3a 4d  55 4c 20 72 31 2c 43 58  |0,#190:MUL r1,CX|
00000d60  2c 42 57 3a 4d 55 4c 20  72 32 2c 43 59 2c 42 57  |,BW:MUL r2,CY,BW|
00000d70  3a 53 55 42 20 72 32 2c  72 32 2c 42 57 0d 07 30  |:SUB r2,r2,BW..0|
00000d80  1c 41 44 44 20 72 32 2c  72 32 2c 59 3a 41 44 44  |.ADD r2,r2,Y:ADD|
00000d90  20 72 32 2c 72 32 2c 53  54 0d 07 3a 11 53 57 49  | r2,r2,ST..:.SWI|
00000da0  20 22 4f 53 5f 50 6c 6f  74 22 0d 07 44 04 0d 07  | "OS_Plot"..D...|
00000db0  4e 1a 4d 4f 56 20 72 30  2c 23 34 3a 4d 55 4c 20  |N.MOV r0,#4:MUL |
00000dc0  72 31 2c 43 58 2c 42 57  0d 07 58 1d 4d 55 4c 20  |r1,CX,BW..X.MUL |
00000dd0  72 32 2c 43 59 2c 42 57  3a 53 55 42 20 72 32 2c  |r2,CY,BW:SUB r2,|
00000de0  72 32 2c 42 57 0d 07 62  1d 41 44 44 20 72 32 2c  |r2,BW..b.ADD r2,|
00000df0  72 32 2c 59 3a 53 57 49  20 22 4f 53 5f 50 6c 6f  |r2,Y:SWI "OS_Plo|
00000e00  74 22 0d 07 6c 30 4d 4f  56 20 72 30 2c 23 39 37  |t"..l0MOV r0,#97|
00000e10  3a 4d 4f 56 20 72 31 2c  42 57 3a 4d 4f 56 20 72  |:MOV r1,BW:MOV r|
00000e20  32 2c 53 54 3a 53 57 49  20 22 4f 53 5f 50 6c 6f  |2,ST:SWI "OS_Plo|
00000e30  74 22 0d 07 76 04 0d 07  80 0e 41 44 44 20 59 2c  |t"..v.....ADD Y,|
00000e40  59 2c 53 54 0d 07 8a 10  53 55 42 20 72 30 2c 42  |Y,ST....SUB r0,B|
00000e50  57 2c 23 31 0d 07 94 0c  43 4d 50 20 59 2c 72 30  |W,#1....CMP Y,r0|
00000e60  0d 07 9e 0e 42 4c 45 20  6c 6f 6f 70 5f 32 0d 07  |....BLE loop_2..|
00000e70  a8 04 0d 07 b2 10 53 55  42 20 43 59 2c 43 59 2c  |......SUB CY,CY,|
00000e80  23 31 0d 07 bc 13 53 54  52 20 43 59 2c 5b 72 31  |#1....STR CY,[r1|
00000e90  30 2c 23 38 5d 0d 07 c6  04 0d 07 d0 16 3b 20 72  |0,#8]........; r|
00000ea0  3d 31 20 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 0d  |=1 ------------.|
00000eb0  07 da 04 0d 07 e4 08 2e  64 6f 31 0d 07 ee 0d 43  |........do1....C|
00000ec0  4d 50 20 72 39 2c 23 31  0d 07 f8 0b 42 4e 45 20  |MP r9,#1....BNE |
00000ed0  64 6f 33 0d 08 02 04 0d  08 0c 0c 4d 4f 56 20 58  |do3........MOV X|
00000ee0  2c 23 30 0d 08 16 04 0d  08 20 0b 2e 6c 6f 6f 70  |,#0...... ..loop|
00000ef0  5f 31 0d 08 2a 04 0d 08  34 2f a4 61 64 72 28 30  |_1..*...4/.adr(0|
00000f00  2c 73 63 61 6e 72 65 67  73 29 3a 53 54 4d 49 41  |,scanregs):STMIA|
00000f10  20 72 30 21 2c 7b 72 31  2d 72 31 34 7d 3a 42 4c  | r0!,{r1-r14}:BL|
00000f20  20 53 63 61 6e 0d 08 3e  3b 43 4d 50 53 20 72 31  | Scan..>;CMPS r1|
00000f30  30 2c 23 31 3a 42 45 51  20 6f 75 74 3a a4 61 64  |0,#1:BEQ out:.ad|
00000f40  72 28 30 2c 73 63 61 6e  72 65 67 73 29 3a 4c 44  |r(0,scanregs):LD|
00000f50  4d 49 41 20 72 30 21 2c  7b 72 31 2d 72 31 34 7d  |MIA r0!,{r1-r14}|
00000f60  0d 08 48 04 0d 08 52 35  4d 4f 56 20 72 30 2c 23  |..H...R5MOV r0,#|
00000f70  31 38 38 3a 4d 55 4c 20  72 31 2c 43 58 2c 42 57  |188:MUL r1,CX,BW|
00000f80  3a 41 44 44 20 72 31 2c  72 31 2c 42 57 3a 53 55  |:ADD r1,r1,BW:SU|
00000f90  42 20 72 31 2c 72 31 2c  58 0d 08 5c 1e 4d 55 4c  |B r1,r1,X..\.MUL|
00000fa0  20 72 32 2c 43 59 2c 42  57 3a 53 57 49 20 22 4f  | r2,CY,BW:SWI "O|
00000fb0  53 5f 50 6c 6f 74 22 0d  08 66 04 0d 08 70 3b 4d  |S_Plot"..f...p;M|
00000fc0  4f 56 20 72 30 2c 23 31  38 38 3a 4d 55 4c 20 72  |OV r0,#188:MUL r|
00000fd0  31 2c 43 58 2c 42 57 3a  41 44 44 20 72 31 2c 72  |1,CX,BW:ADD r1,r|
00000fe0  31 2c 42 57 2c 4c 53 4c  23 31 3a 53 55 42 20 72  |1,BW,LSL#1:SUB r|
00000ff0  31 2c 72 31 2c 58 0d 08  7a 2b 4d 55 4c 20 72 32  |1,r1,X..z+MUL r2|
00001000  2c 43 59 2c 42 57 3a 41  44 44 20 72 32 2c 72 32  |,CY,BW:ADD r2,r2|
00001010  2c 42 57 3a 53 57 49 20  22 4f 53 5f 50 6c 6f 74  |,BW:SWI "OS_Plot|
00001020  22 0d 08 84 04 0d 08 8e  35 4d 4f 56 20 72 30 2c  |".......5MOV r0,|
00001030  23 31 39 30 3a 4d 55 4c  20 72 31 2c 43 58 2c 42  |#190:MUL r1,CX,B|
00001040  57 3a 41 44 44 20 72 31  2c 72 31 2c 42 57 3a 53  |W:ADD r1,r1,BW:S|
00001050  55 42 20 72 31 2c 72 31  2c 58 0d 08 98 2b 53 55  |UB r1,r1,X...+SU|
00001060  42 20 72 31 2c 72 31 2c  53 54 3a 4d 55 4c 20 72  |B r1,r1,ST:MUL r|
00001070  32 2c 43 59 2c 42 57 3a  53 57 49 20 22 4f 53 5f  |2,CY,BW:SWI "OS_|
00001080  50 6c 6f 74 22 0d 08 a2  04 0d 08 ac 2d 4d 4f 56  |Plot".......-MOV|
00001090  20 72 30 2c 23 34 3a 4d  55 4c 20 72 31 2c 43 58  | r0,#4:MUL r1,CX|
000010a0  2c 42 57 3a 41 44 44 20  72 31 2c 72 31 2c 42 57  |,BW:ADD r1,r1,BW|
000010b0  2c 4c 53 4c 23 31 0d 08  b6 1c 53 55 42 20 72 31  |,LSL#1....SUB r1|
000010c0  2c 72 31 2c 58 3a 53 55  42 20 72 31 2c 72 31 2c  |,r1,X:SUB r1,r1,|
000010d0  53 54 0d 08 c0 1e 4d 55  4c 20 72 32 2c 43 59 2c  |ST....MUL r2,CY,|
000010e0  42 57 3a 53 57 49 20 22  4f 53 5f 50 6c 6f 74 22  |BW:SWI "OS_Plot"|
000010f0  0d 08 ca 30 4d 4f 56 20  72 30 2c 23 39 37 3a 4d  |...0MOV r0,#97:M|
00001100  4f 56 20 72 31 2c 53 54  3a 4d 4f 56 20 72 32 2c  |OV r1,ST:MOV r2,|
00001110  42 57 3a 53 57 49 20 22  4f 53 5f 50 6c 6f 74 22  |BW:SWI "OS_Plot"|
00001120  0d 08 d4 04 0d 08 de 0e  41 44 44 20 58 2c 58 2c  |........ADD X,X,|
00001130  53 54 0d 08 e8 10 53 55  42 20 72 30 2c 42 57 2c  |ST....SUB r0,BW,|
00001140  23 31 0d 08 f2 0c 43 4d  50 20 58 2c 72 30 0d 08  |#1....CMP X,r0..|
00001150  fc 0e 42 4c 45 20 6c 6f  6f 70 5f 31 0d 09 06 04  |..BLE loop_1....|
00001160  0d 09 10 10 41 44 44 20  43 58 2c 43 58 2c 23 31  |....ADD CX,CX,#1|
00001170  0d 09 1a 13 53 54 52 20  43 58 2c 5b 72 31 30 2c  |....STR CX,[r10,|
00001180  23 34 5d 0d 09 24 04 0d  09 2e 1a 3b 20 72 3d 33  |#4]..$.....; r=3|
00001190  20 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  | ---------------|
000011a0  2d 0d 09 38 04 0d 09 42  08 2e 64 6f 33 0d 09 4c  |-..8...B..do3..L|
000011b0  0d 43 4d 50 20 72 39 2c  23 33 0d 09 56 0b 42 4e  |.CMP r9,#3..V.BN|
000011c0  45 20 6f 75 74 0d 09 60  04 0d 09 6a 0c 4d 4f 56  |E out..`...j.MOV|
000011d0  20 58 2c 23 30 0d 09 74  04 0d 09 7e 0b 2e 6c 6f  | X,#0..t...~..lo|
000011e0  6f 70 5f 33 0d 09 88 04  0d 09 92 2e 41 44 52 20  |op_3........ADR |
000011f0  72 30 2c 73 63 61 6e 72  65 67 73 3a 53 54 4d 49  |r0,scanregs:STMI|
00001200  41 20 72 30 21 2c 7b 72  31 2d 72 31 34 7d 3a 42  |A r0!,{r1-r14}:B|
00001210  4c 20 53 63 61 6e 0d 09  9c 3a 43 4d 50 53 20 72  |L Scan...:CMPS r|
00001220  31 30 2c 23 31 3a 42 45  51 20 6f 75 74 3a 41 44  |10,#1:BEQ out:AD|
00001230  52 20 72 30 2c 73 63 61  6e 72 65 67 73 3a 4c 44  |R r0,scanregs:LD|
00001240  4d 49 41 20 72 30 21 2c  7b 72 31 2d 72 31 34 7d  |MIA r0!,{r1-r14}|
00001250  0d 09 a6 04 0d 09 b0 35  4d 4f 56 20 72 30 2c 23  |.......5MOV r0,#|
00001260  31 38 38 3a 4d 55 4c 20  72 31 2c 43 58 2c 42 57  |188:MUL r1,CX,BW|
00001270  3a 53 55 42 20 72 31 2c  72 31 2c 42 57 3a 41 44  |:SUB r1,r1,BW:AD|
00001280  44 20 72 31 2c 72 31 2c  58 0d 09 ba 1e 4d 55 4c  |D r1,r1,X....MUL|
00001290  20 72 32 2c 43 59 2c 42  57 3a 53 57 49 20 22 4f  | r2,CY,BW:SWI "O|
000012a0  53 5f 50 6c 6f 74 22 0d  09 c4 04 0d 09 ce 28 4d  |S_Plot".......(M|
000012b0  4f 56 20 72 30 2c 23 31  38 38 3a 4d 55 4c 20 72  |OV r0,#188:MUL r|
000012c0  31 2c 43 58 2c 42 57 3a  41 44 44 20 72 31 2c 72  |1,CX,BW:ADD r1,r|
000012d0  31 2c 58 0d 09 d8 2b 4d  55 4c 20 72 32 2c 43 59  |1,X...+MUL r2,CY|
000012e0  2c 42 57 3a 41 44 44 20  72 32 2c 72 32 2c 42 57  |,BW:ADD r2,r2,BW|
000012f0  3a 53 57 49 20 22 4f 53  5f 50 6c 6f 74 22 0d 09  |:SWI "OS_Plot"..|
00001300  e2 04 0d 09 ec 35 4d 4f  56 20 72 30 2c 23 31 39  |.....5MOV r0,#19|
00001310  30 3a 4d 55 4c 20 72 31  2c 43 58 2c 42 57 3a 53  |0:MUL r1,CX,BW:S|
00001320  55 42 20 72 31 2c 72 31  2c 42 57 3a 41 44 44 20  |UB r1,r1,BW:ADD |
00001330  72 31 2c 72 31 2c 58 0d  09 f6 2b 41 44 44 20 72  |r1,r1,X...+ADD r|
00001340  31 2c 72 31 2c 53 54 3a  4d 55 4c 20 72 32 2c 43  |1,r1,ST:MUL r2,C|
00001350  59 2c 42 57 3a 53 57 49  20 22 4f 53 5f 50 6c 6f  |Y,BW:SWI "OS_Plo|
00001360  74 22 0d 0a 00 04 0d 0a  0a 27 4d 4f 56 20 72 30  |t".......'MOV r0|
00001370  2c 23 34 3a 4d 55 4c 20  72 31 2c 43 58 2c 42 57  |,#4:MUL r1,CX,BW|
00001380  3a 53 55 42 20 72 31 2c  72 31 2c 42 57 0d 0a 14  |:SUB r1,r1,BW...|
00001390  2a 41 44 44 20 72 31 2c  72 31 2c 58 3a 4d 55 4c  |*ADD r1,r1,X:MUL|
000013a0  20 72 32 2c 43 59 2c 42  57 3a 53 57 49 20 22 4f  | r2,CY,BW:SWI "O|
000013b0  53 5f 50 6c 6f 74 22 0d  0a 1e 30 4d 4f 56 20 72  |S_Plot"...0MOV r|
000013c0  30 2c 23 39 37 3a 4d 4f  56 20 72 31 2c 53 54 3a  |0,#97:MOV r1,ST:|
000013d0  4d 4f 56 20 72 32 2c 42  57 3a 53 57 49 20 22 4f  |MOV r2,BW:SWI "O|
000013e0  53 5f 50 6c 6f 74 22 0d  0a 28 04 0d 0a 32 0e 41  |S_Plot"..(...2.A|
000013f0  44 44 20 58 2c 58 2c 53  54 0d 0a 3c 10 53 55 42  |DD X,X,ST..<.SUB|
00001400  20 72 30 2c 42 57 2c 23  31 0d 0a 46 0c 43 4d 50  | r0,BW,#1..F.CMP|
00001410  20 58 2c 72 30 0d 0a 50  0e 42 4c 45 20 6c 6f 6f  | X,r0..P.BLE loo|
00001420  70 5f 33 0d 0a 5a 04 0d  0a 64 10 53 55 42 20 43  |p_3..Z...d.SUB C|
00001430  58 2c 43 58 2c 23 31 0d  0a 6e 13 53 54 52 20 43  |X,CX,#1..n.STR C|
00001440  58 2c 5b 72 31 30 2c 23  34 5d 0d 0a 78 04 0d 0a  |X,[r10,#4]..x...|
00001450  82 08 2e 6f 75 74 0d 0a  8c 04 0d 0a 96 0f 41 44  |...out........AD|
00001460  52 20 72 30 2c 72 65 67  73 0d 0a a0 16 4c 44 4d  |R r0,regs....LDM|
00001470  49 41 20 72 30 21 2c 7b  72 31 2d 72 31 34 7d 0d  |IA r0!,{r1-r14}.|
00001480  0a aa 04 0d 0a b4 0e 4d  4f 56 20 50 43 2c 72 31  |.......MOV PC,r1|
00001490  34 0d 0a be 04 0d 0a c8  3d 2e 69 6e 69 74 20 3b  |4.......=.init ;|
000014a0  20 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  | ---------------|
000014b0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000014d0  2d 2d 0d 0a d2 3d 3b 2d  2d 2d 2d 2d 2d 2d 2d 2d  |--...=;---------|
000014e0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001500  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 0d  |---------------.|
00001510  0a dc 04 0d 0a e6 04 0d  0a f0 23 4d 4f 56 20 72  |..........#MOV r|
00001520  31 31 2c 72 30 20 3b 20  72 31 31 20 3d 20 73 63  |11,r0 ; r11 = sc|
00001530  72 65 65 6e 20 77 69 64  74 68 0d 0a fa 24 4d 4f  |reen width...$MO|
00001540  56 20 72 31 32 2c 72 31  20 3b 20 72 31 32 20 3d  |V r12,r1 ; r12 =|
00001550  20 73 63 72 65 65 6e 20  68 65 69 67 68 74 0d 0b  | screen height..|
00001560  04 04 0d 0b 0e 11 a4 61  64 72 28 31 30 2c 61 72  |.......adr(10,ar|
00001570  67 73 29 0d 0b 18 30 4c  44 52 20 72 35 2c 5b 72  |gs)...0LDR r5,[r|
00001580  31 30 2c 23 38 5d 20 3b  20 67 65 74 20 70 6c 69  |10,#8] ; get pli|
00001590  6e 74 68 20 6f 70 74 69  6f 6e 20 69 6e 74 6f 20  |nth option into |
000015a0  72 35 2e 0d 0b 22 2c 4c  44 52 20 72 33 2c 5b 72  |r5...",LDR r3,[r|
000015b0  31 30 5d 20 20 20 20 3b  20 67 65 74 20 62 6c 6f  |10]    ; get blo|
000015c0  63 6b 20 73 69 7a 65 20  69 6e 74 6f 20 72 33 0d  |ck size into r3.|
000015d0  0b 2c 14 4d 4f 56 20 72  34 2c 72 31 32 2c 4c 53  |.,.MOV r4,r12,LS|
000015e0  52 23 32 0d 0b 36 0e 43  4d 50 53 20 72 33 2c 72  |R#2..6.CMPS r3,r|
000015f0  34 0d 0b 40 0f 4d 4f 56  47 54 20 72 33 2c 72 34  |4..@.MOVGT r3,r4|
00001600  0d 0b 4a 0f 43 4d 50 53  20 72 33 2c 23 31 32 0d  |..J.CMPS r3,#12.|
00001610  0b 54 11 4d 4f 56 4c 45  20 72 33 2c 23 31 32 38  |.T.MOVLE r3,#128|
00001620  0d 0b 5e 3b 53 54 52 20  72 33 2c 5b 72 31 30 5d  |..^;STR r3,[r10]|
00001630  20 20 20 20 3b 20 73 74  6f 72 65 20 61 75 74 6f  |    ; store auto|
00001640  20 76 61 6c 75 65 20 6f  66 20 77 69 64 74 68 20  | value of width |
00001650  69 66 20 74 6f 6f 20 62  69 67 2e 0d 0b 68 1b 4c  |if too big...h.L|
00001660  44 52 20 72 34 2c 5b 72  31 30 2c 23 34 5d 20 3b  |DR r4,[r10,#4] ;|
00001670  20 67 65 74 20 88 0d 0b  72 0d 43 4d 50 20 72 34  | get ...r.CMP r4|
00001680  2c 23 30 0d 0b 7c 0c ec  51 20 72 34 2c 23 31 0d  |,#0..|..Q r4,#1.|
00001690  0b 86 28 53 54 52 45 51  20 72 34 2c 5b 72 31 30  |..(STREQ r4,[r10|
000016a0  2c 23 34 5d 20 3b 20 73  74 6f 72 65 20 73 74 65  |,#4] ; store ste|
000016b0  70 20 62 61 63 6b 2e 0d  0b 90 04 0d 0b 9a 10 41  |p back.........A|
000016c0  44 52 20 72 31 30 2c 76  61 72 73 0d 0b a4 34 53  |DR r10,vars...4S|
000016d0  54 52 20 72 33 2c 5b 72  31 30 5d 20 20 20 20 20  |TR r3,[r10]     |
000016e0  3b 20 73 74 6f 72 65 20  62 6c 6f 63 6b 20 73 69  |; store block si|
000016f0  7a 65 20 69 6e 20 6d 79  20 73 74 6f 72 65 2e 0d  |ze in my store..|
00001700  0b ae 3b 53 54 52 20 72  32 2c 5b 72 31 30 2c 23  |..;STR r2,[r10,#|
00001710  32 30 5d 20 3b 20 73 74  6f 72 65 20 6e 75 6d 62  |20] ; store numb|
00001720  65 72 20 6f 66 20 63 6f  6c 6f 75 72 73 20 69 6e  |er of colours in|
00001730  20 6d 79 20 73 74 6f 72  65 2e 0d 0b b8 30 53 54  | my store....0ST|
00001740  52 20 72 34 2c 5b 72 31  30 2c 23 32 34 5d 20 3b  |R r4,[r10,#24] ;|
00001750  20 73 74 6f 72 65 20 73  74 65 70 20 69 6e 74 6f  | store step into|
00001760  20 6d 79 20 73 74 6f 72  65 2e 0d 0b c2 2a 53 54  | my store....*ST|
00001770  52 20 72 35 2c 5b 72 31  30 2c 23 32 38 5d 20 3b  |R r5,[r10,#28] ;|
00001780  20 73 74 6f 72 65 20 70  6c 69 6e 74 68 20 76 61  | store plinth va|
00001790  6c 75 65 2e 0d 0b cc 04  0d 0b d6 35 3b 20 6f 6e  |lue........5; on|
000017a0  20 65 6e 74 72 79 20 72  31 3d 6f 70 31 20 3b 20  | entry r1=op1 ; |
000017b0  72 32 3d 6f 70 32 20 3b  20 72 30 20 3d 20 72 65  |r2=op2 ; r0 = re|
000017c0  73 75 6c 74 20 6f 66 20  72 31 2f 72 32 0d 0b e0  |sult of r1/r2...|
000017d0  04 0d 0b ea 2b 4d 4f 56  20 72 31 2c 72 31 31 20  |....+MOV r1,r11 |
000017e0  3b 20 63 6f 70 79 20 73  63 72 65 65 6e 20 77 69  |; copy screen wi|
000017f0  64 74 68 20 66 6f 72 20  6f 70 31 2e 0d 0b f4 2a  |dth for op1....*|
00001800  4d 4f 56 20 72 32 2c 72  33 20 20 3b 20 63 6f 70  |MOV r2,r3  ; cop|
00001810  79 20 62 6c 6f 63 6b 20  77 69 64 74 68 20 66 6f  |y block width fo|
00001820  72 20 6f 70 32 2e 0d 0b  fe 0d 4d 4f 56 20 72 30  |r op2.....MOV r0|
00001830  2c 23 30 0d 0c 08 0d 2e  64 69 76 6c 6f 6f 70 31  |,#0.....divloop1|
00001840  0d 0c 12 0d 43 4d 50 20  72 31 2c 23 30 0d 0c 1c  |....CMP r1,#0...|
00001850  12 53 55 42 47 54 20 72  31 2c 72 31 2c 72 32 0d  |.SUBGT r1,r1,r2.|
00001860  0c 26 12 41 44 44 47 54  20 72 30 2c 72 30 2c 23  |.&.ADDGT r0,r0,#|
00001870  31 0d 0c 30 10 42 47 54  20 64 69 76 6c 6f 6f 70  |1..0.BGT divloop|
00001880  31 0d 0c 3a 04 0d 0c 44  33 41 44 44 45 51 20 72  |1..:...D3ADDEQ r|
00001890  30 2c 72 30 2c 23 31 20  3b 20 69 66 20 61 6e 20  |0,r0,#1 ; if an |
000018a0  65 78 61 63 74 20 66 69  74 20 61 63 72 6f 73 73  |exact fit across|
000018b0  20 73 63 72 65 65 6e 2e  0d 0c 4e 04 0d 0c 58 37  | screen...N...X7|
000018c0  53 55 42 20 72 30 2c 72  30 2c 23 32 20 20 20 20  |SUB r0,r0,#2    |
000018d0  20 3b 20 72 30 20 6e 6f  77 20 65 71 75 61 6c 73  | ; r0 now equals|
000018e0  20 6e 6f 2e 20 6f 66 20  62 6c 6f 63 6b 73 20 69  | no. of blocks i|
000018f0  6e 20 58 0d 0c 62 34 53  54 52 20 72 30 2c 5b 72  |n X..b4STR r0,[r|
00001900  31 30 2c 23 31 32 5d 20  3b 20 73 74 6f 72 65 20  |10,#12] ; store |
00001910  74 68 69 73 20 76 61 6c  75 65 20 74 6f 20 6d 79  |this value to my|
00001920  20 73 74 6f 72 65 2e 0d  0c 6c 04 0d 0c 76 35 3b  | store...l...v5;|
00001930  20 6f 6e 20 65 6e 74 72  79 20 72 31 3d 6f 70 31  | on entry r1=op1|
00001940  20 3b 20 72 32 3d 6f 70  32 20 3b 20 72 30 20 3d  | ; r2=op2 ; r0 =|
00001950  20 72 65 73 75 6c 74 20  6f 66 20 72 31 2f 72 32  | result of r1/r2|
00001960  0d 0c 80 04 0d 0c 8a 2c  4d 4f 56 20 72 31 2c 72  |.......,MOV r1,r|
00001970  31 32 20 3b 20 63 6f 70  79 20 73 63 72 65 65 6e  |12 ; copy screen|
00001980  20 68 65 69 67 68 74 20  66 6f 72 20 6f 70 31 2e  | height for op1.|
00001990  0d 0c 94 2d 20 20 20 20  20 20 20 20 20 20 20 3b  |...-           ;|
000019a0  20 72 32 20 69 73 20 61  6c 72 65 61 64 79 20 77  | r2 is already w|
000019b0  69 64 74 68 20 66 6f 72  20 6f 70 32 2e 0d 0c 9e  |idth for op2....|
000019c0  0d 4d 4f 56 20 72 30 2c  23 30 0d 0c a8 0d 2e 64  |.MOV r0,#0.....d|
000019d0  69 76 6c 6f 6f 70 32 0d  0c b2 0d 43 4d 50 20 72  |ivloop2....CMP r|
000019e0  31 2c 23 30 0d 0c bc 12  53 55 42 47 54 20 72 31  |1,#0....SUBGT r1|
000019f0  2c 72 31 2c 72 32 0d 0c  c6 12 41 44 44 47 54 20  |,r1,r2....ADDGT |
00001a00  72 30 2c 72 30 2c 23 31  0d 0c d0 10 42 47 54 20  |r0,r0,#1....BGT |
00001a10  64 69 76 6c 6f 6f 70 32  0d 0c da 04 0d 0c e4 33  |divloop2.......3|
00001a20  41 44 44 45 51 20 72 30  2c 72 30 2c 23 31 20 3b  |ADDEQ r0,r0,#1 ;|
00001a30  20 69 66 20 61 6e 20 65  78 61 63 74 20 66 69 74  | if an exact fit|
00001a40  20 61 63 72 6f 73 73 20  73 63 72 65 65 6e 2e 0d  | across screen..|
00001a50  0c ee 04 0d 0c f8 37 53  55 42 20 72 30 2c 72 30  |......7SUB r0,r0|
00001a60  2c 23 32 20 20 20 20 20  3b 20 72 30 20 6e 6f 77  |,#2     ; r0 now|
00001a70  20 65 71 75 61 6c 73 20  6e 6f 2e 20 6f 66 20 62  | equals no. of b|
00001a80  6c 6f 63 6b 73 20 69 6e  20 59 0d 0d 02 34 53 54  |locks in Y...4ST|
00001a90  52 20 72 30 2c 5b 72 31  30 2c 23 31 36 5d 20 3b  |R r0,[r10,#16] ;|
00001aa0  20 73 74 6f 72 65 20 74  68 69 73 20 76 61 6c 75  | store this valu|
00001ab0  65 20 74 6f 20 6d 79 20  73 74 6f 72 65 2e 0d 0d  |e to my store...|
00001ac0  0c 04 0d 0d 16 2f 4d 4f  56 20 72 35 2c 72 32 20  |...../MOV r5,r2 |
00001ad0  20 20 20 20 20 20 20 3b  20 72 35 20 65 71 75 61  |       ; r5 equa|
00001ae0  6c 73 20 77 69 64 74 68  20 6f 66 20 62 6c 6f 63  |ls width of bloc|
00001af0  6b 0d 0d 20 04 0d 0d 2a  1f 3b 20 63 68 65 63 6b  |k.. ...*.; check|
00001b00  20 61 6e 64 20 73 65 74  20 73 74 65 70 20 76 61  | and set step va|
00001b10  6c 75 65 2e 0d 0d 34 04  0d 0d 3e 26 4d 4f 56 20  |lue...4...>&MOV |
00001b20  72 31 2c 72 35 20 20 20  20 20 20 20 20 3b 20 67  |r1,r5        ; g|
00001b30  65 74 20 62 6c 6f 63 6b  20 77 69 64 74 68 0d 0d  |et block width..|
00001b40  48 26 4c 44 52 20 72 32  2c 5b 72 31 30 2c 23 32  |H&LDR r2,[r10,#2|
00001b50  34 5d 20 3b 20 6c 6f 61  64 20 73 74 65 70 20 76  |4] ; load step v|
00001b60  61 6c 75 65 0d 0d 52 04  0d 0d 5c 0d 43 4d 50 20  |alue..R...\.CMP |
00001b70  72 32 2c 23 30 0d 0d 66  0f 4d 4f 56 4c 45 20 72  |r2,#0..f.MOVLE r|
00001b80  32 2c 23 31 0d 0d 70 24  53 54 52 4c 45 20 72 32  |2,#1..p$STRLE r2|
00001b90  2c 5b 72 31 30 2c 23 32  34 5d 20 3b 20 73 74 6f  |,[r10,#24] ; sto|
00001ba0  72 65 20 62 61 63 6b 2e  0d 0d 7a 04 0d 0d 84 0d  |re back...z.....|
00001bb0  4d 4f 56 20 72 30 2c 23  30 0d 0d 8e 0d 2e 64 69  |MOV r0,#0.....di|
00001bc0  76 6c 6f 6f 70 33 0d 0d  98 0d 43 4d 50 20 72 31  |vloop3....CMP r1|
00001bd0  2c 23 30 0d 0d a2 12 53  55 42 47 54 20 72 31 2c  |,#0....SUBGT r1,|
00001be0  72 31 2c 72 32 0d 0d ac  12 41 44 44 47 54 20 72  |r1,r2....ADDGT r|
00001bf0  30 2c 72 30 2c 23 31 0d  0d b6 10 42 47 54 20 64  |0,r0,#1....BGT d|
00001c00  69 76 6c 6f 6f 70 33 0d  0d c0 04 0d 0d ca 0e 43  |ivloop3........C|
00001c10  4d 50 53 20 72 31 2c 23  30 0d 0d d4 3b 53 54 52  |MPS r1,#0...;STR|
00001c20  4e 45 20 72 35 2c 5b 72  31 30 2c 23 32 34 5d 20  |NE r5,[r10,#24] |
00001c30  3b 20 69 66 20 73 74 65  70 20 6e 6f 74 20 61 20  |; if step not a |
00001c40  66 61 63 74 6f 72 2c 20  73 74 65 70 20 3d 20 77  |factor, step = w|
00001c50  69 64 74 68 0d 0d de 04  0d 0d e8 2d 4c 44 52 20  |idth.......-LDR |
00001c60  72 37 2c 5b 72 31 30 2c  23 32 30 5d 20 3b 20 67  |r7,[r10,#20] ; g|
00001c70  65 74 20 6e 75 6d 62 65  72 20 6f 66 20 63 6f 6c  |et number of col|
00001c80  6f 75 72 73 2e 0d 0d f2  04 0d 0d fc 0e 43 4d 50  |ours.........CMP|
00001c90  20 72 37 2c 23 31 36 0d  0e 06 0f 42 4c 54 20 64  | r7,#16....BLT d|
00001ca0  6f 62 6c 61 63 6b 0d 0e  10 14 4c 44 52 20 72 36  |oblack....LDR r6|
00001cb0  2c 5b 72 31 30 2c 23 32  38 5d 0d 0e 1a 0d 43 4d  |,[r10,#28]....CM|
00001cc0  50 20 72 36 2c 23 30 0d  0e 24 0f 42 45 51 20 64  |P r6,#0..$.BEQ d|
00001cd0  6f 62 6c 61 63 6b 0d 0e  2e 04 0d 0e 38 04 0d 0e  |oblack......8...|
00001ce0  42 13 3b 20 64 72 61 77  20 74 68 65 20 67 72 69  |B.; draw the gri|
00001cf0  64 0d 0e 4c 04 0d 0e 56  11 41 44 44 20 72 38 2c  |d..L...V.ADD r8,|
00001d00  72 31 32 2c 72 35 0d 0e  60 04 0d 0e 6a 0d 4d 4f  |r12,r5..`...j.MO|
00001d10  56 20 72 34 2c 23 30 0d  0e 74 0b 2e 79 61 67 61  |V r4,#0..t..yaga|
00001d20  69 6e 0d 0e 7e 04 0d 0e  88 0e 53 57 49 20 32 35  |in..~.....SWI 25|
00001d30  36 2b 31 38 0d 0e 92 0e  43 4d 50 20 72 37 2c 23  |6+18....CMP r7,#|
00001d40  31 36 0d 0e 9c 0c ec 51  20 72 30 2c 23 32 0d 0e  |16.....Q r0,#2..|
00001d50  a6 0f 4d 4f 56 47 54 20  72 30 2c 23 31 0d 0e b0  |..MOVGT r0,#1...|
00001d60  13 53 57 49 20 22 4f 53  5f 57 72 69 74 65 43 22  |.SWI "OS_WriteC"|
00001d70  0d 0e ba 0e 43 4d 50 20  72 37 2c 23 31 36 0d 0e  |....CMP r7,#16..|
00001d80  c4 0c ec 51 20 72 30 2c  23 32 0d 0e ce 10 4d 4f  |...Q r0,#2....MO|
00001d90  56 47 54 20 72 30 2c 23  34 32 0d 0e d8 13 53 57  |VGT r0,#42....SW|
00001da0  49 20 22 4f 53 5f 57 72  69 74 65 43 22 0d 0e e2  |I "OS_WriteC"...|
00001db0  04 0d 0e ec 33 4d 4f 56  20 72 30 2c 23 34 3a 20  |....3MOV r0,#4: |
00001dc0  4d 4f 56 20 72 31 2c 23  30 3a 53 55 42 20 72 32  |MOV r1,#0:SUB r2|
00001dd0  2c 72 34 2c 23 34 3a 53  57 49 20 22 4f 53 5f 50  |,r4,#4:SWI "OS_P|
00001de0  6c 6f 74 22 0d 0e f6 32  4d 4f 56 20 72 30 2c 23  |lot"...2MOV r0,#|
00001df0  39 37 3a 20 4d 4f 56 20  72 31 2c 72 31 31 3a 4d  |97: MOV r1,r11:M|
00001e00  4f 56 20 72 32 2c 23 34  3a 53 57 49 20 22 4f 53  |OV r2,#4:SWI "OS|
00001e10  5f 50 6c 6f 74 22 0d 0f  00 04 0d 0f 0a 0e 53 57  |_Plot"........SW|
00001e20  49 20 32 35 36 2b 31 38  0d 0f 14 0e 43 4d 50 20  |I 256+18....CMP |
00001e30  72 37 2c 23 31 36 0d 0f  1e 0c ec 51 20 72 30 2c  |r7,#16.....Q r0,|
00001e40  23 31 0d 0f 28 0f 4d 4f  56 47 54 20 72 30 2c 23  |#1..(.MOVGT r0,#|
00001e50  32 0d 0f 32 13 53 57 49  20 22 4f 53 5f 57 72 69  |2..2.SWI "OS_Wri|
00001e60  74 65 43 22 0d 0f 3c 0e  43 4d 50 20 72 37 2c 23  |teC"..<.CMP r7,#|
00001e70  31 36 0d 0f 46 0c ec 51  20 72 30 2c 23 32 0d 0f  |16..F..Q r0,#2..|
00001e80  50 10 4d 4f 56 47 54 20  72 30 2c 23 34 32 0d 0f  |P.MOVGT r0,#42..|
00001e90  5a 13 53 57 49 20 22 4f  53 5f 57 72 69 74 65 43  |Z.SWI "OS_WriteC|
00001ea0  22 0d 0f 64 04 0d 0f 6e  30 4d 4f 56 20 72 30 2c  |"..d...n0MOV r0,|
00001eb0  23 34 3a 20 4d 4f 56 20  72 31 2c 23 30 3a 4d 4f  |#4: MOV r1,#0:MO|
00001ec0  56 20 72 32 2c 72 34 3a  53 57 49 20 22 4f 53 5f  |V r2,r4:SWI "OS_|
00001ed0  50 6c 6f 74 22 0d 0f 78  32 4d 4f 56 20 72 30 2c  |Plot"..x2MOV r0,|
00001ee0  23 39 37 3a 20 4d 4f 56  20 72 31 2c 72 31 31 3a  |#97: MOV r1,r11:|
00001ef0  4d 4f 56 20 72 32 2c 23  34 3a 53 57 49 20 22 4f  |MOV r2,#4:SWI "O|
00001f00  53 5f 50 6c 6f 74 22 0d  0f 82 04 0d 0f 8c 10 41  |S_Plot"........A|
00001f10  44 44 20 72 34 2c 72 34  2c 72 35 0d 0f 96 0d 43  |DD r4,r4,r5....C|
00001f20  4d 50 20 72 34 2c 72 38  0d 0f a0 0e 42 4c 54 20  |MP r4,r8....BLT |
00001f30  79 61 67 61 69 6e 0d 0f  aa 04 0d 0f b4 0d 4d 4f  |yagain........MO|
00001f40  56 20 72 34 2c 23 30 0d  0f be 11 41 44 44 20 72  |V r4,#0....ADD r|
00001f50  38 2c 72 31 31 2c 72 35  0d 0f c8 0b 2e 78 61 67  |8,r11,r5.....xag|
00001f60  61 69 6e 0d 0f d2 04 0d  0f dc 0e 53 57 49 20 32  |ain........SWI 2|
00001f70  35 36 2b 31 38 0d 0f e6  0e 43 4d 50 20 72 37 2c  |56+18....CMP r7,|
00001f80  23 31 36 0d 0f f0 0c ec  51 20 72 30 2c 23 31 0d  |#16.....Q r0,#1.|
00001f90  0f fa 0f 4d 4f 56 47 54  20 72 30 2c 23 32 0d 10  |...MOVGT r0,#2..|
00001fa0  04 13 53 57 49 20 22 4f  53 5f 57 72 69 74 65 43  |..SWI "OS_WriteC|
00001fb0  22 0d 10 0e 0e 43 4d 50  20 72 37 2c 23 31 36 0d  |"....CMP r7,#16.|
00001fc0  10 18 0c ec 51 20 72 30  2c 23 32 0d 10 22 10 4d  |....Q r0,#2..".M|
00001fd0  4f 56 47 54 20 72 30 2c  23 34 32 0d 10 2c 13 53  |OVGT r0,#42..,.S|
00001fe0  57 49 20 22 4f 53 5f 57  72 69 74 65 43 22 0d 10  |WI "OS_WriteC"..|
00001ff0  36 04 0d 10 40 33 4d 4f  56 20 72 30 2c 23 34 3a  |6...@3MOV r0,#4:|
00002000  20 4d 4f 56 20 72 32 2c  23 30 3a 53 55 42 20 72  | MOV r2,#0:SUB r|
00002010  31 2c 72 34 2c 23 34 3a  53 57 49 20 22 4f 53 5f  |1,r4,#4:SWI "OS_|
00002020  50 6c 6f 74 22 0d 10 4a  32 4d 4f 56 20 72 30 2c  |Plot"..J2MOV r0,|
00002030  23 39 37 3a 20 4d 4f 56  20 72 32 2c 72 31 32 3a  |#97: MOV r2,r12:|
00002040  4d 4f 56 20 72 31 2c 23  34 3a 53 57 49 20 22 4f  |MOV r1,#4:SWI "O|
00002050  53 5f 50 6c 6f 74 22 0d  10 54 04 0d 10 5e 0e 53  |S_Plot"..T...^.S|
00002060  57 49 20 32 35 36 2b 31  38 0d 10 68 0e 43 4d 50  |WI 256+18..h.CMP|
00002070  20 72 37 2c 23 31 36 0d  10 72 0c ec 51 20 72 30  | r7,#16..r..Q r0|
00002080  2c 23 32 0d 10 7c 0f 4d  4f 56 47 54 20 72 30 2c  |,#2..|.MOVGT r0,|
00002090  23 31 0d 10 86 13 53 57  49 20 22 4f 53 5f 57 72  |#1....SWI "OS_Wr|
000020a0  69 74 65 43 22 0d 10 90  0e 43 4d 50 20 72 37 2c  |iteC"....CMP r7,|
000020b0  23 31 36 0d 10 9a 0c ec  51 20 72 30 2c 23 32 0d  |#16.....Q r0,#2.|
000020c0  10 a4 10 4d 4f 56 47 54  20 72 30 2c 23 34 32 0d  |...MOVGT r0,#42.|
000020d0  10 ae 13 53 57 49 20 22  4f 53 5f 57 72 69 74 65  |...SWI "OS_Write|
000020e0  43 22 0d 10 b8 04 0d 10  c2 30 4d 4f 56 20 72 30  |C".......0MOV r0|
000020f0  2c 23 34 3a 20 4d 4f 56  20 72 32 2c 23 30 3a 4d  |,#4: MOV r2,#0:M|
00002100  4f 56 20 72 31 2c 72 34  3a 53 57 49 20 22 4f 53  |OV r1,r4:SWI "OS|
00002110  5f 50 6c 6f 74 22 0d 10  cc 32 4d 4f 56 20 72 30  |_Plot"...2MOV r0|
00002120  2c 23 39 37 3a 20 4d 4f  56 20 72 32 2c 72 31 32  |,#97: MOV r2,r12|
00002130  3a 4d 4f 56 20 72 31 2c  23 34 3a 53 57 49 20 22  |:MOV r1,#4:SWI "|
00002140  4f 53 5f 50 6c 6f 74 22  0d 10 d6 04 0d 10 e0 10  |OS_Plot"........|
00002150  41 44 44 20 72 34 2c 72  34 2c 72 35 0d 10 ea 0d  |ADD r4,r4,r5....|
00002160  43 4d 50 20 72 34 2c 72  38 0d 10 f4 0e 42 4c 54  |CMP r4,r8....BLT|
00002170  20 78 61 67 61 69 6e 0d  10 fe 04 0d 11 08 17 3b  | xagain........;|
00002180  20 64 72 61 77 20 62 6c  61 63 6b 20 6c 69 6e 65  | draw black line|
00002190  73 2e 0d 11 12 04 0d 11  1c 0c 2e 64 6f 62 6c 61  |s..........dobla|
000021a0  63 6b 0d 11 26 04 0d 11  30 0e 53 57 49 20 32 35  |ck..&...0.SWI 25|
000021b0  36 2b 31 38 0d 11 3a 0d  4d 4f 56 20 72 30 2c 23  |6+18..:.MOV r0,#|
000021c0  30 0d 11 44 13 53 57 49  20 22 4f 53 5f 57 72 69  |0..D.SWI "OS_Wri|
000021d0  74 65 43 22 0d 11 4e 0f  43 4d 50 20 72 37 2c 23  |teC"..N.CMP r7,#|
000021e0  32 35 34 0d 11 58 0f 4d  4f 56 4c 54 20 72 30 2c  |254..X.MOVLT r0,|
000021f0  23 37 0d 11 62 0f 4d 4f  56 47 45 20 72 30 2c 23  |#7..b.MOVGE r0,#|
00002200  30 0d 11 6c 13 53 57 49  20 22 4f 53 5f 57 72 69  |0..l.SWI "OS_Wri|
00002210  74 65 43 22 0d 11 76 04  0d 11 80 0d 4d 4f 56 20  |teC"..v.....MOV |
00002220  72 34 2c 23 30 0d 11 8a  0c 2e 79 32 61 67 61 69  |r4,#0.....y2agai|
00002230  6e 0d 11 94 04 0d 11 9e  32 4d 4f 56 20 72 30 2c  |n.......2MOV r0,|
00002240  23 34 3a 20 4d 4f 56 20  72 31 2c 23 30 3a 20 4d  |#4: MOV r1,#0: M|
00002250  4f 56 20 72 32 2c 72 34  3a 20 53 57 49 20 22 4f  |OV r2,r4: SWI "O|
00002260  53 5f 50 6c 6f 74 22 0d  11 a8 33 4d 4f 56 20 72  |S_Plot"...3MOV r|
00002270  30 2c 23 35 3a 20 4d 4f  56 20 72 31 2c 72 31 31  |0,#5: MOV r1,r11|
00002280  3a 20 4d 4f 56 20 72 32  2c 72 34 3a 20 53 57 49  |: MOV r2,r4: SWI|
00002290  20 22 4f 53 5f 50 6c 6f  74 22 0d 11 b2 10 41 44  | "OS_Plot"....AD|
000022a0  44 20 72 34 2c 72 34 2c  72 35 0d 11 bc 0e 43 4d  |D r4,r4,r5....CM|
000022b0  50 20 72 34 2c 72 31 32  0d 11 c6 0f 42 4c 54 20  |P r4,r12....BLT |
000022c0  79 32 61 67 61 69 6e 0d  11 d0 04 0d 11 da 0d 4d  |y2again........M|
000022d0  4f 56 20 72 34 2c 23 30  0d 11 e4 0c 2e 78 32 61  |OV r4,#0.....x2a|
000022e0  67 61 69 6e 0d 11 ee 04  0d 11 f8 32 4d 4f 56 20  |gain.......2MOV |
000022f0  72 30 2c 23 34 3a 20 4d  4f 56 20 72 31 2c 72 34  |r0,#4: MOV r1,r4|
00002300  3a 20 4d 4f 56 20 72 32  2c 23 30 3a 20 53 57 49  |: MOV r2,#0: SWI|
00002310  20 22 4f 53 5f 50 6c 6f  74 22 0d 12 02 33 4d 4f  | "OS_Plot"...3MO|
00002320  56 20 72 30 2c 23 35 3a  20 4d 4f 56 20 72 31 2c  |V r0,#5: MOV r1,|
00002330  72 34 3a 20 4d 4f 56 20  72 32 2c 72 31 32 3a 20  |r4: MOV r2,r12: |
00002340  53 57 49 20 22 4f 53 5f  50 6c 6f 74 22 0d 12 0c  |SWI "OS_Plot"...|
00002350  10 41 44 44 20 72 34 2c  72 34 2c 72 35 0d 12 16  |.ADD r4,r4,r5...|
00002360  0e 43 4d 50 20 72 34 2c  72 31 31 0d 12 20 0f 42  |.CMP r4,r11.. .B|
00002370  4c 54 20 78 32 61 67 61  69 6e 0d 12 2a 04 0d 12  |LT x2again..*...|
00002380  34 04 0d 12 3e 04 0d 12  48 27 3b 20 63 61 6c 63  |4...>...H'; calc|
00002390  75 6c 61 74 65 20 61 6e  64 20 73 74 6f 72 65 20  |ulate and store |
000023a0  68 6f 6c 65 20 70 6f 73  69 74 69 6f 6e 0d 12 52  |hole position..R|
000023b0  04 0d 12 5c 14 4c 44 52  20 72 30 2c 5b 72 31 30  |...\.LDR r0,[r10|
000023c0  2c 23 31 32 5d 0d 12 66  13 4d 4f 56 20 72 30 2c  |,#12]..f.MOV r0,|
000023d0  72 30 2c 4c 53 52 23 31  0d 12 70 13 53 54 52 20  |r0,LSR#1..p.STR |
000023e0  72 30 2c 5b 72 31 30 2c  23 34 5d 0d 12 7a 04 0d  |r0,[r10,#4]..z..|
000023f0  12 84 14 4c 44 52 20 72  30 2c 5b 72 31 30 2c 23  |...LDR r0,[r10,#|
00002400  31 36 5d 0d 12 8e 13 4d  4f 56 20 72 30 2c 72 30  |16]....MOV r0,r0|
00002410  2c 4c 53 52 23 31 0d 12  98 13 53 54 52 20 72 30  |,LSR#1....STR r0|
00002420  2c 5b 72 31 30 2c 23 38  5d 0d 12 a2 04 0d 12 ac  |,[r10,#8].......|
00002430  21 3b 20 64 72 61 77 20  68 6f 6c 65 20 2d 20 62  |!; draw hole - b|
00002440  6c 61 63 6b 20 72 65 63  74 61 6e 67 6c 65 0d 12  |lack rectangle..|
00002450  b6 04 0d 12 c0 0d 4d 4f  56 20 72 30 2c 23 34 0d  |......MOV r0,#4.|
00002460  12 ca 13 4c 44 52 20 72  34 2c 5b 72 31 30 2c 23  |...LDR r4,[r10,#|
00002470  34 5d 0d 12 d4 10 4d 55  4c 20 72 31 2c 72 34 2c  |4]....MUL r1,r4,|
00002480  72 35 0d 12 de 13 4c 44  52 20 72 34 2c 5b 72 31  |r5....LDR r4,[r1|
00002490  30 2c 23 38 5d 0d 12 e8  10 4d 55 4c 20 72 32 2c  |0,#8]....MUL r2,|
000024a0  72 34 2c 72 35 0d 12 f2  11 53 57 49 20 22 4f 53  |r4,r5....SWI "OS|
000024b0  5f 50 6c 6f 74 22 0d 12  fc 0e 4d 4f 56 20 72 30  |_Plot"....MOV r0|
000024c0  2c 23 39 37 0d 13 06 0d  4d 4f 56 20 72 31 2c 72  |,#97....MOV r1,r|
000024d0  35 0d 13 10 0d 4d 4f 56  20 72 32 2c 72 35 0d 13  |5....MOV r2,r5..|
000024e0  1a 11 53 57 49 20 22 4f  53 5f 50 6c 6f 74 22 0d  |..SWI "OS_Plot".|
000024f0  13 24 04 0d 13 2e 0e 4d  4f 56 20 50 43 2c 72 31  |.$.....MOV PC,r1|
00002500  34 0d 13 38 04 0d 13 42  09 2e 76 61 72 73 0d 13  |4..8...B..vars..|
00002510  4c 17 45 51 55 44 20 30  20 3b 20 62 6c 6f 63 6b  |L.EQUD 0 ; block|
00002520  20 73 69 7a 65 0d 13 56  22 45 51 55 44 20 30 20  | size..V"EQUD 0 |
00002530  3b 20 43 75 72 72 65 6e  74 20 58 2d 70 6f 73 20  |; Current X-pos |
00002540  6f 66 20 68 6f 6c 65 0d  13 60 22 45 51 55 44 20  |of hole..`"EQUD |
00002550  30 20 3b 20 43 75 72 72  65 6e 74 20 59 2d 70 6f  |0 ; Current Y-po|
00002560  73 20 6f 66 20 68 6f 6c  65 0d 13 6a 27 45 51 55  |s of hole..j'EQU|
00002570  44 20 30 20 3b 20 4e 75  6d 62 65 72 20 6f 66 20  |D 0 ; Number of |
00002580  66 75 6c 6c 20 73 71 75  61 72 65 73 20 28 58 29  |full squares (X)|
00002590  0d 13 74 27 45 51 55 44  20 30 20 3b 20 4e 75 6d  |..t'EQUD 0 ; Num|
000025a0  62 65 72 20 6f 66 20 66  75 6c 6c 20 73 71 75 61  |ber of full squa|
000025b0  72 65 73 20 28 59 29 0d  13 7e 1e 45 51 55 44 20  |res (Y)..~.EQUD |
000025c0  30 20 3b 20 6e 75 6d 62  65 72 20 6f 66 20 63 6f  |0 ; number of co|
000025d0  6c 6f 75 72 73 0d 13 88  1c 45 51 55 44 20 30 20  |lours....EQUD 0 |
000025e0  3b 20 52 45 41 4c 20 73  74 65 70 20 76 61 6c 75  |; REAL step valu|
000025f0  65 0d 13 92 15 45 51 55  44 20 30 20 3b 20 70 6c  |e....EQUD 0 ; pl|
00002600  69 6e 74 68 20 3f 0d 13  9c 04 0d 13 a6 0d 2e 73  |inth ?.........s|
00002610  63 61 6e 72 65 67 73 0d  13 b0 3b 45 51 55 44 20  |canregs...;EQUD |
00002620  30 3a 45 51 55 44 20 30  3a 45 51 55 44 20 30 3a  |0:EQUD 0:EQUD 0:|
00002630  45 51 55 44 20 30 3a 45  51 55 44 20 30 3a 45 51  |EQUD 0:EQUD 0:EQ|
00002640  55 44 20 30 3a 45 51 55  44 20 30 3a 45 51 55 44  |UD 0:EQUD 0:EQUD|
00002650  20 30 0d 13 ba 3b 45 51  55 44 20 30 3a 45 51 55  | 0...;EQUD 0:EQU|
00002660  44 20 30 3a 45 51 55 44  20 30 3a 45 51 55 44 20  |D 0:EQUD 0:EQUD |
00002670  30 3a 45 51 55 44 20 30  3a 45 51 55 44 20 30 3a  |0:EQUD 0:EQUD 0:|
00002680  45 51 55 44 20 30 3a 45  51 55 44 20 30 0d 13 c4  |EQUD 0:EQUD 0...|
00002690  04 0d 13 ce 09 2e 72 65  67 73 0d 13 d8 3b 45 51  |......regs...;EQ|
000026a0  55 44 20 30 3a 45 51 55  44 20 30 3a 45 51 55 44  |UD 0:EQUD 0:EQUD|
000026b0  20 30 3a 45 51 55 44 20  30 3a 45 51 55 44 20 30  | 0:EQUD 0:EQUD 0|
000026c0  3a 45 51 55 44 20 30 3a  45 51 55 44 20 30 3a 45  |:EQUD 0:EQUD 0:E|
000026d0  51 55 44 20 30 0d 13 e2  3b 45 51 55 44 20 30 3a  |QUD 0...;EQUD 0:|
000026e0  45 51 55 44 20 30 3a 45  51 55 44 20 30 3a 45 51  |EQUD 0:EQUD 0:EQ|
000026f0  55 44 20 30 3a 45 51 55  44 20 30 3a 45 51 55 44  |UD 0:EQUD 0:EQUD|
00002700  20 30 3a 45 51 55 44 20  30 3a 45 51 55 44 20 30  | 0:EQUD 0:EQUD 0|
00002710  0d 13 ec 04 0d 13 f6 49  3b 2d 2d 2d 2d 2d 2d 2d  |.......I;-------|
00002720  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00002750  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 0d 14 00  |-------------...|
00002760  04 0d 14 0a 09 2e 53 63  61 6e 0d 14 14 3f 3b 20  |......Scan...?; |
00002770  6f 6e 20 72 65 74 75 72  6e 20 72 31 30 20 77 69  |on return r10 wi|
00002780  6c 6c 20 63 6f 6e 74 61  69 6e 20 31 20 3d 20 65  |ll contain 1 = e|
00002790  78 69 74 20 70 72 6f 67  2e 20 30 20 3d 20 64 6f  |xit prog. 0 = do|
000027a0  6e 27 74 20 65 78 69 74  2e 0d 14 1e 04 0d 14 28  |n't exit.......(|
000027b0  31 53 57 49 20 22 4f 53  5f 4d 6f 75 73 65 22 3a  |1SWI "OS_Mouse":|
000027c0  4d 4f 56 20 72 38 2c 72  30 3a 4d 4f 56 20 72 39  |MOV r8,r0:MOV r9|
000027d0  2c 72 31 3a 4d 4f 56 20  72 31 31 2c 72 32 0d 14  |,r1:MOV r11,r2..|
000027e0  32 4c 4d 4f 56 20 72 31  30 2c 23 30 3a 4d 4f 56  |2LMOV r10,#0:MOV|
000027f0  20 72 30 2c 23 31 32 31  3a 4d 4f 56 20 72 31 2c  | r0,#121:MOV r1,|
00002800  23 30 3a 53 57 49 20 22  4f 53 5f 42 79 74 65 22  |#0:SWI "OS_Byte"|
00002810  3a 43 4d 50 53 20 72 31  2c 23 32 35 35 3a 4d 4f  |:CMPS r1,#255:MO|
00002820  56 4e 45 20 72 31 30 2c  23 31 0d 14 3c 42 53 57  |VNE r10,#1..<BSW|
00002830  49 20 22 4f 53 5f 4d 6f  75 73 65 22 3a 43 4d 50  |I "OS_Mouse":CMP|
00002840  53 20 72 30 2c 72 38 3a  4d 4f 56 4e 45 20 72 31  |S r0,r8:MOVNE r1|
00002850  30 2c 23 31 3a 43 4d 50  53 20 72 31 2c 72 39 3a  |0,#1:CMPS r1,r9:|
00002860  4d 4f 56 4e 45 20 72 31  30 2c 23 31 0d 14 46 1d  |MOVNE r10,#1..F.|
00002870  43 4d 50 53 20 72 32 2c  72 31 31 3a 3a 4d 4f 56  |CMPS r2,r11::MOV|
00002880  4e 45 20 72 31 30 2c 23  31 0d 14 50 0e 4d 4f 56  |NE r10,#1..P.MOV|
00002890  20 50 43 2c 72 31 34 0d  14 5a 04 0d 14 64 49 3b  | PC,r14..Z...dI;|
000028a0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000028e0  2d 2d 2d 2d 0d 14 6e 04  0d 14 78 46 3b 2d 2d 2d  |----..n...xF;---|
000028f0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00002920  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 0d 14  |--------------..|
00002930  82 04 0d 14 8c 21 2e 73  68 75 74 64 6f 77 6e 20  |.....!.shutdown |
00002940  3b 20 74 68 65 20 73 68  75 74 64 6f 77 6e 20 63  |; the shutdown c|
00002950  6f 64 65 0d 14 96 04 0d  14 a0 49 3b 2d 2d 2d 2d  |ode.......I;----|
00002960  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000029a0  0d 14 aa 3c 3b 20 20 20  20 20 20 20 20 20 20 20  |...<;           |
000029b0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
000029d0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 0d 14 b4 3c  |************...<|
000029e0  3b 20 20 20 20 20 20 20  20 20 20 20 2a 2a 2a 20  |;           *** |
000029f0  20 20 20 59 4f 55 52 20  53 48 55 54 44 4f 57 4e  |   YOUR SHUTDOWN|
00002a00  20 43 4f 44 45 20 53 54  41 52 54 53 20 48 45 52  | CODE STARTS HER|
00002a10  45 20 20 20 20 2a 2a 2a  0d 14 be 3c 3b 20 20 20  |E    ***...<;   |
00002a20  20 20 20 20 20 20 20 20  2a 2a 2a 2a 2a 2a 2a 2a  |        ********|
00002a30  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00002a50  2a 2a 2a 2a 0d 14 c8 04  0d 14 d2 3a 3b 20 20 20  |****.......:;   |
00002a60  20 20 20 20 20 20 20 20  20 62 6c 61 68 21 20 62  |         blah! b|
00002a70  6c 61 68 21 20 62 6c 61  68 21 20 62 6c 61 68 21  |lah! blah! blah!|
00002a80  20 62 6c 61 68 21 20 62  6c 61 68 21 20 62 6c 61  | blah! blah! bla|
00002a90  68 21 0d 14 dc 04 0d 14  e6 3c 3b 20 20 20 20 20  |h!.......<;     |
00002aa0  20 20 20 20 20 20 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |      **********|
00002ab0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00002ad0  2a 2a 0d 14 f0 3c 3b 20  20 20 20 20 20 20 20 20  |**...<;         |
00002ae0  20 20 2a 2a 2a 20 20 20  20 20 59 4f 55 52 20 53  |  ***     YOUR S|
00002af0  48 55 54 44 4f 57 4e 20  43 4f 44 45 20 45 4e 44  |HUTDOWN CODE END|
00002b00  53 20 48 45 52 45 20 20  20 20 20 2a 2a 2a 0d 14  |S HERE     ***..|
00002b10  fa 3c 3b 20 20 20 20 20  20 20 20 20 20 20 2a 2a  |.<;           **|
00002b20  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00002b40  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 0d 15 04 49 3b 2d  |**********...I;-|
00002b50  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00002b90  2d 2d 2d 0d 15 0e 24 4d  4f 56 20 50 43 2c 72 31  |---...$MOV PC,r1|
00002ba0  34 20 3b 20 65 78 69 74  20 73 68 75 74 64 6f 77  |4 ; exit shutdow|
00002bb0  6e 20 63 6f 64 65 2e 0d  15 18 04 0d 15 22 04 0d  |n code......."..|
00002bc0  15 2c 04 0d 15 36 05 5d  0d 15 40 0a ed 20 70 61  |.,...6.]..@.. pa|
00002bd0  73 73 0d 15 4a 0e f1 20  50 25 2d 63 6f 64 65 25  |ss..J.. P%-code%|
00002be0  0d 15 54 08 41 24 3d be  0d 15 5e 05 e1 0d 15 68  |..T.A$=...^....h|
00002bf0  04 0d 15 72 0f dd 20 a4  61 64 72 28 72 2c 6c 29  |...r.. .adr(r,l)|
00002c00  0d 15 7c 09 70 25 3d 50  25 0d 15 86 0c e7 20 6c  |..|.p%=P%..... l|
00002c10  3e 70 25 20 8c 0d 15 90  05 5b 0d 15 9a 1c 41 44  |>p% .....[....AD|
00002c20  44 20 72 2c 50 43 2c 23  28 6c 2d 70 25 2d 38 29  |D r,PC,#(l-p%-8)|
00002c30  83 20 26 31 30 30 0d 15  a4 21 41 44 44 20 72 2c  |. &100...!ADD r,|
00002c40  72 2c 23 28 6c 2d 70 25  2d 38 29 20 81 20 26 31  |r,#(l-p%-8) . &1|
00002c50  30 30 3c 3c 38 3a 5d 0d  15 ae 05 cc 0d 15 b8 05  |00<<8:].........|
00002c60  5b 0d 15 c2 1c 53 55 42  20 72 2c 50 43 2c 23 28  |[....SUB r,PC,#(|
00002c70  70 25 2b 38 2d 6c 29 83  20 26 31 30 30 0d 15 cc  |p%+8-l). &100...|
00002c80  20 53 55 42 20 72 2c 72  2c 23 28 70 25 2b 38 2d  | SUB r,r,#(p%+8-|
00002c90  6c 29 81 20 26 31 30 30  3c 3c 38 3a 5d 0d 15 d6  |l). &100<<8:]...|
00002ca0  05 cd 0d 15 e0 07 3d 22  22 0d 15 ea 04 0d 15 f4  |......="".......|
00002cb0  33 f4 20 2d 20 42 41 53  49 43 20 56 45 52 53 49  |3. - BASIC VERSI|
00002cc0  4f 4e 20 57 48 49 43 48  20 57 41 53 20 54 52 41  |ON WHICH WAS TRA|
00002cd0  4e 53 4c 41 54 45 44 20  49 4e 54 4f 20 54 48 45  |NSLATED INTO THE|
00002ce0  0d 15 fe 1f f4 20 2d 20  41 42 4f 56 45 20 41 53  |..... - ABOVE AS|
00002cf0  53 45 4d 42 4c 59 20 43  4f 44 45 2e 20 3a 2d 0d  |SEMBLY CODE. :-.|
00002d00  16 08 04 0d 16 12 0a 62  77 25 3d 36 34 0d 16 1c  |.......bw%=64...|
00002d10  0b 73 74 65 70 25 3d 34  0d 16 26 04 0d 16 30 0b  |.step%=4..&...0.|
00002d20  57 25 3d 31 32 38 30 0d  16 3a 0b 48 25 3d 31 30  |W%=1280..:.H%=10|
00002d30  32 34 0d 16 44 04 0d 16  4e 13 4e 42 58 25 3d 28  |24..D...N.NBX%=(|
00002d40  57 25 2f 62 77 25 29 2d  31 0d 16 58 13 4e 42 59  |W%/bw%)-1..X.NBY|
00002d50  25 3d 28 48 25 2f 62 77  25 29 2d 31 0d 16 62 04  |%=(H%/bw%)-1..b.|
00002d60  0d 16 6c 15 e3 20 59 25  3d 31 20 b8 20 48 25 20  |..l.. Y%=1 . H% |
00002d70  88 20 62 77 25 0d 16 76  0a ec 20 30 2c 59 25 0d  |. bw%..v.. 0,Y%.|
00002d80  16 80 0b df 20 57 25 2c  59 25 0d 16 8a 08 ed 20  |.... W%,Y%..... |
00002d90  59 25 0d 16 94 15 e3 20  58 25 3d 31 20 b8 20 57  |Y%..... X%=1 . W|
00002da0  25 20 88 20 62 77 25 0d  16 9e 0a ec 20 58 25 2c  |% . bw%..... X%,|
00002db0  30 0d 16 a8 0b df 20 58  25 2c 48 25 0d 16 b2 08  |0..... X%,H%....|
00002dc0  ed 20 58 25 0d 16 bc 04  0d 16 c6 04 0d 16 d0 0e  |. X%............|
00002dd0  43 58 25 3d 4e 42 58 25  2f 32 0d 16 da 0e 43 59  |CX%=NBX%/2....CY|
00002de0  25 3d 4e 42 59 25 2f 32  0d 16 e4 04 0d 16 ee 21  |%=NBY%/2.......!|
00002df0  c8 93 20 c8 90 20 43 58  25 2a 62 77 25 2c 43 59  |.. .. CX%*bw%,CY|
00002e00  25 2a 62 77 25 2c 62 77  25 2c 62 77 25 0d 16 f8  |%*bw%,bw%,bw%...|
00002e10  04 0d 17 02 35 f4 20 2d  2d 2d 2d 2d 2d 2d 2d 2d  |....5. ---------|
00002e20  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00002e40  2d 2d 2d 2d 2d 2d 0d 17  0c 04 0d 17 16 0c 52 25  |------........R%|
00002e50  3d b3 28 57 25 29 0d 17  20 04 0d 17 2a 0f 52 25  |=.(W%).. ...*.R%|
00002e60  3d 52 25 20 80 20 25 31  31 0d 17 34 04 0d 17 3e  |=R% . %11..4...>|
00002e70  11 f4 20 52 25 3d 30 20  3e 20 74 6f 70 2e 0d 17  |.. R%=0 > top...|
00002e80  48 13 f4 20 52 25 3d 31  20 3e 20 72 69 67 68 74  |H.. R%=1 > right|
00002e90  2e 0d 17 52 14 f4 20 52  25 3d 32 20 3e 20 62 6f  |...R.. R%=2 > bo|
00002ea0  74 74 6f 6d 2e 0d 17 5c  12 f4 20 52 25 3d 33 20  |ttom...\.. R%=3 |
00002eb0  3e 20 6c 65 66 74 2e 0d  17 66 04 0d 17 70 1c e7  |> left...f...p..|
00002ec0  20 52 25 3d 30 20 80 20  43 59 25 3d 4e 42 59 25  | R%=0 . CY%=NBY%|
00002ed0  20 8c 20 52 25 3d 32 0d  17 7a 19 e7 20 52 25 3d  | . R%=2..z.. R%=|
00002ee0  32 20 80 20 43 59 25 3d  30 20 8c 20 52 25 3d 30  |2 . CY%=0 . R%=0|
00002ef0  0d 17 84 04 0d 17 8e 1c  e7 20 52 25 3d 31 20 80  |......... R%=1 .|
00002f00  20 43 58 25 3d 4e 42 58  25 20 8c 20 52 25 3d 33  | CX%=NBX% . R%=3|
00002f10  0d 17 98 19 e7 20 52 25  3d 33 20 80 20 43 58 25  |..... R%=3 . CX%|
00002f20  3d 30 20 8c 20 52 25 3d  31 0d 17 a2 04 0d 17 ac  |=0 . R%=1.......|
00002f30  0c e7 20 52 25 3d 30 20  8c 0d 17 b6 1a e3 20 79  |.. R%=0 ...... y|
00002f40  25 3d 30 20 b8 20 62 77  25 2d 31 20 88 20 73 74  |%=0 . bw%-1 . st|
00002f50  65 70 25 0d 17 c0 2d c8  99 20 22 4f 53 5f 50 6c  |ep%...-.. "OS_Pl|
00002f60  6f 74 22 2c 31 38 38 2c  43 58 25 2a 62 77 25 2c  |ot",188,CX%*bw%,|
00002f70  28 43 59 25 2a 62 77 25  29 2b 62 77 25 2d 79 25  |(CY%*bw%)+bw%-y%|
00002f80  0d 17 ca 37 c8 99 20 22  4f 53 5f 50 6c 6f 74 22  |...7.. "OS_Plot"|
00002f90  2c 31 38 38 2c 28 43 58  25 2a 62 77 25 29 2b 62  |,188,(CX%*bw%)+b|
00002fa0  77 25 2c 28 43 59 25 2a  62 77 25 29 2b 62 77 25  |w%,(CY%*bw%)+bw%|
00002fb0  2b 62 77 25 2d 79 25 0d  17 d4 33 c8 99 20 22 4f  |+bw%-y%...3.. "O|
00002fc0  53 5f 50 6c 6f 74 22 2c  31 39 30 2c 43 58 25 2a  |S_Plot",190,CX%*|
00002fd0  62 77 25 2c 28 43 59 25  2a 62 77 25 29 2b 62 77  |bw%,(CY%*bw%)+bw|
00002fe0  25 2d 79 25 2d 73 74 65  70 25 0d 17 de 36 c8 93  |%-y%-step%...6..|
00002ff0  20 c8 90 20 43 58 25 2a  62 77 25 2c 28 43 59 25  | .. CX%*bw%,(CY%|
00003000  2a 62 77 25 29 2b 62 77  25 2d 79 25 2b 62 77 25  |*bw%)+bw%-y%+bw%|
00003010  2d 73 74 65 70 25 2c 62  77 25 2c 73 74 65 70 25  |-step%,bw%,step%|
00003020  0d 17 e8 08 ed 20 79 25  0d 17 f2 0a 43 59 25 2b  |..... y%....CY%+|
00003030  3d 31 0d 17 fc 05 cd 0d  18 06 04 0d 18 10 0c e7  |=1..............|
00003040  20 52 25 3d 32 20 8c 0d  18 1a 1a e3 20 79 25 3d  | R%=2 ...... y%=|
00003050  30 20 b8 20 62 77 25 2d  31 20 88 20 73 74 65 70  |0 . bw%-1 . step|
00003060  25 0d 18 24 2d c8 99 20  22 4f 53 5f 50 6c 6f 74  |%..$-.. "OS_Plot|
00003070  22 2c 31 38 38 2c 43 58  25 2a 62 77 25 2c 28 43  |",188,CX%*bw%,(C|
00003080  59 25 2a 62 77 25 29 2d  62 77 25 2b 79 25 0d 18  |Y%*bw%)-bw%+y%..|
00003090  2e 2f c8 99 20 22 4f 53  5f 50 6c 6f 74 22 2c 31  |./.. "OS_Plot",1|
000030a0  38 38 2c 28 43 58 25 2a  62 77 25 29 2b 62 77 25  |88,(CX%*bw%)+bw%|
000030b0  2c 28 43 59 25 2a 62 77  25 29 2b 79 25 0d 18 38  |,(CY%*bw%)+y%..8|
000030c0  33 c8 99 20 22 4f 53 5f  50 6c 6f 74 22 2c 31 39  |3.. "OS_Plot",19|
000030d0  30 2c 43 58 25 2a 62 77  25 2c 28 43 59 25 2a 62  |0,CX%*bw%,(CY%*b|
000030e0  77 25 29 2d 62 77 25 2b  79 25 2b 73 74 65 70 25  |w%)-bw%+y%+step%|
000030f0  0d 18 42 2c c8 93 20 c8  90 20 43 58 25 2a 62 77  |..B,.. .. CX%*bw|
00003100  25 2c 28 43 59 25 2a 62  77 25 29 2d 62 77 25 2b  |%,(CY%*bw%)-bw%+|
00003110  79 25 2c 62 77 25 2c 73  74 65 70 25 0d 18 4c 08  |y%,bw%,step%..L.|
00003120  ed 20 79 25 0d 18 56 0a  43 59 25 2d 3d 31 0d 18  |. y%..V.CY%-=1..|
00003130  60 05 cd 0d 18 6a 04 0d  18 74 0c e7 20 52 25 3d  |`....j...t.. R%=|
00003140  31 20 8c 0d 18 7e 1a e3  20 78 25 3d 30 20 b8 20  |1 ...~.. x%=0 . |
00003150  62 77 25 2d 31 20 88 20  73 74 65 70 25 0d 18 88  |bw%-1 . step%...|
00003160  2d c8 99 20 22 4f 53 5f  50 6c 6f 74 22 2c 31 38  |-.. "OS_Plot",18|
00003170  38 2c 28 43 58 25 2a 62  77 25 29 2b 62 77 25 2d  |8,(CX%*bw%)+bw%-|
00003180  78 25 2c 43 59 25 2a 62  77 25 0d 18 92 37 c8 99  |x%,CY%*bw%...7..|
00003190  20 22 4f 53 5f 50 6c 6f  74 22 2c 31 38 38 2c 28  | "OS_Plot",188,(|
000031a0  43 58 25 2a 62 77 25 29  2b 62 77 25 2b 62 77 25  |CX%*bw%)+bw%+bw%|
000031b0  2d 78 25 2c 28 43 59 25  2a 62 77 25 29 2b 62 77  |-x%,(CY%*bw%)+bw|
000031c0  25 0d 18 9c 33 c8 99 20  22 4f 53 5f 50 6c 6f 74  |%...3.. "OS_Plot|
000031d0  22 2c 31 39 30 2c 28 43  58 25 2a 62 77 25 29 2b  |",190,(CX%*bw%)+|
000031e0  62 77 25 2d 78 25 2d 73  74 65 70 25 2c 43 59 25  |bw%-x%-step%,CY%|
000031f0  2a 62 77 25 0d 18 a6 36  c8 93 20 c8 90 20 28 43  |*bw%...6.. .. (C|
00003200  58 25 2a 62 77 25 29 2b  62 77 25 2b 62 77 25 2d  |X%*bw%)+bw%+bw%-|
00003210  78 25 2d 73 74 65 70 25  2c 43 59 25 2a 62 77 25  |x%-step%,CY%*bw%|
00003220  2c 73 74 65 70 25 2c 62  77 25 0d 18 b0 08 ed 20  |,step%,bw%..... |
00003230  78 25 0d 18 ba 0a 43 58  25 2b 3d 31 0d 18 c4 05  |x%....CX%+=1....|
00003240  cd 0d 18 ce 04 0d 18 d8  0c e7 20 52 25 3d 33 20  |.......... R%=3 |
00003250  8c 0d 18 e2 1a e3 20 78  25 3d 30 20 b8 20 62 77  |...... x%=0 . bw|
00003260  25 2d 31 20 88 20 73 74  65 70 25 0d 18 ec 2d c8  |%-1 . step%...-.|
00003270  99 20 22 4f 53 5f 50 6c  6f 74 22 2c 31 38 38 2c  |. "OS_Plot",188,|
00003280  28 43 58 25 2a 62 77 25  29 2d 62 77 25 2b 78 25  |(CX%*bw%)-bw%+x%|
00003290  2c 43 59 25 2a 62 77 25  0d 18 f6 2d c8 99 20 22  |,CY%*bw%...-.. "|
000032a0  4f 53 5f 50 6c 6f 74 22  2c 31 38 38 2c 43 58 25  |OS_Plot",188,CX%|
000032b0  2a 62 77 25 2b 78 25 2c  28 43 59 25 2a 62 77 25  |*bw%+x%,(CY%*bw%|
000032c0  29 2b 62 77 25 0d 19 00  33 c8 99 20 22 4f 53 5f  |)+bw%...3.. "OS_|
000032d0  50 6c 6f 74 22 2c 31 39  30 2c 28 43 58 25 2a 62  |Plot",190,(CX%*b|
000032e0  77 25 29 2d 62 77 25 2b  78 25 2b 73 74 65 70 25  |w%)-bw%+x%+step%|
000032f0  2c 43 59 25 2a 62 77 25  0d 19 0a 2c c8 93 20 c8  |,CY%*bw%...,.. .|
00003300  90 20 28 43 58 25 2a 62  77 25 29 2d 62 77 25 2b  |. (CX%*bw%)-bw%+|
00003310  78 25 2c 43 59 25 2a 62  77 25 2c 73 74 65 70 25  |x%,CY%*bw%,step%|
00003320  2c 62 77 25 0d 19 14 08  ed 20 78 25 0d 19 1e 0a  |,bw%..... x%....|
00003330  43 58 25 2d 3d 31 0d 19  28 05 cd 0d 19 32 04 0d  |CX%-=1..(....2..|
00003340  19 3c 0a e5 20 8d 54 56  57 0d 19 46 05 e0 0d 19  |.<.. .TVW..F....|
00003350  50 04 0d ff                                       |P...|
00003354