spo/ass2
2025-12-05 13:27:40 +01:00
..
Device.cpp created basic simulator 2025-11-27 08:17:43 +01:00
Device.h created basic simulator 2025-11-27 08:17:43 +01:00
FileDevice.cpp created basic simulator 2025-11-27 08:17:43 +01:00
FileDevice.h created basic simulator 2025-11-27 08:17:43 +01:00
InputDevice.cpp created basic simulator 2025-11-27 08:17:43 +01:00
InputDevice.h created basic simulator 2025-11-27 08:17:43 +01:00
Machine.cpp updated simulator 2025-12-05 13:27:40 +01:00
Machine.h updated simulator 2025-12-05 13:27:40 +01:00
main.cpp updated simulator 2025-12-05 13:27:40 +01:00
Opcode.h created basic simulator 2025-11-27 08:17:43 +01:00
OutputDevice.cpp created basic simulator 2025-11-27 08:17:43 +01:00
OutputDevice.h created basic simulator 2025-11-27 08:17:43 +01:00
README.md updated simulator 2025-12-05 13:27:40 +01:00
run.sh updated simulator 2025-12-05 13:27:40 +01:00
Utils.cpp updated simulator 2025-12-05 13:27:40 +01:00
Utils.h updated simulator 2025-12-05 13:27:40 +01:00

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 ukaz
  • start() / stop() – samodejno izvajanje s časovnikom (privzeto 1000 kHz)
  • Zaščita pred neskončno zanko: ustavi po 100000 ukazih v glavnem programu