Guys,

I am having trouble with pointers. I would like to be able to register I/O devices with my bus manager. Currently I have only multibus.c performing this function.

Here are some snippets of the code:

/* Internal I/O address space functions */

extern int32 i8251s(int32 io, int32 data);
extern int32 i8251d(int32 io, int32 data);
extern int32 i8255a(int32 io, int32 data);
extern int32 i8255b(int32 io, int32 data);
extern int32 i8255c(int32 io, int32 data);
extern int32 i8255s(int32 io, int32 data);

/* This is the I/O configuration table.  There are 256 possible
device addresses, if a device is plugged to a port it's routine
address is here, 'nulldev' means no device is available
*/
struct idev {
    int32 (*routine)();
};

struct idev dev_table[256] = {
{&nulldev}, {&nulldev}, {&nulldev}, {&nulldev}, /* 000H */
.........
{&i8255a},{&i8255b},{&i8255c},{&i8255s},                /* 0E4H */
{&nulldev}, {&nulldev}, {&nulldev}, {&nulldev},         /* 0E8H */
{&i8251d},{&i8251s},{&i8251d},{&i8251s},                /* 0ECH */
{&nulldev}, {&nulldev}, {&nulldev}, {&nulldev},         /* 0F0H */
{&nulldev}, {&nulldev}, {&nulldev}, {&nulldev},         /* 0F4H */
{&nulldev}, {&nulldev}, {&nulldev}, {&nulldev},         /* 0F8H */
{&nulldev}, {&nulldev}, {&nulldev}, {&nulldev}          /* 0FCH */
};

int32 nulldev(int32 flag, int32 data)
{
    SET_XACK(0);                        /* set no XACK */
    if (flag == 0)
        return (0xFF);
    return 0;
}

/*this mess gives only a warning in this state */
int32 reg_dev(int32 (*routine)(), int32 port)
{
if (dev_table[port].routine(0, 0) != &nulldev) { /* port already assigned */
        printf("Port %02X is already assigned\n", port);
    } else {
        printf("Port %02X is assigned\n", port);
//        dev_table[port].routine(0, 0) = routine;
    }
}

I would like to be able to call reg_dev with an I/O routine address and the port number, and have it place the address into dev_table[port] IFF dev_table[port] is currently nulldev.

I know I am messing up the pointers horribly. If I remove the ".routine(0, 0)" it errors with dissimilar variables. I have tried all sorts of casts to no avail.

Thanks for your help and don't laugh too hard!

Bill



_______________________________________________
Simh mailing list
[email protected]
http://mailman.trailing-edge.com/mailman/listinfo/simh

Reply via email to