DWB 42 XMODEMR P 22932 MODUALS P 2775 MCI CMDS P 9637 XMODEMS P 22862 COMMNET P 7993 YMODEMT P 21631 PUNTERR P 14501 ALT CMDS P 2899 PUNTERS P 12868 CHATMODE P 11499 LTK SIZE P 4614 SSCANNER P 2369 CRC TABLE P 2807 SNAPSHOT P 2937 SWITCHER P 406 COPY FILE P 831 CHAT ED P 2882 VDC PRINT P 1227 NET64XFER P 13710 VARIABLES P 6671 COMMODORE P 5835 PUNTER/LO P 718 SWIFTLINK P 11892 DIGIPLAYER P 1566 PUNTERR CN P 14493 BUFFER LOAD P 360 BUFFER SAVE P 417 LOAD MODULE P 5522 SET CURSOR P 2703 LTK DIRECT P 1437 HIDE MODULE P 1215 ENTRYTABLE P 831 BLOADBSAVE P 2581 COUNT MSGS P 1267 COMPAREDIR P 1848 COPY TX2VAR P 2427 INTERPRETER P 10897 CONVERT CASE P 2207 SPEEDY-PAUSE P 4594 GEN CRC TABLES P 413 CLR STACKS P 485 RESTORE MODULE P 583  4000XMODEM'SUM 01XMODEM'CRC 0DXMODEM'1K 0WYMODEM'BAT 0jYMODEM'G 1 .DVO 9 : .G $12FE . XMODEM'SUM : PROCOL'1K 0 : PROCOL'BAT 0 : PROCOL'CRC 1: PROCOL'NAK 7: PROCOL'ERR 1:.OBJ "@0:MLC.XMODEM-R"%.E7. XMODEM'CRCM: PROCOL'1K 0c: PROCOL'BAT 0z: PROCOL'CRC 13: PROCOL'NAK 7: PROCOL'ERR 1:.OBJ "@0:MLC.XMODEMCRC-R".E. XMODEM'1K: PROCOL'1K 1  : PROCOL'BAT 0!!: PROCOL'CRC 207": PROCOL'NAK 0M#: PROCOL'ERR 1k&:.OBJ "@0:MLC.XMODEM1K-R"s'.E(. YMODEM'BAT): PROCOL'1K 1*: PROCOL'BAT 2+: PROCOL'CRC 20,: PROCOL'NAK 0-: PROCOL'ERR 10:.OBJ "@0:MLC.YMODEM-R"1.E(2. YMODEM'G>3: PROCOL'1K 1T4: PROCOL'BAT 2k5: PROCOL'CRC 206: PROCOL'NAK 07: PROCOL'ERR 0::.OBJ "@0:MLC.YMODEMG-R";.EZ;,.DVI 96.LST "COMMON.ST"@.LST "VARIABLES.ST" J.LST "TRANSLATION.ST"( T.LST "MODEM.ST". ;\ :.BYT 0 ;FIYPE LY PUNTER :.BYT 0 ;PROCOL # 4863,D%(10) : JMP 'AS'BAD ;S . USED IN RECEIVE ; . PROCOL'BAT : JMP RECV' ;NAME IN TX$ .!: JMP 'AS'OD ;NO !$.E !);P!.: JMP 'AS'BAD ;S'FILE. USED IN RECEIVEd!8: JMP RECV'FILE!B: JMP 'AS'BAD ;S BATCH EOT. USED IN RECEIVE!LTRANS'FLAG BRK ; TRANSLATI FLAG"VNUMB'BLKS .WD $0000 ;NUMBER OF BLOCKS (OF BELOW BYTES) TRANSMITTED LAST%"`. PROCOL'1K\"e: .WD 1024 ;NUMBER OF BYTES PER 1K BLOCKc"j."o: .WD 0128 ;NUMBER OF BYTES PER 128B BLOCK"t.E"~MAX'BLKS .WD $FFFF ;MAX # OF BLOCKS MAY RECEIVE#:.BYT PROCOL'BAT ;XFER TYPE FLAG: 0GLE, 2MULTI#: BRKF#: JSR PRIMM'BBS' ;PROCOL NAMEX#. XMODEM'SUMi#:. "MODEM"q#.E#. XMODEM'CRC#:. "MODEM-"#.E#. XMODEM'1K#:. "MODEM-1K"#.E#. YMODEM'BAT#:. "MODEM-ATCH"#.E$. YMODEM'G!$:. "MODEM-")$.E5$:.BYT 0?$(: RTSE$x;[$;MODULE VARIABLESa$;$SOH 1 ;CTRLA$STXX 2 ;CTRLB$EOT 4 ;CTRLD$ACK 6 ;CTRLF%. PROCOL'ERR<%CNAK 67 ;II CAP "" CRC NAKC%.%CNAK 71 ;II CAP "" CRC NAK YMODEMG%.E%NAK 21 ;CTRLU%CAN 24 ;CTRLX (ABT)&PAD 26 ;PADDING ACTER (CTRLZ)&6;E&@RETRIES $0B ;COUNT RETRIES&JSIGNAL $5B ;SET CNAK NAK FIRST BLOCK&TCRC'MODE $10 ;0CHECKSUM, 0CRC&^CAN'COUNT $2A ;NUMBER OF CANS RECEIVED IN A ROW3'hBLOCK $2B ;CURRENT LOCAL BLOCK NUMBERm'rCOMP $2C ;CURRENT LOCAL COMP NUMBER'|CRC $3F;$40 ;CALCULATED CRC CHECKSUM UE'BLK'SIZE $54 ;0NE, 1128B, 21024B(PREV'SIZE $5A ;0NE, 1128B, 21024BH(OD'COUNT $12D0;D1 ;TAL OD BLOCKSx(BAD'COUNT $12D2;D3 ;TAL BAD BLOCKS(INUOUS'BAD $12D4 ;COUNT NUMBER OF BAD BLOCKS IN A ROW(RECV'BLK $C5 ;RECEIVED BLOCK NUMBER$)RECV'COMP $5F ;RECEIVED COMP NUMBER`)RECV'CRC $5D;$5E ;RECEIVED CRC CHECKSUM UE)'STATUS $200 ;0OD, 0BAD)XBUFFER1 $0400 ;BLOCK RECEIVE BUFFER)bBUFFER2 $1E00 ;BLOCK WRITE BUFFER);* INITIALIZE'VARS !* : LDX #0^* : LDA #PROCOL'CRC ;RETRIESPROCOL RETRIES CRCp* : STA RETRIES* : LDA #CNAK* : STA SIGNAL ;SIGNALCNAK* : STX CAN'COUNT ;CAN'COUNT0* : LDA #1 + : STA BLOCK ;BLOCK1+& : LDA #254E+0 : STA COMP ;COMP254p+5 : STX BLK'SIZE ;BLK'SIZE0+: : STX PREV'SIZE ;PREV'SIZE0+D : STX OD'COUNT ;OD'COUNT0+N : STX OD'COUNT1 ,X : STX BAD'COUNT ;BAD'COUNT0,b : STX BAD'COUNT1J, : LDA #1 ;CRC'MODE1], : STA CRC'MODE, : STX INUOUS'BAD ;INUOUS'BAD0, : STX NUMB'BLKS ;NUMB'BLKS0, : STX NUMB'BLKS1, : RTS, ;, ;-INC'OD'COUNT ; INC OD COUNT -;D-: INC OD'COUNT ;OD'COUNTP-: BNE f-: INC OD'COUNT1l-;z- JSR CH-: LDA #6 ;SET CURS 6TH COLUMN-,: STA NOWCOLUMN-@: LDA OD'COUNT1 ; OD-T: LDX OD'COUNT.h: JMP $8E32.|;H.INC'BAD'COUNT ; INC BAD COUNT N.;z.: INC BAD'COUNT ;BAD'COUNT.: BNE .: INC BAD'COUNT1.;. INC INUOUS'BAD ;INUOUS'BAD .: JSR CH/ : LDA #20 ;SET CURS 20TH COLUMN(/ : STA NOWCOLUMNN/4: LDA BAD'COUNT1 ; BADb/H: LDX BAD'COUNTr/\: JMP $8E32x/f;/''BYTE /: LDA #78 ;SET TIMEOUT 1.3 SECDS/: STA DJFY/;0 JSR 'ING ;IS THERE A IN THE BUFFER:0: BNE ; SO, SKIP IT v0: JSR PRO'CARRIER ;, CARRIER WAS LOST, BAD0: BNE 0: LDA DJFY ; STILL HAVE TIME , 0: BPL 0;0( SEC ; BAD1<: RTS1F;61P JSR MODEM'BYTE ; THE OD@1d: CLCJ1x: RTSP1;j1pRECEIVE'BLOCK'HEAD 1: JSR SET'MODEM'IO1: JSR ''BYTE ; BLOCK #1: BCS ;RECEIVE BLOCK ERR1: STA RECV'BLK1;2: JSR ''BYTE ; COMP #E2: BCS ;RECEIVE BLOCK ERRY2$: STA RECV'COMP_28;2L: LDA #0 ;INIT SUMCRC2`: STA CRC : STA CRC12~: CLC2 RTS2;2XPURGE'BUFFERS 2l JSR CLEAR'RBUFFER2: JSR ''BYTE 3: BCC 3: RTS3;N3SET'MODEM'IO ; SET'MODEM'IO [3: LDX #5k3: JSR CKOUTx3: LDX #53: JMP CHKIN3;3'RECEIVE'128B'BLOCK 38': JSR RECEIVE'BLOCK'HEAD ; BLOCK # & COMP #. INITIALIZE CHECKSUMCRC4L': BCS RECB'ERR ;RECEIVE ERR$4';14': LDX #0c4': STX SI ;INIT COUNTER INDEXp4 (: INX;#14(: STX BLK'SIZE ;BLK'SIZE1 (128BYTE)4((;4<(RB128 ;MAIN REPEATS 128 TIMES4P(: JSR ''BYTE5d(: BCS RECB'ERR5x(: LDY SII5(: STA BUFFER1,Y ;SRE IN RECEIVE BUFFERr5(: INY : STY SI ;INC INDEXx5(;5(: LDX CRC'MODE ; CRC MODE5(: BNE 5): CLC ; CALC SUM5): ADC CRC5,): STA CRC6@): JMP RB128 6T);66h) E CRC : TAX ; CALC CRCP6|): LDA CRC'TABLE'MSB,X_6): E CRC1m6): STA CRC6): LDA CRC'TABLE'LSB,X6): STA CRC16);60*RB128 6:*: CPY #128 ; 128 BYTES RECEIVED6D*: BNE RB1286X*;77*: JSR ''BYTE ;RECEIVE CHECKSUM FIRST BYTE OF CRCK7*: BCS RECB'ERR^7*: STA RECV'CRCd7*;7*: LDX CRC'MODE ; IN CRC MODE7 +: BNE 7 +: RTS74+;7\+ JSR ''BYTE ; RECEIVE SECD BYTE OF CRC7p+: BCS RECB'ERR 8+: STA RECV'CRC18+: RTS8+;-8.RECB'ERR k8.: LDA RECV'BLK ;A OD BLOCK CAN NEVER HAVE THE8/: STA RECV'COMP ;THE SAME BLOCK COMP NUMBERS8/: RTS80/;8:RECEIVE'1024B'BLOCK 9:: JSR RECEIVE'BLOCK'HEAD ; BLOCK # & COMP #. INITIALIZE CHECKSUMCRCI9:: BCS RECB'ERR ;RECEIVE ERRO9:;9;: LDA #BUFFER1 ;#$00 ;INIT COUNTER INDEX9;: STA PNT98;: LDA #BUFFER1 ;#$049B;: STA PNT19V;;9`;: LDA #2:j;: STA BLK'SIZE ;BLK'SIZE2 (1024BYTE):;;=:;RB1024 ;MAIN REPEATS 1024 TIMESP:;: JSR ''BYTEd:;: BCS RECB'ERRq:<: LDY #0:<: STA (PNT),Y ;SRE IN RECEIVE BUFFER:<<;:<: E CRC : TAX ;CALC CRC:=: LDA CRC'TABLE'MSB,X:=: E CRC1 ;=: STA CRC%;"=: LDA CRC'TABLE'LSB,X5;,=: STA CRC1;;J=;I;T=: INC PNT};^=: BNE RB1024 ; 1024 BYTES RECEIVED;|=: INC PNT1;=: LDA PNT1;=: CMP #BUFFER11024;=: BNE RB1024;=;<>: JSR ''BYTE ;RECEIVE FIRST BYTE OF CRC<0>: BCS RECB'ERR): STA RECV'CRC/;c<>: JSR ''BYTE ;RECEIVE SECD BYTE OF CRCw<>: BCS RECB'ERR< ?: STA RECV'CRC1< ?: RTS<4?;< NWRITE'128B'BLOCK <4N: LDX #2 ;SET OUTPUT FILE #2LO INC NUMB'BLKS ;AHER 128B BLOCK WRITTEN DISK(>`O: BNE >>tO: INC NUMB'BLKS1D>O;R>O JMP CHX> P;p>RWRITE'128B'RANS >R LDA BUFFER2,X>0R: JSR BSOUT>DR: INX>XR: CPX #128>lR: BNE >R: RTS>R;>UWRITE'128B'W'TRANS >V LDY BUFFER2,X+?V: JSR TRANS'RECEIVED ;IN TRANSLATI MODULE8?"V: CMP #0s?,V: BEQ ; ZERO, N'T WRITE THE BYTE?TV: JSR BSOUT?V INX?V: CPX #128?V: BNE ?V: RTS?W;?aWRITE'1024B'BLOCK @a: LDX #2 ;SET OUTPUT FILE #2@a: JSR CKOUT@a;(@ b: LDY #06@b: STY PNTJ@4b: LDA #BUFFER2Z@>b: STA PNT1`@fb;@pb: LDA TRANS'FLAG ; TRANSLATI @b: BEQ @b: JSR WRITE'1024B'W'TRANS ; WRITE DISK WITH TRANSLATI@b: JMP &Ab JSR WRITE'1024B'RANS ; WRITE DISK WITHOUT MODICATI,Ab;iAb CLC ;AHER FOUR 128B BLOCKS WRITTEN DISK}Ab: LDA NUMB'BLKSAb: ADC #4Ac: STA NUMB'BLKSA$c: BCC A8c: INC NUMB'BLKS1ALc;Ac JMP CHAc;Ac;AeWRITE'1024B'RANS Be LDA (PNT),YBe: JSR BSOUT%Be: INY1Be: BNE ABe: INC PNT1QBf: LDA PNT1jBf: CMP #BUFFER21024vB0f: BNE BDf: RTSBXf;BxiWRITE'1024B'W'TRANS Bi: STY Y'REGBi LDA (PNT),YBi: TAYBi: JSR TRANS'RECEIVEDBi: CMP #0Bi: BEQ C@j: JSR BSOUTCTj INC Y'REG/Chj: LDY Y'REG;Cj: BNE KCj: INC PNT1[Cj: LDA PNT1tCj: CMP #BUFFER21024Cj: BNE Cj: RTSCk;C0uWRITE'A'BLOCK ; WRITE'A'BLOCK CDu;Cu: JSR CH'Du: JSR 'MODEM ;PREVENT SWTLINK FROM ERRUPTINGDu;JDu: LDA PREV'SIZE ; PREV'SIZE 1WDv: CMP #1cD v: BNE D v: JSR WRITE'128B'BLOCK ; WRITE 128B BLOCKD4v: JMP D>v;D\v CMP #2 ; PREV'SIZE 2Dpv: BNE Ev: JSR WRITE'1024B'BLOCK ; WRITE 1024B BLOCK!Ev;9Ev JSR RESTART'MODEM?Ev;sEv: LDA BLK'SIZE ;PREV'SIZE BLK'SIZEEv: STA PREV'SIZEEv;E$w: CMP #1 ; SIZE 1E8w: BNE ELw: JMP '128B'BLOCK ; 128B BLOCKE`w; Fw CMP #2 ; SIZE 2,Fw: BNE ZFw: JMP '1024B'BLOCK ; 1024B BLOCK`Fw;jFw RTSpFx;FЄ'128B'BLOCK F: LDY #127 ; BYTES 127 0F LDA BUFFER1,YF : STA BUFFER2,YF : DEYF4: BPL FH: RTSG;G'1024B'BLOCK #G̈: LDY #0: CMP #2TH: BCC BAD'RECV'2 ; BACK UPTf; U: JMP BAD'RECV'1 ; COUNT AHER BAD BLOCK&U;hU. ; . PROCOL'ERR nU;U$: JMP ABT'RECV ;ALWAYS ABT BAD WITH YMODEMGU8;U`.EUj;UOD'RECEIVE ; OD'RECEIVE U;,V: LDA NUMB'BLKS1 ; NUMB'BLKS MAX'BLKSAV: CMP MAX'BLKS1gV: BCC ; ABT{V : LDA NUMB'BLKSV: CMP MAX'BLKSV: BCC V: JSR ABT'RECVV: LDA #255 ;'STATUS255 MEANS DISK FULLV: STA 'STATUSW: RTS W;=W"Ӫ JSR WRITE'A'BLOCK ;MOVED FROM BELOW^W,: JSR SET'MODEM'IO ;qW1. PROCOL'ERRW6: LDA #ACK ;5,ACK; ERR ROL LYW@: JSR BSOUT'WE.EWJ;WT: LDA #0 ;SET TIMEOUT 8.5 SECX^: STA JFY'CLOCK1,Xh: STA JFY'CLOCK22X|;ZX;;JSR WRITE'A'BLOCK ;MOVED UP`X;~XOD'RECV'1 ;X: JSR SET'MODEM'IOX: LDA SHFLAG ; OP PRESSES C ABTX: CMP #2X: BNE X: JMP ABT'RECVY&;$Y:Ԫ JSR IN' ;#5,AaYD: CMP #SOH ; (ASOH) (ASTX) (AEOT)mYX: BEQ }Yb: CMP #STXXYl: BEQ Yv: CMP #EOTY: BNE YԪ PHA ; EMBER SIGNAL Z: LDA #0 ; INOUS'BAD 0!Z: STA INUOUS'BADRZ: JSR INC'OD'COUNT ; OD'COUNTZ: INC BLOCK ; BLOCKZ: COMP ; COMPZ: PLA ; SIGNAL[: JMP RECV'A'BLOCK ; RECEIVE THE BLOCK[ ;I[Hժ JSR PRO'CARRIER ; CARRIER LOSTU[\: BEQ |[f: JMP ABT'RECV ; ABT[p;[ժ LDA JFY'CLOCK1 ; HASN'T TIMED OUT[: CMP #2[: BCC OD'RECV'1 ; BACK[;\: LDA #0 ; PREV'SIZE 01\: STA PREV'SIZEc\: JMP BAD'RECEIVE ; BAD BLOCKi\;y\RECV'NE \;\$: JSR SET'MODEM'IO\8: LDA #ACK\L: JSR BSOUT'\Q. PROCOL'ERR\V: JSR BSOUT'\[.E\`;\: LDA #0]: STA BLK'SIZE]: STA 'STATUS!];/]: JSR CHG]: JMP WRITE'A'BLOCKM];^]>ߒ''START d]H;{]R: JSR SET'MODEM'IO]\: LDA SIGNAL ;5,SIGNAL;]p: JSR BSOUT']: LDA #180 ;TIMEOUT IN 3 SECDS (MODY LINE 57510 O)^: STA DJFY^;'^START''2 -^;Q^: JSR IN' ;#5,A$^: CMP #SOH ; A SOH INUE^: BEQ START'WAS'OD^: CMP #STXX ; A STX INUE^: BEQ START'WAS'OD^$;_8: CMP #CAN ; A CAN $_B: BNE ]_L: LDX CAN'COUNT ; ALY HAD A CAN ABTi_V: BEQ _`: JMP START'WAS'BAD_j INC CAN'COUNT ; CAN'COUNT 1_t; ;`~ JSR PRO'CARRIER ; CARRIER LOST)`: BNE START'WAS'BAD ; ABT/`;a` LDA SHFLAG ; OP PRESSES C n`: CMP #2`: BEQ START'WAS'BAD ; ABT`;`: LDA DJFY ; 3 SEC TIMEOUT HASN'T OCCURED`: CMP #182a: BCC START''2 ; BACK UPa;.BYTE $4C,$6D,$0E,$2F,$C8,$E9,$8A,$ABnH.BYTE $44,$65,$06,$27,$C0,$E1,$82,$A3oR.BYTE $7D,$5C,$3F,$1E,$F9,$D8,$BB,$9A.$ $1E00B%H.FILE "VDC PRINT"Z%RVDC''SIZE $1E00c%\.OFEi%f;{%'START %.$ $1E00%.FILE "BLOADBSAVE"%'SIZE $1E00%.OFE%;%LTK'FSIZE'START % .$ $1E00& .FILE "LTK SIZE"& LTK'FSIZE'SIZE $1E00%&$ .OFE+&. ;C&LTK'DIRECT'START Q&.$ $1E00h&.FILE "LTK DIRECT"&LTK'DIRECT'SIZE $1E00&.OFE&;&; "-MODUALS" : "MODUALS" "-MODUALS" : "@MODUALS" ; MCI S 2;PARMAMETER IN Y'REGV;MCI' . "[?CDGHKNRUVW^!>): ASLH): TAYb): LDA VARNAME'TABLE,Yp): STA $FB): LDA VARNAME'TABLE1,Y): STA $FC);): LDY #0) LDA ($FB),Y): STA MCI'1,Y): BEQ * : CMP #"!" ;GLE STRING VARIABLE*: BEQ #*: INY/* : BNE 5*4;F* JSR C42'EV*: JMP BUFFk* JMP MCI'STR'Eq*;*MCI'V'EMU ; EMULATI MODE NAME*: LDA #0 ; 15*: LDX #$3818 ;JMP $3818*: LDY #$3818+: JMP JMP+;;+dMCI'V'PERIOD ; MNING,AFTERNO, EVENINGs+i: LDA #$7E : STA  ;RAM 1 WITH IO IN $D000'S+n: LDA 56331 ;CURRENT HOUR+x: BMI +: LDX #0 ;AMMNING+: BEQ PERIOD ;BRA, CMP #134 ;PM, NO5:59,: BCS 0,: LDX #8 ;AFTERNOH,: BNE PERIOD ;BRAV, LDX #18\,;k,PERIOD ,: LDA 56328 ;ING 10THS RESTARTS CLOCK,: STA 1 ; FULL RAM  1,: STX $FA, LDA MCI'PERIODS,X,: BEQ -: JSR CALLMCICHR-: INC $FA(-: LDX $FA4-": BNE >-, RTSD-6;|-^MCI'PERIODS . "MORNING" : .BYT 0 ;INDEX 0-h: . "AFTERNOON" : .BYT 0 ;INDEX 8-r: . "EVENING" : .BYT 0 ;INDEX 18-|;,.VARNAME'TABLE .WD E'LV,E'TIME,E'NA,E'CRED,E'BR`.: .WD E'LD,E'DA,E'T,$FFFF,E'LC.: .WD E'A,E',E'BBS,E'RTN,$3818,E'F.;.E'LV . "LV" : BRK.E'TIME . "INT(TM-TI/3600)" : BRK.E'NA . "NA!"/E'CRED . "PU-PD" : BRK0/ E'BR . "BR" : BRKM/E'LD . "D$(4)" : BRKb/E'DA . "DA!"/E'T .BYT "T",$80,"!"/&E'LC . "LC!"/+E'A .BYT "A",$80,"!"/0E' . "CM$(25)" : BRK/5E'BBS . "D$(9)": BRK0:E'RTN . "D$(14)": BRK$0?E'F .BYT "F",$80,"!"*0N;D0XMCI'W ;Q0b: CPY #0]0l: BEQ 0v: CPY #8 ; PAUSE 4SEC0: BCS ; SKIP0 LDA $A20: CLC0: ADC #290 CMP $A20: BNE 0: DEY0: BNE 1 RTS 1;+1MCI'UP ;CURS UP:1: LDA #145K1: JMP MULTIQ1;r1MCI'WN ;CURS WN1: LDA #171: JMP MULTI1;1LMCI'RIGHT ;CURS RIGHT1V: LDA #291`: JMP MULTI1j;2MCI'LEFT ;CURS LEFT2: LDA #157#2: JMP MULTI)2;N2xMCI'P ; MCI STRING^2: TYA : #3h2: TAY2: LDA MCI'STRING,Y2: JMP CALLMCICHR2;2MCI'M ;MARK2: RTS ;JUST SKIP IT2; 3 MCI'AT ;PUT CURS AT TAB SITI3 : TYA43 : ASL:ASL:ASL ;UE 8b3& : LDX SCRT ;RIGHT BDER OF SCREENp30 : CPX #503D : BCS ; IN 80C MODE, SKIP3X : CMP #403b : BCC ; TAB IS 40, SKIP3l : SEC3 : SBC #403 STA $FB4 ;:4 LDA $FB ; CURRENT SITI THE DESTINATIN4!: CMP NOWCOLUMNq4 !: BEQ ; JUMP NE4 !: LDA #" "4*!: JSR CALLMCICHR44!: JMP 4H! RTS4!;4'MULTI 4': STA $FD4$': STY $FE4.' LDA $FD48': JSR CALLCHR5L': $FE5V': BNE 5`': RTS$5j';d5 N;"*** : IVEN A VARIABLE NAME IN VARNAME, ***54N;"*** PRINTS ITS CONTENTS TO THE SCREEN/MODEM ***5HN;5\NSTRING 5pN;6N: JSR FINDVAR ;SEARCH VARIABLE PUT ADDRESS IN VARADDRESS6N: BCC 6N: LDA #"*"G6N: JMP CALLMCICHR ;VARIABLE FOUNDM6N;6V LDY #2 ; STRING GTH & FCFDFE6V LDA (VARPNT),Y6,V: STA $FA,Y6@V: INY6TV: CPY #56hV: BNE 6rV;7wV: CMP #0 ;STRING GTH7|V: BEQ PS7V;$7V: LDY #0X7V: STY $FB ;INITIALIZE INDEX 0^7V;7V LDA ($FD),Y ; ACTER7V: BEQ PS7V: JSR CVERT'CASE ; UPPERGFX, CVERT LOWER CASE7W: JSR CALLMCICHR ; IT&80W: INC $FB ;INCENT INDEX48DW: LDY $FBm8XW: CPY $FC ; INDEX GTH, BACKy8lW: BNE 8vWPS 8W: RTS8W;8YCVERT'CASE 8Z: BIT ; IN LOWERUPPER MODE8Z: BMI ; SKIP69[: CMP #$C0 ; UPPERCASEGFX ACTERB9[: BCC Q9"[: CMP #$DB]9,[: BCS 9@[: #$7F ; CVERT LOWER9T[ RTS9h[;9]BUFF 9]: LDY #0 ;INDEX IN BUFFER :]: LDA ($24),Y ; STARTS WITH A SPACE:^: CMP #" "=:$^: BNE ; SKIP ITG:8^: INYU:B^ STY $FE[:L^;:V^: LDA $FF ;SKIP STRING IS EMPTY:[^: BEQ :`^ LDA ($24),Y:t^: BEQ ; CHRACTER IS NULL, WE'RE NE;~^: JSR CVERT'CASE+;^: JSR CALLMCICHR ; THE `;^: INC $FE ;INCEMNT BUFFER INDEXn;^: LDY $FE;^: CPY $FF ;CHECK MAX GTH;^: BNE ; BACK ACTER;^;<^ RTS ;FINISHED ROUTINE EGERS FLOATING PO<^;?<0uC42'E ;EUATE STRINGhfv: LDA #MCI'ERR : STA $301 ; CODE IN 'COMM'=>pv;e>v: JSR CALLESTRING ;IN 'COMM'>v: STA 1B ;RAM1 & ROM>v;>v: BIT $0F ;CHECK RESSI TYPE>v: BMI ; STRING, SKIP6?v: JSR FAC2II ; NUMBER, CVERT IT II IN FBUFFERi?v: LDX #0 ; $0100 IN ($24)w?w: STX $24?w: INX;#1?w: STX $25?$w: LDX #11 ;MAX OF 11 S?8w: STX $FF?`w: BNE C42' ;BRA ; ?tw;5@w JSR $8781 ;E A STRING. A STRING FROMy@w: STA $FF ;TEMP STACK SRE STRING GTH IN $FF@w; ;STRING POED BY ($24)@yC42' @"y: STA 1A,y: PLA : STA $301 ; OLD BBS BASIC ERR ROUTINE*A@y: PLA : STA $3000ATy;DA|y: PLA : STA $3EXAy: PLA : STA $3D`AyRTSA; "-MCI CMDS" : "MCI CMDS" "-MCI CMDS" : "@MCI CMDS" 4000XMODEM'SUM 01XMODEM'CRC 0DXMODEM'1K 0WYMODEM'BAT 0jYMODEM'G 1 .DVO 9 : .G $12FE . XMODEM'SUM : PROCOL'1K 0 : PROCOL'BAT 0: PROCOL'ERR 1:.OBJ "@0:MLC.XMODEM-S".E . XMODEM'CRC!: PROCOL'1K 07: PROCOL'BAT 0M: PROCOL'ERR 1l:.OBJ "@0:MLC.XMODEMCRC-S"t.E. XMODEM'1K: PROCOL'1K 1 : PROCOL'BAT 0#: PROCOL'ERR 1&:.OBJ "@0:MLC.XMODEM1K-S"'.E(. YMODEM'BAT): PROCOL'1K 1+*: PROCOL'BAT 2A-: PROCOL'ERR 1]0:.OBJ "@0:MLC.YMODEM-S"e1.Eu2. YMODEM'G3: PROCOL'1K 14: PROCOL'BAT 27: PROCOL'ERR 0::.OBJ "@0:MLC.YMODEMG-S";.EZ;,.DVI 96.LST "COMMON.ST"@.LST "VARIABLES.ST"4J.LST "TRANSLATION.ST"HT.LST "MODEM.ST"N;|:.BYT 0 ;FIYPE LY PUNTER:.BYT 0 ;PROCOL # 4863,D%(10)128. PROCOL'BAT: JMP S' ;S IN A$. : JMP 'AS'OD ;S USED IN XMODEM .EF : JMP 'AS'BAD ;RECEIVE . USED IN SL ;^ $: JMP S'FILE .: JMP 'AS'BAD ;RECV'FILE. USED IN S 3; 8. PROCOL'BAT =: JMP S'BATCH'EOT ;S BATCH EOT YMODEM B.!E: JMP 'AS'OD ;S BATCH EOT. USED IN XMODEM!I.ED!LTRANS'FLAG BRK ; TRANSLATE FLAGk!VNUMB'BLKS .WD $0000 ; USED IN S}!`. PROCOL'1K!e: .WD 1024 ;NUMBER OF BYTES PER BLOCK X1K!j.!o: .WD 0128 ;NUMBER OF BYTES PER BLOCK 128!t.EB"~MAX'BLKS .WD $FFFF ;NUMB 1024B BLOCKS MAY S BEE SWITCH 128B|":.BYT PROCOL'BAT ;XFER TYPE FLAG: 0GLE, 2MULTI": BRK": JSR PRIMM'BBS' ;PROCOL NAME". XMODEM'SUM":. "MODEM"".E". XMODEM'CRC#:. "MODEM-"#.E#. XMODEM'1K-#:. "MODEM-1K"5#.EG#. YMODEM'BAT^#:. "MODEM-ATCH"f#.Ev#. YMODEM'G#:. "MODEM-"#.E#:.BYT 0#(: RTS#x;#;MODULE VARIABLES#;#SOH 1 ;CTRLA$STXX 2 ;CTRLB8$EOT 4 ;CTRLD]$ACK 6 ;CTRLFp$. PROCOL'ERR$CNAK 67 ;II CAP "" CRC NAK$.$CNAK 71 ;II CAP "" YMODEMG NAK$.E%NAK 21 ;CTRLU=%CAN 24 ;CTRLX (ABT)s%PAD 26 ;PADDING ACTER (CTRLZ)y%6;%@HIT'EOF $0B ;0 THERE, 0AT EOF%JLINEFEED'FLAG $5B ;10INSERT A LINEFEED&TCRC'MODE $10 ;0CHECKSUM, 0CRCW&^CAN'COUNT $2A ;NUMBER OF CANS RECEIVED IN A ROW&hBLOCK $2B ;CURRENT LOCAL BLOCK NUMBER&rCOMP $2C ;CURRENT LOCAL COMP NUMBER '|CRC $3F;$40 ;CALCULATED CRC CHECKSUM UEA'BLK'SIZE $54 ;0NE, 1128B, 21024Bu''SIZE $5A ;0NE, 1128B, 21024B'OD'COUNT $12D0;D1 ;TAL OD BLOCKS'BAD'COUNT $12D2;D3 ;TAL BAD BLOCKS(NEAR' $12D4 ;0, 1NEAR OF FILESWITCH 128B BLKSF('STATUS $200 ;0OD, 0BADx(XBUFFER1 $0400 ;BLOCK S BUFFER(bBUFFER2 $1E00 ;BLOCK BUFFER(;( INITIALIZE'VARS ( : LDX #0( : STX HIT'EOF ;HIT'EOF0-) : STX LINEFEED'FLAG ;LINEFEED'FLAG0Y) : STX CAN'COUNT ;CAN'COUNT0) : STX BLOCK ;BLOCK0)& : LDA #255)0 : STA COMP ;COMP255)5 : STX BLK'SIZE ;BLK'SIZE0 *: : STX 'SIZE ;PREV'SIZE08*D : STX OD'COUNT ;OD'COUNT0N*N : STX OD'COUNT1z*X : STX BAD'COUNT ;BAD'COUNT0*b : STX BAD'COUNT1*l : STX NEAR' ;NEAR'0* : STX CRC'MODE ;CRC'MODE0* : RTS* ;* ;++INC'OD'COUNT ; INC OD COUNT 1+;\+: INC OD'COUNT ;OD'COUNTh+: BNE ~+: INC OD'COUNT1+;+ JSR CH+: LDA #6 ;SET CURS 6TH COLUMN+,: STA NOWCOLUMN,@: LDA OD'COUNT1 ; OD,T: LDX OD'COUNT&,h: JSR $8E32,,|;Y,. PROCOL'1K ; 1K PROCOL,: LDA OD'COUNT ; OD'COUNT MAX'BLKS,: CMP MAX'BLKS,: BNE ,: LDA OD'COUNT1,: CMP MAX'BLKS1,: BNE -: LDA #1 ; SET NEAR' FLAG,-: STA NEAR'N-.E ;X- RTS^-&;-INC'BAD'COUNT ; INC BAD COUNT -;-: INC BAD'COUNT ;BAD'COUNT-: BNE -: INC BAD'COUNT1-;- JSR CH2. : LDA #20 ;SET CURS 20TH COLUMNF. : STA NOWCOLUMNl.4: LDA BAD'COUNT1 ; BAD.H: LDX BAD'COUNT.\: JMP $8E32.f;.SET'MODEM'IO ; SET'MODEM'IO .: JSR CH.: LDX #5.: JSR CKOUT/: LDX #5/: JMP CHKIN/;,/'S'128B'BLOCK 2/$';I/8': JSR SET'MODEM'IOo/L': LDA #SOH ;S SOH/`': JSR MODEM'PUTBYTE/t': LDA BLOCK ;S BLOCK #/~': JSR MODEM'PUTBYTE/': LDA COMP ;S COMP # 0': JSR MODEM'PUTBYTE0';0': LDY #0B0': STY CRC ;CRC0R0(: STY CRC10 (;;STY SI ;INIT COUNTER INDEX0((;0<(SB128 ;MAIN REPEATS 128 TIMES0x(;;LDY SI1(: LDA BUFFER1,Y ; A BYTE FROM THE S BUFFER01(: INY ;;STY SI ;INC INDEXa1(: JSR MODEM'PUTBYTE ;TRANSMIT THE BYTEg1(;1(: LDX CRC'MODE ; CRC MODE1(: BNE 1): CLC ; CALC SUM1): ADC CRC1,): STA CRC1@): JMP SB1281T);%2h) E CRC : TAX ; CALC CRC?2|): LDA CRC'TABLE'MSB,XN2): E CRC1\2): STA CRCv2): LDA CRC'TABLE'LSB,X2): STA CRC12);20*SB128 2:*: CPY #128 ; ; 128 BYTES SENT2D*: BNE SB1282X*;$3l*;;JSR CLEAR'RBUFFER ;PREVENT PATURE SIGNALS*3*;i3*: LDA CRC ;S CHECKSUM FIRST BYTE OF CRC3*: JSR MODEM'PUTBYTE3*;3*: LDX CRC'MODE ; IN CRC MODE3 +: BEQ 34+;3\+: LDA CRC1 ; S SECD BYTE OF CRC4p+: JSR MODEM'PUTBYTE4+;$4+ RTS*4+;<4:. PROCOL'1KR4:S'1024B'BLOCK X4:;o4:: JSR SET'MODEM'IO4:: LDA #STXX ;S STXX4:: JSR MODEM'PUTBYTE4:: LDA BLOCK ;S BLOCK #4:: JSR MODEM'PUTBYTE5:: LDA COMP ;S COMP #15:: JSR MODEM'PUTBYTE75:;i5;: LDA #BUFFER1 ;#$00 ;INIT COUNTER INDEXw5;: STA PNT58;: LDA #BUFFER1 ;#$045B;: STA PNT15V;;5`;: LDA #0 ;CRC05t;: STA CRC5~;: STA CRC15;;&6;SB1024 ;MAIN REPEATS 1024 TIMES36<: LDY #0l6<: LDA (PNT),Y ; BYTE FROM THE S BUFFER6(<: JSR MODEM'PUTBYTE ;TRANSMIT BYTE6<<;6<: E CRC : TAX ;CALC CRC6=: LDA CRC'TABLE'MSB,X6=: E CRC16=: STA CRC7"=: LDA CRC'TABLE'LSB,X'7,=: STA CRC1-7J=;;7T=: INC PNTu7^=: BNE SB1024 ; ; 1024 BYTES SENT7|=: INC PNT17=: LDA PNT17=: CMP #BUFFER110247=: BNE SB10247=;7=;;JSR CLEAR'RBUFFER ;PREVENT PATURE SIGNALS8>;78>: LDA CRC ;S FIRST BYTE OF CRCO80>: JSR MODEM'PUTBYTEU8X>;8>: LDA CRC1 ;S SECD BYTE OF CRC8>: JSR MODEM'PUTBYTE8 ?: RTS84?;8^B.E ; 1K PROCOL8gB;8 N'128B'BLOCK 94N: LDX #2 ;SET FILE #2&9HN: JSR CHKIN,9\N;99pN: LDX #1t9N: STX 'SIZE ;SIZEOF THIS BLOCK IS #1 (128B)9N: DEX;#09N;9N: LDA TRANS'FLAG ; TRANSLATI 9N: BEQ 9O: JSR '128B'W'TRANS ; FROM DISK WITH TRANSLATI :$O: JMP E:8O JSR '128B'RANS ; FROM DISK WITHOUT MODICATIK:BO;Y:O JSR CH:O: JMP RESTART'MODEM ;RESTART SWTLINK: P;:R'128B'RANS :R JSR BA:R: STA BUFFER2,X:0R: LDA IOSTATUS::R: BNE EOF'128B:DR: INX;XR: CPX #128;lR: BNE ;R: RTS ;R;6;U'128B'W'TRANS e;U: STX IOSTATUS ;CLEAR IO STATUS;U LDA LINEFEED'FLAG ; LINEFEED IS ING BE BUFFERED;U: BEQ ; STICK IT IN;V: LDY #0;V: STY LINEFEED'FLAG<V: BEQ < V JSR BA<V: TAYP<V: JSR TRANS'S ;IN TRANSLATI MODULE]<"V: CMP #0<,V: BEQ ; ZERO, N'T WRITE THE BYTEdZ: RTS>xZ;>a. PROCOL'1K/>a'1024B'BLOCK ^>a: LDX #2 ;SET FILE #2n>a: JSR CHKINt>a;>a: LDA #2 ;THIS BLOCK SIZE IS #2 (1024B)>b: STA 'SIZE> b;> b: LDY #0>b: STY PNT>4b: LDA #BUFFER2?>b: STA PNT1 ?fb;=?pb: LDA TRANS'FLAG ; TRANSLATI I?b: BEQ ?b: JSR '1024B'W'TRANS ; FROM DISK WITH TRANSLATI?b: JMP ?b JSR '1024B'RANS ; FROM DISK WITHOUT MODICATI?b;?c JSR CH@c: JMP RESTART'MODEM ;RESTART SWTLINK@c;*@e'1024B'RANS 8@e JSR BAJ@e: STA (PNT),Y]@e: LDA IOSTATUSq@e: BNE EOF'1024B{@e: INY@e: BNE @e: INC PNT1@f: LDA PNT1@f: CMP #BUFFER21024@0f: BNE @Df: RTS@Xf;@xi'1024B'W'TRANS !A}i: STY IOSTATUS ;CLEAR IOSTATUS1Ai: STY Y'REGqAi LDA LINEFEED'FLAG ; LINEFEED IS ING BE BUFFEREDAi: BEQ ; STICK IT INAi: LDY #0Ai: STY LINEFEED'FLAGAi: BEQ Ai JSR BA ; A BYTEBi: TAY,Bi: JSR TRANS'S ;TRANSLATE ITYBi: CMP #0 ; NULL SKIPfBi: BEQ vBi LDY Y'REGBj: STA (PNT),YBj: CMP #13 ; CRB"j: BNE B,j: LDA #10 ; SET LINEFEED FLAGC6j: STA LINEFEED'FLAGC@j LDA IOSTATUS,CJj: BNE EOF'1024B6CTj: INYFChj: STY Y'REGRCj: BNE bCj: INC PNT1rCj: LDA PNT1Cj: CMP #BUFFER21024Cj: BNE Cj: RTSCk;C`mEOF'1024B Ctm: LDA #PADCm: STA HIT'EOFCm: BNE ;BRAC(n STA (PNT),YD. PROCOL'1K ; 1K^NH: CMP #1 ; BLK'SIZE1jNR: BNE N\: JSR S'128B'BLOCK ; S 128B BLOCKNp: JMP N JSR S'1024B'BLOCK ; S 1024B BLOCKN. ; 128B,O: JSR S'128B'BLOCK ;S 128B BLOCKNO.E ;TO;O NOP;JSR 'A'BLOCK ; THE BLOCK N'T ALY HAVE ITO;O(: LDA #8 ;SET TIMEOUT 30 SECDSO<: STA DJFYOP: STA DJFY1Pd: JSR SET'MODEM'IOPx;OP''RESULT ; UP 30SEC RECVR'S RESPCE BLKUP;yP: JSR IN' ;#5,A$PȠ;P: CMP #ACK ; ACK SIGNALP: BNE ;PCE'AN'ACK Q: JSR INC'OD'COUNT ; INC OD COUNT.BYTE $4C,$6D,$0E,$2F,$C8,$E9,$8A,$ABnH.BYTE $44,$65,$06,$27,$C0,$E1,$82,$A3nR.BYTE $7D,$5C,$3F,$1E,$F9,$D8,$BB,$9An\.BYTE $75,$54,$37,$16,$F1,$D0,$B3,$92)of.BYTE $2E,$0F,$6C,$4D,$AA,$8B,$E8,$C9Sop.BYTE $26,$07,$64,$45,$A2,$83,$E0,$C1}oz.BYTE $1F,$3E,$5D,$7C,$9B,$BA,$D9,$F8o.BYTE $17,$36,$55,$74,$93,$B2,$D1,$F0o;oCRC'TABLE'MSB o.BYTE $00,$10,$20,$30,$40,$50,$60,$70p.BYTE $81,$91,$A1,$B1,$C1,$D1,$E1,$F1Ap.BYTE $12,$02,$32,$22,$52,$42,$72,$62kp.BYTE $93,$83,$B3,$A3,$D3,$C3,$F3,$E3p.BYTE $24,$34,$04,$14,$64,$74,$44,$54p.BYTE $A5,$B5,$85,$95,$E5,$F5,$C5,$D5p.BYTE $36,$26,$16,$06,$76,$66,$56,$46q.BYTE $B7,$A7,$97,$87,$F7,$E7,$D7,$C7=q.BYTE $48,$58,$68,$78,$08,$18,$28,$38gq.BYTE $C9,$D9,$E9,$F9,$89,$99,$A9,$B9q.BYTE $5A,$4A,$7A,$6A,$1A,$0A,$3A,$2Aq.BYTE $DB,$CB,$FB,$EB,$9B,$8B,$BB,$ABq.BYTE $6C,$7C,$4C,$5C,$2C,$3C,$0C,$1Cr$.BYTE $ED,$FD,$CD,$DD,$AD,$BD,$8D,$9D9r..BYTE $7E,$6E,$5E,$4E,$3E,$2E,$1E,$0Ecr8.BYTE $FF,$EF,$DF,$CF,$BF,$AF,$9F,$8FrB.BYTE $91,$81,$B1,$A1,$D1,$C1,$F1,$E1rL.BYTE $10,$00,$30,$20,$50,$40,$70,$60rV.BYTE $83,$93,$A3,$B3,$C3,$D3,$E3,$F3 s`.BYTE $02,$12,$22,$32,$42,$52,$62,$725sj.BYTE $B5,$A5,$95,$85,$F5,$E5,$D5,$C5_st.BYTE $34,$24,$14,$04,$74,$64,$54,$44s~.BYTE $A7,$B7,$87,$97,$E7,$F7,$C7,$D7s.BYTE $26,$36,$06,$16,$66,$76,$46,$56s.BYTE $D9,$C9,$F9,$E9,$99,$89,$B9,$A9t.BYTE $58,$48,$78,$68,$18,$08,$38,$281t.BYTE $CB,$DB,$EB,$FB,$8B,$9B,$AB,$BB[t.BYTE $4A,$5A,$6A,$7A,$0A,$1A,$2A,$3At.BYTE $FD,$ED,$DD,$CD,$BD,$AD,$9D,$8Dt.BYTE $7C,$6C,$5C,$4C,$3C,$2C,$1C,$0Ct.BYTE $EF,$FF,$CF,$DF,$AF,$BF,$8F,$9Fu.BYTE $6E,$7E,$4E,$5E,$2E,$3E,$0E,$1E u;Ku; "-XMODEMS":"XMODEMS""-XMODEMS":"@XMODEMS 4000 .G $12FF+.DVO 9:.DVI 9I.OBJ "@0:MLC.COMMNET-MSG"^d.LST "COMMON.ST"vn.LST "VARIABLES.ST"|;'OVERLAY $1210' =$18FEPNTR $FASTRICT80 $FD ;FLAG TRANSLATING SOFT SPACECRPREV' $FE ";B.BYT 0 ;UNINED ML FILE FLAG @ $12FFoJMP START' ; FROM .A .X CTRLNJMP START' ;.AFILE ID, .X1 TRANSLATE, .YEOM ACTERJMP START'WRITE ;.AFILE ID, .X1 TRANSLATE, .YEOM ACTER(JMP A2CNET ;CVERT A$ FROM CENTIPEDE CNET`JMP A2CENTI ;CVERT A$ FROM CNET CENTIPEDE$JMP 'A ;CVERT N II S IN A$ NULLSB;START' : PHA: JSR CKOUT: PLA: TAX: JSR CHKIN  JSR BA: CMP #"" : BEQ ALLNE'*: LDX IOSTATUS84: BNE ALLNEH>: JSR BSOUTTH: BCC ZR;m ALLNE JMP CHs ;START' : STA PREV': TAX: JSR CHKIN: LDA 'OVERLAY :STA PNTR: LDA 'OVERLAY1 :STA PNTR1; , JSR BA0 @: CMP Y'REG ; EOM ACTER, SKIP< T: BNE k h: CMP #"" ; N, INANTLY EOF NOW~ |: BEQ FINISH' : LDY PREV' ; ANY OTHER EOM, MAKE SURE FOLLOWS A CR : CPY #13 : BEQ FINISH'  STA PREV'!: LDX X'REG ; TRANSLATE FLAG SET&!: BEQ ;!: JSR CNET2CENTIH! LDY #0W!0: STY 0j!D: STA (PNTR),Yz!X: STY 15!l: INC PNTR!: BNE !: INC PNTR1!: LDA PNTR1!: CMP #$FE ; HIT : C128#$FE C64$2E": BEQ FINISH'" LDA IOSTATUS ": BEQ &" ;6" FINISH' E"4: LDA PNTRS"H: STA 'd"\: LDA PNTR1t"p: STA '+1": LDA #0": STA 0": LDY #4" STA (PNTR),Y": DEY : BPL ": STA 15": JMP CH";"START'WRITE #: STA PREV'#: TAX$#: JSR CKOUT:#: LDA 'OVERLAY1K#: STA PNTR1_#: LDY 'OVERLAYl#: LDA #0{#: STA PNTR#: STA STRICT80#(: BEQ CK ;BRA:CHECK SEE START AT (BUFFER EMPTY)#<;#P LDX #0#d: STX 0$x: LDA (PNTR),Y$: STX 15$$: CMP #"^"0$: BNE A$: LDX PREV'O$: CPX #13[$: BNE j$: LDA #""z$ LDX X'REG$: BEQ $: JSR CENTI2CNET80$ CMP #0 ; NULL, N'T WRITE$: BEQ $: STA PREV'$: JSR BSOUT$ INY %,: BNE %@: INC PNTR1'%JCK 5%T CPY 'A%h: BNE R%|: LDX PNTR1b%: CPX '+1n%: BCC t%;%: CMP #13 ;WAS LAST A CR%: BEQ %: LDA #13 ;NO, OUTPUT E%: JSR BSOUT% JMP CH%0;&X'A 0&]: LDY #9 ; SPECS A$ O SL & SPF&b: JSR 'VAR'SPECSh&l: LDA SL ; (A$)0&v: BEQ ; THE RTS&;&: LDY #0& JSR BLDA&: TAX&: LDA CNET2'TABLE,X&d: JSR BSTA&n: INY&x: CPY SL': BNE ' RTS';$'@A2CNET T'E: LDY #9 ; SPECS A$ O SL & SPj'J: JSR 'VAR'SPECS'T: LDA SL ; (A$)0'^: BEQ ; THE RTS'h;'r: LDY #0'| JSR BLDA': JSR CENTI2CNET': JSR BSTA(: INY(: CPY SL(: BNE %( RTS+(;:((#A2CENTI j(-#: LDY #9 ; SPECS A$ O SL & SP(2#: JSR 'VAR'SPECS(<#: LDA SL ; (A$)0(F#: BEQ ; THE RTS(P#;(Z#: LDY #0(d# JSR BLDA(n#: JSR CNET2CENTI)x#: JSR BSTA)#: INY%)#: CPY SL1)#: BNE ;)# RTSA)#;)'CENTI2CNET80 ;TRANSLATE 4080 MAT STRICT 80C)$': CMP #$0D ; , RESET STICT80 FLAG).': BNE )8': LDX #0)B': STX STRICT80)L': RTS)`';%*t' CMP #$8D ; SOFT , SKIP1*~': BNE D*': LDA STRICT80m*': E #1 ;GGLE FLAG*': STA STRICT80*': TAX:LDA SOFTRET,X ; SPACE HARD *': RTS*';*<( CMP #3 ; CYCLE PREV *F(: BNE +P(: THIS+Z(: LDA THIS)+d(: #7:TAX9+n(: LDA S,XC+x(: RTSI+(;t+( CMP #4 ; CYCLE +(: BNE +(: INC THIS+(: LDA THIS+(: #7:TAX+(: LDA S,X+(: RTS+(;+h)CENTI2CNET +|) TAX ,): LDA CENTI2CNET'TABLE,X,): RTS,);1,0*SOFTRET .BYT 13,32C,:*THIS .BYT 1I,D*;[,*CNET2CENTI e, +: TAX, +: LDA CNET2CENTI'TABLE,X,4+: RTS,H+;,.; CENTIPEDE CNET ,.CENTI2CNET'TABLE -..BYT $00,$00,$02,$00,$00,$05,$06,$07,$08,$09,$00,$00,$00,$0D,$00,$0F\-..BYT $00,$11,$12,$13,$14,$00,$00,$00,$00,$00,$00,$1B,$1C,$1D,$1E,$1F-..BYT $20,$21,"",$23,$24,$25,$26,$27,$28,$29,"",$2B,"",$2D,$2E,$2F-/.BYT $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,"",$3B,$3C,"",$3E,""7./.BYT $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E,$4F./.BYT $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5A,$5B,$5C,$5D,$5E,$5F.&/.BYT $60,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$CB,$CC,$CD,$CE,$CF/0/.BYT $D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,$D8,$D9,$DA,$7B,$7C,$7D,$7E,$7F[/:/.BYT $00,$81,$82,$00,"",$00,$00,$00,$00,$00,$00,$00,$00,$0D,$8E,$8F/D/.BYT $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9A,$9B,$9C,$9D,$9E,$9F/N/.BYT $20,$A1,$A2,$A3,$A4,$A5,$A6,$A7,$A8,$A9,$AA,$AB,$AC,$AD,$AE,$AF60X/.BYT $B0,$B1,$B2,$B3,$B4,$B5,$B6,$B7,$B8,$B9,$BA,$BB,$BC,$BD,$BE,$BF0b/.BYT $60,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$CB,$CC,$CD,$CE,$CF0l/.BYT $D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,$D8,$D9,$DA,$DB,$DC,$DD,$DE,$DF1v/.BYT $A0,$A1,$A2,$A3,$A4,$A5,$A6,$A7,$A8,$A9,$AA,$AB,$AC,$AD,$AE,$AFZ1/.BYT $B0,$B1,$B2,$B3,$B4,$B5,$B6,$B7,$B8,$B9,$BA,$BB,$BC,$BD,$BE,$7Ez12; CNET CENTIPEDE 12CNET2CENTI'TABLE 12.BYT $00,$00,$02,$00,$00,$05,$06,$07,$08,$09,$00,$00,$00,$0D,$00,$0F$22.BYT $00,$11,$12,$13,$14,$00,$00,$00,$00,$00,$00,$1B,$1C,$1D,$1E,$1Fm22.BYT $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2A,$2B,$2C,$2D,$2E,$2F22.BYT $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3A,$3B,$3C,$3D,$3E,$3F22.BYT $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E,$4FH33.BYT $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5A,$5B,$5C,$5D,$5E,$5F33.BYT $60,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$CB,$CC,$CD,$CE,$CF33.BYT $D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,$D8,$D9,$DA,$7B,$7C,$7D,$7E,$7F#4"3.BYT $00,$81,$82,$00,"?",",",":",034,"*","?","=",$0D,"^",$8D,$8E,$8Fl4,3.BYT $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9A,$9B,$9C,$9D,$9E,$9F463.BYT $20,$A1,$A2,$A3,$A4,$A5,$A6,$A7,$A8,$A9,$AA,$AB,$AC,$AD,$AE,$AF4@3.BYT $B0,$B1,$B2,$B3,$B4,$B5,$B6,$B7,$B8,$B9,$BA,$BB,$BC,$BD,$BE,$BFG5J3.BYT $60,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$CB,$CC,$CD,$CE,$CF5T3.BYT $D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,$D8,$D9,$DA,$DB,$DC,$DD,$DE,$DF5^3.BYT $A0,$A1,$A2,$A3,$A4,$A5,$A6,$A7,$A8,$A9,$AA,$AB,$AC,$AD,$AE,$AF"6h3.BYT $B0,$B1,$B2,$B3,$B4,$B5,$B6,$B7,$B8,$B9,$BA,$BB,$BC,$BD,$BE,$7EP66; CNET CENTIPEDE WITH  II e66CNET2'TABLE 66.BYT $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0066.BYT $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00@76.BYT $20,$21,$00,$23,$24,$25,$26,$27,$28,$29,$00,$2B,$00,$2D,$2E,$2F76.BYT $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$00,$3B,$3C,$00,$3E,$0076.BYT $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E,$4F86.BYT $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5A,$5B,$00,$5D,$5E,$5Fd86.BYT $60,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$CB,$CC,$CD,$CE,$CF87.BYT $D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,$D8,$D9,$DA,$00,$00,$00,$00,$008 7.BYT $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,"^",$00,$00,$00?97.BYT $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0097.BYT $20,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$009(7.BYT $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00:27.BYT $60,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$CB,$CC,$CD,$CE,$CFc:<7.BYT $D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,$D8,$D9,$DA,$00,$00,$00,$00,$00:F7.BYT $20,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00:P7.BYT $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$006;; "-COMMNET":"COMMNET""-COMMNET":"@COMMNET"  4000.G $12FE+.DVI 9:.DVO 9F#.OBJ "@0:MLC.YMODEM-R"[(.LST "COMMON.ST"o2.LST "MODEM.ST"<.LST "VARIABLES.ST"F.LST "TRANSLATION.ST"[PROCOL'1K 1 ;COMPILER FLAG S 1K BLOCKS1\PROCOL'YMO 2 ;COMPILER FLAG YMODEM2 S d;F:.BYT 0 ;FIYPE LY PUNTERw:.BYT 0 ;PROCOL # 4863,D%(10): JMP 'AS'BAD ;S . USED IN RECEIVE;. PROCOL'YMO : JMP RECV' ;NAME IN TX$.: JMP 'AS'OD ;NO $.E );:.: JMP 'AS'BAD ;S'FILE. USED IN RECEIVEN8: JMP RECV'FILEB: JMP 'AS'BAD ;S BATCH EOT. USED IN RECEIVELTRANS'FLAG BRK ; TRANSLATI FLAGVNUMB'BLKS .WD $0000 ;NUMBER OF BLOCKS (OF BELOW BYTES) TRANSMITTED LAST`. PROCOL'1KFe: .WD 1024 ;NUMBER OF BYTES PER 1K BLOCKMj.o: .WD 0128 ;NUMBER OF BYTES PER 128B BLOCKt.E~MAX'BLKS .WD $FFFF ;MAX # OF BLOCKS MAY RECEIVE:.BYT PROCOL'YMO ;XFER TYPE FLAG: 0GLE, 2MULTI : BRK0 : JSR PRIMM'BBS' ;PROCOL NAMEG :. "MODEM" : BRKQ : RTSW <;] x;s ;MODULE VARIABLESy ; SOH 1 ;CTRLA STXX 2 ;CTRLB EOT 4 ;CTRLD !ACK 6 ;CTRLFA!CNAK 67 ;II CAP "" CRC NAKf!NAK 21 ;CTRLU!CAN 24 ;CTRLX (ABT)!PAD 26 ;PADDING ACTER (CTRLZ)!6;!@RETRIES $0B ;COUNT RETRIES;"JSIGNAL $5B ;SET CNAK NAK FIRST BLOCKn"TCRC'MODE $10 ;0CHECKSUM, 0CRC"^CAN'COUNT $2A ;NUMBER OF CANS RECEIVED IN A ROW"hBLOCK $2B ;CURRENT LOCAL BLOCK NUMBER$#rCOMP $2C ;CURRENT LOCAL COMP NUMBERb#|CRC $3F;$40 ;CALCULATED CRC CHECKSUM UE#BLK'SIZE $54 ;0NE, 1128B, 21024B#PREV'SIZE $5A ;0NE, 1128B, 21024B#OD'COUNT $12D0;D1 ;TAL OD BLOCKS/$BAD'COUNT $12D2;D3 ;TAL BAD BLOCKSp$INUOUS'BAD $12D4 ;COUNT NUMBER OF BAD BLOCKS IN A ROW$RECV'BLK $C5 ;RECEIVED BLOCK NUMBER$RECV'COMP $5F ;RECEIVED COMP NUMBER%RECV'CRC $5D;$5E ;RECEIVED CRC CHECKSUM UEB%'STATUS $200 ;0OD, 0BADw%XBUFFER1 $0400 ;BLOCK RECEIVE BUFFER%bBUFFER2 $1E00 ;BLOCK WRITE BUFFER%;% INITIALIZE'VARS % : LDX #0% . PROCOL'1K!& : LDA #8 ;RETRIES8 XMODEM 1K(& .`& : LDA #4 ;RETRIES4 XMODEM CRCh& .Ez& : STA RETRIES& : LDA #CNAK& : STA SIGNAL ;SIGNALCNAK& : STX CAN'COUNT ;CAN'COUNT0& : LDA #1' : STA BLOCK ;BLOCK1&'& : LDA #254O'0 : STA COMP ;COMP254z'5 : STX BLK'SIZE ;BLK'SIZE0': : STX PREV'SIZE ;PREV'SIZE0'D : STX OD'COUNT ;OD'COUNT0'N : STX OD'COUNT1(X : STX BAD'COUNT ;BAD'COUNT0)(b : STX BAD'COUNT1T( : LDA #1 ;CRC'MODE1g( : STA CRC'MODE( : STX INUOUS'BAD ;INUOUS'BAD0( : STX NUMB'BLKS ;NUMB'BLKS0( : STX NUMB'BLKS1( : RTS( ;( ;)INC'OD'COUNT ; INC OD COUNT #);N): INC OD'COUNT ;OD'COUNTZ): BNE p): INC OD'COUNT1v);) JSR CH): LDA #6 ;SET CURS 6TH COLUMN),: STA NOWCOLUMN)@: LDA OD'COUNT1 ; OD*T: LDX OD'COUNT*h: JMP $8E32*|;R*INC'BAD'COUNT ; INC BAD COUNT X*;*: INC BAD'COUNT ;BAD'COUNT*: BNE *: INC BAD'COUNT1*;* INC INUOUS'BAD ;INUOUS'BAD *: JSR CH+ : LDA #20 ;SET CURS 20TH COLUMN2+ : STA NOWCOLUMNX+4: LDA BAD'COUNT1 ; BADl+H: LDX BAD'COUNT|+\: JMP $8E32+f;+''BYTE +: LDA #78 ;SET TIMEOUT 1.3 SECDS+: STA DJFY+;, JSR 'ING ;IS THERE A IN THE BUFFERD,: BNE ; SO, SKIP IT ,: JSR PRO'CARRIER ;, CARRIER WAS LOST, BAD,: BNE ,: LDA DJFY ; STILL HAVE TIME , ,: BPL ,;-( SEC ; BAD -<: RTS-F;@-P JSR MODEM'BYTE ; THE ODJ-d: CLCT-x: RTSZ-;t-pRECEIVE'BLOCK'HEAD -: JSR SET'MODEM'IO-: JSR ''BYTE ; BLOCK #-: BCS ;RECEIVE BLOCK ERR-: STA RECV'BLK-;.: JSR ''BYTE ; COMP #O.: BCS ;RECEIVE BLOCK ERRc.$: STA RECV'COMPi.8;.L: LDA #0 ;INIT SUMCRC.`: STA CRC : STA CRC1.~: CLC. RTS.;.XPURGE'BUFFERS .l JSR CLEAR'RBUFFER /: JSR ''BYTE/: BCC /: RTS%/;X/SET'MODEM'IO ; SET'MODEM'IO e/: LDX #5u/: JSR CKOUT/: LDX #5/: JMP CHKIN/;/'RECEIVE'128B'BLOCK /$':: LDA #13:JSR $C00C:LDA #34:JSR $C00C(08': JSR RECEIVE'BLOCK'HEAD ; BLOCK # & COMP #. INITIALIZE CHECKSUMCRCS0L': BCS RECB'ERR ;RECEIVE ERRY0';f0': LDX #00': STX SI ;INIT COUNTER INDEX0 (: INX;#10(: STX BLK'SIZE ;BLK'SIZE1 (128BYTE)0((;1<(RB128 ;MAIN REPEATS 128 TIMES'1P(: JSR ''BYTE;1d(: BCS RECB'ERRH1x(: LDY SI~1(: STA BUFFER1,Y ;SRE IN RECEIVE BUFFER1(: INY : STY SI ;INC INDEX1(:: PHA:JSR $C00C:PLA1(;1(: LDX CRC'MODE ; CRC MODE1(: BNE (2): CLC ; CALC SUM62): ADC CRCD2,): STA CRCU2@): JMP RB128[2T);2h) E CRC : TAX ; CALC CRC2|): LDA CRC'TABLE'MSB,X2): E CRC12): STA CRC2): LDA CRC'TABLE'LSB,X2): STA CRC12);20*RB128 /3:*: CPY #128 ; 128 BYTES RECEIVED@3D*: BNE RB128F3X*;_3l*:: LDA #13:JSR $C00C3*: JSR ''BYTE ;RECEIVE CHECKSUM FIRST BYTE OF CRC3*: BCS RECB'ERR3*: STA RECV'CRC3*;3*: LDX CRC'MODE ; IN CRC MODE4 +: BNE 4 +: RTS44+;J4\+ JSR ''BYTE ; RECEIVE SECD BYTE OF CRC^4p+: BCS RECB'ERRs4+: STA RECV'CRC1}4+: RTS4+;4.RECB'ERR 4.: LDA RECV'BLK ;A OD BLOCK CAN NEVER HAVE THE5/: STA RECV'COMP ;THE SAME BLOCK COMP NUMBERS5/: RTS50/;:5:RECEIVE'1024B'BLOCK 5:: JSR RECEIVE'BLOCK'HEAD ; BLOCK # & COMP #. INITIALIZE CHECKSUMCRC5:: BCS RECB'ERR ;RECEIVE ERR5:;5;: LDA #BUFFER1 ;#$00 ;INIT COUNTER INDEX5;: STA PNT68;: LDA #BUFFER1 ;#$04 6B;: STA PNT1&6V;;36`;: LDA #2h6j;: STA BLK'SIZE ;BLK'SIZE2 (1024BYTE)n6;;6;RB1024 ;MAIN REPEATS 1024 TIMES6;: JSR ''BYTE6;: BCS RECB'ERR6<: LDY #07<: STA (PNT),Y ;SRE IN RECEIVE BUFFER7<<;;7<: E CRC : TAX ;CALC CRCU7=: LDA CRC'TABLE'MSB,Xd7=: E CRC1r7=: STA CRC7"=: LDA CRC'TABLE'LSB,X7,=: STA CRC17J=;7T=: INC PNT7^=: BNE RB1024 ; 1024 BYTES RECEIVED7|=: INC PNT18=: LDA PNT18=: CMP #BUFFER11024/8=: BNE RB102458=;i8>: JSR ''BYTE ;RECEIVE FIRST BYTE OF CRC}80>: BCS RECB'ERR8D>: STA RECV'CRC8X>;8>: JSR ''BYTE ;RECEIVE SECD BYTE OF CRC8>: BCS RECB'ERR8 ?: STA RECV'CRC18 ?: RTS94?;9 NWRITE'128B'BLOCK O94N: LDX #2 ;SET OUTPUT FILE #2_9HN: JSR CKOUTe9\N;r9N: LDX #0x9N;9N: LDA TRANS'FLAG ; TRANSLATI 9N: BEQ 9O: JSR WRITE'128B'W'TRANS ; WRITE DISK WITH TRANSLATI9$O: JMP >:8O JSR WRITE'128B'RANS ; WRITE DISK WITHOUT MODICATID:BO;:LO INC NUMB'BLKS ;AHER 128B BLOCK WRITTEN DISK:`O: BNE :tO: INC NUMB'BLKS1:O;:O JMP CH: P;:RWRITE'128B'RANS :R LDA BUFFER2,X:0R: JSR BSOUT;DR: INX;XR: CPX #128 ;lR: BNE *;R: RTS0;R;J;UWRITE'128B'W'TRANS ^;V LDY BUFFER2,X;V: JSR TRANS'RECEIVED ;IN TRANSLATI MODULE;"V: CMP #0;,V: BEQ ; ZERO, N'T WRITE THE BYTE;TV: JSR BSOUT;V INXb: STA PNT1c: STA NUMB'BLKS>$c: BCC '>8c: INC NUMB'BLKS1->Lc;;>c JMP CHA>c;G>c;`>eWRITE'1024B'RANS r>e LDA (PNT),Y>e: JSR BSOUT>e: INY>e: BNE >e: INC PNT1>f: LDA PNT1>f: CMP #BUFFER21024>0f: BNE >Df: RTS>Xf;?xiWRITE'1024B'W'TRANS ?i: STY Y'REG*?i LDA (PNT),Y4?i: TAYM?i: JSR TRANS'RECEIVEDZ?i: CMP #0f?i: BEQ v?@j: JSR BSOUT?Tj INC Y'REG?hj: LDY Y'REG?j: BNE ?j: INC PNT1?j: LDA PNT1?j: CMP #BUFFER21024?j: BNE ?j: RTS?k;*@0uWRITE'A'BLOCK ; WRITE'A'BLOCK 0@Du;?@u: JSR CH'|@u: JSR 'MODEM ;PREVENT SWTLINK FROM ERRUPTING@u;@u: LDA PREV'SIZE ; PREV'SIZE 1@v: CMP #1@ v: BNE @ v: JSR WRITE'128B'BLOCK ; WRITE 128B BLOCK A4v: JMP A>v;@A\v CMP #2 ; PREV'SIZE 2LApv: BNE Av: JSR WRITE'1024B'BLOCK ; WRITE 1024B BLOCKAv;Av JSR RESTART'MODEMAv;Av: LDA BLK'SIZE ;PREV'SIZE BLK'SIZEAv: STA PREV'SIZEAv;B$w: CMP #1 ; SIZE 1*B8w: BNE WBLw: JMP '128B'BLOCK ; 128B BLOCK]B`w;Bw CMP #2 ; SIZE 2Bw: BNE Bw: JMP '1024B'BLOCK ; 1024B BLOCKBw;Bw RTSBx;BЄ'128B'BLOCK C: LDY #127 ; BYTES 127 0.C LDA BUFFER1,YBC : STA BUFFER2,YLC : DEYXC4: BPL bCH: RTShC;}C'1024B'BLOCK C̈: LDY #0C LDA BUFFER1$000,YC: STA BUFFER2$000,YC: LDA BUFFER1$100,YC: STA BUFFER2$100,YD: LDA BUFFER1$200,Y D: STA BUFFER2$200,Y9D: LDA BUFFER1$300,YRD&: STA BUFFER2$300,Y\D: INYhD: BNE rD: RTSxD;DPRECV'FILE ; ENTRY PO RECEIVE FILE Dd;Dx: JSR INITIALIZE'VARSD: JSR PURGE'BUFFERSD;ESTART'RECV'1 E;CE: JSR ''START ;DETERMINE CRC FIRST SOH STXE,: BCC RECV'A'BLOCK ; CARRY CLEAR, THE FIRST BLOCKE@; . ; FALL THROUGH ABTEf; .E8ABT'RECV ; ABT FILE RECEIVE EL; F`: LDA #127Ft: STA DJFY,Fǫ LDA DJFY8F: BPL >F;UF: JSR SET'MODEM'IObF: LDX #8F(ȫ LDA #CAN ;S 8 CANSF<: JSR BSOUT'FP: DEXFd: BNE Fx;F'AS'BAD F: LDA #1 ;'STATUS1G:.BYT SKIP'WD G;G'AS'OD (G: LDA #0.G;AG: STA 'STATUSXG": JSR SET'MODEM'IOfG,: JMP CHlG;G RECV'A'BLOCK G4;G: CMP #EOT ; A EOT FILE TRANSFER COMPEG: BNE G: JMP RECV'NEG;H˪ CMP #SOH ; A SOH H: BNE VH: JSR RECEIVE'128B'BLOCK ; RECEIVE 128B BLOCKcH: JMP iH;H˪ JSR RECEIVE'1024B'BLOCK ; RECEIVE 1024B BLOCK (WAS STX)H;HL̪ LDA BLOCK ; BLOCK RECV'BLOCKHV: CMP RECV'BLK)I`: BNE BAD'RECEIVE ; BAD'RECEIVE/It;bI: LDA COMP ; COMP RECV'COMPvI: CMP RECV'COMPI: BNE BAD'RECEIVE ; BAD'RECEIVEI;I: LDA CRC ; CRC RECV'CRCI: CMP RECV'CRC"J: BNE BAD'RECEIVE ; BAD'RECEIVE2J: LDA CRC1GJ: CMP RECV'CRC1]J: BNE BAD'RECEIVEJ: JMP OD'RECEIVE ; OD'RECEIVEJ ;JBAD'RECEIVE ; BAD'RECEIVE J;J2: JSR PURGE'BUFFERSJF:KP: LDA #0 ;CAN'COUNT 0)KZ: STA CAN'COUNT/Kn;XKx: LDA #1 ; BLOCK1hK: CMP BLOCKK: BNE ; RETRIES1K: STA RETRIESK: LDA #CNAK ; SIGNALCNAKK: STA SIGNAL'L: JSR INC'BAD'COUNT ; BAD'COUNT: INUOUSOL: JMP START'RECV'1 ; PUL;uLBAD'RECV'1 ;Lͪ LDA INUOUS'BAD ; BAD BLOCKS IN A ROW 9L: CMP #10L: BCC L: JMP ABT'RECV ; ABTL; M"Ϊ JSR SET'MODEM'IO0M,: LDA #NAK ;5,NAK;AM6: JSR BSOUT'yMJ: LDA #0 ;SET TIMEOUT 8.5 SECDSMT: STA JFY'CLOCK1M^: STA JFY'CLOCK2Mh;M|: JSR INC'BAD'COUNT ;BAD'COUNT: INUOUSM: JSR SET'MODEM'ION;NBAD'RECV'2 ;CN: JSR IN' ; #5,AqN: CMP #CAN ; A CAN ~N: BNE N: LDX CAN'COUNT ; ALY HAD A CAN ABTN: BEQ N: JMP ABT'RECVOϪ INC CAN'COUNT ; CAN'COUNT 1*O; ;\O:Ϫ LDX SHFLAG ; OP PRESSES C iOD: CPX #2uON: BNE OX: JMP ABT'RECV ; ABTOl;OϪ CMP #SOH ; (ASOH) (ASTX)O: BNE O: CMP #STXXO: BNE 2P: JMP RECV'A'BLOCK ; RECEIVE THE BLOCK8P;ePϪ JSR PRO'CARRIER ; CARRIER LOSTqP: BEQ P: JMP ABT'RECV ; ABTP;P4Ъ LDA JFY'CLOCK1 ; TIMEOUT OF 8.5 SEC UPP>: CMP #2 QH: BCC BAD'RECV'2 ; BACK UPQf;IQ: JMP BAD'RECV'1 ; COUNT AHER BAD BLOCKOQ;UQ;QOD'RECEIVE ; OD'RECEIVE Q;Q: LDA NUMB'BLKS1 ; NUMB'BLKS MAX'BLKSQ: CMP MAX'BLKS1Q: BCC ; ABTR : LDA NUMB'BLKS#R: CMP MAX'BLKS/R: BCC CR: JSR ABT'RECVR: LDA #255 ;'STATUS255 MEANS DISK FULLR: STA 'STATUSR: RTSR;R"Ӫ JSR WRITE'A'BLOCK ;MOVED FROM BELOWR,: JSR SET'MODEM'IO ;S6: LDA #ACK ;5,ACK;+S@: JSR BSOUT'1SJ;fST: LDA #0 ;SET TIMEOUT 8.5 SEC}S^: STA JFY'CLOCK1Sh: STA JFY'CLOCK2S|;S;;JSR WRITE'A'BLOCK ;MOVED UPS;SOD'RECV'1 ;S: JSR SET'MODEM'IO6T: LDA SHFLAG ; OP PRESSES C ABTCT: CMP #2OT: BNE cT: JMP ABT'RECViT&;T:Ԫ JSR IN' ;#5,ATD: CMP #SOH ; (ASOH) (ASTX) (AEOT)TX: BEQ Tb: CMP #STXXTl: BEQ Uv: CMP #EOT U: BNE >UԪ PHA ; EMBER SIGNALsU: LDA #0 ; INOUS'BAD 0U: STA INUOUS'BADU: JSR INC'OD'COUNT ; OD'COUNTU: INC BLOCK ; BLOCKV: COMP ; COMPBV: PLA ; SIGNAL~V: JMP RECV'A'BLOCK ; RECEIVE THE BLOCKV ;VHժ JSR PRO'CARRIER ; CARRIER LOSTV\: BEQ Vf: JMP ABT'RECV ; ABTVp;Wժ LDA JFY'CLOCK1 ; HASN'T TIMED OUT(W: CMP #2NW: BCC OD'RECV'1 ; BACKTW;W: LDA #0 ; PREV'SIZE 0W: STA PREV'SIZEW: JMP BAD'RECEIVE ; BAD BLOCKW;WRECV'NE W;W$: JSR SET'MODEM'IO X8: LDA #ACKXL: JSR BSOUT'/XV: JSR BSOUT'5X`;BX: LDA #0UX: STA BLK'SIZEhX: STA 'STATUSnX;|X: JSR CHX: JMP WRITE'A'BLOCKX;X>ߒ''START XH;XR: JSR SET'MODEM'IOX\: LDA SIGNAL ;5,SIGNAL;Yp: JSR BSOUT'6Y: LDA #180 ;TIMEOUT IN 3 SECDSFY: STA DJFYLY;wY:: LDA #13:JSR $C00C:LDA #34:JSR $C00CYSTART''2 Y;Y: JSR IN' ;#5,A$Y: CMP #SOH ; A SOH INUEY: BEQ START'WAS'OD-Z: CMP #STXX ; A STX INUEEZ: BEQ START'WAS'ODKZ$;yZ8: CMP #CAN ; A CAN ZB: BNE ZL: LDX CAN'COUNT ; ALY HAD A CAN ABTZV: BEQ Z`: JMP START'WAS'BAD[j INC CAN'COUNT ; CAN'COUNT 16[t; ;c[~ JSR PRO'CARRIER ; CARRIER LOST[: BNE START'WAS'BAD ; ABT[;[ LDA SHFLAG ; OP PRESSES C [: CMP #2[: BEQ START'WAS'BAD ; ABT[;;\: LDA DJFY ; 3 SEC TIMEOUT HASN'T OCCUREDJ\: CMP #182q\: BCC START''2 ; BACK UPw\;\: RETRIES ;RETRIES\: BNE ''START ; RETRIES 0 BACK UP P\(;\*. PROCOL'1K\-.$]2: LDA #NAK ; SIGNAL NAKL]<: CMP SIGNAL ; ABTd]F: BEQ START'WAS'BADj]P;]d: STA SIGNAL ; SIGNALNAK]x: LDA #4 ; RETRIES4]: STA RETRIES ^: LDA #0 ; CRC'MODE0^: STA CRC'MODED^: JMP ''START ; PL^.ER^;g^START'WAS'BAD q^: SEC{^: RTS^;^START'WAS'OD ^: CLC^: RTS^0;^W;^w. PROCOL'YMO^xRECV' ; ENTRY PO RECEIVE ^;_: JSR INITIALIZE'VARS/_: JSR PURGE'BUFFERS5_;h_: JSR ''START ;S CNAK NAK, SOH_:: PHP:PHA:JSR $C00C:PLA:PLP_: BCC ;JUMP ALL OKAY_: JMP ABT'RECV_;_@ CMP #SOH ; A SOH`J: BNE =`T: JSR RECEIVE'128B'BLOCK ; RECEIVE 128B BLOCKJ`h: JMP P`|;` JSR RECEIVE'1024B'BLOCK ; RECEIVE 1024B BLOCK (WAS STX)`;` LDA #0 ; RECV'BLOCK 0`: CMP RECV'BLKa: BNE BAD' ; BAD'a;9a: LDA #$FF ; RECV'COMP 255Ma: CMP RECV'COMPsa: BNE BAD' ; BAD'ya&;aD: LDA CRC ; CRC RECV'CRCaX: CMP RECV'CRCab: BNE BAD' ; BAD'al: LDA CRC1bv: CMP RECV'CRC1b: BEQ OD'b;+bBAD' Zb: LDX #0 ;ZERO THE FIAMElb: STX BUFFER1b: INX ;LDX #1 FALL SKIP WDb :.BYT SKIP'WD ;SO THAT 1 IS SRED IN 'STATUSb ; .b4OD' cH: LDX #0c\: STX 'STATUScf;Rcp: LDY #2 ; SPECS SRING O TX$hc: JSR 'VAR'SPECSnc;c: LDY #0 ; FIAME O TX$c LDA BUFFER1,Yc: BEQ c: JSR BSTAc: INYc: BNE c;c STY SId: LDA #ACKd$: JSR MODEM'PUTBYTE*d8: JMP CH2d^.E8d_;KdHCHECK'PANEL od\: LDA $D4 ; LF PRESSED}dp: CMP #75d: BEQ d: RTSd;d JSR $2603 ;PANEL SWITCHd: LDA #0d: STA $D0 ;CLEAR BOARD BUFFERd: RTSe;Ge.BUF 1 ;ADJUST THIS BEE RELEASE PUT TABLES IN PAGES|e0;CRC TABLES HILO CRC EACH BYTE (0 THRU 255)e:;eDCRC'TABLE'LSB eN.BYTE $00,$21,$42,$63,$84,$A5,$C6,$E7eX.BYTE $08,$29,$4A,$6B,$8C,$AD,$CE,$EFfb.BYTE $31,$10,$73,$52,$B5,$94,$F7,$D6@fl.BYTE $39,$18,$7B,$5A,$BD,$9C,$FF,$DEjfv.BYTE $62,$43,$20,$01,$E6,$C7,$A4,$85f.BYTE $6A,$4B,$28,$09,$EE,$CF,$AC,$8Df.BYTE $53,$72,$11,$30,$D7,$F6,$95,$B4f.BYTE $5B,$7A,$19,$38,$DF,$FE,$9D,$BCg.BYTE $C4,$E5,$86,$A7,$40,$61,$02,$23.BYTE $4C,$6D,$0E,$2F,$C8,$E9,$8A,$ABiH.BYTE $44,$65,$06,$27,$C0,$E1,$82,$A3jR.BYTE $7D,$5C,$3F,$1E,$F9,$D8,$BB,$9A0j\.BYTE $75,$54,$37,$16,$F1,$D0,$B3,$92Zjf.BYTE $2E,$0F,$6C,$4D,$AA,$8B,$E8,$C9jp.BYTE $26,$07,$64,$45,$A2,$83,$E0,$C1jz.BYTE $1F,$3E,$5D,$7C,$9B,$BA,$D9,$F8j.BYTE $17,$36,$55,$74,$93,$B2,$D1,$F0j;jCRC'TABLE'MSB k.BYTE $00,$10,$20,$30,$40,$50,$60,$70Hk.BYTE $81,$91,$A1,$B1,$C1,$D1,$E1,$F1rk.BYTE $12,$02,$32,$22,$52,$42,$72,$62k.BYTE $93,$83,$B3,$A3,$D3,$C3,$F3,$E3k.BYTE $24,$34,$04,$14,$64,$74,$44,$54k.BYTE $A5,$B5,$85,$95,$E5,$F5,$C5,$D5l.BYTE $36,$26,$16,$06,$76,$66,$56,$46Dl.BYTE $B7,$A7,$97,$87,$F7,$E7,$D7,$C7nl.BYTE $48,$58,$68,$78,$08,$18,$28,$38l.BYTE $C9,$D9,$E9,$F9,$89,$99,$A9,$B9l.BYTE $5A,$4A,$7A,$6A,$1A,$0A,$3A,$2Al.BYTE $DB,$CB,$FB,$EB,$9B,$8B,$BB,$ABm.BYTE $6C,$7C,$4C,$5C,$2C,$3C,$0C,$1C@m$.BYTE $ED,$FD,$CD,$DD,$AD,$BD,$8D,$9Djm..BYTE $7E,$6E,$5E,$4E,$3E,$2E,$1E,$0Em8.BYTE $FF,$EF,$DF,$CF,$BF,$AF,$9F,$8FmB.BYTE $91,$81,$B1,$A1,$D1,$C1,$F1,$E1mL.BYTE $10,$00,$30,$20,$50,$40,$70,$60nV.BYTE $83,$93,$A3,$B3,$C3,$D3,$E3,$F3MAX'BLKS .WD $FFFF ;MAX # BLOCKS MAY RECEIVE PREVENT FULL DISK LOCKUP"H.BYT MULTI ;TRANS TYPE: 0GLE LY, 2MULTI LY"\BRK#JSR PRIMM'BBS' ;S PROCOL NAME#. MULTI%#:. "ULTI-"-#.E=#. "UNTER"E#BRKM#RTSS#;`#CODES m#$. "GOO"z#.. "BAD"#8. "ACK"#B. "S/B"#L. "SYN"#V;#`; ACCEPT ACTERS CHECK CODES#j;#tACCEPT #~: STA BITPAT#: LDA #0$: STA CODEBUF%$: STA CODEBUF19$: STA CODEBUF2D$CD1 Q$: LDA #0b$: STA TIMER1u$: STA TIMER11$CD2 $: JSR $: JSR NUM$: LDA STAT$: BNE CD3$ : LDA CODEBUF1$: STA CODEBUF$: LDA CODEBUF2%(: STA CODEBUF1%2: LDA LASTCH+%<: STA CODEBUF28%F: LDA #0I%P: STA BITCNTV%Z: LDA #1g%d: STA BITPNTr%nCD4 %x: LDA BITPAT%: BIT BITPNT%: BEQ CD5%: LDY BITCNT%: LDX #0%CD6 %: LDA CODEBUF,X%: CMP CODES,Y%: BNE CD5 &: INY&: INX &: CPX #3.&: BNE CD6<&: JMP CD7B&;M&CD5 ^&: ASL BITPNTo&": LDA BITCNTy&,: CLC&6: ADC #3&@: STA BITCNT&J: CMP #15&T: BNE CD4&^: JMP CD1&h;&rCD7 &|: LDA #255&: STA TIMER1': STA TIMER11': JMP CD2';$'CD3 5': INC TIMER1C': BNE CD9V': INC TIMER11a'CD9 t': LDA TIMER11': A TIMER1': BEQ CD8 ;OD': LDA TIMER1': CMP #7': LDA TIMER11': CMP #40 ;WAS 20 AT 1MHZ(&: BCC CD2(+: JSR COUNT'BAD'BLOCKS7(0: LDA #1 ;BADF(:: STA STATW(D: JMP DELAY](N;h(XCD8 u(b: LDA #0(g: STA BAD'COUNT(l: STA STAT(v: RTS(;(; NUM SCODE(;(NUM (: STY Y'REG ;TYA:PHA(: JSR 'ING): BEQ 1): JSR MODEM'BYTE/): STA LASTCH<): LDY #0K) : STY STATZ)>: JMP RTSd)H1 q)R: LDA #2)\: STA STAT)f: LDA #0)p: STA LASTCH);)RTS ): LDY #3): STY $9A ;CURRENT OUTPUT DEVICE SCREEN*: LDY Y'REG ;PLA:TAY*: RTS*;)*; S A CODE/*;=*SCODE O* : LDX #0 ;#3Z* SN1 l*$ : LDA CODES,Y*. : JSR MODEM'PUTBYTE*8 : INY*B : INX ;DEX*L : CPX #3 ;BLANK*V : BNE SN1*` : RTS*j ;*t ; HSHAKE*~ ;* RECH + : STA G+ : LDA #0#+ : STA DELAY.+ RC1 ;+ : LDA #2J+ : STA PNTAX+ : LDY Gi+ : JSR SCODEt+ RC9 + : LDA #%00100+ : JSR ACCEPT+ : LDA STAT+ : BEQ RC2+ : PNTA+ : BNE RC9+( : JMP RC1+2 ;+< RC2 +F : LDY #9 ,P : JSR SCODE,Z : LDA FLAG*,d : BEQ RC58,n : LDA GF,x : BEQ RC6Q, RC5 h, : LDA BUFFERSIZE{, : STA BUFCOUNT, : STA RECSIZE, : JSR RECMODEM, : LDA STAT, : CMP #%0001, : BEQ RC4, : CMP #%0010, : BEQ RC2, : CMP #%0100 - : BEQ RC4- : CMP #%1000+- : BEQ RC26- RC4 @- : RTSF-" ;Q-, RC6 c-6 : LDA #%10000t-@ : JSR ACCEPT-J : LDA STAT-T : BNE RC2-^ : LDA #10-h : STA BUFCOUNT-r RC8 -| : LDY #12- : JSR SCODE- : LDA #%01000- : JSR ACCEPT. : LDA STAT. : BEQ RC7-. : BUFCOUNT;. : BNE RC8F. RC7 P. : RTS[. TX3 n. : JSR DUMMYBLKy. TX1 . : LDA #"-". .BYT $2C. TX10 . : LDA #":". : JSR PRTDASH. : LDY #6. : JSR SCODE. : LDA #%01000/ : JSR ACCEPT/ : LDA STAT /: BNE TX12/: JSR THISBUFC/: LDY #SIZEV/$: LDA (PNTB),Yi/.: STA BUFCOUNTz/8: JSR ALTBUF/B: LDX #5/L: JSR CKOUT/V: LDY #0/`TX6 /j: LDA (PNTB),Y/t: JSR BSOUT'/~: INY/: CPY BUFCOUNT/: BNE TX6 0: JSR CH0: LDA #0#0: RTS)0;40TX4 C0: LDA #"*"U0: JSR PRTDASHb0: LDY #6s0: JSR SCODE0: LDA #%010000: JSR ACCEPT0 : LDA STAT0: BNE TX40: LDA #100(: STA BUFCOUNT02TX5 0<: LDY #120F: JSR SCODE1P: LDA #%10000!1Z: JSR ACCEPT01d: LDA STAT>1n: BEQ TX8O1x: BUFCOUNT]1: BNE TX5h1TX8 u1: LDA #31: STA BUFCOUNT1TX9 1: LDY #91: JSR SCODE1: LDA #%000001: JSR ACCEPT1: BUFCOUNT1: BNE TX92: LDA #1 2: RTS2;32; RECEIVE A BLOCK FROM MODEM92;I2"RECMODEM V2,: LDY #0b26RCM5 o2@: LDA #02J: STA TIMER12T: STA TIMER112^RCM1 2h: JSR 2r: JSR NUM2|: LDA STAT2: BNE RCM22: LDA LASTCH2: STA BUFFER,Y 3: CPY #33: BCS RCM3,3: STA CODEBUF,Y93: CPY #2H3: BNE RCM3Z3: LDA CODEBUFi3: CMP #"A"x3: BNE RCM33: LDA CODEBUF13: CMP #"C"3: BNE RCM33: LDA CODEBUF23: CMP #"K"3&: BEQ RCM430RCM3 3:: INY4D: CPY BUFCOUNT4N: BNE RCM5%4X: LDA #%000144b: STA STAT>4l: RTSD4v;P4RCM4 _4: LDA #$FFp4: STA TIMER14: STA TIMER114: JMP RCM14;4RCM2 4: INC TIMER14: BNE RCM64: INC TIMER114RCM6 4: LDA TIMER15: A TIMER115: BEQ RCM7&5 : LDA TIMER135: CMP #6F5 : LDA TIMER11m5*: CMP #32 ;WAS 16 AT 1MHZ|54: BNE RCM15>: LDA #%00105H: STA STAT5R: CPY #05\: BEQ RCM95f: LDA #%01005p: STA STAT5zRCM9 5: JMP DELAY5;6RCM7 6: LDA #%1000'6: STA STAT16: RTS76;R6; CREATE DUMMY BLOCKX6;h6DUMMYBLK y6: LDA BUFPNT6: E #16: STA BUFPNT6: JSR THISBUF6: LDY #NUM6: LDA BLOCKNUM6$: CLC6.: ADC #168: STA (PNTB),Y6B: INY7L: LDA BLOCKNUM1!7V: ADC #047`: STA (PNTB),YA7j: LDX #2Q7t: JSR CHKINa7~: LDY #POSl7DB1 z7: JSR BA7: STA (PNTB),Y7: INY7: JSR ST7: BNE DB47: CPY #MAXSIZE7: BNE DB17: TYA7: PHA7: JMP DB57;8DB4 8 : TYA8: PHA+8: LDY #NUM58(: INYD82: LDA #255W8<: STA (PNTB),Ye8F: JMP DB5k8P;{8ZDUMMYBL1 8d: PHA8nDB5 8x: JSR CH8: JSR RESET8: JSR D28: JSR RESET8: LDY #SIZE8: LDA (PNTB),Y9: STA BUFCOUNT9: JSR ALTBUF9: PLA/9: LDY #SIZEB9: STA (PNTB),YU9: JMP CHECKSUM_9;;RTSe9;s9; SET Sy9;9THISBUF 9": LDA #BUFFER9,: STA PNTB96: LDA BUFPNT9@: CLC9J: ADC #BUFFER9T: STA PNTB19^: RTS9h;:r; SET ALT. BUFFER:|;*:ALTBUF =:: LDA #BUFFERL:: STA PNTB]:: LDA BUFPNTi:: E #1s:: CLC:: ADC #BUFFER:: STA PNTB1:: RTS:;:; CALCULATE CHECKSUM:;:CHECKSUM :: LDA #0:: STA CHECK1;: STA CHECK11;&: STA CHECK12.;0: STA CHECK13?;:: LDY #SIZEK;DCKS1 \;N: LDA CHECK1f;X: CLCy;b: ADC (PNTB),Y;l: STA CHECK1;v: BCC CKS2;: INC CHECK11;CKS2 ;: LDA CHECK12;: E (PNTB),Y;: STA CHECK12;;CKS3 <: LDA CHECK13<: ROL-<: ROL CHECK12@<: ROL CHECK13J<: INY]<: CPY BUFCOUNTl<: BNE CKS1y<: LDY #0< : LDA CHECK1<: STA (PNTB),Y< : INY<*: LDA CHECK11<4: STA (PNTB),Y<>: INY: STA BLOCKNUM1>: STA FLAG'> : STA BUFPNT=>: STA BUFFERNUMU>: STA BUFFERNUM1h>(: STA SKPDELAYx>2: LDA #POS><: STA BUFFERSIZE>F: LDA #0>PREC1 >Z: JSR RECH>d: LDA FLAG>n: BNE REC3>x: JSR MATCH>: BNE REC2?: JSR CH?: LDA BUFCOUNT'?: CMP #POS6?: BEQ REC7C?: LDX #2S?: JSR CKOUTc?: LDY #POSo?REC6 ?: LDA BUFFER,Y?: JSR BSOUT?: INY?: CPY BUFCOUNT?: BNE REC6?: JSR CH?REC7 ?": LDA BUFFERNUM1?,: CMP #255@6: BNE REC4@@: LDA #1+@J: STA FLAG:@T: LDA #"*"G@^.BYT $2CS@hREC4 b@r: LDA #"-"z@w: JSR UPDATE'SCREEN@|: LDA NUMB'OD : CMP MAX'BLKS : BNE @: LDA NUMB'OD1: CMP MAX'BLKS1: BNE A: LDA #255: JMP 3 ; & SIGNAL DRIVE FULLA JSR RESET"A: LDA #01A: JMP REC17A;CAREC2 QA: JSR CH`A: LDA #":"xA: JSR UPDATE'SCREENA: LDA RECSIZEA: STA BUFFERSIZEA: LDA #3A: JMP REC1A;A; SEE CHECKSUMS MATCHA;AMATCH B&: LDA BUFFERB0: STA CHECK'B:: LDA BUFFER19BD: STA CHECK1LBN: LDA BUFFER2^BX: STA CHECK2qBb: LDA BUFFER3Bl: STA CHECK3Bv: JSR THISBUFB: LDA RECSIZEB: STA BUFCOUNTB: JSR CHECKSUMB: LDA BUFFERB: CMP CHECKB: BNE MTC1C: LDA BUFFER1"C: CMP CHECK11C: BNE MTC1DC: LDA BUFFER2VC: CMP CHECK2eC: BNE MTC1xC: LDA BUFFER3C: CMP CHECK3C : BNE MTC1C: LDA #0C : RTSC*;C4MTC1 C>: LDA #1CH: RTSCR;C\; RECEIVE FILE TYPE BLOCKDf;DpRECTYPE (Du: JSR 'IT'ALL5Dz: LDA #0ID: STA BAD'COUNT\D: STA BLOCKNUMqD: STA BLOCKNUM1D: STA FLAGD: STA BUFPNTD: STA SKPDELAYD: STA NUMB'OD : STA NUMB'OD1D: STA NUMB'BAD : STA NUMB'BAD1D: LDA #POSE: CLCE: ADC #1,E: STA BUFFERSIZE9E: LDA #0EERCT3 UE: JSR RECHeE: LDA FLAGtE: BNE RCT1E : JSR MATCHE: BNE RCT2E: LDA BUFFERPOSE;: BNE ; IT'S A ZERO, SET 4. ILL BE RECOGNIZED AS BADF;: LDA #4F$;: LDA BUFFERPOSQF&; CMP #3 ; FIYPE3, SET 1 (BOTH ,P)^F);: BNE lF+;: LDA #1}F. STA FIYPEF8: LDA #1FB: STA FLAGFL: LDA #0FV: JMP RCT3F`;FjRCT2 Ft: LDA RECSIZEF~: STA BUFFERSIZEF: LDA #3 G: JMP RCT3G;#G'AS'BAD 0G: LDA #7CG:.BYT SKIP'WDIG;YG'AS'OD eGRCT1 rG: LDA #0G: STA LASTCHG: RTSG6;G@; DELAY TIMINGGJ;GTDELAY G^: INC SKPDELAYGh: LDA SKPDELAYGr: CMP #3H|: BCC D1H: LDA #0!H: STA SKPDELAY1H: LDA DELAY?H: BEQ D2MH: BNE D3SH;^HD1 nH: LDA DELAY|H: BEQ D3H;HD2 H: LDX #2 ;LDX #0 1MHZHLP1 H : LDY #0H LP2 H : INYH& : BNE LP2H0 : INX+I: : NOP ;CPX #120 1MHZ. COUNTS 2256 NOW INSTEAD9ID : BNE LP1DIN D3 NIX : RTSTIb ;rIl ; DASH, COCOL, STARxIv ;I PRTDASH I : PHAI : LDA BLOCKNUMI : A BLOCKNUM1I : BEQ PRTD1I : LDA NTDASHI : BNE PRTD1I : PLA J : JSR UPDATE'SCREENJ : PHA#J PRTD1 -J : PLA7J : RTS=J!;fJz!; CHECK COMMORE CARRIER LOSSlJ!;uJ! J!: LDA $D3J!: CMP #2J!: BEQ 2J! JSR PRO'CARRIER ; CARRIER LOST, KEEP TRYING 4.25 SECDSK!: BEQ 1 ;ALL OKAYK!: INC CARRIER'TIMEOUTfK!: BEQ 2 ;STILL LOST AFTER 255 JFIES, ABT THE TRANSFERtK!: LDA $A2K! CMP $A2 ; A JFYK!: BEQ K": BNE K(#COUNT'BAD'BLOCKS K2#: INC BAD'COUNT ;ABT 25 INUOUS ERRS L<#: LDA #25!LF#: CMP BAD'COUNT.LP#: BEQ 28LZ#: RTS>Ln#;HL#2 UL#: LDA #1_L#3 pL#: STA LASTCHL#: LDX STACK ;CAUSES RTS BASICL#: TXS:PLA:PLAL#1 L#: LDA #0L#: STA CARRIER'TIMEOUTL#: RTSL$; MT$UPDATE'SCREEN M^$: CMP #":"-Mh$: BEQ 'BAD'BLKSND% LDA NUMB'BAD1QNN%: LDX NUMB'BADlNX%: LDY #20 ;COLUMNrNb%;}N%' N%: STY NOWCOLUMNN%: JSR $8E32 ;BASIC'S EGER ROUTINEN%: LDA $D4 ; LF PRESSEDN%: CMP #75N%: BEQ O%''BLKS O%: RTSO%;=O% JSR $2603 ;PANEL SWITCHJO%: LDA #0nO%: STA INBUFF ;BOARD BUFFxO&: RTSOH&'IT'ALL OR&: TSXO\&: STX STACKOp&: JSR CD8O&; FALL THROUGHO&;O&RESET ;RESET RS232 PTP&: JSR SETUPP&: LDA ENABL"P&: CMP #$802P&: BEQ RESETAP&: CMP #$92QP&: BEQ RESET[P&: RTSaP&;nP'. MULTIP.REC ;RECEIVE FILE P.: LDY #2P.: JSR 'VAR'SPECSP.;P/: LDA #0 ;RESET JFY'CLOCKP&/: STA JFY'CLOCK Q(/: STA JFY'CLOCK1#Q+/: STA JFY'CLOCK20Q0/: LDX #5@Q5/: JSR CHKINFQ:/;qQD/ JSR NUM ; A " " "" ""QN/: CMP #" " : BEQ QX/: CMP #"" : BEQ RH'ABTQb/: CMP #"" : BEQ RH'ABTQl/: JSR PRO'CARRIER : BNE RH'ABTQv/: LDA JFY'CLOCK1-R{/: CMP #27 ;TIMEOUT AFTER 2 MINUTES9R/: BNE ?R/;iR/ LDA #30 ;PAUSE HALF A SECyR/: STA DJFYR/ LDA DJFYR/: BNE R/;R/ JSR NUM : TAXR/: JSR PRO'CARRIER : BNE RH'ABTR/: TXAR/: CMP #" " : BEQ S/: CMP #13 : BEQ %S/: CMP #"" : BEQ 2S 0: LDY SIAS0: JSR BSTANS 0: INC SIZS*0: BNE `S40;rS>0 JMP RECTYPESp0 LDA #0 ;(TX$,(142))NAME (142)0 MULTISz0: STA LASTCHS0: RTSS0;S0RH'ABT S0: LDX #0S0: STX SIT0: INX:STX LASTCH8T0: RTS ;(512)1 ABTED>T1;aT81.E ;ALL THAT WAS MULTI LYT; "-PUNTERR" : "PUNTERR""-PUNTERR" : "@PUNTERR"; ALT KEY COMMS *ALTS 8. 'LITE>;]: LDY $D5 ;MATRIX PRESSo$: LDA $FA80,Y8: LDX CHATFLAGB: BEQ N'CHAT'DEDENTL;`: CMP #"C" ;CHAT ܫINGt: BNE : LDA CHATMOLAGS: E #16: STA CHATMOLAGS%: JSR PRIMM=. "--": BRKL: JMP ALTR;} CMP #"W" ;CHATWRAP(: BNE <: LDA CHATMOLAGSP: E #32d: STA CHATMOLAGSx: JSR PRIMM. "--": .BYT 0: JMP ALT;0 CMP #"S" ;SPLITSCREEN CHAT MODEK: BNE N'CHAT'DEDENTa: LDA CHATMOLAGSn: E #64: STA CHATMOLAGS,: LDA #5 : STA P' ;PUT A CR$, IN THE BUFFER@: JMP ALTT;N'CHAT'DEDENT  CMP #"G" ;BEEP: BNE 2 : JSR $C992 ;BEEP!A : JMP ALTG4;iH CMP #"+" ; BUFFERv\: BNE p: JSR PRIMM. "-OPEN-": .BYT 0: LDA OL'BUFF1 ; OL'BUFF INUE: CMP TEXT'P1: BCS : JSR PRIMM . "FULL": .BYT 0 : LDA #"-"-  : JMP : $ LDA #0N 8 : STA BUFF'STAT] L : JMP ALTc ` ; t CMP #"-" ; BUFFER : BNE : LDA #1 : STA BUFF'STAT : JSR PRIMM . "-CLOSE-": .BYT 0 : JMP ALT ;! CMP #"0" ;ERASE BUFFER$!( : BNE A!< : LDX #$FF : STX OL'BUFF`!P : DEX : STX OL'BUFF1p!d : JSR PRIMM!x : . "-CLEAR-": .BYT 0! : JMP ALT! ;! CMP #"@" ;DUMP BUFFER! : BNE CHAPK! : LDA #$FF : STA BUFF'DUMP" : LDX #$FE : STX BUFF'DUMP1@" : CPX OL'BUFF1 ; BUFFER IS EMPTY_" : BNE ; SKIPq", : CMP OL'BUFF"@ : BEQ "T STA BUFF'STAT ; DUMP MODE "h : LDX TEXT'P1 ; OF OVERLAY"| : CPX OL'BUFF1" : BCC " : INX# : STX OL'BUFF1# LDA #0 : TAY/# : STA (OL'BUFF),Y;# : BMI J# JMP ALTP# ;]# CHAPK ~#0 : CMP #"1" ; 18 FUNCTI #D : BCC #X : CMP #"9"#l : BCS # : SEI ;USES ROM'S F HLING CODE.. JUST NEED $ : #15:TAX:DEX ;SET THE S!$ : LDA $1000,X,$ : BEQ ALT`$ : STA $D1 ;# OF S DING F STRINGf$ ;s$ : LDA #0}$ : DEX$ : BMI $ CLC$4 : ADC $1000,X$H : DEX$\ : BPL $p STA $D2 ;$SET O F I: $100A,$D2$ : CLI % : JMP ALT% ;0% CMP #"T" ;TIMEOUT<% : BNE I% : LDA #1W% : STA C34f%: JMP ALTl%$;%t CMP #"A" ;GGLE OP AVAILABLE FLAG%: BNE %: JSR PRIMM%. "-" : BRK%: LDA OP'AVAILABLE%: E #1&: STA OP'AVAILABLE&: BNE $&: JSR PRIMM7&. "-": BRKG& JSR PRIMM^&. "-" : BRKm&(;;JMP ALTs&2;&'ALT &$': LDA #0&8': STA A'&L': PLA:PLA ;PULL $ THE JSR ALT S, SO RTS OUT OF ROUTINE&`' RTS&t';''.E ;LITE '' RTS'';P'; "-ALT CMDS" : "ALT CMDS" "-ALT CMDS" : "@ALT CMDS  4000.G $12FE4.OBJ "@0:MLC.PUNTER-S":;v!MULTI 0 ;MULTIPUNTER FLAG; 0GLE, 2MULTI|(;).DVI 9*.DVO 92.LST "MODEM.ST"F.LST "COMMON.ST"P.LST "VARIABLES.ST"c;PNTA $FAPNTB $FCST $FFB7!@SETUP $E6C2 ;C1280^STAT $FE6h;Mr; OTHER LOCATISS|;gCODEBUF $0400zBITPNT $0403BITCNT $0404BITPAT $0405TIMER1 $0406G $0408BUFCOUNT $0409ERRTYPE $040ADELAY $040BSKPDELAY $040C%FLAG $040D7CHECK $040EJCHECK1 $0412]BUFPNT $0416qRECSIZE $0417MAXSIZE 255 ;$0418!BLOCKNUM $0419&;;FIYPE $041B+STACK $041C0NTDASH $041D5SPECMODE $041E:;;NUMB'OD $0420?NUMB'BAD $04223DBAD'COUNT $0424OICARRIER'TIMEOUT $0425UN:hXBUFFER $0500|bBUFFER1 $0600lLASTCH $0200vRS232ENB $02A1;; BUFFER ITIS;SIZE 4NUM 5POS = 7; ; START OF PROGRAM ; ;P FIYPE .BYT 2 ;FIYPE S RECEIVE, 1P, 2S .BYT 0 ;PROCOL IN MEMY FLAG. 4863,D%(10) . MULTI :JMP TRAN ;S MULTIXFER TRANTYPE O . ;GLE !:JMP TRANTYPE ;S GLERXFER FILE TYPE! .EF! :JMP HING ;RECEIVE TYPE USED IN Sg! JMP TRANSMIT ;S FILE!JMP HING ;RECEIVE FILE!. MULTI! :JMP 'MULTI ;S OFMULTI XFER!#. ;GLE!(:JMP HING!*.E"/TRANSLATE BRK ; TRANSLATI FLAG_"1NUMB'OD .WD 000 ;BLOCKS (OF BELOW SIZE) SENT DURING LAST TRANSFER"4.WD 248 ;BYTES OF PER BLOCK">MAX'BLKS .WD 000 ;MAX # BLOCKS MAY RECEIVE PREVENT FULL DISK LOCKUP#H.BYT MULTI ;TRANS TYPE: 0GLE LY, 2MULTI LY&#\BRKO#JSR PRIMM'BBS' ;S PROCOL NAME\#. MULTIm#:. "ULTI-"u#.E#. "UNTER"#BRK#RTS#;#CODES #$. "GOO"#.. "BAD"#8. "ACK"#B. "S/B"#L. "SYN"#V;$`; ACCEPT ACTERS CHECK CODES$j;)$tACCEPT :$~: STA BITPATG$: LDA #0Y$: STA CODEBUFm$: STA CODEBUF1$: STA CODEBUF2$CD1 $: LDA #0$: STA TIMER1$: STA TIMER11$CD2 $: JSR $: JSR NUM$: LDA STAT%: BNE CD3% : LDA CODEBUF1&%: STA CODEBUF:%: LDA CODEBUF2N%(: STA CODEBUF1_%2: LDA LASTCHs%<: STA CODEBUF2%F: LDA #0%P: STA BITCNT%Z: LDA #1%d: STA BITPNT%nCD4 %x: LDA BITPAT%: BIT BITPNT%: BEQ CD5%: LDY BITCNT&: LDX #0&CD6 '&: LDA CODEBUF,X9&: CMP CODES,YG&: BNE CD5Q&: INY[&: INXh&: CPX #3v&: BNE CD6&: JMP CD7&;&CD5 &: ASL BITPNT&": LDA BITCNT&,: CLC&6: ADC #3&@: STA BITCNT&J: CMP #15&T: BNE CD4 '^: JMP CD1'h;'rCD7 )'|: LDA #255:': STA TIMER1M': STA TIMER11[': JMP CD2a';'CD3 ;TIME DELAY': INC TIMER1': BNE CD9': INC TIMER11'CD9 ': LDA TIMER11': A TIMER1': BEQ CD8 ;OD(;;LDA TIMER1(;;CMP #7/(: LDA TIMER11V(: CMP #43 ;WAS 20 AT 1MHZd(&: BCC CD2(+: JSR COUNT'BAD'BLOCKS(0: LDA #1 ;BAD(:: STA STAT(D: JMP DELAY(N;(XCD8 (b: LDA #0(g: STA BAD'COUNT(l: STA STAT)v: RTS);)NUM .): STY Y'REG ;TYA:PHA?): JSR 'INGL): BEQ 1b): JSR MODEM'BYTEs): STA LASTCH): LDY #0) : STY STAT)>: JMP RTS)H1 )R: LDA #2)\: STA STAT)f: LDA #0)p: STA LASTCH);)RTS *: LDY #30*: STY $9A ;CURRENT OUTPUT DEVICE SCREENK*: LDY Y'REG ;PLA:TAYU*: RTS[*;m*; S A CODEs*;*SCODE * : LDX #0 ;#3* SN1 *$ : LDA CODES,Y*. : JSR MODEM'PUTBYTE*8 : INY*B : INX ;DEX*L : CPX #3 ;BLANK+V : BNE SN1+` : RTS+ ;1+ ; HSHAKE XMIT 7+ ;E+ TRANH R+ : LDA #1b+ : STA DELAYm+ TX2 +& : LDA SPECMODE+0 : BEQ TX20+: : LDY #0+D : JSR SCODE+N TX20 +X : LDA #%01011+b : JSR ACCEPT+l : LDA STAT+v : BNE TX2, : LDA #0, : STA SPECMODE*, : LDA BITCNT7, : CMP #0F, : BNE TX10V, : LDA FLAGd, : BNE TX4w, : INC BLOCKNUM, : BNE TX7, : INC BLOCKNUM1, TX7 , : JSR THISBUF, : LDY #NUM, : INY, : LDA (PNTB),Y, : CMP #255- : BNE TX3-* : LDA #1-4 : STA FLAG/-> : LDA BUFPNT;-H : E #1L-R : STA BUFPNT^-\ : JSR THISBUFq-f : JSR DUMMYBL1-p : JMP TX1-z ;- TX3 - : JSR DUMMYBLK- TX1 - : LDA #"-"- .BYT $2C- TX10 - : LDA #":"- : JSR PRTDASH. : LDY #6. : JSR SCODE'. : LDA #%010008. : JSR ACCEPTG. : LDA STATU.: BNE TX1g.: JSR THISBUFx.: LDY #SIZE.$: LDA (PNTB),Y..: STA BUFCOUNT.8: JSR ALTBUF.B: LDX #5.L: JSR CKOUT.V: LDY #0.`TX6 .j: LDA (PNTB),Y/t: JSR BSOUT'/~: INY%/: CPY BUFCOUNT3/: BNE TX6A/: JSR CHN/: LDA #0X/: RTS^/;i/TX4 x/: LDA #"*"/: JSR PRTDASH/: LDY #6/: JSR SCODE/: LDA #%01000/: JSR ACCEPT/ : LDA STAT/: BNE TX4/: LDA #10 0(: STA BUFCOUNT02TX5 "0<: LDY #1230F: JSR SCODEE0P: LDA #%10000V0Z: JSR ACCEPTe0d: LDA STATs0n: BEQ TX80x: BUFCOUNT0: BNE TX50TX8 0: LDA #30: STA BUFCOUNT0TX9 0: LDY #90: JSR SCODE0: LDA #%00000 1: JSR ACCEPT1: BUFCOUNT(1: BNE TX951: LDA #1?1: RTSE1;K1;Y1hHING f1|: LDA #0w1: STA LASTCH1: RTS1;1; CREATE DUMMY BLOCK1;1DUMMYBLK 1: LDA BUFPNT1: E #11: STA BUFPNT1: JSR THISBUF2: LDY #NUM2: LDA BLOCKNUM%2$: CLC22.: ADC #1E28: STA (PNTB),YO2B: INYd2L: LDA BLOCKNUM1q2V: ADC #02`: STA (PNTB),Y2j: LDX #22t: JSR CHKIN2~: LDY #POS2DB1 2: JSR BA2: STA (PNTB),Y2: INY2: JSR ST3: BNE DB43: CPY #MAXSIZE$3: BNE DB1.3: TYA83: PHAF3: JMP DB5L3;W3DB4 a3 : TYAk3: PHA{3: LDY #NUM3(: INY32: LDA #2553<: STA (PNTB),Y3F: JMP DB53P;3ZDUMMYBL1 3d: PHA3nDB5 3x: JSR CH3: JSR RESET 4: JSR D24: JSR RESET-4: LDY #SIZE@4: LDA (PNTB),YS4: STA BUFCOUNTd4: JSR ALTBUFn4: PLA4: LDY #SIZE4: STA (PNTB),Y4: JMP CHECKSUM4;;RTS4;4; SET S4;4THISBUF 4": LDA #BUFFER4,: STA PNTB 56: LDA BUFPNT5@: CLC(5J: ADC #BUFFER95T: STA PNTB1C5^: RTSI5h;f5r; SET ALT. BUFFERl5|;z5ALTBUF 5: LDA #BUFFER5: STA PNTB5: LDA BUFPNT5: E #15: CLC5: ADC #BUFFER5: STA PNTB15: RTS5;6; CALCULATE CHECKSUM6;'6CHECKSUM 46: LDA #0E6: STA CHECK1X6: STA CHECK11k6&: STA CHECK12~60: STA CHECK136:: LDY #SIZE6DCKS1 6N: LDA CHECK16X: CLC6b: ADC (PNTB),Y6l: STA CHECK16v: BCC CKS26: INC CHECK117CKS2 7: LDA CHECK12-7: E (PNTB),Y@7: STA CHECK12M7;CKS3 `7: LDA CHECK13j7: ROL}7: ROL CHECK127: ROL CHECK137: INY7: CPY BUFCOUNT7: BNE CKS17: LDY #07 : LDA CHECK17: STA (PNTB),Y7 : INY 8*: LDA CHECK1184: STA (PNTB),Y'8>: INY:8H: LDA CHECK12M8R: STA (PNTB),YW8\: INYj8f: LDA CHECK13}8p: STA (PNTB),Y8z: RTS8;8; TRANSMIT A PROGRAM8;8TRANSMIT 8: JSR 'IT'ALL8: LDA #08: STA BAD'COUNT9: STA FLAG9: STA SKPDELAY&9: STA NTDASH39: LDA #1D9: STA BUFPNTS9: LDA #255f9: STA BLOCKNUM{9: STA BLOCKNUM19: JSR ALTBUF9: LDY #SIZE9: LDA #POS9$: STA (PNTB),Y9.: JSR THISBUF98: LDY #NUM9B: LDA #0:L: STA (PNTB),Y :V: INY:`: STA (PNTB),Y+:jTRM1 <:t: JSR TRANHK:~: BEQ TRM1W:REC3 d:: LDA #0u:: STA LASTCH:: RTS:;:;:; SEE CHECKSUMS MATCH:;:MATCH :&: LDA BUFFER:0: STA CHECK::: LDA BUFFER1;D: STA CHECK1;N: LDA BUFFER2&;X: STA CHECK29;b: LDA BUFFER3K;l: STA CHECK3];v: JSR THISBUFo;: LDA RECSIZE;: STA BUFCOUNT;: JSR CHECKSUM;: LDA BUFFER;: CMP CHECK;: BNE MTC1;: LDA BUFFER1;: CMP CHECK1;: BNE MTC1 <: LDA BUFFER2<: CMP CHECK2-<: BNE MTC1@<: LDA BUFFER3R<: CMP CHECK3a< : BNE MTC1n<: LDA #0x< : RTS~<*;<4MTC1 <>: LDA #1n: CLC>x: ADC #1'>: STA (PNTB),Y9>: JSR THISBUFI>: LDY #NUMX>: LDA #255k>: STA (PNTB),Yu>: INY>: STA (PNTB),Y>: LDY #POS>: LDA FIYPE>: STA (PNTB),Y>: LDA #1>: STA SPECMODE>TRF1 >: JSR TRANH?: BEQ TRF1?: LDA #0&?": STA LASTCH0?,: RTS6?6;O?@; DELAY TIMINGU?J;c?TDELAY v?^: INC SKPDELAY?h: LDA SKPDELAY?r: CMP #3?|: BCC D1?: LDA #0?: STA SKPDELAY?: LDA DELAY?: BEQ D2?: BNE D3?;@D1 @: LDA DELAY@: BEQ D3%@;0@D2 `@: LDX #2 ;LDX #0 1MHZ WAS #2 2MHZk@LP1 x@ : LDY #0@ LP2 @ : INY@& : BNE LP2@0 : INX@: : NOP ;CPX #120 1MHZ. COUNTS 2256 NOW INSTEAD@D : BNE LP1@N D3 AX : RTS Ab ;'Al ; DASH, COCOL, STAR-Av ;GH&'IT'ALL HGR&: TSXXG\&: STX STACKfGp&: JSR CD8zG&; FALL THROUGHG&;G&RESET ;RESET RS232 PTG&: JSR SETUPG&: LDA ENABLG&: CMP #$80G&: BEQ RESETG&: CMP #$92H&: BEQ RESETH&: RTSH&;#H'. MULTIHH'TRAN'PRE' ;S FIVE " "'SaH': LDX #5 : JSR CKOUTzH': LDX #5 : JSR CHKINH$': LDX #5H8' LDA #" "HB': JSR BSOUT'HL': DEXHV': BNE H`': RTSHj';Ht'TRAN ;S FILE A$Hy': LDA #0>I~': STA JFY'CLOCK1 ; 2 MINUTES, RESING EVERY 8.5 SECDSuI'TRAN2 ;ENTRY RES LESS THAN 2 MINUTESI': JSR TRAN'PRE'I': LDY #9I': JSR 'VAR'SPECS ; A$I': LDY #0I' JSR BLDAI': CMP #0:BEQ I': INYI': JSR BSOUT' J': CPY SLJ': BNE %J' LDA #136J': JSR BSOUT': #32<#H: BEQ MAIN'CHAT' ; SKIP CHATWRAP CHECKINGB#\;P#p: LDA A'#: CMP #"" ; LAST WAS CRSRLEFT DEL#: BEQ CHECK''RIGHT ; SKIP CHATWRAP CHECK#: CMP #20#: BNE CHATWRAP#;)$CHECK''RIGHT ;SEE WE JUST MOVED THE RIGHTMOST COLUMN=$ : LDA NOWCOLUMNL$ : CMP SCRT$ : BNE MAIN'CHAT' ; , WITH MAIN CHAT $. : JSR N'MCI'CHROUT ;, S LAST AGAIN SO THAT WE ARN'T$8 : JMP MAIN'CHAT' ; SITTING THERE ANYME$L ; % CHATWRAP 3% : LDY SCRT ;RIGHT OF SCREENB% : DEY ;DEYV% : CPY NOWCOLUMN% : BNE MAIN'CHAT' ; RIGHT'OF'SCREEN2 CURRENT'COL SKIP%( ;%< : LDY #16%P : STY SL%d NOWCOLUMN ;CURS BACK&n : JSR $C15C ;SET SCREEN ADDRESS 40 80CI&x : JSR $CB58 ; AT CURS ^& : JSR SCRN''II& : INC NOWCOLUMN ;CURS WARD& : CMP #" "& : BEQ & : LDY SL& : STA $200,Y& : LDA #20&, : JSR ERPRET'ACC ; ACTER'@ : SL 'T : BNE 'h ;>'| LDA CHATMOLAGS ; IN SPLITCHAT MODEJ' : #64V' : BEQ ' : JSR DC''RTRN ; USE DUALCHAT SCROLLER CODE' ;' LDA #13' : JSR ERPRET'ACC' : JMP ' ;'0 LDA $200,X'D : STA A''X : JSR N'MCI'CHROUT (l INC SL( : LDX SL&( : CPX #172( : BNE 8( ;N(H : JMP MAIN'CHAT'T(\ ;b(CHAT' (: LDA SHFLAG ;SHT FLAG(: BNE ; SHT PRESSED, N'T RESET JFYCLOCK(: LDA TIME1 : STA $DD0B ; D#2 CLOCK ): LDA TIME2 : STA $DD0A%): LDA TIME3 : STA $DD095): STA $DD08?): SEIa): LDA JTIME1 : STA JFY'CLOCK): LDA JTIME2 : STA JFY'CLOCK1): LDA JTIME3 : STA JFY'CLOCK2): CLI);) LDA CHATMOLAGS ; IN SPLITCHAT MODE): #64)": BEQ *,: LDX NOWCOLUMN : LDY #24/*6: JSR SET'CURS5*@;B*T LDA #0U*h: STA CHATFLAGj*: JSR CHATMODE2*: JSR INC'CHAT'INDEX*: JSR MODEMY*: LDA #"" ;PUT P O BOARD BUFFER*: STA KBBUFF*: LDA #1*: STA INBUFF*;)+0: LDA $D020 ; 40C BOARD BLACK5+:: BEQ _+D: LDA #0 ; SET IT BLACK,+N: STA $D020 ; & CLEAR CHAT REQ SUBJECT FROM PANEL+: LDX #18 : LDA #802535 : JSR VDC ;SET START ADDRESS,: INX : LDA #802535 : JSR VDCB,: LDX #24 : LDA #32 : JSR VDC ;SET FILL MODE,: LDX #31 : : JSR VDC ;FILL WITH SPACES (#32),: LDX #30 : LDA #44 : JSR VDC ; FILL 44 TIMES!,\; - LDX IN'SPEEDY ; ENTERED CHAT MODE SPEEDY WAS DISINGN-: BEQ ; RESET THE STACK THAT WHICH CALLED-: TXS ; SPEEDY. SPEEDY WAS OVERWRITEN BY CHAT MODUAL-: LDX #0-: STX IN'SPEEDY ; SET BACK 0 NO LGER IN SPEEDY-;-$ RTS-8;.'DELWD .: JSR SET'SCRN'ADDRESS+.: LDA #209.: STA A'Q. LDY NOWCOLUMN:DEY].: BEQ j.: BMI .: JSR $CB6D ; AT CURS .: CMP @" " ; SPACE.: BEQ ; NE /: JSR ERPRET' ; /: JMP /;G/0 JMP ERPRET' ;DEL THE SPACEQ/: RTSW/N;/XCHATMODE1 ;SETUP SPLITCHAT SCREEN/b. 'LITE/l;/: LDA #"" ;CLEAR SCREEN/: JSR ERPRET'ACC0: LDA S ;SET S&0: JSR ERPRET'ACC,0;N0 : LDA COLUMNS ;SCREEN [0 : STA SLv04: LDA SPLITCHAT'TEXT10H: STA SP0\: LDA SPLITCHAT'TEXT10p: STA SP10: LDA #00: STA SI0: JSR STRINUT0;0: LDX #0 : LDY #12 1: JSR SET'CURS1;#1: LDA COLUMNS01$: STA SLK18: LDA SPLITCHAT'TEXT2X1L: STA SPs1`: LDA SPLITCHAT'TEXT21t: STA SP11: LDA #01: STA SI1: JSR STRINUT1;1: LDA #"" :JSR ERPRET'ACC2: LDX #0 : LDY #1 :JSR SET'CURS%2: LDA S1 :JSR ERPRET'ACC+2(;B2<: LDX #0 : LDY #13U2P: STX LAST'COLi2d: STY LAST'LINE2x: STX LASTINFROM ;SET ZEROCALLER LAST TYPE2: RTS2;2.E ;LITE2;2@CHATMODE2 2E: LDA #02J: STA PAUSE'COUNT3O: JSR PRIMM'BBS&3Q:. "":.BYT 13,0T3T: LDA #$2200 ; CHATTEXT IN  1a3^: STA SPs3h: LDA #$22003|: STA SP13: LDY CHATTEXT'INDEX3 JSR BLDA3: CMP #0:BEQ 3: INY3: STY SI3: JSR ERPRET'ACC3: LDY SI4: BNE 4;4 JSR PRIMM'BBS04 :.BYT "",13,0:4 : RTS@4 ;44!SPLITCHAT'TEXT1 . "========-: ' ========================================" 5H!SPLITCHAT'TEXT2 . "========-: ' ================================================"5\!;=5(#CHATMODE ;ENTER CHAT MODEo52#: LDA #3:STA LASTINFROM ;NOBODY TYPED LAST5<#: LDA CHATMOLAGS ; IN SPLITCHAT MODE5A#: #645F#: BEQ 5Z#: JSR CHATMODE1 ;SETUP DUALCHAT SCREEN6d#: JMP INC'CHAT'INDEX@6n# JSR CHATMODE2 ;OUTPUT ENTER CHATMODE MESSAGEF6#;\6#INC'CHAT'INDEX f6#: CLC6$: LDA CHATTEXT'INDEX ;INDEXINDEX426$: ADC #426,$: CMP #252 ; PAST LAST E6@$: BNE 6T$: LDA #0 ; RESET 7h$ STA CHATTEXT'INDEX7|$: RTS7~';L7*CHAT'SNAPLINE ;80C ERPRET LINE IN .Y7 +; ;B1START ADDRESS OF LINE ERPRET7 +: LDA LINE'START'LOW,Y ;FROM "CHROUT" FILE7H+: STA SP7\+: LDA LINE'START'HIGH,Y7+: STA SP17+;8+: LDA #08+: STA SI8+;&8.INLINE 38.: LDY SI98/;d8/: CLC ; BYTE FROM VDC RAMn80/: TYA{8D/: ADC SP8X/: STA CS'TEMP8l/: LDA SP18/: ADC #08/: LDX #$128/: JSR $CDCC8/: INX8/: LDA CS'TEMP8/: JSR $CDCC9/: JSR $CDD8 9 0;29 0: #$7F ;CLEAR $ RVS FLAGG940: JSR SCRN''IIT9H0: LDY SIj9\0: STA CS'BUFFER,Yp9p0;}90: INC SI90: LDA SCRT ;RIGHT BDER OF 90: CMP SI90: BCS INLINE90: RTS90; :6CHAT'LINE ;OUTPUT TEXT IN CS'BUFFER$:6: LDX #5 : JSR CKOUT'1:6: LDX #0>:6: STX SIT:6 LDA CS'BUFFER,X:7: JSR CHROUT'BBS ; LOCAL SCREEN:<7: TAY:P7: JSR TRANS'OUTPUT:d7;:x7 JSR BSOUT' ; MODEM:7;:7: INC SI:7: LDX SI;7: CPX SCRT ;RIGHT BDER OF %;7: BCC 3;7: LDA #13D;7: JSR BSOUT'i;7: JSR $C00C ;SCREEN OUTPUT;7: LDA #10 : JSR BSOUT' ;LF;8: JMP CH';8;;>6LINES ;OUTPUT 6 LINES OF SPACES;>: LDY #6;>: STY SI<>: LDX #5 : JSR CKOUT' ;OUTPUT MODEMU<> LDA RODBS ; OUTPUT BUFFER CLEARe<>: CMP RODBEq<>: BNE <>: LDA ANSIMODE ; ANSI, SKIP<>: BNE <>: LDX SCRT ;RIGHT BDER OF <? LDA #" "< ?: JSR BSOUT' ;SPACE MODEM= ?: DEX=*?: BNE +=4?: JMP OFCLEARLINE1=9?;M=>? LDA #27 : JSR BSOUT'i=C?: LDA #"[" : JSR BSOUT'=H?: LDA #$4B : JSR BSOUT' ;ANSI CLEAR FROM CURS EOL (LIKE ESC Q)=R?;=\?OFCLEARLINE >p?: JSR $CA76 ;CLEAR LINE LOCAL SCREEN: ESC Q >?;>?: SI#>?: BEQ >>?: LDA #13 ;CR$t>?: JSR $C00C : JSR BSOUT' ; LOCAL SCREEN & MODEM>?: LDA #10 : JSR BSOUT' ;LF>?: BCC >@;>@ LDX SCRT>$@: STX NOWCOLUMN>8@: JMP CH'>j@;? NHLE'ING ;ܫ CHANGING1?*N: LDA FROM ; FROM SAME PERS=?4N: BEQ J?>N: LDA #1|?HN CMP LASTINFROM ; N'T CHANGE AGAIN?\N: BEQ 'ING?pN;?N: STA LASTINFROM?N: TAX?N: LDA S,X?N: LDX A'?N: STX $8C?N: JSR ERPRET'ACC@O: LDX $8C@$O: STX A'@8O'ING (@LO: RTS.@`O;A@0uDUAL'OUTPUT Q@Du: LDA FROM]@Xu: BEQ @lu: LDA #1 ; FROM SAME PERS@u CMP LASTINFROM ; NO NEED MOVE CURS@u: BEQ @u: STA LASTINFROM@u: LDA NOWLINE : PHA Au: LDA NOWCOLUMN : PHA-Au: LDX LAST'COL : LDY LAST'LINEMAu: JSR SET'CURS ; MOVE IThAu: PLA : STA LAST'COLAu: PLA : STA LAST'LINEAu;Au LDA A'A v: CMP #13A v: BEQ DC''RTRNA4v: CMP #"" ;CURS WNAHv: BEQ DC''RTRNB\v: CMP #"" ;CLEAR SCREEN$Bpv: BEQ DC'',BvRTS2Bv;[BvDC'' ;CLEAR SCREENBv: JSR CHATMODE1 ;RE SPLITCHAT SBw: LDA #0 : STA A'B w: STA LASTINFROMBw: RTSBw;B$wDC''RTRN C.w: LDA NOWCOLUMN : STA SCROLL'COLUMN ; SAME COLUMN ITI!C3w;0C8w: LDA LASTINFROMGCLw: BEQ DC'RTRN'USERZC`wDC'RTRN'OP ~Ctw: LDA NOWLINE ; AT LINE #23Cw: CMP #23Cw: BEQ ; SCROLL TEXTCw: RTS ; BOTM, HING SPECIALCw;Cw LDX #0 : LDY #13Dx: JSR SET'CURS Dx: LDY #194D(x: STY TEMP'LINE:D!;!: CLC ;ADD DIRECTI (EITHER ADDS SUBTRACTS E)!: LDA P'LINE!: ADC DIRECTI!: STA P'LINE!;! : CMP #7 ; LINE7 REVERSE DIRECTI!4: BEQ 5">: CMP #29 ; LINE29 REVERSE DIRECTIA"H: BEQ K"R: RTSQ"\;z" LDA DIRECTI ;REVERSE DIRECTI": E #$FE": STA DIRECTI": RTS";"CHECK'TIME ": LDA 56330 ;CURRENT MINUTE OF THE DAY0#: LDX 56328 ; 110 OF A SECD CLOCK MOVING AGAIN=#: CMP #0y#: BNE ; MINUTE 0, P OF HOUR, INUE # SEC:RTS ; SCREEN R#$;#V LDA 56587 ; IDLE CLOCK HOUR 0#`: BNE $e: LDA 56586 ; MINUTE IDLE TIME$j: LDX 56584+$o: CMP $19FFT$t: BEQ ; SCREEN Rd$ LDX 56584$: CLC:RTS ; INUE SCRN R$;$TIME'DELAY $: LDX JFY'CLOCK2$: INX:INX$ CPX JFY'CLOCK2$ : BNE $ : RTS$*;>%; "-SSCANNER" : "SSCANNER""-SSCANNER" : "@SSCANNER60;CRC TABLES HILO CRC EACH BYTE (0 THRU 255)<:;RDCRC'TABLE'LSB |N.BYTE $00,$21,$42,$63,$84,$A5,$C6,$E7X.BYTE $08,$29,$4A,$6B,$8C,$AD,$CE,$EFb.BYTE $31,$10,$73,$52,$B5,$94,$F7,$D6l.BYTE $39,$18,$7B,$5A,$BD,$9C,$FF,$DE$v.BYTE $62,$43,$20,$01,$E6,$C7,$A4,$85N.BYTE $6A,$4B,$28,$09,$EE,$CF,$AC,$8Dx.BYTE $53,$72,$11,$30,$D7,$F6,$95,$B4.BYTE $5B,$7A,$19,$38,$DF,$FE,$9D,$BC.BYTE $C4,$E5,$86,$A7,$40,$61,$02,$23.BYTE $CC,$ED,$8E,$AF,$48,$69,$0A,$2B .BYTE $F5,$D4,$B7,$96,$71,$50,$33,$12J.BYTE $FD,$DC,$BF,$9E,$79,$58,$3B,$1At.BYTE $A6,$87,$E4,$C5,$22,$03,$60,$41.BYTE $AE,$8F,$EC,$CD,$2A,$0B,$68,$49.BYTE $97,$B6,$D5,$F4,$13,$32,$51,$70.BYTE $9F,$BE,$DD,$FC,$1B,$3A,$59,$78.BYTE $88,$A9,$CA,$EB,$0C,$2D,$4E,$6FF.BYTE $80,$A1,$C2,$E3,$04,$25,$46,$67p.BYTE $B9,$98,$FB,$DA,$3D,$1C,$7F,$5E .BYTE $B1,$90,$F3,$D2,$35,$14,$77,$56.BYTE $EA,$CB,$A8,$89,$6E,$4F,$2C,$0D .BYTE $E2,$C3,$A0,$81,$66,$47,$24,$05 *.BYTE $DB,$FA,$99,$B8,$5F,$7E,$1D,$3CB 4.BYTE $D3,$F2,$91,$B0,$57,$76,$15,$34l >.BYTE $4C,$6D,$0E,$2F,$C8,$E9,$8A,$AB H.BYTE $44,$65,$06,$27,$C0,$E1,$82,$A3 R.BYTE $7D,$5C,$3F,$1E,$F9,$D8,$BB,$9A \.BYTE $75,$54,$37,$16,$F1,$D0,$B3,$92!f.BYTE $2E,$0F,$6C,$4D,$AA,$8B,$E8,$C9>!p.BYTE $26,$07,$64,$45,$A2,$83,$E0,$C1h!z.BYTE $1F,$3E,$5D,$7C,$9B,$BA,$D9,$F8!.BYTE $17,$36,$55,$74,$93,$B2,$D1,$F0!;!CRC'TABLE'MSB !.BYTE $00,$10,$20,$30,$40,$50,$60,$70".BYTE $81,$91,$A1,$B1,$C1,$D1,$E1,$F1,".BYTE $12,$02,$32,$22,$52,$42,$72,$62V".BYTE $93,$83,$B3,$A3,$D3,$C3,$F3,$E3".BYTE $24,$34,$04,$14,$64,$74,$44,$54".BYTE $A5,$B5,$85,$95,$E5,$F5,$C5,$D5".BYTE $36,$26,$16,$06,$76,$66,$56,$46".BYTE $B7,$A7,$97,$87,$F7,$E7,$D7,$C7(#.BYTE $48,$58,$68,$78,$08,$18,$28,$38R#.BYTE $C9,$D9,$E9,$F9,$89,$99,$A9,$B9|#.BYTE $5A,$4A,$7A,$6A,$1A,$0A,$3A,$2A#.BYTE $DB,$CB,$FB,$EB,$9B,$8B,$BB,$AB#.BYTE $6C,$7C,$4C,$5C,$2C,$3C,$0C,$1C#$.BYTE $ED,$FD,$CD,$DD,$AD,$BD,$8D,$9D$$..BYTE $7E,$6E,$5E,$4E,$3E,$2E,$1E,$0EN$8.BYTE $FF,$EF,$DF,$CF,$BF,$AF,$9F,$8Fx$B.BYTE $91,$81,$B1,$A1,$D1,$C1,$F1,$E1$L.BYTE $10,$00,$30,$20,$50,$40,$70,$60$V.BYTE $83,$93,$A3,$B3,$C3,$D3,$E3,$F3$`.BYTE $02,$12,$22,$32,$42,$52,$62,$72 %j.BYTE $B5,$A5,$95,$85,$F5,$E5,$D5,$C5J%t.BYTE $34,$24,$14,$04,$74,$64,$54,$44t%~.BYTE $A7,$B7,$87,$97,$E7,$F7,$C7,$D7%.BYTE $26,$36,$06,$16,$66,$76,$46,$56%.BYTE $D9,$C9,$F9,$E9,$99,$89,$B9,$A9%.BYTE $58,$48,$78,$68,$18,$08,$38,$28&.BYTE $CB,$DB,$EB,$FB,$8B,$9B,$AB,$BBF&.BYTE $4A,$5A,$6A,$7A,$0A,$1A,$2A,$3Ap&.BYTE $FD,$ED,$DD,$CD,$BD,$AD,$9D,$8D&.BYTE $7C,$6C,$5C,$4C,$3C,$2C,$1C,$0C&.BYTE $EF,$FF,$CF,$DF,$AF,$BF,$8F,$9F&.BYTE $6E,$7E,$4E,$5E,$2E,$3E,$0E,$1E&; ; ERR SNAPSHOT EPNT'SCRN FAC1 ; TEXT MEMYpPNT'ATRB FAC12 ; ATTRIBUTE MEMS' FAC14 ; OF LINES'RVS FAC15 ;REVERSE MODE FLAGS'FLASH FAC16 ;FLASH MODE FLAGS'UE FAC17S'COLUMN FAC18 ;COLUMN COUNT/S'TEMP FAC19[S'UNDER FAC110 ;UNDERLINE MODE FLAGa,;lC45 y: LDY #2: JSR 'VAR'SPECS ;TX$;: LDX A'REG ;LINE #: LDA LINE'START'LOW,X: STA PNT'SCRN: STA PNT'ATRB: LDA LINE'START'HIGH,X3.: STA PNT'SCRN1A8: A #$10Vt: STA PNT'ATRB1\;i: LDA #0: STA S'RVS ;CLEAR REVERSE, UNDERLINE: STA S'COLUMN ;SET COLUMN INDEX ZERO: STA S'UNDER: LDA #128 : STA S'FLASH ;FLASH FLAG128;S: LDY #79 ;FIND FIRST NSPACE & NRVS FROM RIGHTy( JSR 'SCRN'Y ; IS A SPACE-: CMP #" " :BNE ; FOUND THE !<: DEYF: BNE P STY S'Z;x : JSR 'SCRN: STA S'UE : JSR 'ATRB : PHA- : #15 ; ? : CMP S'FLASHK : BEQ ] : STA S'FLASHg : TAYx : LDA S'S,Y : JSR S'SRE ;  PLA : #%00100000 ;UNDERLINE FLAG : CMP S'UNDER : BEQ : STA S'UNDER : CMP #0 !: BEQ TUOF)!: LDA #"" : .BYT SKIP'WD;!TUOF LDA #""L!: JSR S'SRE\!@ LDA S'UEv!J: CMP #128 ;A128!T: BCC !^: LDA S'RVS!h: BNE L1670 ; R.!r: LDA #"" ; A$A$""!|: JSR S'SRE!: INC S'RVS!: JMP L1670";" LDA S'UE)": CMP #128 ;A1289": BCS L1670T": LDA S'RVS ; R0d": BEQ L1670": LDA #"" ; A$A$""": JSR S'SRE": S'RVS": LDA #128": STA S'FLASH";":L1670 "D: LDA S'UE"N: JSR SCRN''II#b: CMP #0#l: BEQ $#: JSR S'SRE*#;E# INC PNT'SCRN : BNE Z#: INC PNT'SCRN1u# INC PNT'ATRB : BNE #: INC PNT'ATRB1#;# INC S'COLUMN# : LDA S'#: CMP S'COLUMN# : BCC #*: JMP #/;$4 CMP #79 ; TEXT RIGHT UP RIGHTMOST COLUMNA$H: BEQ ; SKIP G$\;U$p: LDA #13f$: JSR S'SREl$;$ JMP CHECK'EQUAL'VAR$;$ S'SRE $ : LDY SI$ : JSR BSTA$ : INC SI$ : RTS$, ;$ 'SCRN $ : LDA PNT'SCRN1% : LDX #18% : JSR VDC%& : INX0%0 : LDA PNT'SCRN?%: : JSR VDCP%D : JMP VDC«2V%l ;d% 'ATRB y% : LDA PNT'ATRB1% : LDX #18% : JSR VDC% : INX% : LDA PNT'ATRB% : JSR VDC% : JMP VDC«2% ;%H 'SCRN'Y %R : CLC%\ : TYA&f : ADC PNT'SCRN!&p : STA S'TEMP6&z : LDA PNT'SCRN1B& : JMP H& ;X&'ATRB'Y b&: CLCl&$: TYA&.: ADC PNT'ATRB&8: STA S'TEMP&B: LDA PNT'ATRB1&L ADC #0&V: LDX #18&`: JSR VDC&j: INX&t: LDA S'TEMP&~: JSR VDC ': JMP VDC«2';'NS'S 6'N. ""v'; "-SNAPSHOT" : "SNAPSHOT" "-SNAPSHOT" : "@SNAPSHOTЍ89z%莏  B  } WITCHER! REEWARE BY DAM ANELLO OF UGOFT - ATURE ESERVE 714-828-7296 RESS - TO SWAP SCREENS, -# TO SWITCH PROGRAM MEMORY. ` 18L&Lɢ^^uIuv. ͮux/  `H)Hhy. } PRG SPACE #h } SELECTED LTR<\|<\|9C14 ; FILE FROM .ASRCE .XDESTK: JSR 'MODEM[: LDX A'REGk: JSR CHKINx$: LDY #0~8;L JSR BA`: STA $400,Yt: LDX IOSTATUS: BNE : INY: BNE ; : DEY ;BACK #255 LAST WITH ID BYTE;A STY SL ;EMBER LAST POS WITH VALID BYTEc(: STX SP ;EMBER EOF STATUSq<: JSR CHwP;x: LDX X'REG ;DESTINATI FILE ID: JSR CKOUT: LDY #0; LDA $400,Y: JSR BSOUT: CPY SL ; JUST WROTE LAST ID BYTE%: BEQ /,: INY;@: BNE AT;O JSR CHg: JSR RESTART'MODEMv: LDA #".": JSR ERPRET'ACC;: LDA SP ; WE HAVN'T HIT THE EOF: BEQ C14 ; AHER BLOCK0: RTSD;<; "-COPY FILE" : "COPY FILE" "-COPY FILE" : "@COPY FILE("HAT D V2.0 BY DAM ANELLOH G(0):1,1:0,1:G5G:%tdCO$"":CO1:CR$(13):CS$" nCM$(5):CM("2200")xLT$"  !#$%&'()*+,-./0123456789:;<=>PRINT@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_߁F}LT$LT$"]EX$CR$""(27)" 2.0"HERE ARE YOUR FILES?"EVICE # 8";DV:DV8DV15"RIVE # 0";DR:DR0DR1 "OMMAND I0";H$8^VS$"MLC.CHATTEXT"X15,DV,15,H$:DSDS$:15:60000:(VS$),U(DV),D(DR)::DSDS$: 3:600I.5:A1:JCMI42(JA)(JA)13:CM$(I)CM$(I)((JA)):AA1:".";IX"";bMN0523l" HAT NGAGED ESSAGE #"((MN21),2)Tv8000:S$CM$(MN):"";:9300CR$" HAT ISENGAGE ESSAGE #"((MN21),2)8000:S$CM$(MN1):"";:9300"MN0:LN21,LN,38,LN,1:1,LN,39,LN:S$CM$(MN):9300:CS$; :A$ A$" "(.)32] (LT$,A$)(S$)39(.)37S$S$A$:" ";:9000:CS$;:n (EX$,A$) A$""A$""S$"": A$(20)(S$)3000  6,1:0,1:" ";:CM$(MN)S$ *(A$CR$MN5)A$(27)1000!4(A$CR$A$"")MN5MNMN1:LNLN42!>A$""MNMNMN1:LNLN4;!H730!"OW HAT?":"ӒAVE NEW HAT-EXT":"ҒESUME DITING":"BORT, ON'T AVE!A$:A$"S"A$""1200!A$"R"A$""600!A$"A"A$""2000!1010""OPYING";2"I042:CM$(I)""CM$(I)CR$(.):".";:^"I152:CM$(I)CR$CM$(I)(.):".";:i"I.5"J1(CM$(I)):CMI42J1,((CM$(I),J,1)):"".";:":"CRATCHING...";"(VS$),U(DV),D(DR):DS19:,DS$"": 6:1000 #(:"AVING...";U#2(VS$),U(DV),D(DR),B0,P(("2200"))P(("22FD")):DS,DS$"": 6:1000b#<"":#"!":"LL CHANGES WILL BE !":"RE YOU URE? (/)"#A$:A$"N"A$""1000#A$"Y"A$"""!":#2010!$ A((S$,1)):S$(S$,(S$)1):BC.T$ A11,LN,38,LN,1:1,LN,39,LN:9300:CS$;:i$ A26RA1:3030$ A3COCO1:9200:C$;:3030$ A4COCO1:9200:C$;:3030$ A9" "CS$;:$ (A31A128)A160" "CS$;:% " "CS$;:r%@"":""38)"":"":%(#(" ",A$)9100,9110,9120,9130,9140,9150,9160%-#BCA("",A$):A6,A:0,A:%2#RACOCO1:9200:A$C$A$ &<#A$;:BC.:&#RA1:!&#RA.::&#COCO1:9200:C$;:S&#COCO1:9200:C$;:^&#BC1:o&#A$"":9020&#A$" ":9020&#C$(CO$,1(CO7),1):&T$CO((.)8):9200:C$;:RA.:6,1:0,1:BC.&^$I1(S$):A$(S$,I,1):9000::&`ւ?':ޜ:"-CHAT ED":"CHAT ED""-CHAT ED":"@CHAT ED":"CHAT ED6 ; OUTPUT A$ ANYPLACE 80X50 SCREEN f; LINE IN .Y, COLUMN IN .X, ATTRIBUTE IN .Al;wC48 : LDY #9 ; A$ O SL,SP, SI: JSR 'VAR'SPECS$;L: LDY Y'REG ;COMPUTE LINE VDC MEMY ADDRESSV: CLC+`: LDA LINE'START'LOW,Y;j: ADC X'REGKt: STA PVARSg: LDA LINE'START'HIGH,Yt: ADC #0: STA PVARS1;: LDX #18 : LDA PVARS1 : A #$10 : JSR VDC ;ATTRIB RAM HIGH BYTE: INX : LDA PVARS : JSR VDC ; " LOWA: LDY SL : BEQ ; (A$)0 Q  LDA A'REGb : JSR VDC2h*;z4: DEY : BNE ;: LDX #18 : LDA PVARS1 : JSR VDC ;SET SCREEN MEM ADDRESS: INX : LDA PVARS : JSR VDC: LDY #0 JSR BLDA: JSR II2SCRN+: JSR VDC2A: INC SI : LDY SIN : CPY SLZ$ : BNE `8 ;j RTSp ;T$II2SCRN ^$: CMP #32 : BCC CVRTZr$: CMP #64 : BCS $: RTS$ CMP #96 : BCS $: #63 : RTS$ CMP #128: BCS  $: #223: RTS, $ CMP #160: BCC CVRTZ@ $: #%01111111U $: A #%01000000` %: RTSs %CVRTZ LDA #" " &%: RTS 0%; ; "-VDC PRINT" : "VDC PRINT""-VDC PRINT":"@VDC PRINT"  4000.G $12FE+.DVI 9:.DVO 9G#.OBJ "@0:MLC.NET64XFER"\(.LST "COMMON.ST"p2.LST "MODEM.ST"<.LST "VARIABLES.ST"d;:.BYT 0 ;FIYPE LY PUNTER:.BYT 13 ;PROCOL # NET64XFER : JMP 'AS'OD ;S USED IN XMODEME: JMP 'AS'BAD ;RECEIVE . USED IN XMODEMK;]$: JMP S'FILEq.: JMP RECV'FILEw3;E: JMP 'AS'OD ;S BATCH EOT. USED IN XMODEML: BRK`NUMB'BLKS .WD $0000 ; USED IN Sj: .WD 128 ;NUMBER OF BYTES PER BLOCK`tMAX'BLKS .WD $FFFF ;MAX 128B BLOCKS MAY RECEIVE. PREVENT DISK FULL ERR:.BYT 0 ;XFER TYPE FLAG: 0GLE, 2MULTI: BRK: JSR PRIMM'BBS' ;PROCOL NAME:. "MODEM/" : BRK: RTS<;x;;MODULE VARIABLES;?SOH 1 ;CTRLAdSTXX 2 ;CTRLBEOT 4 ;CTRLDACK 6 ;CTRLFCNAK 67 ;II CAP "" CRC NAK NAK 21 ;CTRLU3 CAN 24 ;CTRLX (ABT)i PAD 26 ;PADDING ACTER (CTRLZ)o 6; @HIT'EOF $0B ;0 THERE, 0AT EOF JLINEFEED'FLAG $0F ;10INSERT A LINEFEED !TCRC'MODE $10 ;0CHECKSUM, 0CRCM!^CAN'COUNT $2A ;NUMBER OF CANS RECEIVED IN A ROW!hBLOCK $2B ;CURRENT LOCAL BLOCK NUMBER!rCOMP $2C ;CURRENT LOCAL COMP NUMBER"|CRC $3F;$40 ;CALCULATED CRC CHECKSUM UE7"BLK'SIZE $54 ;0NE, 1128B, 21024Bk"'SIZE $5A ;0NE, 1128B, 21024B"OD'COUNT $12D0;D1 ;TAL OD BLOCKS"BAD'COUNT $12D2;D3 ;TAL BAD BLOCKS#NEAR' $12D4 ;0, 1NEAR OF FILESWITCH 128B BLKS<#'STATUS $200 ;0OD, 0BADn#XBUFFER1 $0400 ;BLOCK S BUFFER#bBUFFER2 $1E00 ;BLOCK BUFFER#;#TRANS'FLAG $9F ; TRANSLATE FLAG# ;# INITIALIZE'VARS $ : LDX #0*$ : STX HIT'EOF ;HIT'EOF0Z$ : STX LINEFEED'FLAG ;LINEFEED'FLAG0$ : STX CAN'COUNT ;CAN'COUNT0$ : LDA #0$ : STA BLOCK ;BLOCK0$& : LDA #255$0 : STA COMP ;COMP255%5 : STX BLK'SIZE ;BLK'SIZE0G%: : STX 'SIZE ;PREV'SIZE0r%D : STX OD'COUNT ;OD'COUNT0%N : STX OD'COUNT1%X : STX BAD'COUNT ;BAD'COUNT0%b : STX BAD'COUNT1%l : STX NEAR' ;NEAR'0& : STX CRC'MODE ;CRC'MODE0&& : RTS,& ;2& ;e&INC'OD'COUNT ; INC OD COUNT k&;&: INC OD'COUNT ;OD'COUNT&: BNE &: INC OD'COUNT1&;& JSR CH': LDA #6 ;SET CURS 6TH COLUMN',: STA NOWCOLUMN<'@: LDA OD'COUNT1 ; ODP'T: LDX OD'COUNT`'h: JMP $8E32f'|;l'&;'INC'BAD'COUNT ; INC BAD COUNT ';': INC BAD'COUNT ;BAD'COUNT': BNE ': INC BAD'COUNT1';( JSR CH@( : LDA #20 ;SET CURS 20TH COLUMNT( : STA NOWCOLUMNz(4: LDA BAD'COUNT1 ; BAD(H: LDX BAD'COUNT(\: JMP $8E32(f;(SET'MODEM'IO ; SET'MODEM'IO (: LDX #5(: JSR CKOUT): LDX #5): JMP CHKIN);,)'S'128B'BLOCK 2)$';I)8': JSR SET'MODEM'IOo)L': LDA #SOH ;S SOH)`': JSR MODEM'PUTBYTE)t': LDA BLOCK ;S BLOCK #)~': JSR MODEM'PUTBYTE)': LDA COMP ;S COMP # *': JSR MODEM'PUTBYTE*';*': LDY #0B*': STY CRC ;CRC0R*(: STY CRC1* (;;STY SI ;INIT COUNTER INDEX*((;*<(SB128 ;MAIN REPEATS 128 TIMES*x(;;LDY SI+(: LDA BUFFER1,Y ; A BYTE FROM THE S BUFFER0+(: INY ;;STY SI ;INC INDEXa+(: JSR MODEM'PUTBYTE ;TRANSMIT THE BYTEg+(;+(: LDX CRC'MODE ; CRC MODE+(: BNE +): CLC ; CALC SUM+): ADC CRC+,): STA CRC+@): JMP SB128+T);%,h) E CRC : TAX ; CALC CRC?,|): LDA CRC'TABLE'MSB,XN,): E CRC1\,): STA CRCv,): LDA CRC'TABLE'LSB,X,): STA CRC1,);,0*SB128 ,:*: CPY #128 ; 128 BYTES RECEIVED,D*: BNE SB128,X*;-l*;;JSR CLEAR'RBUFFER ;PREVENT PATURE SIGNALS$-*;c-*: LDA CRC ;S CHECKSUM FIRST BYTE OF CRC{-*: JSR MODEM'PUTBYTE-*;-*: LDX CRC'MODE ; IN CRC MODE- +: BEQ -4+;-\+: LDA CRC1 ; S SECD BYTE OF CRC.p+: JSR MODEM'PUTBYTE.+;.+ RTS$.+;8. N'128B'BLOCK g.4N: LDX #2 ;SET FILE #2w.HN: JSR CHKIN}.\N;.pN: LDX #1.N: STX 'SIZE ;SIZEOF THIS BLOCK IS #1 (128B).N: DEX;#0.N;/8O: JSR '128B'RANS ; FROM DISK WITHOUT MODICATI/BO;%/O: JSR CHU/O: JMP RESTART'MODEM ;RESTART SWTLINK[/ P;o/R'128B'RANS }/R JSR BA/R: STA BUFFER2,X/0R: LDA IOSTATUS/:R: BNE EOF'128B/DR: INX/XR: CPX #128/lR: BNE /R: RTS/R;/YEOF'128B 0Y: INX0Y: LDA #PAD)0Z STA BUFFER2,X30Z: INXB0(Z: CPX #128N0\: LDA #$0F ;SET TIMEOUT 1 MINUTE >p: STA DJFY2>: STA DJFY1I>: JSR SET'MODEM'IOO>;n>START'SIGNAL' ;t>Ԩ;>: JSR IN'>;>$: CMP #CAN ; CAN SIGNAL>.: BNE >8: LDX CAN'COUNT ; THE FIRST E?L: BNE START'SIG'ABT ; ABTU?`: INC CAN'COUNT ; FLAG A CAN RECEIVED?t; . ; INUE? CMP #NAK ; NAK SIGNAL?: BNE ?: LDA #0 ; CRC'MODECHECKSUM@ĩ: STA CRC'MODE ; @ɩ: CLC*@Ω: RTS0@;]@쩪 CMP #CNAK ; CNAK SIGNALi@: BNE @ : LDA #1 ; CRC'MODECRC@: STA CRC'MODE@: CLC@(: RTS ; @F;AP LDA SHFLAG ; C PRESSEDAd: CMP #2DAx: BEQ START'SIG'ABT ; ABTJA;vA LDA DJFY1 ; TIMED OUTAȪ: BNE START'SIGNAL' ; BACK UPA;ASTART'SIG'ABT A,: SEC ; BADA@: RTSAh;&BȯS'EOT ; S EOT SIGNAL ,Bͯ;eBү: LDA #8 ;TRY S EOT UP 8 TIMESwBܯ: STA HIT'EOF}B;BS'EOT'AGAIN B;B: JSR SET'MODEM'IOB: LDA #EOTB: JSR MODEM'PUTBYTEB";C,: LDA #$08 ;SET TIMEOUT 30 SECDS"C@: STA DJFY4CT: STA DJFY1:C|;YCEOT'SIGNAL' ;_C;nC: JSR IN'tC̰;C: CMP #CAN ; CAN SIGNALC: BEQ EOT' ; FINECD;CX: CMP #ACK ; ACK SIGNAL Dl: BEQ EOT' ; FINE&D;RD: CMP #NAK ; NAK SIGNAL|DƱ: BEQ RES'EOT ; RES EOTDڱ;D: LDA SHFLAG ; C PRESSEDD: CMP #2D: BEQ EOT' ; FINED;E : LDA DJFY1 ; TIMED OUT>E4: BNE EOT'SIGNAL' ; BACK UPDE\;TERES'EOT E: HIT'EOF ;яENT COUNT OF NUMBER OF TIMES TO SEND EOTE: BNE S'EOT'AGAIN ; RAN OUT OF TRIES, JUST IT E;EEOT' F: JMP 'AS'ODFB;NF.BUF 1 ;ADJUST THIS BEE RELEASE PUT TABLES IN PAGESF0;CRC TABLES HILO CRC EACH BYTE (0 THRU 255)F:;FDCRC'TABLE'LSB FN.BYTE $00,$21,$42,$63,$84,$A5,$C6,$E7FX.BYTE $08,$29,$4A,$6B,$8C,$AD,$CE,$EFGb.BYTE $31,$10,$73,$52,$B5,$94,$F7,$D6GGl.BYTE $39,$18,$7B,$5A,$BD,$9C,$FF,$DEqGv.BYTE $62,$43,$20,$01,$E6,$C7,$A4,$85G.BYTE $6A,$4B,$28,$09,$EE,$CF,$AC,$8DG.BYTE $53,$72,$11,$30,$D7,$F6,$95,$B4G.BYTE $5B,$7A,$19,$38,$DF,$FE,$9D,$BCH.BYTE $C4,$E5,$86,$A7,$40,$61,$02,$23CH.BYTE $CC,$ED,$8E,$AF,$48,$69,$0A,$2BmH.BYTE $F5,$D4,$B7,$96,$71,$50,$33,$12H.BYTE $FD,$DC,$BF,$9E,$79,$58,$3B,$1AH.BYTE $A6,$87,$E4,$C5,$22,$03,$60,$41H.BYTE $AE,$8F,$EC,$CD,$2A,$0B,$68,$49I.BYTE $97,$B6,$D5,$F4,$13,$32,$51,$70?I.BYTE $9F,$BE,$DD,$FC,$1B,$3A,$59,$78iI.BYTE $88,$A9,$CA,$EB,$0C,$2D,$4E,$6FI.BYTE $80,$A1,$C2,$E3,$04,$25,$46,$67I.BYTE $B9,$98,$FB,$DA,$3D,$1C,$7F,$5EI .BYTE $B1,$90,$F3,$D2,$35,$14,$77,$56J.BYTE $EA,$CB,$A8,$89,$6E,$4F,$2C,$0D;J .BYTE $E2,$C3,$A0,$81,$66,$47,$24,$05eJ*.BYTE $DB,$FA,$99,$B8,$5F,$7E,$1D,$3CJ4.BYTE $D3,$F2,$91,$B0,$57,$76,$15,$34J>.BYTE $4C,$6D,$0E,$2F,$C8,$E9,$8A,$ABJH.BYTE $44,$65,$06,$27,$C0,$E1,$82,$A3 KR.BYTE $7D,$5C,$3F,$1E,$F9,$D8,$BB,$9A7K\.BYTE $75,$54,$37,$16,$F1,$D0,$B3,$92aKf.BYTE $2E,$0F,$6C,$4D,$AA,$8B,$E8,$C9Kp.BYTE $26,$07,$64,$45,$A2,$83,$E0,$C1Kz.BYTE $1F,$3E,$5D,$7C,$9B,$BA,$D9,$F8K.BYTE $17,$36,$55,$74,$93,$B2,$D1,$F0K;KCRC'TABLE'MSB %L.BYTE $00,$10,$20,$30,$40,$50,$60,$70OL.BYTE $81,$91,$A1,$B1,$C1,$D1,$E1,$F1yL.BYTE $12,$02,$32,$22,$52,$42,$72,$62L.BYTE $93,$83,$B3,$A3,$D3,$C3,$F3,$E3L.BYTE $24,$34,$04,$14,$64,$74,$44,$54L.BYTE $A5,$B5,$85,$95,$E5,$F5,$C5,$D5!M.BYTE $36,$26,$16,$06,$76,$66,$56,$46KM.BYTE $B7,$A7,$97,$87,$F7,$E7,$D7,$C7uM.BYTE $48,$58,$68,$78,$08,$18,$28,$38M.BYTE $C9,$D9,$E9,$F9,$89,$99,$A9,$B9M.BYTE $5A,$4A,$7A,$6A,$1A,$0A,$3A,$2AM.BYTE $DB,$CB,$FB,$EB,$9B,$8B,$BB,$ABN.BYTE $6C,$7C,$4C,$5C,$2C,$3C,$0C,$1CGN$.BYTE $ED,$FD,$CD,$DD,$AD,$BD,$8D,$9DqN..BYTE $7E,$6E,$5E,$4E,$3E,$2E,$1E,$0EN8.BYTE $FF,$EF,$DF,$CF,$BF,$AF,$9F,$8FNB.BYTE $91,$81,$B1,$A1,$D1,$C1,$F1,$E1NL.BYTE $10,$00,$30,$20,$50,$40,$70,$60OV.BYTE $83,$93,$A3,$B3,$C3,$D3,$E3,$F3CO`.BYTE $02,$12,$22,$32,$42,$52,$62,$72mOj.BYTE $B5,$A5,$95,$85,$F5,$E5,$D5,$C5Ot.BYTE $34,$24,$14,$04,$74,$64,$54,$44O~.BYTE $A7,$B7,$87,$97,$E7,$F7,$C7,$D7O.BYTE $26,$36,$06,$16,$66,$76,$46,$56P.BYTE $D9,$C9,$F9,$E9,$99,$89,$B9,$A9?P.BYTE $58,$48,$78,$68,$18,$08,$38,$28iP.BYTE $CB,$DB,$EB,$FB,$8B,$9B,$AB,$BBP.BYTE $4A,$5A,$6A,$7A,$0A,$1A,$2A,$3AP.BYTE $FD,$ED,$DD,$CD,$BD,$AD,$9D,$8DP.BYTE $7C,$6C,$5C,$4C,$3C,$2C,$1C,$0CQ.BYTE $EF,$FF,$CF,$DF,$AF,$BF,$8F,$9F;Q.BYTE $6E,$7E,$4E,$5E,$2E,$3E,$0E,$1EAQ;Q; "-NET64XFER":"NET64XFER""-NET64XFER":"@NET64XFER 4000.DVO 99 ; VARIABLES ?;|'LITE 0 ;0 CENTIPEDE LITE LEAVE STUFF OUT(;jA'REG $06kX'REG $07lY'REG $08TXTTAB $2D ;START OF BASIC VARTAB $2F ;START OF VARIABLES 8VARS'START $2F ; "gVARS' $31 ; OF NARRAY VARIABLESARYTAB $31 ;START OF ARRAYS ARRAYS'START $31 ; "ARRAYS' $33 ; OF ARRAYSSTR $33 ;LOWEST ADDRESS STRINGS ( OF ARRAYS)GP $35 ;BOTM OF STRING POOL BEING USEDxTXTPTR $3D ; O BASIC CODE CHRVARNAME $47 ;CURRENT VARIABLE NAMEVARPNT $49 ; CURRENT VARIABLE DESCRIPR,FAC1 $63 ;FLOATING PO ACCUMULAR #17-PNT $63 ;RARY k6FAC2 $6A ;FLOATING PO ACCUMULAR #2^S $7D ;BASIC TIME STACK PVARS $83 ;PANEL VARIABLES: $8389SL $8B ;STRING GTH SP $8C ;STRING 7 SI $8E ;STRING INDEXL MAXCOL2 $8Fw IOSTATUS $90 ;SERIAL BUS STATUS CHROUT'XREG $92 ;EMBER .X DURING CHROUT'BBS CHROUT'YREG $96 ;EMBER .Y DURING CHROUT'BBS!&JFY'CLOCK $A0 ;$A0 IS HIGH, $A2 IS LOWB!N'ADDRESS $AE ; ADDRESS OF KERNAL & q!XBUFF'DUMP $B0 ;LINE BUFFER DUMP !bOL'BUFF $B2 ;LINE BUFFER EOF !gTCOUNT $B4 ;COUNT OF BYTES IN SWTLINK RECV BUFFER"iRCOUNT $B6 ;COUNT OF BYTES IN SWTLINK S BUFFERO"vMCI'COUNT $C0 ;# ID S IN MCI' BUFFER"RHEAD $C8 ; HEAD OF SWTLINK RECV BUFFER"RTAIL $C9 ; TAIL OF SWTLINK RECV BUFFER"THEAD $CA ; HEAD OF SWTLINK S BUFFER7#TTAIL $CB ; TAIL OF SWTLINK S BUFFERn#INBUFF $D0 ;NUMBER OF S IN BOARD BUFFER#SHFLAG $D3 ;SHT STATUS FLAG#TEXT'PNTR $E0 ; CURRENT TEXTSCRN LINE$'PNTR $E2 ; CURRENT ATTRIBUTE LINE*$SCBOT $E4 ; LOWER LIMITQ$SCP $E5 ; UPPER LIMITx$SCLF $E6 ; LEFT LIMIT$SCRT $E7 ; RIGHT LIMIT$NOWLINE $EB ;CURRENT SCREEN LINE$NOWCOLUMN $EC ;CURRENT SCREEN COLUMN&%LINES $ED ;MAX # ROWS IN S%COLUMNS $EE ;MAX # COLUMNS IN %X =$EF ;CURRENT CHAR TO PRINT FOR CHROUT'BBS%LSTCHR $F0 ;PREVIOUS ED% $F1 ;CURRENT &T $F2 ;RARY SRAGE IN CHROUT'BBS7&RVS $F3 ;REVERSE MODE FLAG`&QTSW $F4 ;QUOTE MODE FLAG&INSRT $F5 ;DING INSERTS& FBUFFER $100 ;UE STRING FPII&BUF $200 ;MISC BUFFER'MCI' $280 ;MCI COMM BUFFER('IERR $300 ;BASIC ERR VECRN'KBBUFF $34A ;BOARD BUFFERt'LNKMAP $35E ;LINE LINK MAP'xCHR $380 ; BYTE OF BASIC CODE'}CHRT $386 ; LAST BYTE OF BASIC CODE(@'NOW $3DB ;4 8 CURRENT SIM40C SIZE-(ERAIN $3DC ;RAINBOW MODE FLAGm(OLAST'MCI'TEST $3DE;RESULT OF LAST CDITIAL EUATED BY MCI(ENABL $A0F ;RS232 ACTIVITY FLAG(RSSTAT $A14 ;RS232 STATUS(RIDBE $A18 ;RS232 OF BUFFER)RIDBS $A19 ;RS232 START OF BUFFERT)RODBS $A1A ;RS232 START OF OUTPUT BUFFER)RODBE $A1B ;RS232 OF OUTPUT BUFFER)DJFY $A1D ;REVERSE JFYTIMER)SPEED $A37 ;TEMP SRAGE CPU SPEED* CHATFLAG $A39 ;CHATMODE FLAG. 1IN CHAT, 00* S $A6E ;TEM Sc* FIAME'TABLE $B00 ;TABLE OF MODULES IN MEMY* FIAME'HIDDEN $B50 ;TABLE OF MODULES HIDDEN IN MEMY*<MCI'ENABLE $BFF ;MCI ERPRET FLAG. 0$*RBUFF $C00 ;RS232 RECEIVE BUFFER)+TBUFF $D00 ;RS232 TRANSMIT BUFFERd+OP'AVAILABLE $1131;OP AVAILABLE CHAT. 0YES, 1NO~+; $1132+CHATTEXT'INDEX $1133 ;CHATTEXT +HIDDEN'ADDRESS $1134 ;EMBER WHERE CHANGED LINK WAS WHEN HIDING BASIC',HIDDEN'UE $1136 ;EMBER WHAT CHANGED LINK WAS\,LTK'PT $1138 ;LTK PT NUMBER, 0 NO LTK,LTK'LU9 $1139 ;LTK WITH LU9 PRESENT, 9YES, 0NO,BB $113F ;LOCALBUFFER VARIABLES,BUFF'STAT $1146 ;LOCALBUFFER STATUS9-LAST'C8'STYLE $1147 ;USED REPEAT LINE AFTER A ROLXn-SPACECOL $1148 ;INDEX LOCATI SHT IN C8-IN'SPEEDY $1149 ;CURRENTLY IN SPEEDY ROUTINE0. CHECKED BY CHATMODE-PNWHOWLG $116C ;NETWK TIMEOUT PERIOD.dNWIRQFLAG $1170 ;NETWK IRQ ENABLE FLAGD.fNWCOUNTER $1172 ;NETWK TIMEOUT COUNTERu.PAUSE'NMAL $1177 ;ܫPAUSE GTH WHEN $.PAUSE'GTH $1178 ;ܫPAUSE SCREEN GTH, 0$.PAUSE'COUNT $1179 ;ܫPAUSE LINE COUNT/|CHKIN' $11EE ;SHTCUT CHKIN THAT SKIPS LTK WEDGE0/CKOUT' $11F1 ; "J/CH' $11F4 ; "f/BSOUT' $11F7 ; "/IN' $11FA ; "/TEXT'P $1210 ; OF BASIC PROGRAM /tERPRET'ACC' $2500 ;OUTPUT IN ACC0vPANEL'SWITCH' $2503 ;GGLE VIEWPANEL $/0'' $2518 ; c0PRIMM'BBS' $251B ;PRIMM ERPRET'ACC0STRINUT' $251E ;OUTPUT STRING AT SP0SET'CURS' $2521 ;SET CURS LINE .Y, COLUMN .X0ERPRET'' $2524 ;OUTPUT IN A'21ERPRET'TEXT' $2527 ;OUTPUT TEXT IN A'f1CHROUT'BBS' $252A ;OUTPUT ACC SCREEN1XFAC2 $84B4 ;CVERT FAC EGER P2281[2FAC $793C ;CVERT EGER FAC1^FAC2II $8E42 ;CVERT FAC II IN FBUFFER'2FAC2ADRS $AF0C ;CVERT FAC ADDRESS IN $1617g2VAR2FAC $AF60 ;MOVE VAR AT ADDRESS FAC, S IN RAM #12@VDC $CDCC ; A UE O A VDC REGISTER2JVDC $CDDA ; A VDC REGISTER2(# $FF00 ;SRE MEMY CFIGURATI HERE3*#15  ;SRE A 0 HERE  1553-#0 $FF01 ;FULL RAM 0U30#1 $FF02 ;FULL RAM 134#14 $FF03 ;RAM0, BASICKERNAL ROM, NO IO37#RAM1ROM $403<#1B $FF04 ;RAM1 & BASIC ROM3#BSOUT $FFD23#BA $FFCF4#CHKIN $FFC64#CKOUT $FFC9-4#CH $FFCCA4#IN $FFE4W4$RDTIM $FFDEm4$PRIMM $FF7D4$SETLFS $FFBA4 $SETNAM $FFBD4$SETBNK $FF684$K $FFD54$K $FFD84$K $FFC04$K $FFC35';45'SKIP'BYTE $24 ;USE BIT UCTI SKIP A BYTEf5'SKIP'WD $2C ;USE BIT UCTI SKIP A WDl5N;5 NVARSTART $3800 ;START OF BASIC VARIABLES IN  15!N;5_;5`.SST "@0:VARIABLES.ST" 6; "-VARIABLES" : "VARIABLES" "-VARIABLES" : "@VARIABLES  4000=; COMMORE GFX TRANSLATI ROUTINS C;Q2.G $3800c7.DVO 9:.DVI 9<.OBJ "@0:MLC.COMMODORE"F;d.LST "VARIABLES.ST"x.LST "MODEM.ST".LST "C-ARRAY.ST".P;TRANS'INIT JMP TRANS'INIT2 ;INITIALIZE COMMORE GFX MODETTRANS'UN JMP TRANS'UN2 ; COMMORE GFX MODETRANS'BOARD JMP TRANS'BOARD2 ; FROM BOARDTRANS' JMP TRANS'2 ;TRANSLATE FROM MODEM BBS TRANS'OUTPUT JMP TRANS'OUTPUT2 ;TRANSLATE FROM BBS MODEMMTRANS'EOL RTS:RTS:RTS ;HING SPECIAL OFLINETRANS'RECEIVED JMP TRANS'RECEIVED2 ;USED XFER PROCOL TRANSLATI$TRANS'S JMP TRANS'S2 ; "B;LTRANS'NAME V: JSR PRIMM'BBS'`:. "OMMODORE" : BRK t: RTS;0.SST "@0:TRANSLATION.ST"6;ITRANS'INIT2 ^: JSR PRIMM'BBS'y:. "": .BYT 13,0&: LDA #1 : STA C22 ;CG MODE 0: LDA #0 : STA ANSIMODE ;ANSI $X: RTSb;lTRANS'UN2  v: JSR TRANS'INIT2 : LDA #0= : STA C22 ;CG MODE $G : RTSM ; 4TRANS'BOARD2 ; ACTER ENTERED FROM OP'S BOARD 9. 0 >: LDX GRFX'UT,Y H: LDA GRFX'TIN,X R: LDY C22 ; GFX MODE2, NO CURS CHANGING!\: CPY #2!f: BEQ LIMIT'!p: RTS%!z;-!.E^! TRANS'2 ;TRANSLATE FROM MODEM BBSs! : LDA GRFX'TIN,Y! : CMP #27! : BEQ ESC'! : LDY C22 ; GFX MODE2, NO CURS CHANGING! : CPY #2! : BCS LIMIT'!& : RTS!: ; " ESC' " : LDA #1%" : STA P'2" : LDA #0<"4 : RTSB"> ;Q" LIMIT' [" : TAYs" : LDA LIMIT'TABLE,Y}" : RTS"<;"TRANS'OUTPUT2 ;TRANSLATE FROM BBS MODEM": CPY #"" ; F, SKIP": BEQ ";"TRANS'S2 #: LDA GRFX'UT,Y#: RTS##h;Z# LDX #5 ;TURN $ FLASHING UNDERLININGj#: JSR CKOUT#: LDA #"" : JSR BSOUT'#: LDA #"" : JSR BSOUT'#: JSR CH'#0: LDA ;TURN ATTRIBUTES $ LOCALY#:: #%11001111#D: STA $N: RTS7$TRANS'RECEIVED2 ;E4E TRANSLATI L$: LDA GRFX'TIN,YV$: RTS\$;s$.; GRFX IN $.GRFX'TIN $..BYT $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$00,$00,$00,$0D,$00,$0F%..BYT $00,$11,$12,$00,$14,$00,$00,$17,$00,$00,$1A,$1B,$1C,$1D,$1E,$1F^%..BYT $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2A,$2B,$2C,$2D,$2E,$2F%/.BYT $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3A,$3B,$3C,$3D,$3E,$3F%/.BYT $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E,$4F9&/.BYT $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5A,$5B,$5C,$5D,$5E,$5F&&/.BYT $60,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$CB,$CC,$CD,$CE,$CF&0/.BYT $D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,$D8,$D9,$DA,$7B,$7C,$7D,$7E,$7F':/.BYT $00,$81,$00,$00,"?",$00,$00,$00,$00,$00,$00,$00,$00,$8D,$00,$8F]'D/.BYT $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9A,$9B,$9C,$9D,$9E,$9F'N/.BYT $20,$A1,$A2,$A3,$A4,$A5,$A6,$A7,$A8,$A9,$AA,$AB,$AC,$AD,$AE,$AF'X/.BYT $B0,$B1,$B2,$B3,$B4,$B5,$B6,$B7,$B8,$B9,$BA,$BB,$BC,$BD,$BE,$BF8(b/.BYT $60,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$CB,$CC,$CD,$CE,$CF(l/.BYT $D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,$D8,$D9,$DA,$DB,$DC,$DD,$DE,$DF(v/.BYT $A0,$A1,$A2,$A3,$A4,$A5,$A6,$A7,$A8,$A9,$AA,$AB,$AC,$AD,$AE,$AF)/.BYT $B0,$B1,$B2,$B3,$B4,$B5,$B6,$B7,$B8,$B9,$BA,$BB,$BC,$BD,$BE,$7E+)2; GRFX OUT ;)2GRFX'UT )2.BYT $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F)2.BYT $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1A,$1B,$1C,$1D,$1E,$1F*2.BYT $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2A,$2B,$2C,$2D,$2E,$2F_*2.BYT $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3A,$3B,$3C,$3D,$3E,$3F*2.BYT $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E,$4F*3.BYT $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5A,$5B,$5C,$5D,$5E,$5F:+3.BYT $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6A,$6B,$6C,$6D,$6E,$6F+3.BYT $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7A,$7B,$7C,$7D,$7E,$7F+"3.BYT $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8A,$8B,$8C,$8D,$8E,$8F,,3.BYT $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9A,$9B,$9C,$9D,$9E,$9F^,63.BYT $20,$A1,$A2,$A3,$A4,$A5,$A6,$A7,$A8,$A9,$AA,$AB,$AC,$AD,$AE,$AF,@3.BYT $B0,$B1,$B2,$B3,$B4,$B5,$B6,$B7,$B8,$B9,$BA,$BB,$BC,$BD,$BE,$BF,J3.BYT $C0,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$CB,$CC,$CD,$CE,$CF9-T3.BYT $D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,$D8,$D9,$DA,$DB,$DC,$DD,$DE,$DF-^3.BYT $E0,$E1,$E2,$E3,$E4,$E5,$E6,$E7,$E8,$E9,$EA,$EB,$EC,$ED,$EE,$EF-h3.BYT $F0,$F1,$F2,$F3,$F4,$F5,$F6,$F7,$F8,$F9,$FA,$FB,$FC,$FD,$FE,$FF-:; LIMITED IN -:LIMIT'TABLE A.:.BYT $00,$00,$00,$00,$00,$00,$00,$00,$00,$09,$00,$0B,$00,$0D,$00,$00.:.BYT $00,$00,$00,$00,$14,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00.:.BYT $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2A,$2B,$2C,$2D,$2E,$2F/:.BYT $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3A,$3B,$3C,$3D,$3E,$3Fe/:.BYT $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E,$4F/:.BYT $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5A,$5B,$5C,$5D,$5E,$5F/:.BYT $60,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$CB,$CC,$CD,$CE,$CF@0:.BYT $D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,$D8,$D9,$DA,$00,$00,$00,$00,$000:.BYT $00,$00,$00,$00,"?",$00,$00,$00,$00,$00,$00,$00,$00,$8D,$00,$000:.BYT $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$001;.BYT $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00d1;.BYT $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$001;.BYT $60,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$CB,$CC,$CD,$CE,$CF1$;.BYT $D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7,$D8,$D9,$DA,$DB,$DC,$DD,$DE,$DF?2.;.BYT $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0028;.BYT $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$002; "-COMMODORE" : "COMMODORE""-COMMODORE" : "@COMMODORE"D ; THIS CODE IS SEPERATED PUT IN ADDRESS $12B712FC SO THATz; THE MULTIPUNTER PROCOL ES FUN OVER $1A00;NUM : STY Y'REG ;TYA:PHA: JSR 'ING: BEQ 1: JSR MODEM'BYTE: STA LASTCH: LDY #0 : STY STAT>: JMP RTS H1 -R: LDA #2<\: STA STATIf: LDA #0Zp: STA LASTCH`;lRTS y: LDY #3: STY $9A ;CURRENT OUTPUT DEVICE SCREEN: LDY Y'REG ;PLA:TAY: RTS;; S A CODE;SCODE  : LDX #0 ;#3 SN1 ($ : LDA CODES,Y@. : JSR MODEM'PUTBYTEJ8 : INY]B : INX ;DEXrL : CPX #3 ;BLANKV : BNE SN1` : RTS; "-PUNTER/LO" : "PUNTER/LO" "-PUNTER/LO" : "@PUNTER/LO  4000.G $1A00-;*d.DVI 9Bn.LST "VARIABLES.ST"Xx.LST "C-ARRAY.ST"c.DVO 9.OBJ "@0:MLC.SWIFTLINK"0;Z#SL =$DE00 ;CAN BE $DE00,$DF00,$D700d#SLSTATUS SL+1n#SLCOMM SLSTATUS1x#SLROL SLCOMM1}#SHANCE SL+7#;_#DISABLE'ACIA %00000011 ;SRE IN COMM REG DISABLE ACIA ERRUPTS#RECV' %00001001 ;SRE IN COMM REG ENABLE RECV ERRUPTS#'FLOW %00000001 ;SRE IN COMM REG ASSERT RTS FLOW ROL.#ENABLE'FLOW %00001001 ;SRE IN COMM REG ENABLE FLOW AGAIN4#;:';P'MODEM'PUTBYTE PHAk': JMP OUTA*MODEM'INIT JMP INITIALIZE+MODEM'PED BRK ;0, 0 YES+FLOW'PED BRK ;0, $FF YES RTS FLOW SIGNAL ASSERTED +SET'BAUD JMP DSET'BAUDA+CHECK'CARRIER JMP CHK'CARRIERb+PRO'CARRIER JMP INV'CARRIER +'ING JMP CHECK'BUFF'IN%+CLEAR'RBUFFER JMP CLEAR'RBUFF*+MODEM'BYTE JMP SL'BYTE4+'MODEM JMP SL'9+RESTART'MODEM JMP SL'R+;' \+CHECK'BUFF'IN ;BNE 'ING BEQ NO'8 f+: LDA RCOUNTB z+: RTSH +; +CHK'CARRIER ;BNE CARRIER'DETECTED BEQ NO'CARRIER +: LDA SLSTATUS:LSR:LSR +: #16 +: CMP C12 +: RTS +;!$,INV'CARRIER ;CHECK CARRIER USED IN XFER PROCALSF!.,: LDA SLSTATUS ;BEQ CARRIER'DETECTED BNE NO'CARRIERT!3,: LSR:LSR`!8,: #16!B,: CMP 989 ;INVERSE CARRIER!L,: RTS!V,;!,CLEAR'RBUFF !,: LDA #0!,;;;;;;;;;;; TWICE, IN CASE AN NMI RECV ERRUPTS E",: STA RHEAD : STA RTAIL : STA RCOUNT9",: STA RHEAD : STA RTAIL : STA RCOUNT?",;^",;;;;;;;;;;;CHECK FLOW ROLr",: LDA FLOW'PED~"-: BEQ " -: LDA #ENABLE'FLOW ;REENABLE FLOW"-: STA SLCOMM"-: LDA #0"(-: STA FLOW'PED%#<-: JMP TRY''S ;NOW THAT TRANSMITTER IS , TRY SING ANY BUFFERED/#P- RTS5#Z-;n# NSL' ; REENABLE FLOW AFTER DISK IO #HN: LDA MODEM'PED ; ALY (0) USER PED(1)#RN: BPL SL'IS' ; SKIP#\N;#pN: LDA #0#zN: STA MODEM'PED#N: SEI:$N: JSR SL''CFIRM ; RECVED JUST BEE FLOW WAS PED@$N;$N: LDA FLOW'PED ; FLOW IS STILL PED THOUGH, DUE $N: BNE SL'IS' ; A FULL RECV BUFFER, N'T REENABLE!%N: LDA #RECV' ;TURN RECEIVER ERRUPTS TRANSMITTER%N: STA SLCOMM%N;Z%O: JSR SL''CFIRM ;CHECK RECV A IN RACE CDITI`%$O;o%LOSL'IS' y%`O: CLI%tO: RTS%O;%RSL' ; FLOW DURING DISK IO %0R: LDA MODEM'PED ; ALY PED(!0) &DR: BNE SL'IS'D ; SKIP&XR;A&bR: LDA #128 ;SET D FLAG.DISKV&R: STA MODEM'PED`&R: SEI&R: LDA #'FLOW ;ASSERT RTS FLOW ROL&R: STA SLCOMM& S;&4S: LDX #20 ; EDGE CDITIS AFTER DROPPING RTS&HS DEX : BNE '\S;='pS: LDA #DISABLE'ACIA ;DISABLE RECEIVE ERRUPTSO'S: STA SLCOMM{'S: JSR SL''CFIRM ;TRY RECEIVING 'S: LDX #50 ; THE MODEM BELIEVE THE RTS DROP'S DEX : BNE ;FUDGE FACR MAY NEED ADJUST*(S: JSR SL''CFIRM ;TRY RECEIVING 4(S: CLI:(S;J(SSL'IS'D }($T RTS ; CALLED FROM BELOW(VT;(UTRY''S (U; S AS MANY TBUFF S AS SIBLE EITHER TBUFF IS EMPTY(V; FLOW ROL IS REASSERTED(V;%)V: LDA TCOUNT ; TBUFF IS EMPTY, I),V: BEQ ;(BACK RTS)O)@V;x)^V BIT FLOW'PED ; FLOW IS PED, )hV: BMI ;(BACK RTS))|V: LDA MODEM'PED; MODEM IS PED, )V: BNE ;(BACK RTS))V: LDA SLSTATUS-*V: #%00010000 ; TRANSMITTER BE Y9*V: BEQ ?*V;O*V: LDY THEADa*V: LDA TBUFF,Y*V: STA SL ;SEND THE CHAR*W;*W: INC THEAD*0W: TCOUNT*DW: JMP TRY''S ;SEE THERE IS ME S*W;*]'IN +]: LDA $D4 ;CHECK 'LF' PRESSED'+]: CMP #757+]: BNE f+];; LDA $2403 ;LY RAMS IS ACTIVEy+];; CMP #$52+];; BEQ +]: JSR PANEL'SWITCH'+$^ LDA $99 ;CHECK FROM SWTLINK+.^: CMP #2+8^: BNE K'IN+B^;,^SL'BYTE D,^: LDA RCOUNT ; HING IN BUFFER, SKIP NOR,^: BEQ NOX,^;w,^: STY $97 ;SRE .Y,^: LDA RSSTAT : #$F7 : STA RSSTAT ;SET FLAG BY CLEARING BIT 3,_;,_: LDY RHEAD,(_: LDA RBUFF,Y ; OUT BUFFER-<_: PHA,-P_: INC RHEAD ;INCREASE HEAD ]-d_: RCOUNT ;REASE # OF BYTES IN BUFFERc-x_;~-_; CHECK FLOW ROL -_;-_: LDA FLOW'PED-_: BEQ ; PED, SKIP-_: LDA RCOUNT ; FLOW IS PED.-._: CMP #10 ; 10 S STILL IN BUFFER\.`: BCS ; KEEP IT PED.`: LDA #ENABLE'FLOW ; REENABLE FLOW.,`: STA SLCOMM.@`: LDA #0.T`: STA FLOW'PED/^`: JSR TRY''S ;NOW THAT TRANSMITTER IS , S ANY BUFFERED /h`;-/|` LDY $97 ; OLD .Y=/`: PLA : CLCG/`: RTSM/`;X/`NO =*b/`: CLC/a: LDA RSSTAT : JMP $E7E4 ;A #8:STA RSSTAT:LDA #0:RTS/a;/DaK'IN /Xa: JMP $FFFF/la;/a'BA /a: LDA $990a: CMP #2 ; FROM MODEM00a: BNE K'BA ; , SKIP OLD BA60a;c0a LDA RCOUNT ; SOMETHING IN BUFFER0a: BEQ ; IT!0a: JMP SL'BYTE0b;0 b; LDA FLOW'PED; FLOW IS PED SKIP 1b;: BMI CAN'T HAVE EMPTY BUFFER FLOW PED 1b;H1 b LDA SLSTATUS ; STATUS BYTE CHECK CARRIER[1*b: #%0100000014b: BNE ;SO LG AS WE STILL HAVE CARRIER, A BYTE1>b;1Hb LDA #13 ; CARRIER LOSS, A CR1Rb: CLC1\b: RTS1fb;1cK'BA 02c: JMP $FFFF ;CHANGED BY INITIALIZE ROUTINE62Bc;\2耵RP ; LIKE C(0) j2: PLA2: STA $87 : STX $88 : STY $892: JSR ERPRET'ACC'2: LDA #1 ;OUTPUT DEVICE IS #1 AGAIN2: STA $9A3~: LDA $87 : LDX $88 : LDY $89"3: CLC/3: RTS53;e3ЄPRNTA PHA ;WEDGED IN CHROUT ROUTINE3ڄ: LDA $9A ;OUTPUT DEVICE3܄: CMP #13߄: BEQ RP ; 1, LIKE C(0) C(1)3: CMP #2 ; MODEM4: BEQ OUTA ; OUTPUT MODEM74 PLA ; NMAL STUFFF4K'PRNTA Z4 : JMP $FFFF`4;~4 OUTA LDA C31 ;CHROUT4*: BEQ 44: PLA : CLC4>: RTS4H;4 STA INACTIVE'COUNT1 ;SRE A 0, TIMEOUT IN 3.2 MIN4;55 BIT FLOW'PED ; FLOW IS PED, SKIP BUFFER A5ʅ: BMI ~5ޅ: LDA MODEM'PED ; MODEM IS PED, SKIP BUFFER 5: BNE 5: LDA #%000100005: SLSTATUS ; TRANSMITTER BE Y5: BEQ 5$;5.: PLA68: STA SL ;SEND THE CHAR$6B: CLC.6L: RTS46V;n6`; FLOW IS PED. WE MUST BUFFER THE IN THE TBUFF 6j; ..FLOW IS REENABLED6t STY $97 ;SRE .Y6~: LDY TTAIL6: PLA6: STA TBUFF,Y7: INC TTAIL ; BUFFER S ME THAN 255 S, IT WILL LOOSE THEM!.7: INC TCOUNTN7Ć: LDY $97 ; OLD .YX7؆: CLCb7: RTSh7;z7SL'ERRUPT 7: LDA SLSTATUS7: #%00001000 ; NO BYTE ING BE RECEIVED7: BEQ ; 70;7:SL''AGAIN #8D: LDA SL ;GET CHAR38X: LDY RTAILY8l: STA RBUFF,Y ; SRE_8;o8: INC RTAIL8: INC RCOUNT8;8; SEE BUFFER TING FULL, ASSERT RTS NEEDED (FLOW ROL) 84: LDA RCOUNT9H: CMP #128 ; 128 S IN BUFFER99\: BCC SL''CFIRM ; SKIP AHEADl9p: LDA #'FLOW ; FLOW ASSERT RTS~9: STA SLCOMM9: LDA #$FF9: STA FLOW'PED9;9SL''CFIRM ;CFIRM THAT ALL ERRUPTS ARE CLEAR:$: LDA SLSTATUS ;SEE AHER ING ALY2:8: #%00001000a:L: BNE SL''AGAIN ;T E ING. IT!k:` u:t: RTS{:ċ;:؋'NMI :: CLD:: LDX #$7F : STA $DD0D ;DISABLE FROM CA NMI:: JSR SL'ERRUPT;(: JMP $FF33 ; FROM NMI;2;;DSET'BAUD ";: TAX7;: LDA BAUD''A,XF;: STA 2576[;: LDA BAUD''B,Xl;: STA SLROLv;Đ: TXA;ɐ: SEC;ΐ: SBC #9 ;SHANCE INDEX 9;Ӑ: BMI ;ؐ: LDX #2 ;ENHANCED MODE DELAY A COUPLE JFY FIRST<ڐ: STX DJFY<ݐ LDX DJFY$<ߐ: BPL 6<: STA SHANCE<<;R<쐪 JSR CLEAR'RBUFF_<: LDX #0<: STX THEAD : STX TTAIL : STX TCOUNT ;CLEAR TRANSMIT BUFFER<: STX RSSTAT : STX ENABL ;BUFFER EMPTY FLAG BASIC SING=: JSR SL' ;SL IS Y !=;/=: LDA #%00010000m=: STA $DD03 ;CFIG CIA PT 2 ME CHANGE IT DCDs=(;=2: LDA #RECV' ;NO PARITYECHO $S $RECV =<: STA SLCOMM=P;=: RTS=;>|; BAUD100: 3 12 24 48 72 96 144 192 384 230 115 57X>BAUD''A .BYT 006,008,010,012,013,014,015,016,017,021,019,018>BAUD''B .BYT 021,023,024,026,027,028,029,030,031,016,016,016>;>@INITIALIZE ;MODEM ROUTINES WEDGE IN>E: LDA #16 : STA SLSTATUS ;RESET ICIA CHIP?G;?J: LDX #'IRQ,?T LDA MOVE'F10,X>?^: STA $0F10,XN?h: DEX:BNE T?r;^?: SEI?: LDA $0326 :LDX $0327 ;BSOUT?: STA K'PRNTA1 :STX K'PRNTA2?: LDA #PRNTA :LDX #PRNTA?œ: STA $0326 :STX $0327?ǜ;@̜: LDA #'NMI :LDX #'NMI ;NMI4@֜: STA $0318 :STX $0319:@;b@; LDA $0314 :LDX $0315 ;IRQ@; STA K'IRQ :STX K'IRQ1@&: LDA #IRQ :LDX #IRQ@D: STA $0314 :STX $0315@N;@X: LDA $032A :LDX $032B ;INAb: STA K'IN1 :STX K'IN2.A: LDA #'IN :LDX #'INMA: STA $032A :STX $032BSA;zA: LDA $0324 :LDX $0325 ;BAAƝ: STA K'BA1 :STX K'BA2AН: LDA #'BA : LDX #'BAAڝ: STA $0324 :STX $0325A;Ağ: CLIAΟ;B(: CLC:LDA $A2:ADC #50 ; A SEC)B2 CMP $A2:BNE /B<;]B: LDA #0 ;INITIALIZE SWTLINK :B̡: JMP DSET'BAUD ;1 8BIT WD300BPSB;B MOVE'F10 B*.$ $0F10B4: BRKB>;BIRQ CLD ;!!!START OF IRQ ROUTINE!!!0C ;; LDA $2403 ; RAMS IS ACTIVE, SKIP CUSM IRQCC ;; CMP #$52SC ;; BNE gC;; JMP 'IRQmC;C; NETWK CϪ LDA NWIRQFLAG ;ACTIVATI FLAGC&: BEQ ;SKIP ACTIVATEDC0: INC NWCOUNTER1C:: BNE DD: INC NWCOUNTERDN: LDA NWCOUNTER,DX: CMP NWHOWLG8D]: BNE FDb: LDA 989TDg: E #$FFbDl: STA 989DvϪ LDA SLSTATUS ; SWTLINK BIT 6 KERNAL BIT 4 CARRIERD{: LSR:LSR:A #%11101111D: STA $DD01E: LDA C28 ;WEDGED IN IRQ ROUTINEE: BEQ 'IRQTE: LDA C12 ; CHECKING CARRI SKIP MOST OF IRQeE: #$EFyE: BNE 'IRQE: LDA $DD01 ;CHECK CARRIER BITE: #16E: BEQ ZCCB5 ; CARRIER OK, SKIP F: INC C28 ;INCENT CARRIER LOST FLAG5F: BNE ; WRAPPED ZERO]F: C28 ; KEEP FLAG AT 255pFЪ CMP #$FFF : BNE ZCCBAF: LDA #1F : STA C31 ;NO CHROUT MODEMF*;; STA $DD01F4: JMP 'IRQF>ZCCB5 LDA #1-GH: STA C28 ;CLEAR CARRIER LOST FLAG OKAY:GRZCCBA NGp: LDA RTAILgGz: CMP LAST'RTAILwG: BEQ }G;G: LDA RTAILG: STA LAST'RTAILG: LDA #0G: STA INACTIVE'COUNT1G: BEQ 'IRQ ;BRAG;HЪ INC INACTIVE'COUNT,H: BNE 'IRQKH: INC INACTIVE'COUNT1QH;H: LDA #$2D ;3.2 MIN TIMEOUTH: CMP INACTIVE'COUNT1H: BNE 'IRQH: STA C34 ;TIMEOUT SET FLGH;H$'IRQ I.: LDA $D019 : STA $D019NI8;; LDA $0A2C : STA $D018 ; TEXT CASE VICxIB: JSR $C55D ;SCAN BOARD MATRIXIV: JSR $F5F8 ;UPDATE JFY CLOCKI`: JMP $FA7A ;BASIC IRQ RTIIj;IINACTIVE'COUNT .WD $0000JLAST'RTAIL BRK J;J'IRQ IRQ#J .OFE)J';0J.qJ; "-SWIFTLINK": "SWIFTLINK""-SWIFTLINK":"@SWIFTLINK4 ;  DIGITATI "NAME.RAW":C(36)19 IdCPU'SPEED $D030`DIGI =$64 ;STARTu' =END'ADDRESSUME $D418DELAY'RATE A';C43 . 'LITE;: LDY $1211:INY ;HIGHBYTE OF START ADDRESS OF BASIC OVERLAY1: STY DIGI+1;.: LDY '+1@(: CPY DIGI+1L2: BCS R<;cxDIGI'ERR p LDA #0z: RTS;@ BEQ : SEI: LDA #0: STA DIGI: LDY #0: STY CPU'SPEED ;1MHZ : STA 0: LDA (DIGI),Y2 : STY 15B%: BPL S*: #127r/: INC CPU'SPEED ;2MHZ4 STA DELAY'RATE>: LDY #1H R: STA 0\: LDA (DIGI),Yf: #$0Fp: LDX #0z: STX 15 ;: STA UME%;=: JSR TIMEDELAYP: STA 0h: LDA (DIGI),Yv: LSR: LSR : LSR : LSR : LDX #0: STX 15; : STA UME ;  : JSR TIMEDELAY* $ : INY : . : BNE P 8 : INC DIGI+1f B : LDA DIGI+1z L : CMP '+1 V : BCC ` CLI j : LDA #$1B t : STA $D011 ~ : LDA #$80 ;TURN VOICE $ : STA UME9! : LDX #1 :STX CPU'SPEED ; IGINAL CPU SPEED?! ;P! TIMEDELAY _! : NOPn! : NOP}! : NOP! : LDX DELAY'RATE! DEX! : BNE ! ;!( .E ;LITE!F : RTS"; "-DIGIPLAYER":"DIGIPLAYER""-DIGIPLAYER":"@DIGIPLAYER  4000.G $12FE4.OBJ "@0:MLC.PUNTER-R":;v!MULTI 0 ;MULTIPUNTER FLAG; 0GLE, 2MULTI|(;).DVI 9*.DVO 92.LST "MODEM.ST"F.LST "COMMON.ST"P.LST "VARIABLES.ST"c;PNTA $FAPNTB $FCST $FFB7!@SETUP $E6C2 ;C1280^STAT $FE6h;Mr; OTHER LOCATISS|;gCODEBUF $0400zBITPNT $0403BITCNT $0404BITPAT $0405TIMER1 $0406G $0408BUFCOUNT $0409ERRTYPE $040ADELAY $040BSKPDELAY $040C%FLAG $040D7CHECK $040EJCHECK1 $0412]BUFPNT $0416qRECSIZE $0417MAXSIZE 255 ;$0418!BLOCKNUM $0419&;;FIYPE $041B+STACK $041C0NTDASH $041D5SPECMODE $041E:;;NUMB'OD $0420?NUMB'BAD $04223DBAD'COUNT $0424OICARRIER'TIMEOUT $0425UN:hXBUFFER $0500|bBUFFER1 $0600lLASTCH $0200vRS232ENB $02A1;; BUFFER ITIS;SIZE 4NUM 5POS = 7; ; START OF PROGRAM ; ;P FIYPE .BYT 2 ;FIYPE S RECEIVE, 1P, 2S .BYT 0 ;PROCOL IN MEMY FLAG. 4863,D%(10) JMP 'AS'BAD ;NO S FIYPE . MULTI :JMP REC ;RECV MULTIXFER RECTYPE O!. ;GLE+!:JMP RECTYPE ;RECV GLE FIYPE3! .ET! JMP 'AS'BAD ;NO S FILEz!JMP RECEIVE ;RECEIVE FILE! JMP 'AS'BAD ;NO MULTIS!/TRANSLATE BRK ; TRANSLATI FLAG"1NUMB'OD .WD 0000 ;BLOCKS (OF BELOW SIZE) SENT DURING LAST TRANSFERG"4.WD 248 ;BYTES OF PER BLOCK">MAX'BLKS .WD $FFFF ;MAX # BLOCKS MAY RECEIVE PREVENT FULL DISK LOCKUP"H.BYT MULTI ;TRANS TYPE: 0GLE LY, 2MULTI LY"\BRK#JSR PRIMM'BBS' ;S PROCOL NAME#. MULTI%#:. "ULTI-"-#.E=#. "UNTER"E#BRKM#RTSS#;`#CODES m#$. "GOO"z#.. "BAD"#8. "ACK"#B. "S/B"#L. "SYN"#V;#`; ACCEPT ACTERS CHECK CODES#j;#tACCEPT #~: STA BITPAT#: LDA #0$: STA CODEBUF%$: STA CODEBUF19$: STA CODEBUF2D$CD1 Q$: LDA #0b$: STA TIMER1u$: STA TIMER11$CD2 $: JSR $: JSR NUM$: LDA STAT$: BNE CD3$ : LDA CODEBUF1$: STA CODEBUF$: LDA CODEBUF2%(: STA CODEBUF1%2: LDA LASTCH+%<: STA CODEBUF28%F: LDA #0I%P: STA BITCNTV%Z: LDA #1g%d: STA BITPNTr%nCD4 %x: LDA BITPAT%: BIT BITPNT%: BEQ CD5%: LDY BITCNT%: LDX #0%CD6 %: LDA CODEBUF,X%: CMP CODES,Y%: BNE CD5 &: INY&: INX &: CPX #3.&: BNE CD6<&: JMP CD7B&;M&CD5 ^&: ASL BITPNTo&": LDA BITCNTy&,: CLC&6: ADC #3&@: STA BITCNT&J: CMP #15&T: BNE CD4&^: JMP CD1&h;&rCD7 &|: LDA #255&: STA TIMER1': STA TIMER11': JMP CD2';$'CD3 5': INC TIMER1C': BNE CD9V': INC TIMER11a'CD9 t': LDA TIMER11': A TIMER1': BEQ CD8 ;OD': LDA TIMER1': CMP #7': LDA TIMER11': CMP #20 ;WAS 20 AT 1MHZ(&: BCC CD2(+: JSR COUNT'BAD'BLOCKS7(0: LDA #1 ;BADF(:: STA STATW(D: JMP DELAY](N;h(XCD8 u(b: LDA #0(g: STA BAD'COUNT(l: STA STAT(v: RTS(;(; NUM SCODE(;(NUM (: STY Y'REG ;TYA:PHA(: JSR 'ING): BEQ 1): JSR MODEM'BYTE/): STA LASTCH<): LDY #0K) : STY STATZ)>: JMP RTSd)H1 q)R: LDA #2)\: STA STAT)f: LDA #0)p: STA LASTCH);)RTS ): LDY #3): STY $9A ;CURRENT OUTPUT DEVICE SCREEN*: LDY Y'REG ;PLA:TAY*: RTS*;)*; S A CODE/*;=*SCODE O* : LDX #0 ;#3Z* SN1 l*$ : LDA CODES,Y*. : JSR MODEM'PUTBYTE*8 : INY*B : INX ;DEX*L : CPX #3 ;BLANK*V : BNE SN1*` : RTS*j ;*t ; HSHAKE*~ ;* RECH + : STA G+ : LDA #0#+ : STA DELAY.+ RC1 ;+ : LDA #2J+ : STA PNTAX+ : LDY Gi+ : JSR SCODEt+ RC9 + : LDA #%00100+ : JSR ACCEPT+ : LDA STAT+ : BEQ RC2+ : PNTA+ : BNE RC9+( : JMP RC1+2 ;+< RC2 +F : LDY #9 ,P : JSR SCODE,Z : LDA FLAG*,d : BEQ RC58,n : LDA GF,x : BEQ RC6Q, RC5 h, : LDA BUFFERSIZE{, : STA BUFCOUNT, : STA RECSIZE, : JSR RECMODEM, : LDA STAT, : CMP #%0001, : BEQ RC4, : CMP #%0010, : BEQ RC2, : CMP #%0100 - : BEQ RC4- : CMP #%1000+- : BEQ RC26- RC4 @- : RTSF-" ;Q-, RC6 c-6 : LDA #%10000t-@ : JSR ACCEPT-J : LDA STAT-T : BNE RC2-^ : LDA #10-h : STA BUFCOUNT-r RC8 -| : LDY #12- : JSR SCODE- : LDA #%01000- : JSR ACCEPT. : LDA STAT. : BEQ RC7-. : BUFCOUNT;. : BNE RC8F. RC7 P. : RTS[. TX3 n. : JSR DUMMYBLKy. TX1 . : LDA #"-". .BYT $2C. TX10 . : LDA #":". : JSR PRTDASH. : LDY #6. : JSR SCODE. : LDA #%01000/ : JSR ACCEPT/ : LDA STAT /: BNE TX12/: JSR THISBUFC/: LDY #SIZEV/$: LDA (PNTB),Yi/.: STA BUFCOUNTz/8: JSR ALTBUF/B: LDX #5/L: JSR CKOUT/V: LDY #0/`TX6 /j: LDA (PNTB),Y/t: JSR BSOUT'/~: INY/: CPY BUFCOUNT/: BNE TX6 0: JSR CH0: LDA #0#0: RTS)0;40TX4 C0: LDA #"*"U0: JSR PRTDASHb0: LDY #6s0: JSR SCODE0: LDA #%010000: JSR ACCEPT0 : LDA STAT0: BNE TX40: LDA #100(: STA BUFCOUNT02TX5 0<: LDY #120F: JSR SCODE1P: LDA #%10000!1Z: JSR ACCEPT01d: LDA STAT>1n: BEQ TX8O1x: BUFCOUNT]1: BNE TX5h1TX8 u1: LDA #31: STA BUFCOUNT1TX9 1: LDY #91: JSR SCODE1: LDA #%000001: JSR ACCEPT1: BUFCOUNT1: BNE TX92: LDA #1 2: RTS2;32; RECEIVE A BLOCK FROM MODEM92;I2"RECMODEM V2,: LDY #0b26RCM5 o2@: LDA #02J: STA TIMER12T: STA TIMER112^RCM1 2h: JSR 2r: JSR NUM2|: LDA STAT2: BNE RCM22: LDA LASTCH2: STA BUFFER,Y 3: CPY #33: BCS RCM3,3: STA CODEBUF,Y93: CPY #2H3: BNE RCM3Z3: LDA CODEBUFi3: CMP #"A"x3: BNE RCM33: LDA CODEBUF13: CMP #"C"3: BNE RCM33: LDA CODEBUF23: CMP #"K"3&: BEQ RCM430RCM3 3:: INY4D: CPY BUFCOUNT4N: BNE RCM5%4X: LDA #%000144b: STA STAT>4l: RTSD4v;P4RCM4 _4: LDA #$FFp4: STA TIMER14: STA TIMER114: JMP RCM14;4RCM2 4: INC TIMER14: BNE RCM64: INC TIMER114RCM6 4: LDA TIMER15: A TIMER115: BEQ RCM7&5 : LDA TIMER135: CMP #6F5 : LDA TIMER11m5*: CMP #16 ;WAS 16 AT 1MHZ|54: BNE RCM15>: LDA #%00105H: STA STAT5R: CPY #05\: BEQ RCM95f: LDA #%01005p: STA STAT5zRCM9 5: JMP DELAY5;6RCM7 6: LDA #%1000'6: STA STAT16: RTS76;R6; CREATE DUMMY BLOCKX6;h6DUMMYBLK y6: LDA BUFPNT6: E #16: STA BUFPNT6: JSR THISBUF6: LDY #NUM6: LDA BLOCKNUM6$: CLC6.: ADC #168: STA (PNTB),Y6B: INY7L: LDA BLOCKNUM1!7V: ADC #047`: STA (PNTB),YA7j: LDX #2Q7t: JSR CHKINa7~: LDY #POSl7DB1 z7: JSR BA7: STA (PNTB),Y7: INY7: JSR ST7: BNE DB47: CPY #MAXSIZE7: BNE DB17: TYA7: PHA7: JMP DB57;8DB4 8 : TYA8: PHA+8: LDY #NUM58(: INYD82: LDA #255W8<: STA (PNTB),Ye8F: JMP DB5k8P;{8ZDUMMYBL1 8d: PHA8nDB5 8x: JSR CH8: JSR RESET8: JSR D28: JSR RESET8: LDY #SIZE8: LDA (PNTB),Y9: STA BUFCOUNT9: JSR ALTBUF9: PLA/9: LDY #SIZEB9: STA (PNTB),YU9: JMP CHECKSUM_9;;RTSe9;s9; SET Sy9;9THISBUF 9": LDA #BUFFER9,: STA PNTB96: LDA BUFPNT9@: CLC9J: ADC #BUFFER9T: STA PNTB19^: RTS9h;:r; SET ALT. BUFFER:|;*:ALTBUF =:: LDA #BUFFERL:: STA PNTB]:: LDA BUFPNTi:: E #1s:: CLC:: ADC #BUFFER:: STA PNTB1:: RTS:;:; CALCULATE CHECKSUM:;:CHECKSUM :: LDA #0:: STA CHECK1;: STA CHECK11;&: STA CHECK12.;0: STA CHECK13?;:: LDY #SIZEK;DCKS1 \;N: LDA CHECK1f;X: CLCy;b: ADC (PNTB),Y;l: STA CHECK1;v: BCC CKS2;: INC CHECK11;CKS2 ;: LDA CHECK12;: E (PNTB),Y;: STA CHECK12;;CKS3 <: LDA CHECK13<: ROL-<: ROL CHECK12@<: ROL CHECK13J<: INY]<: CPY BUFCOUNTl<: BNE CKS1y<: LDY #0< : LDA CHECK1<: STA (PNTB),Y< : INY<*: LDA CHECK11<4: STA (PNTB),Y<>: INY: STA BLOCKNUM1>: STA FLAG'> : STA BUFPNT=>: STA BUFFERNUMU>: STA BUFFERNUM1h>(: STA SKPDELAYx>2: LDA #POS><: STA BUFFERSIZE>F: LDA #0>PREC1 >Z: JSR RECH>d: LDA FLAG>n: BNE REC3>x: JSR MATCH>: BNE REC2?: JSR CH?: LDA BUFCOUNT'?: CMP #POS6?: BEQ REC7C?: LDX #2S?: JSR CKOUTc?: LDY #POSo?REC6 ?: LDA BUFFER,Y?: JSR BSOUT?: INY?: CPY BUFCOUNT?: BNE REC6?: JSR CH?REC7 ?": LDA BUFFERNUM1?,: CMP #255@6: BNE REC4@@: LDA #1+@J: STA FLAG:@T: LDA #"*"G@^.BYT $2CS@hREC4 b@r: LDA #"-"z@w: JSR UPDATE'SCREEN@|: LDA NUMB'OD : CMP MAX'BLKS : BNE @: LDA NUMB'OD1: CMP MAX'BLKS1: BNE A: LDA #255: JMP 3 ; & SIGNAL DRIVE FULLA JSR RESET"A: LDA #01A: JMP REC17A;CAREC2 QA: JSR CH`A: LDA #":"xA: JSR UPDATE'SCREENA: LDA RECSIZEA: STA BUFFERSIZEA: LDA #3A: JMP REC1A;A; SEE CHECKSUMS MATCHA;AMATCH B&: LDA BUFFERB0: STA CHECK'B:: LDA BUFFER19BD: STA CHECK1LBN: LDA BUFFER2^BX: STA CHECK2qBb: LDA BUFFER3Bl: STA CHECK3Bv: JSR THISBUFB: LDA RECSIZEB: STA BUFCOUNTB: JSR CHECKSUMB: LDA BUFFERB: CMP CHECKB: BNE MTC1C: LDA BUFFER1"C: CMP CHECK11C: BNE MTC1DC: LDA BUFFER2VC: CMP CHECK2eC: BNE MTC1xC: LDA BUFFER3C: CMP CHECK3C : BNE MTC1C: LDA #0C : RTSC*;C4MTC1 C>: LDA #1CH: RTSCR;C\; RECEIVE FILE TYPE BLOCKDf;DpRECTYPE (Du: JSR 'IT'ALL5Dz: LDA #0ID: STA BAD'COUNT\D: STA BLOCKNUMqD: STA BLOCKNUM1D: STA FLAGD: STA BUFPNTD: STA SKPDELAYD: STA NUMB'OD : STA NUMB'OD1D: STA NUMB'BAD : STA NUMB'BAD1D: LDA #POSE: CLCE: ADC #1,E: STA BUFFERSIZE9E: LDA #0EERCT3 UE: JSR RECHeE: LDA FLAGtE: BNE RCT1E : JSR MATCHE: BNE RCT2E: LDA BUFFERPOSE;: BNE ; IT'S A ZERO, SET 4. ILL BE RECOGNIZED AS BADF;: LDA #4F$;: LDA BUFFERPOSQF&; CMP #3 ; FIYPE3, SET 1 (BOTH ,P)^F);: BNE lF+;: LDA #1}F. STA FIYPEF8: LDA #1FB: STA FLAGFL: LDA #0FV: JMP RCT3F`;FjRCT2 Ft: LDA RECSIZEF~: STA BUFFERSIZEF: LDA #3 G: JMP RCT3G;#G'AS'BAD 0G: LDA #7CG:.BYT SKIP'WDIG;YG'AS'OD eGRCT1 rG: LDA #0G: STA LASTCHG: RTSG6;G@; DELAY TIMINGGJ;GTDELAY G^: INC SKPDELAYGh: LDA SKPDELAYGr: CMP #3H|: BCC D1H: LDA #0!H: STA SKPDELAY1H: LDA DELAY?H: BEQ D2MH: BNE D3SH;^HD1 nH: LDA DELAY|H: BEQ D3H;HD2 H: LDX #0 ;LDX #0 1MHZHLP1 H : LDY #0H LP2 H : INYH& : BNE LP2H0 : INX#I: : CPX #120 ; 1MHZ. COUNTS 2256 NOW INSTEAD1ID : BNE LP1Q:/;iQD/ JSR NUM ; A " " "" ""QN/: CMP #" " : BEQ QX/: CMP #"" : BEQ RH'ABTQb/: CMP #"" : BEQ RH'ABTQl/: JSR PRO'CARRIER : BNE RH'ABTQv/: LDA JFY'CLOCK1%R{/: CMP #27 ;TIMEOUT AFTER 2 MINUTES1R/: BNE 7R/;aR/ LDA #30 ;PAUSE HALF A SECqR/: STA DJFYR/ LDA DJFYR/: BNE R/;R/ JSR NUM : TAXR/: JSR PRO'CARRIER : BNE RH'ABTR/: TXAR/: CMP #" " : BEQ S/: CMP #13 : BEQ S/: CMP #"" : BEQ *S 0: LDY SI9S0: JSR BSTAFS 0: INC SIRS*0: BNE XS40;jS>0 JMP RECTYPESp0 LDA #0 ;(TX$,(142))NAME (142)0 MULTISz0: STA LASTCHS0: RTSS0;S0RH'ABT S0: LDX #0S0: STX SIT0: INX:STX LASTCH0T0: RTS ;(512)1 ABTED6T1;YT81.E ;ALL THAT WAS MULTI LYT; "-PUNTERR" : "PUNTERR""-PUNTERR" : "@PUNTERR",~C38 ; BUFFER+6~. 'LITEA@~: JSR 'MODEMS^~: LDX C35gh~: JSR CHKINyr~ JSR BAt~: CMP #0w~: BEQ |~: JSR BUFF'A~: BCC ; BUFFER FULL~ LDA IOSTATUS: BEQ x.E# JMP CH ;FINISHEDe;"-BUFFER LOAD":"BUFFER LOAD""-BUFFER LOAD":"@BUFFER LOAD}C37 ; BUFFER(}. 'LITE>}: JSR 'MODEMQ }: LDX #$FFi}: STX BUFF'DUMPw}: DEX(}: STX BUFF'DUMP1+}: LDA #0 : TAY/}: STA (OL'BUFF),Y2}: LDX C35<}: JSR CKOUTF} JSR 'BUFFP}: CMP #0Z}: BEQ 2n}: JSR BSOUTBx}: JMP J}.E\} JMP CH;"-BUFFER SAVE":"BUFFER SAVE""-BUFFER SAVE":"@BUFFER SAVEH ; A BASIC PROGRAM CODE MODULE AFTER CURRENT BASIC SITI ; NAME IN A$, DEVICE # IN .A, MODULE CODE LEVEL IN .X; HS COPIES IN A'REG X'REG(; dTABLE $0F ;INDEX IN FIAME'TABLE START OF MODULE'S ENTRY;C10 U: LDY #9 ; GTH OF FIAME SP,SLk: JSR 'VAR'SPECSqt;: LDX X'REG ;CODE LEVEL: CPX #4 ; LEVEL IS 4 (A TRACKED LEVEL): BCC ; SKIP/: LDA #$4C ;SET TABLE NULL AT OF TABLE IN CASEO: STA TABLE ;OF ERRn: JMP JUST'' ; SKIP t ; STX LASTMODLEV ;IN C161. USED BY ML ANYWHERE. BASIC: CPX #0:BNE (: JMP LEVEL0'NAME ; LEVEL 0, UPDATE FIAME FROM SPECIAL LOCATI2;Y< LDA #0: STA Y'REG ;SET FLAG SEE SAME FILE ALY IN MEMYcF: CLCP ADC #$13 ;CALCULATE LEVEL 19Z: DEXd: BNE n;x: STA TABLE ;INDEX FIAME'TABLE ITI; : LDY SL ;FIND NING OF FIAME IN A$S  DEY ;SCAN BACKWARDS FIND A ":" START_ : BMI n : JSR BLDA : CMP #":";BEQ : BNE ; 4 LDX #0: STX SI ;FIAME GTH 9: INY!> JSR BLDA ;NOW THE ACTUAL FIAME $1100 (S BUFF)!H: LDX SI&!R: STA $1100,X7!\: INY:INC SIJ!f: CPY SL:BNE P!p;a!: LDX TABLEg!;!: LDA SI ; FIAME IS SAMEGTH AS OLD, SKIP! : CMP FIAME'TABLE,X! : BEQ ! : STA Y'REG ;FLAG, ALY IN MEMY'". : STA FIAME'TABLE,X ; SRE FIAME GTH-"8 ;d"` INX ;INC FIRST OF OLD FIAMEq" : LDY #0" LDA $1100,Y" : CMP FIAME'TABLE,X" : BEQ " : STA Y'REG" : STA FIAME'TABLE,X" INY : INX" : CPY SI:BNE " ;-#( : LDA Y'REG ;CHECK DFERENT FIAME FLAG9#2 : BNE x#P : RTS ; CLEAR, FILE ALY IN MEMY. BASIC~# ;# LDX TABLE ; INDEX START OF ENTRY IN FIAME'TABLE# : LDA #0 ;CLEAR FIAME GTH LEVEL UP IN TABLE$ : STA FIAME'TABLE19,X$ ;/$XJUST'' l$@: STA 0 ;SCAN BACK FIND NING OF CURRENT LINE$J: TXTPTR1 ; THUS THE THE LINE$T: LDY #250$h LDA (TXTPTR),Y ;SCAN BACK FIND A NULL$r: BEQ $|: DEY$: BNE %;R% DEY : DEY ;SKIP BACK IN CASE THAT NULL WAS PART OF A LINE NUMBERx%: DEY : DEY ; LINE% LDA (TXTPTR),Y ;SCAN WARD A NULL NOW%: BEQ %: INY%: BNE %;& INY ;INC LOW BYTE OF LINE AFTER C(10)U& : LDA (TXTPTR),Y ; START OF BASIC LINE AFTER C(10)f& : STA TXTTABp&& : INY&0 : LDA (TXTPTR),Y&D : STA TXTTAB1&N ;&l : LDA #0&v : STA 15&u: JSR 'MODEM&\v;&pv: LDX A'REG ;DEVICE ##'v: LDA #1 : LDY #0 ;SETUP FILE PARMS4'v: JSR SETLFSi'v: LDA #0 : LDX #1 ; O  0, FIAME IN  1z'v: JSR SETBNK'v;'v: LDA SL : LDX SP : LDY SP1'v: JSR SETNAM'w;'$w: LDA #0 : LDX TXTTAB : LDY TXTTAB1(8w: JSR K ; THE MODULER(Lw: LDA 'ADDRESS : STA TEXT'P ;UPDATE OF BASIC ADDRESSw(`w: LDA 'ADDRESS1: STA TEXT'P1}(tw;(w: LDX #15 : JSR CHKIN ; ERR CHANNEL(w: LDY #0(w JSR BA : STA $200,Y(w: CMP #13 : BEQ .)w: INY : BPL ; ING HIT 128 BYTES LG!s)w LDA $200 : CMP #"2" : BCS C10'ERR ; ERR#20 ALL CLEAR!)w: JSR CH)w: JSR RESTART'MODEM)w: JSR LINK'MODULE ;;JSR $4F4F ;LINK LINES)wC10'NE *w: SEC ; COMM EXECUTE IS NING OF ]*w: LDA TXTTAB ;CODE, MINUS E (SO IT POS AT THE ZERO)j*x: SBC #1{*x: STA TXTPTR* x: LDA TXTTAB1*x: SBC #0*x: STA TXTPTR1*x;*(x: LDA #$01 : STA TXTTAB ; NMAL START OF CODE +2x: LDA #$40 : STA TXTTAB1L+ ;  ROUTINE BETTER THAN BASIC'S   BECAUSEx; IT ES ENCE FIAME SIZE DRIVE NUMBER LIMITS!~;(; A$DR$"FILENAME"2; C(44),DV,B,0:S ; STARTING AT MEMY LOCATI S IN  B<; C(44),DV,B,1 ; IN  B AT ADDRESS WAS D FROMOF; C(44),DV,B,2:S,E ; MEMY S THROUGH E IN  BWP;]Z;ldDV44 $FAxSTART44 $FB;FC;C44 ; UCTI: LDA A'REG:STA DV44;: LDY #9 ; FIAME: JSR 'VAR'SPECS$;8L: LDA X'REG ; FROMj`: LDX #1 ;FIAME IS IN  1{t: JSR SETBNK;: LDA SL ;FIAME GTH: LDX SP ;LOW BYTE OF FIAME ADDRESS (IN  1),: LDY SP1 ;HIGH " " " "=: JSR SETNAMC;U: JSR 'MODEM[(;x: LDY Y'REG ;CHECK IO TYPE: BEQ C44' ; 0, AT INED ADDRESS: DEY: BEQ C44'SAME ; 1, AT IGINAL ADDRESS- ; ;, ASSUME A !3 l;e : JSR C44'PARM ; THE START ADDRESS : LDA $16 : STA START44 ; PUT IT O START44 : LDA $17 : STA START441 ; : JSR C44'PARM ; THE ADDRESS"!; ; LEAVE IT IN $1617O!: LDA #1 ;ICAL FILE #x! : LDX DV44 ;DEVICE #!$ : LDY #0 ;SECDARY ADDRESS!8 : JSR SETLFS!L ;! : LDA #START44 ;ZP LOCATI WITH START ADDRESS4" : LDX $16 ;LOW BYTE OF ADDRESSi" : LDY $17 ;HIGH " " " "v" : JMP K|"T ;"^ ;" C44' ; FILE AT INED START ADDRESS" : JSR C44'PARM ; START ADDRESS%# ; ; FALL O REGULAR ROUTINE+#0 ;b#C44'SAME ; FILE AT IGINAL ADDRESS#: LDA #1 ;ICAL FILE ##: LDX A'REG ;DEVICE ##: LDY Y'REG ; TYPE (0, 1SAME)#: JSR SETLFS$;-$h: LDA #0 ;FLAG c$|: LDX $16 ;START ADDRESS INED$: LDY $17 ; " "$: JMP K$&;$';$'C44'PARM ; THE STARTING ADDRESS %$': JSR $0380 ;SKIP THE COL COMMA ACTER^%8': JSR $AF96 ;EUATE RESSI AT TXTPTR O FAC%L': JSR FAC2ADRS ;CVERT FAC O AN ADDRESS UE IN $1617%`': LDA #0%t': STA 15%': RTS%';&; "-BLOADBSAVE" :"BLOADBSAVE""-BLOADBSAVE" :"@BLOADBSAVEC ; COUNT UP NUMBER OF MESSAGES STARTING IN EACH CATERY ; CA%(S) IN .X.A HOW MANY IN .Y $8B8C dC47'HOWMANY $8BnC47'COUNTER $8DxC47'PNTR $FBC47 : LDA A'REG : STA C47'PNTR: LDX X'REG : STX C47'PNTR17,: LDX #52 ;CLEAR COUNTERSD6: LDA #0V@ STA $0200,X`J: DEXlT: BNE rY;^: STA C47'COUNTERh: STA C47'COUNTER1r;: LDY #1C47 : LDA (C47'PNTR),Y: BEQ ; CAT # 0, NO MSG! SKIP IT.M: CMP #27 ; CAT # IS 26, BAD UE! SKIP IT.Y: BCS c: TAXu: INC $0200,X: BNE : INC $020026,X; CLC: LDA C47'PNTR: ADC #2: STA C47'PNTR: BCC : INC C47'PNTR1 INC C47'COUNTER&: BNE 40: INC C47'COUNTER1:N;PX LDA C47'COUNTERf]: CMP C47'HOWMANYub: BNE C47l: LDA C47'COUNTER1q: CMP C47'HOWMANY1v: BNE C47;: LDA #0: STA C47'HOWMANY : STA C47'HOWMANY1: LDX #26  CLC : LDA C47'HOWMANY1 : ADC $0200,XG 4: STA C47'HOWMANY_ H: LDA C47'HOWMANY1t \: ADC $020026,X p: STA C47'HOWMANY1 : DEX : BNE RTS ; ; "-COUNT MSGS":"COUNT MSGS""-COUNT MSGS":"@COUNT MSGS"VAR VARPNT1+VARIDX VARPNT2?COMP'STRINGS E;RL: LDX #4` LDA VARSTART9,X ; A$ SPECS FIRST STRINGj: STA SL,Xt: LDA VARSTART2,X ; TX$ SPECS SECD STRING~: STA VAR,X: DEX: BPL ;: JSR 'COMPJ: CMP #0 ; EXACT MATCH FOUND: BNE ; CHECK NALPHA ACTERS: RTS ; 0 MATCH FOUND; STA A'REG ;EMBER OLD RESULT ;0: LDY #0 ;FIND FIRST ALPHA IN A$A< LDA (SP),YPP: CMP #"A"\d: BCS fx: INYt: CPY #15: BNE ; STY SI;@: LDY #0 ;FIND FIRST ALPHA IN TX$T LDA (VARPNT),Yh: CMP #"A"r: BCS |: INY: CPY #15': BNE -;> STY VARIDXH: TYA: A SI ;COMBINE THE BITS OF VARIDX SI: BNE ; BOTH 0 LDA A'REG ; THERE WERE NO LEADING NALPHA1 : RTS ; S. IGINAL RESULT7 ;  JSR 'COMP ;OTHERWISE, COMPARE WITH STARTING LOCATIS : CMP #0 ; A$TX$ (WHEN SKIPPING NALPHA) : BEQ ; IGINAL RESULT(! : RTS ; RESULT.! ;$;O$SET'VAR' \$: LDY #0$: LDA SI ;SRE GTH IN INFO OF VARIABLE$: STA (VARPNT),Y$ : INY$ : LDA P ;SRE IN INFO OF VARIABLE$*: STA (VARPNT),Y %4: INY%H: LDA P1.%R: STA (VARPNT),Y6%RTSx%;"-COPY TX2VAR":"COPY TX2VAR""-COPY TX2VAR":"@COPY TX2VAR& ; ERPRET ACTER ROUTINES ,;ZdLAST BRK ;USED ROLB TRACKINGxLAST BRK ;USED IN ROLB ROUTINE BRK;T ERPRET'ACC ; PASS ACTER OUTPUT IN .A h : STA A'| ; ERPRET' / : LDA MCI'ENABLE ; CHECK MCI G : BEQ N'MCI'CHROUT[ : JSR CHECK'MCI : BEQ LOCAL'RTS2 ; ZERO, WITHOUT ING ANYTHING ; N'MCI'CHROUT & : LDA CENTERING'COUNT: : BEQ N : JMP HLE'CENTERINGX ;l LOCAL'RTS2 RTS v ;$ CENTERING'CHROUT U LDA A' : TAY ; CHECK N a : #96m : BNE  : JSR ERPRET'N ; LDA SHFLAG ; CHECK CROLCAPS PRESSES  : #%10110 : BEQ 4 : LDA JFY'CLOCK2 ;PAUSE 3 JFIESH : CLC*\ : ADC #3Ap CMP JFY'CLOCK2M : BNE S ; LDA $D4 ; CHECK LF (PANEL)  : CMP #75 : BNE  : JSR PANEL'SWITCH ;  LDA RAIN ; CHECK RAINBOW MODE  $: BEQ NO'RAINBOW- 8: JSR 'RAINBOW3 L;E tNO'RAINBOW  : LDY A' ; TRANSLATI ROUTINES : JSR TRANS'OUTPUT ; |TRANSLATI'NE : CMP #13 ; CHECK : BNE ',!: JSR TRANS'EOL ;SPECIAL EMULATI EOL LF, RVS $T!: INC PAUSE'COUNT ;ܫPAUSE COUNTERt!: LDA #13 ; THE z!;!d' !x: CMP #0 ; NULL ACTER, !!: BNE !: RTS!; " LDX BUFF'STAT ; CHECK BUFFERING TEXT ": BNE ": PHA.": LDA A'?": JSR BUFF'AI": PLAO",;"h LDX LAST ; CHECK BACKGROUND CHNG "|: CPX #""": BNE FINAL'OUTPUT";;LDX C22 ; CG, NO BACKGROUND CHANGING*#;;BEQ FINAL'OUTPUT ;ED OUT IN TRANSLATI TABLE0#;:#: PHAk#: LDX #15 ;CHECK CURRENT IS A ~# CMP TABLE,X#: BEQ #: DEX#0: BPL #:: PLA#D: JMP FINAL'OUTPUT ;WASN'T A FOLLOWING THE ROLB#X;.$l STX $D021 ;SRE IN 40C BACKGROUND (EASIER REFERENCE)@$: LDA VDCS,XN$: LDX #26{$: JSR VDC ;SET BACKGROUND IN 80C$;$: LDA ; CURRENT RESET THE LATER$: #15 ; TERMS THAT N'T SUPPT ROLB$: STA LAST% ;% : PLA : STA A'>%4: JSR FINAL'OUTPUT ;S THE CODEd%H: LDA $D7 ; IN 80C MODEp%\: BEQ %p: LDA #"" ; S A UNDERLINE$ CODE%z: STA A'%: JSR FINAL'OUTPUT%;% LDY LAST%: LDA TABLE,Y%: STA A'&;&LFINAL'OUTPUT '&`: STA LASTW&: JSR MODEM'PUTBYTE ; TRANSLATED MODEM&: JSR SCRN'PUTBYTE ; A' SCREEN&;;JSR CH'&(;&@; CHECK PAUSE &J: LDA NOWCOLUMN ; NOWCOLUMN0 N'T PAUSE&h: BNE 4'|: LDA PAUSE'GTH ; GTH0 PAUSE IS DISABLED@': BEQ y': CMP PAUSE'COUNT ; GTHCOUNT PAUSE': BCC ': BEQ ';' RTS' ;' PAUSE'TEXT . "-ESUAP-"'0 ;'l ; PAUSE 'v LDX #6( LDY PAUSE'TEXT,X( : TYA$( : JSR CHROUT'BBS;( : JSR TRANS'OUTPUTS( : JSR MODEM'PUTBYTE]( : DEXi( : BPL o( ;( JSR ' ;USE C4 CE UPPERCASE( : LDA A'( : CMP #" " ;INUE USER PRESSED SPACE (!: BEQ ) !: CMP #13)!: BEQ ) !;A)!: LDA P' ; P0 M)!: BEQ z)!: CMP #3 ; PHOME )!: BEQ )!;)! LDY #7 ; PAUSE )": STY PAUSE'COUNT)$" JSR OUTPUT'A'DEL ;S ACTER*L": PAUSE'COUNTI*`": BNE ;RESULTS IN PAUSE'COUNT0{*t": INC PAUSE'COUNT ;SET PAUSE'COUNT1*": RTS*";*'ERPRET'N *$': CPY #$85 ; F1 A*8': BEQ *L': CPY #""*`': BNE +t' LDA #1 ; RAINBOW +': STA RAIN,+': JMP 'RP22+';T+' CPY #$86 ; F3 Z`+': BEQ o+': CPY #""|+(: BNE +( LDA #0 ; RAINBOW $+((: STA RAIN+<(: JMP 'RP2+P(;+d( CPY #$87 ; F5 D+x(: BEQ ,(: CPY #"",(: BNE .,( INC ; CYCLE ;,(: LDA F,(: #7P,(: TAY`,): LDA S,Yt,): STA A' : TAY,,): LDA $D021 ;MAKE SURE SAME AS BACKGROUND,@): #15,T): TAX,h): LDA TABLE,X,|): CMP A'-): BEQ ;BACKGROUNDEGROUND, TRY AGAIN'-): RTS--);J-) CPY #"" ; CV-): BNE y-) ; CYCLE PREVIUS -*: LDA -*: #7-0*: TAY-D*: LDA S,Y-X*: STA A' : TAY-l*: LDA $D021-*: #15-*: TAX-*: LDA TABLE,X.*: CMP A'.*: BEQ .*: RTS".*;L. +; CPY #$88 ; F7 CG MODEY. +;; BNE h.4+;; LDX C22u.H+;; BEQ .\+;; LDY #"" ; SET BACKGROUND BLACK.p+;; STY A'.+;; JSR N'MCI'CHROUT.+;; LDY #"".+;; STY A'.+;; RTS.+;"/+ CPY #$8D ; SHTED./+: BEQ P/+: CPY #"" ; ROLP]/+: BNE k/+ LDA #13y/,: STA A'/$,: LDA MAXCOL/8,: CMP #50/L,: BCC /`,: LDA $EC ;CURRENT COLUMN/t,: CMP #40/,: BCS /,: LDY #" "/,: STY A'0,;'0, CPY #"" ; CLEAR SCREEN30,: BEQ U0-: CPY #"" ; HOMEb0-: BNE 0(- LDX #1 ; RESTART THE LINE COUNT0<-: STX PAUSE'COUNT0P-;0d- CPY #"" ; CURS UP0x-: BNE 0-: PAUSE'COUNT.1-: BMI ; PASS P OF SCREEN, INCENT AGAIN41-;X1- CPY #"" ; CURS WNe1-: BNE {1- INC PAUSE'COUNT1.;1. CPY #20 ; 1,.: BNE ; , SKIP1@.: LDX NOWCOLUMN ; CURRENT COLUMN0 2T.: BEQ 'RP2 ; SKIP OUTPUT=2|.: JSR OUTPUT'A'DEL; OUTPUT THE LEFT,SPACE,LEFTM2/: JMP 'RPS2/;20 CPY #"" ; CENTER FOLLOWING TEXT 21: BNE 2$1: LDA #1281: STA CENTERING'COUNT2B1: STA CENTERING'INDEX2L1: JMP 'RP22V1;*3j1 CPY #" " ; LINEFEED CR$ 63t1: BNE D31: LDY #13R31: STY A'\31;;RTSb31;l31 RTSr32;}32A 32: LDY #032: STY A'33: RTS33;34OUTPUT'A'DEL 3 5: LDX C22 ;GFX FLAG4 5: LDY BS',X ; ACTER TRANSMIT OVER MODEM BACKSPACEQ445: LDA #"" ;GFX , CURS LEFT, SPACE, LEFTf4>5: JSR CHROUT'BBSp4H5: TYA4R5: JSR MODEM'PUTBYTE4\5: LDA #" "4p5: JSR CHROUT'BBS45: JSR MODEM'PUTBYTE45: LDA #""45: JSR CHROUT'BBS45: TYA 55: JMP MODEM'PUTBYTE55;%5L6BS' . ""+5`6;85:'RP z5:: LDX BUFF'STAT ; BUFFER IS , PUT A DEL IN IT BEE ING5:: BNE 'RP25:: LDA #205:: JSR BUFF'A5:'RP2 5:: PLA ;OVE RTS TO MAIN INTERPRETER CODE5;: PLA6$;: RTS 68;;56 N'RAINBOW ;RAIN VARIABLE IN .AC6*N: LDY A'j64N: CMP #1 ;RAINBOW EVERY ~6HN: BEQ RAINBOW'6\N: CPY #13 ;CHANGE AT CR$ EITHER WD LINE RAINBOW6pN: BEQ RAINBOW'6N: CMP #3 ; LINE RAINBOW7N: BNE ; NE 7N RTSE7N CPY #" " ; WD RAINBOWQ7N: BNE b7PRAINBOW' r7(P: TYA : PHA72P INC 7FP: LDA 7ZP: #77dP: TAY7nP: LDA S,Y7xP: STA A' ; CHANGING 8P: LDA $D021 ;IS THE BACKGROUND 8P: #15 ; AHER)8P: TAY<8P: LDA TABLE,YJ8P: CMP A'V8P: BEQ k8P: JSR NO'RAINBOWu8P: PLA8P: STA A'8Q: RTS86Q;84SSCRN'PUTBYTE 8SZCC09 8S: LDA A'8S: JSR CHROUT'BBS ;CUSTUM 80C ROUTINE 9S: LDA #009S: STA INSRT ;INSERT MODE $>9S: RTSD9S;9UHLE'CENTERING ;A' HAS TO ADD TO CENTERING BUFFER9V: LDA A'9V: CMP #13 ; IS CR$, NE, OUTPUT IT9V: BEQ OUTPUT'CENTERING2/:"V: CMP #" " ; IS LINEFEED, NE, OUTPUT ITK:'V: BEQ OUTPUT'CENTERING2:,V: CMP #"" ; IS Y, NE, OUTPUT IT:6V: BEQ OUTPUT'CENTERING:@V;:TV: LDY CENTERING'INDEX:hV: STA CENTERING'BUFFER,Y:|V: INC CENTERING'INDEX4;V: BMI OUTPUT'CENTERING ;128 BYTES IS PTY! OUTPUT IT:;V;{;V: #96 ; TAKES UP SPACE, INCENT COUNT;V: BEQ ;V: INC CENTERING'COUNT;V RTS;W;;WOUTPUT'CENTERING X: LDA CENTERING'COUNT(>X: CMP NOWCOLUMN4>X: BNE :>Y;|>Y: LDY #1 ; COUNT1 CENTERING'INDEX: :>$Y: STY CENTERING'COUNT>8Y CPY CENTERING'INDEX ; COUNTINDEX NE>LY: BEQ >`Y: LDA CENTERING'BUFFER,Y?tY: STA A'?Y: JSR CENTERING'CHROUT5?Y: INC CENTERING'COUNTO?Y: LDY CENTERING'COUNT[?Y: BNE a?Y;n?Y LDA #0?Z: STA CENTERING'COUNT? Z: PLA ;OUTPUT CR$ NULL?Z: JMP ERPRET'ACC?2Z;?ZCENTERING'COUNT BRK @ZCENTERING'INDEX BRK'@ZCENTERING'BUFFER $0700-@Z;P@XuMCI' . "[?CDGHKNRUVW^!>: CPY SLH: BNE (R: RTS.\;? C29'MIXED L : LDY #0 : LDX #1 ;FLAG BE UPPER CASE ; CPX #0 ; THIS BE UPPER CASE0 : BNE C29'MUP ; SKIP D : JSR C29'SET'LOWER; WAS LOWER CASE. SET THIS E LOWER CASEE X : CMP #"A" ; LASTEST IS "A"n l : BCC ; SET UPPER FLAG : CMP #"[" ; LASTEST IS "Z" (A LOWER CASE TER) : BCC C29'M ; SKIP! INX ; SET UPPER FLAG ! : BNE C29'M ;BRA! ; ! C29'MUP 8! : JSR C29'SET'UPPERt! : CMP #"" ; LATEST WAS AN UPPER CASE TER! : BCC C29'M! : CMP #"" ; LEAVE UPPER CASE FLAG !4 : BCS C29'M"H : DEX ; CLEAR FLAG MAKE LOWER CASE "\ ;" C29'M %" : INY2" : CPY SL>" : BNE H" : RTSN";"@C29'SET'UPPER ;SET BYTE AT (SP) UPPER CASE"T: LDA (SP),Y"h: CMP #"A" ; "A""|: BCC ; NO CHANGE": CMP #"[" ; "[" (Z1)##: BCS ; NO CHANGEI#: A #128 ; SET HIGH BITm#: STA (SP),Y ; SREw# RTS}#";#(#C29'SET'LOWER ;SET BYTE AT (SP) LOWER CASE#<#: LDA (SP),Y#P#: CMP #"" ; ""$d#: BCC ; NO CHANGE5$x#: #127 ; CLEAR HIGH BIT & SREF$#: STA (SP),YP$# RTSV$';$;"-CONVERT CASE":"CONVERT CASE""-CONVERT CASE":"@CONVERT CASE( ; SPEEDY: FILE DIS TEM .;idSPEED'BUFFER $2280 ;LAST PAGE OF MODULE BLOCKnSPEED'STATUS $8CxSPEED'GTH $8DSPEED'COUNTER $8ESPEED'T'MCI $8BC39 $: LDA #08: STA PAUSE'COUNT ; PAUSEB: STA SPEED'T'MCIL;Q`; O BUFFER, CHECKING MCI SKIP CODES `jSPEED' ro: JSR 'MODEMt: LDX C35 ;STRTHNG FILE #~: JSR CHKIN: LDY #0SPEED''MCI : LDA SPEED'T'MCI ;CHECK SEE START OF MCI COMM: BEQ T: JSR SPEED'CHECK'MCI ; SO, CHECK SKIPPERS}: LDA IOSTATUS ; EOF, : BEQ ;, INUE ING FILE: JMP SPEED' JSR BA: CMP #"\" ;IS MCI COMME: BNE ; SET FLAG OUTPUT WHAT WE HAVE SO FAR\: STA SPEED'T'MCI: CPY #0 ; SOMETHING IN BUFFER: BNE SPEED'NE ; OUTPUT IT FIRST: BEQ SPEED''MCI ; DIRECTLY CHECKING MCI  STA SPEED'BUFFER,Y : INY/ (: LDX IOSTATUSF <: STX SPEED'STATUS[ P: BNE SPEED'NEi d: CPY #40u x: BNE { ; SPEED'NE : STY SPEED'GTH : JSR CH : JSR RESTART'MODEM : LDY #0 : STY SPEED'COUNTER ;!SPEED'DIS !: LDY SPEED'COUNTER7!, LDA SPEED'BUFFER,YM!T: JSR ERPRET'ACCe!h: INC SPEED'COUNTER}!|: LDY SPEED'COUNTER!: CPY SPEED'GTH!: BEQ SPEED''CHECK!;!; CHECK ܫPAUSE ": LDA NOWCOLUMN ; CURRENT COLUMN0 NO PAUSE": BNE T": LDA PAUSE'GTH ; GTH0 ܫPAUSE DISABLED`": BEQ "0: CMP PAUSE'COUNT ; COUNTGTH NO PAUSE YET"X: BCS "l;;LDA NOWLINE ; CURRENT LINESCRN GTH NO PAUSE";;CMP LINES #;;BNE #;&#; ܫPAUSE U#: JSR CH' ;OUTPUT "-PAUSE-"b#: LDY #6x#: STY PAUSE'COUNT#  LDA P'PAUSE,Y#4: JSR ERPRET'ACC#H: PAUSE'COUNT#\: LDY PAUSE'COUNT#p: BPL #;$ JSR SPEEDY' ; PRESS:.$: LDA A' ;:C(4)c$: CMP #" " ; A$" " CR$ o$: BEQ }$: CMP #13$: BEQ $ ;$$ : LDA P' ; P0 $8 : BEQ $L : CMP #3 ; P3 (PAUSE) %` : BEQ %t ;:% LDY #7 ; "-PAUSE-" PROMPTP% : STY PAUSE'COUNT^% LDA #20t% : JSR ERPRET'ACC% : PAUSE'COUNT% : BNE % : JMP SPEED'DIS%( ;% SPEED''CHECK % ;: LDX #5% ;: JSR CHKIN'& ; LDA RODBS ; OUTPUT BUFFER EMPTY_& ;: CMP RODBE ; ALL IS WKING, TRY OVING THIS BUFFER CHECKl& ;: BNE &0 ;: JSR $E7EC ; LAST BIT OF LAST BYTE S&D ;&N : JSR CH'&X JSR SPEEDY'&l : LDA A'' : CMP #" " ; USER PRESSED SPACE, SET P1' : BNE )' : LDA #17' : STA P'Z' LDA P' ; P0 SKIPf' : BNE ' : LDA SPEED'STATUS ; ST0 BACK ' : BNE SPEED'' : JMP SPEED''4 CMP #3 ; P3 UNPAUSE'H : BEQ '\ ;(SPEED' .($: LDA #0 ;TURN $ RAINBOW=(8: STA RAINK(L: JMP CHQ(t;h(SPEED'CHECK'MCI u(: LDA #0(: STA SPEED'T'MCI ;CLEAR FLAG(: JSR BA(: TAY(: #$7F(: CMP #"T"(: BEQ 'MCI'TRUE(: CMP #"F" ): BEQ 'MCI'FALSE)(: CMP #"J"1)<: BEQ 'MCI'JUMP@)F: CMP #"X"R)P: BEQ 'MCI'X)Z;q)d: STY SPEED'BUFFER1)x: LDA #"\"): STA SPEED'BUFFER): LDY #2): RTS);)|'MCI'TRUE ): JSR BA*: STA SPEED'MCI'WHERE ;NUMBER OF MARKER SKIP TRUEL*: LDA LAST'MCI'TEST ; LAST TEST WAS TRUEb*: BNE SCAN''MARK*: LDY #0 ; SKIP MCI CODE JUST INUE *: RTS*;*D'MCI'FALSE *X: JSR BA+l: STA SPEED'MCI'WHERE ;NUMBER OF MARKER SKIP FALSEL+: LDA LAST'MCI'TEST ; LAST TEST WAS FALSEb+: BEQ SCAN''MARKo+: LDY #0y+: RTS+;+ 'MCI'JUMP + : JSR BA+4: STA SPEED'MCI'WHERE ;NUMBER OF MARKER SKIP+H;+pSCAN''MARK + JSR BA ,: CMP #"\",: BEQ ,,: LDA IOSTATUS8,: BEQ E,: LDY #0O,: RTSU,;c,8 JSR BA,L: #$7F ;IS ACTER A 'MARK',`: CMP #"M",t: BNE ,: JSR BA,: CMP SPEED'MCI'WHERE,: BNE ,: LDY #0,: RTS,;/-SPEED'MCI'WHERE BRK ;MARK NUMBER SCANNING 5- ;D-d'MCI' -x: STA IOSTATUS ;NZERO IOSTATUSEOF, NE WITH SPEEDY-: RTS-;-XP'PAUSE . "-ESUAP-"-b;-;"-SPEEDY" :"SPEEDY""-SPEEDY" :"@SPEEDY" :"SPEEDY0GENERATE'CRC'TABLES ):: LDY #06D: LDX #0@N TXANX: STA CRC^b: STA CRC1hl: TYAuv: LDX #8: E CRC: STA CRC ASL CRC1: ROL CRC: BCC : LDA #$10: E CRC: STA CRC: LDA #$21: E CRC1: STA CRC1 DEX(: BNE 6: LDA CRCP : STA CRC'TABLE'MSB,Y`: LDA CRC1z : STA CRC'TABLE'LSB,Y*: INY4: BNE >:RTS%d; RESET CPU BASIC STACKS +n;6C52 h: LDA #$FF ;RESET BASIC STACK $9FFv: STA $7D: LDA #9: STA $7E;,: LDX #3 ;SET CPU STACK 01F8 CF 02 F5 4A 6 LDA 'CPU'STACK,X ; JMPFAR BASIC@: STA $1F8,X'J: DEX3T: BPL 9^;bh: LDX #$F7 ;STACK $1F7l|: TXSv: RTS|;'CPU'STACK .BYT $CF,$02,$F5,$4A; "-CLR STACKS": "CLR STACKS""-CLR STACKS":"@CLR STACKS3 ; BASIC MODULES IN MEMY 9;DC20 S: STA 0xL: LDA HIDDEN'ADDRESS : STA PNT`: LDA HIDDEN'ADDRESS1 : STA PNT1t;: LDY #0: LDA (PNT),Y : STA TEXT'P: INY: LDA (PNT),Y : STA TEXT'P1;): LDA HIDDEN'UE1 : STA (PNT),Y@(: DEY ;LDY #0e<: LDA HIDDEN'UE : STA (PNT),Ykd;z@: LDX #$4FT LDA FIAME'TABLE$50,Xh: STA FIAME'TABLE,X|: DEX: BPL ;l: LDA #0: RTSD;"-RESTORE MODULE":"RESTORE MODULE""-RESTORE MODULE":"@RESTORE MODULE":"RESTORE MODULE