Initial revision
[h316.git] / lib / iolib / src / o$pb.asm
1 * (O$PB) - COPY OF O$AB
2 *
3 *
4 * COMPUTER: H316
5 *
6 * PROGRAM CATEGORY: I/O LIBRARY
7 *
8 * PROGRAM TITLE: O$PB (O$PS,O$PLDR)
9 * TO PUNCH BINARY TAPE ON THE HIGH SPEED PUNCH
10 *
11 * REVISIONS:
12 * 1.0 (2005-02.04)
13 *
14 * AUTHOR
15 *
16 * PHILIPP HACHTMANN
17 *
18 *
19 *
20 * STORAGE
21 *
22 * 150 (OCTAL)
23 * 104 (DECIMAL)
24 *
25 *
26 * USE
27 *
28 * CALL O$PB PTP BINARY PUNCH ROUTINE
29 * DAC DATA DATA ADDRESS
30 * NORMAL RETURN
31 *
32 * CALL O$PS END OF MESSAGE ROUTINE
33 *
34 * CALL O$PLDR PUNCH BLANK LEADER
35 *
36 *
37 * CALL O$AB -
38 *
39 * THIS ROUTINE IS USED TO PUNCH BINARY PAPER TAPE, THE ADDRESS
40 * OF THE BINARY WORD COUNT APPEARS IN THE VARIABLE FIELD (DATA)
41 * FOLLOWING THE CALL PSEUDO-OP. THE BINARY INFORMATION TO BE
42 * PUNCHED MUST START AT DATA+1.
43 * THE NORMAL RETURN IS TAKEN WHEN THE NUMBER OF WORDS SPECIFIED
44 * BY THE WORD COUNT HAS BEEN PUNCHED.
45 *
46 * CALL O$AS -
47 *
48 * EOM (203 OCT), X-OFF (223 OCT), AND RUBOUT (377 OCT) CHARACTERS
49 * ARE PUNCHED WHEN THIS ROUTINE IS USED.
50 * RETURN IS TO THE CALLING PROGRAMM
51 *
52 * CALL O$PLDR -
53 *
54 * PUNCH BLANK LEADER. NORMAL RETURN.
55 *
56 *
57 * METHOD
58 *
59 * BINARY INFORMATION IS PUNCHED AS IST APPEARS IN THE BUFFER (DATA+1).
60 * EACH RECORD ON PAPER TAP EWILL HAVE THE FOLLOWING FORMAT:
61 * START OF MESSAGE, BINARY INFORMATION, X-OFF, TWO LEADER CHARS.
62 *
63 *
64 *
65 ********************************************************************************
66 *
67 *
68 SUBR O$PB
69 SUBR O$PS
70 SUBR O$PLDR,PLDR
71 REL
72 O$PB PZE ** PTP PUNCH ENTRY
73 STX XR SAVE INDEX REGISTER FROM CALLING PROGRAMM
74 OCP 2 ACTIVATE PAPER TAPE PUNCH
75 *
76 LDA* O$PB WORD COUNT ADDRESS
77 BIN5 STA TMP
78 LDA* TMP
79 TCA TWOS COMPLEMENT BINARY WORD COUNT
80 STA 0
81 LDA* O$PB BINARY DATA ADDRESS
82 ADD* TMP DATA ADDRESS+WORD COUNT
83 ADD ='40001
84 STA DATA DATA ADDRESS + WORD COUNT, 1
85 JST STP
86 LDA ='201 BEGINNING OF MESSAGE
87 JST BCD8
88 BIN6 LDA* DATA BINARY WORD TO BE PUNCHED
89 LRL 16 B-REG: BINARY WORD TO BE PUNCHED
90 JST PNCH GO PUNCH BINARY WORD
91 IRS 0
92 JMP BIN6 CONTINUE PUNCHING BINARY CHARACTERS
93 JMP RETN LEAVE ROUTINE
94 PNCH PZE ** CONVERT AND PUNCH BINARY CHARACTERS
95 LLL 4
96 JST CHAR PUNCH BINARY WORD (1-4)
97 JST CHAR PUNCH BINARY WORD (5-10)
98 JST CHAR PUNCH BINARY WORD (11-16)
99 JMP* PNCH RETURN FOR ADDITIONAL WORDS
100 CHAR PZE **
101 LGL 11
102 CAS WRU
103 JMP *+2
104 LDA WRUX
105 CAS LF
106 JMP *+2
107 LDA LFX
108 CAS XON
109 JMP *+2
110 LDA XONX
111 CAS XOFF
112 JMP *+2
113 LDA XOFX
114 SRC
115 ERA FOUR
116 ALR 5
117 OUT JST BCD8
118 LLL 6
119 JMP* CHAR
120 WRU OCT 024000
121 WRUX OCT 160003
122 LF OCT 050000
123 LFX OCT 164003
124 XON OCT 104000
125 XONX OCT 170003
126 XOFF OCT 114000
127 XOFX OCT 174003
128 FOUR OCT 000004
129 BCD8 PZE ** ASCII PUNCH ROUTINE
130 OTA 2
131 JMP *-1
132 JMP* BCD8
133 RETN LDA ='223 X-OFF
134 JST BCD8
135 LDA ='377 RUBOUT CHARACTER
136 JST BCD8 LEADER CHAR.
137 IRS O$PB INCREMENT FOR NORMAL RETURN
138 LDA XR RESTORE INDEX FOR CALLING PROGRAMM
139 STA 0
140 JMP* O$PB
141 *
142 O$PS PZE ** PUNCH END OF MESSAGE ENTRY
143 JST STP
144 LDA ='203 PUNCH END OF MESSAGE
145 JST BCD8
146 LDA ='223 PUNCH X-OFF
147 JST BCD8
148 LDA ='377 RUBOUT CHARACTER
149 JST BCD8 LEADER CHAR.
150 JMP* O$PS RETURN TO CALLING PROGRAMM
151 *
152 STP DAC **
153 LDA ='222
154 JST BCD8
155 LDA ='377
156 JST BCD8
157 JMP* STP
158 DATA PZE 0
159 XR PZE 0
160 TMP PZE 0
161 FIN
162 *
163 LDRC DEC 150 LENGTH OF LEADER
164 PLDR DAC ** PUNCH LEADER ENTRY
165 STX XR SAVE X REGISTER
166 LDA LDRC LENGTH OF LEADER
167 TCA TWOS COMPLEMENT OF LEADER
168 STA 0
169 OCP 2
170 CRA
171 LD1 OTA 2 PUNCH!
172 JMP *-1
173 IRS 0
174 JMP LD1
175 LDX XR RESTORE X REGISTER
176 JMP* PLDR RETURN
177 *
178 END O$PB