Home » Archimedes archive » Archimedes World » AW-1994-06-Disc1.adf » Disk1Jun94 » !AWJune94/Goodies/3D_Demo/Cube

!AWJune94/Goodies/3D_Demo/Cube

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 » Archimedes World » AW-1994-06-Disc1.adf » Disk1Jun94
Filename: !AWJune94/Goodies/3D_Demo/Cube
Read OK:
File size: 1ED2 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM >Cube
   20REM Program : Cube
   30REM           A simple 3D cube in BBC BASIC
   40REM Author  : Kevin J Swinton
   50REM Version : Acorn A5000.1.00
   60REM Date    : Monday 14th March 1994
   70
   80
   90ON ERROR MODE MODE : REPORT : PRINT " at Line ";ERL:END
  100
  110
  120REM ------------------------------------------------------------------------
  130REM                              MAIN PROGRAM
  140REM ------------------------------------------------------------------------
  150
  160
  170MODE 27+128 : OFF
  180
  190 PROCedure_Initialise
  200 PROCedure_Cube
  210
  220END
  230
  240
  250REM ------------------------------------------------------------------------
  260REM         PROCEDURE TO INITIALISE EVERYTHING WE NEED TO KNOW
  270REM ------------------------------------------------------------------------
  280
  290
  300DEF PROCedure_Initialise
  310
  320 REM *** Place our origin in the middle of the screen ***
  330 ORIGIN 640 , 512
  340
  350 REM *** Dimension all the arrays that we will need ***
  360 DIM array_for_the_3D_points( 8 , 3 ) : REM 8 points, each being an X,Y,Z (3D)
  370 DIM array_for_the_2D_points( 8 , 2 ) : REM 8 points, each being an X,Y   (2D)
  380 DIM array_for_the_links( 12 , 2 )    : REM 12 links, each being a "from point x, to point y"
  390
  400 REM *** Read all the information we need into our arrays. Firstly, ***
  410 REM *** read in all our points that make up the cube, and then     ***
  420 REM *** read in all the links that join the points together.       ***
  430 PROCedure_Read_Points_Into_Their_Array
  440 PROCedure_Read_Links_Into_Their_Array
  450
  460 BANK = 1
  470 PROCedure_Swap_The_Screen_Banks : CLS
  480 PROCedure_Swap_The_Screen_Banks : CLS
  490
  500 REM *** Initialise the rotation of the object in space ***
  510 X_ROTATION = 0
  520 Y_ROTATION = 0
  530 Z_ROTATION = 0
  540
  550 REM *** Initialise the position of the object in space ***
  560 REM *** so that it is quite far away from us           ***
  570 X_POSITION = + 0
  580 Y_POSITION = + 0
  590 Z_POSITION = +50
  600
  610ENDPROC
  620
  630
  640REM ------------------------------------------------------------------------
  650REM      MAIN PROCEDURE TO CONTROL THE SPINNING CUBE ON THE SCREEN
  660REM ------------------------------------------------------------------------
  670
  680
  690DEF PROCedure_Cube
  700
  710 REPEAT
  720
  730    PROCedure_Rotate_The_Cube
  740    PROCedure_Draw_The_Cube
  750    PROCedure_Swap_The_Screen_Banks
  760
  770    X_ROTATION = X_ROTATION + 1 : IF X_ROTATION >= 360 THEN X_ROTATION = X_ROTATION - 360
  780    Y_ROTATION = Y_ROTATION + 1 : IF Y_ROTATION >= 360 THEN Y_ROTATION = Y_ROTATION - 360
  790    Z_ROTATION = Z_ROTATION + 1 : IF Z_ROTATION >= 360 THEN Z_ROTATION = Z_ROTATION - 360
  800
  810 UNTIL 1 = 2
  820
  830ENDPROC
  840
  850
  860REM ------------------------------------------------------------------------
  870REM        THE PROCEDURE THAT ROTATES THE 8 POINTS OF THE CUBE
  880REM ------------------------------------------------------------------------
  890
  900
  910DEF PROCedure_Rotate_The_Cube
  920
  930 FOR point_to_rotate = 1 TO 8
  940
  950  x_position_of_point = array_for_the_3D_points( point_to_rotate , 1 )
  960  y_position_of_point = array_for_the_3D_points( point_to_rotate , 2 )
  970  z_position_of_point = array_for_the_3D_points( point_to_rotate , 3 )
  980
  990  REM *** Formula for rotating the point around the X axis ***
 1000  rotated_y_value = y_position_of_point * COS( RAD X_ROTATION ) - z_position_of_point * SIN( RAD X_ROTATION )
 1010  rotated_z_value = y_position_of_point * SIN( RAD X_ROTATION ) + z_position_of_point * COS( RAD X_ROTATION )
 1020  y_position_of_point = rotated_y_value
 1030  z_position_of_point = rotated_z_value
 1040
 1050  REM *** Formula for rotating the point around the Y axis ***
 1060  rotated_x_value = x_position_of_point * COS( RAD Y_ROTATION ) + z_position_of_point * SIN( RAD Y_ROTATION )
 1070  rotated_z_value = z_position_of_point * COS( RAD Y_ROTATION ) - x_position_of_point * SIN( RAD Y_ROTATION )
 1080  x_position_of_point = rotated_x_value
 1090  z_position_of_point = rotated_z_value
 1100
 1110  REM *** Formula for rotating the point around the Z axis ***
 1120  rotated_x_value = x_position_of_point * COS( RAD Z_ROTATION ) - y_position_of_point * SIN( RAD Z_ROTATION )
 1130  rotated_y_value = x_position_of_point * SIN( RAD Z_ROTATION ) + y_position_of_point * COS( RAD Z_ROTATION )
 1140  x_position_of_point = rotated_x_value
 1150  y_position_of_point = rotated_y_value
 1160
 1170  REM *** Now we've rotated the object about itself we must ***
 1180  REM *** position it in space relative to where WE are     ***
 1190  x_position_of_point = x_position_of_point + X_POSITION
 1200  y_position_of_point = y_position_of_point + Y_POSITION
 1210  z_position_of_point = z_position_of_point + Z_POSITION
 1220
 1230  REM *** Convert from the rotated 3D position into the relevant    ***
 1240  REM *** 2D position. Don't forget that this involves dividing     ***
 1250  REM *** X and Y by Z, and apllying a perspective factor (eg. 800) ***
 1260  array_for_the_2D_points( point_to_rotate , 1 ) = ( 800 * x_position_of_point ) / z_position_of_point
 1270  array_for_the_2D_points( point_to_rotate , 2 ) = ( 800 * y_position_of_point ) / z_position_of_point
 1280
 1290 NEXT point_to_rotate
 1300
 1310ENDPROC
 1320
 1330
 1340REM ------------------------------------------------------------------------
 1350REM      THE PROCEDURE THAT DRAWS THE LINKS THAT MAKE UP THE CUBE
 1360REM ------------------------------------------------------------------------
 1370
 1380
 1390DEF PROCedure_Draw_The_Cube
 1400
 1410 FOR link = 1 TO 12
 1420
 1430     point_to_link_from = array_for_the_links( link , 1 )
 1440     point_to_link_to   = array_for_the_links( link , 2 )
 1450
 1460     first_x_position   = array_for_the_2D_points( point_to_link_from , 1 )
 1470     first_y_position   = array_for_the_2D_points( point_to_link_from , 2 )
 1480
 1490     second_x_position  = array_for_the_2D_points( point_to_link_to   , 1 )
 1500     second_y_position  = array_for_the_2D_points( point_to_link_to   , 2 )
 1510
 1520     MOVE first_x_position  , first_y_position
 1530     DRAW second_x_position , second_y_position
 1540
 1550 NEXT link
 1560
 1570ENDPROC
 1580
 1590
 1600REM ------------------------------------------------------------------------
 1610REM  PROCEDURE TO SWAP OUR SCREENS, KEEPING THE ANIMATION FLICKER FREE
 1620REM ------------------------------------------------------------------------
 1630
 1640
 1650DEF PROCedure_Swap_The_Screen_Banks
 1660
 1670 WAIT
 1680 BANK = BANK EOR 3
 1690 SYS 6,112,BANK
 1700 SYS 6,113,BANK EOR 3
 1710 CLS
 1720
 1730ENDPROC
 1740
 1750
 1760REM ------------------------------------------------------------------------
 1770REM  THE PROCEDURE THAT READS THE 8 POINTS INTO THE ARRAY WE'VE SET UP
 1780REM ------------------------------------------------------------------------
 1790
 1800
 1810DEF PROCedure_Read_Points_Into_Their_Array
 1820
 1830 RESTORE 2010
 1840
 1850 FOR point = 1 TO 8
 1860
 1870     READ X_POSITION , Y_POSITION , Z_POSITION
 1880
 1890     array_for_the_3D_points( point , 1 ) = X_POSITION
 1900     array_for_the_3D_points( point , 2 ) = Y_POSITION
 1910     array_for_the_3D_points( point , 3 ) = Z_POSITION
 1920
 1930 NEXT point
 1940
 1950ENDPROC
 1960
 1970
 1980REM *** The data for the 8 points of the cube ***
 1990
 2000
 2010DATA -10,+10 , +10 : REM The 4 points for the front of the cube
 2020DATA +10,+10 , +10
 2030DATA +10,-10 , +10
 2040DATA -10,-10 , +10
 2050
 2060DATA -10,+10 , -10 : REM The 4 points for the back  of the cube
 2070DATA +10,+10 , -10
 2080DATA +10,-10 , -10
 2090DATA -10,-10 , -10
 2100
 2110
 2120REM ------------------------------------------------------------------------
 2130REM  THE PROCEDURE THAT READS THE 12 LINKS INTO THE ARRAY WE'VE SET UP
 2140REM ------------------------------------------------------------------------
 2150
 2160
 2170DEF PROCedure_Read_Links_Into_Their_Array
 2180
 2190 RESTORE 2360
 2200
 2210 FOR link = 1 TO 12
 2220
 2230     READ JOIN_FROM , JOIN_TO
 2240
 2250     array_for_the_links( link , 1 ) = JOIN_FROM
 2260     array_for_the_links( link , 2 ) = JOIN_TO
 2270
 2280 NEXT link
 2290
 2300ENDPROC
 2310
 2320
 2330REM *** The data for the 12 links to make up the cube ***
 2340
 2350
 2360DATA 1 , 2 : REM The links to join up the front face
 2370DATA 2 , 3
 2380DATA 3 , 4
 2390DATA 4 , 1
 2400
 2410DATA 5 , 6 : REM The links to join up the back  face
 2420DATA 6 , 7
 2430DATA 7 , 8
 2440DATA 8 , 5
 2450
 2460DATA 1 , 5 : REM The links to join the front face to the back face
 2470DATA 2 , 6
 2480DATA 3 , 7
 2490DATA 4 , 8

� >Cube
� Program : Cube
-�           A simple 3D cube in BBC BASIC
(� Author  : Kevin J Swinton
2 � Version : Acorn A5000.1.00
<&� Date    : Monday 14th March 1994
F
P
Z#� � � � : � : � " at Line ";�:�
d
n
xN� ------------------------------------------------------------------------
�/�                              MAIN PROGRAM
�N� ------------------------------------------------------------------------
�
�
�� 27+128 : �
�
� �edure_Initialise
� �edure_Cube
�
��
�
�
�N� ------------------------------------------------------------------------
@�         PROCEDURE TO INITIALISE EVERYTHING WE NEED TO KNOW
N� ------------------------------------------------------------------------

"
,� �edure_Initialise
6
@; � *** Place our origin in the middle of the screen ***
J ȑ 640 , 512
T
^9 � *** Dimension all the arrays that we will need ***
hN � array_for_the_3D_points( 8 , 3 ) : � 8 points, each being an X,Y,Z (3D)
rN � array_for_the_2D_points( 8 , 2 ) : � 8 points, each being an X,Y   (2D)
|] � array_for_the_links( 12 , 2 )    : � 12 links, each being a "from point x, to point y"
�
�I � *** Read all the information we need into our arrays. Firstly, ***
�I � *** read in all our points that make up the cube, and then     ***
�I � *** read in all the links that join the points together.       ***
�( �edure_Read_Points_Into_Their_Array
�' �edure_Read_Links_Into_Their_Array
�
�
 BANK = 1
�% �edure_Swap_The_Screen_Banks : �
�% �edure_Swap_The_Screen_Banks : �
�
�= � *** Initialise the rotation of the object in space ***
� X_ROTATION = 0
 Y_ROTATION = 0
 Z_ROTATION = 0

&= � *** Initialise the position of the object in space ***
0= � *** so that it is quite far away from us           ***
: X_POSITION = + 0
D Y_POSITION = + 0
N Z_POSITION = +50
X
b�
l
v
�N� ------------------------------------------------------------------------
�D�      MAIN PROCEDURE TO CONTROL THE SPINNING CUBE ON THE SCREEN
�N� ------------------------------------------------------------------------
�
�
�� �edure_Cube
�
� �
�
�    �edure_Rotate_The_Cube
�    �edure_Draw_The_Cube
�$    �edure_Swap_The_Screen_Banks
�
Y    X_ROTATION = X_ROTATION + 1 : � X_ROTATION >= 360 � X_ROTATION = X_ROTATION - 360
Y    Y_ROTATION = Y_ROTATION + 1 : � Y_ROTATION >= 360 � Y_ROTATION = Y_ROTATION - 360
Y    Z_ROTATION = Z_ROTATION + 1 : � Z_ROTATION >= 360 � Z_ROTATION = Z_ROTATION - 360
 
* � 1 = 2
4
>�
H
R
\N� ------------------------------------------------------------------------
f@�        THE PROCEDURE THAT ROTATES THE 8 POINTS OF THE CUBE
pN� ------------------------------------------------------------------------
z
�
�� �edure_Rotate_The_Cube
�
� � point_to_rotate = 1 � 8
�
�J  x_position_of_point = array_for_the_3D_points( point_to_rotate , 1 )
�J  y_position_of_point = array_for_the_3D_points( point_to_rotate , 2 )
�J  z_position_of_point = array_for_the_3D_points( point_to_rotate , 3 )
�
�@  � *** Formula for rotating the point around the X axis ***
�i  rotated_y_value = y_position_of_point * �( � X_ROTATION ) - z_position_of_point * �( � X_ROTATION )
�i  rotated_z_value = y_position_of_point * �( � X_ROTATION ) + z_position_of_point * �( � X_ROTATION )
�+  y_position_of_point = rotated_y_value
+  z_position_of_point = rotated_z_value

@  � *** Formula for rotating the point around the Y axis ***
$i  rotated_x_value = x_position_of_point * �( � Y_ROTATION ) + z_position_of_point * �( � Y_ROTATION )
.i  rotated_z_value = z_position_of_point * �( � Y_ROTATION ) - x_position_of_point * �( � Y_ROTATION )
8+  x_position_of_point = rotated_x_value
B+  z_position_of_point = rotated_z_value
L
V@  � *** Formula for rotating the point around the Z axis ***
`i  rotated_x_value = x_position_of_point * �( � Z_ROTATION ) - y_position_of_point * �( � Z_ROTATION )
ji  rotated_y_value = x_position_of_point * �( � Z_ROTATION ) + y_position_of_point * �( � Z_ROTATION )
t+  x_position_of_point = rotated_x_value
~+  y_position_of_point = rotated_y_value
�
�A  � *** Now we've rotated the object about itself we must ***
�A  � *** position it in space relative to where WE are     ***
�<  x_position_of_point = x_position_of_point + X_POSITION
�<  y_position_of_point = y_position_of_point + Y_POSITION
�<  z_position_of_point = z_position_of_point + Z_POSITION
�
�I  � *** Convert from the rotated 3D position into the relevant    ***
�I  � *** 2D position. Don't forget that this involves dividing     ***
�I  � *** X and Y by Z, and apllying a perspective factor (eg. 800) ***
�j  array_for_the_2D_points( point_to_rotate , 1 ) = ( 800 * x_position_of_point ) / z_position_of_point
�j  array_for_the_2D_points( point_to_rotate , 2 ) = ( 800 * y_position_of_point ) / z_position_of_point


 � point_to_rotate

�
(
2
<N� ------------------------------------------------------------------------
FC�      THE PROCEDURE THAT DRAWS THE LINKS THAT MAKE UP THE CUBE
PN� ------------------------------------------------------------------------
Z
d
n� �edure_Draw_The_Cube
x
� � link = 1 � 12
�
�=     point_to_link_from = array_for_the_links( link , 1 )
�=     point_to_link_to   = array_for_the_links( link , 2 )
�
�O     first_x_position   = array_for_the_2D_points( point_to_link_from , 1 )
�O     first_y_position   = array_for_the_2D_points( point_to_link_from , 2 )
�
�O     second_x_position  = array_for_the_2D_points( point_to_link_to   , 1 )
�O     second_y_position  = array_for_the_2D_points( point_to_link_to   , 2 )
�
�/     � first_x_position  , first_y_position
�0     � second_x_position , second_y_position

 � link

"�
,
6
@N� ------------------------------------------------------------------------
JH�  PROCEDURE TO SWAP OUR SCREENS, KEEPING THE ANIMATION FLICKER FREE
TN� ------------------------------------------------------------------------
^
h
r"� �edure_Swap_The_Screen_Banks
|
� Ȗ
� BANK = BANK � 3
� ș 6,112,BANK
� ș 6,113,BANK � 3
� �
�
��
�
�
�N� ------------------------------------------------------------------------
�H�  THE PROCEDURE THAT READS THE 8 POINTS INTO THE ARRAY WE'VE SET UP
�N� ------------------------------------------------------------------------
�

)� �edure_Read_Points_Into_Their_Array

& � �dZG
0
: � point = 1 � 8
D
N/     � X_POSITION , Y_POSITION , Z_POSITION
X
b:     array_for_the_3D_points( point , 1 ) = X_POSITION
l:     array_for_the_3D_points( point , 2 ) = Y_POSITION
v:     array_for_the_3D_points( point , 3 ) = Z_POSITION
�
� � point
�
��
�
�
�3� *** The data for the 8 points of the cube ***
�
�
�@� -10,+10 , +10 : REM The 4 points for the front of the cube
�� +10,+10 , +10
�� +10,-10 , +10
�� -10,-10 , +10

@� -10,+10 , -10 : REM The 4 points for the back  of the cube
� +10,+10 , -10
 � +10,-10 , -10
*� -10,-10 , -10
4
>
HN� ------------------------------------------------------------------------
RH�  THE PROCEDURE THAT READS THE 12 LINKS INTO THE ARRAY WE'VE SET UP
\N� ------------------------------------------------------------------------
f
p
z(� �edure_Read_Links_Into_Their_Array
�
� � �TxI
�
� � link = 1 � 12
�
�     � JOIN_FROM , JOIN_TO
�
�4     array_for_the_links( link , 1 ) = JOIN_FROM
�2     array_for_the_links( link , 2 ) = JOIN_TO
�
� � link
�
��
	
	
	;� *** The data for the 12 links to make up the cube ***
	$
	.
	85� 1 , 2 : REM The links to join up the front face
	B� 2 , 3
	L� 3 , 4
	V� 4 , 1
	`
	j5� 5 , 6 : REM The links to join up the back  face
	t� 6 , 7
	~� 7 , 8
	�� 8 , 5
	�
	�C� 1 , 5 : REM The links to join the front face to the back face
	�� 2 , 6
	�� 3 , 7
	�� 4 , 8
�
00000000  0d 00 0a 0b f4 20 3e 43  75 62 65 0d 00 14 14 f4  |..... >Cube.....|
00000010  20 50 72 6f 67 72 61 6d  20 3a 20 43 75 62 65 0d  | Program : Cube.|
00000020  00 1e 2d f4 20 20 20 20  20 20 20 20 20 20 20 41  |..-.           A|
00000030  20 73 69 6d 70 6c 65 20  33 44 20 63 75 62 65 20  | simple 3D cube |
00000040  69 6e 20 42 42 43 20 42  41 53 49 43 0d 00 28 1f  |in BBC BASIC..(.|
00000050  f4 20 41 75 74 68 6f 72  20 20 3a 20 4b 65 76 69  |. Author  : Kevi|
00000060  6e 20 4a 20 53 77 69 6e  74 6f 6e 0d 00 32 20 f4  |n J Swinton..2 .|
00000070  20 56 65 72 73 69 6f 6e  20 3a 20 41 63 6f 72 6e  | Version : Acorn|
00000080  20 41 35 30 30 30 2e 31  2e 30 30 0d 00 3c 26 f4  | A5000.1.00..<&.|
00000090  20 44 61 74 65 20 20 20  20 3a 20 4d 6f 6e 64 61  | Date    : Monda|
000000a0  79 20 31 34 74 68 20 4d  61 72 63 68 20 31 39 39  |y 14th March 199|
000000b0  34 0d 00 46 04 0d 00 50  04 0d 00 5a 23 ee 20 85  |4..F...P...Z#. .|
000000c0  20 eb 20 eb 20 3a 20 f6  20 3a 20 f1 20 22 20 61  | . . : . : . " a|
000000d0  74 20 4c 69 6e 65 20 22  3b 9e 3a e0 0d 00 64 04  |t Line ";.:...d.|
000000e0  0d 00 6e 04 0d 00 78 4e  f4 20 2d 2d 2d 2d 2d 2d  |..n...xN. ------|
000000f0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000130  2d 2d 0d 00 82 2f f4 20  20 20 20 20 20 20 20 20  |--.../.         |
00000140  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000150  20 20 20 20 20 4d 41 49  4e 20 50 52 4f 47 52 41  |     MAIN PROGRA|
00000160  4d 0d 00 8c 4e f4 20 2d  2d 2d 2d 2d 2d 2d 2d 2d  |M...N. ---------|
00000170  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000001a0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 0d  |---------------.|
000001b0  00 96 04 0d 00 a0 04 0d  00 aa 10 eb 20 32 37 2b  |............ 27+|
000001c0  31 32 38 20 3a 20 87 0d  00 b4 04 0d 00 be 16 20  |128 : ......... |
000001d0  f2 65 64 75 72 65 5f 49  6e 69 74 69 61 6c 69 73  |.edure_Initialis|
000001e0  65 0d 00 c8 10 20 f2 65  64 75 72 65 5f 43 75 62  |e.... .edure_Cub|
000001f0  65 0d 00 d2 04 0d 00 dc  05 e0 0d 00 e6 04 0d 00  |e...............|
00000200  f0 04 0d 00 fa 4e f4 20  2d 2d 2d 2d 2d 2d 2d 2d  |.....N. --------|
00000210  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000250  0d 01 04 40 f4 20 20 20  20 20 20 20 20 20 50 52  |...@.         PR|
00000260  4f 43 45 44 55 52 45 20  54 4f 20 49 4e 49 54 49  |OCEDURE TO INITI|
00000270  41 4c 49 53 45 20 45 56  45 52 59 54 48 49 4e 47  |ALISE EVERYTHING|
00000280  20 57 45 20 4e 45 45 44  20 54 4f 20 4b 4e 4f 57  | WE NEED TO KNOW|
00000290  0d 01 0e 4e f4 20 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |...N. ----------|
000002a0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000002d0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 0d 01  |--------------..|
000002e0  18 04 0d 01 22 04 0d 01  2c 17 dd 20 f2 65 64 75  |...."...,.. .edu|
000002f0  72 65 5f 49 6e 69 74 69  61 6c 69 73 65 0d 01 36  |re_Initialise..6|
00000300  04 0d 01 40 3b 20 f4 20  2a 2a 2a 20 50 6c 61 63  |...@; . *** Plac|
00000310  65 20 6f 75 72 20 6f 72  69 67 69 6e 20 69 6e 20  |e our origin in |
00000320  74 68 65 20 6d 69 64 64  6c 65 20 6f 66 20 74 68  |the middle of th|
00000330  65 20 73 63 72 65 65 6e  20 2a 2a 2a 0d 01 4a 11  |e screen ***..J.|
00000340  20 c8 91 20 36 34 30 20  2c 20 35 31 32 0d 01 54  | .. 640 , 512..T|
00000350  04 0d 01 5e 39 20 f4 20  2a 2a 2a 20 44 69 6d 65  |...^9 . *** Dime|
00000360  6e 73 69 6f 6e 20 61 6c  6c 20 74 68 65 20 61 72  |nsion all the ar|
00000370  72 61 79 73 20 74 68 61  74 20 77 65 20 77 69 6c  |rays that we wil|
00000380  6c 20 6e 65 65 64 20 2a  2a 2a 0d 01 68 4e 20 de  |l need ***..hN .|
00000390  20 61 72 72 61 79 5f 66  6f 72 5f 74 68 65 5f 33  | array_for_the_3|
000003a0  44 5f 70 6f 69 6e 74 73  28 20 38 20 2c 20 33 20  |D_points( 8 , 3 |
000003b0  29 20 3a 20 f4 20 38 20  70 6f 69 6e 74 73 2c 20  |) : . 8 points, |
000003c0  65 61 63 68 20 62 65 69  6e 67 20 61 6e 20 58 2c  |each being an X,|
000003d0  59 2c 5a 20 28 33 44 29  0d 01 72 4e 20 de 20 61  |Y,Z (3D)..rN . a|
000003e0  72 72 61 79 5f 66 6f 72  5f 74 68 65 5f 32 44 5f  |rray_for_the_2D_|
000003f0  70 6f 69 6e 74 73 28 20  38 20 2c 20 32 20 29 20  |points( 8 , 2 ) |
00000400  3a 20 f4 20 38 20 70 6f  69 6e 74 73 2c 20 65 61  |: . 8 points, ea|
00000410  63 68 20 62 65 69 6e 67  20 61 6e 20 58 2c 59 20  |ch being an X,Y |
00000420  20 20 28 32 44 29 0d 01  7c 5d 20 de 20 61 72 72  |  (2D)..|] . arr|
00000430  61 79 5f 66 6f 72 5f 74  68 65 5f 6c 69 6e 6b 73  |ay_for_the_links|
00000440  28 20 31 32 20 2c 20 32  20 29 20 20 20 20 3a 20  |( 12 , 2 )    : |
00000450  f4 20 31 32 20 6c 69 6e  6b 73 2c 20 65 61 63 68  |. 12 links, each|
00000460  20 62 65 69 6e 67 20 61  20 22 66 72 6f 6d 20 70  | being a "from p|
00000470  6f 69 6e 74 20 78 2c 20  74 6f 20 70 6f 69 6e 74  |oint x, to point|
00000480  20 79 22 0d 01 86 04 0d  01 90 49 20 f4 20 2a 2a  | y".......I . **|
00000490  2a 20 52 65 61 64 20 61  6c 6c 20 74 68 65 20 69  |* Read all the i|
000004a0  6e 66 6f 72 6d 61 74 69  6f 6e 20 77 65 20 6e 65  |nformation we ne|
000004b0  65 64 20 69 6e 74 6f 20  6f 75 72 20 61 72 72 61  |ed into our arra|
000004c0  79 73 2e 20 46 69 72 73  74 6c 79 2c 20 2a 2a 2a  |ys. Firstly, ***|
000004d0  0d 01 9a 49 20 f4 20 2a  2a 2a 20 72 65 61 64 20  |...I . *** read |
000004e0  69 6e 20 61 6c 6c 20 6f  75 72 20 70 6f 69 6e 74  |in all our point|
000004f0  73 20 74 68 61 74 20 6d  61 6b 65 20 75 70 20 74  |s that make up t|
00000500  68 65 20 63 75 62 65 2c  20 61 6e 64 20 74 68 65  |he cube, and the|
00000510  6e 20 20 20 20 20 2a 2a  2a 0d 01 a4 49 20 f4 20  |n     ***...I . |
00000520  2a 2a 2a 20 72 65 61 64  20 69 6e 20 61 6c 6c 20  |*** read in all |
00000530  74 68 65 20 6c 69 6e 6b  73 20 74 68 61 74 20 6a  |the links that j|
00000540  6f 69 6e 20 74 68 65 20  70 6f 69 6e 74 73 20 74  |oin the points t|
00000550  6f 67 65 74 68 65 72 2e  20 20 20 20 20 20 20 2a  |ogether.       *|
00000560  2a 2a 0d 01 ae 28 20 f2  65 64 75 72 65 5f 52 65  |**...( .edure_Re|
00000570  61 64 5f 50 6f 69 6e 74  73 5f 49 6e 74 6f 5f 54  |ad_Points_Into_T|
00000580  68 65 69 72 5f 41 72 72  61 79 0d 01 b8 27 20 f2  |heir_Array...' .|
00000590  65 64 75 72 65 5f 52 65  61 64 5f 4c 69 6e 6b 73  |edure_Read_Links|
000005a0  5f 49 6e 74 6f 5f 54 68  65 69 72 5f 41 72 72 61  |_Into_Their_Arra|
000005b0  79 0d 01 c2 04 0d 01 cc  0d 20 42 41 4e 4b 20 3d  |y........ BANK =|
000005c0  20 31 0d 01 d6 25 20 f2  65 64 75 72 65 5f 53 77  | 1...% .edure_Sw|
000005d0  61 70 5f 54 68 65 5f 53  63 72 65 65 6e 5f 42 61  |ap_The_Screen_Ba|
000005e0  6e 6b 73 20 3a 20 db 0d  01 e0 25 20 f2 65 64 75  |nks : ....% .edu|
000005f0  72 65 5f 53 77 61 70 5f  54 68 65 5f 53 63 72 65  |re_Swap_The_Scre|
00000600  65 6e 5f 42 61 6e 6b 73  20 3a 20 db 0d 01 ea 04  |en_Banks : .....|
00000610  0d 01 f4 3d 20 f4 20 2a  2a 2a 20 49 6e 69 74 69  |...= . *** Initi|
00000620  61 6c 69 73 65 20 74 68  65 20 72 6f 74 61 74 69  |alise the rotati|
00000630  6f 6e 20 6f 66 20 74 68  65 20 6f 62 6a 65 63 74  |on of the object|
00000640  20 69 6e 20 73 70 61 63  65 20 2a 2a 2a 0d 01 fe  | in space ***...|
00000650  13 20 58 5f 52 4f 54 41  54 49 4f 4e 20 3d 20 30  |. X_ROTATION = 0|
00000660  0d 02 08 13 20 59 5f 52  4f 54 41 54 49 4f 4e 20  |.... Y_ROTATION |
00000670  3d 20 30 0d 02 12 13 20  5a 5f 52 4f 54 41 54 49  |= 0.... Z_ROTATI|
00000680  4f 4e 20 3d 20 30 0d 02  1c 04 0d 02 26 3d 20 f4  |ON = 0......&= .|
00000690  20 2a 2a 2a 20 49 6e 69  74 69 61 6c 69 73 65 20  | *** Initialise |
000006a0  74 68 65 20 70 6f 73 69  74 69 6f 6e 20 6f 66 20  |the position of |
000006b0  74 68 65 20 6f 62 6a 65  63 74 20 69 6e 20 73 70  |the object in sp|
000006c0  61 63 65 20 2a 2a 2a 0d  02 30 3d 20 f4 20 2a 2a  |ace ***..0= . **|
000006d0  2a 20 73 6f 20 74 68 61  74 20 69 74 20 69 73 20  |* so that it is |
000006e0  71 75 69 74 65 20 66 61  72 20 61 77 61 79 20 66  |quite far away f|
000006f0  72 6f 6d 20 75 73 20 20  20 20 20 20 20 20 20 20  |rom us          |
00000700  20 2a 2a 2a 0d 02 3a 15  20 58 5f 50 4f 53 49 54  | ***..:. X_POSIT|
00000710  49 4f 4e 20 3d 20 2b 20  30 0d 02 44 15 20 59 5f  |ION = + 0..D. Y_|
00000720  50 4f 53 49 54 49 4f 4e  20 3d 20 2b 20 30 0d 02  |POSITION = + 0..|
00000730  4e 15 20 5a 5f 50 4f 53  49 54 49 4f 4e 20 3d 20  |N. Z_POSITION = |
00000740  2b 35 30 0d 02 58 04 0d  02 62 05 e1 0d 02 6c 04  |+50..X...b....l.|
00000750  0d 02 76 04 0d 02 80 4e  f4 20 2d 2d 2d 2d 2d 2d  |..v....N. ------|
00000760  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000007a0  2d 2d 0d 02 8a 44 f4 20  20 20 20 20 20 4d 41 49  |--...D.      MAI|
000007b0  4e 20 50 52 4f 43 45 44  55 52 45 20 54 4f 20 43  |N PROCEDURE TO C|
000007c0  4f 4e 54 52 4f 4c 20 54  48 45 20 53 50 49 4e 4e  |ONTROL THE SPINN|
000007d0  49 4e 47 20 43 55 42 45  20 4f 4e 20 54 48 45 20  |ING CUBE ON THE |
000007e0  53 43 52 45 45 4e 0d 02  94 4e f4 20 2d 2d 2d 2d  |SCREEN...N. ----|
000007f0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000830  2d 2d 2d 2d 0d 02 9e 04  0d 02 a8 04 0d 02 b2 11  |----............|
00000840  dd 20 f2 65 64 75 72 65  5f 43 75 62 65 0d 02 bc  |. .edure_Cube...|
00000850  04 0d 02 c6 06 20 f5 0d  02 d0 04 0d 02 da 1e 20  |..... ......... |
00000860  20 20 20 f2 65 64 75 72  65 5f 52 6f 74 61 74 65  |   .edure_Rotate|
00000870  5f 54 68 65 5f 43 75 62  65 0d 02 e4 1c 20 20 20  |_The_Cube....   |
00000880  20 f2 65 64 75 72 65 5f  44 72 61 77 5f 54 68 65  | .edure_Draw_The|
00000890  5f 43 75 62 65 0d 02 ee  24 20 20 20 20 f2 65 64  |_Cube...$    .ed|
000008a0  75 72 65 5f 53 77 61 70  5f 54 68 65 5f 53 63 72  |ure_Swap_The_Scr|
000008b0  65 65 6e 5f 42 61 6e 6b  73 0d 02 f8 04 0d 03 02  |een_Banks.......|
000008c0  59 20 20 20 20 58 5f 52  4f 54 41 54 49 4f 4e 20  |Y    X_ROTATION |
000008d0  3d 20 58 5f 52 4f 54 41  54 49 4f 4e 20 2b 20 31  |= X_ROTATION + 1|
000008e0  20 3a 20 e7 20 58 5f 52  4f 54 41 54 49 4f 4e 20  | : . X_ROTATION |
000008f0  3e 3d 20 33 36 30 20 8c  20 58 5f 52 4f 54 41 54  |>= 360 . X_ROTAT|
00000900  49 4f 4e 20 3d 20 58 5f  52 4f 54 41 54 49 4f 4e  |ION = X_ROTATION|
00000910  20 2d 20 33 36 30 0d 03  0c 59 20 20 20 20 59 5f  | - 360...Y    Y_|
00000920  52 4f 54 41 54 49 4f 4e  20 3d 20 59 5f 52 4f 54  |ROTATION = Y_ROT|
00000930  41 54 49 4f 4e 20 2b 20  31 20 3a 20 e7 20 59 5f  |ATION + 1 : . Y_|
00000940  52 4f 54 41 54 49 4f 4e  20 3e 3d 20 33 36 30 20  |ROTATION >= 360 |
00000950  8c 20 59 5f 52 4f 54 41  54 49 4f 4e 20 3d 20 59  |. Y_ROTATION = Y|
00000960  5f 52 4f 54 41 54 49 4f  4e 20 2d 20 33 36 30 0d  |_ROTATION - 360.|
00000970  03 16 59 20 20 20 20 5a  5f 52 4f 54 41 54 49 4f  |..Y    Z_ROTATIO|
00000980  4e 20 3d 20 5a 5f 52 4f  54 41 54 49 4f 4e 20 2b  |N = Z_ROTATION +|
00000990  20 31 20 3a 20 e7 20 5a  5f 52 4f 54 41 54 49 4f  | 1 : . Z_ROTATIO|
000009a0  4e 20 3e 3d 20 33 36 30  20 8c 20 5a 5f 52 4f 54  |N >= 360 . Z_ROT|
000009b0  41 54 49 4f 4e 20 3d 20  5a 5f 52 4f 54 41 54 49  |ATION = Z_ROTATI|
000009c0  4f 4e 20 2d 20 33 36 30  0d 03 20 04 0d 03 2a 0c  |ON - 360.. ...*.|
000009d0  20 fd 20 31 20 3d 20 32  0d 03 34 04 0d 03 3e 05  | . 1 = 2..4...>.|
000009e0  e1 0d 03 48 04 0d 03 52  04 0d 03 5c 4e f4 20 2d  |...H...R...\N. -|
000009f0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000a30  2d 2d 2d 2d 2d 2d 2d 0d  03 66 40 f4 20 20 20 20  |-------..f@.    |
00000a40  20 20 20 20 54 48 45 20  50 52 4f 43 45 44 55 52  |    THE PROCEDUR|
00000a50  45 20 54 48 41 54 20 52  4f 54 41 54 45 53 20 54  |E THAT ROTATES T|
00000a60  48 45 20 38 20 50 4f 49  4e 54 53 20 4f 46 20 54  |HE 8 POINTS OF T|
00000a70  48 45 20 43 55 42 45 0d  03 70 4e f4 20 2d 2d 2d  |HE CUBE..pN. ---|
00000a80  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00000ac0  2d 2d 2d 2d 2d 0d 03 7a  04 0d 03 84 04 0d 03 8e  |-----..z........|
00000ad0  1c dd 20 f2 65 64 75 72  65 5f 52 6f 74 61 74 65  |.. .edure_Rotate|
00000ae0  5f 54 68 65 5f 43 75 62  65 0d 03 98 04 0d 03 a2  |_The_Cube.......|
00000af0  1e 20 e3 20 70 6f 69 6e  74 5f 74 6f 5f 72 6f 74  |. . point_to_rot|
00000b00  61 74 65 20 3d 20 31 20  b8 20 38 0d 03 ac 04 0d  |ate = 1 . 8.....|
00000b10  03 b6 4a 20 20 78 5f 70  6f 73 69 74 69 6f 6e 5f  |..J  x_position_|
00000b20  6f 66 5f 70 6f 69 6e 74  20 3d 20 61 72 72 61 79  |of_point = array|
00000b30  5f 66 6f 72 5f 74 68 65  5f 33 44 5f 70 6f 69 6e  |_for_the_3D_poin|
00000b40  74 73 28 20 70 6f 69 6e  74 5f 74 6f 5f 72 6f 74  |ts( point_to_rot|
00000b50  61 74 65 20 2c 20 31 20  29 0d 03 c0 4a 20 20 79  |ate , 1 )...J  y|
00000b60  5f 70 6f 73 69 74 69 6f  6e 5f 6f 66 5f 70 6f 69  |_position_of_poi|
00000b70  6e 74 20 3d 20 61 72 72  61 79 5f 66 6f 72 5f 74  |nt = array_for_t|
00000b80  68 65 5f 33 44 5f 70 6f  69 6e 74 73 28 20 70 6f  |he_3D_points( po|
00000b90  69 6e 74 5f 74 6f 5f 72  6f 74 61 74 65 20 2c 20  |int_to_rotate , |
00000ba0  32 20 29 0d 03 ca 4a 20  20 7a 5f 70 6f 73 69 74  |2 )...J  z_posit|
00000bb0  69 6f 6e 5f 6f 66 5f 70  6f 69 6e 74 20 3d 20 61  |ion_of_point = a|
00000bc0  72 72 61 79 5f 66 6f 72  5f 74 68 65 5f 33 44 5f  |rray_for_the_3D_|
00000bd0  70 6f 69 6e 74 73 28 20  70 6f 69 6e 74 5f 74 6f  |points( point_to|
00000be0  5f 72 6f 74 61 74 65 20  2c 20 33 20 29 0d 03 d4  |_rotate , 3 )...|
00000bf0  04 0d 03 de 40 20 20 f4  20 2a 2a 2a 20 46 6f 72  |....@  . *** For|
00000c00  6d 75 6c 61 20 66 6f 72  20 72 6f 74 61 74 69 6e  |mula for rotatin|
00000c10  67 20 74 68 65 20 70 6f  69 6e 74 20 61 72 6f 75  |g the point arou|
00000c20  6e 64 20 74 68 65 20 58  20 61 78 69 73 20 2a 2a  |nd the X axis **|
00000c30  2a 0d 03 e8 69 20 20 72  6f 74 61 74 65 64 5f 79  |*...i  rotated_y|
00000c40  5f 76 61 6c 75 65 20 3d  20 79 5f 70 6f 73 69 74  |_value = y_posit|
00000c50  69 6f 6e 5f 6f 66 5f 70  6f 69 6e 74 20 2a 20 9b  |ion_of_point * .|
00000c60  28 20 b2 20 58 5f 52 4f  54 41 54 49 4f 4e 20 29  |( . X_ROTATION )|
00000c70  20 2d 20 7a 5f 70 6f 73  69 74 69 6f 6e 5f 6f 66  | - z_position_of|
00000c80  5f 70 6f 69 6e 74 20 2a  20 b5 28 20 b2 20 58 5f  |_point * .( . X_|
00000c90  52 4f 54 41 54 49 4f 4e  20 29 0d 03 f2 69 20 20  |ROTATION )...i  |
00000ca0  72 6f 74 61 74 65 64 5f  7a 5f 76 61 6c 75 65 20  |rotated_z_value |
00000cb0  3d 20 79 5f 70 6f 73 69  74 69 6f 6e 5f 6f 66 5f  |= y_position_of_|
00000cc0  70 6f 69 6e 74 20 2a 20  b5 28 20 b2 20 58 5f 52  |point * .( . X_R|
00000cd0  4f 54 41 54 49 4f 4e 20  29 20 2b 20 7a 5f 70 6f  |OTATION ) + z_po|
00000ce0  73 69 74 69 6f 6e 5f 6f  66 5f 70 6f 69 6e 74 20  |sition_of_point |
00000cf0  2a 20 9b 28 20 b2 20 58  5f 52 4f 54 41 54 49 4f  |* .( . X_ROTATIO|
00000d00  4e 20 29 0d 03 fc 2b 20  20 79 5f 70 6f 73 69 74  |N )...+  y_posit|
00000d10  69 6f 6e 5f 6f 66 5f 70  6f 69 6e 74 20 3d 20 72  |ion_of_point = r|
00000d20  6f 74 61 74 65 64 5f 79  5f 76 61 6c 75 65 0d 04  |otated_y_value..|
00000d30  06 2b 20 20 7a 5f 70 6f  73 69 74 69 6f 6e 5f 6f  |.+  z_position_o|
00000d40  66 5f 70 6f 69 6e 74 20  3d 20 72 6f 74 61 74 65  |f_point = rotate|
00000d50  64 5f 7a 5f 76 61 6c 75  65 0d 04 10 04 0d 04 1a  |d_z_value.......|
00000d60  40 20 20 f4 20 2a 2a 2a  20 46 6f 72 6d 75 6c 61  |@  . *** Formula|
00000d70  20 66 6f 72 20 72 6f 74  61 74 69 6e 67 20 74 68  | for rotating th|
00000d80  65 20 70 6f 69 6e 74 20  61 72 6f 75 6e 64 20 74  |e point around t|
00000d90  68 65 20 59 20 61 78 69  73 20 2a 2a 2a 0d 04 24  |he Y axis ***..$|
00000da0  69 20 20 72 6f 74 61 74  65 64 5f 78 5f 76 61 6c  |i  rotated_x_val|
00000db0  75 65 20 3d 20 78 5f 70  6f 73 69 74 69 6f 6e 5f  |ue = x_position_|
00000dc0  6f 66 5f 70 6f 69 6e 74  20 2a 20 9b 28 20 b2 20  |of_point * .( . |
00000dd0  59 5f 52 4f 54 41 54 49  4f 4e 20 29 20 2b 20 7a  |Y_ROTATION ) + z|
00000de0  5f 70 6f 73 69 74 69 6f  6e 5f 6f 66 5f 70 6f 69  |_position_of_poi|
00000df0  6e 74 20 2a 20 b5 28 20  b2 20 59 5f 52 4f 54 41  |nt * .( . Y_ROTA|
00000e00  54 49 4f 4e 20 29 0d 04  2e 69 20 20 72 6f 74 61  |TION )...i  rota|
00000e10  74 65 64 5f 7a 5f 76 61  6c 75 65 20 3d 20 7a 5f  |ted_z_value = z_|
00000e20  70 6f 73 69 74 69 6f 6e  5f 6f 66 5f 70 6f 69 6e  |position_of_poin|
00000e30  74 20 2a 20 9b 28 20 b2  20 59 5f 52 4f 54 41 54  |t * .( . Y_ROTAT|
00000e40  49 4f 4e 20 29 20 2d 20  78 5f 70 6f 73 69 74 69  |ION ) - x_positi|
00000e50  6f 6e 5f 6f 66 5f 70 6f  69 6e 74 20 2a 20 b5 28  |on_of_point * .(|
00000e60  20 b2 20 59 5f 52 4f 54  41 54 49 4f 4e 20 29 0d  | . Y_ROTATION ).|
00000e70  04 38 2b 20 20 78 5f 70  6f 73 69 74 69 6f 6e 5f  |.8+  x_position_|
00000e80  6f 66 5f 70 6f 69 6e 74  20 3d 20 72 6f 74 61 74  |of_point = rotat|
00000e90  65 64 5f 78 5f 76 61 6c  75 65 0d 04 42 2b 20 20  |ed_x_value..B+  |
00000ea0  7a 5f 70 6f 73 69 74 69  6f 6e 5f 6f 66 5f 70 6f  |z_position_of_po|
00000eb0  69 6e 74 20 3d 20 72 6f  74 61 74 65 64 5f 7a 5f  |int = rotated_z_|
00000ec0  76 61 6c 75 65 0d 04 4c  04 0d 04 56 40 20 20 f4  |value..L...V@  .|
00000ed0  20 2a 2a 2a 20 46 6f 72  6d 75 6c 61 20 66 6f 72  | *** Formula for|
00000ee0  20 72 6f 74 61 74 69 6e  67 20 74 68 65 20 70 6f  | rotating the po|
00000ef0  69 6e 74 20 61 72 6f 75  6e 64 20 74 68 65 20 5a  |int around the Z|
00000f00  20 61 78 69 73 20 2a 2a  2a 0d 04 60 69 20 20 72  | axis ***..`i  r|
00000f10  6f 74 61 74 65 64 5f 78  5f 76 61 6c 75 65 20 3d  |otated_x_value =|
00000f20  20 78 5f 70 6f 73 69 74  69 6f 6e 5f 6f 66 5f 70  | x_position_of_p|
00000f30  6f 69 6e 74 20 2a 20 9b  28 20 b2 20 5a 5f 52 4f  |oint * .( . Z_RO|
00000f40  54 41 54 49 4f 4e 20 29  20 2d 20 79 5f 70 6f 73  |TATION ) - y_pos|
00000f50  69 74 69 6f 6e 5f 6f 66  5f 70 6f 69 6e 74 20 2a  |ition_of_point *|
00000f60  20 b5 28 20 b2 20 5a 5f  52 4f 54 41 54 49 4f 4e  | .( . Z_ROTATION|
00000f70  20 29 0d 04 6a 69 20 20  72 6f 74 61 74 65 64 5f  | )..ji  rotated_|
00000f80  79 5f 76 61 6c 75 65 20  3d 20 78 5f 70 6f 73 69  |y_value = x_posi|
00000f90  74 69 6f 6e 5f 6f 66 5f  70 6f 69 6e 74 20 2a 20  |tion_of_point * |
00000fa0  b5 28 20 b2 20 5a 5f 52  4f 54 41 54 49 4f 4e 20  |.( . Z_ROTATION |
00000fb0  29 20 2b 20 79 5f 70 6f  73 69 74 69 6f 6e 5f 6f  |) + y_position_o|
00000fc0  66 5f 70 6f 69 6e 74 20  2a 20 9b 28 20 b2 20 5a  |f_point * .( . Z|
00000fd0  5f 52 4f 54 41 54 49 4f  4e 20 29 0d 04 74 2b 20  |_ROTATION )..t+ |
00000fe0  20 78 5f 70 6f 73 69 74  69 6f 6e 5f 6f 66 5f 70  | x_position_of_p|
00000ff0  6f 69 6e 74 20 3d 20 72  6f 74 61 74 65 64 5f 78  |oint = rotated_x|
00001000  5f 76 61 6c 75 65 0d 04  7e 2b 20 20 79 5f 70 6f  |_value..~+  y_po|
00001010  73 69 74 69 6f 6e 5f 6f  66 5f 70 6f 69 6e 74 20  |sition_of_point |
00001020  3d 20 72 6f 74 61 74 65  64 5f 79 5f 76 61 6c 75  |= rotated_y_valu|
00001030  65 0d 04 88 04 0d 04 92  41 20 20 f4 20 2a 2a 2a  |e.......A  . ***|
00001040  20 4e 6f 77 20 77 65 27  76 65 20 72 6f 74 61 74  | Now we've rotat|
00001050  65 64 20 74 68 65 20 6f  62 6a 65 63 74 20 61 62  |ed the object ab|
00001060  6f 75 74 20 69 74 73 65  6c 66 20 77 65 20 6d 75  |out itself we mu|
00001070  73 74 20 2a 2a 2a 0d 04  9c 41 20 20 f4 20 2a 2a  |st ***...A  . **|
00001080  2a 20 70 6f 73 69 74 69  6f 6e 20 69 74 20 69 6e  |* position it in|
00001090  20 73 70 61 63 65 20 72  65 6c 61 74 69 76 65 20  | space relative |
000010a0  74 6f 20 77 68 65 72 65  20 57 45 20 61 72 65 20  |to where WE are |
000010b0  20 20 20 20 2a 2a 2a 0d  04 a6 3c 20 20 78 5f 70  |    ***...<  x_p|
000010c0  6f 73 69 74 69 6f 6e 5f  6f 66 5f 70 6f 69 6e 74  |osition_of_point|
000010d0  20 3d 20 78 5f 70 6f 73  69 74 69 6f 6e 5f 6f 66  | = x_position_of|
000010e0  5f 70 6f 69 6e 74 20 2b  20 58 5f 50 4f 53 49 54  |_point + X_POSIT|
000010f0  49 4f 4e 0d 04 b0 3c 20  20 79 5f 70 6f 73 69 74  |ION...<  y_posit|
00001100  69 6f 6e 5f 6f 66 5f 70  6f 69 6e 74 20 3d 20 79  |ion_of_point = y|
00001110  5f 70 6f 73 69 74 69 6f  6e 5f 6f 66 5f 70 6f 69  |_position_of_poi|
00001120  6e 74 20 2b 20 59 5f 50  4f 53 49 54 49 4f 4e 0d  |nt + Y_POSITION.|
00001130  04 ba 3c 20 20 7a 5f 70  6f 73 69 74 69 6f 6e 5f  |..<  z_position_|
00001140  6f 66 5f 70 6f 69 6e 74  20 3d 20 7a 5f 70 6f 73  |of_point = z_pos|
00001150  69 74 69 6f 6e 5f 6f 66  5f 70 6f 69 6e 74 20 2b  |ition_of_point +|
00001160  20 5a 5f 50 4f 53 49 54  49 4f 4e 0d 04 c4 04 0d  | Z_POSITION.....|
00001170  04 ce 49 20 20 f4 20 2a  2a 2a 20 43 6f 6e 76 65  |..I  . *** Conve|
00001180  72 74 20 66 72 6f 6d 20  74 68 65 20 72 6f 74 61  |rt from the rota|
00001190  74 65 64 20 33 44 20 70  6f 73 69 74 69 6f 6e 20  |ted 3D position |
000011a0  69 6e 74 6f 20 74 68 65  20 72 65 6c 65 76 61 6e  |into the relevan|
000011b0  74 20 20 20 20 2a 2a 2a  0d 04 d8 49 20 20 f4 20  |t    ***...I  . |
000011c0  2a 2a 2a 20 32 44 20 70  6f 73 69 74 69 6f 6e 2e  |*** 2D position.|
000011d0  20 44 6f 6e 27 74 20 66  6f 72 67 65 74 20 74 68  | Don't forget th|
000011e0  61 74 20 74 68 69 73 20  69 6e 76 6f 6c 76 65 73  |at this involves|
000011f0  20 64 69 76 69 64 69 6e  67 20 20 20 20 20 2a 2a  | dividing     **|
00001200  2a 0d 04 e2 49 20 20 f4  20 2a 2a 2a 20 58 20 61  |*...I  . *** X a|
00001210  6e 64 20 59 20 62 79 20  5a 2c 20 61 6e 64 20 61  |nd Y by Z, and a|
00001220  70 6c 6c 79 69 6e 67 20  61 20 70 65 72 73 70 65  |pllying a perspe|
00001230  63 74 69 76 65 20 66 61  63 74 6f 72 20 28 65 67  |ctive factor (eg|
00001240  2e 20 38 30 30 29 20 2a  2a 2a 0d 04 ec 6a 20 20  |. 800) ***...j  |
00001250  61 72 72 61 79 5f 66 6f  72 5f 74 68 65 5f 32 44  |array_for_the_2D|
00001260  5f 70 6f 69 6e 74 73 28  20 70 6f 69 6e 74 5f 74  |_points( point_t|
00001270  6f 5f 72 6f 74 61 74 65  20 2c 20 31 20 29 20 3d  |o_rotate , 1 ) =|
00001280  20 28 20 38 30 30 20 2a  20 78 5f 70 6f 73 69 74  | ( 800 * x_posit|
00001290  69 6f 6e 5f 6f 66 5f 70  6f 69 6e 74 20 29 20 2f  |ion_of_point ) /|
000012a0  20 7a 5f 70 6f 73 69 74  69 6f 6e 5f 6f 66 5f 70  | z_position_of_p|
000012b0  6f 69 6e 74 0d 04 f6 6a  20 20 61 72 72 61 79 5f  |oint...j  array_|
000012c0  66 6f 72 5f 74 68 65 5f  32 44 5f 70 6f 69 6e 74  |for_the_2D_point|
000012d0  73 28 20 70 6f 69 6e 74  5f 74 6f 5f 72 6f 74 61  |s( point_to_rota|
000012e0  74 65 20 2c 20 32 20 29  20 3d 20 28 20 38 30 30  |te , 2 ) = ( 800|
000012f0  20 2a 20 79 5f 70 6f 73  69 74 69 6f 6e 5f 6f 66  | * y_position_of|
00001300  5f 70 6f 69 6e 74 20 29  20 2f 20 7a 5f 70 6f 73  |_point ) / z_pos|
00001310  69 74 69 6f 6e 5f 6f 66  5f 70 6f 69 6e 74 0d 05  |ition_of_point..|
00001320  00 04 0d 05 0a 16 20 ed  20 70 6f 69 6e 74 5f 74  |...... . point_t|
00001330  6f 5f 72 6f 74 61 74 65  0d 05 14 04 0d 05 1e 05  |o_rotate........|
00001340  e1 0d 05 28 04 0d 05 32  04 0d 05 3c 4e f4 20 2d  |...(...2...<N. -|
00001350  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001390  2d 2d 2d 2d 2d 2d 2d 0d  05 46 43 f4 20 20 20 20  |-------..FC.    |
000013a0  20 20 54 48 45 20 50 52  4f 43 45 44 55 52 45 20  |  THE PROCEDURE |
000013b0  54 48 41 54 20 44 52 41  57 53 20 54 48 45 20 4c  |THAT DRAWS THE L|
000013c0  49 4e 4b 53 20 54 48 41  54 20 4d 41 4b 45 20 55  |INKS THAT MAKE U|
000013d0  50 20 54 48 45 20 43 55  42 45 0d 05 50 4e f4 20  |P THE CUBE..PN. |
000013e0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001420  2d 2d 2d 2d 2d 2d 2d 2d  0d 05 5a 04 0d 05 64 04  |--------..Z...d.|
00001430  0d 05 6e 1a dd 20 f2 65  64 75 72 65 5f 44 72 61  |..n.. .edure_Dra|
00001440  77 5f 54 68 65 5f 43 75  62 65 0d 05 78 04 0d 05  |w_The_Cube..x...|
00001450  82 14 20 e3 20 6c 69 6e  6b 20 3d 20 31 20 b8 20  |.. . link = 1 . |
00001460  31 32 0d 05 8c 04 0d 05  96 3d 20 20 20 20 20 70  |12.......=     p|
00001470  6f 69 6e 74 5f 74 6f 5f  6c 69 6e 6b 5f 66 72 6f  |oint_to_link_fro|
00001480  6d 20 3d 20 61 72 72 61  79 5f 66 6f 72 5f 74 68  |m = array_for_th|
00001490  65 5f 6c 69 6e 6b 73 28  20 6c 69 6e 6b 20 2c 20  |e_links( link , |
000014a0  31 20 29 0d 05 a0 3d 20  20 20 20 20 70 6f 69 6e  |1 )...=     poin|
000014b0  74 5f 74 6f 5f 6c 69 6e  6b 5f 74 6f 20 20 20 3d  |t_to_link_to   =|
000014c0  20 61 72 72 61 79 5f 66  6f 72 5f 74 68 65 5f 6c  | array_for_the_l|
000014d0  69 6e 6b 73 28 20 6c 69  6e 6b 20 2c 20 32 20 29  |inks( link , 2 )|
000014e0  0d 05 aa 04 0d 05 b4 4f  20 20 20 20 20 66 69 72  |.......O     fir|
000014f0  73 74 5f 78 5f 70 6f 73  69 74 69 6f 6e 20 20 20  |st_x_position   |
00001500  3d 20 61 72 72 61 79 5f  66 6f 72 5f 74 68 65 5f  |= array_for_the_|
00001510  32 44 5f 70 6f 69 6e 74  73 28 20 70 6f 69 6e 74  |2D_points( point|
00001520  5f 74 6f 5f 6c 69 6e 6b  5f 66 72 6f 6d 20 2c 20  |_to_link_from , |
00001530  31 20 29 0d 05 be 4f 20  20 20 20 20 66 69 72 73  |1 )...O     firs|
00001540  74 5f 79 5f 70 6f 73 69  74 69 6f 6e 20 20 20 3d  |t_y_position   =|
00001550  20 61 72 72 61 79 5f 66  6f 72 5f 74 68 65 5f 32  | array_for_the_2|
00001560  44 5f 70 6f 69 6e 74 73  28 20 70 6f 69 6e 74 5f  |D_points( point_|
00001570  74 6f 5f 6c 69 6e 6b 5f  66 72 6f 6d 20 2c 20 32  |to_link_from , 2|
00001580  20 29 0d 05 c8 04 0d 05  d2 4f 20 20 20 20 20 73  | ).......O     s|
00001590  65 63 6f 6e 64 5f 78 5f  70 6f 73 69 74 69 6f 6e  |econd_x_position|
000015a0  20 20 3d 20 61 72 72 61  79 5f 66 6f 72 5f 74 68  |  = array_for_th|
000015b0  65 5f 32 44 5f 70 6f 69  6e 74 73 28 20 70 6f 69  |e_2D_points( poi|
000015c0  6e 74 5f 74 6f 5f 6c 69  6e 6b 5f 74 6f 20 20 20  |nt_to_link_to   |
000015d0  2c 20 31 20 29 0d 05 dc  4f 20 20 20 20 20 73 65  |, 1 )...O     se|
000015e0  63 6f 6e 64 5f 79 5f 70  6f 73 69 74 69 6f 6e 20  |cond_y_position |
000015f0  20 3d 20 61 72 72 61 79  5f 66 6f 72 5f 74 68 65  | = array_for_the|
00001600  5f 32 44 5f 70 6f 69 6e  74 73 28 20 70 6f 69 6e  |_2D_points( poin|
00001610  74 5f 74 6f 5f 6c 69 6e  6b 5f 74 6f 20 20 20 2c  |t_to_link_to   ,|
00001620  20 32 20 29 0d 05 e6 04  0d 05 f0 2f 20 20 20 20  | 2 )......./    |
00001630  20 ec 20 66 69 72 73 74  5f 78 5f 70 6f 73 69 74  | . first_x_posit|
00001640  69 6f 6e 20 20 2c 20 66  69 72 73 74 5f 79 5f 70  |ion  , first_y_p|
00001650  6f 73 69 74 69 6f 6e 0d  05 fa 30 20 20 20 20 20  |osition...0     |
00001660  df 20 73 65 63 6f 6e 64  5f 78 5f 70 6f 73 69 74  |. second_x_posit|
00001670  69 6f 6e 20 2c 20 73 65  63 6f 6e 64 5f 79 5f 70  |ion , second_y_p|
00001680  6f 73 69 74 69 6f 6e 0d  06 04 04 0d 06 0e 0b 20  |osition........ |
00001690  ed 20 6c 69 6e 6b 0d 06  18 04 0d 06 22 05 e1 0d  |. link......"...|
000016a0  06 2c 04 0d 06 36 04 0d  06 40 4e f4 20 2d 2d 2d  |.,...6...@N. ---|
000016b0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000016f0  2d 2d 2d 2d 2d 0d 06 4a  48 f4 20 20 50 52 4f 43  |-----..JH.  PROC|
00001700  45 44 55 52 45 20 54 4f  20 53 57 41 50 20 4f 55  |EDURE TO SWAP OU|
00001710  52 20 53 43 52 45 45 4e  53 2c 20 4b 45 45 50 49  |R SCREENS, KEEPI|
00001720  4e 47 20 54 48 45 20 41  4e 49 4d 41 54 49 4f 4e  |NG THE ANIMATION|
00001730  20 46 4c 49 43 4b 45 52  20 46 52 45 45 0d 06 54  | FLICKER FREE..T|
00001740  4e f4 20 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |N. -------------|
00001750  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001780  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 0d 06 5e 04 0d  |-----------..^..|
00001790  06 68 04 0d 06 72 22 dd  20 f2 65 64 75 72 65 5f  |.h...r". .edure_|
000017a0  53 77 61 70 5f 54 68 65  5f 53 63 72 65 65 6e 5f  |Swap_The_Screen_|
000017b0  42 61 6e 6b 73 0d 06 7c  04 0d 06 86 07 20 c8 96  |Banks..|..... ..|
000017c0  0d 06 90 14 20 42 41 4e  4b 20 3d 20 42 41 4e 4b  |.... BANK = BANK|
000017d0  20 82 20 33 0d 06 9a 12  20 c8 99 20 36 2c 31 31  | . 3.... .. 6,11|
000017e0  32 2c 42 41 4e 4b 0d 06  a4 16 20 c8 99 20 36 2c  |2,BANK.... .. 6,|
000017f0  31 31 33 2c 42 41 4e 4b  20 82 20 33 0d 06 ae 06  |113,BANK . 3....|
00001800  20 db 0d 06 b8 04 0d 06  c2 05 e1 0d 06 cc 04 0d  | ...............|
00001810  06 d6 04 0d 06 e0 4e f4  20 2d 2d 2d 2d 2d 2d 2d  |......N. -------|
00001820  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001860  2d 0d 06 ea 48 f4 20 20  54 48 45 20 50 52 4f 43  |-...H.  THE PROC|
00001870  45 44 55 52 45 20 54 48  41 54 20 52 45 41 44 53  |EDURE THAT READS|
00001880  20 54 48 45 20 38 20 50  4f 49 4e 54 53 20 49 4e  | THE 8 POINTS IN|
00001890  54 4f 20 54 48 45 20 41  52 52 41 59 20 57 45 27  |TO THE ARRAY WE'|
000018a0  56 45 20 53 45 54 20 55  50 0d 06 f4 4e f4 20 2d  |VE SET UP...N. -|
000018b0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
000018f0  2d 2d 2d 2d 2d 2d 2d 0d  06 fe 04 0d 07 08 04 0d  |-------.........|
00001900  07 12 29 dd 20 f2 65 64  75 72 65 5f 52 65 61 64  |..). .edure_Read|
00001910  5f 50 6f 69 6e 74 73 5f  49 6e 74 6f 5f 54 68 65  |_Points_Into_The|
00001920  69 72 5f 41 72 72 61 79  0d 07 1c 04 0d 07 26 0b  |ir_Array......&.|
00001930  20 f7 20 8d 64 5a 47 0d  07 30 04 0d 07 3a 14 20  | . .dZG..0...:. |
00001940  e3 20 70 6f 69 6e 74 20  3d 20 31 20 b8 20 38 0d  |. point = 1 . 8.|
00001950  07 44 04 0d 07 4e 2f 20  20 20 20 20 f3 20 58 5f  |.D...N/     . X_|
00001960  50 4f 53 49 54 49 4f 4e  20 2c 20 59 5f 50 4f 53  |POSITION , Y_POS|
00001970  49 54 49 4f 4e 20 2c 20  5a 5f 50 4f 53 49 54 49  |ITION , Z_POSITI|
00001980  4f 4e 0d 07 58 04 0d 07  62 3a 20 20 20 20 20 61  |ON..X...b:     a|
00001990  72 72 61 79 5f 66 6f 72  5f 74 68 65 5f 33 44 5f  |rray_for_the_3D_|
000019a0  70 6f 69 6e 74 73 28 20  70 6f 69 6e 74 20 2c 20  |points( point , |
000019b0  31 20 29 20 3d 20 58 5f  50 4f 53 49 54 49 4f 4e  |1 ) = X_POSITION|
000019c0  0d 07 6c 3a 20 20 20 20  20 61 72 72 61 79 5f 66  |..l:     array_f|
000019d0  6f 72 5f 74 68 65 5f 33  44 5f 70 6f 69 6e 74 73  |or_the_3D_points|
000019e0  28 20 70 6f 69 6e 74 20  2c 20 32 20 29 20 3d 20  |( point , 2 ) = |
000019f0  59 5f 50 4f 53 49 54 49  4f 4e 0d 07 76 3a 20 20  |Y_POSITION..v:  |
00001a00  20 20 20 61 72 72 61 79  5f 66 6f 72 5f 74 68 65  |   array_for_the|
00001a10  5f 33 44 5f 70 6f 69 6e  74 73 28 20 70 6f 69 6e  |_3D_points( poin|
00001a20  74 20 2c 20 33 20 29 20  3d 20 5a 5f 50 4f 53 49  |t , 3 ) = Z_POSI|
00001a30  54 49 4f 4e 0d 07 80 04  0d 07 8a 0c 20 ed 20 70  |TION........ . p|
00001a40  6f 69 6e 74 0d 07 94 04  0d 07 9e 05 e1 0d 07 a8  |oint............|
00001a50  04 0d 07 b2 04 0d 07 bc  33 f4 20 2a 2a 2a 20 54  |........3. *** T|
00001a60  68 65 20 64 61 74 61 20  66 6f 72 20 74 68 65 20  |he data for the |
00001a70  38 20 70 6f 69 6e 74 73  20 6f 66 20 74 68 65 20  |8 points of the |
00001a80  63 75 62 65 20 2a 2a 2a  0d 07 c6 04 0d 07 d0 04  |cube ***........|
00001a90  0d 07 da 40 dc 20 2d 31  30 2c 2b 31 30 20 2c 20  |...@. -10,+10 , |
00001aa0  2b 31 30 20 3a 20 52 45  4d 20 54 68 65 20 34 20  |+10 : REM The 4 |
00001ab0  70 6f 69 6e 74 73 20 66  6f 72 20 74 68 65 20 66  |points for the f|
00001ac0  72 6f 6e 74 20 6f 66 20  74 68 65 20 63 75 62 65  |ront of the cube|
00001ad0  0d 07 e4 13 dc 20 2b 31  30 2c 2b 31 30 20 2c 20  |..... +10,+10 , |
00001ae0  2b 31 30 0d 07 ee 13 dc  20 2b 31 30 2c 2d 31 30  |+10..... +10,-10|
00001af0  20 2c 20 2b 31 30 0d 07  f8 13 dc 20 2d 31 30 2c  | , +10..... -10,|
00001b00  2d 31 30 20 2c 20 2b 31  30 0d 08 02 04 0d 08 0c  |-10 , +10.......|
00001b10  40 dc 20 2d 31 30 2c 2b  31 30 20 2c 20 2d 31 30  |@. -10,+10 , -10|
00001b20  20 3a 20 52 45 4d 20 54  68 65 20 34 20 70 6f 69  | : REM The 4 poi|
00001b30  6e 74 73 20 66 6f 72 20  74 68 65 20 62 61 63 6b  |nts for the back|
00001b40  20 20 6f 66 20 74 68 65  20 63 75 62 65 0d 08 16  |  of the cube...|
00001b50  13 dc 20 2b 31 30 2c 2b  31 30 20 2c 20 2d 31 30  |.. +10,+10 , -10|
00001b60  0d 08 20 13 dc 20 2b 31  30 2c 2d 31 30 20 2c 20  |.. .. +10,-10 , |
00001b70  2d 31 30 0d 08 2a 13 dc  20 2d 31 30 2c 2d 31 30  |-10..*.. -10,-10|
00001b80  20 2c 20 2d 31 30 0d 08  34 04 0d 08 3e 04 0d 08  | , -10..4...>...|
00001b90  48 4e f4 20 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |HN. ------------|
00001ba0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001bd0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 0d 08 52 48  |------------..RH|
00001be0  f4 20 20 54 48 45 20 50  52 4f 43 45 44 55 52 45  |.  THE PROCEDURE|
00001bf0  20 54 48 41 54 20 52 45  41 44 53 20 54 48 45 20  | THAT READS THE |
00001c00  31 32 20 4c 49 4e 4b 53  20 49 4e 54 4f 20 54 48  |12 LINKS INTO TH|
00001c10  45 20 41 52 52 41 59 20  57 45 27 56 45 20 53 45  |E ARRAY WE'VE SE|
00001c20  54 20 55 50 0d 08 5c 4e  f4 20 2d 2d 2d 2d 2d 2d  |T UP..\N. ------|
00001c30  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
*
00001c70  2d 2d 0d 08 66 04 0d 08  70 04 0d 08 7a 28 dd 20  |--..f...p...z(. |
00001c80  f2 65 64 75 72 65 5f 52  65 61 64 5f 4c 69 6e 6b  |.edure_Read_Link|
00001c90  73 5f 49 6e 74 6f 5f 54  68 65 69 72 5f 41 72 72  |s_Into_Their_Arr|
00001ca0  61 79 0d 08 84 04 0d 08  8e 0b 20 f7 20 8d 54 78  |ay........ . .Tx|
00001cb0  49 0d 08 98 04 0d 08 a2  14 20 e3 20 6c 69 6e 6b  |I........ . link|
00001cc0  20 3d 20 31 20 b8 20 31  32 0d 08 ac 04 0d 08 b6  | = 1 . 12.......|
00001cd0  1e 20 20 20 20 20 f3 20  4a 4f 49 4e 5f 46 52 4f  |.     . JOIN_FRO|
00001ce0  4d 20 2c 20 4a 4f 49 4e  5f 54 4f 0d 08 c0 04 0d  |M , JOIN_TO.....|
00001cf0  08 ca 34 20 20 20 20 20  61 72 72 61 79 5f 66 6f  |..4     array_fo|
00001d00  72 5f 74 68 65 5f 6c 69  6e 6b 73 28 20 6c 69 6e  |r_the_links( lin|
00001d10  6b 20 2c 20 31 20 29 20  3d 20 4a 4f 49 4e 5f 46  |k , 1 ) = JOIN_F|
00001d20  52 4f 4d 0d 08 d4 32 20  20 20 20 20 61 72 72 61  |ROM...2     arra|
00001d30  79 5f 66 6f 72 5f 74 68  65 5f 6c 69 6e 6b 73 28  |y_for_the_links(|
00001d40  20 6c 69 6e 6b 20 2c 20  32 20 29 20 3d 20 4a 4f  | link , 2 ) = JO|
00001d50  49 4e 5f 54 4f 0d 08 de  04 0d 08 e8 0b 20 ed 20  |IN_TO........ . |
00001d60  6c 69 6e 6b 0d 08 f2 04  0d 08 fc 05 e1 0d 09 06  |link............|
00001d70  04 0d 09 10 04 0d 09 1a  3b f4 20 2a 2a 2a 20 54  |........;. *** T|
00001d80  68 65 20 64 61 74 61 20  66 6f 72 20 74 68 65 20  |he data for the |
00001d90  31 32 20 6c 69 6e 6b 73  20 74 6f 20 6d 61 6b 65  |12 links to make|
00001da0  20 75 70 20 74 68 65 20  63 75 62 65 20 2a 2a 2a  | up the cube ***|
00001db0  0d 09 24 04 0d 09 2e 04  0d 09 38 35 dc 20 31 20  |..$.......85. 1 |
00001dc0  2c 20 32 20 3a 20 52 45  4d 20 54 68 65 20 6c 69  |, 2 : REM The li|
00001dd0  6e 6b 73 20 74 6f 20 6a  6f 69 6e 20 75 70 20 74  |nks to join up t|
00001de0  68 65 20 66 72 6f 6e 74  20 66 61 63 65 0d 09 42  |he front face..B|
00001df0  0b dc 20 32 20 2c 20 33  0d 09 4c 0b dc 20 33 20  |.. 2 , 3..L.. 3 |
00001e00  2c 20 34 0d 09 56 0b dc  20 34 20 2c 20 31 0d 09  |, 4..V.. 4 , 1..|
00001e10  60 04 0d 09 6a 35 dc 20  35 20 2c 20 36 20 3a 20  |`...j5. 5 , 6 : |
00001e20  52 45 4d 20 54 68 65 20  6c 69 6e 6b 73 20 74 6f  |REM The links to|
00001e30  20 6a 6f 69 6e 20 75 70  20 74 68 65 20 62 61 63  | join up the bac|
00001e40  6b 20 20 66 61 63 65 0d  09 74 0b dc 20 36 20 2c  |k  face..t.. 6 ,|
00001e50  20 37 0d 09 7e 0b dc 20  37 20 2c 20 38 0d 09 88  | 7..~.. 7 , 8...|
00001e60  0b dc 20 38 20 2c 20 35  0d 09 92 04 0d 09 9c 43  |.. 8 , 5.......C|
00001e70  dc 20 31 20 2c 20 35 20  3a 20 52 45 4d 20 54 68  |. 1 , 5 : REM Th|
00001e80  65 20 6c 69 6e 6b 73 20  74 6f 20 6a 6f 69 6e 20  |e links to join |
00001e90  74 68 65 20 66 72 6f 6e  74 20 66 61 63 65 20 74  |the front face t|
00001ea0  6f 20 74 68 65 20 62 61  63 6b 20 66 61 63 65 0d  |o the back face.|
00001eb0  09 a6 0b dc 20 32 20 2c  20 36 0d 09 b0 0b dc 20  |.... 2 , 6..... |
00001ec0  33 20 2c 20 37 0d 09 ba  0b dc 20 34 20 2c 20 38  |3 , 7..... 4 , 8|
00001ed0  0d ff                                             |..|
00001ed2