Home » CEEFAX disks » telesoftware1.adl » Utils/DUALSC2

Utils/DUALSC2

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 » CEEFAX disks » telesoftware1.adl
Filename: Utils/DUALSC2
Read OK:
File size: 0CCF bytes
Load address: 1900
Exec address: 8023
File contents
   10REM Demo of BBC second processor dual screen utility
   20REM (C) The Micro User
   30REM By Pete Gaunt
   40REM Run code in I/O processor
   50*RUN DUALSCN
   60REM Switch to Mode 4 and set up two screens
   70*CODE22,4
   80REM Output to screen 2 and set graphics origin
   90ELSE

2,0
  100VDU29,640;512;23;8202;0;0;0;
  110REM Output to screen 1 and set up origin
  120*CODE1,0
  130VDU29,640;512;23;8202;0;0;0;
  140REM Turn off separate palettes (slight speed increase)
  150*CODE20
  160ON ERROR GOTO810
  170VDU19,1,6;0;
  180PROCget_data
  190x_rot=3:y_rot=-2:z_rot=-1
  200x_rot=90-x_rot:y_rot=90-y_rot:z_rot=90-z_rot
  210cos_x=COSRADx_rot:sin_x=SINRADx_rot
  220cos_y=COSRADy_rot:sin_y=SINRADy_rot
  230cos_z=COSRADz_rot:sin_z=SINRADz_rot
  240REM This could be done more briefly with an inner loop and using the
  250REM OSCLI command. Done this way for clarity.
  260REPEAT
  270REM Output to screen 1
  280*CODE1,0
  290PROCrotate_coordinates
  300PROCconvert_to_2D
  310CLS
  320PROCdraw_shape
  330REM Reveal screen 1
  340*CODE1,1
  350REM Output to screen 2
  360*CODE2,0
  370PROCrotate_coordinates
  380PROCconvert_to_2D
  390CLS
  400PROCdraw_shape
  410REM Reveal screen 2
  420*CODE2,1
  430UNTIL FALSE
  440END
  450DEFPROCconvert_to_2D
  460LOCAL C%,D
  470FORC%=1 TO no_of_points%
  480D=2500/(5000-Z(C%))
  490X_2D(C%)=X(C%)*D
  500Y_2D(C%)=Y(C%)*D
  510NEXT
  520ENDPROC
  530DEFPROCrotate_coordinates
  540LOCAL C%,X,Y,Z
  550FOR C%=1 TO no_of_points%
  560IF x_rot<>0:X=X(C%):Y=Y(C%):Z=Z(C%):Z(C%)=Z*sin_x-Y*cos_x:Y(C%)=Y*sin_x+Z*cos_x
  570IF y_rot<>0:X=X(C%):Y=Y(C%):Z=Z(C%):Z(C%)=Z*sin_y-X*cos_y:X(C%)=X*sin_y+Z*cos_y
  580IF z_rot<>0:X=X(C%):Y=Y(C%):Z=Z(C%):Y(C%)=Y*sin_z-X*cos_z:X(C%)=X*sin_z+Y*cos_z
  590NEXT
  600ENDPROC
  610DEFPROCdraw_shape
  620LOCAL C%
  630FOR C%=1 TO no_of_lines%
  640MOVE X_2D(start_corner%(C%)),Y_2D(start_corner%(C%))
  650PLOT5,X_2D(end_corner%(C%)),Y_2D(end_corner%(C%))
  660NEXT
  670ENDPROC
  680DEFPROCget_data
  690LOCAL C%
  700READ no_of_points%
  710DIM X(no_of_points%),Y(no_of_points%),Z(no_of_points%),X_2D(no_of_points%),Y_2D(no_of_points%)
  720FOR C%=1 TO no_of_points%
  730READ X(C%),Y(C%),Z(C%)
  740NEXT
  750READ no_of_lines%
  760DIM start_corner%(no_of_lines%),end_corner%(no_of_lines%)
  770FOR C%=1 TO no_of_lines%
  780READ start_corner%(C%),end_corner%(C%)
  790NEXT
  800ENDPROC
  810ON ERROR OFF
  820*CODE1,2
  830IF ERR<>17 THEN MODE7:REPORT:PRINT" at line ";ERL:END
  840CLS
  850CLEAR
  860GOTO160
  870REM Cube
  880REM Co-ordinates of points (8)
  890DATA 8,-560,560,560,560,560,560,560,-560,560,-560,-560,560,-560,560,-560,560,560,-560,560,-560,-560,-560,-560,-560
  900REM Connections between points (12 lines)
  910DATA 12,1,2,2,3,3,4,4,1,1,5,2,6,3,7,4,8,5,6,6,7,7,8,8,5
  920:
  930:
  940REM  New commands available:
  950REM  *CODE22,Y Switch to mode Y and set up two screens (4 to 6).
  960REM  *CODEX,0  Use screen X for output (X=1 or 2)
  970REM  *CODEX,1  Display screen X
  980REM  *CODEX,2  Output to and display screen X
  990REM  *CODE3    Copy current output screen to other screen
 1000REM  *CODE4    Tell the user which is the current output screen
 1010REM  *CODE5    Tell the user which screen is currently on display
 1020REM  *CODE26   Restore all windows to the whole screen
 1030REM  *CODE28   Restore text window only to the whole screen
 1040REM  *CODE24   Restore graphics window only to the whole screen
 1050REM  *CODE19   Palettes of two screens to be semi-independent
 1060REM  *CODE20   Both screens to use the same palette
 1070REM
 1080REM  Error Messages:
 1100REM
 1110REM  Mode!    (252) You can only use Modes 4, 5 or 6.
 1120REM  Not set up (254) You haven't yet set up screens with *CODE22
 1130REM  Mode changed (235) You've changed mode since the last *CODE22

6� Demo of BBC second processor dual screen utility
� (C) The Micro User
� By Pete Gaunt
(� Run code in I/O processor
2*RUN DUALSCN
<-� Switch to Mode 4 and set up two screens
F
*CODE22,4
P0� Output to screen 2 and set graphics origin
Z�

2,0
d�29,640;512;23;8202;0;0;0;
n*� Output to screen 1 and set up origin
x*CODE1,0
��29,640;512;23;8202;0;0;0;
�8� Turn off separate palettes (slight speed increase)
�*CODE20
�
� � �TjC
��19,1,6;0;
�
�get_data
�x_rot=3:y_rot=-2:z_rot=-1
�0x_rot=90-x_rot:y_rot=90-y_rot:z_rot=90-z_rot
�cos_x=��x_rot:sin_x=��x_rot
�cos_y=��y_rot:sin_y=��y_rot
�cos_z=��z_rot:sin_z=��z_rot
�F� This could be done more briefly with an inner loop and using the
�/� OSCLI command. Done this way for clarity.
�
� Output to screen 1
*CODE1,0
"�rotate_coordinates
,�convert_to_2D
6�
@�draw_shape
J� Reveal screen 1
T*CODE1,1
^� Output to screen 2
h*CODE2,0
r�rotate_coordinates
|�convert_to_2D
��
��draw_shape
�� Reveal screen 2
�*CODE2,1
�� �
��
���convert_to_2D
�
� C%,D
��C%=1 � no_of_points%
�D=2500/(5000-Z(C%))
�X_2D(C%)=X(C%)*D
�Y_2D(C%)=Y(C%)*D
��
�
��rotate_coordinates
� C%,X,Y,Z
&� C%=1 � no_of_points%
0R� x_rot<>0:X=X(C%):Y=Y(C%):Z=Z(C%):Z(C%)=Z*sin_x-Y*cos_x:Y(C%)=Y*sin_x+Z*cos_x
:R� y_rot<>0:X=X(C%):Y=Y(C%):Z=Z(C%):Z(C%)=Z*sin_y-X*cos_y:X(C%)=X*sin_y+Z*cos_y
DR� z_rot<>0:X=X(C%):Y=Y(C%):Z=Z(C%):Y(C%)=Y*sin_z-X*cos_z:X(C%)=X*sin_z+Y*cos_z
N�
X�
b��draw_shape
l� C%
v� C%=1 � no_of_lines%
�5� X_2D(start_corner%(C%)),Y_2D(start_corner%(C%))
�2�5,X_2D(end_corner%(C%)),Y_2D(end_corner%(C%))
��
��
���get_data
�� C%
�� no_of_points%
�`� X(no_of_points%),Y(no_of_points%),Z(no_of_points%),X_2D(no_of_points%),Y_2D(no_of_points%)
�� C%=1 � no_of_points%
�� X(C%),Y(C%),Z(C%)
��
�� no_of_lines%
�;� start_corner%(no_of_lines%),end_corner%(no_of_lines%)
� C%=1 � no_of_lines%
'� start_corner%(C%),end_corner%(C%)
�
 �
*	� � �
4*CODE1,2
>#� �<>17 � �7:�:�" at line ";�:�
H�
R�
\	�t`@
f
� Cube
p � Co-ordinates of points (8)
zs� 8,-560,560,560,560,560,560,560,-560,560,-560,-560,560,-560,560,-560,560,560,-560,560,-560,-560,-560,-560,-560
�+� Connections between points (12 lines)
�8� 12,1,2,2,3,3,4,4,1,1,5,2,6,3,7,4,8,5,6,6,7,7,8,8,5
�:
�:
��  New commands available:
�B�  *CODE22,Y Switch to mode Y and set up two screens (4 to 6).
�3�  *CODEX,0  Use screen X for output (X=1 or 2)
�!�  *CODEX,1  Display screen X
�/�  *CODEX,2  Output to and display screen X
�;�  *CODE3    Copy current output screen to other screen
�A�  *CODE4    Tell the user which is the current output screen
�C�  *CODE5    Tell the user which screen is currently on display
�8�  *CODE26   Restore all windows to the whole screen
=�  *CODE28   Restore text window only to the whole screen
A�  *CODE24   Restore graphics window only to the whole screen
?�  *CODE19   Palettes of two screens to be semi-independent
$5�  *CODE20   Both screens to use the same palette
.�
8�  Error Messages:
L�
V7�  Mode!    (252) You can only use Modes 4, 5 or 6.
`C�  Not set up (254) You haven't yet set up screens with *CODE22
jD�  Mode changed (235) You've changed mode since the last *CODE22
�
00000000  0d 00 0a 36 f4 20 44 65  6d 6f 20 6f 66 20 42 42  |...6. Demo of BB|
00000010  43 20 73 65 63 6f 6e 64  20 70 72 6f 63 65 73 73  |C second process|
00000020  6f 72 20 64 75 61 6c 20  73 63 72 65 65 6e 20 75  |or dual screen u|
00000030  74 69 6c 69 74 79 0d 00  14 18 f4 20 28 43 29 20  |tility..... (C) |
00000040  54 68 65 20 4d 69 63 72  6f 20 55 73 65 72 0d 00  |The Micro User..|
00000050  1e 13 f4 20 42 79 20 50  65 74 65 20 47 61 75 6e  |... By Pete Gaun|
00000060  74 0d 00 28 1f f4 20 52  75 6e 20 63 6f 64 65 20  |t..(.. Run code |
00000070  69 6e 20 49 2f 4f 20 70  72 6f 63 65 73 73 6f 72  |in I/O processor|
00000080  0d 00 32 10 2a 52 55 4e  20 44 55 41 4c 53 43 4e  |..2.*RUN DUALSCN|
00000090  0d 00 3c 2d f4 20 53 77  69 74 63 68 20 74 6f 20  |..<-. Switch to |
000000a0  4d 6f 64 65 20 34 20 61  6e 64 20 73 65 74 20 75  |Mode 4 and set u|
000000b0  70 20 74 77 6f 20 73 63  72 65 65 6e 73 0d 00 46  |p two screens..F|
000000c0  0d 2a 43 4f 44 45 32 32  2c 34 0d 00 50 30 f4 20  |.*CODE22,4..P0. |
000000d0  4f 75 74 70 75 74 20 74  6f 20 73 63 72 65 65 6e  |Output to screen|
000000e0  20 32 20 61 6e 64 20 73  65 74 20 67 72 61 70 68  | 2 and set graph|
000000f0  69 63 73 20 6f 72 69 67  69 6e 0d 00 5a 0c 05 cc  |ics origin..Z...|
00000100  0d 0d 00 32 2c 30 0d 00  64 1e ef 32 39 2c 36 34  |...2,0..d..29,64|
00000110  30 3b 35 31 32 3b 32 33  3b 38 32 30 32 3b 30 3b  |0;512;23;8202;0;|
00000120  30 3b 30 3b 0d 00 6e 2a  f4 20 4f 75 74 70 75 74  |0;0;..n*. Output|
00000130  20 74 6f 20 73 63 72 65  65 6e 20 31 20 61 6e 64  | to screen 1 and|
00000140  20 73 65 74 20 75 70 20  6f 72 69 67 69 6e 0d 00  | set up origin..|
00000150  78 0c 2a 43 4f 44 45 31  2c 30 0d 00 82 1e ef 32  |x.*CODE1,0.....2|
00000160  39 2c 36 34 30 3b 35 31  32 3b 32 33 3b 38 32 30  |9,640;512;23;820|
00000170  32 3b 30 3b 30 3b 30 3b  0d 00 8c 38 f4 20 54 75  |2;0;0;0;...8. Tu|
00000180  72 6e 20 6f 66 66 20 73  65 70 61 72 61 74 65 20  |rn off separate |
00000190  70 61 6c 65 74 74 65 73  20 28 73 6c 69 67 68 74  |palettes (slight|
000001a0  20 73 70 65 65 64 20 69  6e 63 72 65 61 73 65 29  | speed increase)|
000001b0  0d 00 96 0b 2a 43 4f 44  45 32 30 0d 00 a0 0d ee  |....*CODE20.....|
000001c0  20 85 20 e5 8d 54 6a 43  0d 00 aa 0e ef 31 39 2c  | . ..TjC.....19,|
000001d0  31 2c 36 3b 30 3b 0d 00  b4 0d f2 67 65 74 5f 64  |1,6;0;.....get_d|
000001e0  61 74 61 0d 00 be 1d 78  5f 72 6f 74 3d 33 3a 79  |ata....x_rot=3:y|
000001f0  5f 72 6f 74 3d 2d 32 3a  7a 5f 72 6f 74 3d 2d 31  |_rot=-2:z_rot=-1|
00000200  0d 00 c8 30 78 5f 72 6f  74 3d 39 30 2d 78 5f 72  |...0x_rot=90-x_r|
00000210  6f 74 3a 79 5f 72 6f 74  3d 39 30 2d 79 5f 72 6f  |ot:y_rot=90-y_ro|
00000220  74 3a 7a 5f 72 6f 74 3d  39 30 2d 7a 5f 72 6f 74  |t:z_rot=90-z_rot|
00000230  0d 00 d2 1f 63 6f 73 5f  78 3d 9b b2 78 5f 72 6f  |....cos_x=..x_ro|
00000240  74 3a 73 69 6e 5f 78 3d  b5 b2 78 5f 72 6f 74 0d  |t:sin_x=..x_rot.|
00000250  00 dc 1f 63 6f 73 5f 79  3d 9b b2 79 5f 72 6f 74  |...cos_y=..y_rot|
00000260  3a 73 69 6e 5f 79 3d b5  b2 79 5f 72 6f 74 0d 00  |:sin_y=..y_rot..|
00000270  e6 1f 63 6f 73 5f 7a 3d  9b b2 7a 5f 72 6f 74 3a  |..cos_z=..z_rot:|
00000280  73 69 6e 5f 7a 3d b5 b2  7a 5f 72 6f 74 0d 00 f0  |sin_z=..z_rot...|
00000290  46 f4 20 54 68 69 73 20  63 6f 75 6c 64 20 62 65  |F. This could be|
000002a0  20 64 6f 6e 65 20 6d 6f  72 65 20 62 72 69 65 66  | done more brief|
000002b0  6c 79 20 77 69 74 68 20  61 6e 20 69 6e 6e 65 72  |ly with an inner|
000002c0  20 6c 6f 6f 70 20 61 6e  64 20 75 73 69 6e 67 20  | loop and using |
000002d0  74 68 65 0d 00 fa 2f f4  20 4f 53 43 4c 49 20 63  |the.../. OSCLI c|
000002e0  6f 6d 6d 61 6e 64 2e 20  44 6f 6e 65 20 74 68 69  |ommand. Done thi|
000002f0  73 20 77 61 79 20 66 6f  72 20 63 6c 61 72 69 74  |s way for clarit|
00000300  79 2e 0d 01 04 05 f5 0d  01 0e 18 f4 20 4f 75 74  |y........... Out|
00000310  70 75 74 20 74 6f 20 73  63 72 65 65 6e 20 31 0d  |put to screen 1.|
00000320  01 18 0c 2a 43 4f 44 45  31 2c 30 0d 01 22 17 f2  |...*CODE1,0.."..|
00000330  72 6f 74 61 74 65 5f 63  6f 6f 72 64 69 6e 61 74  |rotate_coordinat|
00000340  65 73 0d 01 2c 12 f2 63  6f 6e 76 65 72 74 5f 74  |es..,..convert_t|
00000350  6f 5f 32 44 0d 01 36 05  db 0d 01 40 0f f2 64 72  |o_2D..6....@..dr|
00000360  61 77 5f 73 68 61 70 65  0d 01 4a 15 f4 20 52 65  |aw_shape..J.. Re|
00000370  76 65 61 6c 20 73 63 72  65 65 6e 20 31 0d 01 54  |veal screen 1..T|
00000380  0c 2a 43 4f 44 45 31 2c  31 0d 01 5e 18 f4 20 4f  |.*CODE1,1..^.. O|
00000390  75 74 70 75 74 20 74 6f  20 73 63 72 65 65 6e 20  |utput to screen |
000003a0  32 0d 01 68 0c 2a 43 4f  44 45 32 2c 30 0d 01 72  |2..h.*CODE2,0..r|
000003b0  17 f2 72 6f 74 61 74 65  5f 63 6f 6f 72 64 69 6e  |..rotate_coordin|
000003c0  61 74 65 73 0d 01 7c 12  f2 63 6f 6e 76 65 72 74  |ates..|..convert|
000003d0  5f 74 6f 5f 32 44 0d 01  86 05 db 0d 01 90 0f f2  |_to_2D..........|
000003e0  64 72 61 77 5f 73 68 61  70 65 0d 01 9a 15 f4 20  |draw_shape..... |
000003f0  52 65 76 65 61 6c 20 73  63 72 65 65 6e 20 32 0d  |Reveal screen 2.|
00000400  01 a4 0c 2a 43 4f 44 45  32 2c 31 0d 01 ae 07 fd  |...*CODE2,1.....|
00000410  20 a3 0d 01 b8 05 e0 0d  01 c2 13 dd f2 63 6f 6e  | ............con|
00000420  76 65 72 74 5f 74 6f 5f  32 44 0d 01 cc 0a ea 20  |vert_to_2D..... |
00000430  43 25 2c 44 0d 01 d6 19  e3 43 25 3d 31 20 b8 20  |C%,D.....C%=1 . |
00000440  6e 6f 5f 6f 66 5f 70 6f  69 6e 74 73 25 0d 01 e0  |no_of_points%...|
00000450  17 44 3d 32 35 30 30 2f  28 35 30 30 30 2d 5a 28  |.D=2500/(5000-Z(|
00000460  43 25 29 29 0d 01 ea 14  58 5f 32 44 28 43 25 29  |C%))....X_2D(C%)|
00000470  3d 58 28 43 25 29 2a 44  0d 01 f4 14 59 5f 32 44  |=X(C%)*D....Y_2D|
00000480  28 43 25 29 3d 59 28 43  25 29 2a 44 0d 01 fe 05  |(C%)=Y(C%)*D....|
00000490  ed 0d 02 08 05 e1 0d 02  12 18 dd f2 72 6f 74 61  |............rota|
000004a0  74 65 5f 63 6f 6f 72 64  69 6e 61 74 65 73 0d 02  |te_coordinates..|
000004b0  1c 0e ea 20 43 25 2c 58  2c 59 2c 5a 0d 02 26 1a  |... C%,X,Y,Z..&.|
000004c0  e3 20 43 25 3d 31 20 b8  20 6e 6f 5f 6f 66 5f 70  |. C%=1 . no_of_p|
000004d0  6f 69 6e 74 73 25 0d 02  30 52 e7 20 78 5f 72 6f  |oints%..0R. x_ro|
000004e0  74 3c 3e 30 3a 58 3d 58  28 43 25 29 3a 59 3d 59  |t<>0:X=X(C%):Y=Y|
000004f0  28 43 25 29 3a 5a 3d 5a  28 43 25 29 3a 5a 28 43  |(C%):Z=Z(C%):Z(C|
00000500  25 29 3d 5a 2a 73 69 6e  5f 78 2d 59 2a 63 6f 73  |%)=Z*sin_x-Y*cos|
00000510  5f 78 3a 59 28 43 25 29  3d 59 2a 73 69 6e 5f 78  |_x:Y(C%)=Y*sin_x|
00000520  2b 5a 2a 63 6f 73 5f 78  0d 02 3a 52 e7 20 79 5f  |+Z*cos_x..:R. y_|
00000530  72 6f 74 3c 3e 30 3a 58  3d 58 28 43 25 29 3a 59  |rot<>0:X=X(C%):Y|
00000540  3d 59 28 43 25 29 3a 5a  3d 5a 28 43 25 29 3a 5a  |=Y(C%):Z=Z(C%):Z|
00000550  28 43 25 29 3d 5a 2a 73  69 6e 5f 79 2d 58 2a 63  |(C%)=Z*sin_y-X*c|
00000560  6f 73 5f 79 3a 58 28 43  25 29 3d 58 2a 73 69 6e  |os_y:X(C%)=X*sin|
00000570  5f 79 2b 5a 2a 63 6f 73  5f 79 0d 02 44 52 e7 20  |_y+Z*cos_y..DR. |
00000580  7a 5f 72 6f 74 3c 3e 30  3a 58 3d 58 28 43 25 29  |z_rot<>0:X=X(C%)|
00000590  3a 59 3d 59 28 43 25 29  3a 5a 3d 5a 28 43 25 29  |:Y=Y(C%):Z=Z(C%)|
000005a0  3a 59 28 43 25 29 3d 59  2a 73 69 6e 5f 7a 2d 58  |:Y(C%)=Y*sin_z-X|
000005b0  2a 63 6f 73 5f 7a 3a 58  28 43 25 29 3d 58 2a 73  |*cos_z:X(C%)=X*s|
000005c0  69 6e 5f 7a 2b 59 2a 63  6f 73 5f 7a 0d 02 4e 05  |in_z+Y*cos_z..N.|
000005d0  ed 0d 02 58 05 e1 0d 02  62 10 dd f2 64 72 61 77  |...X....b...draw|
000005e0  5f 73 68 61 70 65 0d 02  6c 08 ea 20 43 25 0d 02  |_shape..l.. C%..|
000005f0  76 19 e3 20 43 25 3d 31  20 b8 20 6e 6f 5f 6f 66  |v.. C%=1 . no_of|
00000600  5f 6c 69 6e 65 73 25 0d  02 80 35 ec 20 58 5f 32  |_lines%...5. X_2|
00000610  44 28 73 74 61 72 74 5f  63 6f 72 6e 65 72 25 28  |D(start_corner%(|
00000620  43 25 29 29 2c 59 5f 32  44 28 73 74 61 72 74 5f  |C%)),Y_2D(start_|
00000630  63 6f 72 6e 65 72 25 28  43 25 29 29 0d 02 8a 32  |corner%(C%))...2|
00000640  f0 35 2c 58 5f 32 44 28  65 6e 64 5f 63 6f 72 6e  |.5,X_2D(end_corn|
00000650  65 72 25 28 43 25 29 29  2c 59 5f 32 44 28 65 6e  |er%(C%)),Y_2D(en|
00000660  64 5f 63 6f 72 6e 65 72  25 28 43 25 29 29 0d 02  |d_corner%(C%))..|
00000670  94 05 ed 0d 02 9e 05 e1  0d 02 a8 0e dd f2 67 65  |..............ge|
00000680  74 5f 64 61 74 61 0d 02  b2 08 ea 20 43 25 0d 02  |t_data..... C%..|
00000690  bc 13 f3 20 6e 6f 5f 6f  66 5f 70 6f 69 6e 74 73  |... no_of_points|
000006a0  25 0d 02 c6 60 de 20 58  28 6e 6f 5f 6f 66 5f 70  |%...`. X(no_of_p|
000006b0  6f 69 6e 74 73 25 29 2c  59 28 6e 6f 5f 6f 66 5f  |oints%),Y(no_of_|
000006c0  70 6f 69 6e 74 73 25 29  2c 5a 28 6e 6f 5f 6f 66  |points%),Z(no_of|
000006d0  5f 70 6f 69 6e 74 73 25  29 2c 58 5f 32 44 28 6e  |_points%),X_2D(n|
000006e0  6f 5f 6f 66 5f 70 6f 69  6e 74 73 25 29 2c 59 5f  |o_of_points%),Y_|
000006f0  32 44 28 6e 6f 5f 6f 66  5f 70 6f 69 6e 74 73 25  |2D(no_of_points%|
00000700  29 0d 02 d0 1a e3 20 43  25 3d 31 20 b8 20 6e 6f  |)..... C%=1 . no|
00000710  5f 6f 66 5f 70 6f 69 6e  74 73 25 0d 02 da 17 f3  |_of_points%.....|
00000720  20 58 28 43 25 29 2c 59  28 43 25 29 2c 5a 28 43  | X(C%),Y(C%),Z(C|
00000730  25 29 0d 02 e4 05 ed 0d  02 ee 12 f3 20 6e 6f 5f  |%).......... no_|
00000740  6f 66 5f 6c 69 6e 65 73  25 0d 02 f8 3b de 20 73  |of_lines%...;. s|
00000750  74 61 72 74 5f 63 6f 72  6e 65 72 25 28 6e 6f 5f  |tart_corner%(no_|
00000760  6f 66 5f 6c 69 6e 65 73  25 29 2c 65 6e 64 5f 63  |of_lines%),end_c|
00000770  6f 72 6e 65 72 25 28 6e  6f 5f 6f 66 5f 6c 69 6e  |orner%(no_of_lin|
00000780  65 73 25 29 0d 03 02 19  e3 20 43 25 3d 31 20 b8  |es%)..... C%=1 .|
00000790  20 6e 6f 5f 6f 66 5f 6c  69 6e 65 73 25 0d 03 0c  | no_of_lines%...|
000007a0  27 f3 20 73 74 61 72 74  5f 63 6f 72 6e 65 72 25  |'. start_corner%|
000007b0  28 43 25 29 2c 65 6e 64  5f 63 6f 72 6e 65 72 25  |(C%),end_corner%|
000007c0  28 43 25 29 0d 03 16 05  ed 0d 03 20 05 e1 0d 03  |(C%)....... ....|
000007d0  2a 09 ee 20 85 20 87 0d  03 34 0c 2a 43 4f 44 45  |*.. . ...4.*CODE|
000007e0  31 2c 32 0d 03 3e 23 e7  20 9f 3c 3e 31 37 20 8c  |1,2..>#. .<>17 .|
000007f0  20 eb 37 3a f6 3a f1 22  20 61 74 20 6c 69 6e 65  | .7:.:." at line|
00000800  20 22 3b 9e 3a e0 0d 03  48 05 db 0d 03 52 05 d8  | ";.:...H....R..|
00000810  0d 03 5c 09 e5 8d 74 60  40 0d 03 66 0a f4 20 43  |..\...t`@..f.. C|
00000820  75 62 65 0d 03 70 20 f4  20 43 6f 2d 6f 72 64 69  |ube..p . Co-ordi|
00000830  6e 61 74 65 73 20 6f 66  20 70 6f 69 6e 74 73 20  |nates of points |
00000840  28 38 29 0d 03 7a 73 dc  20 38 2c 2d 35 36 30 2c  |(8)..zs. 8,-560,|
00000850  35 36 30 2c 35 36 30 2c  35 36 30 2c 35 36 30 2c  |560,560,560,560,|
00000860  35 36 30 2c 35 36 30 2c  2d 35 36 30 2c 35 36 30  |560,560,-560,560|
00000870  2c 2d 35 36 30 2c 2d 35  36 30 2c 35 36 30 2c 2d  |,-560,-560,560,-|
00000880  35 36 30 2c 35 36 30 2c  2d 35 36 30 2c 35 36 30  |560,560,-560,560|
00000890  2c 35 36 30 2c 2d 35 36  30 2c 35 36 30 2c 2d 35  |,560,-560,560,-5|
000008a0  36 30 2c 2d 35 36 30 2c  2d 35 36 30 2c 2d 35 36  |60,-560,-560,-56|
000008b0  30 2c 2d 35 36 30 0d 03  84 2b f4 20 43 6f 6e 6e  |0,-560...+. Conn|
000008c0  65 63 74 69 6f 6e 73 20  62 65 74 77 65 65 6e 20  |ections between |
000008d0  70 6f 69 6e 74 73 20 28  31 32 20 6c 69 6e 65 73  |points (12 lines|
000008e0  29 0d 03 8e 38 dc 20 31  32 2c 31 2c 32 2c 32 2c  |)...8. 12,1,2,2,|
000008f0  33 2c 33 2c 34 2c 34 2c  31 2c 31 2c 35 2c 32 2c  |3,3,4,4,1,1,5,2,|
00000900  36 2c 33 2c 37 2c 34 2c  38 2c 35 2c 36 2c 36 2c  |6,3,7,4,8,5,6,6,|
00000910  37 2c 37 2c 38 2c 38 2c  35 0d 03 98 05 3a 0d 03  |7,7,8,8,5....:..|
00000920  a2 05 3a 0d 03 ac 1e f4  20 20 4e 65 77 20 63 6f  |..:.....  New co|
00000930  6d 6d 61 6e 64 73 20 61  76 61 69 6c 61 62 6c 65  |mmands available|
00000940  3a 0d 03 b6 42 f4 20 20  2a 43 4f 44 45 32 32 2c  |:...B.  *CODE22,|
00000950  59 20 53 77 69 74 63 68  20 74 6f 20 6d 6f 64 65  |Y Switch to mode|
00000960  20 59 20 61 6e 64 20 73  65 74 20 75 70 20 74 77  | Y and set up tw|
00000970  6f 20 73 63 72 65 65 6e  73 20 28 34 20 74 6f 20  |o screens (4 to |
00000980  36 29 2e 0d 03 c0 33 f4  20 20 2a 43 4f 44 45 58  |6)....3.  *CODEX|
00000990  2c 30 20 20 55 73 65 20  73 63 72 65 65 6e 20 58  |,0  Use screen X|
000009a0  20 66 6f 72 20 6f 75 74  70 75 74 20 28 58 3d 31  | for output (X=1|
000009b0  20 6f 72 20 32 29 0d 03  ca 21 f4 20 20 2a 43 4f  | or 2)...!.  *CO|
000009c0  44 45 58 2c 31 20 20 44  69 73 70 6c 61 79 20 73  |DEX,1  Display s|
000009d0  63 72 65 65 6e 20 58 0d  03 d4 2f f4 20 20 2a 43  |creen X.../.  *C|
000009e0  4f 44 45 58 2c 32 20 20  4f 75 74 70 75 74 20 74  |ODEX,2  Output t|
000009f0  6f 20 61 6e 64 20 64 69  73 70 6c 61 79 20 73 63  |o and display sc|
00000a00  72 65 65 6e 20 58 0d 03  de 3b f4 20 20 2a 43 4f  |reen X...;.  *CO|
00000a10  44 45 33 20 20 20 20 43  6f 70 79 20 63 75 72 72  |DE3    Copy curr|
00000a20  65 6e 74 20 6f 75 74 70  75 74 20 73 63 72 65 65  |ent output scree|
00000a30  6e 20 74 6f 20 6f 74 68  65 72 20 73 63 72 65 65  |n to other scree|
00000a40  6e 0d 03 e8 41 f4 20 20  2a 43 4f 44 45 34 20 20  |n...A.  *CODE4  |
00000a50  20 20 54 65 6c 6c 20 74  68 65 20 75 73 65 72 20  |  Tell the user |
00000a60  77 68 69 63 68 20 69 73  20 74 68 65 20 63 75 72  |which is the cur|
00000a70  72 65 6e 74 20 6f 75 74  70 75 74 20 73 63 72 65  |rent output scre|
00000a80  65 6e 0d 03 f2 43 f4 20  20 2a 43 4f 44 45 35 20  |en...C.  *CODE5 |
00000a90  20 20 20 54 65 6c 6c 20  74 68 65 20 75 73 65 72  |   Tell the user|
00000aa0  20 77 68 69 63 68 20 73  63 72 65 65 6e 20 69 73  | which screen is|
00000ab0  20 63 75 72 72 65 6e 74  6c 79 20 6f 6e 20 64 69  | currently on di|
00000ac0  73 70 6c 61 79 0d 03 fc  38 f4 20 20 2a 43 4f 44  |splay...8.  *COD|
00000ad0  45 32 36 20 20 20 52 65  73 74 6f 72 65 20 61 6c  |E26   Restore al|
00000ae0  6c 20 77 69 6e 64 6f 77  73 20 74 6f 20 74 68 65  |l windows to the|
00000af0  20 77 68 6f 6c 65 20 73  63 72 65 65 6e 0d 04 06  | whole screen...|
00000b00  3d f4 20 20 2a 43 4f 44  45 32 38 20 20 20 52 65  |=.  *CODE28   Re|
00000b10  73 74 6f 72 65 20 74 65  78 74 20 77 69 6e 64 6f  |store text windo|
00000b20  77 20 6f 6e 6c 79 20 74  6f 20 74 68 65 20 77 68  |w only to the wh|
00000b30  6f 6c 65 20 73 63 72 65  65 6e 0d 04 10 41 f4 20  |ole screen...A. |
00000b40  20 2a 43 4f 44 45 32 34  20 20 20 52 65 73 74 6f  | *CODE24   Resto|
00000b50  72 65 20 67 72 61 70 68  69 63 73 20 77 69 6e 64  |re graphics wind|
00000b60  6f 77 20 6f 6e 6c 79 20  74 6f 20 74 68 65 20 77  |ow only to the w|
00000b70  68 6f 6c 65 20 73 63 72  65 65 6e 0d 04 1a 3f f4  |hole screen...?.|
00000b80  20 20 2a 43 4f 44 45 31  39 20 20 20 50 61 6c 65  |  *CODE19   Pale|
00000b90  74 74 65 73 20 6f 66 20  74 77 6f 20 73 63 72 65  |ttes of two scre|
00000ba0  65 6e 73 20 74 6f 20 62  65 20 73 65 6d 69 2d 69  |ens to be semi-i|
00000bb0  6e 64 65 70 65 6e 64 65  6e 74 0d 04 24 35 f4 20  |ndependent..$5. |
00000bc0  20 2a 43 4f 44 45 32 30  20 20 20 42 6f 74 68 20  | *CODE20   Both |
00000bd0  73 63 72 65 65 6e 73 20  74 6f 20 75 73 65 20 74  |screens to use t|
00000be0  68 65 20 73 61 6d 65 20  70 61 6c 65 74 74 65 0d  |he same palette.|
00000bf0  04 2e 05 f4 0d 04 38 16  f4 20 20 45 72 72 6f 72  |......8..  Error|
00000c00  20 4d 65 73 73 61 67 65  73 3a 0d 04 4c 05 f4 0d  | Messages:..L...|
00000c10  04 56 37 f4 20 20 4d 6f  64 65 21 20 20 20 20 28  |.V7.  Mode!    (|
00000c20  32 35 32 29 20 59 6f 75  20 63 61 6e 20 6f 6e 6c  |252) You can onl|
00000c30  79 20 75 73 65 20 4d 6f  64 65 73 20 34 2c 20 35  |y use Modes 4, 5|
00000c40  20 6f 72 20 36 2e 0d 04  60 43 f4 20 20 4e 6f 74  | or 6...`C.  Not|
00000c50  20 73 65 74 20 75 70 20  28 32 35 34 29 20 59 6f  | set up (254) Yo|
00000c60  75 20 68 61 76 65 6e 27  74 20 79 65 74 20 73 65  |u haven't yet se|
00000c70  74 20 75 70 20 73 63 72  65 65 6e 73 20 77 69 74  |t up screens wit|
00000c80  68 20 2a 43 4f 44 45 32  32 0d 04 6a 44 f4 20 20  |h *CODE22..jD.  |
00000c90  4d 6f 64 65 20 63 68 61  6e 67 65 64 20 28 32 33  |Mode changed (23|
00000ca0  35 29 20 59 6f 75 27 76  65 20 63 68 61 6e 67 65  |5) You've change|
00000cb0  64 20 6d 6f 64 65 20 73  69 6e 63 65 20 74 68 65  |d mode since the|
00000cc0  20 6c 61 73 74 20 2a 43  4f 44 45 32 32 0d ff     | last *CODE22..|
00000ccf
Utils/DUALSC2.m0
Utils/DUALSC2.m1
Utils/DUALSC2.m2
Utils/DUALSC2.m4
Utils/DUALSC2.m5