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, bViszont 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, bSorrendben 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 undefinedAz így keletkező üzenetek jók lesznek és megfelelő assume használattal megoldja az általam local/global-nak nevezett assume kezelést is.