Add README.md
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rka / paroff / lpsv.pa
1 /MANNESMANN TP80 PRINTER HANDLER
2 /
3 LPVERSION="B&77
4
5 *0
6
7 -1
8 DEVICE LPSV;DEVICE LPT;1040;LPT&177;ZBLOCK 2
9
10 /LPT HANDLER FOR EITHER LP08 OR LS8E LINE PRINTER
11 /HANDLES TABS, PASSES EVERYTHING ELSE ON THE HARDWARE.
12
13 LSF=6661 /SKIP ON FLAG
14 LSR=6663 /SKIP ON ERROR
15 LLS=6666 /LOAD LPT BUFFER
16
17 *200
18
19 LPWDTH, -205 /-(WIDTH+1) [USE -121 FOR 80 COLUMNS]
20 LTERMC, 14 /4 FOR LV8
21 LVCCNV, -40 /0 IF PRINTER PRINTS LC
22 LPT, LPVERSION /NORMAL ENTRY POINT
23 CLA STL RAR
24 TAD I LPT / R/W BIT TO LINK
25 AND LP7700
26 CMA /TREAT 0 PG CNT AS 0 WD CNT
27 DCA LPTWC /SAVE -(DBLWD COUNT+1)
28 LPT214, RDF
29 TAD LPTCIF
30 DCA LPTXIT /SAVE CIF CDF RETRN FIELD
31 TAD I LPT
32 AND (70
33 TAD (CDF 0
34 DCA LPTCDF
35 ISZ LPT /PT TO BUFFER
36 TAD I LPT /GET BUFFER ADR
37 DCA LPTCA /SAVE BUFFER PTR
38 ISZ LPT /PT TO BLOCK #
39 TAD I LPT /GET IT
40 ISZ LPT /POINT TO ERROR RETURN
41 LPTCDF, HLT
42 SNL
43 JMP LPTERR /CAN'T READ FROM LPT
44 SNA CLA
45 TAD LPT214 /OUTPUT FORM FEED IF BLOCK 0
46 JMP LPTELP /JUMP INTO END OF LOOP
47 \f/UNPACKING LOOP - USES A SHIFT REGISTER METHOD TO GET THE
48 /THIRD CHARACTER IN EACH DOUBLEWORD.
49
50 LPTLP, STL /GUARD BIT OF SHIFT REGISTER
51 LPROTL, RTL
52 RTL
53 SPA /DO WE HAVE 8 BITS SHIFTED IN?
54 JMP LPTELP
55 DCA LPTCDF /SAVE SHIFT REGISTER
56 TAD I LPTCA
57 JMS LPTPCH /PRINT A CHAR
58 TAD I LPTCA
59 ISZ LPTCA /BUMP INPUT POINTER
60 LP7400, 7400 /PROTECT ISZ
61 AND LP7400
62 CLL RAL
63 TAD LPTCDF /SHIFT HIGH 4 BITS INTO
64 JMP LPROTL /SHIFT REGISTER
65
66 LPTELP, JMS LPTPCH /PRINT 3RD CHAR OF DOUBLEWORD
67 ISZ LPTWC
68 JMP LPTLP /GET 3 MORE CHARS
69 SKP
70 LPTCTZ, TAD LTERMC
71 JMS LPTPCH /OUTPUT FORM FEED IF ^Z SEEN (EOT OF LV8)
72 ISZ LPT /BUMP TO NORMAL RETURN
73 LPTXIT, HLT /RESTORE FIELDS
74 JMP I LPT /EXIT
75
76 LPTERR, STL CLA RAR /PUT 4000 IN AC
77 JMP LPTXIT /AND TAKE ERROR RETURN
78
79 LPTWC, 0
80 LPTCA, 0
81 \f/CHAR PRINT ROUTINE
82
83 LPTPCH, 0
84 AND (177
85 TAD (-175
86 SMA
87 JMP LPFLSH /FLUSH CODES 175-177
88 TAD (175-140
89 SMA
90 TAD LVCCNV /CONVERT LC TO UC IF DESIRED
91 TAD (140-33
92 SNA
93 TAD (11 /CHANGE ALTMODE TO $
94 IAC
95 SNA
96 JMP LPTCTZ /^Z - END OF FILE
97 TAD (32-11
98 SNA
99 JMP LPTTAB /TABS MUST BE SIMULATED
100 LPLFHK, TAD (11 /RESTORE CHAR
101 SZA /FLUSH NULLS
102 JMS LPCHAR
103 TAD LPLPTR /IF COL. CTR GET 0
104 SMA /WE HIT A CONTROL CHAR
105 TAD LPWDTH /OR EOL - SET TO FULL
106 DCA LPLPTR /WIDTH (NOT LPLPTR=1 !)
107 LP7700,
108 LPFLSH, SMA CLA /NEVER SKIPS
109 JMP I LPTPCH /RETURN
110
111 LPCHAR, 0 /LOW LEVEL PRINT ROUTINE
112 LLS /PUT CHAR IN LP BUFFER
113 AND (7770 /KLUDGE - CLEARS COLUMN COUNTER
114 TAD (7770 /ON CR, LF, VT, FF BUT ALSO
115 SNA CLA /ON ^H, ^N AND ^O; BIG DEAL
116 DCA LPLPTR /?SR RICHIE SAID 'LPCRFG'
117 LP7600, 7600 /CLEAR AC
118 LPCTCL, TAD LP7600
119 KRS
120 TAD (-7603 /CHECK FOR ^C FROM CONSOLE
121 SNA CLA
122 KSF /WITH FLAG UP
123 JMP .+3
124 LPTCIF, CDF CIF 0 /YES, RETURN TO OS/8
125 JMP I LP7600
126 LSF /NO
127 JMP LPCTCL /WAIT FOR FLAG
128 ISZ LPLPTR /CHECK LINE OVERFLOW
129 JMP I LPCHAR
130 TAD (15
131 JMS LPCHAR
132 CLA IAC
133 JMP LPLFHK
134 \fLPTTAB, TAD LPBLNK /GET PSEUDO BLANK
135 JMS LPCHAR /PRINT IT
136 TAD LPWDTH
137 CMA
138 TAD LPLPTR /GET # CHARS IN LINE
139 AND (7
140 LPBLNK, SZA CLA /LOOP 'TILL MULTIPLE OF 8
141 JMP LPTTAB
142 JMP I LPTPCH
143
144 LPLPTR, 0
145 $
146 \1a