100 REM Next BASIC port and paging testbed 110 REM Simon N Goodwin 2023 remix for extra machine IDs 115 REM Requires NextZXOS 2.08+ 120 125 LAYER CLEAR : CLEAR 49151: REM Juggle MMU slots 6 & 7 130 LAYER 2,1: CLS : REM Layer 1 maps 17 not 11 in slot 3 135 PROC SHOWSYS(): PRINT : PROC SHOWBANKS(): PRINT : STOP 140 145 DEFPROC SHOWSYS() 150 LET t= REG 0 160 PRINT "Machine ID ";t;" = "; 170 IF t=10 THEN PRINT "ZX Spectrum Next": GO TO 300 180 IF t=11 THEN PRINT "Multicore": GO TO 300 190 IF t= BIN 11111010 THEN PRINT "Anti-brick": GO TO 300 200 IF t=0 OR t=3 OR t=9 THEN PRINT "Unassigned": GO TO 300 210 IF t= BIN 00001000 THEN PRINT "Emulators": GO TO 300 220 IF t=1 OR t=2 THEN PRINT "DE";d;"A": GO TO 300 230 IF t=5 THEN PRINT "FBLABS": GO TO 300 240 IF t=6 THEN PRINT "VTRUCCO": GO TO 300 250 IF t=7 THEN PRINT "WXEDA": GO TO 300 290 PRINT "Unallocated ID: ";t 300 LET %t= REG 1 320 PRINT "Major version ";%t>>4; 330 PRINT ", minor version ";%t & 15; 340 LET t= REG 14 345 PRINT " sub-minor version ";t 350 LET %t= REG 3 370 PRINT "Machine type ";%t;" "; 380 LET %m=%t & 15 390 IF %m=0 THEN PRINT "Config mode!": 400 IF %m=1 THEN PRINT "Sinclair 16/48K Spectrum" 410 IF %m=2 THEN PRINT "Sinclair Spectrum 128 or Amstrad +2" 420 IF %m=3 THEN PRINT "Amstrad Spectrum +2A/+2B/+3 or Next" 430 IF %m=4 THEN PRINT "Pentagon 128K" 440 IF %m>4 THEN PRINT "Reserved, to be defined" 450 LET %t=%t>>4 460 PRINT "Timing "; 470 IF %t>7 THEN PRINT "Not ";: LET %t=%t-8 480 PRINT "Locked, matching "; 490 IF %t<2 THEN PRINT "Spectrum 16/48K" 500 IF %t=2 THEN PRINT "Spectrum 128/+2" 510 IF %t=3 THEN PRINT "Amstrad +2A/+2B/+3 or Next" 520 IF %t=4 THEN PRINT "Pentagon 128" 530 IF %t>4 THEN PRINT "Undocumented" 550 LET %t= REG 7 558 LET t=%t & 3 560 PROC SetFPS() 565 PRINT "CPU clock rate ";2^t*3.5;" MHz ";1+( PEEK 23401=111);"MB RAM" 567 PRINT fps;" display frames per second" 570 ENDPROC 580 590 DEFPROC SHOWBANKS() 600 PRINT "Memory Management configuration" 610 FOR s=0 TO 7 620 t= REG (80+s) 630 PRINT "Slot ";s;" @";( STR$ (s*8192)+" ")(1 TO 5); 635 PRINT " holds 8K page "; 640 IF t=255 THEN PRINT "ROM": ELSE PRINT t 650 NEXT s 680 ENDPROC 690 3600 REM Find actual frames per second 3610 DEFPROC SetFPS() 3620 LOCAL %v,ver$ 3630 %v=% REG 17&7: REM SCART/VGA0..6, HDMI 3640 IF %v<2 THEN fps=%50+v: ELSE fps=%v:fps=fps+50.6 3650 IF %v=4 THEN fps=55.4 3660 IF %v=5 THEN fps=57.1 3670 IF %v=6 THEN fps=59 3680 IF %v=7 3682 ver$= STR$ ( REG 1,16) 3684 IF ver$>="32" 3685 fps=50.0: REM New HDMI 3686 ELSE 3687 fps=48.2: REM Old HDMI 3688 ENDIF 3689 ENDIF 3690 IF % REG 5&4 THEN fps=fps*60/50: REM '60' Hz 3700 ENDPROC 3710 9800 DEFPROC FLIST() 9810 CLOSE # 4 9820 OPEN # 4,"O>NextPort208.txt" 9830 LIST #4 9840 CLOSE # 4 9850 ENDPROC 9980 9999 SAVE "NextPort208.bas"