home *** CD-ROM | disk | FTP | other *** search
- 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