From bc940116768da65b6cd1735d02a60e34e1c342d7 Mon Sep 17 00:00:00 2001 From: Yuvia Date: Sun, 7 Sep 2025 14:34:02 +0000 Subject: [PATCH] erm --- 6.out | Bin 78285 -> 0 bytes scemu.c | 847 -------------------------------------------------------- 2 files changed, 847 deletions(-) delete mode 100755 6.out delete mode 100644 scemu.c diff --git a/6.out b/6.out deleted file mode 100755 index c341853634c37cf15a41b12c76b68ceb47dd7077..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78285 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 diff --git a/scemu.c b/scemu.c deleted file mode 100644 index bd0f26f..0000000 --- a/scemu.c +++ /dev/null @@ -1,847 +0,0 @@ -#include -#include - -enum { - Negative = 1<<7, - Overflow = 1<<6, - Break = 1<<4, - Decimal = 1<<3, - Interrupt = 1<<2, - Zero = 1<<1, - Carry = 1 -}; - -int step(void); -static u16int fetch16(void); - -u8int mem[65536]; -u8int rA, rS, rX, rY, rP; -u16int pc; - -int irq, nmi; - -u8int *prog; - -void -usage(void) -{ - fprint(2, "usage: %s [ -s target speed ] [ prog ]\n", argv0); - exits("usage"); -} - -void -openprog(char *f, vlong *progsiz) -{ - int fd; - long n; - Dir *d; - - prog = nil; - if(f == nil) - f = "a.out"; - fd = open(f, OREAD); - if(fd < 0) - return; - d = dirfstat(fd); - *progsiz = d->length; - free(d); - prog = malloc(*progsiz); - if(prog == nil) - sysfatal("bad malloc"); - n = read(fd, prog, *progsiz); - if(n != *progsiz) - fprint(2, "tried to read %lld bytes, got only %ld bytes\n", *progsiz, n); - close(fd); -} - -void -main(int argc, char **argv) -{ - int c; - vlong t, t2, t3, progsiz; - vlong target; - - target = 1000; - ARGBEGIN{ - case 's': - target = atoll(EARGF(usage())); - break; - default: - usage(); - break; - }ARGEND - openprog(*argv, &progsiz); - if(prog == nil) - sysfatal("bad program: %r"); - memmove(mem+0x8000, prog, progsiz); - rP = 0x34; - pc = 0xFFFC; - pc = fetch16(); - for(;;){ - c = step(); - while(c >= 0){ - t = nsec(); - --c; - t2 = nsec(); - t3 = t2-t; - while(t3 < target){ - t2 = nsec(); - t3 = t2-t; - } - } - } -} - -static void -push8(u8int v) -{ - mem[0x100 | rS--] = v; -} - -static void -push16(u16int v) -{ - mem[0x100 | rS--] = v >> 8; - mem[0x100 | rS--] = v&0xff; -} - -static u8int -pop8(void) -{ - return mem[0x100 | ++rS]; -} - -static u16int -pop16(void) -{ - u16int v; - - v = mem[0x100 | ++rS]; - v |= mem[0x100 | ++rS] << 8; - return v; -} - -static u8int -fetch8(void) -{ - return mem[pc++]; -} - -static u16int -fetch16(void) -{ - u16int v; - - v = fetch8(); - v |= fetch8() << 8; - return v; -} - -static void -nz(u8int v) -{ - rP &= ~(Negative | Zero); - if(v & 0x80) - rP |= Negative; - if(v == 0) - rP |= Zero; -} - -static void -adc(u8int d) -{ - int r; - - r = rA + d + (rP & Carry); - rP &= ~(Negative | Zero | Overflow | Carry); - if(r > 0xFF) rP |= Carry; - if(r & 0x80) rP |= Negative; - if((~(rA ^ d) & (rA ^ r)) & 0x80) rP |= Overflow; - rA = r; - if(rA == 0) rP |= Zero; -} - -static void -sbc(u8int d) -{ - int r; - - r = rA + (u8int)~d + (rP & Carry); - rP &= ~(Negative | Zero | Overflow | Carry); - if(r > 0xFF) rP |= Carry; - if((~(rA ^ d) & (rA ^ r)) & 0x80) rP |= Overflow; - rA = r; - if(rA == 0) rP |= Zero; - if(rA & 0x80) rP |= Negative; -} - -static void -asl(u16int a) -{ - u8int v; - - rP &= ~(Negative | Zero | Carry); - v = mem[a]; - if(v & 0x80) - rP |= Carry; - v <<= 1; - if(v == 0) - rP |= Zero; - if(v & 0x80) - rP |= Negative; - mem[a] = v; -} - -static void -lsr(u16int a) -{ - u8int v; - - v = mem[a]; - rP &= ~(Negative | Zero | Carry); - rP |= v & 1; - v >>= 1; - if(v == 0) rP |= Zero; - if(v & 0x80) rP |= Negative; - mem[a] = v; -} - -static void -rol(u16int a) -{ - u8int v, b; - - v = mem[a]; - b = rP & Carry; - rP &= ~(Carry | Negative | Zero); - if(v & 0x80) rP |= Carry; - v = (v << 1) | b; - if(v & 0x80) rP |= Negative; - if(v == 0) rP |= Zero; - mem[a] = v; -} - -static void -ror(u16int a) -{ - u8int v, b; - - v = mem[a]; - b = rP & Carry; - rP &= ~(Carry | Negative | Zero); - rP |= v & 1; - v = (v >> 1) | (b << 7); - if(v & 0x80) rP |= Negative; - if(v == 0) rP |= Zero; - mem[a] = v; -} - -static void -cmp(u8int A, u8int B) -{ - rP &= ~(Negative | Zero | Carry); - if(A == B) rP |= Zero; - if(A >= B) rP |= Carry; - if((A - B) & 0x80) rP |= Negative; -} - -static void -inc(u16int a) -{ - u8int v; - - v = mem[a]; - v++; - nz(v); - mem[a] = v; -} - -static void -dec(u16int a) -{ - u8int v; - - v = mem[a]; - v--; - nz(v); - mem[a] = v; -} - -static int -branch(void) -{ - s8int t; - u16int npc; - - t = fetch8(); - npc = pc+t; - if((npc ^ pc) >> 8){ - pc = npc; - return 4; - } - pc = npc; - return 3; -} - -static u16int -aindX(void) -{ - u8int r; - u16int b; - - r = fetch8() + rX; - b = mem[r++]; - b |= mem[r] << 8; - return b; -} - -static u16int -aindY(int *p) -{ - u8int r; - u16int b; - - r = fetch8(); - b = mem[r++] + rY; - *p = b > 0xFF; - b += mem[r] << 8; - return b; -} - -static void -interrupt(int nmi, int brk) -{ - push16(pc); - push8(rP | 0x20 | (brk << 4)); - pc = mem[0xFFFA | (!nmi << 2)]; - pc |= mem[0xFFFB | (!nmi << 2)] << 8; - rP |= Interrupt; -} - -#define zp() mem[fetch8()] -#define zpX() mem[(u8int)(fetch8()+rX)] -#define zpY() mem[(u8int)(fetch8()+rY)] -#define abso() mem[fetch16()] -#define absX() mem[a = fetch16()+rX] -#define absY() mem[a = fetch16()+rY] -#define indX() mem[aindX()] -#define indY(c) mem[aindY(c)] - -int -step(void) -{ - u8int op; - u16int a, v, cpc; - int c; - - if(nmi) - if(--nmi == 0){ - interrupt(1, 0); - nmi = 0; - return 7; - } - if(irq && (rP & Interrupt) == 0){ - interrupt(0, 0); - return 7; - } - cpc = pc; - op = fetch8(); - print("%02x %08b %08b %08b %08b %04x %02x\n", - op, rA, rX, rY, rP, cpc, rS); - switch(op){ - case 0x00: - pc++; - interrupt(0, 1); - return 7; - case 0x01: - nz(rA |= indX()); - return 6; - case 0x05: - nz(rA |= zp()); - return 3; - case 0x06: - asl(fetch8()); - return 5; - case 0x08: - push8(rP | 0x30); - return 3; - case 0x09: - nz(rA |= fetch8()); - return 2; - case 0x0A: - rP &= ~(Negative | Zero | Carry); - if(rA & 0x80) rP |= Carry; - rA <<= 1; - if(rA == 0) rP |= Zero; - if(rA & 0x80) rP |= Negative; - return 2; - case 0x0D: - nz(rA |= abso()); - return 4; - case 0x0E: - asl(fetch16()); - return 6; - case 0x10: - if((rP & Negative) == 0) return branch(); - pc++; - return 2; - case 0x11: - nz(rA |= indY(&c)); - return 5+c; - case 0x15: - nz(rA |= zpX()); - return 4; - case 0x16: - asl((u8int)(fetch8() + rX)); - return 6; - case 0x18: - rP &= ~Carry; - return 2; - case 0x19: - nz(rA |= absY()); - return 4 + ((u8int)a < rY); - case 0x1D: - nz(rA |= absX()); - return 4 + ((u8int)a < rX); - case 0x1E: - asl(fetch16() + rX); - return 7; - case 0x20: - push16(pc+1); - pc = fetch16(); - return 6; - case 0x21: - nz(rA &= indX()); - return 6; - case 0x24: - a = mem[fetch8()]; - rP &= ~(Negative | Zero | Overflow); - rP |= a & 0xC0; - if((a & rA) == 0) rP |= Zero; - return 3; - case 0x25: - nz(rA &= zp()); - return 3; - case 0x26: - rol(fetch8()); - return 5; - case 0x28: - rP = pop8() & 0xcf; - return 4; - case 0x29: - nz(rA &= fetch8()); - return 2; - case 0x2A: - a = rP & Carry; - rP &= ~(Carry | Zero | Negative); - if(rA & 0x80) rP |= Carry; - rA = (rA << 1) | a; - if(rA & 0x80) rP |= Negative; - if(rA == 0) rP |= Zero; - return 2; - case 0x2C: - a = mem[fetch16()]; - rP &= ~(Negative | Zero | Overflow); - rP |= a & 0xC0; - if((a & rA) == 0) rP |= Zero; - return 4; - case 0x2D: - nz(rA &= abso()); - return 4; - case 0x2E: - rol(fetch16()); - return 6; - case 0x30: - if((rP & Negative) != 0) return branch(); - pc++; - return 3; - case 0x31: - nz(rA &= indY(&c)); - return 5+c; - case 0x35: - nz(rA &= zpX()); - return 4; - case 0x36: - rol((u8int)(fetch8() + rX)); - return 6; - case 0x38: - rP |= Carry; - return 2; - case 0x39: - nz(rA &= absY()); - return 4 + ((u8int)a < rY); - case 0x3E: - rol(fetch16() + rX); - return 7; - case 0x3D: - nz(rA &= absX()); - return 4 + ((u8int)a < rX); - case 0x40: - rP = pop8() & 0xcf; - pc = pop16(); - return 6; - case 0x41: - nz(rA ^= indX()); - return 6; - case 0x45: - nz(rA ^= zp()); - return 3; - case 0x46: - lsr(fetch8()); - return 5; - case 0x48: - push8(rA); - return 3; - case 0x49: - nz(rA ^= fetch8()); - return 2; - case 0x4A: - rP &= ~(Negative | Zero | Carry); - rP |= rA & 1; - rA >>= 1; - if(rA == 0) rP |= Zero; - if(rA & 0x80) rP |= Negative; - return 2; - case 0x4C: - pc = fetch16(); - return 3; - case 0x4D: - nz(rA ^= abso()); - return 4; - case 0x4E: - lsr(fetch16()); - return 6; - case 0x51: - nz(rA ^= indY(&c)); - return 5+c; - case 0x56: - lsr((u8int)(fetch8() + rX)); - return 6; - case 0x58: - rP &= ~Interrupt; - return 2; - case 0x50: - if((rP & Overflow) == 0) return branch(); - pc++; - return 3; - case 0x55: - nz(rA ^= zpX()); - return 4; - case 0x59: - nz(rA ^= absY()); - return 4 + ((u8int)a < rX); - case 0x5D: - nz(rA ^= absX()); - return 4 + ((u8int)a < rX); - case 0x5E: - lsr(fetch16() + rX); - return 7; - case 0x60: - pc = pop16() + 1; - return 6; - case 0x61: - adc(indX()); - return 6; - case 0x65: - adc(zp()); - return 3; - case 0x66: - ror(fetch8()); - return 5; - case 0x68: - nz(rA = pop8()); - return 4; - case 0x69: - adc(fetch8()); - return 2; - case 0x6A: - a = rP & Carry; - rP &= ~(Carry | Negative | Zero); - rP |= rA & 1; - rA = (rA >> 1) | (a << 7); - if(rA & 0x80) rP |= Negative; - if(rA == 0) rP |= Zero; - return 2; - case 0x6C: - v = fetch16(); - pc = mem[v] | (mem[(v & 0xFF00) | (u8int)(v+1)] << 8); - return 5; - case 0x6D: - adc(abso()); - return 4; - case 0x6E: - ror(fetch16()); - return 6; - case 0x70: - if((rP & Overflow) != 0) return branch(); - pc++; - return 3; - case 0x71: - adc(indY(&c)); - return 5+c; - case 0x75: - adc(zpX()); - return 4; - case 0x76: - ror((u8int)(fetch8() + rX)); - return 6; - case 0x78: - rP |= Interrupt; - return 2; - case 0x79: - adc(absY()); - return 4 + ((u8int)a < rY); - case 0x7D: - adc(absX()); - return 4 + ((u8int)a < rX); - case 0x7E: - ror(fetch16() + rX); - return 7; - case 0x81: - mem[aindX()] = rA; - return 6; - case 0x84: - mem[fetch8()] = rY; - return 3; - case 0x85: - mem[fetch8()] = rA; - return 3; - case 0x86: - mem[fetch8()] = rX; - return 3; - case 0x88: - nz(--rY); - return 2; - case 0x8A: - nz(rA = rX); - return 2; - case 0x8C: - mem[fetch16()] = rY; - return 4; - case 0x8D: - mem[fetch16()] = rA; - return 4; - case 0x8E: - mem[fetch16()] = rX; - return 4; - case 0x90: - if((rP & Carry) == 0) return branch(); - pc++; - return 3; - case 0x91: - mem[aindY(&c)] = rA; - return 6; - case 0x94: - mem[(u8int)(fetch8() + rX)] = rY; - return 4; - case 0x95: - mem[(u8int)(fetch8() + rX)] = rA; - return 4; - case 0x96: - mem[(u8int)(fetch8() + rY)] = rX; - return 4; - case 0x98: - nz(rA = rY); - return 2; - case 0x99: - mem[fetch16() + rY] = rA; - return 5; - case 0x9A: - rS = rX; - return 2; - case 0x9D: - mem[fetch16() + rX] = rA; - return 5; - case 0xA0: - nz(rY = fetch8()); - return 2; - case 0xA1: - nz(rA = indX()); - return 6; - case 0xA2: - nz(rX = fetch8()); - return 2; - case 0xA4: - nz(rY = zp()); - return 3; - case 0xA5: - nz(rA = zp()); - return 3; - case 0xA6: - nz(rX = zp()); - return 3; - case 0xA8: - nz(rY = rA); - return 2; - case 0xA9: - nz(rA = fetch8()); - return 2; - case 0xAA: - nz(rX = rA); - return 2; - case 0xAC: - nz(rY = abso()); - return 4; - case 0xAE: - nz(rX = abso()); - return 4; - case 0xAD: - nz(rA = abso()); - return 4; - case 0xB0: - if((rP & Carry) != 0) return branch(); - pc++; - return 3; - case 0xB1: - nz(rA = indY(&c)); - return 5+c; - case 0xB4: - nz(rY = zpX()); - return 4; - case 0xB5: - nz(rA = zpX()); - return 4; - case 0xB6: - nz(rX = zpY()); - return 4; - case 0xB8: - rP &= ~Overflow; - return 2; - case 0xB9: - nz(rA = absY()); - return 4 + ((u8int)a < rY); - case 0xBA: - nz(rX = rS); - return 2; - case 0xBC: - nz(rY = absX()); - return 4 + ((u8int)a < rX); - case 0xBD: - nz(rA = absX()); - return 4 + ((u8int)a < rX); - case 0xBE: - nz(rX = absY()); - return 4 + ((u8int)a < rY); - case 0xC1: - cmp(rA, indX()); - return 6; - case 0xC5: - cmp(rA, zp()); - return 3; - case 0xC9: - cmp(rA, fetch8()); - return 2; - case 0xCD: - cmp(rA, abso()); - return 4; - case 0xD0: - if((rP & Zero) == 0) return branch(); - pc++; - return 3; - case 0xD1: - cmp(rA, indY(&c)); - return 5 + c; - case 0xD5: - cmp(rA, zpX()); - return 4; - case 0xD8: - rP &= ~Decimal; - return 2; - case 0xD9: - cmp(rA, absY()); - return 4 + ((u8int)a < rY); - case 0xDD: - cmp(rA, absX()); - return 4 + ((u8int)a < rX); - case 0xC0: - cmp(rY, fetch8()); - return 2; - case 0xC4: - cmp(rY, zp()); - return 3; - case 0xC6: - dec(fetch8()); - return 5; - case 0xC8: - nz(++rY); - return 2; - case 0xCA: - nz(--rX); - return 2; - case 0xCC: - cmp(rY, abso()); - return 4; - case 0xCE: - dec(fetch16()); - return 6; - case 0xD6: - dec((u8int)(fetch8() + rX)); - return 6; - case 0xDE: - dec(fetch16() + rX); - return 7; - case 0xE0: - cmp(rX, fetch8()); - return 2; - case 0xE1: - sbc(indX()); - return 6; - case 0xE4: - cmp(rX, zp()); - return 3; - case 0xE5: - sbc(zp()); - return 3; - case 0xE6: - inc(fetch8()); - return 5; - case 0xE8: - nz(++rX); - return 2; - case 0xE9: - sbc(fetch8()); - return 2; - case 0xEA: - return 2; - case 0xEC: - cmp(rX, abso()); - return 4; - case 0xED: - sbc(abso()); - return 4; - case 0xEE: - inc(fetch16()); - return 6; - case 0xF0: - if((rP & Zero) != 0) return branch(); - pc++; - return 3; - case 0xF1: - sbc(indY(&c)); - return 5+c; - case 0xF5: - sbc(zpX()); - return 4; - case 0xF6: - inc((u8int)(fetch8() + rX)); - return 6; - case 0xF8: - rP |= Decimal; - return 2; - case 0xF9: - sbc(absY()); - return 4 + ((u8int)a < rY); - case 0xFD: - sbc(absX()); - return 4 + ((u8int)a < rX); - case 0xFE: - inc(fetch16() + rX); - return 7; - default: - print("unimplemented %#02x\n", op); - exits(nil); - case 0xFF: - print("%s\n", (s8int*)mem+0x500); - exits(nil); - } -}