Keresés

Aktív témák

  • Rover623

    félisten

    válasz Blackmate #10 üzenetére

    Több gond is van...egy bő évtizede nem kódoltam C-ben, ezt az assembly-t meg pláne nem ismerem...
    De mondjuk Pascal-ban be tudom mutatni.

    Var
    STACK : Array [....] of Byte; {hogy legyen mire hivatkozni, de lehet hogy nem is kell}
    IN2BUF: Array [....] of Byte; {mit tudom én mekkora?}
    IN2CS : Byte Absolute x:x;
    OUT2CS : Byte Absolute x:x;
    IN2BC,
    OUT2BC,
    SP,
    DPTR,
    R1,
    R2,
    R7,
    A : Byte; {feltételezem 8 bites controller}

    Begin
    Start: {nem kell, de jól mutat...}
    {a stack kezelést nem boncolgatnám, hosszú...}
    DPTR := 0;
    R7 := $64;
    Fill:
    A := R7; {szvsz felesleges, mert ez az akkumulátor}
    IN2BUF[DPTR] := A; {közvetlenül mehetne bele az R7}
    Inc(DPTR);
    If (R7 <> 0) Then Goto Fill; {jujj de csúnya...}

    R1 := 0;
    R2 := 0;
    A := $40;
    IN2BC := A;
    Loop:
    A := IN2CS; {ez valami kitüntettett memóriacímen lévő beágyazott IO-nak tűnik}
    {na itt már gond van, az ACC valami bitszintű compare utasításnak tűnik...}
    If (A and 1) = 0 Then Goto serviceIN2;
    A := OUT2CS;
    If (A and 1) = 1 Then Goto Loop;

    ServiceOUT2:
    Inc(R2);
    OUT2BC := A; {nem egy elegáns megoldás, A határozatlan?}
    Goto Loop;{? csak találgatok sjmp-t illetően...}

    ServiceIN2:

    és így tovább....
    End.

    Tehát ismerni kellene a controller memóriakiosztását, a beágyazott IO regiszterek helyét, az assembly utasítások pontos jelentését...
    C-ben a DPTR-en keresztüli címzést egészen jól le lehetne modellezni a ''kukacos'' pointerkezeléssel...


    [Szerkesztve]

    [Szerkesztve]

  • Rover623

    félisten

    válasz Blackmate #8 üzenetére

    Szvsz egyszerű...;]
    Értelmezd a kódot és szépen írd meg C-ben...
    Pl. minden regiszter egy változó lesz...
    Értékadások, aritmetikai műveletek értelemszerűen...
    Portműveletek szintén értelemszerűen...
    Ha a ciklust felismered, egyszerűen meg lehet írni...
    Másképp nem megy!!!
    Gépesíteni ezt piszok nehéz...nem is nagyon láttam még ilyesmit...:U

    Arra viszont számíts, hogy sokkal lassabb lesz mint az eredeti...
    Erősen hardware közeli dolgokat meg (interrupt kezelés, DMA) igen nehezen és körültekintően lehet csak átültetni...

Aktív témák