Hatte ich mal zur Demonstration geschrieben:
Code:
$Regfile = "m32def.dat"
$Crystal = 8000000
$hwstack = 32
$swstack = 8
$framesize = 24

Const ArSz = 5
Dim Ar(ArSz) As Byte
Dim Sz As Byte
Dim Rslt As Word

Declare Function Addall(ArToAdd As Byte , ByVal ArSize As Byte) As Word

Ar(1) = 10
Ar(2) = 25
Ar(3) = 9
Ar(4) = 21
Ar(5) = 66

Rslt = Addall(Ar(1) , ArSz)
  Print Rslt

End

Function Addall(ArToAdd As Byte , ByVal ArSize As Byte) As Word
Local idx As Byte
Local rt As Word
  rt = 0
    For idx = 1 to ArSz
      rt = rt + ArToAdd(idx)
    Next
  Addall = rt
End Function
Du darfst nicht byval übergeben, sondern byref, das ist Standard und muss nicht extra dazu geschrieben werden.
Byref ist einen Zeiger und für den Zugriff auf's ganze Array muss der auf das erste Arrayelement zeigen, deswegen Addall(Ar(1) , ArSz).
Eine implizite Übergabe per byval is soweit ich weiß nicht vorgesehen, so wie Dein Code aussieht auch nicht nötig. Du kannst ohne Weiteres mit dem Originalarray arbeiten, solange es durch die aufgerufene Routine nicht ungewollt verändert wird.