Deiner Subroutine fehlt auf alle Fälle erst mal ein Return. Da das ganze gar kein richtiges Unterprogramm ist ersetze mal gosub durch goto.

Dann verstehe ich auch nicht so richtig den Sinn der Berechnung, da kommt immer 0 heraus. Einen Sprungbefehl auf die nächste Zeile benötigt man in Basic auch nicht. Habe Dein Programm entsprechend abgeändert, und ein wenig kommentiert.

define x byte
define y byte
define z ad[1]
Y=0
#loop
IF not z >= 150 then goto loop 'Diese Schleife wird nur verlassen, wenn AD[1] kleiner als 150 wird, das sollte man der besseren Lesbarkeit auch so programmieren:if z<150...

#Start
print y
IF z <= 150 then goto Stop2 ' Diese Abfrage "beisst sich mit der obigen, denn bis auf das Gleichheitszeichen sind beide Abfragen identisch, das Programm durchläuft also diesen Teil in fast allen Fällen immer nur einmal
goto start

#Stop2
goto loop

erfüllt das Gleiche wie Dein Programm.

Deine Erläuterung ist auch nicht sehr verständlich, versuche es doch mal richtig und richtig geschrieben zu erklären, was Du eigentlich erreichen möchtest.

Gruß

Torsten