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 / ZSYS / SIMTEL20 / ZSIG / ZBYE11C.MAC < prev    next >
Text File  |  2000-06-30  |  31KB  |  1,272 lines

  1. ; Program:   ZBYE
  2. ; Author:    Jay Denebeim
  3. ; Assembler: M80
  4. version    equ    11
  5. rev    equ    'C'
  6. ;
  7. ;                                 ZCPR Bye RCP
  8. ;
  9. ;  This program implements BYE as an RCP under ZCPR3.  It handles all modem
  10. ; IO by replacing the console routines.  All other functions are passed to
  11. ; the ZCPR CCP for execution.  Where BYE normally uses equates, I.E. password
  12. ; connection, carrier lost commands, etc., ZBYE passes command lines to ZCPR.
  13. ; This should reduce the bugs introduced by tons of conditional assemblies
  14. ; that has plagued the recent versions of BYE.  It has also allowed room to
  15. ; do more functions than BYE normally has done in the past.  Please folks,
  16. ; lets keep the conditional assemblies down to a minimum.
  17. ;
  18. ;  There are several new features in this program:
  19. ;      Since its an RCP BYE can remain resident while the SYSOP is using
  20. ;    the computer locally.  Under this Version it allows the operator
  21. ;    to answer the phone quicker if a call comes in. Version 1.1 will
  22. ;    answer the phone while in this mode, and allow the operator to accept
  23. ;    the call while in another program.
  24. ;      A chat mode has been implemented, this allows either single way, or
  25. ;    two way communication between the sysop and the caller.
  26. ;      It will also allow changes of the Maximum drive and user area
  27. ;    without disabling the modem IO.
  28. ;
  29. ;  The function key descriptions:
  30. ;    ^L - Toggle Local only IO.  This toggles the modem IO on and off.
  31. ;    ^O - Toggle Open access.  This switches the wheel, maxdrive, and
  32. ;        maxuser bytes of ZCPR3.  NOTE: this is the location your
  33. ;        BBS, XMODEM, and whatever else should check.  Its no longer
  34. ;        in the BYE header.  Also, be sure to watch the user while
  35. ;        he's on in this mode, either disable the modem, or be ready
  36. ;        with the ^N.
  37. ;    ^N - Nerdkey, Hang up on the bozo
  38. ;    ^Q - Query the user, (CHAT mode), end with ^C.  This is a very
  39. ;        rudimentrary chat.  If local only, he can't type back,
  40. ;        but if not, its two way.  Be sure to announce yourself
  41. ;        'cause ZBYE doesn't anounce when its going into chat mode.
  42. ;        the only editing commands implimented are expansion of
  43. ;        <cr> to <cr><lf>.
  44. ;
  45. ;  At this time this program requires a smartmodem or equivilent.  The reason
  46. ; for this is the answer in local mode.  If someone wants to write a
  47. ; dumb modem answer routine to replace (conditionally) the smartmodem
  48. ; answer routine, go ahead.  Don't forget that most of us don't have
  49. ; ring-indicators.
  50. ;
  51. ;  To install this program, install your terminal dependent code following
  52. ; the .8080 psudo-op.  ZBYE was set up to use MBYE overlays, these are either
  53. ; very similar, or identical to BYE2.x or 3.x overlays.  Remember that
  54. ; EQUates can't have :'s in front of them for M80, so you'll probably have
  55. ; to do a global replace of :^IEQU with ^IEQU.  I'd really appreciate it if
  56. ; you would send me a copy of your overlay when you finish it.
  57. ;      You will also have to change the terminal dependent cursor
  58. ; functions to match your own system.
  59. ;
  60. ;  This program is the first in a series of ZCPR RCPM software.  Look for
  61. ; ZBBS, ZXMODEM, ZDIR, and ZCHAT.  Look for them at an RCPM near you.
  62. ;
  63. ;  Copyright 1984, by Jay Denebeim.  This program is released to the public
  64. ; domain.  It can be freely given, but under no circumstances will this
  65. ; software be charged for, except a copying fee not to exceed the price of
  66. ; the media copied to.
  67. ;
  68. ;  I hope you enjoy using this program as much as I enjoyed writing it.
  69. ;  If you make any modifications to this program, or have any suggestions,
  70. ; please feel free to contact me.
  71. ;  Thanks a bunch,
  72. ;  Jay Denebeim
  73. ;  2408 Elderberry Ct #3
  74. ;  Lexington, KY  40509
  75. ;  (606) 269-6527 (voice)    <- NOTE: This is a new number.
  76. ;  (606) 266-4532 (data)
  77. ;
  78. ;-----------------------------------------------------------------------
  79. ;
  80. ; Revision History:
  81. ;
  82. ; 1.1C        *** Release Version ***        Third public release.
  83. ;    While modifing LUX4.0 to 4.1, I was reminded that time outs are
  84. ;    very similar to carrier losses.  So, the carrier loss interupt
  85. ;    also means time out.  To the program running under ZBYE, the reason
  86. ;    for the loss of user isn't important.    Jay Denebeim 02/15/85
  87. ;
  88. ; 1.1B    Made Wheel on status line follow what the wheel was actually
  89. ;    set to.  Input Timed out msg was in the wrong place, and was erased
  90. ;    when bye ran again.            Jay Denebeim 02/02/85
  91. ;
  92. ; 1.1A        *** Release Version ***        Second public release.
  93. ;    Cleaned up the comments, and stripped out the modem dependent
  94. ;    routines.                Jay Denebeim 01/11/85
  95. ; 1.0G    Changed carrier lost routine to restart # 30 so that programs
  96. ;    could do their own thing on CLOSS.  Added check for wheel change
  97. ;    so the sysop drives would follow the wheel.
  98. ;                        Jay Denebeim 01/11/85
  99. ; 1.0F    Moved BYE initialization routines into low memory.  This freed
  100. ;    up some memory, and allowed another bit to implement another
  101. ;    routine.  This routine runs a set of programs before hanging
  102. ;    the modem up                Jay Denebeim 01/10/85
  103. ; 1.0E    Moved local char status, and bye mode bytes into low memory
  104. ;    so they will be available for other programs.
  105. ;                        Jay Denebeim 01/09/85
  106. ; 1.0D    If wrong characters typed during local mode answer, the caller
  107. ;        would get hung up on.        Jay Denebeim 01/09/85
  108. ; 1.0C    Reduced the size of the program.  RCP was overflowing.
  109. ;                        Jay Denebeim 01/08/85
  110. ; 1.0B    Answer phone while in local mode.    Jay Denebeim 01/07/85
  111. ; 1.0A    First public release.  by - Jay Denebeim  12/23/84
  112. ;
  113. ;-----------------------------------------------------------------------
  114. ;
  115. ;
  116. ; Equates for this program
  117. ;
  118.     MACLIB    A:Z3BASE.LIB
  119. ;
  120. no    equ    0
  121. yes    equ    not no
  122. cr    equ    0dh
  123. lf    equ    0ah
  124. ;
  125. bdos    equ    5
  126. bios    equ    0
  127. ;
  128. obye    equ    yes    ; Emulate BYE3.x ?
  129. mhz    equ    40    ; CPU speed times 10
  130. closs    equ    1    ; Number of seconds to wait after loss of carrier
  131. clrou    equ    30h    ; Routine to call on loss of carrier
  132. jump    equ    0c3h    ; 8080/Z80 jump instruction
  133. timeout    equ    yes    ;yes, auto logout for sleepy callers
  134. tomins    equ    2    ;minutes to auto logout
  135. tmins    equ    ((tomins*mhz)+5)/10    ;(don't change this one...)
  136. ;
  137. cdrive    equ    'B'-'@'    ; Callers Maximum Drive
  138. cuser    equ    9    ; Callers Maximum User Area
  139. ;
  140. lclst    equ    003bh    ; Local Console generated character flag
  141. bymode    equ    003fh    ; Bye control byte
  142. bymmio    equ    80h
  143. bymcio    equ    40h
  144. bymica    equ    20h
  145. bymncc    equ    10h
  146. bymclc    equ    08h
  147. bymnor    equ    04h
  148. bymaoc    equ    02h
  149. bymphu    equ    01h
  150. ;   The BYE mode byte is bit mapped and has the following attributes:
  151. ;    7 = Modem IO enable
  152. ;    6 = Console IO enable
  153. ;    5 = Ignore Carrier
  154. ;    4 = Next Caller Commands Running
  155. ;    3 = Carrier Lost Commands Running
  156. ;    2 = Normal Mode Commands Running
  157. ;    1 = Alert Operator on Call
  158. ;    0 = Pre-Hangup Commands Running
  159. ;
  160. mspeed    equ    003ch    ;baud rate pointer
  161. ;
  162. ;-----------------------------------------------------------------------
  163. ;
  164. bp110    equ    0    ;110 bps - baud rate pointers for MSPEED
  165. bp300    equ    1    ;300 bps
  166. bp450    equ    2    ;450 bps
  167. bp600    equ    3    ;600 bps
  168. bp710    equ    4    ;710 bps
  169. bp1200    equ    5    ;1200 bps
  170. bp9600    equ    8    ;9600 bps
  171. bp19200    equ    9    ;19200 bps
  172. ;
  173. ;-----------------------------------------------------------------------
  174. ;
  175. ;  Global Macros
  176. ;
  177. cmdln    macro    cmd
  178.     local    cmdst,msg,cmdend
  179. cmdst:    dw    z3cl+msg-cmdst
  180.     db    z3cls,0
  181. msg:    db    cmd
  182.     db    0
  183. cmdend:
  184.     endm
  185. ;
  186. ;-----------------------------------------------------------------------
  187. ;
  188. ;
  189. ;  Terminal Dependent macros
  190. ;    You will probably have to change the data below.
  191. ;
  192. curpos    macro    x,y,last    ; Position Cursor to X,Y (0 offset)
  193.     db    1bh,'=',' '+y,' '+x+(80h and last)
  194.     endm
  195. ;
  196. enab25    macro    last        ; Enable 25th line
  197.     db    1bh,'C','7'+(80h and last)
  198.     endm
  199. ;
  200. disab25    macro    last        ; Disable 25th line
  201.     db    1bh,'B','7'+(80h and last)
  202.     endm
  203. ;
  204. pucu    macro    last        ; Push cursor
  205.     db    1bh,'B','6'+(80h and last)
  206.     endm
  207. ;
  208. pocu    macro    last        ; Pop cursor
  209.     db    1bh,'C','6'+(80h and last)
  210.     endm
  211. ;
  212. cls    macro    last        ; Clear Screen
  213.     db    1ah+(80h and last)
  214.     endm
  215. ;
  216. curof    macro    last        ; Cursor off
  217.     db    1bh,'C','4'+(80h and last)
  218.     endm
  219. ;
  220. curon    macro    last        ; Cursor on
  221.     db    1bh,'B','4'+(80h and last)
  222.     endm
  223. ;
  224. ; Lets get this show on the road
  225. ;
  226.     .z80
  227.     aseg
  228.     org    100h
  229. ;
  230. ; Lets see if BYE is already resident.
  231. ;
  232.     ld    hl,rcp        ; Point to RCP area
  233.     ld    de,bybeg    ; Point to RCP's name
  234.     ld    bc,5        ; Length of name
  235. chbye1:    ld    a,(de)        ; Get next char
  236.     cpi            ; Is it the same?
  237.     jr    nz,nbye        ; Nope, re-locate the RCP
  238.     jp    po,ybye        ; If done, its there
  239.     inc    de        ; Point to next char
  240.     jr    chbye1        ; Do it again
  241. ;
  242. nbye:    xor    a
  243.     ld    (lclst),a    ; Clear out local status
  244.     ld    (bymode),a    ; and Bye's operating mode
  245.     ld    hl,bybeg
  246.     ld    de,rcp
  247.     ld    bc,byend-bybeg
  248.     ldir            ; Re-Locate BYE
  249.     ld    a,jump        ; load A with JUMP instruction
  250.     ld    (clrou),a    ; and put in restart
  251.     ld    hl,lostit    ; do the same
  252.     ld    (clrou+1),hl    ; with original closs command line
  253.     call    byeini
  254.     ld    c,9
  255.     ld    de,test2
  256.     call    5
  257.     jp    ybye
  258. test2:    defb    'Making BYE$'
  259. ;
  260. ybye:    ld    hl,bye
  261.     ld    de,z3cl
  262.     ld    bc,byelen
  263.     ldir            ; Load 'BYE' into command line
  264. ;
  265.     jp    0
  266. ;
  267. bye:    cmdln    'BYE'
  268. byelen    equ    $-bye
  269. ;
  270. byeini:    ld    a,(z3env+2ch)    ; store away, sysop's Highest drive
  271.     ld    (sdrive),a
  272.     ld    a,(z3env+2dh)    ; and user area.
  273.     ld    (suser),a
  274.     ld    a,(fstprv)    ; Store first letter of private
  275.     ld    (prvlet),a    ; commands
  276.     call    newbio
  277.     call    clrbuf
  278.     call    modini
  279.     ld    a,bymmio+bymcio+bymica+bymclc
  280.     ld    (bymode),a
  281.     ret
  282. ;
  283. ; Initialize the modem
  284. ;
  285. modini:    call    mdinit        ; Initialize serial port
  286.     ld    b,3
  287.     call    ldelay        ; delay .3 sec
  288.     call    mdansw        ; raise dtr
  289.     call    delay
  290.     call    set1200        ; 1200 baud
  291.     call    delay
  292.     ld    a,bymmio+bymica
  293.     ld    (bymode),a    ; enable modem io
  294.     call    prinlo        ; reset modem
  295.     db    'ATZ',cr+80h
  296.     ld    b,5
  297.     call    delay        ; wait .5 sec
  298.     call    prinlo        ; set our way
  299.     db    'ATS0=0V0E0X1M0',cr+80h
  300.     ld    b,5        ; wait up to approx .5 sec for answer
  301. mdini1:    push    bc
  302.     call    const        ; char avail?
  303.     pop    bc
  304.     or    a
  305.     jr    nz,mdini2    ; yes, process
  306.     dec    b
  307.     jr    z,modini    ; sompins wrong, do again
  308.     call    delay
  309.     jr    mdini1
  310. mdini2:    call    conin        ; get that char
  311.     cp    '0'
  312.     ret    z        ; modem initialized
  313.     ld    b,5        ; wait another .5 if garbage
  314.     jr    mdini1
  315. ;
  316. ;
  317. bybeg:
  318.     .phase    rcp
  319.     defb    'ZBYE '        ; RCP's name for ZCPR
  320.     defb    3        ; Command name length
  321. fstcmd:    defb    'BYE'
  322.     defw    start
  323. fstprv:    defb    'OFF'
  324.     defw    byeoff
  325.     defb    0
  326. ;
  327. start:    
  328.     call    retsave
  329.     ld    hl,bymode
  330.     bit    0,(hl)
  331.     jr    nz,prophu    ; Process pre-hangup commands
  332.     bit    1,(hl)
  333.     jp    nz,prolcl    ; Process a local exit
  334.     bit    2,(hl)
  335.     jp    nz,pronor    ; Process a normal exit
  336.     bit    3,(hl)
  337.     jp    nz,proclc    ; Carrier lost commands finished
  338.     bit    4,(hl)
  339.     jp    nz,proncc    ; Next caller commands finished
  340.     call    prinpl
  341.     db    'Invalid BYE mode!  BYE terminating',7,cr,lf+80h
  342.     jr    byeof1
  343. ;
  344. byeoff:    call    retsave
  345. byeof1:    call    oldbio
  346.     ld    a,0
  347.     ld    (rcp),a        ; Disable RCP recognision
  348.     ld    (fstcmd),a    ; and for the CCP
  349.     ld    hl,bymode
  350.     res    7,(hl)        ; Turn off modem IO
  351.     call    prinlc
  352.     enab25    no
  353.     cls    yes        ; enable 25th line and clear screen
  354.     call    prinpl
  355.     db    'Bye is gone',cr,lf+80h
  356.     jp    exit
  357. ;
  358. ; Local storage initialized by loader
  359. sdrive:    db    0
  360. suser:    db    0
  361. prvlet:    db    0
  362. ;
  363. ; Process pre-hangup commands
  364. ;
  365. prophu:    ld    a,bymcio+bymmio+bymnor    ;con enab, modem enab, normal caller
  366.     ld    (bymode),a
  367. ;
  368.     ld    hl,gbcmd    ; Load next command string
  369.     ld    de,z3cl
  370.     ld    bc,gblen
  371.     ldir
  372.     jp    exit
  373. ;
  374. gbcmd:    cmdln    'BYE'
  375. gblen    equ    $-gbcmd
  376. ;
  377. ; Process a local exit, actually a modified normal answer, but must check
  378. ;    for carrier present.
  379. ;
  380. prolcl:    call    mdcarck
  381.     jr    z,prolc1    ; If no carrier, just get ready for next call
  382.     ld    a,0ffh        ; set flag
  383.     ld    (prlct1),a
  384.     jr    prolc2        ; get ready for next caller
  385. ;
  386. prlct1:    ds    1
  387. ;
  388. ; Process a normal exit.  This routine runs any programs to end the
  389. ;    session, says Bye, hangs up the modem, turns off the modem IO, 
  390. ;    then runs the routines to get ready for the next caller.
  391. ;
  392. pronor:    call    prinpl
  393.     db    'Goodbye, call again soon!',cr,lf+80h
  394. ;
  395. prolc1:    call    go25
  396.     call    prinlc
  397.     curpos    60,24,yes
  398.     ld    b,13
  399.     call    tab
  400.     call    no25
  401. ;
  402. ; If carrier lost, no point in printing msg
  403. ;
  404. proclc:    call    mdinit
  405. prolc2:    ld    a,bymcio+bymncc    ;con enab, nxt calr mode
  406.     ld    (bymode),a
  407. ;
  408.     call    clrbuf
  409.     call    ressec
  410. ;
  411.     ld    hl,nccmd    ; Load next command string
  412.     ld    de,z3cl
  413.     ld    bc,nclen
  414.     ldir
  415.     jp    exit
  416. ;
  417. nccmd:    cmdln    'A0:;LDR RCPM.NDR;PATH A0:;BYE'
  418. nclen    equ    $-nccmd
  419. ;
  420. ; Ready for next caller.  Set secure mode, then wait for arrival.
  421. ;
  422. proncc:    call    go25
  423.     call    prinlc
  424.     curof    no
  425.     curpos    40,24,yes
  426.     ld    b,19
  427.     call    tab
  428.     call    prinpl
  429.     pocu    no
  430.     disab25    no
  431.     cls    yes        ; Turn off the cursor and clear screen
  432.     call    setsec
  433.     ld    a,bymcio+bymphu
  434.     ld    (bymode),a
  435.     ld    a,(prlct1)    ; ending local mode ?
  436.     cp    0ffh
  437.     push    af
  438.     xor    a
  439.     ld    (prlct1),a    ; zero it anyway
  440.     pop    af
  441.     jr    z,pronc2
  442.     call    nxtcal
  443. pronc1:    call    modans
  444.     call    mdcarck        ; No Carrier?
  445.     jr    z,pronc1    ; Then loop
  446. pronc2:    call    go25
  447.     call    prinlc
  448.     curon    no
  449.     curpos    60,24,no
  450.     db    'Connected   ',cr+80h
  451.     ld    b,40
  452.     call    tab
  453.     call    no25
  454.     ld    hl,bymode
  455.     set    7,(hl)        ; Make sure modem is on
  456.     res    5,(hl)        ; and carrier significant
  457.     call    prinpl
  458.     db    'Welcome to ZBoard',cr,lf
  459.     db    'You are now running under ZBYE version '
  460.     db    '0'+(version/10), '.', '0'+(version mod 10), rev, cr, lf+80h
  461. ;
  462.     ld    hl,nmcmd    ; Load normal entry command string
  463.     ld    de,z3cl
  464.     ld    bc,nmlen
  465.     ldir
  466.     jp    exit
  467. ;
  468. nmcmd:    cmdln    'A0:;TEST;RBBS'
  469. nmlen    equ    $-nmcmd
  470. ;
  471. ; Set ZCPR into a secure mode
  472. ;
  473. setsec:    call    usrdru
  474.     xor    a
  475.     ld    (z3whl),a    ; Clear the wheel
  476.     ld    (fstprv),a    ; And private commands
  477.     ret
  478. ;
  479. ; Set highest drive and user area for caller.
  480. ;
  481. usrdru:    ld    a,cdrive    ; Set Caller's highest drive
  482.     ld    (z3env+2ch),a
  483.     ld    a,cuser
  484.     ld    (z3env+2dh),a    ; and user area.
  485.     push    af
  486.     push    hl
  487.     call    go25
  488.     call    prinlc
  489.     curpos    40,24,no
  490.     dc    '     '
  491.     call    no25        ; Update Status line
  492.     pop    hl
  493.     pop    af
  494.     ret
  495. ;
  496. ; Set ZCPR into sysop mode
  497. ;
  498. ressec:    call    sysdru
  499.     xor    a
  500.     cpl
  501.     ld    (z3whl),a    ; Set the wheel
  502.     ld    a,(prvlet)    ; and private commands
  503.     ld    (fstprv),a
  504.     ret
  505. ;
  506. ; Set highest drive and user area for SysOp.
  507. ;
  508. sysdru:    ld    a,(sdrive)    ; Set Sysop's highest drive
  509.     ld    (z3env+2ch),a
  510.     ld    a,(suser)
  511.     ld    (z3env+2dh),a    ; and user area.
  512.     call    go25
  513.     call    prinlc
  514.     curpos    40,24,no
  515.     dc    'Wheel'
  516.     call    no25        ; Update Status line
  517.     ret
  518. ;
  519. ; Clear ZCPR's internal buffers
  520. ;
  521. clrbuf:    xor    a
  522. ;
  523.      if    z3env
  524.     ld    hl,z3env+80h    ; Clear TCAP area
  525.     ld    de,z3env+81h
  526.     ld    bc,7eh        ; TCAP length-1 (always?)
  527.     ld    (hl),a
  528.     ldir
  529.      endif    ;z3env
  530. ;
  531.      if    shstk
  532.     ld    hl,shstk    ; Clear Shell Stack
  533.     ld    de,shstk+1
  534.     ld    bc,shstks*shsize-1
  535.     ld    (hl),a
  536.     ldir
  537.      endif    ;shstk
  538. ;
  539.      if    z3msg
  540.     ld    hl,z3msg    ; Clear Message Buffers
  541.     ld    de,z3msg+1
  542.     ld    bc,4eh        ; Message buffer length -1
  543.     ld    (hl),a
  544.     ldir
  545.      endif    ;z3msg
  546. ;
  547.     ret
  548. ;
  549. ; Answer modem and wait for carrier.  Set baud as appropriate.
  550. ;
  551. modans:    call    conin
  552.     push    af
  553.     ld    a,(lclst)
  554.     or    a        ; Was it a local char?
  555.     jr    z,mdans2    ; nope
  556.     pop    af
  557.     cp    'C'-'@'        ; Control C from console?
  558.     jr    nz,modans    ; Nope
  559.     ld    hl,bymode
  560.     bit    1,(hl)        ; if in local bye active mode
  561.     jr    nz,modans    ; then forget the console
  562.     res    7,(hl)        ; inhibit modem IO
  563.     set    1,(hl)        ; go into local bye active mode
  564.     res    0,(hl)        ; make sure not in pre-hangup
  565.     call    ressec
  566.     call    go25
  567.     call    prinlc
  568.     curon    no
  569.     curpos    60,24,no
  570.     dc    'Local'
  571.     ld    b,7
  572.     call    tab
  573.     call    no25
  574.     jp    exit
  575. ;
  576. mdans2:    pop    af
  577.     ld    hl,bymode    ; We're probably going to set a mode soon
  578.     cp    '2'        ; Is it a RING?
  579.     jr    z,mdans1
  580.     cp    '1'        ; How 'bout connect 300?
  581.     jp    z,mdans3
  582.     cp    '5'        ; connect 1200?
  583.     jp    z,mdans4
  584.     cp    '3'        ; No Carrier
  585.     ret    z
  586.     jr    modans        ; clean up stack
  587. ;
  588. mdans1:    res    6,(hl)        ; turn off local xmitter
  589.     push    hl
  590.     call    prinlo
  591.     db    'ATA',cr+80h    ; answer the phone
  592.     pop    hl
  593.     set    6,(hl)        ; turn on local
  594.     jr    modans
  595. ;
  596. mdans3:    call    set300
  597.     call    delay
  598.     res    5,(hl)        ; Carrier enabled
  599.     ld    hl,mspeed
  600.     ld    (hl),bp300
  601.     jr    mdans5
  602. ;
  603. mdans4:    call    set1200
  604.     call    delay
  605.     res    5,(hl)        ; Carrier enabled
  606.     ld    hl,mspeed
  607.     ld    (hl),bp1200
  608. ;
  609. mdans5:    ld    b,10        ; Check carrier for 1.0 seconds
  610. mdans6:    call    carok
  611.     jr    z,mdans7
  612.     call    delay
  613.     djnz    mdans6
  614.     ret
  615. mdans7:    ld    hl,bymode
  616.     call    nxtcal
  617.     set    5,(hl)
  618.     ret
  619. ;
  620. ;  Get ready for next caller
  621. ;
  622. nxtcal:     if    timeout
  623.     xor    a        ; Clear timeout
  624.     ld    (tocnt),a
  625.     ld    (tocnt+1),a
  626.     ld    a,tmins
  627.     ld    (toval),a
  628.      endif    ;timeout
  629. ;
  630.     call    mdinit        ; drop DTR
  631.     ld    b,3
  632.     call    ldelay        ; wait awhile
  633.     call    mdansw        ; raise it
  634.     call    delay
  635.     call    set1200
  636.     call    delay
  637.     ld    hl,bymode
  638.     res    6,(hl)        ; talk to modem only
  639.     set    7,(hl)
  640.     set    5,(hl)        ; ignore carrier
  641.     push    hl
  642.     call    prinlo
  643.     db    'AT',cr+80h    ; sync modem speed
  644.     pop    hl
  645.     set    6,(hl)        ; turn dual io back on
  646.     ld    b,5
  647. nx1:    push    bc
  648.     call    const        ; char avail?
  649.     pop    bc
  650.     or    a
  651.     jr    nz,nx2        ; yes, process
  652.     dec    b
  653.     jr    z,nxtcal    ; sompins wrong, do again
  654.     call    delay
  655.     jr    nx1
  656. nx2:    push    bc
  657.     call    conin        ; get that char
  658.     pop    bc
  659.     cp    '0'
  660.     ret    z        ; modem initialized
  661.     ld    b,5        ; wait another .5 if garbage
  662.     jr    nx1
  663. ;
  664. ;    Check for call coming in during local mode.  If so, answer it.
  665. ;
  666. chkcal:    ld    a,(chkt1)
  667.     or    a
  668.     ret    nz        ; return if already doing function
  669.     ld    a,(hl)        ; Get BYMODE
  670.     ld    (chkt1),a    ; indicate function running
  671.     push    af
  672.     res    6,(hl)        ; Turn off console
  673.     set    7,(hl)        ; Turn on modem
  674.     set    5,(hl)        ; Ignore Carrier
  675.     call    bconst        ; char avail from modem?
  676.     jp    z,chkca1    ; Nope, continue.
  677.     call    bconin        ; Get modem char
  678.     cp    '2'        ; RING?
  679.     jp    nz,chkca1    ; Nope, must be garbage
  680.     ld    hl,bymode
  681.     set    1,(hl)
  682.     call    mdans1        ; Answer the phone
  683.     call    mdcarck        ; Got carrier?
  684.     jp    z,chkca1    ; Nope
  685.     ld    hl,bymode
  686.     res    6,(hl)
  687.     push    hl
  688.     call    prinpl
  689.     db    cr,lf,'Asking SYSOP if you can get on.',cr,lf+80h
  690.     call    mdcarck        ; Hung up?
  691.     jp    z,chkca1    ; Oh well
  692. chkca2:    call    oconst
  693.     jr    z,chkca3
  694.     call    conin
  695.     jr    chkca2        ; Eat console characters if any
  696. chkca3:    call    go25
  697.     call    prinlc
  698.     curpos    0,24,no
  699.     dc    'Caller, let on ?'
  700.     call    oconin
  701.     ld    (chkt1),a
  702.     call    no25
  703.     call    mdcarck        ; Still with us?
  704.     pop    hl
  705.     jr    z,chkca1    ; Nope, his loss
  706.     set    7,(hl)
  707.     res    6,(hl)        ; Set for remote IO
  708.     ld    a,(chkt1)
  709.     and    'Y'
  710.     cp    'Y'
  711.     jr    z,letliv    ; If Y or y let him on
  712.     call    prinpl
  713.     db    'Sorry, try again later',cr,lf+80h
  714.     call    nxtcal
  715.     jr    chkca1
  716. letliv:    call    prinpl
  717.     db    'He will let you on soon, please hold',cr,lf+80h
  718. chkca1:    xor    a
  719.     ld    (chkt1),a    ; zero out storage
  720.     pop    af        ; Get original BYMODE
  721.     ld    (bymode),a
  722.     ret
  723. chkt1:    ds    1
  724. ;
  725. ; Check for carrier available.  If not there, return with zero flag set.
  726. ;
  727. carok:    push    hl        ; Do we care?
  728.     ld    hl,bymode
  729.     bit    5,(hl)
  730.     pop    hl
  731.     ret    nz        ; Nope
  732.     push    bc
  733.     ld    b,closs*10
  734. carok1:    call    mdcarck        ; Got carrier?
  735.     jr    nz,carok2    ; Yup, great
  736.     call    delay        ; nope, wait awhile
  737.     djnz    carok1        ; try again
  738. carok2:    pop    bc
  739.     ret
  740. ;
  741. ; Carrier lost.  Drop Dead.
  742. ;
  743. lostit:    ld    a,(toflg)
  744.     or    a
  745.     jr    nz,lstit1    ; Check for timed out
  746.  
  747.     call    go25
  748.     call    prinlc
  749.     curpos    60,24,no
  750.     dc    'Carrier Lost'
  751.     call    no25        ; Update status line
  752. ;
  753.     ld    a,bymcio+bymclc
  754.     ld    (bymode),a
  755.     ld    hl,clcmd    ; this is what we want to do
  756.     ld    de,z3cl        ; point to zcpr's command line
  757.     ld    bc,cllen
  758.     ldir
  759. lstit1:    xor    a
  760.     ld    (toflg),a    ; Clear timeout flag
  761.     jp    0        ; Gotta exit this way
  762. ;
  763. clcmd:    cmdln    'BYE'
  764. cllen    equ    $-clcmd
  765. ;
  766. ; Must be too late at night.  He's asleep.
  767. ; Input timed out.
  768. ;
  769. timout:    ld    a,0ffh
  770.     ld    (toflg),a    ; Flag the timeout
  771.     call    prinpl
  772.     db    'Input timed out',7,cr,lf+80h
  773.     call    go25
  774.     call    prinlc
  775.     curpos    60,24,no
  776.     dc    'Timed Out   '
  777.     call    no25        ; Update status line
  778. ;
  779.     ld    a,bymcio+bymclc
  780.     ld    (bymode),a
  781.     ld    hl,tocmd    ; this is what we want to do
  782.     ld    de,z3cl        ; point to zcpr's command line
  783.     ld    bc,tolng
  784.     ldir
  785.     rst    clrou        ; Do a CLOSS restart
  786. ;
  787. tocmd:    cmdln    'BYE'
  788. tolng    equ    $-tocmd
  789. toflg:    defb    0
  790. ;
  791. ;  Routines which process local function keys.
  792. ;
  793. ;    Here are the descriptions
  794. ;    ^L - Toggle Local IO
  795. ;    ^O - Toggle Open access
  796. ;    ^N - Nerdkey, Hang up on the bozo
  797. ;    ^Q - Query the user, (CHAT mode)
  798. ;
  799. fkeys:    ld    hl,bymode    ; BYE in inactive state?
  800.     bit    1,(hl)
  801.     ret    nz        ; Yes, return
  802.     cp    'L'-'@'        ; Control-L ?
  803.     jr    z,toglcl    ; if so, toggle local mode
  804.     cp    'O'-'@'        ; Control-O ?
  805.     jr    z,togope    ; Yes? Toggle security
  806.     cp    'N'-'@'        ; Control-N ?
  807.     jp    z,twitem    ; Goodbye bozo
  808.     cp    'Q'-'@'        ; Control-Q
  809.     jp    z,bychat    ; Go into Chat Mode
  810.     ret            ; Not a BYE function Key
  811. ;
  812. ;  Toggle Local IO Mode
  813. ;
  814. toglcl:    bit    7,(hl)
  815.     jr    z,toglc1    ; If set, reset it.
  816.     res    7,(hl)
  817.     call    go25
  818.     call    prinlc
  819.     curpos    51,24,no
  820.     dc    'Disabled'
  821.     call    no25        ; Update Status line
  822.     jr    endfun
  823. toglc1:    set    7,(hl)
  824.     call    go25
  825.     call    prinlc
  826.     curpos    51,24,yes
  827.     ld    b,8
  828.     call    tab
  829.     call    no25        ; Update Status line
  830.     jr    endfun
  831. ;
  832. ;  Toggle Security
  833. ;
  834. togope:    ld    a,(fstprv)
  835.     or    a        ; Secure?
  836.     jr    z,togop1    ; If so, remove it
  837.     call    setsec        ; Turn on security
  838.     jr    endfun
  839. togop1:    call    ressec        ; Turn it off
  840.     jr    endfun
  841. ;
  842. ;  Hang up on the bum.
  843. ;
  844. twitem:    call    go25
  845.     call    prinlc
  846.     curon    no
  847.     curpos    60,24,no
  848.     dc    'Twited Off  '
  849.     call    no25
  850.     jp    proclc        ; Same as Carrier loss
  851. ;
  852. ;  End Function Key routines
  853. ;
  854. endfun:    xor    a        ; No character entered
  855.     ret
  856. ;
  857. ;  Bye's Chat Mode
  858. ;
  859. bychat:    call    conin        ; pitch out the ^Q
  860.     call    go25
  861.     call    prinlc
  862.     curpos    46,24,no
  863.     dc    'Chat'
  864.     call    no25
  865. bycha2:    call    conin        ; end on control c
  866.     cp    'C'-'@'
  867.     jr    z,bycha3
  868. bycha1:    push    af
  869.     push    hl
  870.     push    bc
  871.     ld    c,a
  872.     call    conout
  873.     pop    bc
  874.     pop    hl
  875.     pop    af
  876.     push    af
  877.     bit    7,(hl)
  878.     call    z,mconout    ; print it to modem if not enabled
  879.     pop    af
  880.     cp    'M'-'@'
  881.     jr    nz,bycha2    ; Loop if not a carriage return
  882.     ld    a,'J'-'@'
  883.     jr    bycha1        ; And append linefeed if there
  884. bycha3:    call    go25
  885.     call    prinlc
  886.     curpos    46,24,no
  887.     dc    '    '
  888.     call    no25
  889.     jr    endfun
  890. ;
  891. retsave:
  892.     pop    de        ; Get return address
  893.     pop    hl        ; Get ZCPR3's return address
  894.     ld    (z3ret),hl    ; Save it
  895.     push    hl
  896.     push    de
  897.     ret
  898. ;
  899. exit:
  900. z3ret    equ    $+1        ; point to code to modify
  901.     ld    hl,0        ; ZCPR's return address
  902.     jp    (hl)        ; Go there
  903. ;
  904. prinlc:    ld    a,(bymode)    ; Get current Mode
  905.     ld    (pritmp),a    ; Save it
  906.     res    7,a        ; turn off modem IO
  907.     set    6,a        ; turn on lcl IO
  908.     ld    (bymode),a
  909.     ex    (sp),ix        ; print the string
  910.     call    print
  911.     ex    (sp),ix
  912.     ld    a,(pritmp)    ; restore mode
  913.     ld    (bymode),a
  914.     ret
  915. pritmp:    db    0
  916. ;
  917. prinpl:    ex    (sp),ix        ; Get string starting address
  918.     call    print        ; Print it
  919.     ex    (sp),ix        ; Since we're pointing to next code location
  920.     ret            ; Go there!
  921. ;
  922. prinlo:    ex    (sp),ix        ; Get string starting address
  923.     call    print        ; Print it
  924.     call    delay        ; My modem is too d**n slow
  925.     ex    (sp),ix        ; Since we're pointing to next code location
  926.     ret            ; Go there!
  927. ;
  928. print:    ld    a,(ix+0)    ; Get next char
  929.     bit    7,a        ; Check for Carry
  930.     push    af
  931.     res    7,a        ; Mask Carry Bit
  932.     ld    c,a
  933.     call    conout        ; Print it
  934.     inc    ix        ; point to next char
  935.     pop    af
  936.     ret    nz
  937.     jr    print
  938. ;
  939. ; Print number of spaces contained in B register.
  940. ;
  941. tab:    push    bc
  942.     ld    c,' '
  943.     call    oconout
  944.     pop    bc
  945.     djnz    tab
  946.     ret
  947. ;
  948. ; Set up 25th Line
  949. ;
  950. go25:    call    prinlc
  951.     enab25    no
  952.     pucu    yes
  953.     ret
  954. ;
  955. ; Return from 25 Line
  956. ;
  957. no25:    call    prinlc
  958.     pocu    no
  959.     disab25    yes
  960.     ret
  961. ;
  962. ;.1 sec delay routine
  963. ;
  964. delay:    push    bc
  965.     ld    bc,4167*(mhz/10)+417*(mhz mod 10) ; constant * MHz10x
  966. ;
  967. delay1:    dec    bc
  968.     ld    a,b
  969.     or    c
  970.     jr    nz,delay1
  971.     pop    bc
  972.     ret
  973. ;
  974. ;.001 sec delay routine
  975. ;
  976. sdelay:    push    bc
  977.     ld    bc,42*(mhz/10)+4*(mhz mod 10) ; constant * MHz10x
  978.     jr    delay1
  979. ;
  980. ;
  981. ; Long delay routine, B contains # of .1 sec delays
  982. ;
  983. ldelay:    call    delay
  984.     dec    b
  985.     jr    nz,ldelay
  986.     ret
  987. ;
  988. newbio:    ld    hl,(bios+1)    ; Point to bios start
  989.     ld    l,0
  990.     ld    de,tolst    ; Point to storage table
  991.     ld    bc,tolen-tolst    ; table length
  992.     ldir            ; Save old jump table
  993.     ld    hl,tnlst    ; Point to new jump table
  994.     ld    de,(bios+1)
  995.     ld    e,0
  996.     ld    bc,tnlen-tnlst
  997.     ldir            ; We are now running under BYE
  998.     ret
  999. ;
  1000. oldbio:    ld    hl,tolst    ; Put things back the way they were
  1001.     ld    de,(bios+1)
  1002.     ld    e,0
  1003.     ld    bc,tolen-tolst
  1004.     ldir
  1005.     ret
  1006. ;
  1007. tolst:
  1008. ocboot:        jp    0
  1009. owboot:        jp    0    ; This will hold the BIOS routines
  1010. oconst:        jp    0    ;  BYE will modify
  1011. oconin:        jp    0
  1012. oconout:    jp    0
  1013. olist:        jp    0
  1014. opunch:        jp    0
  1015. oreader:    jp    0
  1016. tolen:
  1017. ;
  1018. tnlst:
  1019. cboot:
  1020.          if    obye    ; Emulate Old BYE?
  1021.         jp    fakeit
  1022.          else
  1023.         jp    0
  1024.          endif
  1025. wboot:        jp    owboot    ; Here is the new jump table
  1026. const:        jp    bconst
  1027. conin:        jp    bconin
  1028. conout:        jp    bconout
  1029. list:        jp    mconout
  1030. punch:        jp    bconout
  1031. reader:        jp    bconin
  1032. tnlen:
  1033. ;
  1034. ;  Structure to look like the old byes
  1035. ;
  1036.      if obye
  1037. fakeit:    ds    15
  1038.     dw    oconout
  1039.     db    'BYE'
  1040.      endif
  1041. ;
  1042. ;  Routines patched in by BYE
  1043. ;
  1044. bconst:    ld    a,(z3whl)
  1045.     ld    hl,owheel    ; check for wheel change
  1046.     cp    (hl)
  1047.     jr    z,bcst3
  1048.     ld    (owheel),a
  1049.     or    a        ; wheel set?
  1050.     call    z,usrdru    ; then set remote dru
  1051.     call    nz,sysdru    ; else set sysop dru
  1052. bcst3:    ld    hl,bymode    ; local console enabled?
  1053.     bit    6,(hl)
  1054.     jr    z,bcst1        ; nope, don't check
  1055.     push    hl        ; used later
  1056.     bit    1,(hl)        ; In local mode ?
  1057.     call    nz,chkcal    ; check for a caller
  1058.     ld    a,(lchar)    ; got an uneaten one?
  1059.     or    a
  1060.     jr    nz,bcst2    ; Yup, still have it
  1061.     call    oconst        ; check con status
  1062.     or    a
  1063.     pop    hl
  1064.     ld    (lchar),a    ; flag local char
  1065.     ld    (lclst),a
  1066.     jr    z,bcst1        ; no char
  1067.     push    hl
  1068.     call    oconin        ; get local char
  1069.     call    fkeys        ; check and process local function keys
  1070. bcst2:    pop    hl
  1071.     ld    (lchar),a    ; store away char
  1072.     ret
  1073. ;
  1074. bcst1:    bit    7,(hl)        ; Modem enabled?
  1075.     ret    z        ; Nope, don't bother
  1076.     call    carok        ; Check for carrier
  1077.     jp    z,clrou        ; Fool dropped carrier on us
  1078.     call    mdinst        ; Check for modem status
  1079.     ret    nz        ; Everything's hunkey dory
  1080. ;
  1081.      if    timeout
  1082.     push    hl
  1083.     ld    hl,bymode
  1084.     bit    5,(hl)        ; Paying attention to carrier
  1085.     jr    nz,ndata
  1086.     ld    hl,tocnt    ;No data, incr. timeout counter
  1087.     inc    (hl)
  1088.     jr    nz,ndata    ;don't timeout yet
  1089.     inc    hl
  1090.     inc    (hl)        ;next byte of counter
  1091.     jr    nz,ndata
  1092.     ld    hl,toval    ;1 "minute", no data
  1093.     dec    (hl)
  1094.     jr    nz,ndata    ;still not timed out...
  1095.     jp    timout        ;finally... timed out...
  1096. ;
  1097. ndata:
  1098.     xor    a        ;no character for sure
  1099.     pop    hl
  1100.      endif    ; Timeout
  1101.     ret
  1102. ;
  1103. toval:    ds    1
  1104. tocnt:    ds    2
  1105. lchar:    db    0
  1106. owheel:    db    0
  1107. ;
  1108. bconin:    call    bconst        ; Wait for char avail
  1109.     or    a
  1110.     jr    z,bconin
  1111. ;
  1112.      if    timeout
  1113.     xor    a        ; Clear timeout
  1114.     ld    (tocnt),a
  1115.     ld    (tocnt+1),a
  1116.     ld    a,tmins
  1117.     ld    (toval),a
  1118.      endif    ;timeout
  1119. ;
  1120.     ld    hl,bymode    ; local con enabled?
  1121.     bit    6,(hl)
  1122.     jr    z,bcin1        ; Nope, skip
  1123.     ld    a,(lchar)    ; Get local status
  1124.     or    a
  1125.     jr    z,bcin1        ; it was not local
  1126.     push    af
  1127.     xor    a        ; clear local character
  1128.     ld    (lchar),a    ; hit.
  1129.     pop    af
  1130.     ret
  1131. bcin1:    jp    mdinp
  1132. ;
  1133. bconout:
  1134.     ld    hl,bymode    ; local con enabled?
  1135.     bit    7,(hl)        ; remote con enabled?
  1136.     jr    z,bcou1        ; nope, skip
  1137.     push    hl
  1138.     push    bc        ; in case of trashed char
  1139.     call    carok        ; Check for carrier
  1140.     jp    z,clrou        ; Fool dropped carrier on us
  1141.     call    mconout
  1142.     pop    bc
  1143.     pop    hl
  1144. ;
  1145. bcou1:    bit    6,(hl)
  1146.     ret    z        ; nope, done
  1147.     call    oconout        ; print it
  1148.     ret
  1149. ;
  1150. ;  Modem Conout routine
  1151. ;
  1152. mconout:
  1153.     call    mdoutst
  1154.     jr    z,mconout    ; wait till we can do it
  1155.     ld    a,c
  1156.     call    mdoutp        ; do it
  1157.     ret
  1158. ;
  1159.     .8080
  1160. ;--------------------- Insert MBYE modem routines here -----------------------
  1161. ;
  1162. ; NOTE: Be sure to remove the ':'s before the EQU statements, M80 chokes on 'em
  1163. ;
  1164. ;-------------------- End of computer dependent routines ---------------------
  1165.     .z80
  1166. ;
  1167.      if2
  1168.      if    $ ge (rcp+rcps*128)
  1169.     .printx ->This RCP is too large, don't try to run it.<-
  1170.      endif
  1171.      endif
  1172. ;
  1173.     .dephase
  1174. byend:
  1175.     end
  1176. s must return status
  1177. ; flags, so please be careful to set the flags as directed.
  1178. ;
  1179. ; NOTE: set NORING EQU YES in the main MBYE program if you have an SIO
  1180. ; chip. Normally, the SIO doesn't allow monitoring of the RI status.
  1181. ; The DART, however, does have RI has a standard function. If you have
  1182. ; a DART, set NORING EQU NO (unless you are using a Smartmodem). (Also
  1183. ; set DART EQU YES below.)
  1184. ;
  1185. ; This version is for the Zilog SIO chip that is hooked up to an extern-
  1186. ; al modem.  A Z80-CTC or 8116 can be used as baud rate generator. If
  1187. ; you have a KAYPRO, XEROX 820-II, or another "BigBoard"-based system,
  1188. ; set the KAYPRO equate true and the rest is automatic.
  1189. ;
  1190. ;-----------------------------------------------------------------------
  1191. ;
  1192. ; 02/21/84  Removed exclaimation mark from comment      - Kim Levitt oops!
  1193. ; 02/20/84  Added comments for XEROX 820-II & BigBoards,
  1194. ;        code for DARTs and modified SIOs to read RI - Kim Levitt
  1195. ; 02/02/84  Fixed and renamed to work with MBYE 3.0    - Kim Levitt
  1196. ;        (Also added conditional equates 8116, CTC and KAYPRO.)
  1197. ; 11/27/83  Altered and renamed to work with BYE3    - Irv Hoff
  1198. ; 08/04/83  Updated for use with ByeII version 1.6    - Paul Traina
  1199. ; 07/19/83  Improved operation of modem initialization.    - Paul Traina
  1200. ; 04/18/83  Added option to use 300/1200 Smartmodem.    - Don Brown
  1201. ; 04/14/83  Added option for alt. CTC baud set format.    - Paul Traina
  1202. ; 02/21/83  Initial version.                - Steve Fox
  1203. ;
  1204. ;-----------------------------------------------------------------------
  1205. ;
  1206. KAYPRO    EQU    YES        ;yes, if Kaypro, Xerox 820 or BigBoard
  1207. ;
  1208.      IF    KAYPRO
  1209. CTC    EQU    NO
  1210. C8116    EQU    YES        ;BigBoards use the 8116 baud rate clock
  1211.      ENDIF
  1212. ;
  1213.      IF    NOT KAYPRO
  1214. CTC    EQU    YES
  1215. C8116    EQU    NO        ;most other systems use CTC
  1216.      ENDIF
  1217. ;
  1218. ; Set base ports for SIO/DART & baud rate clock
  1219. ;
  1220.      IF    KAYPRO
  1221. DART    EQU    NO        ;BigBoards use a true SIO
  1222. BASEP    EQU    04H        ;Base port for SIO
  1223. BASEC    EQU    00H        ;Base port for 8116
  1224.      ENDIF
  1225. ;
  1226.      IF    NOT KAYPRO
  1227. DART    EQU    NO        ;Yes, if DART used and not SIO
  1228. BASEP    EQU    20H        ;Set Base port for SIO (data port)
  1229. BASEC    EQU    32H        ;Set Base port for CTC
  1230.      ENDIF
  1231. ;
  1232. ; The following define the port addresses to use.
  1233. ;
  1234. DPORT    EQU    BASEP        ;Data port
  1235. SPORT    EQU    BASEP+2        ;Status/Control port
  1236. BPORT    EQU    BASEC        ;Baud rate port
  1237. ;
  1238. ;
  1239. ; The following are SPORT commands (output these to SPORT)
  1240. ;
  1241. ; WR0:
  1242. RESCHN    EQU    00011000B    ;Reset channel
  1243. RESSTA    EQU    00010000B    ;Reset ext/status
  1244. RESERR    EQU    00110000B    ;Error reset
  1245. ;
  1246. WRREG1    EQU    00000000B    ;WR1 - No interrupts
  1247. WRREG3    EQU    11000001B    ;WR3 - Rx 8 bits/char, Rx enable
  1248. WRREG4    EQU    01000100B    ;WR4 - 16x, 1 stop bit, no parity
  1249. ;
  1250. ; WR5:
  1251. DTROFF    EQU    01101000B    ;DTR off, Tx 8 bits, Tx enable, RTS off
  1252. DTRON    EQU    11101010B    ;DTR on, Tx 8 bits, Tx enable, RTS on
  1253. ;
  1254. ;
  1255. ; The following are SPORT status masks
  1256. ;
  1257. ; RR0:
  1258. DAV    EQU    00000001B    ;Data available
  1259. TBMT    EQU    00000100B    ;Transmit buffer empty
  1260. DCD    EQU    00001000B    ;Data carrier detect
  1261. RI    EQU    00010000B    ;Ring Indicator (DARTs only)
  1262. ;
  1263. ;(Normally, only DARTs can detect Ring Indicator...... HOWEVER,
  1264. ; with special wiring to SYNC pin, SIOs can detect RI on this bit
  1265. ; in asynchronous receive mode, wheras it is normally used only
  1266. ; in synchronous mode. If you have this hardware mod done, your
  1267. ; SIO will in effect function as a DART and this "SYNC/HUNT" bit
  1268. ; in read reg. 0 will function as a RI status bit.) (Connect
  1269. ; SYNCA pin 11 of SIO to pin 22 of RS-232C connector, not sure if
  1270. ; any intermediate circut is necessary, though, so DON'T TRY IT
  1271. ; UNLESS YOU KNOW WHAT YOU'RE DOING and really NEED ring detect,
  1272. ; a