home *** CD-ROM | disk | FTP | other *** search
- ; I2PR-1 FOR IMP-244 11/18/85
- ;
- ; Adapts a Penril 1200-AD modem to IMP244. The alternate long-distance
- ; routines routines have not been patched to work with the Penril modem.
- ;
- ; - Frank Sauciunas
- ; Voice 504-261-4035
- ;
- BDOS EQU 05H
- BELL EQU 07H
- LF EQU 0AH
- CR EQU 0DH
- LIBLEN EQU 22H
- INBUFF EQU 80H
- TCHPUL EQU 010FH
- EXTCHR EQU 0114H
- ILPRT EQU 017DH
- INBUF EQU 0180H
- INMDM EQU 0186H
- SNDCHR EQU 018CH
- SNDSTR EQU 018FH
- TIMER EQU 0192H
- ALTDL1 EQU 0BCEH
- ALTDL2 EQU 0BE6H
- HEXSHOW EQU 0BFEH
- NUMBLIB EQU 0C00H
- TERML EQU 17F1H
- MDRCV EQU 1ED1H
- CRLF EQU 2DB7H
- STAT EQU 2DC4H
- KEYIN EQU 2DCFH
- TYPE EQU 2DD9H
- DECOUT EQU 2DFDH
- MOVE EQU 2EC0H
- KBDCHR EQU 2EFEH
- INLNCP EQU 32C8H
- MOVER EQU 3397H
- MENU EQU 3626H
- MDMSPD EQU 45ECH
- NEWLINE EQU 4727H
- SPACES EQU 4730H
- CLRTST EQU 476EH
- A$FLAG EQU 489AH
- B$FLAG EQU 48A4H
- CMDBUF EQU 48B9H
- C$FLAG EQU 48FAH
- STACK EQU 4AFEH
- BUFFER EQU 4E00H
- ;
- ;
- ORG 0400H
- ;
- ;
- ; DIAL to DIAL15 are untouched except for calls, jumps, etc.
- ;
- DIAL: XRA A
- STA FLAG2
- STA FLAG3
- STA B$FLAG
- LXI H,0000H
- SHLD A$FLAG
- LXI H,CMDBUF+1
- MOV A,M
- CPI 4
- JC DIAL2
- MOV C,A
- MVI B,0
- SUI 4
- MOV M,A
- INX H
- XCHG
- LXI H,CMDBUF+6
- CALL MOVER
- JMP DIAL4
- ;
- DIAL2: MVI C,12H
- LXI H,NUMBLIB
- LXI D,BUFFER
- CALL NEWLINE
- STAX D
- INX D
- ;
- DIAL3: MVI B,LIBLEN
- CALL MOVE
- CALL SPACES
- PUSH H
- PUSH D
- LXI D,(17*LIBLEN)
- DAD D
- POP D
- MVI B,LIBLEN
- CALL MOVE
- POP H
- CALL NEWLINE
- DCR C
- JNZ DIAL3
- MVI A,'$'
- STAX D
- CALL CLRTST
- MVI C,9
- LXI D,BUFFER
- CALL BDOS
- CALL ILPRT
- DB CR,LF,'Enter library code '
- DB 'or phone number,',CR,LF
- DB 'Hit RET to abort this function '
- DB 'now or',CR,LF,'CTL-X quits '
- DB 'while dialing or ringing: '
- DB 0
- LXI D,CMDBUF
- CALL INBUF
- ;
- DIAL4: LXI H,CMDBUF+1
- MOV A,M
- ORA A
- JZ DIALEXIT
- STA FLAG4
- LDA CMDBUF+3
- CPI '/'
- CZ LDCMDBF
- CPI ','
- CZ LDCMDBF1
- CALL SETSPD
- ;
- DIAL4A: XRA A
- STA FLAG1
- LDA FLAG3
- ORA A
- JNZ GOT$NO
- LDA FLAG4
- STA CMDBUF+1
- CPI 2
- JNC DIAL12
- LXI H,CMDBUF+2
- ;
- DIAL5: MOV A,M
- MVI B,'A'
- MVI E,0
- MVI C,1AH
- ;
- DIAL6: CMP B
- JZ DIAL8
- INR B
- INR E
- DCR C
- JNZ DIAL6
- MVI B,'0'
- MVI E,1AH
- MVI C,0AH
- ;
- DIAL7: CMP B
- JZ DIAL8
- INR B
- INR E
- DCR C
- JNZ DIAL7
- JMP DIALBAD
- ;
- DIAL8: LXI H,NUMBLIB
- LXI B,LIBLEN
- MOV A,E
- ORA A
- JZ DIAL10
- ;
- DIAL9: MOV A,M
- ORA A
- JZ DIALBAD
- DAD B
- DCR E
- JNZ DIAL9
- ;
- DIAL10: MVI B,LIBLEN
- LXI D,CMDBUF+1
- XCHG
- MOV M,B
- XCHG
- INX D
- CALL MOVE
- LXI H,CMDBUF+1
- MOV E,M
- INX H
- ;
- DIAL11: MOV A,M
- CALL TYPE
- INX H
- DCR E
- JZ DIALEXIT
- CPI '.'
- JZ DIAL13
- JMP DIAL11
- ;
- DIAL12: LXI H,CMDBUF+1
- MOV A,M
- MOV E,M
- INX H
- ;
- DIAL13: PUSH H
- CALL WAKEUP
- POP H
- ;
- DIAL13A:MOV A,M
- ORA A
- JZ DIALBAD
- CALL DIALA
- CALL STAT
- JZ DIAL15
- CALL KEYIN
- CPI 18H
- JZ DIAL14
- MOV B,A
- LDA EXTCHR
- CMP B
- JNZ DIAL15
- ;
- DIAL14: MVI B,CR
- CALL SNDCHR
- JMP DIALEXIT
- ;.....
- ;
- ;
- ;***********************************
- ;
- DIAL15: INX H
- DCR E
- JNZ DIAL13A
- MVI B,CR
- CALL SNDCHR
- CALL INMDM
- CALL ILPRT
- DB ' - try #',0
- LHLD A$FLAG
- INX H
- SHLD A$FLAG
- CALL DECOUT
- MVI A,' '
- CALL TYPE
- JMP SMRESULT
- ;.....
- ;
- ;
- BSYANSR:LXI SP,STACK
- XRA A
- STA FLAG5
- LDA B$FLAG
- ORA A
- JNZ DIALAGN2
- CALL ILPRT
- DB CR,LF,CR,LF,' Redial? '
- DB '(C/Y/N): ',BELL,0
- CALL KBDCHR
- PUSH PSW
- CALL CRLF
- POP PSW
- CPI 'Y'
- JZ DIALAGN2
- CPI 'C'
- JNZ DIALEXT1
- MVI A,1
- STA B$FLAG
- ;
- DIALAGN2:
- CALL CRLF
- JMP DIAL4A
- ;
- DIALA: CALL TYPE
- MOV B,A
- CALL DIALAD
- MOV A,B
- ;
- ;
- ; Penril accepts the following codes withing the phone numbers.
- ;
- ; (R)otary must preceed the number
- ; (T)one is not needed if modem switches are set for tone
- ;
- DIALA1: CPI '*' ; Star
- JZ DIALA2
- CPI '#' ; Pound
- JZ DIALA2
- CPI '-' ; Dash
- JZ DIALA2
- CPI 'P' ; Pause 2 sec
- JZ DIALA2
- CPI 'R' ; Rotory
- JZ DIALA2
- CPI 'T' ; Tone
- JZ DIALA2
- CPI 'W' ; Wait for
- JZ DIALA2 ; Dial tone.
- CPI '0'
- RC ; Zero
- CPI ':' ; Through
- RNC ; Nine ok.
- ;
- DIALA2: CALL SNDCHR
- JMP INMDM ; Eat char.
- ;.....
- ;
- ;
- DIALBAD:CALL ILPRT
- DB CR,LF,CR,LF,'++ Bad library '
- DB 'number called ++',CR,LF
- DB 0
- ;
- DIALEXIT:
- CALL CRLF
- ;
- DIALEXT1:
- LXI SP,STACK
- CALL MDQUIT
- XRA A
- STA B$FLAG
- JMP MENU
- ;.....
- ;
- ;
- ; Alternate dial has not been modified to work with a Penril
- ;
- DIALAD: LDA TCHPUL
- CPI 'T'
- RNZ
- MOV A,B
- CPI '<'
- JNZ DIALAD1
- PUSH H
- LXI H,ALTDL1
- JMP DIALAD2
- ;
- DIALAD1:CPI '>'
- RNZ
- PUSH H
- LXI H,ALTDL2
- ;
- DIALAD2:MOV A,M
- CPI '$'
- JZ DIALAD3
- CALL TYPE
- MOV B,A
- CALL DIALA1
- INX H
- CALL CKSTAT
- JMP DIALAD2
- ;
- DIALAD3:MVI A,' '
- MOV B,A
- CALL TYPE
- POP H
- RET
- ;
- CKSTAT: CALL STAT
- RZ
- CALL KEYIN
- CPI 18H
- JZ CKSTAT1
- MOV B,A
- LDA EXTCHR
- CMP B
- MOV A,B
- JZ CKSTAT1
- CPI 0BH
- RNZ
- MVI B,CR
- CALL SNDCHR
- MVI B,0AH
- CALL TIMER
- POP H
- JMP BSYANSR
- ;
- CKSTAT1:POP H
- JMP DIALEXIT
- ;
- INMODEM:CALL INMDM
- JNC INMODEM
- RET
- ;
- CLRBUF: MVI B,50H
- LXI H,INBUFF
- ;
- CLRBLP: MVI M,' '
- INX H
- DCR B
- JNZ CLRBLP
- RET
- ;
- SETSPD: CALL MDMSPD
- CALL CRLF
- RET
- ;
- ;
- ; This routine wakes up the Penril
- ;
- WAKEUP: MVI B,CR ; Wakeup
- CALL SNDCHR ; Modem.
- ;
- ;
- ; Wait for Penril to send out its logo
- ;
- WAKE1: CALL INMDM
- JC WAKE1
- CPI '>' ; Prompt
- JNZ WAKE1
- ;
- ;
- ; Delay and send 'K' to start keyboard phone number entry
- ;
- MVI B,02
- CALL TIMER
- MVI B,'K' ; Kybd
- CALL SNDCHR
- ;
- ;
- ; Wait for Penril to send number mesage
- ;
- ; ---> NO:_ <---
- ;
- WAKE2: CALL INMDM
- JC WAKE2
- CPI ' ' ; No:_
- JNZ WAKE2
- MVI B,02
- JMP TIMER
- ;
- MDQUIT: MVI B,CR ; Kill
- CALL SNDCHR ; Modem
- MVI B,10 ; 1 sec.
- CALL TIMER
- RET
- ;
- ;
- ; The real fun starts here
- ;
- SMRESULT:
- CALL CLRBUF
- LXI H,INBUFF
- PUSH H
- LXI D,0400H ; Loop
- ;
- RESULT1:CALL MDRCV
- JZ RESULT2
- CALL CKSTAT
- CALL INMDM
- JNC PRTEST
- DCX D
- MOV A,D
- ORA E
- JNZ RESULT1
- POP H
- JMP ABORTIT
- ;
- RESULT2:CALL INMDM
- JC TSTMDM
- ;
- PRTEST: ANI 7FH
- CPI CR ; Ignore CR
- JZ RESULT2
- CPI LF ; Ignore LF
- JZ RESULT2
- POP H
- MOV M,A
- INX H
- PUSH H
- JMP RESULT2
- ;
- ;
- ; The following are messages that the Penril modem sends to the system
- ;
- TSTMDM: POP H ; Penril
- LXI D,INBUFF ; Replies
- CALL INLNCP
- DB 'OK',0 ; Answered
- JNC ANSWER
- CALL INLNCP
- DB 'BUSY',0 ; Busy
- JNC PHBUSY
- CALL INLNCP
- DB 'DIALING: ',0 ; Dialing
- JNC DIALIT
- CALL INLNCP
- DB 'NO CD',0 ; No carrier
- JNC NOCRD
- CALL INLNCP
- DB 'NO ANSWER',0 ; No answer
- JNC NOANSWR
- CALL INLNCP
- DB 'NO RING',0 ; No ring
- JNC ABORTIT
- CALL INLNCP
- DB 'ABORT',0 ; Abort
- JNC ABORTIT
- CALL INLNCP
- DB 'ERROR',0 ; Error
- JNC ABORTIT
- CALL INLNCP
- DB 'NO DIAL TONE',0
- JNC NODIALT
- JMP ABORTIT
- ;
- ;
- ; replies to Penril messages
- ;
- NOANSWR:CALL ILPRT
- DB 'no answer! ',0
- JMP BSYANSR
- ;
- NOCRD: CALL ILPRT
- DB 'no carrier detected! ',0
- JNC ABORTIT
- ;
- PHBUSY: CALL ILPRT
- DB 'busy! ',0
- LDA HEXSHOW
- MOV B,A
- CALL TIMER
- JMP BSYANSR
- ;
- ;
- ; This routine eats the numbers that the Penril sends out when it is
- ; doing the dialing. ---> DIALING: 15045551212 <--- It also puts de-
- ; lays between numbers and times out when no more numbers are being sent
- ; from the Penril.
- ;
- DIALIT: CALL ILPRT
- DB 'dialing, ',0
- LXI D,0C000H ; Timer
- ;
- EATWT: CALL MDRCV ; Wait for
- JZ EATIT ; Numbers
- DCX D
- MOV A,D
- ORA E
- JNZ EATWT
- JMP SMRESULT ; Timeout
- ;
- EATIT: CALL INMDM ; Eat numbers
- LXI D,0C000H ; Reset timer
- JMP EATWT
- ;
- ANSWER: CALL ILPRT
- DB CR,LF,CR,LF
- DB '<<<<-- CONNECTED -->>>>'
- DB BELL,0
- JMP TERML
- ;
- ABORTIT:CALL ILPRT
- DB ' <ABORT>',BELL,0
- LDA HEXSHOW
- MOV B,A
- CALL TIMER
- JMP BSYANSR
- ;
- NODIALT:CALL ILPRT
- DB 'no dial tone! ',0
- JMP ABORTIT
- ;
- LDCMDBF:STA FLAG2
- ;
- LDCMDBF1:
- MVI A,0FFH
- STA FLAG3
- STA B$FLAG
- MVI B,40H
- LXI H,CMDBUF+1
- LXI D,C$FLAG
- JMP MOVE
- ;
- GOT$NO: LDA FLAG3
- INR A
- INR A
- STA FLAG3
- MOV C,A
- MVI B,0
- LDA C$FLAG
- CMP C
- JNC GOT$NO1
- MVI A,1
- MOV C,A
- STA FLAG3
- ;
- GOT$NO1:LXI H,C$FLAG
- DAD B
- JMP DIAL5
- ;.....
- ;
- ;
- FLAG1: DB 0
- FLAG2: DB 0
- FLAG3: DB 0
- FLAG4: DB 0
- FLAG5: DB 0
- ;
- ;
- END