MCPcopy Create free account
hub / github.com/BlitterStudio/amiberry / MakeFromSR_x

Function MakeFromSR_x

src/cputest.cpp:1083–1169  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1081 | GET_CFLG());
1082}
1083void MakeFromSR_x(int t0trace)
1084{
1085 int oldm = regs.m;
1086 int olds = regs.s;
1087 int oldt0 = regs.t0;
1088 int oldt1 = regs.t1;
1089
1090 SET_XFLG((regs.sr >> 4) & 1);
1091 SET_NFLG((regs.sr >> 3) & 1);
1092 SET_ZFLG((regs.sr >> 2) & 1);
1093 SET_VFLG((regs.sr >> 1) & 1);
1094 SET_CFLG(regs.sr & 1);
1095
1096 if (regs.t1 == ((regs.sr >> 15) & 1) &&
1097 regs.t0 == ((regs.sr >> 14) & 1) &&
1098 regs.s == ((regs.sr >> 13) & 1) &&
1099 regs.m == ((regs.sr >> 12) & 1) &&
1100 regs.intmask == ((regs.sr >> 8) & 7))
1101 return;
1102
1103 regs.t1 = (regs.sr >> 15) & 1;
1104 regs.t0 = (regs.sr >> 14) & 1;
1105 regs.s = (regs.sr >> 13) & 1;
1106 regs.m = (regs.sr >> 12) & 1;
1107
1108 if (regs.intmask != ((regs.sr >> 8) & 7)) {
1109 int newimask = (regs.sr >> 8) & 7;
1110 // STOP intmask change enabling already active interrupt: delay it by 1 STOP round
1111 if (t0trace < 0 && regs.ipl[0] <= regs.intmask && regs.ipl[0] > newimask && regs.ipl[0] < 7) {
1112 regs.ipl[0] = 0;
1113 }
1114 regs.intmask = newimask;
1115 }
1116
1117 if (currprefs.cpu_model >= 68020) {
1118 /* 68060 does not have MSP but does have M-bit.. */
1119 if (currprefs.cpu_model >= 68060)
1120 regs.msp = regs.isp;
1121 if (olds != regs.s) {
1122 if (olds) {
1123 if (oldm)
1124 regs.msp = m68k_areg (regs, 7);
1125 else
1126 regs.isp = m68k_areg (regs, 7);
1127 m68k_areg (regs, 7) = regs.usp;
1128 } else {
1129 regs.usp = m68k_areg (regs, 7);
1130 m68k_areg (regs, 7) = regs.m ? regs.msp : regs.isp;
1131 }
1132 } else if (olds && oldm != regs.m) {
1133 if (oldm) {
1134 regs.msp = m68k_areg (regs, 7);
1135 m68k_areg (regs, 7) = regs.isp;
1136 } else {
1137 regs.isp = m68k_areg (regs, 7);
1138 m68k_areg (regs, 7) = regs.msp;
1139 }
1140 }

Callers 3

MakeFromSR_T0Function · 0.70
MakeFromSRFunction · 0.70
MakeFromSR_STOPFunction · 0.70

Calls 1

activate_traceFunction · 0.70

Tested by

no test coverage detected