First commit
[asteroids.git] / VECMAC.XX
1         .TITLE  VECMAC - VECTOR MACROS\r
2         .SBTTL  **************************\r
3         .SBTTL  *\r
4         .SBTTL  * PROGRAMMER: DOWNEND & MOORE\r
5         .SBTTL  *\r
6         .SBTTL  **************************\r
7         .REPT   0\r
8 DATE:   8/14/78\r
9 PROJECT:6W000\r
10 DISK:   49\r
11 DESCRIPTION:\r
12         GENERAL PURPOSE MACROS TO FACILITATE PROGRAMMING THE VECTOR GENERATOR\r
13 \r
14         BEWARE:  CODE REFERENCING THESE MACROS MUST BE ASECT IF THE "JSRL"\r
15                  OR "JMPL" MACRO IS USED\r
16 \r
17         .ENDR\r
18 ;\r
19 ;       VCTR - DRAW VECTOR INSTRUCTION\r
20 ;       THIS INSTRUCTION DRAWS A VECTOR ON THE DISPLAY AREA\r
21 ;       RELATIVE TO THE PREVIOUS BEAM POSITION BEFORE THE\r
22 ;       INSTRUCTION IS EXECUTED.  DX IS THE CHANGE IN BEAM X\r
23 ;       POSITION; DY IS THE CHANGE IN BEAM Y POSITION; ZZ \r
24 ;       SPECIFIES THE BEAM INTENSITY (0 THROUGH 15., 0 IS\r
25 ;       NO INTENSITY, 15. IS BRIGHTEST INTENSITY). THE OPCODE\r
26 ;       IS 1 TO 9 WHICH SPECIFIES THE RATE WITH WHICH THE BEAM\r
27 ;       IS DRAWN.\r
28 ;\r
29         .SBTTL  VCTR\r
30         .MACRO  VCTR DX,DY,ZZ\r
31         ..1=DX\r
32         ..2=DY\r
33         ..3=0                   ;SET SIGNS\r
34         ..4=0\r
35         .IF      LT,..1         ;IF NEGATIVE X\r
36         ..3=4\r
37         ..1=-DX\r
38         .ENDC\r
39         .IF      LT,..2         ;IF NEGATIVE Y\r
40         ..4=^H400\r
41         ..2=-DY\r
42         .ENDC\r
43         ..5=..1!..2\r
44         .IF      EQ,..5&^H0FFCF\r
45         .WORD    ^H0F808+<..2*^H10>+<..1/^H10>+..3+..4+<ZZ*^H10>\r
46         .MEXIT\r
47         .ENDC\r
48         .IF      EQ,..5&^H0FFE7\r
49         .WORD    ^H0F008+<..2*^H20>+<..1/8>+..3+..4+<ZZ*^H10>\r
50         .MEXIT\r
51         .ENDC\r
52         .IF      EQ,..5&^H0FFF3\r
53         .WORD    ^H0F800+<..2*^H40>+<..1/4>+..3+..4+<ZZ*^H10>\r
54         .MEXIT\r
55         .ENDC\r
56         .IF      EQ,..5&^H0FFF9\r
57         .WORD    ^H0F000+<..2*^H80>+<..1/2>+..3+..4+<ZZ*^H10>\r
58         .MEXIT\r
59         .ENDC\r
60         ..6=^H9000\r
61         .REPT 9.\r
62         .IF LT,..5-^H200\r
63         ..5=..5*2\r
64         ..1=..1*2\r
65         ..2=..2*2\r
66         ..6=..6-^H1000\r
67         .ENDC\r
68         .ENDR\r
69         .WORD    ..6+..4+..2,<ZZ*^H1000>+..1+<..3*^H100>\r
70         .ENDM\r
71 ;\r
72 ;       JSRL - JUMP SUBROUTINE INSTRUCTION\r
73 ;       THE LOWER THREE BYTES SPECIFY AN ADDRESS RELATIVE\r
74 ;       TO THE BEGINNING OF THE VECTOR GENERATOR ADDRESSABLE\r
75 ;       INSTRUCTION SPACE  DIVIDED BY 2.  THE TOTAL ADDRESS\r
76 ;       AREA IS 6K BYTES.  OPCODE IS 'C'.\r
77 ;\r
78         .SBTTL  JSRL\r
79         .MACRO  JSRL LABL\r
80         .WORD   <LABL&^H1FFF>/2.+^H0C000\r
81         .ENDM\r
82 ;\r
83 ;       LABS - LOAD ABSOLUTE BEAM POSITION FOR VG\r
84 ;       ASSUMES DISPLAYED AREA LOWER LEFT CORNER IS ADDRESS\r
85 ;       0,0 THE SIZE DETERMINES THE SCALING SIZE\r
86 ;       FOR ALL FOLLOWING VECTORS. A NULL PARAMETER\r
87 ;       MEANS 0 AND THE VALID RANGE IS 0 TO F.\r
88 ;\r
89         .SBTTL  LABS\r
90         .MACRO  LABS DSTX,DSTY,SIZE\r
91         ..1=0\r
92         .IIF    NB,SIZE,..1=SIZE\r
93         .WORD   ^H0A000+<DSTY&^H0FFF>,^H1000*..1+<DSTX&^H0FFF>\r
94         .ENDM\r
95 ;\r
96 ;       WAIT - BEAM WAIT INSTRUCTION\r
97 ;       THIS INSTRUCTION ALLOWS THE BEAM TO COME TO REST AT\r
98 ;       ITS CURRENT POSITION.  T IS THE TIME FOR THE WAIT\r
99 ;       (1 TO 9, 1 IS SHORTEST, 9 IS LONGEST); Z IS THE INTENSITY\r
100 ;       OF THE BEAM, AS IN THE VCTR INSTRUCTION.  A WAIT INSTRUCTION\r
101 ;       SHOULD BE USED AFTER EVERY LABS & ALABS INSTRUCTION TO ALLOW\r
102 ;       THE BEAM TO REACH THE SPECIFIED POSITION.  THE OPCODE IS\r
103 ;       1 TO 9.\r
104 ;\r
105         .SBTTL  WAIT\r
106         .MACRO  WAIT .T,.Z\r
107         ..1=0\r
108         ..2=7.\r
109         .IIF    NB,.Z,..1=.Z\r
110         .IIF    NB,.T,..2=.T\r
111         .WORD   ..2*^H1000,..1*^H1000\r
112         .ENDM\r
113 ;\r
114 ;       HALT - HALT THE VECTOR GENERATOR INSTRUCTION\r
115 ;       WHEN EXECUTED BY VG SETS THE VG HALT FLAG.\r
116 ;       OPCODE IS 'B'\r
117 ;\r
118         .SBTTL  HALT\r
119         .MACRO  HALT\r
120         .WORD   ^H0B000\r
121         .ENDM\r
122 ;\r
123 ;       RTSL - RETURN FROM SUBROUTINE \r
124 ;       THIS INSTRUCTION IS ANALOGOUS TO AN RTS INSTRUCTION FOR\r
125 ;       A MICROPROCESSOR. THE VG IS CAPABLE OF FIVE LEVELS OF\r
126 ;       SUBROUTINE CALLS (JSRL).  THE OPCODE IS 'D'.\r
127 ;\r
128         .SBTTL  RTSL\r
129         .MACRO  RTSL\r
130         .WORD   ^H0D000\r
131         .ENDM\r
132 ;\r
133 ;       JMPL - JUMP TO ROUTINE\r
134 ;       THE LOWER THREE BYTES REFERENCES AN ADDRESS JUST AS\r
135 ;       THE LOWER THREE BYTES OF AN JSRL INSTRUCTION. THE\r
136 ;       INSTRUCTION OPERATES JUST AS A JMP INSTRUCTION DOES\r
137 ;       FOR A 650X OR 6800 MICRO.  THE OPCODE IS 'E'.\r
138 ;\r
139         .SBTTL  JMPL\r
140         .MACRO  JMPL LABL\r
141         .WORD   <LABL&^H1FFF>/2.+^H0E000\r
142         .ENDM\r
143 ;\r
144 ;       ALPHA - ALPHANUMERIC JSRL LIST INSTRUCTION\r
145 ;       THIS INSTRUCTION CONSTRUCTS A JSRL INSTRUCTION\r
146 ;       FOR EVERY CHARACTER IN THE CALLING PARAMETER\r
147 ;       STRING, THUS A LABEL CHAR.X MUST EXIST FOR EVERY\r
148 ;       UNIQUE CHARACTER X IN THE PARAMETER STRING.\r
149 ;       RESERVED CHARACTERS USED BY THE PDP SYSTEMS \r
150 ;       (IE @ : ; ETC.) SHOULD NOT BE USED.\r
151 ;\r
152         .SBTTL  ALPHANUMERICS\r
153         .MACRO  ALPHA   STRING\r
154         .IRPC   ..X,<STRING>\r
155         JSRL    CHAR.'..X\r
156         .ENDR\r
157         .ENDM\r
158         .LIST MEB\r
159         .NLIST  BYT\r
160         .PAGE\r
161 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0