| 75 | } |
| 76 | |
| 77 | static void intrpt_write(uint16_t pio, uint8_t value, bool poke) { |
| 78 | uint16_t index = pio >> 2 & 0x3F; |
| 79 | uint8_t request = pio >> 5 & 1; |
| 80 | uint8_t bit_offset = (pio & 3) << 3; |
| 81 | |
| 82 | switch(index) { |
| 83 | case 0: |
| 84 | case 8: |
| 85 | if (poke) { |
| 86 | write8(intrpt[request].status, bit_offset, value); |
| 87 | } |
| 88 | break; |
| 89 | case 1: |
| 90 | case 9: |
| 91 | write8(intrpt[request].enabled, bit_offset, value); |
| 92 | break; |
| 93 | case 2: |
| 94 | case 10: |
| 95 | intrpt[request].status &= ~(((uint32_t)value << bit_offset) & intrpt[request].latched); |
| 96 | break; |
| 97 | case 3: |
| 98 | case 11: |
| 99 | write8(intrpt[request].latched, bit_offset, value); |
| 100 | break; |
| 101 | case 4: |
| 102 | case 12: |
| 103 | write8(intrpt[request].inverted, bit_offset, value); |
| 104 | break; |
| 105 | case 5: |
| 106 | case 13: |
| 107 | if (poke) { |
| 108 | intrpt[request].enabled |= value << bit_offset; |
| 109 | intrpt[request].status |= value << bit_offset; |
| 110 | } |
| 111 | break; |
| 112 | } |
| 113 | } |
| 114 | |
| 115 | static const eZ80portrange_t device = { |
| 116 | .read = intrpt_read, |
nothing calls this directly
no outgoing calls
no test coverage detected