10 REM ============================================================ 20 REM BBC BASIC port of PMD-85 BASIC-G demo (demo0-c.rmm) 30 REM Original: Tesla PMD 85-1, BASIC-G v1.0, RGB colour demo 40 REM A 3x3 grid of boxes with maths curves, each in its own colour. 50 REM Ported to BBC BASIC (MODE 1, 4 colours) - colour feature kept. 60 REM ============================================================ 70 REM --- Coordinate mapping ------------------------------------- 80 REM PMD-85 logical SCALE was 0..286 (x) by 0..256 (y). 90 REM BBC MODE 1 logical screen is 1280 x 1024 graphics units. 100 REM SX,SY scale PMD units -> BBC units. PI held in K as original. 110 MODE 1 120 K=3.14159 130 SX=1280/286 : SY=1024/256 140 REM COL(c) selects one of the 4 RGB colours (PMD POKE AD,c*64). 150 REM MODE 1 logical colours: 0=black 1=red 2=yellow 3=white. 160 REM ------------------------------------------------------------ 170 REM Define graphics helpers that apply the PMD->BBC scaling. 180 REM PROCmove / PROCdraw take PMD-85 logical coordinates. 190 REM ------------------------------------------------------------ 200 : 210 REM ================= MAIN (original line 4 = label 1000) ======= 220 REPEAT 230 GCOL 0,3 : CLG : REM start in white, clear 240 REM --- 3x3 grid of boxes (orig lines 5-11) --- 250 FOR A=1 TO 193 STEP 96 260 FOR B=1 TO 173 STEP 86 270 PROCmove(A,B) 280 PROCdraw(A+93,B) 290 PROCdraw(A+93,B+83) 300 PROCdraw(A,B+83) 310 PROCdraw(A,B) 320 NEXT B 330 NEXT A 340 REM --- centre labels (orig lines 12-16) --- 350 PROCmove(105,139) : PROClabel(2,"PMD-85") 360 PROCmove(107,126) : PROClabel(1,"RGB-GRAPHIC") 370 PROCmove(110,105) : PROClabel(2,"BASIC") 380 REM --- axes in box 1 (orig lines 17-23) --- 390 PROCmove(3,195) : PROCdraw(91,195) 400 PROCmove(48,176) : PROCdraw(48,251) 410 REM --- COLOUR 1: sinc curve SIN(F)/F (orig 24-27) --- 420 GCOL 0,1 430 FOR F=-2.5*K TO 2.5*K STEP K/8 440 H=4+(F+2.5*K)*89/(5*K) 450 IF F=0 THEN S=1 ELSE S=SIN(F)/F 460 IF F=-2.5*K THEN PROCmove(H,195+S*55) ELSE PROCdraw(H,195+S*55) 470 NEXT F 480 REM --- box 2 axes + sine wave (orig 28-36) --- 490 GCOL 0,3 500 PROCmove(240,2) : PROCdraw(240,82) 510 PROCmove(195,42) : PROCdraw(284,42) 520 GCOL 0,2 530 FOR F=0 TO 4*K+.2 STEP K/12 540 X=195+F*90/(4*K) : Y=38*SIN(F)+42 550 IF F=0 THEN PROCmove(X,Y) ELSE PROCdraw(X,Y) 560 NEXT F 570 REM --- lower-left grid lines (orig 32-36) --- 580 GCOL 0,3 590 FOR A=7 TO 84 STEP 8 : PROCmove(1,A) : PROCdraw(94,A) : NEXT A 600 FOR B=7 TO 94 STEP 9 : PROCmove(B,1) : PROCdraw(B,84) : NEXT B 610 REM --- COLOUR 3: circle (orig 37-40) --- 620 GCOL 0,3 630 FOR F=0 TO 2*K STEP K/36 640 A=30*SIN(F) 650 IF F=0 THEN PROCmove(240+A,213) ELSE PROCdraw(240+A,213+36*COS(F)) 660 NEXT F 670 REM --- COLOUR 0->use 1: Lissajous/rose COS(5F),SIN(3F) (orig 42-43) --- 680 GCOL 0,1 690 FOR F=0 TO 2*K STEP K/72 700 X=144+40*COS(5*F) : Y=215+35*SIN(3*F) 710 IF F=0 THEN PROCmove(X,Y) ELSE PROCdraw(X,Y) 720 NEXT F 730 REM --- COLOUR 1: spirograph/star burst (orig 44-50) --- 740 GCOL 0,2 750 FOR F=0 TO 26*K STEP K/1.27 760 X=144+35*SIN(F) : Y=41+35*COS(F) 770 IF F=0 THEN PROCmove(X,Y) ELSE PROCdraw(X,Y) 780 NEXT F 790 FOR F=0 TO 2*K STEP K/4 800 FOR G=F-K/4 TO 2*K STEP K/4 810 PROCmove(48+38*SIN(F),127+38*COS(F)) 820 PROCdraw(48+38*SIN(F+G),127+38*COS(F+G)) 830 NEXT G 840 NEXT F 850 REM --- COLOUR 3: spiral (orig 50-53) --- 860 GCOL 0,3 870 R=.1 880 PROCmove(240,127) 890 FOR F=0 TO 27.2 STEP K/24 900 PROCdraw(240+R*SIN(F),127+R*COS(F)) 910 R=R+.2 920 NEXT F 930 REM --- final label + pause, then loop (orig 54) --- 940 GCOL 0,3 950 PROCmove(97,87) : PROClabel(1,"1") 960 T=TIME : REPEAT UNTIL TIME-T>300 : REM PAUSE 60 (~3 s) 970 UNTIL FALSE 980 END 990 : 1000 DEF PROCmove(x,y) : MOVE x*SX, y*SY : ENDPROC 1010 DEF PROCdraw(x,y) : DRAW x*SX, y*SY : ENDPROC 1020 : 1030 REM PROClabel: print text at current graphics cursor. 1040 REM VDU 5 joins text output to the graphics cursor. 1050 REM BBC chars are ~32x32 graphics units; "sz" doubles spacing only 1060 REM (BBC BASIC has no built-in text magnification, so size is 1070 REM approximated - text is placed at the PMD label position). 1080 DEF PROClabel(sz,t$) 1090 VDU 5 1100 PRINT t$; 1110 VDU 4 1120 ENDPROC