Revision 5c4532ee hw/openpic.c
b/hw/openpic.c | ||
---|---|---|
141 | 141 |
#error "Please select which OpenPic implementation is to be emulated" |
142 | 142 |
#endif |
143 | 143 |
|
144 |
#define OPENPIC_PAGE_SIZE 4096 |
|
145 |
|
|
144 | 146 |
#define BF_WIDTH(_bits_) \ |
145 | 147 |
(((_bits_) + (sizeof(uint32_t) * 8) - 1) / (sizeof(uint32_t) * 8)) |
146 | 148 |
|
... | ... | |
597 | 599 |
DPRINTF("%s: addr " TARGET_FMT_plx " <= %08x\n", __func__, addr, val); |
598 | 600 |
if (addr & 0xF) |
599 | 601 |
return; |
600 |
#if defined TARGET_WORDS_BIGENDIAN |
|
601 | 602 |
val = openpic_swap32(opp, val); |
602 |
#endif |
|
603 | 603 |
addr &= 0xFF; |
604 | 604 |
switch (addr) { |
605 | 605 |
case 0x00: /* FREP */ |
... | ... | |
693 | 693 |
break; |
694 | 694 |
} |
695 | 695 |
DPRINTF("%s: => %08x\n", __func__, retval); |
696 |
#if defined TARGET_WORDS_BIGENDIAN |
|
697 | 696 |
retval = openpic_swap32(opp, retval); |
698 |
#endif |
|
699 | 697 |
|
700 | 698 |
return retval; |
701 | 699 |
} |
... | ... | |
708 | 706 |
DPRINTF("%s: addr %08x <= %08x\n", __func__, addr, val); |
709 | 707 |
if (addr & 0xF) |
710 | 708 |
return; |
711 |
#if defined TARGET_WORDS_BIGENDIAN |
|
712 | 709 |
val = openpic_swap32(opp, val); |
713 |
#endif |
|
714 | 710 |
addr -= 0x1100; |
715 | 711 |
addr &= 0xFFFF; |
716 | 712 |
idx = (addr & 0xFFF0) >> 6; |
... | ... | |
763 | 759 |
break; |
764 | 760 |
} |
765 | 761 |
DPRINTF("%s: => %08x\n", __func__, retval); |
766 |
#if defined TARGET_WORDS_BIGENDIAN |
|
767 | 762 |
retval = openpic_swap32(opp, retval); |
768 |
#endif |
|
769 | 763 |
|
770 | 764 |
return retval; |
771 | 765 |
} |
... | ... | |
778 | 772 |
DPRINTF("%s: addr %08x <= %08x\n", __func__, addr, val); |
779 | 773 |
if (addr & 0xF) |
780 | 774 |
return; |
781 |
#if defined TARGET_WORDS_BIGENDIAN |
|
782 | 775 |
val = openpic_swap32(opp, val); |
783 |
#endif |
|
784 | 776 |
addr = addr & 0xFFF0; |
785 | 777 |
idx = addr >> 5; |
786 | 778 |
if (addr & 0x10) { |
... | ... | |
812 | 804 |
retval = read_IRQreg(opp, idx, IRQ_IPVP); |
813 | 805 |
} |
814 | 806 |
DPRINTF("%s: => %08x\n", __func__, retval); |
815 |
#if defined TARGET_WORDS_BIGENDIAN |
|
816 | 807 |
retval = openpic_swap32(opp, retval); |
817 |
#endif |
|
818 | 808 |
|
819 | 809 |
return retval; |
820 | 810 |
} |
... | ... | |
829 | 819 |
DPRINTF("%s: addr " TARGET_FMT_plx " <= %08x\n", __func__, addr, val); |
830 | 820 |
if (addr & 0xF) |
831 | 821 |
return; |
832 |
#if defined TARGET_WORDS_BIGENDIAN |
|
833 | 822 |
val = openpic_swap32(opp, val); |
834 |
#endif |
|
835 | 823 |
addr &= 0x1FFF0; |
836 | 824 |
idx = addr / 0x1000; |
837 | 825 |
dst = &opp->dst[idx]; |
... | ... | |
949 | 937 |
break; |
950 | 938 |
} |
951 | 939 |
DPRINTF("%s: => %08x\n", __func__, retval); |
952 |
#if defined TARGET_WORDS_BIGENDIAN |
|
953 | 940 |
retval = openpic_swap32(opp, retval); |
954 |
#endif |
|
955 | 941 |
|
956 | 942 |
return retval; |
957 | 943 |
} |
... | ... | |
1384 | 1370 |
if (addr & 0xF) |
1385 | 1371 |
return; |
1386 | 1372 |
|
1387 |
addr -= MPIC_EXT_REG_START & (TARGET_PAGE_SIZE - 1);
|
|
1373 |
addr -= MPIC_EXT_REG_START & (OPENPIC_PAGE_SIZE - 1);
|
|
1388 | 1374 |
if (addr < MPIC_EXT_REG_SIZE) { |
1389 | 1375 |
idx += (addr & 0xFFF0) >> 5; |
1390 | 1376 |
if (addr & 0x10) { |
... | ... | |
1408 | 1394 |
if (addr & 0xF) |
1409 | 1395 |
return retval; |
1410 | 1396 |
|
1411 |
addr -= MPIC_EXT_REG_START & (TARGET_PAGE_SIZE - 1);
|
|
1397 |
addr -= MPIC_EXT_REG_START & (OPENPIC_PAGE_SIZE - 1);
|
|
1412 | 1398 |
if (addr < MPIC_EXT_REG_SIZE) { |
1413 | 1399 |
idx += (addr & 0xFFF0) >> 5; |
1414 | 1400 |
if (addr & 0x10) { |
... | ... | |
1434 | 1420 |
if (addr & 0xF) |
1435 | 1421 |
return; |
1436 | 1422 |
|
1437 |
addr -= MPIC_INT_REG_START & (TARGET_PAGE_SIZE - 1);
|
|
1423 |
addr -= MPIC_INT_REG_START & (OPENPIC_PAGE_SIZE - 1);
|
|
1438 | 1424 |
if (addr < MPIC_INT_REG_SIZE) { |
1439 | 1425 |
idx += (addr & 0xFFF0) >> 5; |
1440 | 1426 |
if (addr & 0x10) { |
... | ... | |
1458 | 1444 |
if (addr & 0xF) |
1459 | 1445 |
return retval; |
1460 | 1446 |
|
1461 |
addr -= MPIC_INT_REG_START & (TARGET_PAGE_SIZE - 1);
|
|
1447 |
addr -= MPIC_INT_REG_START & (OPENPIC_PAGE_SIZE - 1);
|
|
1462 | 1448 |
if (addr < MPIC_INT_REG_SIZE) { |
1463 | 1449 |
idx += (addr & 0xFFF0) >> 5; |
1464 | 1450 |
if (addr & 0x10) { |
... | ... | |
1484 | 1470 |
if (addr & 0xF) |
1485 | 1471 |
return; |
1486 | 1472 |
|
1487 |
addr -= MPIC_MSG_REG_START & (TARGET_PAGE_SIZE - 1);
|
|
1473 |
addr -= MPIC_MSG_REG_START & (OPENPIC_PAGE_SIZE - 1);
|
|
1488 | 1474 |
if (addr < MPIC_MSG_REG_SIZE) { |
1489 | 1475 |
idx += (addr & 0xFFF0) >> 5; |
1490 | 1476 |
if (addr & 0x10) { |
... | ... | |
1508 | 1494 |
if (addr & 0xF) |
1509 | 1495 |
return retval; |
1510 | 1496 |
|
1511 |
addr -= MPIC_MSG_REG_START & (TARGET_PAGE_SIZE - 1);
|
|
1497 |
addr -= MPIC_MSG_REG_START & (OPENPIC_PAGE_SIZE - 1);
|
|
1512 | 1498 |
if (addr < MPIC_MSG_REG_SIZE) { |
1513 | 1499 |
idx += (addr & 0xFFF0) >> 5; |
1514 | 1500 |
if (addr & 0x10) { |
... | ... | |
1534 | 1520 |
if (addr & 0xF) |
1535 | 1521 |
return; |
1536 | 1522 |
|
1537 |
addr -= MPIC_MSI_REG_START & (TARGET_PAGE_SIZE - 1);
|
|
1523 |
addr -= MPIC_MSI_REG_START & (OPENPIC_PAGE_SIZE - 1);
|
|
1538 | 1524 |
if (addr < MPIC_MSI_REG_SIZE) { |
1539 | 1525 |
idx += (addr & 0xFFF0) >> 5; |
1540 | 1526 |
if (addr & 0x10) { |
... | ... | |
1557 | 1543 |
if (addr & 0xF) |
1558 | 1544 |
return retval; |
1559 | 1545 |
|
1560 |
addr -= MPIC_MSI_REG_START & (TARGET_PAGE_SIZE - 1);
|
|
1546 |
addr -= MPIC_MSI_REG_START & (OPENPIC_PAGE_SIZE - 1);
|
|
1561 | 1547 |
if (addr < MPIC_MSI_REG_SIZE) { |
1562 | 1548 |
idx += (addr & 0xFFF0) >> 5; |
1563 | 1549 |
if (addr & 0x10) { |
Also available in: Unified diff