====== Examples ====== These are sample pieces of XC=BASIC source code. ===== Example 1: Fibonacci series ===== rem ** fibonacci series ** max = 32767 t1 = 0 t2 = 1 print "fibonacci series:" loop: print t1, " " nx = t1 + t2 t1 = t2 t2 = nx if nx < max then goto loop end ===== Example 2: Kaleidoscope effect ===== Submitted by Eugenio Rapella. Note that it is valid to use line numbers instead of labels in **XC=BASIC**. 1 const D12=12 2 const D55=55296 3 const D40=40 4 const D23=23 10 poke 53280,0:poke 53281,0 20 for t=0 to 999 30 poke 1024+t,81 : rem pallino 40 poke 55296+t,0 : rem nero 50 next t 60 let x!=cast!(D12*rnd%()) 65 let y!=cast!(D12*rnd%()) 67 let c!=rshift!(rnd!(),4) 70 m1 = D40 * y! : m2 = D40 * x! 75 n1 = D23 - x! : n2 = D23 - y! 90 poke D55+x!+m1,c! 95 poke D55+y!+m2,c! 100 poke D55+n1+m1,c! 105 poke D55+n2+m2,c! 110 poke D55+x!+D40*n2,c! 115 poke D55+y!+D40*n1,c! 120 poke D55+n1+D40*n2,c! 125 poke D55+n2+D40*n1,c! 130 goto 60 ===== Example 3: Bouncing ball ===== rem ** bouncing ball ** const SCREEN = 1024 const RASTER = 53266 const BALL = 81 const SPACE = 32 x = 1 y = 1 dx = 1 dy = 1 i = 0 gosub cls loop: charat x, y, BALL gosub wait_frame charat x, y, SPACE if x = 0 then dx = 1 if x = 39 then dx = -1 if y = 0 then dy = 1 if y = 24 then dy = -1 x = x + dx y = y + dy goto loop cls: poke SCREEN + i,SPACE inc i if i < 1000 then goto cls return wait_frame: if peek(RASTER) < 250 then goto wait_frame return ===== Example 4: USR() function ===== This example implements the << (left shift) operation on an integer for demonstration purposes. rem -- example implementation of the << (left shift) rem -- operation using an USR function print usr(@fn_leftShift, 896) end rem -- Function fn_leftShift(int argument) rem -- fn_leftShift: asm " ; The argument is available on the stack tsx asl $0102,x rol $0101,x ; Note this is the only valid way to return from an user function ; The caller will pull back the result from the stack jmp ($02fe) "