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 | } |