From b7f25ea1d9ee07d797829925dc76aaf6f9b40bb5 Mon Sep 17 00:00:00 2001 From: Jeremiah Orians Date: Fri, 31 Mar 2017 14:47:19 -0400 Subject: [PATCH] Removed pack/unpack instructions to simplify deployment of VM --- High_level_prototypes/asm.c | 8 -- High_level_prototypes/defs | 8 -- High_level_prototypes/disasm.c | 30 +------- ISA_HEX_Map.org | 22 ++---- img/pack.gif | Bin 4387 -> 0 bytes img/unpack.gif | Bin 4304 -> 0 bytes vm.h | 8 -- vm_decode.c | 76 +----------------- vm_instructions.c | 137 --------------------------------- 9 files changed, 12 insertions(+), 277 deletions(-) delete mode 100644 img/pack.gif delete mode 100644 img/unpack.gif diff --git a/High_level_prototypes/asm.c b/High_level_prototypes/asm.c index 62b9ed7..c053d2d 100644 --- a/High_level_prototypes/asm.c +++ b/High_level_prototypes/asm.c @@ -243,14 +243,6 @@ void assemble(struct Token* p) setExpression(p, "MAXU", "05011", 4); setExpression(p, "MIN", "05012", 4); setExpression(p, "MINU", "05013", 4); - setExpression(p, "PACK", "05014", 4); - setExpression(p, "UNPACK", "05015", 4); - setExpression(p, "PACK8.CO", "05016", 4); - setExpression(p, "PACK8U.CO", "05017", 4); - setExpression(p, "PACK16.CO", "05018", 4); - setExpression(p, "PACK16U.CO", "05019", 4); - setExpression(p, "PACK32.CO", "0501A", 4); - setExpression(p, "PACK32U.CO", "0501B", 4); setExpression(p, "AND", "05020", 4); setExpression(p, "OR", "05021", 4); setExpression(p, "XOR", "05022", 4); diff --git a/High_level_prototypes/defs b/High_level_prototypes/defs index 791c5a0..301df87 100644 --- a/High_level_prototypes/defs +++ b/High_level_prototypes/defs @@ -72,14 +72,6 @@ DEFINE MAX 05010 DEFINE MAXU 05011 DEFINE MIN 05012 DEFINE MINU 05013 -DEFINE PACK 05014 -DEFINE UNPACK 05015 -DEFINE PACK8.CO 05016 -DEFINE PACK8U.CO 05017 -DEFINE PACK16.CO 05018 -DEFINE PACK16U.CO 05019 -DEFINE PACK32.CO 0501A -DEFINE PACK32U.CO 0501B DEFINE AND 05020 DEFINE OR 05021 DEFINE XOR 05022 diff --git a/High_level_prototypes/disasm.c b/High_level_prototypes/disasm.c index 70831b3..8380127 100644 --- a/High_level_prototypes/disasm.c +++ b/High_level_prototypes/disasm.c @@ -317,43 +317,15 @@ void decode_Integer_3OP(struct Instruction* c) break; } case 0x014: /* PACK */ - { - strncpy(Name, "PACK", 19); - break; - } case 0x015: /* UNPACK */ - { - strncpy(Name, "UNPACK", 19); - break; - } case 0x016: /* PACK8.CO */ - { - strncpy(Name, "PACK8.CO", 19); - break; - } case 0x017: /* PACK8U.CO */ - { - strncpy(Name, "PACK8U.CO", 19); - break; - } case 0x018: /* PACK16.CO */ - { - strncpy(Name, "PACK16.CO", 19); - break; - } case 0x019: /* PACK16U.CO */ - { - strncpy(Name, "PACK16.CO", 19); - break; - } case 0x01A: /* PACK32.CO */ - { - strncpy(Name, "PACK32.CO", 19); - break; - } case 0x01B: /* PACK32U.CO */ { - strncpy(Name, "PACK32U.CO", 19); + strncpy(Name, "ILLEGAL_INSTRUCTION", 19); break; } case 0x020: /* AND */ diff --git a/ISA_HEX_Map.org b/ISA_HEX_Map.org index 012f8d1..8ca2d6d 100644 --- a/ISA_HEX_Map.org +++ b/ISA_HEX_Map.org @@ -111,20 +111,14 @@ | 05 01 3a bc | MINU a b c | a = MIN(b, c) [unsigned] | **** Binary packing group -| Hex | Name | Comment | -|-------------+------------------+--------------------------------------| -| 05 01 4a bc | PACK a b c | a = PACK(b, c) [[./img/pack.gif]] | -| 05 01 5a bc | UNPACK a b c | a = UNPACK(b, c) [[./img/unpack.gif]] | -| 05 01 6a bc | PACK8.CO a b c | a = PACK(b) c = Overload? [signed] | -| 05 01 7a bc | PACK8U.CO a b c | a = PACK(b) c = Overload? [unsigned] | -| 05 01 8a bc | PACK16.CO a b c | a = PACK(b) c = Overload? [signed] | -| 05 01 9a bc | PACK16U.CO a b c | a = PACK(b) c = Overload? [unsigned] | -| 05 01 Aa bc | PACK32.CO a b c | a = PACK(b) c = Overload? [signed] | -| 05 01 Ba bc | PACK32U.CO a b c | a = PACK(b) c = Overload? [unsigned] | -| 05 01 Ca bc | Reserved | | -| 05 01 Da bc | Reserved | | -| 05 01 Ex xx | Reserved | | -| 05 01 Fx xx | Reserved | | +Due to the complexity of building/programming the pack instructions, the have been removed to simplify the porting task. +The Opcodes will be preserved should we wish in the future to be binary compatable with the Knight specification. + +| Hex | Name | Comment | +|-------------+----------+---------| +| 05 01 4a bc | Reserved | | +| ... | Reserved | | +| 05 01 Fx xx | Reserved | | **** Logical group | Hex | Name | Comment | diff --git a/img/pack.gif b/img/pack.gif deleted file mode 100644 index 9456c0fa3e54111ea12e4120280025a0fe4b706d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4387 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 diff --git a/img/unpack.gif b/img/unpack.gif deleted file mode 100644 index d2e2f519e37ce4704df7b12972556c1e781869bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4304 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[c->reg0] = 0; - - for(i = 31; i > 0; i = i - 1) - { - bit1 = (vm->reg[c->reg1] >> i) & 1; - bit2 = (vm->reg[c->reg2] >> i) & 1; - - if(bit1) - { - if(bit2) - { - vm->reg[c->reg0] = vm->reg[c->reg0] * 2 + 1; - } - else - { - vm->reg[c->reg0] = vm->reg[c->reg0] * 2; - } - } - } -} - -void UNPACK(struct lilith* vm, struct Instruction* c) -{ - uint8_t i; - bool bit1, bit2; - - vm->reg[c->reg0] = 0; - for(i = 0; i < 32; i = i + 1) - { - bit1 = (vm->reg[c->reg1] >> (31 - i)) & 1; - bit2 = (vm->reg[c->reg2] >> (31 - i)) & 1; - - if(bit1) - { - vm->reg[c->reg0] = vm->reg[c->reg0] * 2 + bit2; - } - else - { - vm->reg[c->reg0] = vm->reg[c->reg0] * 2; - } - } -} - -void PACK8_CO(struct lilith* vm, struct Instruction* c) -{ - if(0x7F < (int32_t)(vm->reg[c->reg1])) - { - /* Saturate in the event of Overflow */ - vm->reg[c->reg0] = 0x7F; - vm->reg[c->reg2] = vm->reg[c->reg2] | Overflow; - } - else if (-128 > (int32_t)(vm->reg[c->reg1])) - { - /* Saturate in the event of Underflow */ - vm->reg[c->reg0] = 0x80; - vm->reg[c->reg2] = vm->reg[c->reg2] | Overflow; - } - else - { - /* Unset Overflow bit if set */ - vm->reg[c->reg0] = vm->reg[c->reg1]; - vm->reg[c->reg2] = vm->reg[c->reg2] & ~(Overflow); - } -} - -void PACK8U_CO(struct lilith* vm, struct Instruction* c) -{ - if(0xFF < vm->reg[c->reg1]) - { - /* Saturate in the event of Overflow */ - vm->reg[c->reg0] = 0xFF; - vm->reg[c->reg2] = vm->reg[c->reg2] | Overflow; - } - else - { - /* Unset Overflow bit if set */ - vm->reg[c->reg0] = vm->reg[c->reg1]; - vm->reg[c->reg2] = vm->reg[c->reg2] & ~(Overflow); - } -} - -void PACK16_CO(struct lilith* vm, struct Instruction* c) -{ - if(0x7FFF < (int32_t)(vm->reg[c->reg1])) - { - /* Saturate in the event of Overflow */ - vm->reg[c->reg0] = 0x7FFF; - vm->reg[c->reg2] = vm->reg[c->reg2] | Overflow; - } - else if (-32768 > (int32_t)(vm->reg[c->reg1])) - { - /* Saturate in the event of Underflow */ - vm->reg[c->reg0] = 0x8000; - vm->reg[c->reg2] = vm->reg[c->reg2] | Overflow; - } - else - { - /* Unset Overflow bit if set */ - vm->reg[c->reg0] = vm->reg[c->reg1]; - vm->reg[c->reg2] = vm->reg[c->reg2] & ~(Overflow); - } -} - -void PACK16U_CO(struct lilith* vm, struct Instruction* c) -{ - if(0xFFFF < vm->reg[c->reg1]) - { - /* Saturate in the event of Overflow */ - vm->reg[c->reg0] = 0xFFFF; - vm->reg[c->reg2] = vm->reg[c->reg2] | Overflow; - } - else - { - /* Unset Overflow bit if set */ - vm->reg[c->reg0] = vm->reg[c->reg1]; - vm->reg[c->reg2] = vm->reg[c->reg2] & ~(Overflow); - } -} - -void PACK32_CO(struct lilith* vm, struct Instruction* c) -{ - /* Unset Overflow bit if set */ - vm->reg[c->reg0] = vm->reg[c->reg1]; - vm->reg[c->reg2] = vm->reg[c->reg2] & ~(Overflow); -} - -void PACK32U_CO(struct lilith* vm, struct Instruction* c) -{ - /* Unset Overflow bit if set */ - vm->reg[c->reg0] = vm->reg[c->reg1]; - vm->reg[c->reg2] = vm->reg[c->reg2] & ~(Overflow); -} - void AND(struct lilith* vm, struct Instruction* c) { vm->reg[c->reg0] = vm->reg[c->reg1] & vm->reg[c->reg2];