Home » Archimedes archive » Acorn User » AU 1994-06.adf » !WriteDemo_WriteDemo » Modules/FastSprite/Source

Modules/FastSprite/Source

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

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

Tape/disk: Home » Archimedes archive » Acorn User » AU 1994-06.adf » !WriteDemo_WriteDemo
Filename: Modules/FastSprite/Source
Read OK:
File size: 0E5E bytes
Load address: 0000
Exec address: 0000
File contents
   10REM >FastSprite
   20
   30ON ERROR SYS "Hourglass_Smash":ERROR 0,(REPORT$+" (internal error code "+STR$(ERL)+")")
   40
   50REM Fixed variables :
   60
   70  trigger$ = "x"
   80  trigger% = TRUE
   90
  100  REM width of sprite in pixels (must be divisable by 4)
  110  width%   = 236
  120
  130  REM height of sprite in pixels
  140  height%  = 69
  150
  160  REM x position of sprite in pixels (must be divisible by 4)
  170  x%       = 44
  180
  190  REM y position of sprite in pixels
  200  y%       = 32
  210
  220  REM start y position of sprite in pixels
  230  start_y% = 170
  240
  250
  260
  270module$ = "FastSprite"
  280
  290SYS "Hourglass_On"
  300LIBRARY "<Demo$Dir>.FNconvert"
  310SYS "OS_File",13,"<Modules$Dir>."+module$+".Sprites" TO spr_exists%,,,,spr_len%
  320IF spr_exists% = 0 THEN ERROR 0,(module$+": Sprite file not found")
  330PROCassemble
  340
  350CASE FNconvert(module$,sprites%) OF
  360  WHEN 0
  370    OSCLI "SAVE    <Modules$Dir>."+module$+".Module "+STR$~code%+" "+STR$~P%
  380    OSCLI "SETTYPE <Modules$Dir>."+module$+".Module Data"
  390  WHEN -1
  400    ERROR 0,(module$+": Sprite file not found")
  410  OTHERWISE
  420    ERROR 0,(module$+": Sprite width not divisible by 4")
  430ENDCASE
  440
  450SYS "Hourglass_Off"
  460END
  470
  480
  490
  500DEF PROCassemble
  510  len% = 1024 + spr_len%
  520  DIM code% len%
  530  FOR pass% = 8 TO 10 STEP 2
  540    P% = code%
  550    L% = code% + len%
  560    [ OPT pass%
  570
  580
  590.init       EQUD  0
  600.frame      EQUD  fastsprite - code%
  610.end        EQUD  0 
  620
  630
  640.fastsprite STMFD R13!,{R0-R11,R14}
  650            ]
  660            IF trigger% THEN
  670              [OPT pass%
  680              TST   R11,#(1 << ( ASC("z") - ASC(trigger$) ))
  690              BEQ   sprite_end
  700              ]
  710            ENDIF
  720            [OPT pass%
  730            LDR   R0,var%
  740            CMP   R0,#y%
  750            SUBGT R0,R0,#1
  760            STR   R0,var%
  770            ADD   R1,R12,R0,LSL#6  ; r1=screen address+(y_pos*320)
  780            ADD   R1,R1,R0,LSL#8
  790            ADD   R1,R1,#x%
  800            MOV   R2,#height%      ; r2=height of logo in pixels
  810            
  820            ADR   R0,sprites%      ; r0=address of logo sprite
  830.sprite_1   FNfast_line(width%)    ; plot one line
  840            ADD   R1,R1,#(320-width%) ; move scr pos to next line
  850            SUBS  R2,R2,#1         ; check if another row left
  860            BNE   sprite_1         ; if so, go to 'au_logo_1'
  870.sprite_end LDMFD R13!,{R0-R11,PC} ; exit
  880
  890
  900.var%       EQUD  start_y%
  910
  920.sprites%   FNarray(spr_len%)      ; array containing logo sprite
  930
  940
  950
  960    ]
  970  NEXT
  980ENDPROC
  990
 1000
 1010
 1020DEF FNarray(size%)
 1030  P% += size%
 1040= 0
 1050
 1060
 1070
 1080DEF FNfast_line(width%)
 1090  IF (width% MOD 4) <> 0 THEN PRINT module$": Sprite width must be divisable by 4":END
 1100  
 1110  WHILE width%>0
 1120  
 1130    CASE width% OF
 1140      WHEN 4
 1150        [ OPT pass%
 1160          LDR   R3,[R0],#4
 1170          STR   R3,[R1],#4
 1180        ]
 1190      WHEN 8
 1200        [ OPT pass%
 1210          LDMIA R0!,{R3-R4}
 1220          STMIA R1!,{R3-R4}
 1230        ]
 1240      WHEN 12
 1250        [ OPT pass%
 1260          LDMIA R0!,{R3-R5}
 1270          STMIA R1!,{R3-R5}
 1280        ]
 1290      WHEN 16
 1300        [ OPT pass%
 1310          LDMIA R0!,{R3-R6}
 1320          STMIA R1!,{R3-R6}
 1330        ]
 1340      WHEN 20
 1350        [ OPT pass%
 1360          LDMIA R0!,{R3-R7}
 1370          STMIA R1!,{R3-R7}
 1380        ]
 1390      WHEN 24
 1400        [ OPT pass%
 1410          LDMIA R0!,{R3-R8}
 1420          STMIA R1!,{R3-R8}
 1430        ]
 1440      WHEN 28
 1450        [ OPT pass%
 1460          LDMIA R0!,{R3-R9}
 1470          STMIA R1!,{R3-R9}
 1480        ]
 1490    OTHERWISE
 1500        [ OPT pass%
 1510          LDMIA R0!,{R3-R10}
 1520          STMIA R1!,{R3-R10}
 1530        ]
 1540    ENDCASE
 1550    
 1560    IF width% > 32 THEN width% -= 32 ELSE width% -= width%
 1570    
 1580  ENDWHILE
 1590
 1600= 0

� >FastSprite

G� � ș "Hourglass_Smash":� 0,(�$+" (internal error code "+�(�)+")")
(
2� Fixed variables :
<
F  trigger$ = "x"
P  trigger% = �
Z
d:  � width of sprite in pixels (must be divisable by 4)
n  width%   = 236
x
�"  � height of sprite in pixels
�  height%  = 69
�
�?  � x position of sprite in pixels (must be divisible by 4)
�  x%       = 44
�
�&  � y position of sprite in pixels
�  y%       = 32
�
�,  � start y position of sprite in pixels
�  start_y% = 170
�
�

module$ = "FastSprite"

"ș "Hourglass_On"
,ț "<Demo$Dir>.FNconvert"
6Qș "OS_File",13,"<Modules$Dir>."+module$+".Sprites" � spr_exists%,,,,spr_len%
@?� spr_exists% = 0 � � 0,(module$+": Sprite file not found")
J
�assemble
T
^#Ȏ �convert(module$,sprites%) �
h	  � 0
rF    � "SAVE    <Modules$Dir>."+module$+".Module "+�~code%+" "+�~P%
|9    � "SETTYPE <Modules$Dir>."+module$+".Module Data"
�
  � -1
�/    � 0,(module$+": Sprite file not found")
�  
�9    � 0,(module$+": Sprite width not divisible by 4")
��
�
�ș "Hourglass_Off"
��
�
�
�
�� �assemble
�  len% = 1024 + spr_len%
  � code% len%
  � pass% = 8 � 10 � 2
    P% = code%
&    L% = code% + len%
0    [ OPT pass%
:
D
N.init       EQUD  0
X(.frame      EQUD  fastsprite - code%
b.end        EQUD  0 
l
v
�'.fastsprite STMFD R13!,{R0-R11,R14}
�            ]
�            � trigger% �
�              [OPT pass%
�<              TST   R11,#(1 << ( �("z") - �(trigger$) ))
�"              BEQ   sprite_end
�              ]
�            �
�            [OPT pass%
�            LDR   R0,var%
�            CMP   R0,#y%
�            SUBGT R0,R0,#1
�            STR   R0,var%
F            ADD   R1,R12,R0,LSL#6  ; r1=screen address+(y_pos*320)
$            ADD   R1,R1,R0,LSL#8
            ADD   R1,R1,#x%
 D            MOV   R2,#height%      ; r2=height of logo in pixels
*            
4B            ADR   R0,sprites%      ; r0=address of logo sprite
>5.sprite_1   �fast_line(width%)    ; plot one line
HE            ADD   R1,R1,#(320-width%) ; move scr pos to next line
RB            SUBS  R2,R2,#1         ; check if another row left
\A            BNE   sprite_1         ; if so, go to 'au_logo_1'
f-.sprite_end LDMFD R13!,{R0-R11,PC} ; exit
p
z
�.var%       EQUD  start_y%
�
�D.sprites%   �array(spr_len%)      ; array containing logo sprite
�
�
�
�	    ]
�  �
��
�
�
�
�� �array(size%)
  P% += size%
= 0

$
.
8� �fast_line(width%)
BN  � (width% � 4) <> 0 � � module$": Sprite width must be divisable by 4":�
L  
V  ȕ width%>0
`  
j    Ȏ width% �
t
      � 4
~        [ OPT pass%
�          LDR   R3,[R0],#4
�          STR   R3,[R1],#4
�
        ]
�
      � 8
�        [ OPT pass%
�          LDMIA R0!,{R3-R4}
�          STMIA R1!,{R3-R4}
�
        ]
�      � 12
�        [ OPT pass%
�          LDMIA R0!,{R3-R5}
�          STMIA R1!,{R3-R5}

        ]

      � 16
        [ OPT pass%
          LDMIA R0!,{R3-R6}
(          STMIA R1!,{R3-R6}
2
        ]
<      � 20
F        [ OPT pass%
P          LDMIA R0!,{R3-R7}
Z          STMIA R1!,{R3-R7}
d
        ]
n      � 24
x        [ OPT pass%
�          LDMIA R0!,{R3-R8}
�          STMIA R1!,{R3-R8}
�
        ]
�      � 28
�        [ OPT pass%
�          LDMIA R0!,{R3-R9}
�          STMIA R1!,{R3-R9}
�
        ]
�	    
�        [ OPT pass%
�           LDMIA R0!,{R3-R10}
�           STMIA R1!,{R3-R10}
�
        ]
	    �
    
7    � width% > 32 � width% -= 32 � width% -= width%
"    
,  �
6
@= 0
�
00000000  0d 00 0a 11 f4 20 3e 46  61 73 74 53 70 72 69 74  |..... >FastSprit|
00000010  65 0d 00 14 04 0d 00 1e  47 ee 20 85 20 c8 99 20  |e.......G. . .. |
00000020  22 48 6f 75 72 67 6c 61  73 73 5f 53 6d 61 73 68  |"Hourglass_Smash|
00000030  22 3a 85 20 30 2c 28 f6  24 2b 22 20 28 69 6e 74  |":. 0,(.$+" (int|
00000040  65 72 6e 61 6c 20 65 72  72 6f 72 20 63 6f 64 65  |ernal error code|
00000050  20 22 2b c3 28 9e 29 2b  22 29 22 29 0d 00 28 04  | "+.(.)+")")..(.|
00000060  0d 00 32 17 f4 20 46 69  78 65 64 20 76 61 72 69  |..2.. Fixed vari|
00000070  61 62 6c 65 73 20 3a 0d  00 3c 04 0d 00 46 14 20  |ables :..<...F. |
00000080  20 74 72 69 67 67 65 72  24 20 3d 20 22 78 22 0d  | trigger$ = "x".|
00000090  00 50 12 20 20 74 72 69  67 67 65 72 25 20 3d 20  |.P.  trigger% = |
000000a0  b9 0d 00 5a 04 0d 00 64  3a 20 20 f4 20 77 69 64  |...Z...d:  . wid|
000000b0  74 68 20 6f 66 20 73 70  72 69 74 65 20 69 6e 20  |th of sprite in |
000000c0  70 69 78 65 6c 73 20 28  6d 75 73 74 20 62 65 20  |pixels (must be |
000000d0  64 69 76 69 73 61 62 6c  65 20 62 79 20 34 29 0d  |divisable by 4).|
000000e0  00 6e 14 20 20 77 69 64  74 68 25 20 20 20 3d 20  |.n.  width%   = |
000000f0  32 33 36 0d 00 78 04 0d  00 82 22 20 20 f4 20 68  |236..x...."  . h|
00000100  65 69 67 68 74 20 6f 66  20 73 70 72 69 74 65 20  |eight of sprite |
00000110  69 6e 20 70 69 78 65 6c  73 0d 00 8c 13 20 20 68  |in pixels....  h|
00000120  65 69 67 68 74 25 20 20  3d 20 36 39 0d 00 96 04  |eight%  = 69....|
00000130  0d 00 a0 3f 20 20 f4 20  78 20 70 6f 73 69 74 69  |...?  . x positi|
00000140  6f 6e 20 6f 66 20 73 70  72 69 74 65 20 69 6e 20  |on of sprite in |
00000150  70 69 78 65 6c 73 20 28  6d 75 73 74 20 62 65 20  |pixels (must be |
00000160  64 69 76 69 73 69 62 6c  65 20 62 79 20 34 29 0d  |divisible by 4).|
00000170  00 aa 13 20 20 78 25 20  20 20 20 20 20 20 3d 20  |...  x%       = |
00000180  34 34 0d 00 b4 04 0d 00  be 26 20 20 f4 20 79 20  |44.......&  . y |
00000190  70 6f 73 69 74 69 6f 6e  20 6f 66 20 73 70 72 69  |position of spri|
000001a0  74 65 20 69 6e 20 70 69  78 65 6c 73 0d 00 c8 13  |te in pixels....|
000001b0  20 20 79 25 20 20 20 20  20 20 20 3d 20 33 32 0d  |  y%       = 32.|
000001c0  00 d2 04 0d 00 dc 2c 20  20 f4 20 73 74 61 72 74  |......,  . start|
000001d0  20 79 20 70 6f 73 69 74  69 6f 6e 20 6f 66 20 73  | y position of s|
000001e0  70 72 69 74 65 20 69 6e  20 70 69 78 65 6c 73 0d  |prite in pixels.|
000001f0  00 e6 14 20 20 73 74 61  72 74 5f 79 25 20 3d 20  |...  start_y% = |
00000200  31 37 30 0d 00 f0 04 0d  00 fa 04 0d 01 04 04 0d  |170.............|
00000210  01 0e 1a 6d 6f 64 75 6c  65 24 20 3d 20 22 46 61  |...module$ = "Fa|
00000220  73 74 53 70 72 69 74 65  22 0d 01 18 04 0d 01 22  |stSprite"......"|
00000230  15 c8 99 20 22 48 6f 75  72 67 6c 61 73 73 5f 4f  |... "Hourglass_O|
00000240  6e 22 0d 01 2c 1d c8 9b  20 22 3c 44 65 6d 6f 24  |n"..,... "<Demo$|
00000250  44 69 72 3e 2e 46 4e 63  6f 6e 76 65 72 74 22 0d  |Dir>.FNconvert".|
00000260  01 36 51 c8 99 20 22 4f  53 5f 46 69 6c 65 22 2c  |.6Q.. "OS_File",|
00000270  31 33 2c 22 3c 4d 6f 64  75 6c 65 73 24 44 69 72  |13,"<Modules$Dir|
00000280  3e 2e 22 2b 6d 6f 64 75  6c 65 24 2b 22 2e 53 70  |>."+module$+".Sp|
00000290  72 69 74 65 73 22 20 b8  20 73 70 72 5f 65 78 69  |rites" . spr_exi|
000002a0  73 74 73 25 2c 2c 2c 2c  73 70 72 5f 6c 65 6e 25  |sts%,,,,spr_len%|
000002b0  0d 01 40 3f e7 20 73 70  72 5f 65 78 69 73 74 73  |..@?. spr_exists|
000002c0  25 20 3d 20 30 20 8c 20  85 20 30 2c 28 6d 6f 64  |% = 0 . . 0,(mod|
000002d0  75 6c 65 24 2b 22 3a 20  53 70 72 69 74 65 20 66  |ule$+": Sprite f|
000002e0  69 6c 65 20 6e 6f 74 20  66 6f 75 6e 64 22 29 0d  |ile not found").|
000002f0  01 4a 0d f2 61 73 73 65  6d 62 6c 65 0d 01 54 04  |.J..assemble..T.|
00000300  0d 01 5e 23 c8 8e 20 a4  63 6f 6e 76 65 72 74 28  |..^#.. .convert(|
00000310  6d 6f 64 75 6c 65 24 2c  73 70 72 69 74 65 73 25  |module$,sprites%|
00000320  29 20 ca 0d 01 68 09 20  20 c9 20 30 0d 01 72 46  |) ...h.  . 0..rF|
00000330  20 20 20 20 ff 20 22 53  41 56 45 20 20 20 20 3c  |    . "SAVE    <|
00000340  4d 6f 64 75 6c 65 73 24  44 69 72 3e 2e 22 2b 6d  |Modules$Dir>."+m|
00000350  6f 64 75 6c 65 24 2b 22  2e 4d 6f 64 75 6c 65 20  |odule$+".Module |
00000360  22 2b c3 7e 63 6f 64 65  25 2b 22 20 22 2b c3 7e  |"+.~code%+" "+.~|
00000370  50 25 0d 01 7c 39 20 20  20 20 ff 20 22 53 45 54  |P%..|9    . "SET|
00000380  54 59 50 45 20 3c 4d 6f  64 75 6c 65 73 24 44 69  |TYPE <Modules$Di|
00000390  72 3e 2e 22 2b 6d 6f 64  75 6c 65 24 2b 22 2e 4d  |r>."+module$+".M|
000003a0  6f 64 75 6c 65 20 44 61  74 61 22 0d 01 86 0a 20  |odule Data".... |
000003b0  20 c9 20 2d 31 0d 01 90  2f 20 20 20 20 85 20 30  | . -1.../    . 0|
000003c0  2c 28 6d 6f 64 75 6c 65  24 2b 22 3a 20 53 70 72  |,(module$+": Spr|
000003d0  69 74 65 20 66 69 6c 65  20 6e 6f 74 20 66 6f 75  |ite file not fou|
000003e0  6e 64 22 29 0d 01 9a 07  20 20 7f 0d 01 a4 39 20  |nd")....  ....9 |
000003f0  20 20 20 85 20 30 2c 28  6d 6f 64 75 6c 65 24 2b  |   . 0,(module$+|
00000400  22 3a 20 53 70 72 69 74  65 20 77 69 64 74 68 20  |": Sprite width |
00000410  6e 6f 74 20 64 69 76 69  73 69 62 6c 65 20 62 79  |not divisible by|
00000420  20 34 22 29 0d 01 ae 05  cb 0d 01 b8 04 0d 01 c2  | 4")............|
00000430  16 c8 99 20 22 48 6f 75  72 67 6c 61 73 73 5f 4f  |... "Hourglass_O|
00000440  66 66 22 0d 01 cc 05 e0  0d 01 d6 04 0d 01 e0 04  |ff".............|
00000450  0d 01 ea 04 0d 01 f4 0f  dd 20 f2 61 73 73 65 6d  |......... .assem|
00000460  62 6c 65 0d 01 fe 1c 20  20 6c 65 6e 25 20 3d 20  |ble....  len% = |
00000470  31 30 32 34 20 2b 20 73  70 72 5f 6c 65 6e 25 0d  |1024 + spr_len%.|
00000480  02 08 12 20 20 de 20 63  6f 64 65 25 20 6c 65 6e  |...  . code% len|
00000490  25 0d 02 12 1a 20 20 e3  20 70 61 73 73 25 20 3d  |%....  . pass% =|
000004a0  20 38 20 b8 20 31 30 20  88 20 32 0d 02 1c 12 20  | 8 . 10 . 2.... |
000004b0  20 20 20 50 25 20 3d 20  63 6f 64 65 25 0d 02 26  |   P% = code%..&|
000004c0  19 20 20 20 20 4c 25 20  3d 20 63 6f 64 65 25 20  |.    L% = code% |
000004d0  2b 20 6c 65 6e 25 0d 02  30 13 20 20 20 20 5b 20  |+ len%..0.    [ |
000004e0  4f 50 54 20 70 61 73 73  25 0d 02 3a 04 0d 02 44  |OPT pass%..:...D|
000004f0  04 0d 02 4e 17 2e 69 6e  69 74 20 20 20 20 20 20  |...N..init      |
00000500  20 45 51 55 44 20 20 30  0d 02 58 28 2e 66 72 61  | EQUD  0..X(.fra|
00000510  6d 65 20 20 20 20 20 20  45 51 55 44 20 20 66 61  |me      EQUD  fa|
00000520  73 74 73 70 72 69 74 65  20 2d 20 63 6f 64 65 25  |stsprite - code%|
00000530  0d 02 62 18 2e 65 6e 64  20 20 20 20 20 20 20 20  |..b..end        |
00000540  45 51 55 44 20 20 30 20  0d 02 6c 04 0d 02 76 04  |EQUD  0 ..l...v.|
00000550  0d 02 80 27 2e 66 61 73  74 73 70 72 69 74 65 20  |...'.fastsprite |
00000560  53 54 4d 46 44 20 52 31  33 21 2c 7b 52 30 2d 52  |STMFD R13!,{R0-R|
00000570  31 31 2c 52 31 34 7d 0d  02 8a 11 20 20 20 20 20  |11,R14}....     |
00000580  20 20 20 20 20 20 20 5d  0d 02 94 1c 20 20 20 20  |       ]....    |
00000590  20 20 20 20 20 20 20 20  e7 20 74 72 69 67 67 65  |        . trigge|
000005a0  72 25 20 8c 0d 02 9e 1c  20 20 20 20 20 20 20 20  |r% .....        |
000005b0  20 20 20 20 20 20 5b 4f  50 54 20 70 61 73 73 25  |      [OPT pass%|
000005c0  0d 02 a8 3c 20 20 20 20  20 20 20 20 20 20 20 20  |...<            |
000005d0  20 20 54 53 54 20 20 20  52 31 31 2c 23 28 31 20  |  TST   R11,#(1 |
000005e0  3c 3c 20 28 20 97 28 22  7a 22 29 20 2d 20 97 28  |<< ( .("z") - .(|
000005f0  74 72 69 67 67 65 72 24  29 20 29 29 0d 02 b2 22  |trigger$) ))..."|
00000600  20 20 20 20 20 20 20 20  20 20 20 20 20 20 42 45  |              BE|
00000610  51 20 20 20 73 70 72 69  74 65 5f 65 6e 64 0d 02  |Q   sprite_end..|
00000620  bc 13 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |..              |
00000630  5d 0d 02 c6 11 20 20 20  20 20 20 20 20 20 20 20  |]....           |
00000640  20 cd 0d 02 d0 1a 20 20  20 20 20 20 20 20 20 20  | .....          |
00000650  20 20 5b 4f 50 54 20 70  61 73 73 25 0d 02 da 1d  |  [OPT pass%....|
00000660  20 20 20 20 20 20 20 20  20 20 20 20 4c 44 52 20  |            LDR |
00000670  20 20 52 30 2c 76 61 72  25 0d 02 e4 1c 20 20 20  |  R0,var%....   |
00000680  20 20 20 20 20 20 20 20  20 43 4d 50 20 20 20 52  |         CMP   R|
00000690  30 2c 23 79 25 0d 02 ee  1e 20 20 20 20 20 20 20  |0,#y%....       |
000006a0  20 20 20 20 20 53 55 42  47 54 20 52 30 2c 52 30  |     SUBGT R0,R0|
000006b0  2c 23 31 0d 02 f8 1d 20  20 20 20 20 20 20 20 20  |,#1....         |
000006c0  20 20 20 53 54 52 20 20  20 52 30 2c 76 61 72 25  |   STR   R0,var%|
000006d0  0d 03 02 46 20 20 20 20  20 20 20 20 20 20 20 20  |...F            |
000006e0  41 44 44 20 20 20 52 31  2c 52 31 32 2c 52 30 2c  |ADD   R1,R12,R0,|
000006f0  4c 53 4c 23 36 20 20 3b  20 72 31 3d 73 63 72 65  |LSL#6  ; r1=scre|
00000700  65 6e 20 61 64 64 72 65  73 73 2b 28 79 5f 70 6f  |en address+(y_po|
00000710  73 2a 33 32 30 29 0d 03  0c 24 20 20 20 20 20 20  |s*320)...$      |
00000720  20 20 20 20 20 20 41 44  44 20 20 20 52 31 2c 52  |      ADD   R1,R|
00000730  31 2c 52 30 2c 4c 53 4c  23 38 0d 03 16 1f 20 20  |1,R0,LSL#8....  |
00000740  20 20 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |          ADD   |
00000750  52 31 2c 52 31 2c 23 78  25 0d 03 20 44 20 20 20  |R1,R1,#x%.. D   |
00000760  20 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 52  |         MOV   R|
00000770  32 2c 23 68 65 69 67 68  74 25 20 20 20 20 20 20  |2,#height%      |
00000780  3b 20 72 32 3d 68 65 69  67 68 74 20 6f 66 20 6c  |; r2=height of l|
00000790  6f 67 6f 20 69 6e 20 70  69 78 65 6c 73 0d 03 2a  |ogo in pixels..*|
000007a0  10 20 20 20 20 20 20 20  20 20 20 20 20 0d 03 34  |.            ..4|
000007b0  42 20 20 20 20 20 20 20  20 20 20 20 20 41 44 52  |B            ADR|
000007c0  20 20 20 52 30 2c 73 70  72 69 74 65 73 25 20 20  |   R0,sprites%  |
000007d0  20 20 20 20 3b 20 72 30  3d 61 64 64 72 65 73 73  |    ; r0=address|
000007e0  20 6f 66 20 6c 6f 67 6f  20 73 70 72 69 74 65 0d  | of logo sprite.|
000007f0  03 3e 35 2e 73 70 72 69  74 65 5f 31 20 20 20 a4  |.>5.sprite_1   .|
00000800  66 61 73 74 5f 6c 69 6e  65 28 77 69 64 74 68 25  |fast_line(width%|
00000810  29 20 20 20 20 3b 20 70  6c 6f 74 20 6f 6e 65 20  |)    ; plot one |
00000820  6c 69 6e 65 0d 03 48 45  20 20 20 20 20 20 20 20  |line..HE        |
00000830  20 20 20 20 41 44 44 20  20 20 52 31 2c 52 31 2c  |    ADD   R1,R1,|
00000840  23 28 33 32 30 2d 77 69  64 74 68 25 29 20 3b 20  |#(320-width%) ; |
00000850  6d 6f 76 65 20 73 63 72  20 70 6f 73 20 74 6f 20  |move scr pos to |
00000860  6e 65 78 74 20 6c 69 6e  65 0d 03 52 42 20 20 20  |next line..RB   |
00000870  20 20 20 20 20 20 20 20  20 53 55 42 53 20 20 52  |         SUBS  R|
00000880  32 2c 52 32 2c 23 31 20  20 20 20 20 20 20 20 20  |2,R2,#1         |
00000890  3b 20 63 68 65 63 6b 20  69 66 20 61 6e 6f 74 68  |; check if anoth|
000008a0  65 72 20 72 6f 77 20 6c  65 66 74 0d 03 5c 41 20  |er row left..\A |
000008b0  20 20 20 20 20 20 20 20  20 20 20 42 4e 45 20 20  |           BNE  |
000008c0  20 73 70 72 69 74 65 5f  31 20 20 20 20 20 20 20  | sprite_1       |
000008d0  20 20 3b 20 69 66 20 73  6f 2c 20 67 6f 20 74 6f  |  ; if so, go to|
000008e0  20 27 61 75 5f 6c 6f 67  6f 5f 31 27 0d 03 66 2d  | 'au_logo_1'..f-|
000008f0  2e 73 70 72 69 74 65 5f  65 6e 64 20 4c 44 4d 46  |.sprite_end LDMF|
00000900  44 20 52 31 33 21 2c 7b  52 30 2d 52 31 31 2c 50  |D R13!,{R0-R11,P|
00000910  43 7d 20 3b 20 65 78 69  74 0d 03 70 04 0d 03 7a  |C} ; exit..p...z|
00000920  04 0d 03 84 1e 2e 76 61  72 25 20 20 20 20 20 20  |......var%      |
00000930  20 45 51 55 44 20 20 73  74 61 72 74 5f 79 25 0d  | EQUD  start_y%.|
00000940  03 8e 04 0d 03 98 44 2e  73 70 72 69 74 65 73 25  |......D.sprites%|
00000950  20 20 20 a4 61 72 72 61  79 28 73 70 72 5f 6c 65  |   .array(spr_le|
00000960  6e 25 29 20 20 20 20 20  20 3b 20 61 72 72 61 79  |n%)      ; array|
00000970  20 63 6f 6e 74 61 69 6e  69 6e 67 20 6c 6f 67 6f  | containing logo|
00000980  20 73 70 72 69 74 65 0d  03 a2 04 0d 03 ac 04 0d  | sprite.........|
00000990  03 b6 04 0d 03 c0 09 20  20 20 20 5d 0d 03 ca 07  |.......    ]....|
000009a0  20 20 ed 0d 03 d4 05 e1  0d 03 de 04 0d 03 e8 04  |  ..............|
000009b0  0d 03 f2 04 0d 03 fc 13  dd 20 a4 61 72 72 61 79  |......... .array|
000009c0  28 73 69 7a 65 25 29 0d  04 06 11 20 20 50 25 20  |(size%)....  P% |
000009d0  2b 3d 20 73 69 7a 65 25  0d 04 10 07 3d 20 30 0d  |+= size%....= 0.|
000009e0  04 1a 04 0d 04 24 04 0d  04 2e 04 0d 04 38 18 dd  |.....$.......8..|
000009f0  20 a4 66 61 73 74 5f 6c  69 6e 65 28 77 69 64 74  | .fast_line(widt|
00000a00  68 25 29 0d 04 42 4e 20  20 e7 20 28 77 69 64 74  |h%)..BN  . (widt|
00000a10  68 25 20 83 20 34 29 20  3c 3e 20 30 20 8c 20 f1  |h% . 4) <> 0 . .|
00000a20  20 6d 6f 64 75 6c 65 24  22 3a 20 53 70 72 69 74  | module$": Sprit|
00000a30  65 20 77 69 64 74 68 20  6d 75 73 74 20 62 65 20  |e width must be |
00000a40  64 69 76 69 73 61 62 6c  65 20 62 79 20 34 22 3a  |divisable by 4":|
00000a50  e0 0d 04 4c 06 20 20 0d  04 56 11 20 20 c8 95 20  |...L.  ..V.  .. |
00000a60  77 69 64 74 68 25 3e 30  0d 04 60 06 20 20 0d 04  |width%>0..`.  ..|
00000a70  6a 13 20 20 20 20 c8 8e  20 77 69 64 74 68 25 20  |j.    .. width% |
00000a80  ca 0d 04 74 0d 20 20 20  20 20 20 c9 20 34 0d 04  |...t.      . 4..|
00000a90  7e 17 20 20 20 20 20 20  20 20 5b 20 4f 50 54 20  |~.        [ OPT |
00000aa0  70 61 73 73 25 0d 04 88  1e 20 20 20 20 20 20 20  |pass%....       |
00000ab0  20 20 20 4c 44 52 20 20  20 52 33 2c 5b 52 30 5d  |   LDR   R3,[R0]|
00000ac0  2c 23 34 0d 04 92 1e 20  20 20 20 20 20 20 20 20  |,#4....         |
00000ad0  20 53 54 52 20 20 20 52  33 2c 5b 52 31 5d 2c 23  | STR   R3,[R1],#|
00000ae0  34 0d 04 9c 0d 20 20 20  20 20 20 20 20 5d 0d 04  |4....        ]..|
00000af0  a6 0d 20 20 20 20 20 20  c9 20 38 0d 04 b0 17 20  |..      . 8.... |
00000b00  20 20 20 20 20 20 20 5b  20 4f 50 54 20 70 61 73  |       [ OPT pas|
00000b10  73 25 0d 04 ba 1f 20 20  20 20 20 20 20 20 20 20  |s%....          |
00000b20  4c 44 4d 49 41 20 52 30  21 2c 7b 52 33 2d 52 34  |LDMIA R0!,{R3-R4|
00000b30  7d 0d 04 c4 1f 20 20 20  20 20 20 20 20 20 20 53  |}....          S|
00000b40  54 4d 49 41 20 52 31 21  2c 7b 52 33 2d 52 34 7d  |TMIA R1!,{R3-R4}|
00000b50  0d 04 ce 0d 20 20 20 20  20 20 20 20 5d 0d 04 d8  |....        ]...|
00000b60  0e 20 20 20 20 20 20 c9  20 31 32 0d 04 e2 17 20  |.      . 12.... |
00000b70  20 20 20 20 20 20 20 5b  20 4f 50 54 20 70 61 73  |       [ OPT pas|
00000b80  73 25 0d 04 ec 1f 20 20  20 20 20 20 20 20 20 20  |s%....          |
00000b90  4c 44 4d 49 41 20 52 30  21 2c 7b 52 33 2d 52 35  |LDMIA R0!,{R3-R5|
00000ba0  7d 0d 04 f6 1f 20 20 20  20 20 20 20 20 20 20 53  |}....          S|
00000bb0  54 4d 49 41 20 52 31 21  2c 7b 52 33 2d 52 35 7d  |TMIA R1!,{R3-R5}|
00000bc0  0d 05 00 0d 20 20 20 20  20 20 20 20 5d 0d 05 0a  |....        ]...|
00000bd0  0e 20 20 20 20 20 20 c9  20 31 36 0d 05 14 17 20  |.      . 16.... |
00000be0  20 20 20 20 20 20 20 5b  20 4f 50 54 20 70 61 73  |       [ OPT pas|
00000bf0  73 25 0d 05 1e 1f 20 20  20 20 20 20 20 20 20 20  |s%....          |
00000c00  4c 44 4d 49 41 20 52 30  21 2c 7b 52 33 2d 52 36  |LDMIA R0!,{R3-R6|
00000c10  7d 0d 05 28 1f 20 20 20  20 20 20 20 20 20 20 53  |}..(.          S|
00000c20  54 4d 49 41 20 52 31 21  2c 7b 52 33 2d 52 36 7d  |TMIA R1!,{R3-R6}|
00000c30  0d 05 32 0d 20 20 20 20  20 20 20 20 5d 0d 05 3c  |..2.        ]..<|
00000c40  0e 20 20 20 20 20 20 c9  20 32 30 0d 05 46 17 20  |.      . 20..F. |
00000c50  20 20 20 20 20 20 20 5b  20 4f 50 54 20 70 61 73  |       [ OPT pas|
00000c60  73 25 0d 05 50 1f 20 20  20 20 20 20 20 20 20 20  |s%..P.          |
00000c70  4c 44 4d 49 41 20 52 30  21 2c 7b 52 33 2d 52 37  |LDMIA R0!,{R3-R7|
00000c80  7d 0d 05 5a 1f 20 20 20  20 20 20 20 20 20 20 53  |}..Z.          S|
00000c90  54 4d 49 41 20 52 31 21  2c 7b 52 33 2d 52 37 7d  |TMIA R1!,{R3-R7}|
00000ca0  0d 05 64 0d 20 20 20 20  20 20 20 20 5d 0d 05 6e  |..d.        ]..n|
00000cb0  0e 20 20 20 20 20 20 c9  20 32 34 0d 05 78 17 20  |.      . 24..x. |
00000cc0  20 20 20 20 20 20 20 5b  20 4f 50 54 20 70 61 73  |       [ OPT pas|
00000cd0  73 25 0d 05 82 1f 20 20  20 20 20 20 20 20 20 20  |s%....          |
00000ce0  4c 44 4d 49 41 20 52 30  21 2c 7b 52 33 2d 52 38  |LDMIA R0!,{R3-R8|
00000cf0  7d 0d 05 8c 1f 20 20 20  20 20 20 20 20 20 20 53  |}....          S|
00000d00  54 4d 49 41 20 52 31 21  2c 7b 52 33 2d 52 38 7d  |TMIA R1!,{R3-R8}|
00000d10  0d 05 96 0d 20 20 20 20  20 20 20 20 5d 0d 05 a0  |....        ]...|
00000d20  0e 20 20 20 20 20 20 c9  20 32 38 0d 05 aa 17 20  |.      . 28.... |
00000d30  20 20 20 20 20 20 20 5b  20 4f 50 54 20 70 61 73  |       [ OPT pas|
00000d40  73 25 0d 05 b4 1f 20 20  20 20 20 20 20 20 20 20  |s%....          |
00000d50  4c 44 4d 49 41 20 52 30  21 2c 7b 52 33 2d 52 39  |LDMIA R0!,{R3-R9|
00000d60  7d 0d 05 be 1f 20 20 20  20 20 20 20 20 20 20 53  |}....          S|
00000d70  54 4d 49 41 20 52 31 21  2c 7b 52 33 2d 52 39 7d  |TMIA R1!,{R3-R9}|
00000d80  0d 05 c8 0d 20 20 20 20  20 20 20 20 5d 0d 05 d2  |....        ]...|
00000d90  09 20 20 20 20 7f 0d 05  dc 17 20 20 20 20 20 20  |.    .....      |
00000da0  20 20 5b 20 4f 50 54 20  70 61 73 73 25 0d 05 e6  |  [ OPT pass%...|
00000db0  20 20 20 20 20 20 20 20  20 20 20 4c 44 4d 49 41  |           LDMIA|
00000dc0  20 52 30 21 2c 7b 52 33  2d 52 31 30 7d 0d 05 f0  | R0!,{R3-R10}...|
00000dd0  20 20 20 20 20 20 20 20  20 20 20 53 54 4d 49 41  |           STMIA|
00000de0  20 52 31 21 2c 7b 52 33  2d 52 31 30 7d 0d 05 fa  | R1!,{R3-R10}...|
00000df0  0d 20 20 20 20 20 20 20  20 5d 0d 06 04 09 20 20  |.        ]....  |
00000e00  20 20 cb 0d 06 0e 08 20  20 20 20 0d 06 18 37 20  |  .....    ...7 |
00000e10  20 20 20 e7 20 77 69 64  74 68 25 20 3e 20 33 32  |   . width% > 32|
00000e20  20 8c 20 77 69 64 74 68  25 20 2d 3d 20 33 32 20  | . width% -= 32 |
00000e30  8b 20 77 69 64 74 68 25  20 2d 3d 20 77 69 64 74  |. width% -= widt|
00000e40  68 25 0d 06 22 08 20 20  20 20 0d 06 2c 07 20 20  |h%..".    ..,.  |
00000e50  ce 0d 06 36 04 0d 06 40  07 3d 20 30 0d ff        |...6...@.= 0..|
00000e5e