Skip to content

elvircrn/MIC-1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MIC-1

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