I disagree here.

WRITE ArrayPosition*2,Array[ArrayPosition].Byte0,Array[ArrayPosition].Byte1

is for ArrayPosition = 0

WRITE 0,Array[0].Byte0,Array[0].Byte1

...

is for ArrayPosition = 19

WRITE 38,Array[19].Byte0,Array[19].Byte1


According to the manual, to write a word, each of the 2 bytes that make up the word must be written separately:
w Var Word
WRITE 0,w.BYTE0
WRITE 1,w.BYTE1

in other words, WRITE does not accept 3 arguments.