Category : Miscellaneous Language Source Code
Archive   : VDIGIT.ZIP
Filename : TSR.ASM

 
Output of file : TSR.ASM contained in archive : VDIGIT.ZIP
;**************************************************************
;* *
;* Digitized Voice Programmer's Toolkit *
;* ------------------------------------ *
;* *
;* Example memory-resident program *
;* *
;* Copyright (c) 1989, Farpoint Software *
;* *
;* *
;* This program monitors the state of the left shift key *
;* bit at absolute address 417h (bit 1). Upon detecting a *
;* zero to one transition of this bit, a voice announcement *
;* is initiated in the background. *
;* *
;**************************************************************

.286
.MODEL LARGE
DOSSEG

shift_mask equ 02h

extrn PVOICE_INIT:far
extrn PVOICE_START:far
extrn PVOICE_STATUS:far

;------------------------------------------------

;declare the VDATA segment here as well as in TSRVM.ASM
; so that the pointers to the beginning and end of the
; voice data can be properly accessed

VDATA segment public 'VDATA'

extrn _EVMSG:byte
extrn _EVMSGLEN:byte

VDATA ends

;------------------------------------------------

.STACK 256

;------------------------------------------------

.DATA

count dd 0
index dd 0
pspseg dw 0
prev db 0

;------------------------------------------------

.CODE
assume ds:DGROUP

old_1C dd 0 ;this is in the code segment so
; that we can jump to the original
; user timer tick routine without
; inconvenient messing with the stack

; - - - - - - - - - - - - - - - - - - - - - - - -

;this is the user timer tick interrupt routine

shift_check proc far

push ds ;save all registers
push es
pusha

mov ax,DGROUP
mov ds,ax

mov ax,40h
mov es,ax
mov al,es:[17h] ;address at which shift state is kept
and al,shift_mask
cmp al,prev ;has the bit changed?
je shift_check_exit
mov prev,al
cmp al,shift_mask ;is it now a 1?
jne shift_check_exit

;left shift has been pressed
;are we still playing message from last press?

push ds
push offset count
push ds
push offset index
call PVOICE_STATUS
or ax,ax
jnz shift_check_exit

;trigger voice message playback

push VDATA ;block address
push offset _EVMSG

mov ax,offset _EVMSGLEN
sub ax,offset _EVMSG
push 0 ;block length
push ax

push 0 ;file read flag (MUST be zero!)

push 0 ;handle

push 0 ;data length
push ax

push 0 ;start position
push 0

call PVOICE_START ;do it

shift_check_exit:
popa ;restore all registers
pop es
pop ds
jmp old_1C ;chain to previous holder of this vector

shift_check endp

; - - - - - - - - - - - - - - - - - - - - - - - -

;Begin execution here

start: mov ax,DGROUP ;set segment registers
mov ds,ax
mov ax,es
mov pspseg,ax ;save PSP segment for later

;install voice playback routines

call PVOICE_INIT

;get the original user timer tick vector

mov ax,351Ch
int 21h
mov word ptr old_1C,bx
mov word ptr old_1C+2,es

;set the vector to point to our routine

push ds
lea dx,shift_check
mov ax,cs
mov ds,ax
mov ax,251Ch
int 21h
pop ds

;terminate and stay resident

mov dx,ss ;DOSSEG forces stack to last segment
sub dx,pspseg ;compute amout of memory this occupies
mov ax,3100h ;terminate and stay resident
int 21h

end start


  3 Responses to “Category : Miscellaneous Language Source Code
Archive   : VDIGIT.ZIP
Filename : TSR.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/