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