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)