home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol273 / i2pr-1.aqm / I2PR-1.ASM
Encoding:
Assembly Source File  |  1986-06-11  |  8.0 KB  |  593 lines

  1. ; I2PR-1 FOR IMP-244     11/18/85
  2. ;
  3. ; Adapts a Penril 1200-AD modem to IMP244.  The alternate long-distance
  4. ; routines routines have not been patched to work with the Penril modem.
  5. ;
  6. ;                    - Frank Sauciunas
  7. ;                      Voice 504-261-4035
  8. ;
  9. BDOS    EQU    05H
  10. BELL    EQU    07H
  11. LF    EQU    0AH
  12. CR    EQU    0DH
  13. LIBLEN    EQU    22H
  14. INBUFF    EQU    80H
  15. TCHPUL    EQU    010FH
  16. EXTCHR    EQU    0114H
  17. ILPRT    EQU    017DH
  18. INBUF    EQU    0180H
  19. INMDM    EQU    0186H
  20. SNDCHR    EQU    018CH
  21. SNDSTR    EQU    018FH
  22. TIMER    EQU    0192H
  23. ALTDL1    EQU    0BCEH
  24. ALTDL2    EQU    0BE6H
  25. HEXSHOW    EQU    0BFEH
  26. NUMBLIB    EQU    0C00H
  27. TERML    EQU    17F1H
  28. MDRCV    EQU    1ED1H
  29. CRLF    EQU    2DB7H
  30. STAT    EQU    2DC4H
  31. KEYIN    EQU    2DCFH
  32. TYPE    EQU    2DD9H
  33. DECOUT    EQU    2DFDH
  34. MOVE    EQU    2EC0H
  35. KBDCHR    EQU    2EFEH
  36. INLNCP    EQU    32C8H
  37. MOVER    EQU    3397H
  38. MENU    EQU    3626H
  39. MDMSPD    EQU    45ECH
  40. NEWLINE    EQU    4727H
  41. SPACES    EQU    4730H
  42. CLRTST    EQU    476EH
  43. A$FLAG    EQU    489AH
  44. B$FLAG    EQU    48A4H
  45. CMDBUF    EQU    48B9H
  46. C$FLAG    EQU    48FAH
  47. STACK    EQU    4AFEH
  48. BUFFER    EQU    4E00H
  49. ;
  50. ;
  51.     ORG    0400H
  52. ;
  53. ;
  54. ; DIAL to DIAL15 are untouched except for calls, jumps, etc.
  55. ;
  56. DIAL:    XRA    A
  57.     STA    FLAG2
  58.     STA    FLAG3
  59.     STA    B$FLAG
  60.     LXI    H,0000H
  61.     SHLD    A$FLAG
  62.     LXI    H,CMDBUF+1
  63.     MOV    A,M
  64.     CPI    4
  65.     JC    DIAL2
  66.     MOV    C,A
  67.     MVI    B,0
  68.     SUI    4
  69.     MOV    M,A
  70.     INX    H
  71.     XCHG
  72.     LXI    H,CMDBUF+6
  73.     CALL    MOVER
  74.     JMP    DIAL4
  75. ;
  76. DIAL2:    MVI    C,12H
  77.     LXI    H,NUMBLIB
  78.     LXI    D,BUFFER
  79.     CALL    NEWLINE
  80.     STAX    D
  81.     INX    D
  82. ;
  83. DIAL3:    MVI    B,LIBLEN
  84.     CALL    MOVE
  85.     CALL    SPACES
  86.     PUSH    H
  87.     PUSH    D
  88.     LXI    D,(17*LIBLEN)
  89.     DAD    D
  90.     POP    D
  91.     MVI    B,LIBLEN
  92.     CALL    MOVE
  93.     POP    H
  94.     CALL    NEWLINE
  95.     DCR    C
  96.     JNZ    DIAL3
  97.     MVI    A,'$'
  98.     STAX    D
  99.     CALL    CLRTST
  100.     MVI    C,9
  101.     LXI    D,BUFFER
  102.     CALL    BDOS
  103.     CALL    ILPRT
  104.     DB    CR,LF,'Enter library code '
  105.     DB    'or phone number,',CR,LF
  106.     DB    'Hit RET to abort this function '
  107.     DB    'now or',CR,LF,'CTL-X quits '
  108.     DB    'while dialing or ringing: '
  109.     DB    0
  110.     LXI    D,CMDBUF
  111.     CALL    INBUF
  112. ;
  113. DIAL4:    LXI    H,CMDBUF+1
  114.     MOV    A,M
  115.     ORA    A
  116.     JZ    DIALEXIT
  117.     STA    FLAG4
  118.     LDA    CMDBUF+3
  119.     CPI    '/'
  120.     CZ    LDCMDBF
  121.     CPI    ','
  122.     CZ    LDCMDBF1
  123.     CALL    SETSPD
  124. ;
  125. DIAL4A:    XRA    A
  126.     STA    FLAG1
  127.     LDA    FLAG3
  128.     ORA    A
  129.     JNZ    GOT$NO
  130.     LDA    FLAG4
  131.     STA    CMDBUF+1
  132.     CPI    2
  133.     JNC    DIAL12
  134.     LXI    H,CMDBUF+2
  135. ;
  136. DIAL5:    MOV    A,M
  137.     MVI    B,'A'
  138.     MVI    E,0
  139.     MVI    C,1AH
  140. ;
  141. DIAL6:    CMP    B
  142.     JZ    DIAL8
  143.     INR    B
  144.     INR    E
  145.     DCR    C
  146.     JNZ    DIAL6
  147.     MVI    B,'0'
  148.     MVI    E,1AH
  149.     MVI    C,0AH
  150. ;
  151. DIAL7:    CMP    B
  152.     JZ    DIAL8
  153.     INR    B
  154.     INR    E
  155.     DCR    C
  156.     JNZ    DIAL7
  157.     JMP    DIALBAD
  158. ;
  159. DIAL8:    LXI    H,NUMBLIB
  160.     LXI    B,LIBLEN
  161.     MOV    A,E
  162.     ORA    A
  163.     JZ    DIAL10
  164. ;
  165. DIAL9:    MOV    A,M
  166.     ORA    A
  167.     JZ    DIALBAD
  168.     DAD    B
  169.     DCR    E
  170.     JNZ    DIAL9
  171. ;
  172. DIAL10:    MVI    B,LIBLEN
  173.     LXI    D,CMDBUF+1
  174.     XCHG
  175.     MOV    M,B
  176.     XCHG
  177.     INX    D
  178.     CALL    MOVE
  179.     LXI    H,CMDBUF+1
  180.     MOV    E,M
  181.     INX    H
  182. ;
  183. DIAL11:    MOV    A,M
  184.     CALL    TYPE
  185.     INX    H
  186.     DCR    E
  187.     JZ    DIALEXIT
  188.     CPI    '.'
  189.     JZ    DIAL13
  190.     JMP    DIAL11
  191. ;
  192. DIAL12:    LXI    H,CMDBUF+1
  193.     MOV    A,M
  194.     MOV    E,M
  195.     INX    H
  196. ;
  197. DIAL13:    PUSH    H
  198.     CALL    WAKEUP
  199.     POP    H
  200. ;
  201. DIAL13A:MOV    A,M
  202.     ORA    A
  203.     JZ    DIALBAD
  204.     CALL    DIALA
  205.     CALL    STAT
  206.     JZ    DIAL15
  207.     CALL    KEYIN
  208.     CPI    18H
  209.     JZ    DIAL14
  210.     MOV    B,A
  211.     LDA    EXTCHR
  212.     CMP    B
  213.     JNZ    DIAL15
  214. ;
  215. DIAL14:    MVI    B,CR
  216.     CALL    SNDCHR
  217.     JMP    DIALEXIT
  218. ;.....
  219. ;
  220. ;
  221. ;***********************************
  222. ;
  223. DIAL15:    INX    H
  224.     DCR    E
  225.     JNZ    DIAL13A
  226.     MVI    B,CR
  227.     CALL    SNDCHR
  228.     CALL    INMDM
  229.     CALL    ILPRT
  230.     DB    ' - try #',0
  231.     LHLD    A$FLAG
  232.     INX    H
  233.     SHLD    A$FLAG
  234.     CALL    DECOUT
  235.     MVI    A,' '
  236.     CALL    TYPE
  237.     JMP    SMRESULT
  238. ;.....
  239. ;
  240. ;
  241. BSYANSR:LXI    SP,STACK
  242.     XRA    A
  243.     STA    FLAG5
  244.     LDA    B$FLAG
  245.     ORA    A
  246.     JNZ    DIALAGN2
  247.     CALL    ILPRT
  248.     DB    CR,LF,CR,LF,'     Redial? '
  249.     DB    '(C/Y/N): ',BELL,0
  250.     CALL    KBDCHR
  251.     PUSH    PSW
  252.     CALL    CRLF
  253.     POP    PSW
  254.     CPI    'Y'
  255.     JZ    DIALAGN2
  256.     CPI    'C'
  257.     JNZ    DIALEXT1
  258.     MVI    A,1
  259.     STA    B$FLAG
  260. ;
  261. DIALAGN2:
  262.     CALL    CRLF
  263.     JMP    DIAL4A
  264. ;
  265. DIALA:    CALL    TYPE
  266.     MOV    B,A
  267.     CALL    DIALAD
  268.     MOV    A,B
  269. ;
  270. ;
  271. ; Penril accepts the following codes withing the phone numbers.
  272. ;
  273. ;    (R)otary must preceed the number
  274. ;    (T)one     is not needed if modem switches are set for tone
  275. ;
  276. DIALA1:    CPI    '*'        ; Star
  277.     JZ    DIALA2
  278.     CPI    '#'        ; Pound
  279.     JZ    DIALA2
  280.     CPI    '-'        ; Dash
  281.     JZ    DIALA2
  282.     CPI    'P'        ; Pause 2 sec
  283.     JZ    DIALA2
  284.     CPI    'R'        ; Rotory
  285.     JZ    DIALA2
  286.     CPI    'T'        ; Tone
  287.     JZ    DIALA2
  288.     CPI    'W'        ; Wait for
  289.     JZ    DIALA2        ; Dial tone.
  290.     CPI    '0'
  291.     RC            ; Zero
  292.     CPI    ':'        ; Through
  293.     RNC            ; Nine ok.
  294. ;
  295. DIALA2:    CALL    SNDCHR
  296.     JMP    INMDM        ; Eat char.
  297. ;.....
  298. ;
  299. ;
  300. DIALBAD:CALL    ILPRT
  301.     DB    CR,LF,CR,LF,'++ Bad library '
  302.     DB    'number called ++',CR,LF
  303.     DB    0
  304. ;
  305. DIALEXIT:
  306.     CALL    CRLF
  307. ;
  308. DIALEXT1:
  309.     LXI    SP,STACK
  310.     CALL    MDQUIT
  311.     XRA    A
  312.     STA    B$FLAG
  313.     JMP    MENU
  314. ;.....
  315. ;
  316. ;
  317. ; Alternate dial has not been modified to work with a Penril
  318. ;
  319. DIALAD:    LDA    TCHPUL
  320.     CPI    'T'
  321.     RNZ
  322.     MOV    A,B
  323.     CPI    '<'
  324.     JNZ    DIALAD1
  325.     PUSH    H
  326.     LXI    H,ALTDL1
  327.     JMP    DIALAD2
  328. ;
  329. DIALAD1:CPI    '>'
  330.     RNZ
  331.     PUSH    H
  332.     LXI    H,ALTDL2
  333. ;
  334. DIALAD2:MOV    A,M
  335.     CPI    '$'
  336.     JZ    DIALAD3
  337.     CALL    TYPE
  338.     MOV    B,A
  339.     CALL    DIALA1
  340.     INX    H
  341.     CALL    CKSTAT
  342.     JMP    DIALAD2
  343. ;
  344. DIALAD3:MVI    A,' '
  345.     MOV    B,A
  346.     CALL    TYPE
  347.     POP    H
  348.     RET
  349. ;
  350. CKSTAT:    CALL    STAT
  351.     RZ
  352.     CALL    KEYIN
  353.     CPI    18H
  354.     JZ    CKSTAT1
  355.     MOV    B,A
  356.     LDA    EXTCHR
  357.     CMP    B
  358.     MOV    A,B
  359.     JZ    CKSTAT1
  360.     CPI    0BH
  361.     RNZ
  362.     MVI    B,CR
  363.     CALL    SNDCHR
  364.     MVI    B,0AH
  365.     CALL    TIMER
  366.     POP    H
  367.     JMP    BSYANSR
  368. ;
  369. CKSTAT1:POP    H
  370.     JMP    DIALEXIT
  371. ;
  372. INMODEM:CALL    INMDM
  373.     JNC    INMODEM
  374.     RET
  375. ;
  376. CLRBUF:    MVI    B,50H
  377.     LXI    H,INBUFF
  378. ;
  379. CLRBLP:    MVI    M,' '
  380.     INX    H
  381.     DCR    B
  382.     JNZ    CLRBLP
  383.     RET
  384. ;
  385. SETSPD:    CALL    MDMSPD
  386.     CALL    CRLF
  387.     RET
  388. ;
  389. ;
  390. ; This routine wakes up the Penril
  391. ;
  392. WAKEUP:    MVI    B,CR        ; Wakeup
  393.     CALL    SNDCHR        ; Modem.
  394. ;
  395. ;
  396. ; Wait for Penril to send out its logo
  397. ;
  398. WAKE1:     CALL    INMDM
  399.     JC    WAKE1
  400.     CPI    '>'        ; Prompt
  401.     JNZ    WAKE1
  402. ;
  403. ;
  404. ; Delay and send 'K' to start keyboard phone number entry
  405. ;
  406.     MVI    B,02
  407.     CALL    TIMER
  408.     MVI    B,'K'        ; Kybd
  409.     CALL    SNDCHR
  410. ;
  411. ;
  412. ; Wait for Penril to send number mesage
  413. ;
  414. ;    ---> NO:_ <---
  415. ;
  416. WAKE2:    CALL    INMDM
  417.     JC    WAKE2
  418.     CPI    ' '        ; No:_
  419.     JNZ    WAKE2
  420.     MVI    B,02
  421.     JMP    TIMER
  422. ;
  423. MDQUIT:    MVI    B,CR        ; Kill
  424.     CALL    SNDCHR        ; Modem
  425.     MVI    B,10        ; 1 sec.
  426.     CALL    TIMER
  427.     RET
  428. ;
  429. ;
  430. ; The real fun starts here
  431. ;
  432. SMRESULT:
  433.     CALL    CLRBUF
  434.     LXI    H,INBUFF
  435.     PUSH    H
  436.     LXI    D,0400H        ; Loop
  437. ;
  438. RESULT1:CALL    MDRCV
  439.     JZ    RESULT2
  440.     CALL    CKSTAT
  441.     CALL    INMDM
  442.     JNC    PRTEST
  443.     DCX    D
  444.     MOV    A,D
  445.     ORA    E
  446.     JNZ    RESULT1
  447.     POP    H
  448.     JMP    ABORTIT
  449. ;
  450. RESULT2:CALL    INMDM
  451.     JC    TSTMDM
  452. ;
  453. PRTEST:    ANI    7FH
  454.     CPI    CR        ; Ignore CR
  455.     JZ    RESULT2
  456.     CPI    LF        ; Ignore LF
  457.     JZ    RESULT2
  458.     POP    H
  459.     MOV    M,A
  460.     INX    H
  461.     PUSH    H
  462.     JMP    RESULT2
  463. ;
  464. ;
  465. ; The following are messages that the Penril modem sends to the system
  466. ;
  467. TSTMDM:    POP    H        ; Penril
  468.     LXI    D,INBUFF    ; Replies
  469.     CALL    INLNCP
  470.     DB    'OK',0        ; Answered
  471.     JNC    ANSWER
  472.     CALL    INLNCP
  473.     DB    'BUSY',0    ; Busy
  474.     JNC    PHBUSY
  475.     CALL    INLNCP
  476.     DB    'DIALING: ',0    ; Dialing
  477.     JNC    DIALIT
  478.     CALL    INLNCP
  479.     DB    'NO CD',0    ; No carrier
  480.     JNC    NOCRD
  481.     CALL    INLNCP
  482.     DB    'NO ANSWER',0    ; No answer
  483.     JNC    NOANSWR
  484.     CALL    INLNCP
  485.     DB    'NO RING',0    ; No ring
  486.     JNC    ABORTIT
  487.     CALL    INLNCP
  488.     DB    'ABORT',0    ; Abort
  489.     JNC    ABORTIT
  490.     CALL    INLNCP
  491.     DB    'ERROR',0    ; Error
  492.     JNC    ABORTIT
  493.     CALL    INLNCP
  494.     DB    'NO DIAL TONE',0
  495.     JNC    NODIALT
  496.     JMP    ABORTIT
  497. ;
  498. ;
  499. ; replies to Penril messages
  500. ;
  501. NOANSWR:CALL    ILPRT
  502.     DB    'no answer! ',0
  503.     JMP    BSYANSR
  504. ;
  505. NOCRD:    CALL    ILPRT
  506.     DB    'no carrier detected! ',0
  507.     JNC    ABORTIT
  508. ;
  509. PHBUSY:    CALL    ILPRT
  510.     DB    'busy! ',0
  511.     LDA    HEXSHOW
  512.     MOV    B,A
  513.     CALL    TIMER
  514.     JMP    BSYANSR
  515. ;
  516. ;
  517. ; This routine eats the numbers that the Penril sends out when it is
  518. ; doing the dialing.  ---> DIALING: 15045551212 <---  It also puts de-
  519. ; lays between numbers and times out when no more numbers are being sent
  520. ; from the Penril.
  521. ;
  522. DIALIT:    CALL    ILPRT
  523.     DB    'dialing, ',0
  524.     LXI    D,0C000H    ; Timer
  525. ;
  526. EATWT:    CALL    MDRCV        ; Wait for
  527.     JZ    EATIT        ; Numbers
  528.     DCX    D
  529.     MOV    A,D
  530.     ORA    E
  531.     JNZ    EATWT
  532.     JMP    SMRESULT    ; Timeout
  533. ;
  534. EATIT:    CALL    INMDM        ; Eat numbers
  535.     LXI    D,0C000H    ; Reset timer
  536.     JMP    EATWT
  537. ;
  538. ANSWER:    CALL    ILPRT
  539.     DB    CR,LF,CR,LF
  540.     DB    '<<<<-- CONNECTED -->>>>'
  541.     DB    BELL,0
  542.     JMP    TERML
  543. ;
  544. ABORTIT:CALL    ILPRT
  545.     DB    ' <ABORT>',BELL,0
  546.     LDA    HEXSHOW
  547.     MOV    B,A
  548.     CALL    TIMER
  549.     JMP    BSYANSR
  550. ;
  551. NODIALT:CALL    ILPRT
  552.     DB    'no dial tone! ',0
  553.     JMP    ABORTIT
  554. ;
  555. LDCMDBF:STA    FLAG2
  556. ;
  557. LDCMDBF1:
  558.     MVI    A,0FFH
  559.     STA    FLAG3
  560.     STA    B$FLAG
  561.     MVI    B,40H
  562.     LXI    H,CMDBUF+1
  563.     LXI    D,C$FLAG
  564.     JMP    MOVE
  565. ;
  566. GOT$NO:    LDA    FLAG3
  567.     INR    A
  568.     INR    A
  569.     STA    FLAG3
  570.     MOV    C,A
  571.     MVI    B,0
  572.     LDA    C$FLAG
  573.     CMP    C
  574.     JNC    GOT$NO1
  575.     MVI    A,1
  576.     MOV    C,A
  577.     STA    FLAG3
  578. ;
  579. GOT$NO1:LXI    H,C$FLAG
  580.     DAD    B
  581.     JMP    DIAL5
  582. ;.....
  583. ;
  584. ;
  585. FLAG1:    DB    0
  586. FLAG2:    DB    0
  587. FLAG3:    DB    0
  588. FLAG4:    DB    0
  589. FLAG5:    DB    0
  590. ;
  591. ;
  592.     END
  593.