Commit | Line | Data |
---|---|---|
81e70d48 PH |
1 | / -+-+-+-+-+ \ e H P O C T . R A \ e -+-+-+-+-+\r |
2 | /\r | |
3 | / F4 SUBROUTINE OCTAL (INPUT,OUTPUT)\r | |
4 | /\r | |
5 | / THE PARAMETER INPUT OF ARBITRARY TYPE IS CONVERTED TO A 12 DIGIT\r | |
6 | / OCTAL NUMBER STRING.\r | |
7 | / THIS STRING OF 6 WORDS (2A6 FORMAT) WITH 12 PACKED ASCII CHARACTERS\r | |
8 | / IS ASSIGNED TO \r | |
9 | / OUTPUT A VECTOR AT LEAST CONTAINING TWO ELEMENTS.\r | |
10 | /\r | |
11 | / HARDWARE REQUIRED: LAB8/E, KE8-E, HARD/SOFT FPP12\r | |
12 | /\r | |
13 | / VER 0.0 15-AUG-80 HA\r | |
14 | / VER 0.1 17-JUL-85 HA REARANGES CODE TO REDUCE EXTERNAL REFS\r | |
15 | /\r | |
16 | /\r | |
17 | SECT OCTAL\r | |
18 | BASE 0 / STAY ON CALLERS BASE\r | |
19 | /\r | |
20 | /\r | |
21 | BSW= 7002\r | |
22 | CDI= 6203\r | |
23 | SWAB= 07431\r | |
24 | LSR= 07417\r | |
25 | MQL= 07421\r | |
26 | MQA= 07501\r | |
27 | STARTD / CALL OCTAL (NUMBER,12 CHAR STRING)\r | |
28 | FLDA 10*3 / RET. ADR. --> GOBAK\r | |
29 | FSTA GOBAK\r | |
30 | FLDA 0 / ADR. OF ARGUMENT LIST --> FAC\r | |
31 | FADD TWO / INC. FOR FIRST ARG.\r | |
32 | FSTA 3 / TEMP. FOR IND. REFERENCE\r | |
33 | FSTA ARG2\r | |
34 | FLDA% 3\r | |
35 | FSTA 3\r | |
36 | STARTF\r | |
37 | FLDA% 3 / FIRST PARAMETER --> ARG1\r | |
38 | FSTA ARG1\r | |
39 | STARTD\r | |
40 | FLDA ARG2\r | |
41 | FADD TWO / GET NEXT PARAMETER\r | |
42 | FSTA 3\r | |
43 | FLDA% 3\r | |
44 | FSTA 3 / ADR. OF SECOND PARAMETER --> 3\r | |
45 | TRAP4 OCTAL8\r | |
46 | STARTF\r | |
47 | FLDA ARG2 / INSERT RESULT INTO OUTPUT\r | |
48 | FSTA% 3 / FIRST THE WORDS 0,1,2\r | |
49 | STARTD\r | |
50 | FLDA 3\r | |
51 | FADD THREE / INCREMENT BY 3 TO COMPUTE THE ADR OF WORD 3\r | |
52 | FSTA 3\r | |
53 | STARTF\r | |
54 | FLDA ARG2+3\r | |
55 | FSTA% 3 / STORE INTO WORDS 3,4,5\r | |
56 | GOBAK, JA .-.\r | |
57 | TWO, 0\r | |
58 | 2\r | |
59 | THREE, 0\r | |
60 | 3\r | |
61 | /\r | |
62 | /\r | |
63 | CPNTR, ORG .+1\r | |
64 | WPNTR, ORG .+1\r | |
65 | ARG1, ORG .+3\r | |
66 | ARG2, ORG .+6 / 12 CHARACTERS SPACE FOR THE CONVERTED NUMBER\r | |
67 | /\r | |
68 | /\r | |
69 | OCTAL8, .-.\r | |
70 | CLA CMA / -1 --> AC\r | |
71 | DCA CPNTR / RESET STCAR ROUTINE \r | |
72 | DCA WPNTR / CHAR POINTER TO LEFT HALF, WORD POINTER TO ZERO\r | |
73 | DCA ARG2+0 / CLEAR OUTPUT BUFFER\r | |
74 | DCA ARG2+1\r | |
75 | DCA ARG2+2\r | |
76 | DCA ARG2+3\r | |
77 | DCA ARG2+4\r | |
78 | DCA ARG2+5\r | |
79 | TAD ARG1 / CONVERT THE FISRT WORD TO 4 OCTAL CHARACTERS\r | |
80 | JMS MOCTAL\r | |
81 | TAD ARG1+1 / CONVERT THE SECOND WORD \r | |
82 | JMS MOCTAL\r | |
83 | TAD ARG1+2 / CONVERT THE LAST WORD\r | |
84 | JMS MOCTAL\r | |
85 | CDI\r | |
86 | JMP% OCTAL8\r | |
87 | /\r | |
88 | /\r | |
89 | TMP1, ORG .+1\r | |
90 | /\r | |
91 | MOCTAL, .-. / CONVERT AC INTO 4 OCTAL CHARS\r | |
92 | DCA TMP1 / SAVE AC --> TMP1\r | |
93 | TAD TMP1\r | |
94 | LSR / SHIFT TO THE RIGHT BY 9 BITS \r | |
95 | 011\r | |
96 | JMS STCHAR / AND STORE THE FIRST CHAR INTO ARG2, THEN TMP1 --> AC\r | |
97 | LSR / SHIFT 6 BITS TO THE RIGHT TO GET THE SECOND CHARACTER \r | |
98 | 6\r | |
99 | JMS STCHAR / AND STORE IT INTO --> ARG2, TMP1 --> AC\r | |
100 | LSR \r | |
101 | 3\r | |
102 | JMS STCHAR\r | |
103 | JMS STCHAR\r | |
104 | CLA / CLEAR AC BEFORE WE RETURN\r | |
105 | JMP% MOCTAL\r | |
106 | /\r | |
107 | / CHARACTER STORE PROCEDURE\r | |
108 | /\r | |
109 | / WPNTR: OFSET TO ARG2 0,1,2,...,5\r | |
110 | / CPNTR: IF -2 THEN RIGHT HALF OF THE WORD ELSE IF -1 THEN LEFT HALF\r | |
111 | /\r | |
112 | /\r | |
113 | LINSTR, TAD ARG2+0 / REM INSTRUCTION AC -> ARG2\r | |
114 | DINSTR, DCA ARG2+0 / ARG2 --> AC\r | |
115 | TREBIT, 0007\r | |
116 | ZERO, 060\r | |
117 | /\r | |
118 | /\r | |
119 | STCHAR, .-. / CHARACTER STORE ROUTINE\r | |
120 | AND TREBIT / MASK OUT THE RIGHTMOST THREE BITS\r | |
121 | TAD ZERO / ADD A "0"\r | |
122 | MQL / CHARACTER --> MQ\r | |
123 | TAD LINSTR\r | |
124 | TAD WPNTR\r | |
125 | DCA INSTR1 / ADD WPNTR INTO THE LOAD & STORE INSTRUCTIONS\r | |
126 | TAD DINSTR\r | |
127 | TAD WPNTR\r | |
128 | DCA INSTR2\r | |
129 | ISZ CPNTR / FIRST OR SECOND HALF ?\r | |
130 | JMP LAB1 / PUT CHARACTER INTO SECOND HALF OF WORD\r | |
131 | CLA CLL CMA RAL / -2 --> AC\r | |
132 | DCA CPNTR / RESET CHARACTER POINTER TO H2\r | |
133 | MQA / CHAR --> AC\r | |
134 | BSW / SWAP INTO FIRST HALF OF AC\r | |
135 | JMP LAB2\r | |
136 | LAB1, ISZ WPNTR / INCREMENT WORD POINTER \r | |
137 | MQA / CHAR --> AC\r | |
138 | LAB2, MQL / CHAR --> MQ\r | |
139 | INSTR1, .-. / LOAD ARG2 --> AC\r | |
140 | MQA / INSERT THE NEW CHARACTER\r | |
141 | INSTR2, .-. / AND STORE BACK INTO ARG2\r | |
142 | TAD TMP1\r | |
143 | JMP% STCHAR\r | |
144 | END\r | |
145 | \1a\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\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\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\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\0\0\0\0\0\0\0 |