created sicxe emulator project
This commit is contained in:
parent
cb38efe586
commit
3332b2971b
18 changed files with 1051 additions and 0 deletions
60
simulator_SIC_XE/src/instructions.cpp
Normal file
60
simulator_SIC_XE/src/instructions.cpp
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
#include "instructions.h"
|
||||
#include "machine.h"
|
||||
|
||||
|
||||
void addr_handler(Machine& m, int r1, int r2) {
|
||||
m.setReg(r2, m.getReg(r1) + m.getReg(r2));
|
||||
}
|
||||
|
||||
// CLEAR instruction: clears register r (first nibble), second nibble unused
|
||||
void clear_handler(Machine& m, int r, int unused) {
|
||||
m.setReg(r, 0);
|
||||
}
|
||||
|
||||
|
||||
void divr_handler(Machine& m, int r1, int r2) {
|
||||
|
||||
if (m.getReg(r2) == 0) {
|
||||
m.invalidOpcode(DIVR);
|
||||
return;
|
||||
}
|
||||
m.setReg(r2, m.getReg(r2) / m.getReg(r1));
|
||||
}
|
||||
|
||||
void mulr_handler(Machine &m, int r1, int r2)
|
||||
{
|
||||
m.setReg(r2, m.getReg(r1) * m.getReg(r2));
|
||||
}
|
||||
|
||||
void rmo_handler(Machine &m, int r1, int r2)
|
||||
{
|
||||
m.setReg(r2, m.getReg(r1));
|
||||
}
|
||||
|
||||
void shiftl_handler(Machine &m, int r1, int n)
|
||||
{
|
||||
m.setReg(r1, m.getReg(r1) << n);
|
||||
}
|
||||
|
||||
void shiftr_handler(Machine &m, int r1, int n)
|
||||
{
|
||||
m.setReg(r1, m.getReg(r1) >> n);
|
||||
}
|
||||
void subr_handler(Machine &m, int r1, int r2)
|
||||
{
|
||||
m.setReg(r2, m.getReg(r2) - m.getReg(r1));
|
||||
}
|
||||
|
||||
// TODO: implement SVC functionality
|
||||
void svc_handler(Machine &m, int n, int unused)
|
||||
{
|
||||
m.notImplemented("SVC");
|
||||
}
|
||||
|
||||
void tixr_handler(Machine &m, int r1, int unused)
|
||||
{
|
||||
m.setX(m.getX() + 1);
|
||||
int valX = m.getX();
|
||||
int valR1 = m.getReg(r1);
|
||||
m.setSW(sic_comp(valX, valR1, m.getSW()));
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue