home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / extra / k278com.pal < prev    next >
Text File  |  2020-01-01  |  27KB  |  1,495 lines

  1. / COMMUNICATIONS HANDLER FOR OS278 and DECmates KERMIT V1.0    30-May-1986
  2. /
  3.  
  4. / 006    Mart    06-Jun-86    Beef up the comms initialisation
  5. /                to support DECmate III
  6. / 005    SSta    04-Jun-86    Mod LDSET to accept an AC argument
  7. /                containing a pointer to the string.
  8. /
  9. / 004    SSta    02-Jun-86    Add LDSET routine for G0-G4 and
  10. /                Level 2 terminal initialisation
  11. /
  12. / 003    SSta    30-Mar-86    Add Startup job and Composetable
  13. /                for MCS characters.
  14. /
  15. / 002    Mart    05-Mar-86    Debugging for Kermit            
  16. /    SSta
  17. /
  18. / 001    Mart    05-Mar-86    Basic implementation and modification
  19. /                for the nice Kermit done on that File.
  20. /
  21. / 000    SSta    30-Mar-86    All thanks to for the big work to
  22. /                Martyn Hemmings.
  23. /
  24. /    15/02/85
  25. /*******************************************************************
  26.  
  27.     BUFMAX=    150    /maximum buffer size
  28.     XOFTST=    100    / send xoff when it gets this full
  29.     XONTST=    10    / send an xon when it enpties to here
  30.     XOF=    23    / xof code
  31.     XON=    21    / xon code
  32.     CTRLZ=    32    / END OF FILE CODE
  33.     ESC=    33    /
  34.     TIE=    6045    / terminal int enable
  35.     SPF=    6040    / set output flag
  36.     AC0001=    CLA CLL IAC
  37.     AC4000=    CLA CLL CML RAR
  38.     CIDF0=    CIF CDF 0
  39.     CDF0=    CDF 0
  40.  
  41. / PAGE 0
  42.  
  43.     FIELD 2
  44.  
  45.     *10
  46. /---- index registers
  47.  
  48.     *20
  49. /---- normal page zero registers
  50. CHRIN,    0            / save char just input
  51. F2AC,    0
  52.  
  53. / end of page 0 now start on program
  54.  
  55.  
  56.  
  57.     *200
  58.  
  59. /**********************************************************************
  60. /     START PROGRAM HERE
  61. /**********************************************************************
  62.  
  63. COMINI,
  64.     0
  65.     JMS    V30ST        / load compose tables to panel memory
  66.                 / and set for propper character sets
  67.     JMS    INITKB        / initialise keyboard interrupts
  68.     JMS    INITCM        / INIT COMS INTS
  69.     CLA CLL
  70.     ION            / start interrupts
  71.     CDF CIF    00
  72.     JMP I    COMINI
  73.  
  74. /------------------------
  75.  
  76. PAGE
  77.  
  78. /********************************************************************
  79. /     INTERRUPT CATCHER
  80. /********************************************************************
  81.  
  82.  
  83. / now check for type of interrupt
  84. INTRPT,
  85.     JMS    COMINT        / was it a comms int ?
  86.     SKP            / not me
  87.     JMP    INTXIT        / was return
  88.  
  89.     JMS    KEYINT        / was it a key board int ?
  90.     SKP            / not me
  91.     JMP    INTXIT        / was return
  92.  
  93.     JMS    COMOINT        / was it a comms output int ?
  94.     SKP            / not me
  95.     JMP    INTXIT        / was return
  96.  
  97.     JMS    SCRINT        / was it a screen int ?
  98.     SKP            / not me
  99.     JMP    INTXIT        / was return
  100.  
  101. / well what the hell are we doimg here then ??
  102.  
  103. / better return anyway
  104.  
  105. INTXIT,
  106.     CIF    00
  107.     JMP I    .+1
  108.     INTRES
  109.  
  110. /------------------------------
  111.  
  112.     PAGE
  113.  
  114.  
  115. /***********************************************************************
  116. /   INITIALIZATION
  117. /***********************************************************************
  118.  
  119. / Initialise the keyboard for input
  120. / and screen for output
  121.  
  122. INITKB,
  123.     0            / initialise term interrupts
  124.     CLA CLL            / CLAEAR AC
  125.     6135            / DISABLE CLOCK
  126.     6756            / DISABLE RX50 INTS
  127.     6365            / CLEAR MODEM INT ENABLE
  128.     CLA IAC            / set bit 11
  129.  
  130.     KIE            / send init input  command
  131.     TIE            / send init output command
  132.  
  133.  
  134.     6305            / ENABLE INTS FOR COMMS
  135.     CLA CLL            / CLEAR ACC
  136.     JMP I    INITKB        / RETURN
  137.  
  138. INITCM,    0
  139.     CLA
  140.     6367            / RESET COMMS CHIP
  141.     CDF 0            / ACCESS REG A
  142.     TAD    (30)        / RESET
  143.     6366            /   REG A
  144.     CDF 10            / ACCESS REG B
  145.     6366            /  RESET  REG B
  146.  
  147.     CDF 0            / REG A
  148.     CLA
  149.     TAD    (2)        / REGISTER 2A
  150.     6366            / SELECT
  151.     CLA
  152.     TAD     (20)        / RESET
  153.     6366            / LOAD REG 2A    
  154.  
  155.     CDF 10            / REG B
  156.     CLA
  157.     TAD    (2)        / REGISTER 2B
  158.     6366            / SELECT
  159.     CLA
  160.     6366            / LOAD REG 2B    
  161.  
  162.     CDF 0            / REG A
  163.     CLA
  164.     TAD    (4)        / REGISTER 4A STOP BITS ^ PARITY
  165.     6366            / SELECT
  166.     CLA
  167.     TAD     (104)        / RESET        1 STOP BIT NO PARITY
  168.     6366            / LOAD REG 4A    
  169.  
  170.     CDF 0            / REG A
  171.     CLA
  172.     TAD    (1)        / REGISTER 1A STOP BITS ^ PARITY
  173.     6366            / SELECT
  174.     CLA
  175.     TAD     (26)        / FIXED
  176.     6366            / LOAD REG 1A    
  177.  
  178.     CDF 10            / REG B
  179.     CLA
  180.     TAD    (1)        / REGISTER 1B STOP BITS ^ PARITY
  181.     6366            / SELECT
  182.     CLA
  183.     TAD     (26)        / FIXED
  184.     6366            / LOAD REG 1B    
  185.  
  186.     CDF 0            / REG A
  187.     CLA
  188.     TAD    (1)        / REGISTER 1A STOP BITS ^ PARITY
  189.     6366            / SELECT
  190.     CLA
  191.     TAD     (26)        / FIXED
  192.     6366            / LOAD REG 1A    
  193.  
  194.     CLA    
  195.     TAD     (0003)        / GO WRUIUTE CONTROL REG 3
  196.     6366            / SEND
  197.     CLA
  198.     TAD    (0301)        / WRITE 8 BITS AND RECIEVE ENABLE
  199.     6366            / SEND
  200.  
  201.     CLA
  202.     TAD     (0005)        / GO WRITE TO CONTROL 5
  203.     6366            / WRITE
  204.     CLA        
  205.     TAD    (150)        / ENABLE TRANSMITTER
  206.     6366    
  207.  
  208.     7325            / AC0003 - EXTERNAL
  209.     6362            / SELECT INTERNAL CLK & DTR
  210.     CLA
  211.     TAD    BAUD        / GET DEFAULT BAUD RATE
  212.     6363            / SET BAUD
  213.  
  214.     7325            / AC0003 - ENABLE INTERUPTS
  215.     6305            / FOR TRANS
  216.     6315            / FOR REC
  217.     
  218.     JMP I    INITCM        / RETURN
  219.  
  220. BAUD,    16            / 9600
  221.  
  222. /---------------------------------
  223.  
  224.     PAGE
  225.  
  226.  
  227.  
  228. /***********************************************************************
  229. /     COMMUNICATION interrupts
  230. /***********************************************************************
  231.  
  232. COMINT,
  233.     0
  234.     6301            / TEST FOR COMMS INTERRUPT
  235.     JMP I    COMINT        / NOT ME
  236.     CLA        
  237.     
  238.     CDF    10
  239.  
  240.     TAD    (4002)        / SELECT REG 2 TO READ
  241.     6366            / SEND INSTRUCTION
  242.     CLA
  243.     6366
  244.     AND    (7)        / ONLY THESE BITS USEFULL
  245.     
  246.     CDF    20
  247.  
  248.     TAD    (-4)        / TRANSMITTER IRQ
  249.     SZA    CLA        / SKIP MEANS TRANSMITTER INT
  250.     JMP    COMIN        / SOMETHING COMIN IN
  251.  
  252. / TO GET HERE YOU HAVE SENT SOMETHING TO THE COMMS PORT
  253. / SET A FLAG SO THAT COMMS OUTPUT CAN BE TESTED AT THE PROPER LEVEL
  254.  
  255.     6310
  256.     JMP I    COMINT        / dummy
  257.  
  258. COMIN,
  259.     6306            / TRANSFER INTO ACC 4-11
  260.     AND    (377)        / TAKE OUT THE JUNK
  261.     DCA    CHRIN        / SAVE THE COMMS CHAR JUST IN
  262.     DCA    CERRST        / CLEAR ERROR STATUS
  263.     TAD     (70)        / DISSMISS COM INTERUPT
  264.     6366            / COM REG 0
  265.     CLA CLL    
  266.     JMS    CHKXNF        / TEST FOR XON/XOFF
  267.     JMP    COMXONF        / XON OR XOF FOUNTY
  268.  
  269.     CLA
  270.  
  271. SYSLOC,
  272.     TAD     CICOUNT        / GET COUNT
  273.     JMS    TSTFUL        / TEST IF BUFFER FULL
  274.     NOP            / FULL SO HOPE THIS OVERWRITES
  275.     TAD     CERRST        / ADD IN THE ERROR BITS
  276.     DCA I    COMIBUF        / STORE CHAR IN BUFFER
  277.     ISZ    COMIBUF        / BUMP
  278.     ISZ     CICOUNT        / BUNMP COUNT
  279.     TAD I    COMIBUF        / CHECK FOR WRAP
  280.     SPA
  281.  
  282.     DCA    COMIBUF        / DO WRAP IF NESS
  283.     CLA            /
  284.     ISZ    CHRFUL        / SET TO -1 IN TESTFUL IF ALMOST FULL
  285.     JMP    COMXIT        / GO FINISH OFF
  286.     TAD    (XOF)        / NOW SEND XOFF
  287.     DCA    CMOXOF        / SAVE IT
  288.     CLA IAC            / AC0001
  289.     DCA    ISTOPFLAG    / STOPPED INPUT
  290.  
  291.  
  292.  
  293. COMXIT,    
  294.     TAD    COMBSY        / CHECK THE BUSY FLAG
  295.     SZA CLA            / ARE WE BUSY
  296.     JMS    COMOUT        / NO
  297.     ISZ     COMINT        / SKIP RETURN
  298.     JMP I    COMINT        / RETURN
  299.  
  300. TSTFUL,    0            / TEST FOR A FULL BUFFER
  301.     DCA    TCOUNT        / SAVE COUNT
  302.     TAD    TCOUNT        / GET IT BACJK
  303.     TAD    (-XOFTST)    / IOF NEARLY FIULL
  304.     DCA    CHRFUL        / WHEN -1 IS STORED STARTS AN XOF
  305.     TAD     TCOUNT        / GET COUNT AGAIN
  306.     TAD    (-BUFMAX)    / GET MAX BUF SIZE
  307.     SNA CLA            / TEST
  308.     JMP I    TSTFUL        / YES FULL
  309.     TAD    CHRIN        / GET BACK CHAR
  310.     ISZ    TSTFUL        / SKIP RETURN
  311.     JMP I    TSTFUL        / RETURN
  312.  
  313. COMXONF,DCA    OSTOPFLAG    / RESET/SET OUTPUT STOP FLAG
  314.     JMP    COMXIT        / EXIT
  315.  
  316. OSTOPFLAG,    0
  317. ISTOPFLAG,    0
  318. CHASEFLAG,    0
  319. COMBSY,        1
  320. CICOUNT,    0
  321. TCOUNT,        0
  322. CMOXOF,        XON
  323. CMOXON,        -XON
  324. COMIBUF,    IBUF
  325. CHRFUL,        0
  326. CERRST,        0
  327.  
  328.  
  329.  
  330. /**********************************************************************
  331. / CIN        COMMUNICATION INPUT
  332. /
  333. /**********************************************************************
  334.  
  335. CIN,    0
  336.     CLA
  337.     TAD    CICOUNT        /GET THE BUFFER COUNT
  338.     SNA CLA            / NOT 0 HENCE SOMETHING IN IT
  339.     JMP     CINIXT        / ERROR EXIT
  340.  
  341. CIN2,    TAD I    BCOMIBUF    / READ
  342.     SPA            / TEST FOR WRAP
  343.     JMP    CWRAP
  344.     MQL            / SAVE THE CHAR
  345.     IOF            / STOP INTS WHILE WE SORT THE BUFFER
  346.     7240            / AC7777
  347.     TAD    CICOUNT        / DEC COUNT
  348.     DCA    CICOUNT        / SAVE
  349.     ISZ    BCOMIBUF    / BUMP PTR
  350.     ION
  351.     TAD    ISTOPFLAG    / STOPPED ?
  352.     SZA    CLA        /?
  353.     JMP    CIN4        / YES GO TRY TO RESTART
  354.  
  355. CIN3,    MQA            / RESTORE CHAR
  356.     ISZ    CIN
  357.     JMP    CINIXT        / RETURN OK
  358.  
  359. CIN4,    TAD    CICOUNT        / TEST COUNT
  360.     TAD    (-XONTST)    / TO SEE IF READY FOR XON
  361.     SZA    CLA        / IF 0 THEN TRY TO SEND XON
  362.     JMP    CIN3        / NO CONT.
  363.     
  364. / NOW SEND XON
  365.     TAD    (XON)        / GET XON
  366.     DCA    CMOXOF        / PUT IN OUTPUT WORD
  367.     IOF
  368.     JMS     COMOUT        / CALL OUTPUT ROUTINE
  369.     ION
  370.     CLA CLL
  371.     DCA    ISTOPFLAG    / NO LONGER STOPPED
  372.     JMP    CIN3        / CONT.
  373.  
  374. CWRAP,    IOF            / DON'T LET INTERRUPTS GET IN THE WAY
  375.     DCA    BCOMIBUF    / RESET THE BUFFER POINTER
  376.     JMP    CIN2        / GO AND CIN AGAIN AFTER WRAP
  377.  
  378. CINIXT,    CDF CIF    00
  379.     JMP I    CIN
  380.  
  381. BCOMIBUF,    IBUF        / BOTTOM OF INPUT RING
  382.     
  383.  
  384.  
  385. /------------------------------------
  386.  
  387.  
  388.     PAGE
  389.  
  390.  
  391.  
  392. /**************************************************************************
  393. /   COMMUNICATIONS OUTPUT
  394. /**************************************************************************
  395.  
  396. COMOINT,    
  397.     0            / INTERRUPT LEVEL ROUTINE TO CATCH COM
  398.                 / OUTPUT
  399.     6311            / TEST OUTPUT FLAG
  400.     JMP I     COMOINT        / NOT SET SO EXIT
  401.     CLA
  402.     TAD    (50)        /
  403.     6366            / DISMISS THE INTERUPT
  404.     TAD    (20)        / (70)
  405.     6366            / cr0a issue end of interrupt command]
  406.     CLA
  407.     JMS    COMOUT        / GO OUTPUT THE CHAR
  408.     ISZ    COMOINT        / 
  409.     JMP I    COMOINT        / SKIP RETURN
  410.  
  411. COMWRA,    DCA    OCOMBGET    / WRAP RING BUFFER
  412.     SKP
  413.  
  414. COMOUT,    0
  415.     DCA    GOING        / SAY GOING
  416.     DCA    COMBSY        / SET BSY FLAG
  417.     TAD    CMOXOF        / CHECK FOR XON OR XOF
  418.     TAD    CMOXON        / 
  419.     SZA CLA            / SKIP IF NOT DOING XON XOFF
  420.     JMP    CMOXXF        / GO DO IT
  421.     TAD    COCOUNT        / ANY MORE TO DO ?
  422.     SNA CLA        
  423.     JMP     COMX        / FINISH IF NOT
  424.     TAD    OSTOPFLAG    / STAOP  FLAG ?
  425.     SZA CLA        
  426.     JMP    COMX        / JUMP IF STOPPED
  427.     TAD I    OCOMBGET    / GET CHAR
  428.     SPA            / WRAP ?
  429.     JMP    COMWRA        / WRAP IF NESS
  430.     6316            / SEND CHAR
  431.     7240            / AC7777
  432.     TAD     COCOUNT        / DECREMENT    COUNT
  433.     DCA    COCOUNT        / SAVE IT
  434.     ISZ    OCOMBGET    / INC BUFFER POINTER
  435.     JMP I    COMOUT        / RETURN
  436.  
  437. CMOXXF,    TAD    CMOXOF        / GET CONTROL CHAR
  438.     6316            / SEND XON OR XOF
  439.     CLA
  440.     TAD    CMOXOF        / GET CHAR JUST SENT
  441.     CIA            / COMPLEMENT IT
  442.     DCA    CMOXON        / SAVE 
  443.     JMP I    COMOUT        / RETURN
  444.  
  445. COMX,    ISZ    GOING        / CLEAR GOING FLAG NOT GOING
  446.     ISZ    COMBSY        / CLEAR BUSY FLG
  447.     JMP I    COMOUT        / RETURN
  448.  
  449. OCOMBGET,    OBUF        / OUTPUT RING BOTTOM PTR
  450. COCOUNT,    0        / OUTPUT BUFFER COUNT
  451. GOING,    1
  452.  
  453.  
  454.  
  455. /******************************************************************
  456. / COUT
  457. /    Put a char inb the comms output buffer and start
  458. /
  459. /    RETURNS    ERROR    if buffer full
  460. /            hase char in acc for retry
  461. /        SKIP    If O.K.
  462. /******************************************************************    
  463.  
  464. COUT,    0
  465.     AND    (377)        / ONLY 8 BITS SAVED
  466.     DCA I    COMOPTR        / PUT IN THE BUFFER
  467.     TAD    COCOUNT        / GET THE OUTPUT BUFFER CNT
  468.     TAD    (-BUFMAX)    /test for full
  469.     SNA CLA
  470.     JMP    COUTF        / yes full
  471.     IOF            / dont allow ints while processing buf
  472.     NOP            / MAKE SURE THEY ARE OFF
  473.     ISZ    COCOUNT        / bump COUNT
  474.     ISZ    COMOPTR        / BUMP PTR
  475.     TAD I    COMOPTR        / test for wrap
  476.     SPA
  477.     DCA    COMOPTR        / yes wrap
  478.     CLA
  479.     TAD    GOING        /output remaining
  480.     SZA CLA            / yes
  481.     JMS    COMOUT        / start output
  482.     ION            / now let ints rip
  483.     ISZ    COUT        /
  484.     JMP    COUTXT        / skip RETURN
  485.     
  486. COUTF,    TAD I    COMOPTR        / get back the char
  487.  
  488. COUTXT,    CDF CIF    00
  489.     JMP I    COUT
  490.  
  491. COMOPTR,OBUF
  492.  
  493. /------------------------------------
  494.  
  495.     PAGE
  496.  
  497.  
  498.  
  499. /***********************************************************************
  500. /     KEYBOARD INPUT SECTION
  501. /***********************************************************************
  502.  
  503. KEYINT,    0            / check for keyboard interrupt
  504.     CLA
  505.     KSF            / test the input flag
  506.     JMP I    KEYINT        / not so do an error exit
  507.     CLA
  508.     KRB            / keyboard read
  509.     AND    (377)        / 8 bits make sence
  510.     DCA    CHRIN        / save the char
  511.  
  512.     JMS    CHKXNF        / check for XON or XOFF
  513.     JMP    KEYXONOF    / found xon or xoff char
  514.     CLA    
  515.     TAD    KEYCNT        / get number in the buffer
  516.     TAD    (-BUFMAX)    / test for a full buffer
  517.     SNA CLA            / kip if ok
  518.     JMP I    KEYINT        / error return full
  519.     TAD     CHRIN        / get back the char
  520.     DCA I    KEYBPTR        /save in the buffer
  521.     ISZ    KEYCNT        / one more char in the buffer
  522.     ISZ    KEYBPTR        / bump the buffer pointer
  523.     TAD I    KEYBPTR        / see what is next in the buffer
  524.     SPA            / IF it is neg then wrap around
  525.     DCA    KEYBPTR        / put the new buffer pointer in to wrap
  526.     ISZ    KEYINT
  527.     JMP I    KEYINT        / RETURN found one
  528.  
  529. KEYXONOF,
  530.     DCA    SCRSTP        / reset / set stop flag
  531.     JMS    SCRINT        / go do it
  532.     JMS    SCRONT        / go do it again if failed
  533.     NOP            / ignore any fail
  534.     ISZ    KEYINT        / ok so we found something and dealt with it
  535.     JMP I    KEYINT        / return
  536.  
  537. BKEYBPTR,            / bottom of input buffer ring/modified
  538.     KEYBUFF
  539.  
  540. KEYBPTR,
  541.     KEYBUFF            / pointer to buffer /is modified by prog
  542. KEYCNT,    0            / number of chars in input buffer
  543.  
  544.  
  545.  
  546. /************************************************************************
  547. /    CHECK FOR XON OR XOFF
  548. /
  549. /    IF xon then  error RETURN with ac 0
  550. /    IF xoff then error RETURN with ac 1
  551. /    ELSE (none of these ) do a skip RETURN
  552. /***********************************************************************
  553.  
  554. CHKXNF,
  555.     0
  556.     TAD    CHRIN        / get char
  557.     TAD    (-XOF)        / IS IT AN XOFF?
  558.     SNA    
  559.     JMP    CHKXN1        / yes it was jump to handle it
  560.     TAD    (XOF-XON)    / is itan XON
  561.     SZA CLA            / skip if yes
  562.     ISZ    CHKXNF        / make a skip rerturn
  563.     JMP I    CHKXNF        / return
  564.  
  565. CHKXN1,
  566.     CLA IAC            / AC001 to signal XOFF
  567.     JMP I    CHKXNF        / return
  568.  
  569.  
  570. /*************************************************************************
  571. /   TTYIN
  572. /    to check the keyboard buffer for input and get the char
  573. /
  574. /    Called from mainline prog
  575. /    RETURNS
  576. /        error if no char in buffer
  577. /        skip with char in ac if found
  578. /************************************************************************
  579.  
  580. TTYIN,    0
  581.     CLA            / claer out ac
  582.     TAD    KEYCNT        / get buffer count
  583.     SNA CLA            / not 0 hence has something
  584.     JMP    TTYINX        / error exit
  585.  
  586. / something to read --- go get it
  587.  
  588. TTY2,
  589.     TAD I    BKEYBPTR    / read from buffer
  590.     SPA            / test for buffer wrap
  591.     JMP    KEYWRP        / go wrap if ness
  592.     MQL            / save char
  593.     IOF            / Stop int while we sort the buffer
  594.     7240            / Ac7777
  595.     TAD    KEYCNT        / dec count
  596.     DCA    KEYCNT        / save result
  597.     ISZ    BKEYBPTR    / BUMP pointer
  598.     ION            / let ints rip
  599.     MQA            / restore THE CHAR
  600.     ISZ    TTYIN        / return
  601.     JMP    TTYINX
  602.  
  603. KEYWRP,    IOF            / don't let ints get inthe way
  604.     DCA    BKEYBPTR    / reset buffer pointer
  605.     JMP    TTY2        / go get next
  606.  
  607. TTYINX,    CDF CIF    00
  608.     JMP I    TTYIN
  609.  
  610. /------------------------------------------
  611.  
  612.     PAGE
  613.  
  614.  
  615.  
  616. /***********************************************************************
  617. /    SCREEN OUTPUT
  618. /    INTERRUPT HANDLER
  619. /    checks to see if output just sent. If so then send the
  620. /     next char in the buffer
  621. /**********************************************************************
  622.  
  623. SCRINT,    0
  624.     CLA CLL
  625.     TSF            / test the output flag
  626.     JMP I    SCRINT        / no continue the chain
  627.  
  628.     SKP            / SKIP over the wrap bit
  629. SCRWRP,    DCA    SCRBPTR        / deposit here if wrap
  630.     SKP
  631. SCRONT,    0            / dummy int call from key stop function
  632. SCROUT,    CLA IAC            / AC0001
  633.     DCA    SCRBSY        / set the screen busy
  634.     TCF            / reset int flag
  635.     TAD    SCRAUTO        / setting auto repeat on off
  636.     SZA            / skip if not
  637.     JMP    SETAUTO        / go set the auto on/off
  638.     TAD    SCRCNT        / have we got anything to send?
  639.     SNA CLA            / skip if yes
  640.     JMP    SCRU1C        / no jump
  641.     TAD    SCRSTP        / stop flag set?
  642.     SZA CLA            / Stopped?
  643.     JMP    SCRU1C        / jump if stopped
  644.     TAD I    SCRBPTR        / get a char
  645.     SPA             / test for wrap
  646.     JMP    SCRWRP        / wrpa if required
  647.  
  648.     / possible check for terminator in here
  649.  
  650.     TLS            / print it
  651.     7240            /    AC7777
  652.     TAD    SCRCNT        / decrement count
  653.     DCA    SCRCNT        / and save it
  654.     ISZ    SCRBPTR        / bump pointer
  655.     ISZ    SCRINT        / bump return address
  656.     JMP I    SCRINT        / RETURN done
  657.  
  658. SETAUTO,
  659.     TLS            / print auto on/off
  660.     ISZ    SCRAUTO        / bump for nezxt time
  661.     ISZ    SCRINT        / bump return address
  662.     JMP I    SCRINT        / RETURN done
  663.  
  664. SCRU1C,
  665.     TAD    SCRFLG        / are we here to change the setting???
  666.     SZA            / ??
  667.     JMP    SCR3        / jump if yes
  668.     DCA    SCRBSY        / reset the busy flag
  669.     TAD    SCRSTP        / stopped?
  670.     SNA CLA            / ??
  671.     6045            / clear output ints enable
  672.  
  673.     ISZ    SCRINT        /
  674.     JMP I    SCRINT        / RETURN done
  675.  
  676. SCR3,    CLA            / ignore this function for now
  677.     DCA    SCRFLG        /
  678.     ISZ    SCRINT        /
  679.     JMP I    SCRINT        / RETURN
  680.  
  681. BSCRBPTR,
  682.     SCRBUFF            / bottom of ring buff
  683.  
  684. SCRBPTR,SCRBUFF            / pointer to screen buff
  685. SCRBSY,    0            / screen busy flag
  686. SCRAUTO,0            / auto repeat flag
  687. SCRCNT,    0            / screen buffer count
  688. SCRSTP,    0            / stopped flag
  689. SCRFLG,    0            / change setting flag
  690.  
  691.  
  692.  
  693. /*************************************************************************
  694. /    OUTPUT A CHARACTER TO THE SCREEN
  695. /
  696. /    put a char into the output buffer an start the output if ness.
  697. /    RETURNS:    ERROR if the buffer full and has char in
  698. /                acc for retry
  699. /            SKIP  if OK.
  700. /************************************************************************
  701.  
  702. TTYOU,    0
  703.     AND    (377)        / only 8 bits valid
  704.     DCA    TTYCHR
  705.     TAD    TTYCHR
  706.     DCA I    BSCRBPTR    / put into buffer
  707.     TAD    SCRCNT        / get the screen count
  708.     TAD    (-BUFMAX)    / get the buffer size
  709.     SNA CLA            / test for full
  710.     JMP    TTYFUL        / yes full
  711.     IOF            / don't allow ints when updating buff
  712.     ISZ    SCRCNT        / bump count
  713.     TAD    SCRBSY        / output running ?
  714.     SNA CLA            / ??
  715.     JMS     STRTOP        / force entry if not
  716.     ISZ    BSCRBPTR    / bump the pointer
  717.     TAD I    BSCRBPTR    / test for wrap
  718.     SPA            / do the buff wrap test
  719.     DCA    BSCRBPTR    / reset the buffer
  720.     CLA CLL
  721.     ION            / let ints through again
  722.     ISZ    TTYOU        / return
  723.     TAD    TTYCHR        / retrun last character as TLS does
  724.     JMP    TTYOUX        / OK.
  725.  
  726. TTYFUL,    TAD I    BSCRBPTR    / get the char back ready for retry
  727.  
  728. TTYOUX,    CDF CIF    00
  729.     JMP I    TTYOU        / error return
  730.  
  731. STRTOP,    0
  732.     CLA    IAC        / ac0001
  733.     TIE            / allow ints
  734.     SPF            / force entry in output
  735.     CLA CLL    
  736.     JMP I    STRTOP        / return
  737.  
  738. TTYCHR,    0
  739.  
  740. /---------------------------------------------
  741.  
  742.     PAGE
  743.  
  744.  
  745.  
  746.     /++
  747.     /    V 3 0 S T
  748.     /
  749.     /    The compose job is a machine copy of the program indicated 
  750.     /    in the Slushware Implementation notes .
  751.     /
  752.     /    All thanks to Kenny A. House 
  753.     /--
  754.  
  755. V30ST,    0
  756.     CLA            / just to be shure
  757.     RDF            / save the calling field    
  758.     TAD    (CIDF0)        / GET THE CONSTANT
  759.     DCA    V30EXIT        / AND MAKE AN INSTRUCTION
  760.     CDF 20            / now change to current field
  761. /
  762. LBL0,    PRQ3
  763. LBL1,    5020            / Read ODT Table from Panel RAM
  764.     0004            / From Panel (0)0004 and (0)0005
  765.     ODTPTR            / Into Local Storage
  766.     -2
  767.     7777
  768. /
  769.     CLA CLL            / Build Prq to read ODT Table
  770.     TAD    ODTPTR
  771.     DCA    LBL3
  772.     TAD    ODTPTR+1
  773.     CLL RTR
  774.     CLL RAR
  775.     TAD    LBL1
  776.     DCA    LBL2
  777. /
  778.     PRQ3            / Read ODT Table
  779. LBL2,    0            / (Modified in code)
  780. LBL3,    0            / (Modified in code)
  781.     ODTTAB
  782.     -70
  783.     7777
  784. /
  785.     TAD I     XODT64        / Build PRq to read compose table location
  786.     SNA
  787.     JMP    LBL8        / No room in panel RAM, Skip cross load
  788.     DCA    LBL7
  789.     TAD    (4002)        / MOVE FROM USER FIELD 2
  790.     TAD I    XODT65
  791.     DCA    LBL6
  792. /
  793.     PRQ3            / Panel request to Crossload Compose Tables
  794. LBL6,    0            / (Modified in code)
  795.     CMPTAB            / From User address 'CMPTAB'
  796. LBL7,    0            / (Modified in code)
  797.     CMPTAB-CMPTEN        / Move entire table
  798.     7777            / Terminator
  799. /
  800. LBL8,    AC0001            / Select Compose Mode on
  801.     PRQ3            / with PR3
  802.     0016
  803.     7777
  804. /
  805.     AC0001            / select uppercase Keyboard from AC11
  806.     PRQ3
  807.     0011
  808.     7777
  809. /
  810.     CLA CLL
  811.     PRQ3            / set COM-PORT to 7 bit CSI and DATA 
  812.     0014
  813.     7777
  814.  
  815.     TAD    (MSG)        / pass pointer to LDSET
  816.     JMS    LDSET        / SETUP all G0-G3 and Level 2 Terminal
  817.                 / routine must run after every setup or
  818.                 / Compose will not work.
  819. V30EXIT,
  820.     0            / WILL GET CIF CDF CALLERFIELD
  821.     CLA CLL
  822.     JMP I    V30ST        / return to caller
  823.     
  824. ODTPTR,    ZBLOCK 2        / Pointer to ODT TABLE in Panel RAM
  825. /
  826. ODTTAB,    ZBLOCK 70
  827.  
  828.  
  829. XODT56,    ODTTAB+56
  830. XODT57,    ODTTAB+57
  831. XODT64,    ODTTAB+64
  832. XODT65,    ODTTAB+65
  833.  
  834.     PAGE
  835.  
  836.  
  837.  
  838. /----------------------------------------------------
  839. / LDSET - setup the Terminal haractersets and Level 2
  840. /----------------------------------------------------
  841. /
  842. / make shure interrupt is turned of if called from
  843. / within Kermit.
  844. /
  845. /    (AC) contains a pointer to MSG
  846. /    JMS    LDSET
  847. /
  848. LDSET,    0
  849.     DCA    MSGPTR
  850.     TLS            / send a null to wake him up
  851.                 / required as CAF or a similare PR3
  852.                 / in non interrupt mode (first time init)
  853.                 / would allowe to hung arround with TSF.    
  854. LDNXT,
  855.     CLA CLL            / clean up everything
  856.     TAD I    MSGPTR        / get the data
  857.     SNA            / all done yet
  858.     JMP    LDEXIT        / YES: return to caller
  859.  
  860.     TSF            / flag set
  861.     JMP    .-1        / wait till set
  862.     TLS            / Print it
  863.     ISZ    MSGPTR        / bump up pointer
  864.     JMP    LDNXT        / and loop again
  865.  
  866. LDEXIT,
  867.     CLA CLL            / return clean to caller
  868.     JMP I    LDSET        / RETUN TO CALLER
  869. MSGPTR,    0
  870.                 / continue with initialisation
  871.  
  872.     PAGE
  873.  
  874.  
  875.  
  876. /----------------------------------------------------------------------
  877. /    Compose tables
  878. /
  879. /    The first table lists possible Dead diacriticals (from NAPLPS
  880. /    non-spacing diacritical column) and their correspoding imaging 
  881. /    characters. This allows for smaller secondary tables (since , for
  882. /    example, a single entry suffices for acute and apostrophe).This
  883. /    table is always 0020 Octal words long.
  884. /
  885. /    Image        Dead        Name
  886. /    Code        Code    
  887. /
  888. CMPTAB,    200        /200        Vector
  889.     140        /201
  890.     047        /202    
  891.     136        /203
  892.     176        /204
  893.     205        /205
  894.     206        /206
  895.     207        /207
  896.     042        /210
  897.     057        /211
  898.     212        /212
  899.     054        /213
  900.     137        /214
  901.     215        /215
  902.     216        /216
  903.     217        /217
  904. /
  905. /    The next table lists each imaging character (040 - 176) and each 
  906. /    dead Diacritical (200-217),
  907. /    Pointing each 'first key' to a table of possible 'Second keys'.
  908. /    Table addresses are relative to the start of compose table area 'CMPTAB'
  909. /    Invalid 'First Keys' point to a dummy secondary table. Delete is 
  910. /    included for ease of programming , but must point to DUMMY.
  911. /
  912. /    Routine             Char        Char 
  913. /    Address            Code        Image
  914. /
  915.  
  916.     SPACEX-CMPTAB        /040        ' '
  917.     BANG-CMPTAB        /041        '!'
  918.     DBLQT-CMPTAB        /042        '"'
  919.     DUMMY-CMPTAB        /043        '#'
  920.     DUMMY-CMPTAB        /044        '$'
  921.     DUMMY-CMPTAB        /045
  922.     DUMMY-CMPTAB        /046
  923.     ACUTE-CMPTAB        /047
  924.     LPAREN-CMPTAB        /050
  925.     RPAREN-CMPTAB        /051
  926.     STAR-CMPTAB        /052
  927.     PLUS-CMPTAB        /053
  928.     COMMA-CMPTAB        /054
  929.     MINUS-CMPTAB        /055
  930.     PERIOD-CMPTAB        /056
  931.     SLASH-CMPTAB        /057
  932.     ZEROX-CMPTAB        /060
  933.     ONE-CMPTAB        /061
  934.     TWO-CMPTAB        /062
  935.     THREE-CMPTAB        /063
  936.     DUMMY-CMPTAB        /064
  937.     DUMMY-CMPTAB        /065
  938.     DUMMY-CMPTAB        /066
  939.     DUMMY-CMPTAB        /067
  940.     DUMMY-CMPTAB        /070
  941.     DUMMY-CMPTAB        /071
  942.     DUMMY-CMPTAB        /072
  943.     DUMMY-CMPTAB        /073
  944.     LANGLE-CMPTAB        /074
  945.     EQUAL-CMPTAB        /075
  946.     RANGLE-CMPTAB        /076
  947.     QUERY-CMPTAB        /077
  948.     DUMMY-CMPTAB        /100
  949.     UPPERA-CMPTAB        /101
  950.     DUMMY-CMPTAB        /102
  951.     UPPERC-CMPTAB        /103
  952.     DUMMY-CMPTAB        /104
  953.     UPPERE-CMPTAB        /105
  954.     DUMMY-CMPTAB        /106
  955.     DUMMY-CMPTAB        /107
  956.     DUMMY-CMPTAB        /110
  957.     UPPERI-CMPTAB        /111
  958.     DUMMY-CMPTAB        /112
  959.     DUMMY-CMPTAB        /113
  960.     UPPERL-CMPTAB        /114
  961.     DUMMY-CMPTAB        /115
  962.     UPPERN-CMPTAB        /116
  963.     UPPERO-CMPTAB        /117
  964.     UPPERP-CMPTAB        /120
  965.     DUMMY-CMPTAB        /121
  966.     DUMMY-CMPTAB        /122
  967.     UPPERS-CMPTAB        /123
  968.     DUMMY-CMPTAB        /124
  969.     UPPERU-CMPTAB        /125
  970.     DUMMY-CMPTAB        /126
  971.     DUMMY-CMPTAB        /127
  972.     UPPERX-CMPTAB        /130
  973.     UPPERY-CMPTAB        /131
  974.     DUMMY-CMPTAB        /132
  975.     DUMMY-CMPTAB        /133
  976.     DUMMY-CMPTAB        /134
  977.     DUMMY-CMPTAB        /135
  978.     CIRCUM-CMPTAB        /136
  979.     ULINE-CMPTAB        /137
  980.     GRAVE-CMPTAB        /140
  981.     LOWERA-CMPTAB        /141
  982.     DUMMY-CMPTAB        /142
  983.     LOWERC-CMPTAB        /143
  984.     DUMMY-CMPTAB        /144
  985.     LOWERE-CMPTAB        /145
  986.     DUMMY-CMPTAB        /146
  987.     DUMMY-CMPTAB        /147
  988.     DUMMY-CMPTAB        /150
  989.     LOWERI-CMPTAB        /151
  990.     DUMMY-CMPTAB        /152
  991.     DUMMY-CMPTAB        /153
  992.     LOWERL-CMPTAB        /154
  993.     DUMMY-CMPTAB        /155
  994.     LOWERN-CMPTAB        /156
  995.     LOWERO-CMPTAB        /157
  996.     LOWERP-CMPTAB        /160
  997.     DUMMY-CMPTAB        /161
  998.     DUMMY-CMPTAB        /162
  999.     LOWERS-CMPTAB        /163
  1000.     DUMMY-CMPTAB        /164
  1001.     LOWERU-CMPTAB        /165
  1002.     DUMMY-CMPTAB        /166
  1003.     DUMMY-CMPTAB        /167
  1004.     LOWERX-CMPTAB        /170
  1005.     LOWERY-CMPTAB        /171
  1006.     DUMMY-CMPTAB        /172
  1007.     DUMMY-CMPTAB        /173
  1008.     VRTBAR-CMPTAB        /174
  1009.     DUMMY-CMPTAB        /175
  1010.     TILDE-CMPTAB        /176
  1011.     DUMMY-CMPTAB        /177
  1012.  
  1013. /
  1014.     DUMMY-CMPTAB        /200
  1015.     GRAVE-CMPTAB        /201
  1016.     ACUTE-CMPTAB        /202
  1017.     CIRCUM-CMPTAB        /203
  1018.     TILDE-CMPTAB        /204
  1019.     DUMMY-CMPTAB        /205
  1020.     DUMMY-CMPTAB        /206
  1021.     DUMMY-CMPTAB        /207
  1022.     DBLQT-CMPTAB        /210
  1023.     DUMMY-CMPTAB        /211
  1024.     STAR-CMPTAB        /212
  1025.     COMMA-CMPTAB        /213
  1026.     DUMMY-CMPTAB        /214
  1027.     DUMMY-CMPTAB        /215
  1028.     DUMMY-CMPTAB        /216
  1029.     DUMMY-CMPTAB        /217
  1030.  
  1031.  
  1032.  
  1033. /
  1034. /    The secondary tables are each terminated with a 0000. Each entry is
  1035. /    two words: The first is the 2's complement of a character that forms
  1036. /    a valid compose sequence with the first character (that pointed to
  1037. /    this table), the second word is the resulting composed character
  1038. /
  1039.  
  1040. DUMMY,    0000            / Dummy table , just a terminator
  1041. /
  1042. SPACEX,    -042;    042
  1043.     -047;    047
  1044.     -136;    136
  1045.     -140;    140
  1046.     -176;    176
  1047.     -052;    260
  1048.     0000
  1049.  
  1050. /
  1051. /
  1052. DBLQT,    -040;    042
  1053.     -141;    344
  1054.     -145;    353
  1055.     -151;    357
  1056.     -157;    366
  1057.     -165;    374
  1058.     -171;    375
  1059.     -101;    304
  1060.     -105;    313
  1061.     -111;    317
  1062.     -117;    326
  1063.     -125;    334
  1064.     -131;    335
  1065.     0000
  1066.  
  1067. /
  1068. ACUTE,    -040;    047
  1069.     -101;    301
  1070.     -105;    311
  1071.     -111;    315
  1072.     -117;    323
  1073.     -125;    332
  1074.     -141;    341
  1075.     -145;    351
  1076.     -151;    355
  1077.     -157;    363
  1078.     -165;    372
  1079.     0000
  1080.  
  1081.  
  1082.  
  1083. CIRCUM,    -040;    136
  1084.     -101;    302
  1085.     -105;    312
  1086.     -111;    316
  1087.     -117;    324
  1088.     -125;    333
  1089.     -141;    342
  1090.     -145;    352
  1091.     -151;    356
  1092.     -157;    364
  1093.     -165;    373
  1094.     -060;    260
  1095.     -062;    262
  1096.     -063;    263
  1097.     -056;    267
  1098.     -061;    271
  1099.     -057;    174
  1100.     0000
  1101.  
  1102. /
  1103. GRAVE,    -040;    140
  1104.     -101;    300
  1105.     -105;    310
  1106.     -111;    314
  1107.     -117;    322
  1108.     -125;    331
  1109.     -141;    340
  1110.     -145;    350
  1111.     -151;    354
  1112.     -157;    362
  1113.     -165;    371
  1114.     0000
  1115.  
  1116. /
  1117. TILDE,    -040;    176
  1118.     -101;    303
  1119.     -116;    321
  1120.     -117;    325
  1121.     -141;    343
  1122.     -156;    361
  1123.     -157;    365
  1124.     0000
  1125.  
  1126. /
  1127. BANG,    -041;    241
  1128.     -120;    266
  1129.     -160;    266
  1130.     -123;    247
  1131.     -163;    247
  1132.     0000
  1133.  
  1134. /
  1135. LPAREN,    -055;    173
  1136.     -050;    133
  1137.     0000
  1138.  
  1139. /
  1140. RPAREN,    -055;    175
  1141.     -051;    135
  1142.     0000
  1143.  
  1144.  
  1145.  
  1146. STAR,    -040;    260
  1147.     -101;    305
  1148.     -141;    345
  1149.     0000
  1150.  
  1151. /
  1152. PLUS,    -053;    043
  1153.     -055;    261
  1154.     0000
  1155.  
  1156. /
  1157. COMMA,    -040;    054
  1158.     -103;    307
  1159.     -143;    347
  1160.     0000
  1161.  
  1162. /
  1163. MINUS,    -050;    173
  1164.     -051;    175
  1165.     -114;    243
  1166.     -154;    243
  1167.     -131;    245
  1168.     -171;    245
  1169.     -053;    261
  1170.     0000
  1171.  
  1172. /
  1173. PERIOD,    -136;    267
  1174.     0000
  1175.  
  1176. /
  1177. SLASH,    -057;    134
  1178.     -074;    134
  1179.     -136;    174
  1180.     -103;    242
  1181.     -143;    242
  1182.     -125;    265
  1183.     -165;    265
  1184.     -117;    330
  1185.     -157;    370
  1186.     0000
  1187.  
  1188. /
  1189. ZEROX,    -123;    247
  1190.     -163;    247
  1191.     -130;    250
  1192.     -170;    250
  1193.     -103;    251
  1194.     -143;    251
  1195.     -136;    260
  1196.     0000
  1197.  
  1198. /
  1199. ONE,    -136;    271
  1200.     -062;    275
  1201.     -064;    274
  1202.     0000
  1203.  
  1204. /
  1205. TWO,    -136;    262
  1206.     0000
  1207.  
  1208.  
  1209.  
  1210. THREE,    -136;    263
  1211.     0000
  1212.  
  1213. /
  1214. LANGLE,    -074;    253
  1215.     -057;    134
  1216.     0000
  1217.  
  1218. /
  1219. EQUAL,    -114;    243
  1220.     -154;    243
  1221.     -131;    245
  1222.     -171;    245
  1223.     0000
  1224.  
  1225. /
  1226. RANGLE,    -076;    273
  1227.     0000
  1228.  
  1229. /
  1230. QUERY,    -077;    277
  1231.     0000
  1232.  
  1233. /
  1234. UPPERA,    -101;    100
  1235.     -141;    100
  1236.     -137;    252
  1237.     -140;    300
  1238.     -047;    301
  1239.     -136;    302
  1240.     -176;    303
  1241.     -042;    304
  1242.     -052;    305
  1243.     -105;    306
  1244.     0000
  1245.  
  1246. /
  1247. LOWERA,    -141;    100
  1248.     -101;    100
  1249.     -137;    252
  1250.     -140;    340
  1251.     -047;    341
  1252.     -136;    342
  1253.     -176;    343
  1254.     -042;    344
  1255.     -052;    345
  1256.     -145;    346
  1257.     0000
  1258.  
  1259. /
  1260. UPPERE,    -140;    310
  1261.     -047;    311
  1262.     -136;    312
  1263.     -042;    313
  1264.     0000
  1265.  
  1266. /
  1267. LOWERE,    -140;    350
  1268.     -047;    351
  1269.     -136;    352
  1270.     -042;    353
  1271.     0000
  1272.  
  1273.  
  1274.  
  1275. UPPERI,    -140;    314
  1276.     -047;    315
  1277.     -136;    316
  1278.     -042;    317
  1279.     0000
  1280.  
  1281. /
  1282. LOWERI,    -140;    354
  1283.     -047;    355
  1284.     -136;    356
  1285.     -042;    357
  1286.     0000
  1287.  
  1288. /
  1289. UPPERC,    -054;    307
  1290.     -057;    242
  1291.     -174;    242
  1292.     -060;    251
  1293.     -117;    251
  1294.     -157;    251
  1295.     0000
  1296.  
  1297. /
  1298. LOWERC,    -054;    347
  1299.     -057;    242
  1300.     -174;    242
  1301.     -060;    251
  1302.     -157;    251
  1303.     -117;    251
  1304.     0000
  1305.  
  1306. /
  1307. UPPERO,    -140;    322
  1308.     -047;    323
  1309.     -136;    324
  1310.     -176;    325
  1311.     -042;    326
  1312.     -105;    327
  1313.     -057;    330
  1314.     -123;    247
  1315.     -163;    247
  1316.     -130;    250
  1317.     -170;    250
  1318.     -103;    251
  1319.     -143;    251
  1320.     -137;    272
  1321.     0000
  1322.  
  1323. /
  1324. LOWERO,    -140;    362
  1325.     -047;    363
  1326.     -136;    364
  1327.     -176;    365
  1328.     -042;    366
  1329.     -145;    367
  1330.     -057;    370
  1331.     -163;    247
  1332.     -123;    247
  1333.     -170;    250
  1334.     -130;    250
  1335.     -143;    251
  1336.     -103;    251
  1337.     -137;    272
  1338.     0000
  1339.  
  1340. /
  1341. UPPERU,    -140;    331
  1342.     -047;    332
  1343.     -136;    333
  1344.     -042;    334
  1345.     0000
  1346.  
  1347. /
  1348. LOWERU,    -140;    371
  1349.     -047;    372
  1350.     -136;    373
  1351.     -042;    374
  1352.     0000
  1353.  
  1354. /
  1355. UPPERL,    -055;    243
  1356.     -075;    243
  1357.     0000
  1358.  
  1359.  
  1360. /
  1361. LOWERL,    -055;    243
  1362.     -075;    243
  1363.     0000
  1364.  
  1365. /
  1366. UPPERN,    -176;    321
  1367.     0000
  1368.  
  1369. /
  1370. LOWERN,    -176;    361
  1371.     0000
  1372.  
  1373. /
  1374. UPPERP,    -041;    266
  1375.     0000
  1376.  
  1377. /
  1378. LOWERP,    -041;    266
  1379.     0000
  1380.  
  1381. /
  1382. UPPERS,    -060;    247
  1383.     -117;    247
  1384.     -157;    247
  1385.     -041;    247
  1386.     0000
  1387.  
  1388. /
  1389. LOWERS,    -060;    247
  1390.     -157;    247
  1391.     -117;    247
  1392.     -041;    247
  1393.     -163;    337
  1394.     0000
  1395.  
  1396. /
  1397. UPPERX,    -060;    250
  1398.     -117;    250
  1399.     -157;    250
  1400.     0000
  1401.  
  1402.  
  1403.  
  1404. LOWERX,    -060;    250
  1405.     -157;    250
  1406.     -117;    250
  1407.     0000
  1408.  
  1409. /
  1410. UPPERY,    -055;    245
  1411.     -075;    245
  1412.     -042;    335
  1413.     0000
  1414.  
  1415. /
  1416. LOWERY,    -055;    245
  1417.     -075;    245
  1418.     -042;    375
  1419.     0000
  1420.  
  1421. /
  1422. ULINE,    -101;    252
  1423.     -141;    252
  1424.     -117;    272
  1425.     -157;    272
  1426.     0000
  1427.  
  1428. /
  1429. VRTBAR,    -103;    242
  1430.     -143;    242
  1431.     0000
  1432.  
  1433. DEGREE,    -040;    260
  1434.     -101;    305
  1435.     -141;    345
  1436.     0000
  1437. /
  1438.     CMPTEN= .
  1439.  
  1440.  
  1441. /------------------------------------------------------
  1442. / MSG - Esc sequences to setup the Terminal for Connect
  1443. /------------------------------------------------------
  1444. /
  1445. / MSGLV2 is used from SETUP as only first time init will
  1446. / set G0 to G3 and do the Locking Shifts to GL and GR
  1447. /
  1448. MSG,
  1449.     033;"(&177;"B&177        / ASCII Set in G0
  1450.     033;")&177;"0&177        / Line  Set in G1
  1451.     033;"*&177;074            / MCS   Set in G2
  1452.     033;"+&177;076            / TCS   Set in G3
  1453.     033;"}&177            / LS2R
  1454.     017                / LS0/SI
  1455. MSGLV2,
  1456.     033;"[&177;"6&177;"2&177
  1457.     ";&177;"2&177;""&177;"p&177    / select leve 2 and C1 8bitters
  1458.     0
  1459. /
  1460.  
  1461.  
  1462.     *4000
  1463.  
  1464. /*************************************************************************
  1465. /   I/O buffer area
  1466. /*************************************************************************
  1467.  
  1468. /                         screen buffer
  1469. SCRBUF,    
  1470.     ZBLOCK    170
  1471.     0
  1472.     SCRBUF                / put addres of start here
  1473.     PAGE
  1474. /                         keyboard buffer
  1475. KEYBUF,
  1476.     ZBLOCK    170
  1477.     0
  1478.     KEYBUF                / addres of start
  1479.     PAGE
  1480. /            comms output buffer
  1481. OBUF,
  1482.     ZBLOCK    170
  1483.     0
  1484.     OBUF                / addres of start
  1485.     PAGE
  1486. /            comms input buffer
  1487. IBUF,
  1488.     ZBLOCK    170
  1489.     0
  1490.     IBUF                / address of start
  1491.     PAGE
  1492.  
  1493. /---------------------------------------------------------------
  1494.  
  1495.