Új hozzászólás Aktív témák

  • Szirty

    őstag

    válasz Teuton99 #3966 üzenetére

    Üdv Teuton99!

    Nem lett volna baj ha azon kívül, hogy hiba keletkezik elárulod azt is hogy milyen hiba... (Diagnosztikai buffer kiolvasása).
    De gondolom "Area error when reading, Incorrect area ID: 0" volt a hiba.

    Az L W [AR1,P#0.0] címzésednél nem tudta eldönteni milyen memódiaterületről serettél volna olvasni. Hiába raktad az address regiszter töltésénél oda a terület azonosítót (L P#DBX 0.0)
    Ezért a L P#DBX 0.0-t L P#0.0-ra, az L W [AR1,P#0.0] pedig L DBW [AR1,P#0.0]-ra kell cserélni.

    Ha megteszed, akkor meg a ciklus második lefutásakor szintén lesz CPU stop és kapsz egy szép kövér Alignment errort, mert a ciklusmag végén a cím kiszámításakor nem kezelheted az address rekiszter tartalmát integerként:

    CIM2: TAR1
    L 10
    +I
    LAR1

    Újra ki kell számolnod a pointert a ciklusváltozó aktuális tartalmából!

    Ez így nem jó, a cím alsó 3 bitje bit cím, neked meg byte cím kell.
    Nézd át ezt, ez így működik:

    OPN DB 1 //DB megnyitasa
    L P#0.0
    LAR1
    L 0
    T MW 20 //temp változó

    L DBLG
    L 2
    /I
    T MW 22 //eltároljuk a DB hosszát

    L MW 22
    L 1
    -I
    CIM: T MW 24 //a hurokváltozó
    L DBW [AR1,P#0.0] //ha az aktuális nagyobb, mint a temp--> csere
    L MW 20 // egyebkent ugras
    >I
    JCN CIM2
    //csere
    L DBW [AR1,P#0.0]
    T MW 20

    //index leptetes
    CIM2: L MW 24
    L 2
    *I
    SLD 3
    LAR1
    L MW 24
    LOOP CIM

    Ui.: Ha program kódot idézel a fórum üzenetbe, akkor légy szíves használd a "Programkód" nyomógombot a fomázáshoz, mert ha csak bemásolod eléggé szétesik az egész.

Új hozzászólás Aktív témák