( bucko | 2016. 08. 13., szo – 19:50 )

:)
Feljebb pont ott van az algoritmus, de azért kifejtem egy kicsit.

0. Az alábbiak a BSR-rel történő direkt címzés helyességének megállapításához kell alkalmazni.
1. Az __ACTIVE_BANK_ADDR kezdeti értéke __BANK_INV. (*)
2. Az __ASSUMED_BANK_ADDR kezdeti értéke __BANK_INV. (*)
3. Az __ACTIVE_BANK_ADDR értékét be kell állítani minden banksel, vagy annak megfelelő kód esetén.
4. Az __ASSUMED_BANK_ADDR értékét be kell állítani minden assume direktívánál. Az érték lehet __BANK_INV is.
5. Az __ACTIVE_BANK_ADDR értéke __BANK_INV lesz minden goto/call/bra/return/retfie (ezt talán jobban tudod, hogy még mi) után, kivétel a call s,FAST (ha van ilyen).
6. A címzés helyességének megállapításakor az __ACTIVE_BANK_ADDR értékét kell használni, ha != __BANK_INV.
7. Ha a címzés helyességének megállapításához __ACTIVE_BANK_ADDR nem használható, akkor az __ASSUMED_BANK_ADDR értékét kell használni, ha != __BANK_INV.
8. Ha a címzés helyességének megállapításához az __ASSUMED_BANK_ADDR sem használható, akkor a használt bank meghatározatlan, és ennek megfelelően kell eljárni.

(*) A hardver reset (POR, BOR) - ha minden igaz - törli a BSR értékét. Ennek alapján a kezdeti érték lehetne 0 is. Ennek ellenére nem javaslom ezt a beállítást, mivel tetszőleges BSR érték mellett több féle módon kerülhet a program a reset vektorra.

Egyszerű szöveges magyarázat:
Ha a BSR-en keresztül történő direkt címzéshez nincs explicit cím (nem volt banksel, vagy invalidálódott az értéke), akkor meg kell vizsgálni a programozó által javasolt BSR értékkel (assume) helyes-e a címzés. A javasolt címet nem szabad úgy kezelni, mintha banksel lett volna. A fentiek alapján az assume használható globálisan, párban a banksel mellett, vagy egyedileg az egyes blokkokban. Ha a program egy rövid szakaszán pl. egy call "kiüti" az előző banksel értékét a párhuzamosan alkalmazott assume kikapcsolja a felesleges hibaüzeneteket. Ekkor a program irója garantálja a call "isolated" tulajdonságát.

Természetesen a
banksel Bank4
assume Bank3
esetén a programozó hülye! ;)