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