home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / archives / rt11pascal.zip / rtline.pas < prev    next >
Pascal/Delphi Source File  |  1984-05-22  |  9KB  |  434 lines

  1. {$E+}
  2.  
  3. { Externals Procedues -- for DLV11-J  or DL11-E } 
  4.  
  5. FUNCTION CheckTheConsole : boolean;
  6. EXTERNAL;
  7.  
  8. { Xbreak has to be external }
  9. PROCEDURE Xbreak(VAR f :text);
  10. BEGIN
  11.   break(f);
  12. END;
  13.  
  14. Procedure GETCL(VAR { Returning    } c, { use integer not character }
  15.             { Using    } TimeLeft : integer);
  16. { Get character    from line }
  17. VAR            
  18.  count : integer;
  19. BEGIN
  20.  
  21.     REPEAT 
  22. {$C
  23.     MOV    BCOUNT,count(SP)        ;GET ACTIVE COUNT
  24. }
  25.  
  26.     UNTIL CheckTheConsole OR (count >0) OR (TimeLeft <=0);
  27.  
  28. {$C    
  29.     TST    BCOUNT                ;ANY THING IN BUFFER ?
  30.     BEQ    9$                ;NO, SKIP
  31. 1$:    MOVB    @ADDR2,R0            ;GET CHARACTER
  32.     INC    ADDR2                ;ADVANCE PROC ADR PTR
  33.     DEC    BCOUNT                ;DEC ACTIVE CHAR COUNT
  34.     DEC    CNT2                ;DEC PROC CHAR COUNT
  35.     BNE    9$                ;END OF    REC. BUFFER ?
  36.     MOV    #BUFA,ADDR2            ;YES, RESET PROC ADR PTR
  37.     MOV    #^O1000,CNT2            ;RESET PROC CHAR COUNT
  38. 9$:    MOV    R0,@c(SP)
  39.  
  40. }
  41. END;
  42.  
  43. Procedure PUTCL(VAR c :    integer); { Output character to    line }
  44. BEGIN
  45.  {$C
  46.  
  47.     MOV    @c(SP),R0            ;MOVE TO REG 0
  48.     JSR    PC,SEND1            ;OUTPUT
  49. }
  50.  
  51. END;
  52.  
  53. {$C
  54. ;     
  55. ;    Main Part of Code
  56. ;
  57. ;    FROM TSTE.MAC -    TIME SHARE TERMINAL EMULATOR UNDER RT-11
  58. ;         ( ORIGINALLY FROM DECUS )
  59. ;
  60. ;    Use Octal !!
  61.     .RADIX    8         
  62. ;
  63. DCSR = 176500    ;DEFAULT CSR    ( SYSTEM DEPENDENT )
  64. DVEC = 300    ;DEFAULT VECTOR        "  
  65. IMASK =    106    ;INIT MASK -- START INTERUPT & RTS
  66. ESCAPE=35    ;ESCAPE    CHARACTER - 33 FOR <ESC> IF YOU LIKE
  67. JSW=44        ;JOB STATUS WORD
  68. CR=15        ;CARRAGE RETURN
  69. LF=12        ;LINE FEED
  70. LETC=143    ;'c'
  71. ;*****************************************************
  72.     .MCALL .PRINT
  73.     .MCALL .SCCA
  74.     .MCALL .TTINR,.TTYOUT
  75.     .GLOBL    SETLIN
  76.     .GLOBL    VIRTUA
  77.     .GLOBL    RESETL
  78.     .GLOBL    CLRBUF
  79.     .GLOBL    RCSR
  80.     .GLOBL    RVEC
  81.     .GLOBL    PARFLG
  82.     .GLOBL    ECHO
  83.     .GLOBL    CONLOW
  84.     .GLOBL    TTSPEC,TTNORM
  85. ;********************************************************
  86. ;
  87. ; SetLine Entry    Point
  88. ;
  89. SETLIN:    MOV    #RINT,@RVEC            ;LOAD DL11 INT VECTOR
  90.     MOV    #200,@RVEC2            ;BR4
  91.     BIS    #IMASK,@RCSR            ;ENABLE    INT & REQ SEND
  92.     JSR    PC,CLRBUF            ;CLEAR BUFFER
  93.     RTS    PC                ;RETURN
  94.                         ;
  95. ;
  96. ; Virtual Entry    Point
  97. ;                        
  98. VIRTUA:    CLR    SWITCH                ;SET CONTROL SWITCH OFF
  99.     CLR    SENDLF                ;NO <LF>'S
  100.     .SCCA    #AREA,#CHECKC            ;INHIBIT CONTROL C ABORT
  101. ;*****************************************************
  102. ;MAIN LOOP
  103. READY:    JSR    PC,PRINT            ;CHECK PRINT BUFFER
  104.     JSR    PC,TTSPEC            ;KEYBOARD IN SPECIAL MODE
  105.     .TTINR                    ;KEYBOARD INPUT?
  106.     BCS    READY                ;NO KEYBORAD INPUT, SKIP
  107.     TST    SENDLF
  108.     BNE    1$    
  109.     CMPB    R0,#LF                ;LF ?
  110.     BEQ    READY                ;YES, SKIP
  111. 1$:    TST    SWITCH                ;CHECK FOR CONTROL MODE
  112.     BEQ    13$
  113.     CLR    SWITCH                ;IN CONTROL MODE 
  114.     CMPB    R0,#'L
  115.     BNE    2$
  116.     COM    SENDLF                ;FLIP FLAG    
  117.     BR    READY
  118. 2$:    CMPB    R0,#'B                ;BREAK CHARACTER ?
  119.     BNE    8$
  120. 7$:    JSR    PC,BREAK
  121.     BR    READY
  122. 8$:    CMPB    R0,#ESCAPE            ;SEND ESCAPE TO    HOST
  123.     BNE    9$
  124.     CLR    SWITCH                ;SET CONTROL OFF
  125.     BR    14$
  126. 9$:    CMPB    R0,#'?                ;CHECK FOR HELP
  127.     BNE    11$
  128. 10$:    JSR    PC,PHELP
  129.     BR    READY
  130. 11$:    CMPB    R0,#'C                ;CHECK FOR END
  131.     BEQ    25$
  132. 21$:    CMPB    R0,#LETC                
  133.     BNE    10$                ;PRINT HELP ON ERROR
  134. ;
  135. ;  EXIT    HERE BACK TO MAIN PROGRAM AFTER    VIRTUAL    CONNECTION
  136. ;  RESET POINTERS FIRST
  137. ;
  138. 25$:    JSR    PC,CLRBUF
  139.     JSR    PC,TTNORM            ;NORMAL    MODE
  140.     JSR    PC,CONLOW            ;LOWER CASE 
  141.     .SCCA    #AREA,#0            ;RESTORE CONTROL C ABORT
  142.     RTS    PC
  143. 13$:    CMPB    R0,#ESCAPE            ;CHECK FOR ESCAPE
  144.     BNE    14$                ;IF NOT    SEND
  145.     MOV    #1,SWITCH            ;SET SWITCH
  146.     BR    READY
  147. 14$:    JSR    PC,SEND                ;SEND ALL OTHER    CHAR
  148.     BR    READY
  149. ;
  150. ;  CLEAR INTERUPTS - ResetLine 
  151. ;
  152. RESETL:    BIC    #IMASK,@RCSR            ;CLEAR BITS
  153.     RTS    PC
  154. ;*****************************************************
  155. ; CLEAR BUFFER - CLRBUF
  156. CLRBUF:    MOV    #BUFA,ADDR            ;RING BUFFER ADR PTR
  157.     MOV    #1000,CNT            ;RING BUFFER CHAR COUNT
  158.     CLR    BCOUNT                ;ACTIVE    CHAR COUNT
  159.     MOV    #BUFA,ADDR2            ;PROCESS ADR POINTER
  160.     MOV    #1000,CNT2            ;PROCESS CHAR COUNT
  161.     RTS    PC
  162. ;*****************************************************
  163. ;
  164. ;SEND A    BREAK
  165. ;
  166. BREAK:    CLR    R0
  167.     JSR    PC,SEND1            ;SEND A    NULL
  168.     MOV    #30.,FILL1
  169. 1$:    BIS    #1,@XCSR            ;SET BREAK BIT
  170.     JSR    PC,SEND1            ;SEND A    NULL, 30 TIMES
  171.     DEC    FILL1
  172.     BNE    1$
  173.     JSR    PC,SEND1            ;SEND A    NULL
  174.     BIC    #1,@XCSR            ;CLEAR BREAK BIT
  175.     RTS    PC
  176. ;*****************************************************
  177. ;
  178. ;TRANSMIT A CHARACTER TO REMOTE
  179. ;
  180. SEND:    TST    SENDLF
  181.     BNE    2$    
  182.     CMPB    R0,#LF                ; IS CHARACTER A <LF>
  183.     BEQ    9$                ; YES, DO NOT SEND IT
  184. 2$:    JSR    PC,SEND1            ;SEND CHARACTER
  185.     TST    ECHO                ;ECHO ?
  186.     BEQ    9$        
  187.     BICB    #200,R0                ;STRIP PARITY
  188.     .TTYOUT                    ;AND ECHO 
  189. 9$:    RTS    PC
  190. SEND1:    TST    PARFLG
  191.     BLT    30$
  192.     BIC    #177600,R0            ;MAKE SURE WE HAVE 7 BITS
  193.     TST    PARFLG                ;EVEN OR ODD
  194.     BEQ    10$
  195.     TSTB    PARTAB(R0)            ;ODD
  196.     BEQ    20$    
  197.     BR    30$
  198. 10$:    TSTB    PARTAB(R0)            ;EVEN
  199.     BEQ    30$
  200. 20$:    BISB    #200,R0                ;SET BIT 8
  201. 30$:    NOP
  202. 40$:    TSTB    @XCSR                ;BUSY ?
  203.     BPL    40$                ;AGAIN
  204.     MOVB    R0,@XBUF            ;SEND CHAR
  205.     RTS    PC
  206. ;*****************************************************
  207. ;
  208. ;PRINT REMOTE INPUTS AND TRANSMISSION ECHOS - VIRTUAL
  209. ;
  210. PRINT:    TST    BCOUNT                ;ANY THING IN BUFFER ?
  211.     BEQ    9$                ;NO, SKIP
  212.     MOV    R0,-(SP)            ;SAVE REG R0
  213. 1$:    MOVB    @ADDR2,R0            ;GET CHARACTER
  214.     BICB    #200,R0                ;STRIP PARITY BIT
  215.     INC    ADDR2                ;ADVANCE PROC ADR PTR
  216.     DEC    BCOUNT                ;DEC ACTIVE CHAR COUNT
  217.     DEC    CNT2                ;DEC PROC CHAR COUNT
  218.     BNE    5$                ;END OF    REC. BUFFER ?
  219.     MOV    #BUFA,ADDR2            ;YES, RESET PROC ADR PTR
  220.     MOV    #1000,CNT2            ;RESET PROC CHAR COUNT
  221. 5$:    .TTYOUT                    ;PRINT IT
  222. 3$:    TST    BCOUNT                ;DONE ?
  223.     BNE    1$                ;NO, AGAIN
  224.     MOV    (SP)+,R0
  225. 9$:    RTS    PC
  226. ;*****************************************************
  227. TTSPEC:    BIS    #50000,@#JSW            ;SET TO    SPECIAL    MODE 
  228.     RTS    PC
  229. TTNORM:    BIC    #50000,@#JSW            ;SET TO    NORMAL
  230.     RTS    PC
  231. ;*****************************************************
  232. PHELP:    .PRINT    #MHELP                ;PRINT INSTRUCTIONS
  233.     RTS    PC
  234. ;******************************************************
  235. ;INTERRUPT SERVICE ROUTINE
  236. RINT:    INC    BCOUNT                ;INC ACTIVE CHAR COUNT
  237.     MOVB    @RBUF,@ADDR            ;MOVE TO RING BUFFER
  238.     INC    ADDR                ;ADVANCE ADR POINTER
  239.     DEC    CNT                ;DEC RING BUFFER CHAR CNT
  240.     BNE    9$                ;END OF    BUFFER ?
  241.     MOV    #BUFA,ADDR            ;YES, RESET POINTERS
  242.     MOV    #1000,CNT
  243. 9$:    RTI
  244. ;*****************************************************
  245.     .EVEN
  246. RCSR:    .WORD    DCSR                ;DL11 STATUS REGISTER  
  247. RBUF:    .WORD    DCSR + 2            ;DL11 RECEIVE BUFFER ADDRESS
  248. XCSR:    .WORD    DCSR + 4            ;DL11 TRANSMIT STATUS ADDRESS
  249. XBUF:    .WORD    DCSR + 6            ;DL11 TRANSMIT BUFFER ADDRESS
  250. RVEC:    .WORD    DVEC                ;VECTOR
  251. RVEC2:    .WORD    DVEC + 2            ;VECTOR    + 2
  252. PARFLG:    .WORD    0                ;-1 NONE
  253.                         ;0  EVEN
  254.                         ;1  ODD      
  255. ECHO:    .WORD    0                ;ECHO  
  256. INPNT:    .WORD    0                ;RECEIVE BUFFER    POINTER
  257. INBLK:    .WORD    0                ;RECEIVE BLOCK COUNT
  258. INCHR:    .WORD    0                ;RECEIVE CHAR COUNT
  259. ADDR:    .WORD    0                ;RING BUFFER ADR PTR
  260. CNT:    .WORD    0                ;RING BUFFER CHAR COUNT
  261. ADDR2:    .WORD    0                ;PROCESS ADR PTR
  262. CNT2:    .WORD    0                ;PROCESS CHAR COUNT
  263. BCOUNT:    .WORD    0                ;ACTIVE    CHAR COUNT 
  264. SENDLF:    .WORD    0                ;SEND <LF>'S
  265. AREA:    .BLKW    10
  266. SAVED:    .WORD    0
  267. FILL:    .WORD    1                ;NUMBER    OF FILLS
  268. FILL1:    .WORD    0                ;FILL CHARACTER    COUNT
  269. CHECKC:    .WORD    0                ;USED BY SCCA
  270. SWITCH:    .WORD    0                ;SWITCH    FOR CONTROL
  271. SAVESP:    .WORD    0                ;USED TO SAVE STACK
  272. MHELP:    .ASCII    <CR><LF>"Help For Connect"<CR><LF>
  273.     .ASCII    "^]    ?    Help "<CR><LF>
  274.     .ASCII    "^]    L    Toggle Send <LF>"<CR><LF>
  275.     .ASCII    "^]    B    Send Break"<CR><LF>
  276.     .ASCII    "^]    C    Return To Local    Mode"<CR><LF>
  277.     .ASCIZ    "^]    ^]    Send ^] To Host"
  278.     .EVEN
  279. BUFA:    .BLKB    1000                ;RING BUFFER
  280. ;
  281. ;
  282. ;    PARITY BIT TABLE
  283. ;
  284. PARTAB:    
  285. ;            OCTAL 0 - 7
  286.     .BYTE    0
  287.     .BYTE    1
  288.     .BYTE    1
  289.     .BYTE    0
  290.     .BYTE    1
  291.     .BYTE    0
  292.     .BYTE    0
  293.     .BYTE    1
  294. ;            10 - 17
  295.     .BYTE    1
  296.     .BYTE    0
  297.     .BYTE    0
  298.     .BYTE    1
  299.     .BYTE    0
  300.     .BYTE    1
  301.     .BYTE    1
  302.     .BYTE    0
  303. ;            20 - 27
  304.     .BYTE    1
  305.     .BYTE    0
  306.     .BYTE    0
  307.     .BYTE    1
  308.     .BYTE    0
  309.     .BYTE    1
  310.     .BYTE    1
  311.     .BYTE    0
  312. ;            30 - 37
  313.     .BYTE    0
  314.     .BYTE    1
  315.     .BYTE    1
  316.     .BYTE    0
  317.     .BYTE    1
  318.     .BYTE    0
  319.     .BYTE    0
  320.     .BYTE    1
  321. ;            40 - 47
  322.     .BYTE    1
  323.     .BYTE    0
  324.     .BYTE    0
  325.     .BYTE    1
  326.     .BYTE    0
  327.     .BYTE    1
  328.     .BYTE    1
  329.     .BYTE    0
  330. ;            50 - 57
  331.     .BYTE    0
  332.     .BYTE    1
  333.     .BYTE    1
  334.     .BYTE    0
  335.     .BYTE    1
  336.     .BYTE    0
  337.     .BYTE    0
  338.     .BYTE    1
  339. ;            60 - 67
  340.     .BYTE    0
  341.     .BYTE    1
  342.     .BYTE    1
  343.     .BYTE    0
  344.     .BYTE    1
  345.     .BYTE    0
  346.     .BYTE    0
  347.     .BYTE    1
  348. ;            70 - 77
  349.     .BYTE    1
  350.     .BYTE    0
  351.     .BYTE    0
  352.     .BYTE    1
  353.     .BYTE    0
  354.     .BYTE    1
  355.     .BYTE    1
  356.     .BYTE    0
  357. ;            100 - 107
  358.     .BYTE    1
  359.     .BYTE    0
  360.     .BYTE    0
  361.     .BYTE    1
  362.     .BYTE    0
  363.     .BYTE    1
  364.     .BYTE    1
  365.     .BYTE    0
  366. ;            110 - 117
  367.     .BYTE    0
  368.     .BYTE    1
  369.     .BYTE    1
  370.     .BYTE    0
  371.     .BYTE    1
  372.     .BYTE    0
  373.     .BYTE    0
  374.     .BYTE    1
  375. ;            120 - 127
  376.     .BYTE    0
  377.     .BYTE    1
  378.     .BYTE    1
  379.     .BYTE    0
  380.     .BYTE    1
  381.     .BYTE    0
  382.     .BYTE    0
  383.     .BYTE    1
  384. ;            130 - 137
  385.     .BYTE    1
  386.     .BYTE    0
  387.     .BYTE    0
  388.     .BYTE    1
  389.     .BYTE    0
  390.     .BYTE    1
  391.     .BYTE    1
  392.     .BYTE    0
  393. ;            140 - 147
  394.     .BYTE    0
  395.     .BYTE    1
  396.     .BYTE    1
  397.     .BYTE    0
  398.     .BYTE    1
  399.     .BYTE    0
  400.     .BYTE    0
  401.     .BYTE    1
  402. ;            150 - 157
  403.     .BYTE    1
  404.     .BYTE    0
  405.     .BYTE    0
  406.     .BYTE    1
  407.     .BYTE    0
  408.     .BYTE    1
  409.     .BYTE    1
  410.     .BYTE    0
  411. ;            160 - 167
  412.     .BYTE    1
  413.     .BYTE    0
  414.     .BYTE    0
  415.     .BYTE    1
  416.     .BYTE    0
  417.     .BYTE    1
  418.     .BYTE    1
  419.     .BYTE    0
  420. ;            170 - 177
  421.     .BYTE    0
  422.     .BYTE    1
  423.     .BYTE    1
  424.     .BYTE    0
  425.     .BYTE    1
  426.     .BYTE    0
  427.     .BYTE    0    
  428.     .BYTE    1
  429. }
  430.  
  431.  
  432.  
  433.  
  434.