( bucko | 2016. 08. 12., p – 08:41 )

Ne kérj elnézést! Ha a munkatársaim lennének tizedennyire készségesek és ötször trehányabbak, nos akkor másik bolygón élnénk. :( (Tudod: ez dícséret volt! :))

Viszont rossz hírem van. Talán lesz RC5 is!

A probléma a következő: (Szintén a teszt programomban. Nem rakom ide mégegyszer a forrást.)
Tesztelve: gpasm-1.5.0 #1279 (Aug 10 2016)
Ha sorbamegyünk a sorokon, akkor az alábbi teljesen jó:

        assume   Bank4
HpInterrupt
Message[1302]: RAM Bank undefined in this chunk of code. Ensure that bank bits are correct. Assuming bank 4 from now on.
        movf    Bank4_data, w, b

Viszont ez a részlet sántít:

...
                return
Start
                assume  Bank15
Message[301]: MESSAGE: "__ACTIVE_BANK_ADDR: 4"
Warning[1206]: Register in operand not located in RAM Bank 4. Ensure that Bank bits are correct: 'ANSELAb' (Addr: 0x0F5B; Bank_15: 0x0F00; Offs: 0x005B)
                movf    ANSELA, w, b

Sorrendben nézve:
banksel 15
assume Bank4
Bank4 címzés -> helyesen jön a ...Assuming bank 4 from now on.
return -> itt törölni kellene az __ACTIVE_BANK_ADDR értékét!
assume Bank15
Bank15 címzés -> hibásan jön a ...Register in operand not located in RAM Bank 4.

A hiba vélhető oka az, hogy a return nem semmisíti meg az "assume Bank4" (vagy akár banksel) miatt létrejött __ACTIVE_BANK_ADDR=Bank4 értékadást.
Másrészt az "assume Bank15" nem jut érvényre, mint a kód elején, amikor vélhetően az __ACTIVE_BANK_ADDR=-1 volt érvényben. Ha ezt a return törölné, akkor az assume lenne érvényes!

Szóval úgy látom, még mindig felülírod az __ACTIVE_BANK_ADDR értékét az assume értékével, de csak ha az előbbi -1.

Kellene egy __ASSUMED_BANK_ADDR.
A return "család" törölje az __ACTIVE_BANK_ADDR értékét, de az __ASSUMED_BANK_ADDR maradjon változatlan!
(Esetleg a programban külön törölni kell az __ACTIVE_BANK_ADDR értékét.)
A fenti példában jók lennének az üzenetek, ha a címkezelés így nézne ki:

if ( __ACTIVE_BANK_ADDR != __BANK_INV )
    címkezelés
else
    if ( __ASSUMED_BANK_ADDR != __BANK_INV )
        címkezelés az assume értékével
    else
        bank undefined

Az így keletkező üzenetek jók lesznek és megfelelő assume használattal megoldja az általam local/global-nak nevezett assume kezelést is.