windows-nt/Source/XPSP1/NT/base/mvdm/wow16/mmsystem/comm.asm

165 lines
3.7 KiB
NASM
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; COMM.ASM
;
; Copyright (c) Microsoft Corporation 1990. All rights reserved.
;
; This module contains code to write a string to the COM port
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
?PLM=1 ; pascal call convention
?WIN=0 ; Windows prolog/epilog code
.286
.xlist
include cmacros.inc
; include windows.inc
.list
WF_CPU286 equ 0002h
ifdef DEBUG
DEBUG_RETAIL equ 1
endif
; externA __0040h ; in KERNEL
; externA __B000h ; in KERNEL
externFP OutputDebugString ; in KERNEL
externFP wvsprintf ; in USER
SCREENWIDTH equ 80
SCREENHEIGHT equ 25
SCREENBYTES equ (SCREENWIDTH*2)
DEFATTR equ 07
LASTLINE equ ((SCREENHEIGHT-1)*SCREENBYTES)
BUFFER_SIZE = 256
;******************************************************************************
;
; SEGMENTS
;
;******************************************************************************
createSeg _TEXT, CodeRes, word, public, CODE
createSeg FIX, CodeFix, word, public, CODE
createSeg INTDS, DataFix, byte, public, DATA
;******************************************************************************
;
; FIXED DATA
;
;******************************************************************************
ifdef DEBUG_RETAIL
sBegin DataFix
globalW fDebugOutput, 0
sEnd DataFix
endif
;******************************************************************************
;
; NON FIXED DATA
;
;******************************************************************************
ifdef DEBUG
sBegin Data
globalW _fDebug, 0
sEnd Data
endif
ifdef DEBUG
sBegin CodeRes
assumes cs,CodeRes
assumes ds,nothing
assumes es,nothing
;******************************************************************************
;
; dprintf - output a MMSYSTEM debug string with formatting
;
; if the mmsystem global fDebug==0, no ouput will be sent
;
;==============================================================================
assumes ds,Data
assumes es,nothing
?PLM=0
cProc dprintf, <FAR, C, PUBLIC>, <>
ParmD szFormat
ParmW Args
LocalV szBuffer, BUFFER_SIZE
cBegin
cmp [_fDebug],0
jz dprintf_exit
lea ax,szBuffer
lea bx,Args
cCall wvsprintf, <ss,ax, szFormat, ss,bx>
lea ax,szBuffer
push ss
push ax
call far ptr OutputDebugStr
dprintf_exit:
cEnd
?PLM=1
sEnd
endif
;******************************************************************************
;
;******************************************************************************
sBegin CodeFix
assumes cs,CodeFix
assumes ds,nothing
assumes es,nothing
externW CodeFixDS ; in STACK.ASM
externW CodeFixWinFlags
ifdef DEBUG
;******************************************************************************
;
; dout - output a MMSYSTEM debug string
;
; if the mmsystem global fDebug==0, no ouput will be sent
;
;==============================================================================
assumes ds,Data
assumes es,nothing
public dout
dout proc far
cmp [_fDebug],0
jnz OutputDebugStr
retf 4
dout endp
endif; DEBUG
;
; in the retail version stub out the OutputDebugStr function
;
cProc OutputDebugStr, <FAR, PASCAL, PUBLIC>, <>
ParmD szString
cBegin
cCall OutputDebugString, <szString>
cEnd
sEnd
end