> Pixels ; Test correct number of logical pixels for screen size : (, 10+13,?(P-3)=0);:: =25: 2: < test%= F-bbfw%=: >&FFFF:bbfw%=(-256 &DB)=&53 P&: :gap$=3+6+7+11+14+17 Z) bbfw%:gap$=3+6+7+20+21+28+29 d M%=0 127 n M% x(:txH%=+1::txH%=+1:8;:txW%=+1 5: :gap%=gap$,M%)<>0 (txH%=22 txH%=25) < bbfw%:gap%=gap$,M%)<>0: Slightly different for BBFW : test: A test%: M%=3: 0: 28,0,31,79,7:txW%=80:txH%=25:gap%=0: US A test%: M%=6: 1: 28,0,31,39,7:txW%=40:txH%=25:gap%=0: US G test%: M%=7: 1: 28,0,31,31,8:txW%=32:txH%=24:gap%=0: Spectrum : ; &BF:'1;:cols%=0,0)+1: cols%=cols%-192*(cols%=64)  cols%<3: M%=7:cols%=8 ! &C1: &84: 7: 0,&84: 0,7 % 19,-1,0,255,0,0,19,24,0,255,0,0 ( 19,4,4,0,0,255, 19,7,7,255,255,255 # 19,0,4,0,0,255, 23,1,0;0;0;0; :  CgfH%=txH%*(8-2*gap%) : Physical pixels "gfW%=txW%*8 ,9gfY%=gfH%::gfY%=gfY%*2: gfY%>=&300: Logical pixels 6(gfX%=gfW%::gfX%=gfX%*2: gfX%>=&400 @ Doesn't work for MODE 22 J% Doesn't work for some DOS MODEs T: ^ Subtly different for BBFW hH bbfw%:gfY%=gfH%*4 : Fixed EigenY rH bbfw%:gfX%=gfW%::gfX%=gfX%*2: gfX%>=gfY%: width always > height |: #(txW%-M%-5)/2,1);"MODE ";M% 5pos(txW%/2-9),2);txW%;" x ";txH%;" characters" Upos(txW%/2-6-gfW%-gfH%),3);gfW%;" x ";gfH%;" physical ";"pixels",txW%>20) Tpos(txW%/2-5-gfX%-gfY%),4);gfX%;" x ";gfY%;" logical ";"pixels",txW%>20) 5cols%>1:(txW%-cols%-8)/2,5);cols%;" colours" : 40,txH%-4+2*(txW%<80)+2*(txW%<40)+8*(txW%<20)); "c("In graphics modes",txW%): Fc("there should be a diagonal crossing from each corner.",txW%): Mc("If they do not the logical-to-physical pixel mapping is wrong.",txW%) :  0,0: 0,7: A%=1 7 !x%="1100101",A%,1)*(gfX%-1) !y%="0110110",A%,1)*(gfY%-1)  x%,y%: A% T% A%>-1: A%=8 A%=127:M%=M%-2 & M% 0 :: Dݤpos(A%)=A%(A%>0) Nc(A$,W%):A$=A$+" ": X;A%=W%+1::A%=A%-1: A$,A%,1)=" " A%<0: A%<0:A%=W%+1 b2W%2-A%2,9);A$,A%-1);: A%>W%: 8:A%=A%-1 lA$=A$,A%+1): A$<>"": v A$="":