home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / sigmv084.ark / FLIP4.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  4KB  |  161 lines

  1.     TITLE    'FLIP - Toggle originate/answer mode under "bye"'
  2. ;
  3. ;    Originally written by Bruce Ratoff.
  4. ;
  5. ;    VERSION LIST: Most recent version first
  6. ;
  7. ;17/Jun/82 Added  short  signon  message  with  version  number
  8. ;       equate inserted into message.  Changed prompts to be
  9. ;       consistent with my "FLIP" option in BYE72D.
  10. ;       (Bill Bolton)
  11. ;
  12. ;12/Jun/82 Added timeout before flip OK  message, to allow time
  13. ;       remote modem  to  detect  new carrier, seems to take
  14. ;       about 5 seconds for  CCITT  V21 when going to ANSWER
  15. ;       mode. (Bill Bolton)
  16. ;
  17. ;11/Jun/82 Added code to toggle mode rather than just change to
  18. ;          answer  as CCITT systems have less marked difference
  19. ;          in performance than BELL 103A systems and  switching
  20. ;          to answer mode isn't always a good solution. Now the
  21. ;          remote  user  can  go  back  to  originate.  Removed
  22. ;          PMMI/Hayes stuff (because CCITT users can't use them
  23. ;          and  it isn't really clear what some of the hardware
  24. ;          specific  stuff  does  when  you've  never seen  one
  25. ;          [and  are never likely to]) and set up  for  Telecom
  26. ;          Australia modem. Message rewritten to lower case and
  27. ;          63 char line. (Bill Bolton)
  28. ;
  29. ;08/Aug/80 Added  conditional  assembly for either PMMI or D  C
  30. ;          Hayes modem cards (BR)
  31. ;
  32. ;06/Jun/80 PMMI  modem conditionals and to re-ask for input  if
  33. ;          invalid answer. Keith Petersen, W8SDZ.
  34. ;
  35. ;02/Jun/80 Uppercase  message and require exactly control-c  or
  36. ;          return, ignoring all else. (BR)
  37. ;
  38. FALSE    EQU    0    ;BASIC LOGIC DEFINITIONS
  39. TRUE    EQU    NOT FALSE
  40. ;
  41. VERS    EQU    41    ;Version number
  42. ;
  43. MODCTL    EQU    5FH    ;2651 UART command port
  44. RTS    EQU    20H    ;RTS bit in comand byte
  45. SPEED    EQU    4    ;CPU speed in Mhz
  46. RETIME    EQU    6    ;Time for remote modem to
  47.             ; detect new carrier 
  48. ;
  49. WBOOT    EQU    0    ;CP/M warm boot entry point
  50. BDOS    EQU    5    ;CP/M BDOS entry point
  51. DBUFF    EQU    80H
  52. ;
  53. PMESSG    EQU    9
  54. CHRINP    EQU    1
  55. ALF    EQU    0AH    ;Ascii line feed
  56. ACR    EQU    0DH    ;Ascii carriage return
  57. ;
  58.     ORG    100H
  59. ;
  60. FLIP:
  61.     MVI    C,PMESSG
  62.     LXI    D,SIGNONMSG    ;Annouce ourself quitely
  63.     CALL    BDOS
  64.     IN    MODCTL
  65.     ANI    RTS        ;In answer mode?
  66.     CZ    ORIGINATE    ;Yes
  67.     MVI    C,PMESSG
  68.     LXI    D,SWITCHMSG
  69.     CALL    BDOS
  70. ;
  71. FLIP1:
  72.     MVI    C,PMESSG
  73.     LXI    D,SELECTMSG
  74.     CALL    BDOS
  75.     MVI    C,CHRINP
  76.     CALL    BDOS
  77.     ANI    05FH        ;Make upper case
  78.     CPI    'N'        ;NO?
  79.     JZ    ABORT         ;OK, NO CHANGE
  80.     CPI    'Y'
  81.     JNZ    FLIP1        ;WASN'T Y OR N...ASK HIM AGAIN
  82. ;
  83. ;SET MODEM FOR DTR ON & ORIGINATE
  84. ;
  85.     IN    MODCTL        ;Get the current mode
  86.     XRI    RTS        ;Toggle the bit
  87.     OUT    MODCTL        ;Flip the mode
  88.     MVI    B,RETIME*10    
  89. TLOOP:
  90.     CALL    DELAY        ;Wait for remote to carrier detect
  91.     DCR    B
  92.     JNZ    TLOOP
  93.     MVI    C,PMESSG    ;If we get carrier again we can
  94.     LXI    D,DONEMSG    ; tell them we made it OK
  95.     CALL    BDOS        ; else BYE takes care of things
  96.     JMP    WBOOT        ;EXIT TO CP/M WARM BOOT
  97.  
  98. ABORT:
  99.     MVI    C,PMESSG
  100.     LXI    D,ABORTMSG
  101.     CALL    BDOS
  102.     JMP    WBOOT
  103. ;
  104. ORIGINATE:
  105.     PUSH    PSW
  106.     LXI    H,OMSG        ;Point to new message
  107.     LXI    D,MODE        ;Point to message to overwrite
  108.     MVI    B,MLEN-MODE    ;Length of message
  109. OLOOP:
  110.     MOV    A,M        ;Get a byte
  111.     STAX    D        ;Put a byte
  112.     INX    H        ;Adjust pointers
  113.     INX    D
  114.     DCR    B        ;Done?
  115.     JNZ    OLOOP        ;No
  116.     POP    PSW
  117.     RET            ;Yes
  118. ;
  119. ;    .1 SEC DELAY ROUTINE
  120. ;
  121. DELAY:
  122.     PUSH    B
  123.     LXI    B,SPEED*4167     ;TIMING CONSTANT
  124. DELAY1:
  125.     DCX    B
  126.     MOV    A,B
  127.     ORA    C
  128.     JNZ    DELAY1
  129.     POP    B
  130.     RET
  131. ;
  132. SIGNONMSG:
  133.     DB    'FLIP Version '
  134.     DB    VERS/10 + '0','.',(VERS MOD 10) + '0'
  135.     DB    ACR,ALF,'$'
  136. ;
  137. SWITCHMSG:
  138.     DB    ACR,ALF
  139.     DB    'If  you answer "Y" to the next question you have 20 seconds  to',ACR,ALF
  140.     DB    'switch your modem or acoustic coupler to the "'
  141. MODE:
  142.     DB    'ANSWER" mode.   '
  143. MLEN:
  144.     DB    ACR,ALF,'$'
  145. ;
  146. SELECTMSG:
  147.     DB    ACR,ALF,'Do you want to FLIP the modem mode ? ','$'
  148. ;
  149. DONEMSG:
  150.     DB    ACR,ALF,ACR,ALF
  151.     DB    'If you see this, the mode change was successful.',ACR,ALF,'$'
  152. ;
  153. ABORTMSG:
  154.     DB    ACR,ALF,ACR,ALF
  155.     DB    'OK, no change in mode then.',ACR,ALF,'$'
  156. ;
  157. OMSG:
  158.     DB    'ORIGINATE" mode.'
  159.  
  160.     END
  161.