summaryrefslogtreecommitdiff
path: root/opcode.c
diff options
context:
space:
mode:
authormrb0nk500 <b0nk@b0nk.xyz>2019-12-06 17:25:13 -0500
committermrb0nk500 <b0nk@b0nk.xyz>2019-12-06 17:28:03 -0500
commit8d0f46d4e62af5d66ff3cce872256163a41b54bf (patch)
treeafe1b4a1b7de11db68e7329237cffb44bf1c5661 /opcode.c
parentb4f547ecb600729e0e1b980c27c154b2a99bbca1 (diff)
Delete opcode.c, since I added all the functions
from it into sux.c.
Diffstat (limited to 'opcode.c')
-rw-r--r--opcode.c242
1 files changed, 0 insertions, 242 deletions
diff --git a/opcode.c b/opcode.c
deleted file mode 100644
index 847ff80..0000000
--- a/opcode.c
+++ /dev/null
@@ -1,242 +0,0 @@
-#include "opcode.h"
-
-void setps(struct sux *cpu, uint8_t thread) {
- (cpu->c[thread]) ? (cpu->ps |= (C << 8*thread)) : (cpu->ps &= ~(C << 8*thread));
- (cpu->z[thread]) ? (cpu->ps |= (Z << 8*thread)) : (cpu->ps &= ~(Z << 8*thread));
- (cpu->i[thread]) ? (cpu->ps |= (I << 8*thread)) : (cpu->ps &= ~(I << 8*thread));
- (cpu->s[thread]) ? (cpu->ps |= (S << 8*thread)) : (cpu->ps &= ~(S << 8*thread));
- (cpu->v[thread]) ? (cpu->ps |= (V << 8*thread)) : (cpu->ps &= ~(V << 8*thread));
- (cpu->n[thread]) ? (cpu->ps |= (N << 8*thread)) : (cpu->ps &= ~(N << 8*thread));
-}
-
-void mul(struct sux *cpu, uint64_t adr, uint8_t thread, uint8_t regsize) {
- uint64_t value;
- value = (uint64_t)addr[adr];
- if (regsize >= 2)
- value += (uint64_t)addr[adr+1] << 8;
- if (regsize >= 4) {
- value += (uint64_t)addr[adr+2] << 16;
- value += (uint64_t)addr[adr+3] << 24;
- }
- if (regsize >= 8) {
- value += (uint64_t)addr[adr+4] << 32;
- value += (uint64_t)addr[adr+5] << 40;
- value += (uint64_t)addr[adr+6] << 48;
- value += (uint64_t)addr[adr+7] << 56;
- }
- uint64_t sum = cpu->a[thread]*value+cpu->c[thread];
- cpu->z[thread] = (sum == 0);
- cpu->n[thread] = (sum >> 63);
- cpu->v[thread] = !((cpu->a[thread]^value) & 0x8000000000000000) && ((cpu->a[thread]^sum) & 0x8000000000000000);
- cpu->c[thread] = (!((cpu->a[thread]^sum) && (cpu->a[thread]^value)) && (cpu->a[thread] >= ((uint64_t)1 << 32) && value >= ((uint64_t)1 << 32)));
- cpu->a[thread] = sum;
- setps(cpu, thread);
-}
-
-void divd(struct sux *cpu, uint64_t adr, uint8_t thread, uint8_t regsize) {
- uint64_t value;
- value = (uint64_t)addr[adr];
- if (regsize >= 2)
- value += (uint64_t)addr[adr+1] << 8;
- if (regsize >= 4) {
- value += (uint64_t)addr[adr+2] << 16;
- value += (uint64_t)addr[adr+3] << 24;
- }
- if (regsize >= 8) {
- value += (uint64_t)addr[adr+4] << 32;
- value += (uint64_t)addr[adr+5] << 40;
- value += (uint64_t)addr[adr+6] << 48;
- value += (uint64_t)addr[adr+7] << 56;
- }
- uint64_t sum = cpu->a[thread]/value;
- cpu->z[thread] = (sum == 0);
- cpu->v[thread] = !((cpu->a[thread]^value) & 0x8000000000000000) && ((cpu->a[thread]^sum) & 0x8000000000000000);
- cpu->a[thread] = sum;
- setps(cpu, thread);
-}
-
-void and_addr(struct sux *cpu, uint64_t* const reg, uint64_t adr, uint8_t thread, uint8_t regsize) {
- uint64_t value;
- value = (uint64_t)addr[adr];
- if (regsize >= 2)
- value += (uint64_t)addr[adr+1] << 8;
- if (regsize >= 4) {
- value += (uint64_t)addr[adr+2] << 16;
- value += (uint64_t)addr[adr+3] << 24;
- }
- if (regsize >= 8) {
- value += (uint64_t)addr[adr+4] << 32;
- value += (uint64_t)addr[adr+5] << 40;
- value += (uint64_t)addr[adr+6] << 48;
- value += (uint64_t)addr[adr+7] << 56;
- }
- *reg &= value;
- cpu->z[thread] = (*reg == 0);
- cpu->n[thread] = (*reg >> 63);
- setps(cpu, thread);
-}
-
-void or_addr(struct sux *cpu, uint64_t* const reg, uint64_t adr, uint8_t thread, uint8_t regsize) {
- uint64_t value;
- value = (uint64_t)addr[adr];
- if (regsize >= 2)
- value += (uint64_t)addr[adr+1] << 8;
- if (regsize >= 4) {
- value += (uint64_t)addr[adr+2] << 16;
- value += (uint64_t)addr[adr+3] << 24;
- }
- if (regsize >= 8) {
- value += (uint64_t)addr[adr+4] << 32;
- value += (uint64_t)addr[adr+5] << 40;
- value += (uint64_t)addr[adr+6] << 48;
- value += (uint64_t)addr[adr+7] << 56;
- }
- *reg |= value;
- cpu->z[thread] = (*reg == 0);
- cpu->n[thread] = (*reg >> 63);
- setps(cpu, thread);
-}
-
-void xor_addr(struct sux *cpu, uint64_t* const reg, uint64_t adr, uint8_t thread, uint8_t regsize) {
- uint64_t value;
- value = (uint64_t)addr[adr];
- if (regsize >= 2)
- value += (uint64_t)addr[adr+1] << 8;
- if (regsize >= 4) {
- value += (uint64_t)addr[adr+2] << 16;
- value += (uint64_t)addr[adr+3] << 24;
- }
- if (regsize >= 8) {
- value += (uint64_t)addr[adr+4] << 32;
- value += (uint64_t)addr[adr+5] << 40;
- value += (uint64_t)addr[adr+6] << 48;
- value += (uint64_t)addr[adr+7] << 56;
- }
- *reg ^= value;
- cpu->z[thread] = (*reg == 0);
- cpu->n[thread] = (*reg >> 63);
- setps(cpu, thread);
-}
-
-void stt(struct sux* const cpu, uint8_t value) {
- uint16_t tv = 0xFF50; /* Thread Vector. */
- uint8_t t = addr[value];
- cpu->crt |= t;
- for (uint8_t i = 0; i < 7; i++)
- if ((t >> i) & 1) {
- uint64_t adr = (uint64_t)addr[tv+(8*i)]
- | (uint64_t)addr[tv+1+(8*i)] << 8
- | (uint64_t)addr[tv+2+(8*i)] << 16
- | (uint64_t)addr[tv+3+(8*i)] << 24
- | (uint64_t)addr[tv+4+(8*i)] << 32
- | (uint64_t)addr[tv+5+(8*i)] << 40
- | (uint64_t)addr[tv+6+(8*i)] << 48
- | (uint64_t)addr[tv+7+(8*i)] << 56;
- cpu->pc[i+1] = adr;
- }
-}
-
-void ent(struct sux *cpu, uint8_t value) {
- uint8_t t = addr[value];
- cpu->crt &= ~t;
- for (uint8_t i = 0; i < 7; i++)
- if ((t >> i) & 1)
- cpu->pc[i+1] = cpu->pc[0]+(i+1);
-}
-
-void ld(struct sux *cpu, uint64_t *reg, uint64_t adr, uint8_t thread, uint8_t regsize) {
- *reg = (uint64_t)addr[adr];
- if (regsize >= 2)
- *reg += (uint64_t)addr[adr+1] << 8;
- if (regsize >= 4) {
- *reg += (uint64_t)addr[adr+2] << 16;
- *reg += (uint64_t)addr[adr+3] << 24;
- }
- if (regsize >= 8) {
- *reg += (uint64_t)addr[adr+4] << 32;
- *reg += (uint64_t)addr[adr+5] << 40;
- *reg += (uint64_t)addr[adr+6] << 48;
- *reg += (uint64_t)addr[adr+7] << 56;
- }
- cpu->z[thread] = (*reg == 0);
- cpu->n[thread] = (*reg >> 63);
- setps(cpu, thread);
-}
-
-void st(struct sux *cpu, uint64_t *reg, uint64_t adr, uint8_t thread, uint8_t regsize) {
- addr[adr] = *reg & 0xFF;
- if (regsize >= 2)
- addr[adr+1] = *reg >> 8;
- if (regsize >= 4) {
- addr[adr+2] = *reg >> 16;
- addr[adr+3] = *reg >> 24;
- }
- if (regsize >= 8) {
- addr[adr+4] = *reg >> 32;
- addr[adr+5] = *reg >> 40;
- addr[adr+6] = *reg >> 48;
- addr[adr+7] = *reg >> 56;
- }
-}
-
-void push(struct sux *cpu, uint8_t value) {
- addr[STK_STADDR+cpu->sp] = value;
- cpu->sp--;
- addr[0xFF90] = cpu->sp & 0xFF;
- addr[0xFF91] = cpu->sp >> 8;
-}
-
-uint8_t pull(struct sux *cpu) {
- cpu->sp++;
- addr[0xFF90] = cpu->sp & 0xFF;
- addr[0xFF91] = cpu->sp >> 8;
- return addr[STK_STADDR+cpu->sp];
-}
-
-uint64_t immaddr(struct sux *cpu, uint8_t thread, uint8_t size) {
- uint64_t adr = cpu->pc[thread];
- cpu->pc[thread]+=size;
- return adr;
-}
-
-uint64_t absaddr(struct sux *cpu, uint8_t thread) {
- uint64_t adr = (uint64_t)addr[cpu->pc[thread]]
- | (uint64_t)addr[cpu->pc[thread]+1] << 8
- | (uint64_t)addr[cpu->pc[thread]+2] << 16
- | (uint64_t)addr[cpu->pc[thread]+3] << 24
- | (uint64_t)addr[cpu->pc[thread]+4] << 32
- | (uint64_t)addr[cpu->pc[thread]+5] << 40
- | (uint64_t)addr[cpu->pc[thread]+6] << 48
- | (uint64_t)addr[cpu->pc[thread]+7] << 56;
- cpu->pc[thread]+=8;
- return adr;
-}
-
-uint32_t zeromtx(struct sux *cpu, uint8_t thread) {
- uint32_t adr = (uint32_t)addr[cpu->pc[thread]]
- | (uint32_t)addr[cpu->pc[thread]+1] << 8
- | (uint32_t)addr[cpu->pc[thread]+2] << 16
- | (uint32_t)addr[cpu->pc[thread]+3] << 24;
- cpu->pc[thread]+=4;
- return adr;
-}
-
-uint32_t zeromx(struct sux *cpu, uint8_t thread) {
- uint32_t adr = (uint32_t)addr[cpu->pc[thread]]
- | (uint32_t)addr[cpu->pc[thread]+1] << 8
- | (uint32_t)addr[cpu->pc[thread]+2] << 16
- | (uint32_t)addr[cpu->pc[thread]+3] << 24;
- adr += cpu->x[thread];
- cpu->pc[thread]+=4;
- return adr;
-}
-
-uint32_t zeromy(struct sux *cpu, uint8_t thread) {
- uint32_t adr = (uint32_t)addr[cpu->pc[thread]]
- | (uint32_t)addr[cpu->pc[thread]+1] << 8
- | (uint32_t)addr[cpu->pc[thread]+2] << 16
- | (uint32_t)addr[cpu->pc[thread]+3] << 24;
- adr += cpu->y[thread];
- cpu->pc[thread]+=4;
- return adr;
-}