home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
pub
/
trs80model1+3
/
trsmore.src
< prev
next >
Wrap
Text File
|
2020-01-01
|
14KB
|
605 lines
; THIS IS WHERE WE GO IF WE GET AN ERROR DURING A PROTOCOL COMMUNICATION.
; CALL ERROR PRINTS THE ERROR PACKET ON LINE 6 OR SO.
; CALL ERROR1 PRINT CRLF FOLLOWED BY THE ERROR PACKET.
; CALL ERROR2 JUST PRINTS THE ERROR PACKET.
; CALL ERROR3 POSITIONS CURSOR AND PRINTS ERROR MESSAGE SPECIFIED IN DE.
ERROR: CALL ERROR9 ; POSITION THE CURSOR.
LD A,'A' ; SET THE STATE TO ABORT.
LD (STATE),A
JP ERROR2
ERROR1: LD DE,CRLF ; PRINT A CRLF.
CALL PRTSTR
ERROR2: LD A,(ARGBLK+1) ; GET THE LENGTH OF THE DATA.
LD C,A
LD B,0 ; PUT IT INTO BC
LD HL,DATA ; GET THE ADDRESS OF THE DATA.
ADD HL,BC ; GET TO THE END OF THE STRING.
LD A,'$' ; PUT A DOLLAR SIGN AT THE END.
LD (HL),A
LD DE,DATA ; PRINT ERROR MESSAGE
CALL PRTSTR
RET
ERROR3: PUSH DE ; SAVE THE POINTER TO THE MESSAGE.
CALL ERROR9 ; POSITION THE CURSOR.
LD DE,CLRLIN ; CLEAR THE LINE
CALL PRTSTR
POP DE ; GET THE POINTER BACK.
CALL PRTSTR ; PRINT ERROR MESSAGE
RET
ERROR9: LD DE,SCRERR ; POSITION CURSOR
CALL PRTSTR
RET
ERRORD: OR A ;display disk error
RET Z
OR 80H
OR 40H
CALL @ERROR
RET
FINMES: PUSH DE ; SAVE MESSAGE.
LD DE,SCRST
CALL PRTSTR
POP DE ; PRINT THE TERMINATION MESSAGE
CALL PRTSTR
LD DE,SCREND ; POSITION CURSOR FOR PROMPT
CALL PRTSTR
RET
; THIS IS THE FINISH COMMAND. IT TELLS THE REMOTE KERSRV TO EXIT.
FINISH: LD A,CMCFM
CALL COMND ; GET A CONFIRM.
JP KERMT3
XOR A ; DIDN'T GET A CONFIRM.
LD (NUMTRY),A ; INITITIALIZE COUNT.
LD A,'1' ; RESET BLOCK CHECK TYPE TO SINGLE CHARACTER
LD (CURCHK),A ; . . .
FINSH1: LD A,(NUMTRY) ; HOW MANY TIMES HAVE WE TRIED?
CP MAXTRY ; TOO MANY TIMES?
JP M,FINSH3 ; NO, TRY IT.
FINSH2: LD DE,ERMS18 ; SAY WE COULDN'T DO IT.
CALL PRTSTR
JP KERMIT ; GO HOME.
FINSH3: INC A ; INCREMENT THE NUMBER OF TRIES.
LD (NUMTRY),A
XOR A
LD (ARGBLK),A ; MAKE IT PACKET NUMBER ZERO.
LD A,1
LD (ARGBLK+1),A ; ONE PIECE OF DATA.
LD HL,DATA
LD (HL),'F' ; FINISH RUNNING KERMIT.
LD A,'G' ; GENERIC COMMAND PACKET.
CALL SPACK
JP FINSH1
CALL RPACK ;GET AN ACKNOWLEDGEMENT.
JP FINSH1
CP 'Y' ; ACK?
JP Z,KERMIT ; YES, WE ARE DONE.
CP 'E' ; IS IT AN ERROR PACKET?
JP NZ,FINSH1 ; TRY SENDING THE PACKET AGAIN.
CALL ERROR1 ; PRINT THE ERROR MESSAGE.
JP KERMIT
; THIS IS THE LOGOUT COMMAND. IT TELLS THE REMOTE KERSRV TO LOGOUT.
LOGOUT: LD A,CMCFM
CALL COMND ; GET A CONFIRM.
JP KERMT3
CALL LOGO ; SEND THE LOGOUT PACKET.
JP KERMIT ; GO GET ANOTHER COMMAND
JP KERMIT ; WHETHER WE SUCCEED OR NOT.
LOGO: XOR A
LD (NUMTRY),A ; INITITIALIZE COUNT.
LD A,'1' ; RESET BLOCK CHECK TYPE TO SINGLE CHARACTER
LD (CURCHK),A ; . . .
LOGO1: LD A,(NUMTRY) ; HOW MANY TIMES HAVE WE TRIED?
CP MAXTRY ; TOO MANY TIMES?
JP M,LOGO3 ; NO, TRY IT.
LOGO2: LD DE,ERMS19 ; SAY WE COULDN'T DO IT.
CALL PRTSTR
RET ; FINISHED.
LOGO3: INC A ; INCREMENT THE NUMBER OF TRIES.
LD (NUMTRY),A
XOR A
LD (ARGBLK),A ; MAKE IT PACKET NUMBER ZERO.
LD A,1
LD (ARGBLK+1),A ; ONE PIECE OF DATA.
LD HL,DATA
LD (HL),'L' ; LOGOUT THE REMOTE HOST.
LD A,'G' ; GENERIC COMMAND PACKET.
CALL SPACK
JP LOGO2
CALL RPACK ; GET AN ACKNOWLEDGEMENT
JP LOGO1
CP 'Y' ; ACK?
JP Z,RSKP ; YES, WE ARE DONE.
CP 'E' ; IS IT AN ERROR PACKET?
JP NZ,LOGO1 ; TRY SENDING THE PACKET AGAIN.
CALL ERROR1 ; PRINT THE ERROR MESSAGE.
RET ; ALL DONE.
; THIS IS THE BYE COMMAND. IT TELLS THE REMOTE KERSRV TO LOGOUT AND EXITS.
BYE: LD A,CMCFM
CALL COMND ; GET A CONFIRM.
JP KERMT3
CALL LOGO ; TELL THE MAIN FRAME TO LOGOUT.
JP KERMIT ; IF IT FAILS, DON'T EXIT.
JP EXIT1 ; EXIT KERMIT.
; THIS IS THE LOG COMMAND. IT LOGS A SESSION TO A FILE.
LOG: LD A,CMOFI ; PARSE AN INPUT FILE SPEC.
LD DE,LFCB
CALL COMND
JP KERMT3
LD A,CMCFM ; PARSE A CONFIRM.
CALL COMND
JP KERMT3
LD HL,LOGFLG
LD (HL),0FFH ; SET THE LOG FLAG.
LD HL,LBUFF
LD (BUFPNT),HL
LD DE,LFCB
CALL @OPEN
JR NZ,LOG1A
LD DE,LFCB
CALL @KILL
LD DE,LFCB
LD HL,(BUFPNT)
LOG1A: CALL @INIT
JP NZ,KERMIT ;[UTK3]
CALL ERRORD
JP KERMIT
;this is the connect command
TELNET: LD A,CMCFM
CALL COMND
JP KERMT3
LD DE,INFMS7
CALL PRTSTR
CALL ESCPR
LD DE,INFMS8
CALL PRTSTR
CHRLUP CALL PRTCHR
CALL CONCHR
JP KERMIT
JP CHRLUP
PRTCHR IN A,(MNPRTS)
AND INPUT
RET Z
PRTCH2 IN A,(MNPORT)
AND 7FH
CP LF
JR Z,PRTCHR
LD E,A
LD A,(VTFLG)
OR A
JR Z,PRTCH1
LD A,(ESCFLG)
OR A
JP NZ,VT52
LD A,E
CP DEL
RET Z
CP ESC
JR NZ,PRTCH1
LD (ESCFLG),A
JP PRTCHR
PRTCH1 CP FF
JP Z,CMBLNK
LD A,(LOGFLG)
OR A
CALL NZ,LOGIT
LD A,(PRTFLG)
OR A
CALL NZ,PRTIT
LD A,E
CALL CONOUT
JP PRTCHR
CONCHR CALL CONIN
AND 7FH
OR A
JP Z,RSKP
LD E,A
LD A,(ESCCHR)
CP E
JP Z,INTCHR
LD A,E
CALL SETPAR
LD E,A
PUSH DE
CALL PRTOUT
POP DE
LD A,(ECOFLG)
OR A
JP Z,RSKP
LD A,E
AND 7FH
CALL CONOUT
JP RSKP
INTCHR CALL ESCPR
INTCH0 CALL CONIN
OR A
JR Z,INTCH0
LD B,A
CALL CONOUT
LD A,B
CP CTRLC ;control-c?
JR Z,CONTC ;yes
AND 137O
CP 'C' ;is it close?
JP NZ,INTCHR0 ;no
CONTC LD DE,INFMS9
CALL PRTSTR
LD A,(LOGFLG) ;is log file on?
OR A
RET Z ;no
XOR A
LD (LOGFLG),A ;turn it off
LD DE,INFMS6
CALL PRTSTR
LD DE,LFCB
CALL @CLOSE
RET
INTCHR0 CP 'S' ;status?
JR NZ,INCH01
CALL STAT01 ;print out status
JP RSKP
INCH01 LD A,B
CP '?'
JR NZ,INTCH1
LD DE,INTHLP
CALL PRTSTR
JP INTCH0
INTCH1 LD A,B
AND 7FH
CP 'B'
JR NZ,INTCH2
LD DE,INMS12
CALL PRTSTR
JP RSKP
INTCH2 LD A,B
CP '0'
JR NZ,INTCH3
LD A,0
CALL OUTCHR
JP RSKP
INTCH3 LD E,A
LD A,(ESCCHR)
CP E
JR Z,INTCHZ
LD A,E
CALL SETPAR
CALL PRTOUT
JP RSKP
INTCHZ LD A,BELL
CALL CONOUT
JP RSKP
VT52 XOR A
LD (ESCFLG),A
LD A,E
CP 'A'
RET M
CP 'K'+1
RET P
SUB 'A'
RLCA
RLCA
LD HL,TA
LD E,A
LD D,0
ADD HL,DE
EX DE,HL
CALL PRTSTR
RET
LOGIT LD A,E
LD HL,(LOGPTR)
LD (HL),A
INC HL
LD (LOGPTR),HL
PUSH HL
POP BC
LD HL,LBUFF+257
OR A
SBC HL,BC
RET NZ ;not full yet
PUSH DE
LD A,XOFF ;stop data flow
CALL OUTCHR ;send it out
LD DE,LFCB
CALL @VER ;write out the buffer
JR Z,LOGIT2
LD DE,ERMS11
CALL PRTSTR
LOGIT2 LD HL,LBUFF
LD (LOGPTR),HL
LD A,XON
CALL OUTCHR ;start data flow
POP DE
RET
PRTIT LD A,(37E8H) ;get printer status
AND 0F0H
CP 30H
RET NZ ;skip this one
LD A,E
PUSH DE
CALL @PRT ;dos printer routine
POP DE
RET
PRTOUT OR A
RET Z
LD E,A
CALL OUTCHR
RET
; THIS IS THE SET COMMAND.
SETCOM: LD DE,SETTAB ; PARSE A KEYWORD FROM THE SET TABLE.
LD HL,SETHLP
LD A,CMKEY
CALL COMND
JP KERMT2
LD HL,SETJTB ; GET THE ADDRESS OF THE JUMP TABLE.
LD C,A
LD B,0
ADD HL,BC
JP (HL)
SETJTB: JP ESCAPE ; 00H SET ESC
JP IBMSET ; 03H SET IBM
JP LOCAL ; 06H SET LOCAL
JP KERMT3 ; 09H SET RECEIVE (NOT CURRENTLY USED)
JP SETSND ; 0CH SET SEND (NOT CURRENTLY USED)
JP FILWAR ; 0FH SET WARNING
JP SETCPM ; 12H SET FILE-MODE
JP PARSET ; 15H SET PARITY
JP BLKSET ; 18H SET BLOCK-CHECK-TYPE
JP VT52EM ; 1BH SET VT52
JP PRTSET ; 1EH SET PORT
JP BAUD ; 21H SET BAUD
JP PRINTR ; 24H set printer
JP SETBUG ; 27H SET DEBUG
BLKSET: LD DE,BLKTAB ; GET THE ADDRESS OF THE BLOCK-CHECK TABLE
LD HL,BLKHLP ; AND THE ADDRESS OF THE HELP TEXT
LD A,CMKEY ; PARSE A KEYWORD
CALL COMND ; GO GET IT
JP KERMT2 ; COULDN'T, COMPLAIN
LD (TEMP1),A ; SAVE THE PARSED ITEM
LD A,CMCFM ; WANT TO END THE COMMAND
CALL COMND ; GO DO IT
JP KERMT2 ; GIVE UP
LD A,(TEMP1) ; GET THE VALUE BACK
LD (CHKTYP),A ; SAVE DESIRED CHECKSUM TYPE
JP KERMIT ; GO GET ANOTHER COMMAND
; SET DEFAULT DISK COMMAND
;SETDISK: JP KERMT3 ;not used on trs80
;SETDI1: LD A,(FCB)
; cp 0
; JP NZ,SETDI2 ; HE TYPED A DRIVE-SPEC
; LD A,(CURDSK) ; HE DIDN'T - GIVE HIM DEFAULT
;SETDI2: LD (CURDSK),A
; JP KERMIT ; ALL DONE
; SET SEND COMMAND.
SETSND: LD DE,STSNTB ; PARSE A KEYWORD FROM THE SET SEND TABLE.
LD HL,STSHLP
LD A,CMKEY
CALL COMND
JP KERMT2
LD HL,STSJTB ; GET THE ADDRESS OF THE JUMP TABLE.
LD C,A
LD B,0
ADD HL,BC
JP (HL)
STSJTB: JP STPDCH
JP STPAD
STPAD: LD A,CMCFM
CALL COMND ; GET A CONFIRM.
JP KERMT3 ; DIDN'T GET A CONFIRM.
JP KERMIT
STPDCH: LD A,CMCFM
CALL COMND ; GET A CONFIRM.
JP KERMT3 ; DIDN'T GET A CONFIRM.
JP KERMIT
;THIS IS THE SET SPEED COMMAND
BAUD: LD DE,SPDTAB
LD HL,SPDHLP
CALL ONOFFA
LD (SPEED),A ; SET THE SPEED.
CALL MDMRST ;set the speed
JP KERMIT
; THIS IS THE ESCAPE CHARACTER SET SUBCOMMAND.
ESCAPE: LD A,CMCFM; NOT (BRAIN OR OSBRN1 OR KPII)
CALL COMND ; GET A CONFIRM.
JP KERMT3 ; DIDN'T GET A CONFIRM.
LD DE,ESCMES ; GET THE ADDRESS OF THE ESCAPE MESSAGE.
CALL PRTSTR
CALL @KEY
CALL CONOUT
LD (ESCCHR),A ; STORE THE NEW ESCAPE CHARACTER.
JP KERMIT
; THIS IS THE LOCAL ECHO SET SUBCOMMAND.
LOCAL: CALL ONOFF
LD A,(TEMP1) ; GET THE PARSED VALUE.
LD (ECOFLG),A ; SET THE LOCAL ECHO FLAG.
JP KERMIT
; THIS IS THE VT52 EMULATION SET SUBCOMMAND.
VT52EM: CALL ONOFF
LD (VTFLG),A ; SET THE VT52 EMULATION FLAG.
JP KERMIT
; THIS IS THE FILE-WARNING SET SUBCOMMAND
FILWAR: CALL ONOFF
LD (FLWFLG),A ; SET THE FILE-WARNING FLAG.
JP KERMIT
; THIS IS THE SET IBM COMMAND.
IBMSET: CALL ONOFF
LD (IBMFLG),A ; SET THE IBM FLAG.
OR A ; IS IT TURNED ON?
JR Z,IBMST1 ; IF NOT, SET PARITY TO THE DEFAULT.
LD A,IBMPAR ; GET THE IBM PARITY.
LD B,1 ; SET LOCAL ECHO ON.
JR IBMST2
IBMST1: LD A,DEFPAR
LD B,0 ; SET LOCAL ECHO OFF.
IBMST2: LD (PARITY),A ; SAVE THEM.
LD A,B
LD (ECOFLG),A
JP KERMIT
; THIS IS THE SET PORT COMMAND.
PRTSET: LD DE,PRTTAB ; GET THE TABLE ADDRESS
LD HL,PRTHLP ; AND THE ADDRESS OF THE HELP TEXT
LD A,CMKEY ; WANT A KEYWORD
CALL COMND ; GET THE FIELD OF THE COMMAND
JP KERMT2 ; NOT VALID, GIVE ERROR
LD (TEMP1),A ; SAVE THE PARSED VALUE.
LD A,D ; GET THE FUNCTION TO USE
LD (TEMP2),A ; SAVE FOR LATER
LD A,CMCFM ; MAKE SURE COMMAND IS FINISHED
CALL COMND ; GET A CONFIRM.
JP KERMT3 ; DIDN'T GET A CONFIRM.
LD HL,(TEMP1) ; GET THE TABLE POINTER
LD A,(HL) ; GET THE I/O port
LD (PORT),A ;save as current
JP KERMIT
; TABLE ENTRIES ARE:
; DB port,port
;
; SET FILE-MODE COMMAND.
SETCPM: LD DE,TYPTAB
LD HL,TYPHLP
CALL ONOFFA
LD (CPMFLG),A ;SET THE CPM FLAG
JP KERMIT
; Set Printer command
PRINTR: CALL ONOFF
LD (PRTFLG),A
JP KERMIT
PARSET: LD DE,PARTAB
LD HL,PARHLP
CALL ONOFFA
LD (PARITY),A ; SET THE CPM FLAG.
JP KERMIT
;SET DEBUG
SETBUG: CALL ONOFF
LD (DBFLG),A
JP KERMIT
ONOFF: LD DE,ONTAB
LD HL,ONHLP
ONOFFA: LD A,CMKEY
CALL COMND
JP ONOFF2
LD (TEMP1),A
LD A,CMCFM
CALL COMND
JP ONOFF3
LD A,(TEMP1)
RET
ONOFF2: POP AF
JP KERMT2
ONOFF3: POP AF
JP KERMT3
; THIS IS THE SHOW COMMAND.
SHOW: LD A,CMCFM
;* RECONCILE THIS AND STATUS.
CALL STAT01 ; FOR NOW JUST COP OUT.
JP KERMIT
; THIS IS THE STATUS COMMAND.
STATUS: CALL STAT01
JP KERMIT
STAT01: LD DE,LOCST ; GET THE ADDRESS OF THE LOCAL ECHO STRING.
CALL PRTSTR
LD DE,OFFSTR
LD A,(ECOFLG) ; GET THE LOCAL ECHO FLAG.
OR A ; IS IT ON?
JR Z,STAT03 ; IF NOT SAY SO.
LD DE,ONSTR ; SAY ON.
STAT03: CALL PRTSTR
LD DE,VTEMST ; GET THE ADDRESS OF THE VT52 EMULATION STRING.
CALL PRTSTR
LD DE,OFFSTR
LD A,(VTFLG) ; GET THE VT52 EMULATION FLAG.
OR A ; IS IT ON?
JR Z,STAT11 ; IF NOT SAY SO.
LD DE,ONSTR ; SAY ON.
STAT11: CALL PRTSTR
LD DE,CPMST ; GET THE ADDRESS OF THE CPM CREATED FILE.
CALL PRTSTR
LD A,(CPMFLG)
OR A ; IS IT ON?
JR Z,STAT2 ; IF NOT SAY SO.
CP 1 ; ASCII?
LD DE,ASCSTR;
JR Z,STAT21 ; SAY ASCII
LD DE,BINSTR; SAY BINARY
JR STAT21
STAT2: LD DE,DEFSTR ; SAY DEFAULT.
STAT21: CALL PRTSTR
LD DE,IBMST ; IBM STRING.
CALL PRTSTR
LD DE,OFFSTR
LD A,(IBMFLG) ; IBM FLAG.
OR A ; IS IT ON?
JR Z,STAT3 ; IF NOT SAY SO.
LD DE,ONSTR ; SAY ON.
STAT3: CALL PRTSTR
LD DE,FILST ; FILE WARNING STRING.
CALL PRTSTR
LD DE,OFFSTR
LD A,(FLWFLG) ; FILE WARNING FLAG.
OR A ; IS IT ON?
JR Z,STAT4 ; IF NOT SAY SO.
LD DE,ONSTR ; SAY ON.
STAT4: CALL PRTSTR
LD DE,BUGST ;debug string
CALL PRTSTR
LD DE,OFFSTR
LD A,(DBFLG)
OR A
JR Z,STAT4A
LD DE,ONSTR
STAT4A: CALL PRTSTR
LD DE,PARST ; PARITY STRING.
LD DE,PNTSTR ;printer string
CALL PRTSTR
LD DE,OFFSTR
LD A,(PRTFLG) ;get printer flag
OR A
JR Z,STAT4D
LD DE,ONSTR
STAT4D: CALL PRTSTR
LD DE,PARST
CALL PRTSTR
LD A,(PARITY) ; GET THE PARITY SETTING.
LD DE,PNONST ; NONE BY DEFAULT.
CP PARMRK ; IS IT MARK?
JR NZ,STAT5 ; IF NOT SAY SO.
LD DE,PMRKST ; SAY MARK.
JR STAT55
STAT5: CP PARSPC ; IS IT SPACE?
JR NZ,STAT51 ; IF NOT SAY SO.
LD DE,PSPCST ; SAY SPACE.
JR STAT55
STAT51: CP PARODD ; IS IT ODD?
JR NZ,STAT52 ; IF NOT SAY SO.
LD DE,PODDST ; SAY ODD.
JR STAT55
STAT52: CP PAREVN ; IS IT EVEN?
JR NZ,STAT55 ; IF NOT SAY SO.
LD DE,PEVNST ; SAY EVEN.
STAT55: CALL PRTSTR
; PRINT OUT CURRENT BLOCK-CHECK-TYPE
LD DE,BCKST ; GET THE STRING
CALL PRTSTR ; PRINT "BLOCK CHECK TYPE: "
LD A,(CHKTYP) ; GET THE TYPE (CHARACTER 1, 2, OR 3)
CALL CONOUT
LD DE,BCKST1; GET REST OF TEXT ("-CHARACTER")
CALL PRTSTR ; . . .
; PRINT THE CURRENT ESCAPE CHARACTER
LD DE,ESCST ; ESCAPE STRING.
CALL PRTSTR
CALL ESCPR ; PRINT THE ESCAPE CHAR.
LD DE,CRLF ; GET THE ADDRESS OF A CRLF.
CALL PRTSTR
; print current baud rate
LD DE,SPEDST ;line speed
CALL PRTSTR
LD A,(SPEED)
SUB 11H ;decement baud bit
LD HL,SPDTAB ;baud speed table
LD BC,CMSTAT-SPDTAB
CPIR ;block compare
INC HL
INC HL
EX DE,HL
CALL PRTSTR ;print baud rate
LD DE,BAUST ;' baud'
CALL PRTSTR
RET