upcase macro char local nocvt ifb upcase al else cmp char,'a' jb nocvt cmp char,'z' ja nocvt sub char,32 nocvt: endif endm page 66,132 cseg segment byte public 'CODE' assume cs:cseg,ds:cseg,es:cseg org 100h start proc near jmp start1 db 13,'DTR (c)1985 by Donavon Kuhn and Jon Niedfeldt',13,10,26 start1: mov bl,0 ;default com port (COM1:) mov si,80h start2: inc si mov al,[si] ;space off leading spaces cmp al,' ' jz start2 cmp al,'?' jz errexit upcase ;using UPCASE without a parameter cmp al,'C' ;(defaults to AL) jnz nocom mov cl,[si][1] upcase cl ;using UPCASE using another register cmp cl,'O' jnz nocom mov al,[si][2] upcase al ;using UPCASE with AL as the parm cmp al,'M' jnz nocom cmp byte ptr [si][4],':' jz check_port errexit: lea dx,errmsg errexit1: mov ah,9 int 21h mov ax,4c01h ;return ERRORLEVEL of 1 int 21h check_port: mov al,[si][3] ;get the com number sub al,'1' ;convert to binary cmp al,3 ;greater than com4? ja errexit add si,5 mov bl,al nocom: xor bh,bh shl bl,1 mov ax,40h mov ds,ax mov ax,ds:[bx] push cs pop ds cmp ax,0 jnz comok lea dx,ncstr jmp errexit1 comok: mov dx,ax add dx,4 in al,dx dec si start3: inc si mov al,[si] ;space off leading spaces cmp al,' ' ;after COMx: jz start3 mov al,[si] upcase cmp al,'O' jnz errexit mov al,[si][1] upcase cmp al,'N' jnz noton or al,3 ;set dtr bit out dx,al lea dx,onstr exitok: mov ah,9 int 21h mov ax,4c00h int 21h noton: cmp al,'F' jnz notoff and al,0fch out dx,al lea dx,offstr jmp exitok notoff: jmp errexit errmsg db 'Usage: DTR [COM1:|COM2:|COM3:|COM4:] ON|OFF',13,10,'$' onstr db 'DTR is now ON',13,10,'$' offstr db 'DTR is now OFF',13,10,'$' ncstr db 'COM port not found',13,10,'$' start endp cseg ends end start