Category : Assembly Language Source Code
Archive   : BLUEBOOK.ZIP
Filename : STDIO.ASM

 
Output of file : STDIO.ASM contained in archive : BLUEBOOK.ZIP
COMMENT ~
STDIO.ASM -- I/O PROCEDURES

From `BLUEBOOK of ASSEMBLY ROUTINES for the IBM PC & XT'
by Christopher L. Morgan
Copyright (C) 1984 by The Waite Group, Inc.

Function: These routines perform fundamental input/output functions for the
keyboard, screen, and communication lines. The standard I/O routines
can be redirected. The communications routines alleviate some of the
problems encountered in DOS and BIOS serial communications handling.

See STDIO.DOC for complete information on the routines.
_____________________________________________________________________________

Contains:
---------
COM_INCK -- Communications line check
COM_INIT -- Initialize communications line
COM_OFF -- Communications line off
COM_ON -- Communications line on
COM_OUT -- Communications line output
STD_CRLF -- Standard output with carriage return & linefeed
STD_IN -- Standard input with echo
STD_INCK -- Standard input check
STD_INNE -- Standard input with no echo
STD_MSGOUT -- Standard output of a message
STD_OUT -- Standard output
STD_OUTDR -- Direct standard output
STD_SPACE -- Standard output of a space
_____________________________________________________________________________
~
CODES SEGMENT
PUBLIC STD_IN,STD_INNE,STD_INCK,STD_OUT,STD_OUTDR,STD_CRLF,STD_SPACE
PUBLIC STD_MSGOUT,COM_INIT,COM_INCK,COM_OUT,COM_ON,COM_OFF
ASSUME CS:CODES
;____________________________ I/O ROUTINES ___________________________________
;Routine for standard input with echo
;
STD_IN PROC FAR
MOV AH,1 ;Standard input
INT 21H ; DOS call
RET ;Return
STD_IN ENDP
;------------------------------------------------------------------------------
;Routine for standard input with NO echo
;
STD_INNE PROC FAR
MOV AH,8 ;Standard input without echo
INT 21H ; DOS call
RET ;Return
STD_INNE ENDP
;------------------------------------------------------------------------------
;Routine for standard input check
STD_INCK PROC FAR
PUSH DX ;Save register
MOV DL,0FFH ;Direct console input
MOV AH,06H ;Check std direct input status
INT 21H ; DOS call
POP DX ;Restore register
RET ;Return
STD_INCK ENDP
;------------------------------------------------------------------------------
;Routine for standard output
;
STD_OUT PROC FAR
PUSH DX ;Save register
MOV DL,AL ;In DL for DOS call
MOV AH,2 ;Standard output
INT 21H ; DOS call
POP DX ;Restore register
RET ;Return
STD_OUT ENDP
;------------------------------------------------------------------------------
;Routine for direct standard output
;
STD_OUTDR PROC FAR
PUSH DX ;Save register
CMP AL,0FFH ;Check for the 1 case of input
JE STD_OUTDRXIT ;If so, go
MOV DL,AL ;Else in DL for DOS call
MOV AH,6 ;Direct console output
INT 21H ; DOS call
STD_OUTDRXIT:
POP DX ;Restore register
RET ;Return
STD_OUTDR ENDP
;------------------------------------------------------------------------------
;Routine to send a CRLF sequence to standard output
;
STD_CRLF PROC FAR
PUSH AX ;Save register
MOV AL,13 ;ASCII carriage return
CALL STD_OUT ;Send it out
MOV AL,10 ;ASCII line feed
CALL STD_OUT ;Send it out
POP AX ;Restore register
RET ;Return
STD_CRLF ENDP
;------------------------------------------------------------------------------
;Routine to send a space to standard output
;
STD_SPACE PROC FAR
PUSH AX ;Save register
MOV AL,32 ;ASCII space
CALL STD_OUT ;Send it out
POP AX ;Restore register
RET
STD_SPACE ENDP
;------------------------------------------------------------------------------
;Routine to send message to standard output
;
STD_MSGOUT PROC FAR
PUSH SI ;Save registers
PUSH AX
STD_MSGOUT1:
MOV AL,[SI] ;Get byte
INC SI ;Point to next byte
CMP AL,0 ;Done?
JE STD_MSGOUTXIT ;If so, go
CALL STD_OUT ;Else send it out
JMP STD_MSGOUT1 ;Loop for more
STD_MSGOUTXIT:
POP AX ;Restore registers
POP SI
RET ;Return
STD_MSGOUT ENDP
;------------------------------------------------------------------------------
;Routine to initialize a communications line
;
COM_INIT PROC FAR
MOV AH,0 ;Initialize
INT 14H ;RS232 BIOS call
RET ;Return
COM_INIT ENDP
;------------------------------------------------------------------------------
;Routine to check for input from a communications line
;
COM_INCK PROC FAR
PUSH DS ;Save registers
PUSH DX
PUSH SI
MOV SI,DX ;Look up address of com line
ADD SI,SI ;Double to index into table
MOV DX,40H ;Segment of system I/O table
MOV DS,DX ;Set data seg to this table
MOV DX,[SI] ;Now get it
ADD DX,5 ;Line status
IN AL,DX ;Get it
TEST AL,1 ;Receive buffer full?
JZ COM_INCKXIT ;If so, go
MOV DX,[SI] ;Data register
IN AL,DX ;Get it
COM_INCKXIT:
POP SI ;Restore registers
POP DX
POP DS
RET
COM_INCK ENDP
;------------------------------------------------------------------------------
;Routine to send output to a communications line
;
COM_OUT PROC FAR
MOV AH,1 ;Send it out
INT 14H ;RS232 BIOS call
RET ;Return
COM_OUT ENDP
;------------------------------------------------------------------------------
;Routine to turn on input from a communications line
;
COM_ON PROC FAR
PUSH DS ;Save registers
PUSH DX
PUSH SI
MOV SI,DX ;Look up address of com line
ADD SI,SI ;Double to index into table
MOV DX,40H ;Segment of system I/O table
MOV DS,DX ;Set data seg to this table
MOV DX,[SI] ;Now get it
ADD DX,4 ;Modem control register
MOV AL,3 ;Set DTR & RTS
OUT DX,AL ;Send out control byte
POP SI ;Restore registers
POP DX
POP DS
RET
COM_ON ENDP
;------------------------------------------------------------------------------
;Routine to turn off input from a communications line
;
COM_OFF PROC FAR
PUSH DS ;Save registers
PUSH DX
PUSH SI
MOV SI,DX ;Look up address of com line
ADD SI,SI ;Double to index into table
MOV DX,40H ;Segment of system I/O table
MOV DS,DX ;Set data seg to this table
MOV DX,[SI] ;Now get it
ADD DX,4 ;Modem control register
MOV AL,2 ;Clear DTR (line 20)
OUT DX,AL ;Send out control byte
POP SI ;Restore registers
POP DX
POP DS
RET
COM_OFF ENDP
;-----------------------------------------------------------------------------
CODES ENDS
;
END
;_____________________________________________________________________________
;>>>>> Physical EOF STDIO.ASM <<<<


  3 Responses to “Category : Assembly Language Source Code
Archive   : BLUEBOOK.ZIP
Filename : STDIO.ASM

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/