
Code produced by GEMINI AI after a not very long conversation, imported to Newbrain Emulator using the Tools–>Import from textfile feature, and Run with Newbrain Cpu at 16MHz (Tools–>Set Cpu Multiplier=5).
Original Code here
Hi Res option

This code let the user choose the graphics resolution
10 REM MATHEMATICAL HAT FOR NEWBRAIN
20 REM ADAPTED FROM PYTHON VERSION OF COMPUTE! MAR 1981 CODE
30 REM NEWBRAIN HAS (0,0) AT BOTTOM-LEFT SO NO Y FLIP NEEDED
40 REM --- GRAPHICS MODE SELECTION ---
50 PRINT "1 FOR LOW RES, 2 FOR HI RES":INPUT MO : REM SET TO 1 FOR 320x220 (LOW-RES), 2 FOR 640x220 (HIGH-RES)
60 REM --- GRAPHICS SETUP ---
70 CLOSE#1
80 IF MO = 1 THEN OPEN#0,4,"190" : REM Low-res memory
90 IF MO = 2 THEN OPEN#0,4,"L190" : REM High-res memory
100 OPEN#1,11,"220" : REM Open graphics screen for 220 visible lines
110 IF MO = 1 THEN PLOT RANGE(320,220) : REM Low-res logical coordinates
120 IF MO = 2 THEN PLOT RANGE(640,220) : REM High-res logical coordinates
130 PLOT COLOUR(1) : REM Set drawing color to foreground
140 REM --- PROGRAM CONSTANTS ---
150 XP = 144 : XR = 1.5*PI
160 YP = 56 : YR = 1 : ZP = 64
170 XF = XR/XP : YF = YP/YR : ZF = XR/ZP
180 REM --- RESOLUTION-DEPENDENT SCALING ---
190 IF MO = 1 THEN P = 160 : Q = 110 : SC = 1 : REM For 320x220: P=scrX/2, Q=scrY/2 (220/2=110), SCaling factor is 1
200 IF MO = 2 THEN P = 320 : Q = 110 : SC = 2 : REM For 640x220: P=scrX/2, Q=scrY/2 (220/2=110), SCaling factor is 2 (X is doubled)
210 REM --- MAIN PLOTTING LOOPS ---
220 FOR ZI = -Q TO Q : REM Outer loop for Z-axis (depth/height slices)
230 REM Check ZI bounds (Python line 70 equivalent)
240 IF ZI < -ZP THEN GOTO 370 : REM Skip if ZI is below -ZP
250 IF ZI > ZP THEN GOTO 370 : REM Skip if ZI is above ZP
260 ZT = ZI*XP/ZP : ZZ = ZI
270 XL = INT(0.5 + SQR(ABS(XP*XP - ZT*ZT)))
280 FT = 1
290 FOR XI = -XL TO XL : REM Inner loop for XI
300 GOSUB 390 : REM Call subroutine to calculate and plot point
310 XI = XI + 1 : REM Increment XI by 1
320 NEXT XI
330 REM End of ZI block
340 ZI = ZI + 1 : REM Increment ZI by 1
350 GOTO 380
360 REM ZI loop continuation (if previous IFs were true)
370 ZI = ZI + 1 : REM Increment ZI and continue outer loop if skipped
380 NEXT ZI : REM This line handles the loop continuation if GOTO 360 was taken
385 END : REM Prog ENDs
390 REM --- SUBROUTINE TO CALCULATE AND PLOT POINT ---
400 XT = SQR(XI*XI + ZT*ZT) * XF : XX = XI
410 YY = (SIN(XT) + 0.4*SIN(3*XT)) * YF
420 X1 = XX*SC + ZZ*SC + P : REM Project X to screen coordinates, apply SCaling factor
430 Y1 = YY - ZZ + Q + 10 : REM Project Y, NO Y FLIP. Added +10 to shift upward.
440 REM NO BOUNDS CHECK HERE AS REQUESTED
450 IF FT = 1 THEN PLOT PLA(X1,Y1) : FT = 0 : RETURN
460 PLOT MVE(X1,Y1)
470 RETURN