home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
RCPM
/
BYEXCLBK.MOD
< prev
next >
Wrap
Text File
|
2000-06-30
|
6KB
|
223 lines
BYE
CALLBACK
MODIFICATION
------------
With this modification to the B5IM code in BYE5 or
equivalent B3IM code in recent versions of BYE3, your modem only
answers the second of two calls placed less than a minute apart,
and only then if the telephone rang less than three times on the
first call. This makes your computer accessable on a line
ordinarily used for voice communication, without preventing use
of that line by incoming voice callers.
Changes are made to three areas of the BYE source code.
First, add the following equates in the OPTION CONFIGURATION
SECTION. Location is not critical; I added them after the four
equates under the heading "The next 4 equates are only used if
B5IM is YES" --
-----------------------------------------------------------------
;
; Equates for callback feature - B5IM must = YES
;
CALLBK EQU YES ; Yes activates callback code in B5IM
CLBKTM EQU 30 ; Seconds to wait for callback (<64)
CBMSGS EQU YES ; If YES, ring count, ready and time up
; messages are printed (also activated
; by PRGRSS)
;
;
;
-----------------------------------------------------------------
Next, go to the B5IM code.
DELETE the portion which looks like this:
IF B5IM
IMRING: CALL MDINST ; Character ready from modem?
RZ ; No
CALL MDINP ; Get the modem response code
ANI 7FH ; Strip parity
ENDIF ; B5IM
;
IF B5IM AND PRGRSS
CALL RCDISP ; Display RC for local sysop
PUSH PSW
LXI H,LFMSG
CALL PRINTL ; Turn up a line on crt
POP PSW
ENDIF ; PRGRSS
;
IF B5IM
CPI CR
RZ
CPI LF
RZ
CPI '2' ; Ring?
JNZ REDOIT ; No, something wrong, start over
ENDIF ; B5IM
and REPLACE that code with this:
-----------------------------------------------------------------
;*************************************************************
;
; B5IM MODIFIED FOR CALLBACK
;
;*************************************************************
IF B5IM
IMRING:
ENDIF
IF B5IM AND CALLBK
LHLD RDYFLG ; Does flag show
MOV A,H ; ready for callback?
ORA L
JZ RCT4 ; No...carry on
CALL KDELAY ; Yes...continue countdown
DCX H ;
MOV A,H ; and see if time up
ORA L
SHLD RDYFLG
JNZ RCT4 ; Time not up ... carry on
ENDIF ; B5IM AND CALLBACK
IF B5IM AND CALLBK AND (CBMSGS OR PRGRSS)
LXI H,RNMS4 ; Time up ... print message
CALL PRINTL
ENDIF ; B5IM, etc.
IF B5IM AND CALLBK
RCT4:
ENDIF ; B5IM AND CALLBK
IF B5IM
CALL MDINST ; Character ready from modem?
RZ ; No
CALL MDINP ; Get the modem response code
ANI 7FH ; Strip parity
ENDIF ; B5IM
;
IF B5IM AND PRGRSS
CALL RCDISP ; Display RC for local sysop
PUSH PSW
LXI H,LFMSG
CALL PRINTL ; Turn up a line on crt
POP PSW
ENDIF ; PRGRSS
;
IF B5IM
CPI CR
RZ
CPI LF
RZ
CPI '2' ; Ring?
JNZ REDOIT ; No, something wrong, start over
ENDIF ; B5IM
;
IF B5IM AND CALLBK
LHLD RDYFLG ; Ready for callback?
MOV A,H
ORA L
LXI H,0 ; (Reset counter regardless)
SHLD RDYFLG
JNZ IMRIN1 ; Yes ... then answer 'phone
RNGCNT: XRA A ; Reset ringcounter and
STA RNG
ENDIF
IF B5IM AND CALLBK AND (CBMSGS OR PRGRSS)
MVI A,' '
STA RNMS2 ; Ascii representation buffer
STA RNMS2+1
STA RNMS2+2
ENDIF ; B5IM, etc.
IF B5IM AND CALLBK
RCT0: LDA RNG ; Update ringcount
INR A
STA RNG
ENDIF
IF B5IM AND CALLBK AND (CBMSGS OR PRGRSS)
LXI H,RNMS2 ; Put in ascii form
CALL DEC8
LXI H,RNMS1 ; And print # in message
CALL PRINTL
ENDIF
IF B5IM AND CALLBK
LXI B,8000 ; Set ringstoptest timer
RCT1: CALL MDINST ; Anything from modem?
JZ RCT2 ; No
CALL MDINP ; Yes ... get it
ANI 07FH
CPI '2' ; Ring?
JZ RCT0 ; Yes ... update ringcount
; and reset counter
RCT2: CALL KDELAY ; 8 seconds since last ring?
DCX B
MOV A,C
ORA B
JNZ RCT1 ; No ... keep checking
ENDIF
IF B5IM AND CALLBK AND (CBMSGS OR PRGRSS)
LXI H,LFMSG
CALL PRINTL
ENDIF
IF B5IM AND CALLBK
LDA RNG ; Yes ... more than 2 rings?
CPI 3
JNC RCT3 ; Yes ... Ignore that call
ENDIF
IF B5IM AND CALLBK AND (CBMSGS OR PRGRSS)
LXI H,RNMS3 ; Its a callback signal, so
CALL PRINTL ; print ready message and
ENDIF
IF B5IM AND CALLBK
; Set ready flag/timer
LXI H,CLBKTM*1000
SHLD RDYFLG
RCT3: XRA A ; Set zero flag and return
RET ; as though no call
ENDIF ; B5IM AND CALLBK
-----------------------------------------------------------------
Finally, go to the messages section near the end of the
code, and place the following code after the end of the B5IM
command strings section --
-----------------------------------------------------------------
;
;
;
IF B5IM AND CALLBK
RNG: DB 0
RDYFLG: DB 0,0
ENDIF
IF B5IM AND CALLBK AND (CBMSGS OR PRGRSS)
RNMS1: DB CR,'Ring #'
RNMS2: DB ' ',0
RNMS3: DB 'Ready for callback...',CR,LF,0
RNMS4: DB 'No callback...time up!',CR,LF,0
ENDIF ; B5IM AND CALLBK, etc.
;
;
;
-----------------------------------------------------------------
Notes:
1) For use with BYE3, proceed as indicated but change "B5IM"
to "B3IM" wherever it appears in the modification.
2) The modified program starts looking for the callback ring
seven or eight seconds after the last ring of a one- or two-ring
call. It answers the callback after the first ring. It stops
looking if no callback occurs within CLBKTM seconds (actually
about 1.18 times CLBKTM if MHZ = 4). CLBKTM should not be
greater than 64.
O. Gray
Toronto, Ont
Sept. 12, 1985