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

Modules/Stars/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/Stars/Source
Read OK:
File size: 0B86 bytes
Load address: 0000
Exec address: 0000
Duplicates

There is 1 duplicate copy of this file in the archive:

File contents
   10REM >Stars
   20
   30ON ERROR SYS "Hourglass_Smash":ERROR 0,(REPORT$+" (internal error code "+STR$(ERL)+")")
   40
   50REM Fixed variables :
   60
   70  trigger$ = "y"
   80  trigger% = TRUE
   90
  100  REM Number of stars
  110  s%   = 512
  120  
  130  REM  Top of bounding box in pixels
  140  top% = 4
  150  
  160  REM  Bottom of bounding box in pixels
  170  bot% = 170
  180
  190  REM  Star colours in raw colour values
  200  DATA  45,  47, 208, 208
  210  DATA 209, 209, 210, 210
  220  DATA 211, 211, 252, 252
  230  DATA 253, 254, 254, 255
  240
  250
  260
  270module$ = "Stars"
  280
  290SYS "Hourglass_On"
  300PROCassemble
  310PROCinit
  320
  330OSCLI"SAVE    <Modules$Dir>."+module$+".Module "+STR$~code%+" "+STR$~P%
  340OSCLI"SETTYPE <Modules$Dir>."+module$+".Module Data"
  350
  360SYS "Hourglass_Off"
  370END
  380
  390
  400
  410DEF PROCassemble
  420  len% = (2 * 1024) + (s% * 12)
  430  DIM code% len%
  440  FOR pass% = 8 TO 10 STEP 2
  450    P% = code%
  460    L% = code% + len%
  470    [ OPT pass%
  480    
  490
  500.init        EQUD   0
  510.frame       EQUD   stars - code%
  520.end         EQUD   0
  530
  540
  550.stars       STMFD  R13!,{R0-R11,R14}
  560             ]
  570             IF trigger% THEN
  580               [OPT pass%
  590               TST    R11,#( 1 << (ASC("z") - ASC(trigger$)) )
  600               BEQ    stars_end
  610               ]
  620             ENDIF
  630             [OPT pass%
  640             
  650             LDR    R0,var%
  660             CMP    R0,#s%
  670             ADDLT  R0,R0,#1
  680             STR    R0,var%
  690             ADR    R2,table%       ; r2=star data table
  700             LDR    R8,max_scr%     ; r8=maximum star pos
  710             LDR    R9,top_scr%     ; r9=minimum star pos
  720.stars_1     LDMIA  R2,{R3-R5}      ; r3=pos r4=colour r5=speed
  730             ADD    R3,R3,R5        ; pos=pos+speed
  740             CMP    R3,R8           ; is pos>=max_pos ?
  750             MOVGE  R3,R9           ; if so, pos=min_pos
  760             STR    R3,[R2],#12     ; store pos in star table
  770             MOV    R3,R3,LSR#10    ; pos=pos>>10
  780             ADD    R6,R3,R12       ; r6=pos+screen_address
  790             LDRB   R7,[R6]         ; get byte at star position
  800             CMP    R7,#0           ; is it black ?
  810             STREQB R4,[R6]         ; if so, plot star
  820             SUBS   R0,R0,#1        ; are there more stars left ?
  830             BNE    stars_1         ; if so, go to 'stars_1'
  840.stars_end   LDMFD  R13!,{R0-R11,PC}; exit
  850
  860
  870.var%        EQUD   0
  880.max_scr%    EQUD   ((bot%*320)<<10)
  890.top_scr%    EQUD   ((top%*320)<<10)
  900.table%      FNarray(s%*12)
  910
  920
  930
  940    ]
  950  NEXT
  960ENDPROC
  970
  980
  990
 1000DEF FNarray(size%)
 1010  P% += size%
 1020= 0
 1030
 1040
 1050
 1060DEF PROCinit
 1070  LOCAL I%,t%,type%
 1080
 1090  DIM col%(15)
 1100  FOR I% = 0 TO 15
 1110    READ col%(I%)
 1120  NEXT
 1130  
 1140  FOR I% = 0 TO (s% - 1)
 1150    t%    = table% + (I% * 12)
 1160    type% = ( I% / (s% / 12) ) + 1
 1170    t%!0  = ((RND(bot%-top%) + top%) * (320<<10)) + (RND(319)<<10)
 1180    t%!4  = col%(type%-1)
 1190    t%!8  = (type%<<8) + RND(16<<8)
 1200  NEXT
 1210
 1220ENDPROC

� >Stars

G� � ș "Hourglass_Smash":� 0,(�$+" (internal error code "+�(�)+")")
(
2� Fixed variables :
<
F  trigger$ = "y"
P  trigger% = �
Z
d  � Number of stars
n  s%   = 512
x  
�&  �  Top of bounding box in pixels
�  top% = 4
�  
�)  �  Bottom of bounding box in pixels
�  bot% = 170
�
�*  �  Star colours in raw colour values
�  �  45,  47, 208, 208
�  � 209, 209, 210, 210
�  � 211, 211, 252, 252
�  � 253, 254, 254, 255
�
�

module$ = "Stars"

"ș "Hourglass_On"
,
�assemble
6	�init
@
JA�"SAVE    <Modules$Dir>."+module$+".Module "+�~code%+" "+�~P%
T4�"SETTYPE <Modules$Dir>."+module$+".Module Data"
^
hș "Hourglass_Off"
r�
|
�
�
�� �assemble
�#  len% = (2 * 1024) + (s% * 12)
�  � code% len%
�  � pass% = 8 � 10 � 2
�    P% = code%
�    L% = code% + len%
�    [ OPT pass%
�    
�
�.init        EQUD   0
�%.frame       EQUD   stars - code%
.end         EQUD   0


&).stars       STMFD  R13!,{R0-R11,R14}
0             ]
:             � trigger% �
D               [OPT pass%
N>               TST    R11,#( 1 << (�("z") - �(trigger$)) )
X#               BEQ    stars_end
b               ]
l             �
v             [OPT pass%
�             
�             LDR    R0,var%
�             CMP    R0,#s%
�              ADDLT  R0,R0,#1
�             STR    R0,var%
�<             ADR    R2,table%       ; r2=star data table
�=             LDR    R8,max_scr%     ; r8=maximum star pos
�=             LDR    R9,top_scr%     ; r9=minimum star pos
�C.stars_1     LDMIA  R2,{R3-R5}      ; r3=pos r4=colour r5=speed
�7             ADD    R3,R3,R5        ; pos=pos+speed
�;             CMP    R3,R8           ; is pos>=max_pos ?
�<             MOVGE  R3,R9           ; if so, pos=min_pos
�A             STR    R3,[R2],#12     ; store pos in star table
5             MOV    R3,R3,LSR#10    ; pos=pos>>10
?             ADD    R6,R3,R12       ; r6=pos+screen_address
C             LDRB   R7,[R6]         ; get byte at star position
 7             CMP    R7,#0           ; is it black ?
*:             STREQB R4,[R6]         ; if so, plot star
4E             SUBS   R0,R0,#1        ; are there more stars left ?
>@             BNE    stars_1         ; if so, go to 'stars_1'
H..stars_end   LDMFD  R13!,{R0-R11,PC}; exit
R
\
f.var%        EQUD   0
p(.max_scr%    EQUD   ((bot%*320)<<10)
z(.top_scr%    EQUD   ((top%*320)<<10)
�.table%      �array(s%*12)
�
�
�
�	    ]
�  �
��
�
�
�
�� �array(size%)
�  P% += size%
�= 0



$� �init
.  � I%,t%,type%
8
B  � col%(15)
L  � I% = 0 � 15
V    � col%(I%)
`  �
j  
t  � I% = 0 � (s% - 1)
~"    t%    = table% + (I% * 12)
�&    type% = ( I% / (s% / 12) ) + 1
�B    t%!0  = ((�(bot%-top%) + top%) * (320<<10)) + (�(319)<<10)
�    t%!4  = col%(type%-1)
�%    t%!8  = (type%<<8) + �(16<<8)
�  �
�
��
�
00000000  0d 00 0a 0c f4 20 3e 53  74 61 72 73 0d 00 14 04  |..... >Stars....|
00000010  0d 00 1e 47 ee 20 85 20  c8 99 20 22 48 6f 75 72  |...G. . .. "Hour|
00000020  67 6c 61 73 73 5f 53 6d  61 73 68 22 3a 85 20 30  |glass_Smash":. 0|
00000030  2c 28 f6 24 2b 22 20 28  69 6e 74 65 72 6e 61 6c  |,(.$+" (internal|
00000040  20 65 72 72 6f 72 20 63  6f 64 65 20 22 2b c3 28  | error code "+.(|
00000050  9e 29 2b 22 29 22 29 0d  00 28 04 0d 00 32 17 f4  |.)+")")..(...2..|
00000060  20 46 69 78 65 64 20 76  61 72 69 61 62 6c 65 73  | Fixed variables|
00000070  20 3a 0d 00 3c 04 0d 00  46 14 20 20 74 72 69 67  | :..<...F.  trig|
00000080  67 65 72 24 20 3d 20 22  79 22 0d 00 50 12 20 20  |ger$ = "y"..P.  |
00000090  74 72 69 67 67 65 72 25  20 3d 20 b9 0d 00 5a 04  |trigger% = ...Z.|
000000a0  0d 00 64 17 20 20 f4 20  4e 75 6d 62 65 72 20 6f  |..d.  . Number o|
000000b0  66 20 73 74 61 72 73 0d  00 6e 10 20 20 73 25 20  |f stars..n.  s% |
000000c0  20 20 3d 20 35 31 32 0d  00 78 06 20 20 0d 00 82  |  = 512..x.  ...|
000000d0  26 20 20 f4 20 20 54 6f  70 20 6f 66 20 62 6f 75  |&  .  Top of bou|
000000e0  6e 64 69 6e 67 20 62 6f  78 20 69 6e 20 70 69 78  |nding box in pix|
000000f0  65 6c 73 0d 00 8c 0e 20  20 74 6f 70 25 20 3d 20  |els....  top% = |
00000100  34 0d 00 96 06 20 20 0d  00 a0 29 20 20 f4 20 20  |4....  ...)  .  |
00000110  42 6f 74 74 6f 6d 20 6f  66 20 62 6f 75 6e 64 69  |Bottom of boundi|
00000120  6e 67 20 62 6f 78 20 69  6e 20 70 69 78 65 6c 73  |ng box in pixels|
00000130  0d 00 aa 10 20 20 62 6f  74 25 20 3d 20 31 37 30  |....  bot% = 170|
00000140  0d 00 b4 04 0d 00 be 2a  20 20 f4 20 20 53 74 61  |.......*  .  Sta|
00000150  72 20 63 6f 6c 6f 75 72  73 20 69 6e 20 72 61 77  |r colours in raw|
00000160  20 63 6f 6c 6f 75 72 20  76 61 6c 75 65 73 0d 00  | colour values..|
00000170  c8 1a 20 20 dc 20 20 34  35 2c 20 20 34 37 2c 20  |..  .  45,  47, |
00000180  32 30 38 2c 20 32 30 38  0d 00 d2 1a 20 20 dc 20  |208, 208....  . |
00000190  32 30 39 2c 20 32 30 39  2c 20 32 31 30 2c 20 32  |209, 209, 210, 2|
000001a0  31 30 0d 00 dc 1a 20 20  dc 20 32 31 31 2c 20 32  |10....  . 211, 2|
000001b0  31 31 2c 20 32 35 32 2c  20 32 35 32 0d 00 e6 1a  |11, 252, 252....|
000001c0  20 20 dc 20 32 35 33 2c  20 32 35 34 2c 20 32 35  |  . 253, 254, 25|
000001d0  34 2c 20 32 35 35 0d 00  f0 04 0d 00 fa 04 0d 01  |4, 255..........|
000001e0  04 04 0d 01 0e 15 6d 6f  64 75 6c 65 24 20 3d 20  |......module$ = |
000001f0  22 53 74 61 72 73 22 0d  01 18 04 0d 01 22 15 c8  |"Stars"......"..|
00000200  99 20 22 48 6f 75 72 67  6c 61 73 73 5f 4f 6e 22  |. "Hourglass_On"|
00000210  0d 01 2c 0d f2 61 73 73  65 6d 62 6c 65 0d 01 36  |..,..assemble..6|
00000220  09 f2 69 6e 69 74 0d 01  40 04 0d 01 4a 41 ff 22  |..init..@...JA."|
00000230  53 41 56 45 20 20 20 20  3c 4d 6f 64 75 6c 65 73  |SAVE    <Modules|
00000240  24 44 69 72 3e 2e 22 2b  6d 6f 64 75 6c 65 24 2b  |$Dir>."+module$+|
00000250  22 2e 4d 6f 64 75 6c 65  20 22 2b c3 7e 63 6f 64  |".Module "+.~cod|
00000260  65 25 2b 22 20 22 2b c3  7e 50 25 0d 01 54 34 ff  |e%+" "+.~P%..T4.|
00000270  22 53 45 54 54 59 50 45  20 3c 4d 6f 64 75 6c 65  |"SETTYPE <Module|
00000280  73 24 44 69 72 3e 2e 22  2b 6d 6f 64 75 6c 65 24  |s$Dir>."+module$|
00000290  2b 22 2e 4d 6f 64 75 6c  65 20 44 61 74 61 22 0d  |+".Module Data".|
000002a0  01 5e 04 0d 01 68 16 c8  99 20 22 48 6f 75 72 67  |.^...h... "Hourg|
000002b0  6c 61 73 73 5f 4f 66 66  22 0d 01 72 05 e0 0d 01  |lass_Off"..r....|
000002c0  7c 04 0d 01 86 04 0d 01  90 04 0d 01 9a 0f dd 20  ||.............. |
000002d0  f2 61 73 73 65 6d 62 6c  65 0d 01 a4 23 20 20 6c  |.assemble...#  l|
000002e0  65 6e 25 20 3d 20 28 32  20 2a 20 31 30 32 34 29  |en% = (2 * 1024)|
000002f0  20 2b 20 28 73 25 20 2a  20 31 32 29 0d 01 ae 12  | + (s% * 12)....|
00000300  20 20 de 20 63 6f 64 65  25 20 6c 65 6e 25 0d 01  |  . code% len%..|
00000310  b8 1a 20 20 e3 20 70 61  73 73 25 20 3d 20 38 20  |..  . pass% = 8 |
00000320  b8 20 31 30 20 88 20 32  0d 01 c2 12 20 20 20 20  |. 10 . 2....    |
00000330  50 25 20 3d 20 63 6f 64  65 25 0d 01 cc 19 20 20  |P% = code%....  |
00000340  20 20 4c 25 20 3d 20 63  6f 64 65 25 20 2b 20 6c  |  L% = code% + l|
00000350  65 6e 25 0d 01 d6 13 20  20 20 20 5b 20 4f 50 54  |en%....    [ OPT|
00000360  20 70 61 73 73 25 0d 01  e0 08 20 20 20 20 0d 01  | pass%....    ..|
00000370  ea 04 0d 01 f4 19 2e 69  6e 69 74 20 20 20 20 20  |.......init     |
00000380  20 20 20 45 51 55 44 20  20 20 30 0d 01 fe 25 2e  |   EQUD   0...%.|
00000390  66 72 61 6d 65 20 20 20  20 20 20 20 45 51 55 44  |frame       EQUD|
000003a0  20 20 20 73 74 61 72 73  20 2d 20 63 6f 64 65 25  |   stars - code%|
000003b0  0d 02 08 19 2e 65 6e 64  20 20 20 20 20 20 20 20  |.....end        |
000003c0  20 45 51 55 44 20 20 20  30 0d 02 12 04 0d 02 1c  | EQUD   0.......|
000003d0  04 0d 02 26 29 2e 73 74  61 72 73 20 20 20 20 20  |...&).stars     |
000003e0  20 20 53 54 4d 46 44 20  20 52 31 33 21 2c 7b 52  |  STMFD  R13!,{R|
000003f0  30 2d 52 31 31 2c 52 31  34 7d 0d 02 30 12 20 20  |0-R11,R14}..0.  |
00000400  20 20 20 20 20 20 20 20  20 20 20 5d 0d 02 3a 1d  |           ]..:.|
00000410  20 20 20 20 20 20 20 20  20 20 20 20 20 e7 20 74  |             . t|
00000420  72 69 67 67 65 72 25 20  8c 0d 02 44 1d 20 20 20  |rigger% ...D.   |
00000430  20 20 20 20 20 20 20 20  20 20 20 20 5b 4f 50 54  |            [OPT|
00000440  20 70 61 73 73 25 0d 02  4e 3e 20 20 20 20 20 20  | pass%..N>      |
00000450  20 20 20 20 20 20 20 20  20 54 53 54 20 20 20 20  |         TST    |
00000460  52 31 31 2c 23 28 20 31  20 3c 3c 20 28 97 28 22  |R11,#( 1 << (.("|
00000470  7a 22 29 20 2d 20 97 28  74 72 69 67 67 65 72 24  |z") - .(trigger$|
00000480  29 29 20 29 0d 02 58 23  20 20 20 20 20 20 20 20  |)) )..X#        |
00000490  20 20 20 20 20 20 20 42  45 51 20 20 20 20 73 74  |       BEQ    st|
000004a0  61 72 73 5f 65 6e 64 0d  02 62 14 20 20 20 20 20  |ars_end..b.     |
000004b0  20 20 20 20 20 20 20 20  20 20 5d 0d 02 6c 12 20  |          ]..l. |
000004c0  20 20 20 20 20 20 20 20  20 20 20 20 cd 0d 02 76  |            ...v|
000004d0  1b 20 20 20 20 20 20 20  20 20 20 20 20 20 5b 4f  |.             [O|
000004e0  50 54 20 70 61 73 73 25  0d 02 80 11 20 20 20 20  |PT pass%....    |
000004f0  20 20 20 20 20 20 20 20  20 0d 02 8a 1f 20 20 20  |         ....   |
00000500  20 20 20 20 20 20 20 20  20 20 4c 44 52 20 20 20  |          LDR   |
00000510  20 52 30 2c 76 61 72 25  0d 02 94 1e 20 20 20 20  | R0,var%....    |
00000520  20 20 20 20 20 20 20 20  20 43 4d 50 20 20 20 20  |         CMP    |
00000530  52 30 2c 23 73 25 0d 02  9e 20 20 20 20 20 20 20  |R0,#s%...       |
00000540  20 20 20 20 20 20 20 41  44 44 4c 54 20 20 52 30  |       ADDLT  R0|
00000550  2c 52 30 2c 23 31 0d 02  a8 1f 20 20 20 20 20 20  |,R0,#1....      |
00000560  20 20 20 20 20 20 20 53  54 52 20 20 20 20 52 30  |       STR    R0|
00000570  2c 76 61 72 25 0d 02 b2  3c 20 20 20 20 20 20 20  |,var%...<       |
00000580  20 20 20 20 20 20 41 44  52 20 20 20 20 52 32 2c  |      ADR    R2,|
00000590  74 61 62 6c 65 25 20 20  20 20 20 20 20 3b 20 72  |table%       ; r|
000005a0  32 3d 73 74 61 72 20 64  61 74 61 20 74 61 62 6c  |2=star data tabl|
000005b0  65 0d 02 bc 3d 20 20 20  20 20 20 20 20 20 20 20  |e...=           |
000005c0  20 20 4c 44 52 20 20 20  20 52 38 2c 6d 61 78 5f  |  LDR    R8,max_|
000005d0  73 63 72 25 20 20 20 20  20 3b 20 72 38 3d 6d 61  |scr%     ; r8=ma|
000005e0  78 69 6d 75 6d 20 73 74  61 72 20 70 6f 73 0d 02  |ximum star pos..|
000005f0  c6 3d 20 20 20 20 20 20  20 20 20 20 20 20 20 4c  |.=             L|
00000600  44 52 20 20 20 20 52 39  2c 74 6f 70 5f 73 63 72  |DR    R9,top_scr|
00000610  25 20 20 20 20 20 3b 20  72 39 3d 6d 69 6e 69 6d  |%     ; r9=minim|
00000620  75 6d 20 73 74 61 72 20  70 6f 73 0d 02 d0 43 2e  |um star pos...C.|
00000630  73 74 61 72 73 5f 31 20  20 20 20 20 4c 44 4d 49  |stars_1     LDMI|
00000640  41 20 20 52 32 2c 7b 52  33 2d 52 35 7d 20 20 20  |A  R2,{R3-R5}   |
00000650  20 20 20 3b 20 72 33 3d  70 6f 73 20 72 34 3d 63  |   ; r3=pos r4=c|
00000660  6f 6c 6f 75 72 20 72 35  3d 73 70 65 65 64 0d 02  |olour r5=speed..|
00000670  da 37 20 20 20 20 20 20  20 20 20 20 20 20 20 41  |.7             A|
00000680  44 44 20 20 20 20 52 33  2c 52 33 2c 52 35 20 20  |DD    R3,R3,R5  |
00000690  20 20 20 20 20 20 3b 20  70 6f 73 3d 70 6f 73 2b  |      ; pos=pos+|
000006a0  73 70 65 65 64 0d 02 e4  3b 20 20 20 20 20 20 20  |speed...;       |
000006b0  20 20 20 20 20 20 43 4d  50 20 20 20 20 52 33 2c  |      CMP    R3,|
000006c0  52 38 20 20 20 20 20 20  20 20 20 20 20 3b 20 69  |R8           ; i|
000006d0  73 20 70 6f 73 3e 3d 6d  61 78 5f 70 6f 73 20 3f  |s pos>=max_pos ?|
000006e0  0d 02 ee 3c 20 20 20 20  20 20 20 20 20 20 20 20  |...<            |
000006f0  20 4d 4f 56 47 45 20 20  52 33 2c 52 39 20 20 20  | MOVGE  R3,R9   |
00000700  20 20 20 20 20 20 20 20  3b 20 69 66 20 73 6f 2c  |        ; if so,|
00000710  20 70 6f 73 3d 6d 69 6e  5f 70 6f 73 0d 02 f8 41  | pos=min_pos...A|
00000720  20 20 20 20 20 20 20 20  20 20 20 20 20 53 54 52  |             STR|
00000730  20 20 20 20 52 33 2c 5b  52 32 5d 2c 23 31 32 20  |    R3,[R2],#12 |
00000740  20 20 20 20 3b 20 73 74  6f 72 65 20 70 6f 73 20  |    ; store pos |
00000750  69 6e 20 73 74 61 72 20  74 61 62 6c 65 0d 03 02  |in star table...|
00000760  35 20 20 20 20 20 20 20  20 20 20 20 20 20 4d 4f  |5             MO|
00000770  56 20 20 20 20 52 33 2c  52 33 2c 4c 53 52 23 31  |V    R3,R3,LSR#1|
00000780  30 20 20 20 20 3b 20 70  6f 73 3d 70 6f 73 3e 3e  |0    ; pos=pos>>|
00000790  31 30 0d 03 0c 3f 20 20  20 20 20 20 20 20 20 20  |10...?          |
000007a0  20 20 20 41 44 44 20 20  20 20 52 36 2c 52 33 2c  |   ADD    R6,R3,|
000007b0  52 31 32 20 20 20 20 20  20 20 3b 20 72 36 3d 70  |R12       ; r6=p|
000007c0  6f 73 2b 73 63 72 65 65  6e 5f 61 64 64 72 65 73  |os+screen_addres|
000007d0  73 0d 03 16 43 20 20 20  20 20 20 20 20 20 20 20  |s...C           |
000007e0  20 20 4c 44 52 42 20 20  20 52 37 2c 5b 52 36 5d  |  LDRB   R7,[R6]|
000007f0  20 20 20 20 20 20 20 20  20 3b 20 67 65 74 20 62  |         ; get b|
00000800  79 74 65 20 61 74 20 73  74 61 72 20 70 6f 73 69  |yte at star posi|
00000810  74 69 6f 6e 0d 03 20 37  20 20 20 20 20 20 20 20  |tion.. 7        |
00000820  20 20 20 20 20 43 4d 50  20 20 20 20 52 37 2c 23  |     CMP    R7,#|
00000830  30 20 20 20 20 20 20 20  20 20 20 20 3b 20 69 73  |0           ; is|
00000840  20 69 74 20 62 6c 61 63  6b 20 3f 0d 03 2a 3a 20  | it black ?..*: |
00000850  20 20 20 20 20 20 20 20  20 20 20 20 53 54 52 45  |            STRE|
00000860  51 42 20 52 34 2c 5b 52  36 5d 20 20 20 20 20 20  |QB R4,[R6]      |
00000870  20 20 20 3b 20 69 66 20  73 6f 2c 20 70 6c 6f 74  |   ; if so, plot|
00000880  20 73 74 61 72 0d 03 34  45 20 20 20 20 20 20 20  | star..4E       |
00000890  20 20 20 20 20 20 53 55  42 53 20 20 20 52 30 2c  |      SUBS   R0,|
000008a0  52 30 2c 23 31 20 20 20  20 20 20 20 20 3b 20 61  |R0,#1        ; a|
000008b0  72 65 20 74 68 65 72 65  20 6d 6f 72 65 20 73 74  |re there more st|
000008c0  61 72 73 20 6c 65 66 74  20 3f 0d 03 3e 40 20 20  |ars left ?..>@  |
000008d0  20 20 20 20 20 20 20 20  20 20 20 42 4e 45 20 20  |           BNE  |
000008e0  20 20 73 74 61 72 73 5f  31 20 20 20 20 20 20 20  |  stars_1       |
000008f0  20 20 3b 20 69 66 20 73  6f 2c 20 67 6f 20 74 6f  |  ; if so, go to|
00000900  20 27 73 74 61 72 73 5f  31 27 0d 03 48 2e 2e 73  | 'stars_1'..H..s|
00000910  74 61 72 73 5f 65 6e 64  20 20 20 4c 44 4d 46 44  |tars_end   LDMFD|
00000920  20 20 52 31 33 21 2c 7b  52 30 2d 52 31 31 2c 50  |  R13!,{R0-R11,P|
00000930  43 7d 3b 20 65 78 69 74  0d 03 52 04 0d 03 5c 04  |C}; exit..R...\.|
00000940  0d 03 66 19 2e 76 61 72  25 20 20 20 20 20 20 20  |..f..var%       |
00000950  20 45 51 55 44 20 20 20  30 0d 03 70 28 2e 6d 61  | EQUD   0..p(.ma|
00000960  78 5f 73 63 72 25 20 20  20 20 45 51 55 44 20 20  |x_scr%    EQUD  |
00000970  20 28 28 62 6f 74 25 2a  33 32 30 29 3c 3c 31 30  | ((bot%*320)<<10|
00000980  29 0d 03 7a 28 2e 74 6f  70 5f 73 63 72 25 20 20  |)..z(.top_scr%  |
00000990  20 20 45 51 55 44 20 20  20 28 28 74 6f 70 25 2a  |  EQUD   ((top%*|
000009a0  33 32 30 29 3c 3c 31 30  29 0d 03 84 1e 2e 74 61  |320)<<10).....ta|
000009b0  62 6c 65 25 20 20 20 20  20 20 a4 61 72 72 61 79  |ble%      .array|
000009c0  28 73 25 2a 31 32 29 0d  03 8e 04 0d 03 98 04 0d  |(s%*12).........|
000009d0  03 a2 04 0d 03 ac 09 20  20 20 20 5d 0d 03 b6 07  |.......    ]....|
000009e0  20 20 ed 0d 03 c0 05 e1  0d 03 ca 04 0d 03 d4 04  |  ..............|
000009f0  0d 03 de 04 0d 03 e8 13  dd 20 a4 61 72 72 61 79  |......... .array|
00000a00  28 73 69 7a 65 25 29 0d  03 f2 11 20 20 50 25 20  |(size%)....  P% |
00000a10  2b 3d 20 73 69 7a 65 25  0d 03 fc 07 3d 20 30 0d  |+= size%....= 0.|
00000a20  04 06 04 0d 04 10 04 0d  04 1a 04 0d 04 24 0b dd  |.............$..|
00000a30  20 f2 69 6e 69 74 0d 04  2e 13 20 20 ea 20 49 25  | .init....  . I%|
00000a40  2c 74 25 2c 74 79 70 65  25 0d 04 38 04 0d 04 42  |,t%,type%..8...B|
00000a50  10 20 20 de 20 63 6f 6c  25 28 31 35 29 0d 04 4c  |.  . col%(15)..L|
00000a60  13 20 20 e3 20 49 25 20  3d 20 30 20 b8 20 31 35  |.  . I% = 0 . 15|
00000a70  0d 04 56 12 20 20 20 20  f3 20 63 6f 6c 25 28 49  |..V.    . col%(I|
00000a80  25 29 0d 04 60 07 20 20  ed 0d 04 6a 06 20 20 0d  |%)..`.  ...j.  .|
00000a90  04 74 19 20 20 e3 20 49  25 20 3d 20 30 20 b8 20  |.t.  . I% = 0 . |
00000aa0  28 73 25 20 2d 20 31 29  0d 04 7e 22 20 20 20 20  |(s% - 1)..~"    |
00000ab0  74 25 20 20 20 20 3d 20  74 61 62 6c 65 25 20 2b  |t%    = table% +|
00000ac0  20 28 49 25 20 2a 20 31  32 29 0d 04 88 26 20 20  | (I% * 12)...&  |
00000ad0  20 20 74 79 70 65 25 20  3d 20 28 20 49 25 20 2f  |  type% = ( I% /|
00000ae0  20 28 73 25 20 2f 20 31  32 29 20 29 20 2b 20 31  | (s% / 12) ) + 1|
00000af0  0d 04 92 42 20 20 20 20  74 25 21 30 20 20 3d 20  |...B    t%!0  = |
00000b00  28 28 b3 28 62 6f 74 25  2d 74 6f 70 25 29 20 2b  |((.(bot%-top%) +|
00000b10  20 74 6f 70 25 29 20 2a  20 28 33 32 30 3c 3c 31  | top%) * (320<<1|
00000b20  30 29 29 20 2b 20 28 b3  28 33 31 39 29 3c 3c 31  |0)) + (.(319)<<1|
00000b30  30 29 0d 04 9c 1d 20 20  20 20 74 25 21 34 20 20  |0)....    t%!4  |
00000b40  3d 20 63 6f 6c 25 28 74  79 70 65 25 2d 31 29 0d  |= col%(type%-1).|
00000b50  04 a6 25 20 20 20 20 74  25 21 38 20 20 3d 20 28  |..%    t%!8  = (|
00000b60  74 79 70 65 25 3c 3c 38  29 20 2b 20 b3 28 31 36  |type%<<8) + .(16|
00000b70  3c 3c 38 29 0d 04 b0 07  20 20 ed 0d 04 ba 04 0d  |<<8)....  ......|
00000b80  04 c4 05 e1 0d ff                                 |......|
00000b86