summaryrefslogtreecommitdiff
path: root/v4.0/src/DOS/CPMIO2.ASM
diff options
context:
space:
mode:
Diffstat (limited to 'v4.0/src/DOS/CPMIO2.ASM')
-rw-r--r--v4.0/src/DOS/CPMIO2.ASM354
1 files changed, 354 insertions, 0 deletions
diff --git a/v4.0/src/DOS/CPMIO2.ASM b/v4.0/src/DOS/CPMIO2.ASM
new file mode 100644
index 0000000..2b31689
--- /dev/null
+++ b/v4.0/src/DOS/CPMIO2.ASM
@@ -0,0 +1,354 @@
1; SCCSID = @(#)cpmio2.asm 1.1 85/04/11
2TITLE CPMIO2 - device IO for MSDOS
3NAME CPMIO2
4
5.xlist
6.xcref
7include dosseg.asm
8.cref
9.list
10
11;
12; Old style CP/M 1-12 system calls to talk to reserved devices
13;
14; $Std_Con_Input
15; $Std_Con_Output
16; OUTT
17; TAB
18; BUFOUT
19; $Std_Aux_Input
20; $Std_Aux_Output
21; $Std_Printer_Output
22; $Std_Con_Input_Status
23; $Std_Con_Input_Flush
24;
25; Revision History:
26;
27; AN000 version 4.00 - Jan. 1988
28;
29
30CODE SEGMENT BYTE PUBLIC 'CODE'
31 ASSUME SS:DOSGROUP,CS:DOSGROUP
32
33.xcref
34.xlist
35INCLUDE DOSSYM.INC
36INCLUDE DEVSYM.INC
37.list
38.cref
39
40; The following routines form the console I/O group (funcs 1,2,6,7,8,9,10,11).
41; They assume ES and DS NOTHING, while not strictly correct, this forces data
42; references to be SS or CS relative which is desired.
43
44 i_need CARPOS,BYTE
45 i_need CHARCO,BYTE
46 i_need PFLAG,BYTE
47 i_need CurrentPDB,WORD ;AN000;
48 i_need InterCon,BYTE ;AN000;
49 i_need SaveCurFlg,BYTE ;AN000;
50
51
52Break
53
54; Inputs:
55; None
56; Function:
57; Input character from console, echo
58; Returns:
59; AL = character
60
61 procedure $STD_CON_INPUT,NEAR ;System call 1
62ASSUME DS:NOTHING,ES:NOTHING
63
64 IF DBCS ;AN000;
65 push word ptr [InterCon] ;AN000;
66 mov [InterCon],01H ;AN000;
67 invoke INTER_CON_INPUT_NO_ECHO ;AN000;
68 pop word ptr [InterCon] ;AN000;
69 pushf ;AN000;
70 push AX ;AN000;
71 mov [SaveCurFlg],0 ;AN000;
72 jnz sj0 ;AN000;
73 mov [SaveCurFlg],1 ;AN000;
74sj0: ;AN000;
75 invoke OUTT ;AN000;
76 mov [SaveCurFLg],0 ;AN000;
77 pop AX ;AN000;
78 popf ;AN000;
79 jz $STD_CON_INPUT ;AN000;
80 ELSE ;AN000;
81 invoke $STD_CON_INPUT_NO_ECHO
82 PUSH AX
83 invoke OUTT
84 POP AX
85 ENDIF ;AN000;
86 return
87EndProc $STD_CON_INPUT
88
89Break
90
91; Inputs:
92; DL = character
93; Function:
94; Output character to console
95; Returns:
96; None
97
98 procedure $STD_CON_OUTPUT,NEAR ;System call 2
99 public OUTCHA ;AN000;
100ASSUME DS:NOTHING,ES:NOTHING
101
102 MOV AL,DL
103
104 entry OUTT
105 CMP AL,20H
106 JB CTRLOUT
107 CMP AL,c_DEL
108 JZ OUTCH
109OUTCHA: ;AN000;
110 INC BYTE PTR [CARPOS]
111OUTCH:
112 PUSH DS
113 PUSH SI
114 INC BYTE PTR [CHARCO] ;invoke statchk...
115 AND BYTE PTR [CHARCO],00111111B ;AN000; every 64th char
116 JNZ OUTSKIP
117 PUSH AX
118 invoke STATCHK
119 POP AX
120OUTSKIP:
121 invoke RAWOUT ;output the character
122 POP SI
123 POP DS
124 IF DBCS ;AN000;
125 TEST [SaveCurFlg],01H ;AN000;print but no cursor adv? 2/13/KK
126 retnz ;AN000;if so then do not send to prt2/13/KK
127 ENDIF
128 TEST BYTE PTR [PFLAG],-1
129 retz
130 PUSH BX
131 PUSH DS
132 PUSH SI
133 MOV BX,1
134 invoke GET_IO_SFT
135 JC TRIPOPJ
136 MOV BX,[SI.sf_flags]
137 TEST BX,sf_isnet ; output to NET?
138 JNZ TRIPOPJ ; if so, no echo
139 TEST BX,devid_device ; output to file?
140 JZ TRIPOPJ ; if so, no echo
141 MOV BX,4
142 invoke GET_IO_SFT
143 JC TRIPOPJ
144 TEST [SI.sf_flags],sf_net_spool ; StdPrn redirected?
145 JZ LISSTRT2J ; No, OK to echo
146 MOV BYTE PTR [PFLAG],0 ; If a spool, NEVER echo
147TRIPOPJ:
148 JMP TRIPOP
149
150LISSTRT2J:
151 JMP LISSTRT2
152
153CTRLOUT:
154 CMP AL,c_CR
155 JZ ZERPOS
156 CMP AL,c_BS
157 JZ BACKPOS
158 CMP AL,c_HT
159 JNZ OUTCH
160 MOV AL,[CARPOS]
161 OR AL,0F8H
162 NEG AL
163
164 entry TAB
165
166 PUSH CX
167 MOV CL,AL
168 MOV CH,0
169 JCXZ POPTAB
170TABLP:
171 MOV AL," "
172 invoke OUTT
173 LOOP TABLP
174POPTAB:
175 POP CX
176 return
177
178ZERPOS:
179 MOV BYTE PTR [CARPOS],0
180 JMP OUTCH
181OUTJ: JMP OUTT
182
183BACKPOS:
184 DEC BYTE PTR [CARPOS]
185 JMP OUTCH
186
187 entry BUFOUT
188 CMP AL," "
189 JAE OUTJ ;Normal char
190 CMP AL,9
191 JZ OUTJ ;OUT knows how to expand tabs
192
193;DOS 3.3 7/14/86
194 CMP AL,"U"-"@" ; turn ^U to section symbol
195 JZ CTRLU
196 CMP AL,"T"-"@" ; turn ^T to paragraph symbol
197 JZ CTRLU
198NOT_CTRLU:
199;DOS 3.3 7/14/86
200
201 PUSH AX
202 MOV AL,"^"
203 invoke OUTT ;Print '^' before control chars
204 POP AX
205 OR AL,40H ;Turn it into Upper case mate
206CTRLU:
207 invoke OUTT
208 return
209EndProc $STD_CON_OUTPUT
210
211Break
212
213; Inputs:
214; None
215; Function:
216; Returns character from aux input
217; Returns:
218; Character in AL
219
220 procedure $STD_AUX_INPUT,NEAR ;System call 3
221ASSUME DS:NOTHING,ES:NOTHING
222
223 invoke STATCHK
224 MOV BX,3
225 invoke GET_IO_SFT
226 retc
227 JMP SHORT TAISTRT
228AUXILP:
229 invoke SPOOLINT
230TAISTRT:
231 MOV AH,1
232 invoke IOFUNC
233 JZ AUXILP
234 XOR AH,AH
235 invoke IOFUNC
236 return
237EndProc $STD_AUX_INPUT
238
239Break
240
241; Inputs:
242; Character in DL
243; Function:
244; Output character to aux output
245; Returns:
246; Nothing
247
248 procedure $STD_AUX_OUTPUT,NEAR ;System call 4
249ASSUME DS:NOTHING,ES:NOTHING
250
251 PUSH BX
252 MOV BX,3
253 JMP SHORT SENDOUT
254
255EndProc $STD_AUX_OUTPUT
256
257Break
258
259; Inputs:
260; DL = Character
261; Function:
262; Output the character to the list device
263; Returns:
264; None
265
266 procedure $STD_PRINTER_OUTPUT,NEAR ;System call 5
267ASSUME DS:NOTHING,ES:NOTHING
268
269 PUSH BX
270 MOV BX,4
271
272SENDOUT:
273 MOV AL,DL
274 PUSH AX
275 invoke STATCHK
276 POP AX
277 PUSH DS
278 PUSH SI
279LISSTRT2:
280 invoke RAWOUT2
281TRIPOP:
282 POP SI
283 POP DS
284 POP BX
285 return
286EndProc $STD_PRINTER_OUTPUT
287
288Break
289
290; Inputs:
291; None
292; Function:
293; Check console input status
294; Returns:
295; AL = -1 character available, = 0 no character
296
297 procedure $STD_CON_INPUT_STATUS,NEAR ;System call 11
298ASSUME DS:NOTHING,ES:NOTHING
299
300 invoke STATCHK
301 MOV AL,0 ; no xor!!
302 retz
303 OR AL,-1
304 return
305EndProc $STD_CON_INPUT_STATUS
306
307Break
308
309; Inputs:
310; AL = DOS function to be called after flush (1,6,7,8,10)
311; Function:
312; Flush console input buffer and perform call in AL
313; Returns:
314; Whatever call in AL returns or AL=0 if AL was not 1,6,7,8 or 10
315
316 procedure $STD_CON_INPUT_FLUSH,NEAR ;System call 12
317ASSUME DS:NOTHING,ES:NOTHING
318
319 PUSH AX
320 PUSH DX
321 XOR BX,BX
322 invoke GET_IO_SFT
323 JC BADJFNCON
324 MOV AH,4
325 invoke IOFUNC
326
327BADJFNCON:
328 POP DX
329 POP AX
330 MOV AH,AL
331 CMP AL,1
332 JZ REDISPJ
333 CMP AL,6
334 JZ REDISPJ
335 CMP AL,7
336 JZ REDISPJ
337 CMP AL,8
338 JZ REDISPJ
339 CMP AL,10
340 JZ REDISPJ
341 MOV AL,0
342 return
343
344REDISPJ:
345 IF DBCS ;AN000;
346 mov ds,[CurrentPDB] ;AN000;
347 ;AN000; set DS same as one from COMMAND entry
348 ENDIF
349 CLI
350 transfer REDISP
351EndProc $STD_CON_INPUT_FLUSH
352
353CODE ENDS
354 END