op_readpc()1 alwaysinline uint8_t op_readpc() {
2   return op_read((regs.pc.b << 16) + regs.pc.w++);
3 }
4 
op_readstack()5 alwaysinline uint8_t op_readstack() {
6   regs.e ? regs.s.l++ : regs.s.w++;
7   return op_read(regs.s.w);
8 }
9 
op_readstackn()10 alwaysinline uint8_t op_readstackn() {
11   return op_read(++regs.s.w);
12 }
13 
op_readaddr(uint32_t addr)14 alwaysinline uint8_t op_readaddr(uint32_t addr) {
15   return op_read(addr & 0xffff);
16 }
17 
op_readlong(uint32_t addr)18 alwaysinline uint8_t op_readlong(uint32_t addr) {
19   return op_read(addr & 0xffffff);
20 }
21 
op_readdbr(uint32_t addr)22 alwaysinline uint8_t op_readdbr(uint32_t addr) {
23   return op_read(((regs.db << 16) + addr) & 0xffffff);
24 }
25 
op_readpbr(uint32_t addr)26 alwaysinline uint8_t op_readpbr(uint32_t addr) {
27   return op_read((regs.pc.b << 16) + (addr & 0xffff));
28 }
29 
op_readdp(uint32_t addr)30 alwaysinline uint8_t op_readdp(uint32_t addr) {
31   if(regs.e && regs.d.l == 0x00) {
32     return op_read((regs.d & 0xff00) + ((regs.d + (addr & 0xffff)) & 0xff));
33   } else {
34     return op_read((regs.d + (addr & 0xffff)) & 0xffff);
35   }
36 }
37 
op_readsp(uint32_t addr)38 alwaysinline uint8_t op_readsp(uint32_t addr) {
39   return op_read((regs.s + (addr & 0xffff)) & 0xffff);
40 }
41 
op_writestack(uint8_t data)42 alwaysinline void op_writestack(uint8_t data) {
43   op_write(regs.s.w, data);
44   regs.e ? regs.s.l-- : regs.s.w--;
45 }
46 
op_writestackn(uint8_t data)47 alwaysinline void op_writestackn(uint8_t data) {
48   op_write(regs.s.w--, data);
49 }
50 
op_writeaddr(uint32_t addr,uint8_t data)51 alwaysinline void op_writeaddr(uint32_t addr, uint8_t data) {
52   op_write(addr & 0xffff, data);
53 }
54 
op_writelong(uint32_t addr,uint8_t data)55 alwaysinline void op_writelong(uint32_t addr, uint8_t data) {
56   op_write(addr & 0xffffff, data);
57 }
58 
op_writedbr(uint32_t addr,uint8_t data)59 alwaysinline void op_writedbr(uint32_t addr, uint8_t data) {
60   op_write(((regs.db << 16) + addr) & 0xffffff, data);
61 }
62 
op_writepbr(uint32_t addr,uint8_t data)63 alwaysinline void op_writepbr(uint32_t addr, uint8_t data) {
64   op_write((regs.pc.b << 16) + (addr & 0xffff), data);
65 }
66 
op_writedp(uint32_t addr,uint8_t data)67 alwaysinline void op_writedp(uint32_t addr, uint8_t data) {
68   if(regs.e && regs.d.l == 0x00) {
69     op_write((regs.d & 0xff00) + ((regs.d + (addr & 0xffff)) & 0xff), data);
70   } else {
71     op_write((regs.d + (addr & 0xffff)) & 0xffff, data);
72   }
73 }
74 
op_writesp(uint32_t addr,uint8_t data)75 alwaysinline void op_writesp(uint32_t addr, uint8_t data) {
76   op_write((regs.s + (addr & 0xffff)) & 0xffff, data);
77 }
78