trunk/src/emu/cpu/upd7810/upd7810.c
| r241598 | r241599 | |
| 1315 | 1315 | ECNT = 0; |
| 1316 | 1316 | break; |
| 1317 | 1317 | } |
| 1318 | | switch (ETMM & 0x30) |
| 1318 | /* Conditions When ECNT Causes a CO0 Output Change */ |
| 1319 | if (((0x00 == (ETMM & 0x30)) && (ETM0 == ECNT)) || /* set CO0 if ECNT == ETM0 */ |
| 1320 | /* ((0x10 == (ETMM & 0x30)) prohibited */ |
| 1321 | ((0x20 == (ETMM & 0x30)) && (ETM0 == ECNT)) || /* set CO0 if ECNT == ETM0 or at falling CI input */ |
| 1322 | ((0x30 == (ETMM & 0x30)) && (ETM0 == ECNT || ETM1 == ECNT))) /* latch CO0 if ECNT == ETM0 or ECNT == ETM1 */ |
| 1319 | 1323 | { |
| 1320 | | case 0x00: /* set CO0 if ECNT == ETM0 */ |
| 1321 | | if (ETM0 == ECNT) |
| 1324 | switch (EOM & 0x0e) |
| 1322 | 1325 | { |
| 1323 | | switch (EOM & 0x0e) |
| 1324 | | { |
| 1325 | | case 0x02: /* toggle CO0 */ |
| 1326 | | CO0 = (CO0 >> 1) | ((CO0 ^ 2) & 2); |
| 1327 | | break; |
| 1328 | | case 0x04: /* reset CO0 */ |
| 1329 | | CO0 = 0; |
| 1330 | | break; |
| 1331 | | case 0x08: /* set CO0 */ |
| 1332 | | CO0 = 1; |
| 1333 | | break; |
| 1334 | | } |
| 1326 | case 0x02: /* toggle CO0 */ |
| 1327 | CO0 = (CO0 >> 1) | ((CO0 ^ 2) & 2); |
| 1328 | break; |
| 1329 | case 0x04: /* reset CO0 */ |
| 1330 | CO0 = 0; |
| 1331 | break; |
| 1332 | case 0x08: /* set CO0 */ |
| 1333 | CO0 = 1; |
| 1334 | break; |
| 1335 | 1335 | } |
| 1336 | | break; |
| 1337 | | case 0x10: /* prohibited */ |
| 1338 | | break; |
| 1339 | | case 0x20: /* set CO0 if ECNT == ETM0 or at falling CI input */ |
| 1340 | | if (ETM0 == ECNT) |
| 1341 | | { |
| 1342 | | switch (EOM & 0x0e) |
| 1343 | | { |
| 1344 | | case 0x02: /* toggle CO0 */ |
| 1345 | | CO0 = (CO0 >> 1) | ((CO0 ^ 2) & 2); |
| 1346 | | break; |
| 1347 | | case 0x04: /* reset CO0 */ |
| 1348 | | CO0 = 0; |
| 1349 | | break; |
| 1350 | | case 0x08: /* set CO0 */ |
| 1351 | | CO0 = 1; |
| 1352 | | break; |
| 1353 | | } |
| 1354 | | } |
| 1355 | | break; |
| 1356 | | case 0x30: /* latch CO0 if ECNT == ETM0 or ECNT == ETM1 */ |
| 1357 | | if (ETM0 == ECNT || ETM1 == ECNT) |
| 1358 | | { |
| 1359 | | switch (EOM & 0x0e) |
| 1360 | | { |
| 1361 | | case 0x02: /* toggle CO0 */ |
| 1362 | | CO0 = (CO0 >> 1) | ((CO0 ^ 2) & 2); |
| 1363 | | break; |
| 1364 | | case 0x04: /* reset CO0 */ |
| 1365 | | CO0 = 0; |
| 1366 | | break; |
| 1367 | | case 0x08: /* set CO0 */ |
| 1368 | | CO0 = 1; |
| 1369 | | break; |
| 1370 | | } |
| 1371 | | } |
| 1372 | | break; |
| 1373 | 1336 | } |
| 1374 | | switch (ETMM & 0xc0) |
| 1337 | /* Conditions When ECNT Causes a CO1 Output Change */ |
| 1338 | if (((0x00 == (ETMM & 0xc0)) && (ETM0 == ECNT)) || /* set CO1 if ECNT == ETM0 */ |
| 1339 | /* ((0x40 == (ETMM & 0xc0)) prohibited */ |
| 1340 | ((0x80 == (ETMM & 0xc0)) && (ETM0 == ECNT)) || /* set CO1 if ECNT == ETM0 or at falling CI input */ |
| 1341 | ((0xc0 == (ETMM & 0xc0)) && (ETM0 == ECNT || ETM1 == ECNT))) /* latch CO1 if ECNT == ETM0 or ECNT == ETM1 */ |
| 1375 | 1342 | { |
| 1376 | | case 0x00: /* lacth CO1 if ECNT == ETM1 */ |
| 1377 | | if (ETM1 == ECNT) |
| 1343 | switch (EOM & 0xe0) |
| 1378 | 1344 | { |
| 1379 | | switch (EOM & 0xe0) |
| 1380 | | { |
| 1381 | | case 0x20: /* toggle CO1 */ |
| 1382 | | CO1 = (CO1 >> 1) | ((CO1 ^ 2) & 2); |
| 1383 | | break; |
| 1384 | | case 0x40: /* reset CO1 */ |
| 1385 | | CO1 = 0; |
| 1386 | | break; |
| 1387 | | case 0x80: /* set CO1 */ |
| 1388 | | CO1 = 1; |
| 1389 | | break; |
| 1390 | | } |
| 1345 | case 0x20: /* toggle CO1 */ |
| 1346 | CO1 = (CO1 >> 1) | ((CO1 ^ 2) & 2); |
| 1347 | break; |
| 1348 | case 0x40: /* reset CO1 */ |
| 1349 | CO1 = 0; |
| 1350 | break; |
| 1351 | case 0x80: /* set CO1 */ |
| 1352 | CO1 = 1; |
| 1353 | break; |
| 1391 | 1354 | } |
| 1392 | | break; |
| 1393 | | case 0x40: /* prohibited */ |
| 1394 | | break; |
| 1395 | | case 0x80: /* latch CO1 if ECNT == ETM1 or falling edge of CI input */ |
| 1396 | | if (ETM1 == ECNT) |
| 1397 | | { |
| 1398 | | switch (EOM & 0xe0) |
| 1399 | | { |
| 1400 | | case 0x20: /* toggle CO1 */ |
| 1401 | | CO1 = (CO1 >> 1) | ((CO1 ^ 2) & 2); |
| 1402 | | break; |
| 1403 | | case 0x40: /* reset CO1 */ |
| 1404 | | CO1 = 0; |
| 1405 | | break; |
| 1406 | | case 0x80: /* set CO1 */ |
| 1407 | | CO1 = 1; |
| 1408 | | break; |
| 1409 | | } |
| 1410 | | } |
| 1411 | | break; |
| 1412 | | case 0xc0: /* latch CO1 if ECNT == ETM0 or ECNT == ETM1 */ |
| 1413 | | if (ETM0 == ECNT || ETM1 == ECNT) |
| 1414 | | { |
| 1415 | | switch (EOM & 0xe0) |
| 1416 | | { |
| 1417 | | case 0x20: /* toggle CO1 */ |
| 1418 | | CO1 = (CO1 >> 1) | ((CO1 ^ 2) & 2); |
| 1419 | | break; |
| 1420 | | case 0x40: /* reset CO1 */ |
| 1421 | | CO1 = 0; |
| 1422 | | break; |
| 1423 | | case 0x80: /* set CO1 */ |
| 1424 | | CO1 = 1; |
| 1425 | | break; |
| 1426 | | } |
| 1427 | | } |
| 1428 | | break; |
| 1429 | 1355 | } |
| 1430 | 1356 | } |
| 1431 | 1357 | } |