Mercurial > repos > blastem
comparison m68k.cpu @ 2453:7d7525769ce2
Implement cmp instructions in new 68K core
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 19 Feb 2024 18:14:56 -0800 |
parents | 6c93869babc1 |
children | b1e8e7554f2f |
comparison
equal
deleted
inserted
replaced
2452:8b3daed1c076 | 2453:7d7525769ce2 |
---|---|
1278 dst:Z = 0 | 1278 dst:Z = 0 |
1279 update_flags N0Z1V0C0 | 1279 update_flags N0Z1V0C0 |
1280 m68k_save_dst Z | 1280 m68k_save_dst Z |
1281 m68k_prefetch | 1281 m68k_prefetch |
1282 | 1282 |
1283 00001100ZZMMMRRR cmpi | |
1284 local immed 32 | |
1285 invalid Z 3 | |
1286 invalid M 1 | |
1287 invalid M 7 R 2 | |
1288 invalid M 7 R 3 | |
1289 invalid M 7 R 4 | |
1290 invalid M 7 R 5 | |
1291 invalid M 7 R 6 | |
1292 invalid M 7 R 7 | |
1293 #fetch immediate operand | |
1294 m68k_prefetch | |
1295 switch Z | |
1296 case 2 | |
1297 immed = prefetch << 16 | |
1298 m68k_prefetch | |
1299 immed |= prefetch | |
1300 if M = 0 | |
1301 cycles 2 | |
1302 end | |
1303 default | |
1304 immed = prefetch | |
1305 end | |
1306 #fetch dst EA | |
1307 m68k_fetch_dst_ea M R Z | |
1308 | |
1309 cmp immed dst Z | |
1310 update_flags NZVC | |
1311 m68k_prefetch | |
1312 | |
1313 1011DDD1ZZ001SSS cmpm | |
1314 invalid Z 3 | |
1315 scratch1 = aregs.S | |
1316 switch Z | |
1317 case 0 | |
1318 ocall read_8 | |
1319 case 1 | |
1320 ocall read_16 | |
1321 case 2 | |
1322 m68k_read32 | |
1323 end | |
1324 scratch2 = scratch1 | |
1325 if Z | |
1326 addsize Z aregs.S aregs.S | |
1327 else | |
1328 if S = 7 | |
1329 aregs.S += 2 | |
1330 else | |
1331 aregs.S += 1 | |
1332 end | |
1333 end | |
1334 scratch1 = aregs.D | |
1335 switch Z | |
1336 case 0 | |
1337 ocall read_8 | |
1338 case 1 | |
1339 ocall read_16 | |
1340 case 2 | |
1341 m68k_read32 | |
1342 end | |
1343 if Z | |
1344 addsize Z aregs.D aregs.D | |
1345 else | |
1346 if D = 7 | |
1347 aregs.D += 2 | |
1348 else | |
1349 aregs.D += 1 | |
1350 end | |
1351 end | |
1352 cmp scratch2 scratch1 Z | |
1353 update_flags NZVC | |
1354 m68k_prefetch | |
1355 | |
1356 1011DDD0ZZMMMRRR cmp | |
1357 invalid M 7 R 5 | |
1358 invalid M 7 R 6 | |
1359 invalid M 7 R 7 | |
1360 invalid Z 3 | |
1361 m68k_fetch_src_ea M R Z | |
1362 | |
1363 if Z = 2 | |
1364 cycles 2 | |
1365 end | |
1366 | |
1367 cmp src dregs.D Z | |
1368 update_flags NZVC | |
1369 m68k_prefetch | |
1370 | |
1371 1011DDDZ11MMMRRR cmpa | |
1372 invalid M 7 R 5 | |
1373 invalid M 7 R 6 | |
1374 invalid M 7 R 7 | |
1375 local size 16 | |
1376 local ext_src 32 | |
1377 if Z | |
1378 size = 2 | |
1379 else | |
1380 size = 1 | |
1381 end | |
1382 m68k_fetch_src_ea M R size | |
1383 cycles 2 | |
1384 if size = 1 | |
1385 sext 32 src ext_src | |
1386 meta src ext_src | |
1387 end | |
1388 cmp src aregs.D | |
1389 update_flags NZVC | |
1390 m68k_prefetch | |
1391 | |
1283 0100111001110000 reset | 1392 0100111001110000 reset |
1284 if reset_handler | 1393 if reset_handler |
1285 pcall reset_handler m68k_reset_handler context | 1394 pcall reset_handler m68k_reset_handler context |
1286 end | 1395 end |
1287 cycles 128 | 1396 cycles 128 |