A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rkb / paroff / hpoct.ra
CommitLineData
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
21BSW= 7002\r
22CDI= 6203\r
23SWAB= 07431\r
24LSR= 07417\r
25MQL= 07421\r
26MQA= 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
56GOBAK, JA .-.\r
57TWO, 0\r
58 2\r
59THREE, 0\r
60 3\r
61/\r
62/\r
63CPNTR, ORG .+1\r
64WPNTR, ORG .+1\r
65ARG1, ORG .+3\r
66ARG2, ORG .+6 / 12 CHARACTERS SPACE FOR THE CONVERTED NUMBER\r
67/\r
68/\r
69OCTAL8, .-.\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
89TMP1, ORG .+1\r
90/\r
91MOCTAL, .-. / 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
113LINSTR, TAD ARG2+0 / REM INSTRUCTION AC -> ARG2\r
114DINSTR, DCA ARG2+0 / ARG2 --> AC\r
115TREBIT, 0007\r
116ZERO, 060\r
117/\r
118/\r
119STCHAR, .-. / 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
136LAB1, ISZ WPNTR / INCREMENT WORD POINTER \r
137 MQA / CHAR --> AC\r
138LAB2, MQL / CHAR --> MQ\r
139INSTR1, .-. / LOAD ARG2 --> AC\r
140 MQA / INSERT THE NEW CHARACTER\r
141INSTR2, .-. / 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