Ich nehme mal an, dass diese Funktion irgendwo mit

Declare Function ReadBus () as Byte

deklariert ist.

Warum Du das B-Port mit
Ddrb = &B00000000
auf Input stellst, ist nicht ersichtlich. Das C-Port wird mit
Ddrc = &B11111100
für die Pins 2-7 auf Output und die Pins 0-1 auf Input gestellt.
Im nachfolgenden Code scheinst aber alle 8 vom Port C eingelesenen Bits auszuwerten.

Und nun zu Deiner eigentlichen Fragestellung.
Einen Funktionswert kann Du auf folgende Weise:

loadadr readbus, X
st X, r16

zurückgeben. Das obige Beispiel ist für den Fall, dass ReadBus einen Rückgabewert vom Type BYTE hat.
Du kannst den Funktionsnamen wie einen Variablennamen mit loadadr verwenden.

Ich gehe mal davon aus, dass diese Funktion primär einen experimentellen Charakter hat, um diverse Möglichkeiten zu testen. Befasse Dich mal mit dem Bascom Simulator, damit kannst Du Schritt für Schritt verfolgen, was in den einzelnen Registern und Speicherstellen passiert. Damit kannst Du nach herzenslust experimentieren, weil Du auch während der Simulation die Input-Pins im Pegel verändern kannst.