7 u8int rP, emu, irq, nmi, dma, wai;
8 u16int rA, rX, rY, rS, rD, pc;
9 u32int rDB, rPB, curpc, hdma;
18 if(irq && (rP & FLAGI) == 0)
27 return memread(pc++ | rPB);
35 r = memread(pc++ | rPB);
36 r |= memread(pc++ | rPB) << 8;
51 mem816(u32int a, u16int v)
54 return memread(a) | v;
68 memw816(u32int a, u16int v)
73 memwrite(++a, v >> 8);
77 memwx816(u32int a, u16int v)
82 memwrite(++a, v >> 8);
89 if(emu && (rS & 0xFF) == 0)
98 if(emu && (rS & 0xFF) == 0xFF)
123 push816(u16int v, int m)
131 pop816(u16int a, int m)
145 rP &= ~(FLAGN | FLAGZ);
155 rP &= ~(FLAGN | FLAGZ);
158 if((v & 0x8000) != 0)
206 case 1: p += rX; break;
207 case 2: p += rY; break;
225 r = memread(p++ | b);
226 r |= memread(p | b) << 8;
237 case 1: p += rX; io(); break;
238 case 2: p += rY; io(); break;
243 return rD & 0xFF00 | p & 0xFF;
244 p = (p + rD) & 0xFFFF;
249 dpi(int l, int x, int y)
256 if(emu && (rD & 0xFF) == 0){
261 r |= memread(p++) << 8;
263 if(emu && (rD & 0xFF) == 0){
268 b = memread(p) << 16;
273 if(x8 && ((r ^ s) & 0xFF00) != 0)
288 return (rS + d) & 0xFFFF;
299 a = (mem16((rS + d) & 0xFFFF) | rDB) + rY;
305 rmw(u32int a, u16int, u16int w)
323 if(emu && (npc ^ pc) >> 8)
333 else if((v & 0x10) != 0){
346 if((rP & FLAGD) != 0){
347 r = (rA & 0xf) + (a & 0xf) + (rP & FLAGC);
352 r += (rA & 0xf0) + (a & 0xf0);
354 r = (rA & 0xff) + a + (rP & FLAGC);
355 rP &= ~(FLAGC | FLAGN | FLAGV | FLAGZ);
356 if((~(rA ^ a) & (rA ^ r)) & 0x80)
358 if((rP & FLAGD) != 0 && r > 0x9f)
366 rA = rA & 0xFF00 | r;
368 if((rP & FLAGD) != 0){
369 r = (rA & 0x000f) + (a & 0x000f) + (rP & FLAGC);
370 if(r > 0x0009) r += 0x0006;
371 if(r > 0x001f) r -= 0x0010;
372 r += (rA & 0x00f0) + (a & 0x00f0);
373 if(r > 0x009f) r += 0x0060;
374 if(r > 0x01ff) r -= 0x0100;
375 r += (rA & 0x0f00) + (a & 0x0f00);
376 if(r > 0x09ff) r += 0x0600;
377 if(r > 0x1fff) r -= 0x1000;
378 r += (rA & 0xf000) + (a & 0xf000);
380 r = rA + a + (rP & FLAGC);
381 rP &= ~(FLAGC | FLAGN | FLAGV | FLAGZ);
382 if((~(rA ^ a) & (rA ^ r)) & 0x8000)
384 if((rP & FLAGD) != 0 && r > 0x9fff)
388 if((r & 0x8000) != 0)
403 rP |= v >> (m8 ? 7 : 15);
410 rP &= ~(FLAGN | FLAGZ | FLAGV);
416 rP |= (a >> 8) & 0xC0;
424 rDB = fetch8() << 16;
426 memwrite(rDB | rY, memread(sb | rX));
445 cmp(u16int a, u16int b, int m)
451 rP &= ~(FLAGN | FLAGZ | FLAGC);
456 if((a - b) & (m ? 0x80 : 0x8000))
497 rP |= w >> (m8 ? 7 : 15);
506 v = (rP & FLAGC) << (m8 ? 7 : 15);
520 if((rP & FLAGD) != 0){
521 r = (rA & 0xf) + (a & 0xf) + (rP & FLAGC);
522 if(r < 0x10) r -= 0x06;
524 r += (rA & 0xf0) + (a & 0xf0);
526 r = (rA & 0xff) + a + (rP & FLAGC);
527 rP &= ~(FLAGC | FLAGN | FLAGV | FLAGZ);
528 if((~(rA ^ a) & (rA ^ r)) & 0x80)
532 else if((rP & FLAGD) != 0)
538 rA = rA & 0xFF00 | r;
541 if((rP & FLAGD) != 0){
542 r = (rA & 0x000f) + (a & 0x000f) + (rP & FLAGC);
543 if(r < 0x0010) r -= 0x0006;
544 if(r < 0x0000) r += 0x0010;
545 r += (rA & 0x00f0) + (a & 0x00f0);
546 if(r < 0x0100) r -= 0x0060;
547 if(r < 0x0000) r += 0x0100;
548 r += (rA & 0x0f00) + (a & 0x0f00);
549 if(r < 0x1000) r -= 0x0600;
550 if(r < 0x0000) r += 0x1000;
551 r += (rA & 0xf000) + (a & 0xf000);
553 r = rA + a + (rP & FLAGC);
554 rP &= ~(FLAGC | FLAGN | FLAGV | FLAGZ);
555 if((~(rA ^ a) & (rA ^ r)) & 0x8000)
559 else if((rP & FLAGD) != 0)
561 if((r & 0x8000) != 0)
573 rA = rA & 0xff00 | nz8(a & 0xff);
579 setx(u16int a, u16int *b)
588 tsb(u32int a, int set)
595 if((rA & v & 0xFF) == 0)
607 enum { COP = 0, BRK = 1, NMI = 3, IRQ = 5 };
617 if(emu && src != BRK)
621 if(emu && src == BRK)
623 pc = mem16(0xffe4 + src * 2 + emu * 0x10);
653 if((hdma & 0xffff) != 0){
666 if(irq && (rP & FLAGI) == 0){
679 m8 = (rP & FLAGM) != 0;
680 x8 = (rP & FLAGX) != 0;
683 print("BRK PC=%.6x from PC=%.6x\n", curpc, lastpc);
686 print("%.6x %.2x A=%.4x X=%.4x Y=%.4x P=%.2x %.2x\n", curpc, op, rA, rX, rY, rP, rS);
688 case 0x00: fetch8(); interrupt(BRK); break;
689 case 0x01: nz(rA |= mem816(dpi(0, 1, 0), 0)); break;
690 case 0x02: fetch8(); interrupt(COP); break;
691 case 0x03: nz(rA |= mem816(sr(), 0)); break;
692 case 0x04: tsb(dp(0), 1); break;
693 case 0x05: nz(rA |= mem816(dp(0), 0)); break;
694 case 0x06: asl(dp(0)); break;
695 case 0x07: nz(rA |= mem816(dpi(1, 0, 0), 0)); break;
696 case 0x08: io(); push8(rP); break;
697 case 0x09: nz(rA |= imm(0)); break;
702 rA = (rA & 0xFF00) | ((rA << 1) & 0xFF);
704 rP |= (rA >> 15) & 1;
710 case 0x0B: io(); push16(rD); break;
711 case 0x0C: tsb(abso(0, 0), 1); break;
712 case 0x0D: nz(rA |= mem816(abso(0, 0), 0)); break;
713 case 0x0E: asl(abso(0, 0)); break;
714 case 0x0F: nz(rA |= mem816(abso(1, 0), 0)); break;
715 case 0x10: branch((rP & FLAGN) == 0); break;
716 case 0x11: nz(rA |= mem816(dpi(0, 0, 1), 0)); break;
717 case 0x12: nz(rA |= mem816(dpi(0, 0, 0), 0)); break;
718 case 0x13: nz(rA |= mem816(sry(), 0)); break;
719 case 0x14: tsb(dp(0), 0); break;
720 case 0x15: nz(rA |= mem816(dp(1), 0)); break;
721 case 0x16: asl(dp(1)); break;
722 case 0x17: nz(rA |= mem816(dpi(1, 0, 1), 0)); break;
723 case 0x18: rP &= ~FLAGC; ioirq(); break;
724 case 0x19: nz(rA |= mem816(abso(0, 2), 0)); break;
726 if(m8 && (rA & 0xFF) == 0xFF)
733 case 0x1B: rS = rA; if(emu) rS = rS & 0xff | 0x100; ioirq(); break;
734 case 0x1C: tsb(abso(0, 0), 0); break;
735 case 0x1D: nz(rA |= mem816(abso(0, 1), 0)); break;
736 case 0x1E: asl(abso(0, 1)); break;
737 case 0x1F: nz(rA |= mem816(abso(1, 1), 0)); break;
738 case 0x20: a = fetch16(); io(); push16(pc-1); pc = a; break;
739 case 0x21: nz(rA &= mem816(dpi(0, 1, 0), 0xFF00)); break;
740 case 0x22: a = fetch16(); push8(rPB>>16); io(); rPB = fetch8()<<16; push16(pc-1); pc = a; break;
741 case 0x23: nz(rA &= mem816(sr(), 0xFF00)); break;
742 case 0x24: bit(mem816(dp(0), 0)); break;
743 case 0x25: nz(rA &= mem816(dp(0), 0xFF00)); break;
744 case 0x26: rol(dp(0)); break;
745 case 0x27: nz(rA &= mem816(dpi(1, 0, 0), 0xFF00)); break;
746 case 0x28: io(); io(); setrp(pop8()); break;
747 case 0x29: nz(rA &= imm(0xFF00)); break;
753 rA = (rA & 0xFF00) | ((rA << 1) & 0xFF) | a;
755 rP |= (rA >> 15) & 1;
761 case 0x2B: io(); io(); nz16(rD = pop16()); break;
762 case 0x2C: bit(mem816(abso(0, 0), 0)); break;
763 case 0x2D: nz(rA &= mem816(abso(0, 0), 0xFF00)); break;
764 case 0x2E: rol(abso(0, 0)); break;
765 case 0x2F: nz(rA &= mem816(abso(1, 0), 0xFF00)); break;
766 case 0x30: branch((rP & FLAGN) != 0); break;
767 case 0x31: nz(rA &= mem816(dpi(0, 0, 1), 0xFF00)); break;
768 case 0x32: nz(rA &= mem816(dpi(0, 0, 0), 0xFF00)); break;
769 case 0x33: nz(rA &= mem816(sry(), 0xFF00)); break;
770 case 0x34: bit(mem816(dp(1), 0)); break;
771 case 0x35: nz(rA &= mem816(dp(1), 0xFF00)); break;
772 case 0x36: rol(dp(1)); break;
773 case 0x37: nz(rA &= mem816(dpi(1, 0, 1), 0xFF00)); break;
774 case 0x38: rP |= FLAGC; ioirq(); break;
775 case 0x39: nz(rA &= mem816(abso(0, 2), 0xFF00)); break;
777 if(m8 && (rA & 0xFF) == 0)
784 case 0x3B: nz16(rA = rS); ioirq(); break;
785 case 0x3C: bit(mem816(abso(0, 1), 0)); break;
786 case 0x3D: nz(rA &= mem816(abso(0, 1), 0xFF00)); break;
787 case 0x3E: rol(abso(0, 1)); break;
788 case 0x3F: nz(rA &= mem816(abso(1, 1), 0xFF00)); break;
797 case 0x41: nz(rA ^= mem816(dpi(0, 1, 0), 0)); break;
798 case 0x42: fetch8(); break;
799 case 0x43: nz(rA ^= mem816(sr(), 0)); break;
800 case 0x44: block(0); break;
801 case 0x45: nz(rA ^= mem816(dp(0), 0)); break;
802 case 0x46: lsr(dp(0)); break;
803 case 0x47: nz(rA ^= mem816(dpi(1, 0, 0), 0)); break;
804 case 0x48: io(); push816(rA, m8); break;
805 case 0x49: nz(rA ^= imm(0)); break;
810 rA = rA & 0xFF00 | (rA >> 1) & 0x7F;
816 case 0x4B: io(); push8(rPB >> 16); break;
817 case 0x4C: pc = fetch16(); break;
818 case 0x4D: nz(rA ^= mem816(abso(0, 0), 0)); break;
819 case 0x4E: lsr(abso(0, 0)); break;
820 case 0x4F: nz(rA ^= mem816(abso(1, 0), 0)); break;
821 case 0x50: branch((rP & FLAGV) == 0); break;
822 case 0x51: nz(rA ^= mem816(dpi(0, 0, 1), 0)); break;
823 case 0x52: nz(rA ^= mem816(dpi(0, 0, 0), 0)); break;
824 case 0x53: nz(rA ^= mem816(sry(), 0)); break;
825 case 0x54: block(1); break;
826 case 0x55: nz(rA ^= mem816(dp(1), 0)); break;
827 case 0x56: lsr(dp(1)); break;
828 case 0x57: nz(rA ^= mem816(dpi(1, 0, 1), 0)); break;
829 case 0x58: rP &= ~FLAGI; ioirq(); break;
830 case 0x59: nz(rA ^= mem816(abso(0, 2), 0)); break;
831 case 0x5A: io(); push816(rY, x8); break;
832 case 0x5B: nz16(rD = rA); ioirq(); break;
833 case 0x5C: a = fetch16(); rPB = fetch8() << 16; pc = a; break;
834 case 0x5D: nz(rA ^= mem816(abso(0, 1), 0)); break;
835 case 0x5E: lsr(abso(0, 1)); break;
836 case 0x5F: nz(rA ^= mem816(abso(1, 1), 0)); break;
837 case 0x60: io(); io(); pc = pop16() + 1; io(); break;
838 case 0x61: adc(mem816(dpi(0, 1, 0), 0)); break;
839 case 0x62: a = fetch16(); io(); push16(a + pc); break;
840 case 0x63: adc(mem816(sr(), 0)); break;
841 case 0x64: memw816(dp(0), 0); break;
842 case 0x65: adc(mem816(dp(0), 0)); break;
843 case 0x66: ror(dp(0)); break;
844 case 0x67: adc(mem816(dpi(1, 0, 0), 0)); break;
845 case 0x68: nz(rA = pop816(rA & 0xFF00, m8)); break;
846 case 0x69: adc(imm(0)); break;
852 rA = rA & 0xFF00 | (rA >> 1) & 0x7F | a << 7;
854 rA = rA >> 1 | a << 15;
858 case 0x6B: io(); io(); pc = pop16() + 1; rPB = pop8() << 16; break;
859 case 0x6C: pc = absi(0); break;
860 case 0x6D: adc(mem816(abso(0, 0), 0)); break;
861 case 0x6E: ror(abso(0, 0)); break;
862 case 0x6F: adc(mem816(abso(1, 0), 0)); break;
863 case 0x70: branch((rP & FLAGV) != 0); break;
864 case 0x71: adc(mem816(dpi(0, 0, 1), 0)); break;
865 case 0x72: adc(mem816(dpi(0, 0, 0), 0)); break;
866 case 0x73: adc(mem816(sry(), 0)); break;
867 case 0x74: memw816(dp(1), 0); break;
868 case 0x75: adc(mem816(dp(1), 0)); break;
869 case 0x76: ror(dp(1)); break;
870 case 0x77: adc(mem816(dpi(1, 0, 1), 0)); break;
871 case 0x78: rP |= FLAGI; io(); break;
872 case 0x79: adc(mem816(abso(0, 2), 0)); break;
873 case 0x7A: io(); io(); nzx(rY = pop816(0, x8)); break;
874 case 0x7B: nz16(rA = rD); ioirq(); break;
875 case 0x7C: pc = absi(1); break;
876 case 0x7D: adc(mem816(abso(0, 1), 0)); break;
877 case 0x7E: ror(abso(0, 1)); break;
878 case 0x7F: adc(mem816(abso(1, 1), 0)); break;
879 case 0x80: branch(1); break;
880 case 0x81: memw816(dpi(0, 1, 0), rA); break;
881 case 0x82: a = fetch16(); io(); pc += a; break;
882 case 0x83: memw816(sr(), rA); break;
883 case 0x84: memwx816(dp(0), rY); break;
884 case 0x85: memw816(dp(0), rA); break;
885 case 0x86: memwx816(dp(0), rX); break;
886 case 0x87: memw816(dpi(1, 0, 0), rA); break;
896 if((imm(0) & rA) == 0)
899 case 0x8A: setra(rX); ioirq(); break;
900 case 0x8B: io(); push8(rDB >> 16); break;
901 case 0x8C: memwx816(abso(0, 0), rY); break;
902 case 0x8D: memw816(abso(0, 0), rA); break;
903 case 0x8E: memwx816(abso(0, 0), rX); break;
904 case 0x8F: memw816(abso(1, 0), rA); break;
905 case 0x90: branch((rP & FLAGC) == 0); break;
906 case 0x91: memw816(dpi(0, 0, 1), rA); break;
907 case 0x92: memw816(dpi(0, 0, 0), rA); break;
908 case 0x93: memw816(sry(), rA); break;
909 case 0x94: memwx816(dp(1), rY); break;
910 case 0x95: memw816(dp(1), rA); break;
911 case 0x96: memwx816(dp(2), rX); break;
912 case 0x97: memw816(dpi(1, 0, 1), rA); break;
913 case 0x98: setra(rY); ioirq(); break;
914 case 0x99: memw816(abso(0, 2), rA); break;
915 case 0x9A: rS = rX; if(emu) rS = rS & 0xff | 0x100; ioirq(); break;
916 case 0x9B: setx(rX, &rY); ioirq(); break;
917 case 0x9C: memw816(abso(0, 0), 0); break;
918 case 0x9D: memw816(abso(0, 1), rA); break;
919 case 0x9E: memw816(abso(0, 1), 0); break;
920 case 0x9F: memw816(abso(1, 1), rA); break;
921 case 0xA0: nzx(rY = immx(0)); break;
922 case 0xA1: nz(rA = mem816(dpi(0, 1, 0), rA & 0xFF00)); break;
923 case 0xA2: nzx(rX = immx(0)); break;
924 case 0xA3: nz(rA = mem816(sr(), rA & 0xFF00)); break;
925 case 0xA4: nzx(rY = memx816(dp(0))); break;
926 case 0xA5: nz(rA = mem816(dp(0), rA & 0xFF00)); break;
927 case 0xA6: nzx(rX = memx816(dp(0))); break;
928 case 0xA7: nz(rA = mem816(dpi(1, 0, 0), rA & 0xFF00)); break;
929 case 0xA8: setx(rA, &rY); ioirq(); break;
930 case 0xA9: nz(rA = imm(rA & 0xFF00)); break;
931 case 0xAA: setx(rA, &rX); ioirq(); break;
932 case 0xAB: io(); io(); rDB = nz8(pop8()) << 16; break;
933 case 0xAC: nzx(rY = memx816(abso(0, 0))); break;
934 case 0xAD: nz(rA = mem816(abso(0, 0), rA & 0xFF00)); break;
935 case 0xAE: nzx(rX = memx816(abso(0, 0))); break;
936 case 0xAF: nz(rA = mem816(abso(1, 0), rA & 0xFF00)); break;
937 case 0xB0: branch((rP & FLAGC) != 0); break;
938 case 0xB1: nz(rA = mem816(dpi(0, 0, 1), rA & 0xFF00)); break;
939 case 0xB2: nz(rA = mem816(dpi(0, 0, 0), rA & 0xFF00)); break;
940 case 0xB3: nz(rA = mem816(sry(), rA & 0xFF00)); break;
941 case 0xB4: nzx(rY = memx816(dp(1))); break;
942 case 0xB5: nz(rA = mem816(dp(1), rA & 0xFF00)); break;
943 case 0xB6: nzx(rX = memx816(dp(2))); break;
944 case 0xB7: nz(rA = mem816(dpi(1, 0, 1), rA & 0xFF00)); break;
945 case 0xB8: rP &= ~FLAGV; ioirq(); break;
946 case 0xB9: nz(rA = mem816(abso(0, 2), rA & 0xFF00)); break;
947 case 0xBA: setx(rS, &rX); ioirq(); break;
948 case 0xBB: setx(rY, &rX); ioirq(); break;
949 case 0xBC: nzx(rY = memx816(abso(0, 1))); break;
950 case 0xBD: nz(rA = mem816(abso(0, 1), rA & 0xFF00)); break;
951 case 0xBE: nzx(rX = memx816(abso(0, 2))); break;
952 case 0xBF: nz(rA = mem816(abso(1, 1), rA & 0xFF00)); break;
953 case 0xC0: cmp(rY, immx(0), x8); break;
954 case 0xC1: cmp(rA, mem816(dpi(0, 1, 0), 0), m8); break;
955 case 0xC2: setrp(rP & ~fetch8()); io(); break;
956 case 0xC3: cmp(rA, mem816(sr(), 0), m8); break;
957 case 0xC4: cmp(rY, memx816(dp(0)), x8); break;
958 case 0xC5: cmp(rA, mem816(dp(0), 0), m8); break;
959 case 0xC6: dec(dp(0)); break;
960 case 0xC7: cmp(rA, mem816(dpi(1, 0, 0), 0), m8); break;
968 case 0xC9: cmp(rA, imm(0), m8); break;
976 case 0xCB: wai = 1; break;
977 case 0xCC: cmp(rY, memx816(abso(0, 0)), x8); break;
978 case 0xCD: cmp(rA, mem816(abso(0, 0), 0), m8); break;
979 case 0xCE: dec(abso(0, 0)); break;
980 case 0xCF: cmp(rA, mem816(abso(1, 0), 0), m8); break;
981 case 0xD0: branch((rP & FLAGZ) == 0); break;
982 case 0xD1: cmp(rA, mem816(dpi(0, 0, 1), 0), m8); break;
983 case 0xD2: cmp(rA, mem816(dpi(0, 0, 0), 0), m8); break;
984 case 0xD3: cmp(rA, mem816(sry(), 0), m8); break;
985 case 0xD4: io(); push16(dpi(0, 0, 0)); break;
986 case 0xD5: cmp(rA, mem816(dp(1), 0), m8); break;
987 case 0xD6: dec(dp(1)); break;
988 case 0xD7: cmp(rA, mem816(dpi(1, 0, 1), 0), m8); break;
989 case 0xD8: rP &= ~FLAGD; ioirq(); break;
990 case 0xD9: cmp(rA, mem816(abso(0, 2), 0), m8); break;
991 case 0xDA: io(); push816(rX, x8); break;
992 case 0xDB: print("STP\n"); break;
993 case 0xDC: a = fetch16(); pc = memread(a) | memread((u16int)(a+1))<<8; rPB = memread((u16int)(a+2)) << 16; break;
994 case 0xDD: cmp(rA, mem816(abso(0, 1), 0), m8); break;
995 case 0xDE: dec(abso(0, 1)); break;
996 case 0xDF: cmp(rA, mem816(abso(1, 1), 0), m8); break;
997 case 0xE0: cmp(rX, immx(0), x8); break;
998 case 0xE1: sbc(mem816(dpi(0, 1, 0), 0)); break;
999 case 0xE2: setrp(rP | fetch8()); io(); break;
1000 case 0xE3: sbc(mem816(sr(), 0)); break;
1001 case 0xE4: cmp(rX, memx816(dp(0)), x8); break;
1002 case 0xE5: sbc(mem816(dp(0), 0)); break;
1003 case 0xE6: inc(dp(0)); break;
1004 case 0xE7: sbc(mem816(dpi(1, 0, 0), 0)); break;
1012 case 0xE9: sbc(imm(0)); break;
1013 case 0xEA: ioirq(); break;
1014 case 0xEB: nz8(rA = (rA >> 8) | (rA << 8)); io(); io(); break;
1015 case 0xEC: cmp(rX, memx816(abso(0, 0)), x8); break;
1016 case 0xED: sbc(mem816(abso(0, 0), 0)); break;
1017 case 0xEE: inc(abso(0, 0)); break;
1018 case 0xEF: sbc(mem816(abso(1, 0), 0)); break;
1019 case 0xF0: branch((rP & FLAGZ) != 0); break;
1020 case 0xF1: sbc(mem816(dpi(0, 0, 1), 0)); break;
1021 case 0xF2: sbc(mem816(dpi(0, 0, 0), 0)); break;
1022 case 0xF3: sbc(mem816(sry(), 0)); break;
1023 case 0xF4: push16(fetch16()); break;
1024 case 0xF5: sbc(mem816(dp(1), 0)); break;
1025 case 0xF6: inc(dp(1)); break;
1026 case 0xF7: sbc(mem816(dpi(1, 0, 1), 0)); break;
1027 case 0xF8: rP |= FLAGD; ioirq(); break;
1028 case 0xF9: sbc(mem816(abso(0, 2), 0)); break;
1029 case 0xFA: nzx(rX = pop816(0, x8)); break;
1036 rS = rS & 0xff | 0x100;
1043 case 0xFC: push16(pc+1); pc = absi(1); break;
1044 case 0xFD: sbc(mem816(abso(0, 1), 0)); break;
1045 case 0xFE: inc(abso(0, 1)); break;
1046 case 0xFF: sbc(mem816(abso(1, 1), 0)); break;
1048 print("undefined %#x (pc %#.6x)\n", op, curpc);