Skip to content

elvircrn/80085

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

56 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

80085

Alt text

Interpreter koda

Ovaj kod sluzi za prevodjenje mikroasemblerskih instrukcija u binarno-enkodiranu instrukciju koju ogledni procesor moze koristiti. Primjer koristenja:

    init(); // Mora se pozvati!!!

    std::vector<std::pair<int, std::string>> rets =
    {
        { 1, "ac := ac + (1);" },
        { 2, "ac := ac + (1);" },
        { 3, "ac := ac + (1);" },
        { 4, "rd; goto 82" },
        { 80, "mar := ir; rd;" },
        { 81, "b := (0); rd;" },
        { 82, "a := mbr;" },
        { 83, "alu := a; if z then goto 88;" },
        { 84, "alu := a ^ (1); if z then goto 86" },
        { 85, "b := b + ac;" },
        { 86, "ac := ac + ac;" },
        { 87, "a := rshift ( a ); goto 83;" },
        { 88, "ac := b;" }
    };

    for (auto &instr : rets)
        std::cout << std::setw(5) << instr.first << " => \"" <<  parse(instr.second) << "\",\n";

Kod iznad implementira MULD m instrukciju, pri cemu je ac := 3 na pocetku. Output ovog primjera je:

    1 => "00000000000100010000000100000000",
    2 => "00000000000100010000000100000000",
    3 => "00000000000100010000000100000000",
    4 => "01110000010000000000000001010010",
   80 => "00010000110000000011001100000000",
   81 => "00010000010110110000000000000000",
   82 => "10010000000110100000000000000000",
   83 => "01010000000000000000101001011000",
   84 => "01001000000000000000101001010110",
   85 => "00000000000110110001101100000000",
   86 => "00000000000100010001000100000000",
   87 => "01110010000110100000101001010011",
   88 => "00010000000100010000101100000000"

koji se stavlja u ROM komponentu oglednog procesora. Ovaj skup instrukcija je uspjesno testiran na VHDL test benchu oglednog procesora.

Limitacije:

  • Konstante 1, -1 i 0 se obiljezavaju sa (+1), (0), (-1) respektivno
  • Umjesto band koristiti ^ operator

Kod je testiran sa 10ak drugih instrukcija, no autor je svjestan velike mogucnosti pojavljivanja bugova. Takodje je potrebno imati u vidu da je kod pisan u malom vremenskom periodu.

Releases

No releases published

Packages

No packages published