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