home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
archives
/
trs80coco.tar.gz
/
trs80coco.tar
/
ccprot.asm
< prev
next >
Wrap
Assembly Source File
|
2011-08-08
|
21KB
|
933 lines
00010 * COLOR COMPUTER KERMIT VERSION 1.1 03/85
00020 * COPYRIGHT (C) 1985 BY WES HUBERT
00030 * 3020 STEVEN DRIVE, LAWRENCE, KS 66044
00040 *
00050 * THIS IS AN IMPLEMENTATION OF THE KERMIT
00060 * PROTOCOL DEVELOPED BY FRANK DA CRUZ AND
00070 * BILL CATCHINGS AT THE COLUMBIA UNIVERSITY
00080 * CENTER FOR COMPUTING ACTIVITIES.
00090 *
00100 * THE USUAL KERMIT PERMISSIONS APPLY:
00110 * THE PROGRAM MAY BE COPIED FOR PRIVATE USE
00120 * OR NON-PROFIT DISTRIBUTION, BUT CANNOT BE
00130 * SOLD OR INCORPORATED INTO OTHER SOFTWARE
00140 * SOLD FOR PROFIT.
00150 *
00160 * THIS VERSION OF KERMIT RUNS ON THE TRS-80
00170 * COLOR COMPUTER. IT SHOULD WORK WITH BOTH
00180 * VERSION 1.0 AND 1.1 DISK ROM.
00190 * MINIMUM SYSTEM IS 16K WITH ONE DISK.
00200 *
00210 * THIS PORTION OF THE CODE PERFORMS KERMIT
00220 * PROTOCOL TRANSFERS. IT REQUIRES PRIOR
00230 * LOADING OF A SEPARATE PROGRAM FOR
00240 * KERMIT-COCO GENERAL TERMINAL FUNCTIONS.
00250 *
00260 * THIS CODE IS SUITABLE FOR THE RADIO SHACK
00270 * EDTASM ASSEMBLER. IT WAS PREPARED FROM THE
00280 * ROM-PACK VERSION WITH THE DISK I/O MODS
00290 * FROM RAINBOW MAGAZINE.
00300 *
00310 * SINCE THIS IS AN IN-MEMORY ASSMBLER
00320 * (ASSEMBLER, CODE AND SYMBOL TABLES
00330 * ALL RESIDE IN MEMORY) COMMENTS ARE
00340 * SKETCHY. THESE COMMENTS DOWN TO
00350 * THE ORG MUST BE DELETED TO GET
00360 * ENOUGH MEMORY TO ASSEMBLE.
00370 *
00380 * 1. ASSEMBLE BOTH TERMINAL & PROTOCOL CODE.
00390 * 2. PCLEAR 1: CLEAR 10,&H1FFF
00400 * 3. LOADM"COCOTERM"
00410 * 4. LOADM"COCOPROT"
00420 * 5. SAVEM"CCKERMIT",&H2000,&H2FFF,&H2000
00430 *
00440 * THIS VERSION OF KERMIT SENDS OR RECEIVES
00450 * ONLY ONE FILE AT A TIME. THE NAME MUST
00460 * BE EXPLICITLY GIVEN BY THE USER. THIS
00470 * IS TO PLACE RESPONSIBILITY TO AVOID
00480 * OVERWRITING EXISTING FILES ON THE USER.
00490 *
00500 *************************
00510 * KERMIT-COCO ENTRIES *
00520 *************************
00530 *
00540 ORG $2800 (ADDRESS KNOWN TO TERMINAL CODE)
00550 BRA LRCV (RECEIVE)
00560 BRA LSEND (SEND)
00570 BRA LSET (SET-UP)
00580 LRCV LBRA KRCV
00590 LSEND LBRA KSEND
00600 LSET LBRA KSET
00610 *
00620 *************************
00630 * TERMINAL ENTRY POINTS *
00640 *************************
00650 *
00660 RS232I EQU $2002 (RS232 INPUT)
00670 RS232O EQU $2004 (RS232 OUTPUT)
00680 KEYIN EQU $2006 (KEYBOARD INPUT)
00690 CHROUT EQU $2008 (DISPLAY OUTPUT)
00700 INNAME EQU $200A (OPEN INPUT FILE)
00710 OTNAME EQU $200C (OPEN OUTPUT FILE)
00720 FCLOSE EQU $200E (CLOSE FILE)
00730 WAIT EQU $2010 (PAUSE 1 BIT TIME)
00740 QEOF EQU $2012 (TEST FILE EOF)
00750 FNAME EQU $2014 (FILENAME BUFFER)
00760 *
00770 *************************
00780 * COCO DEFINITIONS *
00790 *************************
00800 *
00810 UNIT EQU $6F (I/O UNIT#)
00820 SCRPTR EQU $88 (SCREEN POINTER)
00830 SCREEN EQU $400 (SCREEN MEMORY)
00840 RTYPE EQU $957 (TYPE/MODE)
00850 PUTCHR EQU $A002 (PUT CHAR, INDIRECT)
00860 GETCHR EQU $A176 (READ SINGLE CHAR)
00870 INPIA EQU $FF22 (INPUT PIA)
00880 *
00890 HEADER FCC 'KERMIT-COCO 1.1'
00900 FCB 0
00910 *
00920 *************************
00930 * KERMIT INIT PACKET *
00940 *************************
00950 *
00960 INPAK RMB 0
00970 INLNG FCB 44 (LENGTH+32)
00980 FCB 32 (PACKNO+32)
00990 INTYPE FCC 'S' (SEND INIT)
01000 MYMAXL FCB 126 (MAX PACKET SIZE+32)
01010 MYTIME FCB 47 (15 SECOND TIMEOUT)
01020 MYPADN FCB 33 (1 PAD CHAR)
01030 MYPADC FCB $40 (NULL)
01040 MYEOLI FCB 45 (EOL=CARRIAGE RETURN)
01050 MYQCTL FCC '#' (CONTROL QUOTE)
01060 MYQBIN FCC '&' (BINARY QUOTE)
01070 MYCHKT FCC '1' (1-BYTE CHECKSUM)
01080 MYREPT FCB 32 (NO REPEATS)
01090 RMB 1 (PLACE FOR CHECKSUM)
01100 MYEOL FCB 13 (MYEOLI-32)
01110 *
01120 *************************
01130 * REMOTE CHARACTERISTICS*
01140 *************************
01150 *
01160 MAXL FCB 94 (MAY BE
01170 PADN FCB 0 REVISED
01180 PADC FCB 0 BY THE
01190 QCTL FCC '#' REMOTE INIT
01200 QBIN FCC '&' PACKET)
01210 *
01220 *************************
01230 * SETABLE PARAMETERS *
01240 *************************
01250 *
01260 FTYPE FCB 0 (FILE TYPE=BASIC)
01270 FMODE FCB $FF (FILE MODE=ASCII)
01280 EOL FCB 13 (C.R.)
01290 MAXTRY FCB 5 (# OF RETRIES)
01300 SOH FCB 1 (PACKET HEADER)
01310 QDEBUG FCB 0 (0=NODEBUG)
01320 *
01330 *************************
01340 * FILE NAME PACKET *
01350 *************************
01360 *
01370 FBUFF FCB 0 (LENGTH)
01380 FCB 33 (PACKET #)
01390 FCC 'F' (TYPE)
01400 FBN RMB 12 (NAME)
01410 RMB 1 (CHECKSUM)
01420 *
01430 *************************
01440 * SCRATCH VARIABLES *
01450 *************************
01460 *
01470 NPACK RMB 2 (CURRENT PACKET)
01480 NTRY RMB 1 (REMAINING RETRIES)
01490 SNUM RMB 1 (PACKET MOD 64)
01500 QCR RMB 1 (CR PENDING)
01510 FBIN RMB 1 (HIGH BIT FLAG)
01520 NEEDAK RMB 1 (ACK PENDING)
01530 *
01540 *************************
01550 * READ CHAR FROM FILE 1 *
01560 * RETURN CHAR IN A *
01570 * CLEAR Z FLAG ON EOF *
01580 *************************
01590 *
01600 FGET LDA #1 (UNIT #1)
01610 STA UNIT
01620 JSR [QEOF]
01630 BNE FGETE
01640 JSR GETCHR (BASIC ROM)
01650 CLR UNIT
01660 CLRB
01670 RTS
01680 FGETE CLR UNIT
01690 LDB #1 (FLAG EOF)
01700 RTS
01710 *
01720 *************************
01730 * PUT CHAR INTO FILE 1 *
01740 * RECEIVE CHAR IN A *
01750 *************************
01760 *
01770 FPUT PSHS X,B
01780 LDB #1 (UNIT #1)
01790 STB UNIT
01800 JSR [PUTCHR]
01810 PULS X,B
01820 CLR UNIT (BACK TO SCREEN)
01830 RTS
01840 *
01850 *************************
01860 * SYNC AFTER RS232 INPUT*
01870 *************************
01880 *
01890 SYNC PSHS A (SAVE INCHAR)
01900 JSR [WAIT] (ONE BIT-TIME)
01910 SYNC1 LDA INPIA
01920 LSRA
01930 BCC SYNC1 (WAIT FOR STOP BIT)
01940 PULS A
01950 RTS
01960 *
01970 *************************
01980 * PRINT STRING [X] *
01990 * STRING ENDS WITH NULL *
02000 *************************
02010 *
02020 PRINT LDA ,X+ (CHAR FROM STRING)
02030 BEQ PRINTX (NULL MARKS END)
02040 JSR [CHROUT]
02050 BRA PRINT
02060 PRINTX RTS
02070 *
02080 *************************
02090 * CURSOR TO LINE=A,COL=B*
02100 *************************
02110 *
02120 AT PSHS D
02130 LDB #32 (LINE 0-15)
02140 MUL
02150 CLR ,S
02160 ADDD ,S++ (ADD COL 0-31)
02170 ADDD #SCREEN (SCREEN ORIGIN)
02180 STD SCRPTR
02190 RTS
02200 *
02210 *************************
02220 * BINARY VALUE TO HEX *
02230 *************************
02240 *
02250 TOHEX PSHS A (BINARY VALUE)
02260 CLRB
02270 LSLA (HIGH 4 BITS TO B)
02280 ROLB
02290 LSLA
02300 ROLB
02310 LSLA
02320 ROLB
02330 LSLA
02340 ROLB
02350 PULS A
02360 ANDA #$F (ORIGINAL LOW 4)
02370 ADDD #$3030 (ASCII EXCESS)
02380 CMPA #$39
02390 BLE THX2
02400 ADDA #7
02410 THX2 CMPB #$39
02420 BLE THX4
02430 ADDB #7
02440 THX4 EXG A,B
02450 RTS
02460 *
02470 *************************
02480 * OUTPUT VAL(A) IN HEX *
02490 *************************
02500 *
02510 HEXOUT BSR TOHEX (VAL(A) TO HEX(D))
02520 PSHS B
02530 JSR [CHROUT]
02540 PULS A
02550 JSR [CHROUT]
02560 RTS
02570 *
02580 *************************
02590 * CLEAR SCREEN *
02600 *************************
02610 *
02620 CLEAR LDD #SCREEN
02630 STD SCRPTR (HOME CURSOR)
02640 LDX #SCREEN+$80
02650 LDY #SCREEN+$180
02660 LDD #$6000 (60=SCREEN BLANK)
02670 CLR2 STA B,X
02680 STA B,Y
02690 INCB
02700 BNE CLR2 (256 TIMES)
02710 RTS
02720 *
02730 *************************
02740 * SHOW CURRENT PACKET # *
02750 *************************
02760 *
02770 SNDSTS LDD SCRPTR (SAVE SCREEN LOC)
02780 PSHS X,D
02790 LDD #$0308 (LINE 4, COL 9)
02800 LBSR AT (MOVE CURSOR)
02810 LDA NPACK,PCR
02820 BSR HEXOUT
02830 LDA 1+NPACK,PCR
02840 BSR HEXOUT
02850 PULS X,D
02860 STD SCRPTR
02870 RTS
02880 *
02890 *************************
02900 * ECHO PACKET TO SCREEN *
02910 * RECEIVE A=LINE, B=CHR *
02920 * FOR START OF DISPLAY *
02930 *************************
02940 *
02950 ECHO LDY SCRPTR (SAVE SCREEN LOC)
02960 PSHS Y
02970 LBSR AT
02980 LDA ,X+ (LENGTH)
02990 SUBA #32
03000 ANDA #$7F (128 CHAR MAX)
03010 PSHS A
03020 ECHO2 LDA ,X+
03030 JSR [CHROUT]
03040 DEC ,S
03050 BNE ECHO2
03060 LDA #' (ADD BLANKS)
03070 ECHO4 JSR [CHROUT]
03080 LDB 1+SCRPTR
03090 INCB
03100 ANDB #$7F (TO EVEN 128 BYTES)
03110 BNE ECHO4
03120 PULS A
03130 PULS D (SCREEN LOC)
03140 STD SCRPTR
03150 RTS
03160 *
03170 *************************
03180 * PREPARE TO SEND PACKET*
03190 *************************
03200 *
03210 NEWPAK LDA MAXTRY,PCR
03220 STA NTRY,PCR (SET # RETRIES)
03230 LDD NPACK,PCR
03240 ADDD #1 (BUMP PACKET #)
03250 STD NPACK,PCR
03260 RTS
03270 *
03280 *************************
03290 * COMPUTE CHECKSUM *
03300 * PACKET ADDRESS IN X *
03310 * RETURN CHECKSUM IN A *
03320 * CHECKSUM ADDRESS IN X *
03330 *************************
03340 *
03350 CHKSUM CLRB
03360 LDA ,X (LENGTH)
03370 SUBA #32
03380 BEQ CHKX
03390 CHK2 ADDB ,X+
03400 DECA
03410 BNE CHK2 (SUM ALL BYTES)
03420 TFR B,A
03430 ROLB (MOVE HIGH 2 BITS
03440 ROLB TO LOW BITS
03450 ROLB THROUGH CARRY)
03460 ANDB #3 (2 BITS ONLY)
03470 PSHS B
03480 ADDA ,S+ (ADD INTO LOW 6)
03490 ANDA #$3F (KEEP 6 BITS)
03500 CHKX ADDA #32 (PRINTING ASCII)
03510 RTS
03520 *
03530 *************************
03540 * GET PARAMS FROM S PAK *
03550 *************************
03560 *
03570 REMINI LEAX RBUFF,PCR
03580 CLR QBIN,PCR (CLEAR 8TH-BIT QUOTE)
03590 LDB ,X (LENGTH)
03600 SUBB #35 (LESS SEQ,TYPE,CHKSUM,32)
03610 BEQ REMX
03620 LDA 3,X
03630 SUBA #32
03640 STA MAXL,PCR
03650 DECB
03660 BEQ REMX
03670 DECB (CAN'T TIME OUT)
03680 BEQ REMX
03690 LDA 5,X
03700 SUBA #32
03710 STA PADN,PCR
03720 DECB
03730 BEQ REMX
03740 LDA 6,X
03750 EORA #$40
03760 STA PADC,PCR
03770 DECB
03780 BEQ REMX
03790 DECB
03800 BEQ REMX
03810 LDA 8,X
03820 STA QCTL,PCR
03830 DECB
03840 BEQ REMX
03850 LDA 9,X
03860 CMPA #'Y (Y=& IF REQUESTED)
03870 BNE REM4
03880 LDA #'&
03890 REM4 STA QBIN,PCR
03900 REMX RTS
03910 *
03920 *************************
03930 * PUT CHAR INTO PACKET *
03940 * RECEIVE CHAR IN A *
03950 * PACKET ADDRESS IN X *
03960 * CLEAR Z IF PACKET FULL*
03970 *************************
03980 *
03990 KRMPUT PSHS X (PACKET ADDRESS)
04000 LDB ,X (CURRENT LENGTH)
04010 SUBB #32 (TOCHAR OFFSET)
04020 ABX (CURRENT CHAR)
04030 LDB QBIN,PCR (CHECK 8-BIT QUOTE)
04040 CMPB MYQBIN,PCR
04050 BEQ KRMP0
04060 ANDA #$7F (IGNORE HIGH BIT)
04070 BRA KRMP1
04080 KRMP0 TSTA (CHECK HIGH BIT)
04090 BPL KRMP1
04100 LDB MYQBIN,PCR
04110 STB ,X+
04120 ANDA #$7F
04130 BRA KRMP2
04140 KRMP1 CMPA #$0D (CR INTO CR,LF)
04150 BNE KRMP2
04160 TST FMODE,PCR
04170 BEQ KRMP2 (UNLESS BINARY)
04180 LDB MYQCTL,PCR
04190 STB ,X+
04200 EORA #$40
04210 STA ,X+
04220 STB ,X+
04230 LDA #$0A
04240 EORA #$40
04250 BRA KRMP6
04260 KRMP2 CMPA MYQCTL,PCR (SEE IF CTL FLAG)
04270 BNE KRMP3
04280 EORA #$40 (TEMPORARY SHIFT)
04290 BRA KRMP5
04300 KRMP3 CMPA MYQBIN,PCR (SEE IF BIN FLAG)
04310 BNE KRMP4
04320 CMPA QBIN,PCR (CHECK 8TH-BIT QUOTE)
04330 BNE KRMP4
04340 EORA #$40 (TEMPORARY SHIFT)
04350 BRA KRMP5
04360 KRMP4 CMPA #32 (SEE IF CONTROL)
04370 BMI KRMP5
04380 CMPA #$7F (RUBOUT)
04390 BNE KRMP6
04400 KRMP5 LDB MYQCTL,PCR
04410 STB ,X+
04420 EORA #$40
04430 KRMP6 STA ,X+
04440 *
04450 TFR X,D (NEW NEXT POSITION)
04460 SUBD ,S (LESS PACKET ORIGIN)
04470 PULS X
04480 ADDB #32
04490 STB ,X (LENGTH)
04500 SUBB #28 (NEED UP TO 4 MORE)
04510 CMPB MAXL,PCR
04520 BMI KRMP9
04530 LDB #1 (FLAG END OF PACKET)
04540 RTS
04550 KRMP9 CLRB
04560 RTS
04570 *
04580 *************************
04590 * SEND PACKET *
04600 * PACKET ADDRESS IN X *
04610 *************************
04620 *
04630 SNDPAK PSHS X (HOLD ADDRESS)
04640 LBSR CHKSUM
04650 STA ,X
04660 TST QDEBUG,PCR
04670 BEQ SND2
04680 LDD #$0800 (LINE 9)
04690 LDX ,S
04700 LBSR ECHO
04710 SND2 LDB PADN,PCR
04720 PSHS B
04730 SND3 DEC ,S
04740 BMI SND4
04750 LDA PADC,PCR
04760 JSR [RS232O] (SEND PAD)
04770 BRA SND3
04780 SND4 PULS B
04790 LBSR SNDSTS (SHOW PACKET #)
04800 LDA SOH,PCR
04810 JSR [RS232O] (SEND SOH)
04820 LDX ,S (ADDRESS)
04830 LDB ,X (LENGTH)
04840 SUBB #32
04850 PSHS B
04860 SND6 LDA ,X+
04870 JSR [RS232O]
04880 DEC ,S
04890 BPL SND6
04900 PULS B
04910 LDA EOL,PCR
04920 JSR [RS232O]
04930 PULS X
04940 RTS
04950 *
04960 *************************
04970 * SEND EMPTY PACKET *
04980 * PACKET TYPE IN A *
04990 *************************
05000 *
05010 SEND1 LEAX SBUFF,PCR
05020 STA 2,X (TYPE)
05030 LDA #35
05040 STA ,X
05050 LDB 1+NPACK,PCR
05060 ANDB #$3F
05070 ADDB #32
05080 STB 1,X
05090 LBSR CHKSUM
05100 STA ,X
05110 LDX #$8000 (PAUSE)
05120 SEND1P LEAX -1,X
05130 BNE SEND1P
05140 LEAX SBUFF,PCR
05150 BSR SNDPAK
05160 RTS
05170 *
05180 *************************
05190 * GET PACKET FROM REMOTE*
05200 * CLEAR Z IF FAIL *
05210 *************************
05220 *
05230 GETPAK LEAX RBUFF,PCR
05240 PSHS X
05250 GETP1 JSR [KEYIN] (ALLOW INTERRUPTION)
05260 BEQ GETP2
05270 CMPA #$0D (BY C.R.)
05280 BEQ GETPB
05290 GETP2 JSR [RS232I]
05300 BEQ GETP1
05310 LBSR SYNC (WAIT FOR STOP BIT)
05320 CMPA SOH,PCR
05330 BNE GETP1 (IGNORE UNTIL SOH)
05340 GETP3 LDX ,S (BUFFER LOC)
05350 GETP4 JSR [KEYIN]
05360 BEQ GETP5
05370 CMPA #$0D
05380 BEQ GETPB
05390 GETP5 JSR [RS232I]
05400 BEQ GETP4
05410 LBSR SYNC (WAIT FOR STOP BIT)
05420 CMPA SOH,PCR
05430 BEQ GETP3
05440 STA ,X+
05450 CMPA MYEOL,PCR
05460 BNE GETP4
05470 GETP6 TST QDEBUG,PCR
05480 BEQ GETP7
05490 LDX ,S (SHOW PACKET)
05500 LDD #$0C00 (LINE 13)
05510 LBSR ECHO
05520 GETP7 PULS X
05530 LBSR CHKSUM
05540 CMPA ,X
05550 RTS
05560 GETPB PULS X
05570 LDA #1
05580 RTS
05590 *
05600 *************************
05610 * RECEIVE A PACKET. *
05620 * FIRST ACK PREVIOUS IF *
05630 * NOT YET ACKNOWLEDGED. *
05640 * LEAVE DATA LENGTH IN B*
05650 * DATA ADDRESS IN X *
05660 * Z SET IF TYPE IS DATA *
05670 *************************
05680 *
05690 RGET LDA MAXTRY,PCR
05700 STA NTRY,PCR
05710 TST NEEDAK,PCR
05720 BEQ RGET2
05730 LDA #'Y
05740 LBSR SEND1 (ACK LAST PACKET)
05750 LDD NPACK,PCR
05760 ADDD #1
05770 STD NPACK,PCR
05780 CLR NEEDAK,PCR
05790 RGET2 DEC NTRY,PCR
05800 BMI RFAIL
05810 LEAX RBUFF,PCR
05820 LBSR GETPAK
05830 BEQ RGET4
05840 LDA #'N (NAK)
05850 LBSR SEND1
05860 BRA RGET2
05870 RGET4 LEAX RBUFF,PCR
05880 LDD NPACK,PCR
05890 BNE RGET5
05900 LBSR REMINI
05910 LEAX INPAK,PCR (SPECIAL ACK FOR INIT)
05920 LDA #'Y
05930 STA 2,X
05940 LBSR CHKSUM
05950 STA ,X
05960 LEAX INPAK,PCR
05970 LBSR SNDPAK
05980 LDD #1
05990 STD NPACK,PCR
06000 LDA #'S
06010 RTS
06020 RGET5 ANDB #$3F
06030 ADDB #32
06040 CMPB 1,X
06050 BEQ RGET8
06060 LDA #'N (NAK)
06070 LBSR SEND1
06080 BRA RGET2
06090 RGET8 DEC NEEDAK,PCR
06100 LEAX RBUFF,PCR
06110 LDB ,X
06120 SUBB #35
06130 LEAX 3,X
06140 LDA -1,X (TYPE)
06150 CMPA #'D
06160 RTS
06170 RFAIL LDA #'Q
06180 RTS
06190 *
06200 *************************
06210 * GET NEXT DATA CHAR *
06220 * VIEWS DATA AS STREAM *
06230 * B=CHARS LEFT IN PACKET*
06240 * X=CURRENT DATA ADDRESS*
06250 * RETURN CHAR IN A *
06260 * ON END OF DATA, SET Z *
06270 * LEAVE PACKET TYPE IN A*
06280 *************************
06290 *
06300 GETCHP TSTB
06310 BNE GETC2
06320 LBSR RGET
06330 BNE GETC4
06340 GETC2 DECB
06350 LDA ,X+
06360 RTS
06370 GETC4 CLRB
06380 RTS
06390 *
06400 *************************
06410 * RECEIVE DATA *
06420 * COPY DATA TO FILE 'TIL*
06430 * NON-DATA PACKET. *
06440 *************************
06450 *
06460 KGET CLR QCR,PCR (NO CR PENDING)
06470 CLR FBIN,PCR (NO HIGH BIT)
06480 CLRB
06490 KGET1 LBSR GETCHP
06500 BEQ KGETX
06510 CMPA QBIN,PCR
06520 BNE KGET4
06530 INC FBIN,PCR (FLAG HIGH BIT)
06540 LBSR GETCHP
06550 BEQ KGETX
06560 KGET4 CMPA QCTL,PCR
06570 BNE KGET8
06580 LBSR GETCHP
06590 BEQ KGETX
06600 CMPA QBIN,PCR
06610 BEQ KGET8
06620 CMPA QCTL,PCR
06630 BEQ KGET8
06640 EORA #$40
06650 TST FBIN,PCR
06660 BNE KGET8
06670 TST FMODE,PCR (0=BINARY)
06680 BEQ KGET8
06690 TST QCR,PCR (0=NO CR PENDING)
06700 BEQ KGET8
06710 CMPA #$0A
06720 BNE KGET8
06730 CLR QCR,PCR
06740 BRA KGET9 (SKIP LF AFTER CR)
06750 KGET8 TST FBIN,PCR
06760 BEQ KGET8A
06770 ADDA #$80
06780 KGET8A CLR QCR,PCR
06790 CMPA #$0D
06800 BNE KGET8C
06810 INC QCR,PCR
06820 KGET8C LBSR FPUT (INTO FILE)
06830 KGET9 CLR FBIN,PCR
06840 BRA KGET1
06850 KGETX RTS
06860 *
06870 *************************
06880 * SHOW/SET PARAMETERS *
06890 * ENTERED FROM ATEP *
06900 *************************
06910 *
06920 KSET LBSR CLEAR
06930 LEAX HEADER,PCR
06940 LBSR PRINT
06950 LEAX HDRSET,PCR
06960 LBSR PRINT
06970 LEAX FTYPE,PCR
06980 LDA #6 (# PARAMS)
06990 PSHS A
07000 KREP1 LDA #'
07010 JSR [CHROUT]
07020 JSR [CHROUT]
07030 JSR [CHROUT]
07040 LDA ,X+
07050 LBSR HEXOUT
07060 DEC ,S
07070 BNE KREP1
07080 PULS A
07090 LDA #$0A
07100 JSR [CHROUT]
07110 * NEW PARAMETERS
07120 LDB #6 (# PARAMS)
07130 PSHS B
07140 LEAX FTYPE,PCR
07150 KNEW1 LDA #'
07160 JSR [CHROUT]
07170 JSR [CHROUT]
07180 JSR [CHROUT]
07190 KNEW2 JSR [KEYIN]
07200 BEQ KNEW2
07210 LDB ,S
07220 CMPB #6 (SEE IF FIRST)
07230 BNE KNEW2A
07240 CMPA #$0D (EXIT ON CR IF SO)
07250 BEQ KNEW5
07260 KNEW2A CMPA #' (LEAVE ASIS)
07270 BEQ KNEW3
07280 STA ,X+
07290 BRA KNEW4
07300 KNEW3 LDA ,X+ (GET OLD)
07310 KNEW4 LBSR HEXOUT
07320 DEC ,S
07330 BNE KNEW1
07340 KNEW5 PULS B
07350 LDA #$0A
07360 JSR [CHROUT]
07370 RTS
07380 *
07390 *************************
07400 * SEND FILE - MAIN ENTRY*
07410 *************************
07420 *
07430 KSEND LBSR CLEAR (CLEAR SCREEN)
07440 LEAX HEADER,PCR
07450 LBSR PRINT
07460 LEAX HDRSND,PCR
07470 LBSR PRINT
07480 JSR [INNAME]
07490 TST FNAME (NOTE NOT PCR)
07500 BNE KSEND2
07510 RTS
07520 KSEND2 LDD RTYPE (TYPE/MODE)
07530 STD FTYPE,PCR
07540 LDD #0
07550 STD NPACK,PCR
07560 LDD #$0300
07570 LBSR AT
07580 LEAX HDRPAK,PCR
07590 LBSR PRINT
07600 *** SEND INIT PACKET ***
07610 LDA #'S
07620 LEAX INPAK,PCR
07630 STA 2,X
07640 LDA MAXTRY,PCR
07650 STA NTRY,PCR
07660 SISND DEC NTRY,PCR
07670 LBMI SFAIL
07680 LEAX INPAK,PCR
07690 LBSR SNDPAK
07700 LBSR GETPAK
07710 BNE SISND
07720 LDA 2+RBUFF,PCR
07730 CMPA #'Y
07740 BNE SISND
07750 LBSR REMINI
07760 *** SEND FILE HEADER PACKET ***
07770 LDY #FNAME
07780 LEAX FBN,PCR
07790 CLRB
07800 FNCOPY LDA B,Y
07810 BEQ FNGOT
07820 STA B,X
07830 INCB
07840 BRA FNCOPY
07850 FNGOT ADDB #35 (TOCHAR)
07860 LEAX FBUFF,PCR
07870 STB ,X
07880 LBSR NEWPAK
07890 FNSND DEC NTRY,PCR
07900 LBMI SFAIL
07910 LEAX FBUFF,PCR
07920 LBSR SNDPAK
07930 LBSR GETPAK
07940 BNE FNSND
07950 LDA 2+RBUFF,PCR
07960 CMPA #'Y
07970 BNE FNSND
07980 *** SEND DATA PACKETS ***
07990 SHDR JSR [QEOF]
08000 BNE SCLOSE
08010 LBSR NEWPAK
08020 LEAX SBUFF,PCR
08030 ANDB #$3F (MOD 64)
08040 STB SNUM,PCR (FOR ACK)
08050 ADDB #32 (TOCHAR)
08060 STB 1,X
08070 LDB #'D (DATA)
08080 STB 2,X
08090 LDA #35 (SIZE)
08100 STA ,X
08110 SBUILD JSR [QEOF] (SEE IF EOF)
08120 BNE SSEND
08130 LBSR FGET
08140 LEAX SBUFF,PCR
08150 LBSR KRMPUT (INTO PACKET)
08160 BEQ SBUILD (FILL PACKET)
08170 SSEND DEC NTRY,PCR
08180 LBMI SFAIL
08190 LEAX SBUFF,PCR
08200 LBSR SNDPAK
08210 LBSR GETPAK
08220 BNE SSEND
08230 LEAX RBUFF,PCR (CHECK ACK)
08240 LDD 1,X
08250 SUBA #32 (PACK#)
08260 CMPB #'Y
08270 BEQ SACK
08280 CMPB #'N
08290 LBNE SFAIL
08300 DECA (NAK NEXT?)
08310 ANDA #$3F
08320 SACK CMPA SNUM,PCR
08330 BNE SSEND (FAILURE)
08340 BRA SHDR
08350 SCLOSE JSR [FCLOSE]
08360 *** SEND END OF FILE PACKET ***
08370 LBSR NEWPAK
08380 SNDEOF DEC NTRY,PCR
08390 LBMI SFAIL
08400 LDA #'Z (EOF)
08410 LBSR SEND1
08420 LBSR GETPAK
08430 BNE SNDEOF
08440 *** SEND END OF TRANSMISSION PACKET ***
08450 LBSR NEWPAK
08460 SNDEOT DEC NTRY,PCR
08470 LBMI SFAIL
08480 LDA #'B (EOT)
08490 LBSR SEND1
08500 LBSR GETPAK
08510 BNE SNDEOT
08520 SOK LEAX SFINI,PCR
08530 LBSR PRINT
08540 RTS
08550 SFAIL JSR [FCLOSE]
08560 LDA #'B
08570 LBSR SEND1
08580 LEAX SERR,PCR
08590 LBSR PRINT
08600 RTS
08610 *
08620 *************************
08630 * MAIN RECEIVE ROUTINE *
08640 *************************
08650 *
08660 KRCV LBSR CLEAR
08670 LEAX HEADER,PCR
08680 LBSR PRINT
08690 LEAX HDRREC,PCR
08700 LBSR PRINT
08710 LDD #0
08720 STD NPACK,PCR
08730 LDD FTYPE,PCR
08740 STD RTYPE
08750 JSR [OTNAME]
08760 TST FNAME (NOTE NOT PCR)
08770 BNE KRCV2
08780 RTS (NO NAME, EXIT)
08790 KRCV2 LDD #$0300
08800 LBSR AT
08810 LEAX HDRPAK,PCR
08820 LBSR PRINT
08830 CLR NEEDAK,PCR
08840 LBSR RGET (INIT)
08850 CMPA #'S
08860 BNE KRFAIL
08870 LBSR RGET
08880 CMPA #'F
08890 BNE KRFAIL
08900 LBSR KGET (RECEIVE DATA)
08910 CMPA #'Z (EOF?)
08920 BNE KRFAIL
08930 LBSR RGET
08940 CMPA #'B (EOT)
08950 BNE KRFAIL
08960 LDA #'Y
08970 LBSR SEND1
08980 JSR [FCLOSE]
08990 LBRA SOK
09000 KRFAIL LBRA SFAIL
09010 *
09020 HDRSET FDB $0A0A
09030 FCC 'ALL PARAMETERS SHOWN IN HEX'
09040 FCB $0A
09050 FCC 'ENTER NEW VALUES BY KEY CODE'
09060 FCB $0A
09070 FCC 'BLANK=NO CHANGE, BREAK=FF'
09080 FDB $0A0A
09090 FCC ' TYPE MODE EOL NTRY SOH DBUG'
09100 FDB $0A00
09110 HDRSND FCB $0A
09120 FCC 'SEND FILE'
09130 FDB $0A00
09140 HDRREC FCB $0A
09150 FCC 'RECEIVE FILE'
09160 FDB $0A00
09170 HDRPAK FCC 'PACKET #0000 (HEX)'
09180 FDB $0A00
09190 SFINI FDB $0A07
09200 FCC 'TRANSFER COMPLETE'
09210 FDB $0707
09220 FDB $0A00
09230 SERR FDB $0A07
09240 FCC 'TRANSFER FAILED'
09250 FDB $0707
09260 FDB $0A00
09270 *
09280 ZZZBUF RMB 0 (TOP EXCEPT BUFFER)
09290 SBUFF RMB 98 (SEND BUFFER)
09300 RBUFF RMB 98 (RECEIVE BUFFER)
09310 ZZZTOP RMB 0
09320 END $2000 (ATEP ENTRY)