View Single Post
Old 16 January 2015, 09:59   #1
WarpOS Custodian

Join Date: Mar 2012
Location: Leiden / The Netherlands
Posts: 1,708
Sonnet 7200 PCI programming

So I got this Sonnet 7200 PCI card laying around….

First of all, I like to tinker with the software and the hardware side of Amigas. I know the discussion about this topic has tended to be in the direction of people questioning WHY you would want this as it would be slow etc etc. but that’s not the point. For me, it’s part of the hobby and I do it because I CAN do it.

Anyway, the short version of the problem is: There does not seem to be code execution from the PPC on the Sonnet side.

The long version:

1) The card is recognized by de mediator (A3000Di version with the 3.3V rail)
2) The PCI library I used (9.7?) normally goes into an infinite loop on allocation of PCI memory, I fixed that.
3) I set up de EUMB parameters using the PCI configuration registers. The EUMB is an extended configuration block in PCI memory.
4) I tell the card to setup this EUMB using the PCI command register bit 1 (Memory space). This works and a 4096kb block is created in PCI memory.
5) Inside the EUMB I then set up the outbound translation window location and size. I point it to PCI DMA memory, which is memory on the Voodoo in this case.
6) The outbound translation window is needed to execute code in PCI memory (or local memory, but I expect the Sonnet cannot access local Amiga memory due to limitations of the DMA of the mediator) instead of Sonnet memory.
7) With above method I tell the Sonnet card to translate any address from 0xFFF00000 (plus 1MB) to the outbound translation window in PCI memory.
8) I copy a simple PPC code piece to, let’s say, outbound translation window location+$100 (which is, as stated above, inside Voodoo memory).
9) The $100 offset is the CPU reset vector of the PPC. Normally, this is at 0xFFF00100. As the sonnet card has no real memory here, the CPU is halted (already during power up of the card)
10) Then I tell the card to start up the PPC CPU again. This is done by setting bit 2 of the PCI command register (Bus master bit).
11) It now should execute code at 0xFFF00100 which is translated to the PCI memory address where the short PPC code resides, but I don’t see anything happening. The code should manipulate some memory at outbound translation window location +$4C04 (0xFFF04C04 which is translated to PCI memory).

Am I making some wrong assumption here?
A. I assume the card does not have any firmware on it which is executed at power up so the PPC CPU should be at 0xFFF00100
B. I assume the Mediator has no limitations on access of PCI memory or bus mastering
C. The Sonnet card has 3x16MB EDO on it. Here, there seems to be discussion about it should be FPM. On the other hand, above method should work without any memory on the Sonnet.
D. I assume the Mediator can let the Sonnet card access the memory on the Voodoo

Any help?

PS. On point 2 (the infinite loop). What the PCI library does is write al 1’s to the PCI memory registers on every PCI card. The PCI cards respond in setting a mask regarding the length of the PCI memory. The PCI library then tries to find a place for this block inside the PCI memory space. The Sonnet card has an inbound translation window (LMBAR) which is programmed differently. So writing al 1’s to this register gives an invalid response back which isn’t correctly handled by the PCI library.


PrmLibs.lha 04 December 2021:
prometheus.library 4.1
Prometheus.card 7.600
3dfxVoodoo3.chip 7.16
3DLabsPermedia2.chip 7.17

SonnetLibrary.lha 24 October 2021:
powerpc.library 17.13b (no Prometheus support)
powerpc.library 17.14
sources & extras (Aminet upload)
Attached Files
File Type: lha SonnetLibrary.lha (459.3 KB, 188 views)
File Type: lha PrmLibs.lha (32.9 KB, 129 views)

Last edited by Hedeon; 04 December 2021 at 12:23. Reason: Updated libraries
Hedeon is online now  
Page generated in 0.04347 seconds with 11 queries