• Reading adapter POS registers under AIX on RS/6000

    From Christian Holzapfel@21:1/5 to All on Thu Jan 5 07:00:47 2023
    I couldn't let it sit, and wrote a utility to read out the POS registers of MCA cards on POWER and PowerPC machines:

    https://github.com/holzachr/readpos.aix43

    It uses the MIOCCGET userspace ioctl to access the IOCC address space, which *should* be the cards area.

    When reading the ID first (2 bytes), to detect occupied slots, and then reading the whole POS space (8 bytes), I see the dedicated CD_SETUP# lines of each card being pulled low (active) 10 times.
    I assume this puts the cards in Adapter Set-up mode, so they decode the POS register addresses in I/O 100h-107h properly, allowing to see the actual POS registers (and not just run-time gibberish).

    On my 7006 with a Ultimedia Audio 7-6 dual-world adapter, I could not really relate the POS bits into proper settings as seen in the ADF.
    But it seems generally, when comparing the ADF to the ODM, that this adapter uses a much wider range of possible I/O, interrupts and DMA arbitrations in the POWER world as seen with the x86 architecture.
    In AIX, I/O is 0x100, and on Windows NT selection starts from 0x500.

    Still unsure if this helps finding the POS bit *meanings* of adapters like the 4-4 or others...

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Louis Ohland@21:1/5 to Christian Holzapfel on Thu Jan 5 09:49:16 2023
    I just compared the ODM to ADF for IBM SCSI, and RS/6000 has the ability
    to choose a number of INT, while the PS/2 ADFs totally lack INT, and
    it's set to INT 14. There looks to be DMA settings as well.

    It could be that AIX is a LOT more restrictive on adapters, and there is
    less issues with resource conflicts.

    Christian Holzapfel wrote:
    But it seems generally, when comparing the ADF to the ODM, that this adapter uses a much wider range of possible I/O, interrupts and DMA arbitrations in the POWER world as seen with the x86 architecture.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ryan Alswede@21:1/5 to All on Thu Jan 5 10:42:30 2023
    On my 7006 with a Ultimedia Audio 7-6 dual-world adapter, I could not really relate the POS bits into proper settings as seen in the ADF.

    I built the ADF for the Ultimedia based on the pdf documentation of the bus bridge chip, there was no POS register data at the time and choose that range of I/Os as they matched the Windows Sound system NT source code the closet.

    Does Ultimedia support MIDI? Does it even have a chip on the card for it like sister ISA sound cards? That would be the only reason I'd revisit this project is to add support for that.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From IBMMuseum@21:1/5 to All on Thu Jan 5 11:13:57 2023
    Ryan,

    On my 7006 with a Ultimedia Audio 7-6 dual-world adapter, I could not really relate the POS
    bits into proper settings as seen in the ADF. I built the ADF for the Ultimedia based on the pdf
    documentation of the bus bridge chip, there was no POS register data at the time and choose
    that range of I/Os as they matched the Windows Sound system NT source code the closet.
    Does Ultimedia support MIDI? Does it even have a chip on the card for it like sister ISA sound
    cards? That would be the only reason I'd revisit this project is to add support for that.

    Can you look over https://www.ardent-tool.com/RS6000/rs6000_7-6.html to verify your information is listed as it should be? - Is your site not active now?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ryan Alswede@21:1/5 to All on Thu Jan 5 12:27:31 2023
    Can you look over https://www.ardent-tool.com/RS6000/rs6000_7-6.html to verify your information is listed as it should be?
    Yes that is all the documentation and you have the zip packet for anyone who wants to have the card work in Windows NT.

    - Is your site not active now?
    No I don't plan to bring it back. You've done a great job preserving the work.

    All my spare time and effort is going into the San Remo 100TX card now.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From IBMMuseum@21:1/5 to All on Thu Jan 5 13:37:52 2023
    - Is your site not active now?
    No I don't plan to bring it back. You've done a great job preserving the work.

    The 'Ardent-Tool' is run by Tomas - He can list your site as being down.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Tomas Slavotinek@21:1/5 to IBMMuseum on Sat Jan 7 00:53:48 2023
    On 05.01.2023 22:37, IBMMuseum wrote:
    - Is your site not active now?
    No I don't plan to bring it back. You've done a great job preserving the work.

    The 'Ardent-Tool' is run by Tomas - He can list your site as being down.

    Since the NT Driver page contained only a few lines of actually relevant
    info, I've moved it to the main 7-6 page and rephrased the text for
    clarity. Wayback has a snapshot of Ryan's website, so I've included that
    too. (301 added to keep external links alive)

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Christian Holzapfel@21:1/5 to All on Sun Jan 8 12:12:09 2023
    Anyone ever read from the adapter memory space through userspace ioctls? MIOBUSMEM? Not a single code snippet out there...

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Christian Holzapfel@21:1/5 to Christian Holzapfel on Thu Jan 12 07:13:19 2023
    Christian Holzapfel schrieb am Sonntag, 8. Januar 2023 um 21:12:10 UTC+1:
    Anyone ever read from the adapter memory space through userspace ioctls? MIOBUSMEM? Not a single code snippet out there...

    MIOBUSGET ioctl:

    #include <sys/mdio.h>

    #define swap4bytes(val) ( ((val >> 24) & 0xFF) | ((val >> 8) & 0xFF00) | ((val << 8) & 0xFF0000) | ((val << 24) & 0xFF000000))

    uint readIoWord(int slot, int address)
    {
    MACH_DD_IO mddRecord;
    uint dat = 0;

    /* Decrement slot number found in database */
    slot == (slot--) & 0x0F;

    mddRecord.md_size = 1;
    mddRecord.md_incr = MV_WORD;
    mddRecord.md_data = (char *)&dat;
    mddRecord.md_addr = address;
    mddRecord.md_sla = slot;

    if (ioctl(fd, MIOBUSGET, &mddRecord) < 0)
    {
    fprintf(stderr, "Error in MIOBUSGET ioctl: %s\n", strerror(errno));
    return -1;
    }

    dat = swap4bytes(dat);

    /* printf("Slot %d memory 0x%4.4X data: 0x%8.8X\n", slot, address, dat); */

    return dat;
    }

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)