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 / ZBYE.MAC < prev    next >
Text File  |  2000-06-30  |  30KB  |  1,325 lines

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