home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / pub / ucsdappleii / kermterm.text < prev    next >
Text File  |  2020-01-01  |  11KB  |  273 lines

  1. ;>>>>>>>>>>>>>>>>>>>>>>> KERMTERM.TEXT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  2.  
  3.  
  4. ;----------------------------------------------------------------------
  5. ;----------------------------------------------------------------------
  6. ;
  7. ;  This procedure is external to the main kermit program.
  8. ;
  9. ;----------------------------------------------------------------------
  10. ;----------------------------------------------------------------------
  11. ; PROCEDURE Kerm_Term( BS_to_DEL, Esc_Char, Xon_Char, Xoff_Char : CHAR;
  12. ;                      Xoff_Wait : INTEGER;
  13. ;                      No_Ffeed, Print, Half_Duplex, Reject_Cntrl_Char,
  14. ;                      Emulate : BOOLEAN );
  15. ;----------------------------------------------------------------------
  16. ;
  17. ; This procedure works only in cooperation with my serial card driver
  18. ; BIOS routine, that implements the UCSD  UNITSTATUS procedure and buffers
  19. ; serial input for various serial cards. ( see REMDRIVER.TEXT )
  20. ; It is written in 6502 code in order to be able to work at high baudrates.
  21. ; The baudrate limiting factor on the Apple is the screen scrolling routine.
  22. ; If one can set the linefeed fill count in the remote host terminal
  23. ; definition to an appropiate value, then this procedure works at 4800 baud.
  24. ; With the right Xon and Xoff characters ( most often ^Q and ^S ) and Xoff-
  25. ; wait count this procedure will echo on request also to a printer, without
  26. ; losing characters. Increase Xoff_wait if characters seem to be lost when
  27. ; printing.
  28. ; If your keyboard doesn`t have a DEL key and your host requires one for
  29. ; delete & backspace, then set BS_to_DEL to CHR(127). During the connection
  30. ; your BS key (Asci 8) will be translated to DEL (Asci 127).
  31. ; If you do not want incoming control characters other than 'bell', 'bs',
  32. ; 'lf', 'ff', 'cr' echoed to to your screen : set 'reject_cntrl_char' to
  33. ; true.
  34. ;----------------------------------------------------------------------
  35. ;
  36. ; N.B.  EMULATE is not implemented.
  37. ;
  38. ;----------------------------------------------------------------------
  39. ;
  40.           .PROC KERMTERM,10.  ; 10 parameters, see above.
  41. ;
  42. BIOSAF    .EQU 0FF5C        ;base of bios jump table. Same in V1.1 &1.2
  43. CREAD     .EQU BIOSAF+0     ;bios console read routine adres
  44. CWRITE    .EQU BIOSAF+3.    ;bios console write routine adres
  45. PWRITE    .EQU BIOSAF+9.    ;bios printer write routine adres
  46. RREAD     .EQU BIOSAF+24.   ;bios remote read routine adres
  47. RWRITE    .EQU BIOSAF+27.   ;bios remote write routine adres
  48. CSTAT     .EQU BIOSAF+42.   ;bios keyboard status routine adres
  49. RSTAT     .EQU BIOSAF+51.   ;bios remote status routine adres
  50. ;
  51. ;  The BIOS After Fold jump vector will be patched by SYSTEM.ATTACH .
  52. ;  From the above routines only RREAD & RSTAT are actually changed.
  53. ;
  54. BIOSRAM   .EQU 0C083        ;switch adress for extra 4k language card part.
  55.                             ;contains UCSD BIOS routines.
  56. INTPRAM   .EQU 0C08B        ;switch adress to get back to normal language
  57.                             ;card part. contains UCSD interpreter.
  58. RPTR      .EQU 0BF18        ;read pointer for circular keyboard buffer.
  59. WPTR      .EQU 0BF19        ;write   "     "     "        "      "
  60. BS        .EQU 08           ;backspace character.
  61. LINEFD    .EQU 0A           ;linefeed     "
  62. FF        .EQU 0C           ;formfeed     "
  63. CR        .EQU 0D           ;return       "
  64. BELL      .EQU 07           ;bell         "
  65. TRUE      .EQU 80           ;used as boolean.
  66. ;---------------------------
  67. ; GET PARAMETERS FROM STACK
  68. ;
  69.           PLA               ; pop return adress.
  70.           STA RETURN
  71.           PLA
  72.           STA RETURN+1
  73.           ;-----------------
  74.           PLA               ; pop emulate boolean.
  75.           BEQ $05
  76.           LDA #TRUE
  77. $05       STA EMULATE
  78.           PLA
  79.           ;----------------
  80.           PLA               ; pop Reject_Cntrl_Char Boolean.
  81.           BEQ $01
  82.           LDA #TRUE
  83. $01       STA REJECT
  84.           PLA
  85.           ;-----------------
  86.           PLA               ; pop Half_Duplex Boolean.
  87.           BEQ $02
  88.           LDA #TRUE
  89. $02       STA HALFDUP
  90.           PLA
  91.           ;-----------------
  92.           PLA               ; pop Printer Boolean.
  93.           BEQ $03
  94.           LDA #TRUE
  95. $03       STA PRINTER
  96.           PLA
  97.           ;-----------------
  98.           PLA               ; pop No_Ffeed Boolean.
  99.           BEQ $04
  100.           LDA #TRUE
  101. $04       STA NOFEED
  102.           PLA
  103.           ;-----------------
  104.           PLA               ; pop Xoff_Wait Integer (1..255).
  105.           STA XOFFWAIT
  106.           PLA
  107.           ;-----------------
  108.           PLA               ; pop Xoff_Char Char.
  109.           STA XOFFCHAR
  110.           PLA
  111.           ;-----------------
  112.           PLA               ; pop Xon_Char Char.
  113.           STA XONCHAR
  114.           PLA
  115.           ;-----------------
  116.           PLA               ; pop ExitChar Char.
  117.           STA EXITCHAR
  118.           PLA
  119.           ;-----------------
  120.           PLA               ; pop BS_to_DEL Char.
  121.           STA BSTODEL
  122.           PLA
  123. ;---------------------------
  124.           LDA BIOSRAM       ; switch in BIOS RAM
  125. ;---------------------------
  126. START     JSR RSTATUS       ; returns in BUFLEN # char's in remin-buffer.
  127.           LDA BUFLEN
  128.           BEQ READKEY       ; read keyboard if buffer empty.
  129.           ;-----------------
  130.           BIT PRINTER       ; is printer on?
  131.           BPL EMPTYRBUF     ; no : start reading remin buffer.
  132.           ;-----------------
  133. XOFFSEND  LDA XOFFCHAR      ; printer is on:
  134.           JSR RWRITE        ; send xoff char to host and
  135.           LDA XOFFWAIT      ; keep checking remin for a certain time,
  136.           STA COUNT         ; because host may send some more char's
  137. WAIT      JSR RSTATUS       ; before it really gets the xoff.
  138.           DEC COUNT
  139.           BNE WAIT
  140.           ;-----------------
  141. EMPTYRBUF LDX #00           ; X=0 : read request.
  142.           JSR RREAD         ; read a char from remin buffer.
  143.           ;-----------------
  144.           BIT REJECT        ; reject control chars?
  145.           BPL ECHO          ; no: echo to console.
  146.           JSR CHECKCTRL     ; yes: check for allowed control char's.
  147.           ;-----------------
  148. ECHO      PHA               ; save char.
  149.           JSR CWRITE        ; echo char to console.
  150.           PLA               ; restore char in accu.
  151.           ;-----------------
  152.           BIT PRINTER       ; is printer on?
  153.           BPL NOPRINT       ; if not, don't print char.
  154.           ;-----------------
  155.           CMP #FF           ; printer is on. is char a formfeed?
  156.           BNE NOFF
  157.           JSR REPLFF        ; yes: replace it if requested.
  158. NOFF      LDX #01           ; write request.
  159.           JSR PWRITE        ; print char.
  160.           ;-----------------
  161. NOPRINT   DEC BUFLEN        ; keep on reading remin char's until
  162.           BNE EMPTYRBUF     ; reminbuffer is empty.
  163.           ;-----------------
  164.           BIT PRINTER       ; is printer on?
  165.           BPL READKEY       ; no  : check keyboard.
  166.           LDA XONCHAR       ; yes : send xon char to host.
  167.           JSR RWRITE
  168.           ;-----------------
  169. READKEY   LDA RPTR          ; if keyboardbuffer readpointer is
  170.           CMP WPTR          ; equal to writepointer then keyboardbuffer is
  171.           BEQ START         ; empty. loop back to start.
  172.           ;-----------------
  173.           JSR CREAD         ; get a char from keyboardbuffer.
  174.           CMP EXITCHAR      ; is it the escape char?
  175.           BEQ EXIT          ; then exit this procedure.
  176.           ;-----------------
  177.           BIT HALFDUP       ; half_duplex mode ?
  178.           BPL FULLDUP       ; if not , don't echo to screen.
  179.           PHA               ; if half_duplex, save char
  180.           JSR CWRITE        ; echo char to screen.
  181.           PLA               ; restore char to accu
  182.           ;-----------------
  183. FULLDUP   CMP #BS           ; is char a backspace?
  184.           BNE NOBS          ; if not, don't change it.
  185.           LDA BSTODEL       ; if a backspace, translate it to BSTODEL value.
  186. NOBS      JSR RWRITE        ; send keyboard char to remote host
  187.           JMP START         ; start listening to remin again.
  188.           ;-----------------
  189. EXIT      LDA INTPRAM       ; switch BIOS RAM off and interpreter RAM on.
  190.           ;-----------------
  191.           LDA RETURN+1      ; push return adress and back to pascal.
  192.           PHA
  193.           LDA RETURN
  194.           PHA
  195.           ;-----------------
  196.           RTS
  197. ;---------------------------------------------------------------------------
  198. ;---------------------------------------------------------------------------
  199. ;
  200. ; SUBROUTINES
  201. ;
  202. ;---------------------------
  203. ;RSTATUS : prepare stack and call reminstatus routine in attached driver.
  204. ;
  205. RSTATUS   LDA #00           ; push controlword (=1 : statuscall )
  206.           PHA
  207.           LDA #01
  208.           PHA
  209.           ;-----------------
  210.           LDA BUFLENPTR+1   ; push adres of BUFLEN
  211.           PHA
  212.           LDA BUFLENPTR
  213.           PHA
  214.           ;-----------------
  215.           LDX #04           ; X=4 : statusrequest.
  216.           JSR RSTAT
  217.           RTS
  218. ;---------------------------
  219. ; CHECKCTRL
  220. ;
  221. CHECKCTRL CMP #20           ; is it a control char?
  222.           BCS ECHO1         ; no: echo to console.
  223.           CMP #CR           ; pass to console in any case CR,LF,BS,FF,BELL.
  224.           BEQ ECHO1
  225.           CMP #LINEFD
  226.           BEQ ECHO1
  227.           CMP #BS
  228.           BEQ ECHO1
  229.           CMP #FF
  230.           BEQ ECHO1
  231.           CMP #BELL
  232.           BEQ ECHO1
  233.           PLA
  234.           PLA
  235.           JMP NOPRINT       ; do not echo other control characters.
  236. ECHO1     RTS
  237. ;---------------------------
  238. ;REPLFF : replaces formfeed with 3 lf's and 1 cr,if requested.
  239. ;
  240. REPLFF    BIT NOFEED        ; ff to be elimininated?
  241.           BPL NOCHANGE      ; if not, return.
  242.           LDA #03
  243.           STA COUNT         ; set count to 3
  244. $04       LDA #LINEFD       ; send 3 linefeeds to printer
  245.           LDX #01
  246.           JSR PWRITE
  247.           DEC COUNT
  248.           BNE $04
  249.           LDA #CR           ; replace formfeed with cr.
  250. NOCHANGE  RTS               ; and return.
  251. ;---------------------------
  252. ;--------------------------------------------------------------------------
  253. ;
  254. ; VARIABLES
  255. ;
  256. ;--------------------------------------------------------------------------
  257. RETURN    .WORD 00
  258. BUFLEN    .WORD 00
  259. BUFLENPTR .WORD BUFLEN
  260. COUNT     .BYTE 00
  261. HALFDUP   .BYTE 00
  262. PRINTER   .BYTE 00
  263. NOFEED    .BYTE 00
  264. XOFFWAIT  .BYTE 00
  265. XOFFCHAR  .BYTE 00
  266. XONCHAR   .BYTE 00
  267. EXITCHAR  .BYTE 00
  268. BSTODEL   .BYTE 00
  269. REJECT    .BYTE 00
  270. EMULATE   .BYTE 00
  271. ;----------------------------------------------------------------------
  272.           .END
  273.