bsnes/higan/processor/v30mz/instructions-misc.cpp

76 lines
1.1 KiB
C++
Raw Normal View History

//26 es:
//2e cs:
//36 ss:
//3e ds:
auto V30MZ::opSegment(uint16 segment) {
prefix.segment = segment;
state.prefix = true;
state.poll = false;
}
//f2 repnz:
//f3 repz:
auto V30MZ::opRepeat(bool flag) {
wait(4);
if(r.cx == 0) return;
prefix.repeat = flag;
state.prefix = true;
state.poll = false;
}
//f0 lock:
auto V30MZ::opLock() {
state.prefix = true;
state.poll = false;
}
//9b wait
auto V30MZ::opWait() {
}
//f4 hlt
auto V30MZ::opHalt() {
wait(8);
state.halt = true;
}
//90 nop
auto V30MZ::opNop() {
}
auto V30MZ::opIn(Size size) {
wait(5);
setAcc(size, in(size, fetch()));
}
auto V30MZ::opOut(Size size) {
wait(5);
out(size, fetch(), getAcc(size));
}
auto V30MZ::opInDX(Size size) {
wait(5);
setAcc(size, in(size, r.dx));
}
auto V30MZ::opOutDX(Size size) {
wait(5);
out(size, r.dx, getAcc(size));
}
//d7 xlat
auto V30MZ::opTranslate() {
wait(4);
r.al = read(Byte, segment(r.ds), r.bx + r.al);
}
//62 bound reg,mem,mem
auto V30MZ::opBound() {
wait(12);
modRM();
auto lo = getMem(Word, 0);
auto hi = getMem(Word, 2);
auto reg = getReg(Word);
if(reg < lo || reg > hi) interrupt(5);
}