spo/simulator_SIC_XE/include/opcode.h
2025-11-16 02:10:14 +01:00

116 lines
2.3 KiB
C++

#ifndef OPCODE_H
#define OPCODE_H
#include "utils.h"
// ==============================
// Opcode definitions (SIC/XE)
// ==============================
#define ADD 0x18
#define ADDF 0x58
#define ADDR 0x90
#define AND 0x40
#define CLEAR 0xB4
#define COMP 0x28
#define COMPF 0x88
#define COMPR 0xA0
#define DIV 0x24
#define DIVF 0x64
#define DIVR 0x9C
#define FIX 0xC4
#define FLOAT 0xC0
#define HIO 0xF4
#define J 0x3C
#define JEQ 0x30
#define JGT 0x34
#define JLT 0x38
#define JSUB 0x48
#define LDA 0x00
#define LDB 0x68
#define LDCH 0x50
#define LDF 0x70
#define LDL 0x08
#define LDS 0x6C
#define LDT 0x74
#define LDX 0x04
#define LPS 0xD0
#define MUL 0x20
#define MULF 0x60
#define MULR 0x98
#define NORM 0xC8
#define OR 0x44
#define RD 0xD8
#define RMO 0xAC
#define RSUB 0x4C
#define SHIFTL 0xA4
#define SHIFTR 0xA8
#define SIO 0xF0
#define SSK 0xEC
#define STA 0x0C
#define STB 0x78
#define STCH 0x54
#define STF 0x80
#define STI 0xD4
#define STL 0x14
#define STS 0x7C
#define STSW 0xE8
#define STT 0x84
#define STX 0x10
#define SUB 0x1C
#define SUBF 0x5C
#define SUBR 0x94
#define SVC 0xB0
#define TD 0xE0
#define TIO 0xF8
#define TIX 0x2C
#define TIXR 0xB8
#define WD 0xDC
// ==============================
// Extended opcodes (SIC/XE/XE)
// ==============================
#define NOP 0xF1
#define HALT 0xF2
#define XEXE 0xEE // Enable extended mode
#define VADD 0x18
#define VADDR 0x90
#define VSUB 0x1C
#define VSUBR 0x94
#define VMUL 0x20
#define VMULR 0x98
#define VDIV 0x24
#define VDIVR 0x9C
#define STVA 0x0C
#define STVS 0x7C
#define STVT 0x84
#define LDVA 0x00
#define LDVS 0x68
#define LDVT 0x04
enum class InstructionType {
TYPE1,
TYPE2,
TYPE3_4,
INVALID
};
class Machine; // forward
// Store raw function pointer (void*) to allow different handler signatures
using RawHandler = void*;
struct InstructionInfo {
const char* name;
InstructionType type;
RawHandler handler;
};
extern InstructionInfo instructions[];
extern InstructionInfo instructionsEXEX[];
// Initialize the instruction table
void loadInstructionSet();
#endif // OPCODE_H