created sicxe emulator project

This commit is contained in:
zanostro 2025-11-11 11:03:25 +01:00
parent cb38efe586
commit 3332b2971b
18 changed files with 1051 additions and 0 deletions

View 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()));
}