| .. | ||
| Device.cpp | ||
| Device.h | ||
| FileDevice.cpp | ||
| FileDevice.h | ||
| InputDevice.cpp | ||
| InputDevice.h | ||
| Machine.cpp | ||
| Machine.h | ||
| main.cpp | ||
| Opcode.h | ||
| OutputDevice.cpp | ||
| OutputDevice.h | ||
| README.md | ||
| run.sh | ||
| Utils.cpp | ||
| Utils.h | ||
SIC/XE Simulator
C++ implementacija SIC/XE simulatorja
Prevajanje
./run.sh
ali ročno:
g++ -std=c++11 -pthread -c *.cpp
g++ -std=c++11 -pthread -o simulator *.o
Uporaba
./simulator <pot/do/datoteka.obj>
./simulator /obj/poly.obj
ali z run.sh:
./run.sh /obj/poly.obj
Funkcionalnosti
Registri
- A - Accumulator (24-bit)
- X - Index register (24-bit)
- L - Linkage register (24-bit)
- B - Base register (24-bit)
- S, T - General purpose (24-bit)
- F - Floating point (48-bit)
- PC - Program Counter (24-bit)
- SW - Status Word (24-bit)
Pomnilnik
- 1 MB (naslovi 0x00000 - 0xFFFFF)
- Big-endian zapis
Naprave
- 0 - standardni vhod (stdin)
- 1 - standardni izhod (stdout)
- 2 - standardni izhod za napake (stderr)
- 3–255 - leno se ustvarijo datoteke
XX.dev(hex), branje/pisanje prek TD/RD/WD
Podprti ukazi
| Format | Ukazi |
|---|---|
| F1 | FIX, FLOAT (float aritmetike ni implementirane) |
| F2 | ADDR, SUBR, MULR, DIVR, COMPR, SHIFTL, SHIFTR, RMO, CLEAR, TIXR |
| F3/F4 | LDA, LDX, LDL, LDB, LDS, LDT, LDCH, STA, STX, STL, STB, STS, STT, STCH, STSW, ADD, SUB, MUL, DIV, AND, OR, COMP, TIX, J, JEQ, JGT, JLT, JSUB, RSUB, TD, RD, WD |
Ni implementirano: ADDF, SUBF, MULF, DIVF, COMPF, LDF, STF, SIO/HIO/TIO, SSK, LPS.
Načini naslavljanja
- Neposredno (immediate)
- Posredno (indirect)
- Preprosto (simple)
- Indeksirano (indexed)
- Bazno relativno (base relative)
- PC relativno (PC relative)
Izvajanje
step()– izvede en ukazstart()/stop()– samodejno izvajanje s časovnikom (privzeto 1000 kHz)- Zaščita pred neskončno zanko: ustavi po 100000 ukazih v glavnem programu