added interns easter eggs, compiles now
This commit is contained in:
@@ -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.
@@ -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
|
||||
@@ -15,49 +17,43 @@ OBJEXT := o
|
||||
#Flags, Libraries and Includes
|
||||
ROOT := ./
|
||||
CFLAGS := -std=c++20 -O2 \
|
||||
-Wall -Werror -Wextra \
|
||||
-Wshadow -Wnon-virtual-dtor -Wold-style-cast -Wcast-align \
|
||||
-Wunused -Woverloaded-virtual -Wconversion \
|
||||
-Wsign-conversion -Wnull-dereference -Wdouble-promotion \
|
||||
-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 :=
|
||||
-Wall -Werror -Wextra \
|
||||
-Wshadow -Wnon-virtual-dtor -Wold-style-cast -Wcast-align \
|
||||
-Wunused -Woverloaded-virtual -Wconversion \
|
||||
-Wsign-conversion -Wnull-dereference -Wdouble-promotion \
|
||||
-Wformat=2 -Wimplicit-fallthrough -Wsuggest-override \
|
||||
-Wextra-semi -Wduplicated-cond -Wduplicated-branches \
|
||||
-Wlogical-op -Wuseless-cast
|
||||
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
@@ -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": [],
|
||||
|
||||
@@ -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> //
|
||||
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
break;
|
||||
}
|
||||
|
||||
u64 s, d;
|
||||
switch(_size) {
|
||||
case 0b00: // byte
|
||||
s = _src->_u8;
|
||||
d = _dst->_u8;
|
||||
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;
|
||||
}
|
||||
case 0b01: // short
|
||||
s = _src->_u16;
|
||||
d = _dst->_u16;
|
||||
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;
|
||||
}
|
||||
case 0b10: // int
|
||||
s = _src->_u32;
|
||||
d = _dst->_u32;
|
||||
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;
|
||||
}
|
||||
case 0b11: // long
|
||||
s = _src->_u64;
|
||||
d = _dst->_u64;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user