-
Notifications
You must be signed in to change notification settings - Fork 93
Expand file tree
/
Copy pathqueue
More file actions
305 lines (305 loc) · 4.49 KB
/
queue
File metadata and controls
305 lines (305 loc) · 4.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
.PAG 'QUEUE'
INSZER LDA #'0 ;INSERT ZERO FORMAT
INSERT LDX QHEAD
JSR TERM
BCS IN42
CMP #255
BNE *+4
LDA #222
PHA
AND #$7F
CMP #$20
BCC IN10
LDA RVSFLG
BEQ IN05
LDA #RVSOFF
JSR IN42
LDA #0
STA RVSFLG
LDX QHEAD ;???????????????????
IN05 JMP IN40
IN10 LDA QSW
LSR A
PLA
BCS IN35
CMP #ENHNCE ;ENCHANCE ON?
BNE IN20
LDY CLINC ;TOO MANY ENHANCES ALREADY?
;
;*MAX ENHNCE=QSIZ-79PRINTABLECHRS-2FORCR-1RVSON-FUDGFACTOR
; FOR Q OVERFLOW SECTION
;
CPY #QSIZ-84 ;IGNORE IF ALREADY 79
BCC IN15
BCS IN32 ;BR ALWAYS
IN15 INC CLINC
IN20 CMP #UNENHN ;ENHANCE OFF?
BNE IN25
LDY #0 ;EACH CHAR COUNTS 1
STY CLINC
IN25 CMP #ON ;PAGING RESET?
BNE *+5
JMP IN95
CMP #OFF ;PAGING OFF?
BEQ IN26
;26
CMP #FF ;FORMFEED?
BNE IN42
JSR FORM
JMP IN99
;
IN26
LDA LC
BMI IN32
CLC
ADC #6
STA LC
JSR PAGEHD
LDA LP
CLC
ADC #$86
STA LC
IN32 JMP IN99
IN35 ORA #$40
PHA
LDA RVSFLG
BNE IN40
LDA #RVSON
STA RVSFLG
JSR IN42
IN40 PLA
IN42 LDX QHEAD
CMP #SKIP ;TURN SKIPS TO BLANKS
BNE *+4
LDA #BLANK
CMP #LF ;CONVERT LF'S TO CR'S
BNE *+4
LDA #CR
PHA
;
;*FIRST CHECK IF THE CHAR WILL FIT
; INTO THE Q. IF NOT, DUMP THE Q. THEN
; RESTORE THE STATE BEFORE THE DUMP.
; IF IT FITS INTO THE Q, THEN IF IT IS
; PRINTABLE, THEN CHECK IF IT FITS
; ONTO THE CURRENT LINE. IF NOT, AGAIN DUMP
; THE Q. IF SO, PUT IT INTO THE Q.
;
IN44 AND #$7F ;BYPASS FOLLOWING BUFFER OVERFLOW
CMP #CR ;IF THIS CHAR A TERMINATOR
BEQ IN65
;
;*DETECTED A NON-TERMINATOR. WILL
; THIS CHAR FIT INTO THE Q?
;
LDY CB ;CB=Q CHAR COUNT
INY
CPY #QSIZ-1 ;ALLOW ROOM FOR FORCED TERM.
BCC IN58 ;IF CC, NO Q OVERFLOW
;
;*PROCESS Q OVERFLOW
;
IN45 LDY PTRRDY
BNE IN45
LDA #CS ;FORCE Q DUMP
INC FTRMFG ;SHOW FORCED Q DUMP
JSR IN42 ;DO THE DUMP
;
IN46 LDY PTRRDY ;WAIT FOR PRINTER
BNE IN46
LDA #BLANK ;REFILL Q WITH AS MANY BLANKS AS
LDY CL ;THERE WERE PRINTABLE CHARS
IN48 BEQ IN50 ;IF NONE, BR.
DEY
STA Q,Y ;STUFF THE BLANK
BNE IN48 ;IF NOT THRU, BR.
;
;*RESET POINTERS MANUALLY & MODES MANUALLY
;
IN50 LDY CL
LDX #0 ;RESET QTAIL TO BEGINNING OF
STX QTAIL ;CURRENT PRINT LINE
LDA RVSFLG ;RESTORE REVERSE MODE
BEQ IN52 ;IF EQ, RVS WASN'T ON
LDA #RVSON ;RVS WAS ON. TURN IT BACK ON
STA Q,Y
INY
;
IN52 LDA #ENHNCE ;RESTORE ENHANCE MODE
LDX CLINC
IN54 BEQ IN56 ;EQ IF NO ENHANCE
STA Q,Y
INY
DEX ;SAME # OF ENHANCES YET?
BNE IN54 ;IF NE, NO
;
IN56 STY QHEAD ;UPDATE INSERT POINTER
STY CB ;AND # Q CHARS
JMP IN40 ;REINSERT PREVIOUS CHAR RECEIVED
;
;*NO Q OVERFLOW. NOW CHECK IF CHAR WILL
; FIT ON THE CURRENT PRINT LINE,
; IF THE CURRENT CHAR IS NOT A
; CONTROL CHAR.
;
IN58 PLA ;WE CAN NOW LOOK AT CHAR
PHA ;AND SEE OF CNTRL
AND #$7F
CMP #$20
BCC IN62 ;IF CC, IT'S CNTRL.
;
;*PRINTABLE CHARACTER DETECTED.
;
LDA CL
SEC
ADC CLINC ;.A=CL+1+CLINC
CMP CHRLIM ;FIT?
BCC IN60 ;IF CC, YES.
;
;*LINE OVERFLOW DETECTED. DUMP LINE.
;
IN59 LDY PTRRDY
BNE IN59
LDA #CR
LDY #$80 ;SHOW FORCED LINE DUMP.
STY FTRMFG
JSR IN42 ;DO THE DUMP
BCC IN40 ;REINSERT LAST CHAR RECEIVED.
;
;*CHAR RECEIVED OK. UPDATE LINE COUNT.
;
IN60 STA CL
IN62 INC CB
LDX QHEAD
IN65 LDA PTRRDY
BEQ IN70
CPX QTAIL ;ROOM IN QUEUE?
BEQ IN65
IN70 PLA
PHA
STA Q,X
CMP #'" ;QUOTE MODE?
BNE *+4
INC QSW
INX
CPX #QSIZ
BNE *+4
LDX #0
STX QHEAD
PLA
TAX
AND #$7F
CMP #CR
BNE IN99 ;IF NOT CR, RETURN
IN75 LDA PTRRDY
BNE IN75
STX LASTCR
LDX #0
LDA FTRMFG ;FORCED TERMINATION?
BMI IN78
BNE IN80
STX CLINC
STX QSW
IN78 STX CL
STX CB
IN80
LDA PORTB
AND #$04
BEQ IN808
JSR WAIT1
JSR WAIT1
LDA PORTB
AND #$04
BEQ IN808
IN803 LDA #$FF
STA PEM
JSR SP30
IN805 LDA PEM
BNE IN805
LDA PORTB
AND #$04
BNE IN803
LDA #$80
STA PTRRDY
JSR SSWEEP
IN809 LDA PTRRDY
BNE IN809
IN808 JSR RMV
TAY ;TEST RETURN FROM REMOVE
BEQ IN85 ;A CHARACTER?
BMI IN99 ;CARRIAGE STAND
LDA #1
STA NFEEDS
LDA #$80
STA FTRA
;START PAPER FEED
IN855 JSR PFSTRT
JMP IN90
IN85
;START PRINTING
JSR SPRINT
IN90
LDA LASTCR
CMP #CR+128
BEQ IN99
;
LDA LC ;ARE WE COUNTING LINES/PAGE
BEQ IN99
BMI IN100
;
DEC LC ;READY FOR PAGE?
BNE IN99 ;NO
LDA #6 ;DO 6 LINE FEEDS
STA LC
JSR PAGEHD
IN95 LDA LP ;INIT COUNT OF LINES/PAGE
STA LC
IN99 CLC
RTS
;
IN100
DEC LC
CMP #$81
BNE IN99
;
LDA LP
CLC
ADC #$86
STA LC
JMP IN99
;
RMV LDA ONE
ORA LMODE
BEQ RMV66
JSR HOME
LDA #0
STA ONE
RMV66 JSR TESBUF
LDA ONEDIR
BMI RMV1
BEQ RMV88
RMV1 LDA ONEDIR
AND #$80
STA ONEDIR
LDA CRPOS
ORA CRPOS+1
BEQ RMV88
JSR HOME
RMV88 JSR CALPOS
LDA QST
CMP QEND
BNE RETRY
LDA #$80
STA FLAG
BNE IN109
RETRY JSR LOGIC
LDA SEEKF
BEQ IN109
JSR SPRINT
IN101 LDA PTRRDY
BNE IN101
BEQ RETRY
IN109 JSR CHANC
JSR RMOVE
RTS
.END