299 lines
5.3 KiB
Brainfuck
Executable File
299 lines
5.3 KiB
Brainfuck
Executable File
nop(0xea) {
|
|
1:last_cycle();
|
|
op_io_irq();
|
|
}
|
|
|
|
wdm(0x42) {
|
|
1:last_cycle();
|
|
op_readpc();
|
|
}
|
|
|
|
xba(0xeb) {
|
|
1:op_io();
|
|
2:last_cycle();
|
|
op_io();
|
|
regs.a.l ^= regs.a.h;
|
|
regs.a.h ^= regs.a.l;
|
|
regs.a.l ^= regs.a.h;
|
|
regs.p.n = !!(regs.a.l & 0x80);
|
|
regs.p.z = (regs.a.l == 0);
|
|
}
|
|
|
|
mvn(0x54, ++),
|
|
mvp(0x44, --) {
|
|
1:dp = op_readpc();
|
|
2:sp = op_readpc();
|
|
3:regs.db = dp;
|
|
rd.l = op_readlong((sp << 16) | regs.x.w);
|
|
4:op_writelong((dp << 16) | regs.y.w, rd.l);
|
|
5:op_io();
|
|
if(regs.p.x) {
|
|
regs.x.l $1;
|
|
regs.y.l $1;
|
|
} else {
|
|
regs.x.w $1;
|
|
regs.y.w $1;
|
|
}
|
|
6:last_cycle();
|
|
op_io();
|
|
if(regs.a.w--) regs.pc.w -= 3;
|
|
}
|
|
|
|
brk(0x00, 0xfffe, 0xffff, 0xffe6, 0xffe7),
|
|
cop(0x02, 0xfff4, 0xfff5, 0xffe4, 0xffe5) {
|
|
1:op_readpc();
|
|
2:if(!regs.e) op_writestack(regs.pc.b);
|
|
3:op_writestack(regs.pc.h);
|
|
4:op_writestack(regs.pc.l);
|
|
5:op_writestack(regs.p);
|
|
6:rd.l = op_readlong(regs.e ? $1 : $3);
|
|
regs.pc.b = 0x00;
|
|
regs.p.i = 1;
|
|
regs.p.d = 0;
|
|
7:last_cycle();
|
|
rd.h = op_readlong(regs.e ? $2 : $4);
|
|
regs.pc.w = rd.w;
|
|
}
|
|
|
|
stp(0xdb) {
|
|
1:op_io();
|
|
2:last_cycle();
|
|
while(true) op_io();
|
|
}
|
|
|
|
wai(0xcb) {
|
|
//last_cycle() will clear status.wai_lock once an NMI / IRQ edge is reached
|
|
1:status.wai_lock = true;
|
|
while(status.wai_lock) {
|
|
last_cycle();
|
|
op_io();
|
|
}
|
|
2:op_io();
|
|
}
|
|
|
|
xce(0xfb) {
|
|
1:last_cycle();
|
|
op_io_irq();
|
|
bool carry = regs.p.c;
|
|
regs.p.c = regs.e;
|
|
regs.e = carry;
|
|
if(regs.e) {
|
|
regs.p |= 0x30;
|
|
regs.s.h = 0x01;
|
|
}
|
|
if(regs.p.x) {
|
|
regs.x.h = 0x00;
|
|
regs.y.h = 0x00;
|
|
}
|
|
}
|
|
|
|
clc(0x18, regs.p.c = 0),
|
|
cld(0xd8, regs.p.d = 0),
|
|
cli(0x58, regs.p.i = 0),
|
|
clv(0xb8, regs.p.v = 0),
|
|
sec(0x38, regs.p.c = 1),
|
|
sed(0xf8, regs.p.d = 1),
|
|
sei(0x78, regs.p.i = 1) {
|
|
1:last_cycle();
|
|
op_io_irq();
|
|
$1;
|
|
}
|
|
|
|
rep(0xc2, &=~),
|
|
sep(0xe2, |=) {
|
|
1:rd.l = op_readpc();
|
|
2:last_cycle();
|
|
op_io();
|
|
regs.p $1 rd.l;
|
|
if(regs.e) regs.p |= 0x30;
|
|
if(regs.p.x) {
|
|
regs.x.h = 0x00;
|
|
regs.y.h = 0x00;
|
|
}
|
|
}
|
|
|
|
tax(0xaa, regs.p.x, x, a),
|
|
tay(0xa8, regs.p.x, y, a),
|
|
txa(0x8a, regs.p.m, a, x),
|
|
txy(0x9b, regs.p.x, y, x),
|
|
tya(0x98, regs.p.m, a, y),
|
|
tyx(0xbb, regs.p.x, x, y) {
|
|
1:last_cycle();
|
|
op_io_irq();
|
|
if($1) {
|
|
regs.$2.l = regs.$3.l;
|
|
regs.p.n = !!(regs.$2.l & 0x80);
|
|
regs.p.z = (regs.$2.l == 0);
|
|
} else {
|
|
regs.$2.w = regs.$3.w;
|
|
regs.p.n = !!(regs.$2.w & 0x8000);
|
|
regs.p.z = (regs.$2.w == 0);
|
|
}
|
|
}
|
|
|
|
tcd(0x5b) {
|
|
1:last_cycle();
|
|
op_io_irq();
|
|
regs.d.w = regs.a.w;
|
|
regs.p.n = !!(regs.d.w & 0x8000);
|
|
regs.p.z = (regs.d.w == 0);
|
|
}
|
|
|
|
tcs(0x1b) {
|
|
1:last_cycle();
|
|
op_io_irq();
|
|
regs.s.w = regs.a.w;
|
|
if(regs.e) regs.s.h = 0x01;
|
|
}
|
|
|
|
tdc(0x7b) {
|
|
1:last_cycle();
|
|
op_io_irq();
|
|
regs.a.w = regs.d.w;
|
|
regs.p.n = !!(regs.a.w & 0x8000);
|
|
regs.p.z = (regs.a.w == 0);
|
|
}
|
|
|
|
tsc(0x3b) {
|
|
1:last_cycle();
|
|
op_io_irq();
|
|
regs.a.w = regs.s.w;
|
|
if(regs.e) {
|
|
regs.p.n = !!(regs.a.l & 0x80);
|
|
regs.p.z = (regs.a.l == 0);
|
|
} else {
|
|
regs.p.n = !!(regs.a.w & 0x8000);
|
|
regs.p.z = (regs.a.w == 0);
|
|
}
|
|
}
|
|
|
|
tsx(0xba) {
|
|
1:last_cycle();
|
|
op_io_irq();
|
|
if(regs.p.x) {
|
|
regs.x.l = regs.s.l;
|
|
regs.p.n = !!(regs.x.l & 0x80);
|
|
regs.p.z = (regs.x.l == 0);
|
|
} else {
|
|
regs.x.w = regs.s.w;
|
|
regs.p.n = !!(regs.x.w & 0x8000);
|
|
regs.p.z = (regs.x.w == 0);
|
|
}
|
|
}
|
|
|
|
txs(0x9a) {
|
|
1:last_cycle();
|
|
op_io_irq();
|
|
if(regs.e) {
|
|
regs.s.l = regs.x.l;
|
|
} else {
|
|
regs.s.w = regs.x.w;
|
|
}
|
|
}
|
|
|
|
pha(0x48, regs.p.m, a),
|
|
phx(0xda, regs.p.x, x),
|
|
phy(0x5a, regs.p.x, y) {
|
|
1:op_io();
|
|
2:if(!$1)op_writestack(regs.$2.h);
|
|
3:last_cycle();
|
|
op_writestack(regs.$2.l);
|
|
}
|
|
|
|
phd(0x0b) {
|
|
1:op_io();
|
|
2:op_writestackn(regs.d.h);
|
|
3:last_cycle();
|
|
op_writestackn(regs.d.l);
|
|
if(regs.e) regs.s.h = 0x01;
|
|
}
|
|
|
|
phb(0x8b, regs.db),
|
|
phk(0x4b, regs.pc.b),
|
|
php(0x08, regs.p) {
|
|
1:op_io();
|
|
2:last_cycle();
|
|
op_writestack($1);
|
|
}
|
|
|
|
pla(0x68, regs.p.m, a),
|
|
plx(0xfa, regs.p.x, x),
|
|
ply(0x7a, regs.p.x, y) {
|
|
1:op_io();
|
|
2:op_io();
|
|
3:if($1)last_cycle();
|
|
regs.$2.l = op_readstack();
|
|
if($1) {
|
|
regs.p.n = !!(regs.$2.l & 0x80);
|
|
regs.p.z = (regs.$2.l == 0);
|
|
end;
|
|
}
|
|
4:last_cycle();
|
|
regs.$2.h = op_readstack();
|
|
regs.p.n = !!(regs.$2.w & 0x8000);
|
|
regs.p.z = (regs.$2.w == 0);
|
|
}
|
|
|
|
pld(0x2b) {
|
|
1:op_io();
|
|
2:op_io();
|
|
3:regs.d.l = op_readstackn();
|
|
4:last_cycle();
|
|
regs.d.h = op_readstackn();
|
|
regs.p.n = !!(regs.d.w & 0x8000);
|
|
regs.p.z = (regs.d.w == 0);
|
|
if(regs.e) regs.s.h = 0x01;
|
|
}
|
|
|
|
plb(0xab) {
|
|
1:op_io();
|
|
2:op_io();
|
|
3:last_cycle();
|
|
regs.db = op_readstack();
|
|
regs.p.n = !!(regs.db & 0x80);
|
|
regs.p.z = (regs.db == 0);
|
|
}
|
|
|
|
plp(0x28) {
|
|
1:op_io();
|
|
2:op_io();
|
|
3:last_cycle();
|
|
regs.p = op_readstack();
|
|
if(regs.e) regs.p |= 0x30;
|
|
if(regs.p.x) {
|
|
regs.x.h = 0x00;
|
|
regs.y.h = 0x00;
|
|
}
|
|
}
|
|
|
|
pea(0xf4) {
|
|
1:aa.l = op_readpc();
|
|
2:aa.h = op_readpc();
|
|
3:op_writestackn(aa.h);
|
|
4:last_cycle();
|
|
op_writestackn(aa.l);
|
|
if(regs.e) regs.s.h = 0x01;
|
|
}
|
|
|
|
pei(0xd4) {
|
|
1:dp = op_readpc();
|
|
2:op_io_cond2();
|
|
3:aa.l = op_readdp(dp);
|
|
4:aa.h = op_readdp(dp + 1);
|
|
5:op_writestackn(aa.h);
|
|
6:last_cycle();
|
|
op_writestackn(aa.l);
|
|
if(regs.e) regs.s.h = 0x01;
|
|
}
|
|
|
|
per(0x62) {
|
|
1:aa.l = op_readpc();
|
|
2:aa.h = op_readpc();
|
|
3:op_io();
|
|
rd.w = regs.pc.d + (int16)aa.w;
|
|
4:op_writestackn(rd.h);
|
|
5:last_cycle();
|
|
op_writestackn(rd.l);
|
|
if(regs.e) regs.s.h = 0x01;
|
|
}
|