home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / harris800 / h800ker.asm next >
Assembly Source File  |  2020-01-01  |  14KB  |  446 lines

  1. *        MACHINE DEPENDENT ROUTINES FOR KERMIT
  2. *        SET FLAGS 1 FOR DIAGNOSTIC VERSION
  3.         XDEF  SYSINI,SYSINIT SYSTEM INITIALIZATION
  4.         XDEF  SYSFIN,SYSFIN  SYSTEM FINISH UP
  5.         XDEF  GETIN,GETIN    GET INPUT CHARACTER
  6.         XDEF  XMTCHA,XMTCHAR TRANSMIT OUTPUT CHARACTER
  7.         XDEF  CONNEC,CONNECT TALK TO REMOTE COMPUTER
  8.         XDEF  SLEEP,SLEEP    DELAY FOR GIVEN NUMBER OF SECONDS
  9.         XDEF  TTYRAW,RAW     PUT CONSOLE IN CHARACTER BY CHARACTER I/O
  10.         XDEF  TTYCOO,COOKED  PUT CONSOLE IN NORMAL MODE
  11.         XDEF  FILECR,CREATE  CREATE A FILE
  12.         XDEF  FLUSH,FLUSH    FLUSH OUTPUT BUFFER
  13.         XDEF  FIXNAM,FIXNAME REMOVE QUALIFIER FROM FILE NAME
  14. BUFSIZE EQIV  54             WORDS IN A BUFFER
  15.         SKFZ  B1
  16.         COMM  /KERMIT/RLCCNT,RLBUF(54),LRCCNT,LRBUF(54)
  17. *              RLCCNT = REMOTE TO LOCAL CHARACTER COUNT
  18. *              RLBUF  = REMOTE TO LOCAL BUFFER
  19. *              LRCCNT = LOCAL TO REMOTE CHARACTER COUNT
  20. *              LRBUF  = LOCAL TO REMOTE BUFFER
  21.         MCOM  KERMIT
  22.         ESKP
  23.         REEN
  24. SYSINIT TJM   RETURN         SAVE RETURN ADDRESS
  25.         TNK   '0313          OPEN TERMINAL OUPUT
  26.         BLU   $I/O
  27.         SKFZ  B1
  28.         TNK   '0613          OPEN DIAGNOSTIC OUTPUT
  29.         BLU   $I/O
  30.         TLO   SYSINIC        REPORT CALL
  31.         BLJ   REPORT
  32.         ESKP
  33.         BUC*  RETURN         AND RETURN
  34.         SKFZ  B1
  35.         PORG  *
  36. SYSINIC DATA  '0302
  37.         DAC   SYSINIE-SYSINIB
  38.         DAC   SYSINIB
  39.         RORG  *
  40. SYSINIB DATA  " SYSINIT CALLED"
  41. SYSINIE EQIV  *
  42. *
  43. REPORT  TJM   REPJ           SAVE RETURN
  44.         TKM   REPK           SAVE PARAMETER LIST POINTER
  45.         TOA   '0302          SEND TO TERMINAL
  46.         TAM   0,K
  47.         BLU   $IOW
  48.         TMK   REPK
  49.         TOA   '0602          SEND TO LO FILE
  50.         TAM   0,K
  51.         BLU   $IOW
  52.         BUC*  REPJ
  53.         PORG  *
  54. REPJ    DAC   *-*            RETURN FROM REPORT
  55. REPK    DAC   *-*            PARAMETER LIST POINTER
  56. LOCAL   DATA  0              0=REMOTE (I.E. HOST), OTHER=LOCAL
  57.         RORG  *
  58. *
  59. SYSFIN  TJM   RETURN         SAVE RETURN ADDRESS
  60.         TLO   SYSFINC        REPORT CALL
  61.         BLJ   REPORT
  62.         BUC*  RETURN         AND RETURN
  63.         PORG  *
  64. SYSFINC DATA  '0302
  65.         DAC   SYSFINE-SYSFINB
  66.         DAC   SYSFINB
  67. SYSFINB DATA  " SYSFIN CALLED: "
  68. SYSFINQ DATA  "REMOTE"
  69. SYSFINE EQIV  *
  70.         RORG  *
  71.         ELSE
  72. SYSFIN  BJL   0              RETURN AT ONCE--DO NOTHING
  73.         ESKP
  74. *
  75. RAW     TJM   RETURN         SAVE RETURN ADDRESS
  76.         SKFZ  B1
  77.         TLO   RAWC           REPORT CALL
  78.         BLJ   REPORT
  79.         TZM   !RLCCNT        WE HAVE NOT YET SENT ANYTHING
  80.         ELSE
  81.         TLO   HOTMODE
  82.         BLU   $I/O
  83.         ESKP
  84.         BUC*  RETURN         AND RETURN
  85.         SKFZ  B1
  86.         PORG  *
  87. RAWC    DATA  '0302
  88.         DAC   RAWE-RAWB
  89.         DAC   RAWB
  90. RAWB    DATA  " RAW CALLED: "
  91. RAWQ    DATA  "REMOTE"
  92. RAWE    EQIV  *
  93.         RORG  *
  94.         ELSE
  95. HOTMODE DATA  '0351          HOT MODE INITIALIZE
  96.         DATA  BUFSIZE        INPUT BUFFER SIZE
  97.         DAC   INPUT          LOCATION OF INPUT BUFFER
  98.         ESKP
  99. *
  100.         PORG  *
  101. INPUT   BLOK  BUFSIZE        INPUT BUFFER
  102. INCNT   DATA  0              INPUT CHARACTERS LEFT
  103. INPLACE BAC   INPUT,0        INPUT BUFFER POINTER
  104. OUTPL   DATA  '0352          HOT WRITE
  105. OUTCNT  DATA  0              OUTPUT CHARACTER COUNT
  106.         DAC   OUTPUT
  107. OUTPUT  BLOK  BUFSIZE        OUTPUT BUFFER
  108. OUTPUT2 BLOK  BUFSIZE        SECOND OUTPUT BUFFER
  109. IWHICH  DATA  0              INDICATES WHICH OUTPUT BUFFER IS USED
  110. OUTPLCE BAC   OUTPUT,0       OUTPUT BUFFER POINTER
  111.         RORG  *
  112. IN1ST   BAC   INPUT,0        POINTER TO 1ST CHARACTER OF INPUT BUFFER
  113. OUT1ST  BAC   OUTPUT,0       POINTER TO 1ST CHARACTER OF OUTPUT BUFFER
  114. OUT2ND  BAC   OUTPUT2,0      POINTER TO 1ST CHAR. OF 2ND OUTPUT BUFFER
  115. *
  116. COOKED  TJM   RETURN         SAVE RETURN ADDRESS
  117.         SKFZ  B1
  118.         TLO   COOKEDC        REPORT CALL
  119.         BLJ   REPORT
  120.         ELSE
  121.         TLO   NORMAL         RETURN TERMINAL TO NORMAL MODE
  122.         BLU   $I/O
  123.         ESKP
  124.         BUC*  RETURN         AND RETURN
  125.         SKFZ  B1
  126.         PORG  *
  127. COOKEDC DATA  '0302
  128.         DAC   COOKEDE-COOKEDB
  129.         DAC   COOKEDB
  130. COOKEDB DATA  " COOKED CALLED: "
  131. COOKEDQ DATA  "REMOTE"
  132. COOKEDE EQIV  *
  133.         RORG  *
  134.         ELSE
  135. NORMAL  DATA  '0351          NORMAL MODE PLEASE
  136.         DATA  -1
  137.         DATA  0
  138.         ESKP
  139. *
  140. GETIN   EQIV  *
  141.         GAP   1              GET ADDRESS OF TIME-OUT COUNT
  142.         TIM   TIMEOUT
  143.         GAP   1              GET ADDRESS FOR CHARACTER FROM CONSOLE
  144.         TIM   CONSOLE
  145.         TJM   RETURN         SAVE RETURN ADDRESS
  146.         BLJ   FLUSH          FLUSH OUTPUT BUFFER
  147.         TMA   INCNT          ANY INPUT CHARACTERS LEFT FROM BEFORE?
  148.         BOP   GETIN2         YES--BRANCH
  149.         TMA   IN1ST          REWIND BUFFER POINTER
  150.         TAM   INPLACE
  151. GETIN0  TNA   10             FOR 1 SECOND COUNT DOWN
  152.         TAM   COUNTDN
  153. GETIN1  EQIV  *
  154.         SKFZ  B1
  155.         TMI   M.LRCNT        USE THIS IF WE ARE REMOTE
  156.         CZM   LOCAL
  157.         BOZ   *+2
  158.         TMI   =RLCCNT        USE THIS IF WE ARE LOCAL
  159.         TMA   !0,I           GET CHARACTER COUNT
  160.         TNK   BUFSIZE        AND COPY THE BUFFER
  161.         TME   !1,I
  162.         TEM   INPUT+BUFSIZE,K
  163.         AOI   1
  164.         BWK   *-3
  165.         SOI   BUFSIZE        RESTORE I
  166.         CZA                  DID WE GET ANY CHARACTERS?
  167.         BNP   *+2            NO--BRANCH
  168.         TZM   !0,I           YES--BUFFER IS NOW FREE
  169.         ELSE
  170.         TNK   '0353          CHECK IF WE HAVE INPUT
  171.         BLU   $I/O
  172.         ESKP
  173.         CZA                  DID WE GET ANY CHARACTERS?
  174.         BOP   GETIN2         YES--BRANCH
  175.         TOK   12             WAIT A 0.1 SECONDS
  176.         BLU   $DELAY
  177.         AUM   COUNTDN
  178.         BON   GETIN1         BRANCH IF A SECOND HASN'T PASSED YET
  179.         AOM   -1             DECREMENT TIME OUT WORD
  180.         DAC*  TIMEOUT
  181.         BOP   GETIN0         BRANCH IF WE HAVEN'T TIMED OUT YET
  182.         TZA                  RETURN A NULL
  183.         BUC   GETIN3
  184. GETIN2  SOA   1              DECREMENT CHARACTERS LEFT
  185.         TAM   INCNT
  186.         TMJ   INPLACE        INPUT BUFFER CHARACTER POINTER
  187.         EMB   !0             GET THE CHARACTER
  188.         EZB
  189.         BBJ   *+1            INCREMENT CHARACTER POINTER
  190.         TJM   INPLACE
  191. GETIN3  EQIV  *
  192.         SKFZ  B1
  193.         TAM   GETINSV        SAVE THE CHARACTER
  194.         BLU   $OCTASC        CONVERT FOR REPORT
  195.         TKM   GETINV
  196.         TDM   GETINV+1
  197.         TOA   '177
  198.         TMA   GETINSV        GET CHARACTER AGAIN
  199.         COB   " "            IS IT A PRINTABLE CHARACTER?
  200.         BNN   *+2            YES--BRANCH
  201.         TOB   "?"            NO--USE A QUESTION MARK
  202.         TBM   GETINX         STORE IN MESSAGE
  203.         TLO   GETINC         REPORT CALL
  204.         BLJ   REPORT
  205.         TMA   GETINSV        RESTORE THE CHARACTER
  206.         ESKP
  207.         BUC*  RETURN         AND RETURN
  208.         PORG  *
  209. TIMEOUT DAC   *-*            ADDRESS OF TIME-OUT WORD
  210. CONSOLE DAC   *-*            PLACE TO STORE CHARACTER FROM CONSOLE
  211. COUNTDN DATA  0              COUNT DOWN FOR FULL SECOND
  212.         SKFZ  B1
  213. GETINSV DATA  0
  214. GETINC  DATA  '0302
  215.         DAC   GETINE-GETINB
  216.         DAC   GETINB
  217. GETINB  DATA  " GETIN CALLED:"
  218. GETINV  BLOK  3
  219. GETINX  DATA  " '?'  "
  220. GETINQ  DATA  "REMOTE"
  221. GETINE  EQIV  *
  222.         ESKP
  223.         RORG  *
  224. *
  225. XMTCHAR TJM   RETURN         SAVE RETURN ADDRESS
  226.         TMA*  !0,J
  227.         TMI   OUTPLCE
  228.         RBM   !0             STORE IT IN OUTPUT BUFFER
  229.         BBI   *+1            ADVANCE BUFFER POINTER
  230.         TIM   OUTPLCE
  231.         TMA   OUTCNT         INCREMENT CHARACTER COUNT
  232.         AOA   1
  233.         TAM   OUTCNT
  234.         SOA   3*BUFSIZE      IS THE BUFFER FULL?
  235.         BON   *+2            NO--BRANCH
  236.         BLJ   FLUSH          YES--WRITE IT OUT
  237.         SKFZ  B1
  238.         TMJ   RETURN         GET THE CHARACTER AGAIN
  239.         TMA*  !0,J
  240.         BLU   $OCTASC
  241.         TKM   XMTCHAV
  242.         TDM   XMTCHAV+1
  243.         TMJ   RETURN         GET VALUE AGAIN
  244.         TOA   '177
  245.         DMA*  !0,J
  246.         COB   " "            IS IT A PRINTABLE CHARACTER?
  247.         BNN   *+2            YES--BRANCH
  248.         TOB   "?"            NO--USE A QUESTION MARK
  249.         TBM   XMTCHAX        STORE IN MESSAGE
  250.         TLO   XMTCHAC        REPORT CALL
  251.         BLJ   REPORT
  252.         ESKP
  253.         TMJ   RETURN
  254.         BJL   1              AND RETURN
  255.         PORG  *
  256.         SKFZ  B1
  257. XMTCHAC DATA  '0302
  258.         DAC   XMTCHAE-XMTCHAB
  259.         DAC   XMTCHAB
  260. XMTCHAB DATA  " XMTCHAR CALLED:"
  261. XMTCHAV BLOK  3
  262. XMTCHAX DATA  " '?'  "
  263. XMTCHAQ DATA  "REMOTE"
  264. XMTCHAE EQIV  *
  265.         ESKP
  266. RETURN  BLOK  1
  267.         RORG  *
  268. *
  269. FLUSH   TJM   FLUSHRT        SAVE RETURN ADDRESS
  270.         TMA   OUTCNT         ANY CHARACTER IN THE BUFFER?
  271.         BNP   FLUSHEX        NO--BRANCH
  272.         SKFZ  B1
  273. FLUSH2  TMI   =RLCCNT        USE IF REMOTE
  274.         CZM   LOCAL
  275.         BOZ   *+2
  276.         TMI   M.LRCNT        USE THIS IF LOCAL
  277.         CZM   !0,I           IS THE BUFFER AVAILABLE
  278.         BNP   FLUSH3         YES--BRANCH
  279.         TOK   12             NO--WAIT 0.1 SECONDS
  280.         BLU   $DELAY
  281.         BUC   FLUSH2         AND TRY AGAIN
  282. FLUSH3  EQIV  *
  283.         TMJ   M.LRCNT        INPUT BUFFER IF REMOTE
  284.         CZM   LOCAL
  285.         BOZ   *+2
  286.         TMJ   =RLCCNT        INPUT BUFFER IF LOCAL
  287.         TZM   !0,J           IGNORE RESPONSE TO PREVIOUS MESSAGE
  288.         TNK   BUFSIZE        COPY THE OUTPUT BUFFER
  289.         TMJ   OUTPL+2
  290.         TMA   !0,J
  291.         TAM   !1,I
  292.         AOI   1
  293.         AOJ   1
  294.         BWK   *-4
  295.         SOI   BUFSIZE        RESTORE I
  296.         TMA   OUTCNT         GET OUTPUT COUNT
  297.         TAM   !0,I           AND STORE IN BUFFER
  298.         ELSE
  299.         TNK   '0353          IGNORE RESPONSE (IF ANY) TO PREVIOUS MESSAGE
  300.         BLU   $I/O
  301.         TLO   OUTPL          WRITE THE BUFFER
  302.         BLU   $I/O
  303.         ESKP
  304.         TZM   OUTCNT         NO CHARACTERS IN BUFFER NOW
  305.         TOA   IWHICH         NOW WHICH BUFFER SHOULD WE USE?
  306.         AOA   1
  307.         TAM   IWHICH
  308.         TME   OUT1ST         USE IF 1ST BUFFER
  309.         TLO   OUTPUT         1ST BUFFER ADDRESS
  310.         QBB   B0             IS IWHICH ODD?
  311.         BOZ   *+3            NO--BRANCH
  312.         TME   OUT2ND         USE IF 2ND BUFFER
  313.         TLO   OUTPUT2
  314.         TEM   OUTPLCE        BUFFER FILL LOCATION
  315.         TKM   OUTPL+2        BUFFER ADDRESS FOR WRITE
  316. FLUSHEX BUC*  FLUSHRT        AND RETURN
  317. FLUSHRT PBLOK 1              RETURN ADDRESS
  318.         TSFZ  B1
  319. M.LRCNT LAC   RLCCNT+BUFSIZE+1   ADDRESS OF LOCAL TO REMOTE
  320. *
  321. SLEEP   GAP   1
  322.         TMA   !0,I           GET NUMBER OF SECONDS
  323.         TJM   RETURN
  324.         SKFZ  B1
  325.         TAM   SECONDS
  326.         BLU   $OCTASC
  327.         TKM   SLEEPV
  328.         TDM   SLEEPV+1
  329.         TLO   SLEEPC
  330.         BLJ   REPORT
  331.         TMA   SECONDS
  332.         ESKP
  333.         MYO   120            120 TICKS PER SECOND
  334.         TAK
  335.         BLU   $DELAY
  336.         BUC*  RETURN
  337.         SKFZ  B1
  338.         PORG  *
  339. SECONDS DATA  0
  340. SLEEPC  DATA  '0302
  341.         DAC   SLEEPE-SLEEPB
  342.         DAC   SLEEPB
  343. SLEEPB  DATA  " SLEEP CALLED: "
  344. SLEEPV  BLOK  3
  345.         DATA  "   "
  346. SLEEPQ  DATA  "REMOTE"
  347. SLEEPE  EQIV  *
  348.         RORG  *
  349.         ESKP
  350. *
  351. CREATE  GAP   1
  352.         TIM   SCINITL+1      TO INITIALIZE THE SCANNER
  353.         TJM   RETURN
  354.         TLO   SCINITL
  355.         BLU   $SCINIT
  356.         TLO   GENLIST        GET AREANAME FOR GENERATE
  357.         BLU   $AREANM
  358.         BON   CREATE2        BRANCH IF TROUBLE
  359.         TLO   GENLIST
  360.         BLU   $GENERATE      CREATE THE FILE
  361. CREATE2 EQIV  *
  362.         SKFZ  B1
  363.         TLO   CREATEC        REPORT THE CALL
  364.         BLJ   REPORT
  365.         ESKP
  366.         BUC*  RETURN
  367.         PORG  *
  368. SCINITL DATA  6              WORD COUNT
  369.         DAC   *-*            BUFFER ADDRESS
  370. GENLIST BLOK  4              AREA NAME
  371.         DATA  0              GRANUAL SIZE
  372.         DATA  0              MAXIMUM SIZE
  373.         DATA  0              PACK NUMBER
  374.         DATA  '10000000      BLOCKED FILE
  375.         DATA  0              PURGE DATE
  376.         DATA  0              BLOCKING FACTOR
  377.         DATA  0              SPOOL PDN
  378.         DATA  3              OWNER WRITE, OWNER DELETE
  379.         DATA  0              ACCESS LEVEL
  380.         DATA  0              FORCED STARTING SECTOR
  381.         BLOK  4              M/TYP#
  382.         SKFZ  B1
  383. CREATEC DATA  '0302
  384.         DAC   CREATEE-CREATEB
  385.         DAC   CREATEB
  386. CREATEB DATA  " CREATE CALLED: "
  387. CREATEQ DATA  "REMOTE"
  388. CREATEE EQIV  *
  389.         ESKP
  390.         RORG  *
  391. *
  392. CONNECT EQIV  *
  393.         SKFZ  B1
  394.         GAP   1              ADDRESS OF DUPLEX WORD
  395.         TJM   RETURN         SAVE RETURN ADDRESS
  396.         TMA   !0,I
  397.         BLU   $OCTASC
  398.         TKM   CONNECV
  399.         TDM   CONNECV+1
  400.         TFM   LOCAL          0=REMOTE (I.E. HOST), OTHER=LOCAL
  401.         TMD   ="LOCAL "
  402.         TDM   SYSFINQ
  403.         TDM   GETINQ
  404.         TDM   SLEEPQ
  405.         TDM   XMTCHAQ
  406.         TDM   RAWQ
  407.         TDM   COOKEDQ
  408.         TDM   CREATEQ
  409.         TLO   CONNECC        REPORT CALL
  410.         BLJ   REPORT
  411.         TZM*  M.LRCNT        WE HAVE NOT YET SENT ANYTHING
  412.         TOA   1              RETURN TRUE
  413.         BUC*  RETURN         AND RETURN
  414.         PORG  *
  415. CONNECC DATA  '0302
  416.         DAC   CONNECE-CONNECB
  417.         DAC   CONNECB
  418. CONNECB DATA  " CONNECT CALLED: "
  419. CONNECV BLOK  3
  420. CONNECE EQIV  *
  421.         RORG  *
  422.         ESKP
  423.         TZA                  NO CONNECTION IS POSSIBLE
  424.         BJL   1              RETURN--BRANCH OVER ARGUMENT
  425. *
  426. FIXNAME GAP   1              REMOVE ANY GIVEN QUALIFIER
  427.         TJM   RETURN
  428.         TIJ
  429.         TNK   20
  430. FIXNAML TMA   !0,J           GET NEXT CHARACTER
  431.         BOZ   FIXNAMR        RETURN AT END-OF-STRING
  432.         AOJ   1
  433.         COB   "*"            IS THIS AN ASTERISK
  434.         BOZ   FIXNAMC        YES--BRANCH
  435.         BWK   FIXNAML        LOOP FOR A WHILE
  436. FIXNAMR BUC*  RETURN         DO NOTHING--RETURN
  437. FIXNAMC TNK   20             COPY FILE NAME DOWN
  438.         TMA   !0,J
  439.         TAM   !0,I
  440.         AOI   1
  441.         AOJ   1
  442.         BWK   *-4
  443.         BUC*  RETURN         AND RETURN
  444. *
  445.         END$
  446.