home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
archives
/
harris800.tar.gz
/
harris800.tar
/
h800ker.asm
next >
Wrap
Assembly Source File
|
1988-08-16
|
14KB
|
446 lines
* MACHINE DEPENDENT ROUTINES FOR KERMIT
* SET FLAGS 1 FOR DIAGNOSTIC VERSION
XDEF SYSINI,SYSINIT SYSTEM INITIALIZATION
XDEF SYSFIN,SYSFIN SYSTEM FINISH UP
XDEF GETIN,GETIN GET INPUT CHARACTER
XDEF XMTCHA,XMTCHAR TRANSMIT OUTPUT CHARACTER
XDEF CONNEC,CONNECT TALK TO REMOTE COMPUTER
XDEF SLEEP,SLEEP DELAY FOR GIVEN NUMBER OF SECONDS
XDEF TTYRAW,RAW PUT CONSOLE IN CHARACTER BY CHARACTER I/O
XDEF TTYCOO,COOKED PUT CONSOLE IN NORMAL MODE
XDEF FILECR,CREATE CREATE A FILE
XDEF FLUSH,FLUSH FLUSH OUTPUT BUFFER
XDEF FIXNAM,FIXNAME REMOVE QUALIFIER FROM FILE NAME
BUFSIZE EQIV 54 WORDS IN A BUFFER
SKFZ B1
COMM /KERMIT/RLCCNT,RLBUF(54),LRCCNT,LRBUF(54)
* RLCCNT = REMOTE TO LOCAL CHARACTER COUNT
* RLBUF = REMOTE TO LOCAL BUFFER
* LRCCNT = LOCAL TO REMOTE CHARACTER COUNT
* LRBUF = LOCAL TO REMOTE BUFFER
MCOM KERMIT
ESKP
REEN
SYSINIT TJM RETURN SAVE RETURN ADDRESS
TNK '0313 OPEN TERMINAL OUPUT
BLU $I/O
SKFZ B1
TNK '0613 OPEN DIAGNOSTIC OUTPUT
BLU $I/O
TLO SYSINIC REPORT CALL
BLJ REPORT
ESKP
BUC* RETURN AND RETURN
SKFZ B1
PORG *
SYSINIC DATA '0302
DAC SYSINIE-SYSINIB
DAC SYSINIB
RORG *
SYSINIB DATA " SYSINIT CALLED"
SYSINIE EQIV *
*
REPORT TJM REPJ SAVE RETURN
TKM REPK SAVE PARAMETER LIST POINTER
TOA '0302 SEND TO TERMINAL
TAM 0,K
BLU $IOW
TMK REPK
TOA '0602 SEND TO LO FILE
TAM 0,K
BLU $IOW
BUC* REPJ
PORG *
REPJ DAC *-* RETURN FROM REPORT
REPK DAC *-* PARAMETER LIST POINTER
LOCAL DATA 0 0=REMOTE (I.E. HOST), OTHER=LOCAL
RORG *
*
SYSFIN TJM RETURN SAVE RETURN ADDRESS
TLO SYSFINC REPORT CALL
BLJ REPORT
BUC* RETURN AND RETURN
PORG *
SYSFINC DATA '0302
DAC SYSFINE-SYSFINB
DAC SYSFINB
SYSFINB DATA " SYSFIN CALLED: "
SYSFINQ DATA "REMOTE"
SYSFINE EQIV *
RORG *
ELSE
SYSFIN BJL 0 RETURN AT ONCE--DO NOTHING
ESKP
*
RAW TJM RETURN SAVE RETURN ADDRESS
SKFZ B1
TLO RAWC REPORT CALL
BLJ REPORT
TZM !RLCCNT WE HAVE NOT YET SENT ANYTHING
ELSE
TLO HOTMODE
BLU $I/O
ESKP
BUC* RETURN AND RETURN
SKFZ B1
PORG *
RAWC DATA '0302
DAC RAWE-RAWB
DAC RAWB
RAWB DATA " RAW CALLED: "
RAWQ DATA "REMOTE"
RAWE EQIV *
RORG *
ELSE
HOTMODE DATA '0351 HOT MODE INITIALIZE
DATA BUFSIZE INPUT BUFFER SIZE
DAC INPUT LOCATION OF INPUT BUFFER
ESKP
*
PORG *
INPUT BLOK BUFSIZE INPUT BUFFER
INCNT DATA 0 INPUT CHARACTERS LEFT
INPLACE BAC INPUT,0 INPUT BUFFER POINTER
OUTPL DATA '0352 HOT WRITE
OUTCNT DATA 0 OUTPUT CHARACTER COUNT
DAC OUTPUT
OUTPUT BLOK BUFSIZE OUTPUT BUFFER
OUTPUT2 BLOK BUFSIZE SECOND OUTPUT BUFFER
IWHICH DATA 0 INDICATES WHICH OUTPUT BUFFER IS USED
OUTPLCE BAC OUTPUT,0 OUTPUT BUFFER POINTER
RORG *
IN1ST BAC INPUT,0 POINTER TO 1ST CHARACTER OF INPUT BUFFER
OUT1ST BAC OUTPUT,0 POINTER TO 1ST CHARACTER OF OUTPUT BUFFER
OUT2ND BAC OUTPUT2,0 POINTER TO 1ST CHAR. OF 2ND OUTPUT BUFFER
*
COOKED TJM RETURN SAVE RETURN ADDRESS
SKFZ B1
TLO COOKEDC REPORT CALL
BLJ REPORT
ELSE
TLO NORMAL RETURN TERMINAL TO NORMAL MODE
BLU $I/O
ESKP
BUC* RETURN AND RETURN
SKFZ B1
PORG *
COOKEDC DATA '0302
DAC COOKEDE-COOKEDB
DAC COOKEDB
COOKEDB DATA " COOKED CALLED: "
COOKEDQ DATA "REMOTE"
COOKEDE EQIV *
RORG *
ELSE
NORMAL DATA '0351 NORMAL MODE PLEASE
DATA -1
DATA 0
ESKP
*
GETIN EQIV *
GAP 1 GET ADDRESS OF TIME-OUT COUNT
TIM TIMEOUT
GAP 1 GET ADDRESS FOR CHARACTER FROM CONSOLE
TIM CONSOLE
TJM RETURN SAVE RETURN ADDRESS
BLJ FLUSH FLUSH OUTPUT BUFFER
TMA INCNT ANY INPUT CHARACTERS LEFT FROM BEFORE?
BOP GETIN2 YES--BRANCH
TMA IN1ST REWIND BUFFER POINTER
TAM INPLACE
GETIN0 TNA 10 FOR 1 SECOND COUNT DOWN
TAM COUNTDN
GETIN1 EQIV *
SKFZ B1
TMI M.LRCNT USE THIS IF WE ARE REMOTE
CZM LOCAL
BOZ *+2
TMI =RLCCNT USE THIS IF WE ARE LOCAL
TMA !0,I GET CHARACTER COUNT
TNK BUFSIZE AND COPY THE BUFFER
TME !1,I
TEM INPUT+BUFSIZE,K
AOI 1
BWK *-3
SOI BUFSIZE RESTORE I
CZA DID WE GET ANY CHARACTERS?
BNP *+2 NO--BRANCH
TZM !0,I YES--BUFFER IS NOW FREE
ELSE
TNK '0353 CHECK IF WE HAVE INPUT
BLU $I/O
ESKP
CZA DID WE GET ANY CHARACTERS?
BOP GETIN2 YES--BRANCH
TOK 12 WAIT A 0.1 SECONDS
BLU $DELAY
AUM COUNTDN
BON GETIN1 BRANCH IF A SECOND HASN'T PASSED YET
AOM -1 DECREMENT TIME OUT WORD
DAC* TIMEOUT
BOP GETIN0 BRANCH IF WE HAVEN'T TIMED OUT YET
TZA RETURN A NULL
BUC GETIN3
GETIN2 SOA 1 DECREMENT CHARACTERS LEFT
TAM INCNT
TMJ INPLACE INPUT BUFFER CHARACTER POINTER
EMB !0 GET THE CHARACTER
EZB
BBJ *+1 INCREMENT CHARACTER POINTER
TJM INPLACE
GETIN3 EQIV *
SKFZ B1
TAM GETINSV SAVE THE CHARACTER
BLU $OCTASC CONVERT FOR REPORT
TKM GETINV
TDM GETINV+1
TOA '177
TMA GETINSV GET CHARACTER AGAIN
COB " " IS IT A PRINTABLE CHARACTER?
BNN *+2 YES--BRANCH
TOB "?" NO--USE A QUESTION MARK
TBM GETINX STORE IN MESSAGE
TLO GETINC REPORT CALL
BLJ REPORT
TMA GETINSV RESTORE THE CHARACTER
ESKP
BUC* RETURN AND RETURN
PORG *
TIMEOUT DAC *-* ADDRESS OF TIME-OUT WORD
CONSOLE DAC *-* PLACE TO STORE CHARACTER FROM CONSOLE
COUNTDN DATA 0 COUNT DOWN FOR FULL SECOND
SKFZ B1
GETINSV DATA 0
GETINC DATA '0302
DAC GETINE-GETINB
DAC GETINB
GETINB DATA " GETIN CALLED:"
GETINV BLOK 3
GETINX DATA " '?' "
GETINQ DATA "REMOTE"
GETINE EQIV *
ESKP
RORG *
*
XMTCHAR TJM RETURN SAVE RETURN ADDRESS
TMA* !0,J
TMI OUTPLCE
RBM !0 STORE IT IN OUTPUT BUFFER
BBI *+1 ADVANCE BUFFER POINTER
TIM OUTPLCE
TMA OUTCNT INCREMENT CHARACTER COUNT
AOA 1
TAM OUTCNT
SOA 3*BUFSIZE IS THE BUFFER FULL?
BON *+2 NO--BRANCH
BLJ FLUSH YES--WRITE IT OUT
SKFZ B1
TMJ RETURN GET THE CHARACTER AGAIN
TMA* !0,J
BLU $OCTASC
TKM XMTCHAV
TDM XMTCHAV+1
TMJ RETURN GET VALUE AGAIN
TOA '177
DMA* !0,J
COB " " IS IT A PRINTABLE CHARACTER?
BNN *+2 YES--BRANCH
TOB "?" NO--USE A QUESTION MARK
TBM XMTCHAX STORE IN MESSAGE
TLO XMTCHAC REPORT CALL
BLJ REPORT
ESKP
TMJ RETURN
BJL 1 AND RETURN
PORG *
SKFZ B1
XMTCHAC DATA '0302
DAC XMTCHAE-XMTCHAB
DAC XMTCHAB
XMTCHAB DATA " XMTCHAR CALLED:"
XMTCHAV BLOK 3
XMTCHAX DATA " '?' "
XMTCHAQ DATA "REMOTE"
XMTCHAE EQIV *
ESKP
RETURN BLOK 1
RORG *
*
FLUSH TJM FLUSHRT SAVE RETURN ADDRESS
TMA OUTCNT ANY CHARACTER IN THE BUFFER?
BNP FLUSHEX NO--BRANCH
SKFZ B1
FLUSH2 TMI =RLCCNT USE IF REMOTE
CZM LOCAL
BOZ *+2
TMI M.LRCNT USE THIS IF LOCAL
CZM !0,I IS THE BUFFER AVAILABLE
BNP FLUSH3 YES--BRANCH
TOK 12 NO--WAIT 0.1 SECONDS
BLU $DELAY
BUC FLUSH2 AND TRY AGAIN
FLUSH3 EQIV *
TMJ M.LRCNT INPUT BUFFER IF REMOTE
CZM LOCAL
BOZ *+2
TMJ =RLCCNT INPUT BUFFER IF LOCAL
TZM !0,J IGNORE RESPONSE TO PREVIOUS MESSAGE
TNK BUFSIZE COPY THE OUTPUT BUFFER
TMJ OUTPL+2
TMA !0,J
TAM !1,I
AOI 1
AOJ 1
BWK *-4
SOI BUFSIZE RESTORE I
TMA OUTCNT GET OUTPUT COUNT
TAM !0,I AND STORE IN BUFFER
ELSE
TNK '0353 IGNORE RESPONSE (IF ANY) TO PREVIOUS MESSAGE
BLU $I/O
TLO OUTPL WRITE THE BUFFER
BLU $I/O
ESKP
TZM OUTCNT NO CHARACTERS IN BUFFER NOW
TOA IWHICH NOW WHICH BUFFER SHOULD WE USE?
AOA 1
TAM IWHICH
TME OUT1ST USE IF 1ST BUFFER
TLO OUTPUT 1ST BUFFER ADDRESS
QBB B0 IS IWHICH ODD?
BOZ *+3 NO--BRANCH
TME OUT2ND USE IF 2ND BUFFER
TLO OUTPUT2
TEM OUTPLCE BUFFER FILL LOCATION
TKM OUTPL+2 BUFFER ADDRESS FOR WRITE
FLUSHEX BUC* FLUSHRT AND RETURN
FLUSHRT PBLOK 1 RETURN ADDRESS
TSFZ B1
M.LRCNT LAC RLCCNT+BUFSIZE+1 ADDRESS OF LOCAL TO REMOTE
*
SLEEP GAP 1
TMA !0,I GET NUMBER OF SECONDS
TJM RETURN
SKFZ B1
TAM SECONDS
BLU $OCTASC
TKM SLEEPV
TDM SLEEPV+1
TLO SLEEPC
BLJ REPORT
TMA SECONDS
ESKP
MYO 120 120 TICKS PER SECOND
TAK
BLU $DELAY
BUC* RETURN
SKFZ B1
PORG *
SECONDS DATA 0
SLEEPC DATA '0302
DAC SLEEPE-SLEEPB
DAC SLEEPB
SLEEPB DATA " SLEEP CALLED: "
SLEEPV BLOK 3
DATA " "
SLEEPQ DATA "REMOTE"
SLEEPE EQIV *
RORG *
ESKP
*
CREATE GAP 1
TIM SCINITL+1 TO INITIALIZE THE SCANNER
TJM RETURN
TLO SCINITL
BLU $SCINIT
TLO GENLIST GET AREANAME FOR GENERATE
BLU $AREANM
BON CREATE2 BRANCH IF TROUBLE
TLO GENLIST
BLU $GENERATE CREATE THE FILE
CREATE2 EQIV *
SKFZ B1
TLO CREATEC REPORT THE CALL
BLJ REPORT
ESKP
BUC* RETURN
PORG *
SCINITL DATA 6 WORD COUNT
DAC *-* BUFFER ADDRESS
GENLIST BLOK 4 AREA NAME
DATA 0 GRANUAL SIZE
DATA 0 MAXIMUM SIZE
DATA 0 PACK NUMBER
DATA '10000000 BLOCKED FILE
DATA 0 PURGE DATE
DATA 0 BLOCKING FACTOR
DATA 0 SPOOL PDN
DATA 3 OWNER WRITE, OWNER DELETE
DATA 0 ACCESS LEVEL
DATA 0 FORCED STARTING SECTOR
BLOK 4 M/TYP#
SKFZ B1
CREATEC DATA '0302
DAC CREATEE-CREATEB
DAC CREATEB
CREATEB DATA " CREATE CALLED: "
CREATEQ DATA "REMOTE"
CREATEE EQIV *
ESKP
RORG *
*
CONNECT EQIV *
SKFZ B1
GAP 1 ADDRESS OF DUPLEX WORD
TJM RETURN SAVE RETURN ADDRESS
TMA !0,I
BLU $OCTASC
TKM CONNECV
TDM CONNECV+1
TFM LOCAL 0=REMOTE (I.E. HOST), OTHER=LOCAL
TMD ="LOCAL "
TDM SYSFINQ
TDM GETINQ
TDM SLEEPQ
TDM XMTCHAQ
TDM RAWQ
TDM COOKEDQ
TDM CREATEQ
TLO CONNECC REPORT CALL
BLJ REPORT
TZM* M.LRCNT WE HAVE NOT YET SENT ANYTHING
TOA 1 RETURN TRUE
BUC* RETURN AND RETURN
PORG *
CONNECC DATA '0302
DAC CONNECE-CONNECB
DAC CONNECB
CONNECB DATA " CONNECT CALLED: "
CONNECV BLOK 3
CONNECE EQIV *
RORG *
ESKP
TZA NO CONNECTION IS POSSIBLE
BJL 1 RETURN--BRANCH OVER ARGUMENT
*
FIXNAME GAP 1 REMOVE ANY GIVEN QUALIFIER
TJM RETURN
TIJ
TNK 20
FIXNAML TMA !0,J GET NEXT CHARACTER
BOZ FIXNAMR RETURN AT END-OF-STRING
AOJ 1
COB "*" IS THIS AN ASTERISK
BOZ FIXNAMC YES--BRANCH
BWK FIXNAML LOOP FOR A WHILE
FIXNAMR BUC* RETURN DO NOTHING--RETURN
FIXNAMC TNK 20 COPY FILE NAME DOWN
TMA !0,J
TAM !0,I
AOI 1
AOJ 1
BWK *-4
BUC* RETURN AND RETURN
*
END$