[Contents] [Index] [Help] [Retrace] [browse <] [Browse >]

;/* findboards.c - Execute me to compile me with SAS C 5.10
LC -b1 -cfistq -v -y -j73 findboards.c
Blink FROM LIB:c.o,findboards.o TO findboards LIBRARY LIB:LC.lib,LIB:Amiga.lib
quit
*/
#include <exec/types.h>
#include <exec/memory.h>
#include <libraries/dos.h>
#include <libraries/configvars.h>

#include <clib/exec_protos.h>
#include <clib/expansion_protos.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#ifdef LATTICE
int CXBRK(void) { return(0); }  /* Disable Lattice CTRL/C handling */
int chkabort(void) { return(0); }  /* really */
#endif

struct Library   *ExpansionBase = NULL;

void main(int argc, char **argv)
{
    struct ConfigDev *myCD;
    UWORD m,i;
    UBYTE p,f,t;

    if((ExpansionBase=OpenLibrary("expansion.library",0L))==NULL)
        exit(RETURN_FAIL);

    /*--------------------------------------------------*/
    /* FindConfigDev(oldConfigDev,manufacturer,product) */
    /* oldConfigDev = NULL for the top of the list      */
    /* manufacturer = -1 for any manufacturer           */
    /* product      = -1 for any product                */
    /*--------------------------------------------------*/

    myCD = NULL;
    while(myCD=FindConfigDev(myCD,-1L,-1L)) /* search for all ConfigDevs */
        {
        printf("\n---ConfigDev structure found at location $%lx---\n",myCD);

        /* These values were read directly from the board at expansion time */
        printf("Board ID (ExpansionRom) information:\n");

        t = myCD->cd_Rom.er_Type;
        m = myCD->cd_Rom.er_Manufacturer;
        p = myCD->cd_Rom.er_Product;
        f = myCD->cd_Rom.er_Flags;
        i = myCD->cd_Rom.er_InitDiagVec;

        printf("er_Manufacturer         =%d=$%04x=(~$%4x)\n",m,m,(UWORD)~m);
        printf("er_Product              =%d=$%02x=(~$%2x)\n",p,p,(UBYTE)~p);

        printf("er_Type                 =$%02x",myCD->cd_Rom.er_Type);
        if(myCD->cd_Rom.er_Type & ERTF_MEMLIST)
            printf("  (Adds memory to free list)\n");
        else printf("\n");

        printf("er_Flags                =$%02x=(~$%2x)\n",f,(UBYTE)~f);
        printf("er_InitDiagVec          =$%04x=(~$%4x)\n",i,(UWORD)~i);


        /* These values are generated when the AUTOCONFIG(tm) software
         * relocates the board
         */
        printf("Configuration (ConfigDev) information:\n");
        printf("cd_BoardAddr            =$%lx\n",myCD->cd_BoardAddr);
        printf("cd_BoardSize            =$%lx (%ldK)\n",
               myCD->cd_BoardSize,((ULONG)myCD->cd_BoardSize)/1024);

        printf("cd_Flags                =$%x",myCD->cd_Flags);
        if(myCD->cd_Flags & CDF_CONFIGME)
            printf("\n");
        else printf("  (driver clears CONFIGME bit)\n");
        }
    CloseLibrary(ExpansionBase);
}