I think VIA RTC access method has been implemented earlier (Classic Mac, 1984-1989) than the I2C specification, so I'm not sure we can/should port this to an I2C bus.
Specs are (from Apple Macintosh Family Hardware Reference Chapter 2, Classi Macitosh Processor and Control) z0000001 Seconds register 0 (lowest-order byte) z0000101 Seconds register 1 z0001001 Seconds register 2 z0001101 Seconds register 3 (highest-order byte) 00110001 Test register (write-only) 00110101 Write-Protect Register (write-only) z010aa01 RAM address 100aa ($10-$13) (first 20 bytes only) z1aaaa01 RAM address 0aaaa ($00-$0F) (first 20 bytes only) z0111aaa Extended memory designator and sector number (Macintohs 512K enhanced and Macintosh plus only) For a read request, z=1, for a write z=0 The letter a indicates bits whose value depend on what parameter RAM byte you want to address So I think the mask/values should be: diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index f3f130ad96cc..7402cf3f1ee8 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -414,7 +414,7 @@ static void via1_rtc_update(MacVIAState *m) int addr = (m->data_out >> 2) & 0x03; m->data_in = v1s->PRAM[addr]; m->data_in_cnt = 8; - } else if ((m->data_out & 0xf3) == 0xa1) { + } else if ((m->data_out & 0xc3) == 0xc1) { /* PRAM address 0x00 -> 0x0f */ int addr = (m->data_out >> 2) & 0x0f; m->data_in = v1s->PRAM[addr]; @@ -460,11 +460,11 @@ static void via1_rtc_update(MacVIAState *m) } else if (m->cmd == 0x35) { /* Write Protect register */ m->wprotect = m->data_out & 1; - } else if ((m->cmd & 0xf3) == 0xa1) { + } else if ((m->cmd & 0xf3) == 0x21) { /* PRAM address 0x10 -> 0x13 */ int addr = (m->cmd >> 2) & 0x03; v1s->PRAM[addr] = m->data_out; - } else if ((m->cmd & 0xf3) == 0xa1) { + } else if ((m->cmd & 0xc3) == 0x41) { /* PRAM address 0x00 -> 0x0f */ int addr = (m->cmd >> 2) & 0x0f; v1s->PRAM[addr] = m->data_out; -- You received this bug notification because you are a member of qemu- devel-ml, which is subscribed to QEMU. https://bugs.launchpad.net/bugs/1856549 Title: qemu-4.2.0/hw/misc/mac_via.c: 2 * bad test ? Status in QEMU: New Bug description: 1. qemu-4.2.0/hw/misc/mac_via.c:417:27: style: Expression is always false because 'else if' condition matches previous condition at line 412. [multiCondition] } else if ((m->data_out & 0xf3) == 0xa1) { ... } else if ((m->data_out & 0xf3) == 0xa1) { 2. qemu-4.2.0/hw/misc/mac_via.c:467:27: style: Expression is always false because 'else if' condition matches previous condition at line 463. [multiCondition] Duplicate. To manage notifications about this bug go to: https://bugs.launchpad.net/qemu/+bug/1856549/+subscriptions