diff --git a/pygen.ipynb b/pygen.ipynb index d3d354b..5b814a6 100644 --- a/pygen.ipynb +++ b/pygen.ipynb @@ -144,7 +144,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "id": "58645013", "metadata": {}, "outputs": [ @@ -283,7 +283,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "id": "452bc76c", "metadata": {}, "outputs": [ @@ -357,7 +357,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "id": "5aaebef0", "metadata": {}, "outputs": [ @@ -451,7 +451,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "id": "instrmap_gen", "metadata": {}, "outputs": [ @@ -615,6 +615,54 @@ "print(f' Switch cases : {switch_count}')\n", "print(f' Line endings : LF-only verified')\n" ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "9f190f4c", + "metadata": {}, + "outputs": [], + "source": [ + "# ---------- GENERATE INSTR_XX FILES ----------\n", + "INSTR_DIR = f'{SRC_ROOT}/spider/runtime/instr'\n", + "\n", + "# Generate the files\n", + "# Each file goes from 00 to 1F (0-31), 32 instr / file\n", + "for x0 in range(0, TABLE_SIZE, 32):\n", + " x1 = x0 + 31\n", + " fname = f'{INSTR_DIR}/Instr_{x0:03X}-{x1:03X}.cpp'\n", + "\n", + " # TODO: Check if there are missing instructions\n", + " if file_exists(fname):\n", + " continue\n", + "\n", + " # CREATE FILE FROM SCRATCH\n", + " L = []\n", + " L.append('/**')\n", + " L.append(' * @brief AUTO-GENERATED by pygen.ipynb BUT editable by hand!')\n", + " L.append(' *')\n", + " L.append(' */')\n", + " L.append('') # [CHANGE] Use absolute path to make paths more explicit\n", + " L.append('#include ')\n", + " L.append('')\n", + " L.append('namespace spider {')\n", + " L.append('')\n", + "\n", + " for opc in range(x0, x1 + 1):\n", + " mnem = opcode_to_mnem.get(opc)\n", + " if mnem is None: continue\n", + "\n", + " L.append(f' void CPU::{mnem}() {{')\n", + " L.append(f' // TODO: Implement {mnem}')\n", + " L.append(f' }}')\n", + " L.append('')\n", + "\n", + " L.append('}')\n", + " L.append('')\n", + "\n", + " with open(fname, 'wb') as f:\n", + " f.write('\\n'.join(L).encode('utf-8'))\n" + ] } ], "metadata": { @@ -633,7 +681,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.7" + "version": "3.14.3" } }, "nbformat": 4, diff --git a/src/spider/runtime/instr/Instr_00-1F.cpp b/src/spider/runtime/instr/Instr_00-1F.cpp deleted file mode 100644 index 0d40cc9..0000000 --- a/src/spider/runtime/instr/Instr_00-1F.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include - -namespace spider { - - void CPU::NOP() { - // No Operation // - } - -} diff --git a/src/spider/runtime/instr/Instr_000-01F.cpp b/src/spider/runtime/instr/Instr_000-01F.cpp new file mode 100644 index 0000000..d2933e9 --- /dev/null +++ b/src/spider/runtime/instr/Instr_000-01F.cpp @@ -0,0 +1,134 @@ +/** + * @brief AUTO-GENERATED by pygen.ipynb BUT editable by hand! + * + */ + +#include + +namespace spider { + + void CPU::NOP() { + // TODO: Implement NOP + } + + void CPU::SPDR() { + // TODO: Implement SPDR + } + + void CPU::MMODE() { + // TODO: Implement MMODE + } + + void CPU::INT() { + // TODO: Implement INT + } + + void CPU::LRV() { + // TODO: Implement LRV + } + + void CPU::FSR() { + // TODO: Implement FSR + } + + void CPU::FIR() { + // TODO: Implement FIR + } + + void CPU::FZR() { + // TODO: Implement FZR + } + + void CPU::LSR() { + // TODO: Implement LSR + } + + void CPU::FVR() { + // TODO: Implement FVR + } + + void CPU::MOV() { + // TODO: Implement MOV + } + + void CPU::MOR() { + // TODO: Implement MOR + } + + void CPU::AMOV() { + // TODO: Implement AMOV + } + + void CPU::SWP() { + // TODO: Implement SWP + } + + void CPU::AHM() { + // TODO: Implement AHM + } + + void CPU::COM() { + // TODO: Implement COM + } + + void CPU::NEG() { + // TODO: Implement NEG + } + + void CPU::EXS() { + // TODO: Implement EXS + } + + void CPU::INC() { + // TODO: Implement INC + } + + void CPU::DEC() { + // TODO: Implement DEC + } + + void CPU::ADD() { + // TODO: Implement ADD + } + + void CPU::SUB() { + // TODO: Implement SUB + } + + void CPU::MUL() { + // TODO: Implement MUL + } + + void CPU::UMUL() { + // TODO: Implement UMUL + } + + void CPU::DIV() { + // TODO: Implement DIV + } + + void CPU::UDIV() { + // TODO: Implement UDIV + } + + void CPU::MOD() { + // TODO: Implement MOD + } + + void CPU::UMOD() { + // TODO: Implement UMOD + } + + void CPU::DMOD() { + // TODO: Implement DMOD + } + + void CPU::UDMD() { + // TODO: Implement UDMD + } + + void CPU::FBT() { + // TODO: Implement FBT + } + +} diff --git a/src/spider/runtime/instr/Instr_020-03F.cpp b/src/spider/runtime/instr/Instr_020-03F.cpp new file mode 100644 index 0000000..4ff096e --- /dev/null +++ b/src/spider/runtime/instr/Instr_020-03F.cpp @@ -0,0 +1,122 @@ +/** + * @brief AUTO-GENERATED by pygen.ipynb BUT editable by hand! + * + */ + +#include + +namespace spider { + + void CPU::STB() { + // TODO: Implement STB + } + + void CPU::CRB() { + // TODO: Implement CRB + } + + void CPU::TSB() { + // TODO: Implement TSB + } + + void CPU::BOOL() { + // TODO: Implement BOOL + } + + void CPU::NOT() { + // TODO: Implement NOT + } + + void CPU::AND() { + // TODO: Implement AND + } + + void CPU::OR() { + // TODO: Implement OR + } + + void CPU::XOR() { + // TODO: Implement XOR + } + + void CPU::SHL() { + // TODO: Implement SHL + } + + void CPU::SHR() { + // TODO: Implement SHR + } + + void CPU::SSR() { + // TODO: Implement SSR + } + + void CPU::ROL() { + // TODO: Implement ROL + } + + void CPU::ROR() { + // TODO: Implement ROR + } + + void CPU::CNT() { + // TODO: Implement CNT + } + + void CPU::EQ() { + // TODO: Implement EQ + } + + void CPU::NE() { + // TODO: Implement NE + } + + void CPU::GT() { + // TODO: Implement GT + } + + void CPU::GE() { + // TODO: Implement GE + } + + void CPU::LT() { + // TODO: Implement LT + } + + void CPU::LE() { + // TODO: Implement LE + } + + void CPU::JMP() { + // TODO: Implement JMP + } + + void CPU::JEQ() { + // TODO: Implement JEQ + } + + void CPU::JNE() { + // TODO: Implement JNE + } + + void CPU::JIF() { + // TODO: Implement JIF + } + + void CPU::JMR() { + // TODO: Implement JMR + } + + void CPU::JER() { + // TODO: Implement JER + } + + void CPU::JNR() { + // TODO: Implement JNR + } + + void CPU::JIR() { + // TODO: Implement JIR + } + +} diff --git a/src/spider/runtime/instr/Instr_040-05F.cpp b/src/spider/runtime/instr/Instr_040-05F.cpp new file mode 100644 index 0000000..f0c8829 --- /dev/null +++ b/src/spider/runtime/instr/Instr_040-05F.cpp @@ -0,0 +1,122 @@ +/** + * @brief AUTO-GENERATED by pygen.ipynb BUT editable by hand! + * + */ + +#include + +namespace spider { + + void CPU::SFB() { + // TODO: Implement SFB + } + + void CPU::LFB() { + // TODO: Implement LFB + } + + void CPU::JUF() { + // TODO: Implement JUF + } + + void CPU::JUR() { + // TODO: Implement JUR + } + + void CPU::PUSH() { + // TODO: Implement PUSH + } + + void CPU::POP() { + // TODO: Implement POP + } + + void CPU::ALLOC() { + // TODO: Implement ALLOC + } + + void CPU::HFREE() { + // TODO: Implement HFREE + } + + void CPU::CALL() { + // TODO: Implement CALL + } + + void CPU::RET() { + // TODO: Implement RET + } + + void CPU::EDI() { + // TODO: Implement EDI + } + + void CPU::SHSS() { + // TODO: Implement SHSS + } + + void CPU::FLI() { + // TODO: Implement FLI + } + + void CPU::FNEG() { + // TODO: Implement FNEG + } + + void CPU::FADD() { + // TODO: Implement FADD + } + + void CPU::FSUB() { + // TODO: Implement FSUB + } + + void CPU::FMUL() { + // TODO: Implement FMUL + } + + void CPU::FDIV() { + // TODO: Implement FDIV + } + + void CPU::FMOD() { + // TODO: Implement FMOD + } + + void CPU::FDMOD() { + // TODO: Implement FDMOD + } + + void CPU::FEPS() { + // TODO: Implement FEPS + } + + void CPU::FEEP() { + // TODO: Implement FEEP + } + + void CPU::FEQ() { + // TODO: Implement FEQ + } + + void CPU::FNE() { + // TODO: Implement FNE + } + + void CPU::FGT() { + // TODO: Implement FGT + } + + void CPU::FGE() { + // TODO: Implement FGE + } + + void CPU::FLT() { + // TODO: Implement FLT + } + + void CPU::FLE() { + // TODO: Implement FLE + } + +} diff --git a/src/spider/runtime/instr/Instr_060-07F.cpp b/src/spider/runtime/instr/Instr_060-07F.cpp new file mode 100644 index 0000000..fd01f5d --- /dev/null +++ b/src/spider/runtime/instr/Instr_060-07F.cpp @@ -0,0 +1,118 @@ +/** + * @brief AUTO-GENERATED by pygen.ipynb BUT editable by hand! + * + */ + +#include + +namespace spider { + + void CPU::F2D() { + // TODO: Implement F2D + } + + void CPU::D2F() { + // TODO: Implement D2F + } + + void CPU::I2F() { + // TODO: Implement I2F + } + + void CPU::I2D() { + // TODO: Implement I2D + } + + void CPU::L2F() { + // TODO: Implement L2F + } + + void CPU::L2D() { + // TODO: Implement L2D + } + + void CPU::F2I() { + // TODO: Implement F2I + } + + void CPU::F2L() { + // TODO: Implement F2L + } + + void CPU::D2I() { + // TODO: Implement D2I + } + + void CPU::D2L() { + // TODO: Implement D2L + } + + void CPU::SIN() { + // TODO: Implement SIN + } + + void CPU::COS() { + // TODO: Implement COS + } + + void CPU::TAN() { + // TODO: Implement TAN + } + + void CPU::ASIN() { + // TODO: Implement ASIN + } + + void CPU::ACOS() { + // TODO: Implement ACOS + } + + void CPU::ATAN() { + // TODO: Implement ATAN + } + + void CPU::ATAN2() { + // TODO: Implement ATAN2 + } + + void CPU::EXP() { + // TODO: Implement EXP + } + + void CPU::LOG() { + // TODO: Implement LOG + } + + void CPU::LOGAB() { + // TODO: Implement LOGAB + } + + void CPU::POW() { + // TODO: Implement POW + } + + void CPU::SQRT() { + // TODO: Implement SQRT + } + + void CPU::ROOT() { + // TODO: Implement ROOT + } + + void CPU::ADC() { + // TODO: Implement ADC + } + + void CPU::SWC() { + // TODO: Implement SWC + } + + void CPU::MWO() { + // TODO: Implement MWO + } + + void CPU::UMO() { + // TODO: Implement UMO + } + +} diff --git a/src/spider/runtime/instr/Instr_080-09F.cpp b/src/spider/runtime/instr/Instr_080-09F.cpp new file mode 100644 index 0000000..b04be05 --- /dev/null +++ b/src/spider/runtime/instr/Instr_080-09F.cpp @@ -0,0 +1,62 @@ +/** + * @brief AUTO-GENERATED by pygen.ipynb BUT editable by hand! + * + */ + +#include + +namespace spider { + + void CPU::MADD() { + // TODO: Implement MADD + } + + void CPU::MSUB() { + // TODO: Implement MSUB + } + + void CPU::MMUL() { + // TODO: Implement MMUL + } + + void CPU::MINV() { + // TODO: Implement MINV + } + + void CPU::MTRA() { + // TODO: Implement MTRA + } + + void CPU::MDET() { + // TODO: Implement MDET + } + + void CPU::QMKA() { + // TODO: Implement QMKA + } + + void CPU::QMUL() { + // TODO: Implement QMUL + } + + void CPU::XADD() { + // TODO: Implement XADD + } + + void CPU::XSUB() { + // TODO: Implement XSUB + } + + void CPU::XAMA() { + // TODO: Implement XAMA + } + + void CPU::XMUL() { + // TODO: Implement XMUL + } + + void CPU::XDIV() { + // TODO: Implement XDIV + } + +} diff --git a/src/spider/runtime/instr/Instr_0A0-0BF.cpp b/src/spider/runtime/instr/Instr_0A0-0BF.cpp new file mode 100644 index 0000000..46468e8 --- /dev/null +++ b/src/spider/runtime/instr/Instr_0A0-0BF.cpp @@ -0,0 +1,10 @@ +/** + * @brief AUTO-GENERATED by pygen.ipynb BUT editable by hand! + * + */ + +#include + +namespace spider { + +} diff --git a/src/spider/runtime/instr/Instr_0C0-0DF.cpp b/src/spider/runtime/instr/Instr_0C0-0DF.cpp new file mode 100644 index 0000000..46468e8 --- /dev/null +++ b/src/spider/runtime/instr/Instr_0C0-0DF.cpp @@ -0,0 +1,10 @@ +/** + * @brief AUTO-GENERATED by pygen.ipynb BUT editable by hand! + * + */ + +#include + +namespace spider { + +} diff --git a/src/spider/runtime/instr/Instr_0E0-0FF.cpp b/src/spider/runtime/instr/Instr_0E0-0FF.cpp new file mode 100644 index 0000000..c305616 --- /dev/null +++ b/src/spider/runtime/instr/Instr_0E0-0FF.cpp @@ -0,0 +1,14 @@ +/** + * @brief AUTO-GENERATED by pygen.ipynb BUT editable by hand! + * + */ + +#include + +namespace spider { + + void CPU::UPY() { + // TODO: Implement UPY + } + +} diff --git a/src/spider/runtime/instr/Instr_100-11F.cpp b/src/spider/runtime/instr/Instr_100-11F.cpp new file mode 100644 index 0000000..46468e8 --- /dev/null +++ b/src/spider/runtime/instr/Instr_100-11F.cpp @@ -0,0 +1,10 @@ +/** + * @brief AUTO-GENERATED by pygen.ipynb BUT editable by hand! + * + */ + +#include + +namespace spider { + +} diff --git a/src/spider/runtime/instr/Instr_120-13F.cpp b/src/spider/runtime/instr/Instr_120-13F.cpp new file mode 100644 index 0000000..46468e8 --- /dev/null +++ b/src/spider/runtime/instr/Instr_120-13F.cpp @@ -0,0 +1,10 @@ +/** + * @brief AUTO-GENERATED by pygen.ipynb BUT editable by hand! + * + */ + +#include + +namespace spider { + +} diff --git a/src/spider/runtime/instr/Instr_140-15F.cpp b/src/spider/runtime/instr/Instr_140-15F.cpp new file mode 100644 index 0000000..46468e8 --- /dev/null +++ b/src/spider/runtime/instr/Instr_140-15F.cpp @@ -0,0 +1,10 @@ +/** + * @brief AUTO-GENERATED by pygen.ipynb BUT editable by hand! + * + */ + +#include + +namespace spider { + +} diff --git a/src/spider/runtime/instr/Instr_160-17F.cpp b/src/spider/runtime/instr/Instr_160-17F.cpp new file mode 100644 index 0000000..46468e8 --- /dev/null +++ b/src/spider/runtime/instr/Instr_160-17F.cpp @@ -0,0 +1,10 @@ +/** + * @brief AUTO-GENERATED by pygen.ipynb BUT editable by hand! + * + */ + +#include + +namespace spider { + +} diff --git a/src/spider/runtime/instr/Instr_180-19F.cpp b/src/spider/runtime/instr/Instr_180-19F.cpp new file mode 100644 index 0000000..46468e8 --- /dev/null +++ b/src/spider/runtime/instr/Instr_180-19F.cpp @@ -0,0 +1,10 @@ +/** + * @brief AUTO-GENERATED by pygen.ipynb BUT editable by hand! + * + */ + +#include + +namespace spider { + +} diff --git a/src/spider/runtime/instr/Instr_1A0-1BF.cpp b/src/spider/runtime/instr/Instr_1A0-1BF.cpp new file mode 100644 index 0000000..46468e8 --- /dev/null +++ b/src/spider/runtime/instr/Instr_1A0-1BF.cpp @@ -0,0 +1,10 @@ +/** + * @brief AUTO-GENERATED by pygen.ipynb BUT editable by hand! + * + */ + +#include + +namespace spider { + +} diff --git a/src/spider/runtime/instr/Instr_1C0-1DF.cpp b/src/spider/runtime/instr/Instr_1C0-1DF.cpp new file mode 100644 index 0000000..46468e8 --- /dev/null +++ b/src/spider/runtime/instr/Instr_1C0-1DF.cpp @@ -0,0 +1,10 @@ +/** + * @brief AUTO-GENERATED by pygen.ipynb BUT editable by hand! + * + */ + +#include + +namespace spider { + +} diff --git a/src/spider/runtime/instr/Instr_1E0-1FF.cpp b/src/spider/runtime/instr/Instr_1E0-1FF.cpp new file mode 100644 index 0000000..46468e8 --- /dev/null +++ b/src/spider/runtime/instr/Instr_1E0-1FF.cpp @@ -0,0 +1,10 @@ +/** + * @brief AUTO-GENERATED by pygen.ipynb BUT editable by hand! + * + */ + +#include + +namespace spider { + +} diff --git a/src/spider/runtime/memory/RAM.hpp b/src/spider/runtime/memory/RAM.hpp index c1fc641..57fe214 100644 --- a/src/spider/runtime/memory/RAM.hpp +++ b/src/spider/runtime/memory/RAM.hpp @@ -2,6 +2,8 @@ #include +#include + namespace spider { /** diff --git a/src/spider/runtime/memory/Types.hpp b/src/spider/runtime/memory/Types.hpp index 028ccff..7d89ae1 100644 --- a/src/spider/runtime/memory/Types.hpp +++ b/src/spider/runtime/memory/Types.hpp @@ -152,7 +152,7 @@ namespace spider { #endif #if SPIDER_LITTLE_ENDIAN std::memcpy(&n, bytes, sizeof(T)); - *n = byteswap(n); + *n = byteswap(*n); #endif #if !SPIDER_BIG_ENDIAN && !SPIDER_LITTLE_ENDIAN using U = std::make_unsigned_t; diff --git a/src/spider/runtime/reel/InstrReel.hpp b/src/spider/runtime/reel/InstrReel.hpp index 470fa2b..31ed38f 100644 --- a/src/spider/runtime/reel/InstrReel.hpp +++ b/src/spider/runtime/reel/InstrReel.hpp @@ -1,8 +1,11 @@ #pragma once #include + #include +#include + namespace spider { /**