Microbot 8bit BBC Micro conversions to BBCSDL

Discussions related to graphics (2D and 3D), animation and games programming
User avatar
STOS
Posts: 12
Joined: Sun 15 Oct 2023, 10:49

Microbot 8bit BBC Micro conversions to BBCSDL

Post by STOS »

Conversions of examples from https://www.bbcmicrobot.com/
Most work as is, but a few using @% or PAGE to access memory fail, so I modified them to work.
Oh, and also formatted them for readability as we're in the 21st century now and can afford spaces :lol:

Code: Select all

      REM Modified for BBCSDL from https://bbcmic.ro/?t=9kMD3
      MODE 1
      REM Only change made is mapping colours to original BBC Micro B colour palette for mode 1
      COLOUR 0,0
      COLOUR 1,1
      COLOUR 2,3
      COLOUR 3,7
      S = SIN.03
      C = COS.03
      X = 260
      Y = 20
      U = 0
      V = 1
      FOR A = 80 TO 1200
        X = X + U
        Y = Y + V
        K = SGN(COS(A / 45) * COS(A * .0138))
        T = U
        U = U * C - K * V * S
        V = V * C + K * T * S
        Z = 24 - A MOD 10
        FOR B = -Z TO Z
          R = 1 - 80 / A
          GCOL 0, 1 + (INT(3 * ABS(COS(B * .3 + (A DIV 4 MOD 2) * PI / 2 + .4))) = A MOD 4) - (ABS B > 16)
          PLOT 69, 4 * INT(X + R * B * V), 4 * INT(Y - R * B * U)
        NEXT
      NEXT
      VDU 29,640;700;
      K = 190
      FOR J = 0 TO K
        R = (200 - 80 * COS(J * 3 * PI / K)) * (.8 + .5 * COS(J * 13 * PI / K) * COS(J * 13 * PI / K))
        FOR I = 0 TO R STEP 5
          GCOL 0, 1.3 + (I / R) - (J DIV 20 = 4) * (2 * (I DIV 15 = 3) + 1) - (J DIV 12 = 14) * (I DIV 30 = 3)
          S = SIN(J * PI / K)
          C = COS(J * PI / K)
          V = 8 * SIN(I / 16)
          PLOT 69, I * S + V * C, I * C + V * S
          PLOT 69,-(I * S + V * C), I * C + V * S
        NEXT
      NEXT
      END

Code: Select all

      REM Modified for BBCSDL from https://bbcmic.ro/?t=9eB1w
      DIM M% 16
      MODE1
      COLOUR 0,0
      COLOUR 1,1
      COLOUR 2,3
      COLOUR 3,7
      VDU5
      z = 1.5
      w = z * 4 / 3
      s = w / 160
      t = z / 128
      f = 1 / LN 2
      B = 256
      D = B * B
      C = 40
      c = 3 / C
      c = c * c / 3
      x = -0.7 - w
      y = 0.0 - z
      FOR Y = 16 TO 255 - 16
        FOR X = 16 TO 319 - 16
          u = X * s + x
          v = Y * t + y
          r = u
          i = v
          l = C
          c2 = r * r + i * i
          IF 256 * c2 * c2 - 96 * c2 + 32 * r - 3 < 0 NEXT X
        IF 16 * (c2 + 2 * r + 1) - 1 < 0 NEXT X
      REPEAT
        R = r * r
        I = i * i
        i = r * i
        i = i + i + v
        r = R - I +u
        l = l - 1
      UNTIL R + I > D OR l = 0
      !M% = X * 971 + Y * 647
      g = ?M% / 255 : REM <== Magic Dither
      IF l > 0 i = l + LN(LN(R + I) * f) * f
      GCOL 0,3 - i * i * c + g
      PLOT 69,X * 4,Y * 4
      NEXT X
      NEXT Y
      REPEAT UNTIL 0

Code: Select all

      REM4635082:<4>63;19?7=5
      REM Modified for BBCSDL from https://bbcmic.ro/?t=9dxvv
      MODE 1
      VDU 5
      L = LOG 2
      FOR N = 0 TO 3
        VDU 19,N,?(PAGE+4+N)-48,0;0;
      NEXT
      S% = 0
      FOR U = -1.725 TO -1.225 STEP .5 / 320
        D% = 2
        FOR V = -.2 TO 0 STEP .4 / 256
          GCOL 0,INT((FNp(U,V) + ?(PAGE + 8 + S% DIV 4 MOD 4 + 4 * (D% DIV 4 MOD 4)) - 48) / 16) MOD 4
          PLOT 69, S%, D%
          PLOT 69, S%, 1024 - D%
          D% = D% + 4
        NEXT V
        S% = S% + 4
      NEXT U
      REPEAT UNTIL 0

      DEFFNp(U,V)
      X = 0
      A = 0
      Y = 0
      B = 0
      C% = 0
      REPEAT
        Y = 2 * X * Y + V
        X = A - B + U
        A = X * X
        B = Y * Y
        C% = C% + 1
      UNTIL C% >= 50 OR A + B > 16
      IF C% = 50 THEN =0 ELSE = 5 *(C% + 1 - LOG((LOG(A + B) / 2) / L) / L)

Code: Select all

      REM Modified for BBCSDL from https://bbcmic.ro/?t=9eLiS
      DIM M% 16
      $M%="AICKMEOGDLBJPHNF"
      MODE1
      COLOUR 0,0
      COLOUR 1,1
      COLOUR 2,3
      COLOUR 3,7
      VDU 5
      FOR U = 0 TO 319
        H = 0
        a = 1
        FOR i = 1 TO 8
          H = H + SIN(U / 90 / a + a / 9) * a
          a = a / 3
        NEXT
        H = H * H * 15 + 80
        FOR V = H TO 255
          u = U / 128 - 2
          v = V / 128 - .6
          l = u * u + v * v
          d = V / 255
          d = .4 - d * d * d * .3 + EXP(-2 * SQR l) + EXP(-l * 99 + 3) + SIN(V *.2 + H / 100 + SIN(u * u)) * .02
          IF d > 1 d = 1
          GCOL 0,(d * 3 * 16 + M%?(U MOD 4 + (3 AND V) * 4) - 65) / 16
          PLOT 69,U * 4,V * 4
        NEXT
      NEXT
      A = RND(-7)
      GCOL 0,0
      FOR j = 0 TO 5
        t = .1
        l = 60
        MOVE 200 + j,350
        FOR i = 0 TO 4
          PLOT 1,SIN(t) * l,COS(t) * l
          t = t + (t - 1) * .3 + RND(1) * 2 - 1
          l = l *.7
        NEXT
      NEXT
      REPEATUNTILFALSE