%ADDR liefert immer nur die Adresse des benannten Feldes, dass zur Compile-Zeit bekannt ist !!!
Eine indirekte Adressierung ist in RPG nicht möglich. Genausowenig gibt es die Möglichkeit an den Inhalt eines Feldes per %ADDR zu kommen.
%ADDR(#FELD) liefert also die Adresse von #FELD und nicht des Feldnamens, der darin steht.

Da du deine Displayfile ja kennst, musst du halt einen select kodieren:

select
when #feld = 'NAME1'
eval fldadr1 = %addr(name1)
when #feld = 'NAME2'
eval fldadr1 = %addr(name1)
:
:
endsl

Dein aufgerufenes Programm kann dann mittels Referenz direkt auf das Zielfeld updaten:

D DSPFLD1 DS
D FLDNAME1 10
D FLDADR1 *

D FLDINH S 10 based(FLDADR1)

*entry plist
parm dspfld1


Einfacher und übersichtlicher ist es aber, wenn du ganz einfach ein Prototype deines PromptPGM's deklarierst und im Select direkt das Programm mit den benannten Argumenten aufrufst:

select
when #feld = 'NAME1'
callpr myprog(#feld:name1)

when #feld = 'NAME2'
callpr myprog(#feld:name2)
:
:
endsl