Home » Archimedes archive » Micro User » MU 1991-05.adf » PDStuff » Music/!DSEdit/MakeCode

Music/!DSEdit/MakeCode

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Micro User » MU 1991-05.adf » PDStuff
Filename: Music/!DSEdit/MakeCode
Read OK:
File size: 10BF bytes
Load address: 0000
Exec address: 0000
Duplicates

There are 2 duplicate copies of this file in the archive:

File contents
   10REM >$.!DSEdit.MakeCode
   20REM Assembles machine-code for DSEdit and saves in 'Code'
   30REM Jason Williams '89
   40
   50PROCassemble
   60PROCentrypoints
   70PROCsave
   80END
   90:
  100DEF PROCassemble
  110DIM code% 20*1024
  120
  130REM Register usage:
  140   REM Passed variables:
  150     gstart=0  :REM 'Get' start address (in bytes)
  160     pstart=1  :REM 'Put' start address (in bytes)
  170     length=2  :REM Length to transfer  (in bytes)
  180
  190     tostart=0 :REM Backwards transfer registers
  200     toend=1
  210     fromend=2
  220
  230     table=2   :REM Table modify registers
  240
  250     data=11   :REM Gen. Purpose data registers
  260     data2=12
  270
  280FORF%=code% TO code%+19*1024 STEP 4:!F%=0:NEXT
  290
  300FOR opt%=0 TO 2 STEP 2
  310P%=code%+256
  320[OPT opt%
  330 ; ....................................................
  340
  350.tfer                     ;Transfer a block from R0 to R1 (length R2)
  360 ADD length,length,gstart
  370.tfloop
  380 LDRB data,[gstart],#1
  390 STRB data,[pstart],#1
  400 CMP gstart,length
  410 BLE tfloop
  420 MOV PC,R14
  430
  440 ; ....................................................
  450
  460.bfer                     ; Transfer a block from R0 to R1 (length R2)
  470                          ; BUT Transfer it HIGH MEM FIRST
  480 LDRB data,[fromend],#-1
  490 STRB data,[toend],#-1
  500 CMP toend,tostart
  510 BGE bfer
  520 MOV PC,R14
  530
  540 ; ....................................................
  550
  560.tablemod                 ; Modify a block of memory using a table
  570                          ; Load byte-> Lookup in table -> Save byte
  580                          ; Modify tostart->toend from table
  590 LDRB data,[tostart]
  600 LDRB data,[table,data]
  610 STRB data,[tostart],#1
  620 CMP tostart,toend
  630 BLE tablemod
  640 MOV PC,R14
  650
  660 ; ....................................................
  670
  680.addblocks                ; Add block given by gstart,length to block
  690                          ; starting at pstart
  700 ADD  length,length,gstart
  710
  720.addloop
  730 LDRB data,[gstart],#1
  740 LDRB data2,[pstart]
  750 ADD  data,data2,data
  760 SUB data,data,#128       ; Move 'zero' value back to 128
  770 STRB data,[pstart],#1
  780 CMP gstart,length
  790 BLE addloop
  800 MOV PC,R14
  810
  820 ; ....................................................
  830
  840.addclip                  ; Add block given by gstart,length to block
  850                          ; starting at pstart, with 0/255 clipping
  860 ADD  length,length,gstart
  870
  880.cliploop
  890 LDRB data,[gstart],#1
  900 LDRB data2,[pstart]
  910 ADD data,data2,data
  920 SUB data,data,#128       ; Move 'zero' value back to 128
  930  CMP data,#0             ; Clip value to >0
  940  MOVLT data,#0
  950  CMP data,#255           ; Clip value to <255
  960  MOVGT data,#255
  970 STRB data,[pstart],#1
  980 CMP gstart,length
  990 BLE cliploop
 1000 MOV PC,R14
 1010
 1020 ; ....................................................
 1030
 1040.avgblocks                ; Add block given by gstart,length to block
 1050                          ; starting at pstart
 1060 ADD  length,length,gstart
 1070
 1080.avgloop
 1090 LDRB data,[gstart],#1
 1100 LDRB data2,[pstart]
 1110 ADD  data,data2,data
 1120 MOV data,data,ASR#1      ; Average the two values -----
 1130 STRB data,[pstart],#1
 1140 CMP gstart,length
 1150 BLE avgloop
 1160 MOV PC,R14
 1170
 1180 ; ....................................................
 1190
 1200.avgclip                  ; Add block given by gstart,length to block
 1210                          ; starting at pstart, with 0/255 clipping
 1220 ADD  length,length,gstart
 1230
 1240.acliploop
 1250 LDRB data,[gstart],#1
 1260 LDRB data2,[pstart]
 1270 ADD data,data2,data
 1280 MOV data,data,ASR#1      ; Average the two values -----
 1290  CMP data,#0             ; Clip value to >0
 1300  MOVLT data,#0
 1310  CMP data,#255           ; Clip value to <255
 1320  MOVGT data,#255
 1330 STRB data,[pstart],#1
 1340 CMP gstart,length
 1350 BLE acliploop
 1360 MOV PC,R14
 1370
 1380 EQUD 0
 1390 EQUD 0
 1400 EQUD 0
 1410 EQUS "Copyright '89   Jason Williams"  ; Lines up beautifully into 3rd 256-byte block
 1420]
 1430NEXT
 1440ENDPROC
 1450:
 1460DEF PROCentrypoints
 1470code%!0 =tfer-code%
 1480code%!4 =bfer-code%
 1490code%!8 =tablemod-code%
 1500code%!12=addblocks-code%
 1510code%!16=addclip-code%
 1520code%!20=avgblocks-code%
 1530code%!24=avgclip-code%
 1540
 1550REM Add any new entry-points in here
 1560
 1570ENDPROC
 1580:
 1590DEF PROCsave
 1600OSCLI("SAVE $.!DSEdit.Code "+STR$~code%+" "+STR$~P%)
 1610ENDPROC

� >$.!DSEdit.MakeCode
;� Assembles machine-code for DSEdit and saves in 'Code'
� Jason Williams '89
(
2
�assemble
<�entrypoints
F	�save
P�
Z:
d� �assemble
n� code% 20*1024
x
�� Register usage:
�   � Passed variables:
�4     gstart=0  :� 'Get' start address (in bytes)
�4     pstart=1  :� 'Put' start address (in bytes)
�4     length=2  :� Length to transfer  (in bytes)
�
�2     tostart=0 :� Backwards transfer registers
�     toend=1
�     fromend=2
�
�,     table=2   :� Table modify registers
�
�1     data=11   :� Gen. Purpose data registers
     data2=12

)�F%=code% � code%+19*1024 � 4:!F%=0:�
"
,� opt%=0 � 2 � 2
6P%=code%+256
@
[OPT opt%
J; ; ....................................................
T
^I.tfer                     ;Transfer a block from R0 to R1 (length R2)
h ADD length,length,gstart
r.tfloop
| LDRB data,[gstart],#1
� STRB data,[pstart],#1
� CMP gstart,length
� BLE tfloop
� MOV PC,R14
�
�; ; ....................................................
�
�J.bfer                     ; Transfer a block from R0 to R1 (length R2)
�>                          ; BUT Transfer it HIGH MEM FIRST
� LDRB data,[fromend],#-1
� STRB data,[toend],#-1
� CMP toend,tostart
�
 BGE bfer
 MOV PC,R14

; ; ....................................................
&
0F.tablemod                 ; Modify a block of memory using a table
:H                          ; Load byte-> Lookup in table -> Save byte
D@                          ; Modify tostart->toend from table
N LDRB data,[tostart]
X LDRB data,[table,data]
b STRB data,[tostart],#1
l CMP tostart,toend
v BLE tablemod
� MOV PC,R14
�
�; ; ....................................................
�
�I.addblocks                ; Add block given by gstart,length to block
�2                          ; starting at pstart
� ADD  length,length,gstart
�
�.addloop
� LDRB data,[gstart],#1
� LDRB data2,[pstart]
� ADD  data,data2,data
�= SUB data,data,#128       ; Move 'zero' value back to 128
 STRB data,[pstart],#1
 CMP gstart,length
 BLE addloop
  MOV PC,R14
*
4; ; ....................................................
>
HI.addclip                  ; Add block given by gstart,length to block
RG                          ; starting at pstart, with 0/255 clipping
\ ADD  length,length,gstart
f
p
.cliploop
z LDRB data,[gstart],#1
� LDRB data2,[pstart]
� ADD data,data2,data
�= SUB data,data,#128       ; Move 'zero' value back to 128
�0  CMP data,#0             ; Clip value to >0
�  MOVLT data,#0
�2  CMP data,#255           ; Clip value to <255
�  MOVGT data,#255
� STRB data,[pstart],#1
� CMP gstart,length
� BLE cliploop
� MOV PC,R14
�
�; ; ....................................................

I.avgblocks                ; Add block given by gstart,length to block
2                          ; starting at pstart
$ ADD  length,length,gstart
.
8.avgloop
B LDRB data,[gstart],#1
L LDRB data2,[pstart]
V ADD  data,data2,data
`< MOV data,data,ASR#1      ; Average the two values -----
j STRB data,[pstart],#1
t CMP gstart,length
~ BLE avgloop
� MOV PC,R14
�
�; ; ....................................................
�
�I.avgclip                  ; Add block given by gstart,length to block
�G                          ; starting at pstart, with 0/255 clipping
� ADD  length,length,gstart
�
�.acliploop
� LDRB data,[gstart],#1
� LDRB data2,[pstart]
� ADD data,data2,data
< MOV data,data,ASR#1      ; Average the two values -----

0  CMP data,#0             ; Clip value to >0
  MOVLT data,#0
2  CMP data,#255           ; Clip value to <255
(  MOVGT data,#255
2 STRB data,[pstart],#1
< CMP gstart,length
F BLE acliploop
P MOV PC,R14
Z
d EQUD 0
n EQUD 0
x EQUD 0
�Z EQUS "Copyright '89   Jason Williams"  ; Lines up beautifully into 3rd 256-byte block
�]
��
��
�:
�� �entrypoints
�code%!0 =tfer-code%
�code%!4 =bfer-code%
�code%!8 =tablemod-code%
�code%!12=addblocks-code%
�code%!16=addclip-code%
�code%!20=avgblocks-code%
�code%!24=avgclip-code%

&� Add any new entry-points in here

"�
,:
6� �save
@.�("SAVE $.!DSEdit.Code "+�~code%+" "+�~P%)
J�
�
00000000  0d 00 0a 19 f4 20 3e 24  2e 21 44 53 45 64 69 74  |..... >$.!DSEdit|
00000010  2e 4d 61 6b 65 43 6f 64  65 0d 00 14 3b f4 20 41  |.MakeCode...;. A|
00000020  73 73 65 6d 62 6c 65 73  20 6d 61 63 68 69 6e 65  |ssembles machine|
00000030  2d 63 6f 64 65 20 66 6f  72 20 44 53 45 64 69 74  |-code for DSEdit|
00000040  20 61 6e 64 20 73 61 76  65 73 20 69 6e 20 27 43  | and saves in 'C|
00000050  6f 64 65 27 0d 00 1e 18  f4 20 4a 61 73 6f 6e 20  |ode'..... Jason |
00000060  57 69 6c 6c 69 61 6d 73  20 27 38 39 0d 00 28 04  |Williams '89..(.|
00000070  0d 00 32 0d f2 61 73 73  65 6d 62 6c 65 0d 00 3c  |..2..assemble..<|
00000080  10 f2 65 6e 74 72 79 70  6f 69 6e 74 73 0d 00 46  |..entrypoints..F|
00000090  09 f2 73 61 76 65 0d 00  50 05 e0 0d 00 5a 05 3a  |..save..P....Z.:|
000000a0  0d 00 64 0f dd 20 f2 61  73 73 65 6d 62 6c 65 0d  |..d.. .assemble.|
000000b0  00 6e 13 de 20 63 6f 64  65 25 20 32 30 2a 31 30  |.n.. code% 20*10|
000000c0  32 34 0d 00 78 04 0d 00  82 15 f4 20 52 65 67 69  |24..x...... Regi|
000000d0  73 74 65 72 20 75 73 61  67 65 3a 0d 00 8c 1a 20  |ster usage:.... |
000000e0  20 20 f4 20 50 61 73 73  65 64 20 76 61 72 69 61  |  . Passed varia|
000000f0  62 6c 65 73 3a 0d 00 96  34 20 20 20 20 20 67 73  |bles:...4     gs|
00000100  74 61 72 74 3d 30 20 20  3a f4 20 27 47 65 74 27  |tart=0  :. 'Get'|
00000110  20 73 74 61 72 74 20 61  64 64 72 65 73 73 20 28  | start address (|
00000120  69 6e 20 62 79 74 65 73  29 0d 00 a0 34 20 20 20  |in bytes)...4   |
00000130  20 20 70 73 74 61 72 74  3d 31 20 20 3a f4 20 27  |  pstart=1  :. '|
00000140  50 75 74 27 20 73 74 61  72 74 20 61 64 64 72 65  |Put' start addre|
00000150  73 73 20 28 69 6e 20 62  79 74 65 73 29 0d 00 aa  |ss (in bytes)...|
00000160  34 20 20 20 20 20 6c 65  6e 67 74 68 3d 32 20 20  |4     length=2  |
00000170  3a f4 20 4c 65 6e 67 74  68 20 74 6f 20 74 72 61  |:. Length to tra|
00000180  6e 73 66 65 72 20 20 28  69 6e 20 62 79 74 65 73  |nsfer  (in bytes|
00000190  29 0d 00 b4 04 0d 00 be  32 20 20 20 20 20 74 6f  |).......2     to|
000001a0  73 74 61 72 74 3d 30 20  3a f4 20 42 61 63 6b 77  |start=0 :. Backw|
000001b0  61 72 64 73 20 74 72 61  6e 73 66 65 72 20 72 65  |ards transfer re|
000001c0  67 69 73 74 65 72 73 0d  00 c8 10 20 20 20 20 20  |gisters....     |
000001d0  74 6f 65 6e 64 3d 31 0d  00 d2 12 20 20 20 20 20  |toend=1....     |
000001e0  66 72 6f 6d 65 6e 64 3d  32 0d 00 dc 04 0d 00 e6  |fromend=2.......|
000001f0  2c 20 20 20 20 20 74 61  62 6c 65 3d 32 20 20 20  |,     table=2   |
00000200  3a f4 20 54 61 62 6c 65  20 6d 6f 64 69 66 79 20  |:. Table modify |
00000210  72 65 67 69 73 74 65 72  73 0d 00 f0 04 0d 00 fa  |registers.......|
00000220  31 20 20 20 20 20 64 61  74 61 3d 31 31 20 20 20  |1     data=11   |
00000230  3a f4 20 47 65 6e 2e 20  50 75 72 70 6f 73 65 20  |:. Gen. Purpose |
00000240  64 61 74 61 20 72 65 67  69 73 74 65 72 73 0d 01  |data registers..|
00000250  04 11 20 20 20 20 20 64  61 74 61 32 3d 31 32 0d  |..     data2=12.|
00000260  01 0e 04 0d 01 18 29 e3  46 25 3d 63 6f 64 65 25  |......).F%=code%|
00000270  20 b8 20 63 6f 64 65 25  2b 31 39 2a 31 30 32 34  | . code%+19*1024|
00000280  20 88 20 34 3a 21 46 25  3d 30 3a ed 0d 01 22 04  | . 4:!F%=0:...".|
00000290  0d 01 2c 14 e3 20 6f 70  74 25 3d 30 20 b8 20 32  |..,.. opt%=0 . 2|
000002a0  20 88 20 32 0d 01 36 10  50 25 3d 63 6f 64 65 25  | . 2..6.P%=code%|
000002b0  2b 32 35 36 0d 01 40 0d  5b 4f 50 54 20 6f 70 74  |+256..@.[OPT opt|
000002c0  25 0d 01 4a 3b 20 3b 20  2e 2e 2e 2e 2e 2e 2e 2e  |%..J; ; ........|
000002d0  2e 2e 2e 2e 2e 2e 2e 2e  2e 2e 2e 2e 2e 2e 2e 2e  |................|
*
000002f0  2e 2e 2e 2e 2e 2e 2e 2e  2e 2e 2e 2e 0d 01 54 04  |..............T.|
00000300  0d 01 5e 49 2e 74 66 65  72 20 20 20 20 20 20 20  |..^I.tfer       |
00000310  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 54  |              ;T|
00000320  72 61 6e 73 66 65 72 20  61 20 62 6c 6f 63 6b 20  |ransfer a block |
00000330  66 72 6f 6d 20 52 30 20  74 6f 20 52 31 20 28 6c  |from R0 to R1 (l|
00000340  65 6e 67 74 68 20 52 32  29 0d 01 68 1d 20 41 44  |ength R2)..h. AD|
00000350  44 20 6c 65 6e 67 74 68  2c 6c 65 6e 67 74 68 2c  |D length,length,|
00000360  67 73 74 61 72 74 0d 01  72 0b 2e 74 66 6c 6f 6f  |gstart..r..tfloo|
00000370  70 0d 01 7c 1a 20 4c 44  52 42 20 64 61 74 61 2c  |p..|. LDRB data,|
00000380  5b 67 73 74 61 72 74 5d  2c 23 31 0d 01 86 1a 20  |[gstart],#1.... |
00000390  53 54 52 42 20 64 61 74  61 2c 5b 70 73 74 61 72  |STRB data,[pstar|
000003a0  74 5d 2c 23 31 0d 01 90  16 20 43 4d 50 20 67 73  |t],#1.... CMP gs|
000003b0  74 61 72 74 2c 6c 65 6e  67 74 68 0d 01 9a 0f 20  |tart,length.... |
000003c0  42 4c 45 20 74 66 6c 6f  6f 70 0d 01 a4 0f 20 4d  |BLE tfloop.... M|
000003d0  4f 56 20 50 43 2c 52 31  34 0d 01 ae 04 0d 01 b8  |OV PC,R14.......|
000003e0  3b 20 3b 20 2e 2e 2e 2e  2e 2e 2e 2e 2e 2e 2e 2e  |; ; ............|
000003f0  2e 2e 2e 2e 2e 2e 2e 2e  2e 2e 2e 2e 2e 2e 2e 2e  |................|
*
00000410  2e 2e 2e 2e 2e 2e 2e 2e  0d 01 c2 04 0d 01 cc 4a  |...............J|
00000420  2e 62 66 65 72 20 20 20  20 20 20 20 20 20 20 20  |.bfer           |
00000430  20 20 20 20 20 20 20 20  20 20 3b 20 54 72 61 6e  |          ; Tran|
00000440  73 66 65 72 20 61 20 62  6c 6f 63 6b 20 66 72 6f  |sfer a block fro|
00000450  6d 20 52 30 20 74 6f 20  52 31 20 28 6c 65 6e 67  |m R0 to R1 (leng|
00000460  74 68 20 52 32 29 0d 01  d6 3e 20 20 20 20 20 20  |th R2)...>      |
00000470  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000480  20 20 20 20 3b 20 42 55  54 20 54 72 61 6e 73 66  |    ; BUT Transf|
00000490  65 72 20 69 74 20 48 49  47 48 20 4d 45 4d 20 46  |er it HIGH MEM F|
000004a0  49 52 53 54 0d 01 e0 1c  20 4c 44 52 42 20 64 61  |IRST.... LDRB da|
000004b0  74 61 2c 5b 66 72 6f 6d  65 6e 64 5d 2c 23 2d 31  |ta,[fromend],#-1|
000004c0  0d 01 ea 1a 20 53 54 52  42 20 64 61 74 61 2c 5b  |.... STRB data,[|
000004d0  74 6f 65 6e 64 5d 2c 23  2d 31 0d 01 f4 16 20 43  |toend],#-1.... C|
000004e0  4d 50 20 74 6f 65 6e 64  2c 74 6f 73 74 61 72 74  |MP toend,tostart|
000004f0  0d 01 fe 0d 20 42 47 45  20 62 66 65 72 0d 02 08  |.... BGE bfer...|
00000500  0f 20 4d 4f 56 20 50 43  2c 52 31 34 0d 02 12 04  |. MOV PC,R14....|
00000510  0d 02 1c 3b 20 3b 20 2e  2e 2e 2e 2e 2e 2e 2e 2e  |...; ; .........|
00000520  2e 2e 2e 2e 2e 2e 2e 2e  2e 2e 2e 2e 2e 2e 2e 2e  |................|
*
00000540  2e 2e 2e 2e 2e 2e 2e 2e  2e 2e 2e 0d 02 26 04 0d  |.............&..|
00000550  02 30 46 2e 74 61 62 6c  65 6d 6f 64 20 20 20 20  |.0F.tablemod    |
00000560  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 4d  |             ; M|
00000570  6f 64 69 66 79 20 61 20  62 6c 6f 63 6b 20 6f 66  |odify a block of|
00000580  20 6d 65 6d 6f 72 79 20  75 73 69 6e 67 20 61 20  | memory using a |
00000590  74 61 62 6c 65 0d 02 3a  48 20 20 20 20 20 20 20  |table..:H       |
000005a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000005b0  20 20 20 3b 20 4c 6f 61  64 20 62 79 74 65 2d 3e  |   ; Load byte->|
000005c0  20 4c 6f 6f 6b 75 70 20  69 6e 20 74 61 62 6c 65  | Lookup in table|
000005d0  20 2d 3e 20 53 61 76 65  20 62 79 74 65 0d 02 44  | -> Save byte..D|
000005e0  40 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |@               |
000005f0  20 20 20 20 20 20 20 20  20 20 20 3b 20 4d 6f 64  |           ; Mod|
00000600  69 66 79 20 74 6f 73 74  61 72 74 2d 3e 74 6f 65  |ify tostart->toe|
00000610  6e 64 20 66 72 6f 6d 20  74 61 62 6c 65 0d 02 4e  |nd from table..N|
00000620  18 20 4c 44 52 42 20 64  61 74 61 2c 5b 74 6f 73  |. LDRB data,[tos|
00000630  74 61 72 74 5d 0d 02 58  1b 20 4c 44 52 42 20 64  |tart]..X. LDRB d|
00000640  61 74 61 2c 5b 74 61 62  6c 65 2c 64 61 74 61 5d  |ata,[table,data]|
00000650  0d 02 62 1b 20 53 54 52  42 20 64 61 74 61 2c 5b  |..b. STRB data,[|
00000660  74 6f 73 74 61 72 74 5d  2c 23 31 0d 02 6c 16 20  |tostart],#1..l. |
00000670  43 4d 50 20 74 6f 73 74  61 72 74 2c 74 6f 65 6e  |CMP tostart,toen|
00000680  64 0d 02 76 11 20 42 4c  45 20 74 61 62 6c 65 6d  |d..v. BLE tablem|
00000690  6f 64 0d 02 80 0f 20 4d  4f 56 20 50 43 2c 52 31  |od.... MOV PC,R1|
000006a0  34 0d 02 8a 04 0d 02 94  3b 20 3b 20 2e 2e 2e 2e  |4.......; ; ....|
000006b0  2e 2e 2e 2e 2e 2e 2e 2e  2e 2e 2e 2e 2e 2e 2e 2e  |................|
*
000006e0  0d 02 9e 04 0d 02 a8 49  2e 61 64 64 62 6c 6f 63  |.......I.addbloc|
000006f0  6b 73 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |ks              |
00000700  20 20 3b 20 41 64 64 20  62 6c 6f 63 6b 20 67 69  |  ; Add block gi|
00000710  76 65 6e 20 62 79 20 67  73 74 61 72 74 2c 6c 65  |ven by gstart,le|
00000720  6e 67 74 68 20 74 6f 20  62 6c 6f 63 6b 0d 02 b2  |ngth to block...|
00000730  32 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |2               |
00000740  20 20 20 20 20 20 20 20  20 20 20 3b 20 73 74 61  |           ; sta|
00000750  72 74 69 6e 67 20 61 74  20 70 73 74 61 72 74 0d  |rting at pstart.|
00000760  02 bc 1e 20 41 44 44 20  20 6c 65 6e 67 74 68 2c  |... ADD  length,|
00000770  6c 65 6e 67 74 68 2c 67  73 74 61 72 74 0d 02 c6  |length,gstart...|
00000780  04 0d 02 d0 0c 2e 61 64  64 6c 6f 6f 70 0d 02 da  |......addloop...|
00000790  1a 20 4c 44 52 42 20 64  61 74 61 2c 5b 67 73 74  |. LDRB data,[gst|
000007a0  61 72 74 5d 2c 23 31 0d  02 e4 18 20 4c 44 52 42  |art],#1.... LDRB|
000007b0  20 64 61 74 61 32 2c 5b  70 73 74 61 72 74 5d 0d  | data2,[pstart].|
000007c0  02 ee 19 20 41 44 44 20  20 64 61 74 61 2c 64 61  |... ADD  data,da|
000007d0  74 61 32 2c 64 61 74 61  0d 02 f8 3d 20 53 55 42  |ta2,data...= SUB|
000007e0  20 64 61 74 61 2c 64 61  74 61 2c 23 31 32 38 20  | data,data,#128 |
000007f0  20 20 20 20 20 20 3b 20  4d 6f 76 65 20 27 7a 65  |      ; Move 'ze|
00000800  72 6f 27 20 76 61 6c 75  65 20 62 61 63 6b 20 74  |ro' value back t|
00000810  6f 20 31 32 38 0d 03 02  1a 20 53 54 52 42 20 64  |o 128.... STRB d|
00000820  61 74 61 2c 5b 70 73 74  61 72 74 5d 2c 23 31 0d  |ata,[pstart],#1.|
00000830  03 0c 16 20 43 4d 50 20  67 73 74 61 72 74 2c 6c  |... CMP gstart,l|
00000840  65 6e 67 74 68 0d 03 16  10 20 42 4c 45 20 61 64  |ength.... BLE ad|
00000850  64 6c 6f 6f 70 0d 03 20  0f 20 4d 4f 56 20 50 43  |dloop.. . MOV PC|
00000860  2c 52 31 34 0d 03 2a 04  0d 03 34 3b 20 3b 20 2e  |,R14..*...4; ; .|
00000870  2e 2e 2e 2e 2e 2e 2e 2e  2e 2e 2e 2e 2e 2e 2e 2e  |................|
*
000008a0  2e 2e 2e 0d 03 3e 04 0d  03 48 49 2e 61 64 64 63  |.....>...HI.addc|
000008b0  6c 69 70 20 20 20 20 20  20 20 20 20 20 20 20 20  |lip             |
000008c0  20 20 20 20 20 3b 20 41  64 64 20 62 6c 6f 63 6b  |     ; Add block|
000008d0  20 67 69 76 65 6e 20 62  79 20 67 73 74 61 72 74  | given by gstart|
000008e0  2c 6c 65 6e 67 74 68 20  74 6f 20 62 6c 6f 63 6b  |,length to block|
000008f0  0d 03 52 47 20 20 20 20  20 20 20 20 20 20 20 20  |..RG            |
00000900  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00000910  73 74 61 72 74 69 6e 67  20 61 74 20 70 73 74 61  |starting at psta|
00000920  72 74 2c 20 77 69 74 68  20 30 2f 32 35 35 20 63  |rt, with 0/255 c|
00000930  6c 69 70 70 69 6e 67 0d  03 5c 1e 20 41 44 44 20  |lipping..\. ADD |
00000940  20 6c 65 6e 67 74 68 2c  6c 65 6e 67 74 68 2c 67  | length,length,g|
00000950  73 74 61 72 74 0d 03 66  04 0d 03 70 0d 2e 63 6c  |start..f...p..cl|
00000960  69 70 6c 6f 6f 70 0d 03  7a 1a 20 4c 44 52 42 20  |iploop..z. LDRB |
00000970  64 61 74 61 2c 5b 67 73  74 61 72 74 5d 2c 23 31  |data,[gstart],#1|
00000980  0d 03 84 18 20 4c 44 52  42 20 64 61 74 61 32 2c  |.... LDRB data2,|
00000990  5b 70 73 74 61 72 74 5d  0d 03 8e 18 20 41 44 44  |[pstart].... ADD|
000009a0  20 64 61 74 61 2c 64 61  74 61 32 2c 64 61 74 61  | data,data2,data|
000009b0  0d 03 98 3d 20 53 55 42  20 64 61 74 61 2c 64 61  |...= SUB data,da|
000009c0  74 61 2c 23 31 32 38 20  20 20 20 20 20 20 3b 20  |ta,#128       ; |
000009d0  4d 6f 76 65 20 27 7a 65  72 6f 27 20 76 61 6c 75  |Move 'zero' valu|
000009e0  65 20 62 61 63 6b 20 74  6f 20 31 32 38 0d 03 a2  |e back to 128...|
000009f0  30 20 20 43 4d 50 20 64  61 74 61 2c 23 30 20 20  |0  CMP data,#0  |
00000a00  20 20 20 20 20 20 20 20  20 20 20 3b 20 43 6c 69  |           ; Cli|
00000a10  70 20 76 61 6c 75 65 20  74 6f 20 3e 30 0d 03 ac  |p value to >0...|
00000a20  13 20 20 4d 4f 56 4c 54  20 64 61 74 61 2c 23 30  |.  MOVLT data,#0|
00000a30  0d 03 b6 32 20 20 43 4d  50 20 64 61 74 61 2c 23  |...2  CMP data,#|
00000a40  32 35 35 20 20 20 20 20  20 20 20 20 20 20 3b 20  |255           ; |
00000a50  43 6c 69 70 20 76 61 6c  75 65 20 74 6f 20 3c 32  |Clip value to <2|
00000a60  35 35 0d 03 c0 15 20 20  4d 4f 56 47 54 20 64 61  |55....  MOVGT da|
00000a70  74 61 2c 23 32 35 35 0d  03 ca 1a 20 53 54 52 42  |ta,#255.... STRB|
00000a80  20 64 61 74 61 2c 5b 70  73 74 61 72 74 5d 2c 23  | data,[pstart],#|
00000a90  31 0d 03 d4 16 20 43 4d  50 20 67 73 74 61 72 74  |1.... CMP gstart|
00000aa0  2c 6c 65 6e 67 74 68 0d  03 de 11 20 42 4c 45 20  |,length.... BLE |
00000ab0  63 6c 69 70 6c 6f 6f 70  0d 03 e8 0f 20 4d 4f 56  |cliploop.... MOV|
00000ac0  20 50 43 2c 52 31 34 0d  03 f2 04 0d 03 fc 3b 20  | PC,R14.......; |
00000ad0  3b 20 2e 2e 2e 2e 2e 2e  2e 2e 2e 2e 2e 2e 2e 2e  |; ..............|
00000ae0  2e 2e 2e 2e 2e 2e 2e 2e  2e 2e 2e 2e 2e 2e 2e 2e  |................|
*
00000b00  2e 2e 2e 2e 2e 2e 0d 04  06 04 0d 04 10 49 2e 61  |.............I.a|
00000b10  76 67 62 6c 6f 63 6b 73  20 20 20 20 20 20 20 20  |vgblocks        |
00000b20  20 20 20 20 20 20 20 20  3b 20 41 64 64 20 62 6c  |        ; Add bl|
00000b30  6f 63 6b 20 67 69 76 65  6e 20 62 79 20 67 73 74  |ock given by gst|
00000b40  61 72 74 2c 6c 65 6e 67  74 68 20 74 6f 20 62 6c  |art,length to bl|
00000b50  6f 63 6b 0d 04 1a 32 20  20 20 20 20 20 20 20 20  |ock...2         |
00000b60  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000b70  20 3b 20 73 74 61 72 74  69 6e 67 20 61 74 20 70  | ; starting at p|
00000b80  73 74 61 72 74 0d 04 24  1e 20 41 44 44 20 20 6c  |start..$. ADD  l|
00000b90  65 6e 67 74 68 2c 6c 65  6e 67 74 68 2c 67 73 74  |ength,length,gst|
00000ba0  61 72 74 0d 04 2e 04 0d  04 38 0c 2e 61 76 67 6c  |art......8..avgl|
00000bb0  6f 6f 70 0d 04 42 1a 20  4c 44 52 42 20 64 61 74  |oop..B. LDRB dat|
00000bc0  61 2c 5b 67 73 74 61 72  74 5d 2c 23 31 0d 04 4c  |a,[gstart],#1..L|
00000bd0  18 20 4c 44 52 42 20 64  61 74 61 32 2c 5b 70 73  |. LDRB data2,[ps|
00000be0  74 61 72 74 5d 0d 04 56  19 20 41 44 44 20 20 64  |tart]..V. ADD  d|
00000bf0  61 74 61 2c 64 61 74 61  32 2c 64 61 74 61 0d 04  |ata,data2,data..|
00000c00  60 3c 20 4d 4f 56 20 64  61 74 61 2c 64 61 74 61  |`< MOV data,data|
00000c10  2c 41 53 52 23 31 20 20  20 20 20 20 3b 20 41 76  |,ASR#1      ; Av|
00000c20  65 72 61 67 65 20 74 68  65 20 74 77 6f 20 76 61  |erage the two va|
00000c30  6c 75 65 73 20 2d 2d 2d  2d 2d 0d 04 6a 1a 20 53  |lues -----..j. S|
00000c40  54 52 42 20 64 61 74 61  2c 5b 70 73 74 61 72 74  |TRB data,[pstart|
00000c50  5d 2c 23 31 0d 04 74 16  20 43 4d 50 20 67 73 74  |],#1..t. CMP gst|
00000c60  61 72 74 2c 6c 65 6e 67  74 68 0d 04 7e 10 20 42  |art,length..~. B|
00000c70  4c 45 20 61 76 67 6c 6f  6f 70 0d 04 88 0f 20 4d  |LE avgloop.... M|
00000c80  4f 56 20 50 43 2c 52 31  34 0d 04 92 04 0d 04 9c  |OV PC,R14.......|
00000c90  3b 20 3b 20 2e 2e 2e 2e  2e 2e 2e 2e 2e 2e 2e 2e  |; ; ............|
00000ca0  2e 2e 2e 2e 2e 2e 2e 2e  2e 2e 2e 2e 2e 2e 2e 2e  |................|
*
00000cc0  2e 2e 2e 2e 2e 2e 2e 2e  0d 04 a6 04 0d 04 b0 49  |...............I|
00000cd0  2e 61 76 67 63 6c 69 70  20 20 20 20 20 20 20 20  |.avgclip        |
00000ce0  20 20 20 20 20 20 20 20  20 20 3b 20 41 64 64 20  |          ; Add |
00000cf0  62 6c 6f 63 6b 20 67 69  76 65 6e 20 62 79 20 67  |block given by g|
00000d00  73 74 61 72 74 2c 6c 65  6e 67 74 68 20 74 6f 20  |start,length to |
00000d10  62 6c 6f 63 6b 0d 04 ba  47 20 20 20 20 20 20 20  |block...G       |
00000d20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000d30  20 20 20 3b 20 73 74 61  72 74 69 6e 67 20 61 74  |   ; starting at|
00000d40  20 70 73 74 61 72 74 2c  20 77 69 74 68 20 30 2f  | pstart, with 0/|
00000d50  32 35 35 20 63 6c 69 70  70 69 6e 67 0d 04 c4 1e  |255 clipping....|
00000d60  20 41 44 44 20 20 6c 65  6e 67 74 68 2c 6c 65 6e  | ADD  length,len|
00000d70  67 74 68 2c 67 73 74 61  72 74 0d 04 ce 04 0d 04  |gth,gstart......|
00000d80  d8 0e 2e 61 63 6c 69 70  6c 6f 6f 70 0d 04 e2 1a  |...acliploop....|
00000d90  20 4c 44 52 42 20 64 61  74 61 2c 5b 67 73 74 61  | LDRB data,[gsta|
00000da0  72 74 5d 2c 23 31 0d 04  ec 18 20 4c 44 52 42 20  |rt],#1.... LDRB |
00000db0  64 61 74 61 32 2c 5b 70  73 74 61 72 74 5d 0d 04  |data2,[pstart]..|
00000dc0  f6 18 20 41 44 44 20 64  61 74 61 2c 64 61 74 61  |.. ADD data,data|
00000dd0  32 2c 64 61 74 61 0d 05  00 3c 20 4d 4f 56 20 64  |2,data...< MOV d|
00000de0  61 74 61 2c 64 61 74 61  2c 41 53 52 23 31 20 20  |ata,data,ASR#1  |
00000df0  20 20 20 20 3b 20 41 76  65 72 61 67 65 20 74 68  |    ; Average th|
00000e00  65 20 74 77 6f 20 76 61  6c 75 65 73 20 2d 2d 2d  |e two values ---|
00000e10  2d 2d 0d 05 0a 30 20 20  43 4d 50 20 64 61 74 61  |--...0  CMP data|
00000e20  2c 23 30 20 20 20 20 20  20 20 20 20 20 20 20 20  |,#0             |
00000e30  3b 20 43 6c 69 70 20 76  61 6c 75 65 20 74 6f 20  |; Clip value to |
00000e40  3e 30 0d 05 14 13 20 20  4d 4f 56 4c 54 20 64 61  |>0....  MOVLT da|
00000e50  74 61 2c 23 30 0d 05 1e  32 20 20 43 4d 50 20 64  |ta,#0...2  CMP d|
00000e60  61 74 61 2c 23 32 35 35  20 20 20 20 20 20 20 20  |ata,#255        |
00000e70  20 20 20 3b 20 43 6c 69  70 20 76 61 6c 75 65 20  |   ; Clip value |
00000e80  74 6f 20 3c 32 35 35 0d  05 28 15 20 20 4d 4f 56  |to <255..(.  MOV|
00000e90  47 54 20 64 61 74 61 2c  23 32 35 35 0d 05 32 1a  |GT data,#255..2.|
00000ea0  20 53 54 52 42 20 64 61  74 61 2c 5b 70 73 74 61  | STRB data,[psta|
00000eb0  72 74 5d 2c 23 31 0d 05  3c 16 20 43 4d 50 20 67  |rt],#1..<. CMP g|
00000ec0  73 74 61 72 74 2c 6c 65  6e 67 74 68 0d 05 46 12  |start,length..F.|
00000ed0  20 42 4c 45 20 61 63 6c  69 70 6c 6f 6f 70 0d 05  | BLE acliploop..|
00000ee0  50 0f 20 4d 4f 56 20 50  43 2c 52 31 34 0d 05 5a  |P. MOV PC,R14..Z|
00000ef0  04 0d 05 64 0b 20 45 51  55 44 20 30 0d 05 6e 0b  |...d. EQUD 0..n.|
00000f00  20 45 51 55 44 20 30 0d  05 78 0b 20 45 51 55 44  | EQUD 0..x. EQUD|
00000f10  20 30 0d 05 82 5a 20 45  51 55 53 20 22 43 6f 70  | 0...Z EQUS "Cop|
00000f20  79 72 69 67 68 74 20 27  38 39 20 20 20 4a 61 73  |yright '89   Jas|
00000f30  6f 6e 20 57 69 6c 6c 69  61 6d 73 22 20 20 3b 20  |on Williams"  ; |
00000f40  4c 69 6e 65 73 20 75 70  20 62 65 61 75 74 69 66  |Lines up beautif|
00000f50  75 6c 6c 79 20 69 6e 74  6f 20 33 72 64 20 32 35  |ully into 3rd 25|
00000f60  36 2d 62 79 74 65 20 62  6c 6f 63 6b 0d 05 8c 05  |6-byte block....|
00000f70  5d 0d 05 96 05 ed 0d 05  a0 05 e1 0d 05 aa 05 3a  |]..............:|
00000f80  0d 05 b4 12 dd 20 f2 65  6e 74 72 79 70 6f 69 6e  |..... .entrypoin|
00000f90  74 73 0d 05 be 17 63 6f  64 65 25 21 30 20 3d 74  |ts....code%!0 =t|
00000fa0  66 65 72 2d 63 6f 64 65  25 0d 05 c8 17 63 6f 64  |fer-code%....cod|
00000fb0  65 25 21 34 20 3d 62 66  65 72 2d 63 6f 64 65 25  |e%!4 =bfer-code%|
00000fc0  0d 05 d2 1b 63 6f 64 65  25 21 38 20 3d 74 61 62  |....code%!8 =tab|
00000fd0  6c 65 6d 6f 64 2d 63 6f  64 65 25 0d 05 dc 1c 63  |lemod-code%....c|
00000fe0  6f 64 65 25 21 31 32 3d  61 64 64 62 6c 6f 63 6b  |ode%!12=addblock|
00000ff0  73 2d 63 6f 64 65 25 0d  05 e6 1a 63 6f 64 65 25  |s-code%....code%|
00001000  21 31 36 3d 61 64 64 63  6c 69 70 2d 63 6f 64 65  |!16=addclip-code|
00001010  25 0d 05 f0 1c 63 6f 64  65 25 21 32 30 3d 61 76  |%....code%!20=av|
00001020  67 62 6c 6f 63 6b 73 2d  63 6f 64 65 25 0d 05 fa  |gblocks-code%...|
00001030  1a 63 6f 64 65 25 21 32  34 3d 61 76 67 63 6c 69  |.code%!24=avgcli|
00001040  70 2d 63 6f 64 65 25 0d  06 04 04 0d 06 0e 26 f4  |p-code%.......&.|
00001050  20 41 64 64 20 61 6e 79  20 6e 65 77 20 65 6e 74  | Add any new ent|
00001060  72 79 2d 70 6f 69 6e 74  73 20 69 6e 20 68 65 72  |ry-points in her|
00001070  65 0d 06 18 04 0d 06 22  05 e1 0d 06 2c 05 3a 0d  |e......"....,.:.|
00001080  06 36 0b dd 20 f2 73 61  76 65 0d 06 40 2e ff 28  |.6.. .save..@..(|
00001090  22 53 41 56 45 20 24 2e  21 44 53 45 64 69 74 2e  |"SAVE $.!DSEdit.|
000010a0  43 6f 64 65 20 22 2b c3  7e 63 6f 64 65 25 2b 22  |Code "+.~code%+"|
000010b0  20 22 2b c3 7e 50 25 29  0d 06 4a 05 e1 0d ff     | "+.~P%)..J....|
000010bf