10 ONERROR 20 ?&72=0 30 MODE3 40 VDU22,7 50 VDU23,1,0;0;0;0; 60 *FX21,0 70 *FX225,129 80 *KEY10"*DIR$|M*EX.!BOOT|M" 90 CLS 100 ack%=129:busy%=129:strobe%=129 110 pnt=0:title$=CHR$(255):PROCdata 120 pnt=0 130 title$="Parallel Data Transfer" 140 k$=CHR$(132)+CHR$(157)+CHR$(130) 150 t$=CHR$(132)+CHR$(157)+CHR$(131) 160 g$=CHR$(132)+CHR$(157)+CHR$(151) 170 cable$="]]]]]] "+CHR$(156) 180 REPEAT 190 FOR pass=1 TO 4 200 IFpass=3:PROCdata 210 IFpass=1:ack%=129ELSEack%=128 220 IFpass=1:busy%=129ELSEbusy%=128 230 IFpass=4:strobe%=128ELSEstrobe%=129 240 VDU30 250 PRINTt$" "; 260 FOR A=1 TO pnt:VDU32:NEXT:VDU42 270 FOR A=pnt TO 28:VDU32:NEXT:PRINT 280 PRINTt$CHR$(129)CHR$(141)" "title$ 290 PRINTt$CHR$(129)CHR$(141)" "title$ 300 PRINTt$CHR$(154)CHR$(145)" ``````````````````````" 310 PRINTt$"printer user" 320 PRINTt$"port port" 330 PRINTt$ 340 PRINTCHR$(130)CHR$(busy%)" BUSY"k$CHR$(busy%)"[[[[[[ "CHR$(156)" "k$" "CHR$(156) 350 PRINTCHR$(130)CHR$(ack%)" ACK"k$CHR$(ack%)"[[[[[[ "CHR$(156)" "k$" "CHR$(156) 360 PRINTCHR$(130)CHR$(d7)" bit7"k$CHR$(d7)cable$CHR$(135)"A "k$CHR$(d7)cable$"bit7" 370 PRINTCHR$(130)CHR$(d6)" bit6"k$CHR$(d6)cable$CHR$(135)"D "k$CHR$(d6)cable$"bit6" 380 PRINTCHR$(130)CHR$(d5)" bit5"k$CHR$(d5)cable$CHR$(135)"A "k$CHR$(d5)cable$"bit5" 390 PRINTCHR$(130)CHR$(d4)" bit4"k$CHR$(d4)cable$CHR$(135)"A "k$CHR$(d4)cable$"bit4" 400 PRINTCHR$(130)CHR$(d3)" bit3"k$CHR$(d3)cable$CHR$(135)"P "k$CHR$(d3)cable$"bit3" 410 PRINTCHR$(130)CHR$(d2)" bit2"k$CHR$(d2)cable$CHR$(135)"T "k$CHR$(d2)cable$"bit2" 420 PRINTCHR$(130)CHR$(d1)" bit1"k$CHR$(d1)cable$CHR$(135)"O "k$CHR$(d1)cable$"bit1" 430 PRINTCHR$(130)CHR$(d0)" bit0"k$CHR$(d0)cable$CHR$(135)"R "k$CHR$(d0)cable$"bit0" 440 PRINTCHR$(130)CHR$(strobe%)"STROBE"k$CHR$(strobe%)cable$" "k$CHR$(ack%)"[[[[[[ "CHR$(156)"CB2" 450 PRINT" "k$" "CHR$(156)" "k$CHR$(strobe%)cable$"CB1" 460 PRINTt$ 470 PRINTt$"Press:-" 480 PRINTt$"The space bar to pause the screen." 490 PRINTt$ 500 PRINTt$"Any other key for the main program." 510 PRINTt$; 520 A%=INKEY(100):IFA%=32:A%=GET 530 IFA%>32ORA%=13:PROCpdt 540 NEXT 550 UNTIL FALSE 560 : 570 DEFPROCdata 580 pnt=pnt+1:IFpnt>LEN(title$):pnt=1 590 c$=MID$(title$,pnt,1) 600 d0=SGN(ASC(c$)AND1)+128 610 d1=SGN(ASC(c$)AND2)+128 620 d2=SGN(ASC(c$)AND4)+128 630 d3=SGN(ASC(c$)AND8)+128 640 d4=SGN(ASC(c$)AND16)+128 650 d5=SGN(ASC(c$)AND32)+128 660 d6=SGN(ASC(c$)AND64)+128 670 d7=SGN(ASC(c$)AND128)+128 680 ENDPROC 690 : 700 DEFPROCpdt 710 : 720 REM Setup initial ignore codes 722 FORT=0TO30:?(&980+T)=0:NEXT 730 READN:?&980=N 740 FORT=1TON 750 READcode:READcode$ 760 ?(&980+T)=code 770 NEXT 780 : 790 S$="":CLS:REPEAT:VDU30 800 PRINTt$ 810 PRINTt$CHR$(129)CHR$(141)" "title$ 820 PRINTt$CHR$(129)CHR$(141)" "title$ 830 PRINTt$CHR$(154)CHR$(145)" ``````````````````````" 840 PRINTt$ 850 PRINTt$ 860 PRINTg$" ÿÿÿÿÿÿÿt "CHR$(150)" xÿÿÿÿÿÿÿ" 870 PRINTg$" ÿÿÿÿÿÿÿÿ} "CHR$(150)" ~ÿÿÿÿÿÿÿÿ" 880 PRINTg$" ÿÿÿÿÿÿÿÿÿ "CHR$(150)" ÿÿÿÿÿÿÿÿÿ" 890 PRINTg$" ÿÿÿÿÿÿÿÿÿ "CHR$(150)" ÿÿÿÿÿÿÿÿÿ" 900 PRINTg$" ÿÿÿÿÿÿÿÿÿ "CHR$(150)" oÿÿÿÿÿÿÿÿ" 910 PRINTg$" ÿÿÿÿÿÿÿÿ' "CHR$(150)" +ÿÿÿÿÿÿÿ" 920 PRINTg$" *?////?! "CHR$(150)" ppp||ÿ||p" 930 PRINTg$" p|"CHR$(156)"|||||||"g$CHR$(150)" ÿÿÿÿÿÿÿÿÿ p" 940 PRINTg$"|ÿÿÿ"CHR$(156)"ÿÿÿÿÿÿÿ"CHR$(132)CHR$(157)CHR$(128)"[[[[["CHR$(150)"ÿÿÿÿÿÿÿÿÿ ÿÿ|p" 950 PRINTt$ 960 PRINTt$"Space bar toggles binary/ascii data" 970 PRINTt$ 980 IF ?&72=1:A$="RECEIVE ASCII DATA " ELSE A$="RECEIVE BINARY DATA ]"+CHR$(129) 990 PRINTt$CHR$(141)A$ 1000 PRINTt$CHR$(141)A$ 1010 PRINTt$ 1020 PRINTt$CHR$(141)"FILENAME ?"CHR$(129) 1030 PRINTt$CHR$(141)"FILENAME ?"CHR$(129) 1040 PRINTt$ 1050 PRINTt$; 1060 1070 PRINTTAB(15,22)S$" "; 1080 PRINTTAB(15,21)S$" "; 1090 A%=INKEY(10) 1100 IFA%=32:?&72=?&72 EOR 1 1110 IFA%=127:S$=MID$(S$,1,LEN(S$)-1) 1120 IFA%>32 AND A%<127:S$=S$+CHR$(A%) 1130 IFA%>127:PROCaltercodes 1140 UNTIL A%=13 1150 1160 IF ?&72:VDU22,3 ELSE VDU31,26,18 1170 F%=OPENOUT S$ 1180 1190 old%=!&204 AND &FFFF 1200 1210 FOR I%=0 TO 2 STEP 2 1220 P%=&600 1230 [OPTI% 1240 LDA &FC:PHA 1250 TXA:PHA 1260 TYA:PHA 1270 \ check if is CB1 interupt 1280 LDA &FE6D:AND #&90:CMP #&90:BNE end 1290 \ Service routine 1300 LDA #&EE:STA &FE6C:\ Pull up cb2 1310 LDA #&FF:STA &70 \ Set recieve flag 1320 LDA &FE60:STA &80:\ Clear CB1 interupt 1330 .end 1340 PLA:TAY 1350 PLA:TAX 1360 PLA:STA &FC 1370 JMP old% \ Return via normal routine 1380 ]NEXT 1390 1400 !&204=!&204 AND &FFFF0000 OR &600 1410 ON ERROR PROCerror 1420 1430 miss%=0:check%=0 1440 ?&80=?&FE60:PROCget 1450 1460 REM Enable CB1 interupts 1470 ?&FE6E=&90 1480 1490 REPEAT 1500 1510 *FX151,108,206 1520 REPEAT:UNTIL?&70=&FF 1530 PROCget 1540 1550 UNTIL FALSE 1560 1570 ENDPROC 1580 1590 DEFPROCget 1600 IF ?&72 THEN PROCgetascii ELSE PROCgetbinery 1610 ENDPROC 1620 1630 DEFPROCgetascii 1640 ?&70=0:REM Clear recieve flag 1650 C%=?&80 1660 IF check%:PROCcodes 1670 IF C%=27:miss%=1:check%=1 1680 IF miss%=0 AND C%<>10:VDUC% 1690 IF C%=13:VDU10 1700 IF C%=10:miss%=1 1710 IF miss%=0:BPUT#F%,C% 1720 IF miss%:miss%=miss%-1 1730 ENDPROC 1740 1750 DEFPROCgetbinery 1760 ?&7E41=?&7E41 EOR 1 1770 ?&70=0:REM Clear recieve flag 1780 C%=?&80 1790 IF C%>31 AND C%<127:VDUC%,8,10,C%,8,11 1800 ?&7E41=?&7E41 EOR 1 1810 BPUT#F%,C% 1820 ENDPROC 1830 1840 DEFPROCcodes 1850 REM Preweight longer codes 1860 FORT=1TO?&980 1870 IFC%=?(&980+T):miss%=1 1880 NEXT 1890 REM This caters for all single control codes 1900 miss%=miss%+1 1910 check%=0 1920 ENDPROC 1930 1940 DEFPROCaltercodes 1950 CLS 1952 REPEAT:VDU30 1956 PRINT"All single codes are ignored i.e ESC,69" 1957 PRINT"This is a list of double codes that" 1958 PRINT"need special attention i.e. ESC,83,48" 1959 PRINT' 1960 FORT=1 TO 30 STEP 3 1971 PRINTCHR$(131);:IFT<10:PRINT" "; 1972 PRINTSTR$(T);" ="CHR$(134);STR$(?(&980+T)); 1973 PRINTTAB(15)CHR$(131);:IFT<10PRINT" "; 1974 PRINTCHR$(131)STR$(T+1);" =";CHR$(134);STR$(?(&980+T+1)); 1975 PRINTTAB(28)CHR$(131);:IFT<10PRINT" "; 1976 PRINTCHR$(131)STR$(T+2);" =";CHR$(134);STR$(?(&980+T+2)) 1980 NEXT 1990 PRINT' 1992 PRINT" + TO ADD DATA" 1993 PRINT" - TO REMOVE DATA" 2000 PRINT" S TO SAVE DATA" 2010 PRINT" L TO LOAD DATA" 2012 PRINT" X TO EXIT" 2014 PRINT 2020 do$=GET$ 2024 IF do$="+":INPUT"value",n$:IF VAL(n$):?(&981+?&980)=VAL(n$):?&980=?&980+1 2025 IF do$="-":INPUT"Number ",N%:IF N%:FORT=N%TO?&980:?(&980+T)=?(&980+T+1):NEXT:?(&980)=?&980-1 2026 IF do$="S"ORdo$="s":INPUT"Filename",f$:OSCLI("SAVE "+f$+" 980 "+STR$~((&981+?&980))) 2028 IF do$="L"ORdo$="l":FORT=0TO30:?(&980+T)=0:NEXT:INPUT"Filename",f$:OSCLI("LOAD "+f$) 2029 CLS 2030 UNTILdo$="x" OR do$="X" 2038 ENDPROC 2040 2050 DEFPROCerror 2060 *FX151,108,238 2070 REM Disable CB1 interupts 2080 ?&FE6E=&10 2090 !&204=!&204 AND &FFFF0000 OR old% 2100 CLOSE#F% 2110 RUN 2120 2130 REM Initial Settings 2140 DATA16:REM Number of data 2150 DATA45,"Underline" 2160 DATA51,"Linefeed pitch" 2170 DATA53,"CR command" 2180 DATA65,"Linefeed pitch" 2190 DATA67,"Page Length" 2200 DATA74,"+ve feed after printing" 2210 DATA78,"Bottom line skip" 2220 DATA81,"Rignt Margin" 2230 DATA83,"Superscript" 2240 DATA85,"Uni/bi directional" 2250 DATA87,"Double Width" 2260 DATA105,"Immediate printing" 2270 DATA106,"-ve feed after printing" 2280 DATA108,"Left Margin" 2290 DATA112,"Proportional" 2300 DATA120,"NLQ"