10 DEFFNS="UPortCt" 20 MODE7 30 *K.0 0 40 *K.1 1 50 *K.2 2 60 *K.3 3 70 *K.4 4 80 *K.5 5 90 *K.6 6 100 *K.7 7 110 VDU23;8202;0;0;0; 120 PRINT'" ƒUser Port Utility by C.J.Richardson." 130 PRINT'"†PressSPACE†to toggle byte to alter." 140 PRINT"†Pressf0-f7†or0 to 7†to toggle bit." 150 P%=7:R%=P%:REM FIRST LINE 160 Q%=8:REM LAST LINE 170 ONERROR IFERR=17 OSCLI"FX151,98,0":OSCLI"FX151,96,255" ELSE PRINTERL:REPORT:END 180 IORB%=?&FE60 190 DDRB%=?&FE62 200 PROCscreen 210 REPEAT 220 A%=(INKEY(0))-48 230 *FX21 240 IF A%=16 A%=0 250 IF A%>=0 AND A%<8 PROCflip:A%=-1 260 IFA%=-16 PRINTTAB(5,P%)" ";:P%=P%+1:IFP%=Q%+1P%=R% 270 IFA%=-16 PRINTTAB(5,P%)"„"; 280 PRINTTAB(6,R%+5);"…Value in &FE60 (IORB)=";STR$?&FE60;" " 290 PRINTTAB(3,R%+6)"…Pending for &FE60 (IORB)=";STR$IORB%;" " 300 PRINTTAB(6,R%+7);"…Value in &FE62 (DDRB)=";STR$?&FE62;" " 310 PROCpbits 320 UNTILFALSE 330 DEFPROCflip 340 RESTORE 350 FORL%=0TOA% 360 READ B% 370 NEXT 380 IF P%=R% IORB%=IORB% EOR B% 390 IF P%=R%+1DDRB%=DDRB% EOR B% 400 OSCLI"FX 151,98,"+STR$DDRB% 410 OSCLI"FX 151,96,"+STR$IORB% 420 PROCscreen 430 ENDPROC 440 DATA1,2,4,8,16,32,64,128 450 DEFPROCscreen 460 PRINTTAB(0,R%-1); 470 PRINT"‚BIT 7 6 5 4 3 2 1 0" 480 PRINT"&FE60"; 490 IFP%=R% PRINT"„"; ELSE PRINT" "; 500 PROCpbyte(IORB%,999,"ƒOFF","ON ") 510 PRINT"&FE62"; 520 IFP%=R%+1 PRINT"„"; ELSE PRINT" "; 530 PROCpbyte(?&FE62,999,"OUT","ƒIN ") 540 ENDPROC 550 DEFPROCpbits 560 PRINTTAB(0,Q%+1);"INPUT "; 570 PROCpbyte(255-?&FE62,255-?&FE60,"IN "," ") 580 ENDPROC 590 DEFPROCpbyte(T%,V%,A$,B$):REM BYTE TO EXAMINE,VALUE IN,IF BIT 1, IF BIT 0 600 L%=256 610 REPEAT 620 L%=L%/2 630 IFT%>L%-1 T%=T%-L%:IF V%>L%-1 PRINTA$; ELSE PRINTB$; 640 IF V%>L%-1 V%=V%-L% 650 UNTILL%=1 660 PRINT 670 ENDPROC