home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / appleii / appcat.m65 < prev    next >
Text File  |  2020-01-01  |  12KB  |  794 lines

  1. ;******************************************************************
  2. ;
  3. ; KERMIT385-APPLE-CAT DRIVER - APP385.CA
  4. ;
  5. ; 9/05/90 V1.2
  6. ;
  7. ; LST OFF,NOASYM
  8. ;
  9. ; DICK WOTIZ
  10. ;
  11. ; DICK@PORTAL.COM,
  12. ; {UUNET|SUN}!PORTAL!DICK
  13. ;
  14. ;
  15. ;  THIS DRIVER IS FOR THE NOVATION APPLE-CAT II INTERNAL MODEM.
  16. ;
  17. ;
  18. ; FEATURES:
  19. ;
  20. ;  USES THE MODEM'S FIRMWARE ROM FOR DIALING.
  21. ;  TYPE ';' FOR 2-SECOND PAUSE, OR ANY CONTROL CHARACTER TO ABORT.
  22. ;  ROM NOT NEEDED IF EXTERNAL PHONE IS USED FOR DIALING.
  23. ;
  24. ;  SUPPORTS 110-600 BAUD, AND 45.5 BAUD (USE KERMIT'S 135 BAUD SETTING)
  25. ;  SUPPORTS 1200 BAUD WITH APPLE-CAT 212 CARD, IN SLOT-SAVER CONFIGURATION.
  26. ;
  27. ;  ALLOWS USE OF EXTERNAL SERIAL PORT BY TYPING 'X' AS DIALING STRING.
  28. ;
  29. ;******************************************************************
  30. ;
  31. ;
  32. ;
  33. ;
  34. ;    $Header: appcat.m65,v 1.2 89/11/06 11:40:36 medin Locked $
  35. ;    $log$
  36. ;--->>>>> dont forget to update the version <<<<<---
  37.  
  38.  ORG $1005
  39.  DW HDRMSG ;DRIVER NAME POINTER
  40. ;
  41.  ORG $100C
  42.  DW BUFEND ;BUFFER END POINTER
  43.  ORG $1020
  44. ;
  45.  JMP INIT ;MODEM CONTROL VECTORS
  46.  JMP COMCMD
  47.  JMP CHKRECV
  48.  JMP RCVBYTE
  49.  JMP XMTBYTE
  50.  JMP HANGUP
  51. ;
  52.  ORG $7f00        ;[1.2]
  53. ;
  54.  MSB ON
  55. ;
  56. ACC EQU $45 ;APPLE STUFF
  57. IN EQU $200
  58. IRQLOC EQU $3FE
  59. ;
  60. BAUD EQU $1003 ;KERMIT STUFF
  61. SLOTN0 EQU $1007
  62. INITFLG EQU $1008
  63. DRVRADR EQU $1009
  64. FLAGS EQU $100B
  65. BRKLEN EQU $100E
  66. REFRFLG EQU $1011 ;[1.2]
  67. DELAY EQU $1040
  68. PRMSG EQU $1043
  69. GETKEY EQU $1046
  70. PRCR EQU $1049
  71. DOPARITY EQU $104F
  72. CLREOL EQU $1084
  73. ;
  74. KEYBD EQU $C000 ;APPLE I/O STUFF
  75. SETSTDZP EQU $C008
  76. SETALTZP EQU $C009
  77. KRESET EQU $C010
  78. RDLCBNK2 EQU $C011
  79. RDLCRAM EQU $C012
  80. RDALTZP EQU $C016
  81. WRRAM2 EQU $C081
  82. ;
  83. MVIDLO EQU $478 ;MODEM ROM DIALING STUFF
  84. MVIDHI EQU $4F8
  85. MN0SAVE EQU $6F8
  86. MASAVE EQU $778
  87. MCNSAVE EQU $7F8
  88. ;
  89. SWBYT EQU $C080 ;MODEM I/O STUFF
  90. DACBYT EQU $C080
  91. SQUBYT EQU $C081
  92. SHBYT EQU $C082
  93. BSRBYT EQU $C083
  94. RECBYT EQU $C089
  95. CON EQU $C08A
  96. INDAT EQU $C08B
  97. SPDBYT EQU $C08B
  98. COM EQU $C08C
  99. ACBYT EQU $C08D
  100. XMTBYT EQU $C08D
  101. OUTDAT EQU $C08E
  102. STATUS EQU $C08F
  103. DEVBYT EQU $C08F
  104. ;
  105. DFBC0 EQU $FBC0 ;APPLE ROM STUFF
  106. WAIT EQU $FCA8
  107. PRBYTE EQU $FDDA
  108. COUT EQU $FDED
  109. ROMIRQ EQU $FFFE
  110. ;
  111. ;
  112. PGMBEG EQU *
  113. ;
  114.  DFB $90,$09,$05,$D2,$C1,$D7 ;ID STRING
  115. ;
  116. RBUFIXW DFB 0 ;RECV BUF WRITE INDEX
  117. RBUFIXR DFB 0 ;RECV BUF READ INDEX
  118. XBUFIXW DFB 0 ;XMIT BUF WRITE INDEX
  119. XBUFIXR DFB 0 ;XMIT BUF READ INDEX
  120. IRQSAVE DW 0 ;OLD IRQ VECTOR
  121. STOPACK DFB 0 ;^S FLAGS
  122. STOPREQ DFB 0 ; "
  123. DLYCNT DFB 0 ;DELAY COUNTER
  124. XMTSAV DFB 0
  125. SLOTN DFB 0 ;SLOT NUMBER
  126. XSAVE DFB 0
  127. CARRDLY DFB 0 ;CARRIER DROP DELAY COUNT
  128. CARRFLG DFB 0 ;CARRIER DET FLAG
  129. MDMFLAG DFB 0 ;MODEM INITTED FLAG
  130. EXTFLAG DFB 0 ;EXTERNAL PORT FLAG
  131. ;
  132. INTBITS DFB $02 ;MODEM REGISTER BITS
  133. RDRFBIT DFB $08
  134. ;
  135. HDRMSG nasc <CAT V1.2> 0    ;[1.2]
  136.  DFB 0
  137. MSGS EQU *
  138. ADRMSG nasc <COM RTN ASM > 0
  139.  nasc <TOO LOW> 0
  140.  DFB $8D,0
  141. CMDMSG DFB $3C
  142.  nasc <- BAD COM CMD> 0
  143.  DFB $8D,0
  144. DIALMSG nasc <DIAL/X:> 0
  145.  DFB 0
  146. WAITMSG DFB $8D ;[1.2]
  147.  nasc <WAITING> 0
  148.  DFB $8D,0
  149. CONNMSG nasc <CONNECT> 0
  150.  DFB $87,$8D,0
  151. HANGMSG DFB $8D
  152.  nasc <HUNG UP> 0
  153.  DFB $8D,0
  154. ;
  155. ;
  156. FALSINT PLA
  157.  TAX
  158. JMPLOC JMP (IRQSAVE)
  159. ;
  160. ;
  161. IRQVEC1 TXA  ;NORMAL VECTOR
  162.  PHA
  163. IRQVEC2 LDA STATUS ;ENH IIE VECTOR
  164. ADDR1 EQU *-2
  165.  BIT INTBITS ;MODEM IRQ?
  166.  BEQ FALSINT ;NO, BR
  167.  BIT RDRFBIT ;RDRF?
  168.  BEQ FALSINT ;NO, BR
  169.  AND #$40 ;FRAMING ERR?
  170.  BEQ RECVOK ;NO, BR
  171.  LDA #'+$80
  172.  BNE RECV2
  173. RECVOK LDA INDAT
  174. ADDR2 EQU *-2
  175. RECV2 LDX RBUFIXR
  176.  STA RECVBUF,X ;SAVE BYTE
  177. RBUFIXH EQU *-1
  178.  PHA
  179.  LDA XMTSAV
  180.  STA XMTBYT ;RESET RDRF, IRQ
  181. ADDR3 EQU *-2
  182.  PLA
  183.  BIT FLAGS ;CHECK FOR FLOW?
  184.  BPL L7BCC ;NO, BR
  185.  AND #$7F
  186.  CMP #$11 ;^Q?
  187.  BNE L7BBA ;NO, BR
  188.  LDA #$BF
  189.  AND FLAGS ;CLEAR ^S FLAG
  190.  BCS L7BBF ;BR ALWAYS
  191. ;
  192. L7BBA CMP #$13 ;^S?
  193.  BNE L7BCC ;NO, BR
  194.  LDA #$40
  195.  ORA FLAGS
  196. L7BBF STA FLAGS ;SET ^S FLAG
  197.  BCS INTRET ;BR ALWAYS
  198. ;
  199. L7BCC INC RBUFIXR ;INCR RECV BUFPTR
  200.  BNE INTRET
  201.  LDX RBUFIXH
  202.  INX
  203.  CPX #XMITBUF^
  204.  BNE L7BDB
  205.  LDX #RECVBUF^
  206. L7BDB STX RBUFIXH
  207. INTRET PLA
  208.  TAX
  209.  LDA ACC
  210. RTILOC RTI
  211. ;
  212. ;
  213. ;
  214. INIT SEI
  215.  LDA IRQSAVE+1 ;ALREADY INITTED?
  216.  BNE INITTED ;YES, BR
  217.  LDA IRQLOC
  218.  STA IRQSAVE ;SAVE IRQ ADDR
  219.  LDA IRQLOC+1
  220.  STA IRQSAVE+1
  221.  LDA #PGMBEG^
  222.  CMP DRVRADR+1 ;START ADDR OK?
  223.  BCC INIT3
  224.  BNE INITOK ;YES, BR
  225. INIT2 LDA DRVRADR
  226.  BEQ INITOK
  227. INIT3 LDX #ADRMSG\
  228.  JSR PRMSGY
  229.  LDA #0
  230. INITTED CLI
  231.  RTS
  232. ;
  233. INITOK EQU *
  234. ;
  235.  LDA DFBC0 ;SAVE ACCUM. DURING IRQ?
  236.  BEQ NOSAVE ;NO, BR (NOT IIE)
  237.  CMP #$E0
  238.  BNE NOTENH2
  239. NOSAVE LDA RTILOC
  240.  STA INTRET
  241.  LDA #IRQVEC2\
  242.  STA IRQLOC
  243.  LDA #IRQVEC2^
  244.  STA IRQLOC+1
  245.  LDX #0
  246. NOSAVLP LDA JMPLOC,X
  247.  STA FALSINT,X
  248.  INX
  249.  CPX #$03
  250.  BNE NOSAVLP
  251.  LDX #$00
  252.  BIT RDLCBNK2
  253.  BMI NOSAV2
  254.  LDX #$08
  255. NOSAV2 BIT RDLCRAM
  256.  BPL NOSAV3
  257.  INX
  258.  INX
  259. NOSAV3 BIT WRRAM2 ;READ ROM, WRITE RAM
  260.  BIT WRRAM2
  261.  DFB $DA ;PHX
  262.  LDA RDALTZP
  263.  ASL A
  264.  LDY #$01
  265. NOSAVL2 LDA ROMIRQ,Y ;COPY IRQ VECTOR
  266.  STA SETALTZP ;INTO BOTH BANKS
  267.  STA ROMIRQ,Y
  268.  STA SETSTDZP
  269.  STA ROMIRQ,Y
  270.  DEY
  271.  BPL NOSAVL2
  272.  BCC NOSAV4
  273.  STA SETALTZP
  274. NOSAV4 DFB $FA ;PLX
  275.  DFB $3C
  276.  DW WRRAM2 ;BIT WRRAM2,X
  277.  DFB $3C
  278.  DW WRRAM2 ;BIT WRRAM2,X
  279.  JMP INITPTR
  280. ;
  281. NOTENH2 LDA #IRQVEC1\
  282.  STA IRQLOC
  283.  LDA #IRQVEC1^
  284.  STA IRQLOC+1
  285. INITPTR LDA #$00
  286.  STA RBUFIXW ;INIT POINTERS
  287.  STA RBUFIXR
  288.  STA XBUFIXW
  289.  STA XBUFIXR
  290.  LDA #RECVBUF^
  291.  STA RBUFIXH
  292.  STA RCVADRH
  293.  LDX SLOTN0
  294.  TXA
  295.  LSR A
  296.  LSR A
  297.  LSR A
  298.  LSR A
  299.  STA SLOTN
  300. ;
  301.  CLC
  302.  TXA
  303.  ADC #SWBYT\
  304.  STA ADDR8 ;SELF-MODIFYING CODE... YECCHH!!!
  305. ;[1.2] TXA
  306. ;[1.2] ADC #INDAT\
  307.  ADC #INDAT-SWBYT [1.2]
  308.  STA ADDR2
  309. ;[1.2] TXA
  310. ;[1.2] ADC #COM\
  311.  ADC #COM-INDAT [1.2]
  312.  STA ADDR12
  313.  STA ADDR13
  314. ;[1.2] TXA
  315. ;[1.2] ADC #XMTBYT\
  316.  ADC #XMTBYT-COM [1.2]
  317.  STA ADDR3
  318.  STA ADDR11
  319. ;[1.2] TXA
  320. ;[1.2] ADC #ACBYT\
  321.  STA ADDR9
  322.  STA ADDR10
  323. ;[1.2] TXA
  324. ;[1.2] ADC #OUTDAT\
  325.  ADC #OUTDAT-XMTBYT [1.2]
  326.  STA ADDR5
  327.  STA ADDR7
  328. ;[1.2] TXA
  329. ;[1.2] ADC #STATUS\
  330.  ADC #STATUS-OUTDAT [1.2]
  331.  STA ADDR1
  332.  STA ADDR4
  333.  STA ADDR6
  334. ;
  335.  LDA #0 ;INIT MODEM
  336.  STA SHBYT,X ;HANG UP PHONE
  337.  STA DACBYT,X
  338.  STA EXTFLAG
  339.  STA REFRFLG ;DON'T REDRAW SCREEN [1.2]
  340.  LDA #$06
  341.  STA BSRBYT,X
  342.  JSR SETREC
  343.  LDA #$0C
  344.  STA COM,X
  345. ;
  346. DIAL LDX #DIALMSG\
  347.  JSR PRMSGY
  348. ;
  349.  LDA #$A0
  350.  LDX #0
  351. DGETNXT STX XSAVE
  352.  JSR COUT
  353. DGETNX2 JSR GETKEY ;GET PHONE NUMBER
  354.  ORA #$80
  355.  LDX XSAVE
  356.  STA IN,X ;SAVE IT IN BUFFER
  357.  INX
  358.  CMP #$88
  359.  BNE NOBS
  360.  DEX
  361.  BEQ DGETNX2
  362.  DEX
  363.  JMP DGETNXT
  364. NOBS CMP #$8D
  365.  BEQ DGETOK
  366.  CMP #$A0
  367.  BCS NOESC
  368.  JSR HANGUP
  369.  LDA #0
  370.  RTS
  371. NOESC CPX #80
  372.  BNE DGETNXT
  373.  DEX
  374.  LDA #$87
  375.  BNE DGETNXT
  376. ;
  377. ;[1.1]DGETOK JSR CLREOL
  378. DGETOK                ;[1.1]
  379.  JSR PRCR
  380.  LDA IN ;GET FIRST CHAR
  381. ;[1.1] CMP #$58 ;'X'=EXTERNAL PORT?
  382. ;[1.2] CMP #'x+$80            ;[1.1] 'X'=EXTERNAL PORT?
  383. ;[1.2] BEQ DEXT ;YES, BR
  384. ;[1.1] CMP #$78
  385.  AND #$DF ;[1.2]
  386.  CMP #'X+$80            ;[1.1] try both cases
  387.  BNE DNOEXT
  388. ;DEXT LDA #$FF ;[1.2]
  389.  STA EXTFLAG
  390. ;[1.2] BNE DIALEN2
  391.  BEQ DIALEN2 ;[1.2]
  392. DNOEXT LDX SLOTN
  393.  LDA #RTS1-1\
  394.  STA MVIDLO,X ;SET VIDOUT ADDR
  395.  LDA #RTS1-1^
  396.  STA MVIDHI,X
  397. ;
  398.  TXA
  399.  ORA #$C0 ;SLOTCN
  400.  STA ADDRD
  401. ;
  402.  LDX SLOTN0
  403.  LDA #$18
  404.  STA XMTBYT,X ;TURN OFF XMIT
  405.  LDA #$02
  406.  STA SHBYT,X ;PICK UP PHONE
  407.  LDA #$A3
  408.  STA SQUBYT,X ;TURN ON SPKR
  409. ;
  410.  JSR WAIT3
  411. ;
  412.  LDA #'T+$80 ;SELECT TONE DIALING
  413.  JSR DIALCH
  414.  LDA #';+$80 ;DELAY 2 SECONDS
  415.  JSR DIALCH
  416. ;
  417.  LDX #0
  418. DIALLP LDA IN,X
  419.  CMP #$8D
  420.  BEQ DIALEND
  421.  STX XSAVE
  422.  JSR DIALCH ;DIAL THE DIGIT
  423.  LDX XSAVE
  424.  INX
  425.  CPX #80
  426.  BNE DIALLP
  427. ;
  428. DIALEND JSR WAIT3 ;WAIT A BIT
  429. ;[1.2] LDX #WAITMSG\
  430. ;[1.2] JSR PRMSGY ;DISPLAY 'WAITING' MESSAGE
  431. ;
  432. DIALEN2 LDA #$05
  433.  STA COM
  434. ADDR13 EQU *-2
  435. ;
  436.  LDA #1
  437.  STA CARRFLG ;SET DIALED FLAG
  438. ;
  439. RTS1 RTS
  440. ;
  441. ;
  442. WAIT3 LDA #0
  443.  JSR WAIT
  444.  JSR WAIT
  445.  JMP WAIT
  446. ;
  447. ;
  448. DIALCH ORA #$80
  449.  CMP #'*+$80 ;CONVERT '*' CHAR
  450.  BNE DIALCH1
  451.  LDA #':+$80
  452. DIALCH1 CMP #';+$80 ;CONVERT PAUSE CHAR
  453.  BNE DIALCH2
  454.  LDA #'*+$80
  455. DIALCH2 STA MASAVE
  456.  LDX ADDRD ;SLOTCN
  457.  STX MCNSAVE
  458.  LDY SLOTN0
  459.  STY MN0SAVE
  460.  BIT $CFFF
  461.  LDA $FF00 ;ENABLE CARD ROM
  462. ADDRD EQU *-1
  463.  CMP #$38 ;ROM INSTALLED?
  464.  BNE NOROM ;NO, BR
  465.  LDA MASAVE ;GET BACK CHAR
  466.  JSR $CC0A ;CALL DIALING SUBR
  467. NOROM BIT $CFFF ;DISABLE CARD ROM
  468.  RTS
  469. ;
  470. ;
  471. CHKCARR LDA CARRFLG ;LOOK FOR CARRIER?
  472.  BMI CARRRTS ;NO, BR
  473.  LDA EXTFLAG
  474.  BNE CEXT
  475.  LDA BAUD
  476.  CMP #8 ;300 BAUD?
  477.  BCS C1200 ;NO, BR
  478.  LDA SWBYT
  479. ADDR8 EQU *-2
  480.  AND #$20
  481.  BCC CARRBR ;BR ALWAYS
  482. ;
  483. C1200 LDA ACBYT ;CHECK 1200 BAUD
  484. ADDR9 EQU *-2
  485.  AND #$04
  486.  BCS CARRBR ;BR ALWAYS
  487. ;
  488. CEXT LDA ACBYT ;CHECK EXTERNAL PORT
  489. ADDR10 EQU *-2
  490.  AND #$08
  491. CARRBR BEQ NOCARR
  492. ;
  493. HAVCARR LDA CARRFLG ;HAD CARRIER BEFORE?
  494.  BEQ CARRRTS ;YES, BR
  495.  LDA #0
  496.  STA CARRFLG ;SET FLAGS
  497.  STA CARRDLY
  498.  LDA XMTSAV
  499.  STA XMTBYT ;ENABLE MODEM XMITTER
  500. ADDR11 EQU *-2
  501.  LDA #$06
  502.  STA COM ;ENABLE RECV IRQ
  503. ADDR12 EQU *-2
  504. ;
  505.  STX XSAVE
  506.  JSR SETBAUD
  507. ;
  508.  LDX #CONNMSG\
  509.  JSR PRMSGY ;PRINT MESSAGE
  510. ;
  511.  LDX XSAVE
  512. ;
  513.  LDA #0
  514. CARRRTS RTS
  515. ;
  516. NOCARR LDA CARRFLG ;HAD CARRIER BEFORE?
  517. ;[1.2] BNE CARRRTS ;NO, BR
  518.  BEQ NOCARR1 ;YES, BR [1.2]
  519.  CMP #1 ;WAIT MESSAGE ALREADY DISPLAYED? [1.2]
  520.  BNE CARRRTS ;YES, BR [1.2]
  521.  STX XSAVE [1.2]
  522.  LDX #WAITMSG\ [1.2]
  523.  JSR PRMSGY ;DISPLAY 'WAITING' MESSAGE [1.2]
  524.  LDX XSAVE [1.2]
  525.  INC CARRFLG [1.2]
  526.  RTS  [1.2]
  527. ;
  528. NOCARR1 LDA #25
  529.  JSR WAIT
  530.  DEC CARRDLY ;WAITED LONG ENOUGH?
  531.  BNE CARRRTS ;NO, BR
  532.  JMP HANGUP ;YES, HANG UP
  533. ;
  534. ;
  535. CHKRECV JSR CHKCARR ;HAVE CARRIER?
  536.  BEQ CHKRCV1 ;YES, BR
  537.  LDA #0
  538.  BEQ CHKRRTS
  539. CHKRCV1 JSR CHKXMIT ;CHECK XMIT BUFFER
  540.  SEI
  541.  LDA RBUFIXW
  542.  CMP RBUFIXR ;RECV BUFFER EMPTY?
  543.  BNE CHKRCV2 ;NO, BR
  544.  LDA RBUFIXH
  545.  CMP RCVADRH
  546. CHKRCV2 CLI
  547. CHKRRTS RTS
  548. ;
  549. ;
  550. RCVBYTE JSR CHKXMIT
  551.  SEI
  552.  LDX RBUFIXW
  553.  LDA RECVBUF,X ;GET A BYTE
  554. RCVADRH EQU *-1
  555.  INC RBUFIXW ;UPDATE POINTER
  556.  BNE RCVBYT3
  557.  LDY RCVADRH
  558.  INY
  559.  CPY #XMITBUF^
  560.  BNE RCVBYT2
  561.  LDY #RECVBUF^
  562. RCVBYT2 STY RCVADRH
  563. RCVBYT3 CLI
  564.  RTS
  565. ;
  566. ;
  567. XMTBYTE SEI
  568.  LDX XBUFIXW
  569.  STA XMITBUF,X ;SAVE BYTE IN XMIT BUFFER
  570.  INC XBUFIXW
  571.  CLI
  572. ;
  573. CHKXMIT SEI
  574.  LDA STATUS
  575. ADDR4 EQU *-2
  576.  AND #$10 ;TDRE ON?
  577.  BEQ CXRET ;NO, BR
  578.  BIT FLAGS ;WAITING ON ^S?
  579.  BPL NOCTRLS ;IGNORE ^S, BR
  580.  BVS CXRET ;^S RECV'D, BR
  581.  LDA STOPREQ ;READY TO STOP?
  582.  BEQ CHKXMT2 ;NO, BR
  583.  LDA STOPACK ;STOPPED?
  584.  BNE NOCTRLS ;YES, BR
  585.  LDA #$13 ;SEND ^S
  586.  STA STOPACK
  587.  BNE SENDSQ
  588. CHKXMT2 LDA STOPACK ;STOPPED?
  589.  BEQ NOCTRLS ;NO, BR
  590.  LDA #$00
  591.  STA STOPREQ
  592.  STA STOPACK
  593.  LDA #$11 ;SEND ^Q
  594. SENDSQ JSR DOPARITY
  595.  JMP SENDIT
  596. ;
  597. NOCTRLS LDA XBUFIXW ;BUFFER EMPTY?
  598.  CMP XBUFIXR
  599.  BEQ CXRET ;YES, BR
  600.  LDX XBUFIXR
  601.  LDA XMITBUF,X
  602.  INC XBUFIXR
  603. SENDIT STA OUTDAT ;XMIT NEXT BYTE
  604. ADDR5 EQU *-2
  605. ;
  606. CXRET CLI
  607.  RTS
  608. ;
  609. ;
  610. HANGUP SEI
  611.  LDA IRQSAVE+1 ;INITTED?
  612.  BEQ HANGUP2 ;NO, BR
  613.  LDA IRQSAVE
  614.  STA IRQLOC ;RESTORE IRQ ADDR
  615.  LDA IRQSAVE+1
  616.  STA IRQLOC+1
  617.  LDA #0
  618.  STA IRQSAVE+1
  619.  LDX SLOTN0
  620.  STA SHBYT,X ;HANG UP MODEM
  621.  LDA #$0C
  622.  STA COM,X
  623.  LDA #$18
  624.  STA XMTBYT,X ;TURN OFF XMITTER
  625.  STA XMTSAV
  626.  LDA #$A1
  627.  STA SQUBYT,X
  628.  LDX #HANGMSG\
  629.  JSR PRMSGY ;PRINT MESSAGE
  630. HANGUP2 LDA #2 ;[1.2]
  631.  STA CARRFLG
  632.  RTS
  633. ;
  634. ;
  635. SENDBYT TAX
  636.  LDA STATUS
  637. ADDR6 EQU *-2
  638.  AND #$10 ;READY TO XMIT?
  639.  BEQ NOTDRE ;NO, BR
  640.  TXA
  641.  AND #$7F
  642.  JSR DOPARITY
  643.  STA OUTDAT ;XMIT IT
  644. ADDR7 EQU *-2
  645.  LDA #$01
  646. NOTDRE RTS
  647. ;
  648. ;
  649. COMCMD BEQ HANGUP
  650.  CMP #$0C
  651.  BEQ SENDBRK
  652.  CMP #$0B
  653.  BEQ CHGBAUD
  654.  CMP #$91
  655.  BEQ START
  656.  CMP #$93
  657.  BEQ STOP
  658.  JSR PRBYTE
  659.  LDX #CMDMSG\
  660. ;
  661. PRMSGY LDY #MSGS^
  662.  JSR PRMSG
  663.  LDA #0
  664.  RTS
  665. ;
  666. ;
  667. START SEI
  668.  JSR SENDBYT ;SEND ^Q
  669.  BEQ START2 ;NOT SENT, BR
  670.  LDA #0
  671.  STA STOPREQ ;CLEAR FLAGS
  672.  STA STOPACK
  673.  LDA #1
  674.  CLI
  675.  RTS
  676. ;
  677. START2 LDA #0
  678.  STA STOPREQ
  679.  CLI
  680. STARTLP JSR CHKXMIT
  681.  LDA STOPACK
  682.  BNE STARTLP
  683. ;[1.2] LDA #1
  684. ;[1.2] RTS
  685.  BEQ CHGBRET ;[1.2]
  686. ;
  687. STOP SEI
  688.  JSR SENDBYT ;SEND ^S
  689.  BEQ STOP2 ;NOT SENT, BR
  690.  LDA #1
  691.  STA STOPACK ;SET FLAGS
  692.  STA STOPREQ
  693.  CLI
  694.  RTS
  695. ;
  696. STOP2 LDA #1
  697.  STA STOPREQ
  698.  CLI
  699. STOPLP JSR CHKXMIT
  700.  LDA STOPACK
  701.  BEQ STOPLP
  702.  RTS
  703. ;
  704. CHGBAUD LDA IRQSAVE+1 ;MODEM INITTED?
  705.  BEQ CHGBRET ;NO, BR
  706.  SEI
  707.  JSR SETBAUD
  708.  CLI
  709. CHGBRET LDA #1
  710. CHGBRTS RTS
  711. ;
  712. SENDBRK SEI
  713.  LDY SLOTN0
  714.  LDA #$02
  715.  STA COM,Y ;SET BREAK
  716.  LDA #$E9
  717.  STA DLYCNT
  718. L7DE9 LDA BRKLEN
  719.  JSR DELAY ;WAIT A WHILE
  720.  DEC DLYCNT
  721.  BNE L7DE9
  722.  LDA #$06
  723.  STA COM,Y ;CLEAR BREAK
  724.  CLI
  725. ;[1.2] LDA #$01
  726. ;[1.2] RTS
  727.  BNE CHGBRET ;[1.2]
  728. ;
  729. SETBAUD LDA #8
  730.  CMP BAUD ;BAUD <= 8?
  731.  BCS BAUDOK ;YES, BR
  732.  STA BAUD
  733. ;
  734. BAUDOK LDX SLOTN0
  735.  LDA #$A1
  736.  STA SQUBYT,X
  737. ;
  738.  LDA EXTFLAG
  739.  BNE BEXT
  740. ;
  741.  LDA BAUD
  742.  CMP #8
  743.  BCS B1200
  744. ;
  745.  LDA #0 ;0-600 BAUD
  746.  STA DEVBYT,X
  747.  LDA #$11
  748.  BNE B312
  749. ;
  750. BEXT LDA #$05 ;EXT
  751.  BNE B12A
  752. ;
  753. B1200 LDA #$21 ;1200 BAUD
  754.  STA SQUBYT,X
  755.  LDA #$0A
  756. B12A STA DEVBYT,X
  757.  LDA #$18
  758. B312 STA XMTBYT,X
  759.  STA XMTSAV
  760.  LDA BAUD
  761.  ASL A
  762.  ASL A
  763.  ASL A
  764.  ASL A
  765.  ADC BAUD
  766.  EOR #$FF
  767.  ADC #$89
  768.  STA SPDBYT,X
  769. ;
  770.  LDA #$03
  771.  STA CON,X
  772. ;
  773. SETREC LDA #$65
  774.  LDX BAUD
  775.  CPX #4
  776.  BNE SETREC2
  777.  LDA #$2D ;45.5 BAUD (TDD)
  778. SETREC2 LDX SLOTN0
  779.  STA RECBYT,X
  780. ;
  781.  RTS
  782. ;
  783.  NOP  ;AN EXTRA BYTE! [1.2]
  784. ;
  785. ; LST ON
  786. ;
  787. PGMEND EQU *
  788. RECVBUF DS $700
  789. XMITBUF DS $100
  790. ;
  791. BUFEND EQU *
  792. ;
  793. ; LST OFF
  794.