Removed EightBall scripts from main directory.

This commit is contained in:
Bobbi Webber-Manners 2018-05-27 16:32:16 -04:00
parent 644111b858
commit 2859d24802
6 changed files with 0 additions and 1257 deletions

28
err.8b
View File

@ -1,28 +0,0 @@
word counter=0
word fails=0
call expect(sqr(10)==100)
end
sub sqr(word x)
return x*x
endsub
sub expect(byte b)
pr.dec counter
pr.msg ": "
counter=counter+1
if b
pr.msg " Pass "
else
pr.msg " FAIL "
fails=fails+1
endif
pr.nl
return 0
endsub
sub xxxxxx(word qqq)
return qqq
endsub

17
fact.8b
View File

@ -1,17 +0,0 @@
'
' Recursive factorial function test
'
pr.dec fact(5); pr.nl
end
sub fact(word val)
pr.msg "fact("; pr.dec val; pr.msg ")"; pr.nl
if val == 0
return 1
else
return val * fact(val-1) ; ' THIS DOES NOT WORK
' return fact(val-1) * val ; ' BUT THIS DOES!!!
endif
endsub

View File

@ -1,52 +0,0 @@
' Sieve of Eratosthenes
pr.msg "Sieve of Eratosthenes ..."
const sz=30
const arrsz=sz*sz
byte A[arrsz] = {}
word i = 0
for i = 0 : arrsz-1
A[i] = 1
endfor
call doall(sz, A)
end
sub doall(word nr, byte array[])
word n = nr * nr
pr.msg "nr is "; pr.dec nr; pr.nl
call sieve(n, nr, array)
call printresults(n, array)
return 0
endsub
sub sieve(word n, word nr, byte AA[])
pr.msg "Sieve"
word i = 0; word j = 0
for i = 2 : (nr - 1)
if AA[i]
j = i * i
while (j < n)
AA[j] = 0
j = j + i
endwhile
endif
endfor
return 0
endsub
sub printresults(word n, byte AA[])
word i = 0
for i = 2 : (n - 1)
if AA[i]
if i > 2
pr.msg ", "
endif
pr.dec i
endif
endfor
pr.msg "."
pr.nl
return 0
endsub

87
str.8b
View File

@ -1,87 +0,0 @@
byte msg1[100]="Enter your first name> "
byte msg2[100]="Enter your last name> "
byte s1[100]={}
byte s2[100]={}
byte full[200]={}
byte space[2]=" "
pr.str msg1
kbd.ln s1,100
pr.msg "'"; pr.str s1; pr.msg "' has "; pr.dec strlen(s1); pr.msg " chars"; pr.nl
pr.str msg2
kbd.ln s2,100
pr.msg "'"; pr.str s2; pr.msg "' has "; pr.dec strlen(s2); pr.msg " chars"; pr.nl
call strcpy(full,s1)
call strcat(full,space)
call strcat(full,s2)
pr.msg "'"; pr.str full; pr.msg "' has "; pr.dec strlen(full); pr.msg " chars"; pr.nl
pr.msg "Comparison s1:s2 ... "; pr.dec.s strcmp(s1,s2); pr.nl
end
'
' Return length of null-terminated string
'
sub strlen(byte str[])
word i=0
while str[i]
i=i+1
endwhile
return i
endsub
'
' Copy null-terminated string from src to dst
'
sub strcpy(byte dst[], byte src[])
word i=0
while src[i]
dst[i]=src[i]
i=i+1
endwhile
endsub
'
' Append null-terminated string src to dst
'
sub strcat(byte dst[], byte src[])
word i=0
word j=0
while dst[i]
i=i+1
endwhile
while src[j]
dst[i]=src[j]
i=i+1
j=j+1
endwhile
endsub
'
' Compare null-terminated string s1 to s2
' Return -1 if s1 < s2
' Return 0 if s1 == s2
' Return +1 if s1 > s2
'
sub strcmp(byte s1[], byte s2[])
word i=0
while 1
if ((!s1[i])&&(!s2[i]))
return 0
endif
if (!s1[i])
return -1
endif
if (!s2[i])
return 1
endif
if (s1[i]<s2[i])
return -1
endif
if (s1[i]>s2[i])
return 1
endif
i=i+1
endwhile
endsub

514
tetris.8b
View File

@ -1,514 +0,0 @@
' Apple II Low Res Tetris
' Bobbi 2018
word addrs[24]={$400,$480,$500,$580,$600,$680,$700,$780,$428,$4a8,$528,$5a8,$628,$6a8,$728,$7a8,$450,$4d0,$550,$5d0,$650,$6d0,$750,$7d0}
' Size of playfield
const lhs=14
const rhs=lhs+11
const top=10
const bttm=top+22
const strow=8
const stcol=18
' Apple II specific addresses
const spkr=$c030
const kbdata=$c000
const kbstrb=$c010
const hpos=36
const rnd=$4e
' ASCII
const beep=7
const clrscr=12
' Position of piece
byte col=stcol
byte row=strow
byte rot=0
' Previous col, row, rotation
byte ocol=stcol
byte orow=strow
byte orot=0
byte key=0
byte piece=0
byte done=0
word score=0
' Seed the PRNG
word rr=$4e
' Left, right, rotate permitted?
byte lok=1
byte rok=1
byte rotok=1
' First run
byte first=1
call prng()
piece=rr%5
call loresmix()
while 1
score=0
pr.ch clrscr
call clrlomix()
call frame()
call printnewlines()
if first
call printintro()
kbd.ch &key
call clearintro()
first=0
endif
call printtext()
call printscore()
call playgame()
kbd.ch &key
endwhile
end
sub playgame()
while 1
key=getkey()
orow=row;ocol=col;orot=rot
if key=='s'&&rotok
if rot==3
rot=0
else
rot=rot+1
endif
else
if (key=='a')&&lok
col=col-1
else
if (key=='d')&&rok
col=col+1
else
if key=='p'
while getkey()==0
endwhile
endif
endif
endif
endif
key=^spkr
row=row+1
lok=1
rok=1
rotok=1
call drawPiece(ocol,orow,orot,1); 'Erase
if drawPiece(col,row,rot,0)
if row==strow+1
call loser()
return 0
else
call checkframe(row)
col=stcol;row=strow;rot=0
call prng()
piece=rr%5
endif
endif
endwhile
endsub
sub getkey()
if ^kbdata<128
return 0
endif
^kbstrb=0
return ^kbdata
endsub
sub lores()
^$c050=0
^$c052=0
^$c054=0
^$c056=0
endsub
sub loresmix()
^$c050=0
^$c053=0
^$c054=0
^$c056=0
endsub
sub text()
^$c051=0
^$c054=0
endsub
sub clrlo()
byte r=0
byte c=0
for r=0:23
for c=0:39
^(addrs[r]+c)=0
endfor
endfor
endsub
sub clrlomix()
byte r=0
byte c=0
for r=0:19
for c=0:39
^(addrs[r]+c)=0
endfor
endfor
for r=20:23
for c=0:39
^(addrs[r]+c)=' '+128
endfor
endfor
endsub
sub plot(byte c,byte r,byte color)
word a=addrs[r/2]+c
if r%2
^a=(^a&$0f)|(color<<4)
else
^a=(^a&$f0)|color
endif
endsub
sub readpix(byte c,byte r)
word a=addrs[r/2]+c
if r%2
return (^a&$f0)>>4
else
return ^a&$0f
endif
endsub
sub hlin(byte c1,byte c2,byte r,byte color)
byte i=0
for i=c1:c2
call plot(i,r,color)
endfor
endsub
sub vlin(byte c,byte r1,byte r2,byte color)
byte i=0
for i=r1:r2
call plot(c,i,color)
endfor
endsub
sub frame()
call hlin(lhs,rhs,bttm,4)
call vlin(lhs,top,bttm,4)
call vlin(rhs,top,bttm,4)
endsub
sub drawPiece(byte c,byte r,byte rot,byte erase)
if piece==0
return drawT(c,r,rot,erase)
else; if piece==1
return drawL(c,r,rot,erase)
else; if piece==2
return drawZ(c,r,rot,erase)
else; if piece==3
return drawSq(c,r,rot,erase)
else
return drawI(c,r,rot,erase)
endif;endif;endif;endif
endsub
sub drawT(byte c,byte r,byte rot,byte erase)
byte color=1
if erase
color=0
endif
if rot==0
call plot(c,r+1,color)
call plot(c+1,r+1,color)
call plot(c+2,r+1,color)
call plot(c+1,r+2,color)
if erase
return 0
endif
lok=!(readpix(c-1,r+2)||readpix(c,r+2)||readpix(c,r+3))
rok=!(readpix(c+2,r+2)||readpix(c+3,r+2)||readpix(c+2,r+3))
rotok=!(readpix(c,r+2)||readpix(c+1,r+3))
return readpix(c,r+2)||readpix(c+1,r+3)||readpix(c+2,r+2)
else
if rot==1
call plot(c+1,r,color)
call plot(c,r+1,color)
call plot(c+1,r+1,color)
call plot(c+1,r+2,color)
if erase
return 0
endif
lok=!(readpix(c-1,r+2)||readpix(c,r+2)||readpix(c,r+3))
rok=!(readpix(c+2,r+1)||readpix(c+2,r+2)||readpix(c+2,r+3))
rotok=!(readpix(c,r+2)||readpix(c+2,r+2))
return readpix(c,r+2)||readpix(c+1,r+3)
else
if rot==2
call plot(c+1,r,color)
call plot(c,r+1,color)
call plot(c+1,r+1,color)
call plot(c+2,r+1,color)
if erase
return 0
endif
lok=!(readpix(c-1,r+2)||readpix(c,r+2)||readpix(c+1,r+2))
rok=!(readpix(c+1,r+2)||readpix(c+2,r+2)||readpix(c+3,r+2))
rotok=!(readpix(c+1,r+2)||readpix(c+2,r+2)||readpix(c+1,r+3))
return readpix(c,r+2)||readpix(c+1,r+2)||readpix(c+2,r+2)
else
if rot==3
call plot(c+1,r,color)
call plot(c+1,r+1,color)
call plot(c+2,r+1,color)
call plot(c+1,r+2,color)
if erase
return 0
endif
lok=!(readpix(c,r+1)||readpix(c,r+2)||readpix(c,r+3))
rok=!(readpix(c+2,r+2)||readpix(c+3,r+2)||readpix(c+2,r+3))
rotok=!(readpix(c,r+2)||readpix(c+2,r+2)||readpix(c+1,r+3))
return readpix(c+1,r+3)||readpix(c+2,r+2)
endif
endif
endif
endif
endsub
sub drawL(byte c,byte r,byte rot,byte erase)
byte color=8
if erase
color=0
endif
if rot==0
call plot(c+1,r,color)
call plot(c+1,r+1,color)
call plot(c+1,r+2,color)
call plot(c+2,r+2,color)
if erase
return 0
endif
lok=!(readpix(c,r+1)||readpix(c,r+2)||readpix(c,r+3)||readpix(c+1,r+3))
rok=!(readpix(c+2,r+1)||readpix(c+2,r+3)||readpix(c+3,r+3))
rotok=!(readpix(c,r+2)||readpix(c+2,r+1))
return readpix(c+1,r+3)||readpix(c+2,r+3)
else
if rot==1
call plot(c+2,r,color)
call plot(c,r+1,color)
call plot(c+1,r+1,color)
call plot(c+2,r+1,color)
if erase
return 0
endif
lok=!(readpix(c-1,r+2)||readpix(c,r+2)||readpix(c+1,r+2))
rok=!(readpix(c+1,r+2)||readpix(c+2,r+2)||readpix(c+3,r+2)||readpix(c+3,r+1))
rotok=!(readpix(c+2,r+2)||readpix(c+2,r+3))
return readpix(c,r+2)||readpix(c+1,r+2)||readpix(c+2,r+2)
else
if rot==2
call plot(c+1,r,color)
call plot(c+2,r,color)
call plot(c+2,r+1,color)
call plot(c+2,r+2,color)
if erase
return 0
endif
lok=!(readpix(c,r+1)||readpix(c+1,r+1)||readpix(c+1,r+2)||readpix(c+1,r+3))
rok=!(readpix(c+3,r+1)||readpix(c+3,r+2)||readpix(c+3,r+3))
rotok=!(readpix(c+1,r+1)||readpix(c+1,r+2)||readpix(c+3,r+1))
return readpix(c+1,r+1)||readpix(c+2,r+3)
else
if rot==3
call plot(c+1,r,color)
call plot(c+2,r,color)
call plot(c+3,r,color)
call plot(c+1,r+1,color)
if erase
return 0
endif
lok=!(readpix(c,r+1)||readpix(c,r+2))
rok=!(readpix(c+2,r+1)||readpix(c+3,r+1)||readpix(c+4,r+1)||readpix(c+2,r+2))
rotok=!(readpix(c+2,r+1)||readpix(c+2,r+2)||readpix(c+2,r+3)||readpix(c+3,r+3))
return readpix(c+1,r+2)||readpix(c+2,r+1)||readpix(c+3,r+1)
endif
endif
endif
endif
endsub
sub drawZ(byte c,byte r,byte rot,byte erase)
byte color=2
if erase
color=0
endif
if (rot==0)||(rot==2)
call plot(c+1,r,color)
call plot(c+1,r+1,color)
call plot(c+2,r+1,color)
call plot(c+2,r+2,color)
if erase
return 0
endif
lok=!(readpix(c,r+1)||readpix(c,r+2)||readpix(c+1,r+2)||readpix(c+1,r+3))
rok=!(readpix(c+3,r+2)||readpix(c+3,r+3))
rotok=!(readpix(c,r+3)||readpix(c+1,r+3)||readpix(c+1,r+2))
return readpix(c+1,r+2)||readpix(c+2,r+3)
else
if (rot==1)||(rot==3)
call plot(c+1,r+1,color)
call plot(c+2,r+1,color)
call plot(c,r+2,color)
call plot(c+1,r+2,color)
if erase
return 0
endif
lok=!(readpix(c-1,r+3)||readpix(c,r+3)||readpix(c+2,r+2))
rok=!(readpix(c+1,r+3)||readpix(c+2,r+3)||readpix(c+2,r+2)||readpix(c+3,r+2))
rotok=!(readpix(c+2,r+2)||readpix(c+2,r+3))
return readpix(c,r+3)||readpix(c+1,r+3)
endif
endif
endsub
sub drawI(byte c,byte r,byte rot,byte erase)
byte color=14
if erase
color=0
endif
if (rot==0)||(rot==2)
call plot(c,r+2,color)
call plot(c+1,r+2,color)
call plot(c+2,r+2,color)
call plot(c+3,r+2,color)
if erase
return 0
endif
lok=!readpix(c-1,r+3)
rok=!readpix(c+4,r+3)
rotok=!(readpix(c+2,r+3)||readpix(c+2,r+4))
return readpix(c,r+3)||readpix(c+1,r+3)||readpix(c+2,r+3)||readpix(c+3,r+3)
else
if (rot==1)||(rot==3)
call plot(c+2,r,color)
call plot(c+2,r+1,color)
call plot(c+2,r+2,color)
call plot(c+2,r+3,color)
if erase
return 0
endif
lok=!(readpix(c+1,r+1)||readpix(c+1,r+2)||readpix(c+1,r+3)||readpix(c+1,r+4))
rok=!(readpix(c+3,r+1)||readpix(c+3,r+2)||readpix(c+3,r+3)||readpix(c+3,r+4))
rotok=!(readpix(c,r+3)||readpix(c+1,r+3)||readpix(c+3,r+3))
return readpix(c+2,r+4)
endif
endif
endsub
sub drawSq(byte c,byte r,byte rot,byte erase)
byte color=13
if erase
color=0
endif
call plot(c+1,r+1,color)
call plot(c+2,r+1,color)
call plot(c+1,r+2,color)
call plot(c+2,r+2,color)
if erase
return 0
endif
lok=!(readpix(c,r+2)||readpix(c,r+3))
rok=!(readpix(c+3,r+2)||readpix(c+3,r+3))
rotok=1
return readpix(c+1,r+3)||readpix(c+2,r+3)
endsub
sub checkframe(byte r)
byte rr=r+3
if rr>bttm-1
rr=bttm-1
endif
while rr>=r
if checkline(rr)
pr.ch beep
else
rr=rr-1
endif
endwhile
endsub
sub checkline(byte r)
byte c=0
for c=lhs+1:rhs-1
if !readpix(c,r)
return 0
endif
endfor
call deleterow(r)
score=score+1
call printscore()
return 1
endsub
sub deleterow(byte r)
byte i=r
byte c=0
byte v=0
byte empty=0
while (i>top+1)&&(!empty)
empty=1
for c=lhs+1:rhs-1
v=readpix(c,i-1)
if v
empty=0
endif
call plot(c,i,v)
endfor
i=i-1
endwhile
endsub
sub printnewlines()
byte i=0
for i=0:19
pr.nl
endfor
endsub
sub printintro()
^hpos=10
pr.msg "TETRIS - PRESS ANY KEY"
endsub
sub clearintro()
^hpos=10
pr.msg " "
endsub
sub printtext()
^hpos=10
pr.msg "SCORE: "
endsub
sub printscore()
^hpos=17
pr.dec score
pr.msg " "
endsub
sub loser()
^hpos=10
pr.msg "GAME OVER - SCORE WAS "
pr.dec score
endsub
sub prng()
rr=rr*8191+7; ' Mersenne prime
endsub

View File

@ -1,559 +0,0 @@
'----------------------'
' Eightball Unit Tests '
'----------------------'
byte status=0
word counter=1
word fails=0
'------------------
' Word variables
'------------------
pr.msg "Word vars:"; pr.nl
word w1=10
word w2=100
word w3=50
w1=10
status=(w1==10)&&(w2==100)&&(w3==50)
call expect(status)
w2=w2+10
status=(w1==10)&&(w2==110)&&(w3==50)
call expect(status)
w2=w1+10
status=(w1==10)&&(w2==20)&&(w3==50)
call expect(status)
'------------------
' Byte variables
'------------------
pr.msg "Byte vars:"; pr.nl
byte b1=10;
byte b2=100;
word b3='a';
call expect((b1==10)&&(b2==100)&&(b3=='a'))
b2=b2+10
call expect((b1==10)&&(b2==110)&&(b3=='a'))
b2=b1+10
call expect((b1==10)&&(b2==20)&&(b3=='a'))
'------------------
' Word arrays
'------------------
pr.msg "Word arrays:"; pr.nl
word wpre=0
word warr[10]={12,12,12,12,12,12,12,12,12,12}
word wpost=0
pr.msg "Size of word (4 for interpeter, 2 for 6502 & VM): "
pr.dec (&warr[2]-&warr[1])
pr.nl
call expect((wpre==0)&&(warr[0]==12)&&(warr[1]==12)&&(warr[2]==12)&&(warr[9]==12)&&(wpost==0))
warr[1]=123
call expect((wpre==0)&&(warr[0]==12)&&(warr[1]==123)&&(warr[2]==12)&&(warr[9]==12)&&(wpost==0))
'------------------
' Byte arrays
'------------------
pr.msg "Byte arrays:"; pr.nl
byte bpre=0
byte barr[2*5]={12,12,12,12,12,12,12,12,12,12}
byte bpost=0
call expect((&barr[2]-&barr[1])==1)
call expect((&barr[4]-&barr[1])==3)
call expect((bpre==0)&&(barr[0]==12)&&(barr[1]==12)&&(warr[2]==12)&&(barr[9]==12)&&(bpost==0))
barr[1]=123
call expect((bpre==0)&&(barr[0]==12)&&(barr[1]==123)&&(warr[2]==12)&&(barr[9]==12)&&(bpost==0))
'------------------
' For loop
'------------------
pr.msg "For loop:"; pr.nl
word sum=0
word iw=0
for iw=1:3
sum=sum+iw
endfor
call expect(sum==6)
sum=0
byte ib=0
for ib=1:3
sum=sum+ib
endfor
call expect(sum==6)
'------------------
' While loop
'------------------
pr.msg "While loop:"; pr.nl
sum=0
iw=0
while iw<4
sum=sum+iw
iw=iw+1
endwhile
call expect(sum==6)
sum=0
ib=0
while ib<4
sum=sum+ib
ib=ib+1
endwhile
call expect(sum==6)
'------------------
' If/Endif
'------------------
pr.msg "If/Endif:"; pr.nl
iw=123
ib=0
if iw==123
ib=1
endif
call expect(ib==1)
iw=124
ib=0
if iw==123
ib=1
endif
call expect(ib==0)
'------------------
' If/Else/Endif
'------------------
pr.msg "If/Else/Endif:"; pr.nl
iw=123
ib=99
if iw==123
ib=1
else
ib=0
endif
call expect(ib==1)
iw=124
ib=99
if iw==123
ib=1
else
ib=0
endif
call expect(ib==0)
'------------------
' Pointers/Addresses
'------------------
pr.msg "Pointers/Addresses:"; pr.nl
word ptr=&iw
*ptr=9999
call expect(iw==9999)
ptr=&ib
^ptr=73
call expect(ib==73)
call expect(&warr[0]==&warr)
'------------------
' Call subroutine
'------------------
pr.msg "Call sub:"; pr.nl
call gv1()
call expect(iw==987)
call gb1()
call expect(ib==$ae)
call gwa1()
call expect(warr[3]==1234)
call gba1()
call expect(barr[7]==$34)
call c1()
call expect(iw==555)
call noret()
call expect(iw==9876)
'------------------
' Subroutine params
'------------------
pr.msg "Sub params:"; pr.nl
warr[0]=100
call pw1(warr[0])
call expect(iw==200)
barr[2]=10
call pb1(barr[2])
call expect(iw==20)
warr[0]=10
warr[1]=20
call pw2(warr[0],warr[1])
call expect(iw==200)
barr[0]=10
barr[1]=20
call pb2(barr[0],barr[1])
call expect(iw==200)
warr[0]=500
warr[1]=750
call add(warr[0],warr[1],&iw)
call expect(iw==1250)
warr[0]=500
warr[1]=750
call add(warr[0],warr[1],&warr[2])
call expect(warr[2]==1250)
word a1=&iw
call ppw1(2345, a1)
call expect(iw==2345)
call ppw1(2345, &iw)
call expect(iw==2345)
word a2=&ib
call ppb1(110, a2)
call expect(ib==110)
pr.msg " Recursive:"; pr.nl
call recurse1(5, &iw)
call expect(iw==120)
pr.msg " Array pass by ref:"; pr.nl
word AA[10]={}
call setwarray(AA, 10)
call sumwarray(AA, 10)
call expect(iw==45)
byte BB[10]={}
call setbarray(BB, 10)
call sumbarray(BB, 10)
call expect(iw==45)
call pbrfirstlevel(AA)
call expect(AA[3]==123)
call wrapper()
'------------------
' Invoke func
'------------------
pr.msg "Invoke func:"; pr.nl
call expect(sqr(10)==100)
pr.msg " Recursive:"; pr.nl
iw=recurse2(5)
call expect(iw==5*4*3*2)
iw=recurse3(5)
call expect(iw==5*4*3*2)
'------------------
' Locals
'------------------
pr.msg "Locals:"; pr.nl
iw=123
call lw1()
call expect(iw==123*2)
iw=123
call lb1()
call expect(iw==123*2)
iw=123
call lw2()
call expect(iw==123*4)
iw=123
call lb2()
call expect(iw==123*4)
call lpw1()
call expect(iw==1)
call lpb1()
call expect(iw==1)
call gp1()
call expect(iw==1)
'------------------
' Consts
'------------------
pr.msg "Consts:"; pr.nl
const cstsz=10
word AAA[cstsz]={}
byte iii=0
word summ=0
for iii=0:cstsz-1
AAA[iii]=10
endfor
for iii=0:cstsz-1
summ=summ+AAA[iii]
endfor
call expect(summ==cstsz*10)
'------------------
call done()
'------------------
end
'
' Test subroutines
'
sub gv1()
iw = 987; ' Set global word
return 0
endsub
sub gb1()
ib = $ae; ' Set global byte
return 0
endsub
sub gwa1()
warr[3] = 1234; ' Set global word array member
return 0
endsub
sub gba1()
barr[7] = $34; ' Set global byte array member
return 0
endsub
sub pw1(word xx)
iw = xx * 2
return 0
endsub
sub pb1(byte xx)
iw = xx * 2
return 0
endsub
sub pw2(word xx, word yy)
iw = xx * yy
return 0
endsub
sub pb2(byte xx, byte yy)
iw = xx * yy
return 0
endsub
sub add(word a, word b, word sumaddr)
*sumaddr=a+b
return 0
endsub
sub ppw1(word val, word addr)
*addr=val
return 0
endsub
sub ppb1(byte val, word addr)
^addr=val
return 0
endsub
sub c1()
call c2()
return 0
endsub
sub c2()
call c3()
return 0
endsub
sub c3()
iw = 555
return 0
endsub
sub noret()
iw = 9876
endsub
sub sqr(word x)
return x*x
endsub
sub recurse1(word x, word addr)
if x==0
*addr=1
else
call recurse1(x-1,addr)
*addr=*addr*x
endif
endsub
sub setwarray(word A[], word len)
word i=0
for i=0:len-1
A[i] = i
endfor
endsub
sub sumwarray(word A[], word len)
word i=0
iw=0
for i=0:len-1
iw=iw+A[i]
endfor
endsub
sub setbarray(byte A[], word len)
word i=0
for i=0:len-1
A[i] = i
endfor
endsub
sub sumbarray(byte A[], word len)
word i=0
iw=0
for i=0:len-1
iw=iw+A[i]
endfor
endsub
sub pbrfirstlevel(word XX[])
call pbrsecondlevel(XX)
endsub
sub pbrsecondlevel(word XX[])
byte i=0
for i=0:9
XX[i]=123
endfor
endsub
sub wrapper()
word xyz[10]={}
call pbrfirstlevel(xyz)
call expect(xyz[3]==123)
endsub
sub recurse2(word x)
if x==0
return 1;
else
return recurse2(x-1)*x
endif
endsub
' Why does this not work, even though
' recurse2() works fine??
sub recurse3(word x)
if x==0
return 1;
else
return x*recurse3(x-1)
endif
endsub
sub lw1()
word loc=2
iw=iw*loc
return 0
endsub
sub lb1()
byte loc=2
iw=iw*loc
return 0
endsub
sub lw2()
word loc=0
loc=4
iw=iw*loc
return 0
endsub
sub lb2()
byte loc=0
loc=4
iw=iw*loc
return 0
endsub
sub lpw1()
iw=0
word xx=0
word addr=&xx
*addr=1234
if xx==1234
iw=1
endif
return 0
endsub
sub lpb1()
iw=0
byte xx=0
word addr=&xx
^addr=123
if xx==123
iw=1
endif
return 0
endsub
sub gp1()
iw=0
word addr=&iw
*addr=5436
if iw==5436
iw=1
endif
return 0
endsub
'
' Utility subroutines
'
sub expect(byte b)
pr.dec counter
pr.msg ": "
counter=counter+1
if b
pr.msg " Pass "
else
pr.msg " FAIL "
fails=fails+1
endif
pr.nl
return 0
endsub
sub done()
if fails==0
pr.msg "*** ALL "; pr.dec counter-1; pr.msg " TESTS PASSED ***"; pr.nl
else
pr.msg "*** "; pr.dec fails; pr.ch '/'; pr.dec counter-1; pr.msg " TESTS FAILED ***"; pr.nl
endif
endsub