182 lines
3.9 KiB
Brainfuck
Executable File
182 lines
3.9 KiB
Brainfuck
Executable File
inc(0x1a, regs.p.m, a),
|
|
inx(0xe8, regs.p.x, x),
|
|
iny(0xc8, regs.p.x, y) {
|
|
1:last_cycle();
|
|
op_io_irq();
|
|
if($1) {
|
|
regs.$2.l++;
|
|
regs.p.n = !!(regs.$2.l & 0x80);
|
|
regs.p.z = (regs.$2.l == 0);
|
|
} else {
|
|
regs.$2.w++;
|
|
regs.p.n = !!(regs.$2.w & 0x8000);
|
|
regs.p.z = (regs.$2.w == 0);
|
|
}
|
|
}
|
|
|
|
dec(0x3a, regs.p.m, a),
|
|
dex(0xca, regs.p.x, x),
|
|
dey(0x88, regs.p.x, y) {
|
|
1:last_cycle();
|
|
op_io_irq();
|
|
if($1) {
|
|
regs.$2.l--;
|
|
regs.p.n = !!(regs.$2.l & 0x80);
|
|
regs.p.z = (regs.$2.l == 0);
|
|
} else {
|
|
regs.$2.w--;
|
|
regs.p.n = !!(regs.$2.w & 0x8000);
|
|
regs.p.z = (regs.$2.w == 0);
|
|
}
|
|
}
|
|
|
|
asl(0x0a) {
|
|
1:last_cycle();
|
|
op_io_irq();
|
|
if(regs.p.m) {
|
|
regs.p.c = !!(regs.a.l & 0x80);
|
|
regs.a.l <<= 1;
|
|
regs.p.n = !!(regs.a.l & 0x80);
|
|
regs.p.z = (regs.a.l == 0);
|
|
} else {
|
|
regs.p.c = !!(regs.a.w & 0x8000);
|
|
regs.a.w <<= 1;
|
|
regs.p.n = !!(regs.a.w & 0x8000);
|
|
regs.p.z = (regs.a.w == 0);
|
|
}
|
|
}
|
|
|
|
lsr(0x4a) {
|
|
1:last_cycle();
|
|
op_io_irq();
|
|
if(regs.p.m) {
|
|
regs.p.c = regs.a.l & 1;
|
|
regs.a.l >>= 1;
|
|
regs.p.n = !!(regs.a.l & 0x80);
|
|
regs.p.z = (regs.a.l == 0);
|
|
} else {
|
|
regs.p.c = regs.a.w & 1;
|
|
regs.a.w >>= 1;
|
|
regs.p.n = !!(regs.a.w & 0x8000);
|
|
regs.p.z = (regs.a.w == 0);
|
|
}
|
|
}
|
|
|
|
rol(0x2a) {
|
|
1:last_cycle();
|
|
op_io_irq();
|
|
uint16 c = regs.p.c;
|
|
if(regs.p.m) {
|
|
regs.p.c = !!(regs.a.l & 0x80);
|
|
regs.a.l <<= 1;
|
|
regs.a.l |= c;
|
|
regs.p.n = !!(regs.a.l & 0x80);
|
|
regs.p.z = (regs.a.l == 0);
|
|
} else {
|
|
regs.p.c = !!(regs.a.w & 0x8000);
|
|
regs.a.w <<= 1;
|
|
regs.a.w |= c;
|
|
regs.p.n = !!(regs.a.w & 0x8000);
|
|
regs.p.z = (regs.a.w == 0);
|
|
}
|
|
}
|
|
|
|
ror(0x6a) {
|
|
1:last_cycle();
|
|
op_io_irq();
|
|
uint16 c;
|
|
if(regs.p.m) {
|
|
c = regs.p.c ? 0x80 : 0;
|
|
regs.p.c = regs.a.l & 1;
|
|
regs.a.l >>= 1;
|
|
regs.a.l |= c;
|
|
regs.p.n = !!(regs.a.l & 0x80);
|
|
regs.p.z = (regs.a.l == 0);
|
|
} else {
|
|
c = regs.p.c ? 0x8000 : 0;
|
|
regs.p.c = regs.a.w & 1;
|
|
regs.a.w >>= 1;
|
|
regs.a.w |= c;
|
|
regs.p.n = !!(regs.a.w & 0x8000);
|
|
regs.p.z = (regs.a.w == 0);
|
|
}
|
|
}
|
|
|
|
inc_addr(0xee, inc),
|
|
dec_addr(0xce, dec),
|
|
asl_addr(0x0e, asl),
|
|
lsr_addr(0x4e, lsr),
|
|
rol_addr(0x2e, rol),
|
|
ror_addr(0x6e, ror),
|
|
trb_addr(0x1c, trb),
|
|
tsb_addr(0x0c, tsb) {
|
|
1:aa.l = op_readpc();
|
|
2:aa.h = op_readpc();
|
|
3:rd.l = op_readdbr(aa.w);
|
|
4:if(!regs.p.m) rd.h = op_readdbr(aa.w + 1);
|
|
5:op_io();
|
|
if(regs.p.m) { op_$1_b(); }
|
|
else { op_$1_w();
|
|
6:op_writedbr(aa.w + 1, rd.h); }
|
|
7:last_cycle();
|
|
op_writedbr(aa.w, rd.l);
|
|
}
|
|
|
|
inc_addrx(0xfe, inc),
|
|
dec_addrx(0xde, dec),
|
|
asl_addrx(0x1e, asl),
|
|
lsr_addrx(0x5e, lsr),
|
|
rol_addrx(0x3e, rol),
|
|
ror_addrx(0x7e, ror) {
|
|
1:aa.l = op_readpc();
|
|
2:aa.h = op_readpc();
|
|
3:op_io();
|
|
4:rd.l = op_readdbr(aa.w + regs.x.w);
|
|
5:if(!regs.p.m) rd.h = op_readdbr(aa.w + regs.x.w + 1);
|
|
6:op_io();
|
|
if(regs.p.m) { op_$1_b(); }
|
|
else { op_$1_w();
|
|
7:op_writedbr(aa.w + regs.x.w + 1, rd.h); }
|
|
8:last_cycle();
|
|
op_writedbr(aa.w + regs.x.w, rd.l);
|
|
}
|
|
|
|
inc_dp(0xe6, inc),
|
|
dec_dp(0xc6, dec),
|
|
asl_dp(0x06, asl),
|
|
lsr_dp(0x46, lsr),
|
|
rol_dp(0x26, rol),
|
|
ror_dp(0x66, ror),
|
|
trb_dp(0x14, trb),
|
|
tsb_dp(0x04, tsb) {
|
|
1:dp = op_readpc();
|
|
2:op_io_cond2();
|
|
3:rd.l = op_readdp(dp);
|
|
4:if(!regs.p.m) rd.h = op_readdp(dp + 1);
|
|
5:op_io();
|
|
if(regs.p.m) { op_$1_b(); }
|
|
else { op_$1_w();
|
|
6:op_writedp(dp + 1, rd.h); }
|
|
7:last_cycle();
|
|
op_writedp(dp, rd.l);
|
|
}
|
|
|
|
inc_dpx(0xf6, inc),
|
|
dec_dpx(0xd6, dec),
|
|
asl_dpx(0x16, asl),
|
|
lsr_dpx(0x56, lsr),
|
|
rol_dpx(0x36, rol),
|
|
ror_dpx(0x76, ror) {
|
|
1:dp = op_readpc();
|
|
2:op_io_cond2();
|
|
3:op_io();
|
|
4:rd.l = op_readdp(dp + regs.x.w);
|
|
5:if(!regs.p.m) rd.h = op_readdp(dp + regs.x.w + 1);
|
|
6:op_io();
|
|
if(regs.p.m) { op_$1_b(); }
|
|
else { op_$1_w();
|
|
7:op_writedp(dp + regs.x.w + 1, rd.h); }
|
|
8:last_cycle();
|
|
op_writedp(dp + regs.x.w, rd.l);
|
|
}
|