added interns easter eggs, compiles now

This commit is contained in:
2026-06-13 12:45:29 -06:00
parent a36705a931
commit 0c21587e15
9 changed files with 473 additions and 142 deletions
+12 -4
View File
@@ -21,7 +21,6 @@ constexpr u8 ADDR_MODE_MASKS[][2] = {
{ 0x04, 0x04 }, // MOR
{ 0x00, 0x00 }, // AMOV
{ 0x04, 0x04 }, // SWP
{ 0x04, 0x00 }, // AHM
{ 0xFF, 0x00 }, // COM
{ 0xFF, 0x00 }, // NEG
{ 0xFF, 0x00 }, // EXS
@@ -37,7 +36,6 @@ constexpr u8 ADDR_MODE_MASKS[][2] = {
{ 0x1E, 0xFF }, // UMOD
{ 0x1E, 0xFF }, // DMOD
{ 0x1E, 0xFF }, // UDMD
{ 0xFF, 0x00 }, // FBT
{ 0x1E, 0xFF }, // STB
{ 0x1E, 0xFF }, // CRB
{ 0x1E, 0xFF }, // TSB
@@ -139,6 +137,12 @@ constexpr u8 ADDR_MODE_MASKS[][2] = {
{ 0x00, 0x00 }, // XMUL
{ 0x00, 0x00 }, // XDIV
{ 0x00, 0x00 }, // UPY
{ 0x00, 0x00 }, // INT_1_SLOT
{ 0x00, 0x00 }, // INT_2_SLOT
{ 0x00, 0x00 }, // INT_3_SLOT
{ 0x00, 0x00 }, // INT_4_SLOT
{ 0x00, 0x00 }, // BRAD
{ 0x00, 0x00 }, // DGANT
};
// Type size masks — indexed by opcode.
@@ -157,7 +161,6 @@ constexpr u8 TYPE_SIZE_MASKS[] = {
0x08, // MOR
0x08, // AMOV
0x08, // SWP
0x08, // AHM
0x0F, // COM
0x0F, // NEG
0x0F, // EXS
@@ -173,7 +176,6 @@ constexpr u8 TYPE_SIZE_MASKS[] = {
0x0F, // UMOD
0x0F, // DMOD
0x0F, // UDMD
0x0F, // FBT
0x0F, // STB
0x0F, // CRB
0x0F, // TSB
@@ -275,6 +277,12 @@ constexpr u8 TYPE_SIZE_MASKS[] = {
0x00, // XMUL
0x00, // XDIV
0x00, // UPY
0x00, // INT_1_SLOT
0x00, // INT_2_SLOT
0x00, // INT_3_SLOT
0x00, // INT_4_SLOT
0x00, // BRAD
0x00, // DGANT
};
} // namespace spider
Binary file not shown.
+12 -16
View File
@@ -1,8 +1,10 @@
#Compiler and Linker
#Compiler, Archiver and Linker
CC := g++
AR := ar
ARFLAGS := rcs
#The Target Binary Program
TARGET := out.exe
# The Target Static Library
TARGET := libspider-runtimelib.a
#The Directories, Source, Includes, Objects, Binary and Resources
SRCDIR := src
@@ -22,42 +24,36 @@ CFLAGS := -std=c++20 -O2 \
-Wformat=2 -Wimplicit-fallthrough -Wsuggest-override \
-Wextra-semi -Wduplicated-cond -Wduplicated-branches \
-Wlogical-op -Wuseless-cast
LFLAGS := -std=c++20 -static-libstdc++ -static-libgcc \
-Wl,--fatal-warnings -Wl,--warn-common
LIB :=
INC := -I./src/
#---------------------------------------------------------------------------------
#DO NOT EDIT BELOW THIS LINE
#---------------------------------------------------------------------------------
SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT))
OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.$(OBJEXT)))
#Defauilt Make
#Default Make
all: directories $(TARGET)
#Remake
remake: cleaner all
remake: clean all
#Make the Directories
directories:
@mkdir -p $(TARGETDIR)
@mkdir -p $(BUILDDIR)
#Clean only Objecst
#Clean only Objects
clean:
@$(RM) -rf $(BUILDDIR)
#Full Clean, Objects and Binaries
cleaner: clean
@$(RM) -rf $(TARGETDIR)
#Pull in dependency info for *existing* .o files
-include $(OBJECTS:.$(OBJEXT)=.$(DEPEXT))
#Link
#Create Static Library (Archive)
$(TARGET): $(OBJECTS)
$(CC) $(LFLAGS) -o $(TARGETDIR)/$(TARGET) $^ $(LIB)
$(AR) $(ARFLAGS) $(TARGETDIR)/$(TARGET) $^
#Compile
$(BUILDDIR)/%.$(OBJEXT): $(SRCDIR)/%.$(SRCEXT)
@@ -70,4 +66,4 @@ $(BUILDDIR)/%.$(OBJEXT): $(SRCDIR)/%.$(SRCEXT)
@rm -f $(BUILDDIR)/$*.$(DEPEXT).tmp
#Non-File Targets
.PHONY: all remake clean cleaner resources
.PHONY: all remake clean
+360 -15
View File
@@ -144,7 +144,7 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 4,
"id": "58645013",
"metadata": {},
"outputs": [
@@ -152,26 +152,26 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Real instructions : 132\n",
"Reserved slots : 10\n",
"Real instructions : 136\n",
"Reserved slots : 12\n",
"Duplicate check : PASSED\n",
"\n",
"Groups found:\n",
"group\n",
"Integer 19\n",
"Boolean 16\n",
"System 15\n",
"Bit Wise 14\n",
"System 14\n",
"Branch 12\n",
"Floating Point 10\n",
"Casts 10\n",
"Memory 9\n",
"Memory 8\n",
"Trigonometric 7\n",
"Easter Eggs 7\n",
"Exponential 6\n",
"Matrix 6\n",
"SIMD 5\n",
"Quaternion 2\n",
"Easter Eggs 1\n",
"\n",
"First 5 instructions:\n",
" byte_code mnemonic group params addr_mask_1 type_mask\n",
@@ -283,7 +283,352 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 5,
"id": "ac8bb791",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>skip_0</th>\n",
" <th>skip_1</th>\n",
" <th>byte_code</th>\n",
" <th>mnemonic</th>\n",
" <th>name</th>\n",
" <th>group</th>\n",
" <th>params</th>\n",
" <th>imp</th>\n",
" <th>imm</th>\n",
" <th>abs</th>\n",
" <th>...</th>\n",
" <th>B</th>\n",
" <th>S</th>\n",
" <th>I</th>\n",
" <th>L</th>\n",
" <th>F</th>\n",
" <th>D</th>\n",
" <th>type_mask</th>\n",
" <th>expensive</th>\n",
" <th>operation</th>\n",
" <th>skip_2</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>140</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>08C</td>\n",
" <td>XAMA</td>\n",
" <td>SIMD Alternate Multiply-Add</td>\n",
" <td>SIMD</td>\n",
" <td>0</td>\n",
" <td>1.0</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>...</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>00</td>\n",
" <td>NaN</td>\n",
" <td></td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>141</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>08D</td>\n",
" <td>XMUL</td>\n",
" <td>SIMD Multiply</td>\n",
" <td>SIMD</td>\n",
" <td>0</td>\n",
" <td>1.0</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>...</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>00</td>\n",
" <td>NaN</td>\n",
" <td></td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>142</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>08E</td>\n",
" <td>XDIV</td>\n",
" <td>SIMD Divide</td>\n",
" <td>SIMD</td>\n",
" <td>0</td>\n",
" <td>1.0</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>...</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>00</td>\n",
" <td>NaN</td>\n",
" <td></td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>240</th>\n",
" <td>NaN</td>\n",
" <td>Easter Eggs</td>\n",
" <td>0F0</td>\n",
" <td>UPY</td>\n",
" <td>Will place \"YUPI\" in memory</td>\n",
" <td>Easter Eggs</td>\n",
" <td>0</td>\n",
" <td>1.0</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>...</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>00</td>\n",
" <td>NaN</td>\n",
" <td></td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>241</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0F1</td>\n",
" <td>INT_1_SLOT</td>\n",
" <td></td>\n",
" <td>Easter Eggs</td>\n",
" <td>0</td>\n",
" <td>1.0</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>...</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>00</td>\n",
" <td>NaN</td>\n",
" <td></td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>242</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0F2</td>\n",
" <td>INT_2_SLOT</td>\n",
" <td></td>\n",
" <td>Easter Eggs</td>\n",
" <td>0</td>\n",
" <td>1.0</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>...</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>00</td>\n",
" <td>NaN</td>\n",
" <td></td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>243</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0F3</td>\n",
" <td>INT_3_SLOT</td>\n",
" <td></td>\n",
" <td>Easter Eggs</td>\n",
" <td>0</td>\n",
" <td>1.0</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>...</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>00</td>\n",
" <td>NaN</td>\n",
" <td></td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>244</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0F4</td>\n",
" <td>INT_4_SLOT</td>\n",
" <td></td>\n",
" <td>Easter Eggs</td>\n",
" <td>0</td>\n",
" <td>1.0</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>...</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>00</td>\n",
" <td>NaN</td>\n",
" <td></td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>245</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0F5</td>\n",
" <td>BRAD</td>\n",
" <td></td>\n",
" <td>Easter Eggs</td>\n",
" <td>0</td>\n",
" <td>1.0</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>...</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>00</td>\n",
" <td>NaN</td>\n",
" <td></td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>246</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0F6</td>\n",
" <td>DGANT</td>\n",
" <td></td>\n",
" <td>Easter Eggs</td>\n",
" <td>0</td>\n",
" <td>1.0</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>...</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>X</td>\n",
" <td>00</td>\n",
" <td>NaN</td>\n",
" <td></td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>10 rows × 29 columns</p>\n",
"</div>"
],
"text/plain": [
" skip_0 skip_1 byte_code mnemonic name \\\n",
"140 NaN NaN 08C XAMA SIMD Alternate Multiply-Add \n",
"141 NaN NaN 08D XMUL SIMD Multiply \n",
"142 NaN NaN 08E XDIV SIMD Divide \n",
"240 NaN Easter Eggs 0F0 UPY Will place \"YUPI\" in memory \n",
"241 NaN NaN 0F1 INT_1_SLOT \n",
"242 NaN NaN 0F2 INT_2_SLOT \n",
"243 NaN NaN 0F3 INT_3_SLOT \n",
"244 NaN NaN 0F4 INT_4_SLOT \n",
"245 NaN NaN 0F5 BRAD \n",
"246 NaN NaN 0F6 DGANT \n",
"\n",
" group params imp imm abs ... B S I L F D type_mask \\\n",
"140 SIMD 0 1.0 X X ... X X X X X X 00 \n",
"141 SIMD 0 1.0 X X ... X X X X X X 00 \n",
"142 SIMD 0 1.0 X X ... X X X X X X 00 \n",
"240 Easter Eggs 0 1.0 X X ... X X X X X X 00 \n",
"241 Easter Eggs 0 1.0 X X ... X X X X X X 00 \n",
"242 Easter Eggs 0 1.0 X X ... X X X X X X 00 \n",
"243 Easter Eggs 0 1.0 X X ... X X X X X X 00 \n",
"244 Easter Eggs 0 1.0 X X ... X X X X X X 00 \n",
"245 Easter Eggs 0 1.0 X X ... X X X X X X 00 \n",
"246 Easter Eggs 0 1.0 X X ... X X X X X X 00 \n",
"\n",
" expensive operation skip_2 \n",
"140 NaN NaN \n",
"141 NaN NaN \n",
"142 NaN NaN \n",
"240 NaN NaN \n",
"241 NaN NaN \n",
"242 NaN NaN \n",
"243 NaN NaN \n",
"244 NaN NaN \n",
"245 NaN NaN \n",
"246 NaN NaN \n",
"\n",
"[10 rows x 29 columns]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"instrs_df.tail(10)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "452bc76c",
"metadata": {},
"outputs": [
@@ -292,7 +637,7 @@
"output_type": "stream",
"text": [
"Masks written to: .//autogen/InstructionMasks.hpp\n",
"Lines generated : 280\n"
"Lines generated : 288\n"
]
}
],
@@ -357,7 +702,7 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 7,
"id": "5aaebef0",
"metadata": {},
"outputs": [
@@ -365,7 +710,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Instructions formatted: 132\n",
"Instructions formatted: 136\n",
"\n",
"--- Preview (first 2 instructions) ---\n",
" // [System] 0x000 — NOP: No Operation\n",
@@ -380,7 +725,7 @@
"\n",
"\n",
"CPU.hpp updated successfully at: .//src//spider/runtime/cpu/CPU.hpp\n",
"Total lines in updated file: 911\n"
"Total lines in updated file: 942\n"
]
}
],
@@ -460,9 +805,9 @@
"output_type": "stream",
"text": [
"InstrMap.cpp written to: .//src//spider/runtime/instr/InstrMap.cpp\n",
" Size : 33,581 bytes\n",
" Array entries : 512 (132 populated, 380 nullptr)\n",
" Switch cases : 132\n",
" Size : 33,582 bytes\n",
" Array entries : 512 (136 populated, 376 nullptr)\n",
" Switch cases : 136\n",
" Line endings : LF-only verified\n"
]
}
@@ -618,7 +963,7 @@
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": 9,
"id": "9f190f4c",
"metadata": {},
"outputs": [],
+30 -10
View File
@@ -325,11 +325,6 @@ namespace spider {
// Operation: Src <-> Dst
void SWP();
// [Memory] 0x00E — AHM: Ask Host for Memory
// Params: 1 | AddrMask1: 04 AddrMask2: 00 | TypeMask: 08
// Operation: Asks the host for a specific size of memory. Responds with 0 or 1
void AHM();
// [Integer] 0x010 — COM: One's complement
// Params: 1 | AddrMask1: FF AddrMask2: 00 | TypeMask: 0F
// Operation: ~ Dst -> Dst
@@ -405,11 +400,6 @@ namespace spider {
// Operation: Unsigned Dst / Src -> X, Dst % Src -> Y
void UDMD();
// [System] 0x01F — FBT: Test and update Flag Register (Integer) Bits
// Params: 1 | AddrMask1: FF AddrMask2: 00 | TypeMask: 0F
// Operation: Flags of Dst -
void FBT();
// [Bit Wise] 0x020 — STB: Set Bit
// Params: 2 | AddrMask1: 1E AddrMask2: FF | TypeMask: 0F
// Operation: Src# bit is set on Dst
@@ -915,6 +905,36 @@ namespace spider {
// Operation:
void UPY();
// [Easter Eggs] 0x0F1 — INT_1_SLOT:
// Params: 0 | AddrMask1: 00 AddrMask2: 00 | TypeMask: 00
// Operation:
void INT_1_SLOT();
// [Easter Eggs] 0x0F2 — INT_2_SLOT:
// Params: 0 | AddrMask1: 00 AddrMask2: 00 | TypeMask: 00
// Operation:
void INT_2_SLOT();
// [Easter Eggs] 0x0F3 — INT_3_SLOT:
// Params: 0 | AddrMask1: 00 AddrMask2: 00 | TypeMask: 00
// Operation:
void INT_3_SLOT();
// [Easter Eggs] 0x0F4 — INT_4_SLOT:
// Params: 0 | AddrMask1: 00 AddrMask2: 00 | TypeMask: 00
// Operation:
void INT_4_SLOT();
// [Easter Eggs] 0x0F5 — BRAD:
// Params: 0 | AddrMask1: 00 AddrMask2: 00 | TypeMask: 00
// Operation:
void BRAD();
// [Easter Eggs] 0x0F6 — DGANT:
// Params: 0 | AddrMask1: 00 AddrMask2: 00 | TypeMask: 00
// Operation:
void DGANT();
// </pygen-target> //
};
+14 -12
View File
@@ -49,7 +49,7 @@ CPU::Fn CPU::instrMap[] = {
&CPU::MOR, // 0x00B — Moves registers
&CPU::AMOV, // 0x00C — Array Move, uses X and Y as ptrs, A as amount
&CPU::SWP, // 0x00D — Swap registers
&CPU::AHM, // 0x00E — Ask Host for Memory
nullptr, // 0x00E (reserved)
nullptr, // 0x00F (reserved)
&CPU::COM, // 0x010 — One's complement
&CPU::NEG, // 0x011 — Two's complement
@@ -66,7 +66,7 @@ CPU::Fn CPU::instrMap[] = {
&CPU::UMOD, // 0x01C — Unsigned Modulus
&CPU::DMOD, // 0x01D — Division and Modulus
&CPU::UDMD, // 0x01E — Unsigned Division and Modulus
&CPU::FBT, // 0x01F — Test and update Flag Register (Integer) Bits
nullptr, // 0x01F (reserved)
&CPU::STB, // 0x020 — Set Bit
&CPU::CRB, // 0x021 — Clear Bit
&CPU::TSB, // 0x022 — Test Bit
@@ -276,12 +276,12 @@ CPU::Fn CPU::instrMap[] = {
nullptr, // 0x0EE
nullptr, // 0x0EF
&CPU::UPY, // 0x0F0 — Will place "YUPI" in memory
nullptr, // 0x0F1
nullptr, // 0x0F2
nullptr, // 0x0F3
nullptr, // 0x0F4
nullptr, // 0x0F5
nullptr, // 0x0F6
&CPU::INT_1_SLOT, // 0x0F1
&CPU::INT_2_SLOT, // 0x0F2
&CPU::INT_3_SLOT, // 0x0F3
&CPU::INT_4_SLOT, // 0x0F4
&CPU::BRAD, // 0x0F5
&CPU::DGANT, // 0x0F6
nullptr, // 0x0F7
nullptr, // 0x0F8
nullptr, // 0x0F9
@@ -583,7 +583,6 @@ void CPU::executeSwLk() {
case 0x00B: MOR(); break;
case 0x00C: AMOV(); break;
case 0x00D: SWP(); break;
case 0x00E: AHM(); break;
// ── Integer ─────────────────────────────────────
case 0x010: COM(); break;
@@ -602,9 +601,6 @@ void CPU::executeSwLk() {
case 0x01D: DMOD(); break;
case 0x01E: UDMD(); break;
// ── System ──────────────────────────────────────
case 0x01F: FBT(); break;
// ── Bit Wise ────────────────────────────────────
case 0x020: STB(); break;
case 0x021: CRB(); break;
@@ -741,6 +737,12 @@ void CPU::executeSwLk() {
// ── Easter Eggs ─────────────────────────────────
case 0x0F0: UPY(); break;
case 0x0F1: INT_1_SLOT(); break;
case 0x0F2: INT_2_SLOT(); break;
case 0x0F3: INT_3_SLOT(); break;
case 0x0F4: INT_4_SLOT(); break;
case 0x0F5: BRAD(); break;
case 0x0F6: DGANT(); break;
default:
break;
+2 -15
View File
@@ -402,21 +402,8 @@ namespace spider {
}
void CPU::FBT() {
fetchOperDst();
switch (_size) {
case 0b00: //byte
RF = u8((RF & ~(0x3 << 9))) | ((_dst->_u8 >> 9) & 0x3) << 9;
break;
case 0b01: //short
RF = u16((RF & ~(0x3 << 9))) | ((_dst->_u16 >> 9) & 0x3) << 9;
break;
case 0b10: //int
RF = u32((RF & ~(0x3 << 9))) | ((_dst->_u32 >> 9) & 0x3) << 9;
break;
case 0b11: //long
RF = u64((RF & ~(0x3 << 9))) | ((_dst->_u64 >> 9) & 0x3) << 9;
break;
}
fetchOperReg();
RF = _dst->_u64; // TODO: Mask accepted flags
}
}
+36 -63
View File
@@ -8,7 +8,6 @@
namespace spider {
void CPU::STB() {
// TODO: Implement STB
fetchOperSrc();
fetchOperDst();
switch(_size){
@@ -28,92 +27,66 @@ namespace spider {
}
void CPU::CRB() {
// TODO: Implement CRB
fetchOperSrc();
fetchOperDst();
switch(_size){
case 0b00: //byte
_dst->_u8 &= ~(1 << _src->_u8);
_dst->_u8 &= u8(~(u8(1) << _src->_u8));
break;
case 0b01: //short
_dst->_u16 &= ~(1 << _src->_u16);
_dst->_u16 &= u16(~(u16(1) << _src->_u16));
break;
case 0b10: //int
_dst->_u32 &= ~(1 << _src->_u32);
_dst->_u32 &= ~(u32(1) << _src->_u32);
break;
case 0b11: //long
_dst->_u64 &= ~(1 << _src->_u64);
_dst->_u64 &= ~(u64(1) << _src->_u64);
break;
}
}
void CPU::TSB() {
// TODO: Implement TSB
fetchOperSrc();
fetchOperDst();
switch(_size){
case 0b00: //byte
switch (((RF >> _src->_u8) & 1) != ((_dst->_u8 >> _src->_u8) & 1)){
case 1:
RF |= (1 << _src->_u8);
break;
case 0:
RF &= ~(1 << _src->_u8);
u64 s, d;
switch(_size) {
case 0b00: // byte
s = _src->_u8;
d = _dst->_u8;
break;
case 0b01: // short
s = _src->_u16;
d = _dst->_u16;
break;
case 0b10: // int
s = _src->_u32;
d = _dst->_u32;
break;
case 0b11: // long
s = _src->_u64;
d = _dst->_u64;
break;
}
break;
case 0b01: //short
switch (((RF >> _src->_u16) & 1) != ((_dst->_u16 >> _src->_u16) & 1)){
case 1:
RF |= (1 << _src->_u16);
break;
case 0:
RF &= ~(1 << _src->_u16);
break;
}
break;
case 0b10: //int
switch (((RF >> _src->_u32) & 1) != ((_dst->_u32 >> _src->_u32) & 1)){
case 1:
RF |= (1 << _src->_u32);
break;
case 0:
RF &= ~(1 << _src->_u32);
break;
}
break;
case 0b11: //long
switch (((RF >> _src->_u64) & 1) != ((_dst->_u64 >> _src->_u64) & 1)){
case 1:
RF |= (1 << _src->_u64);
break;
case 0:
RF &= ~(1 << _src->_u64);
break;
}
break;
}
d >>= s;
d &= 1;
}
void CPU::BOOL() {
// TODO: Implement BOOL
fetchOperDst();
switch(_size){
case 0b00: //byte
_dst->_u8 = _dst != 0;
case 0b00: // byte
_dst->_u8 = _dst->_u8 != 0;
break;
case 0b01: //short
_dst->_u16 = _dst != 0;
case 0b01: // short
_dst->_u16 = _dst->_u16 != 0;
break;
case 0b10: //int
_dst->_u32 = _dst != 0;
case 0b10: // int
_dst->_u32 = _dst->_u32 != 0;
break;
case 0b11: //long
_dst->_u64 = _dst != 0;
case 0b11: // long
_dst->_u64 = _dst->_u64 != 0;
break;
}
}
@@ -238,11 +211,11 @@ namespace spider {
// ── 0x02D — CNT: Counts bits (# of 1's into Dst) ──
void CPU::CNT() {
fetchOperDst();
switch(_size) {
case 0b00: _dst->_u8 = __builtin_popcount(_dst->_u8); break;
case 0b01: _dst->_u16 = __builtin_popcount(_dst->_u16); break;
case 0b10: _dst->_u32 = __builtin_popcount(_dst->_u32); break;
case 0b11: _dst->_u64 = __builtin_popcountll(_dst->_u64); break;
switch(_size) { // C++20 cross compatible version!!
case 0b00: _dst->_u8 = u8( std::popcount(_dst->_u8) ); break;
case 0b01: _dst->_u16 = u16(std::popcount(_dst->_u16)); break;
case 0b10: _dst->_u32 = u32(std::popcount(_dst->_u32)); break;
case 0b11: _dst->_u64 = u64(std::popcount(_dst->_u64)); break;
}
}
+1 -1
View File
@@ -53,7 +53,7 @@ namespace spider {
}
/**
* @brief BRAD (0xF7) - Memory Integrity Checksum
* @brief BRAD (0xF5) - Memory Integrity Checksum
* Escanea los primeros 256 bytes de memoria y valida contra una firma de seguridad.
* Implementado por Bradley Vergara Lara - Estancia 2026.
*/