0010 ; SymLink - Remote 0020 ; VERS 1.06 (6.11.88) 0030 ; Peter G. Fong Sam (c) 1987 0040 ; Paul Beaupre 0050 ; reveised: 4.1.88 - a) disk directory 0060 ; reveised: 6.11.88 - read FODS/write IBM 0070 ; read IBM/write FODS 0080 ; reveised: 8.14.92 - Fixed /EN /LO command 0090 0100 .BA $7000 0110 .ES 0120 .OS 0130 0140 ;**** PAGE ZERO **** 0150 0160 BYTLO .DE $30 0170 CMDPTR .DE $C6 0180 RAE_TXTPR .DE $D3 ; present end of text file 0190 RAE_DCVEC .DE $EC ; disc command vector 0200 RAE_DIFLG .DE $EE ; =1 then input from disc else tape 0210 RAE_DOFLG .DE $EF ; =1 then output to disc else tape 0220 RAE_ENVEC .DE $F0 ; disc out setup vector (ENter) 0230 RAE_LOVEC .DE $F2 ; disc in setup vector (LOad) 0240 0250 ;**** RAE **** 0260 0270 TEXTST .DE $100 ; text start 0280 TEXTEN .DE $102 ; text end 0290 RAE_BUFR .DE $135 ; RAE cmd buffer 0300 RAE_WARM .DE $B05E ; RAE warm with no message 0310 0320 ;**** SYM **** 0330 0340 OUTBYT .DE $82FA 0350 CRLF .DE $834D 0360 INTCHR .DE $8A58 0370 OUTCHR .DE $8A47 0380 PBDA .DE $A402 0390 0400 ; **** MACRO DEFINITIONS **** 0410 0420 !!!PRINT .MD (...TEXT) 0430 LDX #0 0440 ...P1 LDA ...TEXT,X 0450 BEQ ...OUT 0460 JSR OUTCHR 0470 INX 0480 BNE ...P1 0490 ...OUT 0500 .ME 0510 0520 !!!SW .MD (SRCVEC TARVEC) 0530 LDA #L,SRCVEC 0540 STA *TARVEC 0550 LDA #H,SRCVEC 0560 STA *TARVEC+1 0570 .ME 0580 0590 ;**** SymLink - Remote **** 0600 0610 LINK PRINT (LOG_ON) 7000- A2 00 7002- BD AB 72 7005- F0 06 7007- 20 47 8A 700A- E8 700B- D0 F5 700D- 20 4D 83 0620 JSR CRLF 0630 0640 ;**** RAE Program Interface **** 0650 0660 ; ------ save FODS vectors 0670 7010- A2 00 0680 S_FODS LDX #$00 7012- B5 EC 0690 S1_VEC LDA *RAE_DCVEC,X 7014- 9D 2D 73 0700 STA VEC_TEMP,X 7017- E8 0710 INX 7018- E0 0A 0720 CPX #$0A 701A- D0 F6 0730 BNE S1_VEC 0740 0750 ;----- install new vectors 0760 0770 INSTALL SW (EN_COM RAE_ENVEC) 701C- A9 37 701E- 85 F0 7020- A9 70 7022- 85 F1 0780 SW (LO_COM RAE_LOVEC) 7024- A9 C0 7026- 85 F2 7028- A9 70 702A- 85 F3 0790 SW (DC_COM RAE_DCVEC) 702C- A9 90 702E- 85 EC 7030- A9 71 7032- 85 ED 7034- 4C 5E B0 0800 JMP RAE_WARM 0810 0820 ;----- *** ENter a file 0830 7037- C0 50 0840 EN_COM CPY #$50 7039- D0 0E 0850 BNE EN_OK 0860 PRINT (ERR_1) 703B- A2 00 703D- BD E4 72 7040- F0 06 7042- 20 47 8A 7045- E8 7046- D0 F5 7048- 60 0870 RTS 0880 7049- A2 00 0890 EN_OK LDX #$00 704B- 86 EF 0900 STX *RAE_DOFLG 704D- A9 1B 0910 LDA #$1B ; Get IBM Attention 704F- 20 47 8A 0920 JSR OUTCHR 7052- A9 53 0930 LDA #'S 7054- 20 47 8A 0940 JSR OUTCHR ; Transfer File Name 7057- 20 70 71 0950 JSR XFERNAM ; Transfer Start Address 705A- AD 00 01 0960 RSAL LDA TEXTST 705D- 20 47 8A 0970 JSR OUTCHR 7060- AD 01 01 0980 LDA TEXTST+1 7063- 20 47 8A 0990 JSR OUTCHR 1000 1010 ;------ transfer filesize in no. of bytes 1020 7066- 38 1030 SEC 7067- A5 D3 1040 LDA *RAE_TXTPR 7069- ED 00 01 1050 SBC TEXTST 706C- 85 30 1060 STA *BYTLO 706E- A5 D4 1070 LDA *RAE_TXTPR+1 7070- ED 01 01 1080 SBC TEXTST+1 7073- 85 31 1090 STA *BYTLO+1 7075- A5 30 1100 LDA *BYTLO 7077- 20 47 8A 1110 JSR OUTCHR 707A- A5 31 1120 LDA *BYTLO+1 707C- 20 47 8A 1130 JSR OUTCHR 1140 1150 ;------ get ok from the PC 1160 707F- 20 58 8A 1170 JSR INTCHR 7082- C9 02 1180 CMP #$02 ; (ok to send data) 7084- F0 08 1190 BEQ SEND 7086- A9 06 1200 LDA #$06 ; ^F (aknowledge) 7088- 20 47 8A 1210 JSR OUTCHR 708B- 4C B8 70 1220 JMP EXIT 1230 1240 ;**** Send the text file buffer **** 1250 708E- A9 07 1260 SEND LDA #$07 7090- 20 47 8A 1270 JSR OUTCHR 7093- AD 00 01 1280 LDA TEXTST 7096- 85 30 1290 STA *BYTLO 7098- AD 01 01 1300 LDA TEXTST+1 709B- 85 31 1310 STA *BYTLO+1 709D- A2 00 1320 LDX #$00 709F- A1 30 1330 TX.DATA LDA (BYTLO,X) 70A1- 20 47 8A 1340 JSR OUTCHR 70A4- A5 30 1350 LDA *BYTLO 70A6- C5 D3 1360 CMP *RAE_TXTPR 70A8- D0 06 1370 BNE MOVPTR 70AA- A5 31 1380 LDA *BYTLO+1 70AC- C5 D4 1390 CMP *RAE_TXTPR+1 70AE- F0 08 1400 BEQ EXIT 70B0- E6 30 1410 MOVPTR INC *BYTLO 70B2- D0 EB 1420 BNE TX.DATA 70B4- E6 31 1430 INC *BYTLO+1 70B6- D0 E7 1440 BNE TX.DATA 70B8- 4C 5E B0 1450 EXIT JMP RAE_WARM 1460 70BB- 52 41 45 1470 REXT .BY 'RAE' $0D $00 70BE- 0D 00 1480 1490 ;------ **** LOad a file **** 1500 70C0- C0 50 1510 LO_COM CPY #$50 70C2- D0 0E 1520 BNE LO_OK 1530 PRINT (ERR_1) 70C4- A2 00 70C6- BD E4 72 70C9- F0 06 70CB- 20 47 8A 70CE- E8 70CF- D0 F5 70D1- 60 1540 RTS 1550 70D2- A2 00 1560 LO_OK LDX #$00 70D4- 86 EE 1570 STX *RAE_DIFLG 70D6- A9 1B 1580 LDA #$1B ; Get IBM attention 70D8- 20 47 8A 1590 JSR OUTCHR 70DB- A9 52 1600 LDA #'R 70DD- 20 47 8A 1610 JSR OUTCHR 70E0- 20 70 71 1620 JSR XFERNAM ;Transfer file name 1630 1640 ;------ **** get ok from IBM **** 1650 70E3- 20 58 8A 1660 JSR INTCHR 70E6- C9 02 1670 CMP #$02 70E8- F0 08 1680 BEQ LOFILE 70EA- A9 06 1690 LDA #$06 70EC- 20 47 8A 1700 JSR OUTCHR 70EF- 4C B8 70 1710 JMP EXIT 1720 70F2- A9 07 1730 LOFILE LDA #$07 70F4- 20 47 8A 1740 JSR OUTCHR 70F7- 20 58 8A 1750 JSR INTCHR 70FA- 85 30 1760 STA *BYTLO 70FC- 20 58 8A 1770 JSR INTCHR 70FF- 85 31 1780 STA *BYTLO+1 7101- 18 1790 CLC 7102- A5 30 1800 LDA *BYTLO 7104- 6D 00 01 1810 ADC TEXTST 7107- 85 30 1820 STA *BYTLO 7109- A5 31 1830 LDA *BYTLO+1 710B- 6D 01 01 1840 ADC TEXTST+1 710E- 85 31 1850 STA *BYTLO+1 1860 1870 ;**** reset RAE text pointer **** 1880 7110- AD 00 01 1890 LDA TEXTST 7113- 85 D3 1900 STA *RAE_TXTPR 7115- AD 01 01 1910 LDA TEXTST+1 7118- 85 D4 1920 STA *RAE_TXTPR+1 1930 1940 ;**** Get data from IBM **** 1950 711A- A2 00 1960 LDX #$00 711C- 20 3E 71 1970 RX.DATA JSR RX_CHR 711F- 81 D3 1980 STA (RAE_TXTPR,X) 7121- A5 D3 1990 LDA *RAE_TXTPR 7123- C5 30 2000 CMP *BYTLO 7125- D0 06 2010 BNE MOVPTR2 7127- A5 D4 2020 LDA *RAE_TXTPR+1 7129- C5 31 2030 CMP *BYTLO+1 712B- F0 08 2040 BEQ EXIT_RX 2050 712D- E6 D3 2060 MOVPTR2 INC *RAE_TXTPR 712F- D0 EB 2070 BNE RX.DATA 7131- E6 D4 2080 INC *RAE_TXTPR+1 7133- D0 E7 2090 BNE RX.DATA 2100 2110 ;**** Set the forward pointer **** 2120 7135- A9 00 2130 EXIT_RX LDA #$00 7137- A0 02 2140 LDY #$02 7139- 91 D3 2150 STA (RAE_TXTPR),Y 713B- 4C 5E B0 2160 JMP RAE_WARM 2170 2180 ;**** 9600 Baud rx driver **** 2190 713E- A0 08 2200 RX_CHR LDY #8 7140- AD 02 A4 2210 CKPORT LDA PBDA 7143- 10 FB 2220 BPL CKPORT 7145- A9 00 2230 LDA #0 7147- 8D 29 73 2240 STA RX_BYTE 714A- 20 63 71 2250 JSR TIMER1 714D- AD 02 A4 2260 NEXBIT LDA PBDA 7150- 2A 2270 ROL A 7151- 6E 29 73 2280 ROR RX_BYTE 7154- 20 69 71 2290 JSR TIMER2 7157- 88 2300 DEY 7158- D0 F3 2310 BNE NEXBIT 715A- 20 69 71 2320 JSR TIMER2 715D- AD 29 73 2330 LDA RX_BYTE 7160- 49 FF 2340 EOR #$FF 7162- 60 2350 RTS 2360 2370 ;**** Delay for 1.5 bit times **** 2380 7163- A2 19 2390 TIMER1 LDX #25 7165- CA 2400 DEX 7166- D0 FD 2410 BNE TIMER1+2 7168- 60 2420 RTS 2430 2440 ;**** Delay for 1 bit time **** 2450 7169- A2 0E 2460 TIMER2 LDX #14 716B- CA 2470 DEX 716C- D0 FD 2480 BNE TIMER2+2 716E- EA 2490 NOP 716F- 60 2500 RTS 2510 2520 ;**** Send the filename **** 2530 7170- B9 35 01 2540 XFERNAM LDA RAE_BUFR,Y 7173- 20 47 8A 2550 JSR OUTCHR 7176- C8 2560 INY 7177- E8 2570 INX 7178- E0 08 2580 CPX #$08 717A- D0 F4 2590 BNE XFERNAM 717C- A9 2E 2600 EXTN LDA #'. 717E- 20 47 8A 2610 JSR OUTCHR 7181- A0 00 2620 LDY #$00 7183- B9 BB 70 2630 XFEREXT LDA REXT,Y 7186- F0 07 2640 BEQ EXITX 7188- 20 47 8A 2650 JSR OUTCHR 718B- E8 2660 INX 718C- C8 2670 INY 718D- D0 F4 2680 BNE XFEREXT 718F- 60 2690 EXITX RTS 2700 2710 ;**** DC Commands **** 2720 7190- C0 50 2730 DC_COM CPY #$50 7192- D0 10 2740 BNE DC_OK 2750 PRINT (ERR_2) 7194- A2 00 7196- BD 00 73 7199- F0 06 719B- 20 47 8A 719E- E8 719F- D0 F5 71A1- 4C 5E B0 2760 JMP RAE_WARM 2770 71A4- A2 00 2780 DC_OK LDX #$00 71A6- B9 35 01 2790 MOVLOC LDA RAE_BUFR,Y 71A9- C9 20 2800 CMP #$20 71AB- F0 07 2810 BEQ SETDC 71AD- 9D 2A 73 2820 STA BUFFER,X 71B0- C8 2830 INY 71B1- E8 2840 INX 71B2- D0 F2 2850 BNE MOVLOC 2860 2870 ;**** Setup DC table pointers **** 2880 71B4- 8E 26 73 2890 SETDC STX BUFPTR2 71B7- A9 D7 2900 LDA #L,DCTABLE 71B9- 85 C6 2910 STA *CMDPTR 71BB- A9 71 2920 LDA #H,DCTABLE 71BD- 85 C7 2930 STA *CMDPTR+1 71BF- 20 72 72 2940 JSR CMPSTR 71C2- F0 10 2950 BEQ DO_DC.COM 2960 PRINT (ERR_3) 71C4- A2 00 71C6- BD 14 73 71C9- F0 06 71CB- 20 47 8A 71CE- E8 71CF- D0 F5 71D1- 4C 5E B0 2970 JMP RAE_WARM 2980 71D4- 6C 27 73 2990 DO_DC.COM JMP (CMDPTR2) 3000 3010 ;**** DC Commands Table **** 3020 71D7- 46 4F 44 3030 DCTABLE .BY 'FOD' 71DA- 00 72 3040 .SI R_FODS 71DC- 2F 4C 4F 3050 .BY '/LO' 71DF- 0F 72 3060 .SI LO_FODS 71E1- 2F 45 4E 3070 .BY '/EN' 71E4- 1C 72 3080 .SI EN_FODS 71E6- 52 53 54 3090 .BY 'RST' 71E9- 29 72 3100 .SI R_RL 71EB- 44 49 52 3110 .BY 'DIR' 71EE- 65 72 3120 .SI DIR 71F0- 42 4C 00 3130 .BY 'BL' $00 71F3- 3C 72 3140 .SI DISP 71F5- 54 50 52 3150 .BY 'TPR' 71F8- 49 72 3160 .SI TXPR 71FA- 54 45 4E 3170 .BY 'TEN' 71FD- 56 72 3180 .SI TXEN 71FF- FF 3190 .BY $FF 3200 3210 ;**** "DC FOD" - restore FODS vector **** 3220 7200- A2 00 3230 R_FODS LDX #$00 7202- BD 2D 73 3240 RI_VEC LDA VEC_TEMP,X 7205- 95 EC 3250 STA *RAE_DCVEC,X 7207- E8 3260 INX 7208- E0 0A 3270 CPX #$0A 720A- D0 F6 3280 BNE RI_VEC 720C- 4C 5E B0 3290 JMP RAE_WARM 3300 3310 ;------ '/LO' - read FODS, write PC 3320 720F- AD 33 73 3330 LO_FODS LDA FODS_LO 7212- 85 F2 3340 STA *RAE_LOVEC 7214- AD 34 73 3350 LDA FODS_LO+1 7217- 85 F3 3360 STA *RAE_LOVEC+1 7219- 4C 5E B0 3370 JMP RAE_WARM 3380 3390 ;------ '/EN' - read PC/write FODS 3400 721C- AD 31 73 3410 EN_FODS LDA FODS_EN 721F- 85 F0 3420 STA *RAE_ENVEC 7221- AD 32 73 3430 LDA FODS_EN+1 7224- 85 F1 3440 STA *RAE_ENVEC+1 7226- 4C 5E B0 3450 JMP RAE_WARM 3460 3470 ;------ 'RST' - restore RL vectors 3480 3490 R_RL SW (LO_COM RAE_LOVEC) 7229- A9 C0 722B- 85 F2 722D- A9 70 722F- 85 F3 3500 SW (EN_COM RAE_ENVEC) 7231- A9 37 7233- 85 F0 7235- A9 70 7237- 85 F1 7239- 4C 5E B0 3510 JMP RAE_WARM 3520 3530 ;**** Display bytlo/bytlo+1 **** 3540 723C- A5 31 3550 DISP LDA *BYTLO+1 723E- 20 FA 82 3560 JSR OUTBYT 7241- A5 30 3570 LDA *BYTLO 7243- 20 FA 82 3580 JSR OUTBYT 7246- 4C 5E B0 3590 JMP RAE_WARM 3600 3610 ;**** Display text pointer **** 3620 7249- A5 D4 3630 TXPR LDA *RAE_TXTPR+1 724B- 20 FA 82 3640 JSR OUTBYT 724E- A5 D3 3650 LDA *RAE_TXTPR 7250- 20 FA 82 3660 JSR OUTBYT 7253- 4C 5E B0 3670 JMP RAE_WARM 3680 3690 ;**** Display text end **** 3700 7256- AD 03 01 3710 TXEN LDA TEXTEN+1 7259- 20 FA 82 3720 JSR OUTBYT 725C- AD 02 01 3730 LDA TEXTEN 725F- 20 FA 82 3740 JSR OUTBYT 7262- 4C 5E B0 3750 JMP RAE_WARM 3760 3770 ;------ 'DIR' display directory 3780 7265- A9 1B 3790 DIR LDA #$1B 7267- 20 47 8A 3800 JSR OUTCHR 726A- A9 44 3810 LDA #'D 726C- 20 47 8A 3820 JSR OUTCHR 726F- 4C 5E B0 3830 JMP RAE_WARM 3840 3850 ;**** Compare a string **** 3860 7272- A2 00 3870 CMPSTR LDX #$00 7274- A0 00 3880 LDY #$00 7276- B1 C6 3890 CKSTR LDA (CMDPTR),Y 7278- 30 2E 3900 BMI FAIL 727A- F0 05 3910 BEQ INC_X 727C- DD 2A 73 3920 CMP BUFFER,X 727F- D0 14 3930 BNE NXSTR 7281- E8 3940 INC_X INX 7282- C8 3950 INY 7283- C0 03 3960 CPY #$03 7285- D0 EF 3970 BNE CKSTR 7287- B1 C6 3980 LDA (CMDPTR),Y 7289- 8D 27 73 3990 STA CMDPTR2 728C- C8 4000 INY 728D- B1 C6 4010 LDA (CMDPTR),Y 728F- 8D 28 73 4020 STA CMDPTR2+1 7292- A2 00 4030 LDX #$00 7294- 60 4040 RTS 4050 4060 ; **** Point to next string **** 4070 7295- 18 4080 NXSTR CLC 7296- A5 C6 4090 LDA *CMDPTR 7298- 69 05 4100 ADC #5 729A- 85 C6 4110 STA *CMDPTR 729C- A5 C7 4120 LDA *CMDPTR+1 729E- 69 00 4130 ADC #00 72A0- 85 C7 4140 STA *CMDPTR+1 72A2- AE 26 73 4150 LDX BUFPTR2 72A5- 4C 72 72 4160 JMP CMPSTR 4170 4180 ;**** Send error message **** 4190 72A8- A2 FF 4200 FAIL LDX #$FF 72AA- 60 4210 RTS 4220 4230 ;**** Sign on message **** 4240 72AB- 0D 0A 4250 LOG_ON .BY $0D $0A 72AD- 53 79 6D 4260 .BY 'SymLink - Remote' $0D $0A 72B0- 4C 69 6E 72B3- 6B 20 2D 72B6- 20 52 65 72B9- 6D 6F 74 72BC- 65 0D 0A 72BF- 56 65 72 4270 .BY 'Vers 1.06A (6.11.88)' $0D $0A 72C2- 73 20 31 72C5- 2E 30 36 72C8- 41 20 28 72CB- 36 2E 31 72CE- 31 2E 38 72D1- 38 29 0D 72D4- 0A 72D5- 50 46 53 4280 .BY 'PFS (c) 1987' $0D $0A 72D8- 20 28 63 72DB- 29 20 31 72DE- 39 38 37 72E1- 0D 0A 72E3- 00 4290 .BY $00 4300 4310 ;**** Error messages **** 4320 72E4- 49 6E 76 4330 ERR_1 .BY 'Invalid, or no parameters' 72E7- 61 6C 69 72EA- 64 2C 20 72ED- 6F 72 20 72F0- 6E 6F 20 72F3- 70 61 72 72F6- 61 6D 65 72F9- 74 65 72 72FC- 73 72FD- 0D 0A 00 4340 .BY $0D $0A $00 7300- 4E 6F 20 4350 ERR_2 .BY 'No command string' 7303- 63 6F 6D 7306- 6D 61 6E 7309- 64 20 73 730C- 74 72 69 730F- 6E 67 7311- 0D 0A 00 4360 .BY $0D $0A $00 7314- 49 6E 76 4370 ERR_3 .BY 'Invalid command' 7317- 61 6C 69 731A- 64 20 63 731D- 6F 6D 6D 7320- 61 6E 64 7323- 0D 0A 00 4380 .BY $0D $0A $00 4390 4400 ;**** Temp Storage **** 4410 7326- 4420 BUFPTR2 .DS 1 7327- 4430 CMDPTR2 .DS 2 7329- 4440 RX_BYTE .DS 1 732A- 4450 BUFFER .DS 3 4460 4470 ;**** FODS saved vector locations **** 4480 ;**** DO NOT CHANGE THE ORDER OF THE LABELS BELOW **** 4490 ;**** OR THE FODS_EN AND FODS_LO WILL NOT WORK **** 4500 732D- 4510 VEC_TEMP .DS $0B 4520 FODS_EN .DI VEC_TEMP+4 ; FODS saved ENter location 4530 FODS_LO .DI VEC_TEMP+6 ; FODS saved LOad location 4540 4550 .EN 0000,7338,7338 >