Mercurial > vba-clojure
view src/gb/gbCodesCB.h @ 39:3e36553d0cbf
got some speedruns to work!
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Mon, 05 Mar 2012 16:37:38 -0600 |
parents | f9f4f1b99eed |
children | 1ff2c546f5ad |
line wrap: on
line source
1 case 0x00:2 // RLC B3 AF.B.B0 = (BC.B.B1 & 0x80)?C_FLAG:0;4 BC.B.B1 = ((BC.B.B1<<1) | (BC.B.B1>>7)) & 0xFF;5 AF.B.B0 |= ZeroTable[BC.B.B1];6 break;7 case 0x01:8 // RLC C9 AF.B.B0 = (BC.B.B0 & 0x80)?C_FLAG:0;10 BC.B.B0 = ((BC.B.B0<<1) | (BC.B.B0>>7)) & 0xFF;11 AF.B.B0 |= ZeroTable[BC.B.B0];12 break;13 case 0x02:14 // RLC D15 AF.B.B0 = (DE.B.B1 & 0x80)?C_FLAG:0;16 DE.B.B1 = ((DE.B.B1<<1) | (DE.B.B1>>7)) & 0xFF;17 AF.B.B0 |= ZeroTable[DE.B.B1];18 break;19 case 0x03:20 // RLC E21 AF.B.B0 = (DE.B.B0 & 0x80)?C_FLAG:0;22 DE.B.B0 = ((DE.B.B0<<1) | (DE.B.B0>>7)) & 0xFF;23 AF.B.B0 |= ZeroTable[DE.B.B0];24 break;25 case 0x04:26 // RLC H27 AF.B.B0 = (HL.B.B1 & 0x80)?C_FLAG:0;28 HL.B.B1 = ((HL.B.B1<<1) | (HL.B.B1>>7)) & 0xFF;29 AF.B.B0 |= ZeroTable[HL.B.B1];30 break;31 case 0x05:32 // RLC L33 AF.B.B0 = (HL.B.B0 & 0x80)?C_FLAG:0;34 HL.B.B0 = ((HL.B.B0<<1) | (HL.B.B0>>7)) & 0xFF;35 AF.B.B0 |= ZeroTable[HL.B.B0];36 break;37 case 0x06:38 // RLC (HL)39 tempValue=gbReadMemory(HL.W);40 AF.B.B0 = (tempValue & 0x80)?C_FLAG:0;41 tempValue = ((tempValue<<1) | (tempValue>>7)) & 0xFF;42 AF.B.B0 |= ZeroTable[tempValue];43 gbWriteMemory(HL.W,tempValue);44 break;45 case 0x07:46 // RLC A47 AF.B.B0 = (AF.B.B1 & 0x80)?C_FLAG:0;48 AF.B.B1 = ((AF.B.B1<<1) | (AF.B.B1>>7)) & 0xFF;49 AF.B.B0 |= ZeroTable[AF.B.B1];50 break;51 case 0x08:52 // RRC B53 AF.B.B0=(BC.B.B1&0x01 ? C_FLAG : 0);54 BC.B.B1=((BC.B.B1>>1)|(BC.B.B1<<7)) & 0xFF;55 AF.B.B0|=ZeroTable[BC.B.B1];56 break;57 case 0x09:58 // RRC C59 AF.B.B0=(BC.B.B0&0x01 ? C_FLAG : 0);60 BC.B.B0=((BC.B.B0>>1)|(BC.B.B0<<7)) & 0xFF;61 AF.B.B0|=ZeroTable[BC.B.B0];62 break;63 case 0x0a:64 // RRC D65 AF.B.B0=(DE.B.B1&0x01 ? C_FLAG : 0);66 DE.B.B1=((DE.B.B1>>1)|(DE.B.B1<<7)) & 0xFF;67 AF.B.B0|=ZeroTable[DE.B.B1];68 break;69 case 0x0b:70 // RRC E71 AF.B.B0=(DE.B.B0&0x01 ? C_FLAG : 0);72 DE.B.B0=((DE.B.B0>>1)|(DE.B.B0<<7)) & 0xFF;73 AF.B.B0|=ZeroTable[DE.B.B0];74 break;75 case 0x0c:76 // RRC H77 AF.B.B0=(HL.B.B1&0x01 ? C_FLAG : 0);78 HL.B.B1=((HL.B.B1>>1)|(HL.B.B1<<7)) & 0xFF;79 AF.B.B0|=ZeroTable[HL.B.B1];80 break;81 case 0x0d:82 // RRC L83 AF.B.B0=(HL.B.B0&0x01 ? C_FLAG : 0);84 HL.B.B0=((HL.B.B0>>1)|(HL.B.B0<<7)) & 0xFF;85 AF.B.B0|=ZeroTable[HL.B.B0];86 break;87 case 0x0e:88 // RRC (HL)89 tempValue=gbReadMemory(HL.W);90 AF.B.B0=(tempValue&0x01 ? C_FLAG : 0);91 tempValue=((tempValue>>1)|(tempValue<<7)) & 0xFF;92 AF.B.B0|=ZeroTable[tempValue];93 gbWriteMemory(HL.W,tempValue);94 break;95 case 0x0f:96 // RRC A97 AF.B.B0=(AF.B.B1&0x01 ? C_FLAG : 0);98 AF.B.B1=((AF.B.B1>>1)|(AF.B.B1<<7)) & 0xFF;99 AF.B.B0|=ZeroTable[AF.B.B1];100 break;101 case 0x10:102 // RL B103 if(BC.B.B1&0x80) {104 BC.B.B1=((BC.B.B1<<1)|(AF.B.B0&C_FLAG ? 1 : 0)) & 0xFF;105 AF.B.B0=ZeroTable[BC.B.B1]|C_FLAG;106 } else {107 BC.B.B1=((BC.B.B1<<1)|(AF.B.B0&C_FLAG ? 1 : 0)) & 0xFF;108 AF.B.B0=ZeroTable[BC.B.B1];109 }110 break;111 case 0x11:112 // RL C113 if(BC.B.B0&0x80) {114 BC.B.B0=((BC.B.B0<<1)|(AF.B.B0&C_FLAG ? 1 : 0)) & 0xFF;115 AF.B.B0=ZeroTable[BC.B.B0]|C_FLAG;116 } else {117 BC.B.B0=((BC.B.B0<<1)|(AF.B.B0&C_FLAG ? 1 : 0)) & 0xFF;118 AF.B.B0=ZeroTable[BC.B.B0];119 }120 break;121 case 0x12:122 // RL D123 if(DE.B.B1&0x80) {124 DE.B.B1=((DE.B.B1<<1)|(AF.B.B0&C_FLAG ? 1 : 0)) & 0xFF;125 AF.B.B0=ZeroTable[DE.B.B1]|C_FLAG;126 } else {127 DE.B.B1=((DE.B.B1<<1)|(AF.B.B0&C_FLAG ? 1 : 0)) & 0xFF;128 AF.B.B0=ZeroTable[DE.B.B1];129 }130 break;131 case 0x13:132 // RL E133 if(DE.B.B0&0x80) {134 DE.B.B0=((DE.B.B0<<1)|(AF.B.B0&C_FLAG ? 1 : 0)) & 0xFF;135 AF.B.B0=ZeroTable[DE.B.B0]|C_FLAG;136 } else {137 DE.B.B0=((DE.B.B0<<1)|(AF.B.B0&C_FLAG ? 1 : 0)) & 0xFF;138 AF.B.B0=ZeroTable[DE.B.B0];139 }140 break;141 case 0x14:142 // RL H143 if(HL.B.B1&0x80) {144 HL.B.B1=((HL.B.B1<<1)|(AF.B.B0&C_FLAG ? 1 : 0)) & 0xFF;145 AF.B.B0=ZeroTable[HL.B.B1]|C_FLAG;146 } else {147 HL.B.B1=((HL.B.B1<<1)|(AF.B.B0&C_FLAG ? 1 : 0)) & 0xFF;148 AF.B.B0=ZeroTable[HL.B.B1];149 }150 break;151 case 0x15:152 // RL L153 if(HL.B.B0&0x80) {154 HL.B.B0=((HL.B.B0<<1)|(AF.B.B0&C_FLAG ? 1 : 0)) & 0xFF;155 AF.B.B0=ZeroTable[HL.B.B0]|C_FLAG;156 } else {157 HL.B.B0=((HL.B.B0<<1)|(AF.B.B0&C_FLAG ? 1 : 0)) & 0xFF;158 AF.B.B0=ZeroTable[HL.B.B0];159 }160 break;161 case 0x16:162 // RL (HL)163 tempValue=gbReadMemory(HL.W);164 if(tempValue&0x80) {165 tempValue=((tempValue<<1)|(AF.B.B0&C_FLAG ? 1 : 0)) & 0xFF;166 AF.B.B0=ZeroTable[tempValue]|C_FLAG;167 } else {168 tempValue=((tempValue<<1)|(AF.B.B0&C_FLAG ? 1 : 0)) & 0xFF;169 AF.B.B0=ZeroTable[tempValue];170 }171 gbWriteMemory(HL.W,tempValue);172 break;173 case 0x17:174 // RL A175 if(AF.B.B1&0x80) {176 AF.B.B1=((AF.B.B1<<1)|(AF.B.B0&C_FLAG ? 1 : 0)) & 0xFF;177 AF.B.B0=ZeroTable[AF.B.B1]|C_FLAG;178 } else {179 AF.B.B1=((AF.B.B1<<1)|(AF.B.B0&C_FLAG ? 1 : 0)) & 0xFF;180 AF.B.B0=ZeroTable[AF.B.B1];181 }182 break;183 case 0x18:184 // RR B185 if(BC.B.B1&0x01) {186 BC.B.B1=(BC.B.B1>>1)|(AF.B.B0 & C_FLAG ? 0x80:0);187 AF.B.B0=ZeroTable[BC.B.B1]|C_FLAG;188 } else {189 BC.B.B1=(BC.B.B1>>1)|(AF.B.B0 & C_FLAG ? 0x80:0);190 AF.B.B0=ZeroTable[BC.B.B1];191 }192 break;193 case 0x19:194 // RR C195 if(BC.B.B0&0x01) {196 BC.B.B0=(BC.B.B0>>1)|(AF.B.B0 & C_FLAG ? 0x80:0);197 AF.B.B0=ZeroTable[BC.B.B0]|C_FLAG;198 } else {199 BC.B.B0=(BC.B.B0>>1)|(AF.B.B0 & C_FLAG ? 0x80:0);200 AF.B.B0=ZeroTable[BC.B.B0];201 }202 break;203 case 0x1a:204 // RR D205 if(DE.B.B1&0x01) {206 DE.B.B1=(DE.B.B1>>1)|(AF.B.B0 & C_FLAG ? 0x80:0);207 AF.B.B0=ZeroTable[DE.B.B1]|C_FLAG;208 } else {209 DE.B.B1=(DE.B.B1>>1)|(AF.B.B0 & C_FLAG ? 0x80:0);210 AF.B.B0=ZeroTable[DE.B.B1];211 }212 break;213 case 0x1b:214 // RR E215 if(DE.B.B0&0x01) {216 DE.B.B0=(DE.B.B0>>1)|(AF.B.B0 & C_FLAG ? 0x80:0);217 AF.B.B0=ZeroTable[DE.B.B0]|C_FLAG;218 } else {219 DE.B.B0=(DE.B.B0>>1)|(AF.B.B0 & C_FLAG ? 0x80:0);220 AF.B.B0=ZeroTable[DE.B.B0];221 }222 break;223 case 0x1c:224 // RR H225 if(HL.B.B1&0x01) {226 HL.B.B1=(HL.B.B1>>1)|(AF.B.B0 & C_FLAG ? 0x80:0);227 AF.B.B0=ZeroTable[HL.B.B1]|C_FLAG;228 } else {229 HL.B.B1=(HL.B.B1>>1)|(AF.B.B0 & C_FLAG ? 0x80:0);230 AF.B.B0=ZeroTable[HL.B.B1];231 }232 break;233 case 0x1d:234 // RR L235 if(HL.B.B0&0x01) {236 HL.B.B0=(HL.B.B0>>1)|(AF.B.B0 & C_FLAG ? 0x80:0);237 AF.B.B0=ZeroTable[HL.B.B0]|C_FLAG;238 } else {239 HL.B.B0=(HL.B.B0>>1)|(AF.B.B0 & C_FLAG ? 0x80:0);240 AF.B.B0=ZeroTable[HL.B.B0];241 }242 break;243 case 0x1e:244 // RR (HL)245 tempValue=gbReadMemory(HL.W);246 if(tempValue&0x01) {247 tempValue=(tempValue>>1)|(AF.B.B0 & C_FLAG ? 0x80:0);248 AF.B.B0=ZeroTable[tempValue]|C_FLAG;249 } else {250 tempValue=(tempValue>>1)|(AF.B.B0 & C_FLAG ? 0x80:0);251 AF.B.B0=ZeroTable[tempValue];252 }253 gbWriteMemory(HL.W,tempValue);254 break;255 case 0x1f:256 // RR A257 if(AF.B.B1&0x01) {258 AF.B.B1=(AF.B.B1>>1)|(AF.B.B0 & C_FLAG ? 0x80:0);259 AF.B.B0=ZeroTable[AF.B.B1]|C_FLAG;260 } else {261 AF.B.B1=(AF.B.B1>>1)|(AF.B.B0 & C_FLAG ? 0x80:0);262 AF.B.B0=ZeroTable[AF.B.B1];263 }264 break;265 case 0x20:266 // SLA B267 AF.B.B0=(BC.B.B1&0x80?C_FLAG : 0);268 BC.B.B1<<=1;269 AF.B.B0|=ZeroTable[BC.B.B1];270 break;271 case 0x21:272 // SLA C273 AF.B.B0=(BC.B.B0&0x80?C_FLAG : 0);274 BC.B.B0<<=1;275 AF.B.B0|=ZeroTable[BC.B.B0];276 break;277 case 0x22:278 // SLA D279 AF.B.B0=(DE.B.B1&0x80?C_FLAG : 0);280 DE.B.B1<<=1;281 AF.B.B0|=ZeroTable[DE.B.B1];282 break;283 case 0x23:284 // SLA E285 AF.B.B0=(DE.B.B0&0x80?C_FLAG : 0);286 DE.B.B0<<=1;287 AF.B.B0|=ZeroTable[DE.B.B0];288 break;289 case 0x24:290 // SLA H291 AF.B.B0=(HL.B.B1&0x80?C_FLAG : 0);292 HL.B.B1<<=1;293 AF.B.B0|=ZeroTable[HL.B.B1];294 break;295 case 0x25:296 // SLA L297 AF.B.B0=(HL.B.B0&0x80?C_FLAG : 0);298 HL.B.B0<<=1;299 AF.B.B0|=ZeroTable[HL.B.B0];300 break;301 case 0x26:302 // SLA (HL)303 tempValue=gbReadMemory(HL.W);304 AF.B.B0=(tempValue&0x80?C_FLAG : 0);305 tempValue<<=1;306 AF.B.B0|=ZeroTable[tempValue];307 gbWriteMemory(HL.W,tempValue);308 break;309 case 0x27:310 // SLA A311 AF.B.B0=(AF.B.B1&0x80?C_FLAG : 0);312 AF.B.B1<<=1;313 AF.B.B0|=ZeroTable[AF.B.B1];314 break;315 case 0x28:316 // SRA B317 AF.B.B0=(BC.B.B1&0x01 ? C_FLAG: 0);318 BC.B.B1=(BC.B.B1>>1)|(BC.B.B1&0x80);319 AF.B.B0|=ZeroTable[BC.B.B1];320 break;321 case 0x29:322 // SRA C323 AF.B.B0=(BC.B.B0&0x01 ? C_FLAG: 0);324 BC.B.B0=(BC.B.B0>>1)|(BC.B.B0&0x80);325 AF.B.B0|=ZeroTable[BC.B.B0];326 break;327 case 0x2a:328 // SRA D329 AF.B.B0=(DE.B.B1&0x01 ? C_FLAG: 0);330 DE.B.B1=(DE.B.B1>>1)|(DE.B.B1&0x80);331 AF.B.B0|=ZeroTable[DE.B.B1];332 break;333 case 0x2b:334 // SRA E335 AF.B.B0=(DE.B.B0&0x01 ? C_FLAG: 0);336 DE.B.B0=(DE.B.B0>>1)|(DE.B.B0&0x80);337 AF.B.B0|=ZeroTable[DE.B.B0];338 break;339 case 0x2c:340 // SRA H341 AF.B.B0=(HL.B.B1&0x01 ? C_FLAG: 0);342 HL.B.B1=(HL.B.B1>>1)|(HL.B.B1&0x80);343 AF.B.B0|=ZeroTable[HL.B.B1];344 break;345 case 0x2d:346 // SRA L347 AF.B.B0=(HL.B.B0&0x01 ? C_FLAG: 0);348 HL.B.B0=(HL.B.B0>>1)|(HL.B.B0&0x80);349 AF.B.B0|=ZeroTable[HL.B.B0];350 break;351 case 0x2e:352 // SRA (HL)353 tempValue=gbReadMemory(HL.W);354 AF.B.B0=(tempValue&0x01 ? C_FLAG: 0);355 tempValue=(tempValue>>1)|(tempValue&0x80);356 AF.B.B0|=ZeroTable[tempValue];357 gbWriteMemory(HL.W,tempValue);358 break;359 case 0x2f:360 // SRA A361 AF.B.B0=(AF.B.B1&0x01 ? C_FLAG: 0);362 AF.B.B1=(AF.B.B1>>1)|(AF.B.B1&0x80);363 AF.B.B0|=ZeroTable[AF.B.B1];364 break;365 case 0x30:366 // SWAP B367 BC.B.B1 = (BC.B.B1&0xf0)>>4 | (BC.B.B1&0x0f)<<4;368 AF.B.B0 = ZeroTable[BC.B.B1];369 break;370 case 0x31:371 // SWAP C372 BC.B.B0 = (BC.B.B0&0xf0)>>4 | (BC.B.B0&0x0f)<<4;373 AF.B.B0 = ZeroTable[BC.B.B0];374 break;375 case 0x32:376 // SWAP D377 DE.B.B1 = (DE.B.B1&0xf0)>>4 | (DE.B.B1&0x0f)<<4;378 AF.B.B0 = ZeroTable[DE.B.B1];379 break;380 case 0x33:381 // SWAP E382 DE.B.B0 = (DE.B.B0&0xf0)>>4 | (DE.B.B0&0x0f)<<4;383 AF.B.B0 = ZeroTable[DE.B.B0];384 break;385 case 0x34:386 // SWAP H387 HL.B.B1 = (HL.B.B1&0xf0)>>4 | (HL.B.B1&0x0f)<<4;388 AF.B.B0 = ZeroTable[HL.B.B1];389 break;390 case 0x35:391 // SWAP L392 HL.B.B0 = (HL.B.B0&0xf0)>>4 | (HL.B.B0&0x0f)<<4;393 AF.B.B0 = ZeroTable[HL.B.B0];394 break;395 case 0x36:396 // SWAP (HL)397 tempValue=gbReadMemory(HL.W);398 tempValue = (tempValue&0xf0)>>4 | (tempValue&0x0f)<<4;399 AF.B.B0 = ZeroTable[tempValue];400 gbWriteMemory(HL.W,tempValue);401 break;402 case 0x37:403 // SWAP A404 AF.B.B1 = (AF.B.B1&0xf0)>>4 | (AF.B.B1&0x0f)<<4;405 AF.B.B0 = ZeroTable[AF.B.B1];406 break;407 case 0x38:408 // SRL B409 AF.B.B0=(BC.B.B1&0x01)?C_FLAG:0;410 BC.B.B1>>=1;411 AF.B.B0|=ZeroTable[BC.B.B1];412 break;413 case 0x39:414 // SRL C415 AF.B.B0=(BC.B.B0&0x01)?C_FLAG:0;416 BC.B.B0>>=1;417 AF.B.B0|=ZeroTable[BC.B.B0];418 break;419 case 0x3a:420 // SRL D421 AF.B.B0=(DE.B.B1&0x01)?C_FLAG:0;422 DE.B.B1>>=1;423 AF.B.B0|=ZeroTable[DE.B.B1];424 break;425 case 0x3b:426 // SRL E427 AF.B.B0=(DE.B.B0&0x01)?C_FLAG:0;428 DE.B.B0>>=1;429 AF.B.B0|=ZeroTable[DE.B.B0];430 break;431 case 0x3c:432 // SRL H433 AF.B.B0=(HL.B.B1&0x01)?C_FLAG:0;434 HL.B.B1>>=1;435 AF.B.B0|=ZeroTable[HL.B.B1];436 break;437 case 0x3d:438 // SRL L439 AF.B.B0=(HL.B.B0&0x01)?C_FLAG:0;440 HL.B.B0>>=1;441 AF.B.B0|=ZeroTable[HL.B.B0];442 break;443 case 0x3e:444 // SRL (HL)445 tempValue=gbReadMemory(HL.W);446 AF.B.B0=(tempValue&0x01)?C_FLAG:0;447 tempValue>>=1;448 AF.B.B0|=ZeroTable[tempValue];449 gbWriteMemory(HL.W,tempValue);450 break;451 case 0x3f:452 // SRL A453 AF.B.B0=(AF.B.B1&0x01)?C_FLAG:0;454 AF.B.B1>>=1;455 AF.B.B0|=ZeroTable[AF.B.B1];456 break;457 case 0x40:458 // BIT 0,B459 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(BC.B.B1&(1<<0)? 0:Z_FLAG);460 break;461 case 0x41:462 // BIT 0,C463 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(BC.B.B0&(1<<0)? 0:Z_FLAG);464 break;465 case 0x42:466 // BIT 0,D467 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(DE.B.B1&(1<<0)? 0:Z_FLAG);468 break;469 case 0x43:470 // BIT 0,E471 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(DE.B.B0&(1<<0)? 0:Z_FLAG);472 break;473 case 0x44:474 // BIT 0,H475 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(HL.B.B1&(1<<0)? 0:Z_FLAG);476 break;477 case 0x45:478 // BIT 0,L479 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(HL.B.B0&(1<<0)? 0:Z_FLAG);480 break;481 case 0x46:482 // BIT 0,(HL)483 tempValue=gbReadMemory(HL.W);484 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(tempValue&(1<<0)? 0:Z_FLAG);485 break;486 case 0x47:487 // BIT 0,A488 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(AF.B.B1&(1<<0)? 0:Z_FLAG);489 break;490 case 0x48:491 // BIT 1,B492 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(BC.B.B1&(1<<1)? 0:Z_FLAG);493 break;494 case 0x49:495 // BIT 1,C496 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(BC.B.B0&(1<<1)? 0:Z_FLAG);497 break;498 case 0x4a:499 // BIT 1,D500 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(DE.B.B1&(1<<1)? 0:Z_FLAG);501 break;502 case 0x4b:503 // BIT 1,E504 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(DE.B.B0&(1<<1)? 0:Z_FLAG);505 break;506 case 0x4c:507 // BIT 1,H508 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(HL.B.B1&(1<<1)? 0:Z_FLAG);509 break;510 case 0x4d:511 // BIT 1,L512 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(HL.B.B0&(1<<1)? 0:Z_FLAG);513 break;514 case 0x4e:515 // BIT 1,(HL)516 tempValue=gbReadMemory(HL.W);517 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(tempValue&(1<<1)? 0:Z_FLAG);518 break;519 case 0x4f:520 // BIT 1,A521 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(AF.B.B1&(1<<1)? 0:Z_FLAG);522 break;523 case 0x50:524 // BIT 2,B525 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(BC.B.B1&(1<<2)? 0:Z_FLAG);526 break;527 case 0x51:528 // BIT 2,C529 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(BC.B.B0&(1<<2)? 0:Z_FLAG);530 break;531 case 0x52:532 // BIT 2,D533 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(DE.B.B1&(1<<2)? 0:Z_FLAG);534 break;535 case 0x53:536 // BIT 2,E537 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(DE.B.B0&(1<<2)? 0:Z_FLAG);538 break;539 case 0x54:540 // BIT 2,H541 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(HL.B.B1&(1<<2)? 0:Z_FLAG);542 break;543 case 0x55:544 // BIT 2,L545 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(HL.B.B0&(1<<2)? 0:Z_FLAG);546 break;547 case 0x56:548 // BIT 2,(HL)549 tempValue=gbReadMemory(HL.W);550 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(tempValue&(1<<2)? 0:Z_FLAG);551 break;552 case 0x57:553 // BIT 2,A554 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(AF.B.B1&(1<<2)? 0:Z_FLAG);555 break;556 case 0x58:557 // BIT 3,B558 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(BC.B.B1&(1<<3)? 0:Z_FLAG);559 break;560 case 0x59:561 // BIT 3,C562 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(BC.B.B0&(1<<3)? 0:Z_FLAG);563 break;564 case 0x5a:565 // BIT 3,D566 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(DE.B.B1&(1<<3)? 0:Z_FLAG);567 break;568 case 0x5b:569 // BIT 3,E570 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(DE.B.B0&(1<<3)? 0:Z_FLAG);571 break;572 case 0x5c:573 // BIT 3,H574 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(HL.B.B1&(1<<3)? 0:Z_FLAG);575 break;576 case 0x5d:577 // BIT 3,L578 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(HL.B.B0&(1<<3)? 0:Z_FLAG);579 break;580 case 0x5e:581 // BIT 3,(HL)582 tempValue=gbReadMemory(HL.W);583 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(tempValue&(1<<3)? 0:Z_FLAG);584 break;585 case 0x5f:586 // BIT 3,A587 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(AF.B.B1&(1<<3)? 0:Z_FLAG);588 break;589 case 0x60:590 // BIT 4,B591 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(BC.B.B1&(1<<4)? 0:Z_FLAG);592 break;593 case 0x61:594 // BIT 4,C595 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(BC.B.B0&(1<<4)? 0:Z_FLAG);596 break;597 case 0x62:598 // BIT 4,D599 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(DE.B.B1&(1<<4)? 0:Z_FLAG);600 break;601 case 0x63:602 // BIT 4,E603 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(DE.B.B0&(1<<4)? 0:Z_FLAG);604 break;605 case 0x64:606 // BIT 4,H607 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(HL.B.B1&(1<<4)? 0:Z_FLAG);608 break;609 case 0x65:610 // BIT 4,L611 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(HL.B.B0&(1<<4)? 0:Z_FLAG);612 break;613 case 0x66:614 // BIT 4,(HL)615 tempValue=gbReadMemory(HL.W);616 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(tempValue&(1<<4)? 0:Z_FLAG);617 break;618 case 0x67:619 // BIT 4,A620 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(AF.B.B1&(1<<4)? 0:Z_FLAG);621 break;622 case 0x68:623 // BIT 5,B624 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(BC.B.B1&(1<<5)? 0:Z_FLAG);625 break;626 case 0x69:627 // BIT 5,C628 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(BC.B.B0&(1<<5)? 0:Z_FLAG);629 break;630 case 0x6a:631 // BIT 5,D632 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(DE.B.B1&(1<<5)? 0:Z_FLAG);633 break;634 case 0x6b:635 // BIT 5,E636 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(DE.B.B0&(1<<5)? 0:Z_FLAG);637 break;638 case 0x6c:639 // BIT 5,H640 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(HL.B.B1&(1<<5)? 0:Z_FLAG);641 break;642 case 0x6d:643 // BIT 5,L644 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(HL.B.B0&(1<<5)? 0:Z_FLAG);645 break;646 case 0x6e:647 // BIT 5,(HL)648 tempValue=gbReadMemory(HL.W);649 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(tempValue&(1<<5)? 0:Z_FLAG);650 break;651 case 0x6f:652 // BIT 5,A653 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(AF.B.B1&(1<<5)? 0:Z_FLAG);654 break;655 case 0x70:656 // BIT 6,B657 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(BC.B.B1&(1<<6)? 0:Z_FLAG);658 break;659 case 0x71:660 // BIT 6,C661 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(BC.B.B0&(1<<6)? 0:Z_FLAG);662 break;663 case 0x72:664 // BIT 6,D665 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(DE.B.B1&(1<<6)? 0:Z_FLAG);666 break;667 case 0x73:668 // BIT 6,E669 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(DE.B.B0&(1<<6)? 0:Z_FLAG);670 break;671 case 0x74:672 // BIT 6,H673 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(HL.B.B1&(1<<6)? 0:Z_FLAG);674 break;675 case 0x75:676 // BIT 6,L677 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(HL.B.B0&(1<<6)? 0:Z_FLAG);678 break;679 case 0x76:680 // BIT 6,(HL)681 tempValue=gbReadMemory(HL.W);682 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(tempValue&(1<<6)? 0:Z_FLAG);683 break;684 case 0x77:685 // BIT 6,A686 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(AF.B.B1&(1<<6)? 0:Z_FLAG);687 break;688 case 0x78:689 // BIT 7,B690 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(BC.B.B1&(1<<7)? 0:Z_FLAG);691 break;692 case 0x79:693 // BIT 7,C694 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(BC.B.B0&(1<<7)? 0:Z_FLAG);695 break;696 case 0x7a:697 // BIT 7,D698 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(DE.B.B1&(1<<7)? 0:Z_FLAG);699 break;700 case 0x7b:701 // BIT 7,E702 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(DE.B.B0&(1<<7)? 0:Z_FLAG);703 break;704 case 0x7c:705 // BIT 7,H706 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(HL.B.B1&(1<<7)? 0:Z_FLAG);707 break;708 case 0x7d:709 // BIT 7,L710 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(HL.B.B0&(1<<7)? 0:Z_FLAG);711 break;712 case 0x7e:713 // BIT 7,(HL)714 tempValue=gbReadMemory(HL.W);715 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(tempValue&(1<<7)? 0:Z_FLAG);716 break;717 case 0x7f:718 // BIT 7,A719 AF.B.B0=(AF.B.B0&C_FLAG)|H_FLAG|(AF.B.B1&(1<<7)? 0:Z_FLAG);720 break;721 case 0x80:722 // RES 0,B723 BC.B.B1&=~(1<<0);724 break;725 case 0x81:726 // RES 0,C727 BC.B.B0&=~(1<<0);728 break;729 case 0x82:730 // RES 0,D731 DE.B.B1&=~(1<<0);732 break;733 case 0x83:734 // RES 0,E735 DE.B.B0&=~(1<<0);736 break;737 case 0x84:738 // RES 0,H739 HL.B.B1&=~(1<<0);740 break;741 case 0x85:742 // RES 0,L743 HL.B.B0&=~(1<<0);744 break;745 case 0x86:746 // RES 0,(HL)747 tempValue=gbReadMemory(HL.W);748 tempValue&=~(1<<0);749 gbWriteMemory(HL.W,tempValue);750 break;751 case 0x87:752 // RES 0,A753 AF.B.B1&=~(1<<0);754 break;755 case 0x88:756 // RES 1,B757 BC.B.B1&=~(1<<1);758 break;759 case 0x89:760 // RES 1,C761 BC.B.B0&=~(1<<1);762 break;763 case 0x8a:764 // RES 1,D765 DE.B.B1&=~(1<<1);766 break;767 case 0x8b:768 // RES 1,E769 DE.B.B0&=~(1<<1);770 break;771 case 0x8c:772 // RES 1,H773 HL.B.B1&=~(1<<1);774 break;775 case 0x8d:776 // RES 1,L777 HL.B.B0&=~(1<<1);778 break;779 case 0x8e:780 // RES 1,(HL)781 tempValue=gbReadMemory(HL.W);782 tempValue&=~(1<<1);783 gbWriteMemory(HL.W,tempValue);784 break;785 case 0x8f:786 // RES 1,A787 AF.B.B1&=~(1<<1);788 break;789 case 0x90:790 // RES 2,B791 BC.B.B1&=~(1<<2);792 break;793 case 0x91:794 // RES 2,C795 BC.B.B0&=~(1<<2);796 break;797 case 0x92:798 // RES 2,D799 DE.B.B1&=~(1<<2);800 break;801 case 0x93:802 // RES 2,E803 DE.B.B0&=~(1<<2);804 break;805 case 0x94:806 // RES 2,H807 HL.B.B1&=~(1<<2);808 break;809 case 0x95:810 // RES 2,L811 HL.B.B0&=~(1<<2);812 break;813 case 0x96:814 // RES 2,(HL)815 tempValue=gbReadMemory(HL.W);816 tempValue&=~(1<<2);817 gbWriteMemory(HL.W,tempValue);818 break;819 case 0x97:820 // RES 2,A821 AF.B.B1&=~(1<<2);822 break;823 case 0x98:824 // RES 3,B825 BC.B.B1&=~(1<<3);826 break;827 case 0x99:828 // RES 3,C829 BC.B.B0&=~(1<<3);830 break;831 case 0x9a:832 // RES 3,D833 DE.B.B1&=~(1<<3);834 break;835 case 0x9b:836 // RES 3,E837 DE.B.B0&=~(1<<3);838 break;839 case 0x9c:840 // RES 3,H841 HL.B.B1&=~(1<<3);842 break;843 case 0x9d:844 // RES 3,L845 HL.B.B0&=~(1<<3);846 break;847 case 0x9e:848 // RES 3,(HL)849 tempValue=gbReadMemory(HL.W);850 tempValue&=~(1<<3);851 gbWriteMemory(HL.W,tempValue);852 break;853 case 0x9f:854 // RES 3,A855 AF.B.B1&=~(1<<3);856 break;857 case 0xa0:858 // RES 4,B859 BC.B.B1&=~(1<<4);860 break;861 case 0xa1:862 // RES 4,C863 BC.B.B0&=~(1<<4);864 break;865 case 0xa2:866 // RES 4,D867 DE.B.B1&=~(1<<4);868 break;869 case 0xa3:870 // RES 4,E871 DE.B.B0&=~(1<<4);872 break;873 case 0xa4:874 // RES 4,H875 HL.B.B1&=~(1<<4);876 break;877 case 0xa5:878 // RES 4,L879 HL.B.B0&=~(1<<4);880 break;881 case 0xa6:882 // RES 4,(HL)883 tempValue=gbReadMemory(HL.W);884 tempValue&=~(1<<4);885 gbWriteMemory(HL.W,tempValue);886 break;887 case 0xa7:888 // RES 4,A889 AF.B.B1&=~(1<<4);890 break;891 case 0xa8:892 // RES 5,B893 BC.B.B1&=~(1<<5);894 break;895 case 0xa9:896 // RES 5,C897 BC.B.B0&=~(1<<5);898 break;899 case 0xaa:900 // RES 5,D901 DE.B.B1&=~(1<<5);902 break;903 case 0xab:904 // RES 5,E905 DE.B.B0&=~(1<<5);906 break;907 case 0xac:908 // RES 5,H909 HL.B.B1&=~(1<<5);910 break;911 case 0xad:912 // RES 5,L913 HL.B.B0&=~(1<<5);914 break;915 case 0xae:916 // RES 5,(HL)917 tempValue=gbReadMemory(HL.W);918 tempValue&=~(1<<5);919 gbWriteMemory(HL.W,tempValue);920 break;921 case 0xaf:922 // RES 5,A923 AF.B.B1&=~(1<<5);924 break;925 case 0xb0:926 // RES 6,B927 BC.B.B1&=~(1<<6);928 break;929 case 0xb1:930 // RES 6,C931 BC.B.B0&=~(1<<6);932 break;933 case 0xb2:934 // RES 6,D935 DE.B.B1&=~(1<<6);936 break;937 case 0xb3:938 // RES 6,E939 DE.B.B0&=~(1<<6);940 break;941 case 0xb4:942 // RES 6,H943 HL.B.B1&=~(1<<6);944 break;945 case 0xb5:946 // RES 6,L947 HL.B.B0&=~(1<<6);948 break;949 case 0xb6:950 // RES 6,(HL)951 tempValue=gbReadMemory(HL.W);952 tempValue&=~(1<<6);953 gbWriteMemory(HL.W,tempValue);954 break;955 case 0xb7:956 // RES 6,A957 AF.B.B1&=~(1<<6);958 break;959 case 0xb8:960 // RES 7,B961 BC.B.B1&=~(1<<7);962 break;963 case 0xb9:964 // RES 7,C965 BC.B.B0&=~(1<<7);966 break;967 case 0xba:968 // RES 7,D969 DE.B.B1&=~(1<<7);970 break;971 case 0xbb:972 // RES 7,E973 DE.B.B0&=~(1<<7);974 break;975 case 0xbc:976 // RES 7,H977 HL.B.B1&=~(1<<7);978 break;979 case 0xbd:980 // RES 7,L981 HL.B.B0&=~(1<<7);982 break;983 case 0xbe:984 // RES 7,(HL)985 tempValue=gbReadMemory(HL.W);986 tempValue&=~(1<<7);987 gbWriteMemory(HL.W,tempValue);988 break;989 case 0xbf:990 // RES 7,A991 AF.B.B1&=~(1<<7);992 break;993 case 0xc0:994 // SET 0,B995 BC.B.B1|=1<<0;996 break;997 case 0xc1:998 // SET 0,C999 BC.B.B0|=1<<0;1000 break;1001 case 0xc2:1002 // SET 0,D1003 DE.B.B1|=1<<0;1004 break;1005 case 0xc3:1006 // SET 0,E1007 DE.B.B0|=1<<0;1008 break;1009 case 0xc4:1010 // SET 0,H1011 HL.B.B1|=1<<0;1012 break;1013 case 0xc5:1014 // SET 0,L1015 HL.B.B0|=1<<0;1016 break;1017 case 0xc6:1018 // SET 0,(HL)1019 tempValue=gbReadMemory(HL.W);1020 tempValue|=1<<0;1021 gbWriteMemory(HL.W,tempValue);1022 break;1023 case 0xc7:1024 // SET 0,A1025 AF.B.B1|=1<<0;1026 break;1027 case 0xc8:1028 // SET 1,B1029 BC.B.B1|=1<<1;1030 break;1031 case 0xc9:1032 // SET 1,C1033 BC.B.B0|=1<<1;1034 break;1035 case 0xca:1036 // SET 1,D1037 DE.B.B1|=1<<1;1038 break;1039 case 0xcb:1040 // SET 1,E1041 DE.B.B0|=1<<1;1042 break;1043 case 0xcc:1044 // SET 1,H1045 HL.B.B1|=1<<1;1046 break;1047 case 0xcd:1048 // SET 1,L1049 HL.B.B0|=1<<1;1050 break;1051 case 0xce:1052 // SET 1,(HL)1053 tempValue=gbReadMemory(HL.W);1054 tempValue|=1<<1;1055 gbWriteMemory(HL.W,tempValue);1056 break;1057 case 0xcf:1058 // SET 1,A1059 AF.B.B1|=1<<1;1060 break;1061 case 0xd0:1062 // SET 2,B1063 BC.B.B1|=1<<2;1064 break;1065 case 0xd1:1066 // SET 2,C1067 BC.B.B0|=1<<2;1068 break;1069 case 0xd2:1070 // SET 2,D1071 DE.B.B1|=1<<2;1072 break;1073 case 0xd3:1074 // SET 2,E1075 DE.B.B0|=1<<2;1076 break;1077 case 0xd4:1078 // SET 2,H1079 HL.B.B1|=1<<2;1080 break;1081 case 0xd5:1082 // SET 2,L1083 HL.B.B0|=1<<2;1084 break;1085 case 0xd6:1086 // SET 2,(HL)1087 tempValue=gbReadMemory(HL.W);1088 tempValue|=1<<2;1089 gbWriteMemory(HL.W,tempValue);1090 break;1091 case 0xd7:1092 // SET 2,A1093 AF.B.B1|=1<<2;1094 break;1095 case 0xd8:1096 // SET 3,B1097 BC.B.B1|=1<<3;1098 break;1099 case 0xd9:1100 // SET 3,C1101 BC.B.B0|=1<<3;1102 break;1103 case 0xda:1104 // SET 3,D1105 DE.B.B1|=1<<3;1106 break;1107 case 0xdb:1108 // SET 3,E1109 DE.B.B0|=1<<3;1110 break;1111 case 0xdc:1112 // SET 3,H1113 HL.B.B1|=1<<3;1114 break;1115 case 0xdd:1116 // SET 3,L1117 HL.B.B0|=1<<3;1118 break;1119 case 0xde:1120 // SET 3,(HL)1121 tempValue=gbReadMemory(HL.W);1122 tempValue|=1<<3;1123 gbWriteMemory(HL.W,tempValue);1124 break;1125 case 0xdf:1126 // SET 3,A1127 AF.B.B1|=1<<3;1128 break;1129 case 0xe0:1130 // SET 4,B1131 BC.B.B1|=1<<4;1132 break;1133 case 0xe1:1134 // SET 4,C1135 BC.B.B0|=1<<4;1136 break;1137 case 0xe2:1138 // SET 4,D1139 DE.B.B1|=1<<4;1140 break;1141 case 0xe3:1142 // SET 4,E1143 DE.B.B0|=1<<4;1144 break;1145 case 0xe4:1146 // SET 4,H1147 HL.B.B1|=1<<4;1148 break;1149 case 0xe5:1150 // SET 4,L1151 HL.B.B0|=1<<4;1152 break;1153 case 0xe6:1154 // SET 4,(HL)1155 tempValue=gbReadMemory(HL.W);1156 tempValue|=1<<4;1157 gbWriteMemory(HL.W,tempValue);1158 break;1159 case 0xe7:1160 // SET 4,A1161 AF.B.B1|=1<<4;1162 break;1163 case 0xe8:1164 // SET 5,B1165 BC.B.B1|=1<<5;1166 break;1167 case 0xe9:1168 // SET 5,C1169 BC.B.B0|=1<<5;1170 break;1171 case 0xea:1172 // SET 5,D1173 DE.B.B1|=1<<5;1174 break;1175 case 0xeb:1176 // SET 5,E1177 DE.B.B0|=1<<5;1178 break;1179 case 0xec:1180 // SET 5,H1181 HL.B.B1|=1<<5;1182 break;1183 case 0xed:1184 // SET 5,L1185 HL.B.B0|=1<<5;1186 break;1187 case 0xee:1188 // SET 5,(HL)1189 tempValue=gbReadMemory(HL.W);1190 tempValue|=1<<5;1191 gbWriteMemory(HL.W,tempValue);1192 break;1193 case 0xef:1194 // SET 5,A1195 AF.B.B1|=1<<5;1196 break;1197 case 0xf0:1198 // SET 6,B1199 BC.B.B1|=1<<6;1200 break;1201 case 0xf1:1202 // SET 6,C1203 BC.B.B0|=1<<6;1204 break;1205 case 0xf2:1206 // SET 6,D1207 DE.B.B1|=1<<6;1208 break;1209 case 0xf3:1210 // SET 6,E1211 DE.B.B0|=1<<6;1212 break;1213 case 0xf4:1214 // SET 6,H1215 HL.B.B1|=1<<6;1216 break;1217 case 0xf5:1218 // SET 6,L1219 HL.B.B0|=1<<6;1220 break;1221 case 0xf6:1222 // SET 6,(HL)1223 tempValue=gbReadMemory(HL.W);1224 tempValue|=1<<6;1225 gbWriteMemory(HL.W,tempValue);1226 break;1227 case 0xf7:1228 // SET 6,A1229 AF.B.B1|=1<<6;1230 break;1231 case 0xf8:1232 // SET 7,B1233 BC.B.B1|=1<<7;1234 break;1235 case 0xf9:1236 // SET 7,C1237 BC.B.B0|=1<<7;1238 break;1239 case 0xfa:1240 // SET 7,D1241 DE.B.B1|=1<<7;1242 break;1243 case 0xfb:1244 // SET 7,E1245 DE.B.B0|=1<<7;1246 break;1247 case 0xfc:1248 // SET 7,H1249 HL.B.B1|=1<<7;1250 break;1251 case 0xfd:1252 // SET 7,L1253 HL.B.B0|=1<<7;1254 break;1255 case 0xfe:1256 // SET 7,(HL)1257 tempValue=gbReadMemory(HL.W);1258 tempValue|=1<<7;1259 gbWriteMemory(HL.W,tempValue);1260 break;1261 case 0xff:1262 // SET 7,A1263 AF.B.B1|=1<<7;1264 break;1265 default:1266 systemMessage(0, N_("Unknown opcode %02x at %04x"),1267 gbReadOpcode(PC.W-1),PC.W-1);1268 emulating = false;1269 return;