1 / -+-+-+-+-+
\ e H P O C T . R A
\ e -+-+-+-+-+
3 / F4 SUBROUTINE OCTAL (INPUT,OUTPUT)
5 / THE PARAMETER INPUT OF ARBITRARY TYPE IS CONVERTED TO A 12 DIGIT
7 / THIS STRING OF 6 WORDS (2A6 FORMAT) WITH 12 PACKED ASCII CHARACTERS
9 / OUTPUT A VECTOR AT LEAST CONTAINING TWO ELEMENTS.
11 / HARDWARE REQUIRED: LAB8/E, KE8-E, HARD/SOFT FPP12
13 / VER 0.0 15-AUG-80 HA
14 / VER 0.1 17-JUL-85 HA REARANGES CODE TO REDUCE EXTERNAL REFS
18 BASE 0 / STAY ON CALLERS BASE
27 STARTD / CALL OCTAL (NUMBER,12 CHAR STRING)
28 FLDA 10*3 / RET. ADR. --> GOBAK
30 FLDA 0 / ADR. OF ARGUMENT LIST --> FAC
31 FADD TWO / INC. FOR FIRST ARG.
32 FSTA 3 / TEMP. FOR IND. REFERENCE
37 FLDA% 3 / FIRST PARAMETER --> ARG1
41 FADD TWO / GET NEXT PARAMETER
44 FSTA 3 / ADR. OF SECOND PARAMETER --> 3
47 FLDA ARG2 / INSERT RESULT INTO OUTPUT
48 FSTA% 3 / FIRST THE WORDS 0,1,2
51 FADD THREE / INCREMENT BY 3 TO COMPUTE THE ADR OF WORD 3
55 FSTA% 3 / STORE INTO WORDS 3,4,5
66 ARG2, ORG .+6 / 12 CHARACTERS SPACE FOR THE CONVERTED NUMBER
71 DCA CPNTR / RESET STCAR ROUTINE
72 DCA WPNTR / CHAR POINTER TO LEFT HALF, WORD POINTER TO ZERO
73 DCA ARG2+0 / CLEAR OUTPUT BUFFER
79 TAD ARG1 / CONVERT THE FISRT WORD TO 4 OCTAL CHARACTERS
81 TAD ARG1+1 / CONVERT THE SECOND WORD
83 TAD ARG1+2 / CONVERT THE LAST WORD
91 MOCTAL, .-. / CONVERT AC INTO 4 OCTAL CHARS
92 DCA TMP1 / SAVE AC --> TMP1
94 LSR / SHIFT TO THE RIGHT BY 9 BITS
96 JMS STCHAR / AND STORE THE FIRST CHAR INTO ARG2, THEN TMP1 --> AC
97 LSR / SHIFT 6 BITS TO THE RIGHT TO GET THE SECOND CHARACTER
99 JMS STCHAR / AND STORE IT INTO --> ARG2, TMP1 --> AC
104 CLA / CLEAR AC BEFORE WE RETURN
107 / CHARACTER STORE PROCEDURE
109 / WPNTR: OFSET TO ARG2 0,1,2,...,5
110 / CPNTR: IF -2 THEN RIGHT HALF OF THE WORD ELSE IF -1 THEN LEFT HALF
113 LINSTR, TAD ARG2+0 / REM INSTRUCTION AC -> ARG2
114 DINSTR, DCA ARG2+0 / ARG2 --> AC
119 STCHAR, .-. / CHARACTER STORE ROUTINE
120 AND TREBIT / MASK OUT THE RIGHTMOST THREE BITS
122 MQL / CHARACTER --> MQ
125 DCA INSTR1 / ADD WPNTR INTO THE LOAD & STORE INSTRUCTIONS
129 ISZ CPNTR / FIRST OR SECOND HALF ?
130 JMP LAB1 / PUT CHARACTER INTO SECOND HALF OF WORD
131 CLA CLL CMA RAL / -2 --> AC
132 DCA CPNTR / RESET CHARACTER POINTER TO H2
134 BSW / SWAP INTO FIRST HALF OF AC
136 LAB1, ISZ WPNTR / INCREMENT WORD POINTER
138 LAB2, MQL / CHAR --> MQ
139 INSTR1, .-. / LOAD ARG2 --> AC
140 MQA / INSERT THE NEW CHARACTER
141 INSTR2, .-. / AND STORE BACK INTO ARG2